pkgs: relocate pipewire controller

This commit is contained in:
Zynh Ludwig 2025-02-24 02:25:54 -08:00
parent 7d68a93d4e
commit cd45522a46
7 changed files with 128 additions and 67 deletions

View file

@ -2,72 +2,6 @@
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;
let mute_status = str::from_utf8(&mute_status[..]).expect("pamixer output wasn't a string").trim();
if mute_status == "false" {
Command::new("${pamixer}")
.args(["--default-source", "--mute"])
.output()
.expect("Unable to mute via pamixer");
Command::new("${mpv}")
.args(["--no-video", "--volume=80", MUTE_AUDIO])
.output()
.expect("Unable to play audio via mpv");
} else {
Command::new("${pamixer}")
.args(["--default-source", "--unmute"])
.output()
.expect("Unable to unmute via pamixer");
Command::new("${mpv}")
.args(["--no-video", "--volume=80", UNMUTE_AUDIO])
.output()
.expect("Unable to play audio via mpv");
}
let xrootdatetime_pid_raw =
Command::new("systemctl")
.args([
"--user",
"show",
"--property", "MainPID",
"--value", "xrootdatetime"
])
.output();
if let Ok(xrootdatetime_pid_raw) = xrootdatetime_pid_raw {
if let Ok(xrootdatetime_pid) = str::from_utf8(&xrootdatetime_pid_raw.stdout[..]) {
let _ = Command::new("kill")
.args([
"-s",
"SIGUSR1",
xrootdatetime_pid
])
.spawn();
}
}
}
'';
in
{
options.snowhawk.pipewire-controller = {
@ -78,7 +12,7 @@ in
snowhawk.sxhkd.enable = true;
services.sxhkd.keybindings = {
"XF86TouchpadOn" = "${lib.getExe pipewire-controller}";
"XF86TouchpadOn" = "${lib.getExe pkgs.pipewire-controller}";
};
};
}

31
home/modules/satty.nix Normal file
View file

@ -0,0 +1,31 @@
{ config, pkgs, lib, ... }:
let
cfg = config.snowhawk.satty;
in
{
options.snowhawk.satty = {
enable = lib.mkEnableOption "satty module";
};
config = lib.mkIf cfg.enable {
home.packages = with pkgs; [
grim
jq
satty
slurp
wl-clipboard
astal.river
];
xdg.configFile = {
"satty/config.toml".source = pkgs.writers.writeTOML "satty-config.toml" {
general = {
action-on-enter = "save-to-clipboard";
copy-command = "${pkgs.wl-clipboard}/bin/wl-copy -t image/png";
output-filename = "${config.home.homeDirectory}/Pictures/screenShots/screenshot-%FT%T.png";
save-after-copy = true;
};
};
};
};
}

View file

@ -84,6 +84,31 @@ in
wmenu
kitty
cfg.package
pipewire-controller
(pkgs.writeShellApplication {
name = "sattySnap";
runtimeInputs = [ satty grim gawk gnugrep dwlmsg ];
text =
let
sattyArgs = lib.cli.toGNUCommandLineShell { } {
early-exit = true;
filename = "-";
fullscreen = true;
initial-tool = "crop";
};
in
''
grim -o "$(dwlmsg -g | grep "selmon 1" | awk '{ print $1 }')" - | satty ${sattyArgs}
'';
})
];
home-manager.sharedModules = [
{ snowhawk.satty.enable = lib.mkDefault true; }
];
};
}

View file

@ -13,4 +13,5 @@ in
dwm-msg = callDefaultPackage ./dwm-msg;
dwlmsg = callDefaultPackage ./dwlmsg;
uhk-agent = callDefaultPackage ./uhk-agent;
pipewire-controller = callDefaultPackage ./pipewire-controller;
}

View file

@ -0,0 +1,70 @@
{ pkgs
, mpv
, pamixer
, lib
}:
let
mpvExe = lib.getExe mpv;
pamixerExe = lib.getExe 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("${pamixerExe}")
.args(["--default-source", "--get-mute"])
.output()
.expect("Unable to get mute status from pamixer")
.stdout;
let mute_status = str::from_utf8(&mute_status[..]).expect("pamixer output wasn't a string").trim();
if mute_status == "false" {
Command::new("${pamixerExe}")
.args(["--default-source", "--mute"])
.output()
.expect("Unable to mute via pamixer");
Command::new("${mpvExe}")
.args(["--no-video", "--volume=80", MUTE_AUDIO])
.output()
.expect("Unable to play audio via mpv");
} else {
Command::new("${pamixerExe}")
.args(["--default-source", "--unmute"])
.output()
.expect("Unable to unmute via pamixer");
Command::new("${mpvExe}")
.args(["--no-video", "--volume=80", UNMUTE_AUDIO])
.output()
.expect("Unable to play audio via mpv");
}
let xrootdatetime_pid_raw =
Command::new("systemctl")
.args([
"--user",
"show",
"--property", "MainPID",
"--value", "xrootdatetime"
])
.output();
if let Ok(xrootdatetime_pid_raw) = xrootdatetime_pid_raw {
if let Ok(xrootdatetime_pid) = str::from_utf8(&xrootdatetime_pid_raw.stdout[..]) {
let _ = Command::new("kill")
.args([
"-s",
"SIGUSR1",
xrootdatetime_pid
])
.spawn();
}
}
}
''