summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Sima <ben@bensima.com>2025-12-22 16:31:13 -0500
committerBen Sima <ben@bensima.com>2025-12-22 16:31:13 -0500
commita5a6bfc8a5d632a76335d3021a9ae8f423efd40d (patch)
tree18484cf773c99a01e614d364ad0e34c1c8f6283d
parent824a42ad72d90420713e6e87d75fedcb1366295e (diff)
Add ef-dream themes for bat, fzf, telegram; reorganize polybar with GPU monitoring; fix xmonad tab colors
-rw-r--r--lib/common.nix33
-rw-r--r--lib/ef-dream-bat.tmTheme195
-rw-r--r--lib/ef-dream-telegram.tdesktop-theme411
-rw-r--r--lib/polybar.nix69
-rw-r--r--lib/xmonad.hs8
-rw-r--r--profiles/beryllium.nix5
6 files changed, 695 insertions, 26 deletions
diff --git a/lib/common.nix b/lib/common.nix
index 5675a23..58f8b76 100644
--- a/lib/common.nix
+++ b/lib/common.nix
@@ -67,14 +67,9 @@ in {
programs.bat = {
enable = true;
- config = { theme = "catppuccin-mocha"; };
+ config = { theme = "ef-dream"; };
themes = {
- catppuccin-mocha = builtins.readFile (pkgs.fetchFromGitHub {
- owner = "catppuccin";
- repo = "bat";
- rev = "d714cc1d358ea51bfc02550dabab693f70cccea0";
- hash = "sha256-Q5B4NDrfCIK3UAMs94vdXnR42k4AXCqZz6sRn8bzmf4=";
- } + "/themes/Catppuccin Mocha.tmTheme");
+ ef-dream = builtins.readFile ./ef-dream-bat.tmTheme;
};
};
@@ -157,17 +152,25 @@ in {
enable = true;
enableBashIntegration = true;
colors = {
- # ef-dream inspired
- "bg+" = "#3b393e";
+ # ef-dream palette
"bg" = "#232025";
- "hl" = "#ffaacf";
+ "bg+" = "#322f34";
"fg" = "#efd5c5";
- "header" = "#d0b0ff";
- "info" = "#d0b0ff";
- "pointer" = "#f3c09a";
- "marker" = "#57b0ff";
"fg+" = "#efd5c5";
- "hl+" = "#ffaacf";
+ "hl" = "#ffaacf";
+ "hl+" = "#d0b0ff";
+ "border" = "#8f8886";
+ "gutter" = "#232025";
+ "header" = "#b0a0cf";
+ "info" = "#c0b24f";
+ "marker" = "#51b04f";
+ "pointer" = "#f3c09a";
+ "prompt" = "#57b0ff";
+ "spinner" = "#6fb3c0";
+ "separator" = "#3b393e";
+ "scrollbar" = "#8f8886";
+ "label" = "#b0a0cf";
+ "query" = "#efd5c5";
};
defaultCommand = "rg --files";
changeDirWidgetCommand = "fd --type d"; # M-c
diff --git a/lib/ef-dream-bat.tmTheme b/lib/ef-dream-bat.tmTheme
new file mode 100644
index 0000000..9d15d82
--- /dev/null
+++ b/lib/ef-dream-bat.tmTheme
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>name</key>
+ <string>ef-dream</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#232025</string>
+ <key>foreground</key>
+ <string>#efd5c5</string>
+ <key>caret</key>
+ <string>#f3c09a</string>
+ <key>lineHighlight</key>
+ <string>#322f34</string>
+ <key>selection</key>
+ <string>#3b393e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8f8886</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#51b04f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8fcfd0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Constant</string>
+ <key>scope</key>
+ <string>constant.language, constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#6fb3c0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword, storage</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d0b0ff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function</string>
+ <key>scope</key>
+ <string>entity.name.function, support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffaacf</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Type</string>
+ <key>scope</key>
+ <string>entity.name.type, support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#57b0ff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#efd5c5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Operator</string>
+ <key>scope</key>
+ <string>keyword.operator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#efd5c5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Preprocessor</string>
+ <key>scope</key>
+ <string>meta.preprocessor, entity.name.function.preprocessor</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0b24f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag</string>
+ <key>scope</key>
+ <string>entity.name.tag, entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffaacf</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Error</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff6f6f</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Inserted</string>
+ <key>scope</key>
+ <string>markup.inserted</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#51b04f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Deleted</string>
+ <key>scope</key>
+ <string>markup.deleted</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff6f6f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Changed</string>
+ <key>scope</key>
+ <string>markup.changed</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0b24f</string>
+ </dict>
+ </dict>
+ </array>
+</dict>
+</plist>
diff --git a/lib/ef-dream-telegram.tdesktop-theme b/lib/ef-dream-telegram.tdesktop-theme
new file mode 100644
index 0000000..b440c90
--- /dev/null
+++ b/lib/ef-dream-telegram.tdesktop-theme
@@ -0,0 +1,411 @@
+// Description: ef-dream Theme for Telegram Desktop
+// Based on protesilaos ef-themes
+
+// ef-dream Color Palette
+bgMain: #232025;
+bgDim: #322f34;
+bgAlt: #3b393e;
+fgMain: #efd5c5;
+fgDim: #8f8886;
+fgAlt: #b0a0cf;
+cursor: #f3c09a;
+red: #ff6f6f;
+green: #51b04f;
+yellow: #c0b24f;
+blue: #57b0ff;
+magenta: #ffaacf;
+magentaCooler: #d0b0ff;
+cyan: #6fb3c0;
+
+// Helpers
+rippleBg: #ffffff20;
+transparent: #00000000;
+
+// Main
+windowBg: bgMain;
+windowFg: fgMain;
+windowBgOver: bgDim;
+windowBgRipple: rippleBg;
+windowFgOver: fgMain;
+windowSubTextFg: fgDim;
+windowSubTextFgOver: fgAlt;
+windowBoldFg: cursor;
+windowBoldFgOver: cursor;
+windowBgActive: cursor;
+windowFgActive: bgMain;
+windowActiveTextFg: blue;
+windowShadowFg: #00000080;
+windowShadowFgFallback: #000000;
+shadowFg: transparent;
+slideFadeOutBg: bgMain;
+slideFadeOutShadowFg: transparent;
+imageBg: #000000;
+imageBgTransparent: #ffffff;
+
+// Buttons
+activeButtonBg: cursor;
+activeButtonBgOver: yellow;
+activeButtonBgRipple: rippleBg;
+activeButtonFg: bgMain;
+activeButtonFgOver: bgMain;
+activeButtonSecondaryFg: fgMain;
+activeButtonSecondaryFgOver: fgMain;
+activeLineFg: blue;
+activeLineFgError: red;
+lightButtonBg: bgMain;
+lightButtonBgOver: bgDim;
+lightButtonBgRipple: rippleBg;
+lightButtonFg: fgAlt;
+lightButtonFgOver: cursor;
+attentionButtonFg: red;
+attentionButtonFgOver: red;
+attentionButtonBgOver: #ff6f6f40;
+attentionButtonBgRipple: rippleBg;
+outlineButtonBg: bgMain;
+outlineButtonBgOver: bgDim;
+outlineButtonOutlineFg: blue;
+outlineButtonBgRipple: rippleBg;
+
+// Menu
+menuBg: bgMain;
+menuBgOver: bgDim;
+menuBgRipple: rippleBg;
+menuIconFg: fgDim;
+menuIconFgOver: cursor;
+menuSubmenuArrowFg: fgDim;
+menuFgDisabled: bgAlt;
+menuSeparatorFg: bgAlt;
+
+// Scroll
+scrollBarBg: fgDim;
+scrollBarBgOver: cursor;
+scrollBg: bgDim;
+scrollBgOver: bgDim;
+
+// Other
+smallCloseIconFg: fgDim;
+smallCloseIconFgOver: red;
+radialFg: magenta;
+radialBg: bgDim;
+placeholderFg: bgAlt;
+placeholderFgActive: fgDim;
+inputBorderFg: fgDim;
+filterInputBorderFg: fgDim;
+checkboxFg: fgDim;
+sliderBgInactive: bgDim;
+sliderBgActive: cursor;
+tooltipBg: bgDim;
+tooltipFg: fgMain;
+tooltipBorderFg: transparent;
+
+// Title bar
+titleBg: bgMain;
+titleShadow: transparent;
+titleButtonFg: fgDim;
+titleButtonBgOver: bgDim;
+titleButtonFgOver: cursor;
+titleButtonCloseBg: bgMain;
+titleButtonCloseFg: fgDim;
+titleButtonCloseBgOver: red;
+titleButtonCloseFgOver: bgMain;
+titleFgActive: fgMain;
+titleFg: fgDim;
+
+// Boxes
+boxBg: bgMain;
+boxTextFg: fgMain;
+boxTextFgGood: green;
+boxTextFgError: red;
+boxTitleFg: cursor;
+boxSearchBg: bgDim;
+boxTitleAdditionalFg: fgDim;
+boxTitleCloseFg: fgDim;
+boxTitleCloseFgOver: red;
+
+// Members
+membersAboutLimitFg: fgDim;
+contactsBg: bgMain;
+contactsBgOver: bgDim;
+contactsNameFg: fgMain;
+contactsStatusFg: fgDim;
+contactsStatusFgOver: fgDim;
+contactsStatusFgOnline: green;
+
+// Sidebar
+dialogsBg: bgMain;
+dialogsNameFg: fgMain;
+dialogsChatIconFg: fgDim;
+dialogsDateFg: fgDim;
+dialogsTextFg: fgDim;
+dialogsTextFgService: fgAlt;
+dialogsDraftFg: red;
+dialogsVerifiedIconBg: blue;
+dialogsVerifiedIconFg: bgMain;
+dialogsSendingIconFg: fgDim;
+dialogsSentIconFg: green;
+dialogsUnreadBg: magenta;
+dialogsUnreadBgMuted: bgAlt;
+dialogsUnreadFg: bgMain;
+dialogsBgOver: bgDim;
+dialogsNameFgOver: fgMain;
+dialogsChatIconFgOver: fgDim;
+dialogsDateFgOver: fgDim;
+dialogsTextFgOver: fgDim;
+dialogsTextFgServiceOver: fgAlt;
+dialogsDraftFgOver: red;
+dialogsVerifiedIconBgOver: blue;
+dialogsVerifiedIconFgOver: bgMain;
+dialogsSendingIconFgOver: fgDim;
+dialogsSentIconFgOver: green;
+dialogsUnreadBgOver: magenta;
+dialogsUnreadBgMutedOver: bgAlt;
+dialogsUnreadFgOver: bgMain;
+dialogsBgActive: bgDim;
+dialogsNameFgActive: cursor;
+dialogsChatIconFgActive: cursor;
+dialogsDateFgActive: fgDim;
+dialogsTextFgActive: fgMain;
+dialogsTextFgServiceActive: fgAlt;
+dialogsDraftFgActive: red;
+dialogsVerifiedIconBgActive: blue;
+dialogsVerifiedIconFgActive: bgMain;
+dialogsSendingIconFgActive: fgDim;
+dialogsSentIconFgActive: green;
+dialogsUnreadBgActive: magentaCooler;
+dialogsUnreadBgMutedActive: bgAlt;
+dialogsUnreadFgActive: bgMain;
+dialogsForwardBg: bgDim;
+dialogsForwardFg: fgAlt;
+searchedBarBg: bgDim;
+searchedBarFg: fgDim;
+
+// History
+historyTextInFg: fgMain;
+historyTextOutFg: fgMain;
+historyCaptionInFg: fgDim;
+historyCaptionOutFg: fgDim;
+historyFileNameInFg: fgMain;
+historyFileNameOutFg: fgMain;
+historyOutIconFg: green;
+historyOutIconFgSelected: green;
+historyIconFgInverted: bgMain;
+historySendingOutIconFg: fgDim;
+historySendingInIconFg: fgDim;
+historySendingInvertedIconFg: bgAlt;
+historyCallArrowInFg: green;
+historyCallArrowOutFg: green;
+historyCallArrowMissedInFg: red;
+historyCallArrowMissedOutFg: red;
+historyUnreadBarBg: bgDim;
+historyUnreadBarBorder: bgAlt;
+historyUnreadBarFg: fgAlt;
+historyForwardChooseBg: #00000040;
+historyForwardChooseFg: fgMain;
+historyPeer1NameFg: red;
+historyPeer1UserpicBg: red;
+historyPeer2NameFg: green;
+historyPeer2UserpicBg: green;
+historyPeer3NameFg: yellow;
+historyPeer3UserpicBg: yellow;
+historyPeer4NameFg: blue;
+historyPeer4UserpicBg: blue;
+historyPeer5NameFg: magenta;
+historyPeer5UserpicBg: magenta;
+historyPeer6NameFg: magentaCooler;
+historyPeer6UserpicBg: magentaCooler;
+historyPeer7NameFg: cyan;
+historyPeer7UserpicBg: cyan;
+historyPeer8NameFg: cursor;
+historyPeer8UserpicBg: cursor;
+historyPeerUserpicFg: bgMain;
+historyScrollBarBg: fgDim;
+historyScrollBarBgOver: cursor;
+historyScrollBg: bgDim;
+historyScrollBgOver: bgDim;
+
+// Messages
+msgInBg: bgDim;
+msgInBgSelected: bgAlt;
+msgOutBg: bgAlt;
+msgOutBgSelected: #3b393e;
+msgSelectOverlay: #57b0ff40;
+msgStickerOverlay: #57b0ff40;
+msgInServiceFg: fgAlt;
+msgInServiceFgSelected: fgAlt;
+msgOutServiceFg: fgAlt;
+msgOutServiceFgSelected: fgAlt;
+msgInShadow: transparent;
+msgInShadowSelected: transparent;
+msgOutShadow: transparent;
+msgOutShadowSelected: transparent;
+msgInDateFg: fgDim;
+msgInDateFgSelected: fgDim;
+msgOutDateFg: fgDim;
+msgOutDateFgSelected: fgDim;
+msgServiceFg: fgMain;
+msgServiceBg: bgDim;
+msgServiceBgSelected: bgAlt;
+msgInReplyBarColor: blue;
+msgInReplyBarSelColor: blue;
+msgOutReplyBarColor: cursor;
+msgOutReplyBarSelColor: cursor;
+msgImgReplyBarColor: fgMain;
+msgInMonoFg: cyan;
+msgOutMonoFg: cyan;
+msgInBgOver: bgDim;
+msgInBgSelected: bgAlt;
+msgOutBgOver: bgAlt;
+msgOutBgSelected: bgAlt;
+msgDateImgFg: fgMain;
+msgDateImgBg: #00000080;
+msgDateImgBgOver: #00000080;
+msgDateImgBgSelected: #00000080;
+msgFileThumbLinkInFg: blue;
+msgFileThumbLinkInFgSelected: blue;
+msgFileThumbLinkOutFg: cursor;
+msgFileThumbLinkOutFgSelected: cursor;
+msgFileInBg: blue;
+msgFileInBgOver: blue;
+msgFileInBgSelected: blue;
+msgFileOutBg: cursor;
+msgFileOutBgOver: cursor;
+msgFileOutBgSelected: cursor;
+msgFile1Bg: blue;
+msgFile1BgDark: blue;
+msgFile1BgOver: blue;
+msgFile1BgSelected: blue;
+msgFile2Bg: green;
+msgFile2BgDark: green;
+msgFile2BgOver: green;
+msgFile2BgSelected: green;
+msgFile3Bg: red;
+msgFile3BgDark: red;
+msgFile3BgOver: red;
+msgFile3BgSelected: red;
+msgFile4Bg: yellow;
+msgFile4BgDark: yellow;
+msgFile4BgOver: yellow;
+msgFile4BgSelected: yellow;
+msgWaveformInActive: blue;
+msgWaveformInActiveSelected: blue;
+msgWaveformInInactive: bgAlt;
+msgWaveformInInactiveSelected: bgAlt;
+msgWaveformOutActive: cursor;
+msgWaveformOutActiveSelected: cursor;
+msgWaveformOutInactive: bgAlt;
+msgWaveformOutInactiveSelected: bgAlt;
+msgBotKbOverBgAdd: bgDim;
+msgBotKbIconFg: fgDim;
+msgBotKbRippleBg: rippleBg;
+mediaInFg: fgDim;
+mediaInFgSelected: fgDim;
+mediaOutFg: fgDim;
+mediaOutFgSelected: fgDim;
+youtubePlayIconBg: red;
+youtubePlayIconFg: bgMain;
+videoPlayIconBg: bgMain;
+videoPlayIconFg: fgMain;
+toastBg: bgDim;
+toastFg: fgMain;
+reportSpamBg: bgDim;
+reportSpamFg: fgDim;
+historyToDownShadow: transparent;
+historyComposeAreaBg: bgMain;
+historyComposeAreaFg: fgMain;
+historyComposeAreaFgService: fgAlt;
+historyComposeIconFg: fgDim;
+historyComposeIconFgOver: cursor;
+historySendIconFg: cursor;
+historySendIconFgOver: cursor;
+historyPinnedBg: bgDim;
+historyReplyBg: bgDim;
+historyReplyIconFg: blue;
+historyReplyCancelFg: fgDim;
+historyReplyCancelFgOver: red;
+historyComposeButtonBg: bgDim;
+historyComposeButtonBgOver: bgAlt;
+historyComposeButtonBgRipple: rippleBg;
+overviewCheckBg: transparent;
+overviewCheckFg: bgMain;
+overviewCheckFgActive: bgMain;
+overviewPhotoSelectOverlay: #57b0ff40;
+profileStatusFgOver: fgDim;
+notificationsBoxMonitorFg: fgMain;
+notificationsBoxScreenBg: bgMain;
+notificationSampleUserpicFg: fgDim;
+notificationSampleCloseFg: fgDim;
+notificationSampleTextFg: fgDim;
+notificationSampleNameFg: fgMain;
+mainMenuBg: bgMain;
+mainMenuCoverBg: bgDim;
+mainMenuCoverFg: fgMain;
+mediaPlayerBg: bgMain;
+mediaPlayerActiveFg: cursor;
+mediaPlayerInactiveFg: fgDim;
+mediaPlayerDisabledFg: bgAlt;
+mediaviewFileBg: bgMain;
+mediaviewFileNameFg: fgMain;
+mediaviewFileSizeFg: fgDim;
+mediaviewFileRedCornerFg: red;
+mediaviewFileYellowCornerFg: yellow;
+mediaviewFileGreenCornerFg: green;
+mediaviewFileBlueCornerFg: blue;
+mediaviewFileExtFg: bgMain;
+mediaviewMenuBg: bgMain;
+mediaviewMenuBgOver: bgDim;
+mediaviewMenuBgRipple: rippleBg;
+mediaviewMenuFg: fgMain;
+mediaviewBg: #000000eb;
+mediaviewVideoBg: bgMain;
+mediaviewControlBg: #00000080;
+mediaviewControlFg: fgMain;
+mediaviewCaptionBg: #00000080;
+mediaviewCaptionFg: fgMain;
+mediaviewTextLinkFg: blue;
+mediaviewSaveMsgBg: bgDim;
+mediaviewSaveMsgFg: fgMain;
+mediaviewPlaybackActive: cursor;
+mediaviewPlaybackInactive: bgAlt;
+mediaviewPlaybackActiveOver: cursor;
+mediaviewPlaybackInactiveOver: bgDim;
+mediaviewPlaybackProgressFg: fgMain;
+mediaviewPlaybackIconFg: fgMain;
+mediaviewPlaybackIconFgOver: cursor;
+mediaviewTransparentBg: bgMain;
+mediaviewTransparentFg: fgDim;
+emojiPanBg: bgMain;
+emojiPanCategories: bgDim;
+emojiPanHeaderFg: fgDim;
+emojiPanHeaderBg: bgMain;
+stickerPanDeleteBg: #00000080;
+stickerPanDeleteFg: fgMain;
+stickerPreviewBg: #000000b0;
+callBg: bgMain;
+callNameFg: fgMain;
+callFingerprintBg: bgDim;
+callStatusFg: fgDim;
+callIconFg: fgMain;
+callAnswerBg: green;
+callAnswerRipple: rippleBg;
+callAnswerBgOuter: #51b04f40;
+callHangupBg: red;
+callHangupRipple: rippleBg;
+callCancelBg: fgDim;
+callCancelFg: bgMain;
+callCancelRipple: rippleBg;
+callMuteRipple: rippleBg;
+callBarBg: bgDim;
+callBarMuteRipple: rippleBg;
+introBg: bgMain;
+introTitleFg: cursor;
+introDescriptionFg: fgDim;
+introErrorFg: red;
+introCoverTopBg: bgDim;
+introCoverBottomBg: bgMain;
+introCoverIconsFg: cursor;
+introCoverPlaneTrace: fgAlt;
+introCoverPlaneInner: fgMain;
+introCoverPlaneOuter: cursor;
+introCoverPlaneTop: bgMain;
+dialogsMenuIconFg: fgDim;
+dialogsMenuIconFgOver: cursor;
diff --git a/lib/polybar.nix b/lib/polybar.nix
index d3d5c3d..8a48d94 100644
--- a/lib/polybar.nix
+++ b/lib/polybar.nix
@@ -45,21 +45,24 @@ in {
separator-foreground = colors.${theme}.highlight;
};
- # Bottom bar: memory, temp, network (stacked above CPU bar)
+ # Bottom bar: memory, disk, network
"bar/bottom" = bar-common // {
bottom = true;
offset-y = "${toString bar-height}pt";
modules-left = [ "mem" ];
- modules-center = [ "temp" ];
+ modules-center = [ "disk" ];
modules-right = [ "network-speed" ];
separator = " │ ";
separator-foreground = colors.${theme}.highlight;
};
- # CPU bar: very bottom, just CPU cores
- "bar/cpu" = bar-common // {
+ # GPU bar: CPU and GPU metrics
+ "bar/gpu" = bar-common // {
bottom = true;
- modules-center = [ "cpu" ];
+ modules-left = [ "cpu" ];
+ modules-right = [ "nvidia-gpu" ];
+ separator = " │ ";
+ separator-foreground = colors.${theme}.highlight;
};
"module/ewmh" = {
@@ -191,6 +194,62 @@ in {
format-disconnected = "";
};
+ "module/disk" = {
+ type = "internal/fs";
+ interval = 30;
+ mount-0 = "/";
+ format-mounted = "<label-mounted>";
+ label-mounted = "DISK %percentage_used%%";
+ label-mounted-foreground = colors.${theme}.yellow;
+ };
+
+ "module/nvidia-gpu" = {
+ type = "custom/script";
+ exec = let
+ script = pkgs.writeShellScript "polybar-nvidia" ''
+ data=$(/run/current-system/sw/bin/nvidia-smi --query-gpu=temperature.gpu,memory.used,memory.total,utilization.gpu --format=csv,noheader,nounits)
+
+ # Parse CSV and trim whitespace
+ temp=$(${pkgs.coreutils}/bin/echo "$data" | ${pkgs.gawk}/bin/awk -F, '{print $1}' | ${pkgs.coreutils}/bin/tr -d ' ')
+ mem_used=$(${pkgs.coreutils}/bin/echo "$data" | ${pkgs.gawk}/bin/awk -F, '{print $2}' | ${pkgs.coreutils}/bin/tr -d ' ')
+ mem_total=$(${pkgs.coreutils}/bin/echo "$data" | ${pkgs.gawk}/bin/awk -F, '{print $3}' | ${pkgs.coreutils}/bin/tr -d ' ')
+ util=$(${pkgs.coreutils}/bin/echo "$data" | ${pkgs.gawk}/bin/awk -F, '{print $4}' | ${pkgs.coreutils}/bin/tr -d ' ')
+
+ # Calculate memory percentage
+ mem_pct=$((mem_used * 100 / mem_total))
+
+ # Temp indicator
+ if [ "$temp" -lt 60 ]; then
+ temp_icon="❄"
+ temp_color="%{F#6fb3c0}"
+ elif [ "$temp" -lt 80 ]; then
+ temp_icon="🌡"
+ temp_color="%{F#c0b24f}"
+ else
+ temp_icon="🔥"
+ temp_color="%{F#ff6f6f}"
+ fi
+
+ # Usage bar
+ bars="▁▂▃▄▅▆▇█"
+ idx=$((util / 13))
+ if [ $idx -gt 7 ]; then idx=7; fi
+ bar="''${bars:$idx:1}"
+
+ if [ "$util" -lt 30 ]; then
+ util_color="%{F#51b04f}"
+ elif [ "$util" -lt 70 ]; then
+ util_color="%{F#c0b24f}"
+ else
+ util_color="%{F#ff6f6f}"
+ fi
+
+ ${pkgs.coreutils}/bin/echo "''${temp_color}''${temp_icon} ''${temp}°C%{F-} │ GPU ''${util}% ''${util_color}''${bar}%{F-} │ MEM ''${mem_pct}%"
+ '';
+ in "${script}";
+ interval = 2;
+ };
+
};
};
}
diff --git a/lib/xmonad.hs b/lib/xmonad.hs
index 3903671..34681d9 100644
--- a/lib/xmonad.hs
+++ b/lib/xmonad.hs
@@ -183,10 +183,12 @@ addSpace =
myTabCfg theme =
def
{ fontName = "xft:Fira Sans:size=10:ant",
- activeBorderColor = highlight theme,
+ activeBorderColor = "#f3c09a", -- cursor/orange
inactiveBorderColor = background theme,
- activeColor = highlight theme,
- inactiveColor = background theme
+ activeColor = "#f3c09a", -- cursor/orange background
+ inactiveColor = background theme,
+ activeTextColor = background theme, -- dark text on orange
+ inactiveTextColor = foreground theme
}
myLayout theme =
diff --git a/profiles/beryllium.nix b/profiles/beryllium.nix
index d6c6a06..2907b1f 100644
--- a/profiles/beryllium.nix
+++ b/profiles/beryllium.nix
@@ -91,12 +91,11 @@ in {
services.polybar.enable = true;
services.polybar.config."bar/top".monitor = "DP-0";
services.polybar.config."bar/bottom".monitor = "DP-0";
- services.polybar.config."bar/cpu".monitor = "DP-0";
+ services.polybar.config."bar/gpu".monitor = "DP-0";
services.polybar.script = ''
polybar top &
polybar bottom &
- sleep 0.5
- polybar cpu &
+ polybar gpu &
'';
}