From b31053b761971edef7a071a57e06a1c502e15641 Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Sun, 15 Sep 2024 18:58:29 +0200 Subject: [PATCH] modular features framework --- emacs/feature/feature-apitest.el | 11 --- emacs/feature/feature-async.el | 14 --- emacs/feature/feature-base.el | 98 ++++--------------- emacs/feature/feature-better-minibuf.el | 14 +++ emacs/feature/feature-bsgen.el | 12 +++ emacs/feature/feature-completion.el | 14 +++ emacs/feature/feature-consult.el | 51 ++-------- emacs/feature/feature-dev.el | 24 +++++ emacs/feature/feature-diagram.el | 13 +++ emacs/feature/feature-feeds.el | 13 +++ emacs/feature/feature-fuzzy.el | 11 +++ emacs/feature/feature-golang-playground.el | 12 --- emacs/feature/feature-json.el | 14 --- emacs/feature/feature-km.el | 16 +++ emacs/feature/feature-kotlin.el | 13 --- emacs/feature/feature-project.el | 12 +++ emacs/feature/feature-projectile.el | 15 --- emacs/feature/feature-protobuf.el | 14 --- emacs/feature/feature-rego.el | 12 --- emacs/feature/feature-rss.el | 12 --- emacs/feature/feature-vcs.el | 12 +++ emacs/feature/feature-which-key.el | 14 --- emacs/feature/feature-yaml.el | 13 --- emacs/init.el | 70 ++++--------- .../module-alioth.el} | 6 +- emacs/module/module-apitest.el | 11 +++ emacs/module/module-async.el | 14 +++ .../module-automount.el} | 6 +- .../feature-avy.el => module/module-avy.el} | 8 +- emacs/module/module-base.el | 88 +++++++++++++++++ .../module-browser.el} | 10 +- .../module-consult-projectile.el} | 12 +-- emacs/module/module-consult.el | 53 ++++++++++ .../module-ctags.el} | 6 +- .../module-denote-index.el} | 8 +- .../module-denote-multidir.el} | 12 +-- .../module-denote.el} | 10 +- .../module-detached.el} | 8 +- .../module-dired.el} | 8 +- .../module-embark.el} | 8 +- .../module-eshell.el} | 8 +- .../module-eyecandy.el} | 8 +- emacs/module/module-golang-playground.el | 12 +++ .../module-golang.el} | 8 +- .../module-graphviz.el} | 8 +- emacs/module/module-json.el | 14 +++ emacs/module/module-kotlin.el | 13 +++ .../feature-llm.el => module/module-llm.el} | 8 +- .../feature-lmtf.el => module/module-lmtf.el} | 8 +- .../module-magit.el} | 8 +- .../module-multi-cursor.el} | 8 +- .../module-orderless.el} | 8 +- .../module-org-denote.el} | 8 +- .../feature-org.el => module/module-org.el} | 8 +- .../feature-pkg.el => module/module-pkg.el} | 15 ++- .../module-plantuml.el} | 7 +- emacs/module/module-projectile.el | 15 +++ emacs/module/module-protobuf.el | 14 +++ .../module-python.el} | 8 +- emacs/module/module-rego.el | 12 +++ emacs/module/module-rss.el | 12 +++ .../module-scratch.el} | 8 +- .../module-snippets.el} | 8 +- .../module-syntax.el} | 8 +- .../module-vertico.el} | 8 +- .../feature-web.el => module/module-web.el} | 8 +- emacs/module/module-which-key.el | 14 +++ emacs/module/module-yaml.el | 13 +++ 68 files changed, 605 insertions(+), 444 deletions(-) delete mode 100644 emacs/feature/feature-apitest.el delete mode 100644 emacs/feature/feature-async.el create mode 100644 emacs/feature/feature-better-minibuf.el create mode 100644 emacs/feature/feature-bsgen.el create mode 100644 emacs/feature/feature-completion.el create mode 100644 emacs/feature/feature-dev.el create mode 100644 emacs/feature/feature-diagram.el create mode 100644 emacs/feature/feature-feeds.el create mode 100644 emacs/feature/feature-fuzzy.el delete mode 100644 emacs/feature/feature-golang-playground.el delete mode 100644 emacs/feature/feature-json.el create mode 100644 emacs/feature/feature-km.el delete mode 100644 emacs/feature/feature-kotlin.el create mode 100644 emacs/feature/feature-project.el delete mode 100644 emacs/feature/feature-projectile.el delete mode 100644 emacs/feature/feature-protobuf.el delete mode 100644 emacs/feature/feature-rego.el delete mode 100644 emacs/feature/feature-rss.el create mode 100644 emacs/feature/feature-vcs.el delete mode 100644 emacs/feature/feature-which-key.el delete mode 100644 emacs/feature/feature-yaml.el rename emacs/{feature/feature-alioth.el => module/module-alioth.el} (88%) create mode 100644 emacs/module/module-apitest.el create mode 100644 emacs/module/module-async.el rename emacs/{feature/feature-automount.el => module/module-automount.el} (80%) rename emacs/{feature/feature-avy.el => module/module-avy.el} (71%) create mode 100644 emacs/module/module-base.el rename emacs/{feature/feature-browser.el => module/module-browser.el} (73%) rename emacs/{feature/feature-consult-projectile.el => module/module-consult-projectile.el} (84%) create mode 100644 emacs/module/module-consult.el rename emacs/{feature/feature-ctags.el => module/module-ctags.el} (76%) rename emacs/{feature/feature-denote-index.el => module/module-denote-index.el} (95%) rename emacs/{feature/feature-denote-multidir.el => module/module-denote-multidir.el} (91%) rename emacs/{feature/feature-denote.el => module/module-denote.el} (92%) rename emacs/{feature/feature-detached.el => module/module-detached.el} (76%) rename emacs/{feature/feature-dired.el => module/module-dired.el} (84%) rename emacs/{feature/feature-embark.el => module/module-embark.el} (73%) rename emacs/{feature/feature-eshell.el => module/module-eshell.el} (67%) rename emacs/{feature/feature-eyecandy.el => module/module-eyecandy.el} (70%) create mode 100644 emacs/module/module-golang-playground.el rename emacs/{feature/feature-golang.el => module/module-golang.el} (50%) rename emacs/{feature/feature-graphviz.el => module/module-graphviz.el} (51%) create mode 100644 emacs/module/module-json.el create mode 100644 emacs/module/module-kotlin.el rename emacs/{feature/feature-llm.el => module/module-llm.el} (79%) rename emacs/{feature/feature-lmtf.el => module/module-lmtf.el} (66%) rename emacs/{feature/feature-magit.el => module/module-magit.el} (94%) rename emacs/{feature/feature-multi-cursor.el => module/module-multi-cursor.el} (70%) rename emacs/{feature/feature-orderless.el => module/module-orderless.el} (77%) rename emacs/{feature/feature-org-denote.el => module/module-org-denote.el} (77%) rename emacs/{feature/feature-org.el => module/module-org.el} (97%) rename emacs/{feature/feature-pkg.el => module/module-pkg.el} (82%) rename emacs/{feature/feature-plantuml.el => module/module-plantuml.el} (69%) create mode 100644 emacs/module/module-projectile.el create mode 100644 emacs/module/module-protobuf.el rename emacs/{feature/feature-python.el => module/module-python.el} (57%) create mode 100644 emacs/module/module-rego.el create mode 100644 emacs/module/module-rss.el rename emacs/{feature/feature-scratch.el => module/module-scratch.el} (86%) rename emacs/{feature/feature-snippets.el => module/module-snippets.el} (72%) rename emacs/{feature/feature-syntax.el => module/module-syntax.el} (59%) rename emacs/{feature/feature-vertico.el => module/module-vertico.el} (76%) rename emacs/{feature/feature-web.el => module/module-web.el} (56%) create mode 100644 emacs/module/module-which-key.el create mode 100644 emacs/module/module-yaml.el diff --git a/emacs/feature/feature-apitest.el b/emacs/feature/feature-apitest.el deleted file mode 100644 index 75c0573..0000000 --- a/emacs/feature/feature-apitest.el +++ /dev/null @@ -1,11 +0,0 @@ -;;; feature-apitest.el --- Brief description -*- lexical-binding: t; -*- - -;;; Code: - -(require 'feature-pkg) - -(pkg/require 'plz) - -(provide 'feature-apitest) - -;;; feature-apitest.el ends here. diff --git a/emacs/feature/feature-async.el b/emacs/feature/feature-async.el deleted file mode 100644 index cbc5f80..0000000 --- a/emacs/feature/feature-async.el +++ /dev/null @@ -1,14 +0,0 @@ -;;; feature-async.el --- async functionality -*- lexical-binding: t; -*- - -;;; Commentary: - -;;; Code: - -(require 'feature-pkg) - -(pkg/require 'async) -(pkg/require 'async-status) - -(provide 'feature-async) - -;;; feature-async.el ends here. diff --git a/emacs/feature/feature-base.el b/emacs/feature/feature-base.el index cf83116..2ee0c8a 100644 --- a/emacs/feature/feature-base.el +++ b/emacs/feature/feature-base.el @@ -1,91 +1,27 @@ -;;; feature-base.el -- configure emacs behavior and user interface +;;; feature-base.el -- defines the "base" configuration ;;; ;;; Commentary: -;;; Exactly what it looks like. +;;; +;;; This file defines what modules should be loaded as part of the +;;; "basic" editor configuration. ;;; ;;; Code: -(message "Loading base features...") +(require 'module-base) +(require 'module-detached) +(require 'module-dired) +(require 'module-async) +(require 'module-alioth) +(require 'module-which-key) +(require 'module-multi-cursor) +(require 'module-eshell) +(require 'module-scratch) +(require 'module-eyecandy) +(require 'module-avy) +(require 'module-snippets) +(require 'module-browser) -(defun copy-file-path-to-clipboard () - "Copy the current buffer's file path to the clipboard." - (interactive) - (let ((filepath (buffer-file-name))) - (when filepath - (kill-new filepath) - (message "Copied file path: %s" filepath)))) - -(defun my-compile-init-file () - "Compile the init file." - (let ((init-file (file-truename user-init-file))) - (when (string= (buffer-file-name) init-file) - (byte-compile-file init-file)))) - -(defun my/setup-elisp-formatting-key () - "Set up the formatting key for Emacs Lisp buffers." - (local-set-key (kbd "C-c f") 'my/format-elisp-buffer)) -(add-hook 'emacs-lisp-mode-hook #'my/setup-elisp-formatting-key) - -(defun my/reload-init-file () - "Reload the Emacs init file." - (interactive) - (load-file user-init-file)) - -(defun my/format-elisp-buffer () - "Format the whole elisp buffer." - (interactive) - (save-excursion - (indent-region (point-min) (point-max)))) - -(tool-bar-mode -1) -(setq backup-by-copying t - completion-cycle-threshold 3 - create-lockfiles nil - delete-old-versions t - enable-recursive-minibuffers t - focus-follows-mouse t - indent-tabs-mode nil - inhibit-startup-screen t - kept-new-versions 20 - kept-old-versions 2 - minibuffer-prompt-properties '(read-only t cursor-intangible t - face minibuffer-prompt) - mouse-autoselect-window t - read-extended-command-predicate #'command-completion-default-include-p - read-process-output-max (* 1024 1024) - tab-always-indent 'complete - tab-width 4 - use-short-answers t - version-control t - backup-directory-alist `((".*" . ,(concat user-emacs-directory "backup"))) - read-extended-command-predicate #'command-completion-default-include-p - gc-cons-threshold 100000000 - auth-sources '("~/.authinfo.gpg") - warning-minimum-level :emergency - text-mode-ispell-word-completion nil - tramp-persistency-file-name "~/.config/emacs/tramp" - tramp-inline-compress-start-size 1000) - -;; load custom file -(setq custom-file (expand-file-name "custom.el" user-emacs-directory)) -(when (file-exists-p custom-file) - (load custom-file)) - -;; compile init.el on save -(add-hook 'after-save-hook #'my-compile-init-file) - -;; setup base key bindings -(global-set-key (kbd "M-/") 'dabbrev-expand) -(global-set-key (kbd "M-s r") 'replace-regexp) -(global-set-key (kbd "M-s M-r") 'replace-string) -(global-set-key (kbd "C-x E n p") #'narrow-to-page) -(global-set-key (kbd "C-x E n f") #'narrow-to-defun) -(global-set-key (kbd "C-x E n r") #'narrow-to-region) -(global-set-key (kbd "C-x E w") #'widen) -(global-set-key (kbd "C-x c r") #'my/reload-init-file) -(global-set-key (kbd "C-x y b p") 'copy-file-path-to-clipboard) - (provide 'feature-base) ;;; feature-base.el ends here. diff --git a/emacs/feature/feature-better-minibuf.el b/emacs/feature/feature-better-minibuf.el new file mode 100644 index 0000000..a8b49e7 --- /dev/null +++ b/emacs/feature/feature-better-minibuf.el @@ -0,0 +1,14 @@ +;;; feature-better-minibuf.el -- knowledge management +;;; +;;; Commentary: +;;; +;;; Loads modules related to knowledge management. +;;; +;;; Code: + +(require 'module-vertico) +(require 'module-embark) + +(provide 'feature-better-minibuf) + +;;; feature-better-minibuf.el ends here. diff --git a/emacs/feature/feature-bsgen.el b/emacs/feature/feature-bsgen.el new file mode 100644 index 0000000..c2deb06 --- /dev/null +++ b/emacs/feature/feature-bsgen.el @@ -0,0 +1,12 @@ +;;; feature-bsgen.el -- bullshit generators +;;; +;;; Commentary: +;;; +;;; Loads modules related to generating plausible sounding bullshit. +;;; +;;; Code: + +(require 'module-llm) + +(provide 'feature-bsgen) +;;; feature-bsgen.el ends here. diff --git a/emacs/feature/feature-completion.el b/emacs/feature/feature-completion.el new file mode 100644 index 0000000..97036e4 --- /dev/null +++ b/emacs/feature/feature-completion.el @@ -0,0 +1,14 @@ +;;; feature-completion.el -- knowledge management +;;; +;;; Commentary: +;;; +;;; Loads modules related to knowledge management. +;;; +;;; Code: + +(require 'module-orderless) + + +(provide 'feature-completion) + +;;; feature-completion.el ends here. diff --git a/emacs/feature/feature-consult.el b/emacs/feature/feature-consult.el index 1a3b5ba..1dfa6bd 100644 --- a/emacs/feature/feature-consult.el +++ b/emacs/feature/feature-consult.el @@ -1,53 +1,14 @@ -;;; feature-consult.el --- setup consult for emacs +;;; feature-consult.el -- knowledge management +;;; ;;; Commentary: -;;; Setup consult for Emacs. +;;; +;;; Loads modules related to knowledge management. ;;; ;;; Code: -(require 'feature-pkg) -(pkg/require 'consult) - -(setq consult-preview-key nil) - -;; use ripgrep -(setq consult-ripgrep-command "rg --null --line-buffered --color=ansi --max-columns=1000 --no-heading --line-number . -e ARG OPTS") -(setq consult-grep-command "rg --null --line-buffered --color=ansi --max-columns=1000 --no-heading --line-number . -e ARG OPTS") - -;; mode-specific histories -(setq consult-mode-histories - '((comint-mode . comint-input-ring) - (eshell-mode . eshell-history-ring) - (geiser-repl-mode . geiser-repl--history) - (inferior-python-mode . comint-input-ring) - (minibuffer-local-map . consult-history))) - -(consult-customize - consult-theme - :preview-key '(:debounce 0.2 any) - consult-ripgrep consult-git-grep consult-grep - consult-bookmark consult-recent-file consult-xref - consult--source-bookmark consult--source-recent-file - consult--source-project-recent-file - :preview-key '(:debounce 0.4 any)) - -;; async search -(setq consult-async-min-input 2 - consult-async-refresh-delay 0.15 - consult-async-input-throttle 0.2 - consult-async-input-debounce 0.1) - -;; select xref locations with preview -(setq xref-show-xrefs-function #'consult-xref - xref-show-definitions-function #'consult-xref) - -(global-set-key (kbd "C-s") #'consult-line) -(global-set-key (kbd "C-r") #'consult-line-multi) -(global-set-key (kbd "C-c h") #'consult-history) -(global-set-key (kbd "C-c m") #'consult-mode-command) -(global-set-key (kbd "C-c k") #'consult-kmacro) -(global-set-key (kbd "C-c s") #'consult-ripgrep) +(require 'module-consult) +(require 'module-consult-projectile) (provide 'feature-consult) - ;;; feature-consult.el ends here. diff --git a/emacs/feature/feature-dev.el b/emacs/feature/feature-dev.el new file mode 100644 index 0000000..7ce3ddb --- /dev/null +++ b/emacs/feature/feature-dev.el @@ -0,0 +1,24 @@ +;;; feature-dev.el -- knowledge management +;;; +;;; Commentary: +;;; +;;; Loads modules related to knowledge management. +;;; +;;; Code: + +(require 'module-ctags) +(require 'module-golang) +(require 'module-golang-playground) +(require 'module-python) +(require 'module-web) +(require 'module-protobuf) +(require 'module-kotlin) +(require 'module-yaml) +(require 'module-json) +(require 'module-rego) +(require 'module-syntax) +(require 'module-lmtf) +(require 'module-apitest) + +(provide 'feature-dev) +;;; feature-dev.el ends here. diff --git a/emacs/feature/feature-diagram.el b/emacs/feature/feature-diagram.el new file mode 100644 index 0000000..b457f1b --- /dev/null +++ b/emacs/feature/feature-diagram.el @@ -0,0 +1,13 @@ +;;; feature-diagram.el -- diagramming modules +;;; +;;; Commentary: +;;; +;;; Loads modules related to diagramming. +;;; +;;; Code: + +(require 'module-graphviz) +(require 'module-plantuml) + +(provide 'feature-diagram) +;;; feature-diagram.el ends here. diff --git a/emacs/feature/feature-feeds.el b/emacs/feature/feature-feeds.el new file mode 100644 index 0000000..a7ba7f1 --- /dev/null +++ b/emacs/feature/feature-feeds.el @@ -0,0 +1,13 @@ +;;; feature-feeds.el -- knowledge management +;;; +;;; Commentary: +;;; +;;; Loads modules related to knowledge management. +;;; +;;; Code: + +(require 'module-rss) + +(provide 'feature-feeds) + +;;; feature-feeds.el ends here. diff --git a/emacs/feature/feature-fuzzy.el b/emacs/feature/feature-fuzzy.el new file mode 100644 index 0000000..c019eac --- /dev/null +++ b/emacs/feature/feature-fuzzy.el @@ -0,0 +1,11 @@ +;;; feature-fuzzy.el -- fuzzy search +;;; +;;; Commentary: +;;; +;;; Loads modules related to knowledge management. +;;; +;;; Code: + + +(provide 'feature-fuzzy) +;;; feature-fuzzy.el ends here. diff --git a/emacs/feature/feature-golang-playground.el b/emacs/feature/feature-golang-playground.el deleted file mode 100644 index 5968eb5..0000000 --- a/emacs/feature/feature-golang-playground.el +++ /dev/null @@ -1,12 +0,0 @@ -;;; feature-golang-playground.el --- Brief description -*- lexical-binding: t; -*- -;;; Commentary: - -;;; Code: - -(require 'feature-pkg) - -(pkg/require 'go-playground) - -(provide 'feature-golang-playground) - -;;; feature-golang-playground.el ends here. diff --git a/emacs/feature/feature-json.el b/emacs/feature/feature-json.el deleted file mode 100644 index 4b39750..0000000 --- a/emacs/feature/feature-json.el +++ /dev/null @@ -1,14 +0,0 @@ -;;; feature-json.el --- Brief description -*- lexical-binding: t; -*- -;;; Commentary: - -;;; Code: - -(require 'feature-pkg) - -(pkg/require 'json-mode) - -(add-to-list 'auto-mode-alist '("\\.json$" . json-mode)) - -(provide 'feature-json) - -;;; feature-json.el ends here. diff --git a/emacs/feature/feature-km.el b/emacs/feature/feature-km.el new file mode 100644 index 0000000..fcd1877 --- /dev/null +++ b/emacs/feature/feature-km.el @@ -0,0 +1,16 @@ +;;; feature-km.el -- knowledge management +;;; +;;; Commentary: +;;; +;;; Loads modules related to knowledge management. +;;; +;;; Code: + +(require 'module-org) +(require 'module-org-denote) +(require 'module-denote) +(require 'module-denote-multidir) +(require 'module-denote-index) + +(provide 'feature-km) +;;; feature-km.el ends here. diff --git a/emacs/feature/feature-kotlin.el b/emacs/feature/feature-kotlin.el deleted file mode 100644 index 3954015..0000000 --- a/emacs/feature/feature-kotlin.el +++ /dev/null @@ -1,13 +0,0 @@ -;;; feature-kotlin.el --- Brief description -*- lexical-binding: t; -*- -;;; Commentary: - -;;; Code: - -(require 'feature-pkg) -(pkg/require 'kotlin-mode) - -;;(add-to-list 'auto-mode-alist ("\\.kt$" . kotlin-mode)) - -(provide 'feature-kotlin) - -;;; feature-kotlin.el ends here. diff --git a/emacs/feature/feature-project.el b/emacs/feature/feature-project.el new file mode 100644 index 0000000..bd1c5cf --- /dev/null +++ b/emacs/feature/feature-project.el @@ -0,0 +1,12 @@ +;;; feature-project.el -- knowledge management +;;; +;;; Commentary: +;;; +;;; Loads modules related to knowledge management. +;;; +;;; Code: + +(require 'module-projectile) + +(provide 'feature-project) +;;; feature-project.el ends here. diff --git a/emacs/feature/feature-projectile.el b/emacs/feature/feature-projectile.el deleted file mode 100644 index 4460e5c..0000000 --- a/emacs/feature/feature-projectile.el +++ /dev/null @@ -1,15 +0,0 @@ -;;; feature-projectile.el --- project management -;;; Commentary: -;;; Project management for Emacs nerds. -;;; -;;; Code: - -(require 'feature-pkg) -(pkg/require 'projectile) - -(projectile-mode +1) - -(provide 'feature-projectile) - -;;; feature-projectile.el ends here. - diff --git a/emacs/feature/feature-protobuf.el b/emacs/feature/feature-protobuf.el deleted file mode 100644 index ffeccdb..0000000 --- a/emacs/feature/feature-protobuf.el +++ /dev/null @@ -1,14 +0,0 @@ -;;; feature-protobuf.el --- Brief description -*- lexical-binding: t; -*- -;;; Commentary: - -;;; Code: - -(require 'feature-pkg) - -(pkg/require 'protobuf-mode) - -(add-to-list 'auto-mode-alist '("\\.proto$" . protobuf-mode)) - -(provide 'feature-protobuf) - -;;; feature-protobuf.el ends here. diff --git a/emacs/feature/feature-rego.el b/emacs/feature/feature-rego.el deleted file mode 100644 index 68f67d0..0000000 --- a/emacs/feature/feature-rego.el +++ /dev/null @@ -1,12 +0,0 @@ -;;; feature-browser.el --- Brief description -*- lexical-binding: t; -*- -;;; Commentary: - -;;; Code: - -(require 'feature-pkg) - -(pkg/require 'rego-mode) - -(provide 'feature-rego) - -;;; feature-rego.el ends here. diff --git a/emacs/feature/feature-rss.el b/emacs/feature/feature-rss.el deleted file mode 100644 index c958a80..0000000 --- a/emacs/feature/feature-rss.el +++ /dev/null @@ -1,12 +0,0 @@ -;;; feature-orderless.el --- rss feeds in emacs -;;; Commentary: -;;; Read RSS feeds in Emacs, stop browsing the web. -;;; -;;; Code: -(require 'feature-pkg) - -(pkg/require 'elfeed) - -(provide 'feature-rss) - -;;; feature-rss.el ends here. diff --git a/emacs/feature/feature-vcs.el b/emacs/feature/feature-vcs.el new file mode 100644 index 0000000..4bec111 --- /dev/null +++ b/emacs/feature/feature-vcs.el @@ -0,0 +1,12 @@ +;;; feature-vcs.el -- version control systems +;;; +;;; Commentary: +;;; +;;; Loads modules related to version control. +;;; +;;; Code: + +(require 'module-magit) + +(provide 'feature-vcs) +;;; feature-vcs.el ends here. diff --git a/emacs/feature/feature-which-key.el b/emacs/feature/feature-which-key.el deleted file mode 100644 index c376e80..0000000 --- a/emacs/feature/feature-which-key.el +++ /dev/null @@ -1,14 +0,0 @@ -;;; feature-which-key.el --- Brief description -*- lexical-binding: t; -*- -;;; Commentary: - -;;; Code: - -(require 'feature-pkg) - -(pkg/require 'which-key) - -(which-key-mode) - -(provide 'feature-which-key) - -;;; feature-which-key.el ends here. diff --git a/emacs/feature/feature-yaml.el b/emacs/feature/feature-yaml.el deleted file mode 100644 index a480f68..0000000 --- a/emacs/feature/feature-yaml.el +++ /dev/null @@ -1,13 +0,0 @@ -;;; feature-yaml.el --- Brief description -*- lexical-binding: t; -*- -;;; Commentary: - -;;; Code: - -(require 'feature-pkg) -(pkg/require 'yaml-mode) - -(add-to-list 'auto-mode-alist '("\\.yml$" . yaml-mode)) - -(provide 'feature-yaml) - -;;; feature-yaml.el ends here. diff --git a/emacs/init.el b/emacs/init.el index 34816ee..35ed8b7 100644 --- a/emacs/init.el +++ b/emacs/init.el @@ -1,6 +1,13 @@ ;;; init.el --- Emacs configuration entry point ;;; Commentary: -;;; Configure Emacs. +;;; +;;; Configure Emacs. In this configuration, a "module" is a logical +;;; unit of functionality, e.g., org or denote. The "module" consists +;;; of loading and configuring zero or more Emacs packages. The +;;; "feature" layer is designed to allow users to compose modules to +;;; build features. A "feature" defines a larger capability composed +;;; of zero or more modules (noting that a zero-module feature is +;;; noop). ;;; ;;; Code: @@ -14,57 +21,20 @@ ;; setup load paths (add-to-list 'load-path (expand-file-name "cfg" user-emacs-directory)) (add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory)) -(let* ((feature-directory (file-truename (expand-file-name "feature" user-emacs-directory))) - (default-directory feature-directory)) - (add-to-list 'load-path feature-directory) - (normal-top-level-add-subdirs-to-load-path)) +(add-to-list 'load-path (expand-file-name "module" user-emacs-directory)) +(add-to-list 'load-path (expand-file-name "feature" user-emacs-directory)) -;; load base configuration and additional features -(require 'feature-base) ; prep the beast -(require 'feature-pkg) ; this comes right after feature-base -(require 'feature-dired) ; dired stuff -(require 'feature-async) ; asynchronous functions in emacs -(require 'feature-alioth) ; when one computer isn't enough -(require 'feature-which-key) ; memorization is for the birds -(require 'feature-multi-cursor) ; do repeat yourself -(require 'feature-org) ; when markdown isn't good enough -(require 'feature-org-denote) ; denote extensions for org -(require 'feature-ctags) ; a fork for your spaghetti -(require 'feature-detached) ; attachment causes suffering -(require 'feature-denote) ; a second brain -(require 'feature-denote-multidir) ; a third, fourth, ... brain -(require 'feature-denote-index) ; manage second-brain dementia -(require 'feature-eyecandy) ; eye candy (themes, modeline...) -(require 'feature-magit) ; git stuff -(require 'feature-graphviz) ; diagrams for old people -(require 'feature-plantuml) ; diagrams for less-old people -(require 'feature-golang) ; gophers unite -(require 'feature-golang-playground) ; for playing with go code -(require 'feature-python) ; code that eats itself -(require 'feature-web) ; a veritable fucking mess -(require 'feature-protobuf) ; some google messaging shit -(require 'feature-kotlin) ; java for the only mildly insane -(require 'feature-yaml) ; because we all have to deal with it -(require 'feature-json) ; data for argonauts -(require 'feature-rego) ; some policy language we use at work -(require 'feature-syntax) ; track wip, compile into submission -(require 'feature-eshell) ; elisp shell -(require 'feature-scratch) ; extend scratch buffers -(require 'feature-orderless) ; fuzzy search -(require 'feature-vertico) ; better minibuffer -(require 'feature-embark) ; woof! -(require 'feature-consult) ; consult -(require 'feature-projectile) ; project management for nerds -(require 'feature-consult-projectile) ; consult-projectile -(require 'feature-rss) ; web browsing sucks -(require 'feature-llm) ; generate some bullshit -(require 'feature-snippets) ; lazy code generator -(require 'feature-browser) ; when we really have to browse... -(require 'feature-lmtf) ; lispy mctestface -(require 'feature-apitest) ; api testing capabilities -(require 'feature-avy) ; avy for quick jumping +(require 'feature-base) ; prep the beast +(require 'feature-km) ; knowledge management +(require 'feature-better-minibuf) ; better minibuffer +(require 'feature-completion) ; automatic completion +(require 'feature-dev) ; coding +(require 'feature-vcs) ; version control +(require 'feature-diagram) ; diagramming in plain text! +(require 'feature-project) ; project support +(require 'feature-consult) ; consult is its own feature... +(require 'feature-feeds) ; read newsfeeds -;; theme (load-theme 'misterioso) ;;; init.el ends here diff --git a/emacs/feature/feature-alioth.el b/emacs/module/module-alioth.el similarity index 88% rename from emacs/feature/feature-alioth.el rename to emacs/module/module-alioth.el index 45086d8..41927a3 100644 --- a/emacs/feature/feature-alioth.el +++ b/emacs/module/module-alioth.el @@ -1,4 +1,4 @@ -;;; feature-alioth.el --- alioth automount -*- lexical-binding: t; -*- +;;; module-alioth.el --- alioth automount -*- lexical-binding: t; -*- ;;; ;;; Commentary: ;;; Automount alioth on demand. @@ -35,6 +35,6 @@ (expand-file-name default-directory)) (ensure-alioth-mounted)))) -(provide 'feature-alioth) +(provide 'module-alioth) -;;; feature-alioth.el ends here. +;;; module-alioth.el ends here. diff --git a/emacs/module/module-apitest.el b/emacs/module/module-apitest.el new file mode 100644 index 0000000..82c5e67 --- /dev/null +++ b/emacs/module/module-apitest.el @@ -0,0 +1,11 @@ +;;; module-apitest.el --- Brief description -*- lexical-binding: t; -*- + +;;; Code: + +(require 'module-pkg) + +(pkg/require 'plz) + +(provide 'module-apitest) + +;;; module-apitest.el ends here. diff --git a/emacs/module/module-async.el b/emacs/module/module-async.el new file mode 100644 index 0000000..2a3fd1b --- /dev/null +++ b/emacs/module/module-async.el @@ -0,0 +1,14 @@ +;;; module-async.el --- async functionality -*- lexical-binding: t; -*- + +;;; Commentary: + +;;; Code: + +(require 'module-pkg) + +(pkg/require 'async) +(pkg/require 'async-status) + +(provide 'module-async) + +;;; module-async.el ends here. diff --git a/emacs/feature/feature-automount.el b/emacs/module/module-automount.el similarity index 80% rename from emacs/feature/feature-automount.el rename to emacs/module/module-automount.el index db18fed..67f6da0 100644 --- a/emacs/feature/feature-automount.el +++ b/emacs/module/module-automount.el @@ -1,4 +1,4 @@ -;;; feature-alioth.el --- alioth automounts -*- lexical-binding: t; -*- +;;; module-alioth.el --- alioth automounts -*- lexical-binding: t; -*- ;;; Commentary: @@ -21,6 +21,6 @@ (let ((default-directory "~")) (shell-command "sshfs lkn@alioth.uberspace.de:/home/lkn/ ~/alioth"))) -(provide 'feature-alioth) +(provide 'module-alioth) -;;; feature-alioth.el ends here. +;;; module-alioth.el ends here. diff --git a/emacs/feature/feature-avy.el b/emacs/module/module-avy.el similarity index 71% rename from emacs/feature/feature-avy.el rename to emacs/module/module-avy.el index be243a2..ec9a9a4 100644 --- a/emacs/feature/feature-avy.el +++ b/emacs/module/module-avy.el @@ -1,11 +1,11 @@ -;;; feature-avy.el --- package management wrapper -*- lexical-binding: t; -*- +;;; module-avy.el --- package management wrapper -*- lexical-binding: t; -*- ;;; ;;; Commentary: ;;; Provides package management wrappers. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'avy) @@ -18,6 +18,6 @@ (global-set-key (kbd "C-x j w") #'avy-goto-word-1) (global-set-key (kbd "C-x j .") #'avy-resume) -(provide 'feature-avy) +(provide 'module-avy) -;;; feature-avy.el ends here. +;;; module-avy.el ends here. diff --git a/emacs/module/module-base.el b/emacs/module/module-base.el new file mode 100644 index 0000000..ca4e69c --- /dev/null +++ b/emacs/module/module-base.el @@ -0,0 +1,88 @@ +;;; module-base.el -- configure emacs behavior and user interface +;;; +;;; Commentary: +;;; Exactly what it looks like. +;;; +;;; Code: + +(defun copy-file-path-to-clipboard () + "Copy the current buffer's file path to the clipboard." + (interactive) + (let ((filepath (buffer-file-name))) + (when filepath + (kill-new filepath) + (message "Copied file path: %s" filepath)))) + +(defun my-compile-init-file () + "Compile the init file." + (let ((init-file (file-truename user-init-file))) + (when (string= (buffer-file-name) init-file) + (byte-compile-file init-file)))) + +(defun my/setup-elisp-formatting-key () + "Set up the formatting key for Emacs Lisp buffers." + (local-set-key (kbd "C-c f") 'my/format-elisp-buffer)) +(add-hook 'emacs-lisp-mode-hook #'my/setup-elisp-formatting-key) + +(defun my/reload-init-file () + "Reload the Emacs init file." + (interactive) + (load-file user-init-file)) + +(defun my/format-elisp-buffer () + "Format the whole elisp buffer." + (interactive) + (save-excursion + (indent-region (point-min) (point-max)))) + +(tool-bar-mode -1) +(setq backup-by-copying t + completion-cycle-threshold 3 + create-lockfiles nil + delete-old-versions t + enable-recursive-minibuffers t + focus-follows-mouse t + indent-tabs-mode nil + inhibit-startup-screen t + kept-new-versions 20 + kept-old-versions 2 + minibuffer-prompt-properties '(read-only t cursor-intangible t + face minibuffer-prompt) + mouse-autoselect-window t + read-extended-command-predicate #'command-completion-default-include-p + read-process-output-max (* 1024 1024) + tab-always-indent 'complete + tab-width 4 + use-short-answers t + version-control t + backup-directory-alist `((".*" . ,(concat user-emacs-directory "backup"))) + read-extended-command-predicate #'command-completion-default-include-p + gc-cons-threshold 100000000 + auth-sources '("~/.authinfo.gpg") + warning-minimum-level :emergency + text-mode-ispell-word-completion nil + tramp-persistency-file-name "~/.config/emacs/tramp" + tramp-inline-compress-start-size 1000) + +;; load custom file +(setq custom-file (expand-file-name "custom.el" user-emacs-directory)) +(when (file-exists-p custom-file) + (load custom-file)) + +;; compile init.el on save +(add-hook 'after-save-hook #'my-compile-init-file) + +;; setup base key bindings +(global-set-key (kbd "M-/") 'dabbrev-expand) +(global-set-key (kbd "M-s r") 'replace-regexp) +(global-set-key (kbd "M-s M-r") 'replace-string) +(global-set-key (kbd "C-x E n p") #'narrow-to-page) +(global-set-key (kbd "C-x E n f") #'narrow-to-defun) +(global-set-key (kbd "C-x E n r") #'narrow-to-region) +(global-set-key (kbd "C-x E w") #'widen) +(global-set-key (kbd "C-x c r") #'my/reload-init-file) +(global-set-key (kbd "C-x y b p") 'copy-file-path-to-clipboard) + +(provide 'module-base) + +;;; module-base.el ends here. diff --git a/emacs/feature/feature-browser.el b/emacs/module/module-browser.el similarity index 73% rename from emacs/feature/feature-browser.el rename to emacs/module/module-browser.el index 5c41089..e01b6d2 100644 --- a/emacs/feature/feature-browser.el +++ b/emacs/module/module-browser.el @@ -1,11 +1,11 @@ -;;; feature-browser.el --- Brief description -*- lexical-binding: t; -*- +;;; module-browser.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: (require 'eww) -(setq shr-max-image-proportion 0.7) -(setq shr-image-animate nil) +(setq shr-max-image-proportion 0.7) +(setq shr-image-animate nil) (setq browse-url-browser-function 'eww-browse-url) ;; for pages that require JS for some stupid reason... @@ -21,6 +21,6 @@ (define-key eww-mode-map (kbd "C-c o") 'eww-open-in-default-browser) -(provide 'feature-browser) +(provide 'module-browser) -;;; feature-browser.el ends here. +;;; module-browser.el ends here. diff --git a/emacs/feature/feature-consult-projectile.el b/emacs/module/module-consult-projectile.el similarity index 84% rename from emacs/feature/feature-consult-projectile.el rename to emacs/module/module-consult-projectile.el index 183a792..e65a71a 100644 --- a/emacs/feature/feature-consult-projectile.el +++ b/emacs/module/module-consult-projectile.el @@ -1,12 +1,12 @@ -;;; feature-consult-projectile.el --- consult/projectile integration +;;; module-consult-projectile.el --- consult/projectile integration ;;; Commentary: ;;; Integrate consult and projectile. ;;; ;;; Code: -(require 'feature-pkg) -(require 'feature-consult) -(require 'feature-projectile) +(require 'module-pkg) +(require 'module-consult) +(require 'module-projectile) (pkg/require 'consult-projectile) @@ -34,6 +34,6 @@ (define-key projectile-command-map (kbd "/") #'consult-ripgrep) (define-key projectile-command-map (kbd "f") #'my-consult-projectile-find-file) -(provide 'feature-consult-projectile) +(provide 'module-consult-projectile) -;;; feature-consult-projectile.el ends here. +;;; module-consult-projectile.el ends here. diff --git a/emacs/module/module-consult.el b/emacs/module/module-consult.el new file mode 100644 index 0000000..5c078d7 --- /dev/null +++ b/emacs/module/module-consult.el @@ -0,0 +1,53 @@ +;;; module-consult.el --- setup consult for emacs +;;; Commentary: +;;; Setup consult for Emacs. +;;; +;;; Code: + +(require 'module-pkg) +(pkg/require 'consult) + +(setq consult-preview-key nil) + +;; use ripgrep +(setq consult-ripgrep-command "rg --null --line-buffered --color=ansi --max-columns=1000 --no-heading --line-number . -e ARG OPTS") +(setq consult-grep-command "rg --null --line-buffered --color=ansi --max-columns=1000 --no-heading --line-number . -e ARG OPTS") + +;; mode-specific histories +(setq consult-mode-histories + '((comint-mode . comint-input-ring) + (eshell-mode . eshell-history-ring) + (geiser-repl-mode . geiser-repl--history) + (inferior-python-mode . comint-input-ring) + (minibuffer-local-map . consult-history))) + +(consult-customize + consult-theme + :preview-key '(:debounce 0.2 any) + consult-ripgrep consult-git-grep consult-grep + consult-bookmark consult-recent-file consult-xref + consult--source-bookmark consult--source-recent-file + consult--source-project-recent-file + :preview-key '(:debounce 0.4 any)) + +;; async search +(setq consult-async-min-input 2 + consult-async-refresh-delay 0.15 + consult-async-input-throttle 0.2 + consult-async-input-debounce 0.1) + +;; select xref locations with preview +(setq xref-show-xrefs-function #'consult-xref + xref-show-definitions-function #'consult-xref) + +(global-set-key (kbd "C-s") #'consult-line) +(global-set-key (kbd "C-r") #'consult-line-multi) +(global-set-key (kbd "C-c h") #'consult-history) +(global-set-key (kbd "C-c m") #'consult-mode-command) +(global-set-key (kbd "C-c k") #'consult-kmacro) +(global-set-key (kbd "C-c s") #'consult-ripgrep) + + +(provide 'module-consult) + +;;; module-consult.el ends here. diff --git a/emacs/feature/feature-ctags.el b/emacs/module/module-ctags.el similarity index 76% rename from emacs/feature/feature-ctags.el rename to emacs/module/module-ctags.el index f810613..49bb0f1 100644 --- a/emacs/feature/feature-ctags.el +++ b/emacs/module/module-ctags.el @@ -1,4 +1,4 @@ -;;; feature-ctags.el --- Brief description -*- lexical-binding: t; -*- +;;; module-ctags.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: @@ -15,6 +15,6 @@ (global-set-key (kbd "C-x E t") 'generate-tags-for-directory) -(provide 'feature-ctags) +(provide 'module-ctags) -;;; feature-ctags.el ends here. +;;; module-ctags.el ends here. diff --git a/emacs/feature/feature-denote-index.el b/emacs/module/module-denote-index.el similarity index 95% rename from emacs/feature/feature-denote-index.el rename to emacs/module/module-denote-index.el index 2f8948e..98142e3 100644 --- a/emacs/feature/feature-denote-index.el +++ b/emacs/module/module-denote-index.el @@ -1,4 +1,4 @@ -;;; feature-denote-index.el -- index and metadata for denote notes +;;; module-denote-index.el -- index and metadata for denote notes ;;; ;;; Commentary: ;;; Provides a mechanism for maintaining an index of @@ -6,7 +6,7 @@ ;;; ;;; Code: -(require 'feature-denote) +(require 'module-denote) (defvar my/denote-metadata-index-file (concat denote-directory "../denote-metadata.org") "Path to the metadata index file.") @@ -88,6 +88,6 @@ (global-set-key (kbd "C-x n /") #'my/search-denote-notes) -(provide 'feature-denote-index) +(provide 'module-denote-index) -;;; feature-denote-index.el ends here +;;; module-denote-index.el ends here diff --git a/emacs/feature/feature-denote-multidir.el b/emacs/module/module-denote-multidir.el similarity index 91% rename from emacs/feature/feature-denote-multidir.el rename to emacs/module/module-denote-multidir.el index faa3594..91770bf 100644 --- a/emacs/feature/feature-denote-multidir.el +++ b/emacs/module/module-denote-multidir.el @@ -1,13 +1,13 @@ -;;; feature-denote-multidir.el --- denote with multi-dir support +;;; module-denote-multidir.el --- denote with multi-dir support ;;; ;;; Commentary: ;;; Extend denote with support for multiple notes directories. ;;; ;;; Code: -(require 'feature-denote) -(require 'feature-denote-index) -(require 'feature-alioth) ;; depends on alioth for some functions +(require 'module-denote) +(require 'module-denote-index) +(require 'module-alioth) ;; depends on alioth for some functions (defvar my/denote-local-notes-directory "~/notes/") (defvar my/denote-remote-notes-directory "~/alioth/notes/") @@ -73,6 +73,6 @@ (global-set-key (kbd "C-x n d s") #'my/denote-switch-directory) (global-set-key (kbd "C-x n d d") #'my/denote-echo-current-directory) -(provide 'feature-denote-multidir) +(provide 'module-denote-multidir) -;;; feature-denote-multidir.el ends here. +;;; module-denote-multidir.el ends here. diff --git a/emacs/feature/feature-denote.el b/emacs/module/module-denote.el similarity index 92% rename from emacs/feature/feature-denote.el rename to emacs/module/module-denote.el index a27c762..56d43e4 100644 --- a/emacs/feature/feature-denote.el +++ b/emacs/module/module-denote.el @@ -1,12 +1,12 @@ -;;; feature-denote.el --- note taking +;;; module-denote.el --- note taking ;;; ;;; Commentary: ;;; Configure denote for note taking purposes. ;;; ;;; Code: -(require 'feature-pkg) -(require 'feature-dired) +(require 'module-pkg) +(require 'module-dired) (pkg/require 'denote) @@ -48,6 +48,6 @@ (define-key map (kbd "C-x n r f") #'denote-dired-rename-marked-files-using-front-matter)) -(provide 'feature-denote) +(provide 'module-denote) -;;; feature-denote.el ends here. +;;; module-denote.el ends here. diff --git a/emacs/feature/feature-detached.el b/emacs/module/module-detached.el similarity index 76% rename from emacs/feature/feature-detached.el rename to emacs/module/module-detached.el index 6cc9b17..9534053 100644 --- a/emacs/feature/feature-detached.el +++ b/emacs/module/module-detached.el @@ -1,10 +1,10 @@ -;;; feature-detached.el --- dtach for Emacs +;;; module-detached.el --- dtach for Emacs ;;; Commentary: ;;; Setup dtach and Emacs integration. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'detached) @@ -17,7 +17,7 @@ (global-set-key [remap recompile] 'detached-compile-recompile) (global-set-key [remap detached-open-session] 'detached-consult-session) -(provide 'feature-detached) +(provide 'module-detached) -;;; feature-detached.el ends here. +;;; module-detached.el ends here. diff --git a/emacs/feature/feature-dired.el b/emacs/module/module-dired.el similarity index 84% rename from emacs/feature/feature-dired.el rename to emacs/module/module-dired.el index 5dd1db4..cad6185 100644 --- a/emacs/feature/feature-dired.el +++ b/emacs/module/module-dired.el @@ -1,10 +1,10 @@ -;;; feature-dired.el --- dired stuff +;;; module-dired.el --- dired stuff ;;; Commentary: ;;; Configure Dired stuff. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (require 'dired) (pkg/require 'dired-sidebar) @@ -24,6 +24,6 @@ (global-set-key (kbd "") 'dired-sidebar-toggle-sidebar) (define-key dired-mode-map (kbd "C-c d") 'my/dired-duplicate-file) -(provide 'feature-dired) +(provide 'module-dired) -;;; feature-dired.el ends here. +;;; module-dired.el ends here. diff --git a/emacs/feature/feature-embark.el b/emacs/module/module-embark.el similarity index 73% rename from emacs/feature/feature-embark.el rename to emacs/module/module-embark.el index a906a86..e0720bb 100644 --- a/emacs/feature/feature-embark.el +++ b/emacs/module/module-embark.el @@ -1,10 +1,10 @@ -;;; feature-embark.el --- Brief description -*- lexical-binding: t; -*- +;;; module-embark.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'embark) (setq prefix-help-command #'embark-prefix-help-command) @@ -18,6 +18,6 @@ (global-set-key (kbd "C-;") #'embark-dwim) (global-set-key (kbd "C-h B") #'embark-bindings) -(provide 'feature-embark) +(provide 'module-embark) -;;; feature-embark.el ends here. +;;; module-embark.el ends here. diff --git a/emacs/feature/feature-eshell.el b/emacs/module/module-eshell.el similarity index 67% rename from emacs/feature/feature-eshell.el rename to emacs/module/module-eshell.el index 1be1d87..b98c296 100644 --- a/emacs/feature/feature-eshell.el +++ b/emacs/module/module-eshell.el @@ -1,10 +1,10 @@ -;;; feature-eshell.el --- eshell enhancements. +;;; module-eshell.el --- eshell enhancements. ;;; Commentary: ;;; Configure eshell enhancements. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'eshell) (pkg/require 'eshell-autojump) @@ -14,6 +14,6 @@ (global-set-key (kbd "C-") #'eshell-toggle) -(provide 'feature-eshell) +(provide 'module-eshell) -;;; feature-eshell.el ends here. +;;; module-eshell.el ends here. diff --git a/emacs/feature/feature-eyecandy.el b/emacs/module/module-eyecandy.el similarity index 70% rename from emacs/feature/feature-eyecandy.el rename to emacs/module/module-eyecandy.el index 625d451..598f9be 100644 --- a/emacs/feature/feature-eyecandy.el +++ b/emacs/module/module-eyecandy.el @@ -1,9 +1,9 @@ -;;; feature-eyecandy.el --- Brief description -*- lexical-binding: t; -*- +;;; module-eyecandy.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) ;; themes (pkg/require 'acme-theme) @@ -24,6 +24,6 @@ ;; fonts (pkg/require 'unicode-fonts) -(provide 'feature-eyecandy) +(provide 'module-eyecandy) -;;; feature-eyecandy.el ends here. +;;; module-eyecandy.el ends here. diff --git a/emacs/module/module-golang-playground.el b/emacs/module/module-golang-playground.el new file mode 100644 index 0000000..9b4b01a --- /dev/null +++ b/emacs/module/module-golang-playground.el @@ -0,0 +1,12 @@ +;;; module-golang-playground.el --- Brief description -*- lexical-binding: t; -*- +;;; Commentary: + +;;; Code: + +(require 'module-pkg) + +(pkg/require 'go-playground) + +(provide 'module-golang-playground) + +;;; module-golang-playground.el ends here. diff --git a/emacs/feature/feature-golang.el b/emacs/module/module-golang.el similarity index 50% rename from emacs/feature/feature-golang.el rename to emacs/module/module-golang.el index f4e4161..f274fd7 100644 --- a/emacs/feature/feature-golang.el +++ b/emacs/module/module-golang.el @@ -1,15 +1,15 @@ -;;; feature-golang.el --- Brief description -*- lexical-binding: t; -*- +;;; module-golang.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'go-mode) (add-to-list 'auto-mode-alist '("\\.go$" . go-mode)) (add-hook 'before-save-hook #'gofmt-before-save) -(provide 'feature-golang) +(provide 'module-golang) -;;; feature-golang.el ends here. +;;; module-golang.el ends here. diff --git a/emacs/feature/feature-graphviz.el b/emacs/module/module-graphviz.el similarity index 51% rename from emacs/feature/feature-graphviz.el rename to emacs/module/module-graphviz.el index 1ca6304..76f7d58 100644 --- a/emacs/feature/feature-graphviz.el +++ b/emacs/module/module-graphviz.el @@ -1,9 +1,9 @@ -;;; feature-graphviz.el --- Brief description -*- lexical-binding: t; -*- +;;; module-graphviz.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'graphviz-dot-mode) @@ -11,6 +11,6 @@ (org-babel-do-load-languages 'org-babel-load-languages '((dot . t)))) -(provide 'feature-graphviz) +(provide 'module-graphviz) -;;; feature-graphviz.el ends here. +;;; module-graphviz.el ends here. diff --git a/emacs/module/module-json.el b/emacs/module/module-json.el new file mode 100644 index 0000000..f9724d9 --- /dev/null +++ b/emacs/module/module-json.el @@ -0,0 +1,14 @@ +;;; module-json.el --- Brief description -*- lexical-binding: t; -*- +;;; Commentary: + +;;; Code: + +(require 'module-pkg) + +(pkg/require 'json-mode) + +(add-to-list 'auto-mode-alist '("\\.json$" . json-mode)) + +(provide 'module-json) + +;;; module-json.el ends here. diff --git a/emacs/module/module-kotlin.el b/emacs/module/module-kotlin.el new file mode 100644 index 0000000..c209446 --- /dev/null +++ b/emacs/module/module-kotlin.el @@ -0,0 +1,13 @@ +;;; module-kotlin.el --- Brief description -*- lexical-binding: t; -*- +;;; Commentary: + +;;; Code: + +(require 'module-pkg) +(pkg/require 'kotlin-mode) + +;;(add-to-list 'auto-mode-alist ("\\.kt$" . kotlin-mode)) + +(provide 'module-kotlin) + +;;; module-kotlin.el ends here. diff --git a/emacs/feature/feature-llm.el b/emacs/module/module-llm.el similarity index 79% rename from emacs/feature/feature-llm.el rename to emacs/module/module-llm.el index 3f4aab2..14d87ef 100644 --- a/emacs/feature/feature-llm.el +++ b/emacs/module/module-llm.el @@ -1,11 +1,11 @@ -;;; feature-llm.el --- bullshit generators -*- lexical-binding: t; -*- +;;; module-llm.el --- bullshit generators -*- lexical-binding: t; -*- ;;; ;;; Commentary: ;;; Provides interface to bullshit generators. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'ellama) (require 'llm-ollama) @@ -28,6 +28,6 @@ (pkg/require 'org-ai) (add-hook 'org-mode-hook #'org-ai-mode) -(provide 'feature-llm) +(provide 'module-llm) -;;; feature-llm.el ends here. +;;; module-llm.el ends here. diff --git a/emacs/feature/feature-lmtf.el b/emacs/module/module-lmtf.el similarity index 66% rename from emacs/feature/feature-lmtf.el rename to emacs/module/module-lmtf.el index b2978da..f13e639 100644 --- a/emacs/feature/feature-lmtf.el +++ b/emacs/module/module-lmtf.el @@ -1,10 +1,10 @@ -;;; feature-lmtf.el --- Brief description -*- lexical-binding: t; -*- +;;; module-lmtf.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (straight-use-package '(lmtf :type git :host github :repo "lneely/lmtf")) @@ -15,6 +15,6 @@ (define-key emacs-lisp-mode-map (kbd "C-c t r") #'lmtf-show-results)) -(provide 'feature-lmtf) +(provide 'module-lmtf) -;;; feature-lmtf.el ends here. +;;; module-lmtf.el ends here. diff --git a/emacs/feature/feature-magit.el b/emacs/module/module-magit.el similarity index 94% rename from emacs/feature/feature-magit.el rename to emacs/module/module-magit.el index 6a58909..d97e084 100644 --- a/emacs/feature/feature-magit.el +++ b/emacs/module/module-magit.el @@ -1,10 +1,10 @@ -;;; feature-magit.el --- git integration +;;; module-magit.el --- git integration ;;; Commentary: ;;; Setup git integration with Emacs. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'magit) @@ -57,6 +57,6 @@ (define-key my/magit-prefix-map "mm" #'magit-merge) (define-key my/magit-prefix-map "dd" #'magit-diff) -(provide 'feature-magit) +(provide 'module-magit) -;;; feature-magit.el ends here. +;;; module-magit.el ends here. diff --git a/emacs/feature/feature-multi-cursor.el b/emacs/module/module-multi-cursor.el similarity index 70% rename from emacs/feature/feature-multi-cursor.el rename to emacs/module/module-multi-cursor.el index 2027a96..bba2320 100644 --- a/emacs/feature/feature-multi-cursor.el +++ b/emacs/module/module-multi-cursor.el @@ -1,10 +1,10 @@ -;;; feature-multi-cursor.el --- multiple cursors +;;; module-multi-cursor.el --- multiple cursors ;;; Commentary: ;;; Multiple cursor support for Emacs. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'multiple-cursors) (multiple-cursors-mode 1) @@ -14,6 +14,6 @@ (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (global-set-key (kbd "C-x C->") 'mc/mark-all-like-this) -(provide 'feature-multi-cursor) +(provide 'module-multi-cursor) -;;; feature-multi-cursor.el ends here. +;;; module-multi-cursor.el ends here. diff --git a/emacs/feature/feature-orderless.el b/emacs/module/module-orderless.el similarity index 77% rename from emacs/feature/feature-orderless.el rename to emacs/module/module-orderless.el index bbb8e8b..c482e35 100644 --- a/emacs/feature/feature-orderless.el +++ b/emacs/module/module-orderless.el @@ -1,10 +1,10 @@ -;;; feature-orderless.el --- fuzzy search +;;; module-orderless.el --- fuzzy search ;;; Commentary: ;;; Setup fuzzy search for Emacs. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'orderless) (setq completion-styles '(orderless basic) @@ -14,5 +14,5 @@ orderless-matching-styles '(orderless-flex orderless-prefixes orderless-initialism) orderless-component-separator #'orderless-escapable-split-on-space) -(provide 'feature-orderless) -;;; feature-orderless.el ends here. +(provide 'module-orderless) +;;; module-orderless.el ends here. diff --git a/emacs/feature/feature-org-denote.el b/emacs/module/module-org-denote.el similarity index 77% rename from emacs/feature/feature-org-denote.el rename to emacs/module/module-org-denote.el index b076f83..59091ff 100644 --- a/emacs/feature/feature-org-denote.el +++ b/emacs/module/module-org-denote.el @@ -1,10 +1,10 @@ -;;; feature-org-denote.el --- denote extensions for org-mode +;;; module-org-denote.el --- denote extensions for org-mode ;;; Commentary: ;;; Setup org-mode denote extensions. ;;; ;;; Code: -(require 'feature-org) +(require 'module-org) (with-eval-after-load 'denote (defvar denote-org-capture-specifiers) @@ -18,6 +18,6 @@ :kill-buffer t :jump-to-captured t))) -(provide 'feature-org-denote) +(provide 'module-org-denote) -;;; feature-org-denote.el ends here. +;;; module-org-denote.el ends here. diff --git a/emacs/feature/feature-org.el b/emacs/module/module-org.el similarity index 97% rename from emacs/feature/feature-org.el rename to emacs/module/module-org.el index 3f317a7..ab117cb 100644 --- a/emacs/feature/feature-org.el +++ b/emacs/module/module-org.el @@ -1,10 +1,10 @@ -;;; feature-org.el --- org-mode +;;; module-org.el --- org-mode ;;; Commentary: ;;; Setup org-mode for Emacs. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'org) (require 'org) @@ -113,6 +113,6 @@ (global-set-key (kbd "C-x O t") 'my/visit-todo) (global-set-key (kbd "C-x O k") 'my/kill-all-org-agenda-buffers) -(provide 'feature-org) +(provide 'module-org) -;;; feature-org.el ends here. +;;; module-org.el ends here. diff --git a/emacs/feature/feature-pkg.el b/emacs/module/module-pkg.el similarity index 82% rename from emacs/feature/feature-pkg.el rename to emacs/module/module-pkg.el index e471384..76d47ef 100644 --- a/emacs/feature/feature-pkg.el +++ b/emacs/module/module-pkg.el @@ -1,5 +1,16 @@ ;;; feature-pkg.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: +;;; +;;; This feature provides a simple and predictable package management +;;; framework building upon built-in Emacs package management +;;; features. Frameworks like use-package and leaf are nice, but +;;; become difficult to manage and debug over time . feature-pkg.el +;;; is the foundation for adding and removing features in this Emacs +;;; configuration. +;;; +;;; Note that feature-pkg does not explicitly need to be required in +;;; the main Emacs config, as it will be loaded as a dependency by +;;; each feature. ;;; Code: @@ -76,6 +87,6 @@ If NOERROR is non-nil, don't signal an error if the file is not found." (eval-after-load (car (last ',packages)) '(pkg/run-after-packages-load ',packages ,@body)))) -(provide 'feature-pkg) +(provide 'module-pkg) -;;; feature-pkg.el ends here. +;;; module-pkg.el ends here. diff --git a/emacs/feature/feature-plantuml.el b/emacs/module/module-plantuml.el similarity index 69% rename from emacs/feature/feature-plantuml.el rename to emacs/module/module-plantuml.el index 02f524a..9dd5bad 100644 --- a/emacs/feature/feature-plantuml.el +++ b/emacs/module/module-plantuml.el @@ -1,8 +1,9 @@ -;;; feature-plantuml.el --- Brief description -*- lexical-binding: t; -*- +;;; module-plantuml.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: +(require 'module-pkg) (pkg/require 'plantuml-mode) @@ -15,6 +16,6 @@ (org-babel-do-load-languages 'org-babel-load-languages '((plantuml . t)))) -(provide 'feature-plantuml) +(provide 'module-plantuml) -;;; feature-plantuml.el ends here. +;;; module-plantuml.el ends here. diff --git a/emacs/module/module-projectile.el b/emacs/module/module-projectile.el new file mode 100644 index 0000000..106e7b1 --- /dev/null +++ b/emacs/module/module-projectile.el @@ -0,0 +1,15 @@ +;;; module-projectile.el --- project management +;;; Commentary: +;;; Project management for Emacs nerds. +;;; +;;; Code: + +(require 'module-pkg) +(pkg/require 'projectile) + +(projectile-mode +1) + +(provide 'module-projectile) + +;;; module-projectile.el ends here. + diff --git a/emacs/module/module-protobuf.el b/emacs/module/module-protobuf.el new file mode 100644 index 0000000..baae39e --- /dev/null +++ b/emacs/module/module-protobuf.el @@ -0,0 +1,14 @@ +;;; module-protobuf.el --- Brief description -*- lexical-binding: t; -*- +;;; Commentary: + +;;; Code: + +(require 'module-pkg) + +(pkg/require 'protobuf-mode) + +(add-to-list 'auto-mode-alist '("\\.proto$" . protobuf-mode)) + +(provide 'module-protobuf) + +;;; module-protobuf.el ends here. diff --git a/emacs/feature/feature-python.el b/emacs/module/module-python.el similarity index 57% rename from emacs/feature/feature-python.el rename to emacs/module/module-python.el index d5e9732..8d13bbe 100644 --- a/emacs/feature/feature-python.el +++ b/emacs/module/module-python.el @@ -1,9 +1,9 @@ -;;; feature-python.el --- Brief description -*- lexical-binding: t; -*- +;;; module-python.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'python-mode) (pkg/require 'python-environment) @@ -11,6 +11,6 @@ (add-to-list 'auto-mode-alist '("\\.py$" . python-mode)) (add-to-list 'auto-mode-alist '("BUILD\\'" . python-mode)) -(provide 'feature-python) +(provide 'module-python) -;;; feature-python.el ends here. +;;; module-python.el ends here. diff --git a/emacs/module/module-rego.el b/emacs/module/module-rego.el new file mode 100644 index 0000000..a4965fd --- /dev/null +++ b/emacs/module/module-rego.el @@ -0,0 +1,12 @@ +;;; module-browser.el --- Brief description -*- lexical-binding: t; -*- +;;; Commentary: + +;;; Code: + +(require 'module-pkg) + +(pkg/require 'rego-mode) + +(provide 'module-rego) + +;;; module-rego.el ends here. diff --git a/emacs/module/module-rss.el b/emacs/module/module-rss.el new file mode 100644 index 0000000..429ef61 --- /dev/null +++ b/emacs/module/module-rss.el @@ -0,0 +1,12 @@ +;;; module-orderless.el --- rss feeds in emacs +;;; Commentary: +;;; Read RSS feeds in Emacs, stop browsing the web. +;;; +;;; Code: +(require 'module-pkg) + +(pkg/require 'elfeed) + +(provide 'module-rss) + +;;; module-rss.el ends here. diff --git a/emacs/feature/feature-scratch.el b/emacs/module/module-scratch.el similarity index 86% rename from emacs/feature/feature-scratch.el rename to emacs/module/module-scratch.el index 8100459..70ba597 100644 --- a/emacs/feature/feature-scratch.el +++ b/emacs/module/module-scratch.el @@ -1,10 +1,10 @@ -;;; feature-scratch.el --- scratch buffer enhancements +;;; module-scratch.el --- scratch buffer enhancements ;;; Commentary: ;;; Scratch buffer enhancements for Emacs. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'scratch) (pkg/require 'persistent-scratch) @@ -29,6 +29,6 @@ (global-set-key (kbd "C-c s") #'persistent-scratch-save) (global-set-key (kbd "C-c r") #'persistent-scratch-restore) -(provide 'feature-scratch) +(provide 'module-scratch) -;;; feature-scratch.el ends here. +;;; module-scratch.el ends here. diff --git a/emacs/feature/feature-snippets.el b/emacs/module/module-snippets.el similarity index 72% rename from emacs/feature/feature-snippets.el rename to emacs/module/module-snippets.el index c869c52..9ef70da 100644 --- a/emacs/feature/feature-snippets.el +++ b/emacs/module/module-snippets.el @@ -1,11 +1,11 @@ -;;; feature-snippets.el --- Brief description -*- lexical-binding: t; -*- +;;; module-snippets.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'yasnippet) (pkg/require 'yasnippet-snippets) @@ -20,6 +20,6 @@ (add-hook 'prog-mode-hook #'yas-minor-mode) (add-hook 'org-mode-hook #'yas-minor-mode) -(provide 'feature-snippets) +(provide 'module-snippets) -;;; feature-snippets.el ends here. +;;; module-snippets.el ends here. diff --git a/emacs/feature/feature-syntax.el b/emacs/module/module-syntax.el similarity index 59% rename from emacs/feature/feature-syntax.el rename to emacs/module/module-syntax.el index 4046cda..35b9731 100644 --- a/emacs/feature/feature-syntax.el +++ b/emacs/module/module-syntax.el @@ -1,10 +1,10 @@ -;;; feature-syntax.el --- syntax related stuff +;;; module-syntax.el --- syntax related stuff ;;; Commentary: ;;; Configure syntax-related settings. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'fic-mode) (pkg/require 'flycheck) @@ -12,6 +12,6 @@ (global-flycheck-mode) (setq flycheck-emacs-lisp-load-path 'inherit) -(provide 'feature-syntax) +(provide 'module-syntax) -;;; feature-syntax.el ends here. +;;; module-syntax.el ends here. diff --git a/emacs/feature/feature-vertico.el b/emacs/module/module-vertico.el similarity index 76% rename from emacs/feature/feature-vertico.el rename to emacs/module/module-vertico.el index 108347c..eda45b5 100644 --- a/emacs/feature/feature-vertico.el +++ b/emacs/module/module-vertico.el @@ -1,10 +1,10 @@ -;;; feature-vertico.el --- better minibuffer +;;; module-vertico.el --- better minibuffer ;;; Commentary: ;;; Better minibuffer for Emacs. ;;; ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'vertico) @@ -21,5 +21,5 @@ (define-key vertico-map (kbd "C-q") #'vertico-quick-insert) (define-key vertico-map (kbd "M-q") #'vertico-quick-exit)) -(provide 'feature-vertico) -;;; feature-vertico.el ends here. +(provide 'module-vertico) +;;; module-vertico.el ends here. diff --git a/emacs/feature/feature-web.el b/emacs/module/module-web.el similarity index 56% rename from emacs/feature/feature-web.el rename to emacs/module/module-web.el index 3c47a86..5a59090 100644 --- a/emacs/feature/feature-web.el +++ b/emacs/module/module-web.el @@ -1,9 +1,9 @@ -;;; feature-web.el --- Brief description -*- lexical-binding: t; -*- +;;; module-web.el --- Brief description -*- lexical-binding: t; -*- ;;; Commentary: ;;; Code: -(require 'feature-pkg) +(require 'module-pkg) (pkg/require 'mmm-mode) (pkg/require 'multi-web-mode) @@ -12,6 +12,6 @@ (add-to-list 'auto-mode-alist '("\\.php$" . php-mode)) -(provide 'feature-web) +(provide 'module-web) -;;; feature-web.el ends here. +;;; module-web.el ends here. diff --git a/emacs/module/module-which-key.el b/emacs/module/module-which-key.el new file mode 100644 index 0000000..4eb7752 --- /dev/null +++ b/emacs/module/module-which-key.el @@ -0,0 +1,14 @@ +;;; module-which-key.el --- Brief description -*- lexical-binding: t; -*- +;;; Commentary: + +;;; Code: + +(require 'module-pkg) + +(pkg/require 'which-key) + +(which-key-mode) + +(provide 'module-which-key) + +;;; module-which-key.el ends here. diff --git a/emacs/module/module-yaml.el b/emacs/module/module-yaml.el new file mode 100644 index 0000000..45fe669 --- /dev/null +++ b/emacs/module/module-yaml.el @@ -0,0 +1,13 @@ +;;; module-yaml.el --- Brief description -*- lexical-binding: t; -*- +;;; Commentary: + +;;; Code: + +(require 'module-pkg) +(pkg/require 'yaml-mode) + +(add-to-list 'auto-mode-alist '("\\.yml$" . yaml-mode)) + +(provide 'module-yaml) + +;;; module-yaml.el ends here.