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