dotfiles/modules/nixos/homelab/guests/syncthing/default.nix

124 lines
2.9 KiB
Nix
Raw Normal View History

2025-12-08 22:25:13 -06:00
{
flake,
labHelpers,
...
}:
2025-12-08 03:32:04 -06:00
let
2025-12-09 00:52:21 -06:00
inherit (labHelpers)
docsPath
guestPath
mediaPath
miscPath
;
2025-12-08 03:32:04 -06:00
inherit (import ./config { inherit flake; }) syncthingVM;
inherit (flake.config.services) instances;
inherit (flake.config.people) user0;
serviceCfg = instances.syncthing;
2025-12-08 22:25:13 -06:00
interface0Cfg = serviceCfg.interfaces.interface0;
2025-12-08 03:32:04 -06:00
foldersHelper = user: {
docs = {
enable = true;
id = "docs";
path = "/var/lib/${serviceCfg.name}/docs";
devices = [
"${user}Phone"
];
};
media = {
enable = true;
id = "media";
path = "/var/lib/${serviceCfg.name}/media";
devices = [
"${user}Phone"
];
};
misc = {
enable = true;
id = "misc";
path = "/var/lib/${serviceCfg.name}/misc";
devices = [
"${user}Phone"
];
};
};
devicesHelper = user: syncID: device: deviceIP: {
"${user}${device}" = {
autoAcceptFolders = true;
name = "${user}${device}";
addresses = [
"tcp://${deviceIP}:${toString serviceCfg.ports.port2}"
];
id = syncID;
};
};
mountsHelper = user: [
{
mountPoint = "/var/lib/${serviceCfg.name}/docs";
proto = "virtiofs";
2025-12-09 00:52:21 -06:00
source = docsPath user;
2025-12-08 03:32:04 -06:00
tag = "${serviceCfg.name}_${user}_docs";
}
{
mountPoint = "/var/lib/${serviceCfg.name}/media";
proto = "virtiofs";
2025-12-09 00:52:21 -06:00
source = mediaPath user;
2025-12-08 03:32:04 -06:00
tag = "${serviceCfg.name}_${user}_media";
}
{
mountPoint = "/var/lib/${serviceCfg.name}/misc";
proto = "virtiofs";
2025-12-09 00:52:21 -06:00
source = miscPath user;
2025-12-08 03:32:04 -06:00
tag = "${serviceCfg.name}_${user}_misc";
}
];
tmpRules = [
"d /var/lib/${serviceCfg.name}/docs 0755 ${serviceCfg.name} ${serviceCfg.name} -"
"d /var/lib/${serviceCfg.name}/media 0755 ${serviceCfg.name} ${serviceCfg.name} -"
"d /var/lib/${serviceCfg.name}/misc 0755 ${serviceCfg.name} ${serviceCfg.name} -"
];
2025-12-09 00:52:21 -06:00
in
{
2025-12-08 03:32:04 -06:00
syncthingNick =
let
phoneID = "OALKHLZ-OODUWVX-PAC2LI7-UMZMSZO-FELLRCD-RS4DHJS-PVA5YQK-WTFXXQI";
in
syncthingVM {
user = user0;
2025-12-08 22:25:13 -06:00
ip = interface0Cfg.microvm.ip;
mac = interface0Cfg.microvm.mac;
userMac = interface0Cfg.microvm.macUser;
ssh = interface0Cfg.microvm.ssh;
2025-12-09 00:52:21 -06:00
mnt = guestPath user0;
2025-12-08 22:25:13 -06:00
host = interface0Cfg.domain;
2025-12-08 03:32:04 -06:00
folders = foldersHelper user0;
devices = devicesHelper user0 phoneID "Phone" "192.168.50.8";
tmp = tmpRules;
mounts = mountsHelper user0;
};
# syncthingStacie = syncthingVM {
# user = "stacie";
# ip = ipAddress id0;
# mac = "02:00:00:00:${id0}:${id0}";
# userMac = "02:00:00:00:00:${id0}";
# ssh = syncthing.ssh0;
# syncID = "";
# deviceIP = "";
# };
# syncthingGarnet = syncthingVM {
# user = "garnet";
# ip = ipAddress id0;
# mac = "02:00:00:00:${id0}:${id0}";
# userMac = "02:00:00:00:00:${id0}";
# ssh = syncthing.ssh0;
# syncID = "";
# deviceIP = "";
# };
2025-12-09 00:52:21 -06:00
}