diff options
Diffstat (limited to 'modules/scripts')
| -rw-r--r-- | modules/scripts/default.nix | 3 | ||||
| -rw-r--r-- | modules/scripts/i3-keybindings/assertions.nix | 11 | ||||
| -rw-r--r-- | modules/scripts/i3-keybindings/default.nix | 30 | ||||
| -rw-r--r-- | modules/scripts/i3-keybindings/script.sh | 66 | ||||
| -rw-r--r-- | modules/scripts/screen-recording/assertions.nix | 8 | ||||
| -rw-r--r-- | modules/scripts/screen-recording/default.nix | 6 | ||||
| -rw-r--r-- | modules/scripts/screen-recording/script.sh | 46 |
7 files changed, 18 insertions, 152 deletions
diff --git a/modules/scripts/default.nix b/modules/scripts/default.nix index 5e70c4e..5f1820e 100644 --- a/modules/scripts/default.nix +++ b/modules/scripts/default.nix @@ -8,7 +8,6 @@ imports = [ ./aria2-run ./deep-clean - ./i3-keybindings ./neomutt-sync ./screen-recording ./system-monitor @@ -28,7 +27,7 @@ pkgs.makeDesktopItem { name = name; desktopName = sc.desktop.displayName; - exec = "${lib.getExe config.terminal.kitty.package} -e ${lib.getExe sc.package}"; + exec = "${lib.getExe config.terminal.kitty.package} --class ${name} -e ${lib.getExe sc.package}"; icon = "kitty"; categories = [ "Utility" ]; terminal = false; diff --git a/modules/scripts/i3-keybindings/assertions.nix b/modules/scripts/i3-keybindings/assertions.nix deleted file mode 100644 index ce1dd6b..0000000 --- a/modules/scripts/i3-keybindings/assertions.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, ... }: -[ - { - assertion = !config.scripts.i3-keybindings.enable || config.desktop.enable; - message = "scripts.i3-keybindings is enabled but requires `desktop.enable`."; - } - { - assertion = !config.scripts.i3-keybindings.enable || config.terminal.less.enable; - message = "scripts.i3-keybindings is enabled but requires `terminal.less.enable`."; - } -] diff --git a/modules/scripts/i3-keybindings/default.nix b/modules/scripts/i3-keybindings/default.nix deleted file mode 100644 index e1be7fe..0000000 --- a/modules/scripts/i3-keybindings/default.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: -let - inherit ((import ../lib.nix { inherit lib pkgs; })) mkScriptModule; - base = mkScriptModule { - name = "i3-keybindings"; - path = ./script.sh; - description = "Path to your i3 config file"; - deps = [ - pkgs.coreutils - pkgs.gawk - pkgs.ncurses - ]; - desktop = { - enable = true; - displayName = "i3 Keybindings"; - }; - inherit config; - }; -in -{ - options = base.options; - config = base.moduleConfig // { - assertions = base.moduleConfig.assertions ++ (import ./assertions.nix { inherit config lib; }); - }; -} diff --git a/modules/scripts/i3-keybindings/script.sh b/modules/scripts/i3-keybindings/script.sh deleted file mode 100644 index 326e8bd..0000000 --- a/modules/scripts/i3-keybindings/script.sh +++ /dev/null @@ -1,66 +0,0 @@ -I3_CONFIG="$HOME/.config/i3/config" - -# Function to wrap text -wrap_text() { - local text="$1" - local width="$2" - echo "$text" | fold -s -w "$width" -} - -# Get terminal width and calculate columns -terminal_width=$(tput cols) -table_width=$((terminal_width - 4)) -max_keybinding_length=$((table_width / 3)) # Keybindings are usually shorter in i3 -max_keybinding_content_length=$((max_keybinding_length - 2)) -description_width=$((table_width - max_keybinding_length - 1)) -description_content_width=$((description_width - 2)) - -# Border lines -top_border="┌$(printf '%.0s─' $(seq 1 $max_keybinding_length))┬$(printf '%.0s─' $(seq 1 $description_width))┐" -row_sep="├$(printf '%.0s─' $(seq 1 $max_keybinding_length))┼$(printf '%.0s─' $(seq 1 $description_width))┤" -bottom_border="└$(printf '%.0s─' $(seq 1 $max_keybinding_length))┴$(printf '%.0s─' $(seq 1 $description_width))┘" - -{ - echo "$top_border" - printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "KEYBINDING" "$description_content_width" "DESCRIPTION" - - last_comment="" - - # Read i3 config line by line - while IFS= read -r line; do - # If line is a comment, store it as a potential description - if [[ $line =~ ^#\ (.*) ]]; then - last_comment="${BASH_REMATCH[1]}" - - # If line contains a bindsym - elif [[ $line =~ ^bindsym ]]; then - # Extract the key combo (the parts between 'bindsym' and the start of the command/exec) - # This regex captures bindsym [options] <keysym> <command> - keybinding=$(echo "$line" | awk '{print $2}') - - # If the comment is empty, use the command itself as the description - if [[ -z "$last_comment" ]]; then - display_desc=$(echo "$line" | cut -d' ' -f3-) - else - display_desc="$last_comment" - fi - - wrapped_description=$(wrap_text "$display_desc" "$description_content_width") - - echo "$row_sep" - - # Print first line of binding and description - printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "$keybinding" "$description_content_width" "$(echo "$wrapped_description" | head -n 1)" - - # Print subsequent lines of wrapped description - echo "$wrapped_description" | sed '1d' | while read -r continuation; do - printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "" "$description_content_width" "$continuation" - done - - # Reset comment after use - last_comment="" - fi - done < "$I3_CONFIG" - - echo "$bottom_border" -} | less -R diff --git a/modules/scripts/screen-recording/assertions.nix b/modules/scripts/screen-recording/assertions.nix index ad4d1eb..f858623 100644 --- a/modules/scripts/screen-recording/assertions.nix +++ b/modules/scripts/screen-recording/assertions.nix @@ -1,11 +1,11 @@ { config, ... }: [ { - assertion = !config.scripts.screen-recording.enable || config.media.ffmpeg.enable; - message = "scripts.screen-recording is enabled but requires `media.ffmpeg.enable`."; + assertion = !config.scripts.screen-recording.enable || config.media.slurp.enable; + message = "scripts.screen-recording is enabled but requires `media.slurp.enable`."; } { - assertion = !config.scripts.screen-recording.enable || config.media.slop.enable; - message = "scripts.screen-recording is enabled but requires `media.slop.enable`."; + assertion = !config.scripts.screen-recording.enable || config.media.wf-recorder.enable; + message = "scripts.screen-recording is enabled but requires `media.wf-recorder.enable`."; } ] diff --git a/modules/scripts/screen-recording/default.nix b/modules/scripts/screen-recording/default.nix index f687d36..b997b02 100644 --- a/modules/scripts/screen-recording/default.nix +++ b/modules/scripts/screen-recording/default.nix @@ -9,10 +9,10 @@ let base = mkScriptModule { name = "screen-recording"; path = ./script.sh; - description = "Screen recording script using FFmpeg and slop for region selection\nRecords X11 screen to MP4 with x264 encoding\nUsage: screen-recording.sh [-s|--select]\n -s, --select Launch slop to select recording region"; + description = "Screen recording script using wf-recorder and slurp for region selection\nRecords Wayland screen to MP4\nUsage: screen-recording.sh [-s|--select]\n -s, --select Launch slurp to select recording region"; deps = [ - config.media.ffmpeg.package - config.media.slop.package + config.media.slurp.package + config.media.wf-recorder.package ]; desktop = { enable = true; diff --git a/modules/scripts/screen-recording/script.sh b/modules/scripts/screen-recording/script.sh index a3bf86a..c2dafbe 100644 --- a/modules/scripts/screen-recording/script.sh +++ b/modules/scripts/screen-recording/script.sh @@ -17,43 +17,23 @@ while [[ "$#" -gt 0 ]]; do done # --- 2. GEOMETRY SELECTION --- -# Default to a standard 1080p fallback if detection fails -WIDTH=1920 -HEIGHT=1080 -X_OFF=0 -Y_OFF=0 - -# Try to get actual root window size if xwininfo exists -if command -v xwininfo >/dev/null 2>&1; then - WIDTH=$(xwininfo -root | grep 'Width:' | awk '{print $2}') - HEIGHT=$(xwininfo -root | grep 'Height:' | awk '{print $2}') -fi +GEOMETRY="" if [ "$SELECT_MODE" = true ]; then - if command -v slop >/dev/null 2>&1; then + if command -v slurp >/dev/null 2>&1; then echo -e "${YELLOW}Select a window or draw a box...${NC}" - # slop output: 123 456 10 20 - read -r W H X Y < <(slop -f "%w %h %x %y" --nokeyboard) + GEOMETRY=$(slurp) - if [ -n "$W" ]; then - WIDTH=$W - HEIGHT=$H - X_OFF=$X - Y_OFF=$Y - else + if [ -z "$GEOMETRY" ]; then echo "Selection cancelled. Exiting." exit 1 fi else - echo -e "${RED}Error: 'slop' not found.${NC} Recording full screen..." + echo -e "${RED}Error: 'slurp' not found.${NC} Recording full screen..." sleep 1 fi fi -# Ensure even dimensions (FFmpeg/x264 requirement) -WIDTH=$(( WIDTH + WIDTH % 2 )) -HEIGHT=$(( HEIGHT + HEIGHT % 2 )) - # --- 3. START RECORDING --- FILENAME="$OUT_DIR/recording-$(date +%Y%m%d-%H%M%S).mp4" @@ -62,16 +42,10 @@ echo -e "Press ${YELLOW}'q'${NC} in this terminal to stop." echo "File: $FILENAME" echo "------------------------------------------------" -# We pass arguments explicitly here to avoid "Unrecognized option" shell errors -ffmpeg -hide_banner \ - -f x11grab \ - -video_size "${WIDTH}x${HEIGHT}" \ - -framerate 30 \ - -i "${DISPLAY:-:0.0}+${X_OFF},${Y_OFF}" \ - -c:v libx264 \ - -preset ultrafast \ - -crf 23 \ - -pix_fmt yuv420p \ - "$FILENAME" +if [ -n "$GEOMETRY" ]; then + wf-recorder -g "$GEOMETRY" -f "$FILENAME" +else + wf-recorder -f "$FILENAME" +fi echo -e "\n${GREEN}Done!${NC} Video saved to $FILENAME" |
