khal: make locale configurable via option 'locale'

This commit is contained in:
Johannes Rosenberger 2019-11-02 16:28:48 +01:00 committed by Robert Helgesson
parent faabf67f93
commit 3ff5f6073f
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89

View file

@ -20,9 +20,10 @@ let
findSingle (a: a.primary) null null
(mapAttrsToList (n: v: v // {name= n;}) khalAccounts);
toKeyValueListIfDefined = attrs:
mapAttrsToList (n: v: "${n} = ${toString v}")
(filterAttrs (_: v: !isNull v) attrs);
definedAttrs = filterAttrs (_: v: !isNull v);
toKeyValueIfDefined = attrs:
generators.toKeyValue {} (definedAttrs attrs);
genCalendarStr = name: value:
concatStringsSep "\n" (
@ -31,15 +32,123 @@ let
"path = ${value.local.path + "/" + (optionalString (value.khal.type == "discover") value.khal.glob)}"
]
++ optional (value.khal.readOnly) "readonly = True"
++ toKeyValueListIfDefined (getAttrs [ "type" "color" "priority" ] value.khal)
++ [ (toKeyValueIfDefined (getAttrs [ "type" "color" "priority" ] value.khal)) ]
++ ["\n"]
);
localeFormatOptions = let T = lib.types; in mapAttrs (n: v: v // {
description = v.description + ''
Format strings are for python 'strftime', similarly to man 3 strftime.
'';
}) {
dateformat = {
type = T.str;
default = "%x";
description = ''
khal will display and understand all dates in this format.
'';
};
timeformat = {
type = T.str;
default = "%X";
description = ''
khal will display and understand all times in this format.
'';
};
datetimeformat = {
type = T.str;
default = "%c";
description = ''
khal will display and understand all datetimes in this format.
'';
};
longdateformat = {
type = T.str;
default = "%x";
description = ''
khal will display and understand all dates in this format.
It should contain a year (e.g. %Y).
'';
};
longdatetimeformat = {
type = T.str;
default = "%c";
description = ''
khal will display and understand all datetimes in this format.
It should contain a year (e.g. %Y).
'';
};
};
localeOptions = let T = lib.types; in localeFormatOptions // {
unicode_symbols = {
type = T.bool;
default = true;
description = ''
By default khal uses some unicode symbols (as in non-ascii) as
indicators for things like repeating events.
If your font, encoding etc. does not support those symbols, set this
to false (this will enable ascii based replacements).
'';
};
default_timezone = {
type = T.nullOr T.str;
default = null;
description = ''
Default for new events or if khal does not understand the timezone
in an ical file.
If 'null', the timezone of your computer will be used.
'';
};
local_timezone = {
type = T.nullOr T.str;
default = null;
description = ''
khal will show all times in this timezone.
If 'null', the timezone of your computer will be used.
'';
};
firstweekday = {
type = T.ints.between 0 6;
default = 0;
description = ''
the first day of the week, where Monday is 0 and Sunday is 6
'';
};
weeknumbers = {
type = T.enum [ "off" "left" "right" ];
default = "off";
description = ''
Enable weeknumbers in calendar and interactive (ikhal) mode.
As those are iso weeknumbers, they only work properly if firstweekday
is set to 0.
'';
};
};
in
{
options.programs.khal = {
enable = mkEnableOption "khal, a CLI calendar application";
locale = mkOption {
type = lib.types.submodule {
options = mapAttrs (n: v: mkOption v) localeOptions;
};
description = ''
khal locale settings.
'';
};
};
config = mkIf cfg.enable {
@ -53,17 +162,11 @@ in
++
[
(generators.toINI {} {
locale = definedAttrs (cfg.locale // { _module = null; });
default = optionalAttrs (!isNull primaryAccount) {
default_calendar = if isNull primaryAccount.primaryCollection then primaryAccount.name else primaryAccount.primaryCollection;
};
locale = {
timeformat = "%H:%M";
dateformat = "%Y-%m-%d";
longdateformat = "%Y-%m-%d";
datetimeformat = "%Y-%m-%d %H:%M";
longdatetimeformat = "%Y-%m-%d %H:%M";
weeknumbers = "right";
};
})
]
);