Version 1.1
One script that turns a fresh Bazzite install into a lean, private, AI-powered gaming and development workstation.
db-setup.sh is a single Bash script for Bazzite 44 (KDE Plasma 6). It runs top to bottom, configures the whole machine, and cleans up after itself. It disables telemetry, removes bloat, installs a local AI stack, applies a Catppuccin Mocha theme and global keyboard shortcuts, sets up a Windows 11 VM, adds gaming and single-player cheat tooling, and installs a universal updater — all in one pass.
- Target OS: Bazzite 44, KDE variant (Fedora atomic / immutable, Universal Blue base).
- Runs top-to-bottom, unattended-ish. Most sections are fully automatic; a few prompt you (AI web-UI choice, Odysseus admin login).
- Written to be safe on an immutable OS. System packages are layered with
rpm-ostreein a single consolidated transaction; user-level changes go into your home directory. - Resilient by design. It does not use
set -e— a single non-fatal failure (a Flatpak that's already gone, a COPR mirror hiccup) won't abort the run or leave the machine half-configured. Every step guards its own errors and prints clear[OK]/[WARN]/[INFO]status. - Idempotent-ish. Re-running skips things that already exist where practical, but this is a setup script, not a config-management tool.
This is the author's personal machine setup, published so others can learn from it or fork it. It is opinionated and tailored to one specific hardware/software taste.
Read the script first. It makes real, system-wide changes on a fresh install. In particular it will:
- Layer packages with
rpm-ostree(Ghostty, KVM/QEMU stack, fastfetch, build deps, etc.). These are staged and only take effect after a reboot. - Change system and KDE settings — theming, window decorations, default terminal, panel, autostart entries, and global keyboard shortcuts.
- Remove pre-installed Flatpaks it considers bloat (music player, maps, weather, contacts, calendar, clocks, duplicate editors/video players).
- Install an uncensored-capable local LLM stack (Ollama + a browser AI UI) that runs 100% offline on your hardware.
- Set Helium as the default browser and uninstall Firefox (both Flatpak and RPM variants), rewriting
mimeapps.listso links don't reopen Firefox. - Repartition/format a secondary disk (Section 16) as a Steam library if one is found — it only touches a disk that is not your OS disk and is not already holding mounted data, but review this section carefully.
- Install single-player game-trainer tooling (WeMod, Cheat Engine via Proton).
It is tailored to the author's machine and preferences. Review it, and fork/edit it to match your own setup before running. Treat it as a starting point, not a turnkey installer for arbitrary systems.
The script is organized into numbered sections. Grouped logically:
- 1 — Telemetry off. Disables Fedora's install counter, KDE usage reporting, Flatpak analytics, Homebrew stats, the Steam hardware survey, and Firefox telemetry if present. Also disables KDE Wallet so it stops prompting.
- 2 — Bloatware removal. Uninstalls Flatpak apps Bazzite pre-installs but most people never open, then prunes orphaned runtimes to reclaim disk.
-
3 — Ollama + best-fit model. Installs Ollama as a user systemd service (boot-start with linger enabled, so it's ready before/without a graphical login). Detects GPU VRAM (or ~60% of system RAM on CPU-only boxes) and pulls the single best-fitting Qwen2.5-Coder model for your hardware — one model, not a pile:
- ≥22 GB →
qwen2.5-coder:32b - ≥11 GB →
qwen2.5-coder:14b - ≥6 GB →
qwen2.5-coder:7b - below →
qwen2.5-coder:3b
Adds
ai-on/ai-offhelper commands to free VRAM for gaming on demand. Models run fully offline with no cloud account. - ≥22 GB →
-
4 — Oobabooga (optional). Clones text-generation-webui and writes a start script that launches it with the OpenAI-compatible API enabled. Serves a browser chat UI at http://localhost:7860.
-
4b — Odysseus (optional). PewDiePie's self-hosted AI workspace (chat + agents + research + tools) as a rootless Podman stack at http://localhost:7000. It offloads inference to the host Ollama over the host's LAN IP (rootless Podman can't use
host.docker.internalreliably), so it needs no extra model downloads. Set to autostart viapodman-restart+ linger.The AI web-UI section is interactive — you pick Oobabooga, Odysseus, both, or neither.
- 5 — Zed editor. Fast Rust editor with its AI assistant pointed at local Ollama. Enables git blame, autosave, format-on-save, JetBrains Mono. Also auto-starts Ollama when Zed launches.
- 6 — OpenCode CLI. Terminal AI coding agent wired to local Ollama (installs Node 18+ via nvm if missing).
- 7 — Claude Code CLI. Anthropic's coding agent installed into a user-owned npm prefix (no sudo). You authenticate separately with your Anthropic Pro/Max account after the run.
- 8 — Catppuccin Mocha theme. Applies the Mocha palette (Mauve default, Blue coding variant); all palette values embedded so no internet is needed.
- 8b — DMS-style setup. Papirus-Dark icons, Kvantum with Catppuccin Mocha Mauve, the full Catppuccin KDE theme, the Panel Colorizer plasmoid (floating pill panel), Klassy window decorations (no COPR exists — built from source, compiles itself on first login and notifies you), KWin blur + rounded corners, Noto Sans typography, and the stock ColdRipple wallpaper.
kde-material-you-colorsis installed but left disabled so it doesn't override Catppuccin.
- 9 — Windows 11 VM. Installs the full KVM/QEMU stack via
rpm-ostree(qemu-kvm, libvirt, virt-manager, virt-viewer, edk2-ovmf, swtpm for TPM 2.0), adds you to thelibvirtgroup, enableslibvirtd, and downloads the VirtIO drivers ISO. Ships a helper script to start/resume the VM. (You supply the Windows 11 ISO.) - 10 — Launchers. Registers
.desktopentries in the KDE app menu (not on the desktop) for the Windows VM, Oobabooga, OpenCode, and Zed. The desktop stays clean; everything is launchable from the KDE app menu / KRunner.
- 11 — Helium browser. Privacy-first Chromium fork installed as an AppImage from GitHub releases, set as default for all web MIME types (XDG + KDE), then Firefox is removed and lingering references rewritten.
- 12 — Ghostty terminal. GPU-accelerated terminal (COPR) with Catppuccin Mocha, blur, JetBrains Mono, and tab/split shortcuts. Set as the default terminal in
kdeglobals,dolphinrc(F4), andxdg-terminals.list. - 12b — Kitty terminal. Installed as a secondary/fallback terminal.
- 13 — fastfetch. Rich JSONC config (graphical Bazzite logo, CPU/GPU temps + driver, RAM bar, all drives, local + public IP, OS install date) added to
.bashrcand.zshrcso it greets you in every terminal.
-
13c — GameConqueror. Native
scanmemmemory scanner (backup tool). -
13d — Cheat Engine + WeMod. Windows game-trainer toolchain that runs inside a game's Proton prefix: WeMod via the DeckCheatz wemod-launcher, and Cheat Engine via
protontricks-launch(loads community.CTtables). Pulls GE-Proton directly from GitHub for the games that need it.These are for single-player games only. Do not use them online or in multiplayer.
- 13b — Consolidated
rpm-ostreeinstall. All queued system packages are layered in one transaction (fast, atomic, correct for immutable Bazzite). - 14 — Global keyboard shortcuts. Seven Plasma 6 shortcuts (see table below), registered the Plasma 6 way (
.desktoplauncher +kglobalshortcutsrc). Active after reboot/login. - 15 — Topgrade. Bazzite-aware universal updater (via Homebrew) that uses
bootc upgradefor the system image and updates Flatpak, npm globals, pipx, pip, Homebrew, Rust, git repos, Zed, and Ollama models — while disabling steps that don't apply (snap, nix, firmware). - 15b — Topgrade panel button. One-click ↻ update widget for the panel.
- 16 — Second SSD → Steam library. If a secondary disk is found, formats/labels it and configures it as the Steam library location with Proton-GE as the default.
- Bazzite 44 (KDE variant), freshly installed.
- Internet connection for downloads (models, browser, etc.).
- Your user password —
sudois used for system-level changes. - Disk space for AI models — several GB up to tens of GB depending on your VRAM/RAM tier.
- AMD GPU note: the script detects GPU vendor (NVIDIA / AMD / CPU). Oobabooga has AMD/ROCm handling — on first launch it runs its own installer and asks you to pick your GPU type.
- Optional: an Anthropic Pro/Max account for Claude Code (Section 7), and a Windows 11 ISO for the VM (Section 9).
chmod +x db-setup.sh
./db-setup.shRun it once on a fresh install and let it work through all sections. It is interactive in a few places:
- The AI web-UI menu asks whether you want Oobabooga, Odysseus, both, or neither.
- Odysseus prompts for an admin username/password for its web login (or reads
ODYSSEUS_ADMIN_USER/ODYSSEUS_ADMIN_PASSWORDfrom the environment). sudowill ask for your password for system changes.
Reboot when it finishes. The rpm-ostree layered packages (Ghostty, KVM/QEMU, fastfetch, build deps) and the theme, default terminal, and keyboard shortcuts only take full effect after a reboot or re-login. Klassy compiles itself ~2 minutes after your first login and notifies you.
Meta is the Windows key. All seven are active after the post-setup reboot/login and are editable under System Settings → Keyboard → Shortcuts.
| Shortcut | Action |
|---|---|
Meta+Return |
Ghostty terminal |
Meta+Z |
Zed editor |
Meta+E |
Dolphin file manager |
Meta+B |
Helium browser |
Meta+O |
Oobabooga AI (starts the server + opens the browser) |
Meta+S |
Steam |
Meta+A |
OpenCode AI (inside Ghostty) |
- Ollama runs as a user systemd service enabled at boot (with linger), so Zed, OpenCode, Oobabooga, and Odysseus always have a backend.
ai-on/ai-offlet you start/stop it manually to free VRAM for gaming. - Models are pulled as a single best-fit Qwen2.5-Coder variant sized to your VRAM/RAM. The browser AI workspaces are set up to run uncensored-capable local models with no cloud account and no data leaving your machine.
- Oobabooga — browser chat UI at http://localhost:7860, with an OpenAI-compatible API so other apps can talk to it.
- Odysseus — self-hosted AI workspace at http://localhost:7000, running as a rootless Podman stack. It reaches the host Ollama over the host's LAN IP (not
host.docker.internal, which is unreliable under rootless Podman + netavark), so it reuses your existing models with no extra downloads.
Improvements are welcome. Open a pull request — the repo owner is emailed on new PRs, reviews them, and approving the PR auto-merges it. See CONTRIBUTING.md for the full workflow and expectations.
- v1.1 — Removed Crystal Dock (Section 8c) and all its wiring (autostart entry, KDE-Favorites sync service, launcher registration). App launching is now KDE app menu / KRunner only. Switched license from MIT to PolyForm Noncommercial 1.0.0.
- v1.0 — Initial release.
This script is provided AS-IS, with no warranty. It makes significant, system-wide changes to a fresh install and is tailored to the author's own machine. Read it and review every section before running it, and adapt anything that doesn't fit your hardware or preferences. You run it at your own risk.
The cheat / game-trainer tooling is for single-player games only — do not use it in online or multiplayer contexts.
Licensed under the PolyForm Noncommercial License 1.0.0 — free for any noncommercial purpose; commercial use requires a separate license from the author (contact darrengbrown21@gmail.com).
This project is not affiliated with, endorsed by, or supported by the Bazzite or Universal Blue projects.