From 0d3c0b9d9cbfe3a121753135dda4b80a79dd8138 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Tue, 25 Apr 2023 12:59:21 +0100 Subject: (Emacs)~split literate config into separate file --- Emacs/.config/emacs/elisp/literate.el | 89 +++++++++++++++++++++++++++++++++++ Emacs/.config/emacs/init.el | 42 ++--------------- 2 files changed, 93 insertions(+), 38 deletions(-) create mode 100644 Emacs/.config/emacs/elisp/literate.el (limited to 'Emacs/.config') 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 +;; 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 . + +;;; 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 diff --git a/Emacs/.config/emacs/init.el b/Emacs/.config/emacs/init.el index a210b5c..6c4257d 100644 --- a/Emacs/.config/emacs/init.el +++ b/Emacs/.config/emacs/init.el @@ -48,49 +48,15 @@ (straight-use-package 'use-package) ;;; Load literate +(load-file (concat user-emacs-directory "elisp/literate.el")) -;; Setup directories and constants -(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)) - -;; 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 files...") - (mapc #'(lambda (file) (byte-compile-file file)) +literate/output-files) - (message "Files byte-compiled")) - -;; Killing Emacs hook +;; Compile on Emacs quit (add-hook 'kill-emacs-hook #'+literate/compile-config) -(unless (+literate/output-files-exist) - (+literate/compile-config)) +(if (not (+literate/output-files-exist)) + (+literate/compile-config)) (+literate/load-config) -- cgit v1.2.3-13-gbd6f