dotfiles/nix
..
lib
modules
overlays
systems
users
.gitignore
flake.lock
flake.nix
README.md

null2264's Nix Setup

Structure

├── flake.lock
├── flake.nix
├── lib/                        # Self-explanatory, it contains helper functions
│   ├── mkCommon.nix
│   └── mkSystem.nix
├── modules/                    # Contains shared configuration across system, across user
│   └── home-manager
│       └── floorp.nix
├── overlays/                   # Nix overlays, self-explanatory
├── systems/                    # Contains configurations depending on what type OS nix is being used in
│   ├── darwin/                 # - macOS
│   │   ├── configuration.nix   # -- There supposed supposed to be a split here just like `nix/`, but I got lazy
│   │   ├── default.nix         # -- Where you register your Mac (based on hostname)
│   ├── nix/                    # - non-NixOS (Linux/BSD/etc..)
│   │   ├── default.nix         # -- Where you register your PC (based on hostname)
│   │   └── <hostname>/
│   │       └── default.nix
│   └── nixos/                  # - NixOS
└── users/                      # Contains configurations for multi-user setup
    ├── default.nix             # - Where you register the user(s)
    └── <user>/                 # - Recommended to split it to several nix files depending on the OS type you're planning to use
        ├── darwin.nix          # -- macOS
        ├── default.nix         # -- Common (works on all OS type)
        └── linux.nix           # -- Linux

Setup

Nix

It is recommended to install nix using Determinate Nix Installer or Nix's Official Installer (with --daemon flag, aka Multi-user installation) instead of whatever provided by your OS' package manager to avoid potential incompatibility.

macOS

Note

If you're using Alfred, to make Applications installed via Nix to appear on Alfred:

  • Open Alfred Preferences
  • General > Default Results > Extras > Click Advanced
  • Add com.apple.alias-file

Caution

This setup is NOT compatible with homebrew, it is designed to completely replaces homebrew. Uninstall homebrew before proceeding.

Nix in macOS is handled by nix-darwin.

Initial

This is done because nix-darwin commands is not yet added to PATH, should be a one-time thing

nix-env -iA nixpkgs.git
# Run `sudo chown $USER /nix/var/nix/profiles/per-user/$USER` if that returns error

nix build .#darwinConfigurations.<host>.system

./result/sw/bin/darwin-rebuild switch --flake .#<host>
# or
nix run nix-darwin -- switch --flake .#<host>

Rebuild

After initial setup, you should now be able to use the command directly:

darwin-rebuild build --flake .  # or you can specify the hostname with `--flake . #<hostname>`

# or if you're feeling lucky

darwin-rebuild switch --flake .

Other

Nix in non-NixOS Linux is handled by system-manager.

Rebuild

Unfortunately, root access is required in order to use system-manager.

sudo -i nix run 'github:numtide/system-manager' --extra-experimental-features "nix-command flakes" -- switch --flake $PWD

Home

This is for per-user setup. Instead of managing the entire system, you're managing one user at a time. This is handled by home-manager

Rebuild

home-manager build --flake .  # or you can specify the user with `--flake . #<username>@<hostname>`

# or if you're feeling lucky

home-manager switch --flake .