deprecate stylix, fix minor gripes and bugs

This commit is contained in:
alisceon 2026-05-22 19:48:24 +02:00
parent 6b492bad2f
commit fb1ad8d919
42 changed files with 951 additions and 688 deletions

View file

@ -1,4 +1,10 @@
{ ... }:
{ theme, ... }:
let
n = theme.paletteNoHash;
fonts = theme.fonts;
terminalFontSize = toString fonts.sizes.terminal;
in
{
programs.foot = {
enable = true;
@ -6,9 +12,39 @@
settings = {
main = {
app-id = "footclient";
dpi-aware = "no";
font = "${fonts.monospace.name}:size=${terminalFontSize}";
initial-color-theme = 1;
workers = 32;
};
bell.system = "no";
colors = {
alpha = 1.0;
background = n.darkestGray;
foreground = n.lightGray;
regular0 = n.darkestGray;
regular1 = n.red;
regular2 = n.green;
regular3 = n.yellow;
regular4 = n.purple;
regular5 = n.blue;
regular6 = n.magenta;
regular7 = n.lightGray;
bright0 = n.gray;
bright1 = n.red;
bright2 = n.green;
bright3 = n.yellow;
bright4 = n.purple;
bright5 = n.blue;
bright6 = n.magenta;
bright7 = n.white;
"16" = n.orange;
"17" = n.cyan;
"18" = n.darkerGray;
"19" = n.darkGray;
"20" = n.mutedGray;
"21" = n.lighterGray;
};
scrollback.lines = 100000;
};
};

View file

@ -1,6 +0,0 @@
{ ... }:
{
programs.qutebrowser = {
enable = true;
};
}

View file

@ -0,0 +1,58 @@
{ theme, ... }:
let
p = theme.palette;
in
{
imports = [
./colors/completion.nix
./colors/downloads.nix
./colors/messages.nix
./colors/statusbar.nix
./colors/tabs.nix
];
programs.qutebrowser.settings = {
colors = {
contextmenu = {
disabled = {
bg = p.darkerGray;
fg = p.darkestGray;
};
menu = {
bg = p.darkestGray;
fg = p.lightGray;
};
selected = {
bg = p.gray;
fg = p.lightGray;
};
};
hints = {
bg = p.darkerGray;
fg = p.lightGray;
match.fg = p.green;
};
keyhint = {
bg = p.darkestGray;
fg = p.lightGray;
suffix.fg = p.lightGray;
};
prompts = {
bg = p.darkestGray;
border = "1px solid ${p.darkestGray}";
fg = p.lightGray;
selected = {
bg = p.darkerGray;
fg = p.lightGray;
};
};
tooltip = {
bg = p.darkestGray;
fg = p.lightGray;
};
webpage.preferred_color_scheme = theme.polarity;
};
hints.border = "1px solid ${p.darkestGray}";
};
}

View file

@ -0,0 +1,34 @@
{ theme, ... }:
let
p = theme.palette;
in
{
programs.qutebrowser.settings.colors.completion = {
category = {
bg = p.darkestGray;
border = {
bottom = p.darkestGray;
top = p.darkestGray;
};
fg = p.green;
};
even.bg = p.darkestGray;
fg = p.lightGray;
item.selected = {
bg = p.gray;
border = {
bottom = p.gray;
top = p.gray;
};
fg = p.lightGray;
match.fg = p.green;
};
match.fg = p.green;
odd.bg = p.darkerGray;
scrollbar = {
bg = p.darkestGray;
fg = p.lightGray;
};
};
}

View file

@ -0,0 +1,22 @@
{ theme, ... }:
let
p = theme.palette;
in
{
programs.qutebrowser.settings.colors.downloads = {
bar.bg = p.darkestGray;
error = {
bg = p.red;
fg = p.darkestGray;
};
start = {
bg = p.green;
fg = p.darkestGray;
};
stop = {
bg = p.magenta;
fg = p.darkestGray;
};
};
}

View file

@ -0,0 +1,24 @@
{ theme, ... }:
let
p = theme.palette;
in
{
programs.qutebrowser.settings.colors.messages = {
error = {
bg = p.red;
border = p.red;
fg = p.darkestGray;
};
info = {
bg = p.green;
border = p.green;
fg = p.darkestGray;
};
warning = {
bg = p.blue;
border = p.blue;
fg = p.darkestGray;
};
};
}

View file

@ -0,0 +1,52 @@
{ theme, ... }:
let
p = theme.palette;
in
{
programs.qutebrowser.settings.colors.statusbar = {
caret = {
bg = p.gray;
fg = p.lightGray;
selection = {
bg = p.gray;
fg = p.lightGray;
};
};
command = {
bg = p.darkestGray;
fg = p.lightGray;
private = {
bg = p.darkerGray;
fg = p.lightGray;
};
};
insert = {
bg = p.green;
fg = p.darkestGray;
};
normal = {
bg = p.darkestGray;
fg = p.lightGray;
};
passthrough = {
bg = p.magenta;
fg = p.darkestGray;
};
private = {
bg = p.darkerGray;
fg = p.lightGray;
};
progress.bg = p.green;
url = {
error.fg = p.red;
fg = p.lightGray;
hover.fg = p.lightGray;
success = {
http.fg = p.magenta;
https.fg = p.green;
};
warn.fg = p.blue;
};
};
}

View file

@ -0,0 +1,53 @@
{ theme, ... }:
let
p = theme.palette;
in
{
programs.qutebrowser.settings.colors.tabs = {
bar.bg = p.darkestGray;
even = {
bg = p.darkerGray;
fg = p.lightGray;
};
indicator = {
error = p.red;
start = p.magenta;
stop = p.green;
};
odd = {
bg = p.darkestGray;
fg = p.lightGray;
};
pinned = {
even = {
bg = p.green;
fg = p.darkestGray;
};
odd = {
bg = p.magenta;
fg = p.darkestGray;
};
selected = {
even = {
bg = p.gray;
fg = p.lightGray;
};
odd = {
bg = p.gray;
fg = p.lightGray;
};
};
};
selected = {
even = {
bg = p.gray;
fg = p.lightGray;
};
odd = {
bg = p.gray;
fg = p.lightGray;
};
};
};
}

View file

@ -0,0 +1,8 @@
{
imports = [
./colors.nix
./fonts.nix
];
programs.qutebrowser.enable = true;
}

View file

@ -0,0 +1,23 @@
{ theme, ... }:
let
fonts = theme.fonts;
fontSize = toString fonts.sizes.applications;
in
{
programs.qutebrowser.settings.fonts = {
default_family = fonts.sansSerif.name;
default_size = "${fontSize}pt";
web = {
family = {
cursive = fonts.serif.name;
fantasy = fonts.serif.name;
fixed = fonts.monospace.name;
sans_serif = fonts.sansSerif.name;
serif = fonts.serif.name;
standard = fonts.sansSerif.name;
};
size.default = 18;
};
};
}

View file

@ -1,12 +0,0 @@
{ pkgs, ... }:
let
commands = import ../../../lib/commands.nix { inherit pkgs; };
inherit (commands) term;
in
{
programs.rofi = {
enable = true;
package = pkgs.rofi-unwrapped;
terminal = term;
};
}

View file

@ -0,0 +1,21 @@
{ pkgs, ... }:
let
commands = import ../../../../lib/commands.nix { inherit pkgs; };
inherit (commands) term;
in
{
imports = [
./theme.nix
];
programs.rofi = {
enable = true;
package = pkgs.rofi-unwrapped;
terminal = term;
extraConfig = {
"run-command" = "${commands.uwsm} {cmd}";
"run-shell-command" = "${commands.uwsm} ${term} -e {cmd}";
};
};
}

View file

@ -0,0 +1,108 @@
{ config, theme, ... }:
let
inherit (config.lib.formats.rasi) mkLiteral;
p = theme.palette;
in
{
programs.rofi.theme = {
"*" = {
background = mkLiteral p.darkestGray;
background-color = mkLiteral p.darkestGray;
foreground = mkLiteral p.lightGray;
lightbg = mkLiteral p.darkerGray;
lightfg = mkLiteral p.lighterGray;
red = mkLiteral p.red;
blue = mkLiteral p.purple;
border-color = mkLiteral "@foreground";
separatorcolor = mkLiteral "@foreground";
normal-background = mkLiteral "@background";
normal-foreground = mkLiteral "@foreground";
normal-text = mkLiteral p.lightGray;
alternate-normal-background = mkLiteral "@lightbg";
alternate-normal-foreground = mkLiteral "@foreground";
alternate-normal-text = mkLiteral p.lightGray;
selected-normal-background = mkLiteral "@lightfg";
selected-normal-foreground = mkLiteral "@lightbg";
selected-normal-text = mkLiteral p.darkerGray;
active-background = mkLiteral "@background";
active-foreground = mkLiteral "@blue";
active-text = mkLiteral p.purple;
alternate-active-background = mkLiteral "@lightbg";
alternate-active-foreground = mkLiteral "@blue";
alternate-active-text = mkLiteral p.purple;
selected-active-background = mkLiteral "@blue";
selected-active-foreground = mkLiteral "@background";
selected-active-text = mkLiteral p.darkestGray;
urgent-background = mkLiteral "@background";
urgent-foreground = mkLiteral "@red";
urgent-text = mkLiteral p.red;
alternate-urgent-background = mkLiteral "@lightbg";
alternate-urgent-foreground = mkLiteral "@red";
alternate-urgent-text = mkLiteral p.red;
selected-urgent-background = mkLiteral "@red";
selected-urgent-foreground = mkLiteral "@background";
selected-urgent-text = mkLiteral p.darkestGray;
base-text = mkLiteral p.lightGray;
};
"button".text-color = mkLiteral "@normal-text";
"button selected" = {
background-color = mkLiteral "@selected-normal-background";
text-color = mkLiteral "@selected-normal-text";
};
"case-indicator".text-color = mkLiteral "@normal-text";
"element alternate.active" = {
background-color = mkLiteral "@alternate-active-background";
text-color = mkLiteral "@alternate-active-text";
};
"element alternate.normal" = {
background-color = mkLiteral "@alternate-normal-background";
text-color = mkLiteral "@alternate-normal-text";
};
"element alternate.urgent" = {
background-color = mkLiteral "@alternate-urgent-background";
text-color = mkLiteral "@alternate-urgent-text";
};
"element normal.active" = {
background-color = mkLiteral "@active-background";
text-color = mkLiteral "@active-text";
};
"element normal.normal" = {
background-color = mkLiteral "@normal-background";
text-color = mkLiteral "@normal-text";
};
"element normal.urgent" = {
background-color = mkLiteral "@urgent-background";
text-color = mkLiteral "@urgent-text";
};
"element selected.active" = {
background-color = mkLiteral "@selected-active-background";
text-color = mkLiteral "@selected-active-text";
};
"element selected.normal" = {
background-color = mkLiteral "@selected-normal-background";
text-color = mkLiteral "@selected-normal-text";
};
"element selected.urgent" = {
background-color = mkLiteral "@selected-urgent-background";
text-color = mkLiteral "@selected-urgent-text";
};
"element-icon" = {
background-color = mkLiteral "inherit";
text-color = mkLiteral "inherit";
};
"element-text" = {
background-color = mkLiteral "inherit";
text-color = mkLiteral "inherit";
};
"entry".text-color = mkLiteral "@normal-text";
"inputbar".text-color = mkLiteral "@normal-text";
"listview".border-color = mkLiteral "@separatorcolor";
"message".border-color = mkLiteral "@separatorcolor";
"prompt".text-color = mkLiteral "@normal-text";
"scrollbar".handle-color = mkLiteral "@normal-foreground";
"sidebar".border-color = mkLiteral "@separatorcolor";
"textbox".text-color = mkLiteral "@base-text";
"textbox-prompt-colon".text-color = mkLiteral "inherit";
"window".background-color = mkLiteral "@background";
};
}

View file

@ -1,10 +1,37 @@
{ ... }:
{ theme, ... }:
let
n = theme.paletteNoHash;
in
{
programs.swaylock = {
enable = true;
settings = {
color = n.darkestGray;
ignore-empty-password = true;
inside-caps-lock-color = n.darkestGray;
inside-clear-color = n.darkestGray;
inside-color = n.darkestGray;
inside-ver-color = n.darkestGray;
inside-wrong-color = n.darkestGray;
indicator-caps-lock = true;
key-hl-color = n.green;
layout-bg-color = n.darkestGray;
layout-border-color = n.darkerGray;
layout-text-color = n.lightGray;
line-uses-inside = true;
ring-caps-lock-color = n.darkerGray;
ring-clear-color = n.red;
ring-color = n.darkerGray;
ring-ver-color = n.green;
ring-wrong-color = n.red;
scaling = "fill";
separator-color = "00000000";
text-caps-lock-color = n.lightGray;
text-clear-color = n.lightGray;
text-color = n.lightGray;
text-ver-color = n.lightGray;
text-wrong-color = n.lightGray;
};
};
}

View file

@ -1,26 +1,19 @@
{ pkgs, ... }:
{ pkgs, pkgs-unstable, ... }:
{
programs.vscodium = {
programs.vscode = {
enable = true;
package = pkgs.vscodium.fhsWithPackages (
package = pkgs-unstable.vscode.fhsWithPackages (
ps: with ps; [ git ]
);
profiles.default = {
userSettings = {
"python.languageServer" = "None";
"python.pyrefly.displayTypeErrors" = "force-on";
"explorer.confirmDelete" = false;
"explorer.confirmDragAndDrop" = false;
"explorer.confirmPasteNative" = false;
"git.confirmSync" = false;
};
extensions = [
pkgs.vscode-extensions.ms-python.python
pkgs.vscode-extensions.ms-python.debugpy
pkgs.vscode-extensions.ms-vscode.cpptools
pkgs.vscode-extensions.jnoortheen.nix-ide
pkgs.vscode-extensions.github.copilot
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
pkgs-unstable.vscode-extensions.ms-python.python
pkgs-unstable.vscode-extensions.ms-python.debugpy
pkgs-unstable.vscode-extensions.ms-vscode.cpptools
pkgs-unstable.vscode-extensions.jnoortheen.nix-ide
pkgs-unstable.vscode-extensions.github.copilot
] ++ pkgs-unstable.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "xonsh";
publisher = "jnoortheen";
@ -30,14 +23,14 @@
{
name = "pyrefly";
publisher = "meta";
version = "0.57.1";
hash = "sha256-aF7QcjpID0PE9gMBM6RGfJ3CHOpmyDuHJbbrRRvLiBI=";
version = "1.0.0";
hash = "sha256-0HMbHW2pFYTXhJH5cJ6JJYSNWXt3t2SxPBEa1J8ThXg=";
}
{
name = "chatgpt";
publisher = "openai";
version = "26.5313.41514";
hash = "sha256-kZHfcMzxqCtvkU04kDrlwaO3uHvn4+V6B5sLzlDfceo=";
version = "26.5519.32039";
hash = "sha256-hJhmLn3AvmY3X3RlbKlpeBX94w8PPm1cuPb3GNvgL/g=";
}
];
};

View file

@ -1,15 +1,19 @@
{ pkgs, ... }:
let
commands = import ../../../lib/commands.nix { inherit pkgs; };
commands = import ../../../../lib/commands.nix { inherit pkgs; };
inherit (commands) uwsm term;
height = 20;
in
{
imports = [
./style.nix
];
programs.waybar = {
enable = true;
systemd = {
enable = true;
targets = [ "graphical-session.target" ];
target = "graphical-session.target";
};
settings.mainBar = {
layer = "bottom";
@ -94,12 +98,5 @@ in
on-click = "${uwsm} pavucontrol";
};
};
style = ''
button {
box-shadow: inset 0 -8px transparent;
border: none;
border-radius: 0;
}
'';
};
}

View file

@ -0,0 +1,62 @@
{ lib, theme, ... }:
let
p = theme.palette;
fonts = theme.fonts;
terminalFontSize = toString fonts.sizes.terminal;
defineColors = lib.concatStringsSep "\n" (
lib.mapAttrsToList (name: value: "@define-color ${name} ${value};") p
);
in
{
programs.waybar.style = ''
${defineColors}
* {
font-family: "${fonts.monospace.name}";
font-size: ${terminalFontSize}pt;
}
window#waybar, tooltip {
background: alpha(@darkestGray, 1.000000);
color: @lightGray;
}
tooltip {
border-color: @purple;
}
tooltip label {
color: @lightGray;
}
.modules-left #workspaces button,
.modules-center #workspaces button,
.modules-right #workspaces button {
border-bottom: 3px solid transparent;
}
.modules-left #workspaces button.focused,
.modules-left #workspaces button.active,
.modules-center #workspaces button.focused,
.modules-center #workspaces button.active,
.modules-right #workspaces button.focused,
.modules-right #workspaces button.active {
border-bottom: 3px solid @lightGray;
}
.modules-left #workspaces button.urgent,
.modules-center #workspaces button.urgent,
.modules-right #workspaces button.urgent {
border-bottom: 3px solid @red;
background-color: @red;
color: @darkestGray;
}
button {
box-shadow: inset 0 -8px transparent;
border: none;
border-radius: 0;
}
'';
}

