diff --git a/nixos/modules/config/timezone.nix b/nixos/modules/config/locale.nix
similarity index 62%
rename from nixos/modules/config/timezone.nix
rename to nixos/modules/config/locale.nix
index b15948f6e2e..6f056588187 100644
--- a/nixos/modules/config/timezone.nix
+++ b/nixos/modules/config/locale.nix
@@ -9,6 +9,8 @@ let
timezone = types.nullOr (types.addCheck types.str nospace)
// { description = "null or string without spaces"; };
+ lcfg = config.location;
+
in
{
@@ -37,12 +39,45 @@ in
};
};
+
+ location = {
+
+ latitude = mkOption {
+ type = types.float;
+ description = ''
+ Your current latitude, between
+ -90.0 and 90.0. Must be provided
+ along with longitude.
+ '';
+ };
+
+ longitude = mkOption {
+ type = types.float;
+ description = ''
+ 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 = ''
+ 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;
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 8c6bc47df25..8eb2ebafb7d 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -20,6 +20,7 @@
./config/iproute2.nix
./config/krb5/default.nix
./config/ldap.nix
+ ./config/locale.nix
./config/malloc.nix
./config/networking.nix
./config/no-x-libs.nix
@@ -33,7 +34,6 @@
./config/system-environment.nix
./config/system-path.nix
./config/terminfo.nix
- ./config/timezone.nix
./config/unix-odbc-drivers.nix
./config/users-groups.nix
./config/vpnc.nix
diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix
index 4ae64222274..6228c95ae91 100644
--- a/nixos/modules/rename.nix
+++ b/nixos/modules/rename.nix
@@ -257,6 +257,20 @@ with lib;
(mkRenamedOptionModule [ "networking" "extraResolvconfConf" ] [ "networking" "resolvconf" "extraConfig" ])
(mkRenamedOptionModule [ "networking" "resolvconfOptions" ] [ "networking" "resolvconf" "extraOptions" ])
+ # Redshift
+ (mkChangedOptionModule [ "services" "redshift" "latitude" ] [ "location" "latitude" ]
+ (config:
+ let value = getAttrFromPath [ "services" "redshift" "latitude" ] config;
+ in if value == null then
+ throw "services.redshift.latitude is set to null, you can remove this"
+ else builtins.fromJSON value))
+ (mkChangedOptionModule [ "services" "redshift" "longitude" ] [ "location" "longitude" ]
+ (config:
+ let value = getAttrFromPath [ "services" "redshift" "longitude" ] config;
+ in if value == null then
+ throw "services.redshift.longitude is set to null, you can remove this"
+ else builtins.fromJSON value))
+
] ++ (flip map [ "blackboxExporter" "collectdExporter" "fritzboxExporter"
"jsonExporter" "minioExporter" "nginxExporter" "nodeExporter"
"snmpExporter" "unifiExporter" "varnishExporter" ]
diff --git a/nixos/modules/services/x11/redshift.nix b/nixos/modules/services/x11/redshift.nix
index 4345a334808..55f8f75021b 100644
--- a/nixos/modules/services/x11/redshift.nix
+++ b/nixos/modules/services/x11/redshift.nix
@@ -5,6 +5,7 @@ with lib;
let
cfg = config.services.redshift;
+ lcfg = config.location;
in {
@@ -18,35 +19,6 @@ in {
'';
};
- latitude = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = ''
- Your current latitude, between
- -90.0 and 90.0. Must be provided
- along with longitude.
- '';
- };
-
- longitude = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = ''
- 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 = ''
- The location provider to use for determining your location. If set to
- manual you must also provide latitude/longitude.
- '';
- };
-
temperature = {
day = mkOption {
type = types.int;
@@ -106,33 +78,19 @@ in {
};
config = mkIf cfg.enable {
- assertions = [
- {
- assertion =
- if cfg.provider == "manual"
- then (cfg.latitude != null && cfg.longitude != null)
- else (cfg.latitude == null && cfg.longitude == null);
- message = "Latitude and longitude must be provided together, and with provider set to null.";
- }
- ];
-
# needed so that .desktop files are installed, which geoclue cares about
environment.systemPackages = [ cfg.package ];
- services.geoclue2 = mkIf (cfg.provider == "geoclue2") {
- enable = true;
- appConfig."redshift" = {
- isAllowed = true;
- isSystem = true;
- };
+ services.geoclue2.appConfig."redshift" = {
+ isAllowed = true;
+ isSystem = true;
};
- systemd.user.services.redshift =
+ systemd.user.services.redshift =
let
- providerString =
- if cfg.provider == "manual"
- then "${cfg.latitude}:${cfg.longitude}"
- else cfg.provider;
+ providerString = if lcfg.provider == "manual"
+ then "${toString lcfg.latitude}:${toString lcfg.longitude}"
+ else lcfg.provider;
in
{
description = "Redshift colour temperature adjuster";