dot-emacs

My emacs dotfiles/config
git clone git://git.ethandl.dev/dot-emacs
Log | Files | Refs

init.el (4174B)


      1 ;; -*- lexical-binding: t; -*-
      2 ;; Start elpaca bootstrap
      3 (defvar elpaca-installer-version 0.12)
      4 (defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
      5 (defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
      6 (defvar elpaca-sources-directory (expand-file-name "sources/" elpaca-directory))
      7 (defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
      8                               :ref nil :depth 1 :inherit ignore
      9                               :files (:defaults "elpaca-test.el" (:exclude "extensions"))
     10                               :build (:not elpaca-activate)))
     11 (let* ((repo  (expand-file-name "elpaca/" elpaca-sources-directory))
     12        (build (expand-file-name "elpaca/" elpaca-builds-directory))
     13        (order (cdr elpaca-order))
     14        (default-directory repo))
     15   (add-to-list 'load-path (if (file-exists-p build) build repo))
     16   (unless (file-exists-p repo)
     17     (make-directory repo t)
     18     (when (<= emacs-major-version 28) (require 'subr-x))
     19     (condition-case-unless-debug err
     20         (if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
     21                   ((zerop (apply #'call-process `("git" nil ,buffer t "clone"
     22                                                   ,@(when-let* ((depth (plist-get order :depth)))
     23                                                       (list (format "--depth=%d" depth) "--no-single-branch"))
     24                                                   ,(plist-get order :repo) ,repo))))
     25                   ((zerop (call-process "git" nil buffer t "checkout"
     26                                         (or (plist-get order :ref) "--"))))
     27                   (emacs (concat invocation-directory invocation-name))
     28                   ((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
     29                                         "--eval" "(byte-recompile-directory \".\" 0 'force)")))
     30                   ((require 'elpaca))
     31                   ((elpaca-generate-autoloads "elpaca" repo)))
     32             (progn (message "%s" (buffer-string)) (kill-buffer buffer))
     33           (error "%s" (with-current-buffer buffer (buffer-string))))
     34       ((error) (warn "%s" err) (delete-directory repo 'recursive))))
     35   (unless (require 'elpaca-autoloads nil t)
     36     (require 'elpaca)
     37     (elpaca-generate-autoloads "elpaca" repo)
     38     (let ((load-source-file-function nil)) (load "./elpaca-autoloads"))))
     39 (add-hook 'after-init-hook #'elpaca-process-queues)
     40 (elpaca `(,@elpaca-order))
     41 ;; End elpaca bootstrap
     42 
     43 ;; For windows hosts, we need to enable `elpaca-no-symlink-mode'
     44 (when (eq system-type 'windows-nt)
     45   (elpaca-no-symlink-mode))
     46 
     47 ;; Installing the latest Org package so that we have live LaTeX previews:
     48 (elpaca '(org :repo "https://code.tecosaur.net/tec/org-mode" :branch "dev"))
     49 
     50 ;; The main literate Emacs config is stored in config.org:
     51 (defvar ethandl/config-fname
     52   (expand-file-name "config.org" user-emacs-directory)
     53   "Fully qualified filename of the literate org config for
     54 Emacs")
     55 
     56 ;; We will also generate platform-specific files in platform-config
     57 (defvar ethandl/platform-config-dir
     58   (expand-file-name "platform-config/" user-emacs-directory)
     59   "Fully qualified path for platform-specific config files")
     60 
     61 ;; Ensuring we have this folder created
     62 (unless (file-directory-p ethandl/platform-config-dir)
     63   (make-directory ethandl/platform-config-dir t))
     64 
     65 ;; Waiting for latest version of Org to install:
     66 (elpaca-wait)
     67 
     68 ;; We want all tangled files to have the lexical binding header:
     69 (defun ethandl/insert-lexical-binding ()
     70   (when (derived-mode-p 'emacs-lisp-mode)
     71     (goto-char (point-min))
     72     (unless (string-match-p "lexical-binding" (buffer-string))
     73       (insert ";; -*- lexical-binding: t -*-\n")
     74       (basic-save-buffer))))
     75 (add-hook 'org-babel-post-tangle-hook #'ethandl/insert-lexical-binding)
     76 
     77 ;; Finally we can tangle the main config
     78 (when (file-readable-p ethandl/config-fname)
     79   (org-babel-load-file ethandl/config-fname))
     80 
     81 (defvar ethandl/custom-file
     82   (expand-file-name "custom.el" user-emacs-directory)
     83   "The filename for the custom file that stores Emacs'
     84 automaticaly generated vars")
     85 
     86 (setq custom-file ethandl/custom-file)
     87 (load custom-file)