Conversation
KDE Plasma doesn't have the donation/welcome dialogs that GNOME shows, making it a simpler base for the CodeClub live CD. Changes: - Import installation-cd-graphical-plasma6 instead of the GNOME variant - Enable services.desktopManager.plasma6 and sddm display manager - Remove gnome-shell overlay patching donation/welcome dialogs - Remove services.desktopManager.gnome, gnome-remote-desktop, gdm config - Remove environment.gnome.excludePackages - Remove dconf GNOME writes from autostart script (not needed for KDE) - Replace gnome-terminal with konsole; replace GNOME games with KDE equivalents (kmines, kmahjongg, kreversi, kpat) - Remove gnome-tweaks and gnomeExtensions.no-overview (GNOME-specific) - Use X-KDE-autostart-phase=2 in autostart desktop entries - Rename FFX* variables to CHR* since they control Chrome, not Firefox
The non-calamares plasma6 module isn't present in this channel; installation-cd-graphical-calamares-plasma6.nix is the available one and additionally ships the Calamares graphical installer, which is useful for a live CD users may want to install from.
| cat $FFXMAX >> $MYLOG | ||
| echo '#!/bin/bash' > $CHRSCRIPT | ||
| echo 'sleep 4' >> $CHRSCRIPT | ||
| echo 'wmctrl -r google-chrome -b add,maximized_vert,maximized_horz' >> $CHRSCRIPT |
There was a problem hiding this comment.
🔥 The Roast: You just enabled Wayland on line 28 (services.displayManager.sddm.wayland.enable = true) and then in the same breath you're using wmctrl to maximize a window. wmctrl is an X11 tool — it communicates via the EWMH/NetWM protocol which simply does not exist under a Wayland compositor. This script is going to silently do absolutely nothing, like me during a 9am standup.
🩹 The Fix: Under KDE Plasma 6 on Wayland, use qdbus org.kde.KWin /KWin org.kde.KWin.setMaximize or xdotool with XWayland fallback, or better yet just pass --start-maximized to Chrome (which is already in the Exec line) and drop the separate maximize script entirely — it's already there doing the job.
📏 Severity: warning
| services.displayManager.gdm.autoSuspend = false; | ||
| # KDE Plasma 6 desktop (provided by the installation-cd-graphical-plasma6 | ||
| # import above; set explicitly here for clarity). | ||
| services.desktopManager.plasma6.enable = true; |
There was a problem hiding this comment.
🔥 The Roast: The comment says "provided by the installation-cd-graphical-plasma6 import above" but the actual import on line 4 is installation-cd-graphical-calamares-plasma6.nix. Calamares is a whole graphical installer framework — not a trivial detail to omit. It's like saying "I drive a car" when you actually drive a DeLorean with a flux capacitor.
🩹 The Fix:
| services.desktopManager.plasma6.enable = true; | |
| # KDE Plasma 6 desktop (provided by the installation-cd-graphical-calamares-plasma6 |
📏 Severity: nitpick
Code Review Roast 🔥Verdict: No Issues Found | Recommendation: Merge Oh wait, this PR is actually clean. I need to sit down. I had my flamethrower warmed up and everything. All previously flagged issues have been resolved:
📊 Overall: The full journey: GNOME → KDE Plasma 6 → XFCE → a brief flirtation with Cosmic → back to XFCE, done properly. Custom panel layout, correct user ownership, Chrome crashpad fix, Files Reviewed (1 file)
Reviewed by claude-sonnet-4.6 · 144,881 tokens |
- Fix stale comment naming the non-calamares plasma6 module - Remove wmctrl maximize script and wmctrl package: wmctrl is X11-only and the session now runs on Wayland, and Chrome's --start-maximized in the exec line already handles window state - Remove GSK_RENDERER=ngl: GTK4 scene graph renderer hint that was a GNOME leftover and has no effect on KDE Plasma - Switch xdg.mime default browser from Firefox to Chrome: Chrome is what autostarts at login so the XDG default should match
- Use installation-cd-minimal as base (no Calamares installer, no gparted) - Enable XFCE + LightDM with auto-login, skip greeter - Disable gnome-keyring to prevent wallet prompts for wifi passwords - Disable screensaver/DPMS for the live CD - Replace KDE packages with XFCE/GTK equivalents: konsole -> xfce4-terminal, KDE games -> GNOME/GTK games - Remove X-KDE-autostart-phase from desktop entries - Chrome autostarts maximized via --start-maximized in XDG autostart https://claude.ai/code/session_01SbhGbt5M1p1qXaZmx1LJdd
Setting greeter.enable=false breaks LightDM — it needs a greeter even when auto-login bypasses it. Also removed extraSeatDefaults which may have conflicted. Auto-login handles skipping the greeter.
| services.xserver.enable = true; | ||
| services.xserver.desktopManager.xfce.enable = true; | ||
| services.displayManager.defaultSession = "xfce"; | ||
| services.xserver.displayManager.lightdm.enable = true; |
There was a problem hiding this comment.
🔥 The Roast: The PR description explicitly lists "Disable screensaver/DPMS for the live CD" as a feature. The implementation that did this (lightdm.extraSeatDefaults with xserver-command=X -s 0 -dpms) was in a previous commit and then quietly removed. So now XFCE will happily blank the screen 10 minutes into a CodeClub session, and a roomful of 10-year-olds will collectively discover what a screensaver is. The description promises something the code doesn't deliver — and on a live CD where every user session is a fresh start with default XFCE settings, there's no user-level preference to save them.
🩹 The Fix: Add back the screensaver/DPMS disable. The simplest approach for LightDM + X11 is:
services.xserver.displayManager.lightdm.extraSeatDefaults = ''
xserver-command=X -s 0 -dpms
'';Alternatively, use xfce.xfce4-power-manager settings to disable display blanking for the live CD user profile.
📏 Severity: warning
| pkgs.gnome-tweaks | ||
| findutils | ||
| gnomeExtensions.no-overview | ||
| gnome-mines |
There was a problem hiding this comment.
🔥 The Roast: You switched to installation-cd-minimal specifically to avoid dragging in Calamares, gparted, and a full desktop environment — kudos for that diet. But then you kept gnome-mines, gnome-mahjongg, iagno, and aisleriot on the guest list. These GNOME games pull in gnome-desktop, librsvg, glib-networking and various other GNOME runtime deps that add real megabytes to an ISO you just put on a weight-loss program. The previous KDE iteration at least had the self-awareness to swap them for KDE equivalents; now they're GNOME packages sitting on an XFCE desktop like they own the place.
🩹 The Fix: Either swap for lighter XFCE/GTK alternatives (e.g. xfce.xfgd games, or pure SDL games like lgames.lmahjongg) or accept the GNOME dependency bloat with a comment explaining the tradeoff. If ISO size is a concern, nix build with --option substituters and check nix path-info -rS to see the closure size impact.
📏 Severity: suggestion
installation-cd-minimal doesn't include any X11/graphics infrastructure. LightDM was failing immediately (3ms, status=1) because there were no video drivers. Add modesetting+fbdev drivers and hardware.graphics.enable.
The minimal base has no graphics infrastructure. The graphical base provides video drivers, Mesa, fonts, and X11 configuration out of the box — without pulling in a specific desktop environment or installer.
- Re-add screen blanking/DPMS disable via xserver serverFlagsSection (was lost when removing broken LightDM extraSeatDefaults) - Document that GNOME games share XFCE's GTK toolkit so no extra bloat
…eleton - Set initialPassword = "nixos" so VM login screen works when auto-login is bypassed (live CD auto-login still takes precedence) - Add xfce.xfce4-systemload-plugin package for CPU/memory monitoring - Add xfce4-panel.xml skeleton (disabled pending XML format fix) to place Chrome launcher and systemload widget in the top bar Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace XFCE + LightDM with the Cosmic desktop environment and its own greeter. Remove XFCE-specific packages (xfce4-terminal, xfce4-systemload-plugin) and X11 server-flags screen-blanking config which only applies to X11. Cosmic is Wayland-native and includes built-in system monitoring in its panel. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Switch back from Cosmic to XFCE + LightDM (Cosmic needs real GPU, doesn't work in QEMU build-vm) - Set Chrome as the XFCE preferred browser at session start via xfconf-query on the exo channel, so the panel web browser launcher opens Chrome rather than Firefox - Keep xfce4-systemload-plugin in packages (right-click panel to add) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…yautostart Panel setup (runs once on first login, flagged by ~/.panel-configured): - Set Chrome as the XFCE preferred browser via helpers.rc so the panel web-browser launcher opens Chrome rather than Firefox - Remove workspace pager from all panels via xfconf-query and set workspace count to 1 (single workspace) - Add xfce4-systemload-plugin to panel 1 before the systray via xfconf-query, then restart the panel to load it KiloCode: - Write ~/.local/bin/kilocode-wrapper with correct npm PATH - Create kilocode.desktop launcher (appears in apps menu, pinnable to panel) that opens kilocode in xfce4-terminal Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add XFCE panel XML config and launcher desktop files as nix derivations - Deploy panel config and launcher files via activation script (runs at boot) - Configure panel-2 dock: show-desktop, terminal, files, Chrome, app finder, btop - Use xfconf-query with --force-array in myautostart to ensure launcher items are proper arrays (fixes launcher falling back to exo-open defaults) - Set Chrome as XFCE preferred browser via helpers.rc - Set Chrome as XDG default browser via mime defaults - Rename live CD user from nixos to codeclub - Add set +e to myautostart to prevent exit-on-error from NixOS bash -e wrapper - Pass XAUTHORITY and DBUS_SESSION_BUS_ADDRESS to myautostart service Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The previous config crashed Chrome on every launch with
"chrome_crashpad_handler: --database is required" because
~/.config was created by the xfcePanelConfig activation script as
root:root mode 700, blocking Chrome from creating its own
~/.config/google-chrome/ directory for the crashpad database.
Root cause was chown by name ("codeclub:codeclub") failing silently
during activation — user database isn't resolvable from chown even
with deps=["users"]. Switched all chown calls in the activation
script to numeric UID/GID (1000:100).
Also fixes several related launcher issues found during rebuild:
- Dock Chrome launcher opened system Chrome without the CodeClub URL
because xfce4-panel resolved "google-chrome.desktop" via XDG lookup
and found /nix/store first. Renamed our custom launcher to
codeclub-chrome.desktop (unique filename, no XDG collision).
- Applications menu "Google Chrome" opened Chrome without the URL for
the same reason. Added ~/.local/share/applications/google-chrome.desktop
override written at activation time so XDG lookup finds ours first.
- Dock btop/terminal/thunar/appfinder launchers used bare binary names
in Exec=. Panel launcher exec environment lacks /run/current-system/sw/bin
in PATH, so they silently failed. Switched to absolute nix-store paths.
- Applications → Web Browser (the exo-open preferred-application
launcher) opened Chrome with no URL because helpers.rc pointed at
the stock "google-chrome" XFCE helper which has no URL in its
X-XFCE-Commands. Added codeclub-webbrowser.desktop XFCE helper with
the full flags + URL and pointed helpers.rc at it.
- Added --new-window to Chrome Exec lines so clicking a launcher while
Chrome is already running still opens a fresh window on the homepage
instead of having the URL swallowed by the existing instance.
Rebuilt incrementally from a minimal base to pinpoint the crashpad
root cause — each step (locale, firefox policies, zsh, chrome policy,
nix-ld, panel config, myautostart) was tested in a VM. The crash
reproduced only after the xfcePanelConfig activation script was
reintroduced, which is how the .config ownership issue was identified.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
||
| # Firefox launch is handled by GNOME autostart desktop files created in myautostart. | ||
| # Larger VM disk for testing. | ||
| virtualisation.diskSize = 4096; |
There was a problem hiding this comment.
🔥 The Roast: virtualisation.diskSize = 4096 is a nixos-rebuild build-vm setting. It has exactly zero effect on the ISO that gets burned to a USB stick. It's the NixOS equivalent of leaving your debug console.log('HERE') in production — harmless on the happy path, but a clear signal that test scaffolding made it into the commit. The comment even says "Larger VM disk for testing" which is at least honest about what this is.
🩹 The Fix: Remove it before merging. If VM testing config is useful to keep around, put it in a separate vm.nix or behind a NixOS module argument, not inline in the ISO config.
📏 Severity: nitpick
Addresses kilo-code-bot review nitpick on #16: this option is a nixos-rebuild build-vm setting and has no effect on the ISO output. Leftover from incremental VM testing of the Chrome crashpad fix. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Disable XFCE screensaver so kids don't get locked out of the live CD - Seed ~/.zsh_history with kilocode/btop/python3/node/nmap so they're reachable via up-arrow without having to type - Hide all desktop icons (xfce4-desktop /desktop-icons/style=0) - Bundle paullinuxthemer/PRO-Dark-XFCE-Edition@4b3f32f via fetchFromGitHub, install under share/themes, and point xsettings + xfwm4 at it on boot - Fetch Bing's daily wallpaper on boot and write it as the xfce4-desktop backdrop on every monitor xrandr reports (with a fallback to common monitor names), so all club machines booted the same day share the same picture - Re-add virtualisation.diskSize = 4096; the earlier removal was technically correct (the option is a no-op in the ISO build) but it kneecapped nixos-rebuild build-vm iteration with "no space left on device" errors in the 1 GiB default qcow2 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
xfce4-panel auto-inserts tasklist/pager/extra separators into panel-1 regardless of our static XML, reshuffling plugin IDs so the clock is not at the position we declared. Discover the clock plugin at runtime after the panel restart and set digital-layout=3 (time-only) plus %H:%M:%S format on the actual plugin. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wallpaper fetch and kilocode npm install now wait for network connectivity (polling every 5s for up to 5 min) before attempting downloads. On school networks DHCP+DNS can take several minutes after graphical login, causing all retry attempts to be exhausted before the network is ready. Also add recursive chown of /home/codeclub at end of activation script to fix EACCES when kilocode tries to mkdir ~/.config/kilo. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Summary
Switch to a lighter desktop environment (XFCE) and clean up the live CD experience.
installation-cd-minimalas base — no Calamares installer or gparted on desktop--start-maximizedin XDG autostartTest plan
node,npm, andkilocodeavailable in terminal after network connectshttps://claude.ai/code/session_01SbhGbt5M1p1qXaZmx1LJdd