pkgs: relocate pipewire controller
This commit is contained in:
parent
7d68a93d4e
commit
cd45522a46
7 changed files with 128 additions and 67 deletions
home/modules
modules
pkgs
|
@ -2,72 +2,6 @@
|
||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.snowhawk.pipewire-controller;
|
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
|
in
|
||||||
{
|
{
|
||||||
options.snowhawk.pipewire-controller = {
|
options.snowhawk.pipewire-controller = {
|
||||||
|
@ -78,7 +12,7 @@ in
|
||||||
snowhawk.sxhkd.enable = true;
|
snowhawk.sxhkd.enable = true;
|
||||||
|
|
||||||
services.sxhkd.keybindings = {
|
services.sxhkd.keybindings = {
|
||||||
"XF86TouchpadOn" = "${lib.getExe pipewire-controller}";
|
"XF86TouchpadOn" = "${lib.getExe pkgs.pipewire-controller}";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
31
home/modules/satty.nix
Normal file
31
home/modules/satty.nix
Normal 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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -84,6 +84,31 @@ in
|
||||||
wmenu
|
wmenu
|
||||||
kitty
|
kitty
|
||||||
cfg.package
|
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; }
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,4 +13,5 @@ in
|
||||||
dwm-msg = callDefaultPackage ./dwm-msg;
|
dwm-msg = callDefaultPackage ./dwm-msg;
|
||||||
dwlmsg = callDefaultPackage ./dwlmsg;
|
dwlmsg = callDefaultPackage ./dwlmsg;
|
||||||
uhk-agent = callDefaultPackage ./uhk-agent;
|
uhk-agent = callDefaultPackage ./uhk-agent;
|
||||||
|
pipewire-controller = callDefaultPackage ./pipewire-controller;
|
||||||
}
|
}
|
||||||
|
|
70
pkgs/pipewire-controller/default.nix
Normal file
70
pkgs/pipewire-controller/default.nix
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
''
|
Loading…
Reference in a new issue