Jelajahi Sumber

dev: automated commit - 2025-09-29 14:44:33

Mariano Z. 4 bulan lalu
induk
melakukan
76256d9db3

+ 55 - 0
local-bin/.local/bin/record.sh

@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+
+[[ -f ~/.config/user-dirs.dirs ]] && source ~/.config/user-dirs.dirs
+OUTPUT_DIR="${OMARCHY_SCREENRECORD_DIR:-${XDG_VIDEOS_DIR:-$HOME/Videos}}"
+
+if [[ ! -d "$OUTPUT_DIR" ]]; then
+	notify-send "Screen recording directory does not exist: $OUTPUT_DIR" -u critical -t 3000
+	exit 1
+fi
+
+# Selects region or output
+SCOPE="$1"
+
+# Selects audio inclusion or not
+AUDIO=$([[ $2 == "audio" ]] && echo "--audio")
+
+start_screenrecording() {
+	local filename="$OUTPUT_DIR/screenrecording-$(date +'%Y-%m-%d_%H-%M-%S').mp4"
+
+	if lspci | grep -qi 'nvidia'; then
+		wf-recorder $AUDIO -f "$filename" -c libx264 -p crf=23 -p preset=medium -p movflags=+faststart "$@" &
+	else
+		wl-screenrec $AUDIO -f "$filename" --ffmpeg-encoder-options="-c:v libx264 -crf 23 -preset medium -movflags +faststart" "$@" &
+	fi
+
+	toggle_screenrecording_indicator
+}
+
+stop_screenrecording() {
+	pkill -x wl-screenrec
+	pkill -x wf-recorder
+
+	notify-send "Screen recording saved to $OUTPUT_DIR" -t 2000
+
+	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
+	output=$(slurp -o) || exit 1
+	start_screenrecording -g "$output"
+else
+	region=$(slurp) || exit 1
+	start_screenrecording -g "$region"
+fi

+ 3 - 3
local-bin/.local/bin/waybar.sh

@@ -1,11 +1,11 @@
 #!/usr/bin/env bash
 
-CONFIG_FILES="$HOME/.config/waybar/config.jsonc $HOME/.config/waybar/style.css"
+CONFIG_FILES="$HOME/.config/waybar/config.jsonc $HOME/.config/waybar/common.jsonc  $HOME/.config/waybar/style.css"
 
-trap "killall waybar" EXIT
+trap "killall .waybar-wrapped" EXIT
 
 while true; do
 	waybar &
 	inotifywait -e create,modify $CONFIG_FILES
-	killall waybar
+	killall .waybar-wrapped
 done

+ 10 - 10
sway/.config/sway/config.d/appearance

@@ -15,13 +15,13 @@ gaps outer 5
 seat seat0 xcursor_theme Bibata-Original-Classic 24
 
 # SwayFX Settings
-# smart_corner_radius on
-# corner_radius 10
-# 
-# default_dim_inactive 0.05
-# blur enable
-# blur_passes 1
-# blur_radius 1
-# layer_effects "waybar" "blur enable"; shadows enable
-# shadows on
-# shadow_blur_radius 20
+smart_corner_radius on
+corner_radius 10
+
+default_dim_inactive 0.05
+blur enable
+blur_passes 1
+blur_radius 1
+layer_effects "waybar" "blur enable"; shadows enable
+shadows on
+shadow_blur_radius 20

+ 1 - 1
sway/.config/sway/config.d/keybindings

@@ -98,7 +98,7 @@ bindsym {
 # Special Functions
 bindsym {
     F4 exec switch-windows
-    $mod+r exec --no-startup-id ~/.local/bin/wlrecord.sh
+    $mod+r exec --no-startup-id ~/.local/bin/record.sh
     $mod+p exec --no-startup-id grim -g "$(slurp -d)" - | swappy -f -
     $mod+shift+p exec --no-startup-id ~/.local/bin/screenshot-upload
     $mod+F5 exec --no-startup-id ~/.local/bin/pause-notifications

+ 9 - 10
waybar/.config/waybar/common.jsonc

@@ -4,8 +4,9 @@
 	"mod": "dock",
 	"exclusive": true,
 	"passthrough": false,
+	"border-radius": 10,
 	"gtk-layer-shell": true,
-	"height": 5,
+	"height": 36,
 	"margin": "5 10 0 10",
 	// Workspace and Window Management
 	"sway/workspaces": {
@@ -52,10 +53,9 @@
 	},
 	// Date and Time
 	"clock": {
-		// DD-MM-YYYY
-		"format": " {0:%H:%M:%S %Z} 󰸘 {0:%d/%m/%Y}",
+		"format": "{:%H:%M %Z}",
 		"interval": 60,
-		"format-alt": "{:L%A, %B %d, %Y (%R)}  ",
+		"format-alt": "{:%d/%m/%Y}",
 		"tooltip-format": "<small><tt>{calendar}</tt></small>",
 		"timezones": [
 			"America/Montevideo",
@@ -214,12 +214,11 @@
 			"Paused": "<span foreground='#928374'>󰒮 󰏥 󰒭</span>"
 		}
 	},
-	// Notifications and Utilities
-	"custom/wf-recorder": {
-		"format": "󰑀",
-		"tooltip": false,
-		"on-click": "wf-recorder -f ~/Videos/$(date +%Y%m%d_%H%M%S).mp4",
-		"on-click-right": "pkill -f wf-recorder"
+	"custom/screenrecording-indicator": {
+		"on-click": "~/.local/bin/record.sh",
+		"exec": "~/.config/waybar/indicators/screen-recording.sh",
+		"signal": 8,
+		"return-type": "json"
 	},
 	"custom/notification": {
 		"tooltip": false,

+ 3 - 1
waybar/.config/waybar/config.jsonc

@@ -27,6 +27,7 @@
       "custom/playerlabel"
     ],
     "modules-right": [
+      "custom/screenrecording-indicator",
       "custom/randwall",
       "clock",
       "group/tray-expander"
@@ -47,6 +48,7 @@
       "custom/playerlabel"
     ],
     "modules-right": [
+      "custom/screenrecording-indicator",
       "custom/randwall",
       "pulseaudio",
       "backlight",
@@ -57,4 +59,4 @@
       "eDP-1"
     ]
   }
-]
+]

+ 7 - 0
waybar/.config/waybar/indicators/screen-recording.sh

@@ -0,0 +1,7 @@
+#!/usr/bin/env 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": "󰑊", "tooltip": "Start recording", "class": "inactive"}'
+fi

+ 38 - 96
waybar/.config/waybar/style.css

@@ -1,3 +1,6 @@
+@define-color foreground #e0def4;
+@define-color background #191724;
+
 * {
     border: none;
     border-radius: 0;
@@ -6,89 +9,60 @@
     min-height: 0;
 }
 
-/* Window Styles */
 window#waybar {
-    background: rgba(0, 0, 0, 0.8);
-    border-bottom: 1px solid #282828;
+    background: rgba(25, 23, 36, 0.8);
+    border-bottom: 1px solid #26233a;
     border-radius: 10px;
-    color: #f4d9e1;
+    color: @foreground;
 }
 
 tooltip {
-    background: #010409;
+    background: @background;
     border-radius: 10px;
 }
 
