# 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. | 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 `sudo` — **not** root. - Outbound HTTPS to `apt.fury.io`, `brave.com`, `cli.github.com`, `github.com`, `raw.githubusercontent.com`, and Ubuntu mirrors. ## Install ```bash 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 ```bash 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 ```bash update # alias: brew upgrade && sudo apt upgrade ``` 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/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 repo** → `apt install wezterm`. 4. **Brave Beta apt repo** → `apt 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 zed → ~/.config/...`; `.config/.ideavimrc → ~/.ideavimrc`; `.zshrc`, `.gitconfig → ~`. 9. **chsh** login shell to zsh. Pre-existing config targets get backed up to `*.pre-install.`, not deleted.