diff --git a/scripts/default.nix b/scripts/default.nix index dec8969..712700c 100644 --- a/scripts/default.nix +++ b/scripts/default.nix @@ -1,7 +1,9 @@ { config, lib, ... }: -(_: pkgs: { +(pkgs: _: { bmenu = import ./bmenu.nix { inherit config pkgs lib; }; _diffr = import ./diffr.nix { inherit config pkgs lib; }; kak-pager = import ./kak-pager.nix { inherit config pkgs lib; }; terminal = import ./terminal.nix { inherit config pkgs lib; }; + wpass = import ./wpass.nix { inherit config pkgs lib; }; + screenshotsh = import ./screenshotsh.nix { inherit config pkgs lib; }; }) diff --git a/scripts/screenshotsh.nix b/scripts/screenshotsh.nix new file mode 100644 index 0000000..25d0612 --- /dev/null +++ b/scripts/screenshotsh.nix @@ -0,0 +1,47 @@ +{ config, pkgs, lib, ... }: +pkgs.writeShellScriptBin "screenshotsh" '' + export XCURSOR_SIZE=40 + export XCURSOR_THEME='capitaine-cursors-light' # ${pkgs.capitaine-cursors} + + if which xdg-user-dir >/dev/null 2>&1; then + DESTFOLDER="$(${pkgs.capitaine-cursors}/bin/xdg-user-dir PICTURES)" + else + for i in Images Imagens Pictures Fotos ""; do + DESTFOLDER="$HOME/$i" + test -d "$DESTFOLDER" && + break + done + fi + + DESTFOLDER="$DESTFOLDER/Screenshots" + mkdir -p "$DESTFOLDER" + DESTFILE="$DESTFOLDER/$(date +'%Y-%m-%d-%H%M%S_screenshot.png')" + + case $1 in + def) + # Screenshot to file + ${pkgs.grim}/bin/grim "$DESTFILE" + echo "$DESTFILE" + ;; + + area) + # Screen area to file + ${pkgs.grim}/bin/grim -g "$(slurp -d -b 30303088)" "$DESTFILE" + echo "$DESTFILE" + ;; + area-clip) + # Screen area to clipboard + ${pkgs.grim}/bin/grim -g "$(slurp -d -b 30303088)" - | ${pkgs.wl-clipboard}/bin/wl-copy + ;; + + clip) + # Focused monitor to clipboard + cur_output=$(${pkgs.sway}/bin/swaymsg -t get_outputs | + ${pkgs.jq}/bin/jq -r '.[] | select(.focused) | .name') + + test -n "$cur_output" && + ${pkgs.grim}/bin/grim -o "$cur_output" - | ${pkgs.wl-clipboard}/bin/wl-copy || + ${pkgs.grim}/bin/grim - | ${pkgs.wl-clipboard}/bin/wl-copy + ;; + esac +'' diff --git a/scripts/wpass.nix b/scripts/wpass.nix new file mode 100644 index 0000000..2b07387 --- /dev/null +++ b/scripts/wpass.nix @@ -0,0 +1,51 @@ +{ config, pkgs, lib, ... }: +pkgs.writeShellScriptBin "wpass" '' + # passmenu, for wayland + # depends: wtype, pass + + shopt -s nullglob globstar + + wtype=${pkgs.wtype}/bin/wtype + dmenu=${pkgs.bmenu}/bin/bmenu + + find_file() { + ${pkgs.fd}/bin/fd --strip-cwd-prefix '\.gpg$' | + ${pkgs.sd}/bin/sd ".gpg$" "" | + "$dmenu" -p "Password" $@ + } + + main() { + + test -n "$PASSWORD_STORE_DIR" && + cd "$PASSWORD_STORE_DIR" || + cd "$HOME/.password-store" + + entry=`find_file "$@"` + + test -n "$entry" || exit 0 + + username=`${pkgs.pass}/bin/pass show "$entry" 2>/dev/null | perl -ne 'print $1 if /^(login|user|email): (.*)/'` + password=`${pkgs.pass}/bin/pass show "$entry" 2>/dev/null | head -n 1` + + action=`printf "Autotype\nUsername -> $username\nPassword" | "$dmenu" -p Action` + + case $action in + Autotype) + autotype + ;; + Username*) + printf '%s' "$username" | ${pkgs.wl-clipboard}/bin/wl-copy;; + Password) + printf '%s' "$password" | ${pkgs.wl-clipboard}/bin/wl-copy;; + esac + + } + + autotype(){ + env $wtype -s 100 "$username" + env $wtype -s 100 -k tab + env $wtype -s 100 "$password" + } + + main +'' diff --git a/user/home.nix b/user/home.nix index 7c1bfc0..8a5b57d 100644 --- a/user/home.nix +++ b/user/home.nix @@ -52,6 +52,8 @@ in { volumesh pamixer libnotify + wpass + screenshotsh # media yt-dlp ffmpeg diff --git a/user/sway.nix b/user/sway.nix index eba99da..1578e67 100644 --- a/user/sway.nix +++ b/user/sway.nix @@ -249,7 +249,19 @@ in { "--locked Ctrl+${mod}+z" = "exec ${_suspend}/bin/_suspend"; "${mod}+Alt+c" = "exec ${_sway_idle_toggle}/bin/_sway_idle_toggle"; }; + screenshot_binds = { + # Screens to file + "Print" = "exec ${pkgs.screenshotsh}/bin/screenshotsh def"; + # Screen area to file + "Shift+Print" = "exec ${pkgs.screenshotsh}/bin/screenshotsh area"; + # Screen area to clipboard + "Control+Shift+Print" = + "exec ${pkgs.screenshotsh}/bin/screenshotsh area-clip"; + # Focused monitor to clipboard + "Control+Print" = "exec ${pkgs.screenshotsh}/bin/screenshotsh clip"; + }; other_binds = { + "${mod}+p" = "exec ${pkgs.wpass}"; "${mod}+s" = "exec ${menu}"; "${mod}+Return" = "exec ${terminal}"; "${mod}+Ctrl+Return" = "exec thunar"; @@ -270,6 +282,7 @@ in { audio_binds system_binds parenting_binds + screenshot_binds ]; terminal = pkgs.alacritty.executable; };