Modules: Deprecate agenix module (replace with sops-nix)

This commit is contained in:
2025-07-09 15:29:57 +02:00
parent b05b207462
commit 8fcddf1f37
17 changed files with 61 additions and 186 deletions
Generated
+4 -86
View File
@@ -1,50 +1,5 @@
{ {
"nodes": { "nodes": {
"agenix": {
"inputs": {
"darwin": "darwin",
"home-manager": "home-manager",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems"
},
"locked": {
"lastModified": 1750173260,
"narHash": "sha256-9P1FziAwl5+3edkfFcr5HeGtQUtrSdk/MksX39GieoA=",
"owner": "ryantm",
"repo": "agenix",
"rev": "531beac616433bac6f9e2a19feb8e99a22a66baf",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1744478979,
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"devshell": { "devshell": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
@@ -173,7 +128,7 @@
}, },
"flake-utils": { "flake-utils": {
"inputs": { "inputs": {
"systems": "systems_2" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1726560853, "lastModified": 1726560853,
@@ -191,7 +146,7 @@
}, },
"flake-utils_2": { "flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@@ -260,27 +215,6 @@
} }
}, },
"home-manager": { "home-manager": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1745494811,
"narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
@@ -480,7 +414,7 @@
"nixpkgs" "nixpkgs"
], ],
"nuschtosSearch": "nuschtosSearch", "nuschtosSearch": "nuschtosSearch",
"systems": "systems_4" "systems": "systems_3"
}, },
"locked": { "locked": {
"lastModified": 1751492444, "lastModified": 1751492444,
@@ -592,10 +526,9 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix",
"devshell": "devshell", "devshell": "devshell",
"hardware": "hardware", "hardware": "hardware",
"home-manager": "home-manager_2", "home-manager": "home-manager",
"nix-alien": "nix-alien", "nix-alien": "nix-alien",
"nix-flatpak": "nix-flatpak", "nix-flatpak": "nix-flatpak",
"nix-topology": "nix-topology", "nix-topology": "nix-topology",
@@ -670,21 +603,6 @@
"repo": "default", "repo": "default",
"type": "github" "type": "github"
} }
},
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",
+3 -3
View File
@@ -17,8 +17,8 @@
home-manager.inputs.nixpkgs.follows = "nixpkgs"; home-manager.inputs.nixpkgs.follows = "nixpkgs";
# Manage secrets with agenix # Manage secrets with agenix
agenix.url = "github:ryantm/agenix"; # agenix.url = "github:ryantm/agenix";
agenix.inputs.nixpkgs.follows = "nixpkgs"; # agenix.inputs.nixpkgs.follows = "nixpkgs";
# Manage secrets with sops # Manage secrets with sops
sops-nix.url = "github:Mic92/sops-nix"; sops-nix.url = "github:Mic92/sops-nix";
@@ -149,7 +149,7 @@
# Extra NixOS system modules for all hosts. # Extra NixOS system modules for all hosts.
# HM modules are passed through home/modules/default.nix instead. # HM modules are passed through home/modules/default.nix instead.
commonModules = [ commonModules = [
inputs.agenix.nixosModules.default # inputs.agenix.nixosModules.default
inputs.sops-nix.nixosModules.sops inputs.sops-nix.nixosModules.sops
# TODO: inputs.nix-topology.nixosModules.default # TODO: inputs.nix-topology.nixosModules.default
-21
View File
@@ -300,25 +300,6 @@
file = lib.mkMerge [ file = lib.mkMerge [
{ {
".ssh/id_ed25519.pub".text = "${publicKeys.${username}.ssh}"; ".ssh/id_ed25519.pub".text = "${publicKeys.${username}.ssh}";
# The user will be able to decrypt .age files using agenix.
# On each user/machine, this should generate a corresponding secrets.nix
"${config.paths.nixflake}/system/modules/agenix/secrets.nix".text = let
mkSecret = key: name: "\"${name}.age\".publicKeys = [\"${key}\"];";
in ''
# NOTE: This file will contain keys depending on the host/by which user it was built on.
{
${lib.optionalString
# If this user defined any secrets...
(builtins.hasAttr "${username}" nixosConfig.modules.agenix.secrets)
# ...we will add them to the current secrets.nix,
# s.t. agenix can be used to encrypt/access them.
(builtins.concatStringsSep "\n"
(builtins.map
(mkSecret publicKeys.${username}.ssh)
nixosConfig.modules.agenix.secrets.${username}))}
}
'';
} }
(lib.mkIf nixosConfig.modules.desktopportal.termfilechooser.enable { (lib.mkIf nixosConfig.modules.desktopportal.termfilechooser.enable {
".config/xdg-desktop-portal-termfilechooser/config".text = '' ".config/xdg-desktop-portal-termfilechooser/config".text = ''
@@ -551,9 +532,7 @@
keychain = { keychain = {
enable = true; enable = true;
enableFishIntegration = config.modules.fish.enable; enableFishIntegration = config.modules.fish.enable;
enableNushellIntegration = false;
enableXsessionIntegration = !headless; enableXsessionIntegration = !headless;
# agents = ["ssh"]; # Deprecated
keys = ["id_ed25519"]; keys = ["id_ed25519"];
}; };
+1 -1
View File
@@ -26,7 +26,7 @@
# HM modules imported from the flake inputs # HM modules imported from the flake inputs
inputs.nix-flatpak.homeManagerModules.nix-flatpak inputs.nix-flatpak.homeManagerModules.nix-flatpak
inputs.nixvim.homeManagerModules.nixvim inputs.nixvim.homeManagerModules.nixvim
inputs.agenix.homeManagerModules.default # inputs.agenix.homeManagerModules.default
# inputs.ags.homeManagerModules.default # inputs.ags.homeManagerModules.default
# inputs.spicetify-nix.homeManagerModules.default # inputs.spicetify-nix.homeManagerModules.default
]; ];
+1 -5
View File
@@ -25,10 +25,6 @@ with mylib.networking; {
]; ];
modules = { modules = {
agenix.secrets.${username} = [
"dockerhub-password"
];
bootloader = { bootloader = {
enable = true; enable = true;
@@ -254,7 +250,7 @@ with mylib.networking; {
usbmuxd usbmuxd
# Secrets handling # Secrets handling
inputs.agenix.packages.${system}.default # inputs.agenix.packages.${system}.default
]; ];
# It is preferred to use the module (if it exists) over environment.systemPackages, # It is preferred to use the module (if it exists) over environment.systemPackages,
@@ -0,0 +1,52 @@
{
config,
lib,
mylib,
pkgs,
username,
publicKeys,
...
}: let
inherit (config.modules) agenix;
in {
options.modules.agenix = import ./options.nix {inherit lib mylib;};
config = {
# NOTE: Add below snippet to home/christoph/default.nix to generate the secrets.nix file
# The user will be able to decrypt .age files using agenix.
# On each user/machine, this should generate a corresponding secrets.nix
# "${config.paths.nixflake}/system/modules/agenix/secrets.nix".text = let
# mkSecret = key: name: "\"${name}.age\".publicKeys = [\"${key}\"];";
# in ''
# # This file will contain keys depending on the host/by which user it was built on.
# {
# ${lib.optionalString
# # If this user defined any secrets...
# (builtins.hasAttr "${username}" nixosConfig.modules.agenix.secrets)
# # ...we will add them to the current secrets.nix,
# # s.t. agenix can be used to encrypt/access them.
# (builtins.concatStringsSep "\n"
# (builtins.map
# (mkSecret publicKeys.${username}.ssh)
# nixosConfig.modules.agenix.secrets.${username}))}
# }
# '';
# Register generated secrets to the age system module
age.secrets = let
mkSecretIfExists = name:
# If this user has already encrypted the secret...
if builtins.pathExists ./${name}.age
# ...we will register it with age...
then {${name}.file = ./${name}.age;}
# ...otherwise we link to a bogus file.
else {${name}.file = ./void.age;};
in
lib.mkIf
# If this user defined any secrets...
(builtins.hasAttr "${username}" agenix.secrets)
# ...we will register all secrets files that have already been generated.
(lib.mkMerge (builtins.map mkSecretIfExists agenix.secrets.${username}));
};
}
-33
View File
@@ -1,33 +0,0 @@
{
config,
lib,
mylib,
pkgs,
username,
publicKeys,
...
}: let
inherit (config.modules) agenix;
in {
options.modules.agenix = import ./options.nix {inherit lib mylib;};
config = {
# NOTE: See the generated secrets.nix file in home/christoph/default.nix
# Register generated secrets to the age system module
age.secrets = let
mkSecretIfExists = name:
# If this user has already encrypted the secret...
if builtins.pathExists ./${name}.age
# ...we will register it with age...
then {${name}.file = ./${name}.age;}
# ...otherwise we link to a bogus file.
else {${name}.file = ./void.age;};
in
lib.mkIf
# If this user defined any secrets...
(builtins.hasAttr "${username}" agenix.secrets)
# ...we will register all secrets files that have already been generated.
(lib.mkMerge (builtins.map mkSecretIfExists agenix.secrets.${username}));
};
}
@@ -1,5 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 PW+5DQ z6Fm40D2nCJvvFsQdj9V4zcvVBpjFAvLZh17cEtLEx8
hIyc+AUuEiIv6TobnNawdyEswAAQ4kQeh5n0yaVT/mY
--- Yhxh9hnsPfHYcmmrpQm5Up0VzRh2ndoF3R3W+7ojW58
¶àñ?´‚ú Ì™WcÏÿú…­æR•”<‰@þyŽ˜Ðþ1z%ê4EWuÕ7 Œ<¢”¸'ßàCg9!è`cv
@@ -1,5 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 PW+5DQ 2vardSYoPFvDEw4TiKSXntAJmChcVu9X+nD1+rCac1c
mbx9xEy0vkQvl6HqLcFTk3qrsUpDAUuKD6GnJGa9elc
--- vKkGWdp/anMV2VzwJEEHeWNUjv/SkzjYOIljRK6ExbI
¹Ò¤Šv ®òLHôæl†|µ>ßïÇMcsoÏ{jÄSöÊÅ_à‰'—ÐŒÊWlÃ…£_iûM°Y×âÏÐýVVûŒsÛ,D%-&+½ì¡ißÖTçP"g
-6
View File
@@ -1,6 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 PW+5DQ Wm5RTSiZ/ndp6l6q2T43wrHiMnyP/FqDzUsl29TYoQc
ti4Pc/+g+6618wOQAb+28bNt87A8f3gRFzCaMlNKpP4
--- aRzLWmbnb7MqPVDSTYLqCIDHqaj0fu3JVp4ES93xZ9I
B6Ï
I mjì–óñ½L‰¹N£í÷—-eØ![Ç'y_aIë·
@@ -1,6 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 PW+5DQ ZeBpvImtTWyKOxlCh573CNitT2z1OX2PgHAzLB/RTzg
jx7n2REzbCJ9zr2TQHSvEz7lUZap5J2mjHNx710L49w
--- kdRUEg3IOfjUfAgPEMj7MdiGftxVptPeC/Mbh5qWf8c
Ν
Ò#N'ß(:aì©aá]µÿgüPo©ý¡í²[¯=nÜ
@@ -1,5 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 PW+5DQ V2ejrKdFVeO7nNqkRqa3nSnz8MKlHyZcQ+T1NRfntSw
t79YI5ZFtW0k6IZRB5VMjy7st+WlhONTFyVF/tvPaKk
--- Cz4XV8J+oM6q6bVq6uXXUUvW/BqBL0agNzmobzcu2Kc
á{*$˜cøÐ̨&ZÅuthF¿ïþï¢[ÍTý%?ˆÙÞ?|*½`¾^OÉ
-1
View File
@@ -1,6 +1,5 @@
{...}: { {...}: {
imports = [ imports = [
./agenix
./bootloader ./bootloader
./desktopportal ./desktopportal
./docker ./docker
-2
View File
@@ -12,8 +12,6 @@
]; ];
modules = { modules = {
# agenix.secrets.${username} = [];
network = { network = {
useNetworkManager = true; useNetworkManager = true;
-7
View File
@@ -36,13 +36,6 @@
]; ];
modules = { modules = {
agenix.secrets.${username} = [
"heidi-discord-token"
"kopia-password"
"kopia-server-username"
"kopia-server-password"
];
network = { network = {
useNetworkManager = false; useNetworkManager = false;