diff --git a/modules/glance/hm.nix b/modules/glance/hm.nix new file mode 100644 index 00000000..93651ad2 --- /dev/null +++ b/modules/glance/hm.nix @@ -0,0 +1,46 @@ +{ config, lib, ... }: +{ + 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 = + let + rgb-to-hsl = + color: + let + r = ((lib.toInt config.lib.stylix.colors."${color}-rgb-r") * 100) / 255; + g = ((lib.toInt config.lib.stylix.colors."${color}-rgb-g") * 100) / 255; + b = ((lib.toInt config.lib.stylix.colors."${color}-rgb-b") * 100) / 255; + max = lib.max r (lib.max g b); + min = lib.min r (lib.min g b); + delta = max - min; + h = + if delta == 0 then + 0 + else if max == r then + 60 * (lib.mod ((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 delta / (100 - lib.max (2 * l - 100) (100 - (2 * l))); + in + "${builtins.toString h} ${builtins.toString s} ${builtins.toString 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"; + }; + }; +} diff --git a/modules/glance/testbed.nix b/modules/glance/testbed.nix new file mode 100644 index 00000000..5ee0f4c1 --- /dev/null +++ b/modules/glance/testbed.nix @@ -0,0 +1,84 @@ +{ 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.application = { + enable = true; + name = "firefox"; + inherit package; + }; + + home-manager.sharedModules = lib.singleton { + 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; }; + }; + }; + }; +}