summaryrefslogtreecommitdiffstats
path: root/.emacs.d/lisp/bandali-essentials.el
diff options
context:
space:
mode:
authorAmin Bandali <bandali@kelar.org>2025-02-10 15:05:56 -0500
committerAmin Bandali <bandali@kelar.org>2025-02-10 15:05:56 -0500
commit70026d07d0bef09468b93caabf9a1f425533a69a (patch)
treec5379ac39bff3fb3e818eba88844c136c7e1c239 /.emacs.d/lisp/bandali-essentials.el
parent99332da43b8324814ca6c1af7f0076f83c8ce233 (diff)
downloadconfigs-70026d07d0bef09468b93caabf9a1f425533a69a.tar.gz
configs-70026d07d0bef09468b93caabf9a1f425533a69a.tar.xz
configs-70026d07d0bef09468b93caabf9a1f425533a69a.zip
Drop use-package again
I prefer my own manual approach, use-package feels too magical and at times does too much for me.
Diffstat (limited to '.emacs.d/lisp/bandali-essentials.el')
-rw-r--r--.emacs.d/lisp/bandali-essentials.el627
1 files changed, 262 insertions, 365 deletions
diff --git a/.emacs.d/lisp/bandali-essentials.el b/.emacs.d/lisp/bandali-essentials.el
index ad1e141..09ef291 100644
--- a/.emacs.d/lisp/bandali-essentials.el
+++ b/.emacs.d/lisp/bandali-essentials.el
@@ -24,156 +24,116 @@
;;; Code:
-(use-package emacs
- :demand t
- :bind
- ("C-c e b" . eval-buffer)
- ("C-c e r" . eval-region)
- :config
- (when (display-graphic-p)
- ;; Too easy to accidentally suspend (freeze) Emacs GUI.
- (b/keymap-global-unset "C-z"))
-
+(setq-default
+ ;; Case-sensitive search (and `dabbrev-expand').
+ ;; case-fold-search nil
+ indent-tabs-mode nil ; always use space for indentation
+ ;; tab-width 4
+ indicate-buffer-boundaries 'left)
+
+(setq
+ ;; line-spacing 3
+ completion-ignore-case t
+ read-buffer-completion-ignore-case t
+ enable-recursive-minibuffers t
+ resize-mini-windows t
+ message-log-max 20000
+ mode-line-compact t
+ ;; mouse-autoselect-window t
+ scroll-conservatively 15
+ scroll-preserve-screen-position 1
+ ;; I don't feel like randomly jumping out of my chair.
+ ring-bell-function 'ignore)
+
+;; Mode-line compacting for older Emacsen.
+(when (and (version< emacs-version "28") mode-line-compact)
+ ;; Manually make some `mode-line' spaces smaller.
+ ;; Emacs 28 and above do a terrific job at this out of the box
+ ;; when `mode-line-compact' is set to t (see above)."
(setq-default
- ;; Case-sensitive search (and `dabbrev-expand').
- ;; case-fold-search nil
- indent-tabs-mode nil ; always use space for indentation
- ;; tab-width 4
- indicate-buffer-boundaries 'left)
-
- (setq
- ;; line-spacing 3
- completion-ignore-case t
- read-buffer-completion-ignore-case t
- enable-recursive-minibuffers t
- resize-mini-windows t
- message-log-max 20000
- mode-line-compact t
- ;; mouse-autoselect-window t
- scroll-conservatively 15
- scroll-preserve-screen-position 1
- ;; I don't feel like randomly jumping out of my chair.
- ring-bell-function 'ignore)
-
- ;; Mode-line compacting for older Emacsen.
- (when (and (version< emacs-version "28") mode-line-compact)
- ;; Manually make some `mode-line' spaces smaller.
- ;; Emacs 28 and above do a terrific job at this out of the box
- ;; when `mode-line-compact' is set to t (see above)."
- (setq-default
- mode-line-format
- (mapcar
- (lambda (x)
- (if (and (stringp x)
- (or (string= x " ")
- (string= x " ")))
- " "
- x))
- mode-line-format)
- mode-line-buffer-identification
- (propertized-buffer-identification "%10b")))
-
- ;; Fonts and types.
- (when (display-graphic-p)
- (set-fontset-font t 'arabic "Sahel WOL")
- (let ((emoji-font "Apple Color Emoji"))
- (when (member emoji-font (font-family-list))
- (set-fontset-font
- t 'emoji `(,emoji-font . "iso10646-1") nil 'prepend)))
- (with-eval-after-load 'faces
- (let ((grey "#e7e7e7"))
- ;; (set-face-attribute 'default nil
- ;; :font "Source Code Pro"
- ;; :height 113 ; 130 ; 105
- ;; :weight 'medium)
- ;; (set-face-attribute 'fixed-pitch nil
- ;; :font "Source Code Pro"
- ;; :weight 'medium)
- ;; (set-face-attribute 'default nil
- ;; :font "Inconsolata Medium-12:hinting=true:autohint=true")
- ;; (set-face-attribute 'fixed-pitch nil
- ;; :font "Inconsolata Medium-12:hinting=true:autohint=true")
- (set-face-attribute 'default nil
- :font "Source Code Pro Medium-10.5")
- (set-face-attribute 'fixed-pitch nil
- :font "Source Code Pro Medium-10.5")
- (set-face-attribute 'mode-line nil
- :box '(:line-width 2 :style released-button)
- :background grey
- :inherit 'fixed-pitch)))))
-
-(use-package delight
- :ensure t
- :defer 0.5)
-
-(use-package minibuffer
- :defer t
- :custom
- (read-file-name-completion-ignore-case t))
-
-(use-package files
- :bind
- ("C-c f ." . find-file)
- :custom
- (make-backup-files nil)
- ;; Insert newline at the end of files.
- ;; (require-final-newline t)
- ;; Open read-only file buffers in view-mode, to get `q' for quit.
- (view-read-only t))
-
-(use-package ffap
- :bind
- ("C-c f p" . find-file-at-point))
-
-(use-package find-func
- :bind
- ("C-c f l" . find-library))
-
-(use-package frame
- :bind
- ("C-c F m" . make-frame-command)
- ("C-c F d" . delete-frame))
-
-(use-package window
- :defer t
- :custom
- (split-width-threshold 140))
-
-(use-package text-mode
- :mode "\\(README.*\\|COMMIT_EDITMSG$\\)")
-
-(use-package conf-mode
- :mode "\\.*rc$")
-
-(use-package sh-script
- :mode ("\\.bashrc$" . sh-mode))
-
-(use-package novice
- :defer t
- :config
- (setq disabled-command-function nil))
-
-(use-package autorevert
- :defer 0.1
- :custom
- ;; (auto-revert-verbose nil)
- (global-auto-revert-non-file-buffers nil)
- :config
+ mode-line-format
+ (mapcar
+ (lambda (x)
+ (if (and (stringp x)
+ (or (string= x " ")
+ (string= x " ")))
+ " "
+ x))
+ mode-line-format)
+ mode-line-buffer-identification
+ (propertized-buffer-identification "%10b")))
+
+;; Fonts and types.
+(when (display-graphic-p)
+ (set-fontset-font t 'arabic "Sahel WOL")
+ (let ((emoji-font "Apple Color Emoji"))
+ (when (member emoji-font (font-family-list))
+ (set-fontset-font
+ t 'emoji `(,emoji-font . "iso10646-1") nil 'prepend)))
+ (with-eval-after-load 'faces
+ (let ((grey "#e7e7e7"))
+ (set-face-attribute 'default nil
+ :font "Source Code Pro Medium-10.5")
+ (set-face-attribute 'fixed-pitch nil
+ :font "Source Code Pro Medium-10.5")
+ (set-face-attribute 'mode-line nil
+ :box '(:line-width 2 :style released-button)
+ :background grey
+ :inherit 'fixed-pitch))))
+
+(when (display-graphic-p)
+ ;; Too easy to accidentally suspend (freeze) Emacs GUI.
+ (b/keymap-global-unset "C-z"))
+(b/keymap-global-set "C-c e b" #'eval-buffer)
+(b/keymap-global-set "C-c e r" #'eval-region)
+
+(with-eval-after-load 'minibuffer
+ (setopt read-file-name-completion-ignore-case t))
+
+(with-eval-after-load 'files
+ (setopt
+ make-backup-files nil
+ ;; Insert newline at the end of files.
+ ;; require-final-newline t
+ ;; Open read-only file buffers in view-mode, to get `q' for quit.
+ view-read-only t)
+ (add-to-list
+ 'auto-mode-alist '("\\(README.*\\|COMMIT_EDITMSG$\\)" . text-mode))
+ (add-to-list 'auto-mode-alist '("\\.*rc$" . conf-mode))
+ (add-to-list 'auto-mode-alist '("\\.bashrc$" . sh-mode)))
+(b/keymap-global-set "C-c f ." #'find-file)
+
+;; `ffap'
+(b/keymap-global-set "C-c f p" #'find-file-at-point)
+
+;; `find-func'
+(b/keymap-global-set "C-c f l" #'find-library)
+
+;; `frame'
+(b/keymap-global-set "C-c F m" #'make-frame-command)
+(b/keymap-global-set "C-c F d" #'delete-frame)
+
+(with-eval-after-load 'window
+ (setopt split-width-threshold 140))
+
+;; `novice'
+(setq disabled-command-function nil)
+
+(run-with-idle-timer 0.1 nil #'require 'autorevert)
+(with-eval-after-load 'autorevert
+ (setopt
+ ;; auto-revert-verbose nil
+ global-auto-revert-non-file-buffers nil)
(global-auto-revert-mode 1))
-(use-package time
- :defer 0.1
- :bind
- ("C-c e i" . emacs-init-time)
- ("C-c e u" . emacs-uptime)
- :custom
- (display-time-default-load-average nil)
- (display-time-format " %a %Y-%m-%d %-l:%M%P")
- (display-time-mail-icon
- '(image :type xpm :file "gnus/gnus-pointer.xpm" :ascent center))
- (display-time-use-mail-icon t)
- :config
+(run-with-idle-timer 0.1 nil #'require 'time)
+(with-eval-after-load 'time
(setopt
+ display-time-default-load-average nil
+ display-time-format " %a %Y-%m-%d %-l:%M%P"
+ display-time-mail-icon
+ '(image :type xpm :file "gnus/gnus-pointer.xpm" :ascent center)
+ display-time-use-mail-icon t
zoneinfo-style-world-list
`(,@zoneinfo-style-world-list
("Etc/UTC" "UTC")
@@ -181,20 +141,21 @@
("Australia/Melbourne" "Melbourne")))
(unless (display-graphic-p)
(display-time-mode 1)))
+(b/keymap-global-set "C-c e i" #'emacs-init-time)
+(b/keymap-global-set "C-c e u" #'emacs-uptime)
(defvar b/battery-format "%p%b %t")
-(use-package battery
- ;; :if (not (display-graphic-p))
- :defer 0.1
- :custom
- (battery-mode-line-format (format " [%s]" b/battery-format)))
-
-(use-package winner
- :defer 0.5
- :config
+(run-with-idle-timer 0.1 nil #'require 'battery)
+(with-eval-after-load 'battery
+ (setopt battery-mode-line-format (format " [%s]" b/battery-format))
+ ;; (display-battery-mode -1)
+ )
+
+(run-with-idle-timer 0.5 nil #'require 'winner)
+(with-eval-after-load 'winner
(winner-mode 1)
(when (featurep 'exwm)
- ;; Prevent a bad interaction between EXWM and winner-mode, where
+ ;; prevent a bad interaction between EXWM and winner-mode, where
;; sometimes closing a window (like closing a terminal after
;; entering a GPG password via pinentry-gnome3's floating window)
;; results in a dead frame somewhere and effectively freezes EXWM.
@@ -206,76 +167,64 @@
(when (frame-live-p (car args))
(apply orig-fun args))))))
-(use-package windmove
- :defer 0.5
- :custom
- (windmove-wrap-around t)
- :bind
- ("M-H" . windmove-left)
- ("M-L" . windmove-right)
- ("M-K" . windmove-up)
- ("M-J" . windmove-down))
-
-(use-package isearch
- :defer t
- :custom
- (isearch-allow-scroll t)
- (isearch-lazy-count t)
- ;; Match non-ASCII variants during search
- (search-default-mode #'char-fold-to-regexp))
-
-(use-package vc
- :bind
- ("C-x v C-=" . vc-ediff))
-
-(use-package vc-git
- :defer t
- :custom
- ;; (vc-git-show-stash 0)
- (vc-git-print-log-follow t))
-
-(use-package ediff
- :defer t
- :custom
- (ediff-window-setup-function #'ediff-setup-windows-plain)
- (ediff-split-window-function #'split-window-horizontally))
-
-(use-package face-remap
- :disabled
- :custom
- ;; Gentler font scaling.
- (text-scale-mode-step 1.05))
-
-(use-package mwheel
- :defer 0.4
- :custom
- (mouse-wheel-scroll-amount '(1 ((shift) . 1))) ; one line at a time
- (mouse-wheel-progressive-speed nil) ; don't accelerate scrolling
- (mouse-wheel-follow-mouse t)) ; scroll window under mouse
-
-(use-package pixel-scroll
- :defer 0.4
- :config
+(run-with-idle-timer 0.5 nil #'require 'windmove)
+(with-eval-after-load 'windmove
+ (setopt windmove-wrap-around t)
+ (b/keymap-global-set "M-H" #'windmove-left)
+ (b/keymap-global-set "M-L" #'windmove-right)
+ (b/keymap-global-set "M-K" #'windmove-up)
+ (b/keymap-global-set "M-J" #'windmove-down))
+
+(with-eval-after-load 'isearch
+ (setopt
+ isearch-allow-scroll t
+ isearch-lazy-count t
+ ;; Match non-ASCII variants during search
+ search-default-mode #'char-fold-to-regexp))
+
+;; `vc'
+(b/keymap-global-set "C-x v C-=" #'vc-ediff)
+
+(with-eval-after-load 'vc-git
+ (setopt
+ ;; vc-git-show-stash 0
+ vc-git-print-log-follow t))
+
+(with-eval-after-load 'ediff
+ (setopt
+ ediff-window-setup-function #'ediff-setup-windows-plain
+ ediff-split-window-function #'split-window-horizontally))
+
+;; (with-eval-after-load 'face-remap
+;; (setopt
+;; ;; Gentler font resizing.
+;; text-scale-mode-step 1.05))
+
+(run-with-idle-timer 0.4 nil #'require 'mwheel)
+(with-eval-after-load 'mwheel
+ (setopt
+ mouse-wheel-scroll-amount '(1 ((shift) . 1)) ; one line at a time
+ mouse-wheel-progressive-speed nil ; don't accelerate scrolling
+ mouse-wheel-follow-mouse t)) ; scroll window under mouse
+
+(run-with-idle-timer 0.4 nil #'require 'pixel-scroll)
+(with-eval-after-load 'pixel-scroll
(pixel-scroll-mode 1))
-(use-package epg-config
- :defer t
- :custom
- (epg-gpg-program (executable-find "gpg"))
- ;; Ask for GPG passphrase in minibuffer.
- ;; Will fail if gpg >= 2.1 is not available.
- (epg-pinentry-mode 'loopback))
-
-(use-package auth-source
- :disabled
- :custom
- (auth-sources '("~/.authinfo.gpg"))
- (authinfo-hidden
- (regexp-opt '("password" "client-secret" "token"))))
-
-(use-package info
- :defer t
- :config
+(with-eval-after-load 'epg-config
+ (setopt
+ epg-gpg-program (executable-find "gpg")
+ ;; Ask for GPG passphrase in minibuffer.
+ ;; Will fail if gpg >= 2.1 is not available.
+ epg-pinentry-mode 'loopback))
+
+;; (with-eval-after-load 'auth-source
+;; (setopt
+;; auth-sources '("~/.authinfo.gpg")
+;; authinfo-hidden
+;; (regexp-opt '("password" "client-secret" "token"))))
+
+(with-eval-after-load 'info
(setq
Info-directory-list
`(,@Info-directory-list
@@ -283,71 +232,48 @@
(convert-standard-filename "info/") source-directory)
"/usr/share/info/")))
-(use-package ielm
- :bind
- ("C-c i" . ielm))
+;; `ielm'
+(b/keymap-global-set "C-c i" #'ielm)
+
+(run-with-idle-timer 0.2 nil #'require 'recentf)
+(with-eval-after-load 'recentf
+ (setopt recentf-max-saved-items 2000)
+ (recentf-mode 1)
-(use-package recentf
- ;; recently opened files
- :defer 0.2
- :init
(defun b/recentf-open ()
"Use `completing-read' to \\[find-file] a recent file."
(interactive)
(find-file
(completing-read "Find recent file: " recentf-list)))
- :bind
- ("C-c f r" . b/recentf-open)
- :custom
- (recentf-max-saved-items 2000)
- :config
- (recentf-mode 1))
-
-(use-package help
- :defer t
- :custom
- (help-window-select t)
- :config
- (temp-buffer-resize-mode 1))
-
-(use-package help-mode
- :bind
- (:map
- help-mode-map
- ("p" . backward-button)
- ("n" . forward-button)
- ("b" . help-go-back)
- ("f" . help-go-forward)))
-
-(use-package help-fns
- :bind
- ("C-c h F" . describe-face))
-
-(use-package doc-view
- :bind
- (:map
- doc-view-mode-map
- ("M-RET" . image-previous-line)))
-
-(use-package man
- :defer t
- :custom
- (Man-width 80))
-
-(use-package shr
- :defer t
- :custom
- (shr-max-width 80))
-
-(use-package mule-cmds
- :defer t
- :preface (provide 'mule-cmds)
- :custom
- (default-input-method "farsi-isiri-9147"))
-
-(use-package tramp
- :defer t
- :config
+ (b/keymap-global-set "C-c f r" #'b/recentf-open))
+
+(with-eval-after-load 'help
+ (temp-buffer-resize-mode 1)
+ (setopt help-window-select t))
+
+(with-eval-after-load 'help-mode
+ (let ((m help-mode-map))
+ (b/keymap-set m "p" #'backward-button)
+ (b/keymap-set m "n" #'forward-button)
+ (b/keymap-set m "b" #'help-go-back)
+ (b/keymap-set m "f" #'help-go-forward)))
+
+;; `help-fns'
+(b/keymap-global-set "C-c h F" #'describe-face)
+
+(with-eval-after-load 'doc-view
+ (b/keymap-set doc-view-mode-map "M-RET" #'image-previous-line))
+
+(with-eval-after-load 'man
+ (setopt Man-width 80))
+
+(with-eval-after-load 'shr
+ (setopt shr-max-width 80))
+
+(with-eval-after-load 'mule-cmds
+ (setopt default-input-method "farsi-isiri-9147"))
+
+(with-eval-after-load 'tramp
(tramp-set-completion-function
"ssh"
(append (tramp-get-completion-function "ssh")
@@ -356,104 +282,75 @@
"~/.ssh/config.d/"
'full directory-files-no-dot-files-regexp)))))
-(use-package eldoc
- ;; Display Lisp objects at point in the echo area.
- :defer t
- :custom
- (eldoc-minor-mode-string " eldoc")
- :config
+;; Display Lisp objects at point in the echo area.
+(with-eval-after-load 'eldoc
+ (setopt eldoc-minor-mode-string " eldoc")
(global-eldoc-mode 1))
-(use-package paren
- ;; Highlight matching parens.
- :defer 0.2
- :config
+;; Highlight matching parens.
+(run-with-idle-timer 0.2 nil #'require 'paren)
+(with-eval-after-load 'paren
(show-paren-mode 1))
-(use-package simple
- :delight
- (auto-fill-function " f")
- :hook
- ((text-mode tex-mode) . auto-fill-mode)
- :custom
- ;; See `bandali-gnus' for my Gnus configuration.
- (mail-user-agent 'gnus-user-agent)
- (read-mail-command #'gnus)
- ;; Save what I copy into clipboard from other applications into
- ;; Emacs' kill-ring, which would allow me to still be able to
- ;; easily access it in case I kill (cut or copy) something else
- ;; inside Emacs before yanking (pasting) what I'd originally
- ;; intended to.
- (save-interprogram-paste-before-kill t)
- :config
+(with-eval-after-load 'simple
+ (setopt
+ ;; See `bandali-gnus' for my Gnus configuration.
+ mail-user-agent 'gnus-user-agent
+ read-mail-command #'gnus
+ ;; Save what I copy into clipboard from other applications into
+ ;; Emacs' kill-ring, which would allow me to still be able to
+ ;; easily access it in case I kill (cut or copy) something else
+ ;; inside Emacs before yanking (pasting) what I'd originally
+ ;; intended to.
+ save-interprogram-paste-before-kill t)
(column-number-mode 1)
(line-number-mode 1))
+(add-hook 'text-mode-hook #'auto-fill-mode)
+(add-hook 'tex-mode-hook #'auto-fill-mode)
-(use-package savehist
- ;; Save minibuffer history.
- :defer 0.2
- :config
+;; Save minibuffer history.
+(run-with-idle-timer 0.2 nil #'require 'savehist)
+(with-eval-after-load 'savehist
(savehist-mode 1)
(add-to-list 'savehist-additional-variables 'kill-ring))
-(use-package saveplace
- ;; Automatically save place in files.
- :defer 0.2
- :config
+;; Automatically save place in files.
+(run-with-idle-timer 0.2 nil #'require 'saveplace nil 'noerror)
+(with-eval-after-load 'saveplace
(save-place-mode 1))
-(use-package flyspell
- :defer t
- :custom
- (flyspell-mode-line-string " fly")
- :hook
- ((text-mode tex-mode) . flyspell-mode))
-
-(use-package abbrev
- :delight
- :hook
- (text-mode . abbrev-mode))
-
-(use-package eww
- :bind
- ("C-c e w" . eww)
- :custom
- (eww-download-directory
+(with-eval-after-load 'flyspell
+ (setopt flyspell-mode-line-string " fly"))
+(add-hook 'text-mode-hook #'flyspell-mode)
+(add-hook 'tex-mode-hook #'flyspell-mode)
+
+;; `abbrev'
+(add-hook 'text-mode-hook #'abbrev-mode)
+
+(with-eval-after-load 'eww
+ (setopt
+ eww-download-directory
(file-name-as-directory (getenv "XDG_DOWNLOAD_DIR"))))
+(b/keymap-global-set "C-c e w" #'eww)
-(use-package display-fill-column-indicator
- :defer 0.2
- :config
+(run-with-idle-timer
+ 0.2 nil #'require 'display-fill-column-indicator nil 'noerror)
+(with-eval-after-load 'display-fill-column-indicator
(global-display-fill-column-indicator-mode 1))
-(use-package completion-preview
- ;; :if (package-installed-p 'completion-preview)
- :if (version<= "30" emacs-version)
- :delight " cprev"
- :bind
- (:map
- completion-preview-active-mode-map
- ("M-n" . completion-preview-next-candidate)
- ("M-p" . completion-preview-prev-candidate)
- ("M-i" . completion-preview-insert))
- :hook
- ((prog-mode text-mode comint-mode) . completion-preview-mode))
-
-(use-package version
- :bind
- ("C-c e v" . emacs-version))
-
-(use-package bandali-utils
- :bind
- ("C-c d" . b/duplicate-line-or-region)
- ("C-c j" . b/join-line-top)
- ("C-S-j" . b/join-line-top)
- ("C-c s c" . b/*scratch*)
- ("C-c v" . b/invert-default-face)
- ("C-c q" . b/unfill-paragraph-or-region)
- (:map
- text-mode-map
- ("M-RET" . b/insert-asterism)))
+(when (version<= "30" emacs-version)
+ ;; (package-installed-p 'completion-preview)
+ (with-eval-after-load 'completion-preview
+ (let ((m completion-preview-active-mode-map))
+ (b/keymap-set m "M-p" #'completion-preview-prev-candidate)
+ (b/keymap-set m "M-n" #'completion-preview-next-candidate)
+ (b/keymap-set m "M-i" #'completion-preview-insert)))
+ (add-hook 'prog-mode-hook #'completion-preview-mode)
+ (add-hook 'text-mode-hook #'completion-preview-mode)
+ (add-hook 'comint-mode-hook #'completion-preview-mode))
+
+;; `version'
+(b/keymap-global-set "C-c e v" #'emacs-version)
(provide 'bandali-essentials)
;;; bandali-essentials.el ends here