Reproducible, agent-first personal operating environment for Alex Tyrode: one repository that every machine the operator owns is a projection of. Nix and Home Manager own macOS, Linux, and the NixOS-WSL guest; nix-darwin owns macOS system activation; native package managers retain macOS and Windows application state. The rules this repository holds itself to are in AGENTS.md; the documentation map is docs/, and the commands of a normal week are in Running the fleet.
macOS or Linux, from nothing but Git and Bash:
curl -fsSL https://raw.githubusercontent.com/atyrode/dotfiles/main/get.sh | bashIt lists the registered presets for this platform, asks which one to install, and hands off to the cloned bootstrap/install.sh, which installs the pinned Nix if needed and relays to atyrode apply. What bootstrap owns, how it repairs a half-installed machine, and how an interrupted run recovers are in Bootstrap. From then on the only command is atyrode apply.
Native Windows 11, from PowerShell, is plan-only by default: it resolves main to an exact commit and reports the native and WSL changes without applying them. After review, run the printed revision:
irm https://raw.githubusercontent.com/atyrode/dotfiles/main/get.ps1 | iex
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/atyrode/dotfiles/main/get.ps1))) -Ref <exact-revision> -ApplyApply verifies a pinned NixOS-WSL image, activates wsl, and reconciles reviewed native packages through WinGet; if it first enables or updates WSL, follow its reboot instruction and run the same apply command again. The two ownership domains are in Home Manager and system boundary.
- Zsh with oh-my-zsh, syntax highlighting, autosuggestions
- zoxide - Smarter
cdcommand - fzf - Fuzzy finder (Ctrl+R for history)
- bat - Better
catwith syntax highlighting - tree - Directory tree viewer
- Git - Pre-configured with useful aliases
- tmux - Terminal multiplexer
- Nix/shell/workflow quality tooling - nixd, nixfmt, ShellCheck, shfmt, and actionlint
- OMP - Pinned coding agent, managed and untrusted launchers, agents, and skills
- mise - Declaratively installed runtime/version manager
- Project-owned runtimes - Python/uv, general JavaScript runtimes, Go, Rust,
and native compilers come from committed dev shells,
mise.toml, or native manifests instead of every host's global profile; Node 24 and Bun are the deliberate agent-tools exceptions for local review proxies
- btop - Modern system monitor
- dua - Disk usage analyzer
- Docker + docker-compose - Linux clients in the
containerscapability - OrbStack - Docker/Linux runtime on macOS
- Explicit capabilities - ffmpeg (
media), Android tools/scrcpy (mobile), and nmap/socat/sops (security, plus age-plugin-se on macOS)
- Nix/Home Manager apps - ChatGPT, Lichess, Obsidian, OrbStack, Postman, Prism Launcher, REAPER, Signal, Spotify, and VLC
- Homebrew casks - Arduino IDE, Bitwarden, Claude Desktop, Codex Desktop, Discord, Display Pilot, Godot, Parsec, PlugData, Sonos, Steam, and Zen Browser Twilight, managed through nix-darwin
- Manual/vendor-managed macOS apps - ROLI Connect, ROLI Dashboard, ROLI Studio Player, and Vital stay outside the declarative setup until they have a stable public installer or package source.
- WinGet packages - Zen Browser Twilight and the JetBrainsMono Nerd Font
are declared in
fleet/windows-packages.nixand reconciled from the managed NixOS-WSL host. - Application state - Mozilla sign-in, Zen profiles, cookies, sessions, updates, and caches remain owned by Zen/Windows rather than Nix.
Which machine gets which of these is the host registry, Hosts and capabilities.