{ config, lib, pkgs, ... }: with lib; let cfg = config.services.etesync-dav; toEnvironmentCfg = vars: (concatStringsSep " " (mapAttrsToList (k: v: "${k}=${escapeShellArg v}") vars)); in { meta.maintainers = [ maintainers.valodim ]; options.services.etesync-dav = { enable = mkEnableOption "etesync-dav"; package = mkOption { type = types.package; default = pkgs.etesync-dav; defaultText = "pkgs.etesync-dav"; description = "The etesync-dav derivation to use."; }; serverUrl = mkOption { type = types.str; default = "https://api.etesync.com/"; description = "The URL to the etesync server."; }; settings = mkOption { type = types.attrsOf (types.oneOf [ types.str types.int ]); default = { }; example = literalExpression '' { ETESYNC_LISTEN_ADDRESS = "localhost"; ETESYNC_LISTEN_PORT = 37358; } ''; description = '' Settings for etesync-dav, passed as environment variables. ''; }; }; config = mkIf cfg.enable { assertions = [ (lib.hm.assertions.assertPlatform "services.etesync-dav" pkgs lib.platforms.linux) ]; home.packages = [ cfg.package ]; systemd.user.services.etesync-dav = { Unit = { Description = "etesync-dav"; }; Service = { ExecStart = "${cfg.package}/bin/etesync-dav"; Environment = toEnvironmentCfg ({ ETESYNC_URL = cfg.serverUrl; } // cfg.settings); }; Install = { WantedBy = [ "default.target" ]; }; }; }; }