mirror of
https://github.com/ItsDrike/nixdots
synced 2024-12-26 08:34:35 +00:00
Add quick-record script
This commit is contained in:
parent
3f17fea0af
commit
036b1a9064
|
@ -18,6 +18,7 @@ in {
|
||||||
home.packages = [
|
home.packages = [
|
||||||
hyprPkgs.hyprland-move-window
|
hyprPkgs.hyprland-move-window
|
||||||
hyprPkgs.hyprland-screenshot
|
hyprPkgs.hyprland-screenshot
|
||||||
|
hyprPkgs.quick-record
|
||||||
pkgs.brightnessctl
|
pkgs.brightnessctl
|
||||||
pkgs.hyprpicker
|
pkgs.hyprpicker
|
||||||
hyprPkgs.brightness
|
hyprPkgs.brightness
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
hyprland-move-window = pkgs.callPackage ./hyprland-move-window {};
|
hyprland-move-window = pkgs.callPackage ./hyprland-move-window {};
|
||||||
brightness = pkgs.callPackage ./brightness {};
|
brightness = pkgs.callPackage ./brightness {};
|
||||||
hyprland-screenshot = pkgs.callPackage ./hyprland-screenshot {};
|
hyprland-screenshot = pkgs.callPackage ./hyprland-screenshot {};
|
||||||
|
quick-record = pkgs.callPackage ./quick-record {};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
packages
|
packages
|
||||||
|
|
|
@ -1,11 +1,4 @@
|
||||||
# - `grim`: screenshot utility for wayland
|
# - `grim`: screenshot utility for wayland
|
||||||
# - `slurp`: to select an area
|
|
||||||
# - `hyprctl`: to read properties of current window
|
|
||||||
# - `wl-copy`: clipboard utility
|
|
||||||
# - `jq`: json utility to parse hyprctl output
|
|
||||||
# - `notify-send`: to show notifications
|
|
||||||
# - `swappy`: for editing the screenshots (only required for --edit)
|
|
||||||
|
|
||||||
{pkgs, ...}:
|
{pkgs, ...}:
|
||||||
pkgs.writeShellApplication {
|
pkgs.writeShellApplication {
|
||||||
name = "hyprland-screenshot";
|
name = "hyprland-screenshot";
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
{pkgs, ...}:
|
||||||
|
pkgs.writeShellApplication {
|
||||||
|
name = "quick-record";
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
slurp
|
||||||
|
wl-clipboard
|
||||||
|
libnotify
|
||||||
|
procps
|
||||||
|
killall
|
||||||
|
wf-recorder
|
||||||
|
];
|
||||||
|
text = ''
|
||||||
|
${builtins.readFile ./quick-record.sh}
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
EXTENSION="mp4"
|
||||||
|
NOTIFY=0
|
||||||
|
|
||||||
|
save_file() {
|
||||||
|
wl-copy -t text/uri-list "file://${file}"
|
||||||
|
[ "$NOTIFY" -eq 1 ] && notify-send -a "quick-record" "Recording saved" "$file <file://${file}>"
|
||||||
|
echo "Recording saved: $file"
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_recording() {
|
||||||
|
if pidof -s wf-recorder >/dev/null 2>&1; then
|
||||||
|
[ "$NOTIFY" -eq 1 ] && notify-send -a "quick-record" "Recording stopped"
|
||||||
|
killall -s SIGINT wf-recorder
|
||||||
|
else
|
||||||
|
>&2 echo "No active recording to stop"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
start_recording() {
|
||||||
|
# Remove all previous recordings
|
||||||
|
# No need to clutter /tmp, since this is used for copying the recording
|
||||||
|
# as a file, it's unlikely that we'll need any of the old recordings
|
||||||
|
# when a new one is requested
|
||||||
|
rm "${TMPDIR:-/tmp}"/wf-recorder-video-*."$EXTENSION" 2>/dev/null || true
|
||||||
|
|
||||||
|
file="$(mktemp -t "wf-recorder-video-XXXXX.$EXTENSION")"
|
||||||
|
geom="$(slurp)"
|
||||||
|
|
||||||
|
[ "$NOTIFY" -eq 1 ] && notify-send "quick-record" "Recording starting"
|
||||||
|
|
||||||
|
trap save_file SIGINT
|
||||||
|
trap save_file SIGTERM
|
||||||
|
trap save_file SIGHUP
|
||||||
|
|
||||||
|
# Wee need 'y' stdin to confirm that we want to override the file
|
||||||
|
# since mktemp creates a blank file there already
|
||||||
|
echo "y" | wf-recorder -g "$geom" -f "$file"
|
||||||
|
|
||||||
|
# If wf-recorder process ends directly, rather than a trap being hit
|
||||||
|
# we also want to run the save_file func
|
||||||
|
save_file
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse any CLI flags first, before getting to positional args
|
||||||
|
# (As long as we have $2, meaning there's at least 2 args, treat
|
||||||
|
|
||||||
|
# $1 arg as CLI flag``)
|
||||||
|
while [ "${2-}" ]; do
|
||||||
|
case "$1" in
|
||||||
|
-h | --help)
|
||||||
|
cat <<EOF
|
||||||
|
quick-record is a simple tool for performing quick screen capture recordings
|
||||||
|
on wayland WMs easily, using wf-recorder.
|
||||||
|
|
||||||
|
Optional flags:
|
||||||
|
-n | --notify: Produce notifications on recording start/end
|
||||||
|
-e | --extension [extension]: Use a different file extension (default: mp4)
|
||||||
|
|
||||||
|
Required positional arguments:
|
||||||
|
{start|stop|toggle}: Action which to perform.
|
||||||
|
- start: Start a new recording
|
||||||
|
- stop: Stop any already running recording(s)
|
||||||
|
- toggle: If there is a running recording, stop it, otherwise start a new one
|
||||||
|
EOF
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-n | --notify)
|
||||||
|
NOTIFY=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-e | --extension)
|
||||||
|
EXTENSION="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "${1-}" = "start" ]; then
|
||||||
|
start_recording
|
||||||
|
elif [ "${1-}" = "stop" ]; then
|
||||||
|
stop_recording
|
||||||
|
elif [ "${1-}" = "toggle" ]; then
|
||||||
|
if stop_recording 2>/dev/null; then
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
start_recording
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
>&2 echo "Error: No argument provided!"
|
||||||
|
>&2 echo "Expected one of: start, stop, toggle"
|
||||||
|
exit 1
|
||||||
|
fi
|
Loading…
Reference in a new issue