anchor.diff:        export CONFIG_FILE=${configPath}
   
         mkdir -p $(dirname ${configPath})
  +      touch ${configPath}
  +
  +      # update global options
  +      remarshal --if toml --of json ${configPath} \
  +        | jq -cM 'with_entries(select([.key] | inside(["runners"])))' \
  +        | jq -scM '.[0] + .[1]' - <(echo ${escapeShellArg (toJSON cfg.settings)}) \
  +        | remarshal --if json --of toml \
  +        | sponge ${configPath}
   
         # remove no longer existing services
         gitlab-runner verify --delete
  
positive.code:         for settings not covered by this module.
        '';
      };
      checkInterval = mkOption {
        type = types.int;
        default = 0;
        example = literalExpression "with lib; (length (attrNames config.services.gitlab-runner.services)) * 3";
        description = ''
          Defines the interval length, in seconds, between new jobs check.
          The default value is 3;
          if set to 0 or lower, the default value will be used.
          See <link xlink:href="https://docs.gitlab.com/runner/configuration/advanced-configuration.html#how-check_interval-works">runner documentation</link> for more information.
        '';
      };
      concurrent = mkOption {
        type = types.int;
        default = 1;
        example = literalExpression "config.nix.settings.max-jobs";
        description = ''
          Limits how many jobs globally can be run concurrently.
          The most upper limit of jobs using all defined runners.
          0 does not mean unlimited.
        '';
      };
      sentryDSN = mkOption {
        type = types.nullOr types.str;
        default = null;
        example = "https://public:private@host:port/1";
        description = ''
          Data Source Name for tracking of all system level errors to Sentry.
        '';
      };
      prometheusListenAddress = mkOption {
        type = types.nullOr types.str;
        default = null;
        example = "localhost:8080";
        description = ''
          Address (&lt;host&gt;:&lt;port&gt;) on which the Prometheus metrics HTTP server
          should be listening.
        '';
      };
      sessionServer = mkOption {
        type = types.submodule {
          options = {
            listenAddress = mkOption {
              type = types.nullOr types.str;
              default = null;
              example = "0.0.0.0:8093";
              description = ''
                An internal URL to be used for the session server.
              '';
            };
            advertiseAddress = mkOption {
              type = types.nullOr types.str;
              default = null;
              example = "runner-host-name.tld:8093";
              description = ''
                The URL that the Runner will expose to GitLab to be used
                to access the session server.
                Fallbacks to <option>listenAddress</option> if not defined.
              '';
            };
            sessionTimeout = mkOption {
              type = types.int;
              default = 1800;
              description = ''
                How long in seconds the session can stay active after
                the job completes (which will block the job from finishing).
              '';
            };
          };
        };
        default = { };
        example = literalExpression ''
          {
            listenAddress = "0.0.0.0:8093";
          }
        '';
        description = ''
          The session server allows the user to interact with jobs
          that the Runner is responsible for. A good example of this is the
          <link xlink:href="https://docs.gitlab.com/ee/ci/interactive_web_terminal/index.html">interactive web terminal</link>.
        '';
      };
      gracefulTermination = mkOption {
  
negative.code:       (n: v: "services.gitlab-runner.services.${n}.`registrationConfigFile` points to a file in Nix Store. You should use quoted absolute path to prevent this.")
        (filterAttrs (n: v: isStorePath v.registrationConfigFile) cfg.services))
      ++ optional (cfg.configFile != null) "services.gitlab-runner.`configFile` is deprecated, please use services.gitlab-runner.`services`.";
  
      environment.systemPackages = [ cfg.package ];
      systemd.services.gitlab-runner = {
        description = "Gitlab Runner";
  