aboutsummaryrefslogtreecommitdiffstats
path: root/modules/vhack/ta/taskchampion-sync
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-07-30 14:05:39 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-07-30 14:05:39 +0200
commitc153a351659e4596acfc31f00bf594343cbfcd68 (patch)
treea9ed83de07711d6424fbea09aad28891bae5bfe4 /modules/vhack/ta/taskchampion-sync
parenthosts/server3: Setup prometheus server in agent mode (diff)
downloadnixos-server-c153a351659e4596acfc31f00bf594343cbfcd68.zip
modules: Use namespaces
That might make it easier in the future to merge different server configs together (and thusly facilitate code-reuse.).
Diffstat (limited to 'modules/vhack/ta/taskchampion-sync')
-rw-r--r--modules/vhack/ta/taskchampion-sync/module.nix66
1 files changed, 66 insertions, 0 deletions
diff --git a/modules/vhack/ta/taskchampion-sync/module.nix b/modules/vhack/ta/taskchampion-sync/module.nix
new file mode 100644
index 0000000..a7cba30
--- /dev/null
+++ b/modules/vhack/ta/taskchampion-sync/module.nix
@@ -0,0 +1,66 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.vhack.taskchampion-sync;
+ dataDirectory = "/var/lib/taskchampion-sync-server";
+in {
+ options.vhack.taskchampion-sync = {
+ enable = lib.mkEnableOption "taskchampion-sync";
+
+ fqdn = lib.mkOption {
+ description = "The fully qualified domain name of this instance.";
+ type = lib.types.str;
+ example = "task-sync.tw.online";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ users = {
+ users.taskchampion = {
+ uid = config.vhack.constants.ids.uids.taskchampion;
+ group = "taskchampion";
+ };
+ groups.taskchampion.gid = config.vhack.constants.ids.uids.taskchampion;
+ };
+
+ vhack = {
+ persist.directories = [
+ {
+ directory = dataDirectory;
+ user = "taskchampion";
+ group = "taskchampion";
+ mode = "0700";
+ }
+ ];
+ nginx.enable = true;
+ };
+
+ systemd.services.taskchampion-sync-server = {
+ serviceConfig = {
+ # The upstream service uses DynamicUsers, which currently poses issues to our
+ # directory persisting strategy.
+ User = "taskchampion";
+ Group = "taskchampion";
+ DynamicUser = lib.mkForce false;
+ };
+ };
+
+ services = {
+ taskchampion-sync-server = {
+ enable = true;
+ dataDir = dataDirectory;
+ };
+
+ nginx.virtualHosts."${cfg.fqdn}" = {
+ locations."/" = {
+ proxyPass = "http://127.0.0.1:${toString config.services.taskchampion-sync-server.port}";
+ recommendedProxySettings = true;
+ };
+ enableACME = true;
+ forceSSL = true;
+ };
+ };
+ };
+}