mirror of
https://github.com/nix-community/home-manager
synced 2024-11-24 03:59:46 +01:00
khal: make locale configurable via option 'locale'
This commit is contained in:
parent
faabf67f93
commit
3ff5f6073f
1 changed files with 115 additions and 12 deletions
|
@ -20,9 +20,10 @@ let
|
||||||
findSingle (a: a.primary) null null
|
findSingle (a: a.primary) null null
|
||||||
(mapAttrsToList (n: v: v // {name= n;}) khalAccounts);
|
(mapAttrsToList (n: v: v // {name= n;}) khalAccounts);
|
||||||
|
|
||||||
toKeyValueListIfDefined = attrs:
|
definedAttrs = filterAttrs (_: v: !isNull v);
|
||||||
mapAttrsToList (n: v: "${n} = ${toString v}")
|
|
||||||
(filterAttrs (_: v: !isNull v) attrs);
|
toKeyValueIfDefined = attrs:
|
||||||
|
generators.toKeyValue {} (definedAttrs attrs);
|
||||||
|
|
||||||
genCalendarStr = name: value:
|
genCalendarStr = name: value:
|
||||||
concatStringsSep "\n" (
|
concatStringsSep "\n" (
|
||||||
|
@ -31,15 +32,123 @@ let
|
||||||
"path = ${value.local.path + "/" + (optionalString (value.khal.type == "discover") value.khal.glob)}"
|
"path = ${value.local.path + "/" + (optionalString (value.khal.type == "discover") value.khal.glob)}"
|
||||||
]
|
]
|
||||||
++ optional (value.khal.readOnly) "readonly = True"
|
++ optional (value.khal.readOnly) "readonly = True"
|
||||||
++ toKeyValueListIfDefined (getAttrs [ "type" "color" "priority" ] value.khal)
|
++ [ (toKeyValueIfDefined (getAttrs [ "type" "color" "priority" ] value.khal)) ]
|
||||||
++ ["\n"]
|
++ ["\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
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
options.programs.khal = {
|
options.programs.khal = {
|
||||||
enable = mkEnableOption "khal, a CLI calendar application";
|
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 {
|
config = mkIf cfg.enable {
|
||||||
|
@ -53,17 +162,11 @@ in
|
||||||
++
|
++
|
||||||
[
|
[
|
||||||
(generators.toINI {} {
|
(generators.toINI {} {
|
||||||
|
locale = definedAttrs (cfg.locale // { _module = null; });
|
||||||
|
|
||||||
default = optionalAttrs (!isNull primaryAccount) {
|
default = optionalAttrs (!isNull primaryAccount) {
|
||||||
default_calendar = if isNull primaryAccount.primaryCollection then primaryAccount.name else primaryAccount.primaryCollection;
|
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";
|
|
||||||
};
|
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue