{ lib, types, config, ... }: let deviceList = builtins.attrNames config.common.syncthing.devices; in { options = { common.syncthing = { enable = lib.mkEnableOption "enable syncthing"; devices = lib.mkOption { type = lib.types.attrsOf (lib.types.submodule { options.id = lib.mkOption { type = lib.types.str; }; }); }; }; }; config.services.syncthing = lib.mkIf config.common.syncthing.enable { enable = lib.mkDefault true; user = lib.mkDefault "willifan"; dataDir = lib.mkDefault "/mnt/data"; configDir = lib.mkDefault "/mnt/data/.config/syncthing"; overrideDevices = lib.mkDefault true; overrideFolders = lib.mkDefault true; settings = { gui = { user = lib.mkDefault "willifan"; password = lib.mkDefault "temppassword"; }; devices = config.common.syncthing.devices; folders = lib.mkDefault { "Documents" = { id = "jtl6g-qjmwo"; path = "/mnt/data/Documents"; devices = deviceList; }; "Enpass" = lib.mkDefault { id = "ciksm-xsw4m"; path = "/mnt/data/Enpass"; devices = deviceList; }; "Pictures" = lib.mkDefault { id = "po4qj-q9t0t"; path = "/mnt/data/Pictures"; devices = deviceList; }; "Videos" = lib.mkDefault { id = "4wqf5-xasng"; path = "/mnt/data/Videos"; devices = deviceList; }; "Notes" = lib.mkDefault { id = "oc61n-iewgj"; path = "/mnt/data/Notes"; devices = deviceList; }; "Music" = lib.mkDefault { id = "xxh8a-3y2tq"; path = "/mnt/data/Music"; devices = deviceList; }; }; }; }; }