nixos-cheatsheet/cheatsheet.typ

131 lines
4.7 KiB
Typst

#show link: underline
#set document(
title: [NixOS Cheatsheet],
author: "SIPB",
description: [https://forgejo.mit.edu/SIPB/nixos-cheatsheet],
)
#set page(
"us-letter",
columns: 2,
flipped: true,
margin: 1cm,
)
#grid(
columns: (80pt, auto),
[#block(image("nix-snowflake-colours.svg", width: 64pt))],
[#title()
Revision #datetime.today().display(), made by #context document.author.first() #box(image("sipb.svg", height: 15pt))
#context document.description],
)
#table(
stroke: (x: none, y: 0.5pt),
columns: (35%, auto),
table.header(
table.cell(fill: silver, align: center, [Task]),
table.cell(fill: silver, align: center, [Command]),
),
table.header(
level: 2,
repeat: false,
table.cell(fill: red, colspan: 2, align: center)[*Running software*],
),
[Search for software],
[```bash nix search nixpkgs hello``` #footnote[This evaluates nixpkgs so the first run may be slow, but further runs used cached results]],
[Run program],
[```bash nix run nixpkgs#hello``` #footnote[Pass `--` before any arguments to the program]],
[Run program from other nixpkgs branch],
```bash nix run nixpkgs/nixos-25.11#hello```,
[Run program from another flake],
```bash nix run github:user/nixpkgs/branch#hello```,
[Find nixpkgs revision for a specific version of a program],
[See #link("https://www.nixhub.io/")[nixhub.io]],
[Get shell with program], ```bash nix shell nixpkgs#hello```,
[Run AppImage], ```bash appimage-run hello.AppImage```,
table.header(
level: 2,
repeat: false,
table.cell(fill: orange, colspan: 2, align: center)[*Building the system*],
),
[Update flake inputs], ```bash nix flake update```,
[Build and deploy to this machine], ```bash nixos-rebuild switch --sudo```,
[Build on remote machine and deploy to current machine],
[```bash sudo nixos-rebuild switch --build-host user@remote --use-substitutes``` #footnote[This needs root on the current machine to add untrusted paths to the Nix store]],
[Build on current machine and deploy to remote machine],
[```bash nixos-rebuild switch --flake .#remote-machine-hostname --target-host root@remote``` #footnote[This needs root on the remote machine for the same reason]],
[Build and run VM from config],
[```bash nixos-rebuild build-vm && result/bin/run-$hostname-vm -m 4G -smp 4 -device virtio-vga-gl -display sdl,gl=on``` #footnote[You may need to change all occurrences of the QEMU version in the run script if the config uses a different nixpkgs revision than the host]],
[Build ISO from config],
[Add `"/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix"` as a module, then run ```bash nix build .#nixosConfigurations.$hostname.config.system.build.isoImage```],
table.header(
level: 2,
repeat: false,
table.cell(fill: yellow, colspan: 2, align: center)[*System generations*],
),
[List system generations], ```bash nixos-rebuild list-generations```,
[Get changes between system generations],
```bash nix profile diff-closures --profile /nix/var/nix/profiles/system```,
[Roll back one generation], ```bash nixos-rebuild switch --sudo --rollback```,
[Switch to generation],
```bash sudo nix-env --switch-generation 12345 -p /nix/var/nix/profiles/system && sudo /nix/var/nix/profiles/system/bin/switch-to-configuration switch```,
table.header(
level: 2,
repeat: false,
table.cell(fill: lime, colspan: 2, align: center)[*Store operations*],
),
[Get size of system],
```bash nix path-info -Sh /nix/var/nix/profiles/system```,
[Get size of Nix store],
```bash sqlite3 /nix/var/nix/db/db.sqlite 'SELECT SUM(narSize) FROM ValidPaths'```,
[Get largest packages],
```bash sqlite3 /nix/var/nix/db/db.sqlite 'SELECT * FROM ValidPaths ORDER BY narSize DESC LIMIT 20'```,
[Clean Nix store], ```bash sudo nix-collect-garbage && nix store optimise```,
[Delete generations older than 7 days],
```bash sudo nix-collect-garbage --delete-older-than 7d```,
[Check what depends on path],
```bash nix-store --query --referrers /nix/store/aaaaaa```,
table.header(
level: 2,
repeat: false,
table.cell(fill: aqua, colspan: 2, align: center)[*Nix development*],
),
[Run Nix file], ```bash nix eval -f main.nix```,
[Inspect system config in REPL],
```bash nix repl .#nixosConfigurations.$hostname```,
[Format flake],
[Add `formatter.${system} = pkgs.nixfmt-tree;` to your flake outputs, then run ```bash nix fmt```],
/*
table.header(
level: 2,
repeat: false,
table.cell(fill: fuchsia, colspan: 2, align: center)[*Infrequently-used commands*],
),
[Check flake], ```bash nix flake check```,
[Get shell with dependencies of package],
```bash nix develop nixpkgs#hello```,
[Create portable archive of package], ```bash nix bundle nixpkgs#hello```,
*/
)