Commit graph

11 commits

Author SHA1 Message Date
c3cd129478 feat: manage bat and Claude Code configs; add --unlink mode
- New managed configs: .config/bat (ANSI theme so bat follows the
  terminal palette) and .claude/settings.json, with a .gitignore guard
  so only settings.json under .claude/ is trackable.
- dotfiles.sh: drive linking from a single link map and add
  unlink_dotfiles; install.sh grows --unlink to cleanly remove every
  symlink pointing into the repo.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 21:17:37 +02:00
Brian Pooe
db49fc1a56 feat: harden dotfiles installer and add automated validation 2026-06-11 20:38:19 +02:00
Brian Pooe
394a9af367 fix: align setup with Pop!_OS toolchain 2026-06-11 18:37:16 +02:00
Claude
d7bb34e1ef
fix(install): install JetBrainsMono Nerd Font
The configs (wezterm.lua font, starship symbols, eza icons) assume
'JetBrainsMono Nerd Font', which was an Arch package in the old setup.
Ubuntu's fonts-jetbrains-mono is the plain family without Nerd glyphs,
so WezTerm fell back to a default font and warned on every launch.

lib/fonts.sh downloads the official nerd-fonts release tarball into
~/.local/share/fonts/JetBrainsMonoNerdFont and runs fc-cache. Skips if
fc-list already reports the family. fontconfig added to the apt base
list for fc-list/fc-cache.
2026-06-11 15:27:38 +00:00
Claude
096c3c8afa
feat(install): switch to Homebrew for the CLI toolchain
Ubuntu 24.04's apt versions of fzf/fd/bat/eza/zoxide/ripgrep/tmux/nvim/
lazygit/starship are frozen at April 2024 — and the previous GitHub-
release downloads went stale the moment you stopped re-running the
installer. Homebrew on Linux fixes both: always-latest releases and a
single 'brew upgrade' to update the whole CLI stack.

Two-tier install:
  apt   - zsh + base plumbing + WezTerm (vendor repo) + Brave Beta
          (vendor repo). Vendor repos auto-update via 'apt upgrade'.
  brew  - fzf fd bat eza zoxide ripgrep tmux neovim lazygit starship
          gh zsh-syntax-highlighting zsh-autosuggestions
  nvm   - official installer (pinned NVM_VERSION)
  tpm   - tmux plugin manager clone

New files:
  install/Brewfile - bundle for 'brew bundle'
  install/lib/brew.sh - Homebrew bootstrap + brew bundle
  install/lib/extras.sh - nvm + tpm
  install/install.sh - rewired entry point with --packages-only,
    --dotfiles-only, --help
  install/README.md - new docs for the two-tier strategy

.zshrc:
  - Source brew shellenv first when present, so brew bins win on PATH
  - 'update' alias now: brew upgrade && sudo apt update && sudo apt upgrade
    (previously apt-only; before that pacman-only)

Drops install/lib/packages.sh entries that the now-Brewfile-managed tools
duplicated, and removes the GitHub-release tarball install path.
2026-06-10 16:54:47 +00:00
Claude
d1a289d6ce
feat: pivot installer from Arch+Hyprland to Pop!_OS / Debian apt
User switched from Arch to Pop!_OS 24.04 (Cosmic DE). The previous install/
directory was an Arch+Hyprland desktop scaffold (pacman, yay, Hyprland,
hyprlock, waybar, rofi, swaync, swww, hypridle, swayosd, GTK theming,
wallpapers, etc.) — none of that applies on Pop!_OS where Cosmic provides
the desktop. Wiped the whole tree.

New install/ is a small apt-based tool installer for these dotfiles:

  install.sh           entry: full / --packages-only / --dotfiles-only
  lib/common.sh        helpers (apt_install, apt_update_once, signed repo
                       adder, backup_and_link)
  lib/packages.sh      apt packages + third-party apt repos
  lib/extras.sh        GitHub-release binaries + nvm + tpm
  lib/dotfiles.sh      symlinks + chsh zsh

What it installs:
- apt: zsh + plugins, tmux, fzf, fd-find, bat, eza, zoxide, ripgrep, git,
  curl, build-essential, wl-clipboard
- Signed third-party apt repos: WezTerm (apt.fury.io/wez),
  Brave Beta (brave.com), GitHub CLI (cli.github.com)
- GitHub releases (apt versions too old / absent): Neovim, Lazygit, Starship
- Per-user: nvm, tpm
- Compat shims: /usr/local/bin/fd -> fdfind, /usr/local/bin/bat -> batcat
  so the dotfiles' env vars (FZF_DEFAULT_COMMAND='fd ...') resolve

.zshrc updated for Debian:
- zsh-syntax-highlighting and zsh-autosuggestions now try the
  /usr/share/<name>/<name>.zsh Debian path first, fall back to the Arch
  /usr/share/zsh/plugins/<name>/<name>.zsh path
- fzf bindings/completion fall back: /usr/share/doc/fzf/examples/* first
  (apt), then /usr/share/fzf/* (Arch)
- 'update' alias: pacman -Syu -> sudo apt update && sudo apt upgrade -y

README updated to reflect the Pop!_OS target.
2026-06-10 16:33:47 +00:00
Claude
b6d422c774
feat(install): auto-detect VirtualBox and apply guest fixes
Adds lib/vbox.sh that runs systemd-detect-virt and, on VirtualBox guests:
  - installs virtualbox-guest-utils + enables vboxservice
  - links files/hypr/vbox.conf into ~/.config/hypr/ which sets
    WLR_NO_HARDWARE_CURSORS=1, WLR_RENDERER_ALLOW_SOFTWARE=1,
    LIBGL_ALWAYS_SOFTWARE=1 and overrides the monitor rule to
    preferred mode (3440x1440@120 doesn't exist in VBox)

On bare metal an empty stub is linked instead, so the source= line in
hyprland.conf always resolves.

README adds a 'Testing in VirtualBox first' section listing the host-side
VBox settings (3D Acceleration on, 128MB video mem, VMSVGA, 8GB RAM, 40GB
disk) and the known-broken pieces (bluetooth, gpu-screen-recorder).
2026-06-09 16:03:06 +00:00
Claude
115c606e3b
feat(install): add 12 standard Hyprland community tools
Packages added:
  pacman: swww swaync cliphist satty gpu-screen-recorder xdg-user-dirs
          udiskie gnome-keyring libsecret nwg-look qt6ct kvantum-qt{5,6}
          gnome-themes-extra adwaita-icon-theme adwaita-cursors
  AUR:    swayosd-git bibata-cursor-theme-bin

Configs added:
  hypr/hypridle.conf - 2m dim, 5m lock, 10m screen-off, 30m suspend
  hypr/env.conf - cursor + GTK theme env (Bibata, Adwaita-dark)
  swaync/config.json + style.css - Kanagawa notification center
  gtk-3.0/settings.ini + gtk-4.0/settings.ini - Adwaita-dark + Bibata

Swaps:
  mako -> swaync (notifications + center panel)
  hyprpaper -> swww (animated transitions, same bundled image)

New keybinds:
  Super+Shift+V        cliphist clipboard history via rofi
  Super+N              toggle swaync notification center
  Super+Shift+N        clear all notifications
  Super+Ctrl+R         start screen recording (focused monitor -> ~/Videos)
  Super+Ctrl+Shift+R   stop recording
  Print / Shift+Print  region/full screenshot -> satty -> ~/Pictures/screenshots
  Ctrl+Print           region screenshot -> clipboard only
  Volume/brightness keys now route through swayosd for on-screen feedback
  Caps Lock OSD via swayosd

Autostart additions: swww-daemon + initial swww img, swaync, swayosd-server,
cliphist text+image watchers, hypridle (with real config), udiskie --tray,
gnome-keyring-daemon.

Init:
  apply_desktop_settings() now sets gsettings (gtk-theme, color-scheme,
    cursor-theme, monospace font) and runs xdg-user-dirs-update
  services.sh enables swayosd-libinput-backend + user gnome-keyring-daemon
2026-06-09 15:50:58 +00:00
Claude
0499624bc3
refactor(install): bundle wallpaper in repo, drop install-time download
The previous wallpaper.sh probed wallhaven URLs at install time and
generated hyprpaper.conf dynamically — fragile in low-connectivity
environments and adds a step that has nothing to do with config.

Simpler model:
- install/files/wallpapers/default.jpg — bundled wallpaper (binary in repo)
- install/files/hypr/hyprpaper.conf — static, points to ~/.config/hypr/wallpapers/default.jpg
- install/files/bin/fetch-wallpaper — one-shot helper to populate the bundled
  image from a URL (default: wallhaven.cc/w/2133ly). Run once, git add+commit,
  every subsequent install gets the wallpaper offline.
- lib/hyprland.sh: symlinks both files; warns if the bundled image is missing
- lib/wallpaper.sh: removed

Note: this sandbox cannot reach wallhaven (host_not_allowed), so I cannot
include the actual JPG in this commit. Run fetch-wallpaper on your Arch box
then commit install/files/wallpapers/default.jpg.
2026-06-09 15:36:16 +00:00
Claude
0e803e7366
feat(install): set wallhaven 2133ly as default wallpaper
- lib/wallpaper.sh: downloads the default wallpaper at install time
  (tries .jpg then .png against the wallhaven CDN path) into
  ~/.config/hypr/wallpapers/default.<ext> and writes hyprpaper.conf
  pointing at it
- Override the source with WALLPAPER_URL=<direct-image-url> or just the
  URL stem with WALLPAPER_URL_BASE
- Existing hyprpaper.conf is backed up to .pre-install.<timestamp>
  unless it's already ours (marker comment)
- files/hypr/autostart.conf: exec-once = hyprpaper
- install.sh: wire setup_wallpaper into do_dotfiles_and_config

Tried to fetch from this sandbox to verify the extension but wallhaven
blocks datacenter IPs (403); the installer probes .jpg first then .png
when it actually runs on a residential network.
2026-06-09 15:32:47 +00:00
Claude
ec6be909c5
feat: replace Omarchy layer with plain Arch + Hyprland installer
Drops the omarchy/ directory and adds install/ - a direct Arch + Hyprland
installer oriented around these dotfiles, no framework on top:

- install/install.sh: entry point with --packages-only / --dotfiles-only
- install/lib/{common,packages,dotfiles,hyprland,services}.sh: modules
- install/files/hypr/: starter Hyprland config (monitors, env, input,
  keybinds, autostart, top-level) - symlinked to ~/.config/hypr/
- Pacman packages: full Hyprland desktop + dotfile dependencies
- AUR: bootstraps yay, installs brave-beta-bin
- Symlinks all dotfiles, installs tpm + nvm, switches login shell to zsh
- Enables sddm, NetworkManager, bluetooth, pipewire user stack

No btrfs / Limine / Secure Boot constraints (unlike Omarchy). 3440x1440@120
monitor + JetBrainsMono Nerd Font preserved. Hyprland border colors use the
Kanagawa Wave palette to match the rest of the stack.

wezterm.lua restored to standalone Kanagawa wave/dragon switching via
$WEZTERM_THEME, since there's no Omarchy theme source anymore.

All shell scripts shellcheck-clean; wezterm.lua passes luac.
2026-06-09 11:06:43 +00:00