diff --git a/doc/release-notes/rl-2105.adoc b/doc/release-notes/rl-2105.adoc index 4fe8953ae..0de98fb2b 100644 --- a/doc/release-notes/rl-2105.adoc +++ b/doc/release-notes/rl-2105.adoc @@ -72,35 +72,6 @@ programs.rofi.extraConfig = { }; ---- -* The `services.redshift.extraOptions` and `services.gammastep.extraOptions` -options were removed in favor of <> and -`services.gammastep.settings`, that are now an attribute set rather -than a string. They also support new features not available before, for -example: -+ -[source,nix] ----- -services.redshift = { - dawnTime = "6:00-7:45"; - duskTime = "18:35-20:15"; - settings = { - redshift = { - gamma = 0.8; - adjustment-method = "randr"; - }; - - randr = { - screen = 0; - }; - }; -}; ----- -+ -It is recommended to check either -https://github.com/jonls/redshift/blob/master/redshift.conf.sample[redshift.conf.sample] or -https://gitlab.com/chinstrap/gammastep/-/blob/master/gammastep.conf.sample[gammastep.conf.sample] -for the available additional options in each program. - [[sec-release-21.05-state-version-changes]] === State Version Changes diff --git a/modules/services/redshift-gammastep/gammastep.nix b/modules/services/redshift-gammastep/gammastep.nix index d83836926..6296a7e40 100644 --- a/modules/services/redshift-gammastep/gammastep.nix +++ b/modules/services/redshift-gammastep/gammastep.nix @@ -4,17 +4,14 @@ with lib; let commonOptions = import ./lib/options.nix { - inherit config lib pkgs; + inherit config lib; moduleName = "gammastep"; programName = "Gammastep"; - # https://gitlab.com/chinstrap/gammastep/-/commit/1608ed61154cc652b087e85c4ce6125643e76e2f - mainSection = "general"; defaultPackage = pkgs.gammastep; examplePackage = "pkgs.gammastep"; mainExecutable = "gammastep"; appletExecutable = "gammastep-indicator"; - xdgConfigFilePath = "gammastep/config.ini"; serviceDocumentation = "https://gitlab.com/chinstrap/gammastep/"; }; diff --git a/modules/services/redshift-gammastep/lib/options.nix b/modules/services/redshift-gammastep/lib/options.nix index 59cd42f42..69f14177b 100644 --- a/modules/services/redshift-gammastep/lib/options.nix +++ b/modules/services/redshift-gammastep/lib/options.nix @@ -1,61 +1,32 @@ -{ config, lib, pkgs, moduleName, mainSection, programName, defaultPackage -, examplePackage, mainExecutable, appletExecutable, xdgConfigFilePath -, serviceDocumentation }: +# Adapted from Nixpkgs. + +{ config, lib, moduleName, programName, defaultPackage, examplePackage +, mainExecutable, appletExecutable, serviceDocumentation }: with lib; let cfg = config.services.${moduleName}; - settingsFormat = pkgs.formats.ini { }; in { meta = { maintainers = with maintainers; [ rycee petabyteboy thiagokokada ]; }; - imports = let - mkRenamed = old: new: - mkRenamedOptionModule ([ "services" moduleName ] ++ old) [ - "services" - moduleName - "settings" - mainSection - new - ]; - in [ - (mkRemovedOptionModule [ "services" moduleName "extraOptions" ] - "All ${programName} configuration is now available through services.${moduleName}.settings instead.") - (mkRenamed [ "brightness" "day" ] "brightness-day") - (mkRenamed [ "brightness" "night" ] "brightness-night") - ]; - options = { - enable = mkEnableOption programName; - - dawnTime = mkOption { - type = types.nullOr types.str; - default = null; - example = "6:00-7:45"; + enable = mkOption { + type = types.bool; + default = false; + example = true; description = '' - Set the time interval of dawn manually. - The times must be specified as HH:MM in 24-hour format. - ''; - }; - - duskTime = mkOption { - type = types.nullOr types.str; - default = null; - example = "18:35-20:15"; - description = '' - Set the time interval of dusk manually. - The times must be specified as HH:MM in 24-hour format. + Enable ${programName} to change your screen's colour temperature + depending on the time of day. ''; }; latitude = mkOption { - type = with types; nullOr (either str float); - apply = toString; + type = types.nullOr types.str; default = null; description = '' Your current latitude, between -90.0 and @@ -65,8 +36,7 @@ in { }; longitude = mkOption { - type = with types; nullOr (either str float); - apply = toString; + type = types.nullOr types.str; default = null; description = '' Your current longitude, between -180.0 and @@ -105,6 +75,26 @@ in { }; }; + 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 = defaultPackage; @@ -123,62 +113,26 @@ in { ''; }; - settings = mkOption { - type = types.submodule { freeformType = settingsFormat.type; }; - default = { }; - example = literalExample '' - { - ${mainSection} = { - adjustment-method = "randr"; - }; - randr = { - screen = 0; - }; - }; - ''; + extraOptions = mkOption { + type = types.listOf types.str; + default = [ ]; + example = [ "-v" "-m randr" ]; description = '' - The configuration to pass to ${programName}. - Available options for ${programName} described in - - ${moduleName} - 1 - . + Additional command-line arguments to pass to + redshift. ''; }; }; config = { assertions = [{ - assertion = (cfg.settings ? ${moduleName}.dawn-time || cfg.settings - ? ${moduleName}.dusk-time) - || (cfg.settings.${moduleName}.location-provider) == "geoclue2" - || ((cfg.settings.${moduleName}.location-provider) == "manual" - && (cfg.settings ? ${moduleName}.latitude || cfg.settings - ? ${moduleName}.longitude)); - message = '' - In order for ${programName} to know the time of action, you need to set one of - - services.${moduleName}.provider = "geoclue2" for automatically inferring your location - (you also need to enable Geoclue2 service separately) - - services.${moduleName}.longitude and .latitude for specifying your location manually - - services.${moduleName}.dawnTime and .duskTime for specifying the times manually - ''; + assertion = cfg.provider == "manual" -> cfg.latitude != null + && cfg.longitude != null; + message = "Must provide services.${moduleName}.latitude and" + + " services.${moduleName}.latitude when" + + " services.${moduleName}.provider is set to \"manual\"."; }]; - services.${moduleName}.settings = { - ${mainSection} = { - temp-day = cfg.temperature.day; - temp-night = cfg.temperature.night; - location-provider = cfg.provider; - dawn-time = mkIf (cfg.dawnTime != null) cfg.dawnTime; - dusk-time = mkIf (cfg.duskTime != null) cfg.dawnTime; - latitude = mkIf (cfg.latitude != null) cfg.latitude; - longitude = mkIf (cfg.longitude != null) cfg.longitude; - }; - }; - - xdg.configFile.${xdgConfigFilePath}.source = - settingsFormat.generate xdgConfigFilePath cfg.settings; - systemd.user.services.${moduleName} = { Unit = { Description = "${programName} colour temperature adjuster"; @@ -191,9 +145,21 @@ in { Service = { ExecStart = let + providerString = if cfg.provider == "manual" then + "${cfg.latitude}:${cfg.longitude}" + else + cfg.provider; + + args = [ + "-l ${providerString}" + "-t ${toString cfg.temperature.day}:${ + toString cfg.temperature.night + }" + "-b ${toString cfg.brightness.day}:${toString cfg.brightness.night}" + ] ++ cfg.extraOptions; + command = if cfg.tray then appletExecutable else mainExecutable; - configFullPath = config.xdg.configHome + "/${xdgConfigFilePath}"; - in "${cfg.package}/bin/${command} -c ${configFullPath}"; + in "${cfg.package}/bin/${command} ${concatStringsSep " " args}"; RestartSec = 3; Restart = "on-failure"; }; diff --git a/modules/services/redshift-gammastep/redshift.nix b/modules/services/redshift-gammastep/redshift.nix index d65227ca1..068dbd67b 100644 --- a/modules/services/redshift-gammastep/redshift.nix +++ b/modules/services/redshift-gammastep/redshift.nix @@ -4,16 +4,14 @@ with lib; let commonOptions = import ./lib/options.nix { - inherit config lib pkgs; + inherit config lib; moduleName = "redshift"; programName = "Redshift"; - mainSection = "redshift"; defaultPackage = pkgs.redshift; examplePackage = "pkgs.redshift"; mainExecutable = "redshift"; appletExecutable = "redshift-gtk"; - xdgConfigFilePath = "redshift/redshift.conf"; serviceDocumentation = "http://jonls.dk/redshift/"; }; diff --git a/tests/modules/services/redshift-gammastep/gammastep-basic-configuration-expected.service b/tests/modules/services/redshift-gammastep/gammastep-basic-configuration-expected.service index 35eaf519f..25b95b55a 100644 --- a/tests/modules/services/redshift-gammastep/gammastep-basic-configuration-expected.service +++ b/tests/modules/services/redshift-gammastep/gammastep-basic-configuration-expected.service @@ -2,7 +2,7 @@ WantedBy=graphical-session.target [Service] -ExecStart=@gammastep@/bin/gammastep -c /home/hm-user/.config/gammastep/config.ini +ExecStart=@gammastep@/bin/gammastep -l 0.0:0.0 -t 5500:3700 -b 1:1 Restart=on-failure RestartSec=3 diff --git a/tests/modules/services/redshift-gammastep/gammastep-basic-configuration-file-expected.conf b/tests/modules/services/redshift-gammastep/gammastep-basic-configuration-file-expected.conf deleted file mode 100644 index 71dd96b56..000000000 --- a/tests/modules/services/redshift-gammastep/gammastep-basic-configuration-file-expected.conf +++ /dev/null @@ -1,11 +0,0 @@ -[general] -adjustment-method=randr -gamma=0.800000 -latitude=0.0 -location-provider=manual -longitude=0.000000 -temp-day=5500 -temp-night=3700 - -[randr] -screen=0 diff --git a/tests/modules/services/redshift-gammastep/gammastep-basic-configuration.nix b/tests/modules/services/redshift-gammastep/gammastep-basic-configuration.nix index c663d594e..c3baf8d98 100644 --- a/tests/modules/services/redshift-gammastep/gammastep-basic-configuration.nix +++ b/tests/modules/services/redshift-gammastep/gammastep-basic-configuration.nix @@ -6,14 +6,7 @@ enable = true; provider = "manual"; latitude = "0.0"; - longitude = 0.0; - settings = { - general = { - adjustment-method = "randr"; - gamma = 0.8; - }; - randr = { screen = 0; }; - }; + longitude = "0.0"; }; nixpkgs.overlays = [ @@ -25,9 +18,6 @@ ]; nmt.script = '' - assertFileContent \ - home-files/.config/gammastep/config.ini \ - ${./gammastep-basic-configuration-file-expected.conf} assertFileContent \ home-files/.config/systemd/user/gammastep.service \ ${./gammastep-basic-configuration-expected.service} diff --git a/tests/modules/services/redshift-gammastep/redshift-basic-configuration-expected.service b/tests/modules/services/redshift-gammastep/redshift-basic-configuration-expected.service index 5dce5dc19..13ccf550e 100644 --- a/tests/modules/services/redshift-gammastep/redshift-basic-configuration-expected.service +++ b/tests/modules/services/redshift-gammastep/redshift-basic-configuration-expected.service @@ -2,7 +2,7 @@ WantedBy=graphical-session.target [Service] -ExecStart=@redshift@/bin/redshift -c /home/hm-user/.config/redshift/redshift.conf +ExecStart=@redshift@/bin/redshift -l 0.0:0.0 -t 5500:3700 -b 1:1 Restart=on-failure RestartSec=3 diff --git a/tests/modules/services/redshift-gammastep/redshift-basic-configuration-file-expected.conf b/tests/modules/services/redshift-gammastep/redshift-basic-configuration-file-expected.conf deleted file mode 100644 index 0336f8b62..000000000 --- a/tests/modules/services/redshift-gammastep/redshift-basic-configuration-file-expected.conf +++ /dev/null @@ -1,11 +0,0 @@ -[randr] -screen=0 - -[redshift] -adjustment-method=randr -gamma=0.800000 -latitude=0.000000 -location-provider=manual -longitude=0.0 -temp-day=5500 -temp-night=3700 diff --git a/tests/modules/services/redshift-gammastep/redshift-basic-configuration.nix b/tests/modules/services/redshift-gammastep/redshift-basic-configuration.nix index 5e2fe40e0..ab8a159a4 100644 --- a/tests/modules/services/redshift-gammastep/redshift-basic-configuration.nix +++ b/tests/modules/services/redshift-gammastep/redshift-basic-configuration.nix @@ -5,15 +5,8 @@ services.redshift = { enable = true; provider = "manual"; - latitude = 0.0; + latitude = "0.0"; longitude = "0.0"; - settings = { - redshift = { - adjustment-method = "randr"; - gamma = 0.8; - }; - randr = { screen = 0; }; - }; }; nixpkgs.overlays = [ @@ -25,9 +18,6 @@ ]; nmt.script = '' - assertFileContent \ - home-files/.config/redshift/redshift.conf \ - ${./redshift-basic-configuration-file-expected.conf} assertFileContent \ home-files/.config/systemd/user/redshift.service \ ${./redshift-basic-configuration-expected.service}