{ lib, helpers, }: let inherit (lib) toList optionalAttrs optional; inherit (helpers) prependToBeforeScript appendToAfterScript filterJobVariables; in { key, job, pipelineName, nixConfig, }: if ! nixConfig.enable then job else (builtins.removeAttrs job ["variables" "cache"]) // (prependToBeforeScript ["source setup_nix_ci \"gitlab-ci:pipeline:${pipelineName}:job-deps:${key}\""] job) // (appendToAfterScript ["finalize_nix_ci"] job) // (let variables = (filterJobVariables false job) // optionalAttrs nixConfig.enableRunnerCache { NIX_CI_CACHE_STRATEGY = "runner"; }; in # filter empty variables optionalAttrs (variables != {}) { inherit variables; }) // (let cache = (toList (job.cache or [])) ++ (optional nixConfig.enableRunnerCache { key = nixConfig.runnerCacheKey; paths = [".nix-cache/"]; }); in # filter empty cache optionalAttrs (cache != []) { inherit cache; })