{ 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"]); packages = if isQGnome then [ pkgs.qgnomeplatform pkgs.adwaita-qt ] else if isQtStyle then [ pkgs.libsForQt5.qtstyleplugins ] else throw "`qt5.platformTheme` ${cfg.platformTheme} and `qt5.style` ${cfg.style} are not compatible."; in { options = { qt5 = { enable = mkEnableOption "Qt5 theming configuration"; platformTheme = mkOption { type = types.enum [ "gtk2" "gnome" ]; example = "gnome"; relatedPackages = [ "qgnomeplatform" ["libsForQt5" "qtstyleplugins"] ]; 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 ''; }; 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 = cfg.style; environment.systemPackages = packages; }; }