Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion nixos/modules/config/no-x-libs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down
42 changes: 20 additions & 22 deletions nixos/modules/programs/gnupg.nix
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
{ config, lib, pkgs, ... }:

with lib;

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

cfg = config.programs.gnupg;

Expand All @@ -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" { };
Expand Down Expand Up @@ -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).
'';
};

Expand All @@ -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 =
Expand Down Expand Up @@ -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.
Expand All @@ -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 changes: 5 additions & 0 deletions nixos/modules/programs/wayland/sway.nix
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ in {
'';
}
];

environment = {
systemPackages = optional (cfg.package != null) cfg.package ++ cfg.extraPackages;
# Needed for the default wallpaper:
Expand All @@ -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; })
Expand Down
12 changes: 2 additions & 10 deletions nixos/modules/services/security/yubikey-agent.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down
1 change: 1 addition & 0 deletions nixos/modules/services/x11/desktop-managers/deepin.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions nixos/modules/services/x11/desktop-managers/lxqt.nix
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ in
# Link some extra directories in /run/current-system/software/share
environment.pathsToLink = [ "/share" ];

programs.gnupg.agent.pinentryPackage = pkgs.pinentry-qt;

# virtual file systems support for PCManFM-QT
services.gvfs.enable = true;

Expand Down
1 change: 1 addition & 0 deletions nixos/modules/services/x11/desktop-managers/plasma5.nix
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ in
serif = [ "Noto Serif" ];
};

programs.gnupg.agent.pinentryPackage = pkgs.pinentry-qt;
programs.ssh.askPassword = mkDefault "${pkgs.plasma5Packages.ksshaskpass.out}/bin/ksshaskpass";

# Enable helpful DBus services.
Expand Down
1 change: 1 addition & 0 deletions nixos/modules/services/x11/desktop-managers/plasma6.nix
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ in {
serif = ["Noto Serif"];
};

programs.gnupg.agent.pinentryPackage = pkgs.pinentry-qt;
programs.ssh.askPassword = mkDefault "${kdePackages.ksshaskpass.out}/bin/ksshaskpass";

# Enable helpful DBus services.
Expand Down
1 change: 1 addition & 0 deletions nixos/modules/services/x11/desktop-managers/xfce.nix
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ in
xfdesktop
] ++ optional cfg.enableScreensaver xfce4-screensaver) excludePackages;

programs.gnupg.agent.pinentryPackage = pkgs.pinentry-gtk2;
programs.xfconf.enable = true;
programs.thunar.enable = true;

Expand Down
2 changes: 2 additions & 0 deletions nixos/modules/services/x11/xserver.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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.pinentryPackage = lib.mkDefault pkgs.pinentry-gnome3;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One thing to consider is the behaviour when multiple DEs are installed.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I think distinct priorities for every different pinentry would be a bit silly. Maybe go back to define the default in the gnupg module?


systemd.defaultUnit = mkIf cfg.autorun "graphical.target";

systemd.services.display-manager =
Expand Down
1 change: 0 additions & 1 deletion nixos/tests/pass-secret-service.nix
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {

programs.gnupg = {
agent.enable = true;
agent.pinentryFlavor = "tty";
dirmngr.enable = true;
};
};
Expand Down
2 changes: 1 addition & 1 deletion pkgs/applications/version-management/blackbox/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
expect
which
coreutils
pinentry.tty
pinentry
git
gnutar
procps
Expand Down
4 changes: 2 additions & 2 deletions pkgs/by-name/go/goldwarden/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
, makeBinaryWrapper
, libfido2
, dbus
, pinentry
, pinentry-gnome3
, nix-update-script
}:

Expand All @@ -29,7 +29,7 @@ buildGoModule rec {

postInstall = ''
wrapProgram $out/bin/goldwarden \
--suffix PATH : ${lib.makeBinPath [dbus pinentry]}
--suffix PATH : ${lib.makeBinPath [dbus pinentry-gnome3]}

install -Dm644 $src/resources/com.quexten.goldwarden.policy -t $out/share/polkit-1/actions
'';
Expand Down
Loading