mkdir -p ~/.dotfiles && cd $_ && \
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/zzJinux/dotfiles/master/install.sh)"Packages are declared in nix/flake.nix (paths) and built to a fixed gcroot
symlink ~/.local/nix-env. Its bin/ is put on PATH by nix/shlogin, so every
binary in the env is available — same convention as the other tools here.
Two channels are wired in: nixos-25.11 (stable, the default) and
nixpkgs-unstable. Take a package from unstable.<name> instead of <name>
when you need a newer/only-on-unstable build (see the comment in flake.nix).
(~/.nix-profile is Nix-managed and left untouched; we build our own env.)
Add / remove a package
- Edit
pathsinnix/flake.nix(find names at https://search.nixos.org/packages). bash nix/_install.sh— rebuilds the env (removed packages drop out too).- For a brand-new file,
git addit first — Nix only sees git-tracked files.
Update everything to latest
nix flake update --flake nix # bump flake.lock (moves both channel pins)
bash nix/_install.sh # rebuild against the new pinsExpose only some binaries on PATH (instead of the whole env)
Default is whole-env exposure via nix/shlogin. To expose a subset instead,
drop the path_prepends line in nix/shlogin and symlink the chosen binaries
into ~/.local/bin from nix/_install.sh — there's a ready-to-use snippet in
that script's comment. ls ~/.local/nix-env/bin lists what the env ships.
Pinned versions live in
nix/flake.lock— it locks one revision per channel (so every package from a channel moves together), so commit it.nix/_install.shjust runsnix build, which is idempotent: a new store path when packages change, a no-op otherwise. Removing leftover Homebrew copies (brew uninstall) is a one-off and intentionally not scripted.