Compare commits

..

2 Commits

Author SHA1 Message Date
Danilo Reyes
de5ad541b8 Refactor SSH key management to use centralized key retrieval function for nixremote users across configurations. 2025-10-12 20:28:39 -06:00
Danilo Reyes
0f7e28abd0 more migration stuff 2025-10-12 20:24:42 -06:00
10 changed files with 138 additions and 114 deletions

View File

@ -68,14 +68,14 @@ in
"plugdev" "plugdev"
"bluetooth" "bluetooth"
]; ];
openssh.authorizedKeys.keyFiles = [ openssh.authorizedKeys.keyFiles = inputs.self.lib.getSshKeys [
../secrets/ssh/ed25519_deacero.pub "deacero"
../secrets/ssh/ed25519_workstation.pub "workstation"
../secrets/ssh/ed25519_server.pub "server"
../secrets/ssh/ed25519_miniserver.pub "miniserver"
../secrets/ssh/ed25519_galaxy.pub "galaxy"
../secrets/ssh/ed25519_phone.pub "phone"
../secrets/ssh/ed25519_vps.pub "vps"
]; ];
}; };
} }

View File

@ -5,13 +5,13 @@
../../config/base.nix ../../config/base.nix
../../config/stylix.nix ../../config/stylix.nix
]; ];
my = import ./toggles.nix // { my = import ./toggles.nix { inherit inputs; } // {
nix.cores = 3; nix.cores = 3;
nix.maxJobs = 8; nix.maxJobs = 8;
users.nixremote.enable = true; users.nixremote.enable = true;
users.nixremote.authorizedKeys = [ users.nixremote.authorizedKeys = inputs.self.lib.getSshKeys [
../../secrets/ssh/ed25519_nixworkstation.pub "nixworkstation"
../../secrets/ssh/ed25519_nixserver.pub "nixserver"
]; ];
}; };
nix.buildMachines = nix.buildMachines =

View File

