nix/readme.md

2.5 KiB

Nix

My grand, declarative, and unified application, service, environment, and machine configuration, secret, and package management in a single flake. ❤️ ❄️

NOTE: Everything in here is highly specific to my personal preference. I can't recommend you actually use this in any way, but hopefully some stuff in here is useful inspiration.

Quick Start

You don't have even have to clone this crap yourself. How cool is that!

NixOS

nixos-rebuild --flake git+https://git.lyte.dev/lytedev/nix switch

Not NixOS

$ curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
$ nix profile install github:nix-community/home-manager
$ home-manager switch --flake git+https://git.lyte.dev/lytedev/nix

Advanced Usage

Push NixOS Config

nix run nixpkgs#nixos-rebuild -- --flake 'git+https://git.lyte.dev/lytedev/nix#host' \
  --target-host root@host --build-host root@host \
  switch --show-trace

Provisioning New NixOS Hosts

# establish network access
# plug in ethernet or do the wpa_cli song and dance for wifi
wpa_cli scan
wpa_cli scan_results
wpa_cli add_network 0
wpa_cli set_network 0 ssid "MY_SSID"
wpa_cli set_network 0 psk "MY_WIFI_PASSWORD"
wpa_cli enable_network 0
wpa_cli save_config

# partition disks
nix-shell --packages git --run "sudo nix run \
  --extra-experimental-features nix-command \
  --extra-experimental-features flakes \
  github:nix-community/disko -- \
    --flake 'git+https://git.lyte.dev/lytedev/nix#${PARTITION_SCHEME}' \
    --mode disko \
    --arg disks '[ \"/dev/${DISK}\" ]'"

# install
nix-shell --packages git \
  --run "sudo nixos-install \
    --option substituters https://nix.h.lyte.dev
    --flake 'git+https://git.lyte.dev/lytedev/nix#${FLAKE_ATTR}'"

To Do

  • Port configuration (lytedev/dotfiles) to home manager where applicable?
    • Sway, Kitty, and Helix, come to mind
  • Installation from a live ISO does not fully work yet
  • I don't understand Nix well enough to know why stuff is being compiled even when I have a binary cache
    • Maybe it detects different CPUs and will recompile certain packages for per-CPU optimizations?
      • How does this factor in with "pureness"?
  • Custom pre-configured live ISO
  • Unify standalone home manager module with NixOS home manager module
  • Pre-commit checks with stuff like nix flake check and formatting checkers