diff options
| -rw-r--r-- | modules/home/suites/desktop/default.nix | 4 | ||||
| -rw-r--r-- | modules/home/tools/default.nix | 3 | ||||
| -rw-r--r-- | packages/mute/default.nix | 39 |
3 files changed, 46 insertions, 0 deletions
diff --git a/modules/home/suites/desktop/default.nix b/modules/home/suites/desktop/default.nix index 530a63a..985dca2 100644 --- a/modules/home/suites/desktop/default.nix +++ b/modules/home/suites/desktop/default.nix @@ -16,6 +16,10 @@ in { firefox.enable = true; }; + tools = { + mute.enable = true; + }; + desktop.components = { i3.enable = true; diff --git a/modules/home/tools/default.nix b/modules/home/tools/default.nix index 9627d0f..98b37c7 100644 --- a/modules/home/tools/default.nix +++ b/modules/home/tools/default.nix @@ -11,5 +11,8 @@ with lib; with lib.${namespace}; { ]; persist = [ ".wine" ]; }) + (mkSimpleTool "mute" { + packages = [ cxl.mute ]; + }) ]; } diff --git a/packages/mute/default.nix b/packages/mute/default.nix new file mode 100644 index 0000000..b868acd --- /dev/null +++ b/packages/mute/default.nix @@ -0,0 +1,39 @@ +{ lib, pkgs, ... }: + +let + pactl = "${pkgs.pulseaudio}/bin/pactl"; + jq = "${pkgs.jq}/bin/jq"; +in pkgs.writeShellScriptBin "mute" '' + set -euo pipefail + IFS=$'\n\t' + + target="''${1:-0}" + inputs="$(${pactl} -f json list sink-inputs)" + + if [[ "''${1:-}" != "" ]]; then + index="$(${jq} '.['$target'].index' <<< "$inputs")" + muted="$(${jq} '.['$target'].mute' <<< "$inputs")" + if [[ "$muted" = "true" ]]; then + ${pactl} set-sink-input-mute "$index" false + else + ${pactl} set-sink-input-mute "$index" true + fi + + inputs="$(${pactl} -f json list sink-inputs)" + fi + + count="$(${jq} 'length' <<< "$inputs")" + for ((i = 0; i < $count; i++)); do + index="$(${jq} '.['$i'].index' <<< "$inputs")" + muted="$(${jq} '.['$i'].mute' <<< "$inputs")" + name="$(${jq} '.['$i'].properties."application.name"' <<< "$inputs")" + media="$(${jq} '.['$i'].properties."media.name"' <<< "$inputs")" + + state=" " + if [[ "$muted" = "true" ]]; then + state="*" + fi + + printf ' [%d] %s %d\t%s\t(%s)\n' "$i" "$state" "$index" "$name" "$media" + done +'' |