diff --git a/default.nix b/default.nix index 97e1280..398a7cc 100644 --- a/default.nix +++ b/default.nix @@ -59,6 +59,7 @@ let ./modules/services/privoxy ./modules/services/redis ./modules/services/skhd + ./modules/services/synapse-bt.nix ./modules/services/synergy ./modules/programs/bash ./modules/programs/fish.nix diff --git a/modules/services/synapse-bt.nix b/modules/services/synapse-bt.nix new file mode 100644 index 0000000..d85a2cd --- /dev/null +++ b/modules/services/synapse-bt.nix @@ -0,0 +1,72 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.synapse-bt; + configOptions = recursiveUpdate { + port = cfg.port; + disk = { + directory = cfg.downloadDir; + }; + } cfg.extraConfig; + + configFile = pkgs.runCommand "config.toml" { + buildInputs = [ pkgs.remarshal ]; + } '' + remarshal -if json -of toml \ + < ${pkgs.writeText "config.json" (builtins.toJSON configOptions)} \ + > $out + ''; +in + +{ + options = { + services.synapse-bt = { + enable = mkOption { + type = types.bool; + default = false; + description = "Whether to run Synapse BitTorrent Daemon."; + }; + + package = mkOption { + type = types.package; + default = pkgs.synapse-bt; + defaultText = "pkgs.synapse-bt"; + description = "Synapse BitTorrent package to use."; + }; + + port = mkOption { + type = types.int; + default = 16384; + description = "The port on which Synapse BitTorrent listens."; + }; + + downloadDir = mkOption { + type = types.path; + default = "/var/lib/synapse-bt"; + example = "/var/lib/synapse-bt/downloads"; + description = "Download directory for Synapse BitTorrent."; + }; + + extraConfig = mkOption { + default = {}; + description = "Extra configuration options for Synapse BitTorrent."; + type = types.attrs; + }; + }; + }; + + config = mkIf cfg.enable { + + environment.systemPackages = [ cfg.package ]; + + launchd.user.agents.synapse-bt = + { path = [ cfg.package ]; + command = "${cfg.package}/bin/synapse --config ${configFile}"; + serviceConfig.KeepAlive = true; + serviceConfig.RunAtLoad = true; + }; + + }; +}