modular features framework

This commit is contained in:
Levi Neely 2024-09-15 18:58:29 +02:00
parent aeebec61e1
commit b31053b761
68 changed files with 605 additions and 444 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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 "<f12>") '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.

View File

@ -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.

View File

@ -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-<escape>") #'eshell-toggle)
(provide 'feature-eshell)
(provide 'module-eshell)
;;; feature-eshell.el ends here.
;;; module-eshell.el ends here.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.