nixos-infra/users/rus07tam/modules/hyprland/hyprpanel.nix
Rustam Efimov 30ce0dafc2
Some checks failed
Nix CI / build (push) Failing after 31s
initial commit
2026-04-01 08:50:01 +03:00

224 lines
6.6 KiB
Nix

{
config,
lib,
...
}:
let
inherit (config.theme.bar) transparentButtons;
accent = "#${config.lib.stylix.colors.base0D}";
accent-alt = "#${config.lib.stylix.colors.base03}";
background = "#${config.lib.stylix.colors.base00}";
background-alt = "#${config.lib.stylix.colors.base01}";
foreground = "#${config.lib.stylix.colors.base05}";
foregroundOnWallpaper = "#${config.theme.textColorOnWallpaper}";
font = "${config.stylix.fonts.serif.name}";
fontSizeForHyprpanel = "${toString config.stylix.fonts.sizes.desktop}px";
inherit (config.theme) rounding;
inherit (config.theme) border-size;
inherit (config.theme) gaps-out;
inherit (config.theme) gaps-in;
inherit (config.theme.bar) floating;
inherit (config.theme.bar) transparent;
inherit (config.theme.bar) position;
notificationOpacity = 90;
in
{
programs.hyprpanel = {
enable = true;
settings = lib.mkForce {
bar = {
layouts = {
"*" = {
left = [
"dashboard"
"workspaces"
"windowtitle"
];
middle = [
"media"
"cava"
];
right = [
"systray"
"volume"
"clock"
"notifications"
"kbinput"
];
};
};
launcher.icon = "";
workspaces = {
show_numbered = false;
workspaces = 7;
numbered_active_indicator = "color";
monitorSpecific = false;
applicationIconEmptyWorkspace = "";
showApplicationIcons = true;
showWsIcons = true;
};
windowtitle.label = true;
volume.label = false;
network.truncation_size = 12;
bluetooth.label = false;
clock.format = "%a %b %d %I:%M %p";
notifications.show_total = true;
media.show_active_only = true;
customModules = {
updates.pollingInterval = 1440000;
cava = {
showIcon = false;
stereo = true;
showActiveOnly = true;
};
};
};
notifications = {
position = "top right";
showActionsOnHover = true;
};
menus = {
dashboard = {
shortcuts.enabled = false;
powermenu = {
confirmation = false;
avatar.image = "~/.face.icon";
};
directories = { };
};
power.lowBatteryNotification = true;
};
wallpaper.enable = false;
theme = {
font = {
name = font;
size = fontSizeForHyprpanel;
};
osd = {
enable = true;
orientation = "vertical";
location = "left";
radius = toString rounding + "px";
margins = "0px 0px 0px 10px";
muted_zero = true;
bar_color = accent;
bar_overflow_color = accent-alt;
icon = background;
icon_container = accent;
label = accent;
bar_container = background-alt;
};
notification = {
opacity = notificationOpacity;
enableShadow = true;
border_radius = toString rounding + "px";
background = background-alt;
actions = {
background = accent;
text = foreground;
};
label = accent;
border = background-alt;
text = foreground;
labelicon = accent;
close_button = {
background = background-alt;
label = "#f38ba8";
};
};
bar = {
outer_spacing = if floating && transparent then "0px" else "8px";
margin_top = (if position == "top" then toString (gaps-in * 2) else "0") + "px";
margin_bottom = (if position == "top" then "0" else toString (gaps-in * 2)) + "px";
margin_sides = toString gaps-out + "px";
border_radius = toString rounding + "px";
inherit transparent;
location = position;
dropdownGap = "4.5em";
inherit floating;
menus = {
inherit background;
cards = background-alt;
label = foreground;
text = foreground;
border.color = accent;
popover = {
text = foreground;
background = background-alt;
};
listitems.active = accent;
icons.active = accent;
switch.enabled = accent;
check_radio_button.active = accent;
buttons = {
default = accent;
active = accent;
};
iconbuttons.active = accent;
progressbar.foreground = accent;
slider.primary = accent;
tooltip = {
background = background-alt;
text = foreground;
};
dropdownmenu = {
background = background-alt;
text = foreground;
};
shadow = if transparent then "0 0 0 0" else "0px 0px 3px 1px #16161e";
monochrome = true;
card_radius = toString rounding + "px";
border = {
size = toString border-size + "px";
radius = toString rounding + "px";
};
menu.media = {
background.color = background-alt;
card = {
color = background-alt;
tint = 90;
};
};
};
background = background + (if transparentButtons && transparent then "00" else "");
buttons = {
workspaces = {
hover = accent-alt;
active = accent;
available = accent-alt;
occupied = accent-alt;
};
y_margins = if floating && transparent then "0px" else "8px";
spacing = "0.3em";
radius = (if transparent then toString rounding else toString (rounding - 8)) + "px";
padding_x = "0.8rem";
padding_y = "0.4rem";
style = "default";
monochrome = true;
text = if transparent && transparentButtons then foregroundOnWallpaper else foreground;
background =
(if transparent then background else background-alt) + (if transparentButtons then "00" else "");
icon = accent;
hover = lib.mkForce background;
notifications = {
hover = background;
total = accent;
icon = accent;
background = lib.mkForce background-alt;
};
};
};
};
};
};
}