diff options
author | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-04-25 12:59:21 +0100 |
---|---|---|
committer | Aryadev Chavali <aryadev@aryadevchavali.com> | 2023-04-25 12:59:21 +0100 |
commit | 0d3c0b9d9cbfe3a121753135dda4b80a79dd8138 (patch) | |
tree | 48a168aee92e33f3869bc7b8503bd59fc058a241 /Emacs/.config/emacs/elisp | |
parent | 0adb872fafdb58d7115994ced8e7233bc3de9733 (diff) | |
download | dotfiles-0d3c0b9d9cbfe3a121753135dda4b80a79dd8138.tar.gz dotfiles-0d3c0b9d9cbfe3a121753135dda4b80a79dd8138.tar.bz2 dotfiles-0d3c0b9d9cbfe3a121753135dda4b80a79dd8138.zip |
(Emacs)~split literate config into separate file
Diffstat (limited to 'Emacs/.config/emacs/elisp')
-rw-r--r-- | Emacs/.config/emacs/elisp/literate.el | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/Emacs/.config/emacs/elisp/literate.el b/Emacs/.config/emacs/elisp/literate.el new file mode 100644 index 0000000..bb34ae9 --- /dev/null +++ b/Emacs/.config/emacs/elisp/literate.el @@ -0,0 +1,89 @@ +;;; literate.el --- My literate configuration setup -*- lexical-binding: t; -*- + +;; Copyright (C) 2023 Aryadev Chavali + +;; Author: Aryadev Chavali <aryadev@aryadevchavali.com> +;; Keywords: + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; + +;;; Code: + +(defun +literate/filter (predicate list) + (if (null list) + nil + (let ((first (car list)) + (tail (cdr list))) + (if (funcall predicate first) + (cons first (+literate/filter predicate tail)) + (+literate/filter predicate tail))))) + +(defconst +literate/org-files (list (concat user-emacs-directory "config.org"))) + +(defconst +literate/output-files + (mapcar #'(lambda (x) (replace-regexp-in-string ".org" ".el" x)) +literate/org-files)) + +(defconst +literate/elisp-files + `(,(concat user-emacs-directory "early-init.el") + ,(concat user-emacs-directory "init.el") + ,@(mapcar #'(lambda (name) (concat user-emacs-directory "elisp/" name)) + ;; Only take .el files + (+literate/filter + (lambda (name) (string= "el" (file-name-extension name))) + (cddr (directory-files (concat user-emacs-directory "elisp/"))))))) + +(defconst +literate/elisp-byte-compiled + `(,@(mapcar #'(lambda (x) (replace-regexp-in-string ".el" ".elc" x)) +literate/output-files) + ,@(mapcar #'(lambda (x) (replace-regexp-in-string ".el" ".elc" x)) +literate/elisp-files))) + +;; Setup predicates and loading + +(defun +literate/--reduce-bool (bools init) + (if (= (length bools) 0) + init + (+literate/--reduce-bool (cdr bools) (and (car bools) init)))) + +(defun +literate/output-files-exist () + "Checks if output files exist, for compilation purposes." + (if (< 1 (length +literate/output-files)) + (+literate/--reduce-bool (mapc #'file-exists-p +literate/output-files) t) + (file-exists-p (car +literate/output-files)))) + +(defun +literate/load-config () + "Load all files in +literate/output-files." + (interactive) + (mapc #'(lambda (x) (load-file x)) +literate/output-files)) + +(autoload #'org-babel-tangle-file "ob-tangle") + +(defun +literate/compile-config () + "Compile all files in +literate/org-files via org-babel-tangle." + (interactive) + (message "Compiling files...") + (mapc #'org-babel-tangle-file +literate/org-files) + (message "Files compiled") + + (message "Byte-compiling literate files...") + (mapc #'(lambda (file) (byte-compile-file file)) +literate/output-files) + (message "Literate files byte-compiled") + (message "Byte compiling init.el, early-init.el, elisp/*") + (mapc #'(lambda (file) (byte-compile-file file)) +literate/elisp-files) + (message "Finishied byte-compiling")) + +(provide 'literate) +;;; literate.el ends here |