View file

@ -1,12 +1,21 @@
{ ... }:
{ theme, ... }:
let
p = theme.palette;
fonts = theme.fonts;
fontSize = toString fonts.sizes.applications;
in
{
services.mako = {
enable = true;
settings = {
actions = true;
anchor = "top-center";
background-color = "${p.darkestGray}FF";
border-color = p.purple;
border-radius = 0;
default-timeout = 10000;
font = "${fonts.sansSerif.name} ${fontSize}";
height = 100;
width = 600;
icons = true;
@ -14,6 +23,18 @@
layer = "overlay";
margin = 10;
markup = true;
progress-color = "over ${p.darkGray}";
text-color = p.lightGray;
"urgency=critical" = {
background-color = "${p.darkestGray}FF";
border-color = p.red;
text-color = p.lightGray;
};
"urgency=low" = {
background-color = "${p.darkestGray}FF";
border-color = p.gray;
text-color = p.lightGray;
};
};
};
}

View file

@ -25,11 +25,23 @@ in
command = "${pkgs.systemd}/bin/systemctl suspend";
}
];
events = {
before-sleep = "display off; systemctl --user stop libinput-gestures; ${lock}";
after-resume = "display on; systemctl --user start libinput-gestures";
lock = (display "off") + "; " + lock;
unlock = display "on";
};
events = [
{
event = "before-sleep";
command = "display off; systemctl --user stop libinput-gestures; ${lock}";
}
{
event = "after-resume";
command = "display on; systemctl --user start libinput-gestures";
}
{
event = "lock";
command = (display "off") + "; " + lock;
}
{
event = "unlock";
command = display "on";
}
];
};
}

