From e361373b5f5003c2806146f97c74f0c9e9d35ef3 Mon Sep 17 00:00:00 2001 From: x10an14 Date: Thu, 7 Apr 2022 19:29:53 +0200 Subject: [PATCH] taskwarrior: make .taskrc writable (#2761) This is achieved by generating the Home Manager configuration file as `~/.config/task/home-manager-taskrc`, and including that file into ~/.config/task/taskrc. Fixes #2360 Co-authored-by: mainrs <5113257+mainrs@users.noreply.github.com> Co-authored-by: Nicolas Berbiche --- modules/programs/taskwarrior.nix | 24 ++++++++++++++++++- .../programs/taskwarrior/taskwarrior.nix | 6 ++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/modules/programs/taskwarrior.nix b/modules/programs/taskwarrior.nix index 441313252..4697b9c1a 100644 --- a/modules/programs/taskwarrior.nix +++ b/modules/programs/taskwarrior.nix @@ -24,6 +24,8 @@ let formatPair = key: value: if isAttrs value then formatSet key value else formatLine key value; + homeConf = "${config.xdg.configHome}/task/home-manager-taskrc"; + userConf = "${config.xdg.configHome}/task/taskrc"; in { options = { programs.taskwarrior = { @@ -88,7 +90,7 @@ in { config = mkIf cfg.enable { home.packages = [ pkgs.taskwarrior ]; - xdg.configFile."task/taskrc".text = '' + home.file."${homeConf}".text = '' data.location=${cfg.dataLocation} ${optionalString (cfg.colorTheme != null) (if isString cfg.colorTheme then "include ${cfg.colorTheme}.theme" @@ -99,5 +101,25 @@ in { ${cfg.extraConfig} ''; + + home.activation.regenDotTaskRc = hm.dag.entryAfter [ "writeBoundary" ] '' + $VERBOSE_ECHO "Ensuring generated taskwarrior config included in taskrc" + + if [[ ! -s "${userConf}" ]]; then + # Ensure file's existence + if [[ -v DRY_RUN ]]; then + $DRY_RUN_CMD echo "include ${homeConf}" ">" "${userConf}" + else + echo "include ${homeConf}" > "${userConf}" + fi + elif ! ${pkgs.gnugrep}/bin/grep -qF "include ${homeConf}" ${ + escapeShellArg userConf + }; then + # Add include statement for home-manager generated config + $DRY_RUN_CMD ${pkgs.gnused}/bin/sed -i '1i include ${homeConf}' ${ + escapeShellArg userConf + } + fi + ''; }; } diff --git a/tests/modules/programs/taskwarrior/taskwarrior.nix b/tests/modules/programs/taskwarrior/taskwarrior.nix index 98d0a3544..f21198f57 100644 --- a/tests/modules/programs/taskwarrior/taskwarrior.nix +++ b/tests/modules/programs/taskwarrior/taskwarrior.nix @@ -21,9 +21,9 @@ with lib; test.stubs.taskwarrior = { }; nmt.script = '' - assertFileExists home-files/.config/task/taskrc - assertFileContent home-files/.config/task/taskrc ${ - pkgs.writeText "taskwarrior.expected" '' + assertFileExists home-files/.config/task/home-manager-taskrc + assertFileContent home-files/.config/task/home-manager-taskrc ${ + pkgs.writeText "taskwarrior.home-conf.expected" '' data.location=/some/data/location include dark-violets-256.theme