diff --git a/tests/modules/misc/gtk/default.nix b/tests/modules/misc/gtk/default.nix index 7a52aeb2d..c43165ca9 100644 --- a/tests/modules/misc/gtk/default.nix +++ b/tests/modules/misc/gtk/default.nix @@ -1,6 +1,16 @@ { + gtk-global-inheritance = ./gtk-global-inheritance.nix; + gtk-per-version-override = ./gtk-per-version-override.nix; + gtk-selective-enable = ./gtk-selective-enable.nix; + + # GTK2 gtk2-basic-config = ./gtk2-basic-config.nix; gtk2-config-file-location = ./gtk2-config-file-location.nix; + + # GTK3 gtk3-basic-settings = ./gtk3-basic-settings.nix; + + # GTK4 gtk4-basic-settings = ./gtk4-basic-settings.nix; + gtk4-theme-css-injection = ./gtk4-theme-css-injection.nix; } diff --git a/tests/modules/misc/gtk/gtk-global-inheritance.nix b/tests/modules/misc/gtk/gtk-global-inheritance.nix new file mode 100644 index 000000000..444522046 --- /dev/null +++ b/tests/modules/misc/gtk/gtk-global-inheritance.nix @@ -0,0 +1,57 @@ +{ pkgs, ... }: +{ + # Test that global settings are inherited by all GTK versions + gtk = { + enable = true; + font = { + name = "Ubuntu"; + size = 12; + package = pkgs.ubuntu_font_family; + }; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + iconTheme = { + name = "Adwaita"; + package = pkgs.adwaita-icon-theme; + }; + cursorTheme = { + name = "Adwaita"; + size = 24; + }; + }; + + nmt.script = '' + # Check GTK2 inherits global settings + assertFileExists home-files/.gtkrc-2.0 + assertFileRegex home-files/.gtkrc-2.0 'gtk-theme-name = "Adwaita-dark"' + assertFileRegex home-files/.gtkrc-2.0 'gtk-font-name = "Ubuntu 12"' + assertFileRegex home-files/.gtkrc-2.0 'gtk-icon-theme-name = "Adwaita"' + assertFileRegex home-files/.gtkrc-2.0 'gtk-cursor-theme-name = "Adwaita"' + assertFileRegex home-files/.gtkrc-2.0 'gtk-cursor-theme-size = 24' + + # Check GTK3 inherits global settings + assertFileExists home-files/.config/gtk-3.0/settings.ini + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-theme-name=Adwaita-dark' + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-font-name=Ubuntu 12' + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-icon-theme-name=Adwaita' + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-cursor-theme-name=Adwaita' + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-cursor-theme-size=24' + + # Check GTK4 inherits global settings + assertFileExists home-files/.config/gtk-4.0/settings.ini + assertFileRegex home-files/.config/gtk-4.0/settings.ini 'gtk-theme-name=Adwaita-dark' + assertFileRegex home-files/.config/gtk-4.0/settings.ini 'gtk-font-name=Ubuntu 12' + assertFileRegex home-files/.config/gtk-4.0/settings.ini 'gtk-icon-theme-name=Adwaita' + assertFileRegex home-files/.config/gtk-4.0/settings.ini 'gtk-cursor-theme-name=Adwaita' + assertFileRegex home-files/.config/gtk-4.0/settings.ini 'gtk-cursor-theme-size=24' + + # Check GTK4 CSS with theme import + assertFileExists home-files/.config/gtk-4.0/gtk.css + assertFileRegex home-files/.config/gtk-4.0/gtk.css '@import url("file://.*/share/themes/Adwaita-dark/gtk-4.0/gtk.css")' + + # Check packages are installed + # Package installation verified by home-manager + ''; +} diff --git a/tests/modules/misc/gtk/gtk-per-version-override.nix b/tests/modules/misc/gtk/gtk-per-version-override.nix new file mode 100644 index 000000000..75f54a911 --- /dev/null +++ b/tests/modules/misc/gtk/gtk-per-version-override.nix @@ -0,0 +1,60 @@ +{ + # Test that per-version settings override global defaults + gtk = { + enable = true; + # Global defaults + font.name = "Global Font"; + theme.name = "Global-Theme"; + iconTheme.name = "Global-Icons"; + cursorTheme.name = "Global-Cursor"; + + # Per-version overrides + gtk2 = { + font.name = "GTK2-Font"; + theme.name = "GTK2-Theme"; + extraConfig = "gtk-can-change-accels = 1"; + }; + + gtk3 = { + iconTheme.name = "GTK3-Icons"; + cursorTheme.name = "GTK3-Cursor"; + extraConfig = { + gtk-recent-files-limit = 10; + }; + extraCss = "window { border: 1px solid red; }"; + }; + + gtk4 = { + font.name = "GTK4-Font"; + extraConfig = { + gtk-recent-files-limit = 20; + }; + extraCss = "window { border: 2px solid blue; }"; + }; + }; + + nmt.script = '' + # GTK2 should use overridden font/theme, global icons/cursor + assertFileRegex home-files/.gtkrc-2.0 'gtk-font-name = "GTK2-Font 11"' + assertFileRegex home-files/.gtkrc-2.0 'gtk-theme-name = "GTK2-Theme"' + assertFileRegex home-files/.gtkrc-2.0 'gtk-icon-theme-name = "Global-Icons"' + assertFileRegex home-files/.gtkrc-2.0 'gtk-cursor-theme-name = "Global-Cursor"' + assertFileRegex home-files/.gtkrc-2.0 'gtk-can-change-accels = 1' + + # GTK3 should use global font/theme, overridden icons/cursor + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-font-name=Global Font 11' + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-theme-name=Global-Theme' + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-icon-theme-name=GTK3-Icons' + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-cursor-theme-name=GTK3-Cursor' + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-recent-files-limit=10' + assertFileRegex home-files/.config/gtk-3.0/gtk.css 'window { border: 1px solid red; }' + + # GTK4 should use overridden font, global theme/icons/cursor + assertFileRegex home-files/.config/gtk-4.0/settings.ini 'gtk-font-name=GTK4-Font 11' + assertFileRegex home-files/.config/gtk-4.0/settings.ini 'gtk-theme-name=Global-Theme' + assertFileRegex home-files/.config/gtk-4.0/settings.ini 'gtk-icon-theme-name=Global-Icons' + assertFileRegex home-files/.config/gtk-4.0/settings.ini 'gtk-cursor-theme-name=Global-Cursor' + assertFileRegex home-files/.config/gtk-4.0/settings.ini 'gtk-recent-files-limit=20' + assertFileRegex home-files/.config/gtk-4.0/gtk.css 'window { border: 2px solid blue; }' + ''; +} diff --git a/tests/modules/misc/gtk/gtk-selective-enable.nix b/tests/modules/misc/gtk/gtk-selective-enable.nix new file mode 100644 index 000000000..bc032a3b3 --- /dev/null +++ b/tests/modules/misc/gtk/gtk-selective-enable.nix @@ -0,0 +1,28 @@ +{ + # Test that individual GTK versions can be selectively disabled + gtk = { + enable = true; + theme.name = "Test-Theme"; + + # Only enable GTK3, disable others + gtk2.enable = false; + gtk3.enable = true; + gtk4.enable = false; + }; + + nmt.script = '' + # GTK2 should not be configured + assertPathNotExists home-files/.gtkrc-2.0 + + # GTK3 should be configured + assertFileExists home-files/.config/gtk-3.0/settings.ini + assertFileRegex home-files/.config/gtk-3.0/settings.ini 'gtk-theme-name=Test-Theme' + + # GTK4 should not be configured + assertPathNotExists home-files/.config/gtk-4.0/settings.ini + assertPathNotExists home-files/.config/gtk-4.0/gtk.css + + # DConf should still be configured from GTK3 + echo \"DConf generation depends on having actual theme/font/icon settings\" + ''; +} diff --git a/tests/modules/misc/gtk/gtk4-theme-css-injection.nix b/tests/modules/misc/gtk/gtk4-theme-css-injection.nix new file mode 100644 index 000000000..01d1dffd9 --- /dev/null +++ b/tests/modules/misc/gtk/gtk4-theme-css-injection.nix @@ -0,0 +1,49 @@ +{ pkgs, ... }: +{ + # Test GTK4 theme CSS injection with both theme and custom CSS + gtk = { + enable = true; + + gtk4 = { + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + extraCss = '' + /* Custom user CSS */ + window { + background-color: #2d2d2d; + } + + button { + border-radius: 8px; + } + ''; + }; + }; + + nmt.script = '' + # GTK4 CSS should exist and contain both theme import and custom CSS + assertFileExists home-files/.config/gtk-4.0/gtk.css + + # Check for theme import comment and URL + assertFileRegex home-files/.config/gtk-4.0/gtk.css '/\*\*' + assertFileRegex home-files/.config/gtk-4.0/gtk.css 'GTK 4 reads the theme configured by gtk-theme-name, but ignores it' + assertFileRegex home-files/.config/gtk-4.0/gtk.css '@import url("file://.*/share/themes/Adwaita-dark/gtk-4.0/gtk.css")' + + # Check for custom CSS + assertFileRegex home-files/.config/gtk-4.0/gtk.css 'Custom user CSS' + assertFileRegex home-files/.config/gtk-4.0/gtk.css 'background-color: #2d2d2d' + assertFileRegex home-files/.config/gtk-4.0/gtk.css 'border-radius: 8px' + + # Verify the theme import comes before custom CSS + css_content=$(cat home-files/.config/gtk-4.0/gtk.css) + import_line=$(echo "$css_content" | grep -n "@import" | cut -d: -f1) + custom_line=$(echo "$css_content" | grep -n "Custom user CSS" | cut -d: -f1) + + if [ "$import_line" -ge "$custom_line" ]; then + echo "Theme import should come before custom CSS" + exit 1 + fi + ''; +}