summary refs log tree commit diff
path: root/gnu/packages/emacs-xyz.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/emacs-xyz.scm')
-rw-r--r--gnu/packages/emacs-xyz.scm847
1 files changed, 594 insertions, 253 deletions
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 0dfff8146b..9c3596db28 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -265,21 +265,28 @@ on stdout instead of using a socket as the Emacsclient does.")
     (license license:gpl3+)))
 
 (define-public emacs-magit
-  ;; Version 2.90.1 has trouble loading the transient library,
-  ;; so we use a more recent commit that fixes it.
-  (let ((commit "b4aec016b5577afa8d889f258b499814d1bb1d94"))
+  ;; `magit-setup-buffer' macro introduced in c761d28d and required in
+  ;; `emacs-forge'.
+  (let ((commit "c761d28d49e5238037512b898db0ec9b40d85770"))
     (package
       (name "emacs-magit")
-      (version (git-version "2.90.1" "1" commit))
+      (version (git-version "2.90.1" "2" commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
-                      (url "https://github.com/magit/magit")
+                      (url "https://github.com/magit/magit.git")
                       (commit commit)))
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0zl7v6z0y50pcgqsf2r8c1k3r5nwjad9ba7r6sgrnf4rc62br7jv"))))
+                  "16qx0404l05q1m6w7y5j8ck1z5nfmpinm00w0p2yh1hn5zzwy6dd"))
+                (modules '((guix build utils)))
+                (snippet
+                 '(begin
+                    ;; Fix syntax error
+                    (substitute* "lisp/magit-extras.el"
+                      (("rev\\)\\)\\)\\)\\)\\)") "rev)))))"))
+                    #t))))
       (build-system gnu-build-system)
       (native-inputs `(("texinfo" ,texinfo)
                        ("emacs" ,emacs-minimal)))
@@ -318,6 +325,39 @@ on stdout instead of using a socket as the Emacsclient does.")
 
          #:phases
          (modify-phases %standard-phases
+           (add-after 'unpack 'patch
+             (lambda _
+               (chmod "lisp/magit-extras.el" #o644)
+               (emacs-batch-edit-file "lisp/magit-extras.el"
+                 `(progn (progn
+                          (goto-char (point-min))
+                          (re-search-forward "(defun magit-copy-buffer-revision ()")
+                          (forward-sexp 2)
+                          (kill-sexp)
+                          (insert ,(format #f "~S"
+                                           '(if (use-region-p)
+                                                (copy-region-as-kill nil nil 'region)
+                                                (when-let ((rev (cl-case major-mode
+                                                                         ((magit-cherry-mode
+                                                                           magit-log-select-mode
+                                                                           magit-reflog-mode
+                                                                           magit-refs-mode
+                                                                           magit-revision-mode
+                                                                           magit-stash-mode
+                                                                           magit-stashes-mode)
+                                                                          (car magit-refresh-args))
+                                                                         ((magit-diff-mode magit-log-mode)
+                                                                          (let ((r (caar magit-refresh-args)))
+                                                                            (if (string-match "\\.\\.\\.?\\(.+\\)" r)
+                                                                                (match-string 1 r)
+                                                                                r)))
+                                                                         (magit-status-mode "HEAD"))))
+                                                          (when (magit-commit-p rev)
+                                                            (setq rev (magit-rev-parse rev))
+                                                            (push (list rev default-directory) magit-revision-stack)
+                                                            (kill-new (message "%s" rev))))))))
+                         (basic-save-buffer)))
+               #t))
            (delete 'configure)
            (add-before
                'build 'patch-exec-paths
@@ -524,39 +564,41 @@ deliver data to mobile and web apps.")
    (license license:gpl3+)))
 
 (define-public emacs-ghub
-  (package
-    (name "emacs-ghub")
-    (version "3.2.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/magit/ghub")
-                     (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0lp52qygyavddl1lrgsyb6mq7hcf9h89dy2pzya3mb2va49f0vvl"))))
-    (build-system emacs-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'install 'make-info
-           (lambda _
-             (invoke "make" "info"))))))
-    (native-inputs
-     `(("texinfo" ,texinfo)))
-    (propagated-inputs
-     `(("dash" ,emacs-dash)
-       ("graphql" ,emacs-graphql)
-       ("treepy" ,emacs-treepy)))
-    (home-page "https://github.com/magit/ghub")
-    (synopsis "Emacs client libraries for the APIs of various Git forges")
-    (description
-     "Ghub provides basic support for using the APIs of various Git forges from
+  ;; We need a newer commit to avoid problems in emacs-forge.
+  (let ((commit "cf0b13aeba4df3798e49c205cac2d8fefd53a137")
+        (revision "1"))
+    (package
+      (name "emacs-ghub")
+      (version (git-version "3.2.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/magit/ghub")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0fzayvcysk80vv4q332axcjf80x6gsnpcbl0svmpb017ii6wxhid"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'install 'make-info
+             (lambda _
+               (invoke "make" "info"))))))
+      (native-inputs
+       `(("texinfo" ,texinfo)))
+      (propagated-inputs
+       `(("dash" ,emacs-dash)
+         ("treepy" ,emacs-treepy)))
+      (home-page "https://github.com/magit/ghub")
+      (synopsis "Emacs client libraries for the APIs of various Git forges")
+      (description
+       "Ghub provides basic support for using the APIs of various Git forges from
 Emacs packages.  It supports the REST APIs of Github, Github GraphQL, Gitlab,
 Gitea, Gogs and Bitbucket.  It abstracts access to API resources using only a
 handful of functions that are not resource-specific.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-scribble-mode
   (let ((commit "217945d54de5e4bb207033f2116baa28f5c5ecf2")
@@ -741,8 +783,8 @@ programs.")
   (deprecated-package "haskell-mode" emacs-haskell-mode))
 
 (define-public emacs-dante
-  (let ((commit "a25ae9e5b5425cffdd88d498777e90ea8655fa37")
-        (revision "2"))
+  (let ((commit "38b589417294c7ea44bf65b73b8046d950f9531b")
+        (revision "3"))
     (package
       (name "emacs-dante")
       (version (git-version "1.5" revision commit))
@@ -753,7 +795,7 @@ programs.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "1ziw3snbs2z2cg8a3jbyjd48qkgrkzs4bh8lrbs0h2c87nzldvhd"))
+                  "1mnmn635552zlwd4zr68jbvdjipl6gi4mi6wiyck28fsmq8kw96h"))
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
@@ -2946,29 +2988,35 @@ completing keywords and smart indentation.")
       (license license:gpl3+))))
 
 (define-public emacs-rspec
-  (package
-    (name "emacs-rspec")
-    (version "1.11")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/pezra/rspec-mode.git")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0hrn5n7aaymwimk511kjij44vqaxbmhly1gwmlmsrnbvvma7f2mp"))))
-    (build-system emacs-build-system)
-    (home-page "https://github.com/pezra/rspec-mode")
-    (synopsis "Provides a rspec mode for working with RSpec")
-    (description
-     "The Emacs RSpec mode provides keybindings for Ruby source files, e.g. to
+  (let ((commit "66ea7cc9699d6edc6115daa024818adbd85efc20")
+        (revision "1"))
+    (package
+      (name "emacs-rspec")
+      (version (git-version "1.11" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/pezra/rspec-mode.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0b11s8r0pi7ah54km4yg4fqff8wkk409d25qnlwm1l94pdwjd1c8"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:include (cons "^snippets\\/rspec-mode\\/" %default-include)
+         #:tests? #t
+         #:test-command '("make" "test")))
+      (home-page "https://github.com/pezra/rspec-mode")
+      (synopsis "Provides a rspec mode for working with RSpec")
+      (description
+       "The Emacs RSpec mode provides keybindings for Ruby source files, e.g. to
 verify the spec associated with the current buffer, or entire project, as well
 as moving between the spec files, and corresponding code files.
 
 Also included are keybindings for spec files and Dired buffers, as well as
 snippets for yasnippet.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-smart-mode-line
   (package
@@ -4453,36 +4501,34 @@ started with 20 minutes.  All values are customizable.")
       (license license:gpl3+))))
 
 (define-public emacs-org-sidebar
-  (let ((commit "b2a5a69b1ebbab63b55e7d1a9453f385624a642c")
-        (revision "2"))
-    (package
-      (name "emacs-org-sidebar")
-      (version (git-version "0.1" revision commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/alphapapa/org-sidebar.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32 "0dajwg92kj7998xl0x35dlqwdhgwjcwxa726kf4f3wgv1azpyff6"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-org-super-agenda" ,emacs-org-super-agenda)
-         ("emacs-org" ,emacs-org)
-         ("emacs-org-ql" ,emacs-org-ql)
-         ("emacs-s" ,emacs-s)))
-      (home-page "https://github.com/alphapapa/org-sidebar")
-      (synopsis "Helpful sidebar for Org buffers")
-      (description "This package provides a sidebar for Org buffers.  At the
+  (package
+    (name "emacs-org-sidebar")
+    (version "0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/alphapapa/org-sidebar.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "106h06vjfbqfj761vbxwymd6612ds8c6fk053yzgbrqzm3hn2c03"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-org-super-agenda" ,emacs-org-super-agenda)
+       ("emacs-org" ,emacs-org)
+       ("emacs-org-ql" ,emacs-org-ql)
+       ("emacs-s" ,emacs-s)))
+    (home-page "https://github.com/alphapapa/org-sidebar")
+    (synopsis "Helpful sidebar for Org buffers")
+    (description "This package provides a sidebar for Org buffers.  At the
 top is a chronological list of scheduled and deadlined tasks in the current
 buffer (similar to the Org agenda ,but without all its features), and below
 that is a list of all other non-done to-do items.  If the buffer is narrowed,
 the sidebar only shows items in the narrowed portion; this allows seeing an
 overview of tasks in a subtree.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-org-trello
   (package
@@ -6597,26 +6643,29 @@ Dust.js, React/JSX, Angularjs, ejs, etc.")
     (license license:gpl3+)))
 
 (define-public emacs-wgrep
-  (package
-    (name "emacs-wgrep")
-    (version "2.3.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/mhayashi1120/Emacs-wgrep")
-                    (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0pgyf9vfcahb495q01hi1mvkmv846w4rj6zyf52is8x7sjj7x44s"))))
-    (build-system emacs-build-system)
-    (home-page "https://github.com/mhayashi1120/Emacs-wgrep")
-    (synopsis "Edit a grep buffer and apply those changes to the files")
-    (description
-     "Emacs wgrep allows you to edit a grep buffer and apply those changes
+  ;; Tag is missing, so we use the commit directly.
+  ;; https://github.com/mhayashi1120/Emacs-wgrep/issues/64
+  (let ((commit "379afd89ebd76f63842c8589127d66096a8bb595"))
+    (package
+      (name "emacs-wgrep")
+      (version "2.3.1")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/mhayashi1120/Emacs-wgrep")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0v1qx8z1xj9qzirlycbihnkpwcklyi3a0j8lil78pmdpixdbgh47"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/mhayashi1120/Emacs-wgrep")
+      (synopsis "Edit a grep buffer and apply those changes to the files")
+      (description
+       "Emacs wgrep allows you to edit a grep buffer and apply those changes
 to the file buffer.  Several backends are supported beside the classic grep:
 ack, ag, helm and pt.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-helm
   (package
@@ -6891,14 +6940,14 @@ are pretty much the same (and SLIME served as the principle inspiration for
 CIDER).")
     (license license:gpl3+)))
 
-;; There hasn't been a tag or release since 2015, so we take the latest
+;; There hasn't been a tag or release since 2016, so we take the latest
 ;; commit.
 (define-public emacs-sly
-  (let ((commit "486bfbe95612bcdc0960c490207970a188e0fbb9")
-        (revision "1"))
+  (let ((commit "29dccc0735283897a6dbd97e0b6828a45c2985e2")
+        (revision "2"))
     (package
       (name "emacs-sly")
-      (version (string-append "1.0.0-" revision "." (string-take commit 9)))
+      (version (git-version "1.0.0" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -6908,14 +6957,45 @@ CIDER).")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0ib4q4k3h3qn88pymyjjmlmnpizdn1mfg5gpk5a715nqsgxlg09l"))))
+           "0d0skgyqn422130xn8lrdp04m5cjk3sl18w6lf2wrmrndc1crqxk"))))
       (build-system emacs-build-system)
+      (native-inputs
+       `(("texinfo" ,texinfo)))
       (arguments
-       `(#:include (cons "^lib\\/" %default-include)
+       `(#:include (cons* "^contrib\\/" "^lib\\/" "^slynk\\/" %default-include)
          #:phases
          ;; The package provides autoloads.
          (modify-phases %standard-phases
-           (delete 'make-autoloads))))
+           (delete 'make-autoloads)
+           (add-before 'install 'install-doc
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (info-dir (string-append out "/share/info"))
+                      (doc-dir (string-append out "/share/doc/"
+                                              ,name "-" ,version))
+                      (doc-files '(;; "doc/sly-refcard.pdf" ; See sly-refcard.pdf below.
+                                   "README.md" "NEWS.md" "PROBLEMS.md"
+                                   "CONTRIBUTING.md")))
+                 (with-directory-excursion "doc"
+                   (substitute* "Makefile"
+                     (("infodir=/usr/local/info")
+                      (string-append "infodir=" info-dir))
+                     ;; Don't rebuild contributors.texi since we are not in
+                     ;; the git repo.
+                     (("contributors.texi: Makefile texinfo-tabulate.awk")
+                      "contributors.texi:"))
+                   (invoke "make" "html/index.html")
+                   (invoke "make" "sly.info")
+                   ;; TODO: We need minimal texlive with "preprint" package
+                   ;; (for fullpage.sty).  (invoke "make" "sly-refcard.pdf")
+                   (install-file "sly.info" info-dir)
+                   (copy-recursively "html" (string-append doc-dir "/html")))
+                 (for-each (lambda (f)
+                             (install-file f doc-dir)
+                             (delete-file f))
+                           doc-files)
+                 (delete-file-recursively "doc")
+                 #t))))))
       (home-page "https://github.com/joaotavora/sly")
       (synopsis "Sylvester the Cat's Common Lisp IDE")
       (description
@@ -6924,13 +7004,13 @@ contains the following improvements over it:
 
 @enumerate
 @item Completely redesigned REPL based on Emacs's own full-featured
-  @code{comint.el}
-@item Live code annotations via a new @code{sly-stickers} contrib
+  @code{comint.el}.
+@item Live code annotations via a new @code{sly-stickers} contrib.
 @item Consistent interactive button interface.  Everything can be copied to
   the REPL.
-@item Multiple inspectors with independent history
-@item Regexp-capable @code{M-x sly-apropos}
-@item Contribs are first class SLY citizens and enabled by default
+@item Multiple inspectors with independent history.
+@item Regexp-capable @code{M-x sly-apropos}.
+@item Contribs are first class SLY citizens and enabled by default.
 @item Use ASDF to loads contribs on demand.
 @end enumerate
 
@@ -6938,6 +7018,75 @@ SLY tracks SLIME's bugfixes and all its familiar features (debugger, inspector,
 xref, etc...) are still available, but with better integration.")
       (license license:gpl3+))))
 
+(define-public emacs-sly-quicklisp
+  (let ((commit "01ebe3976a244309f2e277c09206831135a0b66c")
+        (revision "1"))
+    (package
+      (name "emacs-sly-quicklisp")
+      (version (git-version "0.0.0" revision commit))
+      (home-page "https://github.com/joaotavora/sly-quicklisp")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url home-page)
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1vfqmvayf35g6y3ljsm3rlzv5jm50qikhh4lv2zkkswj6gkkb1cv"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-sly" ,emacs-sly)))
+      (arguments
+       `(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
+         #:phases
+         ;; The package provides autoloads.
+         (modify-phases %standard-phases
+           (delete 'make-autoloads))))
+      (synopsis "Quicklisp support for SLY")
+      (description
+       "@command{sly-quicklisp} is an external contrib for SLY that provides a
+sly-quickload command that prompts the user for a package to install. ")
+      (license license:gpl3+))))
+
+(define-public emacs-sly-asdf
+  (let ((commit "355739e42c91b9b2339f84453292b938b6d17b0d")
+        (revision "1"))
+    (package
+      (name "emacs-sly-asdf")
+      (version (git-version "0.1.0" revision commit))
+      (home-page "https://github.com/mmgeorge/sly-asdf")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url home-page)
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1plkqh4dj35c3cf8ykan8fcvqmxcdqragh4j6xg0sls27mjjz1bq"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-sly" ,emacs-sly)))
+      (arguments
+       `(#:include (cons* "\\.lisp$" "\\.asd$" %default-include)
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-autoload
+             ;; TODO: Reported upstream: https://github.com/mmgeorge/sly-asdf/pull/11
+             (lambda _
+               (substitute* "sly-asdf.el"
+                 (("\\(add-to-list 'sly-contribs 'sly-asdf 'append\\)")
+                  "(with-eval-after-load 'sly
+ (add-to-list 'sly-contribs 'sly-asdf 'append))")))))))
+      (synopsis "ASDF contrib for SLY")
+      (description
+       "@command{sly-asdf} is an external contrib for SLY that provides
+additional support for working with ASDF projects.")
+      (license license:gpl3+))))
+
 (define-public emacs-lua-mode
   (let ((commit "95c64bb5634035630e8c59d10d4a1d1003265743")
         (revision "2"))
@@ -7009,11 +7158,11 @@ extensions.")
     (license license:gpl3+)))
 
 (define-public emacs-evil-collection
-  (let ((commit "986ca7eb0b75eccd843bdad2f7fdb48f4ca6ac22")
-        (revision "10"))
+  (let ((commit "bf4200a57c81c2302a3bf5b2058d74c6f90a3e6c")
+        (revision "11"))
     (package
       (name "emacs-evil-collection")
-      (version (git-version "0.0.2" revision commit))
+      (version (git-version "0.0.3" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -7022,10 +7171,13 @@ extensions.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "172sx5w50x5wrs5w0sb6rkbj3q22s7mmsnk4c6pwknhbz3vwlvwz"))))
+                  "01xw0m5gj14ly42y8ikvldpab5my28sylf6l9gvwd5cf909bd445"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-evil" ,emacs-evil)))
+       `(("emacs-evil" ,emacs-evil)
+         ("emacs-annalist" ,emacs-annalist)))
+      (arguments
+       `(#:include (cons* "^modes\\/" %default-include)))
       (home-page "https://github.com/emacs-evil/evil-collection")
       (synopsis "Collection of Evil bindings for many major and minor modes")
       (description "This is a collection of Evil bindings for the parts of
@@ -9996,25 +10148,32 @@ It supports dired buffers and opens them in tree mode at destination.")
     (license license:gpl3+)))
 
 (define-public emacs-tiny
-  (package
-    (name "emacs-tiny")
-    (version "0.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "http://elpa.gnu.org/packages/tiny-" version ".tar"))
-       (sha256
-        (base32
-         "1cr73a8gba549ja55x0c2s554f3zywf69zbnd7v82jz5q1k9wd2v"))))
-    (build-system emacs-build-system)
-    (home-page "https://github.com/abo-abo/tiny")
-    (synopsis "Quickly generate linear ranges in Emacs")
-    (description
-     "The main command of the @code{tiny} extension for Emacs is @code{tiny-expand}.
+  (let ((commit "fd8a6b0b0c564d8242259e20e557ee6041f40908")
+        (revision "1"))
+    (package
+      (name "emacs-tiny")
+      (version (git-version "0.2.1" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/abo-abo/tiny.git")
+               (commit commit)))
+         (sha256
+          (base32
+           "1498j392ap2mk4zmsm2id16pfgvj78r428da9vw7hdrzzibai2cx"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:tests? #t
+         #:test-command '("make" "test")))
+      (home-page "https://github.com/abo-abo/tiny")
+      (synopsis "Quickly generate linear ranges in Emacs")
+      (description
+       "The main command of the @code{tiny} extension for Emacs is @code{tiny-expand}.
 It is meant to quickly generate linear ranges, e.g. 5, 6, 7, 8.  Some elisp
 proficiency is an advantage, since you can transform your numeric range with
 an elisp expression.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-emojify
   (package
@@ -10652,20 +10811,22 @@ navigation with the grails mode.")
   (deprecated-package "groovy-emacs-modes" emacs-groovy-modes))
 
 (define-public emacs-org-tree-slide
-  (let ((commit "dff8f1a4a64c8dd0a1fde0b0131e2fe186747134")
-        (revision "0"))
+  (let ((commit "036a36eec1cf712d3db155572aed325daa372eb5")
+        (revision "2"))
     (package
       (name "emacs-org-tree-slide")
-      (version (git-version "0.1" revision commit))
-      (home-page "https://github.com/takaxp/org-tree-slide")
+      (version (git-version "2.8.4" revision commit))
       (source (origin
                 (method git-fetch)
-                (uri (git-reference (url home-page) (commit commit)))
+                (uri (git-reference
+                      (url "https://github.com/takaxp/org-tree-slide.git")
+                      (commit commit)))
                 (sha256
                  (base32
-                  "153bg0x7ypla11pq51jmsgzfjklwwnrq56xgpbfhk1j16xwz9hyf"))
+                  "1r8ncx25xmxicgciyv5przp68y8qgy40fm10ba55awvql4xcm0yk"))
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
+      (home-page "https://github.com/takaxp/org-tree-slide")
       (synopsis "Presentation tool for org-mode")
       (description
        "Org-tree-slide provides a slideshow mode to view org-mode files.  Use
@@ -11007,12 +11168,13 @@ to with quicklink-style selections.")
     (version "0.8")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://stable.melpa.org/packages/deft-"
-                           version ".el"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jrblevin/deft.git")
+             (commit (string-append "v" version))))
        (sha256
         (base32
-         "1vb9cjxskc7c0yyf9pvxy1fzypg1vrcgwnjz0m3hslinsgdyig58"))))
+         "0z7cilgiz6krvl5h2z72hkch43qxmypb0k6p5vxn5lx1p6v0mrf2"))))
     (build-system emacs-build-system)
     (home-page "https://jblevins.org/projects/deft/")
     (synopsis "Quickly browse, filter, and edit plain text notes")
@@ -11065,25 +11227,27 @@ region of the buffer, while the latter works on rectangular selections.")
     (license license:gpl3+)))
 
 (define-public emacs-emmet-mode
-  (package
-    (name "emacs-emmet-mode")
-    (version "1.0.8")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/smihica/emmet-mode.git")
-                     (commit version)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1dsa85bk33j90h1ypaz1ylqh9yp2xvlga237h3kwa5y3sb0d5ydi"))))
-    (build-system emacs-build-system)
-    (home-page "https://github.com/smihica/emmet-mode")
-    (synopsis "Unofficial Emmet's support for Emacs")
-    (description
-     "Unfold CSS-selector-like expressions to markup.  It is intended to be
+  (let ((commit "1acb821e0142136344ccf40c1e5fb664d7db2e70")
+        (revision "1"))
+    (package
+      (name "emacs-emmet-mode")
+      (version (git-version "1.0.8" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/smihica/emmet-mode.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1p25h191bm0h5b3w5apg7wks51k7pb7h4dlww4jbl9ri4d33fzcl"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/smihica/emmet-mode")
+      (synopsis "Unofficial Emmet's support for Emacs")
+      (description
+       "Unfold CSS-selector-like expressions to markup.  It is intended to be
 used with SGML-like languages: XML, HTML, XHTML, XSL, etc.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-ergoemacs-mode
   (let ((commit "3ce23bba3cb50562693860f87f3528c471d603ba")
@@ -11340,31 +11504,33 @@ object @code{nil} corresponds 1:1 with @code{NULL} in the database.")
     (license license:gpl3+)))
 
 (define-public emacs-closql
-  (package
-    (name "emacs-closql")
-    (version "1.0.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/emacscollective/closql.git")
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32
-         "1xhpfjjkjqfc1k2rj77cscclz5r7gpvv3hi202x178vdcpipjwar"))))
-    (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-emacsql" ,emacs-emacsql)))
-    (home-page "https://github.com/emacscollective/closql")
-    (synopsis "Store EIEIO objects using EmacSQL")
-    (description
-     "This package allows to store uniform EIEIO objects in an EmacSQL
+  ;; Take a commit newer than 1.0.0 release because of Emacs upgrade to 26.3.
+  (let ((commit "70b98dbae53611d10a461d9b4a6f71086910dcef"))
+    (package
+      (name "emacs-closql")
+      (version (git-version "1.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/emacscollective/closql.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1wvhrihg663f61yzc7f0vha2abjdnlwbk0gjcwakdfk1bhwf5ikh"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-emacsql" ,emacs-emacsql)))
+      (home-page "https://github.com/emacscollective/closql")
+      (synopsis "Store EIEIO objects using EmacSQL")
+      (description
+       "This package allows to store uniform EIEIO objects in an EmacSQL
 database.  SQLite is used as backend.  This library imposes some restrictions
 on what kind of objects can be stored; it isn't intended to store arbitrary
 objects.  All objects have to share a common superclass and subclasses cannot
 add any additional instance slots.")
-    (license license:gpl3)))
+      (license license:gpl3))))
 
 (define-public emacs-epkg
   ;; The release version is to old for the current database scheme.
@@ -11602,8 +11768,8 @@ as well as functions for navigating between these headings.")
 
 (define-public emacs-org-super-agenda
   ;; emacs-org-sidebar depends on a newer commit than the latest release version.
-  (let ((commit "f0ee7ed9766d352d16a787707d35695b48cbf153")
-        (revision "2"))
+  (let ((commit "a87ca11fbbe72ab6c1c4c3b55ae9e1e93ebfb8ba")
+        (revision "3"))
     (package
       (name "emacs-org-super-agenda")
       (version (git-version "1.1.1" revision commit))
@@ -11615,7 +11781,7 @@ as well as functions for navigating between these headings.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1b1qi96x83acv2frl94i4frx46i82vipaa8mfwpzyj2gyq2bq5zf"))))
+                  "08b7babdaqblb6jff57an4kbcxk6fkhf668620fipfjgbsnqv3ff"))))
       (build-system emacs-build-system)
       (propagated-inputs
        `(("emacs-org" ,emacs-org)
@@ -11737,34 +11903,50 @@ according to a parsing expression grammar.")
     (license license:gpl3+)))
 
 (define-public emacs-org-ql
-  (package
-    (name "emacs-org-ql")
-    (version "0.2.1")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/alphapapa/org-ql")
-                    (commit version)))
-              (sha256
-               (base32
-                "1xyabg9fhpip6426za6wjrn0msnaf10c5fzzaawwagk7zmjf9b48"))
-              (file-name (git-file-name name version))))
-    (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-s" ,emacs-s)
-       ("emacs-ts" ,emacs-ts)
-       ("emacs-org" ,emacs-org)
-       ("emacs-dash" ,emacs-dash)))
-    (native-inputs
-     `(("emacs-buttercup" ,emacs-buttercup)))
-    (arguments
-     `(#:tests? #t
-       #:test-command '("buttercup" "-L" ".")))
-    (home-page "https://github.com/alphapapa/org-ql/")
-    (synopsis "Query language for Org buffers")
-    (description "This package provides a Lispy query language for Org
+  (let ((commit "949a06c3ab50482b749fd2d4350837a197660d96")
+        (revision "3"))
+    (package
+      (name "emacs-org-ql")
+      (version (git-version "0.3.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/alphapapa/org-ql")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0apcg63xm0242mjgsgw0jrcda4p4iqj7fy3sgh0p7khi4hrs5ch0"))
+                (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-s" ,emacs-s)
+         ("emacs-f" ,emacs-f)
+         ("emacs-ov" ,emacs-ov)
+         ("emacs-peg" ,emacs-peg)
+         ("emacs-org-super-agenda" ,emacs-org-super-agenda)
+         ("emacs-ts" ,emacs-ts)
+         ("emacs-org" ,emacs-org)
+         ("emacs-helm" ,emacs-helm)
+         ("emacs-helm-org" ,emacs-helm-org)
+         ("emacs-dash" ,emacs-dash)))
+      (native-inputs
+       `(("emacs-buttercup" ,emacs-buttercup)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'require-helm
+             (lambda _
+               (substitute* "helm-org-ql.el"
+                 (("^;;;; Requirements")
+                  ";;;; Requirements\n(require 'helm)\n(require 'helm-org)"))
+               #t)))
+         #:tests? #t
+         #:test-command '("buttercup" "-L" ".")))
+      (home-page "https://github.com/alphapapa/org-ql/")
+      (synopsis "Query language for Org buffers")
+      (description "This package provides a Lispy query language for Org
 files, allowing for actions to be performed based on search criteria.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-org-auto-expand
   (let ((commit "4938d5f6460e2f8f051ba9ac000b291bfa43ef62")
@@ -13508,8 +13690,8 @@ perform regression test for packages that provide font-lock rules.")
       (license license:gpl3+))))
 
 (define-public emacs-racket-mode
-  (let ((commit "5300aa004f08535c3fac99f1af78462f129aca81")
-        (revision "3"))
+  (let ((commit "2a9a102a097d04fbcd2a443fec84078036c2e277")
+        (revision "4"))
     (package
       (name "emacs-racket-mode")
       (version (git-version "0.0.2" revision commit))
@@ -13522,7 +13704,7 @@ perform regression test for packages that provide font-lock rules.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "1gkpm4fl1ybsm9qqgrkwyjbd9znddy438x266k27fs90lkxrfray"))))
+           "1n71dxxh62jixq20b5haapv651dxc0zyrxpl1d0yqsg8ncp726bl"))))
       (build-system emacs-build-system)
       (arguments
        `(#:include '("\\.el$" "\\.rkt$")))
@@ -14599,45 +14781,46 @@ try completing.  See @code{fish-completion-fallback-on-bash-p}.")
     (license license:gpl3+)))
 
 (define-public emacs-gif-screencast
-  (let ((commit "12b25442b97b84abae74ecb5190a9d14ff7cfe5a"))
+  (let ((commit "248d1e158405e6cba2c65ecaed40e2c59b089cd8")
+        (revision "2"))
     (package
       (name "emacs-gif-screencast")
-      (version (git-version "20180616" "1" commit))
+      (version (git-version "1.0" revision commit))
       (source
        (origin
-         (method url-fetch)
-         (uri (string-append
-               "https://gitlab.com/Ambrevar/emacs-gif-screencast/"
-               "repository/archive.tar.gz?ref="
-               commit))
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.com/Ambrevar/emacs-gif-screencast.git")
+               (commit commit)))
          (sha256
           (base32
-           "0lc457i78xjkn5idr2aaiadkh76zcsksj84z0qh80a9y775syrgh"))))
+           "19xqi5mgalnnhb4hw0fh7py2s2dllldx1xxbhwhknkdpifai8hl8"))))
       (build-system emacs-build-system)
       (inputs
        `(("scrot" ,scrot)
          ("imagemagick" ,imagemagick)
          ("gifsicle" ,gifsicle)))
-     (arguments
-      `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((scrot (assoc-ref inputs "scrot"))
-                   (imagemagick (assoc-ref inputs "imagemagick"))
-                   (gifsicle (assoc-ref inputs "gifsicle")))
-               ;; Specify the absolute file names of the various
-               ;; programs so that everything works out-of-the-box.
-               (emacs-substitute-variables
-                   "gif-screencast.el"
-                 ("gif-screencast-program"
-                  (string-append scrot "/bin/scrot"))
-                 ("gif-screencast-convert-program"
-                  (string-append imagemagick "/bin/convert"))
-                 ("gif-screencast-cropping-program"
-                  (string-append imagemagick "/bin/mogrify"))
-                 ("gif-screencast-optimize-program"
-                  (string-append gifsicle "/bin/gifsicle")))))))))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'configure
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((scrot (assoc-ref inputs "scrot"))
+                     (imagemagick (assoc-ref inputs "imagemagick"))
+                     (gifsicle (assoc-ref inputs "gifsicle")))
+                 (make-file-writable "gif-screencast.el")
+                 ;; Specify the absolute file names of the various
+                 ;; programs so that everything works out-of-the-box.
+                 (emacs-substitute-variables
+                     "gif-screencast.el"
+                   ("gif-screencast-program"
+                    (string-append scrot "/bin/scrot"))
+                   ("gif-screencast-convert-program"
+                    (string-append imagemagick "/bin/convert"))
+                   ("gif-screencast-cropping-program"
+                    (string-append imagemagick "/bin/mogrify"))
+                   ("gif-screencast-optimize-program"
+                    (string-append gifsicle "/bin/gifsicle")))))))))
       (home-page
        "https://gitlab.com/Ambrevar/emacs-gif-screencast")
       (synopsis "One-frame-per-action GIF recording")
@@ -15203,8 +15386,8 @@ Pandoc, the document-conversion tool.")
     (license license:bsd-3)))
 
 (define-public emacs-ccls
-  (let ((commit "9061ebbf9d5ec3ee7e88dbd226c77017cf0447b1")
-        (revision "2"))
+  (let ((commit "b1acc336f27d8a3bbc750c2dc3be915a4ac1afea")
+        (revision "3"))
     (package
       (name "emacs-ccls")
       (version (git-version "0.1" revision commit))
@@ -15217,7 +15400,7 @@ Pandoc, the document-conversion tool.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "106jh25ivq0ydiz37p51agk5zbpai7fv91pwn6dpqzsq5g281ls7"))))
+           "1qgfxc5d1hb32ks1fxpx7agpw7dvnkz99wydlflc9fqq75g8v142"))))
       (build-system emacs-build-system)
       (propagated-inputs
        `(("emacs-dash" ,emacs-dash)
@@ -15546,11 +15729,11 @@ few (like NOTE).")
 
 (define-public emacs-git-annex
   ;; Unreleased version has a fontification fix.
-  (let ((commit "ebdb44aef1883f1b2b8058e05d30fb9315b03707")
-        (revision "1"))
+  (let ((commit "1324d3f23c534fe79391a2c256bb8803054e383b")
+        (revision "2"))
     (package
       (name "emacs-git-annex")
-      (version (string-append "1.1-" revision "." (string-take commit 8)))
+      (version (git-version "1.1" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -15560,7 +15743,7 @@ few (like NOTE).")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "1mzv40gj7k10h7h5s43my8msgzjpj680qprqa9pp8nbyhl49v3wh"))))
+           "1lfky2nsrlndlbvk6vwbswnvbvkz1sxgg0n3r5q6xykdkjym0lrh"))))
       (build-system emacs-build-system)
       (home-page "https://github.com/jwiegley/git-annex-el")
       (synopsis "Emacs integration for git-annex")
@@ -16196,9 +16379,45 @@ other frame parameters.")
       (home-page "https://github.com/bookest/arduino-mode")
       (license license:gpl3+))))
 
+(define-public emacs-annalist
+  (let ((commit "e0601539c9ac0171a684ea3ff6266d215d1d08e6")
+        (revision "1"))
+    (package
+      (name "emacs-annalist")
+      (version (git-version "1.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/noctuid/annalist.el.git")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "10bmimdzpi6cql4sb2hbgdvrza83xbac50bi9qng4z662pfnlaam"))
+                (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (native-inputs
+       `(("emacs-buttercup" ,emacs-buttercup)
+         ("emacs-lispy" ,emacs-lispy)
+         ("emacs-evil" ,emacs-evil)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'check 'fix-makefile
+             (lambda _
+               (substitute* "Makefile"
+                 (("cask exec ") ""))
+               #t)))
+         #:tests? #t
+         #:test-command '("make" "test")))
+      (home-page "https://github.com/noctuid/annalist.el")
+      (synopsis "Record and display information with Org headings and tables")
+      (description "This package allows for keybindings, settings, hooks, and
+advice to be recorded and displayed.")
+      (license license:gpl3+))))
+
 (define-public emacs-general
-  (let ((commit "f032c3a77079487d0ea563b17ee3e5b2fb084611")
-        (revision "2"))
+  (let ((commit "f38fb2294bd29261374b772f765730f2fa168b3e")
+        (revision "3"))
     (package
       (name "emacs-general")
       (version (git-version "0" revision commit))
@@ -16209,9 +16428,24 @@ other frame parameters.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "0lgh5z17ag5wvvnqwagvam29cp1n1vd50amn6df02xln80bsbllx"))
+                  "1aqi5axkwfng6rm52sblf738c7rffp10sqs69dvkh2fv3ps8q28i"))
                 (file-name (git-file-name name version))))
       (build-system emacs-build-system)
