~abcdw/rde-devel

rde : contrib: age/password-store integration v4 PROPOSED

This is a rework on the pass/age integration proposition, only moved
in feature-age rather than feature-password-store.

This is a resend, the former patch series has been marked SUPERSEDED.

Nicolas Graves (1):
  contrib: age: Add password-store integration

 src/contrib/features/age.scm        | 67 ++++++++++++++++++++++++++---
 src/rde/features/password-utils.scm |  5 ++-
 2 files changed, 65 insertions(+), 7 deletions(-)

-- 
2.47.1
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~abcdw/rde-devel/patches/57007/mbox | git am -3
Learn more about email & git

[PATCH rde v4 1/1] contrib: age: Add password-store integration Export this patch

---
 src/contrib/features/age.scm        | 67 ++++++++++++++++++++++++++---
 src/rde/features/password-utils.scm |  5 ++-
 2 files changed, 65 insertions(+), 7 deletions(-)

diff --git a/src/contrib/features/age.scm b/src/contrib/features/age.scm
index 5a234a52..e5c793b8 100644
--- a/src/contrib/features/age.scm
+++ b/src/contrib/features/age.scm
@@ -1,6 +1,6 @@
;;; rde --- Reproducible development environment.
;;;
;;; Copyright © 2023 Nicolas Graves <ngraves@ngraves.fr>
;;; Copyright © 2023, 2024 Nicolas Graves <ngraves@ngraves.fr>
;;;
;;; This file is part of rde.
;;;
@@ -19,6 +19,7 @@

(define-module (contrib features age)
  #:use-module (rde features)
  #:use-module (rde features emacs)
  #:use-module (gnu packages golang-crypto)
  #:use-module (gnu services)
  #:use-module (gnu services base)
@@ -39,12 +40,66 @@ RDE."
  (ensure-pred file-like? age)
  (ensure-pred string? age-ssh-key)

  (define emacs-f-name 'passage)
  (define f-name (symbol-append 'emacs- emacs-f-name))

  (define (get-home-services config)
    (list
     (simple-service
      'age-add-age-package
      home-profile-service-type
      (list age))))
    (append
     (list (simple-service
            'age-add-age-package
            home-profile-service-type
            (list age)))
     (if (get-value 'pass config)
         (list
          (rde-elisp-configuration-service
           emacs-f-name
           config
           `(;; redefining necessary variables and functions
             (with-eval-after-load
                 'auth-source-pass
               (setq auth-source-pass-filename (getenv "PASSAGE_DIR"))
               (with-eval-after-load
                   'password-store
                 (setq password-store-executable
                       ,(file-append (get-value 'password-store config)
                                     "/bin/passage"))
                 (defun age-password-store--entry-to-file (entry)
                   "Return file name corresponding to ENTRY."
                   (concat
                    (expand-file-name entry (password-store-dir)) ".age"))
                 (advice-add 'password-store--entry-to-file
                             :override 'age-password-store--entry-to-file)

                 (defun age-password-store-list (&optional subdir)
                   "List password entries under SUBDIR."
                   (unless subdir (setq subdir ""))
                   (let ((dir (expand-file-name subdir (password-store-dir))))
                     (if (file-directory-p dir)
                         (delete-dups
                          (mapcar 'password-store--file-to-entry
                                  (directory-files-recursively
                                   dir ".+\\.age\\'"))))))
                 (advice-add 'password-store-list
                             :override 'age-password-store-list)

                 (defun age-auth-source-pass--read-entry (entry)
                   "Return a string with the file content of ENTRY."
                   (password-store--run-show entry))
                 (advice-add 'auth-source-pass--read-entry
                             :override 'age-auth-source-pass--read-entry))))
           #:summary "pass-age emacs interface"
           #:authors '("Nicolas Graves <ngraves@ngraves.fr>")
           #:keywords '(convenience))
          (simple-service
           'passage-environment-variables
           home-environment-variables-service-type
           `(("PASSAGE_AGE" . ,(file-append age "/bin/age"))
             ("PASSAGE_DIR"
              . ,(get-value 'password-store-directory config))
             ("PASSAGE_IDENTITIES_FILE" . ,age-ssh-key)
             ("PASSAGE_RECIPIENTS_FILE"
              . ,(string-append age-ssh-key ".pub")))))
     '())))

  (feature
   (name 'age)
diff --git a/src/rde/features/password-utils.scm b/src/rde/features/password-utils.scm
index 717e4de1..c9027a40 100644
--- a/src/rde/features/password-utils.scm
+++ b/src/rde/features/password-utils.scm
@@ -32,6 +32,7 @@
  #:use-module (gnu services)

  #:use-module (guix gexp)
  #:use-module (guix packages)

  #:export (feature-password-store))

@@ -62,7 +63,8 @@

  (define (password-store-home-services config)
    "Returns home services related to password-store."
    (require-value 'gpg-primary-key config)
    (when (string= (package-name password-store) "password-store")
      (require-value 'gpg-primary-key config))
    (require-value 'home-directory config)
    (list (service home-password-store-service-type
                   (home-password-store-configuration
@@ -197,6 +199,7 @@ Keybinding for `rde-consult-pass' and embark actions for it."
   (name 'password-store)
   (values `((pass . #t)
             (password-store . ,password-store)
             (password-store-directory . ,password-store-directory)
             ,@(if default-pass-prompt?
                   `((default-pass-prompt-fn . ,emacs-pass-prompt))
                   '())))
-- 
2.47.1