diff --git a/pkgs/tools/security/pass/clip-wayland-support.patch b/pkgs/tools/security/pass/clip-wayland-support.patch deleted file mode 100644 index 7b8d2eb010d..00000000000 --- a/pkgs/tools/security/pass/clip-wayland-support.patch +++ /dev/null @@ -1,113 +0,0 @@ -From b0b784b1a57c0b06936e6f5d6560712b4b810cd3 Mon Sep 17 00:00:00 2001 -From: Brett Cornwall -Date: Wed, 27 Feb 2019 00:08:33 -0700 -Subject: clip: Add support for wl-clipboard - -Edited to properly apply with -`set-correct-program-name-for-sleep.patch`. - ---- - README | 4 +++- - man/pass.1 | 5 +++++ - src/password-store.sh | 26 +++++++++++++++++++++----- - 3 files changed, 29 insertions(+), 6 deletions(-) - -diff --git a/README b/README -index 6b59965..1a46242 100644 ---- a/README -+++ b/README -@@ -19,8 +19,10 @@ Depends on: - http://www.gnupg.org/ - - git - http://www.git-scm.com/ --- xclip -+- xclip (for X11 environments) - http://sourceforge.net/projects/xclip/ -+- wl-clipboard (for wlroots Wayland-based environments) -+ https://github.com/bugaevc/wl-clipboard - - tree >= 1.7.0 - http://mama.indstate.edu/users/ice/tree/ - - GNU getopt -diff --git a/man/pass.1 b/man/pass.1 -index 01a3fbe..a555dcb 100644 ---- a/man/pass.1 -+++ b/man/pass.1 -@@ -99,6 +99,8 @@ Decrypt and print a password named \fIpass-name\fP. If \fI--clip\fP or \fI-c\fP - is specified, do not print the password but instead copy the first (or otherwise specified) - line to the clipboard using - .BR xclip (1) -+or -+.BR wl-clipboard(1) - and then restore the clipboard after 45 (or \fIPASSWORD_STORE_CLIP_TIME\fP) seconds. If \fI--qrcode\fP - or \fI-q\fP is specified, do not print the password but instead display a QR code using - .BR qrencode (1) -@@ -132,6 +134,8 @@ in generating passwords can be changed with the \fIPASSWORD_STORE_CHARACTER_SET\ - If \fI--clip\fP or \fI-c\fP is specified, do not print the password but instead copy - it to the clipboard using - .BR xclip (1) -+or -+.BR wl-clipboard(1) - and then restore the clipboard after 45 (or \fIPASSWORD_STORE_CLIP_TIME\fP) seconds. If \fI--qrcode\fP - or \fI-q\fP is specified, do not print the password but instead display a QR code using - .BR qrencode (1) -@@ -466,6 +470,7 @@ The location of the text editor used by \fBedit\fP. - .BR tr (1), - .BR git (1), - .BR xclip (1), -+.BR wl-clipboard (1), - .BR qrencode (1). - - .SH AUTHOR -diff --git a/src/password-store.sh b/src/password-store.sh -index d89d455..284eabf 100755 ---- a/src/password-store.sh -+++ b/src/password-store.sh -@@ -152,16 +152,32 @@ check_sneaky_paths() { - # - - clip() { -+ if [[ -n $WAYLAND_DISPLAY ]]; then -+ local copy_cmd=( wl-copy ) -+ local paste_cmd=( wl-paste -n ) -+ if [[ $X_SELECTION == primary ]]; then -+ copy_cmd+=( --primary ) -+ paste_cmd+=( --primary ) -+ fi -+ local display_name="$WAYLAND_DISPLAY" -+ elif [[ -n $DISPLAY ]]; then -+ local copy_cmd=( xclip -selection "$X_SELECTION" ) -+ local paste_cmd=( xclip -o -selection "$X_SELECTION" ) -+ local display_name="$DISPLAY" -+ else -+ die "Error: No X11 or Wayland display detected" -+ fi -+ local sleep_argv0="password store sleep on display $display_name" -+ - # This base64 business is because bash cannot store binary data in a shell - # variable. Specifically, it cannot store nulls nor (non-trivally) store - # trailing new lines. -- local sleep_argv0="password store sleep on display $DISPLAY" - pkill -P $(pgrep -f "^$sleep_argv0") 2>/dev/null && sleep 0.5 -- local before="$(xclip -o -selection "$X_SELECTION" 2>/dev/null | $BASE64)" -- echo -n "$1" | xclip -selection "$X_SELECTION" || die "Error: Could not copy data to the clipboard" -+ local before="$("${paste_cmd[@]}" 2>/dev/null | $BASE64)" -+ echo -n "$1" | "${copy_cmd[@]}" || die "Error: Could not copy data to the clipboard" - ( - ( exec -a "$sleep_argv0" bash <(echo trap 'kill %1' TERM\; sleep "$CLIP_TIME & wait") ) -- local now="$(xclip -o -selection "$X_SELECTION" | $BASE64)" -+ local now="$("${paste_cmd[@]}" | $BASE64)" - [[ $now != $(echo -n "$1" | $BASE64) ]] && before="$now" - - # It might be nice to programatically check to see if klipper exists, -@@ -173,7 +189,7 @@ clip() { - # so we axe it here: - qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory &>/dev/null - -- echo "$before" | $BASE64 -d | xclip -selection "$X_SELECTION" -+ echo "$before" | $BASE64 -d | "${copy_cmd[@]}" - ) >/dev/null 2>&1 & disown - echo "Copied $2 to clipboard. Will clear in $CLIP_TIME seconds." - } --- -cgit v1.2.1-28-gf32c - diff --git a/pkgs/tools/security/pass/default.nix b/pkgs/tools/security/pass/default.nix index a7872c50fb3..7468b5dcc8d 100644 --- a/pkgs/tools/security/pass/default.nix +++ b/pkgs/tools/security/pass/default.nix @@ -3,8 +3,9 @@ , which, procps , qrencode , makeWrapper, pass, symlinkJoin , xclip ? null, xdotool ? null, dmenu ? null -, x11Support ? !stdenv.isDarwin , dmenuSupport ? x11Support +, x11Support ? !stdenv.isDarwin , dmenuSupport ? (x11Support || waylandSupport) , waylandSupport ? false, wl-clipboard ? null +, ydotool ? null, dmenu-wayland ? null # For backwards-compatibility , tombPluginSupport ? false @@ -13,13 +14,15 @@ with lib; assert x11Support -> xclip != null; - -assert dmenuSupport -> dmenu != null - && xdotool != null - && x11Support; - assert waylandSupport -> wl-clipboard != null; +assert dmenuSupport -> x11Support || waylandSupport; +assert dmenuSupport && x11Support + -> dmenu != null && xdotool != null; +assert dmenuSupport && waylandSupport + -> dmenu-wayland != null && ydotool != null; + + let passExtensions = import ./extensions { inherit pkgs; }; @@ -52,21 +55,18 @@ let in stdenv.mkDerivation rec { - version = "1.7.3"; + version = "1.7.4"; pname = "password-store"; src = fetchurl { url = "https://git.zx2c4.com/password-store/snapshot/${pname}-${version}.tar.xz"; - sha256 = "1x53k5dn3cdmvy8m4fqdld4hji5n676ksl0ql4armkmsds26av1b"; + sha256 = "1h4k6w7g8pr169p5w9n6mkdhxl3pw51zphx7www6pvgjb7vgmafg"; }; patches = [ ./set-correct-program-name-for-sleep.patch ./extension-dir.patch - ] ++ lib.optional stdenv.isDarwin ./no-darwin-getopt.patch - # TODO (@Ma27) this patch adds support for wl-clipboard and can be removed during the next - # version bump. - ++ lib.optional waylandSupport ./clip-wayland-support.patch; + ] ++ lib.optional stdenv.isDarwin ./no-darwin-getopt.patch; nativeBuildInputs = [ makeWrapper ]; @@ -74,8 +74,7 @@ stdenv.mkDerivation rec { postInstall = '' # Install Emacs Mode. NOTE: We can't install the necessary - # dependencies (s.el and f.el) here. The user has to do this - # himself. + # dependencies (s.el) here. The user has to do this themselves. mkdir -p "$out/share/emacs/site-lisp" cp "contrib/emacs/password-store.el" "$out/share/emacs/site-lisp/" '' + optionalString dmenuSupport '' @@ -96,8 +95,10 @@ stdenv.mkDerivation rec { procps ] ++ optional stdenv.isDarwin openssl ++ optional x11Support xclip - ++ optionals dmenuSupport [ xdotool dmenu ] - ++ optional waylandSupport wl-clipboard); + ++ optional waylandSupport wl-clipboard + ++ optionals (waylandSupport && dmenuSupport) [ ydotool dmenu-wayland ] + ++ optionals (x11Support && dmenuSupport) [ xdotool dmenu ] + ); postFixup = '' # Fix program name in --help diff --git a/pkgs/tools/security/pass/no-darwin-getopt.patch b/pkgs/tools/security/pass/no-darwin-getopt.patch index e8f7e138ff0..7e8b66dd7f1 100644 --- a/pkgs/tools/security/pass/no-darwin-getopt.patch +++ b/pkgs/tools/security/pass/no-darwin-getopt.patch @@ -1,9 +1,11 @@ -diff -Naur password-store-1.6.5-orig/src/platform/darwin.sh password-store-1.6.5/src/platform/darwin.sh ---- password-store-1.6.5-orig/src/platform/darwin.sh 2015-01-28 16:43:02.000000000 +0000 -+++ password-store-1.6.5/src/platform/darwin.sh 2015-02-15 16:09:02.000000000 +0000 -@@ -31,5 +31,4 @@ - mount -t hfs -o noatime -o nobrowse "$DARWIN_RAMDISK_DEV" "$SECURE_TMPDIR" || die "Error: could not mount filesystem on ramdisk." +diff --git a/src/platform/darwin.sh b/src/platform/darwin.sh +index f6cc471..e2e8bba 100644 +--- a/src/platform/darwin.sh ++++ b/src/platform/darwin.sh +@@ -39,6 +39,5 @@ qrcode() { + fi } --GETOPT="$(brew --prefix gnu-getopt 2>/dev/null || { which port &>/dev/null && echo /opt/local; } || echo /usr/local)/bin/getopt" +-GETOPT="$({ test -x /usr/local/opt/gnu-getopt/bin/getopt && echo /usr/local/opt/gnu-getopt; } || brew --prefix gnu-getopt 2>/dev/null || { which port &>/dev/null && echo /opt/local; } || echo /usr/local)/bin/getopt" SHRED="srm -f -z" + BASE64="openssl base64" diff --git a/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch b/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch index f3a844ad2d6..a71a279c1ef 100644 --- a/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch +++ b/pkgs/tools/security/pass/set-correct-program-name-for-sleep.patch @@ -5,29 +5,10 @@ Subject: [PATCH] Patch the clip() function to work even when using single-binary coreutils --- - src/password-store.sh | 4 ++-- src/platform/cygwin.sh | 4 ++-- src/platform/darwin.sh | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) -diff --git a/src/password-store.sh b/src/password-store.sh -index 7264ffc..68551a4 100755 ---- a/src/password-store.sh -+++ b/src/password-store.sh -@@ -155,11 +155,11 @@ clip() { - # variable. Specifically, it cannot store nulls nor (non-trivally) store - # trailing new lines. - local sleep_argv0="password store sleep on display $DISPLAY" -- pkill -f "^$sleep_argv0" 2>/dev/null && sleep 0.5 -+ pkill -P $(pgrep -f "^$sleep_argv0") 2>/dev/null && sleep 0.5 - local before="$(xclip -o -selection "$X_SELECTION" 2>/dev/null | $BASE64)" - echo -n "$1" | xclip -selection "$X_SELECTION" || die "Error: Could not copy data to the clipboard" - ( -- ( exec -a "$sleep_argv0" bash <<<"trap 'kill %1' TERM; sleep '$CLIP_TIME' & wait" ) -+ ( exec -a "$sleep_argv0" bash <(echo trap 'kill %1' TERM\; sleep "$CLIP_TIME & wait") ) - local now="$(xclip -o -selection "$X_SELECTION" | $BASE64)" - [[ $now != $(echo -n "$1" | $BASE64) ]] && before="$now" - diff --git a/src/platform/cygwin.sh b/src/platform/cygwin.sh index 5a8d5ea..423e0ce 100644 --- a/src/platform/cygwin.sh