start integration of a info.nix

hosts-v2
Lzebulon 2026-07-21 15:40:54 +02:00
parent 2518915939
commit e10e22df4b
No known key found for this signature in database
GPG Key ID: D6CDAB8050CBBE7D
29 changed files with 375 additions and 237 deletions

167
flake.nix
View File

@ -38,75 +38,130 @@
./modules ./modules
agenix.nixosModules.default agenix.nixosModules.default
]; ];
get_hosts_names = path:
attrNames (
attrsets.filterAttrs (name: type: type == "directory")
(readDir path)
) ;
hostVM = get_hosts_names ./hosts/vm;
hostPhysique = get_hosts_names ./hosts/physiques;
get_info =
path: lists:
filter (x: x != null)
(map (name:
let filePath = path + "/${name}/info.nix";
in
if builtins.pathExists filePath then
# let eval = evalModules {
# modules = [
# # ./modules/crans
# {
# crans = import filePath;
# }
# agenix.nixosModules.default
# ];
# };
# in
# eval.config
{
crans = import filePath;
}
else
warn "${toString filePath} not found" null
) lists
);
hosts_vm_info = get_info ./hosts/vm hostVM;
hosts_physique_info = get_info ./hosts/physiques hostPhysique;
listInfoToAttrs =
path: infos:
listToAttrs (
map (info:
{
name = info.crans.name;
value =
nixosSystem {
specialArgs = inputs;
modules = [(path + "/${info.crans.name}")] ++ [info] ++ baseModules
;
};
}
) infos)
;
attrs_vm_info = listInfoToAttrs ./hosts/vm hosts_vm_info;
attrs_physique_info = listInfoToAttrs ./hosts/physiques hosts_physique_info;
attrs_all_info = attrs_physique_info // attrs_vm_info;
in in
attrs_all_info
//
{ {
apprentix = nixosSystem { # apprentix = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/apprentix ] ++ baseModules; # modules = [ ./hosts/vm/apprentix ] ++ baseModules;
}; # };
collabora = nixosSystem { # collabora = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/collabora ] ++ baseModules; # modules = [ ./hosts/vm/collabora ] ++ baseModules;
}; # };
jitsi = nixosSystem { # jitsi = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/jitsi ] ++ baseModules; # modules = [ ./hosts/vm/jitsi ] ++ baseModules;
}; # };
livre = nixosSystem { # livre = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/livre ] ++ baseModules; # modules = [ ./hosts/vm/livre ] ++ baseModules;
}; # };
neo = nixosSystem { # neo = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/neo ] ++ baseModules; # modules = [ ./hosts/vm/neo ] ++ baseModules;
}; # };
nextcloud = nixosSystem { # nextcloud = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/nextcloud ] ++ baseModules; # modules = [ ./hosts/vm/nextcloud ] ++ baseModules;
}; # };
periodique = nixosSystem { # periodique = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/periodique ] ++ baseModules; # modules = [ ./hosts/vm/periodique ] ++ baseModules;
}; # };
redite = nixosSystem { # redite = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/redite ] ++ baseModules; # modules = [ ./hosts/vm/redite ] ++ baseModules;
}; # };
reverseproxy = nixosSystem { # reverseproxy = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/reverseproxy ] ++ baseModules; # modules = [ ./hosts/vm/reverseproxy ] ++ baseModules;
}; # };
thot = nixosSystem { # thot = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/physiques/thot ] ++ baseModules; # modules = [ ./hosts/physiques/thot ] ++ baseModules;
}; # };
two = nixosSystem { # two = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/two ] ++ baseModules; # modules = [ ./hosts/vm/two ] ++ baseModules;
}; # };
vaultwarden = nixosSystem { # vaultwarden = nixosSystem {
specialArgs = inputs; # specialArgs = inputs;
modules = [ ./hosts/vm/vaultwarden ] ++ baseModules; # modules = [ ./hosts/vm/vaultwarden ] ++ baseModules;
}; # };
cransIso = nixosSystem { # cransIso = nixosSystem {
system = "x86_64-linux"; # system = "x86_64-linux";
specialArgs = inputs; # specialArgs = inputs;
modules = [ # modules = [
./hosts/iso # ./hosts/iso
./modules/crans/locale.nix # ./modules/crans/locale.nix
]; # ];
}; # };
}; };
}; };

