1
0
Fork 0
nixos-config/home-manager/roles/taskwarrior.nix
2022-03-08 05:53:07 +01:00

101 lines
3.3 KiB
Nix

{
pkgs,
config,
...
}: {
home.packages = [pkgs.taskwarrior-git];
services.taskwarrior-sync = {
enable = true;
frequency = "*:0/1";
};
systemd.user.services.watch-tasks = {
Unit.Description = "Watch tasks for changes and trigger sync";
Service = {
ExecStart = toString (
pkgs.writeShellScript "watch-vdir" ''
while ${pkgs.coreutils}/bin/sleep 1s; do
${pkgs.taskwarrior}/bin/task sync
${pkgs.inotify-tools}/bin/inotifywait -e move,create,delete,modify -r ${config.home.homeDirectory}/.task
done
''
);
};
Install.WantedBy = ["default.target"];
};
home.file = {
"add-kassandra-notification" = {
target = ".task/hooks/on-add.kassandra-notification";
executable = true;
text = ''
#!${pkgs.bash}/bin/bash
${pkgs.coreutils}/bin/tee >(${pkgs.netcat}/bin/nc 127.0.0.1 6545)
'';
};
"modify-kassandra-notification" = {
target = ".task/hooks/on-modify.kassandra-notification";
executable = true;
text = ''
#!${pkgs.bash}/bin/bash
${pkgs.coreutils}/bin/tail -n 1 | ${pkgs.coreutils}/bin/tee >(${pkgs.netcat}/bin/nc 127.0.0.1 6545)
'';
};
"modify-done-habitica-points" = {
target = ".task/hooks/on-modify.habitica-points";
executable = true;
source = "${
pkgs.writeHaskellScript
{
name = "habitica-points";
bins = [pkgs.curl pkgs.jq pkgs.libnotify];
imports = ["Data.Aeson"];
} ''
data Task = Task { status :: Text } deriving (Generic, FromJSON)
main = do
oldTask <- getLine
newTask <- getLine
let oldStatus = maybe "unknown" status (decode (encodeUtf8 oldTask))
newStatus = maybe "unknown" status (decode (encodeUtf8 newTask))
when (oldStatus /= "completed" && newStatus == "completed") $ do
result :: String <- curl "-XPOST" "-H" "x-api-user: dbd97aba-8b6b-4649-9dd4-dad284333925" "-H" "x-api-key: ${pkgs.privateValue "" "habitica-token"}" "https://habitica.com/api/v3/tasks/6e95cccd-06e1-466c-b871-643dff31423c/score/up" |> jq "-c" ".data._tmp" |> captureTrim <&> decodeUtf8
notify_send "Task Completed!" result
putTextLn newTask
''
}/bin/habitica-points";
};
};
programs.taskwarrior = {
enable = true;
dataLocation = "${config.home.homeDirectory}/.task";
config = {
taskd = {
certificate = pkgs.privatePath "taskwarrior/public.cert";
credentials = pkgs.privateValue "" "taskwarrior/credentials";
ca = pkgs.privatePath "taskwarrior/ca.cert";
key = pkgs.privatePath "taskwarrior/private.key";
server = "hera.m-0.eu:53589";
};
};
extraConfig = ''
alias.inbox=+PENDING -TAGGED limit:1
alias.inboxall=+PENDING -TAGGED
verbose=blank,header,footnote,label,new-id,affected,edit,special,sync
nag=
uda.partof.type=string
uda.partof.label=Parent task
uda.generated.type=string
uda.gen_name.type=string
uda.gen_name.label=Generator name
uda.gen_id.type=string
uda.gen_id.label=Generator id
uda.gen_orphan.type=string
uda.gen_orphan.label=Generated orphan behavior
uda.listposition.type=numeric
'';
};
}