nix-dotfiles/modules/desktop/themes/gruvbox/gruvbox.nix

82 lines
2.2 KiB
Nix

{ inputs, config, lib, pkgs, system, ... }:
with lib;
let
cfg = config.modules.desktop.themes;
# TODO: gruvbox theme doesn't use these that much
accent = "pink";
accentBase = "base17";
dark = true;
darkString = if dark then "dark" else "light";
scheme = "${inputs.tt-schemes}/base24/gruvbox-${if dark then "dark" else "light"}.yaml";
pascalCase = s: (toUpper (substring 0 1 s)) + (toLower (substring 1 (stringLength s) s));
in {
config = mkIf (cfg.active == "gruvbox") {
scheme = scheme;
modules.desktop.themes = {
dark = dark;
rounding = 0;
gtkTheme = {
name = "Gruvbox-${pascalCase accent}-${pascalCase darkString}-Compact";
package = pkgs.gruvbox-gtk-theme.override {
colorVariants = [ darkString ];
themeVariants = [ accent ];
tweakVariants = [ "macos" ];
sizeVariants = [ "compact" ];
};
};
iconTheme = {
name = "Gruvbox-Plus-${pascalCase darkString}";
package = pkgs.gruvbox-plus-icons;
};
cursorTheme = {
name = "macOS";
package = pkgs.apple-cursor;
};
editor = {
vscode = {
colorTheme = {
name = "Gruvbox ${pascalCase darkString} Medium";
extension = pkgs.vscode-extensions.jdinhlife.gruvbox;
};
iconTheme = {
name = "material-icon-theme";
extension = pkgs.vscode-extensions.pkief.material-icon-theme;
};
};
};
niri = let
colors = config.scheme.withHashtag;
in with colors; {
accent = colors.${accentBase};
inactive = "${base02}";
shadow = "${base11}";
background = if dark then "${base11}" else "${base05}";
};
waybarTop = "@define-color accent @${accentBase};";
wob = with config.scheme; {
borderColor = "${base04}FF";
backgroundColor = "${base01}CC";
barColor = "${base05}FF";
};
rofiTop = "* { accent: @${accentBase}; }";
wezterm = ''
config.color_scheme = 'Gruvbox${pascalCase darkString}'
'';
vicinae = "gruvbox-${if dark then "dark" else "light"}";
};
};
}