View file

@ -0,0 +1,11 @@
{ theme, ... }:
{
home.pointerCursor = {
name = theme.cursor.name;
package = theme.cursor.package;
size = theme.cursor.size;
gtk.enable = true;
x11.enable = true;
};
}

View file

@ -0,0 +1,22 @@
{ theme, ... }:
let
fonts = theme.fonts;
fontSize = toString fonts.sizes.applications;
terminalFontSize = toString fonts.sizes.terminal;
in
{
dconf = {
enable = true;
settings."org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
cursor-size = theme.cursor.size;
cursor-theme = theme.cursor.name;
document-font-name = "${fonts.serif.name} 13";
font-name = "${fonts.sansSerif.name} ${fontSize}";
gtk-theme = theme.gtk.theme.name;
icon-theme = theme.icons.dark;
monospace-font-name = "${fonts.monospace.name} ${terminalFontSize}";
};
};
}

View file

@ -0,0 +1,8 @@
{
imports = [
./cursor.nix
./dconf.nix
./fonts.nix
./gtk.nix
];
}

View file

@ -0,0 +1,13 @@
{ theme, ... }:
{
fonts.fontconfig = {
enable = true;
defaultFonts = {
emoji = [ theme.fonts.emoji.name ];
monospace = [ theme.fonts.monospace.name ];
sansSerif = [ theme.fonts.sansSerif.name ];
serif = [ theme.fonts.serif.name ];
};
};
}

