Drop the backup and restore scripts: setup.sh only
Files and app logins move across by hand, so archiving and unpacking a home directory isn't this repo's job any more. setup.sh installs the machine and stops there. Two things restore.sh used to cover, kept where they still matter: the post-reboot `sudo flatpak update` that fetches the NVIDIA GL runtime (Flatpak can only match it to a loaded driver, so it can't happen during setup), and the notes on which dotfiles not to copy over from Fedora. The server-marvin mount is now optional — press Enter at the prompt to skip it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,18 +1,13 @@
|
||||
# main-desktop
|
||||
|
||||
**Ubuntu 26.04 LTS** on my desktop (Ryzen 7 9800X3D, RTX 5090, 49" 5120x1440). This replaces the
|
||||
Bazzite setup, which lives on in this repo's git history.
|
||||
**Ubuntu 26.04 LTS** on my desktop (Ryzen 7 9800X3D, RTX 5090, 49" 5120x1440), set up by one
|
||||
script. This replaces the Bazzite/BlueBuild image that used to live here — that version is still
|
||||
in the git history.
|
||||
|
||||
This is plain Ubuntu with no custom image: apt handles the system and dev tools, Flathub handles
|
||||
the desktop apps, and three scripts do the rest.
|
||||
|
||||
| Script | Where it runs | What it does |
|
||||
|---|---|---|
|
||||
| [scripts/backup.sh](scripts/backup.sh) | Bazzite, **before wiping** | Archives your home folder to server-marvin and reads every archive back to check it |
|
||||
| [scripts/setup.sh](scripts/setup.sh) | Fresh Ubuntu | Adds repos, the NVIDIA driver, Docker, Steam, Flatpaks, dev tools and mounts, all in one pass |
|
||||
| [scripts/restore.sh](scripts/restore.sh) | Ubuntu, after setup + reboot | Unpacks the backup and leaves out the Fedora/KDE bits that would fight Ubuntu |
|
||||
|
||||
All three are safe to re-run.
|
||||
[scripts/setup.sh](scripts/setup.sh) turns a fresh Ubuntu install into this machine: NVIDIA
|
||||
driver, Docker with GPU access, Steam, the apps in [flatpaks.txt](flatpaks.txt), and the drive
|
||||
mounts. It's safe to re-run. Copying files over and signing in to apps are deliberately **not**
|
||||
its job — I do those by hand.
|
||||
|
||||
## Why leave Bazzite
|
||||
|
||||
@@ -20,48 +15,21 @@ The read-only base made ordinary things into projects. VS Code had to be layered
|
||||
Node and .NET came from Homebrew, and Claude desktop ran inside an Ubuntu distrobox because it
|
||||
only ships for Ubuntu/Debian. On Ubuntu, each of those is an `apt install`.
|
||||
|
||||
## The move, in order
|
||||
|
||||
### 1. Back up (on Bazzite)
|
||||
|
||||
From this repo's folder:
|
||||
|
||||
```bash
|
||||
scripts/backup.sh # -> /var/mnt/server-marvin-personal/desktop-backup-<date>/
|
||||
```
|
||||
|
||||
Close Steam, Firefox, Discord and Claude first. The script refuses to write to the disk that's about
|
||||
to be wiped. It's about **360 GB**, so expect around 2 hours on gigabit, including the read-back
|
||||
check.
|
||||
|
||||
| Archive | Size | Contents |
|
||||
|---|---|---|
|
||||
| `home.tar.zst` | ~120 GB | Everything in `~` except caches, Trash, container images, and the three below. Includes `Desktop/Becky_backup` (63 GB), all Flatpak app data (`~/.var/app`), Lutris games in `~/Games` |
|
||||
| `xlcore.tar.zst` | ~124 GB | FFXIV install, because Square's patch servers make a redownload take hours |
|
||||
| `comfyui.tar.zst` | ~115 GB | ComfyUI minus its venv (mostly models) |
|
||||
| `steam-saves.tar.zst` | ~5 GB | Steam `userdata` + Proton `compatdata` (saves and prefixes). Game files on the home drive (216 GB) redownload |
|
||||
|
||||
`manifest/` holds reference lists: Flatpaks, VS Code extensions, Steam games, the old fstab and
|
||||
Flatpak overrides. The archives contain `~/.ssh` and `~/.gnupg`, so the backup folder is as
|
||||
sensitive as your home folder.
|
||||
|
||||
**Not backed up, but not lost:** the Data drive (SteamLibrary, `emu/`) isn't touched by the
|
||||
install.
|
||||
|
||||
### 2. Install Ubuntu 26.04 LTS
|
||||
## 1. Install Ubuntu 26.04 LTS
|
||||
|
||||
> **⚠ Two identical 1 TB NVMe drives.** Install to the **Samsung SSD 990 PRO**. Never pick the
|
||||
> **Samsung SSD 970 EVO Plus**: that's the "Data" drive with your second Steam library, and it's
|
||||
> full, so nothing on it is backed up. `nvme0`/`nvme1` can swap between boots, so go by the model
|
||||
> name the installer shows.
|
||||
> **Samsung SSD 970 EVO Plus** — that's the "Data" drive holding the second Steam library and the
|
||||
> emulator files, and it stays untouched. `nvme0`/`nvme1` can swap between boots, so go by the
|
||||
> model name the installer shows.
|
||||
|
||||
- "Erase disk and install Ubuntu" on the 990 PRO is fine.
|
||||
- Make the user **`ckoch`**. The first user gets UID 1000, which matches the file ownership on the
|
||||
Data drive.
|
||||
- The "third-party drivers" checkbox doesn't matter; setup.sh installs the NVIDIA driver either way.
|
||||
- Prefer KDE? Install **Kubuntu 26.04** instead. The scripts don't care which desktop you run.
|
||||
- Make the user **`ckoch`**. The first user gets UID 1000, which matches the file ownership
|
||||
already on the Data drive.
|
||||
- The "third-party drivers" checkbox doesn't matter; setup.sh installs the NVIDIA driver either
|
||||
way.
|
||||
- Prefer KDE? Install **Kubuntu 26.04** instead. The script doesn't care which desktop you run.
|
||||
|
||||
### 3. Set up
|
||||
## 2. Run the script
|
||||
|
||||
```bash
|
||||
sudo apt install -y git
|
||||
@@ -69,53 +37,67 @@ git clone https://git.lazypugs.com/ckoch/main-desktop.git ~/Documents/git/main-d
|
||||
cd ~/Documents/git/main-desktop && scripts/setup.sh
|
||||
```
|
||||
|
||||
It asks for your sudo password once and for the server-marvin SMB username/password (stored
|
||||
root-only in `/etc/samba/credentials-marvin`). Flatpaks take most of the time. **Reboot** when it
|
||||
finishes.
|
||||
It asks for your sudo password once, then for the server-marvin SMB credentials — press Enter
|
||||
there to skip that mount. Flatpaks take most of the run. **Reboot** when it finishes.
|
||||
|
||||
What it installs:
|
||||
|
||||
- **NVIDIA driver:** Ubuntu's recommended **open-kernel** branch (595 today) with the prebuilt,
|
||||
signed modules, so there's no DKMS. The script stops if it ends up with a non-open driver,
|
||||
because Blackwell only runs on the open modules. It also installs 32-bit GL for Steam/Proton.
|
||||
- **Gaming:** Steam (`steam-installer` + `steam-devices` for controllers), Lutris, GameMode,
|
||||
MangoHud. ProtonUp-Qt (Flatpak) for Proton-GE. The Xbox Bluetooth fix (`disable_ertm`)
|
||||
carries over from Bazzite.
|
||||
signed modules, so no DKMS. The script stops if it ends up with a non-open driver, since
|
||||
Blackwell only runs on the open modules. Also 32-bit GL for Steam and Proton.
|
||||
- **Gaming:** Steam (`steam-installer` plus `steam-devices` for controllers), Lutris, GameMode,
|
||||
MangoHud, and ProtonUp-Qt for Proton-GE. The Xbox Bluetooth fix (`disable_ertm`) carries over
|
||||
from Bazzite.
|
||||
- **Containers:** Docker CE from Docker's repo (not the snap), with `--gpus all` wired up through
|
||||
nvidia-container-toolkit. Also Podman. You're added to `docker` and `kvm`.
|
||||
nvidia-container-toolkit. You're added to `docker` and `kvm`.
|
||||
- **Apps:** the 27 Flatpaks in [flatpaks.txt](flatpaks.txt), picked from the 42 that were on
|
||||
Bazzite (the rest are listed at the bottom of that file, commented out, if you want one back).
|
||||
Ubuntu's Firefox snap is removed in favor of the Flatpak so your old profile restores
|
||||
untouched. A systemd timer updates Flatpaks daily.
|
||||
- **Dev:** VS Code, Claude desktop (Anthropic's apt repo), Claude Code CLI, and
|
||||
`build-essential`/cmake, so no dev distrobox needed. **No Node or .NET on the host** by
|
||||
choice — LudosData and landingPage build in Docker. To add them later:
|
||||
Bazzite. The rest sit commented out at the bottom of that file. Ubuntu's Firefox snap is removed
|
||||
in favour of the Flatpak. A systemd timer updates Flatpaks daily.
|
||||
- **Dev:** VS Code, Claude desktop (Anthropic's apt repo), Claude Code CLI, `build-essential` and
|
||||
cmake, and git credentials kept in the GNOME keyring. **No Node or .NET on the host** by
|
||||
choice — LudosData and landingPage build in Docker. To add them:
|
||||
`sudo add-apt-repository ppa:jdxcode/mise && sudo apt install mise dotnet-sdk-10.0`.
|
||||
- **Mounts:** the Data drive at **`/mnt/data`** and server-marvin at
|
||||
**`/mnt/server-marvin-personal`** (automounted).
|
||||
- **Mounts:** the Data drive at **`/mnt/data`**, and server-marvin at
|
||||
**`/mnt/server-marvin-personal`** if you gave it credentials.
|
||||
|
||||
### 4. Restore
|
||||
## 3. After the reboot
|
||||
|
||||
```bash
|
||||
scripts/restore.sh # newest backup on server-marvin
|
||||
ONLY="home steam-saves" scripts/restore.sh # skip the big ones if you want
|
||||
sudo flatpak update # fetches the NVIDIA GL runtime the Flatpak apps need
|
||||
```
|
||||
|
||||
First it pulls the Flatpak NVIDIA GL runtime (only possible once the driver is loaded after the
|
||||
reboot). Without it, Flatpak apps render in software.
|
||||
Flatpak can only match that runtime to the driver once the driver is actually loaded, which is why
|
||||
it waits until after the reboot. Skip it and apps fall back to software rendering until the daily
|
||||
timer catches up about 10 minutes after boot.
|
||||
|
||||
It deliberately skips a few things:
|
||||
Then, by hand:
|
||||
|
||||
- Fedora's `.bashrc` and `.bash_profile`
|
||||
- `~/.local/bin` (old pip `--user` tools such as rembg)
|
||||
- KDE's GNOME-settings database and generated GTK themes
|
||||
- Bazzite's autostart items
|
||||
- **Steam:** sign in, then **Settings → Storage → Add drive → `/mnt/data/SteamLibrary`**. Those
|
||||
games need no redownload.
|
||||
- **Display:** Settings → Displays. The monitor does **5120x1440 @ 240 Hz**; Bazzite was running
|
||||
it at 120. Turn on variable refresh rate while you're there. Ubuntu's built-in tiling earns its
|
||||
keep at this width.
|
||||
- **PIA VPN:** the official Linux app works on Ubuntu (it couldn't on Bazzite's read-only `/usr`).
|
||||
Download the installer from PIA and run it.
|
||||
- **Gitea:** the first `git push` asks for your username and password once, then the GNOME keyring
|
||||
remembers it. KDE Wallet was doing that here.
|
||||
|
||||
Everything is still in the archives, e.g.
|
||||
`tar -I zstd -xf home.tar.zst -C ~ ./.config/some-app`.
|
||||
### Moving files across by hand
|
||||
|
||||
Old configs full of `/var/home/ckoch/...` paths keep working through a `/var/home → /home`
|
||||
symlink. Claude Code's per-project memory and history are renamed to the new paths.
|
||||
Worth knowing while you copy things over from the old install:
|
||||
|
||||
- **Flatpak app data** lives in `~/.var/app/<app-id>`. Copying one app's folder across brings that
|
||||
app's logins, profile and settings with it — Firefox and Thunderbird profiles included — as long
|
||||
as the app ID matches.
|
||||
- **Steam saves** are in `~/.local/share/Steam/userdata` (and Proton prefixes in
|
||||
`steamapps/compatdata`). Game files themselves redownload.
|
||||
- **FFXIV** is `~/.xlcore`, ~124 GB. Worth copying rather than re-fetching from Square's patch
|
||||
servers.
|
||||
- **ComfyUI:** copy the folder but not its `venv` — rebuild that with
|
||||
`python3 -m venv venv && venv/bin/pip install -r requirements.txt`.
|
||||
- **Don't copy** Fedora's `.bashrc`/`.bash_profile`, `~/.local/bin` (pip shims built against
|
||||
Fedora's Python), `~/.config/dconf` (KDE's settings database, which would overwrite GNOME's), or
|
||||
the KDE-generated `~/.config/gtk-3.0` and `gtk-4.0` themes.
|
||||
|
||||
## Check it worked
|
||||
|
||||
@@ -124,7 +106,7 @@ nvidia-smi # RTX 5090, driver 595.x
|
||||
modinfo -F license nvidia # "Dual MIT/GPL" = open modules
|
||||
docker run --rm --gpus all nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi
|
||||
flatpak list --app | wc -l # 27
|
||||
findmnt /mnt/data /mnt/server-marvin-personal
|
||||
findmnt /mnt/data
|
||||
claude --version && code --version
|
||||
```
|
||||
|
||||
@@ -132,21 +114,6 @@ Podman's `--device nvidia.com/gpu=all` needs a CDI spec. The toolkit normally ge
|
||||
boot; if Podman says the device is unknown, run
|
||||
`sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml`.
|
||||
|
||||
## By hand after restore
|
||||
|
||||
- **Steam:** sign in, then **Settings → Storage → Add drive → `/mnt/data/SteamLibrary`**. Games
|
||||
there come back without downloading.
|
||||
- **ComfyUI:** `cd ~/ComfyUI && python3 -m venv venv && venv/bin/pip install -r requirements.txt`
|
||||
(plus any custom nodes' requirements).
|
||||
- **Display:** Settings → Displays. The monitor does **5120x1440 @ 240 Hz**; Bazzite was running it
|
||||
at 120. Turn on variable refresh rate there too. Ubuntu's built-in window tiling works well at
|
||||
this width.
|
||||
- **PIA VPN:** the official Linux app works on Ubuntu (it couldn't on Bazzite's read-only
|
||||
`/usr`). Download the installer from PIA and run it.
|
||||
- **Gitea:** your first `git push` asks for your username and password (or token) once —
|
||||
KDE Wallet was answering that for you here, and the GNOME keyring takes over on Ubuntu.
|
||||
Keyrings aren't in the backup, so no other password comes across either.
|
||||
|
||||
## Coming from Bazzite: what moved
|
||||
|
||||
| Was | Now |
|
||||
@@ -154,7 +121,8 @@ boot; if Podman says the device is unknown, run
|
||||
| `rpm-ostree` layering / `ujust` | `apt` |
|
||||
| Homebrew `node@24`, `dotnet` | Nothing on the host — those projects build in Docker |
|
||||
| Claude desktop in a distrobox | Native `claude-desktop` package |
|
||||
| `/var/home/ckoch` | `/home/ckoch` (+ compatibility symlink) |
|
||||
| Git password from KDE Wallet | GNOME keyring, via git's libsecret helper |
|
||||
| `/var/home/ckoch` | `/home/ckoch` |
|
||||
| `/run/media/ckoch/Data` | `/mnt/data` |
|
||||
| `/var/mnt/server-marvin-personal` | `/mnt/server-marvin-personal` |
|
||||
| Image updates + rollback | Software Updater / `sudo apt update && sudo apt upgrade`; Flatpaks auto-update daily. No rollback by default; `sudo apt install timeshift` if you miss it |
|
||||
@@ -164,5 +132,5 @@ boot; if Podman says the device is unknown, run
|
||||
- **Add or remove an app:** edit [flatpaks.txt](flatpaks.txt) and re-run `scripts/setup.sh`.
|
||||
Removing a line doesn't uninstall anything; `flatpak uninstall <id>` once by hand.
|
||||
- **Next LTS (28.04):** Ubuntu offers the upgrade in Software Updater once 28.04.1 is out. The
|
||||
upgrader disables third-party repos (Docker, NVIDIA toolkit, etc.). Turn them back on in
|
||||
upgrader disables third-party repos (Docker, NVIDIA toolkit, and so on) — turn them back on in
|
||||
Software & Updates → Other Software afterwards.
|
||||
|
||||
Reference in New Issue
Block a user