Skip to content

Commit

Permalink
todoman: add todoman module (#5252)
Browse files Browse the repository at this point in the history
* todoman: add todoman module

Adds Mikilio as maintainer for new module for todoman a standards-based
task manager based on iCalendar

Apply suggestions from code review

Co-authored-by: Robert Helgesson <[email protected]>

Update modules/programs/todoman.nix

Co-authored-by: Robert Helgesson <[email protected]>

* fix: correct config name

* chore: add test

---------

Co-authored-by: Robert Helgesson <[email protected]>
  • Loading branch information
Mikilio and rycee authored Jan 9, 2025
1 parent 01f40d5 commit d4aebb9
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 0 deletions.
6 changes: 6 additions & 0 deletions modules/lib/maintainers.nix
Original file line number Diff line number Diff line change
Expand Up @@ -478,6 +478,12 @@
github = "mainrs";
githubId = 5113257;
};
mikilio = {
name = "mikilio";
email = "[email protected]";
github = "mikilio";
githubId = 86004375;
};
kmaasrud = {
name = "Knut Magnus Aasrud";
email = "[email protected]";
Expand Down
1 change: 1 addition & 0 deletions modules/modules.nix
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ let
./programs/tmate.nix
./programs/tmux.nix
./programs/tofi.nix
./programs/todoman.nix
./programs/topgrade.nix
./programs/translate-shell.nix
./programs/urxvt.nix
Expand Down
62 changes: 62 additions & 0 deletions modules/programs/todoman.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
{ config, lib, pkgs, ... }:

with lib;

let

cfg = config.programs.todoman;

format = pkgs.formats.keyValue { };

in {

meta.maintainers = [ hm.maintainers.mikilio ];

options.programs.todoman = {
enable = lib.mkEnableOption "todoman";

glob = mkOption {
type = types.str;
default = "*";
description = ''
The glob expansion which matches all directories relevant.
'';
example = "*/*";
};

extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Text for configuration of todoman.
The syntax is Python.
See [docs](`https://todoman.readthedocs.io/en/stable/man.html#id5`).
for the full list of options.
'';
example = ''
date_format = "%Y-%m-%d";
time_format = "%H:%M";
default_list = "Personal";
default_due = 48;
'';
};
};

config = mkIf cfg.enable {
assertions = [{
assertion = config.accounts.calendar ? basePath;
message = ''
A base directory for calendars must be specified via
`accounts.calendar.basePath` to generate config for todoman
'';
}];

home.packages = [ pkgs.todoman ];

xdg.configFile."todoman/config.py".text = lib.concatLines [
''path = "${config.accounts.calendar.basePath}/${cfg.glob}"''
cfg.extraConfig
];
};
}
21 changes: 21 additions & 0 deletions tests/modules/programs/todoman/config.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
programs.todoman = {
enable = true;
glob = "*/*";
extraConfig = ''
date_format = "%d.%m.%Y"
default_list = "test"
'';
};

accounts.calendar.basePath = "base/path/calendar";

test.stubs = { todoman = { }; };

nmt.script = ''
configFile=home-files/.config/todoman/config.py
assertFileExists $configFile
assertFileContent $configFile ${./todoman-config-expected}
'';
}

1 change: 1 addition & 0 deletions tests/modules/programs/todoman/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{ todoman-config = ./config.nix; }
3 changes: 3 additions & 0 deletions tests/modules/programs/todoman/todoman-config-expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
path = "/home/hm-user/base/path/calendar/*/*"
date_format = "%d.%m.%Y"
default_list = "test"

0 comments on commit d4aebb9

Please sign in to comment.