diff --git a/nixos/modules/programs/gnupg.nix b/nixos/modules/programs/gnupg.nix index 8f82de0336667..a94ac156ff051 100644 --- a/nixos/modules/programs/gnupg.nix +++ b/nixos/modules/programs/gnupg.nix @@ -10,22 +10,7 @@ let mkKeyValue = lib.generators.mkKeyValueDefault { } " "; }; - xserverCfg = config.services.xserver; - - defaultPinentryFlavor = - if xserverCfg.desktopManager.lxqt.enable - || xserverCfg.desktopManager.plasma5.enable - || xserverCfg.desktopManager.deepin.enable then - "qt" - else if xserverCfg.desktopManager.xfce.enable then - "gtk2" - else if xserverCfg.enable || config.programs.sway.enable then - "gnome3" - else - "curses"; - in - { options.programs.gnupg = { @@ -66,16 +51,16 @@ in }; agent.pinentryFlavor = mkOption { - type = types.nullOr (types.enum pkgs.pinentry.flavors); + type = types.nullOr (types.enum pkgs.pinentry.possibleFlavors); example = "gnome3"; - default = defaultPinentryFlavor; - defaultText = literalMD ''matching the configured desktop environment''; + default = "curses"; + defaultText = literalMD ''matching the configured desktop environment or curses''; description = lib.mdDoc '' Which pinentry interface to use. If not null, the path to the pinentry binary will be set in /etc/gnupg/gpg-agent.conf. If not set at all, it'll pick an appropriate flavor depending on the - system configuration (qt flavor for lxqt and plasma5, gtk2 for xfce - 4.12, gnome3 on all other systems with X enabled, ncurses otherwise). + system configuration (qt flavor for lxqt and plasma5, gtk2 for xfce, + gnome3 on all other systems with X enabled, curses otherwise). ''; }; @@ -102,8 +87,7 @@ in config = mkIf cfg.agent.enable { programs.gnupg.agent.settings = { - pinentry-program = lib.mkIf (cfg.agent.pinentryFlavor != null) - "${pkgs.pinentry.${cfg.agent.pinentryFlavor}}/bin/pinentry"; + pinentry-program = lib.mkIf (cfg.agent.pinentryFlavor != null) (lib.getExe pkgs."pinentry-${cfg.agent.pinentryFlavor}"); }; environment.etc."gnupg/gpg-agent.conf".source = diff --git a/nixos/modules/programs/wayland/sway.nix b/nixos/modules/programs/wayland/sway.nix index 57ee629b28810..86a10345db519 100644 --- a/nixos/modules/programs/wayland/sway.nix +++ b/nixos/modules/programs/wayland/sway.nix @@ -152,6 +152,7 @@ in { ''; } ]; + environment = { systemPackages = optional (cfg.package != null) cfg.package ++ cfg.extraPackages; # Needed for the default wallpaper: @@ -166,8 +167,12 @@ in { "sway/config".source = mkOptionDefault "${cfg.package}/etc/sway/config"; }; }; + + programs.gnupg.agent.pinentryFlavor = "gnome3"; + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1050913 xdg.portal.config.sway.default = mkDefault [ "wlr" "gtk" ]; + # To make a Sway session available if a display manager like SDDM is enabled: services.xserver.displayManager.sessionPackages = optionals (cfg.package != null) [ cfg.package ]; } (import ./wayland-session.nix { inherit lib pkgs; }) diff --git a/nixos/modules/services/x11/desktop-managers/deepin.nix b/nixos/modules/services/x11/desktop-managers/deepin.nix index 7fdd50b1ed263..67f17ac0d9e0f 100644 --- a/nixos/modules/services/x11/desktop-managers/deepin.nix +++ b/nixos/modules/services/x11/desktop-managers/deepin.nix @@ -66,6 +66,7 @@ in services.upower.enable = mkDefault config.powerManagement.enable; networking.networkmanager.enable = mkDefault true; programs.dconf.enable = mkDefault true; + programs.gnupg.agent.pinentryFlavor = "qt"; fonts.packages = with pkgs; [ noto-fonts ]; xdg.mime.enable = true; diff --git a/nixos/modules/services/x11/desktop-managers/lxqt.nix b/nixos/modules/services/x11/desktop-managers/lxqt.nix index 50ad72dc7388d..6840aba9c12cd 100644 --- a/nixos/modules/services/x11/desktop-managers/lxqt.nix +++ b/nixos/modules/services/x11/desktop-managers/lxqt.nix @@ -62,6 +62,8 @@ in # Link some extra directories in /run/current-system/software/share environment.pathsToLink = [ "/share" ]; + programs.gnupg.agent.pinentryFlavor = "qt"; + # virtual file systems support for PCManFM-QT services.gvfs.enable = true; diff --git a/nixos/modules/services/x11/desktop-managers/plasma5.nix b/nixos/modules/services/x11/desktop-managers/plasma5.nix index fc9de2500ba46..c96f7298a74dc 100644 --- a/nixos/modules/services/x11/desktop-managers/plasma5.nix +++ b/nixos/modules/services/x11/desktop-managers/plasma5.nix @@ -331,6 +331,7 @@ in serif = [ "Noto Serif" ]; }; + programs.gnupg.agent.pinentryFlavor = "qt"; programs.ssh.askPassword = mkDefault "${pkgs.plasma5Packages.ksshaskpass.out}/bin/ksshaskpass"; # Enable helpful DBus services. diff --git a/nixos/modules/services/x11/desktop-managers/xfce.nix b/nixos/modules/services/x11/desktop-managers/xfce.nix index e28486bcc12d8..c5876f5fc5cb0 100644 --- a/nixos/modules/services/x11/desktop-managers/xfce.nix +++ b/nixos/modules/services/x11/desktop-managers/xfce.nix @@ -131,6 +131,7 @@ in xfdesktop ] ++ optional cfg.enableScreensaver xfce4-screensaver) excludePackages; + programs.gnupg.agent.pinentryFlavor = "gtk2"; programs.xfconf.enable = true; programs.thunar.enable = true; diff --git a/nixos/modules/services/x11/xserver.nix b/nixos/modules/services/x11/xserver.nix index 4a8f2f61caaf4..471601e105abe 100644 --- a/nixos/modules/services/x11/xserver.nix +++ b/nixos/modules/services/x11/xserver.nix @@ -749,6 +749,8 @@ in boot.kernel.sysctl."fs.inotify.max_user_instances" = mkDefault 524288; boot.kernel.sysctl."fs.inotify.max_user_watches" = mkDefault 524288; + programs.gnupg.agent.pinentryFlavor = "gnome3"; + systemd.defaultUnit = mkIf cfg.autorun "graphical.target"; systemd.services.display-manager = diff --git a/pkgs/tools/security/pinentry/default.nix b/pkgs/tools/security/pinentry/default.nix index dca48f4e21087..af363ea21ff99 100644 --- a/pkgs/tools/security/pinentry/default.nix +++ b/pkgs/tools/security/pinentry/default.nix @@ -84,7 +84,10 @@ pinentryMkDerivation rec { outputs = [ "out" ] ++ enabledFlavors; - passthru = { flavors = enabledFlavors; }; + passthru = { + flavors = enabledFlavors; + possibleFlavors = lib.attrNames flavorInfo; + }; meta = with lib; { homepage = "http://gnupg.org/aegypten2/"; @@ -95,6 +98,7 @@ pinentryMkDerivation rec { Pinentry provides a console and (optional) GTK and Qt GUIs allowing users to enter a passphrase when `gpg' or `gpg2' is run and needs it. ''; + mainProgram = "pinentry"; maintainers = with maintainers; [ ttuegel fpletz ]; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index dadc9464cea43..c65328baba508 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -12070,11 +12070,11 @@ with pkgs; pinentry = libsForQt5.callPackage ../tools/security/pinentry { }; - pinentry-curses = (lib.getOutput "curses" pinentry); - pinentry-emacs = (lib.getOutput "emacs" pinentry); - pinentry-gtk2 = (lib.getOutput "gtk2" pinentry); - pinentry-qt = (lib.getOutput "qt" pinentry); - pinentry-gnome = (lib.getOutput "gnome3" pinentry); + pinentry-curses = pinentry.override { enabledFlavors = [ "curses" ]; }; + pinentry-emacs = pinentry.override { enabledFlavors = [ "emacs" ]; }; + pinentry-gtk2 = pinentry.override { enabledFlavors = [ "gtk2" ]; }; + pinentry-qt = pinentry.override { enabledFlavors = [ "qt" ]; }; + pinentry-gnome3 = pinentry.override { enabledFlavors = [ "gnome3" ]; }; pinentry_mac = callPackage ../tools/security/pinentry/mac.nix { inherit (darwin.apple_sdk.frameworks) Cocoa;