#!/bin/sh PKGS="pipewire pipewire-alsa pipewire-pulse pipewire-jack gst-plugin-pipewire wireplumber wireplumber-docs alsa-utils pacman-contrib man-db freetype2 gst-libav xdg-utils xdg-user-dirs fuse python-urwid btrfs-progs reiserfsprogs chrony ufw wget curl zip unzip p7zip dash mesa rsync cronie connman fakeroot socklog python-pip udevil pavucontrol connman-gtk youtube-dl transmission-cli neovim mpd mpv opendoas zsh clang librewolf shellcheck noto-fonts noto-fonts-emoji noto-fonts-cjk lxappearance qt5ct imagemagick ffmpegthumbnailer python-pywal pulsemixer pamixer papirus-icon-theme python-pdftotext viu bat zathura zathura-cb zathura-djvu zathura-pdf-mupdf sway swaybg swayidle swaylock waybar bemenu-wayland mako wl-clipboard grim slurp xorg-xwayland alacritty gammastep ufw-runit cronie-runit chrony-runit connman-runit" AUR_PKGS="lf mutt-wizard htim jmtpfs tremc-git dashbinsh pfetch sysrq-enabler wlr-randr sfeed" GIT_REPOS=" https://github.com/aarowill/base16-alacritty.git https://github.com/rkubosz/base16-sway.git" GIT_REPOS_DIR="$HOME/.local/src/" #$1 -> repo name to enable #$2 -> mirror list file name in /etc/pacman.d/ (default: mirrorlist) #ex: enable_repo lib32 #ex: enable_repo community mirrorlist-arch enable_repo() { REPO="$1" MIRRORLIST="mirrorlist" [ "$2" ] && MIRRORLIST="$2" if [ $# -gt 0 ] && [ -z "$(grep "$1" /etc/pacman.conf)" ]; then sudo sh -c 'echo "[$REPO]" >> /etc/pacman.conf' sudo sh -c 'echo "Include = /etc/pacman.d/$MIRRORLIST" >> /etc/pacman.conf' sudo sh -c 'echo "" >> /etc/pacman.conf' fi } enable_repos() { #add arch linux repos sudo pacman -S --noconfirm artix-archlinux-support lib32-artix-archlinux-support sudo pacman-key --populate archlinux sudo pacman -Sy #enable lib32 enable_repo lib32 #enable arch community repo enable_repo community mirrorlist-arch #enable artix universe repo if [ -z "$(grep "universe" /etc/pacman.conf)" ]; then sudo sh -c 'echo "[universe]" >> /etc/pacman.conf' sudo sh -c 'echo "Server = https://universe.artixlinux.org/\$arch" >> /etc/pacman.conf' sudo sh -c 'echo "Server = https://mirror1.artixlinux.org/universe/\$arch" >> /etc/pacman.conf' sudo sh -c 'echo "Server = https://mirror.pascalpuffke.de/artix-universe/\$arch" >> /etc/pacman.conf' sudo sh -c 'echo "Server = https://artixlinux.qontinuum.space:4443/universe/os/" >> /etc/pacman.conf' sudo sh -c 'echo "Server = https://mirror1.cl.netactuate.com/artix/universe/\$arch" >> /etc/pacman.conf' sudo sh -c 'echo "" >> /etc/pacman.conf' fi sudo pacman -Sy #install yay for aur support mkdir -p ~/.local/src/ git clone https://aur.archlinux.org/yay.git ~/.local/src/yay/ cd ~/.local/src/yay || return makepkg -si } install_git_repos() { mkdir -p "$GIT_REPOS_DIR" cd "$GIT_REPOS_DIR" for REPO in $GIT_REPOS do git clone "$REPO" done cd - } runit_setup() { VIRTMGR="" WIRELESS="" for arg in "$@" do [ "$arg" = "--virt-manager" ] && VIRTMGR="true" [ "$arg" = "--wireless" ] && WIRELESS="true" done sudo ln -s /etc/runit/sv/ufw /run/runit/service/ sudo ln -s /etc/runit/sv/cronie /run/runit/service/ sudo ln -s /etc/runit/sv/chrony /run/runit/service/ sudo ln -s /etc/runit/sv/connmand /run/runit/service/ sudo ln -s /etc/runit/sv/socklog /run/runit/service/ if [ "$VIRTMGR" ]; then sudo ln -s /etc/runit/sv/libvirtd /run/runit/service sudo ln -s /etc/runit/sv/virtlockd /run/runit/service sudo ln -s /etc/runit/sv/virtlogd /run/runit/service fi if [ "$WIRELESS" ]; then sudo ln -s /etc/runit/sv/tlp /run/runit/service/ sudo ln -s /etc/runit/sv/bluetoothd /run/runit/service/ fi } gaming() { if [ "$1" = "--nvidia" ]; then NVIDIA_GPU="TRUE" elif [ "$1" = "--amd" ]; then AMD_GPU="TRUE" elif [ "$1" = "--intel" ]; then INTEL_GPU="TRUE" else help && exit fi CMD=" -S --noconfirm " [ "$2" = "-R" ] && CMD=" -Rs " [ -z "$(grep "^\[lib32" /etc/pacman.conf)" ] && [ -z "$NVIDIA_GPU" ] && [ -z "$AMD_GPU" ] && [ -z "$INTEL_GPU" ] && help && exit [ "$NVIDIA_GPU" = "TRUE" ] && sudo pacman $CMD nvidia-utils lib32-nvidia-utils [ "$AMD_GPU" = "TRUE" ] && sudo pacman $CMD vulkan-radeon lib32-vulkan-radeon [ "$INTEL_GPU" = "TRUE" ] && sudo pacman $CMD vulkan-intel lib32-vulkan-intel sudo pacman $CMD vulkan-mesa-layers lib32-vulkan-mesa-layers sudo pacman $CMD wine-staging winetricks sudo pacman $CMD giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap gnutls lib32-gnutls mpg123 lib32-mpg123 openal lib32-openal v4l-utils lib32-v4l-utils libpulse lib32-libpulse alsa-plugins lib32-alsa-plugins alsa-lib lib32-alsa-lib libjpeg-turbo lib32-libjpeg-turbo libxcomposite lib32-libxcomposite libxinerama lib32-libxinerama ncurses lib32-ncurses opencl-icd-loader lib32-opencl-icd-loader libxslt lib32-libxslt libva lib32-libva gtk3 lib32-gtk3 gst-plugins-base-libs lib32-gst-plugins-base-libs vulkan-icd-loader lib32-vulkan-icd-loader cups samba dosbox sudo pacman $CMD gamemode lib32-gamemode sudo pacman $CMD lutris steam } virt_manager() { echo "install virt-manager?(y/N)" read -r input if [ "$input" = "y" ] || [ "$input" = "Y" ]; then sudo pacman -S --noconfirm sudo pacman -S libvirt qemu virt-manager lxsession sudo pacman -S --noconfirm gst-plugins-good libvirt-runit #TODO move this to runit_setup sudo usermod -G libvirt -a "$USER" fi runit_setup --virt-manager } ungoogled_chromium() { CMD=" --noconfirm -S " [ "$1" = "-R" ] && CMD=" -Rs " sudo pacman "$CMD" ffmpeg4.4 sudo pacman "$CMD" ungoogled-chromium sudo pacman "$CMD" ublock-origin yay "$CMD" aur/chromium-extension-web-store yay "$CMD" aur/chromium-widevine } wireless() { sudo pacman -S --noconfirm wpa_supplicant bluez bluez-utils tlp sudo pacman -S --noconfirm wpa_supplicant-runit tlp-runit runit_setup --wireless } configure() { #setup home directories mkdir ~/docs/ mkdir ~/dl/ mkdir ~/media/ mkdir -p ~/.local/share/gnupg/ mkdir -p ~/.config/mpd/playlists mkdir -p ~/.local/share/desktop #setup ufw sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow http sudo ufw allow https #sudo ufw allow ssh sudo ufw allow ntp sudo ufw allow 67:68/tcp sudo ufw allow 53 #allow torrent client traffic sudo ufw allow 56881:56889/tcp #rules to allow steam sudo ufw allow 27000:27036/udp sudo ufw allow 27036:27037/tcp sudo ufw allow 4380/udp sudo ufw enable #install zsh shell chsh -s /bin/zsh "$USER" #setup .zprofile and zsh history file cd ~ || return ln -s ~/.profile ~/.zprofile mkdir -p ~/.cache/zsh touch ~/.cache/zsh/history #replace sudo with doas echo "installing doas, symlinking to sudo, and UNINSTALLING SUDO. sudo is uninstalled using doas so permissions should be setup right if you are able to uninstall. (y/N)" read input if [ "$input" = "y" ]; then echo "permit persist $USER as root" >> ~/.cache/doas.conf sudo cp ~/.cache/doas.conf /etc/doas.conf rm ~/.cache/doas.conf doas pacman -R sudo && doas ln -s /bin/doas /bin/sudo #TODO ARCH SPECIFIC fi #set limits for esync sudo sh -c "echo '$USER hard nofile 524288' >> /etc/security/limits.conf" #set limits for monero sudo sh -c "echo '$USER hard memlock 2048' >> /etc/security/limits.conf" sudo sh -c "echo '$USER hard memlock 2048' >> /etc/security/limits.conf" sudo groupadd nogroup #needed to use slock #fix issue with arduino ide and tiling wms sudo sh -c 'echo "export _JAVA_AWT_WM_NONREPARENTING=1" >> /etc/profile.d/jre.sh' #set console terminal font sudo sh -c 'echo "FONT=Lat2-Terminus16" >> /etc/vconsole.conf' #set grub theme sudo sed -i 's/#GRUB_COLOR_NORMAL/GRUB_COLOR_NORMAL/g' /etc/default/grub sudo sed -i 's/#GRUB_COLOR_HIGHLIGHT/GRUB_COLOR_HIGHLIGHT/g' /etc/default/grub #download collapse OS mkdir -p "$HOME"/.local/src/ cd "$HOME"/.local/src/ wget http://collapseos.org/files/collapseos-latest.tar.gz cd - #set wallpaper ln -s ~/media/img/wallpapers/alena-aenami-eclipse-1k.jpg ~/.config/wall #link Xresources for xwayland ln -s ~/.config/Xresources ~/.Xdefaults #set /tmp to tmpfs if [ -z "$(grep "/tmp" /etc/fstab)" ]; then sudo sh -c 'echo "tmpfs /tmp tmpfs rw,nodev,nosuid,size=2G 0 0" >> /etc/fstab' fi } base() { #enable repos (lib32, community, and universe) and install yay enable_repos #install all packages in $PKGS echo "$PKGS" | pacman -S - #installl all packages in $AUR_PKGS echo "$AUR_PKGS" | yay -S - #setup local git repos defined in $GIT_REPOS to $GIT_REPOS_DIR install_git_repos #runit configuration runit_setup #configure programs, directories, change shell, etc configure #install microcode for CPU echo "enter CPU type to install microcode for (amd intel)" read input if [ "$input" = "amd" ]; then sudo pacman -S amd-ucode elif [ "$input" = "intel" ]; then sudo pacman -S intel-ucode fi #rebuild kernel after install for microcode sudo mkinitcpio -P #rebuild kernel sudo grub-mkconfig -o /boot/grub/grub.cfg #update grub echo "installation finished" } BASE="" GAMING="" WIRELESS="" UNGOOGLED_CHROMIUM="" VIRT_MANAGER="" for arg in "$@" do [ "$arg" = "--base" ] && BASE="true" [ "$arg" = "--gaming" ] && GAMING="true" [ "$arg" = "--virt-manager" ] && VIRTMGR="true" [ "$arg" = "--wireless" ] && WIRELESS="true" [ "$arg" = "--ungoogled-chromium" ] && UNGOOGLED_CHROMIUM="true" done [ "$BASE" ] && base [ "$GAMING" ] && gaming [ "$WIRELESS" ] && wireless [ "$UNGOOGLED_CHROMIUM" ] && ungoogled_chromium "$@" [ "$VIRT_MANAGER" ] && virt_manager