{ description = "niveum: packages, modules, systems"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-21.11"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/master"; flake-utils.url = "github:numtide/flake-utils"; home-manager = { url = "github:nix-community/home-manager/release-21.11"; inputs.nixpkgs.follows = "nixpkgs"; }; krops = { url = "github:Mic92/krops"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-utils.follows = "flake-utils"; }; # legacy menstruation-backend = { url = "github:kmein/menstruation.rs"; flake = false; }; menstruation-telegram = { url = "github:kmein/menstruation-telegram"; flake = false; }; nix-writers = { url = "git+https://cgit.krebsco.de/nix-writers"; flake = false; }; recht = { url = "github:kmein/recht"; flake = false; }; retiolum = { url = "github:krebs/retiolum"; flake = false; }; scripts = { url = "github:kmein/scripts"; flake = false; }; stockholm = { url = "git+https://cgit.lassul.us/stockholm"; flake = false; }; telebots = { url = "github:kmein/telebots"; flake = false; }; tinc-graph = { url = "github:kmein/tinc-graph"; flake = false; }; traadfri = { url = "github:kmein/traadfri"; flake = false; }; tuna = { url = "github:kmein/tuna"; flake = false; }; }; outputs = { self , flake-utils , home-manager , krops , menstruation-backend , menstruation-telegram , nix-writers , nixpkgs , nixpkgs-unstable , recht , retiolum , scripts , stockholm , telebots , tinc-graph , traadfri , tuna }@inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; source = name: { niveum.file = toString ./.; nixos-config.symlink = "niveum/systems/${name}/configuration.nix"; system-secrets.pass = { dir = toString ~/.password-store; name = "systems/${name}"; }; secrets.pass = { dir = toString ~/.password-store; name = "shared"; }; } // nixpkgs.lib.mapAttrs' (name: value: { inherit name; value.file = toString value; }) (nixpkgs.lib.filterAttrs (name: _: !builtins.elem name [ "flake-utils" "krops" "self" ]) inputs); deployScriptFor = {name, host}: let inherit (import ./lib/default.nix) sshPort; in toString (krops.packages.${system}.writeDeploy "deploy-${name}" { source = krops.lib.evalSource [ (source name) ]; target = "root@${host}:${toString sshPort}"; }); in { apps.${system} = let forSystems = f: builtins.listToAttrs (map f (builtins.attrNames (builtins.readDir ./systems))); deployScripts = forSystems (name: { name = "deploy-${name}"; value = { type = "app"; program = deployScriptFor { inherit name; host = "${name}.r"; }; }; }); ciScripts = forSystems (name: { name = "build-${name}"; value = { type = "app"; program = import ./ci.nix { inherit name system inputs; }; }; }); in deployScripts // ciScripts; }; }