From e492daeae3d46bf2cf4de8cde80138f291629d14 Mon Sep 17 00:00:00 2001 From: Mikilio Date: Wed, 10 Apr 2024 18:52:57 +0200 Subject: [PATCH] todoman: init module Adds module to configure todoman in a way that is agnostic with other pimutil projects. --- modules/programs/todoman.nix | 124 +++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 modules/programs/todoman.nix diff --git a/modules/programs/todoman.nix b/modules/programs/todoman.nix new file mode 100644 index 000000000..1fc31fcbc --- /dev/null +++ b/modules/programs/todoman.nix @@ -0,0 +1,124 @@ +{ config, lib, ... }: + +with lib; + +let + + cfg = config.programs.todoman; + +in { + options.todoman = { + enable = lib.mkEnableOption "Enable todoman a standards-based task manager based on iCalendar"; + + glob = mkOption { + type = types.str; + default = "*"; + description = '' + The glob expansion which matches all directories relevant. + ''; + }; + + color = mkOption { + type = types.nullOr (types.enum [ "never" "always" ]); + default = null; + 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. + ''; + }; + + dateformat = mkOption { + type = types.nullOr types.str; + default = null; + 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. + ''; + }; + + 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. + ''; + }; + }; + + 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."; + } + ]; + + home.packages = [ pkgs.todoman ]; + + xdg.configFile."todoman/config.py".text = generators.toINI cfg; + }; +}