Merge branch 'master' of git.sr.ht:~acdw/.emacs.d into master
This commit is contained in:
commit
673c6e5ceb
|
@ -1,4 +1,6 @@
|
|||
*
|
||||
!early-init.el
|
||||
!init.el
|
||||
!.gitignore
|
||||
!.gitignore
|
||||
!README.org
|
||||
!LICENSE
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified copies of
|
||||
this license document, and changing it is allowed as long as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
* my =emacs.d=
|
||||
|
||||
hey. I use emacs now.
|
||||
|
||||
this is my =~/.emacs.d=.
|
||||
|
||||
I was going to use Org-mode but .. I decided not to.
|
||||
|
||||
|
||||
* License
|
||||
|
||||
WTFPL. For more info, see =LICENSE=.
|
||||
|
||||
Probably that's not legal under the terms of the GPL or whatever Emacs is licensed under.
|
||||
SUE ME, RMS
|
|
@ -1,47 +1,47 @@
|
|||
;;; early-init.el ~ acdw
|
||||
;;; early-init.el ~ acdw -*- lexical-binding: t; coding: utf-8; fill-column: 85 -*-
|
||||
|
||||
;;; this needs to happen first -- speed up init
|
||||
;;; Commentary:
|
||||
;; `early-init.el' is new as of Emacs 27.1. It contains ... /early initiation/.
|
||||
;; What does that mean? Who knows. What I /do know/ is that it runs /before/
|
||||
;; `package.el' is loaded, so I can stop it from loading, since I use `straight.el'.
|
||||
;; Other than that, there's some other init stuff that needs to happen as early
|
||||
;; as possible -- think bootstrap-level.
|
||||
|
||||
;;; Speed up startup
|
||||
(setq gc-cons-threshold most-positive-fixnum)
|
||||
|
||||
(defvar file-name-handler-alist-old file-name-handler-alist)
|
||||
(setq file-name-handler-alist nil)
|
||||
|
||||
(setq message-log-max 16384)
|
||||
(setq byte-compile-warnings
|
||||
'(not free-vars unresolved noruntime lexical make-local))
|
||||
'(not free-vars unresolved noruntime lexical make-local))
|
||||
|
||||
;;; Restore stuff after startup
|
||||
(add-hook 'after-init-hook
|
||||
(lambda ()
|
||||
(setq file-name-handler-alist file-name-handler-alist-old)
|
||||
(setq gc-cons-threshold (* 32 1024 1024)))
|
||||
(setq gc-cons-threshold (* 32 1024 1024))
|
||||
(garbage-collect))
|
||||
t)
|
||||
|
||||
;;(setq debug-on-error t)
|
||||
;; (setq debug-on-error t)
|
||||
|
||||
;;; different platforms
|
||||
;;; Define the platforms I work on
|
||||
(defconst *acdw/at-work* (eq system-type 'windows-nt))
|
||||
(defconst *acdw/at-larry* (string= (system-name) "larry"))
|
||||
(defconst *acdw/at-bax* (string= (system-name) "bax"))
|
||||
(defconst *acdw/at-home* (or *acdw/at-larry* *acdw/at-bax*))
|
||||
|
||||
;; this needs to be before bootstrapping straight.el
|
||||
;;;; When at work, I have to use Portable Git.
|
||||
(when *acdw/at-work*
|
||||
(add-to-list 'exec-path "~/bin")
|
||||
(add-to-list 'exec-path "C:/Users/aduckworth/Downloads/PortableGit/bin"))
|
||||
|
||||
;;; gui
|
||||
(add-to-list 'default-frame-alist '(tool-bar-lines . 0))
|
||||
(add-to-list 'default-frame-alist '(menu-bar-lines . 0))
|
||||
;;; `straight.el' ~ github.com/raxod502/straight.el
|
||||
|
||||
(setq inhibit-startup-buffer-menu t)
|
||||
(setq inhibit-startup-screen t)
|
||||
(setq initial-buffer-choice t)
|
||||
(setq initial-scratch-message nil)
|
||||
|
||||
;;; straight.el ~ github.com/raxod502/straight.el
|
||||
|
||||
(setq straight-use-package-by-default t) ; use use-package
|
||||
(setq use-package-hook-name-suffix nil) ; don't assume -hook
|
||||
|
||||
;; bootstrap
|
||||
;;;; Bootstrap
|
||||
;; NOTE: this doesn't work on Windows (download straight directly)
|
||||
(defvar bootstrap-version)
|
||||
(let ((bootstrap-file
|
||||
(expand-file-name "straight/repos/straight.el/bootstrap.el"
|
||||
|
@ -49,12 +49,19 @@
|
|||
(bootstrap-version 5))
|
||||
(unless (file-exists-p bootstrap-file)
|
||||
(with-current-buffer
|
||||
(url-retrieve-synchronously
|
||||
"https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
|
||||
'silent 'inhibit-cookies)
|
||||
(url-retrieve-synchronously
|
||||
"https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
|
||||
'silent 'inhibit-cookies)
|
||||
(goto-char (point-max))
|
||||
(eval-print-last-sexp)))
|
||||
(load bootstrap-file nil 'nomessage))
|
||||
|
||||
;; install use-package with straight
|
||||
;;; Bootstrap `use-package'
|
||||
(setq-default use-package-verbose nil
|
||||
use-package-expand-minimally t
|
||||
use-package-enable-imenu-support t
|
||||
use-package-hook-name-suffix nil)
|
||||
|
||||
(straight-use-package 'use-package)
|
||||
|
||||
(setq straight-use-package-by-default t)
|
||||
|
|
617
init.el
617
init.el
|
@ -1,231 +1,247 @@
|
|||
;;; init.el ~ acdw -*- lexical-binding: t -*-
|
||||
|
||||
;;; emacs configuration - general
|
||||
;;; init.el -*- lexical-binding: t; coding: utf-8; fill-column: 70 -*-
|
||||
|
||||
;;; Commentary:
|
||||
;; I /was/ going to convert this to org-mode, but then I found this
|
||||
;; page: https://yiufung.net/post/pure-emacs-lisp-init-skeleton/,
|
||||
;; which pointed out that I could use `outline-mode' (or in my case,
|
||||
;; `outshine') to fold and navigate a pure-elisp `init.el'. So that's
|
||||
;; what I'm doing.
|
||||
;;; Basic emacs config & built-in packages
|
||||
;;;; /Really/ basic emacs config
|
||||
;; I /did/ use `better-defaults', but it turns out that that package
|
||||
;; is (a) short and (b) mostly overriden by other settings.
|
||||
(use-package emacs
|
||||
:demand
|
||||
:demand ; make sure this stuff loads
|
||||
:init
|
||||
;; where I am
|
||||
(setq calendar-location-name "Baton Rouge, LA")
|
||||
(setq calendar-latitude 30.39)
|
||||
(setq calendar-longitude -91.83)
|
||||
|
||||
(setq browse-url-browser-function 'browse-url-generic)
|
||||
(setq browse-url-generic-program "firefox"))
|
||||
;; firefox is love, firefox is life
|
||||
(setq browse-url-browser-function 'browse-url-firefox
|
||||
browse-url-new-window-flag t
|
||||
browse-url-firefox-new-window-is-tab t)
|
||||
|
||||
(use-package no-littering
|
||||
:config
|
||||
(require 'recentf)
|
||||
(add-to-list 'recentf-exclude no-littering-var-directory)
|
||||
(add-to-list 'recentf-exclude no-littering-etc-directory)
|
||||
;; honestly not sure if this is necessary
|
||||
(autoload 'zap-up-to-char "misc"
|
||||
"Kill up to, but not including, ARGth occurence of CHAR." t)
|
||||
|
||||
(setq delete-old-versions t)
|
||||
(setq kept-new-versions 6)
|
||||
(setq kept-old-versions 2)
|
||||
(setq version-control t)
|
||||
(setq backup-directory-alist
|
||||
`((".*" . ,(no-littering-expand-var-file-name "backup/"))))
|
||||
;; show parentheses
|
||||
(setq show-paren-style 'mixed)
|
||||
(show-paren-mode)
|
||||
|
||||
(setq auto-save-file-name-transforms
|
||||
`((".*" ,(no-littering-expand-var-file-name "auto-save/") t)))
|
||||
(auto-save-mode)
|
||||
;; always work on visual lines
|
||||
(global-visual-line-mode)
|
||||
|
||||
(setq custom-file (no-littering-expand-etc-file-name "custom.el"))
|
||||
;; make the mouse avoid where I'm typing
|
||||
(mouse-avoidance-mode 'jump)
|
||||
|
||||
(setq create-lockfiles nil))
|
||||
;; delete the selection when I start typing, like a normal editor
|
||||
(delete-selection-mode)
|
||||
|
||||
(use-package auth-source
|
||||
:init
|
||||
(setq auth-sources '("~/.authinfo")) ;; TODO: gpg
|
||||
(setq user-full-name "Case Duckworth")
|
||||
(setq user-mail-address "acdw@acdw.net"))
|
||||
;; ignore case
|
||||
(setq-default completion-ignore-case t
|
||||
read-buffer-completion-ignore-case t
|
||||
read-file-name-completion-ignore-case t)
|
||||
|
||||
(use-package better-defaults
|
||||
:demand
|
||||
:config ; add other "better defaults" of my own
|
||||
;; etc defaults
|
||||
(fset 'yes-or-no-p 'y-or-n-p)
|
||||
(setq-default indent-tabs-mode nil
|
||||
save-interprogram-paste-before-kill t
|
||||
apropos-do-all t
|
||||
mouse-yank-at-point t
|
||||
require-final-newline t
|
||||
visible-bell (not *acdw/at-larry*)
|
||||
ediff-window-setup-function 'ediff-setup-windows-plain
|
||||
use-dialog-box nil
|
||||
mark-even-if-inactive nil
|
||||
sentence-end-double-space t)
|
||||
|
||||
;; utf-8 is now, old man
|
||||
(set-charset-priority 'unicode)
|
||||
(set-language-environment "UTF-8")
|
||||
(set-default-coding-systems 'utf-8)
|
||||
(set-terminal-coding-system 'utf-8)
|
||||
(set-keyboard-coding-system 'utf-8)
|
||||
(set-selection-coding-system 'utf-8)
|
||||
(prefer-coding-system 'utf-8)
|
||||
(setq default-buffer-file-coding-system 'utf-8
|
||||
default-process-coding-system '(utf-8-unix . utf-8-unix)
|
||||
locale-coding-system 'utf-8)
|
||||
|
||||
;; don't confirm killing
|
||||
(setq confirm-kill-processes nil
|
||||
confirm-kill-emacs nil)
|
||||
|
||||
;; simplify the GUI
|
||||
(setq default-frame-alist '((tool-bar-lines . 0)
|
||||
(menu-bar-lines . 0)
|
||||
(vertical-scroll-bars . nil)
|
||||
(horizontal-scroll-bars . nil)
|
||||
(right-divider-width . 2)
|
||||
(bottom-divider-width . 2)
|
||||
(left-fringe-width . 2)
|
||||
(right-fringe-width . 2))
|
||||
inhibit-startup-buffer-menu t
|
||||
inhibit-startup-screen t
|
||||
initial-buffer-choice t
|
||||
initial-scratch-message nil)
|
||||
|
||||
;; When at larry, fullscreen emacs.
|
||||
(when *acdw/at-larry*
|
||||
(setq visible-bell nil))
|
||||
(add-to-list 'default-frame-alist '(fullscreen . maximized)))
|
||||
|
||||
(auto-save-mode)
|
||||
;; set up the cursor
|
||||
(blink-cursor-mode 0)
|
||||
(setq-default cursor-type 'bar
|
||||
cursor-in-non-selected-windows 'hollow)
|
||||
|
||||
(defun full-auto-save ()
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(dolist (buf (buffer-list))
|
||||
(set-buffer buf)
|
||||
(if (and (buffer-file-name) (buffer-modified-p))
|
||||
(basic-save-buffer)))))
|
||||
(add-hook 'auto-save-hook 'full-auto-save)
|
||||
(add-hook 'focus-out-hook 'full-auto-save) ; might be resource-intensive
|
||||
;; display line numbers in `prog-mode'
|
||||
(add-hook 'prog-mode-hook
|
||||
(if (and (fboundp 'display-line-numbers-mode)
|
||||
(display-graphic-p))
|
||||
#'display-line-numbers-mode
|
||||
#'linum-mode))
|
||||
|
||||
;; follow the split!
|
||||
;; custom functions
|
||||
(defun split-and-follow-below ()
|
||||
"Split the window below and switch to the split."
|
||||
(interactive)
|
||||
(split-window-below)
|
||||
(balance-windows)
|
||||
(other-window 1))
|
||||
|
||||
(defun split-and-follow-right ()
|
||||
"Split the window right and switch to the split."
|
||||
(interactive)
|
||||
(split-window-right)
|
||||
(balance-windows)
|
||||
(other-window 1))
|
||||
|
||||
(setq save-place-file (no-littering-expand-var-file-name "places"))
|
||||
(save-place-mode)
|
||||
(defun full-auto-save ()
|
||||
"Save all buffers that (a) have files associated and (b) are modified."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(dolist (buf (buffer-list))
|
||||
(set-buffer buf)
|
||||
(if (and (buffer-file-name) (buffer-modified-p))
|
||||
(basic-save-buffer)))))
|
||||
|
||||
(set-language-environment "UTF-8")
|
||||
(prefer-coding-system 'utf-8)
|
||||
(set-default-coding-systems 'utf-8)
|
||||
(set-terminal-coding-system 'utf-8)
|
||||
(set-keyboard-coding-system 'utf-8)
|
||||
(setq default-buffer-file-coding-system 'utf-8)
|
||||
|
||||
(fset 'yes-or-no-p 'y-or-n-p)
|
||||
|
||||
(global-visual-line-mode)
|
||||
(mouse-avoidance-mode 'jump)
|
||||
(setq show-paren-style 'mixed)
|
||||
(delete-selection-mode 1)
|
||||
|
||||
;; TODO figure out how to add this to the :hook block
|
||||
(add-hook 'prog-mode-hook (if (and (fboundp 'display-line-numbers-mode)
|
||||
(display-graphic-p))
|
||||
#'display-line-numbers-mode
|
||||
#'linum-mode))
|
||||
|
||||
(setq completion-ignore-case t)
|
||||
(setq read-buffer-completion-ignore-case t)
|
||||
(setq read-file-name-completion-ignore-case t)
|
||||
|
||||
;; don't confirm death
|
||||
(setq confirm-kill-processes nil)
|
||||
(setq confirm-kill-emacs nil)
|
||||
|
||||
;; cursor betterment
|
||||
(blink-cursor-mode 0)
|
||||
(setq-default cursor-type 'bar)
|
||||
(defun kill-this-buffer ()
|
||||
"Kill the current buffer."
|
||||
(interactive)
|
||||
(kill-buffer nil))
|
||||
|
||||
:bind
|
||||
("C-x C-b" . ibuffer)
|
||||
("M-z" . zap-up-to-char)
|
||||
([remap split-window-below] . split-and-follow-below)
|
||||
([remap split-window-right] . split-and-follow-right)
|
||||
("C-x f" . find-file)
|
||||
("C-z" . nil)
|
||||
("C-x k" . kill-this-buffer)
|
||||
("C-x K" . kill-buffer)
|
||||
|
||||
:hook
|
||||
(prog-mode-hook . prettify-symbols-mode)
|
||||
(auto-save-hook . full-auto-save)
|
||||
(focus-out-hook . full-auto-save)
|
||||
((auto-save-hook focus-out-hook) . full-auto-save)
|
||||
(before-save-hook . delete-trailing-whitespace))
|
||||
|
||||
;;;; Keep .emacs.d clean
|
||||
;; load this early for other packages to use
|
||||
(use-package no-littering
|
||||
:demand
|
||||
:config
|
||||
(setq custom-file (no-littering-expand-etc-file-name "custom.el"))
|
||||
|
||||
(setq create-lockfiles nil)
|
||||
|
||||
(setq delete-old-versions t
|
||||
kept-new-versions 6
|
||||
kept-old-versions 2
|
||||
version-control t)
|
||||
|
||||
(setq backup-directory-alist
|
||||
`((".*" . ,(no-littering-expand-var-file-name "backup/"))))
|
||||
|
||||
(setq auto-save-file-name-transforms
|
||||
`((".*" ,(no-littering-expand-var-file-name "auto-save/") t)))
|
||||
(auto-save-mode))
|
||||
|
||||
;;;; Uniquily name buffers
|
||||
(use-package uniquify
|
||||
:straight nil
|
||||
:init
|
||||
(setq uniquify-buffer-name-style 'forward))
|
||||
|
||||
;;;; Use async when possible
|
||||
(use-package async
|
||||
:config
|
||||
(dired-async-mode 1))
|
||||
(dired-async-mode))
|
||||
|
||||
;;;; Autocompile elisp files (like this one)
|
||||
(use-package auto-compile
|
||||
:init
|
||||
(setq load-prefer-newer t)
|
||||
:config
|
||||
(auto-compile-on-load-mode)
|
||||
(setq load-prefer-newer t))
|
||||
|
||||
;; start the server when at home
|
||||
|
||||
(if *acdw/at-home*
|
||||
(server-start))
|
||||
|
||||
;;; quality-of-life improvements
|
||||
|
||||
(use-package diminish)
|
||||
|
||||
(use-package which-key
|
||||
:diminish which-key-mode
|
||||
:config
|
||||
(which-key-mode))
|
||||
(auto-compile-on-load-mode))
|
||||
|
||||
;;;; Recent files
|
||||
(use-package recentf
|
||||
:init
|
||||
(setq recentf-max-menu-items 100)
|
||||
(setq recentf-max-saved-items 100)
|
||||
(setq recentf-max-menu-items 100
|
||||
recentf-max-saved-items 100)
|
||||
:config
|
||||
(add-to-list 'recentf-exclude no-littering-var-directory)
|
||||
(add-to-list 'recentf-exclude no-littering-etc-directory)
|
||||
(recentf-mode))
|
||||
|
||||
(use-package savehist
|
||||
;;;; Save places in files
|
||||
(use-package saveplace
|
||||
:init
|
||||
(setq save-place-file (no-littering-expand-var-file-name "places"))
|
||||
(when *acdw/at-work*
|
||||
(setq save-place-forget-unreadable-files nil))
|
||||
:config
|
||||
(savehist-mode)
|
||||
(setq savehist-additional-variables
|
||||
'(kill-ring search-ring regexp-search-ring)))
|
||||
(save-place-mode))
|
||||
|
||||
;;;; Save history of commands, etc.
|
||||
(use-package savehist
|
||||
:init
|
||||
(setq savehist-additional-variables
|
||||
'(kill-ring
|
||||
search-ring
|
||||
regexp-search-ring))
|
||||
:config
|
||||
(savehist-mode))
|
||||
|
||||
;;;; Authority sources for logins
|
||||
;; TODO: use gpg
|
||||
(use-package auth-source
|
||||
:init
|
||||
(setq auth-sources '("~/.authinfo"))
|
||||
(setq user-full-name "Case Duckworth")
|
||||
(setq user-mail-address "acdw@acdw.net"))
|
||||
|
||||
;;; General-ish Packages
|
||||
;;;; General improvements
|
||||
;;;;; Diminish TODO: is this necessary?
|
||||
(use-package diminish)
|
||||
|
||||
;;;;; Restart emacs /from within/ emacs
|
||||
(use-package restart-emacs)
|
||||
|
||||
(use-package volatile-highlights
|
||||
:config
|
||||
(volatile-highlights-mode t))
|
||||
|
||||
(use-package zop-to-char
|
||||
:bind
|
||||
([remap zap-to-char] . zop-to-char)
|
||||
([remap zap-up-to-char] . zop-up-to-char))
|
||||
|
||||
(use-package easy-kill
|
||||
:bind
|
||||
([remap kill-ring-save] . easy-kill)
|
||||
([remap mark-sexp] . easy-mark))
|
||||
|
||||
(use-package whole-line-or-region
|
||||
:config
|
||||
(whole-line-or-region-global-mode 1))
|
||||
|
||||
(use-package avy
|
||||
:bind
|
||||
("M-s" . avy-goto-char-timer))
|
||||
|
||||
(use-package selectrum
|
||||
:config
|
||||
(ido-mode -1) ;; not sure why this is necessary
|
||||
(setq enable-recursive-minibuffers t)
|
||||
(minibuffer-depth-indicate-mode)
|
||||
(selectrum-mode 1))
|
||||
|
||||
(use-package prescient)
|
||||
|
||||
(use-package selectrum-prescient
|
||||
:config
|
||||
(selectrum-prescient-mode 1)
|
||||
(prescient-persist-mode 1))
|
||||
|
||||
(use-package ctrlf
|
||||
:config
|
||||
(ctrlf-mode 1))
|
||||
|
||||
;;; programming
|
||||
|
||||
(use-package aggressive-indent
|
||||
:diminish aggressive-indent-mode
|
||||
:hook
|
||||
(prog-mode-hook . aggressive-indent-mode))
|
||||
|
||||
(use-package magit
|
||||
:if *acdw/at-home*
|
||||
:bind
|
||||
("C-x g" . magit))
|
||||
|
||||
(use-package forge
|
||||
:if *acdw/at-home*
|
||||
:after magit
|
||||
:custom
|
||||
(forge-owned-accounts '(("duckwork"))))
|
||||
|
||||
(use-package company
|
||||
:commands company-mode
|
||||
;;;; User interface
|
||||
;;;;; Pop-up help for keys
|
||||
(use-package which-key
|
||||
:diminish which-key-mode
|
||||
:init
|
||||
(setq company-idle-delay 0.1)
|
||||
:hook
|
||||
(prog-mode-hook . company-mode)
|
||||
:bind (:map company-active-map
|
||||
("C-n" . company-select-next)
|
||||
("C-p" . company-select-previous))
|
||||
(setq which-key-enable-extended-define-key t)
|
||||
:config
|
||||
(use-package company-quickhelp
|
||||
:hook
|
||||
(company-mode-hook . (lambda ()
|
||||
(company-quickhelp-local-mode)))))
|
||||
(which-key-setup-side-window-right-bottom)
|
||||
(which-key-mode))
|
||||
|
||||
;;;;; A better help buffer
|
||||
(use-package helpful
|
||||
:bind
|
||||
("C-h f" . helpful-callable)
|
||||
|
@ -235,40 +251,37 @@
|
|||
("C-h F" . helpful-function)
|
||||
("C-h C" . helpful-command))
|
||||
|
||||
(when *acdw/at-home*
|
||||
(use-package su
|
||||
:config
|
||||
(su-mode))
|
||||
|
||||
(use-package trashed
|
||||
:init
|
||||
(setq delete-by-moving-to-trash t)))
|
||||
|
||||
(use-package smartparens
|
||||
:config
|
||||
(require 'smartparens-config)
|
||||
(smartparens-global-mode))
|
||||
|
||||
(use-package rainbow-mode
|
||||
;;;;; A better `outline-mode'
|
||||
(use-package outshine
|
||||
:init
|
||||
(setq outshine-cycle-emulate-tab t)
|
||||
:bind (:map outshine-mode-map
|
||||
("<S-iso-lefttab>" . outshine-cycle-buffer)
|
||||
("<backtab>" . outshine-cycle-buffer))
|
||||
:hook
|
||||
(prog-mode-hook . rainbow-mode))
|
||||
(emacs-lisp-mode-hook: . outshine-mode))
|
||||
|
||||
(use-package slime
|
||||
;;;;; Item selection & narrowing
|
||||
(use-package selectrum
|
||||
:init
|
||||
(setq inferior-lisp-program "/usr/bin/sbcl"))
|
||||
|
||||
;;; writing
|
||||
|
||||
(use-package visual-fill-column
|
||||
:init
|
||||
(setq split-window-preferred-function 'visual-fill-column-split-window-sensibly)
|
||||
(setq visual-fill-column-center-text t)
|
||||
(setq enable-recursive-minibuffers t)
|
||||
(minibuffer-depth-indicate-mode)
|
||||
:config
|
||||
(advice-add 'text-scale-adjust
|
||||
:after #'visual-fill-column-adjust))
|
||||
(selectrum-mode))
|
||||
|
||||
;;; window management
|
||||
(use-package prescient)
|
||||
|
||||
(use-package selectrum-prescient
|
||||
:config
|
||||
(selectrum-prescient-mode)
|
||||
(prescient-persist-mode))
|
||||
|
||||
;;;;; Searching
|
||||
(use-package ctrlf
|
||||
:config
|
||||
(ctrlf-mode))
|
||||
|
||||
;;;;; Visually switch windows
|
||||
(use-package switch-window
|
||||
:init
|
||||
(setq switch-window-shortcut-style 'qwerty)
|
||||
|
@ -276,37 +289,20 @@
|
|||
([remap other-window] . switch-window)
|
||||
("s-o" . switch-window))
|
||||
|
||||
;;; theming and looks
|
||||
|
||||
(use-package dynamic-fonts
|
||||
:init
|
||||
(setq dynamic-fonts-preferred-monospace-fonts
|
||||
'("Iosevka Term Slab"
|
||||
"Consolas"
|
||||
"Fira Code"
|
||||
"DejaVu Sans Mono"
|
||||
"Courier"
|
||||
"Fixed"))
|
||||
(setq dynamic-fonts-preferred-monospace-point-size 11)
|
||||
(setq dynamic-fonts-preferred-proportional-fonts
|
||||
'("DejaVu Sans"
|
||||
"Georgia"
|
||||
"Times New Roman"
|
||||
"Times"))
|
||||
(setq dynamic-fonts-preferred-proportional-point-size 12)
|
||||
:config
|
||||
(dynamic-fonts-setup))
|
||||
|
||||
;;;; Theming, looks, fonts
|
||||
;;;;; Modeline
|
||||
(use-package doom-modeline
|
||||
:init
|
||||
(setq doom-modeline-icon nil)
|
||||
(setq doom-modeline-enable-word-count t)
|
||||
(setq doom-modeline-icon nil
|
||||
doom-modeline-enable-word-count t)
|
||||
|
||||
(when *acdw/at-larry*
|
||||
(setq display-time-format "%R")
|
||||
(display-time-mode))
|
||||
:hook
|
||||
(after-init-hook . doom-modeline-mode))
|
||||
|
||||
:hook
|
||||
(window-setup-hook . doom-modeline-mode))
|
||||
;;;;; Ligatures
|
||||
(use-package ligature
|
||||
:straight (ligature
|
||||
:host github
|
||||
|
@ -327,14 +323,12 @@
|
|||
":=" "..." ":>" ":<" ">:" "<:"
|
||||
"::=" ;; add others here
|
||||
))
|
||||
(global-ligature-mode t))
|
||||
|
||||
(global-ligature-mode))
|
||||
;;;;; Unicode
|
||||
(use-package unicode-fonts
|
||||
:config
|
||||
(unicode-fonts-setup))
|
||||
|
||||
;; modus themes
|
||||
|
||||
;;;;; Modus themes
|
||||
(use-package modus-operandi-theme
|
||||
:if window-system
|
||||
:config
|
||||
|
@ -362,8 +356,131 @@
|
|||
(run-at-time (nth 4 (split-string (sunrise-sunset)))
|
||||
(* 60 60 24) #'acdw/sunset)
|
||||
(run-at-time "12am" (* 60 60 24) #'acdw/sunset)))
|
||||
;;;; General text editing
|
||||
;;;;; Jump to characters fast
|
||||
(use-package avy
|
||||
:bind
|
||||
("M-s" . avy-goto-char-timer))
|
||||
;;;;; Show text commands acted on
|
||||
(use-package volatile-highlights
|
||||
:config
|
||||
(volatile-highlights-mode))
|
||||
;;;;; Visual replacement for `zap-to-char'
|
||||
(use-package zop-to-char
|
||||
:bind
|
||||
([remap zap-to-char] . zop-to-char)
|
||||
([remap zap-up-to-char] . zop-up-to-char))
|
||||
;;;;; Kill & mark things more visually
|
||||
(use-package easy-kill
|
||||
:bind
|
||||
([remap kill-ring-save] . easy-kill)
|
||||
([remap mark-sexp] . easy-mark))
|
||||
;;;;; Operate on the current line if no region is active
|
||||
(use-package whole-line-or-region
|
||||
:config
|
||||
(whole-line-or-region-global-mode))
|
||||
|
||||
;;; gemini/gopher
|
||||
;;;;; Expand region
|
||||
(use-package expand-region
|
||||
:bind
|
||||
("C-=" . er/expand-region))
|
||||
;;;; Programming
|
||||
;;;;; Code completion
|
||||
(use-package company
|
||||
:init
|
||||
(setq company-idle-delay 0.1
|
||||
company-show-numbers t)
|
||||
:config
|
||||
(let ((map company-active-map))
|
||||
(mapc (lambda (x)
|
||||
(define-key map (format "%d" x)
|
||||
`(lambda ()
|
||||
(interactive)
|
||||
(company-complete-number ,x))))
|
||||
(number-sequence 0 9)))
|
||||
:hook
|
||||
(prog-mode-hook . company-mode)
|
||||
:bind (:map company-active-map
|
||||
("C-n" . company-select-next)
|
||||
("C-p" . company-select-previous)))
|
||||
|
||||
(use-package company-quickhelp
|
||||
:hook
|
||||
(company-mode-hook . company-quickhelp-local-mode))
|
||||
|
||||
(use-package company-prescient
|
||||
:hook
|
||||
(company-mode-hook . company-prescient-mode))
|
||||
|
||||
;;;;; Git integration
|
||||
(use-package magit
|
||||
:if *acdw/at-home*
|
||||
:bind
|
||||
("C-x g" . magit-status)
|
||||
:config
|
||||
(add-to-list 'magit-no-confirm 'stage-all-changes))
|
||||
|
||||
;; use libgit to speed up magit, only at home
|
||||
(when (and *acdw/at-home* (executable-find "cmake"))
|
||||
(use-package libgit)
|
||||
|
||||
(use-package magit-libgit
|
||||
:after (magit libgit))
|
||||
)
|
||||
|
||||
(use-package forge
|
||||
:if *acdw/at-home*
|
||||
:after magit
|
||||
:config
|
||||
(setq forge-owned-accounts '(("duckwork"))))
|
||||
;;;;; Code formatting & display
|
||||
;;;;;; Keep code properly indented
|
||||
(use-package aggressive-indent
|
||||
:diminish aggressive-indent-mode
|
||||
:hook
|
||||
(prog-mode-hook . aggressive-indent-mode))
|
||||
;;;;;; Smartly deal with pairs
|
||||
(use-package smartparens
|
||||
:config
|
||||
(require 'smartparens-config)
|
||||
(smartparens-global-mode))
|
||||
;;;;;; Show delimiters as different colors
|
||||
(use-package rainbow-delimiters
|
||||
:hook
|
||||
(prog-mode-hook . rainbow-delimiters-mode))
|
||||
;;;;;; Show colors as they appear in the buffer
|
||||
(use-package rainbow-mode
|
||||
:hook
|
||||
(prog-mode-hook . rainbow-mode))
|
||||
;;;; Writing
|
||||
;;;;; `fill-column', but in `visual-line-mode'
|
||||
(use-package visual-fill-column
|
||||
:init
|
||||
(setq split-window-preferred-function 'visual-fill-column-split-window-sensibly)
|
||||
(setq visual-fill-column-center-text t)
|
||||
:config
|
||||
(advice-add 'text-scale-adjust
|
||||
:after #'visual-fill-column-adjust))
|
||||
|
||||
;;;; Machine-specific
|
||||
;;;;; Linux at home
|
||||
(when *acdw/at-home*
|
||||
;;;;;; Edit files with `sudo' (I think?)
|
||||
(use-package su
|
||||
:config
|
||||
(su-mode))
|
||||
;;;;;; Implement XDG Trash specification
|
||||
(use-package trashed
|
||||
:init
|
||||
(setq delete-by-moving-to-trash t))
|
||||
;;;;;; Build exec-path from $PATH
|
||||
(use-package exec-path-from-shell
|
||||
:demand
|
||||
:config
|
||||
(exec-path-from-shell-initialize))
|
||||
)
|
||||
;;; Specialized packages
|
||||
;;;; Gemini & Gopher
|
||||
(use-package elpher
|
||||
:straight (elpher
|
||||
:repo "git://thelambdalab.xyz/elpher.git")
|
||||
|
@ -372,7 +489,10 @@
|
|||
("p" . elpher-prev-link)
|
||||
("o" . elpher-follow-current-link)
|
||||
("G" . elpher-go-current))
|
||||
:hook (elpher-mode-hook . variable-pitch-mode))
|
||||
:hook (elpher-mode-hook . (lambda ()
|
||||
(variable-pitch-mode)
|
||||
(set-fill-column 100)
|
||||
(visual-fill-column-mode))))
|
||||
|
||||
(use-package gemini-mode
|
||||
:straight (gemini-mode
|
||||
|
@ -418,7 +538,7 @@
|
|||
(re-search-forward "\\(gemini://.*\\.gmi\\)")
|
||||
(elpher-go (match-string 1)))))
|
||||
|
||||
;;; exwm ~ Emacs X Window Manager
|
||||
;;;; exwm ~ Emacs X Window Manager
|
||||
(when *acdw/at-larry*
|
||||
(use-package exwm
|
||||
:if window-system
|
||||
|
@ -515,7 +635,7 @@
|
|||
|
||||
) ;; end of *acdw/at-larry* block for exwm
|
||||
|
||||
;;; other applications
|
||||
;;;; IRC
|
||||
(use-package circe
|
||||
:if *acdw/at-larry*
|
||||
:init
|
||||
|
@ -582,8 +702,7 @@
|
|||
(circe-originator-face ((t (:weight bold))))
|
||||
(circe-prompt-face ((t (:inherit 'circe-my-message-face)))))
|
||||
|
||||
;;; eshell
|
||||
|
||||
;;;; eshell
|
||||
(use-package eshell
|
||||
:init
|
||||
(defun eshell/emacs (&rest args)
|
||||
|
@ -607,9 +726,9 @@
|
|||
(use-package eshell-syntax-highlighting
|
||||
:after esh-mode
|
||||
:config
|
||||
(eshell-syntax-highlighting-global-mode 1))
|
||||
(eshell-syntax-highlighting-global-mode))
|
||||
|
||||
;;; org-mode
|
||||
;;;; org-mode
|
||||
(use-package org
|
||||
:init
|
||||
(setq org-startup-indented t)
|
||||
|
@ -625,27 +744,11 @@
|
|||
(match-end 1)
|
||||
"•"))))))
|
||||
:hook
|
||||
(org-mode-hook . (lambda ()
|
||||
(variable-pitch-mode 1)
|
||||
(visual-line-mode)
|
||||
(visual-fill-column-mode))))
|
||||
(org-mode-hook . variable-pitch-mode))
|
||||
|
||||
(use-package org-bullets
|
||||
:hook
|
||||
(org-mode-hook . (lambda () (org-bullets-mode 1))))
|
||||
(org-mode-hook . (lambda () (org-bullets-mode))))
|
||||
|
||||
;; ;;; gnus
|
||||
;; (use-package gnus
|
||||
;; :straight (:type built-in)
|
||||
;; :config
|
||||
;; (setq gnus-select-method '(nnnil ""))
|
||||
;; (setq gnus-secondary-select-methods
|
||||
;; '((nnmaildir "fastmail" (directory "~/.mail/fastmail"))))
|
||||
;; (setq gnus-parameters
|
||||
;; '((".*" ; fallback
|
||||
;; (posting-style
|
||||
;; (gcc "nnmaildir+fastmail:Sent")
|
||||
;; (From
|
||||
;; (format "%s <%s>" user-full-name user-mail-address))))))
|
||||
;; (setq gnus-gcc-mark-as-read t)
|
||||
;; (setq gnus-agent t))
|
||||
(provide 'init)
|
||||
;;; init.el ends here
|
||||
|
|
Loading…
Reference in New Issue