blob: ef97e1b5235d5ca13ae0403a7f30c4e61994d740 (
plain) (
tree)
|
|
{
sysLib,
pkgs,
lib,
config,
...
}: let
mkProject = project: subproject:
if builtins.isString subproject
then {
name = "${project.name}.${subproject}";
prefix = null;
}
else let
name = builtins.elemAt (builtins.attrNames subproject) 0;
in {
name = "${project.name}.${name}";
subprojects = builtins.elemAt (builtins.attrValues subproject) 0;
prefix = null;
};
mkProjectName = project:
if builtins.hasAttr "subprojects" project
then
lib.lists.flatten ([project.name]
++ (builtins.map mkProjectName
(builtins.map (mkProject project) project.subprojects)))
else [project.name];
projects = lib.lists.unique (lib.lists.naturalSort (lib.lists.flatten (builtins.map mkProjectName (import ../projects {}))));
projects_newline = builtins.concatStringsSep "\n" projects;
projects_comma = builtins.concatStringsSep ", " projects;
projects_pipe = builtins.concatStringsSep "|" projects;
enforce_policies = sysLib.writeShellScript {
name = "bin";
src = ./scripts/on-add_enforce-policies.sh;
dependencies = with pkgs; [dash jq taskwarrior gnused gnugrep];
replacementStrings = {
PROJECTS_NEWLINE = projects_newline;
PROJECTS_COMMA = projects_comma;
};
};
track_timewarrior = pkgs.stdenv.mkDerivation {
name = "track_timewarrior.taskwarrior-hook";
nativeBuildInputs = [
pkgs.makeWrapper
];
buildInputs = [
pkgs.timewarrior
pkgs.taskwarrior
# TODO: Use a `taskw` package, that actually supports newer python variants <2024-07-13>
(pkgs.python311.withPackages (pythonPackages:
with pythonPackages; [
taskw
]))
];
dontUnpack = true;
installPhase = ''
install -Dm755 ${./scripts/on-modify_track-timewarrior.py} $out/bin/bin
wrapProgram $out/bin/bin \
--prefix PATH : ${lib.makeBinPath [pkgs.taskwarrior pkgs.timewarrior]}
'';
};
track_total_active_time = pkgs.stdenv.mkDerivation {
name = "track_total_active_time.taskwarrior-hook";
nativeBuildInputs = [
pkgs.makeWrapper
];
buildInputs = [
pkgs.taskwarrior
# TODO: Use a `taskw` package, that actually supports newer python variants <2024-07-13>
(pkgs.python311.withPackages (pythonPackages:
with pythonPackages; [
taskw
]))
];
dontUnpack = true;
installPhase = ''
install -Dm755 ${./scripts/on-modify_track-total-active-time.py} $out/bin/bin
wrapProgram $out/bin/bin \
--prefix PATH : ${lib.makeBinPath [pkgs.taskwarrior]}
'';
};
mkSyncGitRepo = type: {
name = "${hookPath}/${type}_sync-git-repo";
value = {
source = "${sysLib.writeShellScript {
name = "bin";
src = ./scripts + "/${type}_sync-git-repo.sh";
dependencies = with pkgs; [dash taskwarrior git];
}}/bin/bin";
};
};
sync_git_repos =
builtins.listToAttrs (builtins.map mkSyncGitRepo ["on-add" "on-modify"]);
hookPath = config.programs.taskwarrior.config.hooks.location;
in {
options.soispha.taskwarrior.projects = lib.mkOption {
type = lib.types.attrs;
};
config = {
soispha.taskwarrior.projects = {
inherit projects_newline projects_comma projects projects_pipe;
};
home.file =
{
"${hookPath}/on-add_enforce-policies".source = "${enforce_policies}/bin/bin";
"${hookPath}/on-modify_track-timewarrior".source = "${track_timewarrior}/bin/bin";
"${hookPath}/on-modify_track-total-active-time".source = "${track_total_active_time}/bin/bin";
}
// sync_git_repos;
};
}
|