mirror of
				https://github.com/mitchell/dotfiles.git
				synced 2025-11-03 21:25:26 +00:00 
			
		
		
		
	- Remove keepass config - Cleanup and update qutebrowser config - Update vimrc filetype groups - Update provision_debian
		
			
				
	
	
		
			312 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Fish
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			312 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Fish
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env fish
 | 
						|
# Source: https://github.com/mitchell/run.fish
 | 
						|
 | 
						|
### Config ###
 | 
						|
# Top-level configurations, like function prefixes and argument delimeters
 | 
						|
#
 | 
						|
set -g run_func_prefix 'provision'
 | 
						|
set -g run_arg_delimeter ':'
 | 
						|
 | 
						|
function define_aliases
 | 
						|
end
 | 
						|
 | 
						|
### Commands ###
 | 
						|
# Add, edit, and remove commands freely below.
 | 
						|
# To add a command simply create a function with this naming scheme: {run_func_prefix}_{name}.
 | 
						|
#
 | 
						|
function provision_m_env -d 'Provision m environment (fish, git, neovim, etc.)'
 | 
						|
    log "Provisioning m's environment." head
 | 
						|
 | 
						|
    log 'Installing git, neovim, tmux, rsync, curl, and kitty-terminfo...'
 | 
						|
    sudo apt-get update >/dev/null 2>&1
 | 
						|
    sudo apt-get install --yes \
 | 
						|
        git \
 | 
						|
        neovim \
 | 
						|
        tmux \
 | 
						|
        rsync \
 | 
						|
        curl \
 | 
						|
        kitty-terminfo \
 | 
						|
        >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing fzf, silversearcher, bat, and feh.'
 | 
						|
    sudo apt-get install --yes fzf silversearcher-ag bat feh >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Adding fish apt repo and install fish...'
 | 
						|
    sudo apt-get install --yes gpg >/dev/null 2>&1
 | 
						|
 | 
						|
    echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/3/Debian_10/ /' |
 | 
						|
    sudo tee /etc/apt/sources.list.d/shells:fish:release:3.list
 | 
						|
 | 
						|
    curl -fsSL https://download.opensuse.org/repositories/shells:fish:release:3/Debian_10/Release.key |
 | 
						|
    gpg --dearmor |
 | 
						|
    sudo apt-key add -
 | 
						|
 | 
						|
    sudo apt-get update >/dev/null 2>&1
 | 
						|
    sudo apt-get install --yes fish >/dev/null 2>&1
 | 
						|
 | 
						|
    log "Setting m's default shell to fish"
 | 
						|
    sudo chsh -s /usr/bin/fish m
 | 
						|
 | 
						|
    log 'Running dotfiles sync script.'
 | 
						|
    ./sync
 | 
						|
 | 
						|
    log 'Installing asdf-vm.'
 | 
						|
    git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.7.8 >/dev/null 2>&1
 | 
						|
 | 
						|
    log "Done provisioning m's environment." tail
 | 
						|
end
 | 
						|
 | 
						|
