2021-03-12 23:39:42 +00:00
|
|
|
|
;;; init.el -*- lexical-binding: t; coding: utf-8-unix -*-
|
2021-02-26 17:31:50 +00:00
|
|
|
|
;; Author: Case Duckworth <acdw@acdw.net>
|
2021-03-01 05:58:57 +00:00
|
|
|
|
;; Created: Sometime during Covid-19, 2020
|
2021-02-26 17:31:50 +00:00
|
|
|
|
;; Keywords: configuration
|
2021-03-08 04:14:38 +00:00
|
|
|
|
;; URL: https://tildegit.org/acdw/emacs
|
2021-04-06 23:30:49 +00:00
|
|
|
|
;; Bankruptcy: 7
|
2021-03-16 16:16:21 +00:00
|
|
|
|
|
2021-03-01 05:58:57 +00:00
|
|
|
|
;; This file is NOT part of GNU Emacs.
|
2021-03-16 16:16:21 +00:00
|
|
|
|
|
2021-04-10 19:28:31 +00:00
|
|
|
|
;;; License:
|
2021-03-01 05:58:57 +00:00
|
|
|
|
;; Everyone is permitted to do whatever with this software, without
|
|
|
|
|
;; limitation. This software comes without any warranty whatsoever,
|
|
|
|
|
;; but with two pieces of advice:
|
|
|
|
|
;; - Don't hurt yourself.
|
|
|
|
|
;; - Make good choices.
|
2021-03-16 16:16:21 +00:00
|
|
|
|
|
2021-04-10 19:28:31 +00:00
|
|
|
|
;;; Code:
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
;;; Setup
|
|
|
|
|
|
|
|
|
|
;;;; `setup'
|
|
|
|
|
(straight-use-package '(setup :host nil :repo "https://git.sr.ht/~zge/setup"))
|
|
|
|
|
(require 'setup)
|
|
|
|
|
|
|
|
|
|
(setup setup
|
|
|
|
|
(setup-define :straight
|
|
|
|
|
(lambda (recipe)
|
2021-05-26 22:29:24 +00:00
|
|
|
|
`(straight-use-package ',recipe))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
:documentation "Install RECIPE with `straight-use-package'."
|
|
|
|
|
:repeatable t
|
|
|
|
|
:shorthand (lambda (sexp)
|
|
|
|
|
(let ((recipe (cadr sexp)))
|
|
|
|
|
(if (consp recipe)
|
|
|
|
|
(car recipe)
|
2021-05-27 17:52:12 +00:00
|
|
|
|
recipe)))))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
;;;; `no-littering'
|
2021-04-06 22:59:45 +00:00
|
|
|
|
(setup (:straight no-littering)
|
|
|
|
|
(:option no-littering-etc-directory (acdw/dir)
|
|
|
|
|
no-littering-var-directory (acdw/dir))
|
|
|
|
|
(require 'no-littering))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
;;;; My packages
|
2021-04-19 21:15:44 +00:00
|
|
|
|
(when-let ((default-directory
|
2021-04-20 04:46:24 +00:00
|
|
|
|
(expand-file-name-exists-p "pkg/" user-emacs-directory)))
|
2021-04-19 19:32:10 +00:00
|
|
|
|
(normal-top-level-add-subdirs-to-load-path))
|
|
|
|
|
|
2021-06-03 04:36:43 +00:00
|
|
|
|
;;;; Private stuff
|
2021-06-07 04:26:28 +00:00
|
|
|
|
(acdw/require-private)
|
2021-06-03 04:36:43 +00:00
|
|
|
|
|
2021-04-03 14:46:48 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
;;;; Utility functions and variables
|
|
|
|
|
;; see also: `acdw' and friends. Functions here aren't big enough, or they're
|
|
|
|
|
;; too tightly bound to stuff here, to be placed in `acdw'.
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(defvar lispy-modes '(emacs-lisp-mode
|
|
|
|
|
eval-expression-minibuffer
|
|
|
|
|
ielm-mode
|
|
|
|
|
lisp-mode
|
|
|
|
|
lisp-interaction-mode
|
|
|
|
|
scheme-mode
|
2021-05-05 22:22:33 +00:00
|
|
|
|
slime-repl-mode
|
|
|
|
|
sly-mrepl-mode)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
"List of modes that are lisp-like enough to hook packages into.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;; Basics
|
|
|
|
|
;; NOTE that some of the names in `setup' forms are arbitrary.
|
|
|
|
|
|
|
|
|
|
(setup acdw
|
2021-04-06 22:59:45 +00:00
|
|
|
|
(:option user-full-name "Case Duckworth"
|
2021-06-03 04:36:43 +00:00
|
|
|
|
user-mail-address "acdw@acdw.net"))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
2021-05-29 03:42:14 +00:00
|
|
|
|
(setup (:require auth-source)
|
|
|
|
|
(:option auth-sources '("~/.authinfo" "~/.authinfo.gpg")))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup autorevert
|
|
|
|
|
(global-auto-revert-mode +1))
|
|
|
|
|
|
|
|
|
|
(setup browse-url
|
2021-05-21 13:34:52 +00:00
|
|
|
|
(setq-default browse-url-secondary-browser-function
|
2021-05-19 17:41:16 +00:00
|
|
|
|
(if (executable-find "firefox") ; prefer Firefox
|
2021-04-29 17:16:03 +00:00
|
|
|
|
'browse-url-firefox
|
|
|
|
|
'browse-url-default-browser)
|
2021-05-25 02:40:51 +00:00
|
|
|
|
browse-url-new-window-flag nil ; for eww
|
|
|
|
|
browse-url-firefox-arguments '("--new-tab") ; for firefox
|
2021-05-21 13:34:52 +00:00
|
|
|
|
browse-url-firefox-new-window-is-tab t)
|
|
|
|
|
|
2021-06-10 02:48:11 +00:00
|
|
|
|
(defvar browse-url-mpv-arguments nil
|
|
|
|
|
"Arguments to pass to mpv in `browse-url-mpv'.")
|
|
|
|
|
|
|
|
|
|
(defun browse-url-mpv (url &optional new-window)
|
|
|
|
|
"Play `URL' in mpv."
|
|
|
|
|
(interactive (browse-url-interactive-arg "Video URL: "))
|
|
|
|
|
(ignore new-window) ;; mpv always opens a new window
|
|
|
|
|
(let* ((url (browse-url-encode-url url))
|
|
|
|
|
(process-environment (browse-url-process-environment)))
|
|
|
|
|
(message "Playing %s in mpv..." url)
|
|
|
|
|
(apply #'start-process
|
|
|
|
|
(concat "mpv " url) nil
|
|
|
|
|
"mpv"
|
|
|
|
|
(append
|
|
|
|
|
browse-url-mpv-arguments
|
|
|
|
|
(list url)))))
|
|
|
|
|
|
|
|
|
|
(defvar browse-url-feh-arguments '("--auto-zoom"
|
|
|
|
|
"--geometry" "800x600")
|
|
|
|
|
"Arguments to pass to feh in `browse-url-feh'.")
|
|
|
|
|
|
|
|
|
|
(defun browse-url-feh (url &optional new-window)
|
|
|
|
|
"Open `URL' in feh."
|
|
|
|
|
(interactive (browse-url-interactive-arg "Video URL: "))
|
|
|
|
|
(ignore new-window) ;; mpv always opens a new window
|
|
|
|
|
(let* ((url (browse-url-encode-url url))
|
|
|
|
|
(process-environment (browse-url-process-environment)))
|
|
|
|
|
(message "Opening %s in feh..." url)
|
|
|
|
|
(apply #'start-process
|
|
|
|
|
(concat "feh " url) nil
|
|
|
|
|
"feh"
|
|
|
|
|
(append
|
|
|
|
|
browse-url-feh-arguments
|
|
|
|
|
(list url)))))
|
|
|
|
|
|
2021-05-21 13:34:52 +00:00
|
|
|
|
;; `browse-url-browser-function' as an alist is deprecated in Emacs 28 for
|
|
|
|
|
;; `browse-url-handlers'.
|
|
|
|
|
(set-default (if (version<= emacs-version "28")
|
|
|
|
|
'browse-url-browser-function
|
|
|
|
|
'browse-url-handlers)
|
2021-06-10 02:48:11 +00:00
|
|
|
|
`(,(when (executable-find "feh")
|
|
|
|
|
'("\\.jpe?g\\'" . browse-url-feh))
|
|
|
|
|
,(when (executable-find "mpv")
|
|
|
|
|
'("youtube\\.com\\|youtu\\.be" . browse-url-mpv))
|
|
|
|
|
("." . eww-browse-url)))
|
2021-05-25 17:54:42 +00:00
|
|
|
|
|
|
|
|
|
;; Buttonize gemini:// links.
|
|
|
|
|
(acdw/add-button-url-regexp-protocol "gemini"))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(setup buffers
|
2021-05-05 17:33:20 +00:00
|
|
|
|
(:global "C-x k" acdw/kill-a-buffer))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
2021-07-01 00:34:06 +00:00
|
|
|
|
(setup calendar
|
|
|
|
|
(:option calendar-week-start-day 1 ; Monday
|
|
|
|
|
))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup completion
|
|
|
|
|
(:option completion-ignore-case t
|
|
|
|
|
read-buffer-completion-ignore-case t
|
|
|
|
|
completion-styles '(partial-completion substring flex)
|
|
|
|
|
completion-category-defaults nil
|
|
|
|
|
completion-category-overrides
|
|
|
|
|
'((file (styles . (partial-completion)))))
|
|
|
|
|
|
2021-05-05 17:33:52 +00:00
|
|
|
|
(:global "M-/" hippie-expand))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup cursor
|
|
|
|
|
(:option cursor-type 'bar
|
|
|
|
|
cursor-in-non-selected-windows 'hollow
|
|
|
|
|
blink-cursor-blinks 1)
|
|
|
|
|
(blink-cursor-mode +1))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup cus-edit
|
|
|
|
|
(:option custom-file (acdw/dir "custom.el")
|
|
|
|
|
custom-magic-show nil
|
|
|
|
|
custom-magic-show-button t
|
|
|
|
|
custom-unlispify-tag-names nil
|
|
|
|
|
custom-variable-default-form 'edit))
|
2021-04-19 21:16:19 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup debugger
|
|
|
|
|
(:hook visual-line-mode)
|
2021-05-27 17:52:12 +00:00
|
|
|
|
(:global "C-c d" toggle-debug-on-error))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(setup dired
|
|
|
|
|
(setq-default dired-recursive-copies 'always
|
|
|
|
|
dired-recursive-deletes 'always
|
|
|
|
|
delete-by-moving-to-trash t
|
|
|
|
|
dired-listing-switches "-Al"
|
|
|
|
|
ls-lisp-dirs-first t
|
|
|
|
|
dired-ls-F-marks-symlinks t
|
|
|
|
|
dired-no-confirm '(byte-compile
|
|
|
|
|
chgrp chmod chown copy
|
|
|
|
|
hardlink load move
|
|
|
|
|
shell touch symlink)
|
|
|
|
|
dired-dwim-target t)
|
|
|
|
|
|
|
|
|
|
(:also-load dired-x)
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(:hook dired-hide-details-mode
|
|
|
|
|
hl-line-mode)
|
|
|
|
|
|
|
|
|
|
(:global "C-x C-j" dired-jump)
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-05-11 14:44:04 +00:00
|
|
|
|
(acdw/system
|
|
|
|
|
(:work (:straight w32-browser)
|
|
|
|
|
(autoload 'dired-w32-browser "w32-browser")
|
|
|
|
|
(:bind "RET" dired-w32-browser))
|
|
|
|
|
(:home (:straight dired-open)
|
|
|
|
|
(require 'dired-open)
|
|
|
|
|
(:bind "RET" dired-find-alternate-file)
|
|
|
|
|
(:option (prepend dired-open-functions) #'dired-open-xdg)))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(:when-loaded
|
|
|
|
|
(:straight dired-subtree)
|
|
|
|
|
(:bind "i" dired-subtree-toggle
|
|
|
|
|
"TAB" dired-subtree-cycle)
|
|
|
|
|
|
|
|
|
|
(:straight dired-collapse)
|
|
|
|
|
(:hook dired-collapse-mode)
|
|
|
|
|
|
|
|
|
|
(:straight dired-git-info)
|
|
|
|
|
(:bind ")" dired-git-info-mode)
|
|
|
|
|
|
|
|
|
|
(:straight trashed)
|
|
|
|
|
(:option trashed-action-confirmer #'y-or-n-p)))
|
|
|
|
|
|
|
|
|
|
(setup ediff
|
|
|
|
|
(:option ediff-window-setup-function 'ediff-setup-windows-plain
|
|
|
|
|
ediff-split-window-function 'split-window-horizontally))
|
|
|
|
|
|
|
|
|
|
(setup eldoc
|
|
|
|
|
(:option eldoc-idle-delay 0.1
|
|
|
|
|
eldoc-echo-area-use-multiline-p nil))
|
|
|
|
|
|
|
|
|
|
(setup elisp-mode
|
|
|
|
|
(:option eval-expression-print-length nil
|
|
|
|
|
eval-expression-print-level nil
|
|
|
|
|
lisp-indent-function #'lisp-indent-function)
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-05-29 01:45:53 +00:00
|
|
|
|
(add-hook 'emacs-lisp-mode-hook
|
|
|
|
|
(defun emacs-lisp@enforce-lexical-binding ()
|
|
|
|
|
(setq lexical-binding t)))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-05-29 03:42:24 +00:00
|
|
|
|
(add-hook 'emacs-lisp-mode-hook
|
|
|
|
|
(defun emacs-lisp@imenu-add-setup ()
|
|
|
|
|
(add-to-list 'imenu-generic-expression
|
|
|
|
|
'("Setup"
|
|
|
|
|
"\\(^\\s-*(setup +(?\\)\\(\\_<.+\\_>\\)" 2))))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(defun acdw/eval-region-or-buffer ()
|
|
|
|
|
(interactive)
|
|
|
|
|
(if (region-active-p)
|
|
|
|
|
(let ((begin (region-beginning))
|
|
|
|
|
(end (region-end)))
|
|
|
|
|
(with-message (format "Evaluating %S -> %S" begin end)
|
|
|
|
|
(eval-region begin end)))
|
|
|
|
|
(with-message "Evaluating buffer"
|
|
|
|
|
(eval-buffer))))
|
|
|
|
|
|
|
|
|
|
;; Emulate slime's eval binds
|
|
|
|
|
(:with-map emacs-lisp-mode-map
|
|
|
|
|
(:bind "C-c C-c" eval-defun
|
|
|
|
|
"C-c C-k" acdw/eval-region-or-buffer
|
|
|
|
|
"C-c C-z" ielm))
|
|
|
|
|
|
|
|
|
|
(add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode)
|
|
|
|
|
(add-hook 'ielm-mode-hook 'turn-on-eldoc-mode)
|
|
|
|
|
|
|
|
|
|
(setup (:straight macrostep)
|
|
|
|
|
(define-key emacs-lisp-mode-map (kbd "C-c e") #'macrostep-expand))
|
|
|
|
|
|
|
|
|
|
(setup (:straight eros)
|
|
|
|
|
(:hook-into emacs-lisp-mode))
|
|
|
|
|
|
|
|
|
|
;; Add advice to pulse evaluated regions
|
2021-04-30 00:47:54 +00:00
|
|
|
|
(define-advice eval-region (:around (fn start end &rest args) pulse-region)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(pulse-momentary-highlight-region start end)
|
2021-04-30 00:47:54 +00:00
|
|
|
|
(apply fn start end args)))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(setup encoding
|
2021-04-19 17:32:21 +00:00
|
|
|
|
(:option locale-coding-system 'utf-8-unix
|
2021-04-06 22:59:45 +00:00
|
|
|
|
coding-system-for-read 'utf-8-unix
|
|
|
|
|
coding-system-for-write 'utf-8-unix
|
|
|
|
|
buffer-file-coding-system 'utf-8-unix
|
|
|
|
|
default-process-coding-system '(utf-8-unix . utf-8-unix)
|
|
|
|
|
x-select-request-type '(UTF8_STRING
|
|
|
|
|
COMPOUND_TEXT
|
|
|
|
|
TEXT
|
|
|
|
|
STRING))
|
|
|
|
|
|
|
|
|
|
(set-charset-priority 'unicode)
|
|
|
|
|
(set-language-environment "UTF-8")
|
|
|
|
|
(prefer-coding-system 'utf-8-unix)
|
|
|
|
|
(set-default-coding-systems 'utf-8-unix)
|
|
|
|
|
(set-terminal-coding-system 'utf-8-unix)
|
|
|
|
|
(set-keyboard-coding-system 'utf-8-unix)
|
|
|
|
|
|
2021-05-11 14:44:04 +00:00
|
|
|
|
(acdw/system
|
|
|
|
|
(:work (set-clipboard-coding-system 'utf-16-le)
|
|
|
|
|
(set-selection-coding-system 'utf-16-le))
|
|
|
|
|
(_ (set-selection-coding-system 'utf-8)
|
|
|
|
|
(set-clipboard-coding-system 'utf-8))))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
2021-05-22 21:41:10 +00:00
|
|
|
|
(setup erc
|
2021-05-24 22:08:32 +00:00
|
|
|
|
(:require acdw-erc)
|
|
|
|
|
(:also-load erc-autoaway
|
2021-05-30 04:18:27 +00:00
|
|
|
|
erc-track
|
|
|
|
|
erc-goodies)
|
2021-05-22 21:41:10 +00:00
|
|
|
|
|
2021-05-26 20:10:07 +00:00
|
|
|
|
(:option
|
|
|
|
|
erc-auto-discard-away t
|
|
|
|
|
erc-autoaway-idle-seconds 600
|
|
|
|
|
erc-autoaway-message "BRB (autoaway: %i seconds)"
|
|
|
|
|
erc-button-url-regexp browse-url-button-regexp
|
|
|
|
|
erc-common-server-suffixes '(("tilde.chat\\'" . "~")
|
|
|
|
|
("libera.chat\\'" . "LC"))
|
2021-06-07 04:28:25 +00:00
|
|
|
|
erc-default-server "irc.tilde.chat" ; fuck freenode. all my friends hate
|
|
|
|
|
; freenode.
|
|
|
|
|
erc-fill-function #'erc-fill-static
|
|
|
|
|
erc-fill-static-center 14
|
2021-05-26 20:10:07 +00:00
|
|
|
|
erc-header-line-face-method #'erc/update-header-line-show-disconnected
|
|
|
|
|
erc-hide-list '("JOIN" "NICK" "PART" "QUIT" "MODE"
|
|
|
|
|
"324" "329" "332" "333" "353" "477")
|
2021-05-30 04:18:27 +00:00
|
|
|
|
erc-interpret-controls-p t
|
2021-05-26 20:10:07 +00:00
|
|
|
|
erc-interpret-mirc-color t
|
2021-06-07 04:28:25 +00:00
|
|
|
|
erc-join-buffer 'bury
|
2021-05-26 20:10:07 +00:00
|
|
|
|
erc-kill-buffer-on-part t
|
|
|
|
|
erc-kill-queries-on-quit t
|
|
|
|
|
erc-kill-server-buffer-on-quit t
|
|
|
|
|
erc-nick "acdw"
|
2021-06-07 04:28:25 +00:00
|
|
|
|
erc-prompt (lambda () (acdw-erc/prompt))
|
2021-05-26 20:10:07 +00:00
|
|
|
|
erc-prompt-for-password nil ; use ~/.authinfo
|
2021-06-07 19:09:48 +00:00
|
|
|
|
erc/servers
|
|
|
|
|
(when (boundp 'erc-autojoin-channels-alist)
|
|
|
|
|
(mapcar #'car erc-autojoin-channels-alist))
|
2021-05-26 20:10:07 +00:00
|
|
|
|
erc-server-coding-system '(utf-8 . utf-8)
|
2021-07-13 23:53:07 +00:00
|
|
|
|
erc-track-exclude-types (append erc-hide-list
|
|
|
|
|
'("AWAY"))
|
2021-06-07 04:28:25 +00:00
|
|
|
|
erc-track-exclude-server-buffer t
|
|
|
|
|
erc-track-position-in-mode-line 'before-modes
|
|
|
|
|
erc-track-visibility nil ; only the selected frame
|
|
|
|
|
)
|
2021-05-24 22:08:32 +00:00
|
|
|
|
|
2021-05-25 22:36:37 +00:00
|
|
|
|
;; Thanks bpalmer!
|
|
|
|
|
(advice-add 'show-paren-function :around
|
|
|
|
|
(defun show-paren@skip-in-erc (f &rest r)
|
|
|
|
|
"Skip `show-paren-mode' in `erc-mode'."
|
|
|
|
|
(unless (derived-mode-p 'erc-mode)
|
|
|
|
|
(apply f r))))
|
|
|
|
|
|
2021-05-24 22:08:32 +00:00
|
|
|
|
(:hook erc-autoaway-mode
|
|
|
|
|
erc-track-mode
|
2021-05-29 03:42:53 +00:00
|
|
|
|
erc-truncate-mode)
|
|
|
|
|
|
2021-07-01 00:32:56 +00:00
|
|
|
|
(:bind "C-c C-b" acdw-erc/erc-switch-to-buffer)
|
|
|
|
|
|
2021-06-10 02:48:31 +00:00
|
|
|
|
(with-eval-after-load 'erc
|
|
|
|
|
(setup (:straight erc-hl-nicks)
|
|
|
|
|
(:option (append erc-modules) 'hl-nicks
|
|
|
|
|
erc-hl-nicks-minimum-contrast-ratio 4.5
|
|
|
|
|
erc-hl-nicks-color-contrast-strategy '(invert contrast))
|
|
|
|
|
(:hook-into erc-mode)
|
|
|
|
|
;; Refresh nick colors after changing modus theme
|
|
|
|
|
;; Ideally, there'd be a hook for /any/ time we changed theme... but
|
|
|
|
|
;; whatever.
|
|
|
|
|
(add-hook 'modus-themes-after-load-theme-hook
|
|
|
|
|
#'erc-hl-nicks-refresh-colors))
|
|
|
|
|
|
2021-07-14 21:58:58 +00:00
|
|
|
|
;; (setup (:straight erc-image)
|
|
|
|
|
;; (:option (append erc-modules) 'image
|
|
|
|
|
;; erc-image-inline-rescale 300))
|
2021-06-10 02:48:31 +00:00
|
|
|
|
|
2021-07-03 02:45:37 +00:00
|
|
|
|
(erc-update-modules)))
|
2021-05-22 21:41:10 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup eshell
|
2021-05-30 05:07:02 +00:00
|
|
|
|
(:also-load acdw-eshell
|
|
|
|
|
em-smart)
|
|
|
|
|
|
|
|
|
|
(:option eshell-aliases-file (acdw/dir "eshell/aliases" t)
|
|
|
|
|
eshell-directory-name (acdw/dir "eshell/" t)
|
|
|
|
|
eshell-kill-on-exit nil
|
|
|
|
|
eshell-review-quick-commands nil
|
|
|
|
|
eshell-smart-space-goes-to-end t
|
|
|
|
|
eshell-where-to-jump 'begin)
|
2021-05-19 17:40:09 +00:00
|
|
|
|
|
2021-05-27 17:52:12 +00:00
|
|
|
|
(:global "C-c s" eshell-pop-or-quit)
|
2021-05-30 05:07:02 +00:00
|
|
|
|
|
|
|
|
|
(defun eshell-mode@setup ()
|
|
|
|
|
"Set up `eshell' for use.
|
|
|
|
|
Most customizations must go in this function since `eshell' loads
|
|
|
|
|
like a dumbass."
|
|
|
|
|
;; Define keys
|
|
|
|
|
(dolist (spec '(("C-d" . eshell-quit-or-delete-char)))
|
|
|
|
|
(define-key eshell-mode-map (kbd (car spec)) (function (cdr spec))))
|
|
|
|
|
;; Etc.
|
|
|
|
|
(when (boundp 'simple-modeline--mode-line)
|
|
|
|
|
(setq mode-line-format '(:eval simple-modeline--mode-line))))
|
2021-04-27 16:35:40 +00:00
|
|
|
|
|
2021-05-30 05:07:02 +00:00
|
|
|
|
(:hook eshell-mode@setup
|
|
|
|
|
eshell-arg-hist-mode))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(setup eww
|
2021-05-20 03:00:59 +00:00
|
|
|
|
(:option eww-search-prefix "https://duckduckgo.com/html?q="
|
|
|
|
|
url-privacy-level '(email agent cookies lastloc))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(:hook acdw/reading-mode))
|
|
|
|
|
|
|
|
|
|
(setup files
|
2021-05-22 21:42:52 +00:00
|
|
|
|
(:option
|
|
|
|
|
auto-save-file-name-transforms `((".*" ,(acdw/dir "auto-save/" t) t))
|
|
|
|
|
auto-save-list-file-prefix (acdw/dir "auto-save-list/.saves-" t)
|
|
|
|
|
auto-save-interval 60
|
|
|
|
|
auto-save-timeout 60
|
|
|
|
|
auto-save-visited-interval auto-save-timeout
|
|
|
|
|
backup-by-copying t
|
|
|
|
|
backup-directory-alist `((".*" . ,(acdw/dir "backup/" t)))
|
|
|
|
|
delete-old-versions t
|
|
|
|
|
tramp-backup-directory-alist backup-directory-alist
|
|
|
|
|
vc-make-backup-files t
|
|
|
|
|
version-control t)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(:global "C-c i" acdw/find-emacs-dotfiles)
|
|
|
|
|
|
|
|
|
|
(auto-save-visited-mode +1)
|
|
|
|
|
|
2021-05-05 04:25:35 +00:00
|
|
|
|
(add-hook 'unfocused-hook
|
|
|
|
|
(defun unfocused@save-buffers ()
|
|
|
|
|
(save-some-buffers t))))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(setup flyspell
|
|
|
|
|
(setq-default ispell-program-name "hunspell"
|
|
|
|
|
ispell-dictionary "en_US"
|
|
|
|
|
ispell-personal-dictionary "~/.hunspell_personal")
|
|
|
|
|
(:needs ispell-program-name) ; don't proceed if not installed
|
|
|
|
|
|
|
|
|
|
(unless (file-exists-p ispell-personal-dictionary)
|
|
|
|
|
(write-region "" nil ispell-personal-dictionary nil 0))
|
|
|
|
|
|
2021-05-29 01:50:45 +00:00
|
|
|
|
(defun flyspell-start ()
|
2021-04-29 17:16:03 +00:00
|
|
|
|
"Start `flyspell-mode' or `flyspell-prog-mode', depending on current mode."
|
|
|
|
|
(interactive)
|
|
|
|
|
(cond ((derived-mode-p 'text-mode)
|
|
|
|
|
(flyspell-mode))
|
|
|
|
|
((derived-mode-p 'prog-mode)
|
|
|
|
|
(flyspell-prog-mode))
|
2021-05-29 01:50:45 +00:00
|
|
|
|
((called-interactively-p)
|
2021-05-19 17:39:43 +00:00
|
|
|
|
(message "Non-text or -prog mode. Run `flyspell-mode'."))))
|
2021-05-22 21:43:23 +00:00
|
|
|
|
|
2021-05-19 17:39:43 +00:00
|
|
|
|
(when (acdw/system :home)
|
2021-05-29 01:50:45 +00:00
|
|
|
|
(add-hook 'change-major-mode-hook #'flyspell-start))
|
2021-04-12 14:45:53 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(:when-loaded
|
|
|
|
|
(setup (:straight flyspell-correct)
|
|
|
|
|
(define-key flyspell-mode-map (kbd "C-;") #'flyspell-correct-wrapper))))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup frames
|
2021-05-29 01:50:58 +00:00
|
|
|
|
(:option frame-title-format '("%b@"
|
|
|
|
|
(:eval
|
|
|
|
|
(or (file-remote-p default-directory 'host)
|
|
|
|
|
system-name))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
" %+%* GNU Emacs"
|
2021-05-29 01:50:58 +00:00
|
|
|
|
(:eval (when (frame-parameter nil 'client)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
" Client")))
|
|
|
|
|
window-resize-pixelwise t)
|
2021-05-05 04:25:35 +00:00
|
|
|
|
|
|
|
|
|
(add-hook 'unfocused-hook #'garbage-collect))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup gnus
|
2021-05-05 22:56:31 +00:00
|
|
|
|
(:option gnus-home-directory (acdw/dir "gnus" t)
|
|
|
|
|
gnus-directory (acdw/dir "News" t)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
gnus-init-file (expand-file-name "gnus.el" user-emacs-directory))
|
2021-06-02 03:29:47 +00:00
|
|
|
|
(:global "C-c n" gnus))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
2021-06-10 02:48:42 +00:00
|
|
|
|
(setup goto-addr
|
|
|
|
|
(add-hook 'text-mode-hook #'goto-address-mode)
|
|
|
|
|
(add-hook 'prog-mode-hook #'goto-address-prog-mode))
|
|
|
|
|
|
2021-05-05 17:33:20 +00:00
|
|
|
|
(setup ibuffer
|
|
|
|
|
(:option ibuffer-saved-filter-groups
|
|
|
|
|
'(("default"
|
|
|
|
|
("dired" (mode . dired-mode))
|
2021-05-27 13:13:14 +00:00
|
|
|
|
("customize" (mode . Custom-mode))
|
2021-05-05 17:33:20 +00:00
|
|
|
|
("emacs" (or (name . "^\\*scratch\\*$")
|
2021-05-22 21:44:27 +00:00
|
|
|
|
(name . "^\\*Messages\\*$")
|
2021-05-27 13:13:14 +00:00
|
|
|
|
(name . "^\\*Warnings\\*$")
|
2021-05-22 21:44:27 +00:00
|
|
|
|
(name . "^\\*straight-process\\*$")
|
|
|
|
|
(name . "^\\*Calendar\\*$")))
|
|
|
|
|
("git" (or (name . "^\*magit")
|
|
|
|
|
(name . "^\magit")))
|
2021-05-05 17:33:20 +00:00
|
|
|
|
("help" (or (mode . help-mode)
|
|
|
|
|
(mode . Info-mode)
|
2021-05-22 21:44:27 +00:00
|
|
|
|
(mode . helpful-mode)))
|
|
|
|
|
("messaging" (or (mode . message-mode)
|
|
|
|
|
(mode . bbdb-mode)
|
|
|
|
|
(mode . mail-mode)
|
|
|
|
|
(mode . gnus-group-mode)
|
|
|
|
|
(mode . gnus-summary-mode)
|
|
|
|
|
(mode . gnus-article-mode)
|
|
|
|
|
(name . "^\\.bbdb$")
|
|
|
|
|
(name . "^\\.newsrc-dribble")
|
|
|
|
|
(mode . erc-mode)))
|
|
|
|
|
("shell" (or (mode . eshell-mode)
|
|
|
|
|
(mode . shell-mode)
|
|
|
|
|
(mode . vterm-mode)))
|
|
|
|
|
("web" (or (mode . elpher-mode)
|
|
|
|
|
(mode . gemini-mode)
|
|
|
|
|
(mode . eww-mode))))))
|
2021-05-05 17:33:20 +00:00
|
|
|
|
(:global "C-x C-b" ibuffer)
|
|
|
|
|
|
|
|
|
|
(defun ibuffer-filter-to-default ()
|
|
|
|
|
(ibuffer-switch-to-saved-filter-groups "default"))
|
2021-05-22 21:44:27 +00:00
|
|
|
|
(:hook ibuffer-filter-to-default)
|
|
|
|
|
|
|
|
|
|
(:also-load ibuf-ext)
|
|
|
|
|
(:option ibuffer-show-empty-filter-groups nil
|
|
|
|
|
ibuffer-expert t))
|
2021-05-05 17:33:20 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup imenu
|
|
|
|
|
(:option imenu-auto-rescan t))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-05-19 17:37:57 +00:00
|
|
|
|
(setup Info
|
2021-05-25 17:28:32 +00:00
|
|
|
|
(:hook variable-pitch-mode
|
|
|
|
|
acdw/reading-mode))
|
2021-05-19 17:37:57 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup isearch
|
|
|
|
|
(:option search-default-mode t))
|
2021-04-28 20:48:37 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup lines
|
|
|
|
|
(:option fill-column 79
|
|
|
|
|
word-wrap t
|
|
|
|
|
truncate-lines nil)
|
2021-04-21 16:50:18 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(global-display-fill-column-indicator-mode +1)
|
|
|
|
|
(global-so-long-mode +1)
|
|
|
|
|
|
|
|
|
|
(add-hook 'visual-line-mode-hook
|
|
|
|
|
(defun acdw/disable-fill-column-indicator ()
|
|
|
|
|
(display-fill-column-indicator-mode
|
|
|
|
|
(if visual-line-mode -1 +1))))
|
2021-04-22 17:53:19 +00:00
|
|
|
|
|
2021-04-21 16:50:18 +00:00
|
|
|
|
;; `acdw/kill-line-and-join-advice' cribs from `crux-kill-and-join-forward'.
|
|
|
|
|
;; I can't simply advise `kill-line' with an override from crux because crux
|
|
|
|
|
;; itself calls `kill-line', leading to a infinite nesting situation.
|
2021-04-30 00:47:54 +00:00
|
|
|
|
(define-advice kill-line (:around (fn &rest args) join-killed-line)
|
|
|
|
|
(if (and (eolp)
|
|
|
|
|
(not (bolp)))
|
|
|
|
|
(delete-indentation 1)
|
|
|
|
|
(apply fn args))))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup minibuffer
|
|
|
|
|
(:option minibuffer-prompt-properties
|
|
|
|
|
'(read-only t cursor-intangible t face minibuffer-prompt)
|
|
|
|
|
enable-recursive-minibuffers t
|
|
|
|
|
file-name-shadow-properties '(invisible t intangible t)
|
|
|
|
|
read-answer-short t)
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(add-hook 'minibuffer-setup-hook #'acdw/gc-disable)
|
|
|
|
|
(add-hook 'minibuffer-exit-hook #'acdw/gc-enable)
|
|
|
|
|
|
|
|
|
|
(minibuffer-depth-indicate-mode +1)
|
|
|
|
|
(file-name-shadow-mode +1)
|
|
|
|
|
(minibuffer-electric-default-mode +1)
|
|
|
|
|
(fset 'yes-or-no-p #'y-or-n-p))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
|
|
|
|
(setup prog
|
|
|
|
|
(:option smie-indent-basic tab-width)
|
|
|
|
|
|
2021-05-21 15:48:05 +00:00
|
|
|
|
(add-hook 'prog-mode-hook
|
|
|
|
|
(defun prog-mode@auto-fill ()
|
|
|
|
|
(setq-local comment-auto-fill-only-comments t)
|
|
|
|
|
(turn-on-auto-fill)))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
|
|
|
|
(:option show-paren-delay 0
|
|
|
|
|
show-paren-style 'mixed
|
|
|
|
|
show-paren-when-point-inside-paren t
|
|
|
|
|
show-paren-when-point-in-periphery t)
|
|
|
|
|
|
2021-05-05 04:44:18 +00:00
|
|
|
|
(defun flymake-mode-except ()
|
|
|
|
|
"Turn on flymake mode, except in some modes."
|
|
|
|
|
(let ((no-flymake-modes '(emacs-lisp-mode)))
|
|
|
|
|
(unless (or (member major-mode no-flymake-modes)
|
|
|
|
|
(apply #'derived-mode-p no-flymake-modes))
|
|
|
|
|
(flymake-mode-on))))
|
|
|
|
|
|
2021-04-06 22:59:45 +00:00
|
|
|
|
(:hook show-paren-mode
|
|
|
|
|
electric-pair-local-mode
|
2021-05-05 04:44:18 +00:00
|
|
|
|
flymake-mode-except
|
2021-04-30 22:36:25 +00:00
|
|
|
|
acdw/setup-fringes)
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
|
|
|
|
(add-hook 'after-save-hook
|
|
|
|
|
#'executable-make-buffer-file-executable-if-script-p))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup re-builder
|
|
|
|
|
(require 'acdw-re)
|
|
|
|
|
(advice-add 're-builder :before #'acdw/re-builder-save-state)
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-05-05 04:45:30 +00:00
|
|
|
|
(add-hook 'reb-mode-hook #'paredit-mode)
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(:global "C-M-%" re-builder)
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(dolist (map '(reb-mode-map reb-lisp-mode-map))
|
|
|
|
|
(let ((setup-map map))
|
|
|
|
|
(:bind "RET" reb-replace-regexp
|
|
|
|
|
"M-n" reb-next-match
|
|
|
|
|
"M-p" reb-prev-match
|
2021-05-05 04:45:38 +00:00
|
|
|
|
"C-c C-k" reb-quit))))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
|
|
|
|
(setup (:require recentf)
|
2021-04-06 22:59:45 +00:00
|
|
|
|
(:option recentf-save-file (acdw/dir "recentf.el")
|
2021-03-30 04:21:58 +00:00
|
|
|
|
recentf-max-menu-items 100
|
|
|
|
|
recentf-max-saved-items nil
|
2021-05-12 21:41:58 +00:00
|
|
|
|
recentf-auto-cleanup 'mode
|
2021-04-06 22:59:45 +00:00
|
|
|
|
(append recentf-exclude) (acdw/dir))
|
2021-05-12 21:41:58 +00:00
|
|
|
|
|
|
|
|
|
(advice-add 'dired-rename-file :after #'rjs/recentf-rename-notify)
|
|
|
|
|
|
2021-03-11 18:09:16 +00:00
|
|
|
|
(recentf-mode +1))
|
2021-03-09 04:40:23 +00:00
|
|
|
|
|
2021-05-29 01:51:07 +00:00
|
|
|
|
(setup repeat
|
|
|
|
|
(:only-if (fboundp #'repeat-mode))
|
|
|
|
|
(repeat-mode +1))
|
|
|
|
|
|
2021-03-29 22:52:23 +00:00
|
|
|
|
(setup (:require savehist)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(:option history-length t
|
2021-03-30 04:21:58 +00:00
|
|
|
|
history-delete-duplicates t
|
2021-05-12 21:42:36 +00:00
|
|
|
|
savehist-autosave-interval 60
|
2021-04-06 22:59:45 +00:00
|
|
|
|
savehist-file (acdw/dir "savehist.el"))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-05-12 21:42:36 +00:00
|
|
|
|
(dolist (var '(extended-command-history
|
|
|
|
|
global-mark-ring
|
|
|
|
|
kill-ring
|
|
|
|
|
regexp-search-ring
|
2021-04-29 17:16:03 +00:00
|
|
|
|
search-ring
|
2021-05-12 21:42:36 +00:00
|
|
|
|
mark-ring))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(:option (append savehist-additional-variables) var))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(savehist-mode +1))
|
2021-04-01 21:35:26 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup saveplace
|
|
|
|
|
(:option save-place-file (acdw/dir "places.el")
|
2021-05-11 14:44:04 +00:00
|
|
|
|
save-place-forget-unreadable-files (acdw/system :home))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(save-place-mode +1))
|
2021-04-07 05:14:08 +00:00
|
|
|
|
|
|
|
|
|
(setup scratch
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(:option inhibit-startup-screen t
|
|
|
|
|
initial-buffer-choice t
|
|
|
|
|
initial-scratch-message (concat ";; Howdy, "
|
|
|
|
|
(nth 0 (split-string
|
|
|
|
|
user-full-name))
|
|
|
|
|
"! "
|
|
|
|
|
"Welcome to GNU Emacs.\n\n")
|
|
|
|
|
initial-major-mode 'emacs-lisp-mode)
|
|
|
|
|
|
2021-05-21 15:48:05 +00:00
|
|
|
|
(add-hook 'kill-buffer-query-functions
|
|
|
|
|
(defun kill-buffer-query@immortal-scratch ()
|
|
|
|
|
(if (eq (current-buffer) (get-buffer "*scratch*"))
|
|
|
|
|
(progn (bury-buffer)
|
|
|
|
|
nil)
|
|
|
|
|
t))))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup scrolling
|
|
|
|
|
(:option auto-window-vscroll nil
|
|
|
|
|
fast-but-imprecise-scrolling t
|
|
|
|
|
scroll-margin 0
|
|
|
|
|
scroll-conservatively 101
|
|
|
|
|
scroll-preserve-screen-position 1))
|
2021-04-03 14:45:59 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup selection
|
|
|
|
|
(:option save-interprogram-paste-before-kill t
|
|
|
|
|
yank-pop-change-selection t
|
|
|
|
|
x-select-enable-clipboard t
|
|
|
|
|
x-select-enable-primary t
|
|
|
|
|
mouse-drag-copy-region t
|
|
|
|
|
kill-do-not-save-duplicates t)
|
2021-04-03 14:45:59 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(delete-selection-mode +1))
|
2021-04-27 18:50:09 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:require server)
|
|
|
|
|
(unless (server-running-p)
|
|
|
|
|
(server-start)))
|
2021-04-22 16:55:47 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup sh-mode
|
|
|
|
|
(:option sh-basic-offset tab-width
|
|
|
|
|
sh-indent-after-case 0
|
|
|
|
|
sh-indent-for-case-alt '+
|
|
|
|
|
sh-indent-for-case-label 0)
|
|
|
|
|
|
|
|
|
|
(:local-set indent-tabs-mode t)
|
|
|
|
|
|
|
|
|
|
(when (executable-find "shfmt")
|
|
|
|
|
(with-eval-after-load 'apheleia
|
|
|
|
|
(:option (append apheleia-formatters) '(shfmt . ("shfmt"))
|
|
|
|
|
(append apheleia-mode-alist) '(sh-mode . shfmt))))
|
2021-04-22 16:55:47 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(when (executable-find "shellcheck")
|
|
|
|
|
(:straight flymake-shellcheck)
|
|
|
|
|
(:hook flymake-mode
|
|
|
|
|
flymake-shellcheck-load)))
|
2021-04-22 16:55:47 +00:00
|
|
|
|
|
2021-05-19 17:55:12 +00:00
|
|
|
|
(setup shell-command
|
|
|
|
|
(:option shell-command-switch (acdw/system
|
|
|
|
|
;; I should be testing on some variable
|
|
|
|
|
(:home "-csi")
|
|
|
|
|
(:work "-c"))
|
|
|
|
|
shell-command-prompt-show-cwd t
|
|
|
|
|
shell-command-default-error-buffer "*shell-command-errors*"))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup shr
|
|
|
|
|
(:option shr-width fill-column
|
|
|
|
|
shr-max-width fill-column
|
|
|
|
|
shr-max-image-proportion 0.6
|
|
|
|
|
shr-image-animate t
|
2021-05-20 03:00:59 +00:00
|
|
|
|
shr-discard-aria-hidden t
|
|
|
|
|
shr-folding-mode t))
|
2021-04-22 16:55:47 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup text
|
|
|
|
|
(:hook turn-on-auto-fill
|
2021-04-30 22:36:25 +00:00
|
|
|
|
acdw/setup-fringes))
|
2021-04-22 16:55:47 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup uniquify
|
|
|
|
|
(:option uniquify-buffer-name-style 'forward
|
|
|
|
|
uniquify-separator path-separator
|
|
|
|
|
uniquify-after-kill-buffer-p t
|
|
|
|
|
uniquify-ignore-buffers-re "^\\*"))
|
2021-04-03 14:45:59 +00:00
|
|
|
|
|
2021-05-19 17:37:57 +00:00
|
|
|
|
(setup variable-pitch-mode
|
|
|
|
|
(:hook acdw-fonts/adapt-variable-pitch))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup view
|
|
|
|
|
(:option view-read-only t)
|
|
|
|
|
|
|
|
|
|
(defun acdw/read-view-mode ()
|
|
|
|
|
(acdw/reading-mode (if view-mode +1 -1)))
|
|
|
|
|
|
|
|
|
|
(:hook acdw/read-view-mode))
|
2021-04-18 04:02:11 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup whitespace
|
|
|
|
|
(:option whitespace-style
|
|
|
|
|
'(empty indentation space-before-tab space-after-tab)
|
|
|
|
|
indent-tabs-mode nil
|
|
|
|
|
tab-width 4
|
|
|
|
|
backward-delete-char-untabify-method 'hungry)
|
|
|
|
|
|
2021-05-05 17:34:44 +00:00
|
|
|
|
(:global "M-SPC" cycle-spacing))
|
2021-04-03 14:45:59 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup windows
|
2021-05-28 12:31:53 +00:00
|
|
|
|
(require 'acdw-bell)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(:option use-dialog-box nil
|
|
|
|
|
use-file-dialog nil
|
|
|
|
|
tab-bar-show 1
|
|
|
|
|
visible-bell nil
|
2021-05-28 12:31:53 +00:00
|
|
|
|
ring-bell-function (lambda ()
|
|
|
|
|
(acdw-bell/flash-mode-line
|
|
|
|
|
(acdw/system :home)))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
recenter-positions '(top middle bottom))
|
|
|
|
|
|
|
|
|
|
(tooltip-mode -1)
|
|
|
|
|
(winner-mode +1))
|
2021-04-03 14:45:59 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup w32
|
|
|
|
|
(:option w32-allow-system-shell t
|
|
|
|
|
w32-pass-lwindow-to-system nil
|
|
|
|
|
w32-lwindow-modifier 'super
|
|
|
|
|
w32-pass-rwindow-to-system nil
|
|
|
|
|
w32-rwindow-modifier 'super
|
|
|
|
|
w32-pass-apps-to-system nil
|
|
|
|
|
w32-apps-modifier 'hyper))
|
2021-04-19 13:24:46 +00:00
|
|
|
|
|
2021-05-04 22:27:09 +00:00
|
|
|
|
;;; "Et cetera" settings
|
|
|
|
|
;; This should stay as /minimal/ as possible. Anything that can go somewhere
|
|
|
|
|
;; else /should/ go there.
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup emacs
|
|
|
|
|
(:option disabled-command-function nil
|
|
|
|
|
load-prefer-newer t
|
2021-05-20 03:01:56 +00:00
|
|
|
|
native-comp-async-report-warnings-errors nil
|
2021-04-29 17:16:03 +00:00
|
|
|
|
echo-keystrokes 0.01
|
|
|
|
|
attempt-stack-overflow-recovery nil
|
|
|
|
|
attempt-orderly-shutdown-on-fatal-signal nil
|
|
|
|
|
find-function-C-source-directory (acdw/find-emacs-source))
|
2021-04-03 14:45:59 +00:00
|
|
|
|
|
2021-05-04 22:27:36 +00:00
|
|
|
|
(:global "M-=" count-words
|
2021-05-12 21:42:18 +00:00
|
|
|
|
"C-w" kill-region-or-backward-word
|
|
|
|
|
"<help> h" nil ; HELLO takes a long time to load on Windows
|
|
|
|
|
)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
2021-07-01 00:33:31 +00:00
|
|
|
|
;; (when (display-graphic-p)
|
|
|
|
|
;; (:global "<escape>" keyboard-escape-quit))
|
2021-05-25 13:03:06 +00:00
|
|
|
|
|
2021-05-04 22:27:09 +00:00
|
|
|
|
;; Remap C-h to DEL -- <f1> can be the "help" key
|
|
|
|
|
(define-key key-translation-map [?\C-h] [?\C-?])
|
|
|
|
|
|
2021-05-27 17:52:12 +00:00
|
|
|
|
(:global "C-c t" acdw/insert-iso-date
|
|
|
|
|
"C-z" nil))
|
2021-04-03 14:45:59 +00:00
|
|
|
|
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
;;; Packages
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight (0x0 :host nil
|
|
|
|
|
:repo "https://git.sr.ht/~zge/nullpointer-emacs"))
|
|
|
|
|
(:option 0x0-default-host 'ttm))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight (apheleia :host github
|
|
|
|
|
:repo "raxod502/apheleia"))
|
|
|
|
|
|
|
|
|
|
(apheleia-global-mode +1)
|
2021-03-31 17:46:14 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
;; Use a dumb formatter on modes that `apheleia' doesn't work for.
|
2021-05-21 15:48:05 +00:00
|
|
|
|
(add-hook 'before-save-hook
|
|
|
|
|
(defun before-save@dumb-auto-format ()
|
|
|
|
|
(setq stupid-modes '(makefile-mode
|
|
|
|
|
org-mode))
|
|
|
|
|
;; If there's no apheleia formatter for the mode, just indent the
|
|
|
|
|
;; buffer.
|
|
|
|
|
(unless (or (apply #'derived-mode-p stupid-modes)
|
|
|
|
|
(and (fboundp 'apheleia--get-formatter-command)
|
|
|
|
|
(apheleia--get-formatter-command)))
|
|
|
|
|
(indent-region (point-min) (point-max))))))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight async)
|
|
|
|
|
(autoload 'dired-async-mode "dired-async.el" nil t)
|
|
|
|
|
(dired-async-mode +1))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-05-20 03:00:59 +00:00
|
|
|
|
(setup (:straight ace-link)
|
|
|
|
|
(ace-link-setup-default))
|
|
|
|
|
|
2021-03-31 17:46:14 +00:00
|
|
|
|
(setup (:straight avy)
|
2021-04-01 04:07:28 +00:00
|
|
|
|
(:global "C-:" avy-goto-char
|
2021-04-01 21:41:41 +00:00
|
|
|
|
"C-'" avy-goto-char-timer
|
|
|
|
|
"M-g f" avy-goto-line
|
|
|
|
|
"M-g w" avy-goto-word-1
|
|
|
|
|
"C-c C-j" avy-resume)
|
2021-05-26 22:28:04 +00:00
|
|
|
|
|
|
|
|
|
(with-eval-after-load "isearch"
|
|
|
|
|
(define-key isearch-mode-map (kbd "C-'") #'avy-isearch)))
|
2021-03-31 17:46:14 +00:00
|
|
|
|
|
2021-05-04 14:57:43 +00:00
|
|
|
|
(setup (:straight (beginend))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(beginend-global-mode +1))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-04-16 04:23:50 +00:00
|
|
|
|
(setup (:straight (consult
|
|
|
|
|
:host github
|
|
|
|
|
:repo "minad/consult"))
|
2021-04-01 21:39:46 +00:00
|
|
|
|
|
|
|
|
|
;; "Sensible" functions
|
2021-05-21 16:01:46 +00:00
|
|
|
|
(defun consult-sensible-grep (&optional arg)
|
2021-04-01 21:39:46 +00:00
|
|
|
|
"Perform `consult-git-grep' if in a git project, otherwise `consult-ripgrep'
|
|
|
|
|
if ripgrep is installed, otherwise `consult-grep'."
|
|
|
|
|
(interactive "P")
|
2021-05-21 16:01:46 +00:00
|
|
|
|
(cond ((string-equal (vc-backend buffer-file-name) "Git")
|
2021-04-01 21:39:46 +00:00
|
|
|
|
(call-interactively #'consult-git-grep))
|
2021-04-05 21:59:35 +00:00
|
|
|
|
((executable-find "rg")
|
2021-04-01 21:39:46 +00:00
|
|
|
|
(call-interactively #'consult-ripgrep))
|
|
|
|
|
(t (call-interactively #'consult-grep))))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-05-21 16:01:46 +00:00
|
|
|
|
(defun consult-sensible-find (&optional arg)
|
2021-04-01 21:39:46 +00:00
|
|
|
|
"Peform `consult-locate' if locate is installed, otehrwise `consult-find'."
|
|
|
|
|
(interactive "P")
|
|
|
|
|
(cond ((executable-find "locate") (call-interactively #'consult-locate))
|
|
|
|
|
(t (call-interactively #'consult-find))))
|
|
|
|
|
|
|
|
|
|
;; Bindings
|
2021-04-01 04:07:28 +00:00
|
|
|
|
(:global
|
2021-04-01 21:39:46 +00:00
|
|
|
|
;; C-c bindings (`mode-specific-map')
|
2021-05-27 17:52:12 +00:00
|
|
|
|
;; I don't use any of these right now.
|
|
|
|
|
;; "C-c h" consult-history
|
|
|
|
|
;; "C-c m" consult-mode-command
|
|
|
|
|
;; "C-c b" consult-bookmark
|
|
|
|
|
;; "C-c k" consult-kmacro
|
2021-04-01 21:39:46 +00:00
|
|
|
|
;; C-x bindings (`ctl-x-map')
|
|
|
|
|
"C-x M-:" consult-complex-command
|
|
|
|
|
"C-x b" consult-buffer
|
|
|
|
|
"C-x 4 b" consult-buffer-other-window
|
|
|
|
|
"C-x 5 b" consult-buffer-other-frame
|
|
|
|
|
;; Custom M-# bindings for fast register access
|
|
|
|
|
"M-#" consult-register-load
|
|
|
|
|
"M-'" consult-register-store
|
|
|
|
|
"C-M-#" consult-register
|
|
|
|
|
;; M-g bindings (`goto-map')
|
|
|
|
|
"M-g e" consult-compile-error
|
|
|
|
|
"M-g g" consult-goto-line
|
|
|
|
|
"M-g M-g" consult-goto-line
|
|
|
|
|
"M-g o" consult-outline
|
|
|
|
|
"M-g m" consult-mark
|
|
|
|
|
"M-g k" consult-global-mark
|
|
|
|
|
"M-g i" consult-imenu
|
|
|
|
|
"M-g I" consult-project-imenu
|
|
|
|
|
;; M-s bindings (`search-map')
|
|
|
|
|
"M-s g" consult-sensible-grep
|
|
|
|
|
"M-s f" consult-sensible-find
|
|
|
|
|
"M-s l" consult-line
|
|
|
|
|
"M-s m" consult-multi-occur
|
|
|
|
|
"M-s k" consult-keep-lines
|
|
|
|
|
"M-s u" consult-focus-lines
|
|
|
|
|
;; Other bindings
|
|
|
|
|
"M-y" consult-yank-pop
|
|
|
|
|
"<help> a" consult-apropos
|
|
|
|
|
;; Isearch integration
|
|
|
|
|
"M-s e" consult-isearch)
|
|
|
|
|
(:with-map isearch-mode-map
|
|
|
|
|
(:bind "M-e" consult-isearch
|
|
|
|
|
"M-s e" consult-isearch
|
|
|
|
|
"M-s l" consult-line))
|
|
|
|
|
|
|
|
|
|
;; Registers
|
2021-03-29 22:52:23 +00:00
|
|
|
|
(autoload 'consult-register-preview "consult")
|
|
|
|
|
(:option register-preview-delay 0
|
2021-04-01 21:39:46 +00:00
|
|
|
|
register-preview-function #'consult-register-format)
|
|
|
|
|
(:advise register-preview :override #'consult-register-window)
|
|
|
|
|
|
|
|
|
|
;; Xref
|
|
|
|
|
(:option xref-show-xrefs-function #'consult-xref
|
|
|
|
|
xref-show-definitions-function #'consult-xref)
|
|
|
|
|
|
|
|
|
|
;; Projects
|
2021-04-20 21:25:31 +00:00
|
|
|
|
(:option consult-project-root-function #'vc-root-dir)
|
|
|
|
|
|
2021-04-20 19:24:23 +00:00
|
|
|
|
;; Competion-at-point (complete-region)
|
|
|
|
|
(:global "M-/" completion-at-point)
|
|
|
|
|
(:option completion-in-region-function #'consult-completion-in-region
|
|
|
|
|
completion-cycle-threshold 3
|
|
|
|
|
tab-always-indent 'complete))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight crux)
|
|
|
|
|
|
|
|
|
|
(:global "M-`" crux-other-window-or-switch-buffer
|
|
|
|
|
"C-o" crux-smart-open-line
|
|
|
|
|
"M-o" crux-smart-open-line-above
|
|
|
|
|
"C-M-\\" crux-cleanup-buffer-or-region
|
2021-05-24 01:23:37 +00:00
|
|
|
|
"C-x 4 t" crux-transpose-windows))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
2021-06-03 04:37:11 +00:00
|
|
|
|
;; requires extension:
|
|
|
|
|
;; https://addons.mozilla.org/en-US/firefox/addon/edit-with-emacs1/
|
|
|
|
|
(setup (:straight edit-server)
|
|
|
|
|
(when (and (daemonp)
|
|
|
|
|
(require 'edit-server nil :noerror))
|
|
|
|
|
(edit-server-start)
|
|
|
|
|
(add-hook 'edit-server-done-hook #'unfill-buffer)))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight (electric-cursor
|
|
|
|
|
:host github
|
|
|
|
|
:repo "duckwork/electric-cursor"))
|
|
|
|
|
(electric-cursor-mode +1))
|
|
|
|
|
|
|
|
|
|
(setup (:straight (elpher :host nil
|
|
|
|
|
:repo "git://thelambdalab.xyz/elpher.git"))
|
|
|
|
|
(:option elpher-ipv4-always t
|
|
|
|
|
elpher-certificate-directory (acdw/dir "elpher/")
|
|
|
|
|
elpher-gemini-max-fill-width fill-column)
|
|
|
|
|
|
|
|
|
|
(:bind "n" elpher-next-link
|
|
|
|
|
"p" elpher-prev-link
|
|
|
|
|
"o" elpher-follow-current-link
|
|
|
|
|
"G" elpher-go-current)
|
|
|
|
|
|
|
|
|
|
(:hook acdw/reading-mode)
|
|
|
|
|
|
|
|
|
|
(autoload 'elpher-bookmarks "elpher" nil t)
|
|
|
|
|
(autoload 'elpher-go "elpher" nil t)
|
|
|
|
|
|
|
|
|
|
;; Make `eww' gemini/gopher aware. From Emacswiki.
|
2021-04-30 00:47:54 +00:00
|
|
|
|
(define-advice eww-browse-url (:around (fn url &rest args) gemini-elpher)
|
|
|
|
|
(cond ((string-match-p "\\`\\(gemini\\|gopher\\)://" url)
|
|
|
|
|
(require 'elpher)
|
|
|
|
|
(elpher-go url))
|
|
|
|
|
(t (apply fn url args))))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(:when-loaded
|
|
|
|
|
(setup (:straight (gemini-write
|
|
|
|
|
:host nil
|
|
|
|
|
:repo "https://alexschroeder.ch/cgit/gemini-write"
|
2021-05-21 22:56:25 +00:00
|
|
|
|
:branch "main"))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(require 'gemini-write))))
|
|
|
|
|
|
2021-05-29 01:51:21 +00:00
|
|
|
|
(setup (:straight epithet)
|
|
|
|
|
(add-hook 'Info-selection-hook #'epithet-rename-buffer)
|
|
|
|
|
(add-hook 'eww-after-render-hook #'epithet-rename-buffer)
|
|
|
|
|
(add-hook 'help-mode-hook #'epithet-rename-buffer)
|
|
|
|
|
(add-hook 'occur-mode-hook #'epithet-rename-buffer))
|
|
|
|
|
|
2021-05-30 04:18:35 +00:00
|
|
|
|
(setup (:straight eradio)
|
2021-06-03 04:38:18 +00:00
|
|
|
|
(:needs "mpv")
|
2021-05-30 04:18:35 +00:00
|
|
|
|
(:option
|
|
|
|
|
eradio-player '("mpv" "--no-video" "--no-terminal")
|
2021-06-07 19:09:48 +00:00
|
|
|
|
eradio-channels `(("KLSU" .
|
|
|
|
|
"http://130.39.238.143:8010/stream.mp3")
|
|
|
|
|
("Soma FM Synphaera" .
|
|
|
|
|
"https://somafm.com/synphaera256.pls")
|
|
|
|
|
("SomaFM BAGel Radio" .
|
|
|
|
|
"https://somafm.com/bagel.pls")
|
|
|
|
|
("SomaFM Boot Liquor" .
|
|
|
|
|
"https://somafm.com/bootliquor320.pls")
|
|
|
|
|
("SomaFM Deep Space One" .
|
|
|
|
|
"https://somafm.com/deepspaceone.pls")
|
|
|
|
|
("SomaFM Fluid" .
|
|
|
|
|
"https://somafm.com/fluid.pls")
|
|
|
|
|
("SomaFM Underground 80s" .
|
|
|
|
|
"https://somafm.com/u80s256.pls")
|
|
|
|
|
("WRKF HD-2" .
|
|
|
|
|
,(concat "https://playerservices.streamtheworld.com/"
|
|
|
|
|
"api/livestream-redirect/WRKFHD2.mp3"))
|
|
|
|
|
("WRKF" .
|
|
|
|
|
,(concat "https://playerservices.streamtheworld.com/"
|
|
|
|
|
"api/livestream-redirect/WRKFFM.mp3"))
|
|
|
|
|
("tilderadio" .
|
2021-07-01 00:33:51 +00:00
|
|
|
|
"https://radio.tildeverse.org/radio/8000/radio.ogg")
|
|
|
|
|
("vantaradio" .
|
|
|
|
|
"https://vantaa.black/radio")))
|
2021-06-07 19:09:48 +00:00
|
|
|
|
(:global "C-c r r" eradio-play ; mnemonic: radio
|
|
|
|
|
"C-c r s" eradio-stop ; mnemonic: stop
|
|
|
|
|
"C-c r p" eradio-toggle ; mnemonic: play/pause
|
|
|
|
|
))
|
2021-05-30 04:18:35 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight expand-region)
|
2021-05-04 17:23:21 +00:00
|
|
|
|
(:global "C-=" er/expand-region))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(setup (:straight fennel-mode)
|
|
|
|
|
(:needs "fennel")
|
|
|
|
|
(autoload 'fennel-repl "fennel-mode" nil t)
|
|
|
|
|
(:file-match "\\.fnl\\'"))
|
|
|
|
|
|
|
|
|
|
(setup (:straight form-feed)
|
|
|
|
|
(global-form-feed-mode +1))
|
|
|
|
|
|
|
|
|
|
(setup (:straight geiser))
|
|
|
|
|
|
|
|
|
|
(setup (:straight (gemini-mode
|
|
|
|
|
:host nil
|
|
|
|
|
:repo "https://git.carcosa.net/jmcbray/gemini.el.git"))
|
2021-05-22 21:42:05 +00:00
|
|
|
|
(:file-match "\\.\\(gemini\\|gmi\\)\\'")
|
|
|
|
|
(:hook turn-off-auto-fill))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(setup gforth
|
|
|
|
|
(when (locate-library "gforth")
|
|
|
|
|
(autoload 'forth-mode "gforth")
|
|
|
|
|
(add-to-list 'auto-mode-alist '("\\.fs\\'" . forth-mode))
|
|
|
|
|
(autoload 'forth-block-mode "gforth")
|
|
|
|
|
(add-to-list 'auto-mode-alist '("\\.fb\\'" . forth-block-mode))))
|
|
|
|
|
|
|
|
|
|
(setup (:straight helpful)
|
|
|
|
|
(:global "<help> f" helpful-callable
|
|
|
|
|
"<help> v" helpful-variable
|
|
|
|
|
"<help> k" helpful-key
|
|
|
|
|
"<help> o" helpful-symbol
|
|
|
|
|
"C-c C-d" helpful-at-point))
|
|
|
|
|
|
2021-05-29 01:51:32 +00:00
|
|
|
|
(setup (:straight imenu-anywhere)
|
|
|
|
|
(:global "C-." imenu-anywhere))
|
|
|
|
|
|
2021-05-30 04:18:42 +00:00
|
|
|
|
(setup (:straight iscroll)
|
|
|
|
|
(:hook-into text-mode))
|
|
|
|
|
|
2021-05-02 19:15:10 +00:00
|
|
|
|
(setup (:straight ledger-mode)
|
|
|
|
|
(:needs "ledger"))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight lua-mode)
|
|
|
|
|
(:file-match "\\.lua\\'"))
|
|
|
|
|
|
|
|
|
|
(setup (:straight magit)
|
2021-05-27 17:52:12 +00:00
|
|
|
|
(:global "C-c g" magit-status)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(defun magit-display-buffer-same-window (buffer)
|
|
|
|
|
"Display BUFFER in the selected window like God intended."
|
|
|
|
|
(display-buffer buffer '(display-buffer-same-window)))
|
|
|
|
|
|
|
|
|
|
(:option magit-display-buffer-function #'magit-display-buffer-same-window
|
|
|
|
|
magit-popup-display-buffer-action '((display-buffer-same-window))
|
|
|
|
|
magit-refresh-status-buffer nil))
|
|
|
|
|
|
2021-03-29 22:52:23 +00:00
|
|
|
|
(setup (:straight marginalia)
|
2021-03-30 04:21:58 +00:00
|
|
|
|
(:option marginalia-annotators '(marginalia-annotators-heavy
|
|
|
|
|
marginalia-annotators-light))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
(marginalia-mode +1))
|
|
|
|
|
|
2021-05-29 03:42:59 +00:00
|
|
|
|
(setup (:straight (mastodon
|
|
|
|
|
:host github
|
|
|
|
|
:repo "mooseyboots/mastodon.el"))
|
|
|
|
|
(:option mastodon-instance-url "https://writing.exchange"
|
|
|
|
|
mastodon-auth-source-file (car auth-sources)
|
|
|
|
|
mastodon-client--token-file (acdw/dir "mastodon.plstore")))
|
|
|
|
|
|
2021-03-29 22:52:23 +00:00
|
|
|
|
(setup (:straight (modus-themes
|
|
|
|
|
:host gitlab
|
|
|
|
|
:repo "protesilaos/modus-themes"))
|
2021-03-30 04:21:58 +00:00
|
|
|
|
(:option modus-themes-slanted-constructs t
|
|
|
|
|
modus-themes-bold-constructs t
|
|
|
|
|
modus-themes-region 'bg-only
|
|
|
|
|
modus-themes-org-blocks 'grayscale
|
|
|
|
|
modus-themes-headings '((1 . section)
|
|
|
|
|
(t . no-color))
|
|
|
|
|
modus-themes-mode-line nil)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
2021-03-29 22:52:23 +00:00
|
|
|
|
(acdw/sunrise-sunset #'modus-themes-load-operandi
|
|
|
|
|
#'modus-themes-load-vivendi))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight mwim)
|
|
|
|
|
(:global "C-a" mwim-beginning
|
|
|
|
|
"C-e" mwim-end))
|
|
|
|
|
|
|
|
|
|
(setup (:straight nov)
|
|
|
|
|
(:option nov-text-width fill-column)
|
|
|
|
|
(:file-match "\\.epub\\'"))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-05-05 04:25:42 +00:00
|
|
|
|
(setup (:straight package-lint))
|
|
|
|
|
|
|
|
|
|
(setup (:straight package-lint-flymake))
|
|
|
|
|
|
2021-03-31 17:45:42 +00:00
|
|
|
|
(setup (:straight olivetti)
|
|
|
|
|
(:option olivetti-body-width (+ fill-column 4)
|
2021-04-19 21:16:19 +00:00
|
|
|
|
olivetti-minimum-body-width fill-column)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
2021-04-19 21:16:19 +00:00
|
|
|
|
(add-hook 'olivetti-mode-hook
|
|
|
|
|
(defun acdw/olivetti-mode-hook ()
|
|
|
|
|
(if olivetti-mode
|
|
|
|
|
(setq-local indicate-empty-lines nil
|
|
|
|
|
indicate-buffer-boundaries nil)
|
2021-04-30 22:36:25 +00:00
|
|
|
|
(acdw/setup-fringes)))))
|
2021-04-01 21:35:26 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight (orderless
|
2021-04-20 22:59:24 +00:00
|
|
|
|
:host github
|
2021-04-29 17:16:03 +00:00
|
|
|
|
:repo "oantolin/orderless"))
|
|
|
|
|
(require 'orderless)
|
|
|
|
|
(:option (prepend completion-styles) 'orderless))
|
2021-04-10 22:31:40 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight (org :host nil
|
|
|
|
|
:repo "https://code.orgmode.org/bzg/org-mode.git"))
|
2021-05-20 03:01:30 +00:00
|
|
|
|
(:straight (org-contrib :host nil
|
|
|
|
|
:repo "https://git.sr.ht/~bzg/org-contrib"))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(require 'acdw-org) ; so I don't clutter up init.el
|
|
|
|
|
(:option org-adapt-indentation nil
|
|
|
|
|
org-catch-invisible-edits 'smart
|
|
|
|
|
org-confirm-babel-evaluate nil
|
2021-05-21 16:09:18 +00:00
|
|
|
|
org-ellipsis " …"
|
2021-04-29 17:16:03 +00:00
|
|
|
|
org-export-coding-system 'utf-8-unix
|
|
|
|
|
org-export-headline-levels 8
|
|
|
|
|
org-export-with-section-numbers nil
|
|
|
|
|
org-export-with-smart-quotes t
|
|
|
|
|
org-export-with-sub-superscripts t
|
|
|
|
|
org-export-with-toc nil
|
|
|
|
|
org-fontify-done-headline t
|
|
|
|
|
org-fontify-quote-and-verse-blocks t
|
|
|
|
|
org-fontify-whole-heading-line t
|
|
|
|
|
org-hide-emphasis-markers t
|
|
|
|
|
org-html-coding-system 'utf-8-unix
|
|
|
|
|
org-imenu-depth 3
|
|
|
|
|
org-pretty-entities t
|
|
|
|
|
org-special-ctrl-a/e t
|
|
|
|
|
org-special-ctrl-k t
|
|
|
|
|
org-src-fontify-natively t
|
|
|
|
|
org-src-tab-acts-natively t
|
|
|
|
|
org-src-window-setup 'current-window
|
|
|
|
|
org-startup-truncated nil
|
|
|
|
|
org-tags-column (- 0 fill-column -3)
|
|
|
|
|
org-directory "~/org")
|
2021-05-03 20:12:14 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(:bind "RET" acdw-org/return-dwim
|
2021-06-02 03:30:05 +00:00
|
|
|
|
"<S-return>" acdw-org/org-table-copy-down
|
|
|
|
|
"M-SPC M-SPC" insert-zero-width-space
|
|
|
|
|
"C-c C-l" org-insert-link-dwim)
|
|
|
|
|
|
|
|
|
|
(with-eval-after-load 'org-export
|
|
|
|
|
(add-to-list 'org-export-filter-final-output-functions
|
|
|
|
|
#'org-export-remove-zero-width-spaces))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
2021-05-19 17:37:57 +00:00
|
|
|
|
(defun acdw/org-fix-lines-before-save ()
|
|
|
|
|
(add-hook 'before-save-hook #'acdw-org/fix-blank-lines-in-buffer 0 :local))
|
|
|
|
|
|
|
|
|
|
(:hook variable-pitch-mode
|
|
|
|
|
acdw/org-fix-lines-before-save)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(advice-add 'org-delete-backward-char
|
|
|
|
|
:override #'acdw-org/delete-backward-char))
|
2021-04-03 14:47:58 +00:00
|
|
|
|
|
2021-04-03 14:45:24 +00:00
|
|
|
|
(setup (:straight paredit)
|
2021-04-25 04:23:15 +00:00
|
|
|
|
|
2021-04-26 20:29:16 +00:00
|
|
|
|
;; I don't use paredit-splice-sexp much, and it stomps on isearch.
|
|
|
|
|
(:unbind "M-s")
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
2021-04-25 04:23:15 +00:00
|
|
|
|
(defun setup-paredit-mode ()
|
|
|
|
|
"Correct weirdnesses and set up paredit mode."
|
|
|
|
|
(paredit-mode +1)
|
2021-05-21 16:08:41 +00:00
|
|
|
|
(let ((map lisp-mode-shared-map))
|
|
|
|
|
(define-key map (kbd "DEL") #'paredit-backward-delete)
|
|
|
|
|
(define-key map (kbd "C-M-;") #'comment-or-uncomment-sexp)))
|
2021-04-25 04:23:15 +00:00
|
|
|
|
|
2021-04-10 22:31:40 +00:00
|
|
|
|
(dolist (mode lispy-modes)
|
2021-04-25 04:23:15 +00:00
|
|
|
|
(add-hook (intern (concat (symbol-name mode) "-hook"))
|
|
|
|
|
#'setup-paredit-mode))
|
2021-04-06 22:59:45 +00:00
|
|
|
|
|
2021-04-03 14:45:24 +00:00
|
|
|
|
(require 'eldoc)
|
2021-04-06 22:59:45 +00:00
|
|
|
|
(eldoc-add-command 'paredit-backward-delete 'paredit-close-round))
|
2021-04-03 14:45:24 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight paren-face)
|
|
|
|
|
(dolist (mode lispy-modes)
|
|
|
|
|
(add-hook (intern (concat (symbol-name mode) "-hook")) #'paren-face-mode)))
|
2021-04-22 15:20:25 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight restart-emacs)
|
2021-05-04 02:31:29 +00:00
|
|
|
|
(defun emacs-upgrade (&optional update-packages)
|
2021-04-29 22:55:36 +00:00
|
|
|
|
"Pull config, upgrade packages, restart Emacs."
|
2021-05-04 02:31:29 +00:00
|
|
|
|
(interactive "P")
|
|
|
|
|
(when update-packages
|
|
|
|
|
(straight-pull-all))
|
2021-04-29 22:55:36 +00:00
|
|
|
|
(emacs-git-pull-config)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(restart-emacs)))
|
2021-04-09 17:50:11 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight simple-modeline)
|
|
|
|
|
(setup (:straight minions))
|
2021-05-19 20:28:58 +00:00
|
|
|
|
(:option
|
2021-05-19 22:06:32 +00:00
|
|
|
|
;; `acdw-org/count-words' is too slow to use in the modeline.
|
|
|
|
|
;; (prepend acdw-modeline/word-count-modes) '(org-mode . acdw-org/count-words)
|
2021-05-19 20:28:58 +00:00
|
|
|
|
simple-modeline-segments '((acdw-modeline/modified
|
|
|
|
|
acdw-modeline/buffer-name
|
|
|
|
|
acdw-modeline/vc-branch
|
|
|
|
|
simple-modeline-segment-position)
|
|
|
|
|
(simple-modeline-segment-misc-info
|
2021-05-22 21:41:10 +00:00
|
|
|
|
acdw-modeline/erc
|
2021-05-19 20:28:58 +00:00
|
|
|
|
acdw-modeline/word-count
|
|
|
|
|
acdw-modeline/text-scale
|
|
|
|
|
simple-modeline-segment-process
|
|
|
|
|
acdw-modeline/god-mode-indicator
|
2021-05-22 21:41:10 +00:00
|
|
|
|
acdw-modeline/winum
|
2021-05-19 20:28:58 +00:00
|
|
|
|
acdw-modeline/minions
|
|
|
|
|
simple-modeline-segment-major-mode)))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(require 'acdw-modeline)
|
|
|
|
|
(simple-modeline-mode +1))
|
2021-04-03 14:47:19 +00:00
|
|
|
|
|
2021-05-13 00:30:24 +00:00
|
|
|
|
(setup (:straight sly)
|
|
|
|
|
(defvar acdw/lisp-bin (or (executable-find "sbcl")
|
2021-06-07 19:09:48 +00:00
|
|
|
|
(executable-find "clisp")
|
|
|
|
|
""))
|
2021-05-13 00:30:24 +00:00
|
|
|
|
(:needs acdw/lisp-bin)
|
|
|
|
|
(:option inferior-lisp-program acdw/lisp-bin
|
|
|
|
|
sly-kill-without-query-p t)
|
|
|
|
|
|
|
|
|
|
(:also-load sly-autoloads)
|
|
|
|
|
(setup (:straight clhs))
|
|
|
|
|
|
|
|
|
|
(:with-feature sly-mrepl
|
|
|
|
|
(dolist (key '("RET" "<return>"))
|
|
|
|
|
(:bind key sly-mrepl-return-at-end))
|
|
|
|
|
(:bind "C-c C-c" sly-mrepl-return))
|
|
|
|
|
|
|
|
|
|
(defun sly-mrepl-return-at-end ()
|
|
|
|
|
(interactive)
|
|
|
|
|
(if (<= (point-max) (point))
|
|
|
|
|
(sly-mrepl-return)
|
|
|
|
|
(if (bound-and-true-p paredit-mode)
|
|
|
|
|
(paredit-newline)
|
|
|
|
|
(electric-newline-and-maybe-indent)))))
|
|
|
|
|
|
2021-06-03 04:38:30 +00:00
|
|
|
|
(setup (:straight ssh-config-mode)
|
|
|
|
|
(dolist (spec '(("/\\.ssh/config\\'" . ssh-config-mode)
|
|
|
|
|
("/sshd?_config\\'" . ssh-config-mode)
|
|
|
|
|
("/knownhosts\\'" . ssh-known-hosts-mode)
|
|
|
|
|
("/authorized_keys2?\\'" . ssh-authorized-keys-mode)))
|
|
|
|
|
(add-to-list 'auto-mode-alist spec))
|
|
|
|
|
(add-hook 'ssh-config-mode-hook #'turn-on-font-lock))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight undo-fu)
|
|
|
|
|
(:global "C-/" undo-fu-only-undo
|
|
|
|
|
"C-?" undo-fu-only-redo))
|
2021-04-03 14:48:05 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight undo-fu-session)
|
|
|
|
|
(:option undo-fu-session-incompatible-files '("/COMMIT_EDITMSG\\'"
|
|
|
|
|
"/git-rebase-todo\\'")
|
|
|
|
|
undo-fu-session-directory (acdw/dir "undo/" t)
|
2021-05-11 14:44:04 +00:00
|
|
|
|
undo-fu-session-compression (acdw/system :home))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(global-undo-fu-session-mode +1))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-05-05 04:25:35 +00:00
|
|
|
|
(setup (:straight (unfocused
|
|
|
|
|
:host github
|
|
|
|
|
:repo "duckwork/unfocused"))
|
|
|
|
|
(unfocused-mode +1))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight (vertico
|
|
|
|
|
:host github
|
|
|
|
|
:repo "minad/vertico"))
|
|
|
|
|
(setq resize-mini-windows 'grow-only)
|
|
|
|
|
(if (boundp 'comp-deferred-compilation-deny-list)
|
|
|
|
|
(add-to-list 'comp-deferred-compilation-deny-list "vertico"))
|
|
|
|
|
(vertico-mode +1))
|
2021-03-29 22:52:23 +00:00
|
|
|
|
|
2021-05-27 13:13:08 +00:00
|
|
|
|
(setup (:straight vuiet)
|
|
|
|
|
(:needs "youtube-dl"
|
|
|
|
|
"mpv")
|
|
|
|
|
|
|
|
|
|
;; lastfm.el is required too, and needs some setup:
|
|
|
|
|
;; https://github.com/mihaiolteanu/lastfm.el
|
|
|
|
|
(setup (:straight lastfm)
|
|
|
|
|
(require 'lastfm)))
|
|
|
|
|
|
2021-03-29 22:52:23 +00:00
|
|
|
|
(setup (:straight web-mode)
|
2021-03-30 04:21:58 +00:00
|
|
|
|
(:option css-level-offset 2
|
|
|
|
|
js-indent-level 2
|
|
|
|
|
sgml-indent-offset 2)
|
2021-04-26 20:27:50 +00:00
|
|
|
|
(:file-match "\\.\\(p\\|dj\\)?html\\'"
|
|
|
|
|
"\\.html?\\'"
|
|
|
|
|
"\\.\\(tpl\\.\\)?php\\'"
|
|
|
|
|
"\\.[agj]sp\\'"
|
|
|
|
|
"\\.as[cp]x\\'"
|
|
|
|
|
"\\.erb\\'"
|
|
|
|
|
"\\.mustache\\'"))
|
2021-03-11 18:16:50 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight which-key)
|
|
|
|
|
(:option which-key-show-early-on-C-h t
|
2021-05-01 20:20:01 +00:00
|
|
|
|
which-key-idle-delay 1
|
2021-05-05 17:34:21 +00:00
|
|
|
|
which-key-idle-secondary-delay 0.5)
|
|
|
|
|
|
2021-05-05 00:58:30 +00:00
|
|
|
|
(which-key-setup-side-window-right-bottom)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(which-key-mode +1))
|
2021-04-10 22:30:58 +00:00
|
|
|
|
|
2021-05-05 17:34:44 +00:00
|
|
|
|
(setup (:straight whitespace-cleanup-mode)
|
|
|
|
|
(global-whitespace-cleanup-mode +1))
|
|
|
|
|
|
2021-05-03 20:12:44 +00:00
|
|
|
|
(setup (:straight winum)
|
2021-05-19 17:38:23 +00:00
|
|
|
|
(:option winum-scope 'frame-local
|
|
|
|
|
winum-auto-setup-mode-line nil
|
2021-05-22 21:41:42 +00:00
|
|
|
|
winum-ignored-buffers '(" *which-key*")
|
|
|
|
|
winum-format " %s")
|
2021-05-03 20:12:44 +00:00
|
|
|
|
|
2021-05-19 17:38:23 +00:00
|
|
|
|
(when-unfocused winum-map-keys
|
|
|
|
|
(defvar winum--keys-mapped nil
|
|
|
|
|
"Whether `winum' keys have been mapped already.")
|
|
|
|
|
(when (and (not winum--keys-mapped)
|
|
|
|
|
(display-graphic-p))
|
|
|
|
|
(:with-map winum-keymap
|
|
|
|
|
(:bind "M-0" winum-select-window-0-or-10
|
|
|
|
|
"M-1" winum-select-window-1
|
|
|
|
|
"M-2" winum-select-window-2
|
|
|
|
|
"M-3" winum-select-window-3
|
|
|
|
|
"M-4" winum-select-window-4
|
|
|
|
|
"M-5" winum-select-window-5
|
|
|
|
|
"M-6" winum-select-window-6
|
|
|
|
|
"M-7" winum-select-window-7
|
|
|
|
|
"M-8" winum-select-window-8
|
|
|
|
|
"M-9" winum-select-window-9))
|
|
|
|
|
(setq winum--keys-mapped t)))
|
2021-05-03 20:12:44 +00:00
|
|
|
|
|
|
|
|
|
(winum-mode +1))
|
|
|
|
|
|
2021-05-26 12:32:36 +00:00
|
|
|
|
(setup (:straight xr))
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight zzz-to-char)
|
|
|
|
|
(defun acdw/zzz-up-to-char (prefix)
|
|
|
|
|
"Call `zzz-up-to-char', unless issued a PREFIX, in which case
|
|
|
|
|
call `zzz-to-char'."
|
|
|
|
|
(interactive "P")
|
|
|
|
|
(if prefix
|
|
|
|
|
(call-interactively #'zzz-to-char)
|
|
|
|
|
(call-interactively #'zzz-up-to-char)))
|
|
|
|
|
|
|
|
|
|
(:global "M-z" acdw/zzz-up-to-char))
|
2021-04-26 20:29:51 +00:00
|
|
|
|
|
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
;;; System-dependent
|
|
|
|
|
|
|
|
|
|
;;;; Home
|
2021-05-11 14:44:04 +00:00
|
|
|
|
(when (acdw/system :home)
|
2021-04-29 17:16:03 +00:00
|
|
|
|
|
|
|
|
|
(setup (:straight pkgbuild-mode))
|
|
|
|
|
|
|
|
|
|
(setup (:straight (pdf-tools
|
|
|
|
|
:host github
|
|
|
|
|
:repo "vedang/pdf-tools"))
|
2021-05-30 04:18:46 +00:00
|
|
|
|
(add-to-list 'auto-mode-alist '("\\.pdf\\'" . pdf-view-mode))
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(pdf-loader-install))
|
2021-04-26 20:29:51 +00:00
|
|
|
|
|
2021-04-29 17:16:03 +00:00
|
|
|
|
(setup (:straight vterm)))
|
2021-06-07 19:09:48 +00:00
|
|
|
|
|
|
|
|
|
;;;; Work
|
|
|
|
|
(when (acdw/system :work)
|
|
|
|
|
(setup (:straight ahk-mode)))
|