mirror of
https://github.com/LukeHagar/omarchy.git
synced 2025-12-06 12:37:46 +00:00
feat(waybar): add recording indicator (#1561)
* init * remove comment format * add pulse animation * change to signals * Move file to an internal location, match signal with what's being sent * Need to sleep a second to ensure that the recording has either started or stopped before we render config * Put it in a more prominent place * Use OMARCHY_PATH * Sharpen icons and add on-click to stop * Drop animation but reserve space * Lean entirely on waybar indicator rather than notification when starting * Use an explaining function instead of comments * Give time to ensure the process is dead before updating the indicator * No longer needed * Don't need to repeat the on-click * Don't need a full second * Naming * SIRGTMIN shouldn't be here * Don't need any of this that isn't seen or used * Explain the sleep * Mirror start/stop functions * Go all-in on explaining functions * Inline audio toggle * Better just to move the clock rather than have it be permanently offset * Fix all parameters and name them * Add migration * There is now a later omarchy-refresh-waybar offer --------- Co-authored-by: David Heinemeier Hansson <david@hey.com>
This commit is contained in:
@@ -8,31 +8,47 @@ if [[ ! -d "$OUTPUT_DIR" ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $2 == "audio" ]]; then
|
# Selects region or output
|
||||||
AUDIO="--audio"
|
SCOPE="$1"
|
||||||
else
|
|
||||||
AUDIO=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
screenrecording() {
|
# Selects audio inclusion or not
|
||||||
|
AUDIO=$([[ $2 == "audio" ]] && echo "--audio")
|
||||||
|
|
||||||
|
start_screenrecording() {
|
||||||
filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
|
filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
|
||||||
notify-send "Screen recording starting..." -t 1000
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
if lspci | grep -Eqi 'nvidia|intel.*graphics'; then
|
if lspci | grep -Eqi 'nvidia|intel.*graphics'; then
|
||||||
wf-recorder $AUDIO -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@"
|
wf-recorder $AUDIO -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@" &
|
||||||
else
|
else
|
||||||
wl-screenrec $AUDIO -f "$filename" --ffmpeg-encoder-options="-c:v libx264 -crf 23 -preset medium -movflags +faststart" "$@"
|
wl-screenrec $AUDIO -f "$filename" --ffmpeg-encoder-options="-c:v libx264 -crf 23 -preset medium -movflags +faststart" "$@" &
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
toggle_screenrecording_indicator
|
||||||
}
|
}
|
||||||
|
|
||||||
if pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null; then
|
stop_screenrecording() {
|
||||||
pkill -x wl-screenrec
|
pkill -x wl-screenrec
|
||||||
pkill -x wf-recorder
|
pkill -x wf-recorder
|
||||||
|
|
||||||
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
|
notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
|
||||||
elif [[ "$1" == "output" ]]; then
|
|
||||||
screenrecording
|
sleep 0.2 # ensures the process is actually dead before we check
|
||||||
|
toggle_screenrecording_indicator
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle_screenrecording_indicator() {
|
||||||
|
pkill -RTMIN+8 waybar
|
||||||
|
}
|
||||||
|
|
||||||
|
screenrecording_active() {
|
||||||
|
pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
if screenrecording_active; then
|
||||||
|
stop_screenrecording
|
||||||
|
elif [[ "$SCOPE" == "output" ]]; then
|
||||||
|
start_screenrecording
|
||||||
else
|
else
|
||||||
region=$(slurp) || exit 1
|
region=$(slurp) || exit 1
|
||||||
screenrecording -g "$region"
|
start_screenrecording -g "$region"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null; then
|
|
||||||
pkill -x wl-screenrec
|
|
||||||
pkill -x wf-recorder
|
|
||||||
notify-send "Screen recording stopped" -t 2000
|
|
||||||
fi
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
"spacing": 0,
|
"spacing": 0,
|
||||||
"height": 26,
|
"height": 26,
|
||||||
"modules-left": ["custom/omarchy", "hyprland/workspaces"],
|
"modules-left": ["custom/omarchy", "hyprland/workspaces"],
|
||||||
"modules-center": ["clock", "custom/update"],
|
"modules-center": ["clock", "custom/update", "custom/screenrecording-indicator"],
|
||||||
"modules-right": [
|
"modules-right": [
|
||||||
"group/tray-expander",
|
"group/tray-expander",
|
||||||
"bluetooth",
|
"bluetooth",
|
||||||
@@ -124,6 +124,12 @@
|
|||||||
"format": " ",
|
"format": " ",
|
||||||
"tooltip": false
|
"tooltip": false
|
||||||
},
|
},
|
||||||
|
"custom/screenrecording-indicator": {
|
||||||
|
"on-click": "omarchy-cmd-screenrecord",
|
||||||
|
"exec": "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh",
|
||||||
|
"signal": 8,
|
||||||
|
"return-type": "json"
|
||||||
|
},
|
||||||
"tray": {
|
"tray": {
|
||||||
"icon-size": 12,
|
"icon-size": 12,
|
||||||
"spacing": 12
|
"spacing": 12
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
#bluetooth,
|
#bluetooth,
|
||||||
#pulseaudio,
|
#pulseaudio,
|
||||||
#custom-omarchy,
|
#custom-omarchy,
|
||||||
|
#custom-screenrecording-indicator,
|
||||||
#custom-update {
|
#custom-update {
|
||||||
min-width: 12px;
|
min-width: 12px;
|
||||||
margin: 0 7.5px;
|
margin: 0 7.5px;
|
||||||
@@ -61,3 +62,13 @@ tooltip {
|
|||||||
.hidden {
|
.hidden {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#custom-screenrecording-indicator {
|
||||||
|
min-width: 12px;
|
||||||
|
margin-left: 8.75px;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-screenrecording-indicator.active {
|
||||||
|
color: #a55555;
|
||||||
|
}
|
||||||
|
|||||||
7
default/waybar/indicators/screen-recording.sh
Executable file
7
default/waybar/indicators/screen-recording.sh
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if pgrep -x wl-screenrec >/dev/null || pgrep -x wf-recorder >/dev/null; then
|
||||||
|
echo '{"text": "", "tooltip": "Stop recording", "class": "active"}'
|
||||||
|
else
|
||||||
|
echo '{"text": ""}'
|
||||||
|
fi
|
||||||
@@ -3,6 +3,3 @@ echo "Add new Omarchy Menu icon to Waybar"
|
|||||||
mkdir -p ~/.local/share/fonts
|
mkdir -p ~/.local/share/fonts
|
||||||
cp ~/.local/share/omarchy/config/omarchy.ttf ~/.local/share/fonts/
|
cp ~/.local/share/omarchy/config/omarchy.ttf ~/.local/share/fonts/
|
||||||
fc-cache
|
fc-cache
|
||||||
|
|
||||||
echo
|
|
||||||
gum confirm "Replace current Waybar config (backup will be made)?" && omarchy-refresh-waybar
|
|
||||||
|
|||||||
3
migrations/1757511571.sh
Normal file
3
migrations/1757511571.sh
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
echo "Add screen recording indicator to Waybar"
|
||||||
|
|
||||||
|
gum confirm "Replace current Waybar config (backup will be made)?" && omarchy-refresh-waybar
|
||||||
Reference in New Issue
Block a user