{ config, pkgs, lib, ... }: let themeName = "Breeze"; gtk3and4settings = lib.generators.toINI {} { Settings = { gtk-theme-name = themeName; gtk-cursor-theme-name = "breeze_cursors"; }; }; gtk2settings = '' include "/run/current-system/sw/share/themes/${themeName}-Dark/gtk-2.0/gtkrc" gtk-theme-name="${themeName}-Dark" ''; # Set up the default kde options kdeglobals = lib.generators.toINI {} { KDE.LookAndFeelPackage = "org.kde.breezedarktint.desktop"; KDE.SingleClick = false; General = { accentColorFromWallpaper = true; AccentColor = "172,53,164" ; }; }; breezeTint = pkgs.stdenv.mkDerivation { name = "breeze-tint"; src = "${pkgs.breeze-qt5}"; patches = [ ./patches/BreezeTint.patch ]; installPhase = '' runHook preInstall mkdir -p $out/share/color-schemes/ cp -r share/color-schemes/* $out/share/color-schemes/ runHook postInstall ''; }; lookAndFeel = pkgs.stdenv.mkDerivation { name = "toast-look-and-feel"; src = "${pkgs.plasma-workspace}"; patches = [ ./patches/TintedLookAndFeel.patch ]; installPhase = '' runHook preInstall mkdir -p $out/share/plasma/look-and-feel/ cp -r share/plasma/look-and-feel/* $out/share/plasma/look-and-feel/ runHook postInstall ''; }; # /etc/xdg is not read by plasma, so to change the default settings you need to put them in a package plasmaDefaults = pkgs.stdenv.mkDerivation { name = "toast-plasma-defaults"; dontUnpack = true; installPhase = '' runHook preInstall set -x mkdir -p $out/etc/xdg echo "${kdeglobals}" > $out/etc/xdg/kdeglobals runHook postInstall ''; }; in { services.xserver = { # Enable the Plasma 5 Desktop Environment desktopManager.plasma5.enable = true; displayManager.defaultSession = "plasmawayland"; }; # GTK apps need dconf to grab the correct theme on Wayland programs.dconf.enable = true; # The NixOS dconf module doesn't support creating databases # (https://github.com/NixOS/nixpkgs/issues/54150), so I'm # doing it manualy # https://help.gnome.org/admin/system-admin-guide/stable/dconf-custom-defaults.html.en environment.etc = { "dconf/profile/user".text = "user-db:user\nsystem-db:local"; "dconf/db/local.d/00-defaultTheme".text = '' [org/gnome/desktop/interface] gtk-theme='${themeName}' ''; }; system.activationScripts = { dconf = { text= '' echo "updating system dconf database..." ${pkgs.dconf}/bin/dconf update ''; deps = [ "etc" ]; }; }; # Set up GTK to use Breeze instead of adwaita by default # Theese only seem to work on X11, not wayland environment.etc = { "xdg/gtk-4.0/settings.ini".text = gtk3and4settings; "xdg/gtk-3.0/settings.ini".text = gtk3and4settings; "gtk-2.0/gtkrc".text = gtk2settings; }; /* Install the patched Breeze color schemes and look and feel packages, as well as the plasma default configs */ environment.systemPackages = [ breezeTint lookAndFeel plasmaDefaults ]; }