29027fd1e1
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.
69 lines
2 KiB
Nix
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";
|
|
};
|
|
};
|
|
}
|