default.nix (2523B)
1 { 2 lib, 3 pkgs, 4 5 user, 6 style, 7 ... 8 }: 9 let 10 yuck = pkgs.writeTextDir "/eww.yuck" '' 11 (defwidget microphone-indicator [] 12 (box 13 :orientation "v" 14 :halign "center" 15 :valign "center" 16 :visible {!microphone-muted} 17 :active "false" 18 (label :xalign 0.5 :justify "center" :text ""))) 19 20 (defwindow microphone-indicator 21 :monitor 0 22 :stacking "overlay" 23 :focusable "none" 24 :namespace "microphone-indicator" 25 :geometry (geometry :y "10px" :width "0px" :height "0px" :anchor "top center") 26 (microphone-indicator)) 27 28 (deflisten microphone-muted 29 :initial "false" 30 "${pkgs.writeShellScript "monitor-microphone-muted" '' 31 ${lib.getExe pkgs.pamixer} --default-source --get-mute 32 ${lib.getExe' pkgs.pulseaudio "pactl"} --format json subscribe \ 33 | ${lib.getExe pkgs.jq} --unbuffered -cr 'select(.event == "change" and .on == "source") | "."' \ 34 | xargs -L1 ${lib.getExe pkgs.pamixer} --default-source --get-mute 35 ''}") 36 ''; 37 38 scss = 39 let 40 s = toString; 41 fg = with style.colors.fg; "rgba(${s r},${s g},${s b},0.2)"; 42 in 43 pkgs.writeTextDir "/eww.scss" '' 44 .microphone-indicator { 45 color: ${fg}; 46 font-size: 32px; 47 min-width: 44px; 48 min-height: 44px; 49 50 &.background { 51 background: ${style.colors.bg.rgba}; 52 border-radius: 10px; 53 } 54 } 55 ''; 56 57 configDir = pkgs.symlinkJoin { 58 name = "eww-config"; 59 paths = [ 60 yuck 61 scss 62 ]; 63 }; 64 in 65 { 66 home-manager.users.${user} = 67 { config, ... }: 68 { 69 wayland.windowManager.hyprland.settings.layerrule = [ 70 "blur on, ignore_alpha 0.19, no_anim on, match:namespace microphone-indicator" 71 ]; 72 73 programs.eww = { 74 inherit configDir; 75 enable = true; 76 }; 77 78 systemd.user.services.eww = { 79 Unit = { 80 PartOf = [ config.wayland.systemd.target ]; 81 After = [ config.wayland.systemd.target ]; 82 ConditionEnvironment = "WAYLAND_DISPLAY"; 83 X-Restart-Triggers = [ "${config.programs.eww.configDir}" ]; 84 }; 85 86 Service = { 87 ExecStart = "${lib.getExe config.programs.eww.package} daemon --no-daemonize"; 88 ExecStartPost = "${lib.getExe config.programs.eww.package} open microphone-indicator"; 89 KillMode = "mixed"; 90 Restart = "on-failure"; 91 }; 92 93 Install.WantedBy = [ config.wayland.systemd.target ]; 94 }; 95 }; 96 }