#!/bin/sh # Helper methods, actual script starts at line :110 deb_install() { file=$1 path=~/Downloads/$1 url=$2 download_file $file $url \ && __install_deb } deb_git_install() { file=$1 path=~/Downloads/$1 repo=$2 regex=$3 download_git_release $file $repo $regex \ && __install_deb } __install_deb() { sudo apt -f install $path \ && rm $path } tar_install() { file=$1 path=~/Downloads/$2 url=$3 strip="${4:-1}" # If no strip param is given assume a strip level of 1 is_proper="${5:-"false"}" download_file $file $url \ && __install_tar $is_proper } tar_git_install() { file=$1 path=~/Downloads/$2 repo=$3 regex=$4 strip="${5:-1}" # If no strip param is given assume a strip level of 1 is_proper="${6:-"false"}" download_git_release $file $repo $regex \ && __install_tar $is_proper } __install_tar() { is_proper=$1 output=~/.local/lib/$file if [ "$is_proper" = "true" ]; then output=~/.local fi mkdir -p ~/.local/lib/$file \ && mkdir -p ~/.local/bin \ && tar -xaf $path -C $output --strip-components=$strip \ && rm $path \ && if [ "$is_proper" = "false" ]; then __link_lib_binary; fi } __link_lib_binary() { if [ -s ~/.local/lib/$file/$file ]; then ln -s ~/.local/lib/$file/$file ~/.local/bin/$file elif [ -s ~/.local/lib/$file/bin/$file ]; then ln -s ~/.local/lib/$file/bin/$file ~/.local/bin/$file else echo "No binary found!" 1>&2 fi } java_install() { archive=~/Downloads/java-$1.tar.gz download_git_release "java-${1}.tar.gz" "adoptium/temurin${1}-binaries" "OpenJDK${1}U-jdk_x64_linux_hotspot_.*tar\.gz" \ && sudo mkdir /usr/lib/jvm/java-$1-temurin \ && sudo tar -xf $archive -C /usr/lib/jvm/java-$1-temurin --strip-components 1 \ && rm $archive } asdf_plugin() { plugin=$1 repo=$2 version="${3:-latest}" asdf plugin add $plugin $repo \ && asdf install $plugin $version \ && asdf global $plugin $version } download_git_release() { file=$1 repo=$2 regex=$3 get_git_release_url $repo $regex \ && download_file $file $url } download_file() { path=~/Downloads/$1 url=$2 wget --show-progress -qO $path $url } get_git_release_url() { repo=$1 regex=$2 url=$(curl -s https://api.github.com/repos/$repo/releases/latest \ | grep -P "browser_download_url.*${regex}\"" \ | cut -d : -f 2,3 \ | tr -d \") } # Actual install list # Mostly for wine sudo dpkg --add-architecture i386 # GPG Keys sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key # wine # Adding Repositories sudo mkdir -pm755 /etc/apt/keyrings sudo add-apt-repository -y universe sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key sudo apt update -yqq export PATH=$PATH:/home/$USER/.local/bin # Core packages="make cmake autoconf xclip coreutils git apt-transport-https ca-certificates curl wget gnupg lsb-release coreutils sed build-essential \ libssl-dev libudev-dev libyaml-dev libconfig libfontconfig-dev libncurses-dev libdbus-1-dev libxcb1-dev libxrandr2 lld \ firefox git python3-pip zsh mpv figlet lolcat sqlitebrowser flatpak nala tmux filezilla \ ffmpeg libavcodec-extra ubuntu-restricted-extras \ gnome-shell-extensions gnome-tweak-tool gnome-menus gnome-user-share dconf-editor gparted alacarte \ nemo nemo-fileroller nemo-gtkhash \ pavucontrol gimp inkscape flameshot \ steam ckb-next lutris discord wine-devel winetricks \ qemu qemu-kvm virt-manager " # Bit crude but it works and if there's any package that cannot be installed it won't fail the entire list # This _might_ be an apt only issue since -m / --ignore-missing flag doesn't seem to work # will update if I ever switch to a different package manager for pkg in $packages; do sudo apt install -yqqm $pkg done sudo apt upgrade -yqq # Set ZSH as default chsh -s $(which zsh) # QEMU / VMM sudo usermod -aG libvirt,kvm $USER # Flatpak flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo packages="flathub com.github.tchx84.Flatseal \ com.github.Eloston.UngoogledChromium \ org.prismlauncher.PrismLauncher \ com.github.finefindus.eyedropper \ com.usebottles.bottles \ com.obsproject.Studio \ org.qbittorrent.qBittorrent \ io.bassi.Amberol \ org.kde.kdenlive " # Same as above but this time there aint even a broken flag for it, it just hard fails at the first # wrong package, why do people like flatpaks ? for pkg in $packages; do flatpak install -yu $pkg done # Cargo # Note, cargo doesn't have the above issue, if a package is not found, it just skips it # and tells you a package failed to install, yet another reason why rust is superior curl https://sh.rustup.rs -sSf | sh cargo install -q onefetch eza fd-find tokei alacritty stylua git-delta du-dust \ mdbook mdbook-admonish mdbook-tera stylua dprint cargo install --features lsp taplo-cli rustup component add rust-src rust-analyzer # DEB Installs deb_install Insomnia.deb "https://updates.insomnia.rest/downloads/ubuntu/latest?&app=com.insomnia.app&source=website" deb_install OnlyOffice.deb "https://download.onlyoffice.com/install/desktop/editors/linux/onlyoffice-desktopeditors_amd64.deb" deb_install JDGUI.deb "https://github.com/java-decompiler/jd-gui/releases/download/v1.6.6/jd-gui-1.6.6.deb" deb_install Minecraft.deb "https://launcher.mojang.com/download/Minecraft.deb" deb_git_install fastfetch.deb "fastfetch-cli/fastfetch" "fastfetch-linux-amd64.deb" deb_git_install rg.deb "BurntSushi/ripgrep" "ripgrep_\d+.\d+.\d+-\d+_amd64\.deb" deb_git_install blockbench.deb "JannisX11/blockbench" "Blockbench_\d+.\d+.\d+.deb" # TAR Installs # Zig's case is special mostly because they don't have the 0.13 builds on github so no tar_git_install for that sadly tar_install "zig" "zig.tar.xz" "https://ziglang.org/builds/zig-linux-x86_64-0.13.0-dev.340+d750a78b2.tar.xz" tar_install "nvim" "nvim.tar.xz" "https://github.com/neovim/neovim/releases/download/v0.10.0/nvim-linux64.tar.gz" 1 "true" tar_git_install "btop" "btop.tbz" "aristocratos/btop" "btop-x86_64-linux-musl.tbz" 2 # asdf git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0 . ~/.asdf/asdf.sh asdf_plugin erlang "https://github.com/asdf-vm/asdf-erlang" asdf_plugin elixir "https://github.com/asdf-vm/asdf-elixir" asdf_plugin nodejs "https://github.com/asdf-vm/asdf-nodejs" asdf_plugin lua-language-server "https://github.com/bellini666/asdf-lua-language-server" asdf_plugin ruby "https://github.com/asdf-vm/asdf-ruby" asdf_plugin lua "https://github.com/Stratus3D/asdf-lua" # npm global installs npm i -g bash-language-server vscode-langservers-extracted pyright prettier sass # pip installs pip install --user ruff # Antigen curl -L git.io/antigen > ~/antigen.zsh # Starship prompt curl -sS https://starship.rs/install.sh | sh # Nerd Fonts wget -qO ~/Downloads/FiraCode.zip https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/FiraCode.zip unzip ~/Downloads/FiraCode.zip "*.ttf" "*.otf" -d ${HOME}/.fonts wget -qO ~/Downloads/JetBrainsMono.zip https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/JetBrainsMono.zip unzip ~/Downloads/JetBrainsMono.zip "*.ttf" "*.otf" -d ${HOME}/.fonts sudo fc-cache -f -v # Special font for figlet sudo wget -O "/usr/share/figlet/Red Phoenix.flf" "https://raw.githubusercontent.com/xero/figlet-fonts/master/Red%20Phoenix.flf" # OpenRGB udev rules wget -O ~/Downloads/openrgb.sh https://openrgb.org/releases/release_0.9/openrgb-udev-install.sh \ && sudo u+x ~/Downloads/openrgb.sh \ && ~/Downloads/openrgb.sh \ && rm ~/Downloads/openrgb.sh # Docker wget -O ~/Downloads/getdocker.sh "https://get.docker.com" \ && chmod u+x ~/Downloads/getdocker.sh \ && ~/Downloads/getdocker.sh \ && sudo groupadd docker \ && sudo usermod -aG docker $USER \ && sudo systemctl enable docker.service containerd.service \ && rm ~/Downloads/getdocker.sh # Java sudo mkdir -p /usr/lib/jvm java_install 8 java_install 17 java_install 21 # Set Nemo as default xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search # Disable automated sleep (only for desktop and plugged in laptops) gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing' # nightlight gsettings set org.gnome.settings-daemon.plugins.color night-light-enabled 'true' gsettings set org.gnome.settings-daemon.plugins.color night-light-temperature 2800 # gsettings for clock format gsettings set org.gnome.desktop.interface clock-format '24h' gsettings set org.gnome.desktop.interface clock-show-seconds 'true' gsettings set org.gnome.desktop.interface clock-show-weekday 'true' # gsetting for keybindings gsettings set org.gnome.settings-daemon.plugins.media-keys terminal '[]' # unbound the terminal key as we're gonna override it gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/']" # gsetting for gnome shell gsettings set org.gnome.shell.extensions.dash-to-dock isolate-workspaces 'true' # pop os' dock to only show icons from the currently active workspace gsettings set org.gnome.shell.app-switcher current-workspace-only 'true' # alt+tab switcher showing only apps from the current workspace if [ -e "./dot.py" ]; then ./dot.py --deploy fi