]> git.scottworley.com Git - syncthing-autoregister/blob - modules/syncthing-autoregister.nix
6276352f67b558773e4349017f694e151e0aa20d
[syncthing-autoregister] / modules / syncthing-autoregister.nix
1 { config, lib, pkgs, ... }:
2 with lib;
3 let
4 cfg = config.services.syncthing.autoRegister;
5 localpkgs = import ../. { inherit pkgs; };
6 register-script = pkgs.writeShellScript "syncthing-autoregister-script" ''
7 ${localpkgs.syncthing-set-id}/bin/syncthing-set-id ${
8 escapeShellArg cfg.path
9 }
10 '';
11 in {
12 options = {
13 services.syncthing.autoRegister = {
14 enable = mkEnableOption ''
15 Automatically write the local syncthing device id to the nix module
16 file <option>services.syncthing.autoRegister.path</option>.
17 '';
18 path = mkOption {
19 type = types.path;
20 default = "/tmp/syncthing-auto-register-test-device-ids.nix";
21 description = ''
22 Path of nix module file to write our syncthing
23 device id into. It will be written into
24 services.syncthing.declarative.devices.<hostname>.id. This file
25 can be imported as a NixOS module.
26
27 We recommend using a separate file just for this purpose. I.e.,
28 don't point this at your main NixOS config. Instead, import this
29 file from your main NixOS config. (The current nix-configuration
30 read-modify-write implementation only supports attrsets of strings;
31 it does not support functions, which you probably use in your
32 main configuration.)
33 '';
34 };
35 };
36 };
37 config = mkIf cfg.enable {
38 systemd.services.syncthing-autoregister = {
39 after = [ "syncthing.service" "syncthing-init.service" ];
40 wantedBy = [ "multi-user.target" ];
41 environment.NIX_PATH = config.environment.variables.NIX_PATH;
42 serviceConfig = {
43 User = config.services.syncthing.user;
44 RemainAfterExit = true;
45 Type = "oneshot";
46 ExecStart = register-script;
47 };
48 };
49 };
50 }
51