nixpkgs/nixos/modules/services/x11/redshift.nix
Eelco Dolstra 29027fd1e1 Rewrite ‘with pkgs.lib’ -> ‘with lib’
Using pkgs.lib on the spine of module evaluation is problematic
because the pkgs argument depends on the result of module
evaluation. To prevent an infinite recursion, pkgs and some of the
modules are evaluated twice, which is inefficient. Using ‘with lib’
prevents this problem.
2014-04-14 16:26:48 +02:00

69 lines
2 KiB
Nix

{ 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";
};
services.redshift.latitude = mkOption {
description = "Your current latitude";
type = types.uniq types.string;
};
services.redshift.longitude = mkOption {
description = "Your current longitude";
type = types.uniq types.string;
};
services.redshift.temperature = {
day = mkOption {
description = "Colour temperature to use during day time";
default = 5500;
type = types.uniq types.int;
};
night = mkOption {
description = "Colour temperature to use during night time";
default = 3700;
type = types.uniq types.int;
};
};
services.redshift.brightness = {
day = mkOption {
description = "Screen brightness to apply during the day (between 0.1 and 1.0)";
default = "1";
type = types.uniq types.string;
};
night = mkOption {
description = "Screen brightness to apply during the night (between 0.1 and 1.0)";
default = "1";
type = types.uniq types.string;
};
};
};
config = mkIf cfg.enable {
systemd.services.redshift = {
description = "Redshift colour temperature adjuster";
requires = [ "display-manager.service" ];
after = [ "display-manager.service" ];
wantedBy = [ "graphical.target" ];
serviceConfig.ExecStart = ''
${pkgs.redshift}/bin/redshift \
-l ${cfg.latitude}:${cfg.longitude} \
-t ${toString cfg.temperature.day}:${toString cfg.temperature.night} \
-b ${toString cfg.brightness.day}:${toString cfg.brightness.night}
'';
environment = { DISPLAY = ":0"; };
serviceConfig.Restart = "always";
};
};
}