Unverified Commit c86e8fd7 authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

Merge pull request #133542 from fpletz/refactor/pinentry-remove-multiple-outputs

pinentry: remove multiple outputs
parents 7a2f4373 a270c43e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ with lib;
      networkmanager-sstp = super.networkmanager-vpnc.override { withGnome = false; };
      networkmanager-vpnc = super.networkmanager-vpnc.override { withGnome = false; };
      pango = super.pango.override { x11Support = false; };
      pinentry = super.pinentry.override { enabledFlavors = [ "curses" "tty" "emacs" ]; withLibsecret = false; };
      pinentry-curses = super.pinentry-curses.override { withLibsecret = false; };
      pipewire = super.pipewire.override { vulkanSupport = false; x11Support = false; };
      pythonPackagesExtensions = super.pythonPackagesExtensions ++ [
        (python-final: python-prev: {
+20 −22
Original line number Diff line number Diff line
{ config, lib, pkgs, ... }:

with lib;

let
  inherit (lib) mkRemovedOptionModule mkOption mkPackageOption types mkIf optionalString;

  cfg = config.programs.gnupg;

@@ -26,8 +25,10 @@ let
      "curses";

in

{
  imports = [
    (mkRemovedOptionModule [ "programs" "gnupg" "agent" "pinentryFlavor" ] "Use programs.gnupg.agent.pinentryPackage instead")
  ];

  options.programs.gnupg = {
    package = mkPackageOption pkgs "gnupg" { };
@@ -66,17 +67,17 @@ in
      '';
    };

    agent.pinentryFlavor = mkOption {
      type = types.nullOr (types.enum pkgs.pinentry.flavors);
      example = "gnome3";
      default = defaultPinentryFlavor;
      defaultText = literalMD ''matching the configured desktop environment'';
    agent.pinentryPackage = mkOption {
      type = types.nullOr types.package;
      example = lib.literalMD "pkgs.pinentry-gnome3";
      default = pkgs.pinentry-curses;
      defaultText = lib.literalMD "matching the configured desktop environment or `pkgs.pinentry-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).
        Which pinentry package to use. The path to the mainProgram as defined in
        the package's meta attriutes will be set in /etc/gnupg/gpg-agent.conf.
        If not set by the user, it'll pick an appropriate flavor depending on the
        system configuration (qt flavor for lxqt and plasma5, gtk2 for xfce,
        gnome3 on all other systems with X enabled, curses otherwise).
      '';
    };

@@ -102,9 +103,8 @@ 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";
    programs.gnupg.agent.settings = mkIf (cfg.agent.pinentryPackage != null) {
      pinentry-program = lib.getExe cfg.agent.pinentryPackage;
    };

    environment.etc."gnupg/gpg-agent.conf".source =
@@ -207,9 +207,9 @@ in
      wantedBy = [ "sockets.target" ];
    };

    services.dbus.packages = mkIf (cfg.agent.pinentryFlavor == "gnome3") [ pkgs.gcr ];
    services.dbus.packages = mkIf (lib.elem "gnome3" (cfg.agent.pinentryPackage.flavors or [])) [ pkgs.gcr ];

    environment.systemPackages = with pkgs; [ cfg.package ];
    environment.systemPackages = [ cfg.package ];

    environment.interactiveShellInit = ''
      # Bind gpg-agent to this TTY if gpg commands are used.
@@ -230,12 +230,10 @@ in
    '';

    assertions = [
      { assertion = cfg.agent.enableSSHSupport -> !config.programs.ssh.startAgent;
      {
        assertion = cfg.agent.enableSSHSupport -> !config.programs.ssh.startAgent;
        message = "You can't use ssh-agent and GnuPG agent with SSH support enabled at the same time!";
      }
    ];
  };

  # uses attributes of the linked package
  meta.buildDocsInSandbox = false;
}
+5 −0
Original line number Diff line number Diff line
@@ -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.pinentryPackage = lib.mkDefault pkgs.pinentry-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; })
+2 −10
Original line number Diff line number Diff line
@@ -6,9 +6,6 @@ with lib;

let
  cfg = config.services.yubikey-agent;

  # reuse the pinentryFlavor option from the gnupg module
  pinentryFlavor = config.programs.gnupg.agent.pinentryFlavor;
in
{
  ###### interface
@@ -41,13 +38,8 @@ in
    # This overrides the systemd user unit shipped with the
    # yubikey-agent package
    systemd.user.services.yubikey-agent = mkIf (pinentryFlavor != null) {
      path = [ pkgs.pinentry.${pinentryFlavor} ];
      wantedBy = [
        (if pinentryFlavor == "tty" || pinentryFlavor == "curses" then
          "default.target"
        else
          "graphical-session.target")
      ];
      path = [ config.programs.gnupg.agent.pinentryPackage ];
      wantedBy = [ "default.target" ];
    };

    # Yubikey-agent expects pcsd to be running in order to function.
+1 −0
Original line number Diff line number Diff line
@@ -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.pinentryPackage = pkgs.pinentry-qt;

      fonts.packages = with pkgs; [ noto-fonts ];
      xdg.mime.enable = true;
Loading