{ config, lib, pkgs, ... }: let cfg = config.samfelag.modules.desktop.polybar; i3Cfg = config.samfelag.modules.desktop.i3; polybar_pkg = pkgs.polybar.override { i3Support = true; pulseSupport = true; }; script = '' polybar top & polybar bottom & ''; # Paths paths = { config = ../../config/polybar/config.ini; bars = ../../config/polybar/bars; scripts = ../../config/polybar/scripts; }; in { options.samfelag.modules.desktop.polybar = { enable = lib.mkEnableOption "polybar"; }; config = lib.mkIf cfg.enable { # - Configuration ---------------------------- environment.systemPackages = [ polybar_pkg ]; hm.xdg.configFile."polybar/config.ini".source = paths.config; hm.xdg.configFile."polybar/bars".source = paths.bars; hm.xdg.configFile."polybar/scripts".source = paths.scripts; # - Themeing --------------------------------- hm.xdg.configFile."polybar/colour-scheme.ini".text = '' [colour-scheme] base00 = #${config.colorScheme.palette.base00} base01 = #${config.colorScheme.palette.base01} base02 = #${config.colorScheme.palette.base02} base03 = #${config.colorScheme.palette.base03} base04 = #${config.colorScheme.palette.base04} base05 = #${config.colorScheme.palette.base05} base06 = #${config.colorScheme.palette.base06} base07 = #${config.colorScheme.palette.base07} base08 = #${config.colorScheme.palette.base08} base09 = #${config.colorScheme.palette.base09} base0A = #${config.colorScheme.palette.base0A} base0B = #${config.colorScheme.palette.base0B} base0C = #${config.colorScheme.palette.base0C} base0D = #${config.colorScheme.palette.base0D} base0E = #${config.colorScheme.palette.base0E} base0F = #${config.colorScheme.palette.base0F} ''; # - Dependencies ----------------------------- # The polybar modules use rofi samfelag.modules.desktop.rofi.enable = true; samfelag.modules.desktop.i3.extraKeybindings = lib.mkIf i3Cfg.enable { "${i3Cfg.mod}+Shift+w" = "exec $HOME/.config/rofi/menus/wifi/wifi.sh"; }; # - Services --------------------------------- hm.systemd.user.services.polybar = { Unit = { Description = "Polybar status bar"; PartOf = [ "tray.target" ]; X-Restart-Triggers = [ "${paths.config}" ]; }; Service = { Type = "forking"; PassEnvironment = "PATH"; ExecStart = let scriptPkg = pkgs.writeShellScriptBin "polybar-start" script; in "${scriptPkg}/bin/polybar-start"; Restart = "on-failure"; }; Install = { WantedBy = [ "tray.target" ]; }; }; }; }