From 64d6a66324618c98643968c1457b2e87d5d8a7b0 Mon Sep 17 00:00:00 2001 From: Robert Helgesson Date: Fri, 20 Jan 2017 19:26:52 +0100 Subject: [PATCH] redshift: add module This module is adapted from the Nixpkgs version. --- modules/default.nix | 1 + modules/services/redshift.nix | 124 ++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 modules/services/redshift.nix diff --git a/modules/default.nix b/modules/default.nix index a95870b5..93ce01ad 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -25,6 +25,7 @@ let ./services/keepassx.nix ./services/network-manager-applet.nix ./services/random-background.nix + ./services/redshift.nix ./services/taffybar.nix ./services/tahoe-lafs.nix ./services/udiskie.nix diff --git a/modules/services/redshift.nix b/modules/services/redshift.nix new file mode 100644 index 00000000..f8978613 --- /dev/null +++ b/modules/services/redshift.nix @@ -0,0 +1,124 @@ +# Adapted from Nixpkgs. + +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.services.redshift; + +in { + + options.services.redshift = { + enable = mkOption { + type = types.bool; + default = false; + example = true; + description = '' + Enable Redshift to change your screen's colour temperature depending on + the time of day. + ''; + }; + + latitude = mkOption { + type = types.str; + description = '' + Your current latitude, between + -90.0 and 90.0. + ''; + }; + + longitude = mkOption { + type = types.str; + description = '' + Your current longitude, between + between -180.0 and 180.0. + ''; + }; + + temperature = { + day = mkOption { + type = types.int; + default = 5500; + description = '' + Colour temperature to use during the day, between + 1000 and 25000 K. + ''; + }; + night = mkOption { + type = types.int; + default = 3700; + description = '' + Colour temperature to use at night, between + 1000 and 25000 K. + ''; + }; + }; + + brightness = { + day = mkOption { + type = types.str; + default = "1"; + description = '' + Screen brightness to apply during the day, + between 0.1 and 1.0. + ''; + }; + night = mkOption { + type = types.str; + default = "1"; + description = '' + Screen brightness to apply during the night, + between 0.1 and 1.0. + ''; + }; + }; + + package = mkOption { + type = types.package; + default = pkgs.redshift; + defaultText = "pkgs.redshift"; + description = '' + redshift derivation to use. + ''; + }; + + extraOptions = mkOption { + type = types.listOf types.str; + default = []; + example = [ "-v" "-m randr" ]; + description = '' + Additional command-line arguments to pass to + redshift. + ''; + }; + }; + + config = mkIf cfg.enable { + systemd.user.services.redshift = { + Unit = { + Description = "Redshift colour temperature adjuster"; + }; + + Install = { + WantedBy = [ "graphical-session.target" ]; + }; + + Service = { + ExecStart = + let + args = [ + "-l ${cfg.latitude}:${cfg.longitude}" + "-t ${toString cfg.temperature.day}:${toString cfg.temperature.night}" + "-b ${toString cfg.brightness.day}:${toString cfg.brightness.night}" + ] ++ cfg.extraOptions; + in + "${cfg.package}/bin/redshift ${concatStringsSep " " args}"; + RestartSec = 3; + Restart = "always"; + }; + }; + }; + +}