View file

@ -0,0 +1,24 @@
{ theme, ... }:
{
gtk = {
enable = true;
font = {
name = theme.fonts.sansSerif.name;
package = theme.fonts.sansSerif.package;
size = theme.fonts.sizes.applications;
};
theme = theme.gtk.theme;
iconTheme = {
name = theme.icons.dark;
package = theme.icons.package;
};
cursorTheme = {
name = theme.cursor.name;
package = theme.cursor.package;
size = theme.cursor.size;
};
gtk3.extraConfig.gtk-application-prefer-dark-theme = 1;
gtk4.extraConfig.gtk-application-prefer-dark-theme = 1;
};
}

View file

@ -6,10 +6,11 @@ in
{
imports = [
./gtk.nix
./theme.nix
./xdg.nix
./shells/default.nix
../../programs/foot.nix
../../programs/qutebrowser.nix
../../programs/qutebrowser
../../services/espanso.nix
../../services/gnome-keyring.nix
];

View file

@ -5,8 +5,8 @@ let
in
{
imports = [
../../../programs/rofi.nix
../../../programs/waybar.nix
../../../programs/rofi
../../../programs/waybar
../../../programs/swaylock.nix
../../../services/swayidle.nix
../../../services/mako.nix

View file

@ -0,0 +1,45 @@
{ theme, ... }:
let
p = theme.palette;
in
{
wayland.windowManager.sway.config.colors = {
background = p.darkestGray;
focused = {
background = p.darkestGray;
border = p.purple;
childBorder = p.purple;
indicator = p.green;
text = p.lightGray;
};
focusedInactive = {
background = p.darkestGray;
border = p.gray;
childBorder = p.gray;
indicator = p.green;
text = p.lightGray;
};
placeholder = {
background = p.darkestGray;
border = p.gray;
childBorder = p.gray;
indicator = p.green;
text = p.lightGray;
};
unfocused = {
background = p.darkestGray;
border = p.gray;
childBorder = p.gray;
indicator = p.green;
text = p.lightGray;
};
urgent = {
background = p.darkestGray;
border = p.red;
childBorder = p.red;
indicator = p.green;
text = p.lightGray;
};
};
}

View file

@ -1,4 +1,4 @@
{ pkgs, ... }:
{ pkgs, pkgs-unstable, ... }:
let
commands = import ../../../../lib/commands.nix { inherit pkgs; };
inherit (commands) swaymsg lock;
@ -28,7 +28,7 @@ in
pkgs.vlc
pkgs.loupe
pkgs.nautilus
pkgs.chromium
pkgs-unstable.chromium
];
defaultApplications = {
"text/*" = [ "${pkgs.gnome-text-editor}/share/applications/org.gnome.TextEditor.desktop" ];