summary refs log tree commit diff
path: root/nixos/modules/services/x11/redshift.nix
diff options
context:
space:
mode:
authorMichael Peyton Jones <me@michaelpj.com>2017-10-21 06:14:40 +0100
committerDomen Kožar <domen@enlambda.com>2017-10-21 22:34:14 +0100
commit2ac89a612c90378bb0acb4d9d939bf3f8822da42 (patch)
tree4ded09673bee3028add06269597aaebc8c13b226 /nixos/modules/services/x11/redshift.nix
parentd96b0ac7f78a5c2b676cc2b5f36a417021ad9188 (diff)
downloadnixpkgs-2ac89a612c90378bb0acb4d9d939bf3f8822da42.tar
nixpkgs-2ac89a612c90378bb0acb4d9d939bf3f8822da42.tar.gz
nixpkgs-2ac89a612c90378bb0acb4d9d939bf3f8822da42.tar.bz2
nixpkgs-2ac89a612c90378bb0acb4d9d939bf3f8822da42.tar.lz
nixpkgs-2ac89a612c90378bb0acb4d9d939bf3f8822da42.tar.xz
nixpkgs-2ac89a612c90378bb0acb4d9d939bf3f8822da42.tar.zst
nixpkgs-2ac89a612c90378bb0acb4d9d939bf3f8822da42.zip
redshift: allow using geoclue2 loation provider
Diffstat (limited to 'nixos/modules/services/x11/redshift.nix')
-rw-r--r--nixos/modules/services/x11/redshift.nix44
1 files changed, 38 insertions, 6 deletions
diff --git a/nixos/modules/services/x11/redshift.nix b/nixos/modules/services/x11/redshift.nix
index 992709ed000..30d853841ea 100644
--- a/nixos/modules/services/x11/redshift.nix
+++ b/nixos/modules/services/x11/redshift.nix
@@ -19,18 +19,31 @@ in {
     };
 
     latitude = mkOption {
-      type = types.str;
+      type = types.nullOr types.str;
+      default = null;
       description = ''
         Your current latitude, between
-        <literal>-90.0</literal> and <literal>90.0</literal>.
+        <literal>-90.0</literal> and <literal>90.0</literal>. Must be provided
+        along with longitude.
       '';
     };
 
     longitude = mkOption {
-      type = types.str;
+      type = types.nullOr types.str;
+      default = null;
       description = ''
         Your current longitude, between
-        between <literal>-180.0</literal> and <literal>180.0</literal>.
+        between <literal>-180.0</literal> and <literal>180.0</literal>. 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
+        <literal>manual</literal> you must also provide latitude/longitude.
       '';
     };
 
@@ -93,14 +106,33 @@ in {
   };
 
   config = mkIf cfg.enable {
-    systemd.user.services.redshift = {
+    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.";
+      }
+    ];
+
+    services.geoclue2.enable = mkIf (cfg.provider == "geoclue2") true;
+
+    systemd.user.services.redshift = 
+    let
+      providerString = 
+        if cfg.provider == "manual"
+        then "${cfg.latitude}:${cfg.longitude}"
+        else cfg.provider;
+    in
+    {
       description = "Redshift colour temperature adjuster";
       wantedBy = [ "graphical-session.target" ];
       partOf = [ "graphical-session.target" ];
       serviceConfig = {
         ExecStart = ''
           ${cfg.package}/bin/redshift \
-            -l ${cfg.latitude}:${cfg.longitude} \
+            -l ${providerString} \
             -t ${toString cfg.temperature.day}:${toString cfg.temperature.night} \
             -b ${toString cfg.brightness.day}:${toString cfg.brightness.night} \
             ${lib.strings.concatStringsSep " " cfg.extraOptions}