77 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.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.str;
 | 
						|
    };
 | 
						|
 | 
						|
    services.redshift.longitude = mkOption {
 | 
						|
      description = "Your current longitude";
 | 
						|
      type = types.str;
 | 
						|
    };
 | 
						|
 | 
						|
    services.redshift.temperature = {
 | 
						|
      day = mkOption {
 | 
						|
        description = "Colour temperature to use during day time";
 | 
						|
        default = 5500;
 | 
						|
        type = types.int;
 | 
						|
      };
 | 
						|
      night = mkOption {
 | 
						|
        description = "Colour temperature to use during night time";
 | 
						|
        default = 3700;
 | 
						|
        type = 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.str;
 | 
						|
      };
 | 
						|
      night = mkOption {
 | 
						|
        description = "Screen brightness to apply during the night (between 0.1 and 1.0)";
 | 
						|
        default = "1";
 | 
						|
        type = types.str;
 | 
						|
      };
 | 
						|
    };
 | 
						|
 | 
						|
    services.redshift.extraOptions = mkOption {
 | 
						|
      type = types.listOf types.str;
 | 
						|
      default = [];
 | 
						|
      example = [ "-v" "-m randr" ];
 | 
						|
      description = "Additional command-line arguments to pass to the redshift(1) command";
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  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} \
 | 
						|
          ${lib.strings.concatStringsSep " " cfg.extraOptions}
 | 
						|
      '';
 | 
						|
      environment = { DISPLAY = ":0"; };
 | 
						|
      serviceConfig.Restart = "always";
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |