{ description = "Configuration NixOS du Crans"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05"; flake-parts.url = "github:hercules-ci/flake-parts"; # Formatter treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; # Secret management agenix = { url = "github:ryantm/agenix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = inputs@{ self, nixpkgs, flake-parts, agenix, ... }: flake-parts.lib.mkFlake { inherit inputs; } { imports = [ inputs.treefmt-nix.flakeModule ]; systems = [ "x86_64-linux" ]; flake = with nixpkgs.lib; { nixosConfigurations = let baseModules = [ ./modules 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 attrs_all_info // { # apprentix = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/apprentix ] ++ baseModules; # }; # collabora = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/collabora ] ++ baseModules; # }; # jitsi = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/jitsi ] ++ baseModules; # }; # livre = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/livre ] ++ baseModules; # }; # neo = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/neo ] ++ baseModules; # }; # nextcloud = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/nextcloud ] ++ baseModules; # }; # periodique = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/periodique ] ++ baseModules; # }; # redite = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/redite ] ++ baseModules; # }; # reverseproxy = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/reverseproxy ] ++ baseModules; # }; # thot = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/physiques/thot ] ++ baseModules; # }; # two = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/two ] ++ baseModules; # }; # vaultwarden = nixosSystem { # specialArgs = inputs; # modules = [ ./hosts/vm/vaultwarden ] ++ baseModules; # }; # cransIso = nixosSystem { # system = "x86_64-linux"; # specialArgs = inputs; # modules = [ # ./hosts/iso # ./modules/crans/locale.nix # ]; # }; }; }; perSystem = { config, pkgs, ... }: { devShells = { default = pkgs.callPackage ./devshells/default.nix { inherit (inputs) agenix; }; }; }; }; }