{ # lib, # config, # pkgs, ... }: { _class = "clan.service"; manifest.name = "clan-core/syncthing"; manifest.description = "A secure, file synchronization app for devices over networks"; roles.introducer = { interface = { lib, ... }: { options = { id = lib.mkOption { description = '' The ID of the machine. It is generated automatically by default. ''; type = lib.types.nullOr lib.types.str; example = "BABNJY4-G2ICDLF-QQEG7DD-N3OBNGF-BCCOFK6-MV3K7QJ-2WUZHXS-7DTW4AS"; # default = config.clan.core.vars.generators.syncthing.files."id".value; defaultText = "config.clan.core.vars.generators.syncthing.files.\"id\".value"; }; introducer = lib.mkOption { description = '' The introducer for the machine. ''; type = lib.types.nullOr lib.types.str; default = null; }; autoAcceptDevices = lib.mkOption { description = '' Auto accept incoming device requests. Should only be used on the introducer. ''; type = lib.types.bool; default = false; }; autoShares = lib.mkOption { description = '' Auto share the following Folders by their ID's with introduced devices. Should only be used on the introducer. ''; type = lib.types.listOf lib.types.str; default = [ ]; example = [ "folder1" "folder2" ]; }; }; }; perInstance = { # instanceName, roles, settings, ... }: { nixosModule = { ... }: { _module.args = { inherit settings roles; }; imports = [ ./shared.nix ]; }; }; }; roles.peer = { interface = { lib, ... }: { options = { id = lib.mkOption { description = '' The ID of the machine. It is generated automatically by default. ''; type = lib.types.nullOr lib.types.str; example = "BABNJY4-G2ICDLF-QQEG7DD-N3OBNGF-BCCOFK6-MV3K7QJ-2WUZHXS-7DTW4AS"; # default = config.clan.core.vars.generators.syncthing.files."id".value; defaultText = "config.clan.core.vars.generators.syncthing.files.\"id\".value"; }; introducer = lib.mkOption { description = '' The introducer for the machine. ''; type = lib.types.nullOr lib.types.str; default = null; }; autoAcceptDevices = lib.mkOption { description = '' Auto accept incoming device requests. Should only be used on the introducer. ''; type = lib.types.bool; default = false; }; autoShares = lib.mkOption { description = '' Auto share the following Folders by their ID's with introduced devices. Should only be used on the introducer. ''; type = lib.types.listOf lib.types.str; default = [ ]; example = [ "folder1" "folder2" ]; }; }; }; perInstance = { # instanceName, roles, settings, ... }: { nixosModule = { ... }: { _module.args = { inherit settings roles; }; imports = [ ./shared.nix ]; # clan.syncthing.introducer = lib.strings.removeSuffix "\n" ( # if builtins.pathExists introducerId then # builtins.readFile introducerId # else # throw "${introducerId} does not exists. Please run `clan vars generate ${introducer}` to generate the introducer device id" # ); }; }; }; }