Subject: Re: [bug#35346] [PATCH 2/2] gnu: Add pass-otp.

From: "Alex Griffin" <[email-masked]>
Date: Sun, 21 Apr 2019 20:26:45 -0400

On Sun, Apr 21, 2019, at 9:30 PM, Christopher Baines wrote:
> These changes are looking good, one thing though, is that I think this
> native-search-paths field should be defined for the password-store
> package, as it's the one that uses the search path.
> 
> While it works having it defined for pass-otp, having it in the
> password-store package will become relevant if there are more extensions
> packaged for Guix, as then they'll be able to take advantage of this as
> well.

Thanks Chris, that makes sense. I've attached 2 updated patches with the requested changes.

-- 
Alex Griffin
From 8f64805def5352919e4dac57ce0adc79f0243a43 Mon Sep 17 00:00:00 2001
From: Alex Griffin <[email-masked]>
Date: Sat, 20 Apr 2019 11:56:23 -0500
Subject: [PATCH 1/2] gnu: password-store: Allow external packages to provide
 extensions.

* gnu/packages/password-utils.scm (password-store): Add mechanism for
providing pass extensions in separate packages.
[arguments]: Add patch-system-extension-dir phase.
[native-search-paths]: Add PASSWORD_STORE_SYSTEM_EXTENSION_DIR.
---
 gnu/packages/password-utils.scm | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 5c11d8c437..5cd8e2f160 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016 Jessica Tallon <[email-masked]>
 ;;; Copyright © 2016 Andreas Enge <[email-masked]>
 ;;; Copyright © 2016 Lukas Gradl <[email-masked]>
-;;; Copyright © 2016 Alex Griffin <[email-masked]>
+;;; Copyright © 2016, 2019 Alex Griffin <[email-masked]>
 ;;; Copyright © 2017 Leo Famulari <[email-masked]>
 ;;; Copyright © 2017, 2018 Clément Lassieur <[email-masked]>
 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <[email-masked]>
@@ -423,6 +423,18 @@ any X11 window.")
        (modify-phases %standard-phases
          (delete 'configure)
          (delete 'build)
+         (add-before 'install 'patch-system-extension-dir
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (extension-dir (string-append out "/lib/password-store/extensions")))
+               (substitute* "src/password-store.sh"
+                 (("^SYSTEM_EXTENSION_DIR=.*$")
+                  ;; lead with whitespace to prevent 'make install' from
+                  ;; overwriting it again
+                  (string-append " SYSTEM_EXTENSION_DIR=\""
+                                 "${PASSWORD_STORE_SYSTEM_EXTENSION_DIR:-"
+                                 extension-dir
+                                 "}\"\n"))))))
          (add-before 'install 'patch-passmenu-path
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "contrib/dmenu/passmenu"
@@ -461,6 +473,10 @@ any X11 window.")
        ;; timeout in some circumstances.
        #:parallel-tests? #f
        #:test-target "test"))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "PASSWORD_STORE_SYSTEM_EXTENSION_DIR")
+            (files '("lib/password-store/extensions")))))
     (inputs
      `(("dmenu" ,dmenu)
        ("getopt" ,util-linux)
-- 
2.20.1

From 0c695f7ee5151a4c1747591ca165b44c5b9e553b Mon Sep 17 00:00:00 2001
From: Alex Griffin <[email-masked]>
Date: Sat, 20 Apr 2019 11:59:35 -0500
Subject: [PATCH 2/2] gnu: Add pass-otp.

* gnu/packages/password-utils.scm (pass-otp): New variable.
---
 gnu/packages/password-utils.scm | 49 +++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 5cd8e2f160..fd0a7c6501 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -48,6 +48,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages aidc)
+  #:use-module (gnu packages authentication)
   #:use-module (gnu packages base)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
@@ -74,6 +75,7 @@
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages suckless)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages version-control)
@@ -498,6 +500,53 @@ changes to your password database to a git repository that can be managed
 through the pass command.")
     (license license:gpl2+)))
 
+(define-public pass-otp
+  (package
+    (name "pass-otp")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "https://github.com/tadfisher/pass-otp/releases/"
+                       "download/v" version "/pass-otp-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0rrs3iazq80dn0wbl20xkh270428jd8l99m5gd7hl93s4r4sc82p"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:make-flags
+       (let* ((out      (assoc-ref %outputs "out"))
+              (bashcomp (string-append out "/etc/bash_completion.d")))
+         (list (string-append "PREFIX=" %output)
+               (string-append "BASHCOMPDIR=" bashcomp)))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'build 'patch-oath-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "otp.bash"
+               (("^OATH=.*$")
+                (string-append
+                 "OATH="
+                 (assoc-ref inputs "oath-toolkit")
+                 "/bin/oathtool\n")))
+             #t)))
+       #:test-target "test"))
+    (inputs
+     `(("password-store" ,password-store)
+       ("expect" ,expect)
+       ("oath-toolkit" ,oath-toolkit)
+       ("git" ,git)
+       ("gnupg" ,gnupg)
+       ("which" ,which)))
+    (home-page "https://github.com/tadfisher/pass-otp")
+    (synopsis "Pass extension for managing one-time-password (OTP) tokens")
+    (description " An extension for password-store that allows adding
+one-time-password (OTP) secrets, generating OTP codes, and displaying secret
+key URIs using the standard otpauth:// scheme.")
+    (license license:gpl3+)))
+
 (define-public argon2
   (package
     (name "argon2")
-- 
2.20.1