{ # Snowfall Lib provides a customized `lib` instance with access to your flake's library # as well as the libraries available from your flake's inputs. lib, # You also have access to your flake's inputs. inputs, # All other arguments come from NixPkgs. You can use `pkgs` to pull packages or helpers # programmatically or you may add the named attributes as arguments here. pkgs, stdenv, ... }: pkgs.writeShellApplication { name = "pulseaudio-popup"; runtimeInputs = with pkgs; [ pavucontrol jgmenu pulseaudio ]; # Do not insert e.g. pipefail bashOptions = [ ]; text = '' HDMI_SINK="alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_3__sink" LAPTOP_SINK="alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__sink" HDMI_ICON=$(pactl info | grep -q $HDMI_SINK && echo "checkbox") LAPTOP_ICON=$(pactl info | grep -q $LAPTOP_SINK && echo "checkbox") HDMI_VOLUME=$(pactl get-sink-volume $HDMI_SINK | head -n 1 | awk '{print $5}') LAPTOP_VOLUME=$(pactl get-sink-volume $LAPTOP_SINK | head -n 1 | awk '{print $5}') read -r -d "" CONF <<EOF Open Pavucontrol,pavucontrol,pavucontrol ^sep() HDMI - $HDMI_VOLUME,pactl set-default-sink $HDMI_SINK,$HDMI_ICON Laptop - $LAPTOP_VOLUME,pactl set-default-sink $LAPTOP_SINK,$LAPTOP_ICON EOF echo "$CONF" | jgmenu --simple --at-pointer ''; }