Files
nixos/docs/superpowers/specs/2026-07-27-mibook-boot-desktop-choice-design.md
T

2.5 KiB

mibook: choose terminal-only vs desktop at boot

Goal

Let mibook boot to a text console by default, with KDE fully installed and launchable on demand. The user decides after boot whether they need the graphical desktop, without rebuilding the system.

Behavior

  • mibook boots to a text console (multi-user.target). SDDM and Plasma do not start automatically.
  • KDE (SDDM + Plasma 6) remains fully installed.
  • Running desktop in the terminal starts the SDDM display manager, which presents the graphical login screen; logging in there enters a Plasma 6 session.
  • No reverse command. To return to a text console, stop the display manager (sudo systemctl stop display-manager) or reboot.
  • Other machines that enable the kde-desktop profile are unaffected; their desktop still starts on boot.

Implementation

modules/environments/kde-desktop/default.nix

Add an opt-out option to the existing profile:

  • New option my.profiles.kde-desktop.startOnBoot, a boolean defaulting to true. The default preserves the current behavior for every consumer.
  • The existing config block (SDDM, Plasma 6, user packages) stays enabled whenever the profile is enabled, regardless of startOnBoot.
  • When startOnBoot = false, additionally apply:
    • systemd.services.display-manager.wantedBy = lib.mkForce [ ]; so SDDM is defined but not pulled in by any boot target.
    • systemd.defaultUnit = "multi-user.target"; so the boot target is the text console.
    • A desktop command provided via pkgs.writeShellScriptBin "desktop" "exec sudo systemctl start display-manager.service", added to environment.systemPackages.

machines/mibook/environments.nix

Set kde-desktop.startOnBoot = false; alongside the existing kde-desktop.enable = true;.

Testing / verification

  • nix build '.#nixosConfigurations.mibook.config.system.build.toplevel' builds without error.
  • After nixos-rebuild switch on mibook: system boots to a TTY, no SDDM; running desktop brings up the SDDM login and a working Plasma session.
  • Confirm jupiter (or any non-mibook consumer) is unchanged: its evaluated systemd.defaultUnit / display-manager wantedBy are not altered.

Trade-offs

  • desktop relies on sudo; the user has sudo access, so no extra configuration is required.
  • Chose "boot to terminal, launch on demand" over a GRUB boot-menu entry because it is more robust across NixOS generations and needs no fragile static kernel entries.