Files
nix-config/packages/record.nix
2025-05-22 00:44:48 -04:00

90 lines
1.8 KiB
Nix

{
lib,
stdenvNoCC,
writeTextFile,
makeWrapper,
fish,
pipewire,
ffmpeg,
libnotify,
wl-clipboard-rs,
xclip,
}:
let
record = writeTextFile {
name = "record";
text = # fish
''
#!/usr/bin/env fish
if pgrep pw-record
pkill pw-record
exit 0
end
notify-send \
--hint "string:x-dunst-stack-tag:record" \
"" \
""
set DIRECTORY "/tmp/"
set FILENAME "_$(date --iso-8601)-$(uuidgen)"
pw-record -P "{ stream.capture.sink=true }" "$DIRECTORY$FILENAME.flac"
ffmpeg -i "$DIRECTORY$FILENAME.flac" -c:a libopus -b:a 128K "$DIRECTORY$FILENAME.opus"
if test "$XDG_SESSION_TYPE" = "x11"
echo "file://$DIRECTORY$FILENAME.opus" | xclip -selection clipboard
else
echo "file://$DIRECTORY$FILENAME.opus" | wl-copy -t text/uri-list
end
notify-send \
--hint "string:x-dunst-stack-tag:record" \
"" \
""
'';
};
in
stdenvNoCC.mkDerivation {
pname = "record";
version = "0.1.0";
dontUnpack = true;
nativeBuildInputs = [ makeWrapper ];
installPhase = ''
runHook preInstall
install -Dm755 ${record} $out/bin/record
runHook postInstall
'';
postInstall = ''
wrapProgram "$out/bin/record" \
--prefix PATH ":" "${
lib.makeBinPath [
fish
pipewire
ffmpeg
libnotify
wl-clipboard-rs
xclip
]
}"
'';
meta = {
homepage = "https://github.com/donovanglover/nix-config";
description = "Script to record desktop audio and copy the result to the clipboard";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ donovanglover ];
platforms = lib.platforms.linux;
mainProgram = "record";
};
}