laptop-config/README.md

5.2 KiB

Scobleclaw Laptop Config

Nix flake that reproduces MacBook software capabilities on an x86_64 NixOS laptop.

What it installs

Core tools

Tool Purpose Source
pi Coding agent (TUI) sscoble/pi-mono (Forgejo mirror of badlogic/pi-mono)
qmd Vault search @tobilu/qmd (npm, wrapped via bunx)
git Version control nixpkgs
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

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)

# 1. Install NixOS (minimal ISO) — set up network during install

# 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

# 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

# 4. Rebuild again with correct hash
sudo nixos-rebuild switch --flake git+https://os.scoble.me/forgejo/sscoble/laptop-config.git#laptop

# 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

The pi-mono repo is mirrored from upstream and syncs every 24h.

# Force a mirror sync (on n97-mini)
ssh n97-mini 'sudo -u forgejo forgejo admin repo sync --config /var/lib/forgejo/custom/conf/app.ini sscoble/pi-mono'

Repo structure

laptop-config/
├── flake.nix                     # Overlay, nixosConfig "laptop", devShell
├── modules/
│   ├── laptop.nix                # System packages, zsh, fonts, SSH, nix settings
│   └── hyprland.nix              # Hyprland WM, greetd, PipeWire, portals, bluetooth
├── home/
│   └── 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

Forgejo Actions

An action keeps pi up to date — when upstream badlogic/pi-mono releases a new tag, the Forgejo mirror picks it up automatically. A scheduled workflow in this repo checks for tag drift daily.