Compare commits

...

7 Commits

Author SHA1 Message Date
Dominik
febd18ce84 Replace yq with pure bash for TOML parsing (#4171)
* Replace yq with pure bash for TOML parsing

The yq-based parsing only worked with jq/yq v3 and broke with go-yq v4.
This change removes the yq and uses bash for parsing. Some additional improvments:
- Handles single and double quoted values
- Strips inline comments (e.g. "#hex" #comment)

* Remove the no-longer-needed yq packages

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
2026-01-27 11:32:37 +01:00
Ryan Hughes
ed9a4a45ba Merge pull request #4247 from incpo/feat/webcam-source-selection
Add webcam source selection for screen recording
2026-01-13 18:31:44 -05:00
incpo
697d09022a Add webcam source selection for screen recording
- Add --webcam-device argument to omarchy-cmd-screenrecord
- Auto-detect first available webcam if none specified
- Add webcam selection UI in omarchy-menu when multiple cameras available
- Skip selection UI when only one webcam is detected
2026-01-13 12:48:00 +03:00
David Heinemeier Hansson
53b8fc4257 Ensure we reset the DBs with the Omarchy versions 2026-01-09 14:34:38 +01:00
Ryan Hughes
65bafa4f3b Bump 2026-01-08 19:33:06 -05:00
Ryan Hughes
c9b3e13df8 Merge pull request #4174 from basecamp/dev
v3.3.3
2026-01-08 18:51:48 -05:00
Ryan Hughes
9775b01070 Don't update gcc14 2026-01-08 18:49:41 -05:00
8 changed files with 57 additions and 20 deletions

View File

@@ -14,6 +14,7 @@ fi
DESKTOP_AUDIO="false" DESKTOP_AUDIO="false"
MICROPHONE_AUDIO="false" MICROPHONE_AUDIO="false"
WEBCAM="false" WEBCAM="false"
WEBCAM_DEVICE=""
STOP_RECORDING="false" STOP_RECORDING="false"
for arg in "$@"; do for arg in "$@"; do
@@ -21,6 +22,7 @@ for arg in "$@"; do
--with-desktop-audio) DESKTOP_AUDIO="true" ;; --with-desktop-audio) DESKTOP_AUDIO="true" ;;
--with-microphone-audio) MICROPHONE_AUDIO="true" ;; --with-microphone-audio) MICROPHONE_AUDIO="true" ;;
--with-webcam) WEBCAM="true" ;; --with-webcam) WEBCAM="true" ;;
--webcam-device=*) WEBCAM_DEVICE="${arg#*=}" ;;
--stop-recording) STOP_RECORDING="true" --stop-recording) STOP_RECORDING="true"
esac esac
done done
@@ -32,6 +34,15 @@ cleanup_webcam() {
start_webcam_overlay() { start_webcam_overlay() {
cleanup_webcam cleanup_webcam
# Auto-detect first available webcam if none specified
if [[ -z "$WEBCAM_DEVICE" ]]; then
WEBCAM_DEVICE=$(v4l2-ctl --list-devices 2>/dev/null | grep -m1 "^\s*/dev/video" | tr -d '\t')
if [[ -z "$WEBCAM_DEVICE" ]]; then
notify-send "No webcam devices found" -u critical -t 3000
return 1
fi
fi
# Get monitor scale # Get monitor scale
local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale') local scale=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .scale')
@@ -41,7 +52,7 @@ start_webcam_overlay() {
# Try preferred 16:9 resolutions in order, use first available # Try preferred 16:9 resolutions in order, use first available
local preferred_resolutions=("640x360" "1280x720" "1920x1080") local preferred_resolutions=("640x360" "1280x720" "1920x1080")
local video_size_arg="" local video_size_arg=""
local available_formats=$(v4l2-ctl --list-formats-ext -d /dev/video0 2>/dev/null) local available_formats=$(v4l2-ctl --list-formats-ext -d "$WEBCAM_DEVICE" 2>/dev/null)
for resolution in "${preferred_resolutions[@]}"; do for resolution in "${preferred_resolutions[@]}"; do
if echo "$available_formats" | grep -q "$resolution"; then if echo "$available_formats" | grep -q "$resolution"; then
@@ -50,7 +61,7 @@ start_webcam_overlay() {
fi fi
done done
ffplay -f v4l2 $video_size_arg -framerate 30 /dev/video0 \ ffplay -f v4l2 $video_size_arg -framerate 30 "$WEBCAM_DEVICE" \
-vf "scale=${target_width}:-1" \ -vf "scale=${target_width}:-1" \
-window_title "WebcamOverlay" \ -window_title "WebcamOverlay" \
-noborder \ -noborder \

View File

@@ -113,13 +113,43 @@ show_screenshot_menu() {
esac esac
} }
get_webcam_list() {
v4l2-ctl --list-devices 2>/dev/null | while IFS= read -r line; do
if [[ "$line" != $'\t'* && -n "$line" ]]; then
local name="$line"
IFS= read -r device || break
device=$(echo "$device" | tr -d '\t' | head -1)
[[ -n "$device" ]] && echo "$device $name"
fi
done
}
show_webcam_select_menu() {
local devices=$(get_webcam_list)
local count=$(echo "$devices" | grep -c . 2>/dev/null || echo 0)
if [[ -z "$devices" || "$count" -eq 0 ]]; then
notify-send "No webcam devices found" -u critical -t 3000
return 1
fi
if [[ "$count" -eq 1 ]]; then
echo "$devices" | awk '{print $1}'
else
menu "Select Webcam" "$devices" | awk '{print $1}'
fi
}
show_screenrecord_menu() { show_screenrecord_menu() {
omarchy-cmd-screenrecord --stop-recording && exit 0 omarchy-cmd-screenrecord --stop-recording && exit 0
case $(menu "Screenrecord" " With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in case $(menu "Screenrecord" " With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in
*"With desktop audio") omarchy-cmd-screenrecord --with-desktop-audio ;; *"With desktop audio") omarchy-cmd-screenrecord --with-desktop-audio ;;
*"With desktop + microphone audio") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;; *"With desktop + microphone audio") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
*"With desktop + microphone audio + webcam") omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam ;; *"With desktop + microphone audio + webcam")
local device=$(show_webcam_select_menu) || { back_to show_capture_menu; return; }
omarchy-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam --webcam-device="$device"
;;
*) back_to show_capture_menu ;; *) back_to show_capture_menu ;;
esac esac
} }

