My NixOS configuration and deployment.
Go to file
2023-08-31 13:18:52 +02:00
yodaTab refactor 2023-08-31 13:18:52 +02:00
.gitignore add .gitignore 2023-08-16 14:23:51 +02:00
known_hosts Nitrokey and SSH 2023-08-30 19:23:13 +02:00
README.md refactor 2023-08-30 19:23:27 +02:00

NixOS

For each machine, there is a top-level directory, e.g. yodaTab.

Build and Switch

Directly change to new config and make it default:

sudo nixos-rebuild -I nixos-config=yodaTab/configuration.nix switch

System updates

sudo nix-channel --update
# 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

For all profiles:

sudo nix-collect-garbage --delete-older-than 14d

Remove old generations from EFI:

sudo /run/current-system/bin/switch-to-configuration boot

Evaluate configuration.nix to JSON

TODO: https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-show-config.html

This evaluates configuration.nix (single module):

NIXPKGS_ALLOW_UNFREE=1 nix-instantiate --strict --json --eval -E '
import ./yodaTab/configuration.nix  {
  config = {};
  pkgs = import <nixpkgs> {};
  lib = import <nixpkgs/lib>;
}
' > evaluated-config.json

Then open evaluated-config.json.

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:

sudo nix-channel --list
#=> nixos https://nixos.org/channels/nixos-23.05

Use the corresponding branch:

(cd yodaTab && niv add nix-community/home-manager -n home-manager -b release-23.05)

disko and nixos-anywhere

# TODO (!)

BTRFS Swap file

Summary:

  • Create subvolume @swap directly below top-level subvolume.
  • Mount at /swap
  • Create swapfile: sudo btrfs filesystem mkswapfile --size 8g --uuid clear /swap/swapfile
  • Regenerate hardware-configuration: sudo nixos-generate-config --dir yodaTab
  • Add swapDevices = [ { device = "/swap/swapfile"; } ]; to hardware configuration and run nixos-rebuild switch (see above).

Automount Encrypted Drive

  • Generate and add keyfile to LUKS device
  • luksOpen and mount drive, e.g. to /mnt/data1
  • Re-generate hardware configuration:
sudo nixos-generate-config --dir yodaTab

GNOME extensions

# TODO

Run an AppImage

# Note how your shell prefix changes.
nix-shell --packages appimage-run
# 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)
  • Prins, P., Suresh, J. and Dolstra, E., "Nix fixes dependency hell on all Linux distributions," Archived December 26, 2008, at the Wayback Machine linux.com, December 22, 2008

Nix Pills

It provides a tutorial introduction into the Nix package manager and Nixpkgs package collection, in the form of short chapters called 'pills'.

Papers

Papers about Nix:

Search for packages

Search for options

Search wich package owns a file

# Note how your shell prefix changes.
nix-shell --packages nix-index
# 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:

TODOs