dot

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

161 lines7626 bytesMarkdown
1# Moving from CachyOS to NixOS
2
3[nixos-anywhere]https://github.com/nix-community/nixos-anywhere installs
4NixOS from the MacBook over SSH. It switches the running CachyOS into a NixOS
5installer in RAM (kexec), wipes the NVMe drive and lays it out as
6`hosts/desktop/disko.nix` says, builds the system on the desktop itself and
7reboots into it. No USB stick, and nothing Linux gets built on the Mac.
8
9CachyOS and everything on the NVMe drive are gone afterwards. Your home folder
10is backed up to the Kingston SATA SSD (`sda`) first, and only what
11`restore-filter` lists comes back: it's a fresh start. The other SATA SSD
12(`sdb`) is never touched.
13
14## 1. On the desktop (CachyOS)
15
16- [ ] Optional, but the last chance: record WoW's performance to compare
17 later. In Faugus, edit Battle.net, turn on MangoHud and add this line to
18 the launch arguments:
19 `MANGOHUD_CONFIG=read_cfg,output_folder=/home/vizie/benchmarks,log_duration=60,log_interval=0`.
20 In game, stand somewhere you can return to (a busy city), keep the camera
21 still and press Left Shift+F2. Do it three times. Do the same on NixOS
22 later and compare with `~/git/dot/tools/bench-compare`.
23- [ ] Quit Signal, Discord, Firefox, Claude and the games, then update the
24 backup (only what changed since the last run is copied):
25
26 ```bash
27 sudo ~/git/dot/tools/backup-to-sata
28 ```
29
30## 2. On the Mac
31
32Needs Nix (with flakes) and the GitHub CLI signed in to your account: `dot`
33and `philly` are private, and `gh auth setup-git` lets Nix fetch them. The
34Mac's public key must also be in `macKeys` in `hosts/desktop/default.nix`
35(committed and pushed), so it can log in to the new system.
36
37```bash
38gh auth setup-git
39gh repo clone Eiziv/dot ~/dot
40cd ~/dot && nix develop
41```
42
43`nix develop` opens a shell with nixos-anywhere in it. Then install. It logs
44in as you (with your password, or the Mac's key if CachyOS has it), asks for
45your sudo password once, and from then on **wipes the desktop's NVMe drive**
46without asking again:
47
48```bash
49nixos-anywhere --flake .#desktop --build-on remote --copy-host-keys --no-use-machine-substituters vizie@10.0.0.40
50```
51
52It takes a while: the CachyOS kernel's binary cache has been down, so the
53kernel compiles on the desktop. `--no-use-machine-substituters` skips that
54cache; if it's back up (`curl -sI https://attic.xuyh0120.win/lantian/nix-cache-info`
55gives 200), leave the flag out and the kernel downloads instead. The desktop
56reboots into NixOS at the end.
57
58If the kernel compile fails with a "Bus error", the installer ran out of RAM
59(it builds there). The backup drive has the system that was built on CachyOS,
60kernel included. Load it into the new system's store and run only the install:
61
62```bash
63ssh root@10.0.0.40 'mkdir -p /backup && mount -o ro /dev/disk/by-label/backup /backup &&
64 nix --extra-experimental-features nix-command copy --no-check-sigs \
65 --from file:///backup/nix-cache --to /mnt "$(cat /backup/nix-cache/system)"'
66nixos-anywhere --flake .#desktop --build-on remote --copy-host-keys --no-use-machine-substituters --phases install,reboot root@10.0.0.40
67```
68
69## 3. After the reboot
70
71The desktop may come back on a different IP address (it did: 10.0.0.127). If
72`ssh` times out, find it in the router's client list, or scan for the
73desktop's host key: `ssh-keyscan -t ed25519 10.0.0.<n>` and compare with
74`ssh-keygen -F 10.0.0.40`. A DHCP reservation in the router keeps it fixed.
75
76From the Mac (its key is in the config, for root and for you). The backup
77drive is mounted read-only at `/mnt/backup`:
78
79```bash
80ssh root@10.0.0.127
81passwd vizie
82/mnt/backup/vizie/git/dot/tools/restore-from-sata
83```
84
85Then log in on the desktop.
86
87## 4. On the new system
88
89- The login screen is the same gtkgreet over the blurred wallpaper.
90- Only what `restore-filter` lists came back: app data and logins, SSH keys,
91 shell history, `~/git/dot`, Steam's settings and saves. Everything else
92 (Downloads, the other repos, CachyOS leftovers) is on the backup drive, at
93 `/mnt/backup/vizie/`, to copy something back.
94- "Command not found" suggestions need nix-index's database once:
95 `nix-index` (takes a few minutes).
96- Check the background programs: `systemctl --user list-units --type=service`.
97
98## 5. What changed
99
100What is different from CachyOS, all on purpose:
101
102- **Packages** are generic x86-64 builds, apart from the kernel (Zen 4) and
103 proton-cachyos (x86-64-v3). CachyOS rebuilds everything for v3/v4.
104- **Snapper** root snapshots are replaced by NixOS generations: each rebuild is
105 a boot menu entry. `/home` was never snapshotted on CachyOS either.
106- **GTK theme**: set in `modules/home/theming.nix`. nwg-look can't save over
107 those files any more.
108- **Signal theme** is built into the package: edit, `rebuild`, `config/signal/restart`.
109- **Bitwarden** autostart: the same XDG autostart entry, with NixOS's program name.
110- **fish**: only CachyOS's default fish config was there, and your shell is zsh,
111 so fish isn't set up.
112- **vkBasalt's ReShade shaders** in `~/.config/vkBasalt/reshade-shaders` stay in
113 your home folder; they aren't in this repo (vkBasalt.conf doesn't use them).
114- **vkSumi**: its config is kept, but the layer itself wasn't installed on
115 CachyOS (there is no nixpkgs package for it either).
116
117Unchanged on purpose, but worth knowing:
118
119- **kitty's font**: kitty.conf asks for JetBrains Mono, which was never
120 installed, so kitty has been showing Noto Sans Mono. That's kept. Add
121 `nerd-fonts.jetbrains-mono` to `fonts.packages` in `modules/nixos/desktop.nix`
122 to get the font the config names.
123- **The login screen opens a kitty terminal** behind gtkgreet
124 (`hl.exec_cmd("kitty")` in `config/greetd/hyprland.lua`), running as the
125 greeter user. If gtkgreet ever crashed, that shell would be on screen before
126 anyone logs in. If it's a leftover from debugging, delete that line.
127- **`~/.ssh/authorized_keys`** has a key labelled `chris@echoz.io`, which lets
128 that key log in as you over SSH (port 22 is open, as before). It stays in your
129 home folder.
130- **mDNS** (port 5353) stays closed in the firewall, as ufw had it.
131- **sched-ext** schedulers stay off, as before. See the comment in
132 `modules/nixos/cachyos.nix` to try one.
133
134## 6. Games
135
136- **Steam**: your settings, Proton versions and game saves (`compatdata`) are
137 back. The games in `~/Games/SteamLibrary` and Steam's own library show as
138 not installed; install them again. Steam may need the library folder
139 re-added (Settings → Storage).
140- **WoW**: in Faugus, remove the old Battle.net entry and add Battle.net again
141 (Faugus installs it into a new prefix at `~/Games/battlenet`). Pick the same
142 runner, `Proton-CachyOS Latest` (it's back in
143 `~/.local/share/Steam/compatibilitytools.d`), and the same launch arguments:
144 `WINE_SIMULATE_WRITECOPY=1` and `PROTON_ENABLE_WAYLAND=0`. Install WoW, then
145 copy your settings and addons back before you start it:
146
147 ```bash
148 cp -a /mnt/backup/wow/{WTF,Interface} ~/Games/battlenet/drive_c/'Program Files (x86)'/'World of Warcraft'/_retail_/
149 ```
150
151- **OSRS**: install the official Old School RuneScape launcher. Bolt is gone,
152 and so is its data.
153
154## 7. Once you're happy
155
156The backup on the Kingston drive stays until you need the drive for something
157else. It is the only copy of what wasn't restored, including the repos that
158exist only here (`skate3`, `skate-game`, `he60`, `move`, and `Left4Resi`'s
159uncommitted changes), so copy out anything you want before reusing the drive.
160NixOS mounts it read-only at `/mnt/backup`; before reusing it, remove the
161`fileSystems."/mnt/backup"` entry in `hosts/desktop/hardware-configuration.nix`.