114 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| source $HOME/.config/sway/bin/sway_helpers
 | |
| LOCK_IMAGE=$HOME/.config/sway/bin/lock.png
 | |
| MEDIA_APP=playerctl
 | |
| SCROT_APP=grim
 | |
| SCROT_APP_ARGS=" -t png -l 0"
 | |
| SCROT_FILE_BASE=$HOME/.lockscreen
 | |
| SCROT_FILE_EXT=png
 | |
| LOCK_APP=swaylock
 | |
| # LOCK_ARGS=" -f -F -e -s fill -c 000000 --indicator-radius 100 --indicator-thickness 20"
 | |
| LOCK_ARGS=" -F -e -s fill -c 000000 --indicator-radius 100 --indicator-thickness 20"
 | |
| INHIBIT_FILE=$HOME/.inhibit_lock
 | |
| 
 | |
| CONVERT=convert
 | |
| if which magick
 | |
| then
 | |
|     CONVERT="magick convert"
 | |
| fi
 | |
| 
 | |
| function _clean() {
 | |
|   for output in $(_outputs); do
 | |
|     SCROT_FILE=${SCROT_FILE_BASE}_${output}.${SCROT_FILE_EXT}
 | |
|     rm -vf $SCROT_FILE
 | |
|   done
 | |
| }
 | |
| 
 | |
| function _lock() {
 | |
|   _check_inhibit $INHIBIT_FILE
 | |
|   $MEDIA_APP pause
 | |
|   _check_running $LOCK_APP
 | |
|   for output in $(_outputs); do
 | |
|     SCROT_FILE=${SCROT_FILE_BASE}_${output}.${SCROT_FILE_EXT}
 | |
|     LOCK_ARGS+=" -i ${output}:$SCROT_FILE"
 | |
|   done
 | |
|   $LOCK_APP $LOCK_ARGS
 | |
| }
 | |
| 
 | |
| function _off() {
 | |
|   swaymsg "output * dpms off"
 | |
| }
 | |
| 
 | |
| function _on() {
 | |
|   swaymsg "output * dpms on"
 | |
| }
 | |
| 
 | |
| function _outputs() {
 | |
|   swaymsg -t get_outputs | jq '.[] |select(.active == true) | .name' | while read line; do
 | |
|     echo ${line//\"/}
 | |
|   done
 | |
| }
 | |
| 
 | |
| function _screenshot() {
 | |
|   for output in $(_outputs); do
 | |
|     SCROT_FILE=${SCROT_FILE_BASE}_${output}.${SCROT_FILE_EXT}
 | |
|     echo $SCROT_FILE
 | |
|     $SCROT_APP $SCROT_APP_ARGS -o $output $SCROT_FILE
 | |
|     # convert -blur 0x5 $SCROT_FILE $SCROT_FILE
 | |
|     # convert -motion-blur 15x15 $SCROT_FILE $SCROT_FILE
 | |
|     $CONVERT -scale 20% -blur 2x2 -resize 500% $SCROT_FILE $SCROT_FILE
 | |
|     $CONVERT -composite -gravity center $SCROT_FILE $LOCK_IMAGE $SCROT_FILE
 | |
|   done
 | |
| }
 | |
| 
 | |
| ## main
 | |
| _log LOCK INFO args: $*
 | |
| _check_app $LOCK_APP
 | |
| _check_app $SCROT_APP
 | |
| _check_app $MEDIA_APP
 | |
| 
 | |
| case "$1" in
 | |
|   i*)
 | |
|     _set_inhibit $INHIBIT_FILE $2
 | |
|     ;;
 | |
|   clean)
 | |
|     _clean
 | |
|     ;;
 | |
|   lock)
 | |
|     _on
 | |
|     _screenshot
 | |
|     _lock
 | |
|     _clean
 | |
|     ;;
 | |
|   lockonly)
 | |
|     _lock
 | |
|     _clean
 | |
|     ;;
 | |
|   off)
 | |
|     _screenshot
 | |
|     _off
 | |
|     ;;
 | |
|   on)
 | |
|     _on
 | |
|     _clean
 | |
|     ;;
 | |
|   screensaver)
 | |
|     _screenshot
 | |
|     swayidle -w \
 | |
|       timeout 5 'swaymsg "output * dpms off"' \
 | |
|       resume 'swaymsg "output * dpms on"' &
 | |
|     PID=$!
 | |
|     _lock
 | |
|     _clean
 | |
|     kill $PID
 | |
|     ;;
 | |
|   screenshot)
 | |
|     _on
 | |
|     _screenshot
 | |
|     ;;
 | |
|   *)
 | |
|     echo "invalid argument \"$1\""
 | |
|     echo "arguments: [inhibit [on|off]|lock|lockonly|off|on|screensaver|screenshot]"
 | |
| esac
 | |
| 
 | |
| 
 |