diff --git a/nixos/lib/utils.nix b/nixos/lib/utils.nix index 80341dd48fc..497d98aa4d1 100644 --- a/nixos/lib/utils.nix +++ b/nixos/lib/utils.nix @@ -194,6 +194,22 @@ rec { (( ! $inherit_errexit_enabled )) && shopt -u inherit_errexit ''; + /* Remove packages of packagesToRemove from packages, based on their names. + Relies on package names and has quadratic complexity so use with caution! + + Type: + removePackagesByName :: [package] -> [package] -> [package] + + Example: + removePackagesByName [ nautilus file-roller ] [ file-roller totem ] + => [ nautilus ] + */ + removePackagesByName = packages: packagesToRemove: + let + namesToRemove = map lib.getName packagesToRemove; + in + lib.filter (x: !(builtins.elem (lib.getName x) namesToRemove)) packages; + systemdUtils = { lib = import ./systemd-lib.nix { inherit lib config pkgs; }; unitOptions = import ./systemd-unit-options.nix { inherit lib systemdUtils; }; diff --git a/nixos/modules/services/x11/desktop-managers/cinnamon.nix b/nixos/modules/services/x11/desktop-managers/cinnamon.nix index 3a78a526460..a8ec5d5e590 100644 --- a/nixos/modules/services/x11/desktop-managers/cinnamon.nix +++ b/nixos/modules/services/x11/desktop-managers/cinnamon.nix @@ -196,7 +196,7 @@ in programs.evince.enable = mkDefault true; programs.file-roller.enable = mkDefault true; - environment.systemPackages = (with pkgs // pkgs.gnome // pkgs.cinnamon; pkgs.gnome.removePackagesByName [ + environment.systemPackages = with pkgs // pkgs.gnome // pkgs.cinnamon; lib.utils.removePackagesByName [ # cinnamon team apps bulky blueberry @@ -212,7 +212,7 @@ in # external apps shipped with linux-mint hexchat gnome-calculator - ] config.environment.cinnamon.excludePackages); + ] config.environment.cinnamon.excludePackages; }) ]; } diff --git a/nixos/modules/services/x11/desktop-managers/gnome.nix b/nixos/modules/services/x11/desktop-managers/gnome.nix index f87258ac8dc..35d80abb05f 100644 --- a/nixos/modules/services/x11/desktop-managers/gnome.nix +++ b/nixos/modules/services/x11/desktop-managers/gnome.nix @@ -455,7 +455,7 @@ in (mkIf serviceCfg.core-utilities.enable { environment.systemPackages = with pkgs.gnome; - removePackagesByName + lib.utils.removePackagesByName ([ baobab cheese @@ -515,7 +515,7 @@ in }) (mkIf serviceCfg.games.enable { - environment.systemPackages = (with pkgs.gnome; removePackagesByName [ + environment.systemPackages = with pkgs.gnome; lib.utils.removePackagesByName [ aisleriot atomix five-or-more @@ -536,12 +536,12 @@ in quadrapassel swell-foop tali - ] config.environment.gnome.excludePackages); + ] config.environment.gnome.excludePackages; }) # Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/3.38.0/elements/core/meta-gnome-core-developer-tools.bst (mkIf serviceCfg.core-developer-tools.enable { - environment.systemPackages = (with pkgs.gnome; removePackagesByName [ + environment.systemPackages = with pkgs.gnome; lib.utils.removePackagesByName [ dconf-editor devhelp pkgs.gnome-builder @@ -550,7 +550,7 @@ in # in default configurations. # https://github.com/NixOS/nixpkgs/issues/60908 /* gnome-boxes */ - ] config.environment.gnome.excludePackages); + ] config.environment.gnome.excludePackages; services.sysprof.enable = notExcluded pkgs.sysprof; }) diff --git a/nixos/modules/services/x11/desktop-managers/lxqt.nix b/nixos/modules/services/x11/desktop-managers/lxqt.nix index 720985ba0d9..9c8bfab077a 100644 --- a/nixos/modules/services/x11/desktop-managers/lxqt.nix +++ b/nixos/modules/services/x11/desktop-managers/lxqt.nix @@ -51,7 +51,7 @@ in environment.systemPackages = pkgs.lxqt.preRequisitePackages ++ pkgs.lxqt.corePackages ++ - (pkgs.gnome.removePackagesByName + (lib.utils.removePackagesByName pkgs.lxqt.optionalPackages config.environment.lxqt.excludePackages); diff --git a/nixos/modules/services/x11/desktop-managers/mate.nix b/nixos/modules/services/x11/desktop-managers/mate.nix index a7fda4be979..d09c3cf8820 100644 --- a/nixos/modules/services/x11/desktop-managers/mate.nix +++ b/nixos/modules/services/x11/desktop-managers/mate.nix @@ -74,7 +74,7 @@ in # Debugging environment.sessionVariables.MATE_SESSION_DEBUG = mkIf cfg.debug "1"; - environment.systemPackages = pkgs.gnome.removePackagesByName + environment.systemPackages = lib.utils.removePackagesByName (pkgs.mate.basePackages ++ pkgs.mate.extraPackages ++ [ diff --git a/nixos/modules/services/x11/desktop-managers/pantheon.nix b/nixos/modules/services/x11/desktop-managers/pantheon.nix index 3528b0f40e7..004d14b634d 100644 --- a/nixos/modules/services/x11/desktop-managers/pantheon.nix +++ b/nixos/modules/services/x11/desktop-managers/pantheon.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ config, lib, utils, pkgs, ... }: with lib; @@ -214,7 +214,7 @@ in elementary-settings-daemon pantheon-agent-geoclue2 pantheon-agent-polkit - ]) ++ (gnome.removePackagesByName [ + ]) ++ (utils.removePackagesByName [ gnome.gnome-font-viewer gnome.gnome-settings-daemon338 ] config.environment.pantheon.excludePackages); @@ -272,7 +272,7 @@ in }) (mkIf serviceCfg.apps.enable { - environment.systemPackages = with pkgs.pantheon; pkgs.gnome.removePackagesByName ([ + environment.systemPackages = with pkgs.pantheon; utils.removePackagesByName ([ elementary-calculator elementary-calendar elementary-camera diff --git a/nixos/modules/services/x11/xserver.nix b/nixos/modules/services/x11/xserver.nix index 2e760e2773d..d488e9b55d4 100644 --- a/nixos/modules/services/x11/xserver.nix +++ b/nixos/modules/services/x11/xserver.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ config, lib, utils, pkgs, ... }: with lib; @@ -662,7 +662,7 @@ in ${cfgPath}.source = xorg.xf86inputevdev.out + "/share" + cfgPath; }); - environment.systemPackages = pkgs.gnome.removePackagesByName + environment.systemPackages = utils.removePackagesByName [ xorg.xorgserver.out xorg.xrandr xorg.xrdb diff --git a/pkgs/desktops/gnome/default.nix b/pkgs/desktops/gnome/default.nix index 1809604bec5..a0561ca0030 100644 --- a/pkgs/desktops/gnome/default.nix +++ b/pkgs/desktops/gnome/default.nix @@ -3,21 +3,6 @@ lib.makeScope pkgs.newScope (self: with self; { updateScript = callPackage ./update.nix { }; - /* Remove packages of packagesToRemove from packages, based on their names - - Type: - removePackagesByName :: [package] -> [package] -> [package] - - Example: - removePackagesByName [ nautilus file-roller ] [ file-roller totem ] - => [ nautilus ] - */ - removePackagesByName = packages: packagesToRemove: - let - namesToRemove = map lib.getName packagesToRemove; - in - lib.filter (x: !(builtins.elem (lib.getName x) namesToRemove)) packages; - libsoup = pkgs.libsoup.override { gnomeSupport = true; }; libchamplain = pkgs.libchamplain.override { libsoup = libsoup; };