diff --git a/machines/mibook/environments.nix b/machines/mibook/environments.nix index 8581e93..51108b8 100644 --- a/machines/mibook/environments.nix +++ b/machines/mibook/environments.nix @@ -6,6 +6,7 @@ in { my.profiles = { kde-desktop.enable = true; + kde-desktop.startOnBoot = false; zsh.enable = true; apps = { desktop_apps = true; diff --git a/modules/environments/kde-desktop/default.nix b/modules/environments/kde-desktop/default.nix index fed26ef..1598ad7 100644 --- a/modules/environments/kde-desktop/default.nix +++ b/modules/environments/kde-desktop/default.nix @@ -11,17 +11,37 @@ in { options.my.profiles.kde-desktop = with lib; { enable = mkEnableOption "KDE Desktop Environment"; + startOnBoot = mkOption { + type = types.bool; + default = true; + description = '' + Whether the display manager (SDDM) starts automatically at boot. + When false, the system boots to a text console and KDE can be + launched on demand with the `desktop` command. + ''; + }; }; - config = lib.mkIf cfg.enable { - services = { - displayManager.sddm.enable = true; - displayManager.sddm.wayland.enable = true; - desktopManager.plasma6.enable = true; - }; - users.users.finn.packages = with pkgs; [ - # Programms can be added here... - numix-icon-theme - ]; - }; + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + services = { + displayManager.sddm.enable = true; + displayManager.sddm.wayland.enable = true; + desktopManager.plasma6.enable = true; + }; + users.users.finn.packages = with pkgs; [ + # Programms can be added here... + numix-icon-theme + ]; + } + (lib.mkIf (!cfg.startOnBoot) { + # Boot to a text console; SDDM stays installed but is not pulled in + # by any boot target. Launch KDE on demand with `desktop`. + systemd.services.display-manager.wantedBy = lib.mkForce [ ]; + systemd.defaultUnit = lib.mkForce "multi-user.target"; + environment.systemPackages = [ + (pkgs.writeShellScriptBin "desktop" "exec sudo systemctl start display-manager.service") + ]; + }) + ]); } \ No newline at end of file