-/* Workspace Styles */
-
 #workspaces button {
-    color: #fff;
+    color: @foreground;
     border-radius: 10px;
     padding: 5px;
     margin: 4px 4px;
 }
 
 #workspaces button.urgent {
-    background: #010409;
-    color: #FF7F7F;
+    background: @background;
+    color: #eb6f92;
 }
 
 #workspaces button:hover,
 #workspaces button.focused {
-    background: #f4d9e1;
-    color: #282828;
-}
-
-/* Common Module Styles */
-#cpu,
-#memory,
-#window,
-#clock,
-#battery,
-#pulseaudio,
-#network,
-#bluetooth,
-#temperature,
-#workspaces,
-#tray,
-#custom-vpn,
-#custom-notification,
-#backlight {
-    padding: 0px 5;
-}
-
-#cpu {
-    padding-right: 0;
-}
-
-/* Individual Module Styles */
-#window {
-    margin: 0 60px;
+    background: #c4a7e7;
+    color: @background;
 }
 
 #cpu,
 #memory,
-#clock,
 #network,
 #bluetooth,
 #pulseaudio,
-#pulseaudio.microphone,
-#battery {
-    color: #fff;
+#battery,
+#clock,
+#custom-playerctl,
+#custom-playerlabel,
+#custom-screenrecording-indicator,
+#custom-randwall {
+    color: @foreground;
+    padding: 0px 8px;
 }
 
 #temperature.critical {
-    color: #eba0ac;
+    color: #eb6f92;
 }
 
-/* Custom Module Styles */
 #custom-playerctl,
 #custom-playerlabel {
-    background: #282828;
+    background: #26233a;
     border-radius: 16px;
-    font-style: normal;
-    font-weight: normal;
-    margin: 5px 0;
+    margin: 5px 8px;
 }
 
 #custom-playerctl {
@@ -101,68 +75,36 @@ tooltip {
     padding: 0 15px 0 10px;
 }
 
-#custom-notification {
-    border-radius: 0;
-    font-weight: bold;
-}
-
-#custom-randwall {
-    margin-right: 10px;
-}
-
-#custom-vpn.connected {
-    color: #a6e3a1;
-}
-
-#custom-vpn.disconnected {
-    color: #f4d9e1;
-}
-
-#custom-wf-recorder {
-    padding: 0 10px;
-    margin: 0 4px;
+#custom-screenrecording-indicator {
     border-radius: 4px;
     transition: all 0.3s ease;
 }
 
-#custom-wf-recorder.idle {
-    background-color: #2c2c2c;
-    color: #ccc;
+#custom-screenrecording-indicator.idle {
+    background-color: @background;
+    color: @foreground;
 }
 
-#custom-wf-recorder.recording {
-    background-color: #cc3436;
-    color: white;
+#custom-screenrecording-indicator.active {
+    color: #cc3436;
     animation: blink 1s infinite;
 }
 
 @keyframes blink {
-    0% {
-        opacity: 1;
-    }
-
-    50% {
-        opacity: 0.7;
-    }
-
-    100% {
-        opacity: 1;
-    }
+    0% { opacity: 1; }
+    50% { opacity: 0.7; }
+    100% { opacity: 1; }
 }
 
-#custom-microphone {
-    padding: 0 10px;
-    margin: 0 5px;
+#custom-notification {
+    margin-right: 12px;
 }
 
-#custom-microphone.headset {
-    color: #a6e3a1;
+#custom-randwall {
+    color: #f6c177;
 }
 
-#custom-microphone.internal {
-    color: #f9e2af;
+#custom-expand-icon {
+    color: #9ccfd8;
 }
 
-#custom-microphone.unknown {
-    color: #f38ba8;
-}