From eb791734ba98beef662aa27b72788fb931ca106f Mon Sep 17 00:00:00 2001 From: UGA Innovation Factory Date: Fri, 13 Feb 2026 11:35:24 -0500 Subject: [PATCH] feat: Compile Plasma Bigscreen against the development repo as of February 13, 2026 --- hw/nix-zima.nix | 2 +- pkgs/default.nix | 24 ++++++++ pkgs/plasma-bigscreen.nix | 112 ++++++++++++++++++++++++++++++++++++++ sw/bigscreen/default.nix | 63 +++++++++++++++++++++ sw/bigscreen/programs.nix | 31 +++++++++++ sw/bigscreen/services.nix | 74 +++++++++++++++++++++++++ sw/default.nix | 1 + 7 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 pkgs/default.nix create mode 100644 pkgs/plasma-bigscreen.nix create mode 100644 sw/bigscreen/default.nix create mode 100644 sw/bigscreen/programs.nix create mode 100644 sw/bigscreen/services.nix diff --git a/hw/nix-zima.nix b/hw/nix-zima.nix index aa0137e..d7d359c 100644 --- a/hw/nix-zima.nix +++ b/hw/nix-zima.nix @@ -66,6 +66,6 @@ in # ========== Software Profile ========== athenix.sw.enable = lib.mkDefault true; - athenix.sw.desktop.enable = lib.mkDefault true; + athenix.sw.bigscreen.enable = lib.mkDefault true; }; } diff --git a/pkgs/default.nix b/pkgs/default.nix new file mode 100644 index 0000000..6f30810 --- /dev/null +++ b/pkgs/default.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: +{ + plasma-bigscreen = pkgs.callPackage ./plasma-bigscreen.nix { + inherit (pkgs.kdePackages) + kcmutils + kdeclarative + ki18n + kio + knotifications + kwayland + kwindowsystem + mkKdeDerivation + qtmultimedia + plasma-workspace + bluez-qt + qtwebengine + plasma-nano + plasma-nm + milou + kscreen + kdeconnect-kde + ; + }; +} \ No newline at end of file diff --git a/pkgs/plasma-bigscreen.nix b/pkgs/plasma-bigscreen.nix new file mode 100644 index 0000000..1fc8a03 --- /dev/null +++ b/pkgs/plasma-bigscreen.nix @@ -0,0 +1,112 @@ +# NOTE: from https://github.com/NixOS/nixpkgs/pull/428353#issuecomment-3498917203 +# more info in tv.nix nixos config +{ + mkKdeDerivation, + lib, + fetchFromGitLab, + pkg-config, + ki18n, + kdeclarative, + kcmutils, + knotifications, + kio, + kwayland, + kwindowsystem, + plasma-workspace, + qtmultimedia, + bluez-qt, + qtwebengine, + plasma-nano, + plasma-nm, + milou, + kscreen, + kdeconnect-kde, + sdl3, + libcec ? null +}: +mkKdeDerivation { + pname = "plasma-bigscreen"; + version = "unstable-2026-02-13"; + + src = fetchFromGitLab { + domain = "invent.kde.org"; + owner = "plasma"; + repo = "plasma-bigscreen"; + rev = "1db19cdfc2ac1653cb129f403702addec2caf4c7"; + hash = "sha256-dfsR20dY1jtLmEpGRxvp9xwOHJFn3mVw+1RUGBJRLpQ="; + }; + + extraNativeBuildInputs = [ + pkg-config + ]; + + buildInputs = [ + ki18n + kdeclarative + kcmutils + knotifications + kio + kwayland + kwindowsystem + plasma-workspace + qtmultimedia + bluez-qt + qtwebengine + plasma-nano + plasma-nm + milou + kscreen + kdeconnect-kde + sdl3 + ] ++ lib.optionals (libcec != null) [ libcec ]; + + postPatch = '' + substituteInPlace bin/plasma-bigscreen-wayland.in \ + --replace-fail @KDE_INSTALL_FULL_LIBEXECDIR@ "${plasma-workspace}/libexec" + + # Plasma version numbers are required to match, but we are building an + # unreleased package against a stable Plasma release. + substituteInPlace CMakeLists.txt \ + --replace-fail 'set(PROJECT_VERSION "6.5.80")' 'set(PROJECT_VERSION "${plasma-workspace.version}")' + + # Fix for Qt 6.10+ which requires explicit find_package of private targets + # Reference: https://github.com/NixOS/nixpkgs/pull/461599/changes + substituteInPlace CMakeLists.txt \ + --replace-fail \ + 'find_package(Qt6 ''${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS + Quick + Core + Qml + DBus + Network + Multimedia + WebEngineCore + WebEngineQuick + WaylandClient + )' \ + 'find_package(Qt6 ''${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS + Quick + Core + Qml + QmlPrivate + DBus + Network + Multimedia + WebEngineCore + WebEngineQuick + WaylandClient + )' + ''; + + preFixup = '' + wrapQtApp $out/bin/plasma-bigscreen-wayland + ''; + + passthru.providedSessions = [ + "plasma-bigscreen-wayland" + ]; + + meta = { + license = lib.licenses.gpl2Plus; + }; +} \ No newline at end of file diff --git a/sw/bigscreen/default.nix b/sw/bigscreen/default.nix new file mode 100644 index 0000000..b47390f --- /dev/null +++ b/sw/bigscreen/default.nix @@ -0,0 +1,63 @@ +# ============================================================================ +# Bigscreen Software Configuration +# ============================================================================ +# Imports desktop-specific programs and services (KDE Plasma, CUPS, etc.) + +{ + config, + lib, + pkgs, + inputs, + ... +}: + +with lib; + +let + cfg = config.athenix.sw.bigscreen; +in +{ + options.athenix.sw.bigscreen = mkOption { + type = lib.types.submodule { + options = { + enable = mkOption { + type = lib.types.bool; + default = false; + description = '' + Enable full desktop environment with KDE Plasma 6 Bigscreen. + + Includes: + - KDE Plasma 6 desktop with SDDM display manager + - Printing and scanning support (CUPS) + - Virtualization (libvirt, virt-manager) + - Bluetooth and audio (PipeWire) + + Recommended for: home theater PCs, media centers, and large-screen desktops. + ''; + example = true; + }; + }; + }; + default = { }; + description = "Desktop environment configuration (KDE Plasma 6)."; + }; + + config = mkIf cfg.enable (mkMerge [ + (import ./programs.nix { + inherit + config + lib + pkgs + inputs + ; + }) + (import ./services.nix { + inherit + config + lib + pkgs + inputs + ; + }) + ]); +} diff --git a/sw/bigscreen/programs.nix b/sw/bigscreen/programs.nix new file mode 100644 index 0000000..a963e5f --- /dev/null +++ b/sw/bigscreen/programs.nix @@ -0,0 +1,31 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.athenix.sw; + basePackages = with pkgs; [ + tmux + man + (chromium.override { + commandLineArgs = [ "--enable-features=TouchpadOverscrollHistoryNavigation" ]; + }) + lm_sensors + ]; +in +{ + environment.systemPackages = subtractLists cfg.excludePackages (basePackages ++ cfg.extraPackages); + + programs.mtr.enable = true; + programs.gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + + programs.virt-manager.enable = true; +} diff --git a/sw/bigscreen/services.nix b/sw/bigscreen/services.nix new file mode 100644 index 0000000..9a1e5eb --- /dev/null +++ b/sw/bigscreen/services.nix @@ -0,0 +1,74 @@ +{ + lib, + pkgs, + ... +}: + +let + xelpkgs = pkgs: import ../../pkgs pkgs; + bigscreenpkgs = xelpkgs pkgs; +in + +{ + athenix.sw.python.enable = lib.mkDefault true; + + services.displayManager.sddm = { + enable = true; + theme = "breeze"; + wayland.enable = true; + enableHidpi = true; + settings = { + Autologin = { + Session = "plasma-bigscreen-wayland"; + User = "engr-ugaif"; + }; + }; + }; + services.desktopManager.plasma6.enable = true; + services.displayManager.sessionPackages = with bigscreenpkgs; [ + plasma-bigscreen + ]; + + services.printing.enable = true; + + networking.networkmanager.enable = true; + + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + fonts.packages = with pkgs; [ + nerd-fonts.fira-code + corefonts + noto-fonts + ]; + fonts.fontconfig = { + enable = true; + defaultFonts.monospace = [ "FiraCode Nerd Font Mono" ]; + }; + + hardware.bluetooth.enable = true; + services.blueman.enable = true; + + networking.firewall.enable = true; + + services.flatpak.enable = true; + xdg.portal.enable = true; + xdg.portal.extraPortals = [ pkgs.kdePackages.xdg-desktop-portal-kde ]; + + virtualisation.libvirtd.enable = true; + + services.thermald.enable = true; + + services.fwupd.enable = true; + + services.openssh = { + enable = true; + settings.PermitRootLogin = "no"; + }; +} diff --git a/sw/default.nix b/sw/default.nix index 4403c67..461977b 100644 --- a/sw/default.nix +++ b/sw/default.nix @@ -32,6 +32,7 @@ in ./builders ./tablet-kiosk ./stateless-kiosk + ./bigscreen inputs.home-manager.nixosModules.home-manager inputs.agenix.nixosModules.default inputs.disko.nixosModules.disko