{ self, pkgs, machines, dns, myLib, flake-utils, kubenix, nixhelm, blog-pim, ... }: flake-utils.lib.eachDefaultSystem (system: let mkKubenixPackage = module: kubenix.packages.${system}.default.override { specialArgs = { inherit myLib kubenix nixhelm system dns blog-pim machines; }; module = { imports = [ module ]; }; }; deployScript = (pkgs.writeScriptBin "kubenix" (builtins.readFile ./kubenix-deploy.sh)).overrideAttrs (old: { buildCommand = "${old.buildCommand}\npatchShebangs $out"; }); mkDeployScript = kubernetes: applyset: namespace: let kubeconfig = kubernetes.kubeconfig or ""; result = kubernetes.result or ""; wrappedDeployScript = pkgs.symlinkJoin { name = "kubenix"; paths = [ deployScript pkgs.vals pkgs.kubectl ]; buildInputs = [ pkgs.makeWrapper ]; passthru.manifest = result; postBuild = '' wrapProgram $out/bin/kubenix \ --suffix PATH : "$out/bin" \ --run 'export KUBECONFIG=''${KUBECONFIG:-${toString kubeconfig}}' \ --set MANIFEST '${result}' \ --set APPLYSET '${applyset}' \ --set NAMESPACE '${namespace}' ''; }; in wrappedDeployScript; mkDeployScriptAndManifest = module: applyset: namespace: let kubernetes = (kubenix.evalModules.${system} { module = { kubenix, ... }: { imports = [ kubenix.modules.k8s "${self}/kubenix-modules/custom" module ]; }; }).config.kubernetes; in { manifest = kubernetes.result; deploy = mkDeployScript kubernetes applyset namespace; }; in { kubenix.all.deploy = mkKubenixPackage "${self}/kubenix-modules/all.nix"; kubenix.bootstrap.deploy = mkKubenixPackage "${self}/kubenix-modules/base.nix"; kubenix.cyberchef = mkDeployScriptAndManifest "${self}/kubenix-modules/cyberchef.nix" "cyberchef" "cyberchef"; })