#!/bin/bash pac_list=( alacritty at automake autopep8 base base-devel bash-completion bash-language-server bc brightnessctl chromium dmidecode entr eslint_d feh firefox-developer-edition firefox-tridactyl firefox-tridactyl-native firefox-tridactyl-native-debug fzf gcc git haskell-language-server haskell-ormolu hsetroot htop httpie jq keepassxc lua-language-server make man-db man-pages neovim nmap nodejs-lts-jod pacman-contrib pandoc-cli pandoc-crossref parallel pass pkgbuild-language-server pnpm sshfs stylelint svelte-language-server tailwindcss-language-server task tldr tmux tmuxp tree tree-sitter-cli ts-node typescript-language-server unzip vim-language-server wget yaml-language-server ) aurpac_list=( hadolint-bin nvm nvimpager paru tmux-bash-completion-git ttf-iosevka-term-ss08 vim-plug vtsls xbanish ) install() { local package="$1" if pacman -Qi "$package" &> /dev/null; then echo "$package is already installed" else echo "Installing " "$package" sudo pacman -S --noconfirm --needed "$package" fi } aurpac() { git clone "https://aur.archlinux.org/$1.git" "$HOME/.build/$1" } install_packages() { announce "Installing packages" local count for pac in "${pac_list[@]}" ; do count=$((count+1)) install "$pac"; done echo "$count packages installed" } install_dotfiles() { announce "Installing dotfiles" origin="https://git.hektormisplon.xyz/hektor/dots" git clone "$origin" "$HOME/dots" cp -r "$HOME/dots/.git" "$HOME/.git" git --git-dir="$HOME/.git" config --local status.showUntrackedFiles no git --git-dir="$HOME/.git" stash -m "[dots]" git --git-dir="$HOME/.git" stash apply git --git-dir="$HOME/.git" restore "$HOME" } install_aur_packages() { announce "Installing AUR packages" local count for package in "${aurpac_list[@]}" ; do if pacman -Qi "$1" &> /dev/null; then echo "$1 is already installed" else count=$((count+1)) aurpac "$package" && makepkg -si -D "$HOME/.build/$package" fi done echo "$count AUR packages installed" } setup_neovim() { announce "Setting up NeoVim" git clone --depth=1 https://github.com/savq/paq-nvim.git \ "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/pack/paqs/start/paq-nvim } setup_keyboard() { announce "Setting up keyboard" install "interception-tools" install "interception-caps2esc" udevmon_config_contents="\ - JOB: intercept -g \$DEVNODE | caps2esc -m 1 | uinput -d \$DEVNODE DEVICE: EVENTS: EV_KEY: [KEY_CAPSLOCK]" if [ -f /etc/interception/udevmon.yaml ] && diff -q <(echo "$udevmon_config_contents") /etc/interception/udevmon.yaml; then echo "udevmon config already exists" echo "$udevmon_config_contents" elif [ -f /etc/interception/udevmon.yaml ]; then echo "interception udevmon.yaml already exists" cat /etc/interception/udevmon.yaml echo "verify if this config matches the one below" echo "$udevmon_config_contents" else echo "interception udevmon.yaml does not exist, creating one" sudo bash -c "echo '$udevmon_config_contents' > /etc/interception/udevmon.yaml" fi sudo systemctl enable --now udevmon.service if pgrep -x caps2esc > /dev/null; then echo "caps2esc is already running" else caps2esc -m 1 fi } configure_gnome() { announce "Configuring Gnome"; setup-gnome } setup_firewall() { announce "Configuring firewalld" install firewalld sudo systemctl enable --now firewalld } setup_docker() { announce "Setting up Docker" install docker install docker-compose sudo systemctl enable --now docker.socket sudo usermod -aG docker "$USER" echo "User added to docker group, please restart your session" } announce() { local message="$1" echo " " echo "[dots] $message" echo " " } confirm() { local question="$1" read -r -p "[dots] $question? [y/N]" -n 1 case "$REPLY" in y|Y ) "$2";; * ) echo "Skipping"; esac } printf '%s\n' "${pac_list[@]}" confirm "Install these packages? " install_packages printf '%s\n' "${aurpac_list[@]}" confirm "Install these AUR packages? " install_aur_packages confirm "Setup NeoVim? " setup_neovim confirm "Install dotfiles? " install_dotfiles confirm "Setup keyboard? " setup_keyboard if pacman -Qi "gdm" &> /dev/null; then confirm "Configure Gnome? " configure_gnome fi confirm "Setup firewall? " setup_firewall confirm "Setup Docker? " setup_docker