From 8531a2bc3189e31ce1623123f92cdcfce20e49b6 Mon Sep 17 00:00:00 2001 From: Seth Flynn Date: Thu, 13 Feb 2025 17:44:18 -0500 Subject: nixos: make desktop stuff mixins --- modules/nixos/default.nix | 1 - modules/nixos/defaults/default.nix | 3 ++ modules/nixos/defaults/desktop-programs.nix | 26 +++++++++++ modules/nixos/defaults/fonts.nix | 32 +++++++++++++ modules/nixos/desktop/audio.nix | 26 ----------- modules/nixos/desktop/budgie/default.nix | 70 ---------------------------- modules/nixos/desktop/default.nix | 32 ------------- modules/nixos/desktop/fonts.nix | 41 ----------------- modules/nixos/desktop/gnome/default.nix | 56 ----------------------- modules/nixos/desktop/niri/default.nix | 53 --------------------- modules/nixos/desktop/plasma/default.nix | 43 ----------------- modules/nixos/desktop/programs.nix | 17 ------- modules/nixos/mixins/budgie.nix | 71 +++++++++++++++++++++++++++++ modules/nixos/mixins/default.nix | 5 ++ modules/nixos/mixins/gnome.nix | 57 +++++++++++++++++++++++ modules/nixos/mixins/niri.nix | 47 +++++++++++++++++++ modules/nixos/mixins/pipewire.nix | 18 ++++++++ modules/nixos/mixins/plasma.nix | 44 ++++++++++++++++++ systems/glados/default.nix | 12 ++--- 19 files changed, 309 insertions(+), 345 deletions(-) create mode 100644 modules/nixos/defaults/desktop-programs.nix create mode 100644 modules/nixos/defaults/fonts.nix delete mode 100644 modules/nixos/desktop/audio.nix delete mode 100644 modules/nixos/desktop/budgie/default.nix delete mode 100644 modules/nixos/desktop/default.nix delete mode 100644 modules/nixos/desktop/fonts.nix delete mode 100644 modules/nixos/desktop/gnome/default.nix delete mode 100644 modules/nixos/desktop/niri/default.nix delete mode 100644 modules/nixos/desktop/plasma/default.nix delete mode 100644 modules/nixos/desktop/programs.nix create mode 100644 modules/nixos/mixins/budgie.nix create mode 100644 modules/nixos/mixins/gnome.nix create mode 100644 modules/nixos/mixins/niri.nix create mode 100644 modules/nixos/mixins/pipewire.nix create mode 100644 modules/nixos/mixins/plasma.nix diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix index 0b7ead6..8022a7c 100644 --- a/modules/nixos/default.nix +++ b/modules/nixos/default.nix @@ -4,7 +4,6 @@ imports = [ ../shared ./defaults - ./desktop ./mixins ./profiles ./services diff --git a/modules/nixos/defaults/default.nix b/modules/nixos/defaults/default.nix index 2e16af8..85dfbe6 100644 --- a/modules/nixos/defaults/default.nix +++ b/modules/nixos/defaults/default.nix @@ -1,6 +1,9 @@ { lib, ... }: + { imports = [ + ./desktop-programs.nix + ./fonts.nix ./nix.nix ./programs.nix ./security.nix diff --git a/modules/nixos/defaults/desktop-programs.nix b/modules/nixos/defaults/desktop-programs.nix new file mode 100644 index 0000000..3c8499d --- /dev/null +++ b/modules/nixos/defaults/desktop-programs.nix @@ -0,0 +1,26 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + config = lib.mkMerge [ + { + services.xserver = { + excludePackages = [ pkgs.xterm ]; + }; + } + + (lib.mkIf config.services.xserver.enable { + environment.systemPackages = [ + pkgs.wl-clipboard + ]; + + programs = { + chromium.enable = lib.mkDefault true; + }; + }) + ]; +} diff --git a/modules/nixos/defaults/fonts.nix b/modules/nixos/defaults/fonts.nix new file mode 100644 index 0000000..5aa644e --- /dev/null +++ b/modules/nixos/defaults/fonts.nix @@ -0,0 +1,32 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + config = lib.mkIf config.services.xserver.enable { + fonts = { + enableDefaultPackages = true; + + packages = with pkgs; [ + noto-fonts + noto-fonts-color-emoji + noto-fonts-cjk-sans + + nerd-fonts.hack + ]; + + fontconfig = { + enable = true; + defaultFonts = lib.mkDefault { + serif = [ "Noto Serif" ]; + sansSerif = [ "Noto Sans" ]; + emoji = [ "Noto Color Emoji" ]; + monospace = [ "Hack Nerd Font" ]; + }; + }; + }; + }; +} diff --git a/modules/nixos/desktop/audio.nix b/modules/nixos/desktop/audio.nix deleted file mode 100644 index cf819e6..0000000 --- a/modules/nixos/desktop/audio.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, lib, ... }: -let - cfg = config.desktop.audio; -in -{ - options.desktop.audio = { - enable = lib.mkEnableOption "desktop audio configuration" // { - default = config.desktop.enable; - defaultText = lib.literalExpression "config.desktop.enable"; - }; - }; - - config = lib.mkIf cfg.enable { - security.rtkit.enable = true; - - services = { - pipewire = lib.mkDefault { - enable = true; - wireplumber.enable = true; - alsa.enable = true; - jack.enable = true; - pulse.enable = true; - }; - }; - }; -} diff --git a/modules/nixos/desktop/budgie/default.nix b/modules/nixos/desktop/budgie/default.nix deleted file mode 100644 index ac02b33..0000000 --- a/modules/nixos/desktop/budgie/default.nix +++ /dev/null @@ -1,70 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.desktop.budgie; -in -{ - options.desktop.budgie.enable = lib.mkEnableOption "Budgie desktop"; - - # TODO: Improve this module - config = lib.mkIf cfg.enable { - environment = { - budgie.excludePackages = with pkgs; [ - qogir-theme - qogir-icon-theme - - # I don't like MATE's apps. Fedora doesn't use them either :/ - mate.atril - mate.pluma - mate.engrampa - mate.mate-calc - mate.mate-terminal - mate.mate-system-monitor - vlc - ]; - - systemPackages = [ - pkgs.materia-theme - pkgs.papirus-icon-theme - - # Replacements for mate stuff - pkgs.celluloid - pkgs.cinnamon.nemo-fileroller - pkgs.evince - pkgs.gedit - pkgs.gnome-console - pkgs.gnome.gnome-calculator - pkgs.gnome.gnome-system-monitor - ]; - }; - - services.xserver = { - # fedora uses these by default - displayManager.lightdm.greeters.slick = { - theme = { - name = "Materia-dark"; - package = pkgs.materia-theme; - }; - iconTheme = { - name = "Papirus-Dark"; - package = pkgs.papirus-icon-theme; - }; - }; - - desktopManager.budgie = { - enable = true; - # make sure we actually use the above themes - extraGSettingsOverrides = '' - [org.gnome.desktop.interface:Budgie] - color-scheme='prefer-dark' - gtk-theme='Materia-dark' - icon-theme='Papirus-Dark' - ''; - }; - }; - }; -} diff --git a/modules/nixos/desktop/default.nix b/modules/nixos/desktop/default.nix deleted file mode 100644 index c7029cb..0000000 --- a/modules/nixos/desktop/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.desktop; -in -{ - options.desktop = { - enable = lib.mkEnableOption "desktop settings"; - }; - - imports = [ - ./audio.nix - ./fonts.nix - ./programs.nix - - ./budgie - ./gnome - ./niri - ./plasma - ]; - - config = lib.mkIf cfg.enable { - services.xserver = { - enable = true; - excludePackages = [ pkgs.xterm ]; - }; - }; -} diff --git a/modules/nixos/desktop/fonts.nix b/modules/nixos/desktop/fonts.nix deleted file mode 100644 index de3f5b4..0000000 --- a/modules/nixos/desktop/fonts.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.desktop.fonts; -in -{ - options.desktop.fonts = { - enable = lib.mkEnableOption "desktop fonts" // { - default = config.desktop.enable; - defaultText = lib.literalExpression "config.desktop.enable"; - }; - }; - - config = lib.mkIf cfg.enable { - fonts = { - enableDefaultPackages = true; - - packages = with pkgs; [ - noto-fonts - noto-fonts-color-emoji - noto-fonts-cjk-sans - - nerd-fonts.hack - ]; - - fontconfig = { - enable = true; - defaultFonts = lib.mkDefault { - serif = [ "Noto Serif" ]; - sansSerif = [ "Noto Sans" ]; - emoji = [ "Noto Color Emoji" ]; - monospace = [ "Hack Nerd Font" ]; - }; - }; - }; - }; -} diff --git a/modules/nixos/desktop/gnome/default.nix b/modules/nixos/desktop/gnome/default.nix deleted file mode 100644 index 13d25fa..0000000 --- a/modules/nixos/desktop/gnome/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.desktop.gnome; -in -{ - options.desktop.gnome.enable = lib.mkEnableOption "GNOME desktop"; - - config = lib.mkIf cfg.enable { - environment = { - gnome.excludePackages = with pkgs; [ - gnome-tour - totem # Replaced with celluloid - seahorse # Replaced with key-rack - ]; - - sessionVariables = { - NIXOS_OZONE_WL = "1"; - # For qadwaitadecorations - QT_WAYLAND_DECORATION = "adwaita"; - }; - - systemPackages = [ - # Make GTK3 apps look good - pkgs.adw-gtk3 - # Media player - pkgs.celluloid - # Checksum verifier - pkgs.collision - # Audio player - pkgs.decibels - # Screen recorder - pkgs.kooha - # Secret manager - pkgs.key-rack - # Fix Qt app client decorations - pkgs.qadwaitadecorations - pkgs.qadwaitadecorations-qt6 - # Task manager - pkgs.resources - # Emoji picker - pkgs.smile - pkgs.video-trimmer - ]; - }; - - services.xserver = { - displayManager.gdm.enable = true; - desktopManager.gnome.enable = true; - }; - }; -} diff --git a/modules/nixos/desktop/niri/default.nix b/modules/nixos/desktop/niri/default.nix deleted file mode 100644 index 93505ee..0000000 --- a/modules/nixos/desktop/niri/default.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - cfg = config.desktop.niri; -in -{ - options.desktop.niri = { - enable = lib.mkEnableOption "Niri desktop settings"; - }; - - config = lib.mkIf cfg.enable { - environment = { - sessionVariables = { - NIXOS_OZONE_WL = "1"; # Niri doesn't have native XWayland support - }; - - systemPackages = with pkgs; [ - # Terminal - alacritty - # Media player - celluloid - # PDF viewer - evince - # Application runner - fuzzel - # Image viewer - loupe - # Notification daemon - mako - # Polkit agent - pantheon.pantheon-agent-polkit - # Screen locker - swaylock - # Trash manager - trashy - ]; - }; - - services.greetd = { - enable = true; - settings = { - default_session.command = toString [ - (lib.getExe pkgs.greetd.tuigreet) - "--time" - ]; - }; - }; - }; -} diff --git a/modules/nixos/desktop/plasma/default.nix b/modules/nixos/desktop/plasma/default.nix deleted file mode 100644 index 6160afa..0000000 --- a/modules/nixos/desktop/plasma/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - config, - lib, - pkgs, - inputs', - ... -}: -let - cfg = config.desktop.plasma; -in -{ - options.desktop.plasma.enable = lib.mkEnableOption "Plasma desktop"; - - config = lib.mkIf cfg.enable { - environment = { - plasma6.excludePackages = with pkgs.kdePackages; [ - discover - khelpcenter - konsole - plasma-browser-integration - ]; - - sessionVariables = { - NIXOS_OZONE_WL = "1"; - }; - - systemPackages = [ - inputs'.krunner-nix.packages.default # thank you leah - pkgs.ghostty - pkgs.haruna # mpv frontend - ]; - }; - - services = { - displayManager.sddm = { - enable = true; - wayland.enable = true; - }; - - desktopManager.plasma6.enable = true; - }; - }; -} diff --git a/modules/nixos/desktop/programs.nix b/modules/nixos/desktop/programs.nix deleted file mode 100644 index 0bbf889..0000000 --- a/modules/nixos/desktop/programs.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -{ - config = lib.mkIf config.desktop.enable { - environment.systemPackages = [ - pkgs.wl-clipboard - ]; - - programs = { - chromium.enable = lib.mkDefault true; - }; - }; -} diff --git a/modules/nixos/mixins/budgie.nix b/modules/nixos/mixins/budgie.nix new file mode 100644 index 0000000..254143e --- /dev/null +++ b/modules/nixos/mixins/budgie.nix @@ -0,0 +1,71 @@ +{ + config, + lib, + pkgs, + ... +}: + +# TODO: Improve this +{ + config = lib.mkMerge [ + { + environment = { + budgie.excludePackages = with pkgs; [ + qogir-theme + qogir-icon-theme + + # I don't like MATE's apps. Fedora doesn't use them either :/ + mate.atril + mate.pluma + mate.engrampa + mate.mate-calc + mate.mate-terminal + mate.mate-system-monitor + vlc + ]; + }; + + services.xserver.desktopManager.budgie = { + # Make sure we actually use the themes below + extraGSettingsOverrides = '' + [org.gnome.desktop.interface:Budgie] + color-scheme='prefer-dark' + gtk-theme='Materia-dark' + icon-theme='Papirus-Dark' + ''; + }; + } + + (lib.mkIf config.services.xserver.desktopManager.budgie.enable { + environment.systemPackages = with pkgs; [ + materia-theme + papirus-icon-theme + + # Replacements for MATE apps + celluloid + cinnamon.nemo-fileroller + evince + gedit + gnome-console + gnome.gnome-calculator + gnome.gnome-system-monitor + ]; + + services.xserver.displayManager.lightdm = { + enable = lib.mkDefault true; + + # Fedora uses these by default + greeters.slick = { + theme = { + name = "Materia-dark"; + package = pkgs.materia-theme; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + }; + }; + }) + ]; +} diff --git a/modules/nixos/mixins/default.nix b/modules/nixos/mixins/default.nix index 701c4db..8a3653b 100644 --- a/modules/nixos/mixins/default.nix +++ b/modules/nixos/mixins/default.nix @@ -1,13 +1,18 @@ { imports = [ ./acme.nix + ./budgie.nix ./comin.nix ./forgejo.nix + ./gnome.nix ./hercules.nix ./kanidm.nix ./lanzaboote.nix ./nginx.nix + ./niri.nix ./nvidia.nix + ./pipewire.nix + ./plasma.nix ./promtail.nix ./resolved.nix ./tailscale.nix diff --git a/modules/nixos/mixins/gnome.nix b/modules/nixos/mixins/gnome.nix new file mode 100644 index 0000000..c60fbf8 --- /dev/null +++ b/modules/nixos/mixins/gnome.nix @@ -0,0 +1,57 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + config = lib.mkMerge [ + { + environment = { + gnome.excludePackages = with pkgs; [ + gnome-tour + totem # Replaced with celluloid + seahorse # Replaced with key-rack + ]; + }; + } + + (lib.mkIf config.services.xserver.desktopManager.gnome.enable { + environment = { + sessionVariables = { + NIXOS_OZONE_WL = "1"; + # For qadwaitadecorations + QT_WAYLAND_DECORATION = "adwaita"; + }; + + systemPackages = [ + # Make GTK3 apps look good + pkgs.adw-gtk3 + # Media player + pkgs.celluloid + # Checksum verifier + pkgs.collision + # Audio player + pkgs.decibels + # Screen recorder + pkgs.kooha + # Secret manager + pkgs.key-rack + # Fix Qt app client decorations + pkgs.qadwaitadecorations + pkgs.qadwaitadecorations-qt6 + # Task manager + pkgs.resources + # Emoji picker + pkgs.smile + pkgs.video-trimmer + ]; + }; + + services.xserver.displayManager.gdm = { + enable = lib.mkDefault true; + }; + }) + ]; +} diff --git a/modules/nixos/mixins/niri.nix b/modules/nixos/mixins/niri.nix new file mode 100644 index 0000000..151c185 --- /dev/null +++ b/modules/nixos/mixins/niri.nix @@ -0,0 +1,47 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + config = lib.mkIf config.programs.niri.enable { + environment = { + sessionVariables = { + NIXOS_OZONE_WL = "1"; # Niri doesn't have native XWayland support + }; + + systemPackages = with pkgs; [ + # Terminal + alacritty + # Media player + celluloid + # PDF viewer + evince + # Application runner + fuzzel + # Image viewer + loupe + # Notification daemon + mako + # Polkit agent + pantheon.pantheon-agent-polkit + # Screen locker + swaylock + # Trash manager + trashy + ]; + }; + + services.greetd = { + enable = lib.mkDefault true; + settings = { + default_session.command = toString [ + (lib.getExe pkgs.greetd.tuigreet) + "--time" + ]; + }; + }; + }; +} diff --git a/modules/nixos/mixins/pipewire.nix b/modules/nixos/mixins/pipewire.nix new file mode 100644 index 0000000..838e49f --- /dev/null +++ b/modules/nixos/mixins/pipewire.nix @@ -0,0 +1,18 @@ +{ config, lib, ... }: + +{ + config = lib.mkMerge [ + { + services.pipewire = lib.mkDefault { + wireplumber.enable = true; + alsa.enable = true; + jack.enable = true; + pulse.enable = true; + }; + } + + (lib.mkIf config.services.pipewire.enable { + security.rtkit.enable = true; + }) + ]; +} diff --git a/modules/nixos/mixins/plasma.nix b/modules/nixos/mixins/plasma.nix new file mode 100644 index 0000000..a43d718 --- /dev/null +++ b/modules/nixos/mixins/plasma.nix @@ -0,0 +1,44 @@ +{ + config, + lib, + pkgs, + inputs', + ... +}: + +{ + config = lib.mkMerge [ + { + environment = { + plasma6.excludePackages = with pkgs.kdePackages; [ + discover + khelpcenter + konsole + plasma-browser-integration + ]; + }; + + services.displayManager.sddm = { + wayland.enable = true; + }; + } + + (lib.mkIf config.services.desktopManager.plasma6.enable { + environment = { + sessionVariables = { + NIXOS_OZONE_WL = "1"; + }; + + systemPackages = [ + inputs'.krunner-nix.packages.default # Thank you Leah + pkgs.ghostty + pkgs.haruna # MPV frontend + ]; + }; + + services.displayManager.sddm = { + enable = lib.mkDefault true; + }; + }) + ]; +} diff --git a/systems/glados/default.nix b/systems/glados/default.nix index 42cdeb8..4911a87 100644 --- a/systems/glados/default.nix +++ b/systems/glados/default.nix @@ -14,11 +14,6 @@ profiles.personal.enable = true; - desktop = { - enable = true; - gnome.enable = true; - }; - boot = { kernelParams = [ "amd_pstate=active" @@ -63,7 +58,12 @@ flatpak.enable = true; fstrim.enable = true; fwupd.enable = true; - xserver.videoDrivers = [ "nvidia" ]; + + xserver = { + desktopManager.gnome.enable = true; + + videoDrivers = [ "nvidia" ]; + }; }; swapDevices = [ -- cgit v1.2.3