{ pkgs, lib, osConfig, ... }: let inherit (lib) mkIf optionals; dev = osConfig.modules.device; sys = osConfig.modules.system; cfg = osConfig.modules.style; acceptedTypes = ["laptop" "desktop" "hybrid" "lite"]; in { config = mkIf (builtins.elem dev.type acceptedTypes && sys.video.enable) { xdg.configFile = { "kdeglobals".source = cfg.qt.kdeglobals.source; "Kvantum/kvantum.kvconfig".source = (pkgs.formats.ini {}).generate "kvantum.kvconfig" { General.theme = "catppuccin"; Applications.catppuccin = '' qt5ct, org.kde.dolphin, org.kde.kalendar, org.qbittorrent.qBittorrent, hyprland-share-picker, dolphin-emu, Nextcloud, nextcloud, cantata, org.kde.kid3-qt ''; }; "Kvantum/catppuccin/catppuccin.kvconfig".source = builtins.fetchurl { url = "https://raw.githubusercontent.com/catppuccin/Kvantum/main/src/Catppuccin-Mocha-Blue/Catppuccin-Mocha-Blue.kvconfig"; sha256 = "1f8xicnc5696g0a7wak749hf85ynfq16jyf4jjg4dad56y4csm6s"; }; "Kvantum/catppuccin/catppuccin.svg".source = builtins.fetchurl { url = "https://raw.githubusercontent.com/catppuccin/Kvantum/main/src/Catppuccin-Mocha-Blue/Catppuccin-Mocha-Blue.svg"; sha256 = "0vys09k1jj8hv4ra4qvnrhwxhn48c2gxbxmagb3dyg7kywh49wvg"; }; }; qt = { enable = true; platformTheme = mkIf cfg.forceGtk "gtk"; # just an override for QT_QPA_PLATFORMTHEME, takes “gtk”, “gnome”, “qtct” or “kde” style = mkIf (!cfg.forceGtk) { name = cfg.qt.theme.name; package = cfg.qt.theme.package; }; }; home.packages = with pkgs; [ libsForQt5.qt5ct breeze-icons # add theme package to path just in case cfg.qt.theme.package ] ++ optionals cfg.useKvantum [ qt6Packages.qtstyleplugin-kvantum libsForQt5.qtstyleplugin-kvantum ]; home.sessionVariables = { # scaling - 1 means no scaling QT_AUTO_SCREEN_SCALE_FACTOR = "1"; # use wayland as the default backend, fallback to xcb if wayland is not available QT_QPA_PLATFORM = "wayland;xcb"; # disable window decorations everywhere QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; # remain backwards compatible with qt5 DISABLE_QT5_COMPAT = "0"; # tell calibre to use the dark theme, because the light one hurts my eyes CALIBRE_USE_DARK_PALETTE = "1"; }; }; }