tons of theme tweaks, +gruvbox

This commit is contained in:
Reid 2026-04-22 21:32:27 -07:00
parent 80d22a470a
commit 2ad77494b2
Signed by: reidlab
GPG key ID: DAF5EAF6665839FD
30 changed files with 410 additions and 371 deletions

View file

@ -44,7 +44,7 @@ in {
default = pkgs.writeShellScript "awww-swap" ''
set -euo pipefail
file=$(ls ${cfg.wallpapersFolder} | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -sep '\n' -i -p "select a wallpaper")
file=$(ls ${cfg.wallpapersFolder} | dmenu -p "select a wallpaper")
wallpaper="${cfg.wallpapersFolder}/$file"
[ ! -f "$wallpaper" ] && exit 1

View file

@ -1,32 +0,0 @@
{ lib, config, pkgs, inputs, ... }:
with lib;
let
cfg = config.modules.desktop.cliphist;
in {
options.modules.desktop.cliphist = {
enable = mkEnableOption "enable cliphist, a clipboard manager for wayland";
package = mkOption {
type = types.package;
default = pkgs.cliphist;
};
summonScript = mkOption {
type = types.package;
default = pkgs.writeShellScript "cliphist-summon" ''
set -euo pipefail
${lib.getExe cfg.package} list | ${lib.getExe config.modules.desktop.fuzzel.package} --dmenu | ${lib.getExe cfg.package} decode | wl-copy
'';
};
};
config = mkIf cfg.enable {
hm.services.cliphist = {
enable = true;
allowImages = true;
package = cfg.package;
};
modules.desktop.rofi.enable = true;
};
}

View file

@ -12,20 +12,22 @@ in {
hm.services.dunst = {
enable = true;
settings = with config.colorScheme.palette; {
settings = let
inherit (config.modules.desktop.themes) rounding padding;
in with config.scheme.withHashtag; {
global = {
follow = "mouse";
width = 300;
height = 145;
frame_color = "#${base02}";
frame_color = "${base02}";
origin = "top-right";
# various non-color theming settings
offset = "15x15";
padding = 15;
horizontal_padding = 15;
text_icon_padding = 15;
corner_radius = 8;
offset = let offset = builtins.toString (padding * 2); in "${offset}x${offset}";
padding = padding;
horizontal_padding = padding;
text_icon_padding = padding;
corner_radius = rounding;
gap_size = 0;
frame_width = 1;
@ -33,7 +35,7 @@ in {
progress_bar = true;
progress_bar_frame_width = 1;
progress_bar_corner_radius = 8;
progress_bar_corner_radius = rounding;
alignment = "left";
markup = "full";
@ -56,19 +58,19 @@ in {
};
urgency_low = {
background = "#${base00}FF";
foreground = "#${base05}";
background = "${base00}FF";
foreground = "${base05}";
};
urgency_normal = {
background = "#${base00}FF";
foreground = "#${base05}";
background = "${base00}FF";
foreground = "${base05}";
};
urgency_critical = {
background = "#${base00}FF";
foreground = "#${base05}";
frame_color = "#${base08}"; # base16 spec says red
background = "${base00}FF";
foreground = "${base05}";
frame_color = "${base08}"; # base16 spec says red
};
};
};

View file

@ -123,6 +123,8 @@ in {
noto-fonts-color-emoji
noto-fonts-monochrome-emoji
font-awesome
pkgs.my.loveletter
];
})
]);

View file

@ -1,38 +0,0 @@
{ lib, config, pkgs, ... }:
with lib;
let
cfg = config.modules.desktop.fuzzel;
in {
options.modules.desktop.fuzzel = {
enable = mkEnableOption "Enable fuzzel, an application launcher similar to rofi's drun mode";
package = mkOption {
type = types.package;
default = pkgs.fuzzel;
};
};
config = mkIf cfg.enable {
hm.programs.fuzzel = {
enable = true;
package = cfg.package;
settings = {
main = {
terminal = "wezterm start";
font = with config.modules.desktop.fonts.fonts.monospace; "${family}:pixelsize=${toString size}";
prompt = "> ";
dpi-aware = "no";
lines = 20;
width = 28;
letter-spacing = 0.5;
horizontal-pad = 32;
vertical-pad = 8;
};
border = {
width = 1;
radius = config.modules.desktop.fonts.fonts.monospace.size;
};
};
};
};
}

View file

@ -20,7 +20,9 @@ in {
enable = true;
package = cfg.package;
settings = with config.colorScheme.palette; {
settings = let
inherit (config.modules.desktop.themes) rounding;
in with config.scheme; {
general = {
hide_cursor = false;
text_trim = true;
@ -38,7 +40,7 @@ in {
{
size = "280, 280";
color = "rgb(${base00})";
rounding = 48;
rounding = rounding;
position = "0, 45";
halign = "center"; valign = "center";
@ -52,8 +54,7 @@ in {
position = "0, 105";
text = "cmd[update:1000] echo \"<span font_weight='1000'>$(date +'%H')</span>\"";
font_size = 78;
# TODO: make more dynamic
color = "rgb(f5c2e7)"; # catppuccin pink
color = "rgb(${base05})";
font_family = config.modules.desktop.fonts.fonts.sansSerif.family;
halign = "center"; valign = "center";
}
@ -100,7 +101,8 @@ in {
{
position = "0, -140";
size = "280, 48";
outline_thickness = 2;
rounding = rounding;
outline_thickness = 1;
dots_size = 0.3;
fade_on_empty = false;
placeholder_text = "";

View file

@ -65,7 +65,7 @@ in {
};
layout = {
gaps = 6;
gaps = config.modules.desktop.themes.padding;
center-focused-column = "on-overflow";
@ -229,7 +229,7 @@ in {
# TODO: configure popups
window-rules = [
{
geometry-corner-radius = allCorners 10.0;
geometry-corner-radius = allCorners (config.modules.desktop.themes.rounding * 1.0);
clip-to-geometry = true;
}
{
@ -310,7 +310,6 @@ in {
];
# TODO: add shadows onto notifications. weird geometry beware !!!
# TODO: rounded vicinae
layer-rules = [
{
matches = [
@ -318,13 +317,11 @@ in {
# obliterate all dmenu-like things--too dangerous to stream (clipboard history, passwords)
{ namespace = "^rofi$"; }
{ namespace = "^vicinae$"; }
{ namespace = "^launcher$"; }
];
block-out-from = "screen-capture";
}
{
matches = [
{ namespace = "^launcher$"; }
{ namespace = "^rofi$"; }
{ namespace = "^vicinae$"; }
{ namespace = "^wob$"; }
@ -339,13 +336,12 @@ in {
}
# shadow rounded corner cases...
# defined in program config but we need to edit geometry too for shadows!!
# monospace
{
matches = [
{ namespace = "^launcher$"; }
{ namespace = "^rofi$"; }
{ namespace = "^vicinae$"; }
];
geometry-corner-radius = allCorners (config.modules.desktop.fonts.fonts.monospace.size * 1.0); # its 1em, so
geometry-corner-radius = allCorners (config.modules.desktop.themes.rounding * 1.0);
}
];
@ -354,7 +350,6 @@ in {
in {
"Mod+Shift+Slash".action = show-hotkey-overlay;
# "Mod+D".action = spawn "fuzzel";
"Mod+D".action = spawn "vicinae" "vicinae://toggle";
"Mod+Q".action = close-window;
@ -431,7 +426,7 @@ in {
"Mod+Shift+Minus".action = set-window-height "-10%";
"Mod+Shift+Equal".action = set-window-height "+10%";
"Print".action.screenshot = { show-pointer = false; };
"Print".action.screenshot-screen = { show-pointer = false; };
"Mod+Grave".action = toggle-overview;
@ -457,7 +452,6 @@ in {
"XF86AudioNext".action = sh "${lib.getExe pkgs.playerctl} next";
"Mod+Shift+C".action = sh "${lib.getExe pkgs.hyprpicker} -a";
# "Mod+V".action = sh "${config.modules.desktop.cliphist.summonScript}";
"Mod+V".action = spawn "vicinae" "vicinae://extensions/vicinae/clipboard/history";
"Mod+Shift+Control+T".action = toggle-debug-tint;

View file

@ -13,20 +13,25 @@ in {
services.greetd = {
enable = true;
settings = {
# TODO: fix focus requiring a mouse click
default_session = let
swaymsg = "${pkgs.sway}/bin/swaymsg";
swayConfig = let
monitors = config.modules.desktop.monitors;
monitorConfig = if monitors.enable && (builtins.length monitors.monitors > 0) then
let
firstMonitor = builtins.head monitors.monitors;
in
"output ${firstMonitor.name} scale ${toString firstMonitor.scale}"
in ''
output "${firstMonitor.name}" scale ${toString firstMonitor.scale}
workspace 1 output "${firstMonitor.name}"
for_window [all] move container to workspace 1
''
else
"";
in command: pkgs.writeText "kiosk-sway-config" ''
${monitorConfig}
xwayland disable
exec '${command}; ${pkgs.sway}/bin/swaymsg exit'
exec '${swaymsg} workspace 1; ${command}; ${swaymsg} exit'
'';
swayKiosk = command: "${pkgs.dbus}/bin/dbus-run-session ${lib.getExe pkgs.sway} --unsupported-gpu --config ${swayConfig command}";
in {

View file

@ -6,6 +6,7 @@ let
in {
options.modules.desktop.rofi = {
enable = mkEnableOption "Enable rofi, a window switcher, run dialog and dmenu replacement";
dmenu = mkEnableOption "Use as a replacement for dmenu";
package = mkOption {
type = types.package;
default = pkgs.rofi-unwrapped;
@ -23,5 +24,20 @@ in {
show-icons = true;
};
};
user.packages = mkIf cfg.dmenu [ (pkgs.writeShellScriptBin "dmenu" ''
set -euo pipefail
prompt="select option"
while [ $# -gt 0 ]; do
case "$1" in
-p) shift; prompt="$1" ;;
esac
shift
done
rofi -dmenu -i -p "$prompt"
'') ];
};
}

View file

@ -4,14 +4,16 @@ with lib;
let
cfg = config.modules.desktop.themes;
accent = "pink";
accentBase = "base17";
variant = "mocha";
dark = variant != "latte";
colorScheme = inputs.nix-colors.colorSchemes.${"catppuccin-${variant}"};
darkString = if dark then "dark" else "light";
scheme = "${inputs.tt-schemes}/base24/catppuccin-${variant}.yaml";
pascalCase = s: (toUpper (substring 0 1 s)) + (toLower (substring 1 (stringLength s) s));
in {
config = mkIf (cfg.active == "catppuccin") {
colorScheme = colorScheme;
scheme = scheme;
modules.desktop.themes = {
dark = dark;
@ -35,14 +37,13 @@ in {
};
iconTheme = {
name = "WhiteSur-${if dark then "dark" else "light"}";
name = "WhiteSur-${darkString}";
package = pkgs.whitesur-icon-theme;
};
cursorTheme = {
name = "graphite-${if dark then "dark" else "light"}";
package = pkgs.graphite-cursors;
size = 24;
name = "macOS";
package = pkgs.apple-cursor;
};
editor = {
@ -68,36 +69,24 @@ in {
};
};
niri = with colorScheme.palette; {
# TODO: make more dynamic
# catppuccin pink
accent = "#f5c2e7";
inactive = "#${base02}";
# catppuccin crust
shadow = "#11111b";
# catppuccin crust
background = "#11111b";
niri = let
colors = config.scheme.withHashtag;
in with colors; {
accent = colors.${accentBase};
inactive = "${base02}";
shadow = "${base11}";
background = if dark then "${base11}" else "${base05}";
};
waybar = builtins.concatStringsSep "\n" [
"@import \"${inputs.waybar-catppuccin}/themes/${variant}.css\";"
"@define-color accent @${accent};"
(lib.readFile ./waybar.css)
];
waybarTop = "@define-color accent @${accentBase};";
wob = with colorScheme.palette; {
wob = with config.scheme; {
borderColor = "${base04}FF";
backgroundColor = "${base01}CC";
barColor = "${base05}FF";
};
rofi = builtins.concatStringsSep "\n" [
"@theme \"${inputs.rofi-catppuccin}/themes/catppuccin-${variant}.rasi\""
"* { accent: @${accent}; }"
(lib.readFile ./rofi.rasi)
];
fuzzel = "${inputs.fuzzel-catppuccin}/themes/catppuccin-${variant}/${accent}.ini";
rofiTop = "* { accent: @${accentBase}; }";
wezterm = ''
config.color_scheme = 'Catppuccin ${pascalCase variant}'

View file

@ -10,27 +10,27 @@ element-text, element-icon , mode-switcher {
window {
height: 500px;
border: 1px;
border-radius: 1em;
border-radius: @roundingpx;
border-color: @accent;
background-color: @base;
background-color: @base00;
}
mainbox {
background-color: @base;
background-color: @base00;
}
inputbar {
margin: 10px 5px 5px 5px;
children: [prompt, entry];
background-color: @base;
background-color: @base00;
padding: 1px;
}
prompt {
background-color: transparent;
padding: 1px;
text-color: @text;
border-radius: 1.5em;
text-color: @base05;
border-radius: @roundingpx;
}
textbox-prompt-colon {
@ -41,8 +41,8 @@ textbox-prompt-colon {
entry {
padding: 1px;
margin: 0px;
text-color: @text;
background-color: @base;
text-color: @base05;
background-color: @base00;
}
listview {
@ -50,26 +50,26 @@ listview {
margin: 5px 0px 0px 10px;
columns: 1;
lines: 10;
background-color: @base;
background-color: @base00;
}
element {
padding: 1px;
background-color: @base;
text-color: @text;
background-color: @base00;
text-color: @base05;
}
element-icon {size: 12px;}
element.selected {
background-color: @surface1;
background-color: @base03;
text-color: @accent;
}
scrollbar {
width: 4px ;
border: 0;
handle-color: @text;
handle-color: @base05;
handle-width: 8px ;
padding: 0;
}
@ -78,13 +78,13 @@ mode-switcher {spacing: 0;}
button {
spacing: 0;
background-color: @surface0;
text-color: @subtext1;
background-color: @base02;
text-color: @base04;
vertical-align: 0.5;
horizontal-align: 0.5;
}
button.selected {
background-color: @base;
background-color: @base00;
text-color: @accent;
}

View file

@ -9,21 +9,21 @@ button, button:hover {
}
window#waybar {
color: @text;
background: alpha(@base, 0.9999999);
border-radius: 1em;
color: @base05;
background: alpha(@base00, 0.9999999);
border-radius: @roundingpx;
font-family: "CozetteVector", monospace, "FontAwesome 6 Free", "Noto Sans CJK";
font-size: 13px;
font-size: 13px; /* TODO: make this use proper font size */
font-style: normal;
border: 1px solid @surface0;
border: 1px solid @base02;
}
#workspaces, .modules-right box {
background-color: @surface0;
background-color: @base02;
margin: 0 0.25em;
padding: 0.15em 0.25em;
border-radius: 1em;
border-radius: @roundingpx;
}
.modules-right label.module {
margin: 0 0.5em;
@ -37,32 +37,32 @@ window#waybar {
}
#workspaces {
background-color: @surface0;
background-color: @base02;
padding: 0;
}
#workspaces button {
background-color: transparent;
color: @text;
color: @base05;
padding: 0 0.4em;
transition: none;
}
#workspaces button:nth-child(1) {
border-top-left-radius: 1em;
border-bottom-left-radius: 1em;
border-top-left-radius: @roundingpx;
border-bottom-left-radius: @roundingpx;
}
#workspaces button:nth-last-child(1) {
border-top-right-radius: 1em;
border-bottom-right-radius: 1em;
border-top-right-radius: @roundingpx;
border-bottom-right-radius: @roundingpx;
}
#workspaces button.empty {
color: @overlay1;
color: @base04;
}
#workspaces button.visible {
background: @surface1;
background: @base03;
}
#workspaces button.focused {
@ -71,47 +71,44 @@ window#waybar {
#workspaces button.active {
background: @accent;
color: @surface0;
color: @base02;
}
#workspaces button:hover {
background: rgba(255, 255, 255, 0.1);
color: @text;
color: @base05;
box-shadow: none;
}
#workspaces button.active:hover {
background: @accent;
color: @surface0;
color: @base02;
}
#workspaces button.urgent {
background: @red;
color: @surface0;
background: @base08;
color: @base02;
}
#window {
background: transparent;
}
window#waybar.floating #window {
color: @pink;
}
#clock {
color: @lavender;
color: @base07;
}
#power-profiles-daemon {
color: @teal;
color: @base0C;
}
#cpu, #network {
color: @sapphire;
color: @base16;
}
#network.disabled, #network.disconnected {
color: @overlay1;
color: @base04;
}
@keyframes blink {
to {
color: @text;
color: @base05;
}
}
@ -119,15 +116,15 @@ window#waybar.floating #window {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
color: @lavender;
color: @base07;
}
#memory.warning {
color: @peach;
color: @base09;
animation-name: blink;
animation-duration: 3s;
}
#memory.critical {
color: @maroon;
color: @base12;
animation-name: blink;
animation-duration: 2s;
}
@ -136,40 +133,40 @@ window#waybar.floating #window {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
color: @green;
color: @base0B;
}
/* this here is ditto */
#battery.charging {
color: @green;
color: @base0B;
}
#battery.warning.discharging {
color: @peach;
color: @base09;
animation-name: blink;
animation-duration: 3s;
}
#battery.critical.discharging {
color: @maroon;
color: @base12;
animation-name: blink;
animation-duration: 2s;
}
#backlight, #custom-weather {
color: @yellow;
color: @base0A;
}
#pulseaudio {
color: @pink;
color: @base17;
}
#pulseaudio.muted {
color: @overlay1;
color: @base04;
}
#custom-power {
color: @red;
color: @base08;
}
#custom-wallpaper, #custom-rgb {
color: @overlay1;
color: @base04;
}
#privacy {
@ -178,7 +175,7 @@ window#waybar.floating #window {
}
#privacy-item {
padding: 0 1px;
color: @text;
color: @base05;
}
box#playback {
@ -188,17 +185,17 @@ box#playback {
}
#mpris {
background-color: @surface0;
background-color: @base02;
margin: 0 0.25em;
padding: 0.15em 0.5em;
border-radius: 1em;
border-radius: @roundingpx;
}
#mpris.playing {
color: @accent;
background: @surface0;
background: @base02;
}
#mpris.paused, #mpris.stopped {
color: @overlay1;
color: @base04;
}
window decoration {
@ -206,10 +203,10 @@ window decoration {
}
tooltip, window.popup menu {
background: @base;
border: 1px solid @surface2;
background: @base00;
border: 1px solid @base04;
font-size: 12px;
color: @text;
color: @base05;
}
tooltip *, window.popup {
font-family: CozetteVector, monospace;
@ -217,20 +214,20 @@ tooltip *, window.popup {
tooltip * {
padding: 0px;
margin: 0px;
color: @text;
color: @base05;
}
window.popup separator {
background-color: @surface0;
background-color: @base02;
}
window.popup menuitem:disabled {
color: @overlay1;
color: @base04;
}
window.popup menuitem:hover {
background-color: @accent;
color: @surface0;
color: @base02;
}
window.popup menuitem:hover > box {

View file

@ -12,35 +12,38 @@ in {
description = "Name of the theme to apply; see modules/desktop/themes for a list of valid options";
};
rounding = mkOpt int 10;
padding = mkOpt int 6;
dark = mkOpt bool false;
gtkTheme = {
name = mkOpt str "";
package = mkPackageOption pkgs "gtk" {};
name = mkOpt (nullOr str) null;
package = mkOpt (nullOr package) null;
};
kvantumTheme = {
name = mkOpt str "";
package = mkPackageOption pkgs "kvantum" {};
name = mkOpt (nullOr str) null;
package = mkOpt (nullOr package) null;
};
iconTheme = {
name = mkOpt str "";
package = mkPackageOption pkgs "icon" {};
name = mkOpt (nullOr str) null;
package = mkOpt (nullOr package) null;
};
cursorTheme = {
name = mkOpt str "";
package = mkPackageOption pkgs "cursor" {};
name = mkOpt (nullOr str) null;
package = mkOpt (nullOr package) null;
size = mkOpt int 24;
};
editor = {
vscode = {
colorTheme = {
name = mkOpt str "";
extension = mkPackageOption pkgs "extension" {};
name = mkOpt (nullOr str) null;
extension = mkOpt (nullOr package) null;
};
iconTheme = {
name = mkOpt str "";
extension = mkPackageOption pkgs "extension" {};
name = mkOpt (nullOr str) null;
extension = mkOpt (nullOr package) null;
};
};
};
@ -52,7 +55,7 @@ in {
background = mkOpt str "";
};
waybar = mkOpt str "";
waybarTop = mkOpt str "";
wob = {
borderColor = mkOpt (nullOr str) null;
@ -60,9 +63,7 @@ in {
barColor = mkOpt (nullOr str) null;
};
rofi = mkOpt (nullOr str) null;
fuzzel = mkOpt (nullOr str) null;
rofiTop = mkOpt (nullOr str) null;
wezterm = mkOpt (nullOr str) null;
@ -102,8 +103,8 @@ in {
hm.qt = {
enable = true;
platformTheme.name = "qtct";
style.name = "kvantum";
platformTheme.name = if (cfg.kvantumTheme.name != null) then "qtct" else "gtk3";
style.name = mkIf (cfg.kvantumTheme.name != null) "kvantum";
};
hm.home.pointerCursor = {
@ -136,7 +137,16 @@ in {
};
};
hm.programs.waybar.style = cfg.waybar;
hm.programs.waybar.style = (builtins.replaceStrings
[ "@rounding" ]
[ (builtins.toString cfg.rounding) ]
(builtins.concatStringsSep "\n" ([
cfg.waybarTop
(lib.readFile ./config/waybar.css)
]
++ lib.zipListsWith (name: hex: "@define-color base${name} #${hex};")
(builtins.genList (i: lib.fixedWidthString 2 "0" (lib.toUpper (lib.toHexString i))) 24)
config.scheme.toList)));
hm.services.wob.settings."" = {
border_color = cfg.wob.borderColor;
@ -144,18 +154,16 @@ in {
bar_color = cfg.wob.barColor;
};
# silly litle hack--rofi hm module doesn't play nice with strings
# so, we have to write the config to a file and then read it :P
# ...and then back to a string
hm.programs.rofi.theme = "${pkgs.writeTextFile {
name = "rofi-theme.rasi";
text = cfg.rofi;
}}";
hm.programs.fuzzel.settings.main = {
include = cfg.fuzzel;
icon-theme = cfg.iconTheme.name;
};
hm.programs.rofi.theme = builtins.toFile "rofi.rasi" (builtins.replaceStrings
[ "@rounding" ]
[ (builtins.toString cfg.rounding) ]
(builtins.concatStringsSep "\n" ([
cfg.rofiTop
(lib.readFile ./config/rofi.rasi)
]
++ lib.zipListsWith (name: hex: "* { base${name}: #${hex}; }")
(builtins.genList (i: lib.fixedWidthString 2 "0" (lib.toUpper (lib.toHexString i))) 24)
config.scheme.toList)));
hm.services.vicinae.settings.theme = let
themeConf = {
@ -179,7 +187,7 @@ in {
Appearance = {
icon_theme = cfg.iconTheme.name;
standard_dialogs = "xdgdesktopportal";
style = "kvantum";
style = "kvantum"; # its ok if this is always the case, override it anyway
};
Fonts = with config.modules.desktop.fonts.fonts; {
@ -187,22 +195,25 @@ in {
fixed = ''"${monospace.family},-1,${toString monospace.size},5,${toString weight},${zeros},1"'';
};
};
in {
# technically could cause issues with KDE if we use that
# not a concern for now
"kdeglobals".text = ''
[Icons]
Theme=${cfg.iconTheme.name}
'';
in mkMerge [
{
# technically could cause issues with KDE if we use that
# not a concern for now
"kdeglobals".text = ''
[Icons]
Theme=${cfg.iconTheme.name}
'';
"Kvantum/${cfg.kvantumTheme.name}".source = "${cfg.kvantumTheme.package}/share/Kvantum/${cfg.kvantumTheme.name}";
"Kvantum/kvantum.kvconfig".text = ''
[General]
theme=${cfg.kvantumTheme.name}
'';
"qt5ct/qt5ct.conf".source = iniFmt.generate "qt5ct.conf" (mkQtctConf 5);
"qt6ct/qt6ct.conf".source = iniFmt.generate "qt6ct.conf" (mkQtctConf 6);
};
"qt5ct/qt5ct.conf".source = iniFmt.generate "qt5ct.conf" (mkQtctConf 5);
"qt6ct/qt6ct.conf".source = iniFmt.generate "qt6ct.conf" (mkQtctConf 6);
}
(mkIf (cfg.kvantumTheme.name != null) {
"Kvantum/${cfg.kvantumTheme.name}".source = "${cfg.kvantumTheme.package}/share/Kvantum/${cfg.kvantumTheme.name}";
"Kvantum/kvantum.kvconfig".text = ''
[General]
theme=${cfg.kvantumTheme.name}
'';
})
];
};
}

View file

@ -0,0 +1,82 @@
{ 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"}";
};
};
}

View file

@ -6,6 +6,7 @@ let
in {
options.modules.desktop.vicinae = {
enable = mkEnableOption "Enable vicinae, a launcher built in react";
dmenu = mkEnableOption "Use as a replacement for dmenu";
package = mkOption {
type = types.package;
default = inputs.vicinae.packages.${system}.default;
@ -29,14 +30,15 @@ in {
# i disagree with these
telemetry.system_info = false;
providers.core.entrypoints.sponsor.enable = false;
pop_to_root_on_close = true;
launcher_window = {
opacity = 0.8;
client_side_decorations.enabled = false;
client_side_decorations.enabled = true;
client_side_decorations.border_width = 0;
client_side_decorations.rounding = config.modules.desktop.themes.rounding;
layer_shell = {
enabled = true;
@ -51,14 +53,24 @@ in {
];
providers = {
core.entrypoints = {
keybind-settings.enabled = false;
report-bug.enabled = false;
sponsor.enabled = false;
};
applications = {
preferences = {
defaultAction = "launch";
};
};
files.enabled = false;
manage-shortcuts.enabled = false;
theme.enabled = false;
developer.enabled = false;
};
fallbacks = [ "files:search" ];
escape_key_behavior = "close_window";
font = let
@ -72,5 +84,20 @@ in {
nix
] ++ optional config.modules.desktop.niri.enable niri;
};
user.packages = mkIf cfg.dmenu [ (pkgs.writeShellScriptBin "dmenu" ''
set -euo pipefail
prompt="select option"
while [ $# -gt 0 ]; do
case "$1" in
-p) shift; prompt="$1" ;;
esac
shift
done
vicinae dmenu --placeholder "$prompt"
'') ];
};
}

View file

@ -23,16 +23,18 @@ in {
systemd.enable = true;
package = cfg.package;
settings = {
settings = let
inherit (config.modules.desktop.themes) padding;
in {
mainBar = mkMerge [
{
layer = "top";
position = "top";
spacing = 4;
height = 32;
margin-top = 6;
margin-left = 6;
margin-right = 6;
margin-top = padding;
margin-left = padding;
margin-right = padding;
margin-bottom = 0;
modules-left = [
"niri/workspaces"
@ -81,7 +83,16 @@ in {
powerMenuScript = pkgs.writeShellScript "power-menu" ''
set -euo pipefail
cmd=$(echo ' shutdown| reboot|󰒲 sleep| hibernate| lock| exit desktop environment' | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -sep '|' -i -p 'what to do ?')
cmd=$(
printf "%s\n" \
" shutdown" \
" reboot" \
"󰒲 sleep" \
" hibernate" \
" lock" \
" exit desktop environment" \
| dmenu -p "what to do ?"
)
case "$cmd" in
" shutdown")
poweroff

View file

@ -21,7 +21,7 @@ in {
find /var/lib/OpenRGB -name "*.orp" 2>/dev/null
)
selected=$(printf '%s\n' "''${files[@]}" | xargs -n1 basename | ${lib.getExe config.modules.desktop.rofi.package} -dmenu -i -p "select profile")
selected=$(printf '%s\n' "''${files[@]}" | xargs -n1 basename | dmenu -p "select profile")
[[ -z "$selected" ]] && exit 0

View file

@ -17,8 +17,6 @@ in {
};
config = mkIf cfg.enable {
user.packages = [
finalPackage
];
user.packages = [ finalPackage ];
};
}

View file

@ -28,7 +28,8 @@ in {
};
};
hm.xdg.configFile."micro/colorschemes/${schemeName}.micro".text = with config.colorScheme.palette; ''
# TODO: rework these..
hm.xdg.configFile."micro/colorschemes/${schemeName}.micro".text = with config.scheme; ''
color-link default "#${base05},#${base00}"
color-link comment "#${base03},#${base00}"
color-link identifier "#${base0D},#${base00}"

View file

@ -24,9 +24,7 @@ in {
programs.fish.enable = true;
users.defaultUserShell = pkgs.fish;
hm.programs.fish = let
colorScript = nix-colors-lib.shellThemeFromScheme { scheme = config.colorScheme; };
in {
hm.programs.fish = {
enable = true;
plugins = let
mkPlugin = name: {
@ -43,7 +41,6 @@ in {
];
interactiveShellInit = ''
${lib.getExe pkgs.nix-your-shell} fish | source
sh ${colorScript}
'';
functions.fish_greeting = ''
${lib.getExe pkgs.fastfetch} --logo-type small --key-width 11 -s title:separator:os:host:kernel:uptime:memory:swap

View file

@ -24,10 +24,10 @@ in {
visualizer = {
mode = "noalbumart";
};
modernz = with config.colorScheme.palette; {
modernz = with config.scheme.withHashtag; {
bottomhover = "no";
hover_effect = ""; # these are weird lookin
seekbarfg_color = "#${base0D}"; # blue is a sane default
seekbarfg_color = "${base0D}"; # blue is a sane default
};
};

View file

@ -36,7 +36,7 @@ in {
config.freetype_load_flags = 'MONOCHROME'
config.enable_wayland = true
config.use_fancy_tab_bar = false
config.use_resize_increments = true
config.use_resize_increments = false
config.initial_cols = 120
config.initial_rows = 40
config.window_background_opacity = 0.8