#!/usr/bin/env fish # set general_help ' A collection of useful functions for provisioning arch/debian linux. Either run a function like ./provision_linux [arg [arg [...]] or source the file and run them as commands: $ source ./provision_linux $ lint [args] Run ./provision_linux to see it\'s definition. ' ### Config ### set -g distro for line in (cat /etc/os-release) set -l items (string split --max 1 '=' $line) if test $items[1] = ID set distro $items[2] end end ### Commands ### function terminal_env -d 'Install base terminal utilities and sync configurations' if test $distro = arch log 'Installing pikaur from AUR' install_pkgs --needed base-devel set -l cwd (pwd) set -l tmp_dir (mktemp --directory) git clone https://aur.archlinux.org/pikaur.git $tmp_dir and cd $tmp_dir and makepkg --clean --install --rmdeps --syncdeps --noconfirm cd $cwd rm -rf $tmp_dir end set -l base_pkgs \ fish \ git \ neovim \ tmux \ rsync \ curl \ fzf \ nnn \ mosh set -l arch_pkgs \ $base_pkgs \ python-neovim \ the_silver_searcher \ bat \ sysz set -l debian_pkgs \ $base_pkgs \ silversearcher-ag log 'Installing base terminal utilities' install_pkgs or return $status log 'Setting m\'s default shell to fish' sudo chsh -s /usr/bin/fish m log 'Running sync script' ./sync --desktop log 'Installing asdf-vm' git clone https://github.com/asdf-vm/asdf.git ~/.asdf and cd ~/.asdf and git checkout (git describe --abbrev=0 --tags) end function desktop_env -d 'Install base desktop utilities and configure theme' set -l base_pkgs \ xclip \ bspwm \ sxhkd \ picom \ feh \ rofi \ wget \ unzip \ physlock \ pipewire \ playerctl \ tar \ xz set -l arch_pkgs \ $base_pkgs \ xorg-server \ xorg-xinit \ ttf-ibm-plex \ ttf-jetbrains-mono \ pavucontrol \ wmname \ pipewire-pulse \ pipewire-alsa \ polybar \ light \ wezterm \ slock set -l debian_pkgs \ $base_pkgs \ xinit \ fonts-ibm-plex \ suckless-tools \ polybar log 'Installing base desktop environment utilities' install_pkgs or return $status log 'Setting xinitrc' echo '#!/bin/sh userresources=$HOME/.Xresources usermodmap=$HOME/.Xmodmap sysresources=/etc/X11/xinit/.Xresources sysmodmap=/etc/X11/xinit/.Xmodmap # merge in defaults and keymaps if [ -f $sysresources ]; then xrdb -merge $sysresources fi if [ -f $sysmodmap ]; then xmodmap $sysmodmap fi if [ -f "$userresources" ]; then xrdb -merge "$userresources" fi if [ -f "$usermodmap" ]; then xmodmap "$usermodmap" fi # start some nice programs if [ -d /etc/X11/xinit/xinitrc.d ] ; then for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do [ -x "$f" ] && . "$f" done unset f fi rm -f $HOME/.bspwm_no_lock exec bspwm' >~/.xinitrc log 'Installing arc-gruvbox theme' mkdir -p ~/.themes xzcat ./oomox-arc-gruvbox.tar.xz | tar --extract --directory=$HOME/.themes if test $distro = debian log 'Installing JetBrains Mono font manually' set -l cwd (pwd) set -l tmp_dir (mktemp --directory) cd $tmp_dir wget -q https://github.com/JetBrains/JetBrainsMono/releases/download/v2.002/JetBrainsMono-2.002.zip and unzip -q JetBrainsMono-2.002.zip and mkdir -p ~/.local/share/fonts/truetype/JetBrainsMono and cp ./ttf/*.ttf ~/.local/share/fonts/truetype/JetBrainsMono/ cd $cwd rm -r $tmp_dir end log 'Setting gtk theme' mkdir ~/.config/gtk-3.0 echo " [Settings] gtk-icon-theme-name = Adwaita gtk-theme-name = oomox-arc-gruvbox gtk-font-name = IBM Plex Sans 11" >~/.config/gtk-3.0/settings.ini end function m_net -d 'Install syncthing and keepassxc' log 'Installing m-net utilities' install_pkgs \ wireguard-tools \ keepassxc \ syncthing or return $status log 'Enabling syncthing service' sudo systemctl enable syncthing@m.service end function libvirt -d 'Provision libvirt and virt-manager' log 'Installing libvirt, qemu, and virt-manager' install_libvirt end function vagrant -d 'Provision vagrant with libvirt' install_libvirt or return $status log 'Installing vagrant and libvirt plugin' set -l arch_pkgs vagrant set -l debian_pkgs vagrant-libvirt install_pkgs or return $status vagrant plugin install vagrant-libvirt end function install_libvirt set -l base_pkgs \ virt-manager \ virt-install \ virt-viewer \ dnsmasq \ dmidecode set -l arch_pkgs \ $base_pkgs \ libvirt \ qemu \ ebtables set -l debian_pkgs \ $base_pkgs \ qemu-system \ libvirt-clients \ libvirt-daemon-system install_pkgs log 'Adding m to libvirt group and enabling libvirtd service' switch $distro case debian sudo adduser m libvirt case arch sudo gpasswd -a m libvirt end sudo systemctl enable libvirtd.service end function install_pkgs -S switch $distro case arch set -l cmd sudo pacman if command -q pikaur set cmd pikaur end $cmd --sync --refresh --sysupgrade --noconfirm and $cmd --sync --noconfirm $arch_pkgs $argv case debian sudo apt-get --quiet --yes update and sudo apt-get --quiet --yes upgrade and sudo apt-get --quiet --yes install $debian_pkgs $argv end end function log -a message echo \n"--- $message ---"\n end # --- execution/help handling --- function help -a function_name -d 'Displays help for internal function' if test -n "$function_name" functions $function_name else echo $general_help end end argparse --ignore-unknown h/help -- $argv if test -n "$_flag_h" help $argv else if test -n "$argv" $argv else echo $general_help end