Files
sydnix/modules/nixos/syncthing.nix
2025-04-01 07:28:38 -06:00

73 lines
2.2 KiB
Nix

{ config, lib, pkgs, ... }:
let cfg = config.sydnix.syncthing;
in {
options.sydnix.syncthing = {
enable = lib.mkEnableOption "Syncthing";
includeDevices = lib.mkOption {
type =
lib.types.listOf
(lib.types.enum (builtins.attrNames cfg.devices));
default = [];
description = ''
A list of device names to sync with. See the read-only option
`sydnix.syncthing.devices` for the concrete details.
'';
};
devices = lib.mkOption {
# This should generally be in sync with modules/home/syncthing.nix.
default = {
"guix-rebound".id =
"Q5B6LIV-5HQMWWV-XFQL5IT-PHP7PVE-XFWUVHK-F6WJ42C-OPMR4M7-GFNK3AG";
"deertopia".id =
"OO6XGGQ-SORH6XW-YEMN3T3-CSW5QOO-2IRB2QE-NZOL6JE-RAV36GS-WZXXLQV";
"nixos-testbed".id =
"BO3AESA-LBKMZW7-QFE7NTT-GF62DOA-PYUACYU-HNTNYI5-EMF6PAN-TR6YHAL";
"sydpc".id =
"XROSJRC-SLAAOTG-L3HQ5TT-WAKL5PJ-QAIFJEY-FUG5AAO-5ACBTA3-MGQQFQI";
};
readOnly = true;
description = ''
The read-only 'universe' of devices available. A subset of these
devices those named by `sydnix.syncthing.includeDevices` will be
handed to Syncthing's module. This should generally match the option of
the same name in the Home-manager module, `sydnix.syncthing.devices`.
'';
};
directories = lib.mkOption {
type = lib.types.anything;
default = {};
description = ''
Directly handed to `services.syncthing.settings.folders`.
'';
};
};
config = lib.mkIf cfg.enable {
sydnix.impermanence.directories = [
# Most notably, preserves the device ID.
"/var/lib/syncthing"
];
services.syncthing = {
enable = true;
openDefaultPorts = true;
overrideDevices = true;
overrideFolders = true;
settings = {
gui = {
# TODO: Figure out how to read credentials from a file.
# tls = true;
user = "lain";
password = "my-awesome-password";
};
devices =
lib.filterAttrs
(k: _v: builtins.elem k cfg.includeDevices)
cfg.devices;
folders = cfg.directories;
};
};
};
}