161 lines
4.1 KiB
Nix
161 lines
4.1 KiB
Nix
{
|
|
# 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"
|
|
# );
|
|
};
|
|
};
|
|
};
|
|
|
|
}
|