# Scobleclaw Laptop Config Nix flake that reproduces MacBook software capabilities on an x86\_64 NixOS laptop. ## What it installs | 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 | | **python3 + uv** | Python tooling | 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 | ## 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 # 3. First build (this will fail — copy the npmDepsHash from error output) nix build ~/laptop-config#pi-coding-agent # 4. Edit flake.nix: set npmDepsHash to the value from step 3 # 5. Rebuild system sudo nixos-rebuild switch --flake ~/laptop-config#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 ``` ## Updating pi The pi-mono repo is mirrored from upstream and syncs every 24h. ```bash # 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 # Main entry: overlay, nixosConfig, devShell ├── modules/ │ └── laptop.nix # NixOS system module (packages, shell, fonts, SSH) ├── home/ │ └── sscoble.nix # home-manager user config (git, tools, pi dirs) └── 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.