2024-09-28 05:28:02 +00:00
|
|
|
{ lib, config, pkgs, ... }:
|
|
|
|
|
|
|
|
let
|
|
|
|
cfg = config.snowhawk.pipewire-controller;
|
|
|
|
|
|
|
|
pipewire-controller =
|
|
|
|
let
|
|
|
|
mpv = lib.getExe pkgs.mpv;
|
|
|
|
pamixer = lib.getExe pkgs.pamixer;
|
|
|
|
in
|
|
|
|
pkgs.writers.writeRustBin "pipewire-controller" { } ''
|
|
|
|
use std::{process::Command, str};
|
|
|
|
|
|
|
|
const MUTE_AUDIO: &str = "${../audio/discord-mute.mp3}";
|
|
|
|
const UNMUTE_AUDIO: &str = "${../audio/discord-unmute.mp3}";
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mute_status = Command::new("${pamixer}")
|
|
|
|
.args(["--default-source", "--get-mute"])
|
|
|
|
.output()
|
|
|
|
.expect("Unable to get mute status from pamixer")
|
|
|
|
.stdout;
|
|
|
|
|
2024-09-28 06:24:28 +00:00
|
|
|
let mute_status = str::from_utf8(&mute_status[..]).expect("pamixer output wasn't a string").trim();
|
2024-09-28 05:28:02 +00:00
|
|
|
|
|
|
|
if mute_status == "false" {
|
|
|
|
Command::new("${pamixer}")
|
|
|
|
.args(["--default-source", "--mute"])
|
|
|
|
.output()
|
|
|
|
.expect("Unable to mute via pamixer");
|
|
|
|
|
|
|
|
Command::new("${mpv}")
|
|
|
|
.args(["--no-video", MUTE_AUDIO])
|
|
|
|
.output()
|
|
|
|
.expect("Unable to play audio via mpv");
|
|
|
|
} else {
|
|
|
|
Command::new("${pamixer}")
|
|
|
|
.args(["--default-source", "--unmute"])
|
|
|
|
.output()
|
|
|
|
.expect("Unable to mute via pamixer");
|
|
|
|
|
|
|
|
Command::new("${mpv}")
|
|
|
|
.args(["--no-video", UNMUTE_AUDIO])
|
|
|
|
.output()
|
|
|
|
.expect("Unable to play audio via mpv");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
'';
|
|
|
|
in
|
|
|
|
{
|
|
|
|
options.snowhawk.pipewire-controller = {
|
|
|
|
enable = lib.mkEnableOption "pipewire-controller home-manager module";
|
|
|
|
};
|
|
|
|
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
|
|
home.packages = [ pipewire-controller ];
|
|
|
|
};
|
|
|
|
}
|