+      (native-inputs
+       `(("emacs-buttercup" ,emacs-buttercup)
+         ("emacs-evil" ,emacs-evil)
+         ("emacs-which-key" ,emacs-which-key)
+         ("emacs-use-package" ,emacs-use-package)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'check 'fix-makefile
+             (lambda _
+               (substitute* "Makefile"
+                 (("cask exec ") ""))
+               #t)))
+         #:tests? #t
+         #:test-command '("make" "test")))
       (home-page "https://github.com/noctuid/general.el")
       (synopsis "More convenient key definitions in emacs")
       (description "@code{general.el} provides a more convenient method for
@@ -17062,6 +17296,85 @@ command\", but because it always involves at least two commands (a prefix and
 a suffix) we prefer to call it just a \"transient\".")
       (license license:gpl3+))))
 
+(define-public emacs-forge
+  (let ((commit "a6721c071226ae8da6852e9330f2bdcba92a4577"))
+    (package
+      (name "emacs-forge")
+      (version (git-version "0.1.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/magit/forge.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1gzr1di29a9szkzm6kjznq7c8md71cm5761pznf08nmmk63dl3zm"))))
+      (build-system gnu-build-system)
+      (native-inputs
+       `(("texinfo" ,texinfo)
+         ("emacs" ,emacs-minimal)))
+      (propagated-inputs
+       `(("emacs-closql" ,emacs-closql)
+         ("emacs-dash" ,emacs-dash)
+         ("emacs-emacsql-sqlite" ,emacs-emacsql)
+         ("emacs-ghub" ,emacs-ghub)
+         ("emacs-let-alist" ,emacs-let-alist)
+         ("emacs-magit" ,emacs-magit)
+         ("emacs-markdown-mode" ,emacs-markdown-mode)
+         ("emacs-transient" ,emacs-transient)))
+      (arguments
+       `(#:tests? #f ;no tests
+         #:modules ((srfi srfi-26)
+                    (guix build gnu-build-system)
+                    ((guix build emacs-build-system) #:prefix emacs:)
+                    (guix build utils)
+                    (guix build emacs-utils))
+         #:imported-modules (,@%gnu-build-system-modules
+                             (guix build emacs-build-system)
+                             (guix build emacs-utils))
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (delete 'install)
+           (add-after 'unpack 'delete-doc-targets
+             (lambda _
+               (substitute* "./Makefile"
+                 (("lisp docs") "lisp"))))
+           (add-after 'delete-doc-targets 'emacs-set-emacs-load-path
+             (assoc-ref emacs:%standard-phases 'set-emacs-load-path))
+           (add-after 'emacs-set-emacs-load-path 'chdir-lisp
+             (lambda _
+               (chdir "lisp")))
+           (add-after 'chdir-lisp 'emacs-install
+             (assoc-ref emacs:%standard-phases 'install))
+           (add-after 'emacs-install 'emacs-make-autoloads
+             (assoc-ref emacs:%standard-phases 'make-autoloads))
+           (add-after 'build 'install-elc
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (el-dir (string-append
+                               out "/share/emacs/site-lisp/guix.d/forge-"
+                               ,version)))
+                 (for-each (cut install-file <> el-dir)
+                           (find-files "." "\\.elc"))
+                 #t)))
+           (add-after 'install-elc 'install-doc
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (info (string-append out "/share/info")))
+                 (with-directory-excursion "../docs"
+                   (invoke "makeinfo" "forge.texi")
+                   (install-file "forge.info" info)
+                   #t)))))))
+      (home-page "https://github.com/magit/ghub/")
+      (synopsis "Access Git forges from Magit")
+      (description
+       "Work with Git forges, such as Github and Gitlab, from the comfort of
+Magit and the rest of Emacs.")
+      (license license:gpl3+))))
+
 (define-public emacs-matcha
   (let ((commit "c7df5cf5cdac9ae369e241342389ccda0205eab9"))
     (package
@@ -18742,6 +19055,34 @@ JIRA issue servers.")
 keybindings for skipping from host section to host section.")
       (license license:gpl3+))))
 
+(define-public emacs-ssh-agency
+  (package
+    (name "emacs-ssh-agency")
+    (version "0.4")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/magit/ssh-agency.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0895n7bss4wdydic1gflr03f2cwdyqywl16gvb599lpn288jhwvz"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("dash" ,emacs-dash)))
+    (home-page "https://github.com/magit/ssh-agency")
+    (synopsis "Manage @code{ssh-agent} from Emacs")
+    (description
+     "This package provides functions to startup @code{ssh-agent}, set the
+needed environment variables in Emacs, and prompt for passphrases from within
+Emacs so that pushes and pulls from @code{magit} will not require entering any
+passphrase.
+
+It can also be useful on Unix-like platforms to delay having to enter your
+passphrase until the first time you push to a remote.")
+    (license license:gpl3+)))
+
 (define-public emacs-tao-theme
   (let ((commit "c5107fbe7e752f4e58c2d2147ff18a1ebb12937c")
         (revision "0"))