anchor.diff:          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 {
  +    settings = 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).
  -            '';
  -          };
  -        };
  +        freeformType = (pkgs.formats.json { }).type;
         };
         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>.
  +        Global gitlab-runner configuration. See
  +        <link xlink:href="https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-global-section"/>
  +        for supported values.
         '';
       };
       gracefulTermination = mkOption {
  
positive.code:       export CONFIG_FILE=${configPath}
  
        mkdir -p $(dirname ${configPath})
  
        # remove no longer existing services
        gitlab-runner verify --delete
  
negative.code:     (mkRenamedOptionModule [ "services" "gitlab-runner" "packages" ] [ "services" "gitlab-runner" "extraPackages" ] )
      (mkRemovedOptionModule [ "services" "gitlab-runner" "configOptions" ] "Use services.gitlab-runner.services option instead" )
      (mkRemovedOptionModule [ "services" "gitlab-runner" "workDir" ] "You should move contents of workDir (if any) to /var/lib/gitlab-runner" )
  
      (mkRenamedOptionModule [ "services" "gitlab-runner" "checkInterval" ] [ "services" "gitlab-runner" "settings" "check_interval" ] )
      (mkRenamedOptionModule [ "services" "gitlab-runner" "concurrent" ] [ "services" "gitlab-runner" "settings" "concurrent" ] )
      (mkRenamedOptionModule [ "services" "gitlab-runner" "sentryDSN" ] [ "services" "gitlab-runner" "settings" "sentry_dsn" ] )
      (mkRenamedOptionModule [ "services" "gitlab-runner" "prometheusListenAddress" ] [ "services" "gitlab-runner" "settings" "listen_address" ] )
  
      (mkRenamedOptionModule [ "services" "gitlab-runner" "sessionServer" "listenAddress" ] [ "services" "gitlab-runner" "settings" "session_server" "listen_address" ] )
      (mkRenamedOptionModule [ "services" "gitlab-runner" "sessionServer" "advertiseAddress" ] [ "services" "gitlab-runner" "settings" "session_server" "advertise_address" ] )
      (mkRenamedOptionModule [ "services" "gitlab-runner" "sessionServer" "sessionTimeout" ] [ "services" "gitlab-runner" "settings" "session_server" "session_timeout" ] )
    ];
  }
  