From e1d136bd2fb96fae9ed0ba906db787ad9c44a516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Jane=C5=BEi=C4=8D?= Date: Sun, 12 Apr 2026 21:28:00 +0000 Subject: [PATCH] feat: merge desktop + desktop-minimal + calibre with sub-options --- features/calibre.nix | 22 ---- features/desktop-minimal.nix | 45 -------- features/desktop.nix | 197 +++++++++++++++++++++++------------ 3 files changed, 132 insertions(+), 132 deletions(-) delete mode 100644 features/calibre.nix delete mode 100644 features/desktop-minimal.nix diff --git a/features/calibre.nix b/features/calibre.nix deleted file mode 100644 index e310fa7..0000000 --- a/features/calibre.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - nixos = - { pkgs, ... }: - { - environment.systemPackages = [ pkgs.calibre ]; - - # udev rules for kindle and mtp device access - # NOTE:(@janezicmatej) uses services.udev.packages instead of extraRules - # because extraRules writes to 99-local.rules which is too late for uaccess - # see https://github.com/NixOS/nixpkgs/issues/308681 - services.udev.packages = [ - pkgs.libmtp - (pkgs.writeTextFile { - name = "kindle-udev-rules"; - text = '' - ACTION!="remove", SUBSYSTEM=="usb", ATTRS{idVendor}=="1949", TAG+="uaccess" - ''; - destination = "/etc/udev/rules.d/70-kindle.rules"; - }) - ]; - }; -} diff --git a/features/desktop-minimal.nix b/features/desktop-minimal.nix deleted file mode 100644 index 73ff718..0000000 --- a/features/desktop-minimal.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ - nixos = - { pkgs, inputs, ... }: - { - imports = [ inputs.stylix.nixosModules.stylix ]; - - # audio - services.pipewire = { - enable = true; - pulse.enable = true; - }; - - security.polkit.enable = true; - services.dbus.enable = true; - services.playerctld.enable = true; - - xdg.portal = { - enable = true; - xdgOpenUsePortal = true; - extraPortals = [ - pkgs.xdg-desktop-portal-wlr - pkgs.xdg-desktop-portal-gtk - ]; - }; - - fonts.packages = with pkgs; [ - font-awesome - nerd-fonts.jetbrains-mono - ]; - - # theming - stylix = { - enable = true; - polarity = "dark"; - image = "${inputs.assets}/wallpaper.png"; - base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-medium.yaml"; - }; - }; - - home = - { inputs, ... }: - { - home.file.".assets".source = inputs.assets; - }; -} diff --git a/features/desktop.nix b/features/desktop.nix index f2e06af..3caf908 100644 --- a/features/desktop.nix +++ b/features/desktop.nix @@ -1,85 +1,152 @@ { nixos = - { pkgs, inputs, ... }: + { config, lib, pkgs, inputs, ... }: + let + cfg = config.features.desktop; + in { - imports = [ inputs.stylix.nixosModules.stylix ]; + options.features.desktop = { + enable = lib.mkEnableOption "desktop environment"; - # audio - services.pipewire = { - enable = true; - pulse.enable = true; + audio.enable = lib.mkOption { + type = lib.types.bool; + default = true; + }; + + bluetooth.enable = lib.mkOption { + type = lib.types.bool; + default = false; + }; + + apps.enable = lib.mkOption { + type = lib.types.bool; + default = true; + }; + + theme = { + wallpaper = lib.mkOption { + type = lib.types.path; + default = "${inputs.assets}/wallpaper.png"; + }; + + scheme = lib.mkOption { + type = lib.types.str; + default = "gruvbox-material-dark-medium"; + }; + + polarity = lib.mkOption { + type = lib.types.enum [ + "dark" + "light" + ]; + default = "dark"; + }; + }; + + internalCA.enable = lib.mkOption { + type = lib.types.bool; + default = true; + }; }; - # bluetooth - hardware.bluetooth.enable = true; - services.blueman.enable = true; + config = lib.mkIf cfg.enable (lib.mkMerge [ + # base desktop + { + security.polkit.enable = true; + services.dbus.enable = true; + services.playerctld.enable = true; - security.polkit.enable = true; - services.dbus.enable = true; - services.playerctld.enable = true; + xdg.portal = { + enable = true; + xdgOpenUsePortal = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-wlr + xdg-desktop-portal-gtk + ]; + }; - xdg.portal = { - enable = true; - xdgOpenUsePortal = true; - extraPortals = [ - pkgs.xdg-desktop-portal-wlr - pkgs.xdg-desktop-portal-gtk - ]; - }; + fonts.packages = with pkgs; [ + font-awesome + nerd-fonts.jetbrains-mono + ]; - fonts.packages = with pkgs; [ - font-awesome - nerd-fonts.jetbrains-mono - ]; + stylix = { + enable = true; + polarity = cfg.theme.polarity; + image = cfg.theme.wallpaper; + base16Scheme = "${pkgs.base16-schemes}/share/themes/${cfg.theme.scheme}.yaml"; + }; + } - # theming - stylix = { - enable = true; - polarity = "dark"; - image = "${inputs.assets}/wallpaper.png"; - base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-medium.yaml"; - }; + # audio + (lib.mkIf cfg.audio.enable { + services.pipewire = { + enable = true; + pulse.enable = true; + }; + environment.systemPackages = with pkgs; [ + pavucontrol + easyeffects + ]; + }) - programs.thunderbird.enable = true; - programs._1password.enable = true; - programs._1password-gui.enable = true; + # bluetooth + (lib.mkIf cfg.bluetooth.enable { + hardware.bluetooth.enable = true; + services.blueman.enable = true; + }) - environment.systemPackages = with pkgs; [ - easyeffects - ghostty - google-chrome - zathura - pavucontrol - bolt-launcher - libnotify - bibata-cursors - vesktop - rocketchat-desktop - telegram-desktop - slack - jellyfin-media-player - cider-2 - mpv - ffmpeg - wf-recorder - wl-mirror - protonmail-bridge - ledger-live-desktop - ]; + # apps + (lib.mkIf cfg.apps.enable { + programs.thunderbird.enable = true; - # internal CA - security.pki.certificateFiles = [ - inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system}.ca-matheo-si - ]; + environment.systemPackages = with pkgs; [ + ghostty + google-chrome + zathura + calibre + bolt-launcher + libnotify + bibata-cursors + vesktop + rocketchat-desktop + telegram-desktop + slack + jellyfin-media-player + cider-2 + mpv + ffmpeg + wf-recorder + wl-mirror + protonmail-bridge + ledger-live-desktop + ]; - xdg.mime.defaultApplications = { - "application/pdf" = "org.pwmt.zathura.desktop"; - }; + xdg.mime.defaultApplications = { + "application/pdf" = "org.pwmt.zathura.desktop"; + }; + + # kindle udev rules for calibre + features.udev.kindle.enable = lib.mkDefault true; + }) + + # internal CA + (lib.mkIf cfg.internalCA.enable { + security.pki.certificateFiles = [ + inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system}.ca-matheo-si + ]; + }) + ]); }; home = - { inputs, ... }: + { lib, inputs, osConfig, ... }: + let + cfg = osConfig.features.desktop; + in { - home.file.".assets".source = inputs.assets; + config = lib.mkIf cfg.enable { + home.file.".assets".source = inputs.assets; + }; }; }