From bc38629511dd9cc78c5ca37a6e546fa66330d50e Mon Sep 17 00:00:00 2001 From: Louis Thevenet Date: Fri, 2 May 2025 06:04:50 +0200 Subject: [PATCH] glance: init nixos module (#1187) Link: https://github.com/danth/stylix/pull/1187 Reviewed-by: awwpotato Tested-by: awwpotato --- modules/glance/hm.nix | 56 +++---------- modules/glance/nixos.nix | 22 +++++ modules/glance/rgb-to-hsl.nix | 34 ++++++++ .../glance/testbeds/{default.nix => hm.nix} | 0 modules/glance/testbeds/nixos.nix | 81 +++++++++++++++++++ 5 files changed, 148 insertions(+), 45 deletions(-) create mode 100644 modules/glance/nixos.nix create mode 100644 modules/glance/rgb-to-hsl.nix rename modules/glance/testbeds/{default.nix => hm.nix} (100%) create mode 100644 modules/glance/testbeds/nixos.nix diff --git a/modules/glance/hm.nix b/modules/glance/hm.nix index ec53d1a8..ce9cb856 100644 --- a/modules/glance/hm.nix +++ b/modules/glance/hm.nix @@ -1,4 +1,7 @@ { config, lib, ... }: +let + rgb-to-hsl = import ./rgb-to-hsl.nix { inherit lib config; }; +in { options.stylix.targets.glance.enable = config.lib.stylix.mkEnableTarget "Glance" true; @@ -6,50 +9,13 @@ config = lib.mkIf (config.stylix.enable && config.stylix.targets.glance.enable) { - services.glance.settings.theme = - let - rgb-to-hsl = - color: - let - r = ((lib.toInt config.lib.stylix.colors."${color}-rgb-r") * 100.0) / 255; - g = ((lib.toInt config.lib.stylix.colors."${color}-rgb-g") * 100.0) / 255; - b = ((lib.toInt config.lib.stylix.colors."${color}-rgb-b") * 100.0) / 255; - max = lib.max r (lib.max g b); - min = lib.min r (lib.min g b); - delta = max - min; - fmod = base: int: base - (int * builtins.floor (base / int)); - h = - if delta == 0 then - 0 - else if max == r then - 60 * (fmod ((g - b) / delta) 6) - else if max == g then - 60 * (((b - r) / delta) + 2) - else if max == b then - 60 * (((r - g) / delta) + 4) - else - 0; - l = (max + min) / 2; - s = - if delta == 0 then - 0 - else - 100 * delta / (100 - lib.max (2 * l - 100) (100 - (2 * l))); - roundToString = value: toString (builtins.floor (value + 0.5)); - in - lib.concatMapStringsSep " " roundToString [ - h - s - l - ]; - in - { - light = config.stylix.polarity == "light"; - contrast-multiplier = 1.0; - background-color = rgb-to-hsl "base00"; - primary-color = rgb-to-hsl "base05"; - positive-color = rgb-to-hsl "base01"; - negative-color = rgb-to-hsl "base04"; - }; + services.glance.settings.theme = { + light = config.stylix.polarity == "light"; + contrast-multiplier = 1.0; + background-color = rgb-to-hsl "base00"; + primary-color = rgb-to-hsl "base05"; + positive-color = rgb-to-hsl "base01"; + negative-color = rgb-to-hsl "base04"; + }; }; } diff --git a/modules/glance/nixos.nix b/modules/glance/nixos.nix new file mode 100644 index 00000000..31805b21 --- /dev/null +++ b/modules/glance/nixos.nix @@ -0,0 +1,22 @@ +{ config, lib, ... }: + +let + rgb-to-hsl = import ./rgb-to-hsl.nix { inherit lib config; }; +in +{ + options.stylix.targets.glance.enable = + config.lib.stylix.mkEnableTarget "Glance" true; + + config = + lib.mkIf (config.stylix.enable && config.stylix.targets.glance.enable) + { + services.glance.settings.theme = { + light = config.stylix.polarity == "light"; + contrast-multiplier = 1.0; + background-color = rgb-to-hsl "base00"; + primary-color = rgb-to-hsl "base05"; + positive-color = rgb-to-hsl "base01"; + negative-color = rgb-to-hsl "base04"; + }; + }; +} diff --git a/modules/glance/rgb-to-hsl.nix b/modules/glance/rgb-to-hsl.nix new file mode 100644 index 00000000..13b678d9 --- /dev/null +++ b/modules/glance/rgb-to-hsl.nix @@ -0,0 +1,34 @@ +{ lib, config, ... }: +color: +let + r = ((lib.toInt config.lib.stylix.colors."${color}-rgb-r") * 100.0) / 255; + g = ((lib.toInt config.lib.stylix.colors."${color}-rgb-g") * 100.0) / 255; + b = ((lib.toInt config.lib.stylix.colors."${color}-rgb-b") * 100.0) / 255; + max = lib.max r (lib.max g b); + min = lib.min r (lib.min g b); + delta = max - min; + fmod = base: int: base - (int * builtins.floor (base / int)); + h = + if delta == 0 then + 0 + else if max == r then + 60 * (fmod ((g - b) / delta) 6) + else if max == g then + 60 * (((b - r) / delta) + 2) + else if max == b then + 60 * (((r - g) / delta) + 4) + else + 0; + l = (max + min) / 2; + s = + if delta == 0 then + 0 + else + 100 * delta / (100 - lib.max (2 * l - 100) (100 - (2 * l))); + roundToString = value: toString (builtins.floor (value + 0.5)); +in +lib.concatMapStringsSep " " roundToString [ + h + s + l +] diff --git a/modules/glance/testbeds/default.nix b/modules/glance/testbeds/hm.nix similarity index 100% rename from modules/glance/testbeds/default.nix rename to modules/glance/testbeds/hm.nix diff --git a/modules/glance/testbeds/nixos.nix b/modules/glance/testbeds/nixos.nix new file mode 100644 index 00000000..3bc6e02e --- /dev/null +++ b/modules/glance/testbeds/nixos.nix @@ -0,0 +1,81 @@ +{ lib, pkgs, ... }: +let + host = "127.0.0.1"; + + package = pkgs.wrapFirefox pkgs.firefox-unwrapped { + extraPolicies.OverrideFirstRunPage = "http://${host}:${builtins.toString port}"; + }; + + port = 1234; +in +{ + stylix.testbed.ui.application = { + name = "firefox"; + inherit package; + }; + + programs.firefox = { + enable = true; + inherit package; + }; + + services.glance = { + enable = true; + + settings = { + pages = lib.singleton { + columns = [ + { + size = "small"; + + widgets = lib.singleton { + hide-location = false; + hour-format = "24h"; + location = "Tokyo, Japan"; + show-area-name = true; + type = "weather"; + units = "metric"; + }; + } + + { + size = "full"; + + widgets = [ + { + autofocus = true; + search-engine = "https://github.com/NixOS/nixpkgs/pulls?q=is%3Apr+is%3Aopen+{QUERY}"; + type = "search"; + } + + { + type = "group"; + + widgets = lib.singleton { + collapse-after = 15; + + feeds = lib.singleton { + title = "LessWrong"; + url = "https://www.lesswrong.com/feed.xml?view=curated-rss"; + }; + + style = "vertical-list"; + type = "rss"; + }; + } + ]; + } + + { + size = "small"; + widgets = [ { type = "calendar"; } ]; + } + ]; + + name = "Home"; + }; + + server = { inherit host port; }; + }; + }; +}