From c92968dea20cfa2ab9b82734f41dc59bf83c94fc Mon Sep 17 00:00:00 2001 From: Mark Groves Date: Tue, 14 Jul 2026 12:24:55 +1000 Subject: [PATCH] chore: remove legacy workstation setup --- .github/workflows/opencode.yml | 33 ----- .stow-global-ignore | 1 - CLAUDE.md | 8 -- README.md | 7 - hosts/nexus-unbound/README.md | 123 ------------------ .../hypr/.config/hypr/bindings.conf | 42 ------ .../hypr/.config/hypr/hyprland.conf | 37 ------ .../hypr/.config/hypr/input.conf | 45 ------- .../hypr/.config/hypr/looknfeel.conf | 24 ---- .../hypr/.config/hypr/monitors.conf | 12 -- .../hypr/.config/hypr/workspaces.conf | 13 -- scripts/README.md | 2 +- scripts/stow.sh | 51 +------- 13 files changed, 3 insertions(+), 395 deletions(-) delete mode 100644 .github/workflows/opencode.yml delete mode 100644 CLAUDE.md delete mode 100644 hosts/nexus-unbound/README.md delete mode 100644 hosts/nexus-unbound/hypr/.config/hypr/bindings.conf delete mode 100644 hosts/nexus-unbound/hypr/.config/hypr/hyprland.conf delete mode 100644 hosts/nexus-unbound/hypr/.config/hypr/input.conf delete mode 100644 hosts/nexus-unbound/hypr/.config/hypr/looknfeel.conf delete mode 100644 hosts/nexus-unbound/hypr/.config/hypr/monitors.conf delete mode 100644 hosts/nexus-unbound/hypr/.config/hypr/workspaces.conf diff --git a/.github/workflows/opencode.yml b/.github/workflows/opencode.yml deleted file mode 100644 index 3ac5c2e..0000000 --- a/.github/workflows/opencode.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: opencode - -on: - issue_comment: - types: [created] - pull_request_review_comment: - types: [created] - -jobs: - opencode: - if: | - contains(github.event.comment.body, ' /oc') || - startsWith(github.event.comment.body, '/oc') || - contains(github.event.comment.body, ' /opencode') || - startsWith(github.event.comment.body, '/opencode') - runs-on: ubuntu-latest - permissions: - id-token: write - contents: read - pull-requests: read - issues: read - steps: - - name: Checkout repository - uses: actions/checkout@v6 - with: - persist-credentials: false - - - name: Run opencode - uses: anomalyco/opencode/github@latest - env: - OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} - with: - model: opencode/claude-sonnet-4-5 \ No newline at end of file diff --git a/.stow-global-ignore b/.stow-global-ignore index aaecd26..a222c13 100644 --- a/.stow-global-ignore +++ b/.stow-global-ignore @@ -1,6 +1,5 @@ ^\.git(/|$) ^README\.md$ -^CLAUDE\.md$ ^AGENTS\.md$ ^scripts(/|$) ^\.claude(/|$) diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index e1e57a0..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,8 +0,0 @@ -# Project Instructions - -- When repairing symlinks for dotfiles in this project use @scripts/stow.sh - -## Git Workflow - -- Never commit directly to main. Always create a branch, commit there, push, and open a PR if one doesn't already exist for that branch. -- Use conventional commit messages. Body should be in list format and not overly verbose. diff --git a/README.md b/README.md index 675b657..a9c45e4 100644 --- a/README.md +++ b/README.md @@ -91,13 +91,6 @@ Deploy selected portable packages: ./scripts/stow.sh base git nvim ``` -Host-specific configuration remains available when needed: - -```bash -./scripts/stow.sh host -./scripts/stow.sh host nexus-unbound -``` - `stow-packages.txt` is the source of truth for the default deployment. Keeping that allowlist separate prevents infrastructure and documentation directories from being mistaken for dotfile packages. diff --git a/hosts/nexus-unbound/README.md b/hosts/nexus-unbound/README.md deleted file mode 100644 index 4bd8fee..0000000 --- a/hosts/nexus-unbound/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# hosts/nexus-unbound - -Machine-specific stow overrides for `nexus-unbound`. - -These packages are applied after base packages so hardware- and host-specific -settings can safely override portable defaults. - -## Current host packages - -- `hypr` -> `~/.config/hypr/*` overrides for this machine - -## Apply / refresh - -Always dry-run first: - -```bash -./scripts/stow.sh base -n -./scripts/stow.sh host nexus-unbound -n -``` - -Then apply: - -```bash -./scripts/stow.sh base -./scripts/stow.sh host nexus-unbound -``` - -If running on this host, you can omit the hostname: - -```bash -./scripts/stow.sh host -``` - -## Hyprland profile for this host - -This host package currently defines a fixed dual-monitor profile, with a generic -fallback for other attached displays: - -- Internal display: `eDP-2`, scale `2` (HiDPI) -- External display: `DP-3` (LG Ultrawide), scale `1`, positioned above and offset left of internal -- Other monitors: preferred mode, automatic position, scale `1` -- Mixed-DPI GTK scaling: `GDK_SCALE=1` - -See monitor config in: - -- `hosts/nexus-unbound/hypr/.config/hypr/monitors.conf` - -Workspace mapping is monitor-specific: - -- Workspaces `1-6` on `DP-3` (primary/default on workspace 1) -- Workspaces `7-9` on `eDP-2` - -See: - -- `hosts/nexus-unbound/hypr/.config/hypr/workspaces.conf` - -## Custom keybindings - -Defined in `hosts/nexus-unbound/hypr/.config/hypr/bindings.conf`. These extend and override Omarchy's defaults. - -### Applications - -| Binding | Action | -|------------------------|---------------------------------------------| -| `SUPER RETURN` | New terminal (at current terminal's cwd) | -| `SUPER ALT RETURN` | New tmux session in terminal | -| `SUPER SHIFT RETURN` | Launch browser | -| `SUPER SHIFT F` | Open file manager | -| `SUPER ALT SHIFT F` | Open file manager at current terminal's cwd | -| `SUPER SHIFT B` | Launch browser | -| `SUPER SHIFT ALT B` | Launch browser (private mode) | -| `SUPER SHIFT M` | Spotify | -| `SUPER SHIFT ALT M` | Music TUI (`cliamp`) | -| `SUPER SHIFT N` | Editor | -| `SUPER SHIFT T` | btop (activity monitor) | -| `SUPER SHIFT D` | lazydocker | -| `SUPER SHIFT S` | Signal | -| `SUPER SHIFT O` | Obsidian | -| `SUPER SHIFT W` | Typora | -| `SUPER SHIFT /` | 1Password | - -### Web apps - -| Binding | Web app | -|------------------------|-------------------| -| `SUPER SHIFT A` | Claude | -| `SUPER SHIFT ALT A` | Claude Code | -| `SUPER SHIFT C` | Proton Calendar | -| `SUPER SHIFT E` | Proton Mail | -| `SUPER SHIFT Y` | YouTube | -| `SUPER SHIFT CTRL G` | Google Messages | -| `SUPER SHIFT P` | Google Photos | -| `SUPER SHIFT X` | X (Twitter) | -| `SUPER SHIFT ALT X` | X — new post | -| `SUPER SHIFT G` | GitHub | -| `SUPER SHIFT ALT G` | ChatGPT | - -### Workspace / monitor - -| Binding | Action | -|----------------------------|-------------------------------------| -| `SUPER SHIFT ALT UP` | Move workspace to monitor above | -| `SUPER SHIFT ALT DOWN` | Move workspace to monitor below | - -## Notes for future edits - -- Keep hardware-specific settings in this host package, not base packages. -- Keep portable defaults in base; use this directory only for overrides. -- Do not edit Omarchy defaults under - `~/.local/share/omarchy/default/...`; override via files in - `~/.config/hypr/` instead. -- If monitor identifiers change, run `hyprctl monitors` and update - `monitors.conf` and `workspaces.conf` together. -- The `SUPER SHIFT ALT G` web-app binding is explicitly reassigned to ChatGPT - at the end of `bindings.conf`; keep that final override in mind when adding - web-app shortcuts. - -## Troubleshooting - -- Check for stow conflicts before applying: - `stow -n -v -t "$HOME" -d hosts/nexus-unbound hypr` -- If host package discovery fails, ensure package directories contain real files - (not only empty subdirectories). diff --git a/hosts/nexus-unbound/hypr/.config/hypr/bindings.conf b/hosts/nexus-unbound/hypr/.config/hypr/bindings.conf deleted file mode 100644 index 06967f0..0000000 --- a/hosts/nexus-unbound/hypr/.config/hypr/bindings.conf +++ /dev/null @@ -1,42 +0,0 @@ -# Application bindings -bindd = SUPER ALT, RETURN, Tmux, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" tmux new -bindd = SUPER, RETURN, Terminal, exec, uwsm-app -- xdg-terminal-exec --dir="$(omarchy-cmd-terminal-cwd)" -bindd = SUPER SHIFT, RETURN, Browser, exec, omarchy-launch-browser -bindd = SUPER SHIFT, F, File manager, exec, uwsm-app -- nautilus --new-window -bindd = SUPER ALT SHIFT, F, File manager (cwd), exec, uwsm-app -- nautilus --new-window "$(omarchy-cmd-terminal-cwd)" -bindd = SUPER SHIFT, B, Browser, exec, omarchy-launch-browser -bindd = SUPER SHIFT ALT, B, Browser (private), exec, omarchy-launch-browser --private -bindd = SUPER SHIFT, M, Music, exec, omarchy-launch-or-focus spotify -bindd = SUPER SHIFT ALT, M, Music TUI, exec, omarchy-launch-or-focus-tui cliamp -bindd = SUPER SHIFT, N, Editor, exec, omarchy-launch-editor -bindd = SUPER SHIFT, T, Activity, exec, omarchy-launch-tui btop -bindd = SUPER SHIFT, D, Docker, exec, omarchy-launch-tui lazydocker -unbind = SUPER SHIFT, K -bindd = SUPER SHIFT, K, Codex, exec, uwsm-app -- /usr/bin/codex-linux -bindd = SUPER SHIFT, S, Signal, exec, omarchy-launch-or-focus ^signal$ "uwsm-app -- signal-desktop" -bindd = SUPER SHIFT, O, Obsidian, exec, omarchy-launch-or-focus ^obsidian$ "uwsm-app -- obsidian" -bindd = SUPER SHIFT, W, Typora, exec, uwsm-app -- typora --enable-wayland-ime -bindd = SUPER SHIFT, SLASH, Passwords, exec, uwsm-app -- 1password - -# If your web app url contains #, type it as ## to prevent hyprland treating it as a comment -bindd = SUPER SHIFT, A, Claude, exec, omarchy-launch-webapp "https://claude.ai/" -bindd = SUPER SHIFT ALT, A, Claude Code, exec, omarchy-launch-webapp "https://claude.ai/code" -bindd = SUPER SHIFT, C, Calendar, exec, omarchy-launch-webapp "https://calendar.proton.me/" -bindd = SUPER SHIFT, E, Email, exec, omarchy-launch-webapp "https://mail.proton.me/" -bindd = SUPER SHIFT, Y, YouTube, exec, omarchy-launch-webapp "https://youtube.com/" -bindd = SUPER SHIFT ALT, G, WhatsApp, exec, omarchy-launch-or-focus-webapp WhatsApp "https://web.whatsapp.com/" -bindd = SUPER SHIFT CTRL, G, Google Messages, exec, omarchy-launch-or-focus-webapp "Google Messages" "https://messages.google.com/web/conversations" -bindd = SUPER SHIFT, P, Google Photos, exec, omarchy-launch-or-focus-webapp "Google Photos" "https://photos.google.com/" -bindd = SUPER SHIFT, X, X, exec, omarchy-launch-webapp "https://x.com/" -bindd = SUPER SHIFT ALT, X, X Post, exec, omarchy-launch-webapp "https://x.com/compose/post" -bindd = SUPER SHIFT, G, Github, exec, omarchy-launch-webapp "https://github.com/" - -# Workspace movement between monitors -bind = SUPER SHIFT ALT, UP, movecurrentworkspacetomonitor, u -bind = SUPER SHIFT ALT, DOWN, movecurrentworkspacetomonitor, d - -# Overwrite existing bindings, like putting Omarchy Menu on Super + Space -# unbind = SUPER, SPACE -# bindd = SUPER, SPACE, Omarchy menu, exec, omarchy-menu -unbind = SUPER SHIFT ALT, G -bindd = SUPER SHIFT ALT, G, ChatGPT, exec, omarchy-launch-webapp "https://chatgpt.com" diff --git a/hosts/nexus-unbound/hypr/.config/hypr/hyprland.conf b/hosts/nexus-unbound/hypr/.config/hypr/hyprland.conf deleted file mode 100644 index 607ebb5..0000000 --- a/hosts/nexus-unbound/hypr/.config/hypr/hyprland.conf +++ /dev/null @@ -1,37 +0,0 @@ -# Learn how to configure Hyprland: https://wiki.hyprland.org/Configuring/ - -# Use defaults Omarchy defaults (but don't edit these directly!) -source = ~/.local/share/omarchy/default/hypr/autostart.conf -source = ~/.local/share/omarchy/default/hypr/bindings/media.conf -source = ~/.local/share/omarchy/default/hypr/bindings/clipboard.conf -source = ~/.local/share/omarchy/default/hypr/bindings/tiling-v2.conf -source = ~/.local/share/omarchy/default/hypr/bindings/utilities.conf -source = ~/.local/share/omarchy/default/hypr/envs.conf -source = ~/.local/share/omarchy/default/hypr/looknfeel.conf -source = ~/.local/share/omarchy/default/hypr/input.conf -source = ~/.local/share/omarchy/default/hypr/windows.conf -source = ~/.config/omarchy/current/theme/hyprland.conf - -# Change your own setup in these files (and overwrite any settings from defaults!) -source = ~/.config/hypr/monitors.conf -source = ~/.config/hypr/input.conf -source = ~/.config/hypr/bindings.conf -source = ~/.config/hypr/looknfeel.conf -source = ~/.config/hypr/autostart.conf - -# Add any other personal Hyprland configuration below -# windowrule = workspace 5, match:class qemu - -# Keep Codex's transparent overlay and native popup windows clear. -windowrule = tag -default-opacity, match:class ^Codex$ -windowrule = opacity 1 override 1 override 1 override, match:class ^Codex$ -windowrule = no_blur on, match:class ^Codex$ -windowrule = tag -default-opacity, match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0 -windowrule = opacity 1 override 1 override 1 override, match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0 -windowrule = no_blur on, match:class ^$, match:title ^$, match:xwayland 1, match:float 1, match:fullscreen 0, match:pin 0 - -# My .conf files -source = ~/.config/hypr/workspaces.conf - -# Toggle config flags dynamically -source = ~/.local/state/omarchy/toggles/hypr/*.conf diff --git a/hosts/nexus-unbound/hypr/.config/hypr/input.conf b/hosts/nexus-unbound/hypr/.config/hypr/input.conf deleted file mode 100644 index 5596d77..0000000 --- a/hosts/nexus-unbound/hypr/.config/hypr/input.conf +++ /dev/null @@ -1,45 +0,0 @@ -# Control your input devices -# See https://wiki.hypr.land/Configuring/Variables/#input -input { - # Use multiple keyboard layouts and switch between them with Left Alt + Right Alt - # kb_layout = us,dk,eu - kb_options = compose:caps # ,grp:alts_toggle - - # Change speed of keyboard repeat - repeat_rate = 40 - repeat_delay = 600 - - # Start with numlock on by default - numlock_by_default = true - - # Use natural (inverse) scrolling for mouse - natural_scroll = true - - # Increase sensitivity for mouse/trackpad (default: 0) - # sensitivity = 0.35 - - touchpad { - # Use natural (inverse) scrolling - natural_scroll = true - - # Use two-finger clicks for right-click instead of lower-right corner - # clickfinger_behavior = true - - # Control the speed of your scrolling - scroll_factor = 0.4 - - # Enable the touchpad while typing - # disable_while_typing = false - - # Left-click-and-drag with three fingers - # drag_3fg = 1 - } -} - -# Scroll nicely in the terminal -windowrule = match:class (Alacritty|kitty|foot), scroll_touchpad 1.5 -windowrule = match:class com.mitchellh.ghostty, scroll_touchpad 0.2 - -# Enable touchpad gestures for changing workspaces -# See https://wiki.hyprland.org/Configuring/Gestures/ -gesture = 3, horizontal, workspace diff --git a/hosts/nexus-unbound/hypr/.config/hypr/looknfeel.conf b/hosts/nexus-unbound/hypr/.config/hypr/looknfeel.conf deleted file mode 100644 index 17a5964..0000000 --- a/hosts/nexus-unbound/hypr/.config/hypr/looknfeel.conf +++ /dev/null @@ -1,24 +0,0 @@ -# Change the default Omarchy look'n'feel - -# https://wiki.hyprland.org/Configuring/Variables/#general -general { - # No gaps between windows or borders - gaps_in = 2 - gaps_out = 4 - border_size = 3 - - # Use master layout instead of dwindle - # layout = master -} - -# https://wiki.hyprland.org/Configuring/Variables/#decoration -decoration { - #Use round window corners - rounding = 7 -} - -# https://wiki.hypr.land/Configuring/Variables/#layout -layout { - # Avoid overly wide single-window layouts on wide screens - # single_window_aspect_ratio = 1 1 -} diff --git a/hosts/nexus-unbound/hypr/.config/hypr/monitors.conf b/hosts/nexus-unbound/hypr/.config/hypr/monitors.conf deleted file mode 100644 index 96f643c..0000000 --- a/hosts/nexus-unbound/hypr/.config/hypr/monitors.conf +++ /dev/null @@ -1,12 +0,0 @@ -# See https://wiki.hyprland.org/Configuring/Monitors/ -# List current monitors and resolutions possible: hyprctl monitors -# Format: monitor = [port], resolution, position, scale - -# Internal Yoga 9 display (HiDPI) -monitor = eDP-2, preferred, 0x0, 2 -# External LG Ultrawide above the laptop screen -monitor = DP-3, preferred, -920x-1440, 1 -# Fallback for any monitor not named above. -monitor = , preferred, auto, 1 -# GTK scaling (leave at 1 for mixed DPI) -env = GDK_SCALE,1 diff --git a/hosts/nexus-unbound/hypr/.config/hypr/workspaces.conf b/hosts/nexus-unbound/hypr/.config/hypr/workspaces.conf deleted file mode 100644 index a9c6101..0000000 --- a/hosts/nexus-unbound/hypr/.config/hypr/workspaces.conf +++ /dev/null @@ -1,13 +0,0 @@ -# Workspace assignment -# LG Ultrawide (DP-3) as primary, laptop panel (eDP-2) as secondary. -# persistent keeps numbers usable even if empty; default picks the initial workspace on that monitor. -workspace = 1, monitor:DP-3, default:true, persistent:true -workspace = 2, monitor:DP-3, persistent:true -workspace = 3, monitor:DP-3, persistent:true -workspace = 4, monitor:DP-3, persistent:true -workspace = 5, monitor:DP-3, persistent:true -workspace = 6, monitor:DP-3, persistent:true - -workspace = 7, monitor:eDP-2, persistent:true -workspace = 8, monitor:eDP-2, persistent:true -workspace = 9, monitor:eDP-2, persistent:true diff --git a/scripts/README.md b/scripts/README.md index c9871f5..b7f1d0e 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -7,7 +7,7 @@ dotfiles. |--------|-------------| | `install-packages.sh` | Resolve the shared profile through an OS provider | | `../ansible/package-providers/fedora.sh` | Detect Fedora and idempotently install missing RPMs | -| `stow.sh` | Deploy or repair base and host-specific GNU Stow packages | +| `stow.sh` | Deploy or repair portable GNU Stow packages | | `check.sh` | Validate manifests, scripts, configuration, and a Stow preview | Package adapters are intentionally small. Each executable adapter accepts: diff --git a/scripts/stow.sh b/scripts/stow.sh index 125c3dc..73e119b 100755 --- a/scripts/stow.sh +++ b/scripts/stow.sh @@ -7,7 +7,6 @@ Usage: stow.sh [options] [package ...] Commands: base Deploy portable packages from stow-packages.txt - host [hostname] Deploy host-specific packages (default: this host) list List the default portable packages without deploying help Show this help message @@ -19,7 +18,6 @@ Examples: ./scripts/stow.sh base --dry-run ./scripts/stow.sh base ./scripts/stow.sh base git ghostty - ./scripts/stow.sh host EOF } @@ -229,51 +227,6 @@ cmd_list() { printf '%s\n' "${default_packages[@]}" } -cmd_host() { - local root hostname="" dry_run=false verbose=false host_dir - local -a packages=() stow_args=() failed=() - local dir package - root="$(repo_root)" - - while [[ $# -gt 0 ]]; do - case "$1" in - -n | --dry-run) dry_run=true ;; - -v | --verbose) verbose=true ;; - -*) die "unknown host option: $1" ;; - *) - [[ -z "$hostname" ]] || die "unexpected host argument: $1" - hostname="$1" - ;; - esac - shift - done - - [[ -n "$hostname" ]] || hostname="$(hostname)" - valid_name "$hostname" || die "invalid hostname: $hostname" - host_dir="$root/hosts/$hostname" - [[ -d "$host_dir" ]] || die "host package directory not found: $host_dir" - - while IFS= read -r -d '' dir; do - [[ -n "$(find "$dir" -type f -print -quit)" ]] || continue - packages+=("${dir##*/}") - done < <(find "$host_dir" -mindepth 1 -maxdepth 1 -type d -print0) - - [[ ${#packages[@]} -gt 0 ]] || die "no host packages found for: $hostname" - stow_args=(--dir "$host_dir" --target "$HOME" --restow --no-folding) - "$dry_run" && stow_args+=(--simulate) - "$verbose" && stow_args+=(--verbose=2) - - printf 'Target: %s\n' "$HOME" - "$dry_run" && printf 'Mode: dry-run\n' - for package in "${packages[@]}"; do - printf 'Stowing host package %s/%s\n' "$hostname" "$package" - stow "${stow_args[@]}" "$package" || failed+=("$package") - done - - [[ ${#failed[@]} -eq 0 ]] || die "failed host Stow packages: ${failed[*]}" - printf 'Done.\n' -} - main() { [[ $# -gt 0 ]] || { usage @@ -288,12 +241,12 @@ main() { [[ $# -eq 0 ]] || die "list does not accept arguments" cmd_list ;; - base | host) + base) if [[ ${EUID:-$(id -u)} -eq 0 ]] && ! dry_run_requested "$@"; then die "do not run Stow as root or with sudo" fi command -v stow > /dev/null 2>&1 || die "GNU Stow is required; run ./bootstrap.sh --packages-only first" - "cmd_$command" "$@" + cmd_base "$@" ;; *) die "unknown command: $command" ;; esac