2023-08-15 19:13:43 +02:00
# NixOS
2023-08-22 14:30:39 +02:00
For each machine, there is a top-level directory, e.g. [yodaTab ](yodaTab ).
2023-08-15 21:04:44 +02:00
2023-08-15 20:55:27 +02:00
## Build and Switch
2023-08-16 17:35:19 +02:00
* https://nixos.wiki/wiki/Nixos-rebuild
2023-08-28 12:53:00 +02:00
Directly change to new config and make it default:
2023-08-15 19:13:43 +02:00
```shell
2023-08-22 14:30:39 +02:00
sudo nixos-rebuild -I nixos-config=yodaTab/configuration.nix switch
2023-08-15 19:13:43 +02:00
```
2023-08-15 20:55:27 +02:00
2023-08-22 14:25:18 +02:00
## 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
#
2023-08-22 14:30:39 +02:00
#niv --sources-file=yodaTab/nix/sources.json update
2023-08-22 14:25:18 +02:00
#
2023-08-22 14:30:39 +02:00
(cd yodaTab & & niv update)
2023-08-22 14:25:18 +02:00
```
Then run `nixos-rebuild switch` , see above.
2023-08-24 14:00:59 +02:00
## Garbage Collection
* https://nixos.org/manual/nix/stable/package-management/garbage-collection.html
2023-08-28 12:53:00 +02:00
* https://discourse.nixos.org/t/why-doesnt-nix-collect-garbage-remove-old-generations-from-efi-menu/17592/4
For all profiles:
```shell
sudo nix-collect-garbage --delete-older-than 14d
```
Remove old generations from EFI:
2023-08-24 14:00:59 +02:00
```shell
2023-08-28 12:53:00 +02:00
sudo /run/current-system/bin/switch-to-configuration boot
2023-08-24 14:00:59 +02:00
```
2023-08-15 20:55:27 +02:00
## Install Home Manager with niv
2023-08-21 16:30:34 +02:00
niv:
2023-08-17 10:52:06 +02:00
> 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
2023-08-21 16:30:34 +02:00
> describe and update remote dependencies (URLs, GitHub repos, etc). It is a simple, practical alternative to Nix
> flakes.
2023-08-17 10:52:06 +02:00
>
> https://github.com/nmattia/niv
2023-08-21 16:30:34 +02:00
> 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.
2023-08-17 10:52:06 +02:00
>
2023-08-16 18:28:19 +02:00
> To avoid breaking users' configurations, Home Manager is released in branches corresponding to NixOS releases (
> e.g. `release-23.05`).
2023-08-17 10:52:06 +02:00
>
2023-08-15 20:55:27 +02:00
> Home Manager provides both the channel-based setup and the flake-based one.
2023-08-17 10:52:06 +02:00
>
> https://github.com/nix-community/home-manager
2023-08-15 20:55:27 +02:00
Check your channel:
```shell
sudo nix-channel --list
#=> nixos https://nixos.org/channels/nixos-23.05
```
Use the corresponding branch:
```shell
2023-08-22 14:30:39 +02:00
(cd yodaTab & & niv add nix-community/home-manager -n home-manager -b release-23.05)
2023-08-15 20:55:27 +02:00
```
2023-08-16 17:35:19 +02:00
## disko and nixos-anywhere
2023-08-21 16:30:34 +02:00
* Introductory presentation: https://pad.lassul.us/cccamp-workshop
2023-08-16 17:35:19 +02:00
* disko: https://github.com/nix-community/disko
* nixos-anywhere: https://github.com/numtide/nixos-anywhere/
2023-08-18 19:57:09 +02:00
```shell
# TODO (!)
```
2023-08-28 15:50:16 +02:00
## BTRFS Swap file
* https://nixos.wiki/wiki/Btrfs#Swap_file
* https://wiki.archlinux.org/title/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).
2023-08-18 19:57:09 +02:00
## Automount Encrypted Drive
* Generate and add keyfile to LUKS device
* luksOpen and mount drive, e.g. to `/mnt/data1`
* Re-generate hardware configuration:
```shell
2023-08-22 14:30:39 +02:00
sudo nixos-generate-config --dir yodaTab
2023-08-18 19:57:09 +02:00
```
2023-08-16 17:35:19 +02:00
2023-08-18 20:31:09 +02:00
## GNOME extensions
* https://github.com/nix-community/home-manager/issues/284#issuecomment-531384656
* https://github.com/nix-community/home-manager/issues/284#issuecomment-1321199263
2023-08-21 16:30:34 +02:00
* 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
2023-08-18 20:31:09 +02:00
```shell
# TODO
```
2023-08-22 19:03:39 +02:00
## Run an AppImage
* https://nixos.wiki/wiki/Appimage
```shell
# Note how your shell prefix changes.
nix-shell --packages appimage-run
2023-08-24 13:17:43 +02:00
```
```shell
2023-08-22 19:03:39 +02:00
# Inside the shell, you can run an AppImage:
appimage-run ~/Downloads/ubports-installer_0.10.0_linux_x86_64.AppImage
```
2023-08-16 17:35:19 +02:00
## General Notes
2023-08-22 14:30:39 +02:00
* There is controversy about flakes, rather use channels (e.g. with niv)
2023-08-29 12:22:31 +02:00
* Prins, P., Suresh, J. and Dolstra, E., "Nix fixes dependency hell on all Linux distributions," [Archived ](https://web.archive.org/web/20081226010942/http://www.linux.com/feature/155922 ) December 26, 2008, at the Wayback Machine linux.com, December 22, 2008
2023-08-22 14:30:39 +02:00
2023-08-16 18:28:19 +02:00
### 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'.
2023-08-29 12:22:31 +02:00
### Papers
2023-08-16 17:35:19 +02:00
2023-08-29 12:22:31 +02:00
Papers about Nix:
* The Purely Functional Software Deployment Model (2006). http://nixos.org/~eelco/pubs/phd-thesis.pdf, https://edolstra.github.io/pubs/phd-thesis.pdf, https://github.com/edolstra/edolstra.github.io/blob/master/pubs/phd-thesis.pdf
* May 2023: Some insights from the thesis in short form. https://jonathanlorimer.dev/posts/nix-thesis.html
* NixOS: A Purely Functional Linux Distribution (2008): https://github.com/edolstra/edolstra.github.io/blob/master/pubs/nixos-icfp2008-final.pdf, https://github.com/edolstra/edolstra.github.io/blob/master/pubs/nixos-jfp-final.pdf
* Nix: A Safe and Policy-Free System for Software Deployment (2004): https://edolstra.github.io/pubs/nspfssd-lisa2004-final.pdf
2023-08-16 17:35:19 +02:00
### Search for packages
* https://search.nixos.org/packages?channel=23.05
2023-08-18 19:45:49 +02:00
### Search for options
* https://search.nixos.org/options?channel=23.05
2023-08-21 16:30:34 +02:00
* Or `man configuration.nix`
2023-08-18 19:45:49 +02:00
* https://mipmip.github.io/home-manager-option-search
2023-08-21 16:30:34 +02:00
* Or `man home-configuration.nix`
2023-08-18 19:45:49 +02:00
2023-08-24 13:17:43 +02:00
### 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'
```
2023-08-18 19:57:09 +02:00
### References
2023-08-16 17:35:19 +02:00
2023-08-18 19:57:09 +02:00
Some references to websites that helped me create this repository:
2023-08-18 19:18:47 +02:00
2023-08-18 19:57:09 +02:00
* https://github.com/Misterio77/nix-starter-configs
2023-08-21 16:30:34 +02:00
* https://github.com/mikeroyal/NixOS-Guide#getting-started
2023-08-18 19:18:47 +02:00
2023-08-18 20:32:06 +02:00
## TODOs
2023-08-18 19:18:47 +02:00
2023-08-18 19:57:09 +02:00
* FDE remote SSH unlock: https://nixos.wiki/wiki/Remote_LUKS_Unlocking
2023-08-21 16:30:34 +02:00
* Impermanence, opt-in to
persistence: https://github.com/Misterio77/nix-starter-configs/tree/main#try-opt-in-persistance
2023-08-22 19:12:20 +02:00
* nix-shell / lorri
* https://ghedam.at/15978/an-introduction-to-nix-shell
* docker-compose.yml for services and nix-shell to run the code