Home Manager

The user environment for rithviknishad is managed by Home Manager. The profile lives in home/rithviknishad/ and is composed of one small module per app under apps/. It targets Home Manager release 26.05 (home.stateVersion).

It ships two ways (see the flake):

  • System-wide with nixos-rebuild / nh os switch via modules/home-manager.nix.
  • Standalone with nh home switch via the flake’s homeConfigurations output — fast iteration on dotfiles without a full rebuild.

App modules at a glance

Module What it configures
git identity, main default branch, pull.rebase, push.autoSetupRemote, fetch.prune
kitty terminal — JetBrainsMono Nerd Font, Catppuccin-Mocha theme, 10k scrollback
firefox hardened/privacy Firefox via enterprise policies + locked prefs
zeditor Zed editor — no telemetry, One Dark, vim mode off
zsh zsh + oh-my-zsh (robbyrussell), history, aliases, autosuggest, syntax highlight
ssh client config; identity file from the sops-delivered key
direnv direnv + nix-direnv, wired into zsh
opencode installs the opencode terminal AI agent
lens installs Lens (Kubernetes IDE, unfree)
claude-code installs Claude Code (unfree)
python installs python3; its bundled python symlink makes python resolve to python3

Notable details

Shell (zsh)

zsh is enabled at the system level too (programs.zsh.enable in users/rithviknishad.nix) so it’s a valid login shell; Home Manager then configures it. Highlights: 50k shared history with dedup, oh-my-zsh with the git and sudo plugins, and aliases ll, la, gs, gd.

SSH client (ssh)

The module is deliberately machine-agnostic: it only references the private key path /run/secrets/rithviknishad/ssh_id_ed25519. The key itself is delivered out-of-band by sops-nix at the system level. It defines its own * defaults (agent forwarding off, connection multiplexing via a ControlMaster socket, keepalives) and a github.com block using that identity.

Firefox (firefox)

A privacy-hardened Firefox adapted from recipes.nix, expressed as:

  • Enterprise policies (policies.nix): disables telemetry, Pocket, Firefox Accounts, form history, and the built-in AI/”GenerativeAI” features; forces tracking protection; blocks arbitrary extension installs and force-installs an allow-list (uBlock Origin, Privacy Badger, Bitwarden, Dracula theme); replaces the default search engines with a curated set of keyword engines (@np Nix Packages, @no Nix Options, @gh GitHub, …).
  • Locked preferences (prefs.nix): the user.js-style profile settings.

There used to be a gnome module here (dconf tweaks to stop idle screen-blanking/locking). It was removed along with the GNOME desktop when the display became a cage + btop kiosk.

Adding an app

  1. Create home/rithviknishad/apps/<name>/default.nix with a Home Manager module (either configure a programs.<name> block or add to home.packages).
  2. Add ./apps/<name> to the imports list in home/rithviknishad/default.nix.
  3. Apply with nh home switch (user-only) or just deploy (full system).