208 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			208 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
#!/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
 | 
						|
xclip
 | 
						|
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
 |