From 0835b3eaa667c7732d95a8ce3a47ca9ce53b221b Mon Sep 17 00:00:00 2001 From: Scott Scoble Date: Tue, 12 May 2026 20:27:27 -0700 Subject: [PATCH] =?UTF-8?q?README:=20full=20desktop=20docs=20=E2=80=94=20H?= =?UTF-8?q?yprland,=20keybinds,=20workspaces,=20zellij?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 115 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 95 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 327cf9e..c9cb694 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ Nix flake that reproduces MacBook software capabilities on an x86\_64 NixOS lapt ## What it installs +### Core tools + | Tool | Purpose | Source | |------|---------|--------| | **pi** | Coding agent (TUI) | `sscoble/pi-mono` (Forgejo mirror of `badlogic/pi-mono`) | @@ -12,35 +14,105 @@ Nix flake that reproduces MacBook software capabilities on an x86\_64 NixOS lapt | **nodejs** | JavaScript runtime | nixpkgs | | **bun** | Fast JS runtime + bundler | nixpkgs | | **zsh** | Shell (+ oh-my-zsh, autosuggestions, syntax highlighting) | nixpkgs | +| **neovim** | Editor (minimal Lua config) | nixpkgs | | **python3 + uv** | Python tooling | nixpkgs | +| **go** | Go toolchain | nixpkgs | | **docker** | Containers | nixpkgs | | **tailscale** | Mesh VPN | nixpkgs | | **ripgrep, fd, jq, bat, eza, delta** | Modern CLI tools | nixpkgs | -| **tmux** | Terminal multiplexer | nixpkgs | -| **nerd fonts** | JetBrains Mono, Fira Code | nixpkgs | + +### Desktop (Hyprland) + +| Tool | Purpose | +|------|--------| +| **Hyprland** | Tiling Wayland compositor (gaps, blur, animations) | +| **waybar** | Status bar with workspaces, clock, CPU, battery, network, audio | +| **foot** | Minimal fast Wayland terminal emulator | +| **zellij** | Terminal multiplexer (cmux equivalent — tabs, panes, floating) | +| **rofi-wayland** | App launcher (SUPER + D) | +| **dunst** | Notification daemon | +| **swww** | Animated wallpaper | +| **hyprlock** | Lock screen (SUPER + L, auto-lock 5min idle) | +| **hypridle** | Idle daemon (lock + display sleep) | +| **thunar** | File manager (SUPER + N) | +| **grim + slurp + swappy** | Screenshots (SUPER + S = area, SUPER + Shift + S = full) | +| **cliphist** | Clipboard history (SUPER + V → rofi picker) | +| **brightnessctl + pavucontrol** | Brightness and audio control | + +### Workspaces + +| # | Name | Icon | Purpose | +|---|------|------|--------| +| 1 | shell | 󰆍 | Terminal | +| 2 | code | 󰨞 | Development (editors, git) | +| 3 | web | 󰖟 | Browser | +| 4 | chat | 󰭻 | Communication (Discord, etc.) | +| 5 | vault | 󰠮 | Knowledge / vault | +| 6 | media | 󰎆 | Media player | +| 7-9 | 7-9 | — | Spare | +| 10 | sys | 󰒓 | System settings | + +## Keybindings + +| Key | Action | +|-----|--------| +| `SUPER + Return` | Open terminal (foot) | +| `SUPER + Shift + Return` | Open terminal + multiplexer (foot zellij) | +| `SUPER + D` / `SUPER + Space` | App launcher (rofi) | +| `SUPER + B` | Firefox | +| `SUPER + N` | File manager (thunar) | +| `SUPER + Q` | Close window | +| `SUPER + F` | Fullscreen | +| `SUPER + G` | Toggle floating window | +| `SUPER + L` | Lock screen | +| `SUPER + V` | Clipboard history | +| `SUPER + 1-0` | Switch to workspace 1-10 | +| `SUPER + Shift + 1-0` | Move window to workspace 1-10 | +| `SUPER + H/J/K/L` | Move focus (left/down/up/right) | +| `SUPER + Shift + H/J/K/L` | Move window | +| `SUPER + Ctrl + H/J/K/L` | Resize window | +| `SUPER + S` | Screenshot area (→ swappy annotate) | +| `SUPER + Shift + S` | Screenshot full screen | +| `SUPER + Shift + Q` | Exit Hyprland | +| `SUPER + Shift + R` | Reload Hyprland config | + +### Zellij (terminal multiplexer) + +| Key | Action | +|-----|--------| +| `Ctrl + G` | Enter command mode | +| `Ctrl + P` | Split pane down | +| `Ctrl + N` | Split pane right | +| `Ctrl + T` | New tab | +| `Ctrl + H/J/K/L` | Move focus | +| `Ctrl + X` | Close pane | +| `Ctrl + F` | Toggle floating pane | +| `Ctrl + Z` | Zoom pane fullscreen | +| `Ctrl + Q` | Close tab | +| `Ctrl + D` | Detach session | ## First-time setup (new laptop) ```bash -# 1. Install NixOS (minimal ISO) -# 2. Clone this repo -git clone https://os.scoble.me/forgejo/sscoble/laptop-config.git ~/laptop-config +# 1. Install NixOS (minimal ISO) — set up network during install -# 3. First build (this will fail — copy the npmDepsHash from error output) -nix build ~/laptop-config#pi-coding-agent +# 2. Rebuild directly from Forgejo (no local clone needed) +sudo nixos-rebuild switch --flake git+https://os.scoble.me/forgejo/sscoble/laptop-config.git#laptop -# 4. Edit flake.nix: set npmDepsHash to the value from step 3 +# 3. First build of pi will fail — copy npmDepsHash from error, paste into flake.nix +# Then re-clone/push the fix, or override locally: +# nix build git+https://os.scoble.me/forgejo/sscoble/laptop-config.git#pi-coding-agent -# 5. Rebuild system -sudo nixos-rebuild switch --flake ~/laptop-config#laptop +# 4. Rebuild again with correct hash +sudo nixos-rebuild switch --flake git+https://os.scoble.me/forgejo/sscoble/laptop-config.git#laptop -# 6. Restore personal configs -# Copy from backup: -# ~/.pi/agent/SYSTEM.md -# ~/.pi/agent/models.json -# ~/.pi/agent/mcp.json -# ~/.pi/agent/settings.json -# ~/.ssh/id_ed25519 +# 5. Restore personal configs from backup: +# ~/.pi/agent/SYSTEM.md +# ~/.pi/agent/models.json +# ~/.pi/agent/mcp.json +# ~/.pi/agent/settings.json +# ~/.ssh/id_ed25519 +# ~/wallpapers/default.jpg ``` ## Updating pi @@ -56,11 +128,14 @@ ssh n97-mini 'sudo -u forgejo forgejo admin repo sync --config /var/lib/forgejo/ ``` laptop-config/ -├── flake.nix # Main entry: overlay, nixosConfig, devShell +├── flake.nix # Overlay, nixosConfig "laptop", devShell ├── modules/ -│ └── laptop.nix # NixOS system module (packages, shell, fonts, SSH) +│ ├── laptop.nix # System packages, zsh, fonts, SSH, nix settings +│ └── hyprland.nix # Hyprland WM, greetd, PipeWire, portals, bluetooth ├── home/ -│ └── sscoble.nix # home-manager user config (git, tools, pi dirs) +│ └── sscoble.nix # home-manager: all desktop config, git, neovim, tools +├── .forgejo/workflows/ +│ └── check-pi-version.yml # Daily: opens issue when pi-mono has new tag └── README.md ```