nix-config/modules/nixos-modules/sync.nix

91 lines
2.6 KiB
Nix

{
config,
lib,
...
}: let
mountDir = "/mnt/sync";
in {
options.host.sync = {
enable = lib.mkEnableOption "should sync thing be enabled on this device";
folders = {
leyla = {
documents = {
enable = lib.mkEnableOption "should the documents folder be synced";
};
calendar = {
enable = lib.mkEnableOption "should the calendar folder be synced";
};
notes = {
enable = lib.mkEnableOption "should the notes folder by synced";
};
};
extraFolders = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule ({...}: {
options = {
path = lib.mkOption {
type = lib.types.str;
};
devices = lib.mkOption {
type = lib.types.listof lib.types.str;
};
};
}));
default = {};
};
};
};
config = {
systemd = lib.mkIf config.services.syncthing.enable {
tmpfiles.rules = [
"d ${mountDir} 755 syncthing syncthing -"
"d ${config.services.syncthing.dataDir} 755 syncthing syncthing -"
"d ${config.services.syncthing.configDir} 755 syncthing syncthing -"
];
};
services.syncthing = {
enable = config.host.sync.enable;
user = "syncthing";
group = "syncthing";
dataDir = "${mountDir}/default";
configDir = "/etc/syncthing";
overrideDevices = true;
overrideFolders = true;
settings = {
devices = {
ceder = {
id = "MGXUJBS-7AENXHB-7YQRNWG-QILKEJD-5462U2E-WAQW4R4-I2TVK5H-SMK6LAA";
};
coven = {
id = "QGU7NN6-OMXTWVA-YCZ73S5-2O7ECTS-MUCTN4M-YH6WLEL-U4U577I-7PBNCA5";
};
};
folders = lib.mkMerge [
config.host.sync.folders.extraFolders
(lib.mkIf config.host.sync.folders.leyla.documents.enable {
"documents" = {
id = "hvrj0-9bm1p";
path = "/mnt/sync/leyla/documents";
devices = ["ceder" "coven"];
};
})
(lib.mkIf config.host.sync.folders.leyla.calendar.enable {
"calendar" = {
id = "8oatl-1rv6w";
path = "/mnt/sync/leyla/calendar";
devices = ["ceder" "coven"];
};
})
(lib.mkIf config.host.sync.folders.leyla.notes.enable {
"notes" = {
id = "dwbuv-zffnf";
path = "/mnt/sync/leyla/notes";
devices = ["ceder" "coven"];
};
})
];
};
};
};
}