dotfiles/install/README.md

3.7 KiB

Pop!_OS / Ubuntu install

A small, idempotent installer that gets a fresh Pop!_OS 24.04 (or any Ubuntu 24.04 / Debian-derivative) to the state these dotfiles assume.

Two-tier strategy

Source What lives there Why
apt zsh, git, curl, build-essential, python3, python3-pip, python3-venv, luarocks, wl-clipboard, wezterm, brave-browser-beta System base, Mason prerequisites, and GUI vendor apps. Vendor apt repos auto-update Brave/WezTerm with apt upgrade.
Homebrew fzf fd bat eza zoxide ripgrep tmux neovim lazygit starship gh zsh-syntax-highlighting zsh-autosuggestions CLI toolchain. Ubuntu 24.04's apt versions are frozen at April 2024; brew always has latest. One brew upgrade updates all of them.
nvm Node.js runtime Installs the latest LTS release and sets it as the default; .zshrc sources ~/.nvm/nvm.sh.
tpm tmux plugin manager Clone of tmux-plugins/tpm so the bundled tmux.conf works on first launch.

Downloaded installer scripts, apt signing keys, and the Nerd Font archive are pinned and verified before use. Updating their upstream versions requires updating the corresponding SHA-256 hashes or fingerprints in install/lib/.

GitHub-release-binary downloads (the previous approach for nvim/lazygit/ starship) have been retired — they ran latest at install time then went stale. Brew solves that.

Environment required

  • Pop!_OS 24.04 (or Debian/Ubuntu derivative) — preflight aborts if apt-get is missing.
  • A regular user with sudonot root.
  • Outbound HTTPS to apt.fury.io, brave.com, cli.github.com, github.com, raw.githubusercontent.com, and Ubuntu mirrors.

Install

git clone https://github.com/brianpooe/dotfiles.git ~/dotfiles
~/dotfiles/install/install.sh

Then open a new terminal (or log out + back in) so the new login shell takes effect.

Flags

install/install.sh                  # full install
install/install.sh --packages-only  # apt + brew + nvm + tpm, skip symlinks
install/install.sh --dotfiles-only  # symlink + chsh + tpm + nvm, skip packages
install/install.sh --help

Keeping current

update                  # alias: brew upgrade && sudo apt update && sudo apt upgrade -y

The CLI tools come from brew, so they stay on bleeding-edge stable. Brave and WezTerm come from vendor apt repos so apt upgrade always has the latest of those too.

Layout

install/
  install.sh           entry point
  Brewfile             CLI toolchain bundle (brew owns these)
  lib/common.sh        helpers: apt_install, add_apt_repo, backup_and_link
  lib/packages.sh      apt base + WezTerm + Brave Beta vendor repos
  lib/brew.sh          install Homebrew + `brew bundle`
  lib/extras.sh        nvm + tpm
  lib/fonts.sh         verified JetBrainsMono Nerd Font install
  lib/dotfiles.sh      symlink dotfiles + chsh zsh

What the installer does, in order

  1. preflight — verify apt + not-root + sudo + curl.
  2. apt base — system packages plus Mason's Python venv/pip and LuaRocks prerequisites.
  3. WezTerm apt repoapt install wezterm.
  4. Brave Beta apt repoapt install brave-browser-beta.
  5. Homebrew install (NONINTERACTIVE) + brew bundle against Brewfile.
  6. nvm (pinned $NVM_VERSION, default v0.40.1) + latest LTS Node.js.
  7. tpm clone to ~/.tmux/plugins/tpm.
  8. Symlink nvim tmux starship lazygit wezterm → ~/.config/...; .config/.ideavimrc → ~/.ideavimrc; .zshrc, .gitconfig → ~; dotfiles-apply-theme → ~/.local/bin/.
  9. chsh login shell to zsh.

Pre-existing config targets get backed up to *.pre-install.<timestamp>, not deleted.