nix-git/README.md
2023-08-22 19:12:20 +02:00

159 lines
4.1 KiB
Markdown

# 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.
## 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
# 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`
### 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