diff --git a/modules/programs/todoman.nix b/modules/programs/todoman.nix index 2221641bf..11f8f1238 100644 --- a/modules/programs/todoman.nix +++ b/modules/programs/todoman.nix @@ -5,6 +5,7 @@ with lib; let cfg = config.programs.todoman; + iniFormat = pkgs.formats.ini { }; in { @@ -21,108 +22,55 @@ in { The glob expansion which matches all directories relevant. ''; }; - - color = mkOption { - type = types.nullOr (types.enum [ "never" "always" ]); - default = null; + settings = mkOption { + type = iniFormat.type; + default = { }; description = '' - By default todoman will disable colored output if stdout is not a TTY. - Set to never to disable colored output entirely, or always to enable it regardless. + Configuration for todoman + + See [docs](`https://todoman.readthedocs.io/en/stable/man.html#id5`). + for the full list of options. + ''; + example = literalExpression '' + { + date_format = "%Y-%m-%d"; + time_format = "%H:%M"; + default_list = "Personal"; + default_due = 48; + }; ''; }; - dateformat = mkOption { - type = types.nullOr types.str; - default = null; + extraConfig = mkOption { + type = types.lines; + default = ""; description = '' - The date format used both for displaying dates, and parsing input - dates. If this option is not specified the system locale’s is used. - ''; - }; + Additional lines for configuration of todoman - defaultDue = mkOption { - type = types.nullOr types.int; - default = null; - description = '' - The default difference (in hours) between new todo’s due date and - creation date. If not specified, the value is 24. If set to 0, - the due date for new todos will not be set. - ''; - }; - - defaultList = mkOption { - type = types.nullOr types.str; - default = null; - description = '' - The default list for adding a todo. If you do not specify this option, - you must use the `--list` / `-l` option every time you add a todo. - ''; - }; - - defaultPriority = mkOption { - type = types.nullOr types.int; - default = null; - description = '' - The default priority of a task on creation. Highest priority is 1, - lowest priority is 10, and 0 means no priority at all. - ''; - }; - - dtSeparator = mkOption { - type = types.nullOr types.str; - default = null; - description = '' - The string used to separate date and time when displaying and parsing. - ''; - }; - - humanize = mkOption { - type = types.bool; - default = false; - description = '' - If set to true, datetimes will be printed in human friendly formats like - “tomorrow”, “in one hour”, “3 weeks ago”, etc. - ''; - }; - - startable = mkOption { - type = types.bool; - default = false; - description = '' - If set to true, only show todos which are currently startable; - these are todos which have a start date today, or some day in the past. - Todos with no start date are always considered current. Incomplete todos - (eg: partially-complete) are also included. - ''; - }; - - timeformat = mkOption { - type = types.nullOr types.str; - default = null; - description = '' - The date format used both for displaying times, and parsing input times. - If this option is not specified the system locale’s is used. + See [docs](`https://todoman.readthedocs.io/en/stable/man.html#id5`). + for the full list of options. ''; }; }; config = mkIf cfg.enable { - assertions = [ - { - assertion = accounts.calendar ? basePath; - message = '' - A base directory for calendars must be specified via - `accounts.calendar.basePath` to generate config for todoman - ''; - } - { - assertion = 0 <= cfg.defaultPriority && cfg.defaultPriority <= 10; - message = "Todoman's `defaultPriority` must be between 0 and 10."; - } - ]; + assertions = [{ + assertion = 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 = generators.toINI cfg; + xdg.configFile."todoman/config.py" = + mkIf (cfg.settings != { } && cfg.extraConfig != "") { + text = lib.concatLines [ + ''path = "~/${config.accounts.calendar.basePath}${cfg.glob}"'' + (generators.toINI { } cfg.settings) + cfg.extraConfig + ]; + }; }; }