1
0
Fork 0
mirror of https://github.com/nix-community/home-manager synced 2024-11-11 05:39:44 +01:00
home-manager/modules/programs/todoman.nix

125 lines
3.5 KiB
Nix
Raw Normal View History

{ 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 locales is used.
'';
};
defaultDue = mkOption {
type = types.nullOr types.int;
default = null;
description = ''
The default difference (in hours) between new todos 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 locales 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;
};
}