function provision_desktop_env -d 'Provision bspwm based desktop environment'
 | 
						|
    log 'Provisioning desktop environment.' head
 | 
						|
 | 
						|
    log 'Installing window manager and compositor.'
 | 
						|
    sudo apt-get update >/dev/null 2>&1
 | 
						|
    sudo apt-get install --yes bspwm sxhkd picom >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing terminal.'
 | 
						|
    sudo apt-get install --yes kitty >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing panel.'
 | 
						|
    sudo apt-get install --yes xfce4-panel xfce4-pulseaudio-plugin >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing and configuring xinit and xclip.'
 | 
						|
    sudo apt-get install --yes xinit xclip >/dev/null 2>&1
 | 
						|
    echo 'exec bspwm' >~/.xinitrc
 | 
						|
 | 
						|
    log 'Installing browser.'
 | 
						|
    sudo apt-get install --yes qutebrowser >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing application launcher.'
 | 
						|
    sudo apt-get install --yes rofi >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing theme and fonts.'
 | 
						|
    mkdir ./nordic; and cd ./nordic
 | 
						|
    wget -q -O nordic.tar.xz https://github.com/EliverLara/Nordic/releases/download/v1.9.0/Nordic.tar.xz
 | 
						|
    tar -xf ./nordic.tar.xz
 | 
						|
    mkdir ~/.themes
 | 
						|
    mv ./Nordic/ ~/.themes/
 | 
						|
    cd ..; and rm -r ./nordic
 | 
						|
 | 
						|
    sudo apt-get install --yes fonts-ibm-plex unzip >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing desktop background manager.'
 | 
						|
    sudo apt-get install --yes feh >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing screen saver.'
 | 
						|
    sudo apt-get install --yes xfce4-screensaver >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing JetBrainsMono.'
 | 
						|
    mkdir _fonts_tmp
 | 
						|
    cd _fonts_tmp
 | 
						|
 | 
						|
    wget -q https://github.com/JetBrains/JetBrainsMono/releases/download/v2.002/JetBrainsMono-2.002.zip
 | 
						|
    unzip JetBrainsMono-2.002.zip >/dev/null
 | 
						|
    mkdir -p ~/.local/share/fonts/truetype/JetBrainsMono
 | 
						|
    cp ./ttf/*.ttf ~/.local/share/fonts/truetype/JetBrainsMono/
 | 
						|
 | 
						|
    cd ..
 | 
						|
    rm -r _fonts_tmp
 | 
						|
 | 
						|
    log 'Configure GTK theme and font.'
 | 
						|
    mkdir -p ~/.config/gtk-3.0
 | 
						|
    echo "
 | 
						|
[Settings]
 | 
						|
gtk-icon-theme-name = Adwaita
 | 
						|
gtk-theme-name = Nordic
 | 
						|
gtk-font-name = IBM Plex Sans 11" >~/.config/gtk-3.0/settings.ini
 | 
						|
 | 
						|
    log 'Done provisioning desktop environment.' tail
 | 
						|
end
 | 
						|
 | 
						|
function provision_m_net -d 'Provision applications to join m-net'
 | 
						|
    log 'Provisioning m-net.' head
 | 
						|
 | 
						|
    sudo apt-get update >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing keepassxc.'
 | 
						|
    sudo apt-get install --yes keepassxc >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing syncthing.'
 | 
						|
    sudo apt-get install --yes syncthing >/dev/null 2>&1
 | 
						|
    sudo systemctl enable syncthing@m
 | 
						|
 | 
						|
    log 'Done provisioning desktop environment.' tail
 | 
						|
end
 | 
						|
 | 
						|
function provision_libvirt -d 'Provision libvirt and virt-manager'
 | 
						|
    log 'Provisioning Libvirt and KVM.' head
 | 
						|
 | 
						|
    sudo apt-get update >/dev/null 2>&1
 | 
						|
    sudo apt-get install --yes \
 | 
						|
        qemu-system \
 | 
						|
        libvirt-clients \
 | 
						|
        libvirt-daemon-system \
 | 
						|
        virt-manager \
 | 
						|
        >/dev/null 2>&1
 | 
						|
    sudo adduser m libvirt
 | 
						|
 | 
						|
    log 'Done provisioning Libvirt and KVM' tail
 | 
						|
end
 | 
						|
 | 
						|
function provision_vagrant -d 'Provision vagrant with libvirt plugin'
 | 
						|
    log 'Provisioning vagrant and the libvirt provider.' head
 | 
						|
 | 
						|
    sudo apt-get update >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing vagrant from apt'
 | 
						|
    sudo apt-get install --yes vagrant-libvirt libvirt-daemon-system >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing vagrant libvirt provider.'
 | 
						|
    vagrant plugin install vagrant-libvirt
 | 
						|
 | 
						|
    log 'Done provisioning vagrant and libvirt provider.' tail
 | 
						|
end
 | 
						|
 | 
						|
function provision_docker -d 'Provision docker and docker-compose'
 | 
						|
    log 'Provisioning Docker CE and Docker Compose.' head
 | 
						|
 | 
						|
    log 'Installing docker dependencies.'
 | 
						|
    sudo apt-get update >/dev/null 2>&1
 | 
						|
    sudo apt-get install --yes \
 | 
						|
        apt-transport-https \
 | 
						|
        ca-certificates \
 | 
						|
        curl \
 | 
						|
        gnupg-agent \
 | 
						|
        software-properties-common \
 | 
						|
        >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Adding Docker apt repo and install docker-ce.'
 | 
						|
    curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
 | 
						|
 | 
						|
    sudo add-apt-repository \
 | 
						|
        'deb [arch=amd64] https://download.docker.com/linux/debian
 | 
						|
        buster
 | 
						|
        stable'
 | 
						|
 | 
						|
    sudo apt-get update >/dev/null 2>&1
 | 
						|
    sudo apt-get install --yes docker-ce docker-ce-cli containerd.io >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Installing docker-compose.'
 | 
						|
    set uname_m (uname -m)
 | 
						|
    set uname_s (uname -s)
 | 
						|
 | 
						|
    sudo curl \
 | 
						|
        -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$uname_s-$uname_m" \
 | 
						|
        -o /usr/local/bin/docker-compose
 | 
						|
    sudo chmod +x /usr/local/bin/docker-compose
 | 
						|
 | 
						|
    log 'Adding m to docker group.'
 | 
						|
    sudo adduser m docker
 | 
						|
 | 
						|
    log 'Done provisioning Docker CE and Docker Compose.' tail
 | 
						|
end
 | 
						|
 | 
						|
function provision_wireguard -d 'Provision wireguard'
 | 
						|
    log 'Provisioning Wireguard.' head
 | 
						|
 | 
						|
    log 'Installing wireguard and resolvconf.'
 | 
						|
    set uname_r (uname -r)
 | 
						|
 | 
						|
    sudo apt-get update >/dev/null 2>&1
 | 
						|
    sudo apt-get install --yes "linux-headers-$uname_r" >/dev/null 2>&1
 | 
						|
    sudo apt-get install --yes wireguard resolvconf >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Done provisioning Wireguard.' tail
 | 
						|
end
 | 
						|
 | 
						|
function provision_caddy -d 'Provision caddy and disable service'
 | 
						|
    log 'Provisioning Caddy.' head
 | 
						|
 | 
						|
    log 'Adding Caddy repo and installing caddy.'
 | 
						|
    echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" |
 | 
						|
    sudo tee -a /etc/apt/sources.list.d/caddy-fury.list
 | 
						|
 | 
						|
    sudo apt-get update >/dev/null 2>&1
 | 
						|
    sudo apt-get install --yes caddy >/dev/null 2>&1
 | 
						|
 | 
						|
    log 'Disabling and stopping service.'
 | 
						|
    sudo systemctl disable caddy.service
 | 
						|
    sudo systemctl stop caddy.service
 | 
						|
 | 
						|
    log 'Done provisioning Caddy.' tail
 | 
						|
end
 | 
						|
 | 
						|
function log -a message level
 | 
						|
    if test "$level" = head
 | 
						|
        echo "
 | 
						|
###########################################################################################
 | 
						|
#
 | 
						|
#--> $message
 | 
						|
#"
 | 
						|
    else if test "$level" = tail
 | 
						|
        echo "#--> $message
 | 
						|
#
 | 
						|
###########################################################################################
 | 
						|
"
 | 
						|
    else
 | 
						|
        echo -e "#--> $message\n#"
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function main
 | 
						|
    alias $run_func_prefix\_default=$run_func_prefix\_help
 | 
						|
    define_aliases
 | 
						|
 | 
						|
    for command in $argv
 | 
						|
        and execute_command $run_func_prefix $command
 | 
						|
    end
 | 
						|
 | 
						|
    and if test -z "$argv"
 | 
						|
        execute_command $run_func_prefix default
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function execute_command -a prefix command
 | 
						|
    set -l args (string split --max 1 $run_arg_delimeter $command)
 | 
						|
    set -l func $prefix\_$args[1]
 | 
						|
 | 
						|
    define_default_functions $prefix
 | 
						|
 | 
						|
    if functions -q $func
 | 
						|
        $func $args[2]
 | 
						|
    else if test -z "$command"
 | 
						|
        execute_command $prefix default
 | 
						|
    else
 | 
						|
        echo "$prefix command '$command' does not exist"
 | 
						|
        exit 1
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function define_default_functions
 | 
						|
    set -g prefix $argv[1]
 | 
						|
 | 
						|
    function _$prefix\_commands -d 'List all available commands'
 | 
						|
        set -l names (functions --names | grep $prefix\_)
 | 
						|
 | 
						|
        for name in $names
 | 
						|
            set -l details (functions -D -v $name)
 | 
						|
            set -l description $details[5]
 | 
						|
            set -l short_name (string replace $prefix\_ '' $name)
 | 
						|
 | 
						|
            if test (string length $short_name) -ge 8
 | 
						|
                echo $short_name\t$description
 | 
						|
            else
 | 
						|
                echo $short_name\t\t$description
 | 
						|
            end
 | 
						|
        end
 | 
						|
    end
 | 
						|
 | 
						|
    function $prefix\_help -a command -d 'Print help menu or command definition'
 | 
						|
        if test -n "$command"
 | 
						|
            functions $prefix\_$command
 | 
						|
        else
 | 
						|
            echo 'Here are the available commands:'\n
 | 
						|
            _$prefix\_commands
 | 
						|
            echo \n"To see a command's definition do `run help$run_arg_delimeter{command}`"
 | 
						|
            echo "To see a subcommand group's help menu do `run {command}$run_arg_delimeter""help`"
 | 
						|
        end
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
main $argv
 |