let
desktopGuiBase =
{
pkgs,
lib,
config,
...
}:
let
inherit (lib.lists) singleton;
inherit (config) theme;
# Color scheme for gsettings (prefer-dark, default, prefer-light)
colorScheme = if theme.isDark then "prefer-dark" else "default";
gtkCommon = # ini
''
gtk-font-name=${theme.font.sans.name} ${toString theme.font.size.normal}
gtk-theme-name=${theme.gtk.name}
gtk-icon-theme-name=${theme.icons.name}
'';
gtk2 = # ini
''
gtk-font-name="${theme.font.sans.name} ${toString theme.font.size.normal}"
gtk-theme-name="${theme.gtk.name}"
gtk-icon-theme-name="${theme.icons.name}"
'';
gtk3 = # ini
''
[Settings]
gtk-application-prefer-dark-theme=${if theme.isDark then "true" else "false"}
${gtkCommon}
'';
gtk4 = # ini
''
[Settings]
gtk-application-prefer-dark-theme=${if theme.isDark then "true" else "false"}
gtk-interface-color-scheme=${if theme.isDark then "2" else "3"}
${gtkCommon}
'';
in
{
qt = {
enable = true;
style = config.theme.qt.name;
};
programs.dconf = {
enable = true;
profiles.user.databases = singleton {
settings."org/gnome/desktop/interface".color-scheme = colorScheme;
};
};
environment.systemPackages = [
pkgs.bibata-cursors
];
environment.sessionVariables = {
XCURSOR_THEME = "Bibata-Modern-Classic";
XCURSOR_SIZE = "24";
};
hjem.extraModules = singleton {
packages = singleton theme.gtk.package;
files.".gtkrc-2.0".text = gtk2;
xdg.config.files."gtk-3.0/settings.ini".text = gtk3;
xdg.config.files."gtk-4.0/settings.ini".text = gtk4;
# Disable rounded windows.
xdg.config.files."gtk-3.0/gtk.css".text = # css
''
window {
border-radius: 0;
}
'';
xdg.config.files."gtk-4.0/gtk.css".text = # css
''
window {
border-radius: 0;
}
'';
};
};
in
{
flake.modules.nixos.desktop-gui = desktopGuiBase;
}