From 6a5afb5e35dfa9efabfdfa7a90b0afe21a1c2100 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Mon, 15 Sep 2025 14:59:23 -0400 Subject: [PATCH] niri: make focus ring the inverse of the average of the background color --- home-manager/progs/niri.nix | 7 ++++++- home-manager/util/inverse_color.nix | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 home-manager/util/inverse_color.nix diff --git a/home-manager/progs/niri.nix b/home-manager/progs/niri.nix index 9bd01e5..38d3651 100644 --- a/home-manager/progs/niri.nix +++ b/home-manager/progs/niri.nix @@ -5,6 +5,9 @@ inputs, ... }: +let + invert_image_avg = pkgs.callPackage ../util/inverse_color.nix; +in { imports = [ inputs.niri.homeModules.config @@ -51,7 +54,9 @@ focus-ring = { enable = true; active = { - color = "#bf7778"; + color = builtins.readFile (invert_image_avg { + src = ../wallpaper.png; + }); }; }; }; diff --git a/home-manager/util/inverse_color.nix b/home-manager/util/inverse_color.nix new file mode 100644 index 0000000..709bf9b --- /dev/null +++ b/home-manager/util/inverse_color.nix @@ -0,0 +1,26 @@ +{ + stdenv, + imagemagick, + gawk, + src, +}: +stdenv.mkDerivation { + pname = "invert-image-avg"; + version = "1.0"; + + inherit src; + + buildInputs = [ + imagemagick + gawk + ]; + + # input is a file, not a directory, skip unpackPhase + unpackPhase = "true"; + + # command taken from: https://old.reddit.com/r/swaywm/comments/oz3t7v/setting_a_blurred_background_with_swaylock_and/ + buildPhase = '' + rm -fr $out + magick ${src} -channel RGB -negate -resize 1x1 txt: | awk 'FNR == 2 {print $3}' > $out + ''; +}