155 lines
4 KiB
Nix
155 lines
4 KiB
Nix
{ lib, config, ... }:
|
|
|
|
with lib;
|
|
with lib.my;
|
|
let
|
|
cfg = config.modules.desktop.themes;
|
|
in {
|
|
options.modules.desktop.themes = with types; {
|
|
active = mkOption {
|
|
type = types.nullOr types.str;
|
|
default = null;
|
|
description = "Name of the theme to apply; see modules/desktop/themes for a list of valid options";
|
|
};
|
|
|
|
dark = mkOpt bool false;
|
|
|
|
gtkTheme = {
|
|
name = mkOpt str "";
|
|
package = mkPackageOption pkgs "gtk" {};
|
|
};
|
|
kvantumTheme = {
|
|
name = mkOpt str "";
|
|
package = mkPackageOption pkgs "kvantum" {};
|
|
};
|
|
iconTheme = {
|
|
name = mkOpt str "";
|
|
package = mkPackageOption pkgs "icon" {};
|
|
};
|
|
cursorTheme = {
|
|
name = mkOpt str "";
|
|
package = mkPackageOption pkgs "cursor" {};
|
|
};
|
|
sddmTheme = {
|
|
name = mkOpt str "";
|
|
package = mkPackageOption pkgs "sddm" {};
|
|
};
|
|
plymouthTheme = {
|
|
name = mkOpt str "";
|
|
package = mkPackageOption pkgs "plymouth" {};
|
|
};
|
|
|
|
editor = {
|
|
vscode = {
|
|
colorTheme = {
|
|
name = mkOpt str "";
|
|
extension = mkPackageOption pkgs "extension" {};
|
|
};
|
|
iconTheme = {
|
|
name = mkOpt str "";
|
|
extension = mkPackageOption pkgs "extension" {};
|
|
};
|
|
};
|
|
};
|
|
|
|
hyprland = {
|
|
source = mkOpt (nullOr str) null;
|
|
extraConfig = mkOpt (nullOr str) null;
|
|
};
|
|
|
|
waybar = mkOpt str "";
|
|
|
|
wob = {
|
|
borderColor = mkOpt (nullOr str) null;
|
|
backgroundColor = mkOpt (nullOr str) null;
|
|
barColor = mkOpt (nullOr str) null;
|
|
};
|
|
|
|
rofi = mkOpt (nullOr path) null;
|
|
|
|
wezterm = mkOpt (nullOr str) null;
|
|
|
|
nwg-drawer = mkOpt (nullOr str) null;
|
|
};
|
|
|
|
config = mkIf (cfg.active != null) {
|
|
programs.dconf.enable = true;
|
|
|
|
hm.dconf = {
|
|
enable = true;
|
|
settings."org/gnome/desktop/interface".color-scheme = mkIf cfg.dark "prefer-dark";
|
|
settings."org/gnome/desktop/interface".gtk-theme = cfg.gtkTheme.name;
|
|
settings."org/gnome/desktop/interface".icon-theme = cfg.iconTheme.name;
|
|
settings."org/gnome/desktop/interface".cursor-theme = cfg.cursorTheme.name;
|
|
|
|
settings."org/gnome/shell/extensions/user-theme".name = cfg.gtkTheme.name;
|
|
};
|
|
|
|
hm.gtk = {
|
|
enable = true;
|
|
cursorTheme = cfg.cursorTheme;
|
|
iconTheme = cfg.iconTheme;
|
|
theme = cfg.gtkTheme;
|
|
gtk3.extraConfig.gtk-application-prefer-dark-theme = mkIf cfg.dark "1";
|
|
gtk4.extraConfig.gtk-application-prefer-dark-theme = mkIf cfg.dark "1";
|
|
};
|
|
|
|
hm.qt = {
|
|
enable = true;
|
|
platformTheme.name = "kvantum";
|
|
style.name = "kvantum";
|
|
};
|
|
|
|
hm.home.pointerCursor = {
|
|
gtk.enable = true;
|
|
x11.enable = true;
|
|
name = cfg.cursorTheme.name;
|
|
package = cfg.cursorTheme.package;
|
|
};
|
|
|
|
hm.services.dunst.iconTheme = {
|
|
name = cfg.iconTheme.name;
|
|
package = cfg.iconTheme.package;
|
|
};
|
|
|
|
hm.programs.vscode = {
|
|
extensions = [
|
|
cfg.editor.vscode.colorTheme.extension
|
|
cfg.editor.vscode.iconTheme.extension
|
|
];
|
|
userSettings = {
|
|
"workbench.colorTheme" = cfg.editor.vscode.colorTheme.name;
|
|
"workbench.iconTheme" = cfg.editor.vscode.iconTheme.name;
|
|
};
|
|
};
|
|
|
|
hm.wayland.windowManager.hyprland = {
|
|
settings.source = mkIf (cfg.hyprland.source != null) [ cfg.hyprland.source ];
|
|
extraConfig = mkIf (cfg.hyprland.extraConfig != null) cfg.hyprland.extraConfig;
|
|
};
|
|
|
|
hm.programs.waybar.style = cfg.waybar;
|
|
|
|
hm.services.wob.settings."" = {
|
|
border_color = cfg.wob.borderColor;
|
|
background_color = cfg.wob.backgroundColor;
|
|
bar_color = cfg.wob.barColor;
|
|
};
|
|
|
|
hm.programs.rofi.theme = cfg.rofi;
|
|
|
|
hm.xdg.configFile = {
|
|
# kvantum
|
|
"Kvantum/${cfg.kvantumTheme.name}".source = "${cfg.kvantumTheme.package}/share/Kvantum/${cfg.kvantumTheme.name}";
|
|
"Kvantum/kvantum.kvconfig" = {
|
|
text = ''
|
|
[General]
|
|
theme=${cfg.kvantumTheme.name}
|
|
'';
|
|
};
|
|
|
|
# nwg-drawer
|
|
"nwg-drawer/drawer.css".text = cfg.nwg-drawer;
|
|
};
|
|
};
|
|
}
|