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
120
121
122
123
124
125
|
see TODO.md for my aspirations
## usage
### install
note: I have not tested the following verbatim.
It *will* erase the contents of /dev/sdX. Use with caution.
1. create usb with minimal NixOS iso
2. boot from usb
3. create partitions
```console
$ #modern partition table
$ #WARNING all data on /dev/sdX will be erased. Make sure it is your target
$ parted /dev/sdX -- mklabel gpt
$ #make root partition
$ parted /dev/sdX -- mkpart ESP fat32 1MiB 512MiB
$ parted /dev/sdX -- set 1 esp on
$ #create store partition
$ parted /dev/sdX -- mkpart nix btrfs 512MiB 100GiB
$ #if your device is in english, use a period rather than a comma
$ parted /dev/sdX -- mkpart root btrfs 100GiB 199,5GiB
```
4. create filesystems
```console
$ #make sure not to get your subvolumes mixed up
$ #there should be 3, the first boot and the others 99,5GiB each
$ fdisk -l
$ #boot partition
$ mkfs.fat -F 32 /dev/sdX1
$ #store partition
$ mkfs.btrfs /dev/sdX2
$ #root partition
$ mkfs.btrfs /dev/sdX3
$ #create root subvolume
$ btrfs subvolume create /dev/sdX3/root
```
5. mount filesystems
```console
$ #note the uuid of your disks
$ #they will be symlinked to something recognisable
$ #don't get them mixed up
$ ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 15 Dez 30 11:31 0e586651-36f4-42b0-99b3-3f0704a894d6 -> ../../sdX2
lrwxrwxrwx 1 root root 15 Dez 30 11:31 16c93673-4f0e-4010-a7f4-7ccffb20edb7 -> ../../sdX3
lrwxrwxrwx 1 root root 15 Dez 30 11:31 F425-55BA -> ../../sdX1
$ #now mount the appropriate filesystems using your uuids; these are mine
$ mount -o subvol-root /dev/disk/by-uuid/16c93673-4f0e-4010-a7f4-7ccffb20edb7 /mnt
$ mkdir -p /mnt/{boot,nix}
$ mount -o umask=077 /dev/disk/by-uuid/F425-55BA /mnt/boot
$ mount /dev/disk/by-uuid/0e586651-36f4-42b0-99b3-3f0704a894d6 /mnt/nix
```
6. prepare for installation
```console
$ mkdir -p /mnt/etc/nixos
$ nixos-generate-config --root /mnt
$ cat /mnt/etc/nixos/hardware-configuration.nix
$ #note the random flags and stuff in hardware-configuration.nix; you might
$ #want to keep a copy around for the time being
$ rm /mnt/etc/nixos/*
$ #connect to the internet
$ nmtui
$ git clone https://git.mtgmonkey.net/andromeda/conf /mnt/etc/nixos
$ cd /mnt/etc/nixos
$ nix-shell -p tree --command tree
.
├── configuration.nix
├── flake.lock
├── flake.nix
├── machines
│ └── laptop
│ ├── hardware-configuration.nix
│ └── machine.nix
├── README.md
└── users
└── andromeda
├── home.nix
└── stylix.nix
5 directories, 8 files
$ #copy the `laptop` derivation and change all occurences of `laptop` with
$ #`your-machine` in `flake.nix`
$ cp machines/laptop machines/your-machine -r
$ #modify `machines/your-machine/hardware-configuration.nix` by changing the
$ #uuids to those of your drives
$ #also copy the flags and stuff from `hardware-configuration.nix` generated
$ #earlier
$ #change the hostname in `machines/your-machine/machine.nix` to your liking.
$ #If you want to pull request to my repo, `hostname` *must* be "your-machine"
$ #if you want a different user, edit `machines/your-machine/machine.nix` to
$ #reflect that. Create the file `users/your-user/home.nix` with your home
$ #manager configuration. Add your user's `impermanence` information in
$ #`configuration.nix`
$ #make sure to give your user an initalPassword, otherwise you won't be able
$ #to log in! Later, use a secrets scheme to have a real password
$ git add -A
```
7. install
```console
$ cd /mnt/etc/nixos
$ nix flake check
$ #resolve any errors. You may have forgotten to add things to git, users,
$ #machines...
$ nixos-install --no-root-password --flake .#your-machine
```
8. reboot
```console
$ systemctl reboot
```
|