{ config, lib, pkgs, ... }: with lib; { services.polybar = { package = pkgs.polybarFull; script = '' # Terminate already running bar instances killall -q polybar # Wait until the processes have been shut down while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done # Launch Polybar, using default config location ~/.config/polybar/config polybar -r main & polybar -r secondary & ''; settings = { "colors" = { # background = "\${xrdb:color0:#222}"; background = "#AA000000"; background-alt = "#00000000"; # foreground = "\${xrdb:color7:#222}"; foreground = "#ffffff"; foreground-alt = "#ffffff"; primary = "#ffffff"; secondary = "#e60053"; alert = "#bd2c40"; }; "bar/main" = { monitor = config.local.gui.primaryMonitor.monitorId; width = "100%"; height = 30; offset-x = "0%"; offset-y = "0%"; radius = 0.0; fixed-center = false; background = "\${colors.background}"; foreground = "\${colors.foreground}"; line-size = 1; line-color = "#f0000000"; border-size = 0; border-color = "#00000000"; padding-left = 0; padding-right = 0; module-margin-left = 1; module-margin-right = 1; # font-0 = "fixed:pixelsize=10;1"; font-0 = "JetBrains Mono Light:size=10;0"; font-1 = "unifont:fontformat=truetype:size=8:antialias=false;0"; font-2 = "siji:pixelsize=10;1"; # font-2 = "FontAwesome5Free:style=Regular:size=10;4"; modules-left = "i3"; modules-center = "xwindow"; modules-right = "xkeyboard pulseaudio filesystem memory cpu temperature gputemperature nvmetemperature wlan eth date semanatec"; separator = "|"; tray-position = "right"; tray-padding = 2; # To allow other windows to be placed above the bar, or to avoid having the bar visible when in fullscreen mode, # you need to use the following two parameters. Note that it will tell the window manager to back off so no # area will be reserved, etc. # # wm-restack = "i3"; # override-redirect = true; cursor-click = "pointer"; cursor-scroll = "ns-resize"; }; "bar/secondary" = { monitor = head (attrNames (filterAttrs (monitorId: v: !v.primary) config.local.gui.monitors)); # this is bad. will fail if more than 2 monitors. this sets all monitors other than the primary one for this bar. "inherit" = "bar/main"; modules-left = "i3"; modules-center = "xwindow"; modules-right = "xkeyboard pulseaudio date"; tray-position = "none"; }; "module/xwindow" = { type = "internal/xwindow"; label = "%title:0:30:...%"; }; "module/xkeyboard" = { type = "internal/xkeyboard"; blacklist-0 = "num lock"; format-prefix = ""; format-prefix-foreground = "\${colors.foreground-alt}"; label-layout = "%layout%"; label-indicator-padding = 2; label-indicator-margin = 1; label-indicator-background = "\${colors.secondary}"; }; "module/filesystem" = { type = "internal/fs"; interval = 10; mount-0 = "/"; label-mounted = "%{F#0a81f5}%mountpoint%%{F-}: %used%/%total%"; label-unmounted = ""; }; "module/i3" = { type = "internal/i3"; format = "<label-state> <label-mode>"; index-sort = true; wrapping-scroll = false; # Only show workspaces on the same output as the bar # pin-workspaces = true label-mode-padding = 1; label-mode-foreground = "#000"; label-mode-background = "\${colors.primary}"; # focused = Active workspace on focused monitor label-focused = "%index%"; label-focused-background = "\${colors.background}"; label-focused-underline = "\${colors.primary}"; label-focused-padding = 1; # unfocused = Inactive workspace on any monitor label-unfocused = "%index%"; label-unfocused-padding = 1; # visible = Active workspace on unfocused monitor label-visible = "%index%"; label-visible-background = "\${self.label-focused-background}"; label-visible-underline = "\${self.label-focused-underline}"; label-visible-padding = "\${self.label-focused-padding}"; # urgent = Workspace with urgency hint set label-urgent = "%index%"; label-urgent-background = "\${colors.alert}"; label-urgent-padding = 1; }; "module/xbacklight" = { type = "internal/xbacklight"; format = "<label> <bar>"; label = "BL"; bar-width = 10; bar-indicator = "|"; bar-indicator-foreground = "#fff"; bar-indicator-font = 2; bar-fill = "─"; bar-fill-font = 2; bar-fill-foreground = "#9f78e1"; bar-empty = "─"; bar-empty-font = 2; bar-empty-foreground = "\${colors.foreground-alt}"; }; "module/backlight-acpi" = { "inherit" = "module/xbacklight"; type = "internal/backlight"; card = "intel_backlight"; }; "module/cpu" = { type = "internal/cpu"; interval = 2; format-prefix = "cpu "; format-prefix-foreground = "\${colors.foreground-alt}"; label = "%percentage:2%%"; }; "module/memory" = { type = "internal/memory"; interval = 2; format-prefix = "mem "; format-prefix-foreground = "\${colors.foreground-alt}"; label = "%percentage_used%%"; }; "module/wlan" = { type = "internal/network"; interface = "wlp7s0"; interval = 3.0; format-connected = "<ramp-signal> <label-connected>"; label-connected = "%essid%"; format-disconnected = ""; # format-disconnected = "<label-disconnected>"; # format-disconnected-underline = "\${self.format-connected-underline}"; # label-disconnected = "%ifname% disconnected"; # label-disconnected-foreground = "\${colors.foreground-alt}"; ramp-signal-0 = ""; ramp-signal-1 = ""; ramp-signal-2 = ""; ramp-signal-3 = ""; ramp-signal-4 = ""; ramp-signal-foreground = "\${colors.foreground-alt}"; }; "module/eth" = { type = "internal/network"; interface = "enp8s0"; interval = 3.0; format-connected-prefix = ""; format-connected-prefix-foreground = "\${colors.foreground-alt}"; label-connected = "%local_ip%"; format-disconnected = ""; # format-disconnected = "<label-disconnected>"; # format-disconnected-underline = "\${self.format-connected-underline}"; # label-disconnected = "%ifname% disconnected"; # label-disconnected-foreground = "\${colors.foreground-alt}"; }; "module/date" = { type = "internal/date"; interval = 1; date = " %d/%m/%Y"; date-alt = " %c"; time = "%H:%M"; time-alt = " [%s]"; format-prefix = ""; format-prefix-foreground = "\${colors.foreground-alt}"; label = "%date% %time%"; }; # "module/semanatec" = { # type = "custom/script" # exec = "/home/fabian/bin/semanatec/target/release/semanatec" # interval = 3600 # format-prefix = "" # }; "module/pulseaudio" = { type = "internal/pulseaudio"; format-volume = "<label-volume>"; label-volume = "vol %percentage%%"; label-volume-foreground = "\${root.foreground}"; label-muted = "vol 0%"; label-muted-foreground = "\${root.foreground}"; bar-volume-width = 10; bar-volume-foreground-0 = "#55aa55"; bar-volume-foreground-1 = "#55aa55"; bar-volume-foreground-2 = "#55aa55"; bar-volume-foreground-3 = "#55aa55"; bar-volume-foreground-4 = "#55aa55"; bar-volume-foreground-5 = "#f5a70a"; bar-volume-foreground-6 = "#ff5555"; bar-volume-gradient = false; bar-volume-indicator = "|"; bar-volume-indicator-font = 2; bar-volume-fill = "─"; bar-volume-fill-font = 2; bar-volume-empty = "─"; bar-volume-empty-font = 2; bar-volume-empty-foreground = "\${colors.foreground-alt}"; }; "module/alsa" = { type = "internal/alsa"; format-volume = "<label-volume> <bar-volume>"; label-volume = "VOL"; label-volume-foreground = "\${root.foreground}"; format-muted-prefix = "vol "; format-muted-foreground = "\${colors.foreground-alt}"; label-muted = "sound muted"; bar-volume-width = 10; bar-volume-foreground-0 = "#55aa55"; bar-volume-foreground-1 = "#55aa55"; bar-volume-foreground-2 = "#55aa55"; bar-volume-foreground-3 = "#55aa55"; bar-volume-foreground-4 = "#55aa55"; bar-volume-foreground-5 = "#f5a70a"; bar-volume-foreground-6 = "#ff5555"; bar-volume-gradient = false; bar-volume-indicator = "|"; bar-volume-indicator-font = 2; bar-volume-fill = "─"; bar-volume-fill-font = 2; bar-volume-empty = "─"; bar-volume-empty-font = 2; bar-volume-empty-foreground = "\${colors.foreground-alt}"; }; "module/battery" = { type = "internal/battery"; battery = "BAT0"; adapter = "ADP1"; full-at = 98; format-charging = "<animation-charging> <label-charging>"; format-charging-underline = "#ffb52a"; format-discharging = "<animation-discharging> <label-discharging>"; format-discharging-underline = "\${self.format-charging-underline}"; format-full-prefix = " "; format-full-prefix-foreground = "\${colors.foreground-alt}"; format-full-underline = "\${self.format-charging-underline}"; ramp-capacity-0 = ""; ramp-capacity-1 = ""; ramp-capacity-2 = ""; ramp-capacity-foreground = "\${colors.foreground-alt}"; animation-charging-0 = ""; animation-charging-1 = ""; animation-charging-2 = ""; animation-charging-foreground = "\${colors.foreground-alt}"; animation-charging-framerate = 750; animation-discharging-0 = ""; animation-discharging-1 = ""; animation-discharging-2 = ""; animation-discharging-foreground = "\${colors.foreground-alt}"; animation-discharging-framerate = 750; }; "module/temperature" = { type = "internal/temperature"; warn-temperature = 60; hwmon-path = "/sys/devices/pci0000:00/0000:00:18.3/hwmon/hwmon1/temp2_input"; format = "<ramp> <label>"; format-warn = "<ramp> <label-warn>"; label = "cpu %temperature-c%"; label-warn = "cpu %temperature-c%"; label-warn-foreground = "\${colors.secondary}"; ramp-0 = ""; ramp-1 = ""; ramp-2 = ""; ramp-foreground = "\${colors.foreground-alt}"; }; "module/gputemperature" = { type = "internal/temperature"; warn-temperature = 60; hwmon-path = "/sys/devices/pci0000:00/0000:00:03.1/0000:09:00.0/hwmon/hwmon3/temp1_input"; format = "<ramp> <label>"; format-warn = "<ramp> <label-warn>"; label = "gpu %temperature-c%"; label-warn = "gpu %temperature-c%"; label-warn-foreground = "\${colors.secondary}"; ramp-0 = ""; ramp-1 = ""; ramp-2 = ""; ramp-foreground = "\${colors.foreground-alt}"; }; "module/nvmetemperature" = { type = "internal/temperature"; warn-temperature = 60; hwmon-path = "/sys/devices/pci0000:00/0000:00:01.1/0000:01:00.0/hwmon/hwmon0/temp1_input"; format = "<ramp> <label>"; format-warn = "<ramp> <label-warn>"; label = "M.2 %temperature-c%"; label-warn = "M.2 %temperature-c%"; label-warn-foreground = "\${colors.secondary}"; ramp-0 = ""; ramp-1 = ""; ramp-2 = ""; ramp-foreground = "\${colors.foreground-alt}"; }; "module/powermenu" = { type = "custom/menu"; expand-right = true; format-spacing = 1; label-open = ""; label-open-foreground = "\${colors.secondary}"; label-close = " cancel"; label-close-foreground = "\${colors.secondary}"; label-separator = "|"; label-separator-foreground = "\${colors.foreground-alt}"; menu-0-0 = "reboot"; menu-0-0-exec = "menu-open-1"; menu-0-1 = "power off"; menu-0-1-exec = "menu-open-2"; menu-1-0 = "cancel"; menu-1-0-exec = "menu-open-0"; menu-1-1 = "reboot"; menu-1-1-exec = "sudo reboot"; menu-2-0 = "power off"; menu-2-0-exec = "sudo poweroff"; menu-2-1 = "cancel"; menu-2-1-exec = "menu-open-0"; }; "module/sink_changer" = { type = "custom/script"; exec = "/home/fabian/bin/polybar_scripts/info.sh"; label = "%output%"; click-left = "/home/fabian/bin/polybar_scripts/sink_changer.sh"; # format-prefix = " "; interval = "0"; # format-prefix-foreground = "${colors.foreground-alt}"; }; "settings" = { screenchange-reload = true; # compositing-background = "xor"; # compositing-background = "screen"; # compositing-foreground = "source"; # compositing-border = "over"; # pseudo-transparency = false; }; "global/wm" = { margin-top = 5; margin-bottom = 5; }; }; }; }