diff --git a/modules/default.nix b/modules/default.nix index a95870b50..93ce01ad8 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 000000000..f89786134 --- /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"; + }; + }; + }; + +}