Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gtk: add support for theming Flatpak apps #693

Merged
merged 10 commits into from
Dec 26, 2024
80 changes: 62 additions & 18 deletions modules/gtk/hm.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{ pkgs, config, lib, ... }:
{ pkgs, config, lib, options, ... }:

let
cfg = config.stylix.targets.gtk;
Expand All @@ -12,7 +12,6 @@ let
cat ${baseCss} >>$out
echo ${lib.escapeShellArg cfg.extraCss} >>$out
'';

in {
options.stylix.targets.gtk = {
enable = config.lib.stylix.mkEnableTarget
Expand All @@ -29,25 +28,70 @@ in {
window.background { border-radius: 0; }
'';
};

flatpakSupport.enable =
config.lib.stylix.mkEnableTarget "support for theming Flatpak apps" true;
};

config = lib.mkIf cfg.enable {
# programs.dconf.enable = true; required in system config
gtk = {
enable = true;
font = {
inherit (config.stylix.fonts.sansSerif) package name;
size = config.stylix.fonts.sizes.applications;
config = lib.mkIf cfg.enable (lib.mkMerge [
{
# programs.dconf.enable = true; required in system config
gtk = {
enable = true;
font = {
inherit (config.stylix.fonts.sansSerif) package name;
size = config.stylix.fonts.sizes.applications;
};
theme = {
package = pkgs.adw-gtk3;
name = "adw-gtk3";
};
};
theme = {
package = pkgs.adw-gtk3;
name = "adw-gtk3";

xdg.configFile = {
"gtk-3.0/gtk.css".source = finalCss;
"gtk-4.0/gtk.css".source = finalCss;
};
};
}

xdg.configFile = {
"gtk-3.0/gtk.css".source = finalCss;
"gtk-4.0/gtk.css".source = finalCss;
};
};
(lib.mkIf cfg.flatpakSupport.enable (lib.mkMerge [
{
# Flatpak apps apparently don't consume the CSS config. This workaround appends it to the theme directly.
home.file.".themes/${config.gtk.theme.name}".source = pkgs.stdenvNoCC.mkDerivation {
name = "flattenedGtkTheme";
src = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}";

installPhase = ''
cp --recursive . $out
cat ${finalCss} | tee --append $out/gtk-{3,4}.0/gtk.css
'';
};
}
(
let
filesystem = "${config.home.homeDirectory}/.themes/${config.gtk.theme.name}:ro";
theme = config.gtk.theme.name;
in
if options ? services.flatpak.overrides
then {
# Let Flatpak apps read the theme and force them to use it.
# This requires nix-flatpak to be imported externally.
services.flatpak.overrides.global = {
Context.filesystems = [filesystem];
Environment.GTK_THEME = theme;
};
}
else {
# This is likely incompatible with other modules that write to this file.
xdg.dataFile."flatpak/overrides/global".text = ''
[Context]
filesystems=${filesystem}

[Environment]
GTK_THEME=${theme}
'';
}
)
]))
]);
}
Loading