about summary refs log tree commit diff stats
path: root/modules/home.legacy/conf/taskwarrior/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/home.legacy/conf/taskwarrior/default.nix')
-rw-r--r--modules/home.legacy/conf/taskwarrior/default.nix125
1 files changed, 125 insertions, 0 deletions
diff --git a/modules/home.legacy/conf/taskwarrior/default.nix b/modules/home.legacy/conf/taskwarrior/default.nix
new file mode 100644
index 00000000..d7aec156
--- /dev/null
+++ b/modules/home.legacy/conf/taskwarrior/default.nix
@@ -0,0 +1,125 @@
+{
+  nixosConfig,
+  lib,
+  config,
+  ...
+}: {
+  imports = [
+    ./hooks
+  ];
+
+  services.taskwarrior-sync = {
+    enable = true;
+  };
+
+  programs.taskwarrior = let
+    projects = import ./projects {};
+
+    mkContext = project:
+      if builtins.hasAttr "subprojects" project
+      then
+        lib.lists.flatten (
+          (builtins.map mkContext (builtins.map (mkProject project) project.subprojects))
+          ++ (mkContext (builtins.removeAttrs project ["subprojects"]))
+        )
+      else [
+        {
+          inherit (project) name;
+          value = let
+            name =
+              if builtins.hasAttr "pname" project
+              then project.pname
+              else project.name;
+          in {
+            read = "project:${name}";
+            write = "project:${name}";
+            rc = {
+              neorg_path =
+                if builtins.hasAttr "neorg_path" project
+                then project.neorg_path
+                else "${project.prefix}/${project.name}/index.norg";
+            };
+          };
+        }
+      ];
+    mkProject = project: subproject: let
+      pname =
+        if builtins.hasAttr "pname" project
+        then project.pname
+        else project.name;
+    in
+      if builtins.isString subproject
+      then {
+        name = "${project.name}_${subproject}";
+        pname = "${pname}.${subproject}";
+        neorg_path =
+          if builtins.hasAttr "neorg_path_prefix" project
+          then "${project.neorg_path_prefix}/${subproject}/index.norg"
+          else "${project.prefix}/${project.name}/${subproject}/index.norg";
+      }
+      else if builtins.isAttrs subproject
+      then let
+        name = builtins.elemAt (builtins.attrNames subproject) 0;
+      in {
+        name = "${project.name}_${name}";
+        pname = "${pname}.${name}";
+        prefix = "${project.prefix}/${project.name}";
+        neorg_path_prefix = "${project.prefix}/${project.name}/${name}";
+        subprojects = builtins.elemAt (builtins.attrValues subproject) 0;
+      }
+      else builtins.throw "Subproject not a string or a attrs: ${subproject}";
+
+    context =
+      builtins.listToAttrs (lib.lists.flatten (builtins.map mkContext projects));
+  in {
+    enable = true;
+    colorTheme = ./nord.theme;
+    extraConfig = ''
+      # This include just contains my taskd user credentials
+      include ${nixosConfig.age.secrets.taskserverCredentials.path}
+    '';
+    config = {
+      news.version = "2.6.0";
+      complete.all.tags = true;
+      list.all = {
+        projects = true;
+        tags = true;
+      };
+      regex = true;
+      weekstart = "Monday";
+      uda = {
+        total_active_time = {
+          type = "duration";
+          label = "Total active time";
+        };
+      };
+      alias = {
+        mod = "modify";
+        n = "execute neorg --task";
+        fstart = "execute neorg fstart";
+      };
+      color = true;
+
+      hooks.location = "${config.xdg.configHome}/task/hooks";
+
+      urgency.uda.priority = {
+        H.coefficient = 6.0;
+        M.coefficient = 0;
+        L.coefficient = -1.8;
+      };
+
+      inherit context;
+
+      taskd = {
+        server = "taskserver.vhack.eu:53589";
+        trust = "strict";
+        ca =
+          nixosConfig.age.secrets.taskserverCA.path;
+        key =
+          nixosConfig.age.secrets.taskserverPrivate.path;
+        certificate =
+          nixosConfig.age.secrets.taskserverPublic.path;
+      };
+    };
+  };
+}