dot

vizie's NixOS desktop: Hyprland, CachyOS kernel and gaming tweaks

184 lines8612 bytesMarkdown
1# Moving from CachyOS to NixOS
2
3The install wipes the whole NVMe drive (`nvme0n1`, the 980 PRO) and lays it out
4again with disko, as `hosts/desktop/disko.nix` describes. CachyOS and everything
5in it are gone afterwards, so your home folder goes to the Kingston SATA SSD
6(`sda`) first and comes back after the install. Game installs aren't backed up
7(see `backup-filter`): Steam games and WoW download again. WoW's settings and
8addons are kept.
9
10The other SATA SSD (`sdb`) isn't touched at any point. disko only knows the
11NVMe drive, by its serial number.
12
13## 1. Before you start (on CachyOS)
14
15- [ ] Push this repo and the latest `Eiziv/philly`.
16- [ ] Get the NixOS installer (26.05, minimal is enough) on a USB stick, and
17 make sure Secure Boot is off in the firmware, as it is for Limine now.
18- [ ] Optional, but this is the last chance: record WoW's performance on
19 CachyOS, to compare with NixOS later. In Faugus, edit Battle.net, turn
20 on MangoHud and add this line to the launch arguments:
21 `MANGOHUD_CONFIG=read_cfg,output_folder=/home/vizie/benchmarks,log_duration=60`.
22 In game, stand somewhere you can return to (a busy city), keep the camera
23 still and press Left Shift+F2. Do it three times. The logs land in
24 `~/benchmarks`, which the backup includes.
25
26**Prepare the backup drive.** This erases `sda`, the 112 GB Kingston, which
27is empty now. Check that the name points at `sda` first:
28
29```bash
30ls -l /dev/disk/by-id/ata-KINGSTON_SA400S37120G_50026B76820FD3CE
31sudo mkfs.btrfs -L backup /dev/disk/by-id/ata-KINGSTON_SA400S37120G_50026B76820FD3CE
32sudo mkdir -p /mnt/backup
33sudo mount -o compress=zstd /dev/disk/by-label/backup /mnt/backup
34sudo install -d -o vizie /mnt/backup/nix-cache /mnt/backup/wow
35```
36
37**Save the built system.** The finished system and the disko script go onto
38the backup drive, so the installer doesn't have to build anything (or compile
39the CachyOS kernel, if its binary cache is still down):
40
41```bash
42cd ~/git/dot
43sys=$(nix build --no-link --print-out-paths .#nixosConfigurations.desktop.config.system.build.toplevel)
44disko=$(nix build --no-link --print-out-paths .#nixosConfigurations.desktop.config.system.build.diskoScript)
45nix copy --to 'file:///mnt/backup/nix-cache?compression=zstd' "$sys" "$disko"
46echo "$sys" > /mnt/backup/nix-cache/system
47echo "$disko" > /mnt/backup/nix-cache/disko
48```
49
50**Back up WoW's settings and addons** (`WTF` is keybinds, macros and addon
51settings, `Interface` is the addons):
52
53```bash
54cp -a ~/Games/battlenet/drive_c/'Program Files (x86)'/'World of Warcraft'/_retail_/{WTF,Interface} /mnt/backup/wow/
55```
56
57**Back up your home folder.** Quit Signal, Discord, Firefox, Claude and the
58games first, so their databases aren't copied halfway through a write. About
5983 GB before compression, and the saved system adds roughly 10 GB, so it fits
60the 112 GB drive with some room. If it runs out of space, leave out repos that
61are pushed to GitHub (the biggest are `git/skate3`, 23 GB, and `git/philly`,
6216 GB) with an extra `--exclude=/git/skate3/`:
63
64```bash
65sudo rsync -aHAXx --info=progress2 --filter='merge /home/vizie/git/dot/backup-filter' /home/vizie/ /mnt/backup/vizie/
66```
67
68Check that it looks complete (`ls -a /mnt/backup/vizie`, `du -sh /mnt/backup/*`),
69then `sudo umount /mnt/backup`.
70
71## 2. Install
72
73Boot the installer. Wired network works out of the box; the install itself
74doesn't need it.
75
76```bash
77sudo -i
78
79# The backup drive, read-only. Not under /mnt: disko unmounts everything there.
80mkdir /backup
81mount -o ro /dev/disk/by-label/backup /backup
82sys=$(cat /backup/nix-cache/system)
83disko=$(cat /backup/nix-cache/disko)
84
85# The disko script. It doesn't ask before it wipes, so check that the drive it
86# names is the 980 PRO (nvme0n1) one last time.
87ls -l /dev/disk/by-id/nvme-Samsung_SSD_980_PRO_1TB_S5GXNF1R877751D
88nix --extra-experimental-features nix-command copy --no-check-sigs --from file:///backup/nix-cache "$disko"
89
90# Wipe, partition, format and mount the NVMe drive at /mnt.
91"$disko"
92
93# Copy the system onto it and install it, with the boot loader.
94nix --extra-experimental-features nix-command copy --no-check-sigs \
95 --from file:///backup/nix-cache --to 'local?root=/mnt' "$sys"
96nixos-install --system "$sys" --no-channel-copy
97# It asks for a root password at the end.
98
99# Your home folder back, owned by you (uid 1000, group users).
100rsync -aHAX --info=progress2 --chown=1000:100 /backup/vizie/ /mnt/home/vizie/
101nixos-enter --root /mnt -c 'passwd vizie'
102reboot
103```
104
105If something in `/backup/nix-cache` is missing, install from the flake instead
106(this needs the network, and compiles the kernel if its cache is down):
107`nixos-install --flake /backup/vizie/git/dot#desktop` after
108`nix run github:nix-community/disko/latest -- --mode destroy,format,mount /backup/vizie/git/dot/hosts/desktop/disko.nix`.
109
110## 3. First boot
111
112- The login screen is the same gtkgreet over the blurred wallpaper.
113- Home Manager replaces the old symlinks in `~/.config` (pointing into
114 `~/git/dotfiles`) with its own. The old ones are kept beside them with a
115 `.pre-nixos` suffix, so nothing is overwritten.
116- Bolt installs from Flathub in the background on the first boot with network
117 (`systemctl status flatpak-bolt`).
118- "Command not found" suggestions need nix-index's database once:
119 `nix-index` (takes a few minutes).
120- Check the background programs: `systemctl --user list-units --type=service`.
121
122## 4. What changed
123
124What is different from CachyOS, all on purpose:
125
126- **Packages** are generic x86-64 builds, apart from the kernel (Zen 4) and
127 proton-cachyos (x86-64-v3). CachyOS rebuilds everything for v3/v4.
128- **Snapper** root snapshots are replaced by NixOS generations: each rebuild is
129 a boot menu entry. `/home` was never snapshotted on CachyOS either.
130- **GTK theme**: set in `modules/home/theming.nix`. nwg-look can't save over
131 those files any more.
132- **Signal theme** is built into the package: edit, `rebuild`, `config/signal/restart`.
133- **Bitwarden** autostart: the same XDG autostart entry, with NixOS's program name.
134- **fish**: only CachyOS's default fish config was there, and your shell is zsh,
135 so fish isn't set up.
136- **vkBasalt's ReShade shaders** in `~/.config/vkBasalt/reshade-shaders` stay in
137 your home folder; they aren't in this repo (vkBasalt.conf doesn't use them).
138- **vkSumi**: its config is kept, but the layer itself wasn't installed on
139 CachyOS (there is no nixpkgs package for it either).
140
141Unchanged on purpose, but worth knowing:
142
143- **kitty's font**: kitty.conf asks for JetBrains Mono, which was never
144 installed, so kitty has been showing Noto Sans Mono. That's kept. Add
145 `nerd-fonts.jetbrains-mono` to `fonts.packages` in `modules/nixos/desktop.nix`
146 to get the font the config names.
147- **The login screen opens a kitty terminal** behind gtkgreet
148 (`hl.exec_cmd("kitty")` in `config/greetd/hyprland.lua`), running as the
149 greeter user. If gtkgreet ever crashed, that shell would be on screen before
150 anyone logs in. If it's a leftover from debugging, delete that line.
151- **`~/.ssh/authorized_keys`** has a key labelled `chris@echoz.io`, which lets
152 that key log in as you over SSH (port 22 is open, as before). It stays in your
153 home folder.
154- **mDNS** (port 5353) stays closed in the firewall, as ufw had it.
155- **sched-ext** schedulers stay off, as before. See the comment in
156 `modules/nixos/cachyos.nix` to try one.
157
158## 5. Games
159
160- **Steam**: your settings, Proton versions and game saves (`compatdata`) are
161 back. The games in `~/Games/SteamLibrary` and Steam's own library show as
162 not installed; install them again. Steam may need the library folder
163 re-added (Settings → Storage).
164- **WoW**: in Faugus, remove the old Battle.net entry and add Battle.net again
165 (Faugus installs it into a new prefix at `~/Games/battlenet`). Pick the same
166 runner, `Proton-CachyOS Latest` (it's back in
167 `~/.local/share/Steam/compatibilitytools.d`), and the same launch arguments:
168 `WINE_SIMULATE_WRITECOPY=1` and `PROTON_ENABLE_WAYLAND=0`. Install WoW, then
169 copy your settings and addons back before you start it:
170
171 ```bash
172 sudo mount -o ro /dev/disk/by-label/backup /mnt
173 cp -a /mnt/wow/{WTF,Interface} ~/Games/battlenet/drive_c/'Program Files (x86)'/'World of Warcraft'/_retail_/
174 sudo umount /mnt
175 ```
176
177- **OSRS**: Bolt installs itself again (see First boot); its data in
178 `~/.var/app/com.adamcake.Bolt` came back with your home folder, so you
179 stay signed in.
180
181## 6. Once you're happy
182
183The backup on `sda` stays until you need the drive for something else. NixOS
184doesn't mount it; `sudo mount /dev/disk/by-label/backup /mnt` gets you into it.