Commit 80bd0cee7ec1

Vincent Demeester <vincent@sbr.pm>
2020-02-19 17:20:17
emacs.org: trying somethings…
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 8f4542c
Changed files (1)
emacs.org
@@ -0,0 +1,108 @@
+#+SETUPFILE: ../_setup.org
+#+TITLE: Vincent Demeester's .emacs.d
+
+* Overview
+:PROPERTIES:
+:CUSTOM_ID: h:d95d2079-2aee-4be4-b6bd-d89de96e7033
+:END:
+
+** Canonical links to this document
+:PROPERTIES:
+:CUSTOM_ID: h:0a080da3-bcc6-42a1-83ef-5d1ed6123cc4
+:END:
+
+** What is this
+:PROPERTIES:
+:CUSTOM_ID: h:fa787d18-1a0c-4312-bc07-22318c645daa
+:END:
+
+This is a try at merging [[https://github.com/vdemeester/emacs-config.git][~vdemeester/emacs-config~]] and [[https://github.com/vdemeester/home.git][~vdemeester/home~]] repository by
+having the emacs configuration written in there. Once this is complete,
+[[https://github.com/vdemeester/emacs-config.git][~vdemeester/emacs-config~]] should be archived.
+
+* Nix-ies
+:PROPERTIES:
+:CUSTOM_ID: h:8bc69da9-b49c-4ddd-a6c9-b944aad993a1
+:END:
+
+This is where the magic happens, when using [[https://nixos.org/nix/][~nix~]] or [[https://nixos.org][NixOS]] with [[https://github.com/rycee/home-manager][~home-manager~]]. In a gist
+we will create a set of nix files that tangle, get dependencies and generate the correct
+emacs package with the packages used inside the configuration. This means, if I add a
+=(use-package magit)= in my configuration, and I tangle / re-execute this script(s), I now
+have a new packaged installed as part of my Emacs package. This is *heavily* inspired by
+[[https://matthewbauer.us/bauer/][Matthew Bauer's bauer]] emacs configuration.
+
+** Required lisp libraries
+:PROPERTIES:
+:CUSTOM_ID: h:316fd3ee-ab99-4f01-ba5a-1a91c54bc334
+:END:
+
+We need a way to list packages used in the configuration using ~use-package~. This is
+coming straight from [[https://matthewbauer.us/bauer/][Matthew Bauer's bauer]].
+
+#+begin_src emacs-lisp :tangle ~/.emacs.d/lisp/use-package-list.el
+;;; use-package-list.el --- List use-package declarations in config file
+
+;; Copyright (C) 2017 Matthew Bauer
+
+;; Author: Matthew Bauer <mjbauer95@gmail.com>
+
+;; This file is NOT part of GNU Emacs.
+
+;;; Commentary:
+
+;; ‘ensure’ packages at compile time.
+
+;;; Code:
+
+(require 'json)
+(require 'use-package)
+(require 'package)
+(eval-when-compile
+  (require 'cl))
+
+(defun use-package-list (script)
+  "Count use-package declarations listed in SCRIPT."
+
+  (defvar use-package-list--is-running t)
+  (lexical-let ((use-package-verbose t)
+                (use-package-debug t)
+                (use-package-always-ensure nil)
+                (use-package-always-defer t)
+                (use-package-list--packages nil)
+                (use-package-ensure-function 'ignore))
+    (advice-add 'use-package
+                :before (lambda (name &rest args)
+                          (unless (or (and (member :disabled args)
+                                           (plist-get args :disabled))
+                                      (and (member :ensure args)
+                                           (not (plist-get args :ensure)))
+                                      (and (not (member :ensure args))
+                                           (package-built-in-p name)))
+                            (when (and (member :ensure args)
+                                       (not (eq (plist-get args :ensure) t))
+                                       (symbolp (plist-get args :ensure)))
+                              (setq name (plist-get args :ensure)))
+                            (add-to-list 'use-package-list--packages name))))
+
+    (advice-add 'use-package-handler/:defer
+                :around (lambda (x name keyword arg rest state)
+                          (let ((body (use-package-process-keywords name rest
+                                        (plist-put state :deferred t)))
+                                (name-string (use-package-as-string name)))
+                            (dolist (command
+                                     (delete-dups (plist-get state :commands)))
+                              (fset command (lambda (&rest args))))
+                            body)))
+
+    (advice-add 'use-package-load-name :override #'ignore)
+
+    (load script nil nil t)
+
+    (princ (json-encode use-package-list--packages))
+
+    use-package-list--packages))
+
+(provide 'use-package-list)
+;;; use-package-list.el ends here
+#+end_src