View File

@ -38,19 +38,5 @@
restic restic
]; ];
crans = {
enable = true;
networking.adm.enable = false;
resticClient.enable = false;
services = {
resticServer = {
enable = true;
port = 4242;
};
};
};
system.stateVersion = "24.05"; system.stateVersion = "24.05";
} }

View File

@ -0,0 +1,17 @@
{
name = "thot";
description = "Serveur de backup sous nixos utilisant Restic";
id = 14;
enable = true;
networking.adm.enable = false;
resticClient.enable = false;
services = {
resticServer = {
enable = true;
port = 4242;
};
};
}

View File

@ -9,21 +9,6 @@
networking.hostName = "apprentix"; networking.hostName = "apprentix";
crans = {
enable = true;
networking = {
id = 150;
srvNat.enable = true;
};
resticClient.when = "01:23";
homeNounou.enable = false;
users.root.passwordFile = ../../../secrets/apprentix/root.age;
};
security.sudo.extraRules = [ security.sudo.extraRules = [
{ {
groups = [ "_user" ]; groups = [ "_user" ];

View File

@ -0,0 +1,17 @@
{
name = "apprentix";
description = "VM pour les apprenties";
id = 150;
enable = true;
networking = {
srvNat.enable = true;
};
resticClient.when = "01:23";
homeNounou.enable = false;
users.root.passwordFile = ../../../secrets/apprentix/root.age;
}

View File

@ -9,16 +9,5 @@
networking.hostName = "collabora"; networking.hostName = "collabora";
boot.loader.grub.devices = [ "/dev/sda" ]; boot.loader.grub.devices = [ "/dev/sda" ];
crans = {
enable = true;
networking = {
id = 149;
srvNat.enable = true;
};
resticClient.enable = false;
};
system.stateVersion = "25.09"; system.stateVersion = "25.09";
} }

View File

@ -0,0 +1,14 @@
{
name = "collabora";
description = "Collabora du Crans";
id = 149;
enable = true;
networking = {
srvNat.enable = true;
};
resticClient.enable = false;
}

View File

@ -9,23 +9,5 @@
networking.hostName = "jitsi"; networking.hostName = "jitsi";
boot.loader.grub.devices = [ "/dev/vda" ]; boot.loader.grub.devices = [ "/dev/vda" ];
crans = {
enable = true;
networking = {
id = 163;
srv = {
enable = true;
ipv4 = "185.230.79.15";
};
};
resticClient.when = "02:34";
services = {
acme.enable = true;
};
};
system.stateVersion = "24.11"; system.stateVersion = "24.11";
} }

View File

@ -0,0 +1,26 @@
{
name = "jitsi";
description = "Machine qui gère Jitsi";
id = 163;
networking = {
srv = {
enable = true;
ipv4 = "185.230.79.15";
};
};
resticClient.when = "02:34";
services = {
acme.enable = true;
};
# aliasDNS = [
# "visio"
# ];
public-ssh = "";
}

View File

@ -9,16 +9,5 @@
networking.hostName = "livre"; networking.hostName = "livre";
boot.loader.grub.devices = [ "/dev/sda" ]; boot.loader.grub.devices = [ "/dev/sda" ];
crans = {
enable = true;
networking = {
id = 140;
srvNat.enable = true;
};
resticClient.when = "03:45";
};
system.stateVersion = "24.11"; system.stateVersion = "24.11";
} }

View File

@ -0,0 +1,14 @@
{
name = "livre";
description = "Editeur de PDF en ligne via Stirling-PDF";
id = 140;
enable = true;
networking = {
srvNat.enable = true;
};
resticClient.when = "03:45";
}

View File

@ -12,24 +12,5 @@
networking.hostName = "neo"; networking.hostName = "neo";
crans = {
enable = true;
networking = {
id = 141;
srv = {
enable = true;
ipv4 = "185.230.79.5";
};
};
resticClient.when = "04:56";
services = {
acme.enable = true;
coturn.enable = true;
};
};
system.stateVersion = "24.11"; system.stateVersion = "24.11";
} }

View File

@ -0,0 +1,20 @@
{
name = "neo";
description = "Matrix du Crans et bridge IRC/Matrix";
enable = true;
id = 141;
networking = {
srv = {
enable = true;
ipv4 = "185.230.79.5";
};
};
resticClient.when = "04:56";
services = {
acme.enable = true;
coturn.enable = true;
};
}

View File

@ -9,25 +9,6 @@
networking.hostName = "nextcloud"; networking.hostName = "nextcloud";
boot.loader.grub.devices = [ "/dev/sda" ]; boot.loader.grub.devices = [ "/dev/sda" ];
crans = {
enable = true;
networking = {
id = 146;
srvNat = {
enable = true;
interface = "ens20";
};
san = {
enable = true;
interface = "ens19";
};
};
homeAdh.enable = true;
resticClient.enable = false;
};
services.autofs = { services.autofs = {
enable = true; enable = true;

View File

@ -0,0 +1,22 @@
{
name = "nextcloud";
description = "Nextcloud du Crans";
id = 146;
enable = true;
networking = {
srvNat = {
enable = true;
interface = "ens20";
};
san = {
enable = true;
interface = "ens19";
};
};
homeAdh.enable = true;
resticClient.enable = false;
}

View File

@ -9,16 +9,5 @@
networking.hostName = "periodique"; networking.hostName = "periodique";
boot.loader.grub.devices = [ "/dev/sda" ]; boot.loader.grub.devices = [ "/dev/sda" ];
crans = {
enable = true;
networking = {
id = 118;
srvNat.enable = true;
};
resticClient.when = "02:56";
};
system.stateVersion = "24.11"; system.stateVersion = "24.11";
} }

View File

@ -0,0 +1,14 @@
{
name = "periodique";
description = "Frontend Matrix du Crans (element)";
id = 118;
enable = true;
networking = {
srvNat.enable = true;
};
resticClient.when = "02:56";
}

View File

@ -9,16 +9,5 @@
networking.hostName = "redite"; networking.hostName = "redite";
boot.loader.grub.devices = [ "/dev/sda" ]; boot.loader.grub.devices = [ "/dev/sda" ];
crans = {
enable = true;
networking = {
id = 139;
srvNat.enable = true;
};
resticClient.when = "06:18";
};
system.stateVersion = "23.11"; system.stateVersion = "23.11";
} }

View File

@ -0,0 +1,13 @@
{
name = "redite";
description = "Frontend reddit libre";
id = 139;
enable = true;
networking = {
srvNat.enable = true;
};
resticClient.when = "06:18";
}

View File

@ -13,22 +13,5 @@
users.users."nginx".home = "/var/lib/nginx"; users.users."nginx".home = "/var/lib/nginx";
users.users."anubis".extraGroups = [ "nginx" ]; users.users."anubis".extraGroups = [ "nginx" ];
crans = {
enable = true;
networking = {
id = 151;
srvNat.enable = true;
srv = {
enable = true;
interface = "ens20";
ipv4 = "185.230.79.42";
};
};
resticClient.when = "03:42";
};
system.stateVersion = "25.05"; system.stateVersion = "25.05";
} }

View File

@ -0,0 +1,20 @@
{
name = "reverseproxy";
description = "reverse-proxy principale du Crans";
id = 151;
enable = true;
networking = {
srvNat.enable = true;
srv = {
enable = true;
interface = "ens20";
ipv4 = "185.230.79.42";
};
};
resticClient.when = "03:42";
}

View File

@ -8,19 +8,6 @@
networking.hostName = "two"; networking.hostName = "two";
boot.loader.grub.devices = [ "/dev/sda" ]; boot.loader.grub.devices = [ "/dev/sda" ];
crans = {
enable = true;
networking = {
id = 135;
srvNat = {
enable = true;
interface = "ens19";
};
};
resticClient.when = "07:29";
};
system.stateVersion = "23.11"; system.stateVersion = "23.11";
} }

View File

@ -0,0 +1,16 @@
{
name = "two";
description = "VM de test";
id = 135;
enable = true;
networking = {
srvNat = {
enable = true;
interface = "ens19";
};
};
resticClient.when = "07:29";
}

