Compare commits

..

2 commits

Author SHA1 Message Date
43c2454e0e
refactor(discord): reorganize custom.css and expand gruvbox palette
Add full Gruvbox Material Dark palette (diff, statusline, visual colors)
and reorganize theme variables into logical sections.
2026-02-03 14:26:53 +08:00
b180fb4481
feat(discord): add BetterDiscord with gruvbox material dark theme
Restore Discord with OpenASAR overlay and BetterDiscord CSS theming.
Custom gruvbox material dark medium palette with proper read/unread
channel distinction and minimal UI tweaks. Add mpd-discord-rpc for
music rich presence.
2026-02-01 19:24:45 +08:00
5 changed files with 166 additions and 1 deletions

View file

@ -1,6 +1,6 @@
{pkgs, ...}: { {pkgs, ...}: {
# Install some applications for managing mpd # Install some applications for managing mpd
home.packages = with pkgs; [ home.packages = with pkgs; [
mpc mpc
ncmpcpp ncmpcpp
@ -25,4 +25,17 @@
} }
''; '';
}; };
# Discord rich presence for MPD
services.mpd-discord-rpc = {
enable = true;
settings = {
hosts = ["localhost:6600"];
format = {
details = "$title";
state = "$artist - $album";
timestamp = "elapsed";
};
};
};
} }

View file

@ -1,6 +1,7 @@
{pkgs, ...}: { {pkgs, ...}: {
imports = [ imports = [
./cava ./cava
./discord
./mpv ./mpv
./obs ./obs
]; ];

View file

@ -0,0 +1,132 @@
:root {
--font-primary: Fisa Code;
/* Gruvbox Material Dark Medium */
--bg-dim: #232323;
--bg0: #282828;
--bg1: #32302f;
--bg2: #45403d;
--bg3: #5a524c;
--bg4: #665c54;
--bg5: #7c6f64;
--bg-diff-green: #34381b;
--bg-diff-red: #402120;
--bg-diff-blue: #0e363e;
--bg-statusline1: #32302f;
--bg-statusline2: #3a3735;
--bg-statusline3: #504945;
--bg-current-word: #3c3836;
--bg-visual-red: #4c3432;
--bg-visual-yellow: #4f422e;
--bg-visual-green: #3b4439;
--bg-visual-blue: #374141;
--bg-visual-purple: #443840;
--fg0: #d4be98;
--fg1: #ddc7a1;
--red: #ea6962;
--orange: #e78a4e;
--yellow: #d8a657;
--green: #a9b665;
--aqua: #89b482;
--blue: #7daea3;
--purple: #d3869b;
--grey0: #7c6f64;
--grey1: #928374;
--grey2: #a89984;
}
.theme-dark {
/* Text */
--text-default: var(--fg0);
--text-strong: var(--fg1);
--text-subtle: var(--grey2);
--text-muted: var(--grey2);
--white: var(--fg0);
/* Icons */
--icon-strong: var(--fg1);
--icon-subtle: var(--fg1);
--icon-muted: var(--grey2);
/* Interactive */
--interactive-text-active: var(--fg1);
--interactive-text-hover: var(--grey2);
--interactive-text-default: var(--grey2);
--interactive-icon-default: var(--grey2);
/* Control */
--control-primary-text-default: var(--fg1);
--control-primary-text-hover: var(--fg0);
--control-primary-background-default: var(--bg2);
--control-primary-background-hover: var(--bg3);
--control-secondary-text-default: var(--grey2);
--control-secondary-text-hover: var(--fg0);
/* Channels */
--channels-default: var(--grey2);
--channel-icon: var(--grey2);
--channel-text-area-placeholder: var(--grey2);
/* Input */
--input-placeholder-text-default: var(--grey2);
--input-background-default: var(--bg0);
--chat-background-default: var(--bg1);
/* Background: Base */
--background-base-low: var(--bg0);
--background-base-lower: var(--bg0);
--background-base-lowest: var(--bg-dim);
/* Background: Surface */
--background-surface-high: var(--bg0);
--background-surface-higher: var(--bg1);
--background-surface-highest: var(--bg2);
/* Background: Modifier */
--background-mod-strong: var(--bg1);
--background-mod-normal: var(--bg2);
--background-mod-subtle: var(--bg1);
--background-mod-muted: var(--bg1);
/* Background: Misc */
--background-brand: var(--bg-visual-green);
--background-code: var(--bg1);
--user-profile-overlay-background: var(--bg2);
--message-mentioned-background-default: var(--bg-current-word);
--message-mentioned-background-hover: var(--bg-current-word);
/* Border */
--border-normal: var(--bg0);
/* Scrollbar */
--scrollbar-thin-thumb: var(--green);
--scrollbar-thin-track: transparent;
--scrollbar-auto-thumb: var(--green);
--scrollbar-auto-track: transparent;
}
/* Remove input borders */
[class*="searchBar"],
[class*="channelTextArea"],
[class*="textArea"] {
border: none !important;
}
/* Hide server banner and boost goal bar */
[class*="bannerVisible"],
[class*="progressContainer"],
[class*="content"] > [aria-hidden="true"][style*="height"] {
display: none !important;
}
/* Hide new messages bar */
[class*="newMessagesBar"] {
display: none !important;
}

View file

@ -0,0 +1,17 @@
{pkgs, ...}: {
nixpkgs.overlays = [
(final: prev: {
discord = prev.discord.override {withOpenASAR = true;};
})
];
home.packages = with pkgs; [
discord
betterdiscordctl
];
home.file.".config/BetterDiscord/data/stable/custom.css" = {
enable = true;
source = ./config/custom.css;
};
}

View file

@ -21,6 +21,8 @@
# all allowed packages here rather than scattering predicates across feature modules. # all allowed packages here rather than scattering predicates across feature modules.
allowUnfreePredicate = pkg: allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [ builtins.elem (lib.getName pkg) [
"discord"
# Development tools # Development tools
"claude-code" "claude-code"
"idea" "idea"