Files
linux-post-install/main.sh
2026-07-20 20:53:56 -05:00

178 lines
5.9 KiB
Bash

#!/bin/bash
# Last updated: 7/4/2026
# This was designed for Linux Mint 22.2; most of it should work for other distros. the desktop-environment.sh code will probably need to be different for anything that's not Cinnamon.
# Some things here require manual install because they aren't in apt repositories, don't have another stable installation source, and I don't want to rely on a static download location.
# These things will all be put into a TODO.md file in the current directory along with brief notes/instructions.
touch todo.md
sudo mkdir -p /usr/local/bin
sudo chmod 755 /usr/local/bin
sudo apt-get update
INSTALL_USER=$(whoami)
#######################
## DEV/PROGRAMMING ##
## ESSENTIAL TOOLS ##
#######################
echo "## dev/programming & essential tools/programs" | tee todo.md -a
echo "* install drivers & such" | tee todo.md -a
# Install some apt packages
sudo apt-get upgrade -y
sudo apt-get install -y curl git jq build-essential unzip tree # for development
sudo apt-get install -y ripgrep # I honestly don't remember why I installed these
# Install Python & uv (package/version manager)
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
# install latest version of python with default `python` and `python3` executables
uv python install --default
# Node.js 24 (with nvm - https://github.com/nvm-sh/nvm)
# also required for pyright language server (neovim)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.5/install.sh | bash
\. "$HOME/.nvm/nvm.sh" # in lieu of restarting the shell
nvm install 24
# install a nerd font (provides special symbols for zsh/starship)
sudo mkdir -p /usr/share/fonts/truetype/DejaVuSansMono/
sudo unzip ./utils/DejaVuSansMono.zip /usr/share/fonts/truetype/DejaVuSansMono/
# zsh (better shell)
sudo apt-get install -y zsh
sudo chsh $INSTALL_USER -s /bin/zsh
cp ./utils/dotzshrc "$HOME/.zshrc"
# zsh nvm lazy loading (so shell doesn't take a million years to start)
git clone https://github.com/lukechilds/zsh-nvm.git "$HOME/.nvm-zsh"
# other install stuff already in .zshrc
# starship (shell prompt)
curl -sS https://starship.rs/install.sh | sudo sh -s -- -y
# echo 'eval "$(starship init zsh)"' | tee "$HOME/.zshrc" -a # should already be in zshrc
mkdir -p "$HOME/.config"
cp ./utils/starship.toml "$HOME/.config/starship.toml"
# Neovim
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz
sudo rm -rf /opt/nvim-linux-x86_64
sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz
rm nvim-linux-x86_64.tar.gz
echo 'export PATH="$PATH:/opt/nvim-linux-x86_64/bin"' | tee "$HOME/.bashrc" -a
git clone https://gitea.jovan04.com/evan/neovim-config "$HOME/.config/nvim"
echo "* install pyright language server (and any other relevant ones)" | tee todo.md -a
# install VS Code
wget "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64" -O "vs-code-linux-x64.deb"
echo "code code/add-microsoft-repo boolean true" | sudo debconf-set-selections
sudo apt-get install -y ./vs-code-linux-x64.deb
rm ./vs-code-linux-x64.deb
echo "* investigate and install other IDE(s)" | tee todo.md -a
# Brave browser
curl -fsS https://dl.brave.com/install.sh | sh
# GitHub SSH keys
echo "* generate new SSH key and add to GitHub?" | tee todo.md -a
# things I'd rather not install but have to
# Discord (chat)
wget "https://discord.com/api/download?platform=linux&format=deb" -O "discord-linux.deb"
sudo apt-get install -y ./discord-linux.deb
rm ./discord-linux.deb
mkdir -p "$HOME/.config/discord"
echo '{ "DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING": true }' | tee "$HOME/.config/discord/settings.json"
echo "* find discord replacement" | tee todo.md -a
# Zoom (video call)
echo "* install Zoom (video call)" | tee todo.md -a
############################
## WORKFLOW/SMALL TOOLS ##
############################
echo "## workflow helpers, small tools, and utilities" | tee todo.md -a
# pbcopy/pbpaste (from macOS)
sudo apt-get install -y xclip
printf '#!/bin/bash \nxclip -selection clipboard' | sudo tee /usr/local/bin/pbcopy
sudo chown 1000:1000 /usr/local/bin/pbcopy
chmod 755 /usr/local/bin/pbcopy
printf '#!/bin/bash \nxclip -selection clipboard -o' | sudo tee /usr/local/bin/pbpaste
sudo chown 1000:1000 /usr/local/bin/pbpaste
chmod 755 /usr/local/bin/pbpaste
# WordNet & def utility
sudo apt-get install -y wordnet
printf '#!/bin/bash \nwn $1 -over' | sudo tee /usr/local/bin/def
sudo chown 1000:1000 /usr/local/bin/def
chmod 755 /usr/local/bin/def
# Artha (WordNet dictionary)
sudo apt-get install -y artha
# qpdf (pdf manipulation)
sudo apt-get install -y qpdf
# rndrmarkdown markdown renderer
sudo apt-get install -y pandoc
sudo cp ./utils/rndrmarkdown /usr/local/bin/rndrmarkdown
sudo chown 1000:1000 /usr/local/bin/rndrmarkdown
sudo chmod 755 /usr/local/bin/rndrmarkdown
echo 'alias rmd="rndrmarkdown"' | tee "$HOME/.bashrc" -a
# readline (for piping 1 line into wc)
printf '#!/bin/bash \necho "$(head -n $1 $2 | tail -n 1)"' | sudo tee /usr/local/bin/rline
sudo chown 1000:1000 /usr/local/bin/rline
chmod 755 /usr/local/bin/rline
# Calc (command-line calculator)
sudo apt-get install -y calc
# OpenSSH server
sudo apt-get install -y openssh-server
# Wine (run windoze apps)
sudo add-apt-repository -y ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install -y wine
# Gpick (color picker)
sudo apt-get install -y gpick
# ksnip (screenshot)
sudo apt-get install -y ksnip
# btop (system resource monitor)
sudo apt-get install -y btop
##########################
## SPECIALTY PROGRAMS ##
##########################
source ./user-programs.sh
###########################
## DESKTOP ENVIRONMENT ##
###########################
# designed & tested on Cinnamon 6.4.8
source ./desktop-env.sh
######################
## REMOVING STUFF ##
######################
source ./removing-stuff.sh
echo "Installation and setup finished. You must log out and log back in for all changes to take effect."
read -p "Press enter to log out."
cinnamon-session-quit --logout --no-prompt