agenix
This commit is contained in:
parent
a018670eae
commit
4183ccb893
14 changed files with 169 additions and 38 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
{ var, ... }:
|
{ var, inputs, ... }:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
inputs.agenix.nixosModules.default
|
||||||
../mod
|
../mod
|
||||||
../desktop
|
../desktop
|
||||||
./boot.nix
|
./boot.nix
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,17 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
config,
|
||||||
lib,
|
lib,
|
||||||
options,
|
options,
|
||||||
|
pkgs,
|
||||||
|
secrets,
|
||||||
var,
|
var,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
age.secrets.hd-password = {
|
||||||
|
file = secrets."hd-password.age";
|
||||||
|
};
|
||||||
|
|
||||||
users = {
|
users = {
|
||||||
mutableUsers = false;
|
mutableUsers = false;
|
||||||
users."hd" = {
|
users."hd" = {
|
||||||
|
|
@ -16,12 +22,12 @@
|
||||||
extraGroups = [ "wheel" ];
|
extraGroups = [ "wheel" ];
|
||||||
shell = pkgs.fish;
|
shell = pkgs.fish;
|
||||||
packages = [ ];
|
packages = [ ];
|
||||||
openssh.authorizedKeys.keys = var.ssh-keys.unprivileged;
|
openssh.authorizedKeys.keys = var.ssh-keys.hd;
|
||||||
hashedPassword = "$y$jDT$dhvO.xqs8mopz.sFFul.q/$ud5642o7CnVetU6QEu0ctiVMFh7ngZznDf0wp4cXos8";
|
hashedPasswordFile = config.age.secrets.hd-password.path;
|
||||||
};
|
};
|
||||||
users.root = {
|
users.root = {
|
||||||
hashedPassword = "!";
|
hashedPassword = "!";
|
||||||
openssh.authorizedKeys.keys = var.ssh-keys.priviliged;
|
openssh.authorizedKeys.keys = var.ssh-keys.root;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
64
flake.lock
generated
64
flake.lock
generated
|
|
@ -1,5 +1,28 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"agenix": {
|
||||||
|
"inputs": {
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
},
|
||||||
"colmena": {
|
"colmena": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
|
|
@ -55,7 +78,7 @@
|
||||||
},
|
},
|
||||||
"flake-utils_2": {
|
"flake-utils_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"systems": "systems"
|
"systems": "systems_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731533236,
|
"lastModified": 1731533236,
|
||||||
|
|
@ -72,6 +95,27 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"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"
|
||||||
|
|
@ -182,9 +226,10 @@
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"agenix": "agenix",
|
||||||
"colmena": "colmena",
|
"colmena": "colmena",
|
||||||
"flake-utils": "flake-utils_2",
|
"flake-utils": "flake-utils_2",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager_2",
|
||||||
"nixos-config-hidden": "nixos-config-hidden",
|
"nixos-config-hidden": "nixos-config-hidden",
|
||||||
"nixos-hardware": "nixos-hardware",
|
"nixos-hardware": "nixos-hardware",
|
||||||
"nixpkgs": "nixpkgs_2"
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
|
@ -220,6 +265,21 @@
|
||||||
"repo": "default",
|
"repo": "default",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"systems_2": {
|
||||||
|
"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",
|
||||||
|
|
|
||||||
14
flake.nix
14
flake.nix
|
|
@ -12,11 +12,17 @@
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
agenix = {
|
||||||
|
url = "github:ryantm/agenix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
inputs.darwin.follows = "";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
{
|
{
|
||||||
self,
|
self,
|
||||||
|
agenix,
|
||||||
colmena,
|
colmena,
|
||||||
flake-utils,
|
flake-utils,
|
||||||
home-manager,
|
home-manager,
|
||||||
|
|
@ -31,6 +37,7 @@
|
||||||
specialArgs = rec {
|
specialArgs = rec {
|
||||||
inherit inputs lib';
|
inherit inputs lib';
|
||||||
var = (lib'.walk-dir ./var)._map (f: import f { inherit lib var; });
|
var = (lib'.walk-dir ./var)._map (f: import f { inherit lib var; });
|
||||||
|
secrets = lib'.walk-dir ./secrets;
|
||||||
};
|
};
|
||||||
overlays = _: {
|
overlays = _: {
|
||||||
nixpkgs.overlays = [ colmena.overlay ];
|
nixpkgs.overlays = [ colmena.overlay ];
|
||||||
|
|
@ -91,8 +98,11 @@
|
||||||
pkgs = import nixpkgs { inherit system; };
|
pkgs = import nixpkgs { inherit system; };
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
devShells.withColmena = pkgs.mkShell {
|
devShells.default = pkgs.mkShell {
|
||||||
buildInputs = [ colmena.packages.${system}.colmena ];
|
buildInputs = [
|
||||||
|
colmena.packages.${system}.colmena
|
||||||
|
agenix.packages.${system}.default
|
||||||
|
];
|
||||||
};
|
};
|
||||||
formatter = pkgs.nixfmt-tree;
|
formatter = pkgs.nixfmt-tree;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,10 @@
|
||||||
{
|
{
|
||||||
networking.hostName = "c2";
|
networking.hostName = "c2";
|
||||||
|
|
||||||
|
age.identityPaths = [
|
||||||
|
"/root/.ssh/id_ed25519"
|
||||||
|
];
|
||||||
|
|
||||||
imports = with inputs.nixos-hardware.nixosModules; [
|
imports = with inputs.nixos-hardware.nixosModules; [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
common-cpu-intel
|
common-cpu-intel
|
||||||
|
|
|
||||||
41
host/roam/backup.nix
Normal file
41
host/roam/backup.nix
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
secrets,
|
||||||
|
var,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
age.secrets.roam-rclone-conf = {
|
||||||
|
file = secrets.roam."rclone-conf.age";
|
||||||
|
mode = "440";
|
||||||
|
owner = "root";
|
||||||
|
group = "root";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd = {
|
||||||
|
timers."backup-rclone" = {
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "daily";
|
||||||
|
Persistent = true;
|
||||||
|
Unit = "backup-rclone.service";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services."backup-rclone" =
|
||||||
|
let
|
||||||
|
conf = config.age.secrets.roam-rclone-conf.path;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
script = ''
|
||||||
|
${pkgs.rclone}/bin/rclone --config ${conf} copy /home/hd/Documents odc:Documents
|
||||||
|
${pkgs.rclone}/bin/rclone --config ${conf} copy /git odc:git
|
||||||
|
'';
|
||||||
|
path = [ pkgs.rclone ];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
User = "root";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,12 @@
|
||||||
{
|
{
|
||||||
networking.hostName = "roam";
|
networking.hostName = "roam";
|
||||||
|
|
||||||
|
age.identityPaths = [
|
||||||
|
"/root/.ssh/id_ed25519"
|
||||||
|
];
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
./backup.nix
|
||||||
./git.nix
|
./git.nix
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./networking.nix
|
./networking.nix
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,6 @@
|
||||||
createHome = true;
|
createHome = true;
|
||||||
group = "git";
|
group = "git";
|
||||||
shell = "${pkgs.git}/bin/git-shell";
|
shell = "${pkgs.git}/bin/git-shell";
|
||||||
openssh.authorizedKeys.keys = var.ssh-keys.unprivileged;
|
openssh.authorizedKeys.keys = var.ssh-keys.hd;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
{
|
{
|
||||||
var,
|
var,
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
|
@ -36,26 +34,4 @@
|
||||||
443
|
443
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd = {
|
|
||||||
timers."backup-rclone" = {
|
|
||||||
wantedBy = [ "timers.target" ];
|
|
||||||
timerConfig = {
|
|
||||||
OnCalendar = "daily";
|
|
||||||
Persistent = true;
|
|
||||||
Unit = "backup-rclone.service";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
services."backup-rclone" = {
|
|
||||||
script = ''
|
|
||||||
${pkgs.rclone}/bin/rclone copy /home/hd/Documents odc:Documents
|
|
||||||
${pkgs.rclone}/bin/rclone copy /git odc:git
|
|
||||||
'';
|
|
||||||
path = [ pkgs.rclone ];
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
User = "root";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,10 @@
|
||||||
{
|
{
|
||||||
networking.hostName = "solo";
|
networking.hostName = "solo";
|
||||||
|
|
||||||
|
age.identityPaths = [
|
||||||
|
"/root/.ssh/id_ed25519"
|
||||||
|
];
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./keyboard.nix
|
./keyboard.nix
|
||||||
|
|
|
||||||
12
secrets.nix
Normal file
12
secrets.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
let
|
||||||
|
keys =
|
||||||
|
let
|
||||||
|
k = (import ./var/ssh-keys.nix { });
|
||||||
|
in
|
||||||
|
k.root; # ++ k.hd;
|
||||||
|
secrets = [
|
||||||
|
"roam/rclone-conf"
|
||||||
|
"hd-password"
|
||||||
|
];
|
||||||
|
in
|
||||||
|
builtins.foldl' (acc: x: acc // { "secrets/${x}.age".publicKeys = keys; }) { } secrets
|
||||||
10
secrets/hd-password.age
Normal file
10
secrets/hd-password.age
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 ydxpSQ M0sDsl0um+whNdnXrl5RMp8BAXdVe1n8K41L6HXizG4
|
||||||
|
hIV5u4+ZPujJsNwet9UC2wnAFgpFe+b4BGtsNhah/34
|
||||||
|
-> ssh-ed25519 gbs8eg lNj3bYYZXf28MzvjOJ052zOg7xOROf3MjUWR35ZJfWw
|
||||||
|
Pxqa+IqRVAhoJdV/Muzt74rfoYBxE4YLh7y8KWwHaG0
|
||||||
|
-> ssh-ed25519 FTMbvw 7deJR8NLmOWT/RKUa+JbdZ7KYcLNqYxuYS9y/eOYoE8
|
||||||
|
haM8XoJVYTUVEEEuMbCdQxuOeZZT8ILtaGWG/uRDo+0
|
||||||
|
--- MKr7VcEMTYpu+gNelWf7vIZvU/TpyH/N61shLABcitA
|
||||||
|
Ϻ›aÐ̓UJm!yëa÷Ù<C3B7>ÎŒnxŒ<78>E8ù·KwŸŒ* Z%MV:‚ò¬™¥’ A•ÖšK<C5A1>;ñÔï&™ì
|
||||||
|
¾~GÞÂ;ÑéjyõJ[ø<>6à´zKñ›×/4Ò²·?<3F>¦ñ
|
||||||
BIN
secrets/roam/rclone-conf.age
Normal file
BIN
secrets/roam/rclone-conf.age
Normal file
Binary file not shown.
|
|
@ -1,14 +1,16 @@
|
||||||
_: rec {
|
_: rec {
|
||||||
# this is only used for forcing password entry on colmena apply
|
# this is only used for forcing password entry on colmena apply
|
||||||
priviliged-by-host = {
|
root-by-host = {
|
||||||
"solo" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFsl8pLaGeCL3kacGWf8pzoLQr501ga/2OzvI2wWbTZJ";
|
"solo" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFsl8pLaGeCL3kacGWf8pzoLQr501ga/2OzvI2wWbTZJ";
|
||||||
"c2" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJAZaswaiA+oQ9NviADYFf7BJQHNlmdxQuocIdoJmv3o";
|
"c2" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJAZaswaiA+oQ9NviADYFf7BJQHNlmdxQuocIdoJmv3o";
|
||||||
|
"roam" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID++uLcQOx/to3sEo5Nk97CenGf0Y6/dMsBbLouVTgIQ";
|
||||||
};
|
};
|
||||||
priviliged = builtins.attrValues priviliged-by-host;
|
root = builtins.attrValues root-by-host;
|
||||||
|
|
||||||
unprivileged-by-host = {
|
hd-by-host = {
|
||||||
"solo" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEG+dd4m98aKEWfFa/7VZUlJNX0axvIlHVihT8w7RLyY";
|
"solo" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEG+dd4m98aKEWfFa/7VZUlJNX0axvIlHVihT8w7RLyY";
|
||||||
"c2" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIsoj2+esEebRwDV2PuNRt9Vz28oolOy+Hc2THwrWTAB";
|
"c2" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIsoj2+esEebRwDV2PuNRt9Vz28oolOy+Hc2THwrWTAB";
|
||||||
|
"roam" = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEDlh8hY01wwmNtfa1eK3mVBIcytdh4n/kV05gP9z1Lc";
|
||||||
};
|
};
|
||||||
unprivileged = builtins.attrValues unprivileged-by-host;
|
hd = builtins.attrValues hd-by-host;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue