my nix flake.

feat(home/scripts): add to screenshot script; replace wallpaper script

vt3e.cat 199e57b2 19bf73ab

verified
+102 -16
+1 -1
user/desktop/sway/autostart.nix
··· 2 2 { 3 3 wayland.windowManager.sway = { 4 4 extraConfig = lib.mkAfter '' 5 - exec ${pkgs.swww}/bin/swww-daemon && _random-wallpaper 5 + exec ${pkgs.swww}/bin/swww-daemon && _wallpaper 6 6 exec systemctl --user import-environment PATH && systemctl --user restart xdg-desktop-portal.service 7 7 8 8 exec swaymsg "workspace 3; exec zeditor;"; assign [class="dev.zed.Zed"] 1
+1 -13
user/desktop/sway/wallpaper.nix
··· 1 - { pkgs, lib, ... }: 2 - let 3 - randomWallpaper = pkgs.writeShellScriptBin "_random-wallpaper" '' 4 - wallpaper=$(find ~/Pictures/Wallpapers -type f -name "*.jpg" -o -name "*.png" -o -name "*.webp" -o -name "*.jpeg" | ${pkgs.coreutils}/bin/shuf -n 1) 5 - ${pkgs.swww}/bin/swww img "$wallpaper" --transition-bezier .05,.4,.49,.96 -t grow 6 - ''; 7 - in 1 + { ... }: 8 2 { 9 3 home.file."Pictures/Wallpapers" = { 10 4 source = ../../../assets/wallpapers; 11 5 recursive = true; 12 6 }; 13 - 14 - home.packages = [ randomWallpaper ]; 15 - 16 - wayland.windowManager.sway.extraConfig = lib.mkAfter '' 17 - exec _random-wallpaper 18 - ''; 19 7 }
+37 -2
user/scripts/screenshot.sh
··· 4 4 RADIUS=16 5 5 PADDING=32 6 6 SHADOW=1 7 + WINDOW=0 7 8 8 9 # parse args. 9 10 while [[ $# -gt 0 ]]; do ··· 11 12 --no-shadow) SHADOW=0; shift ;; 12 13 --radius) RADIUS="$2"; shift 2 ;; 13 14 --padding) PADDING="$2"; shift 2 ;; 15 + --window) WINDOW=1; shift ;; 14 16 *) echo "Unknown option: $1"; exit 1 ;; 15 17 esac 16 18 done ··· 19 21 FILENAME=$(date +%Y-%m-%d_%H-%M-%S).png 20 22 DIR=~/Pictures/Screenshots 21 23 mkdir -p "$DIR" 24 + grim -g "0,0 3840x1080" - > "$DIR/$FILENAME.original" 25 + 26 + GEOM="" 27 + if [[ "$WINDOW" -eq 1 ]]; then 28 + GEOM=$(swaymsg -t get_tree | jq -r ' 29 + .. | (.nodes? // empty)[]?, (.floating_nodes? // empty)[] 30 + | select(.pid and .visible) 31 + | {name} + .rect 32 + | "\(.x),\(.y) \(.width)x\(.height) \(.name)" 33 + ' | slurp -r) 34 + else 35 + GEOM=$(slurp) 36 + fi 37 + 38 + read -r XY WH <<< "$GEOM" 39 + X=${XY%,*} 40 + Y=${XY#*,} 41 + CROP="${WH}+${X}+${Y}" 22 42 23 - grim -g "$(slurp)" - > "$DIR/$FILENAME" 24 - cp "$DIR/$FILENAME" "$DIR/${FILENAME%.png}_original.png" 43 + magick "$DIR/$FILENAME.original" -crop "$CROP" +repage "$DIR/${FILENAME%.png}.png" 25 44 26 45 # apply effects. 27 46 WIDTH=$(magick identify -format "%w" "$DIR/$FILENAME") ··· 32 51 \( -size "${WIDTH}"x"${HEIGHT}" xc:none -draw "fill white rectangle 0,0 $((WIDTH-1)),$((HEIGHT-1))" \) \ 33 52 -alpha off -compose CopyOpacity -composite "$DIR/$FILENAME" 34 53 else 54 + # apply rounded corners. 35 55 magick "$DIR/$FILENAME" \ 36 56 \( -size "${WIDTH}"x"${HEIGHT}" xc:none -draw "fill white roundrectangle 0,0 $((WIDTH-1)),$((HEIGHT-1)) $RADIUS,$RADIUS" \) \ 37 57 -alpha off -compose CopyOpacity -composite "$DIR/$FILENAME" 58 + 59 + BORDER_COLOR="#f5c2e7" 60 + BORDER_WIDTH=1 61 + 62 + # add border. 63 + magick -size "${WIDTH}x${HEIGHT}" xc:none \ 64 + -stroke "$BORDER_COLOR" -strokewidth $BORDER_WIDTH -fill none \ 65 + -draw "roundrectangle $((BORDER_WIDTH/2)),$((BORDER_WIDTH/2)) $((WIDTH-1-BORDER_WIDTH/2)),$((HEIGHT-1-BORDER_WIDTH/2)) $RADIUS,$RADIUS" \ 66 + "$DIR/border.png" 67 + 68 + magick "$DIR/$FILENAME" "$DIR/border.png" -compose over -composite "$DIR/$FILENAME" 69 + 70 + rm "$DIR/border.png" 38 71 fi 39 72 73 + # add padding 40 74 magick "$DIR/$FILENAME" -bordercolor none -border "${PADDING}" "$DIR/$FILENAME" 41 75 76 + # add shadow 42 77 if [[ "$SHADOW" -eq 1 ]]; then 43 78 magick "$DIR/$FILENAME" \ 44 79 \( +clone -background none -shadow 60x16+0+8 \) \
+63
user/scripts/wallpaper.sh
··· 1 + #!/usr/bin/env bash 2 + set -e 3 + 4 + CACHE_DIR="$HOME/.cache/wallpaper-gradients" 5 + mkdir -p "$CACHE_DIR" 6 + 7 + TRANSITION_BEZIER=".05,.4,.49,.96" 8 + GRADIENT_HEIGHT=96 9 + 10 + RANDOM_WALLPAPER=0 11 + while [[ $# -gt 0 ]]; do 12 + case "$1" in 13 + -r|--random) 14 + RANDOM_WALLPAPER=1 15 + shift 16 + ;; 17 + *) 18 + shift 19 + ;; 20 + esac 21 + done 22 + 23 + mapping=$(mktemp) 24 + find ~/Pictures/Wallpapers -type f -name "*.jpg" -o -name "*.png" -o -name "*.webp" -o -name "*.jpeg" | while read -r path; do 25 + rel="${path#"$HOME"/Pictures/Wallpapers/}" 26 + dir=$(dirname "$rel") 27 + file=$(basename "$rel") 28 + name="${file%.*}" 29 + if [ "$dir" != "." ]; then 30 + pretty="$dir - $name" 31 + else 32 + pretty="$name" 33 + fi 34 + echo "$pretty|$path" 35 + done > "$mapping" 36 + 37 + if [[ "$RANDOM_WALLPAPER" -eq 1 ]]; then 38 + selected_line=$(shuf -n1 "$mapping") 39 + wallpaper=$(echo "$selected_line" | cut -d'|' -f2-) 40 + rm "$mapping" 41 + [ -z "$wallpaper" ] && exit 1 42 + else 43 + selected_pretty=$(cut -d'|' -f1 "$mapping" | dmenu -i -l 20 -p "Select wallpaper:") 44 + [ -z "$selected_pretty" ] && rm "$mapping" && exit 1 45 + 46 + wallpaper=$(grep -F "$selected_pretty|" "$mapping" | head -n1 | cut -d'|' -f2-) 47 + rm "$mapping" 48 + [ -z "$wallpaper" ] && exit 1 49 + fi 50 + 51 + hash=$(printf "%s|%s|%s" "$wallpaper" "$GRADIENT_HEIGHT" "$TRANSITION_BEZIER" | sha256sum | cut -d' ' -f1) 52 + cached_wallpaper="$CACHE_DIR/$hash.png" 53 + 54 + if [ ! -f "$cached_wallpaper" ]; then 55 + width=$(identify -format "%w" "$wallpaper") 56 + 57 + gradient_png=$(mktemp --suffix=.png) 58 + magick -size "${width}x${GRADIENT_HEIGHT}" gradient:none-black -sigmoidal-contrast 4,50% "$gradient_png" 59 + magick "$wallpaper" "$gradient_png" -gravity south -composite "$cached_wallpaper" 60 + rm "$gradient_png" 61 + fi 62 + 63 + swww img "$cached_wallpaper" --transition-bezier $TRANSITION_BEZIER -t grow