View File

@ -9,16 +9,5 @@
networking.hostName = "vaultwarden"; networking.hostName = "vaultwarden";
boot.loader.grub.devices = [ "/dev/sda" ]; boot.loader.grub.devices = [ "/dev/sda" ];
crans = {
enable = true;
networking = {
id = 159;
srvNat.enable = true;
};
resticClient.when = "04:44";
};
system.stateVersion = "24.05"; system.stateVersion = "24.05";
} }

View File

@ -0,0 +1,13 @@
{
name = "vaultwarden";
description = "Vaultarden du crans, gestionnaire de mot de passe";
id = 159;
enable = true;
networking = {
srvNat.enable = true;
};
resticClient.when = "04:44";
}

View File

@ -8,6 +8,7 @@ in
{ {
imports = [ imports = [
./age.nix ./age.nix
./extra.nix
./grub.nix ./grub.nix
./home.nix ./home.nix
./locale.nix ./locale.nix

View File

@ -0,0 +1,32 @@
{ lib, ... }:
with lib;
{
options.crans = {
name = mkOption {
type = types.str;
example = "vm-test";
description = "Nom de la machine";
};
description = mkOption {
type = types.str;
example = "VM de test";
description = "Description de la machine";
};
id = mkOption {
type = types.int;
example = 135;
description = """
ID de la machine :
- < 100 machine physique
- >= 100 VM ( id de la VM dans proxmox )
""";
};
public-ssh = mkOption {
type = types.str;
description = "Clé ssh public de la machine";
};
};
}

View File

@ -1,7 +1,8 @@
{ lib, config, ... }: { lib, config, ... }:
let let
cfg = config.crans.networking; cfg = config.crans;
cfg-net = cfg.networking;
inherit (lib) inherit (lib)
mkEnableOption mkEnableOption
@ -20,12 +21,6 @@ in
options.crans.networking = { options.crans.networking = {
enable = mkEnableOption "Configuration réseaux commune à toutes les machines du Crans."; enable = mkEnableOption "Configuration réseaux commune à toutes les machines du Crans.";
id = mkOption {
type = types.int;
example = 135;
description = "Le numéro de la VM dans Proxmox.";
};
adm = { adm = {
enable = mkEnableOption "Configuration du VLAN adm."; enable = mkEnableOption "Configuration du VLAN adm.";
@ -76,8 +71,9 @@ in
}; };
}; };
config = mkIf cfg.enable { config = mkIf cfg-net.enable {
networking = { networking = {
hostName = cfg.name;
useDHCP = false; useDHCP = false;
firewall.enable = lib.mkDefault false; firewall.enable = lib.mkDefault false;
nameservers = [ "172.16.10.128" ]; nameservers = [ "172.16.10.128" ];
@ -92,12 +88,12 @@ in
# plus bas). # plus bas).
lib.attrsets.mapAttrs' lib.attrsets.mapAttrs'
(interface: conf: { (interface: conf: {
name = cfg."${interface}".interface; name = cfg-net."${interface}".interface;
value = conf; value = conf;
}) })
( (
# On filtre sur les interfaces activées # On filtre sur les interfaces activées
lib.attrsets.filterAttrs (interface: _: cfg."${interface}".enable) { lib.attrsets.filterAttrs (interface: _: cfg-net."${interface}".enable) {
# Configuration du VLAN adm # Configuration du VLAN adm
adm = { adm = {
ipv4.addresses = [ ipv4.addresses = [
@ -120,7 +116,7 @@ in
ipv4 = { ipv4 = {
addresses = [ addresses = [
{ {
address = cfg.srv.ipv4; address = cfg-net.srv.ipv4;
prefixLength = 26; prefixLength = 26;
} }
]; ];

View File

@ -0,0 +1,18 @@
{ config, pkgs, ...}:
{
nix.buildMachines = [{
hostName = "cephiroth.adm.crans.org";
system = "x86_64-linux";
maxJobs = 2;
speedFactor = 2;
supportedFeatures = [ "kvm" "big-parallel" ];
}];
nix.distributedBuilds = true;
nix.extraOptions = ''
builders-use-substitutes = true
'';
}