{ config, pkgs, ... }: let inherit (pkgs.rice) colorPalette opacity; grep = "${pkgs.gnugrep}/bin/grep"; cut = "${pkgs.coreutils}/bin/cut"; head = "${pkgs.coreutils}/bin/head"; pavucontrol = "${pkgs.pavucontrol}/bin/pavucontrol"; pgrep = "${pkgs.procps}/bin/pgrep"; pkill = "${pkgs.procps}/bin/pkill"; playerCtl = "${pkgs.playerctl}/bin/playerctl"; playerStatus = "${playerCtl} -f '{{emoji(status)}} {{title}} - {{artist}}' metadata | ${head} -c 60"; systemctl = "${pkgs.systemd}/bin/systemctl"; loginctl = "${pkgs.systemd}/bin/loginctl"; shutdown = "${pkgs.systemd}/bin/shutdown"; logout = pkgs.writeShellScript "logout" '' session=`${loginctl} session-status | ${pkgs.coreutils}/bin/head -n 1 | ${pkgs.gawk}/bin/awk '{print $1}'` ${loginctl} terminate-session $session ''; colors = with pkgs.lib.rice; let alpha = 255 * opacity; in palette.toARGBHex rec { normal = { foreground = colorPalette.normal.white; background = color.setAlphaRgba alpha (colorPalette.normal.black); underline = colorPalette.dark.blue; }; active = { foreground = colorPalette.bright.white; background = color.setAlphaRgba alpha (colorPalette.normal.black); underline = colorPalette.bright.blue; }; selected = { foreground = colorPalette.bright.white; background = color.setAlphaRgba alpha (color.brighten 10 colorPalette.bright.black); underline = colorPalette.bright.red; }; alert = colorPalette.bright.red; green = colorPalette.normal.green; yellow = colorPalette.normal.yellow; orange = colorPalette.bright.red; red = colorPalette.normal.red; transparent = color.transparent; }; commonBar = { locale = config.home.language.base; monitor = "\${env:MONITOR}"; width = "100%"; height = 20; radius = 6.0; fixed-center = false; background = colors.normal.background; foreground = colors.normal.foreground; line-size = 2; line-color = colors.normal.underline; padding = { left = 0; right = 0; }; module.margin = { left = 0; right = 0; }; separator = " "; border = { color = colors.transparent; left.size = 2; righ.sizet = 2; top.size = 2; bottom.size = 0; }; font = [ "${pkgs.rice.font.monospace.name}:size=${toString pkgs.rice.font.monospace.size};2" # "Font Awesome 6 Free:size=14;0" # "Noto Color Emoji:size=2;2" "Noto Sans Symbols2:size=${toString pkgs.rice.font.monospace.size};2" # "Material Design Icons:size=${toString pkgs.rice.font.monospace.size};2" # "EmojiOne Color:size=${toString pkgs.rice.font.monospace.size};0" ]; wm-restack = "bspwm"; }; ramp = [ "▂" "▃" "▄" "▅" "▆" "▇" ]; in { home.packages = with pkgs; [ pkgs.rice.font.monospace.package # emojione # noto-fonts-emoji noto-fonts # material-design-icons # font-awesome ]; services.polybar = { enable = true; package = pkgs.polybarFull; script = '' monitor=`polybar -m | ${grep} primary | ${cut} -d":" -f1` MONITOR=$monitor polybar primary & monitors=(`polybar -m | ${grep} -v primary | ${cut} -d":" -f1`) for monitor in "''${monitors[@]}"; do MONITOR=$monitor polybar secondary & done ''; settings = { "settings" = { screenchange-reload = false; }; "bar/primary" = commonBar // { modules-left = "bspwm"; # modules-center = modules-right = "player pulseaudio temperature cpu memory battery date powermenu"; enable-ipc = true; tray = { position = "right"; padding = 0; }; }; "bar/secondary" = commonBar // { modules-left = "bspwm"; # modules-center = modules-right = "player pulseaudio temperature cpu memory battery date powermenu"; enable-ipc = true; }; "module/battery" = { type = "internal/battery"; adapter = "AC"; battery = "BAT0"; full.at = 98; animation = { charging = { text = [ "" "" "" "" "" "" "" "" "" "" ]; framerate = "750"; }; discharging = { text = [ "" "" "" "" "" "" "" "" "" "" ]; framerate = "750"; }; }; format = { charging = colors.selected // { text = " "; }; discharging = colors.active // { text = " "; }; full = colors.normal // { text = " "; }; }; label.text = "%percentage%%"; # = { # chargin = "%percentage%%"; # dischargin = "%percentage%%"; # full = "%percentage%%"; # }; }; "module/bspwm" = { type = "internal/bspwm"; format = ""; label = let common = { padding = 1; separator = " "; text = "%name%"; }; in { focused = colors.selected // common; occupied = colors.active // common; urgent = colors.active // common // { background = colors.alert; }; empty = colors.normal // common // { text = "󰧟"; padding = 0; }; }; }; "module/cpu" = { type = "internal/cpu"; format = colors.normal // { text = "