cleaned up and simplified theming

This commit is contained in:
Chris Kruining 2024-09-01 22:29:05 +02:00
parent 39939714b7
commit d531fb9c59
12 changed files with 249 additions and 452 deletions

View file

@ -10,138 +10,54 @@ let
desktop = config.modules.desktop;
in {
options.modules.themes = let
inherit (lib.options) mkOption mkPackageOption;
inherit (lib.types) attrsOf int lines listOf nullOr path package str;
inherit (lib.my) mkOpt toFilteredImage;
inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) nullOr enum;
in {
active = mkOption {
type = nullOr str;
default = null;
apply = v: let
theme = getEnv "THEME";
in
if theme != ""
then theme
else v;
description = ''
Name of the theme which ought to be applied.
Can be overridden by the `THEME` environment variable.
'';
enable = mkEnableOption "Theming (Stylix)";
theme = mkOption {
type = nullOr (enum [ "everforest" "catppuccin-latte" "chalk" ]);
default = "everforest";
description = "The theme to set the system to";
example = "everforest";
};
wallpaper = mkOpt (nullOr path) null;
loginWallpaper = mkOpt (nullOr path) (
if cfg.wallpaper != null
then toFilteredImage cfg.wallpaper "-gaussian-blur 0x2 -modulate 70 -level 5%"
else null
);
gtk = {
name = mkOpt str "";
package = mkPackageOption pkgs "gtk" {};
};
iconTheme = {
name = mkOpt str "";
package = mkPackageOption pkgs "icon" {};
};
pointer = {
name = mkOpt str "";
package = mkPackageOption pkgs "pointer" {};
size = mkOpt int 0;
};
onReload = mkOpt (attrsOf lines) {};
fontConfig = {
packages = mkOpt (listOf package) [];
mono = mkOpt (listOf str) [""];
sans = mkOpt (listOf str) [""];
emoji = mkOpt (listOf str) [""];
};
font = {
mono = {
family = mkOpt str "";
weight = mkOpt str "Bold";
weightAlt = mkOpt str "Bold";
weightNum = mkOpt int 700;
size = mkOpt int 13;
};
sans = {
family = mkOpt str "";
weight = mkOpt str "SemiBold";
weightAlt = mkOpt str "DemiBold";
weightNum = mkOpt int 600;
size = mkOpt int 10;
};
};
colors = {
main = {
normal = {
black = mkOpt str "#000000"; # 0
red = mkOpt str "#FF0000"; # 1
green = mkOpt str "#00FF00"; # 2
yellow = mkOpt str "#FFFF00"; # 3
blue = mkOpt str "#0000FF"; # 4
magenta = mkOpt str "#FF00FF"; # 5
cyan = mkOpt str "#00FFFF"; # 6
white = mkOpt str "#BBBBBB"; # 7
};
bright = {
black = mkOpt str "#888888"; # 8
red = mkOpt str "#FF8800"; # 9
green = mkOpt str "#00FF80"; # 10
yellow = mkOpt str "#FF8800"; # 11
blue = mkOpt str "#0088FF"; # 12
magenta = mkOpt str "#FF88FF"; # 13
cyan = mkOpt str "#88FFFF"; # 14
white = mkOpt str "#FFFFFF"; # 15
};
types = let
inherit (cfg.colors.main.normal) black red white yellow;
inherit (cfg.colors.main.types) bg fg;
in {
bg = mkOpt str black;
fg = mkOpt str white;
panelbg = mkOpt str bg;
panelfg = mkOpt str fg;
border = mkOpt str bg;
error = mkOpt str red;
warning = mkOpt str yellow;
highlight = mkOpt str white;
};
};
rofi = {
bg = {
main = mkOpt str "#FFFFFF";
alt = mkOpt str "#FFFFFF";
bar = mkOpt str "#FFFFFF";
};
fg = mkOpt str "#FFFFFF";
ribbon = {
outer = mkOpt str "#FFFFFF";
inner = mkOpt str "#FFFFFF";
};
selected = mkOpt str "#FFFFFF";
urgent = mkOpt str "#FFFFFF";
transparent = mkOpt str "#FFFFFF";
};
};
editor = {
neovim = {
light = mkOpt str "";
dark = mkOpt str "";
};
polarity = mkOption {
type = nullOr (enum [ "dark" "light" ]);
default = "dark";
description = "determine if system is in dark or light mode";
};
};
config = mkIf (cfg.active != null) (mkMerge [
(mkIf (desktop.type == "wayland") (mkMerge []))
]);
config = mkIf (cfg.enable) {
stylix = {
enable = true;
base16Scheme = "${pkgs.base16-schemes}/share/themes/${cfg.theme}.yaml";
image = ./${cfg.theme}.jpg;
polarity = cfg.polarity;
fonts = {
serif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Serif";
};
sansSerif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans";
};
monospace = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans Mono";
};
emoji = {
package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji";
};
};
};
};
}

