diff --git a/home-manager/data/chromium-dark.patch b/home-manager/data/chromium-dark.patch new file mode 100644 index 0000000..ce0ab57 --- /dev/null +++ b/home-manager/data/chromium-dark.patch @@ -0,0 +1,34 @@ +diff --git a/ui/gtk/native_theme_gtk.cc b/ui/gtk/native_theme_gtk.cc +index 4afa399..fbaaf06e 100644 +--- a/ui/gtk/native_theme_gtk.cc ++++ b/ui/gtk/native_theme_gtk.cc +@@ -116,6 +116,13 @@ + ui::ColorProviderManager::Get().AppendColorProviderInitializer( + base::BindRepeating(AddGtkNativeCoreColorMixer)); + ++ // Add the web native theme as an observer to stay in sync with dark mode, ++ // high contrast, and preferred color scheme changes. ++ color_scheme_observer_ = ++ std::make_unique( ++ NativeTheme::GetInstanceForWeb()); ++ AddObserver(color_scheme_observer_.get()); ++ + OnThemeChanged(gtk_settings_get_default(), nullptr); + } + +diff --git a/ui/gtk/native_theme_gtk.h b/ui/gtk/native_theme_gtk.h +index 876a738..ad3b88d41 100644 +--- a/ui/gtk/native_theme_gtk.h ++++ b/ui/gtk/native_theme_gtk.h +@@ -93,6 +93,11 @@ + mutable absl::optional color_cache_[kColorId_NumColors]; + + ScopedCssProvider theme_css_override_; ++ ++ // Used to notify the web native theme of changes to dark mode, high ++ // contrast, and preferred color scheme. ++ std::unique_ptr ++ color_scheme_observer_; + }; + + } // namespace gtk diff --git a/home-manager/modules/ezpcusr.nix b/home-manager/modules/ezpcusr.nix index 1874062..097bf3d 100644 --- a/home-manager/modules/ezpcusr.nix +++ b/home-manager/modules/ezpcusr.nix @@ -573,8 +573,10 @@ in programs.chromium = { enable = lib.mkDefault true; - package = lib.mkDefault (pkgs.ungoogled-chromium.override { - commandLineArgs = "--enable-features=UseOzonePlatform --ozone-platform=wayland"; + package = lib.mkDefault ((pkgs.ungoogled-chromium.overrideAttrs (old: { + patches = [ ../data/chromium-dark.patch ]; + })).override { + commandLineArgs = "--enable-features=UseOzonePlatform,WebUIDarkMode --ozone-platform=wayland --force-dark-mode"; }); };