# Hyprpanel is the bar on top of the screen # Display information like workspaces, battery, wifi, ... { config, lib, ... }: let transparentButtons = 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"; rounding = config.theme.rounding; border-size = config.theme.border-size; gaps-out = config.theme.gaps-out; gaps-in = config.theme.gaps-in; floating = config.theme.bar.floating; transparent = config.theme.bar.transparent; position = config.theme.bar.position; # "top" ou "bottom" notificationOpacity = 90; location = config.var.location; homeDir = "/home/${config.var.username}"; in { wayland.windowManager.hyprland.settings.exec-once = [ "hyprpanel" ]; programs.hyprpanel = { enable = true; settings = { bar.layouts = { "*" = { left = [ "dashboard" "workspaces" "windowtitle" ]; middle = [ "media" ]; right = lib.flatten [ "systray" "volume" "bluetooth" (lib.optional config.var.has_battery "battery") "network" "clock" "notifications" ]; }; }; theme.font.name = font; theme.font.size = fontSizeForHyprpanel; theme.bar.outer_spacing = if floating && transparent then "0px" else "8px"; theme.bar.buttons.y_margins = if floating && transparent then "0px" else "8px"; theme.bar.buttons.spacing = "0.3em"; theme.bar.buttons.radius = (if transparent then toString rounding else toString (rounding - 8)) + "px"; theme.bar.floating = floating; theme.bar.buttons.padding_x = "0.8rem"; theme.bar.buttons.padding_y = "0.4rem"; theme.bar.margin_top = (if position == "top" then toString (gaps-in * 2) else "0") + "px"; theme.bar.margin_bottom = (if position == "top" then "0" else toString (gaps-in * 2)) + "px"; theme.bar.margin_sides = toString gaps-out + "px"; theme.bar.border_radius = toString rounding + "px"; theme.bar.transparent = transparent; theme.bar.location = position; theme.bar.dropdownGap = "4.5em"; theme.bar.menus.shadow = if transparent then "0 0 0 0" else "0px 0px 3px 1px #16161e"; theme.bar.buttons.style = "default"; theme.bar.buttons.monochrome = true; theme.bar.menus.monochrome = true; theme.bar.menus.card_radius = toString rounding + "px"; theme.bar.menus.border.size = toString border-size + "px"; theme.bar.menus.border.radius = toString rounding + "px"; theme.bar.menus.menu.media.card.tint = 90; bar.launcher.icon = ""; bar.workspaces.show_numbered = false; bar.workspaces.workspaces = 3; bar.workspaces.numbered_active_indicator = "color"; bar.workspaces.monitorSpecific = true; bar.workspaces.applicationIconEmptyWorkspace = ""; bar.workspaces.showApplicationIcons = true; bar.workspaces.showWsIcons = true; bar.workspaces.ignored = "-98"; # NOTE: Ignore special:scratchpad workspace. Hyprpanel only supports workspace numbers #bar.workspaces.ignoredWorkspaces = "/scratchpad/i"; #bar.workspaces.ignored_workspaces = "/scratchpad/i"; bar.windowtitle.label = true; bar.volume.label = false; bar.network.truncation_size = 12; bar.bluetooth.label = false; bar.clock.format = "%a %b %d %H:%M"; bar.notifications.show_total = true; bar.media.show_active_only = true; bar.customModules.updates.pollingInterval = 1440000; notifications.position = "top right"; notifications.showActionsOnHover = true; theme.notification.opacity = notificationOpacity; theme.notification.enableShadow = true; theme.notification.border_radius = toString rounding + "px"; theme.osd.enable = true; theme.osd.orientation = "vertical"; theme.osd.location = "left"; theme.osd.radius = toString rounding + "px"; theme.osd.margins = "0px 0px 0px 10px"; theme.osd.muted_zero = true; menus.clock.weather.location = location; menus.clock.weather.unit = "metric"; menus.dashboard.powermenu.confirmation = false; menus.dashboard.powermenu.avatar.image = "~/.face.icon"; menus.dashboard.shortcuts.left.shortcut1.icon = ""; menus.dashboard.shortcuts.left.shortcut1.command = "zen"; menus.dashboard.shortcuts.left.shortcut1.tooltip = "Zen"; menus.dashboard.shortcuts.left.shortcut2.icon = "󰅶"; menus.dashboard.shortcuts.left.shortcut2.command = "caffeine"; menus.dashboard.shortcuts.left.shortcut2.tooltip = "Caffeine"; menus.dashboard.shortcuts.left.shortcut3.icon = "󰖔"; menus.dashboard.shortcuts.left.shortcut3.command = "night-shift"; menus.dashboard.shortcuts.left.shortcut3.tooltip = "Night-shift"; menus.dashboard.shortcuts.left.shortcut4.icon = ""; menus.dashboard.shortcuts.left.shortcut4.command = "menu"; menus.dashboard.shortcuts.left.shortcut4.tooltip = "Search Apps"; menus.dashboard.shortcuts.right.shortcut1.icon = ""; menus.dashboard.shortcuts.right.shortcut1.command = "hyprpicker -a"; menus.dashboard.shortcuts.right.shortcut1.tooltip = "Color Picker"; menus.dashboard.shortcuts.right.shortcut3.icon = "󰄀"; menus.dashboard.shortcuts.right.shortcut3.command = "screenshot region swappy"; menus.dashboard.shortcuts.right.shortcut3.tooltip = "Screenshot"; menus.dashboard.directories.left.directory1.label = " Home"; menus.dashboard.directories.left.directory1.command = "xdg-open ${homeDir}"; menus.dashboard.directories.left.directory2.label = "󰲂 Documents"; menus.dashboard.directories.left.directory2.command = "xdg-open ${homeDir}/Documents"; menus.dashboard.directories.left.directory3.label = "󰉍 Downloads"; menus.dashboard.directories.left.directory3.command = "xdg-open ${homeDir}/Downloads"; menus.dashboard.directories.right.directory1.label = " Desktop"; menus.dashboard.directories.right.directory1.command = "xdg-open ${homeDir}/Desktop"; menus.dashboard.directories.right.directory2.label = " Videos"; menus.dashboard.directories.right.directory2.command = "xdg-open ${homeDir}/Videos"; menus.dashboard.directories.right.directory3.label = "󰉏 Pictures"; menus.dashboard.directories.right.directory3.command = "xdg-open ${homeDir}/Pictures"; menus.power.lowBatteryNotification = true; wallpaper.enable = false; # theme.bar.buttons.workspaces.hover = accent-alt; # theme.bar.buttons.workspaces.active = accent; # theme.bar.buttons.workspaces.available = accent-alt; # theme.bar.buttons.workspaces.occupied = accent-alt; # # theme.bar.menus.background = background; # theme.bar.menus.cards = background-alt; # theme.bar.menus.label = foreground; # theme.bar.menus.text = foreground; # theme.bar.menus.border.color = accent; # theme.bar.menus.popover.text = foreground; # theme.bar.menus.popover.background = background-alt; # theme.bar.menus.listitems.active = accent; # theme.bar.menus.icons.active = accent; # theme.bar.menus.switch.enabled = accent; # theme.bar.menus.check_radio_button.active = accent; # theme.bar.menus.buttons.default = accent; # theme.bar.menus.buttons.active = accent; # theme.bar.menus.iconbuttons.active = accent; # theme.bar.menus.progressbar.foreground = accent; # theme.bar.menus.slider.primary = accent; # theme.bar.menus.tooltip.background = background-alt; # theme.bar.menus.tooltip.text = foreground; # theme.bar.menus.dropdownmenu.background = background-alt; # theme.bar.menus.dropdownmenu.text = foreground; # theme.bar.background = # background # + ( # if transparentButtons && transparent # then "00" # else "" # ); # theme.bar.buttons.text = # if transparent && transparentButtons # then foregroundOnWallpaper # else foreground; # theme.bar.buttons.background = # ( # if transparent # then background # else background-alt # ) # + ( # if transparentButtons # then "00" # else "" # ); # theme.bar.buttons.icon = accent; # # theme.bar.buttons.notifications.background = background-alt; # theme.bar.buttons.hover = background; # theme.bar.buttons.notifications.hover = background; # theme.bar.buttons.notifications.total = accent; # theme.bar.buttons.notifications.icon = accent; # # theme.osd.bar_color = accent; # theme.osd.bar_overflow_color = accent-alt; # theme.osd.icon = background; # theme.osd.icon_container = accent; # theme.osd.label = accent; # theme.osd.bar_container = background-alt; # # theme.bar.menus.menu.media.background.color = background-alt; # theme.bar.menus.menu.media.card.color = background-alt; # # theme.notification.background = background-alt; # theme.notification.actions.background = accent; # theme.notification.actions.text = foreground; # theme.notification.label = accent; # theme.notification.border = background-alt; # theme.notification.text = foreground; # theme.notification.labelicon = accent; # theme.notification.close_button.background = background-alt; # theme.notification.close_button.label = "#f38ba8"; }; }; }