View file

Before

Width:  |  Height:  |  Size: 183 KiB

After

Width:  |  Height:  |  Size: 183 KiB

Before After
Before After

View file

@ -1,135 +0,0 @@
{ config, options, lib, pkgs, ... }:
let
inherit (builtins) toString readFile;
inherit (lib.attrsets) attrValues;
inherit (lib.modules) mkDefault mkIf mkMerge;
inherit (lib.strings) concatMapStringsSep;
cfg = config.modules.themes;
in
{
config = mkIf (cfg.active == "everforest")
{
stylix = {
base16Scheme = "${pkgs.base16-schemes}/share/themes/everforest.yaml";
image = ./assets/wallpaper.jpg;
polarity = "dark";
fonts = {
serif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Serif";
};
sansSerif = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans";
};
monospace = {
package = pkgs.dejavu_fonts;
name = "DejaVu Sans Mono";
};
emoji = {
package = pkgs.noto-fonts-emoji;
name = "Noto Color Emoji";
};
};
};
# modules.themes = {
# wallpaper = mkDefault ./assets/wallpaper.jpg;
#
# gtk = {
# name = "Everforest-Dark-BL";
# package = pkgs.my.everforest-gtk;
# };
#
# iconTheme = {
# name = "everforest-dark";
# package = pkgs.fluent-icon-theme.override {
# colorVariants = [];
# };
# };
#
# pointer = {
# name = "Bibata-Modern-Classic";
# package = pkgs.bibata-cursors;
# size = 24;
# };
#
# fontConfig = {
# packages = attrValues {
# inherit (pkgs) noto-fonts-emoji sarasa-gothic;
# google-fonts = pkgs.google-fonts.override {fonts = ["Cardo"];};
# nerdfonts =
# pkgs.nerdfonts.override {fonts = ["CascadiaCode" "VictorMono"];};
# };
# mono = ["VictorMono Nerd Font" "Sarasa Mono SC"];
# sans = ["Caskaydia Cove Nerd Font" "Sarasa Gothic SC"];
# emoji = ["Noto Color Emoji"];
# };
#
# font = {
# mono.family = "VictorMono Nerd Font";
# sans.family = "CaskaydiaCove Nerd Font";
# };
#
# colors = {
# main = {
# normal = {
# black = "#15161e";
# red = "#f7768e";
# green = "#9ece6a";
# yellow = "#e0af68";
# blue = "#7aa2f7";
# magenta = "#bb9af7";
# cyan = "#7dcfff";
# white = "#a9b1d6";
# };
# bright = {
# black = "#414868";
# red = "#f7768e";
# green = "#9ece6a";
# yellow = "#e0af68";
# blue = "#7aa2f7";
# magenta = "#bb9af7";
# cyan = "#7dcfff";
# white = "#c0caf5";
# };
# types = {
# fg = "#c0caf5";
# bg = "#1a1b26";
# panelbg = "#ff9e64";
# border = "#1abc9c";
# highlight = "#3d59a1";
# };
# };
#
# rofi = {
# bg = {
# main = "hsla(235, 18%, 12%, 1)";
# alt = "hsla(235, 18%, 12%, 0)";
# bar = "hsla(229, 24%, 18%, 1)";
# };
# fg = "hsla(228, 72%, 85%, 1)";
# ribbon = {
# outer = "hsla(188, 68%, 27%, 1)";
# inner = "hsla(202, 76%, 24%, 1)";
# };
# selected = "hsla(220, 88%, 72%, 1)";
# urgent = "hsl(349, 89%, 72%, 1)";
# transparent = "hsla(0, 0%, 0%, 0)";
# };
# };
#
# editor = {
# neovim = {
# dark = "everforest";
# light = "everforest";
# };
# };
# };
};
}