archlinux/functions/startup

297 lines
7.3 KiB
Text
Raw Permalink Normal View History

2025-11-22 23:15:27 +00:00
#!/usr/bin/env bash
# AUR package list
aur_list=(
# nomachine
# realvnc-vnc-viewer
# jdownloader2
# ledger-live-bin
# czkawka-gui-bin
)
# Optional packages list
optional=(
firefox firefox-decentraleyes firefox-ublock-origin
ark okular shotwell mpv ffmpegthumbs
veracrypt keepassxc
# nextcloud-client
# ntfs-3g exfatprogs
# libreoffice-fresh
# remmina libvncserver
# torbrowser-launcher
# thunderbird
# filezilla
# chromium
# vlc
# gnome-disk-utility
# xdg-user-dirs
# noto-fonts-cjk
# noto-fonts-emoji
)
function INSTALL
{
sudo pacman --sync ${@} --ask 4
echo
}
# VirtualBox
until [[ ${install_virtualbox} = [yYnN] ]]
do
read -n 1 -p $'\n\e[1mWould you like to install Virtualbox? (y/n): \e[0m' install_virtualbox
[[ ${install_virtualbox} = [yYnN] ]] || echo -e -n '\n\n\e[1;31mNot a valid answer, type "y" or "n"\e[0m'
done
echo
# QEMU
until [[ ${install_qemu} = [yYnN] ]]
do
read -n 1 -p $'\n\e[1mWould you like to install QEMU? (y/n): \e[0m' install_qemu
[[ ${install_qemu} = [yYnN] ]] || echo -e -n '\n\n\e[1;31mNot a valid answer, type "y" or "n"\e[0m'
done
echo
echo
# Package groups installation
INSTALL ${optional[@]}
# Remmina
if [[ ${optional[@]} =~ "remmina" ]] && [ -d ~/.config/sway/config.d/ ]
then
# Remmina passthrough
cat > ~/.config/sway/config.d/zz-remmina <<- 'remmina'
# VNC passthrough
mode remmina {
bindsym Mod4+Shift+p mode default
}
bindsym Mod4+Shift+p mode remmina
remmina
fi
# Tor
if [[ ${optional[@]} =~ "torbrowser-launcher" ]]
then
torbrowser-launcher
fi
# Bluetooth
if pacman -Q | grep -q bluez-utils
then
INSTALL bluedevil
sudo systemctl --quiet enable --now bluetooth.service
fi
# AUR packages
if [ ${#aur_list[@]} -gt 0 ]
then
if ! pacman -Q | grep -q -w git
then
INSTALL git
fi
echo -e '#!/usr/bin/env bash' > ~/.local/functions/aur-packages
for aur_package in ${aur_list[@]}
do
cd
git clone https://aur.archlinux.org/${aur_package}.git
if echo ${aur_package} | grep -q nomachine
then
sed -i 's/_autoservice=n/_autoservice=y/' nomachine/PKGBUILD
sed -i 's/_autofirewall=n/_autofirewall=y/' nomachine/PKGBUILD
fi
cd ${aur_package}/
makepkg -csi
echo
cd ..
rm -r ${aur_package}/ -f
cat >> ~/.local/functions/aur-packages <<- aur
function aur-${aur_package}
{
cd ~/
git clone https://aur.archlinux.org/${aur_package}.git
cd ${aur_package}/
makepkg -csi
echo
cd ~/
rm -r ${aur_package}/ -f
}
aur
done
fi
# Optional AUR extras
# freefilesync
# pdfsam
# fslint pygtk
# Printers
# yay -S --ask 4 print-manager cups system-config-printer skanlite && echo && sudo systemctl --quiet enable --now org.cups.cupsd && sudo gpasswd -a ${USER} sys >/dev/null
# Webcam
# sudo gpasswd -a ${USER} video >/dev/null
# i3
if [ -f ~/.config/i3/config ]
then
cat >> ~/.config/i3/config <<- 'config'
# gaps inner 8
# gaps outer 4
# for_window [class="^.*"] border pixel 2
config
cat > ~/.local/functions/i3-config <<- 'config'
#!/usr/bin/env bash
# i3 config
function i3-config
{
vim ~/.config/i3/config
}
config
if [ -f /usr/share/xsessions/plasma-i3.desktop ]
then
tee -a ~/.config/i3/config >/dev/null <<- 'integration'
# >>> Plasma Integration <<<
# Try to kill the wallpaper set by Plasma (it takes up the entire workspace and hides everything)
exec --no-startup-id wmctrl -c Plasma
for_window [title="Desktop — Plasma"] kill; floating enable; border none
no_focus [class=”plasmashell”]
# Avoid tiling popups, dropdown windows from plasma
for_window [class="plasmashell"] floating enable
for_window [class="Plasma"] floating enable
for_window [class="krunner"] floating enable
for_window [class="Kmix"] floating enable
for_window [class="Klipper"] floating enable
for_window [class="Plasmoidviewer"] floating enable
# >>> Window Rules <<<
# >>> Avoid tiling for non-Plasma stuff <<<
for_window [window_role="pop-up"] floating enable
for_window [window_role="bubble"] floating enable
for_window [window_role="task_dialog"] floating enable
for_window [window_role="Preferences"] floating enable
for_window [window_role="About"] floating enable
for_window [window_type="dialog"] floating enable
for_window [window_type="menu"] floating enable
integration
install /dev/stdin ~/.local/bin/rotate-wallpapers <<- feh
#!/usr/bin/env bash
sleep 1
while true
do
feh --bg-max --randomize /home/${USER}/Pictures
sleep 15
done
feh
else
if ls -l /dev/disk/* | grep -q 'VBOX'
then
echo 'exec VBoxClient-all' >> ~/.config/i3/config
elif ls -l /dev/disk/* | grep -q 'virtio\|QEMU'
then
echo 'exec spice-vdagent' >> ~/.config/i3/config
fi
fi
fi
# Sway nextcloud
if [[ ${optional[@]} =~ "nextcloud-client" ]] && [ -f ~/.config/sway/config.d/zz-sway ]
then
cat > ~/.config/sway/config.d/zz-nextcloud <<- 'nextcloud'
# Nextcloud
exec nextcloud
for_window [title="Nextcloud Settings"] floating enable
nextcloud
fi
# Virtualbox
if [[ ${install_virtualbox} = [yY] ]]
then
echo 'Installing Virtualbox'
if uname -r | grep -q 'lts\|hardened\|zen'
then
host_modules='virtualbox-host-dkms'
else
host_modules='virtualbox-host-modules-arch'
fi
INSTALL virtualbox ${host_modules} virtualbox-guest-iso
echo
sudo gpasswd -a ${USER} vboxusers >/dev/null
echo
if findmnt '/' | grep -q -w 'btrfs'
then
mkdir ~/VirtualBox\ VMs/
chattr +C ~/VirtualBox\ VMs/
fi
fi
# QEMU
if [[ ${install_qemu} = [yY] ]]
then
echo 'Installing QEMU'
INSTALL qemu-desktop virt-manager edk2-ovmf \
dnsmasq dmidecode vde2 bridge-utils
echo
# Make host system a pacman cache server
sudo tee /etc/systemd/system/local-cacheserver.service >/dev/null <<- 'CACHESERVER'
[Unit]
Description=Python HTTP server for Pacman Cache Server
[Service]
ExecStart=/usr/bin/python3 -m http.server --directory /var/cache/pacman/pkg/ 9090
Restart=always
[Install]
WantedBy=multi-user.target
CACHESERVER
# Host iptables rules as a pacman cache server
sudo iptables -I INPUT -s 192.168.0.0/16 -p tcp -m tcp --dport 9090 -j ACCEPT -m comment --comment "Pacman cache server"
sudo sed -i '/## Simple Firewall/i\
# Pacman cache server\
-A INPUT -s 192.168.0.0/16 -p tcp -m tcp --dport 9090 -j ACCEPT -m comment --comment "Pacman cache server"\n' \
/etc/iptables/userinput.rules
sed "/OUTPUT ACCEPT/r /etc/iptables/userinput.rules" /etc/iptables/simple_firewall.rules | sudo tee /etc/iptables/iptables.rules >/dev/null
# QEMU pacman cache service
sudo tee /etc/systemd/system/local-update-virtpkg-cache.service >/dev/null <<- 'service'
[Unit]
Description=Refresh package cache twice daily
[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c "/usr/bin/pacman -Syw -d --ask 4 $(curl --fail -s -L https://git.myvelabs.com/lab/archlinux/raw/branch/master/pkg/qemu)"
service
# QEMU pacman cache timer
sudo tee /etc/systemd/system/local-update-virtpkg-cache.timer >/dev/null <<- 'timer'
[Unit]
Description=Refresh pacman package cache
[Timer]
OnCalendar=*-*-* 00/12:00:00
RandomizedDelaySec=12h
Persistent=true
[Install]
WantedBy=timers.target
timer
# Enable services
sudo systemctl --quiet enable --now libvirtd.service
sudo systemctl --quiet enable local-cacheserver.service local-update-virtpkg-cache.timer
sudo virsh -q net-start default
sudo virsh -q net-autostart default
sudo gpasswd -a ${USER} libvirt >/dev/null
echo
fi
rm -f ${0}
echo -e '\e[1;32mSupplementary installer completed, reboot one last time\e[0m\n'