dot

NixOS dotfiles
git clone https://git.echoz.io/dot.git
Log | Files | Refs

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 }