From 7c7581012399ffce0a7c8655385a6be8c2775899 Mon Sep 17 00:00:00 2001 From: Lucas Sta Maria Date: Thu, 20 Jul 2023 18:25:33 -0700 Subject: [PATCH] refactor: organize emacs config Signed-off-by: Lucas Sta Maria --- .config/ambit/config.ambit | 11 +- .emacs.d/include/general.el | 60 +++++++++++ .emacs.d/include/misc.el | 36 +++++++ .emacs.d/include/mu4econfig.el | 42 ++++++++ .emacs.d/include/orgconfig.el | 52 ++++++++++ .emacs.d/include/racket.el | 14 +++ .emacs.d/init.el | 180 ++------------------------------- 7 files changed, 220 insertions(+), 175 deletions(-) create mode 100644 .emacs.d/include/general.el create mode 100644 .emacs.d/include/misc.el create mode 100644 .emacs.d/include/mu4econfig.el create mode 100644 .emacs.d/include/orgconfig.el create mode 100644 .emacs.d/include/racket.el diff --git a/.config/ambit/config.ambit b/.config/ambit/config.ambit index 2d63beb..7b3a646 100644 --- a/.config/ambit/config.ambit +++ b/.config/ambit/config.ambit @@ -44,7 +44,16 @@ ]; .config/bspwm/bspwmrc; .config/sxhkd/sxhkdrc; -.emacs.d/init.el; +.emacs.d/[ + init.el, + include/[ + general.el, + misc.el, + orgconfig.el, + mu4econfig.el, + racket.el + ] +]; .config/picom.conf; .config/zathura/zathurarc; .config/dunst/dunstrc; diff --git a/.emacs.d/include/general.el b/.emacs.d/include/general.el new file mode 100644 index 0000000..dfafaa5 --- /dev/null +++ b/.emacs.d/include/general.el @@ -0,0 +1,60 @@ +;;; general.el --- General configuration settings. +;;; Commentary: +;; General configuration for Emacs. +;;; Code: + +(require 'nano-theme) + +(setq inhibit-startup-message t + visible-bell nil) + +;; Backups +(setq make-backup-files nil) +(rassq-delete-all 'auto-save-mode auto-mode-alist) + +;; UI +(menu-bar-mode -1) +(tool-bar-mode -1) +(scroll-bar-mode -1) + +;; Line +(global-display-line-numbers-mode 1) +(hl-line-mode -1) +(setq line-number-mode t) +(setq column-number-mode t) + +;; Tabs +(setq-default tab-width 2) + +;; Cursor +(blink-cursor-mode 1) + +;; Font +(defvar font-size 10) +(defvar font-family "JetBrains Mono SemiBold") +(set-frame-font (format "%s %d" font-family font-size)) + +;; Use spaces instead of tabs +(setq-default indent-tabs-mode nil) + +;; Column width +(setq fill-column 80) + +;; Directional window moving +(windmove-default-keybindings) + +;; Auto file refresh +(global-auto-revert-mode t) + +;; Theme +(add-to-list 'custom-theme-load-path "~/.emacs.d/themes") +(load-theme 'nano t) +(nano-light) + +;; Keybindings +(global-set-key (kbd "C-M-j") (lambda () (interactive) (scroll-up 1))) +(global-set-key (kbd "C-M-k") (lambda () (interactive) (scroll-down 1))) + + +(provide 'general) +;;; general.el ends here diff --git a/.emacs.d/include/misc.el b/.emacs.d/include/misc.el new file mode 100644 index 0000000..4addcc6 --- /dev/null +++ b/.emacs.d/include/misc.el @@ -0,0 +1,36 @@ +;;; misc.el --- Miscellaneous configuration for packages. +;;; Commentary: +;; Miscellaneous configuration for packages. If a package doesn't +;; necessarily require its own configuration file (its configuration could be +;; short), then it belongs here. +;;; Code: + +(require 'git-gutter) +(require 'elfeed) + +;; Git Gutter +(global-git-gutter-mode +1) + +;; Elfeed +(setq elfeed-feeds + '(("https://edwardwibowo.com/rss.xml" blog) + ("https://priime.dev/feed.xml" blog) + ("https://fasterthanli.me/index.xml" blog) + ("https://blog.cleancoder.com/atom.xml" blog))) + +;; Bind Magit +(global-set-key (kbd "C-c g g") 'magit) + +;; Web configuration +(add-to-list 'auto-mode-alist '("\\.jsx?$" . web-mode)) +(setq web-mode-content-types-alist '(("jsx" . "\\.js[x]?\\"))) +(setq web-mode-markup-indent-offset 2) + +;; Rust LSP configuration +(setq lsp-rust-analyzer-cargo-watch-enable t) +(setq lsp-rust-analyzer-cargo-watch-command "clippy") +(setq lsp-rust-analyzer-server-display-inlay-hints t) +(setq lsp-rust-analyzer-inlay-hints-mode t) + +(provide 'misc) +;;; misc.el ends here diff --git a/.emacs.d/include/mu4econfig.el b/.emacs.d/include/mu4econfig.el new file mode 100644 index 0000000..589caa1 --- /dev/null +++ b/.emacs.d/include/mu4econfig.el @@ -0,0 +1,42 @@ +;;; mu4econfig.el --- Configuration for mu4e. +;;; Commentary: +;; Configuration for mu4e. +;;; Code: + +(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e") +(require 'mu4e) + +(setq + mue4e-headers-skip-duplicates t + mu4e-view-show-images t + mu4e-view-show-addresses t + mu4e-compose-format-flowed nil + mu4e-date-format "%Y-%m-%d" + mu4e-headers-date-format "%Y-%m-%d" + mu4e-change-filenames-when-moving t + mu4e-attachments-dir "~/Downloads" + + mu4e-maildir "~/mail" ;; top-level Maildir + ;; note that these folders below must start with / + ;; the paths are relative to maildir root + mu4e-refile-folder "/Archive" + mu4e-sent-folder "/Sent" + mu4e-drafts-folder "/Drafts" + mu4e-trash-folder "/Trash") + +;; this setting allows to re-sync and re-index mail +;; by pressing U +(setq mu4e-get-mail-command "mbsync -a") + +(setq + message-send-mail-function 'smtpmail-send-it + smtpmail-default-smtp-server "smtp.fastmail.com" + smtpmail-smtp-server "smtp.fastmail.com") + +(setq user-full-name "Lucas Sta Maria") +(setq user-mail-address "lucas@priime.dev") +(setq smtpmail-smtp-service 587) + + +(provide 'mu4econfig) +;;; mu4econfig.el ends here diff --git a/.emacs.d/include/orgconfig.el b/.emacs.d/include/orgconfig.el new file mode 100644 index 0000000..40cbcbc --- /dev/null +++ b/.emacs.d/include/orgconfig.el @@ -0,0 +1,52 @@ +;;; orgconfig.el --- Configuration for org-mode. +;;; Commentary: +;; Configuration for org-mode. +;;; Code: + +(require 'org) +(require 'org-capture) +(setq org-hide-emphasis-markers t) +(setcar (nthcdr 4 org-emphasis-regexp-components) 20) +(org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components) +(setq org-agenda-files '("~/org/inbox.org" + "~/org/gtd.org" + "~/org/tickler.org")) +(setq org-capture-templates '(("t" "Todo [inbox]" entry + (file+headline "~/org/inbox.org" "Tasks") + "* TODO %i%?") + ("T" "Tickler" entry + (file+headline "~/org/tickler.org" "Tickler") + "* %i%? \n %U"))) +(setq org-refile-targets '(("~/org/gtd.org" :maxlevel . 3) + ("~/org/someday.org" :level . 1) + ("~/org/tickler.org" :maxlevel . 2))) +(global-set-key (kbd "C-c a") #'org-agenda) +(global-set-key (kbd "C-c c") #'org-capture) +(setq org-todo-keywords '((sequence "TODO(t)" "WAITING(w)" "|" "DONE(d)" "CANCELLED(c)"))) + +;; Enable Racket in Org-mode Babel +(org-babel-do-load-languages + 'org-babel-load-languages + '((racket . t))) + +(defmacro η (fnc) + "Return function that ignores its arguments and invokes FNC." + `(lambda (&rest _rest) + (funcall ,fnc))) + +;; Auto-save org buffers +(advice-add 'org-deadline :after (η #'org-save-all-org-buffers)) +(advice-add 'org-schedule :after (η #'org-save-all-org-buffers)) +(advice-add 'org-store-log-note :after (η #'org-save-all-org-buffers)) +(advice-add 'org-todo :after (η #'org-save-all-org-buffers)) +(advice-add 'org-refile :after (η #'org-save-all-org-buffers)) +(advice-add 'org-sort :after (η #'org-save-all-org-buffers)) + +;; Org hooks +(add-hook 'org-agenda-mode-hook + (lambda () + (add-hook 'auto-save-hook 'org-save-all-org-buffers nil t) + (auto-save-mode))) + +(provide 'orgconfig) +;;; orgconfig.el ends here diff --git a/.emacs.d/include/racket.el b/.emacs.d/include/racket.el new file mode 100644 index 0000000..6d50f33 --- /dev/null +++ b/.emacs.d/include/racket.el @@ -0,0 +1,14 @@ +;;; racket.el --- Configuration for Racket. +;;; Commentary: +;; Configuration for Racket and Racket-based languages, including Pollen. +;;; Code: + +(add-to-list 'load-path (expand-file-name "lisp/pollen-mode" user-emacs-directory)) +(autoload 'pollen-mode "pollen" "A major mode for the pollen preprocessor." t) + +;; Recognize pollen filetypes +(setq auto-mode-alist (cons '("\\.pp$" . racket-mode) auto-mode-alist)) +(setq auto-mode-alist (cons '("\\.pm$" . racket-mode) auto-mode-alist)) + +(provide 'racket) +;;; racket.el ends here diff --git a/.emacs.d/init.el b/.emacs.d/init.el index 9635476..52dc78e 100644 --- a/.emacs.d/init.el +++ b/.emacs.d/init.el @@ -46,162 +46,14 @@ (straight-use-package '(nano-theme :type git :host github :repo "rougier/nano-theme")) -(add-to-list 'load-path (expand-file-name "lisp/pollen-mode" user-emacs-directory)) +(add-to-list 'load-path "~/.emacs.d/include") (add-to-list 'load-path (expand-file-name "lisp/" user-emacs-directory)) -(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e") -(autoload 'pollen-mode "pollen" "A major mode for the pollen preprocessor." t) -;; ====== Configuration ====================== - -(setq inhibit-startup-message t - visible-bell nil) - -;; Backups -(setq make-backup-files nil) -(rassq-delete-all 'auto-save-mode auto-mode-alist) - -;; UI -(menu-bar-mode -1) -(tool-bar-mode -1) -(scroll-bar-mode -1) - -;; Line -(global-display-line-numbers-mode 1) -(hl-line-mode -1) -(setq line-number-mode t) -(setq column-number-mode t) - -;; Tabs -(setq-default tab-width 2) - -;; Cursor -(blink-cursor-mode 1) - -;; Font -(defvar font-size 10) -(defvar font-family "JetBrains Mono SemiBold") -(set-frame-font (format "%s %d" font-family font-size)) - -;; Use spaces instead of tabs -(setq-default indent-tabs-mode nil) - -;; Directional window moving -(windmove-default-keybindings) - -;; Auto file refresh -(global-auto-revert-mode t) - -;; Git Gutter -(global-git-gutter-mode +1) - -;; Elfeed -(setq elfeed-feeds - '(("https://edwardwibowo.com/rss.xml" blog) - ("https://priime.dev/feed.xml" blog) - ("https://fasterthanli.me/index.xml" blog) - ("https://blog.cleancoder.com/atom.xml" blog))) - -;; Theme -(add-to-list 'custom-theme-load-path "~/.emacs.d/themes") -(load-theme 'nano t) -(nano-light) - -;; ====== Org Mode =========================== - -(require 'org) -(require 'org-capture) -(setq org-hide-emphasis-markers t) -(setcar (nthcdr 4 org-emphasis-regexp-components) 20) -(org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components) -(setq org-agenda-files '("~/org/inbox.org" - "~/org/gtd.org" - "~/org/tickler.org")) -(setq org-capture-templates '(("t" "Todo [inbox]" entry - (file+headline "~/org/inbox.org" "Tasks") - "* TODO %i%?") - ("T" "Tickler" entry - (file+headline "~/org/tickler.org" "Tickler") - "* %i%? \n %U"))) -(setq org-refile-targets '(("~/org/gtd.org" :maxlevel . 3) - ("~/org/someday.org" :level . 1) - ("~/org/tickler.org" :maxlevel . 2))) -(global-set-key (kbd "C-c a") #'org-agenda) -(global-set-key (kbd "C-c c") #'org-capture) -(setq org-todo-keywords '((sequence "TODO(t)" "WAITING(w)" "|" "DONE(d)" "CANCELLED(c)"))) - -;; Enable Racket in Org-mode Babel -(org-babel-do-load-languages - 'org-babel-load-languages - '((racket . t))) - -(defmacro η (fnc) - "Return function that ignores its arguments and invokes FNC." - `(lambda (&rest _rest) - (funcall ,fnc))) - -;; Auto-save org buffers -(advice-add 'org-deadline :after (η #'org-save-all-org-buffers)) -(advice-add 'org-schedule :after (η #'org-save-all-org-buffers)) -(advice-add 'org-store-log-note :after (η #'org-save-all-org-buffers)) -(advice-add 'org-todo :after (η #'org-save-all-org-buffers)) -(advice-add 'org-refile :after (η #'org-save-all-org-buffers)) -(advice-add 'org-sort :after (η #'org-save-all-org-buffers)) - -;; ====== mu4e =============================== - -(require 'mu4e) - -(setq - mue4e-headers-skip-duplicates t - mu4e-view-show-images t - mu4e-view-show-addresses t - mu4e-compose-format-flowed nil - mu4e-date-format "%Y-%m-%d" - mu4e-headers-date-format "%Y-%m-%d" - mu4e-change-filenames-when-moving t - mu4e-attachments-dir "~/Downloads" - - mu4e-maildir "~/mail" ;; top-level Maildir - ;; note that these folders below must start with / - ;; the paths are relative to maildir root - mu4e-refile-folder "/Archive" - mu4e-sent-folder "/Sent" - mu4e-drafts-folder "/Drafts" - mu4e-trash-folder "/Trash") - -;; this setting allows to re-sync and re-index mail -;; by pressing U -(setq mu4e-get-mail-command "mbsync -a") - -(setq - message-send-mail-function 'smtpmail-send-it - smtpmail-default-smtp-server "smtp.fastmail.com" - smtpmail-smtp-server "smtp.fastmail.com") - -(setq user-full-name "Lucas Sta Maria") -(setq user-mail-address "lucas@priime.dev") -(setq smtpmail-smtp-service 587) - -(require 'mu4e-dashboard) - -;; ====== Keybindings ======================== - -(global-set-key (kbd "C-c g g") 'magit) -(global-set-key (kbd "C-M-j") (lambda () (interactive) (scroll-up 1))) -(global-set-key (kbd "C-M-k") (lambda () (interactive) (scroll-down 1))) - -;; ====== Filetypes ========================== - -(setq auto-mode-alist (cons '("\\.pp$" . racket-mode) auto-mode-alist)) -(setq auto-mode-alist (cons '("\\.pm$" . racket-mode) auto-mode-alist)) -(add-to-list 'auto-mode-alist '("\\.jsx?$" . web-mode)) -(setq web-mode-content-types-alist '(("jsx" . "\\.js[x]?\\"))) -(setq web-mode-markup-indent-offset 2) - -(setq lsp-rust-analyzer-cargo-watch-enable t) -(setq lsp-rust-analyzer-cargo-watch-command "clippy") -(setq lsp-rust-analyzer-server-display-inlay-hints t) -(setq lsp-rust-analyzer-inlay-hints-mode t) +(load-library "general") +(load-library "misc") +(load-library "orgconfig") +(load-library "mu4econfig") +(load-library "racket") ;; ====== Hooks ============================== (add-hook 'after-init-hook 'global-company-mode) @@ -218,29 +70,9 @@ (add-hook 'racket-mode-hook 'paredit-mode) (add-hook 'clojure-mode-hook 'paredit-mode) -;(add-hook 'racket-mode-hook 'lsp-racket-enable) - (add-hook 'lsp-mode 'lsp-ui-mode) (add-hook 'python-mode 'lsp-mode) (add-hook 'rust-mode 'lsp-rust) (add-hook 'racket-mode-hook 'racket-xp-mode) - -(add-hook 'org-agenda-mode-hook - (lambda () - (add-hook 'auto-save-hook 'org-save-all-org-buffers nil t) - (auto-save-mode))) - -(custom-set-variables - ;; custom-set-variables was added by Custom. - ;; If you edit it by hand, you could mess it up, so be careful. - ;; Your init file should contain only one such instance. - ;; If there is more than one, they won't work right. - '(fill-column 80)) -(custom-set-faces - ;; custom-set-faces was added by Custom. - ;; If you edit it by hand, you could mess it up, so be careful. - ;; Your init file should contain only one such instance. - ;; If there is more than one, they won't work right. - )