feat(yubikey): declare yubikey-manager

This commit is contained in:
2026-05-16 11:39:36 +02:00
parent cd52edbc4d
commit 11a89aa772
6 changed files with 81 additions and 78 deletions

View File

@@ -30,8 +30,9 @@
../../modules/ssh ../../modules/ssh
../../modules/taskwarrior ../../modules/taskwarrior
../../modules/terminal ../../modules/terminal
../../modules/zk
../../modules/torrenting ../../modules/torrenting
../../modules/yubikey
../../modules/zk
]; ];
home = { home = {
@@ -58,6 +59,7 @@
shell.bash.aliases.lang-js = true; shell.bash.aliases.lang-js = true;
shell.bash.addBinToPath = true; shell.bash.addBinToPath = true;
torrenting.enable = true; torrenting.enable = true;
my.yubikey.enable = true;
zk.enable = true; zk.enable = true;
programs = { programs = {

View File

@@ -29,6 +29,7 @@
../../modules/ssh ../../modules/ssh
../../modules/taskwarrior ../../modules/taskwarrior
../../modules/terminal ../../modules/terminal
../../modules/yubikey
]; ];
home = { home = {
@@ -53,6 +54,7 @@
git.github.enable = true; git.github.enable = true;
shell.bash.aliases.lang-js = true; shell.bash.aliases.lang-js = true;
shell.bash.addBinToPath = true; shell.bash.addBinToPath = true;
my.yubikey.enable = true;
programs = { programs = {
home-manager.enable = true; home-manager.enable = true;

View File

@@ -0,0 +1,19 @@
{
lib,
config,
pkgs,
...
}:
{
options.my.yubikey = {
enable = lib.mkEnableOption "yubikey";
};
config = lib.mkIf config.my.yubikey.enable {
home.packages = with pkgs; [
yubikey-manager
yubikey-personalization
];
};
}

View File

@@ -91,21 +91,8 @@ in
]; ];
my.yubikey = { my.yubikey = {
enable = false; enable = true;
keys = [ pam.enable = false;
{
handle = "<KeyHandle1>";
userKey = "<UserKey1>";
coseType = "<CoseType1>";
options = "<Options1>";
}
{
handle = "<KeyHandle2>";
userKey = "<UserKey2>";
coseType = "<CoseType2>";
options = "<Options2>";
}
];
}; };
services.locate = { services.locate = {

View File

@@ -99,21 +99,7 @@ in
my.yubikey = { my.yubikey = {
enable = true; enable = true;
# inherit (config.host) username; pam.enable = false;
# keys = [
# {
# handle = "<KeyHandle1>";
# userKey = "<UserKey1>";
# coseType = "<CoseType1>";
# options = "<Options1>";
# }
# {
# handle = "<KeyHandle2>";
# userKey = "<UserKey2>";
# coseType = "<CoseType2>";
# options = "<Options2>";
# }
# ];
}; };
services = { services = {

View File

@@ -15,13 +15,13 @@ let
in in
{ {
options.my.yubikey = { options.my.yubikey = {
enable = mkEnableOption "yubiKey U2F authentication"; enable = mkEnableOption "YubiKey";
pam = {
enable = mkEnableOption "YubiKey PAM U2F";
origin = mkOption { origin = mkOption {
type = types.str; type = types.str;
default = "pam://yubi"; default = "pam://yubi";
}; };
keys = mkOption { keys = mkOption {
type = types.listOf ( type = types.listOf (
types.submodule { types.submodule {
@@ -48,16 +48,24 @@ in
default = [ ]; default = [ ];
}; };
}; };
};
config = mkIf cfg.enable { config = mkMerge [
(mkIf cfg.enable {
services.udev.packages = with pkgs; [
yubikey-manager
yubikey-personalization
];
})
(mkIf (cfg.enable && cfg.pam.enable) {
security.pam = { security.pam = {
u2f = { u2f = {
enable = true; enable = true;
settings = { settings = {
interactive = true; interactive = true;
cue = true; cue = true;
inherit (cfg) origin; origin = cfg.pam.origin;
authfile = pkgs.writeText "u2f-mappings" (authfileContent username cfg.keys); authfile = pkgs.writeText "u2f-mappings" (authfileContent username cfg.pam.keys);
}; };
}; };
services = { services = {
@@ -65,7 +73,6 @@ in
sudo.u2fAuth = true; sudo.u2fAuth = true;
}; };
}; };
})
services.udev.packages = with pkgs; [ yubikey-personalization ]; ];
};
} }