mirror of
https://github.com/nix-community/home-manager
synced 2024-12-25 03:09:47 +01:00
todoman: use ini format for settings
Use ini format to generate config
This commit is contained in:
parent
0055eeafb6
commit
296e5d371e
1 changed files with 37 additions and 89 deletions
|
@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue