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"
```
|