-
-
Notifications
You must be signed in to change notification settings - Fork 14.5k
/
locale.nix
93 lines (70 loc) · 2.42 KB
/
locale.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
{ config, lib, pkgs, ... }:
with lib;
let
tzdir = "${pkgs.tzdata}/share/zoneinfo";
nospace = str: filter (c: c == " ") (stringToCharacters str) == [];
timezone = types.nullOr (types.addCheck types.str nospace)
// { description = "null or string without spaces"; };
lcfg = config.location;
in
{
options = {
time = {
timeZone = mkOption {
default = null;
type = timezone;
example = "America/New_York";
description = lib.mdDoc ''
The time zone used when displaying times and dates. See <https://en.wikipedia.org/wiki/List_of_tz_database_time_zones>
for a comprehensive list of possible values for this setting.
If null, the timezone will default to UTC and can be set imperatively
using timedatectl.
'';
};
hardwareClockInLocalTime = mkOption {
default = false;
type = types.bool;
description = lib.mdDoc "If set, keep the hardware clock in local time instead of UTC.";
};
};
location = {
latitude = mkOption {
type = types.float;
description = lib.mdDoc ''
Your current latitude, between
`-90.0` and `90.0`. Must be provided
along with longitude.
'';
};
longitude = mkOption {
type = types.float;
description = lib.mdDoc ''
Your current longitude, between
between `-180.0` and `180.0`. Must be
provided along with latitude.
'';
};
provider = mkOption {
type = types.enum [ "manual" "geoclue2" ];
default = "manual";
description = lib.mdDoc ''
The location provider to use for determining your location. If set to
`manual` you must also provide latitude/longitude.
'';
};
};
};
config = {
environment.sessionVariables.TZDIR = "/etc/zoneinfo";
services.geoclue2.enable = mkIf (lcfg.provider == "geoclue2") true;
# This way services are restarted when tzdata changes.
systemd.globalEnvironment.TZDIR = tzdir;
systemd.services.systemd-timedated.environment = lib.optionalAttrs (config.time.timeZone != null) { NIXOS_STATIC_TIMEZONE = "1"; };
environment.etc = {
zoneinfo.source = tzdir;
} // lib.optionalAttrs (config.time.timeZone != null) {
localtime.source = "/etc/zoneinfo/${config.time.timeZone}";
localtime.mode = "direct-symlink";
};
};
}