{ pkgs, lib, config, ... }: { home-manager.users.kalle = { qt = { enable = true; platformTheme.name = "qtct"; }; home.packages = with pkgs.kdePackages; [ # Install both breeze5 and breeze6 since qt5 is still very commonplace. # Use the qt5 output instead of libsForQt5 to prevent package collisions. breeze breeze.qt5 # The HM qt module does not actually seem to ship wayland support by default. qtwayland # for qt6 pkgs.libsForQt5.qtwayland # for qt5 ]; xdg.configFile = let toStr = builtins.toString; toINI = lib.generators.toINI { }; confDir = v: "qt${toStr v}ct"; confFile = v: "${confDir v}/qt${toStr v}ct.conf"; colorsFile = v: "${confDir v}/colors/catppuccin-mocha-blue-breeze.conf"; absColorsFile = v: "${config.home-manager.users.kalle.xdg.configHome}/${colorsFile v}"; sharedConf = { Appearance = { custom_palette = "true"; icon_theme = "breeze-dark"; standard_dialogs = "default"; style = "Breeze"; }; Interface = { activate_item_on_single_click = "1"; buttonbox_layout = "0"; cursor_flash_time = "1000"; dialog_buttons_have_icons = "1"; double_click_interval = "400"; keyboard_scheme = "2"; menus_have_icons = "true"; show_shortcuts_in_context_menus = "true"; toolbutton_style = "4"; underline_shortcut = "1"; wheel_scroll_lines = "3"; }; Troubleshooting = { force_raster_widgets = "1"; }; }; # qt6 expects slightly different config values from qt5 for color schemes. # In the case of colorschemes (assuming we aim for a consistent coloring # between both versions) these differences are only at the end. Not # entirely sure what changes but I have checked that this is also consist # with what happens in Breeze and Catppuccin-KDE and as far as I can tell # the theme is consist between qt5 and qt6 apps, so whatever. colorsConf = v: { ColorScheme = { active_colors = "#ffcdd6f4, #ff313244, #ff3d3d5e, #ff2f2f48, #ff0c0c12, #ff151520, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff09090d, #ff89b4fa, #ff11111b, #ff89b4fa, #ffcba6f7, #ff181825, #ffffffff, #ff1e1e2e, #ffcdd6f4, " + "${if v == 5 then "#806c7086" else "#ffa6adc8, #ff89b4fa"}"; disabled_colors = "#ff6c7086, #ff313244, #ff45475a, #ff313244, #ff11111b, #ff181825, #ff6c7086, #ffcdd6f4, #ff6c7086, #ff1e1e2e, #ff181825, #ff11111b, #ff181825, #ff6c7086, #ffa9bcdb, #ffc7cceb, #ff181825, #ffffffff, #ff1e1e2e, #ffcdd6f4, #806c7086" + "${if v == 5 then "" else ", #ff181825"}"; inactive_colors = "#ffcdd6f4, #ff313244, #ff3d3d5e, #ff2f2f48, #ff0c0c12, #ff151520, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff09090d, #ff89b4fa, #ff11111b, #ff89b4fa, #ffcba6f7, #ff181825, #ffffffff, #ff1e1e2e, #ffcdd6f4, #806c7086, " + "${if v == 5 then "#806c7086" else "#ffa6adc8, #ff89b4fa"}"; }; }; in { "${confFile 5}".text = toINI ( lib.recursiveUpdate sharedConf { Appearance = { color_scheme_path = absColorsFile 5; }; Fonts = { fixed = "\"Noto Sans,10,-1,5,50,0,0,0,0,0,Regular\""; general = "\"Noto Sans,10,-1,5,50,0,0,0,0,0,Regular\""; }; } ); "${confFile 6}".text = toINI ( lib.recursiveUpdate sharedConf { Appearance = { color_scheme_path = absColorsFile 6; }; Fonts = { fixed = "\"Noto Sans,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular\""; general = "\"Noto Sans,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular\""; }; } ); "${colorsFile 5}".text = toINI (colorsConf 5); "${colorsFile 6}".text = toINI (colorsConf 6); }; }; kdeglobals = { UiSettings = { # Without setting specifically this key to this value, many config # values for Breeze both from kdeglobals and the qt colorscheme # are ignored when running outside of Plasma. ColorScheme = "*"; }; # The colors used here are the Catppuccin Mocha Blue colors. More specifically, # I stole them directly from the values the offical Catppuccin-KDE distribution # sets when you apply that theme inside KDE. "ColorEffects:Disabled" = { ChangeSelectionColor = ""; Color = "30, 30, 46"; ColorAmount = "0.3"; ColorEffect = "2"; ContrastAmount = "0.1"; ContrastEffect = "0"; Enable = ""; IntensityAmount = "-1"; IntensityEffect = "0"; }; "ColorEffects:Inactive" = { ChangeSelectionColor = "true"; Color = "30, 30, 46"; ColorAmount = "0.5"; ColorEffect = "3"; ContrastAmount = "0"; ContrastEffect = "0"; Enable = "true"; IntensityAmount = "0"; IntensityEffect = "0"; }; "Colors:Button" = { BackgroundAlternate = "137,180,250"; BackgroundNormal = "49, 50, 68"; DecorationFocus = "137,180,250"; DecorationHover = "49, 50, 68"; ForegroundActive = "250, 179, 135"; ForegroundInactive = "166, 173, 200"; ForegroundLink = "137,180,250"; ForegroundNegative = "243, 139, 168"; ForegroundNeutral = "249, 226, 175"; ForegroundNormal = "205, 214, 244"; ForegroundPositive = "166, 227, 161"; ForegroundVisited = "203, 166, 247"; }; "Colors:Complementary" = { BackgroundAlternate = "17, 17, 27"; BackgroundNormal = "24, 24, 37"; DecorationFocus = "137,180,250"; DecorationHover = "49, 50, 68"; ForegroundActive = "250, 179, 135"; ForegroundInactive = "166, 173, 200"; ForegroundLink = "137,180,250"; ForegroundNegative = "243, 139, 168"; ForegroundNeutral = "249, 226, 175"; ForegroundNormal = "205, 214, 244"; ForegroundPositive = "166, 227, 161"; ForegroundVisited = "203, 166, 247"; }; "Colors:Header" = { BackgroundAlternate = "17, 17, 27"; BackgroundNormal = "24, 24, 37"; DecorationFocus = "137,180,250"; DecorationHover = "49, 50, 68"; ForegroundActive = "250, 179, 135"; ForegroundInactive = "166, 173, 200"; ForegroundLink = "137,180,250"; ForegroundNegative = "243, 139, 168"; ForegroundNeutral = "249, 226, 175"; ForegroundNormal = "205, 214, 244"; ForegroundPositive = "166, 227, 161"; ForegroundVisited = "203, 166, 247"; }; "Colors:Selection" = { BackgroundAlternate = "137,180,250"; BackgroundNormal = "137,180,250"; DecorationFocus = "137,180,250"; DecorationHover = "49, 50, 68"; ForegroundActive = "250, 179, 135"; ForegroundInactive = "24, 24, 37"; ForegroundLink = "137,180,250"; ForegroundNegative = "243, 139, 168"; ForegroundNeutral = "249, 226, 175"; ForegroundNormal = "17, 17, 27"; ForegroundPositive = "166, 227, 161"; ForegroundVisited = "203, 166, 247"; }; "Colors:Tooltip" = { BackgroundAlternate = "27,25,35"; BackgroundNormal = "30, 30, 46"; DecorationFocus = "137,180,250"; DecorationHover = "49, 50, 68"; ForegroundActive = "250, 179, 135"; ForegroundInactive = "166, 173, 200"; ForegroundLink = "137,180,250"; ForegroundNegative = "243, 139, 168"; ForegroundNeutral = "249, 226, 175"; ForegroundNormal = "205, 214, 244"; ForegroundPositive = "166, 227, 161"; ForegroundVisited = "203, 166, 247"; }; "Colors:View" = { BackgroundAlternate = "24, 24, 37"; BackgroundNormal = "30, 30, 46"; DecorationFocus = "137,180,250"; DecorationHover = "49, 50, 68"; ForegroundActive = "250, 179, 135"; ForegroundInactive = "166, 173, 200"; ForegroundLink = "137,180,250"; ForegroundNegative = "243, 139, 168"; ForegroundNeutral = "249, 226, 175"; ForegroundNormal = "205, 214, 244"; ForegroundPositive = "166, 227, 161"; ForegroundVisited = "203, 166, 247"; }; "Colors:Window" = { BackgroundAlternate = "17, 17, 27"; BackgroundNormal = "24, 24, 37"; DecorationFocus = "137,180,250"; DecorationHover = "49, 50, 68"; ForegroundActive = "250, 179, 135"; ForegroundInactive = "166, 173, 200"; ForegroundLink = "137,180,250"; ForegroundNegative = "243, 139, 168"; ForegroundNeutral = "249, 226, 175"; ForegroundNormal = "205, 214, 244"; ForegroundPositive = "166, 227, 161"; ForegroundVisited = "203, 166, 247"; }; }; }