1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-12-06 17:11:03 +01:00

tests/gtk: expand testing for new customization

We can now customize a lot more in the gtk module. Test more scenarios
to ensure a user has more control over what gets generated.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This commit is contained in:
Austin Horstman 2025-06-30 14:56:40 -05:00
parent d9915499e3
commit 18ff4e1e11
5 changed files with 204 additions and 0 deletions

View file

@ -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-basic-config = ./gtk2-basic-config.nix;
gtk2-config-file-location = ./gtk2-config-file-location.nix; gtk2-config-file-location = ./gtk2-config-file-location.nix;
# GTK3
gtk3-basic-settings = ./gtk3-basic-settings.nix; gtk3-basic-settings = ./gtk3-basic-settings.nix;
# GTK4
gtk4-basic-settings = ./gtk4-basic-settings.nix; gtk4-basic-settings = ./gtk4-basic-settings.nix;
gtk4-theme-css-injection = ./gtk4-theme-css-injection.nix;
} }

View file

@ -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
'';
}

View file

@ -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; }'
'';
}

View file

@ -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\"
'';
}

View file

@ -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
'';
}