summaryrefslogtreecommitdiff
path: root/data.d/etc-nixos/README.md
blob: 798fe0cd69b3f1ea7b7a2029d1347f6424ef19db (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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# Set variables

```sh
disk=...
zfs_pool=...
swap_ratio=1.5
```

# Partition disk

```sh
parted -s "$disk" mklabel gpt
```

## boot

### MBR

We don't do MBR anymore!

### EFI

```sh
parted -a optimal "$disk" mkpart primary fat32 1MiB 1001MiB
parted "$disk" set 1 esp on

mkfs.vfat -F32 "${disk}1"
```

## swap

```sh
swap_end=$(awk '/MemTotal/ { print int($2 / 1000 * '"$swap_ratio"') + 1001 }' /proc/meminfo)
parted -a optimal "$disk" mkpart primary linux-swap 1001MiB "$swap_end"

mkswap "${disk}2"
swapon "${disk}2"
```

## zpool

```sh
parted -a optimal "$disk" mkpart primary "$swap_end" 100%

zpool create \
    -O mountpoint=none \
    -O encryption=on \
    -O keyformat=passphrase \
    -O keylocation=prompt \
    -O acltype=posixacl \
    -O xattr=sa \
    -O compression=zstd \
    -O dnodesize=auto \
    -O normalization=formD \
    -o ashift=12 \
    -o autotrim=on \
    -R /mnt \
    "$zfs_pool" "${disk}3"
```

### zfs volumes

```sh
zfs create -o mountpoint=none   "$zfs_pool/rootfs"
zfs create -o mountpoint=legacy "$zfs_pool/rootfs/nixos"
zfs create -o mountpoint=legacy "$zfs_pool/homefs"
zfs create -o mountpoint=legacy "$zfs_pool/homefs/root"
zfs create -o mountpoint=legacy "$zfs_pool/homefs/tyil"
```

# Mount partitions/volumes

```sh
mount -t zfs "$zfs_pool/rootfs/nixos" /mnt

mkdir -pv -- /mnt/boot
mount -t vfat "${disk}1" /mnt/boot

mkdir -pv -- /mnt/home
mount -t zfs "$zfs_pool/homefs" /mnt/home

mkdir -pv -- /mnt/root
mkdir -pv -- /mnt/home/tyil
mount -t zfs "$zfs_pool/homefs/root" /mnt/root
mount -t zfs "$zfs_pool/homefs/tyil" /mnt/home/tyil
```

# Install NixOS

## Configure

```sh
nixos-generate-config --root /mnt
```

Apply configs in `/mnt/etc/nixos`

```nix
{
    boot.supportedFilesystems = [ "zfs" ];
    boot.zfs.devNodes = ...
    boot.zfs.forceImportRoot = false;
    networking.hostId   = $(head -c4 /dev/urandom | od -A none -t x4)
    networking.hostName = ...
}
```

## Install

```sh
cd /mnt && nixos-install
```

## Reboot

```sh
umount -lR /mnt
zpool export "$zfs_pool"
```