X-Git-Url: http://git.scottworley.com/syncthing-autoregister/blobdiff_plain/b00b144bd77fdaca30cb490e78e06e41617a79ad..refs/heads/master:/modules/syncthing-autoregister.nix?ds=sidebyside diff --git a/modules/syncthing-autoregister.nix b/modules/syncthing-autoregister.nix index d1f0a7c..710c7a4 100644 --- a/modules/syncthing-autoregister.nix +++ b/modules/syncthing-autoregister.nix @@ -1,11 +1,39 @@ { config, lib, pkgs, ... }: +with lib; let + cfg = config.services.syncthing.autoRegister; localpkgs = import ../. { inherit pkgs; }; register-script = pkgs.writeShellScript "syncthing-autoregister-script" '' - ${localpkgs.syncthing-set-id}/bin/syncthing-set-id /tmp/syncthing-auto-register-test-device-ids.nix + ${localpkgs.syncthing-set-id}/bin/syncthing-set-id ${ + escapeShellArg cfg.path + } ''; in { - config = { + options = { + services.syncthing.autoRegister = { + enable = mkEnableOption '' + Automatically write the local syncthing device id to the nix module + file . + ''; + path = mkOption { + type = types.path; + description = '' + Path of nix module file to write our syncthing + device id into. It will be written into + services.syncthing.devices..id. This file + can be imported as a NixOS module. + + We recommend using a separate file just for this purpose. I.e., + don't point this at your main NixOS config. Instead, import this + file from your main NixOS config. (The current nix-configuration + read-modify-write implementation only supports attrsets of strings; + it does not support functions, which you probably use in your + main configuration.) + ''; + }; + }; + }; + config = mkIf cfg.enable { systemd.services.syncthing-autoregister = { after = [ "syncthing.service" "syncthing-init.service" ]; wantedBy = [ "multi-user.target" ]; @@ -17,6 +45,20 @@ in { ExecStart = register-script; }; }; + systemd.services.syncthing-reregister = { + after = [ "syncthing-autoregister.service" ]; + script = '' + ${pkgs.coreutils}/bin/sleep 1 + ${pkgs.systemd}/bin/systemctl restart syncthing-autoregister + ''; + serviceConfig = { + Type = "oneshot"; + }; + }; + systemd.paths.syncthing-reregister = { + pathConfig.PathChanged = cfg.path; + wantedBy = [ "multi-user.target" ]; + }; }; }