summaryrefslogtreecommitdiff
path: root/nixos/README.md
blob: 58885276853dbecbb8e3ee6dd9a7f52e5f14288f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# Sane stable stateless NixOS setup

This is a fairly straightforward setup for making a NixOS system configuration stateless without relying on experimental Nix features.

This means:
- `nix-channel` is disabled
- Nixpkgs is managed with [niv](https://github.com/nmattia/niv) [^1]
- The same Nixpkgs is used for the system and all Nix commands
- This includes the Nixpkgs version, config and overlays

[^1]: Yes niv is a third-party tool, but it's essentially just a nice wrapper around `nix-prefetch-url` and co.

## Usage

We're assuming that you just installed NixOS by going through the [official installation docs](https://nixos.org/manual/nixos/stable/#sec-installation).

### Setup

1. Clone this repo to a local directory and enter it:
   ```
   nix-shell -p git --run \
     'git clone https://github.com/infinisil/sane-stable-nixos nixos'
   cd nixos
   ```
2. Add your initial NixOS configuration files, either
   - Move your existing configuration files into it:
     ```
     sudo mv /etc/nixos/* .
     ```
   - Generate new ones:
     ```
     nixos-generate-config --dir .
     ```
3. Pin Nixpkgs to the [latest stable version](https://nixos.org/manual/nixos/stable/release-notes) using [niv](https://github.com/nmattia/niv):
   ```
   nix-shell -p niv --run \
     'niv init --nixpkgs NixOS/nixpkgs --nixpkgs-branch nixos-23.11'
   ```
4. Remove all stateful channels:
   ```
   sudo rm -v /nix/var/nix/profiles/per-user/*/channels*
   ```
5. Rebuild:
   ```
   sudo ./rebuild switch
   ```
6. Log out and back in again.

### Making changes

Here are some changes you can make:
- Change the NixOS configuration in `./configuration.nix`
- Update the pinned Nixpkgs:
  ```
  niv update nixpkgs
  ```
- Upgrade to a newer release:
  ```
  niv update nixpkgs --branch nixos-23.11
  ```
- Change the Nixpkgs config by editing `nixpkgs/config.nix`
- Add Nixpkgs overlays to `nixpkgs/overlays.nix`
- Regenerate the hardware configuration:
  ```
  nixos-generate-configuration --dir .
  ```

To apply the changes, run
```
sudo ./rebuild switch
```

All options to `./rebuild` are forwarded to `nixos-rebuild`.

After rebuilding, the changes are reflected in the system.
Furthermore, all Nix commands on the system will also use the the same values.