anchor.diff:    config = mkIf cfg.enable {
       assertions = [
         {
  -        assertion = cfg.role == "agent" -> cfg.serverAddr != "";
  -        message = "serverAddr should be set if role is 'agent'";
  +        assertion = cfg.role == "agent" -> (cfg.configPath != null || cfg.serverAddr != "");
  +        message = "serverAddr or configPath (with 'server' key) should be set if role is 'agent'";
         }
         {
  -        assertion = cfg.role == "agent" -> cfg.token != "" || cfg.tokenFile != null;
  -        message = "token or tokenFile should be set if role is 'agent'";
  +        assertion = cfg.role == "agent" -> cfg.configPath != null || cfg.tokenFile != null || cfg.token != "";
  +        message = "token or tokenFile or configPath (with 'token' or 'token-file' keys) should be set if role is 'agent'";
         }
       ];
   
  
positive.code:             "${cfg.package}/bin/k3s ${cfg.role}"
            ] ++ (optional cfg.docker "--docker")
            ++ (optional cfg.disableAgent "--disable-agent")
            ++ (optional (cfg.role == "agent") "--server ${cfg.serverAddr} ${
              if cfg.tokenFile != null then
                "--token-file ${cfg.tokenFile}"
              else
                "--token ${cfg.token}"
            }")
            ++ [ cfg.extraFlags ]
          );
        };
  
negative.code:       default = false;
        description = "Only run the server. This option only makes sense for a server.";
      };
  
      configPath = mkOption {
        type = types.nullOr types.path;
        default = null;
        description = "File path containing the k3s YAML config. This is useful when the config is generated (for example on boot).";
      };
    };
  
    # implementation
  