# NixOS For each machine, there is a top-level directory, e.g. [yodaTab](yodaTab). ## Build and Switch * https://nixos.wiki/wiki/Nixos-rebuild Directly change to new config, make it default: ```shell sudo nixos-rebuild -I nixos-config=yodaTab/configuration.nix switch ``` ## System updates * https://superuser.com/a/1604695 ```shell sudo nix-channel --update ``` ```shell # The -s param does currently not work for both, .nix and .json file. # Workaround: https://github.com/nmattia/niv/pull/133#issuecomment-703322261 # #niv --sources-file=yodaTab/nix/sources.json update # (cd yodaTab && niv update) ``` Then run `nixos-rebuild switch`, see above. ## Garbage Collection * https://nixos.org/manual/nix/stable/package-management/garbage-collection.html ```shell nix-env --delete-generations 14d nix-store --gc ``` ## Install Home Manager with niv niv: > Easy dependency management for Nix projects. > > Nix is a very powerful tool for building code and setting up environments. niv complements it by making it easy to > describe and update remote dependencies (URLs, GitHub repos, etc). It is a simple, practical alternative to Nix > flakes. > > https://github.com/nmattia/niv > Niv is an easy dependency management for Nix projects with package pinning. > > https://github.com/mikeroyal/NixOS-Guide Home Manager: > [Home Manager] allows declarative configuration of user specific (non-global) packages and dotfiles. > > To avoid breaking users' configurations, Home Manager is released in branches corresponding to NixOS releases ( > e.g. `release-23.05`). > > Home Manager provides both the channel-based setup and the flake-based one. > > https://github.com/nix-community/home-manager Check your channel: ```shell sudo nix-channel --list #=> nixos https://nixos.org/channels/nixos-23.05 ``` Use the corresponding branch: ```shell (cd yodaTab && niv add nix-community/home-manager -n home-manager -b release-23.05) ``` ## disko and nixos-anywhere * Introductory presentation: https://pad.lassul.us/cccamp-workshop * disko: https://github.com/nix-community/disko * nixos-anywhere: https://github.com/numtide/nixos-anywhere/ ```shell # TODO (!) ``` ## Automount Encrypted Drive * Generate and add keyfile to LUKS device * luksOpen and mount drive, e.g. to `/mnt/data1` * Re-generate hardware configuration: ```shell sudo nixos-generate-config --dir yodaTab ``` ## GNOME extensions * https://github.com/nix-community/home-manager/issues/284#issuecomment-531384656 * https://github.com/nix-community/home-manager/issues/284#issuecomment-1321199263 * Search for packaged extensions: https://search.nixos.org/packages?channel=23.05&from=0&size=50&sort=relevance&type=packages&query=gnomeExtensions * One has to re-login after changes: https://github.com/nix-community/home-manager/issues/284#issuecomment-1328269433 ```shell # TODO ``` ## Run an AppImage * https://nixos.wiki/wiki/Appimage ```shell # Note how your shell prefix changes. nix-shell --packages appimage-run ``` ```shell # Inside the shell, you can run an AppImage: appimage-run ~/Downloads/ubports-installer_0.10.0_linux_x86_64.AppImage ``` ## General Notes * There is controversy about flakes, rather use channels (e.g. with niv) ### Nix Pills * https://nixos.org/guides/nix-pills/pr01 It provides a tutorial introduction into the Nix package manager and Nixpkgs package collection, in the form of short chapters called 'pills'. ### Thesis There are two (?) theses about Nix. One is https://edolstra.github.io/pubs/phd-thesis.pdf ### Search for packages * https://search.nixos.org/packages?channel=23.05 ### Search for options * https://search.nixos.org/options?channel=23.05 * Or `man configuration.nix` * https://mipmip.github.io/home-manager-option-search * Or `man home-configuration.nix` ### Search wich package owns a file ```shell # Note how your shell prefix changes. nix-shell --packages nix-index ``` ```shell # Inside the shell: # Either build the index manually (requires >8GB RAM) nix-index # Or download weekly build: mkdir -p ~/.cache/nix-index/ && wget -q -N https://github.com/nix-community/nix-index-database/releases/latest/download/index-x86_64-linux -O ~/.cache/nix-index/files # Then search for a file nix-locate -w '/bash' ``` ### References Some references to websites that helped me create this repository: * https://github.com/Misterio77/nix-starter-configs * https://github.com/mikeroyal/NixOS-Guide#getting-started ## TODOs * FDE remote SSH unlock: https://nixos.wiki/wiki/Remote_LUKS_Unlocking * Impermanence, opt-in to persistence: https://github.com/Misterio77/nix-starter-configs/tree/main#try-opt-in-persistance * nix-shell / lorri * https://ghedam.at/15978/an-introduction-to-nix-shell * docker-compose.yml for services and nix-shell to run the code