{ 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;
  };
}