inputs@{ servers, flutils, nixpkgs, kubenix, ... }: flutils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; deployScript = (pkgs.writeScriptBin "applyset-deploy.sh" (builtins.readFile ./applyset-deploy.sh)).overrideAttrs (old: { buildCommand = "${old.buildCommand}\npatchShebangs $out"; }); machines = servers.machines.${system}; mkKubernetes = name: module: namespace: (kubenix.evalModules.${system} { specialArgs = { inherit namespace system machines; inherit (servers) globals; inherit (inputs) nixhelm blog-pim dns; }; module = { kubenix, ... }: { imports = [ kubenix.modules.k8s kubenix.modules.helm ./modules module ]; config = { kubenix.project = name; kubernetes.namespace = namespace; }; }; }).config.kubernetes; mkManifest = name: { module, namespace }: { name = "${name}-manifest"; value = (mkKubernetes name module namespace).result; }; mkDeployApp = name: { module, namespace }: let kubernetes = mkKubernetes name module namespace; kubeconfig = kubernetes.kubeconfig or ""; result = kubernetes.result or ""; wrappedDeployScript = pkgs.symlinkJoin { name = "applyset-deploy.sh"; paths = [ deployScript pkgs.vals pkgs.kubectl ]; buildInputs = [ pkgs.makeWrapper ]; passthru.manifest = result; meta.mainProgram = "applyset-deploy.sh"; postBuild = '' wrapProgram $out/bin/applyset-deploy.sh \ --suffix PATH : "$out/bin" \ --run 'export KUBECONFIG=''${KUBECONFIG:-${toString kubeconfig}}' \ --set MANIFEST '${result}' \ --set APPLYSET 'applyset-${name}' \ --set NAMESPACE '${namespace}' ''; }; in { name = "${name}-deploy"; value = wrappedDeployScript; }; deployments = import ./deployments.nix; in { packages = pkgs.lib.mergeAttrs (pkgs.lib.mapAttrs' mkDeployApp deployments) (pkgs.lib.mapAttrs' mkManifest deployments); })