{ description = "A very basic flake"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; flake-base = { url = "git+https://khs.codes/nix/flake-base"; inputs.nixpkgs.follows = "nixpkgs"; }; disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "nixpkgs"; }; terranix = { url = "github:terranix/terranix"; inputs.nixpkgs.follows = "nixpkgs"; }; terranix-hcloud = { url = "github:terranix/terranix-hcloud"; inputs.nixpkgs.follows = "nixpkgs"; }; crane.url = "github:ipetkov/crane"; advisory-db = { url = "github:rustsec/advisory-db"; flake = false; }; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs = { nixpkgs.follows = "nixpkgs"; }; }; }; outputs = inputs@{ self, ... }: let dirsInPath = path: let files = builtins.readDir path; dirs = inputs.nixpkgs.lib.filterAttrs (name: kind: kind == "directory") files; in builtins.attrNames dirs; profileArgs = { inherit self; }; profileNames = dirsInPath ./nix/profiles; nixosModules = dirsInPath ./nix/modules/nixos; inputModules = [ inputs.disko.nixosModules.disko ]; in (inputs.flake-base.lib.mkFlake { inherit inputs; src = ./.; systems.modules.nixos = inputModules; snowfall = { root = ./nix; namespace = "khscodes"; meta = { title = "Nix machines for KHS"; name = "Machines"; }; }; modules.nixos = { default = { imports = builtins.map (m: self.nixosModules.${m}) nixosModules ++ inputModules; } // (builtins.listToAttrs ( builtins.map (n: { name = n; value = (import ./nix/profiles/${n} profileArgs); }) profileNames )); }; overlays = [ inputs.rust-overlay.overlays.default ]; }) // { terranixModules.cloudflare = import ./nix/modules/terranix/cloudflare { inherit inputs; khscodesLib = inputs.self.lib; }; terranixModules.hcloud = import ./nix/modules/terranix/hcloud { inherit inputs; khscodesLib = inputs.self.lib; }; terranixModules.openbao = import ./nix/modules/terranix/openbao { inherit inputs; khscodesLib = inputs.self.lib; }; }; }