@ -1,16 +1,6 @@
{ inputs }:
let let
mkEnabled = name: { inherit (inputs.self.lib) mkEnabled mkEnabledWithProxy enableList;
inherit name;
value.enable = true;
};
mkEnabledWithProxy = name: {
inherit name;
value = {
enable = true;
enableProxy = true;
};
};
enableList = func: list: list |> map func |> builtins.listToAttrs;
in in
{ {
emacs.enable = true; emacs.enable = true;

View File

@ -10,12 +10,12 @@
../../config/base.nix ../../config/base.nix
../../config/stylix.nix ../../config/stylix.nix
]; ];
my = import ./toggles.nix { inherit config; } // { my = import ./toggles.nix { inherit config inputs; } // {
nix.cores = 6; nix.cores = 6;
users.nixremote.enable = true; users.nixremote.enable = true;
users.nixremote.authorizedKeys = [ users.nixremote.authorizedKeys = inputs.self.lib.getSshKeys [
../../secrets/ssh/ed25519_nixworkstation.pub "nixworkstation"
../../secrets/ssh/ed25519_nixminiserver.pub "nixminiserver"
]; ];
network.firewall.enabledServicePorts = true; network.firewall.enabledServicePorts = true;
network.firewall.additionalPorts = [ network.firewall.additionalPorts = [

View File

@ -1,17 +1,7 @@
{ config }: { config, inputs }:
let let
mkEnabled = name: { inherit (inputs.self.lib) mkEnabled enableList;
inherit name; mkEnabledIp = inputs.self.lib.mkEnabledIp config.my.ips.wg-server;
value.enable = true;
};
mkEnabledIp = name: {
inherit name;
value = {
enable = true;
ip = config.my.ips.wg-server;
};
};
enableList = func: list: list |> map func |> builtins.listToAttrs;
in in
{ {
mainServer = "server"; mainServer = "server";

View File

@ -22,13 +22,13 @@ in
../../config/stylix.nix ../../config/stylix.nix
../../environments/gnome.nix ../../environments/gnome.nix
]; ];
my = import ./toggles.nix // { my = import ./toggles.nix { inherit inputs; } // {
nix.cores = 8; nix.cores = 8;
nix.maxJobs = 8; nix.maxJobs = 8;
users.nixremote.enable = true; users.nixremote.enable = true;
users.nixremote.authorizedKeys = [ users.nixremote.authorizedKeys = inputs.self.lib.getSshKeys [
../../secrets/ssh/ed25519_nixserver.pub "nixserver"
../../secrets/ssh/ed25519_nixminiserver.pub "nixminiserver"
]; ];
}; };
home-manager.users.jawz = { home-manager.users.jawz = {

View File

@ -1,9 +1,6 @@
{ inputs }:
let let
mkEnabled = name: { inherit (inputs.self.lib) mkEnabled enableList;
inherit name;
value.enable = true;
};
enableList = func: list: list |> map func |> builtins.listToAttrs;
in in
{ {
stylix.enable = true; stylix.enable = true;

View File

@ -105,65 +105,71 @@ in
enableProxy = lib.mkEnableOption "nginx reverse proxy for services"; enableProxy = lib.mkEnableOption "nginx reverse proxy for services";
}; };
config = { config = {
assertions = [ assertions =
{ # PostgreSQL dependency assertions
assertion = config.my.servers.nextcloud.enable -> config.my.servers.postgres.enable; inputs.self.lib.mkPostgresDependencies config [
message = "Nextcloud requires PostgreSQL to be enabled"; {
} service = "nextcloud";
{ name = "Nextcloud";
assertion = config.my.servers.vaultwarden.enable -> config.my.servers.postgres.enable; }
message = "Vaultwarden requires PostgreSQL to be enabled"; {
} service = "vaultwarden";
{ name = "Vaultwarden";
assertion = config.my.servers.firefly-iii.enable -> config.my.servers.postgres.enable; }
message = "Firefly III requires PostgreSQL to be enabled"; {
} service = "firefly-iii";
{ name = "Firefly III";
assertion = config.my.servers.mealie.enable -> config.my.servers.postgres.enable; }
message = "Mealie requires PostgreSQL to be enabled"; {
} service = "mealie";
{ name = "Mealie";
assertion = config.my.servers.shiori.enable -> config.my.servers.postgres.enable; }
message = "Shiori requires PostgreSQL to be enabled"; {
} service = "shiori";
{ name = "Shiori";
assertion = config.my.servers.ryot.enable -> config.my.servers.postgres.enable; }
message = "Ryot requires PostgreSQL to be enabled"; {
} service = "ryot";
{ name = "Ryot";
assertion = config.my.servers.synapse.enable -> config.my.servers.postgres.enable; }
message = "Matrix Synapse requires PostgreSQL to be enabled"; {
} service = "synapse";
{ name = "Matrix Synapse";
assertion = config.my.servers.gitea.enable -> config.my.servers.postgres.enable; }
message = "Gitea requires PostgreSQL to be enabled"; {
} service = "gitea";
{ name = "Gitea";
assertion = }
config.my.enableProxy ]
-> (builtins.any (s: s.enableProxy or false) (builtins.attrValues config.my.servers)); ++
message = "enableProxy is true but no services have enableProxy enabled"; # Other assertions
} [
{ {
assertion = assertion =
config.my.enableContainers config.my.enableProxy
|| !(builtins.any (opt: opt) [ -> (builtins.any (s: s.enableProxy or false) (builtins.attrValues config.my.servers));
config.my.servers.ryot.enable message = "enableProxy is true but no services have enableProxy enabled";
config.my.servers.lidarr.enable }
config.my.servers.prowlarr.enable {
config.my.servers.maloja.enable assertion =
config.my.servers.multi-scrobbler.enable config.my.enableContainers
config.my.servers.flame.enable || !(builtins.any (opt: opt) [
config.my.servers.flameSecret.enable config.my.servers.ryot.enable
config.my.servers.metube.enable config.my.servers.lidarr.enable
config.my.servers.go-vod.enable config.my.servers.prowlarr.enable
config.my.servers.tranga.enable config.my.servers.maloja.enable
config.my.servers.drpp.enable config.my.servers.multi-scrobbler.enable
config.my.servers.plex-discord-bot.enable config.my.servers.flame.enable
]); config.my.servers.flameSecret.enable
message = "Container services are enabled but enableContainers is false"; config.my.servers.metube.enable
} config.my.servers.go-vod.enable
]; config.my.servers.tranga.enable
config.my.servers.drpp.enable
config.my.servers.plex-discord-bot.enable
]);
message = "Container services are enabled but enableContainers is false";
}
];
virtualisation = { virtualisation = {
containers.enable = true; containers.enable = true;
oci-containers.backend = "podman"; oci-containers.backend = "podman";

View File

@ -1,13 +1,13 @@
{ lib, config, ... }: { lib, config, inputs, ... }:
{ {
options.my.users.nixremote = { options.my.users.nixremote = {
enable = lib.mkEnableOption "nixremote user for distributed builds"; enable = lib.mkEnableOption "nixremote user for distributed builds";
authorizedKeys = lib.mkOption { authorizedKeys = lib.mkOption {
type = lib.types.listOf lib.types.path; type = lib.types.listOf lib.types.path;
default = [ default = inputs.self.lib.getSshKeys [
../../secrets/ssh/ed25519_nixworkstation.pub "nixworkstation"
../../secrets/ssh/ed25519_nixserver.pub "nixserver"
../../secrets/ssh/ed25519_nixminiserver.pub "nixminiserver"
]; ];
description = "List of SSH public key files to authorize for nixremote user"; description = "List of SSH public key files to authorize for nixremote user";
}; };

View File

@ -171,6 +171,47 @@ in
|> lib.attrValues |> lib.attrValues
|> map (srv: srv.port) |> map (srv: srv.port)
); );
mkEnabled = name: {
inherit name;
value.enable = true;
};
mkEnabledWithProxy = name: {
inherit name;
value = {
enable = true;
enableProxy = true;
};
};
mkEnabledIp = ip: name: {
inherit name;
value = {
enable = true;
inherit ip;
};
};
enableList = func: list: list |> map func |> builtins.listToAttrs;
mkPostgresDependency = config: serviceName: displayName: {
assertion = config.my.servers.${serviceName}.enable -> config.my.servers.postgres.enable;
message = "${displayName} requires PostgreSQL to be enabled";
};
mkPostgresDependencies =
config: serviceMap:
serviceMap |> map (entry: inputs.self.lib.mkPostgresDependency config entry.service entry.name);
sshKeys = {
deacero = ../../secrets/ssh/ed25519_deacero.pub;
workstation = ../../secrets/ssh/ed25519_workstation.pub;
server = ../../secrets/ssh/ed25519_server.pub;
miniserver = ../../secrets/ssh/ed25519_miniserver.pub;
galaxy = ../../secrets/ssh/ed25519_galaxy.pub;
phone = ../../secrets/ssh/ed25519_phone.pub;
vps = ../../secrets/ssh/ed25519_vps.pub;
emacs = ../../secrets/ssh/ed25519_emacs.pub;
# Build user keys (nixremote)
nixworkstation = ../../secrets/ssh/ed25519_nixworkstation.pub;
nixserver = ../../secrets/ssh/ed25519_nixserver.pub;
nixminiserver = ../../secrets/ssh/ed25519_nixminiserver.pub;
};
getSshKeys = keyNames: keyNames |> map (name: inputs.self.lib.sshKeys.${name});
}; };
}; };
} }