My NixOS system and Home Manager configs for all my machines. Everything is managed declaratively with Nix: apps, services, shell, theming, the works.
hosts/- per-machine configs (desktop, laptops, work machine)modules/nixos/- system-level modules (apps, services, settings)modules/home-manager/- user-level modules (shell, editors, UI)cfg/- static config files symlinked into placessh/- SSH configs and keys
Defined in hosts/:
infernape- desktop PC, transitioning into a half-server, half-desktop setupflareon- laptop (new)snorlax- work laptop
Only really useful to me, but if that's you: you need a NixOS install. Home Manager comes along as a NixOS module, so there's nothing separate to set up.
- Clone this repository
cdinto it- Apply the system configuration:
sudo nixos-rebuild switch --flake .#<hostname>
Apply the config:
nh os switch /home/hackr/nixosTest without activating:
nh os test /home/hackr/nixosShow available configurations:
nix flake showscripts/ubuntu-setup.sh replicates my nushell environment on Ubuntu hosts, no Nix required. It installs the same tools and config files:
- nushell. The shell, with plugins.
- carapace. Completions.
- atuin. Shell history.
- starship. Prompt, poimandres theme.
- zoxide. Directory jumping.
- direnv. Environment loading.
- fastfetch. System info.
- pokeget-rs. Pokémon sprites for pokefetch.
curl -sL https://raw.githubusercontent.com/hackrdotsh/hackr-nixos/main/scripts/ubuntu-setup.sh | bashOn first run it asks whether to reset existing config files (defaults to no).
- Window manager. niri (Wayland compositor), with gde as a backup.
- Shell. nushell with extensions.
- Editor. Cursor with my extensions and keybindings, though I'm moving to helix.
- Terminal. ghostty as primary, alacritty as backup.
- System tools. btop, fastfetch, atuin, and the usual utilities.
Everything is themed rose-pine: shell, terminals, editors, window manager, system appearance. One palette, everywhere.
Pi gets custom themes, extensions, and settings, all managed through Nix. The source files live in cfg/pi/ and Home Manager symlinks them into ~/.pi/agent/. An activation script then copies them to mutable live paths so Pi can write to them at runtime.
settings-original.json → ~/.pi/agent/settings.json
- Provider:
zai - Model:
glm-5.2 - Thinking level:
medium - Theme:
hackr(custom, see below) - Quiet startup: on
- Package manager:
bun, for extension dependencies - Global package:
pi-super-curl(via npm)
Two custom TUI themes land in ~/.pi/agent/themes/:
rose-pine.json. A port of the Rosé Pine colorscheme, with 16 named palette vars and full color mappings for the TUI (syntax highlighting, tool output, markdown rendering, thinking indicators, etc.).hackr.json. A dark theme built on the "Charmtone Pantera" palette. The colors are named after food (charple, dolly, bok, sriracha, malibu, julep, mustard) over a dark pepper/bbq/charcoal base. This is the active theme, used by the Hackr UI extension.
Three custom extensions go into ~/.pi/agent/extensions/, with npm dependencies installed via bun:
-
hackr-ui.ts. Replaces Pi's default TUI with a Charm-inspired look:- Header: pi (π) digits rendered as a charple → dolly gradient wordmark, model name and cwd on the right
- Footer: token stats (input ↑ / output ↓ / cost $) on the left, model + git branch + cwd on the right
- Working indicator: gradient-animated
xoxopulse cycling between charple and dolly - Custom editor:
xoxoprompt prefix (yoloin YOLO mode), no visible borders, context window stats in the bottom bar /yolocommand: toggles YOLO mode, which auto-accepts all tool permissions and shows a bright yellow! YOLOstatus badge. Genuinely dangerous commands (rm -rf,sudo,chmod 777) still get blocked behind an interactive confirmation dialog/hackr-uicommand: toggles the whole thing on/off
-
jj-desc.ts. Adds ajj_describetool and/jj-desccommand. Reads the currentjj diff, asks the model for a commit description (imperative mood, <72 char summary, optional bullet details), then sets it viajj describe. -
web-fetch.ts. A curl-backedweb_fetchtool for fetching URL content (web pages, API responses, remote files). Supports GET/POST/PUT/DELETE, custom headers, request bodies, and a configurable max response length.
The links.nix module handles it in two phases:
- Symlink (declarative).
home.fileentries linkcfg/pi/*to~/.pi/agent/*-original.*. - Activation script (post-generation). Copies the
-originalfiles to their live mutable paths, installs extension npm dependencies withbun, and sets writable permissions.