{ config, lib, pkgs, ... }: with lib; let cfg = config.qt5; isQGnome = cfg.platformTheme == "gnome" && builtins.elem cfg.style ["adwaita" "adwaita-dark"]; isQtStyle = cfg.platformTheme == "gtk2" && !(builtins.elem cfg.style ["adwaita" "adwaita-dark"]); isQt5ct = cfg.platformTheme == "qt5ct"; isLxqt = cfg.platformTheme == "lxqt"; packages = if isQGnome then [ pkgs.qgnomeplatform pkgs.adwaita-qt ] else if isQtStyle then [ pkgs.libsForQt5.qtstyleplugins ] else if isQt5ct then [ pkgs.libsForQt5.qt5ct ] else if isLxqt then [ pkgs.lxqt.lxqt-qtplugin pkgs.lxqt.lxqt-config ] else throw "`qt5.platformTheme` ${cfg.platformTheme} and `qt5.style` ${cfg.style} are not compatible."; in { meta.maintainers = [ maintainers.romildo ]; options = { qt5 = { enable = mkEnableOption "Qt5 theming configuration"; platformTheme = mkOption { type = types.enum [ "gtk2" "gnome" "lxqt" "qt5ct" ]; example = "gnome"; relatedPackages = [ "qgnomeplatform" ["libsForQt5" "qtstyleplugins"] ["libsForQt5" "qt5ct"] ["lxqt" "lxqt-qtplugin"] ]; description = '' Selects the platform theme to use for Qt5 applications. The options are gtk Use GTK theme with qtstyleplugins gnome Use GNOME theme with qgnomeplatform lxqt Use LXQt style set using the lxqt-config-appearance application. qt5ct Use Qt style set using the qt5ct application. ''; }; style = mkOption { type = types.enum [ "adwaita" "adwaita-dark" "cleanlooks" "gtk2" "motif" "plastique" ]; example = "adwaita"; relatedPackages = [ "adwaita-qt" ["libsForQt5" "qtstyleplugins"] ]; description = '' Selects the style to use for Qt5 applications. The options are adwaita adwaita-dark Use Adwaita Qt style with adwaita cleanlooks gtk2 motif plastique Use styles from qtstyleplugins ''; }; }; }; config = mkIf cfg.enable { environment.variables.QT_QPA_PLATFORMTHEME = cfg.platformTheme; environment.variables.QT_STYLE_OVERRIDE = mkIf (! (isQt5ct || isLxqt)) cfg.style; environment.systemPackages = packages; }; }