View File

@@ -13,22 +13,21 @@ hex_to_rgb() {
# Only generate dynamic templates for themes with a colors.toml definition # Only generate dynamic templates for themes with a colors.toml definition
if [[ -f $COLORS_FILE ]]; then if [[ -f $COLORS_FILE ]]; then
# Parse TOML using yq (treating it as YAML since the flat key=value structure is compatible)
# We convert 'key = value' to 'key: value' to make it valid YAML, then use yq/jq to generate the replacement commands.
sed_script=$(mktemp) sed_script=$(mktemp)
# Generate standard and _strip substitutions
sed 's/=/:/' "$COLORS_FILE" | yq -r 'to_entries[] | "s|{{ \(.key) }}|\(.value)|g", "s|{{ \(.key)_strip }}|\(.value | sub("^#";""))|g"' > "$sed_script"
# Generate _rgb substitutions for hex colors
while IFS='=' read -r key value; do while IFS='=' read -r key value; do
key=$(echo "$key" | xargs) key="${key//[\"\' ]/}" # strip quotes and spaces from key
value=$(echo "$value" | xargs | tr -d '"') [[ $key && $key != \#* ]] || continue # skip empty lines and comments
value="${value#*[\"\']}"
value="${value%%[\"\']*}" # extract value between quotes (ignores inline comments)
printf 's|{{ %s }}|%s|g\n' "$key" "$value" # {{ key }} -> value
printf 's|{{ %s_strip }}|%s|g\n' "$key" "${value#\#}" # {{ key_strip }} -> value without leading #
if [[ $value =~ ^# ]]; then if [[ $value =~ ^# ]]; then
rgb=$(hex_to_rgb "$value") rgb=$(hex_to_rgb "$value")
echo "s|{{ ${key}_rgb }}|${rgb}|g" >> "$sed_script" echo "s|{{ ${key}_rgb }}|${rgb}|g"
fi fi
done < "$COLORS_FILE" done <"$COLORS_FILE" >"$sed_script"
shopt -s nullglob shopt -s nullglob
@@ -39,7 +38,7 @@ if [[ -f $COLORS_FILE ]]; then
# Don't overwrite configs already exists in the output directory (copied from theme specific folder) # Don't overwrite configs already exists in the output directory (copied from theme specific folder)
if [[ ! -f $output_path ]]; then if [[ ! -f $output_path ]]; then
sed -f "$sed_script" "$tpl" > "$output_path" sed -f "$sed_script" "$tpl" >"$output_path"
fi fi
done done

View File

@@ -9,7 +9,7 @@ sudo pacman -Syyu --noconfirm
if pacman -Qem >/dev/null; then if pacman -Qem >/dev/null; then
if omarchy-pkg-aur-accessible; then if omarchy-pkg-aur-accessible; then
echo -e "\e[32m\nUpdate AUR packages\e[0m" echo -e "\e[32m\nUpdate AUR packages\e[0m"
yay -Sua --noconfirm yay -Sua --noconfirm --ignore gcc14,gcc14-libs
echo echo
else else
echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m" echo -e "\e[31m\nAUR is unavailable (so skipping updates)\e[0m"

View File

@@ -144,5 +144,4 @@ xmlstarlet
xournalpp xournalpp
yaru-icon-theme yaru-icon-theme
yay yay
yq
zoxide zoxide

View File

@@ -19,5 +19,5 @@ if [[ -n ${OMARCHY_ONLINE_INSTALL:-} ]]; then
# Refresh all repos # Refresh all repos
sudo pacman -Syu --noconfirm sudo pacman -Syyu --noconfirm
fi fi

View File

@@ -1,7 +1,5 @@
echo "Migrate to new theme setup" echo "Migrate to new theme setup"
omarchy-pkg-add yq
# Move user-added backgrounds from Omarchy theme folders to user config # Move user-added backgrounds from Omarchy theme folders to user config
OMARCHY_DIR="$HOME/.local/share/omarchy" OMARCHY_DIR="$HOME/.local/share/omarchy"
USER_BACKGROUNDS_DIR="$HOME/.config/omarchy/backgrounds" USER_BACKGROUNDS_DIR="$HOME/.config/omarchy/backgrounds"

View File

@@ -1 +1 @@
3.3.1 3.3.3