emacs: rearrange and regroup early init settings a bit
authorAmin Bandali <bandali@gnu.org>
Sat, 31 Aug 2019 15:36:18 +0000 (11:36 -0400)
committerAmin Bandali <bandali@gnu.org>
Sat, 31 Aug 2019 15:48:10 +0000 (11:48 -0400)
.emacs.d/init.el

index d08c84a..31fd3e5 100644 (file)
 
 ;; separate custom file (don't want it mixing with init.el)
 (use-feature custom
-  :no-require t
+  :no-require
   :config
   (setq custom-file (b/etc "custom.el"))
   (when (file-exists-p custom-file)
     (load custom-file))
   ;; while at it, treat themes as safe
-  (setf custom-safe-themes t))
+  (setf custom-safe-themes t)
+  ;; only one custom theme at a time
+  (comment
+    (defadvice load-theme (before clear-previous-themes activate)
+      "Clear existing theme settings instead of layering them"
+      (mapc #'disable-theme custom-enabled-themes))))
 
 ;; load the secrets file if it exists, otherwise show a warning
 (comment
   (exec-path-from-shell-copy-env "SSH_AGENT_PID")
   (exec-path-from-shell-copy-env "SSH_AUTH_SOCK"))
 
-;; only one custom theme at a time
-(comment
-  (defadvice load-theme (before clear-previous-themes activate)
-    "Clear existing theme settings instead of layering them"
-    (mapc #'disable-theme custom-enabled-themes)))
-
 ;; start up emacs server.  see
 ;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.html#Emacs-Server
 (use-feature server
   :defer 0.4
   :config (or (server-running-p) (server-mode)))
 
+\f
+;;; Useful utilities
+
+;; useful libraries
+(require 'cl-lib)
+(require 'subr-x)
+
+(defmacro b/setq-every (value &rest vars)
+  "Set all the variables from VARS to value VALUE."
+  (declare (indent defun) (debug t))
+  `(progn ,@(mapcar (lambda (x) (list 'setq x value)) vars)))
+
+(defun b/start-process (program &rest args)
+  "Same as `start-process', but doesn't bother about name and buffer."
+  (let ((process-name (concat program "_process"))
+        (buffer-name  (generate-new-buffer-name
+                       (concat program "_output"))))
+    (apply #'start-process
+           process-name buffer-name program args)))
+
+(defun b/dired-start-process (program &optional args)
+  "Open current file with a PROGRAM."
+  ;; Shell command looks like this: "program [ARGS]... FILE" (ARGS can
+  ;; be nil, so remove it).
+  (apply #'b/start-process
+         program
+         (remove nil (list args (dired-get-file-for-visit)))))
+
+(defun b/add-elisp-section ()
+  (interactive)
+  (insert "\n")
+  (previous-line)
+  (insert "\n\f\n;;; "))
+
+(defun b/no-mouse-autoselect-window ()
+  "Conveniently disable `focus-follows-mouse'.
+For disabling the behaviour for certain buffers and/or modes."
+  (make-local-variable 'mouse-autoselect-window)
+  (setq mouse-autoselect-window nil))
+
+\f
+;;; Defaults
+
+;;;; C-level customizations
+
+(setq
+ ;; minibuffer
+ enable-recursive-minibuffers t
+ resize-mini-windows t
+ ;; more useful frame titles
+ frame-title-format '("" invocation-name " - "
+                      (:eval
+                       (if (buffer-file-name)
+                           (abbreviate-file-name (buffer-file-name))
+                         "%b")))
+ ;; i don't feel like jumping out of my chair every now and again; so
+ ;; don't BEEP! at me, emacs
+ ring-bell-function 'ignore
+ ;; better scrolling
+ ;; scroll-margin 1
+ ;; scroll-conservatively 10000
+ scroll-step 1
+ scroll-conservatively 10
+ scroll-preserve-screen-position 1
+ ;; focus follows mouse
+ mouse-autoselect-window t)
+
+(setq-default
+ ;; always use space for indentation
+ indent-tabs-mode nil
+ tab-width 4
+ ;; cursor shape
+ cursor-type 'bar)
+
 ;; unicode support
 (comment
   (dolist (ft (fontset-list))
      nil
      'prepend)))
 
-;; gentler font resizing
-(setq text-scale-mode-step 1.05)
-
-;; focus follows mouse
-(setq mouse-autoselect-window t)
+;;;; Elisp-level customizations
 
-(defun b/no-mouse-autoselect-window ()
-  "Conveniently disable `focus-follows-mouse'.
-For disabling the behaviour for certain buffers and/or modes."
-  (make-local-variable 'mouse-autoselect-window)
-  (setq mouse-autoselect-window nil))
-
-;; better scrolling
-(setq ;; scroll-margin 1
-      ;; scroll-conservatively 10000
-      scroll-step 1
-      scroll-conservatively 10
-      scroll-preserve-screen-position 1)
-
-(use-feature mwheel
-  :defer 0.4
+(use-feature startup
+  :no-require
+  :demand
   :config
-  (setq 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-feature pixel-scroll
-  :defer 0.4
-  :config (pixel-scroll-mode 1))
+  ;; don't need to see the startup echo area message
+  (advice-add #'display-startup-echo-area-message :override #'ignore)
+  :custom
+  ;; i want *scratch* as my startup buffer
+  (initial-buffer-choice t)
+  ;; i don't need the default hint
+  (initial-scratch-message nil)
+  ;; use customizable text-mode as major mode for *scratch*
+  (initial-major-mode 'text-mode)
+  ;; inhibit buffer list when more than 2 files are loaded
+  (inhibit-startup-buffer-menu t)
+  ;; don't need to see the startup screen or echo area message
+  (inhibit-startup-screen t)
+  (inhibit-startup-echo-area-message user-login-name))
 
-(use-feature epg-config
+(use-feature files
+  :no-require
+  :demand
   :custom
-  ((epg-gpg-program (executable-find "gpg"))))
+  ;; backups (C-h v make-backup-files RET)
+  (backup-by-copying t)
+  (version-control t)
+  (delete-old-versions t)
 
-;; useful libraries
-(require 'cl-lib)
-(require 'subr-x)
+  ;; auto-save
+  (auto-save-file-name-transforms
+   `((".*" ,(b/var "auto-save/") t)))
 
-\f
-;;; Useful utilities
+  ;; insert newline at the end of files
+  (require-final-newline t)
 
-(defmacro b/setq-every (value &rest vars)
-  "Set all the variables from VARS to value VALUE."
-  (declare (indent defun) (debug t))
-  `(progn ,@(mapcar (lambda (x) (list 'setq x value)) vars)))
+  ;; open read-only file buffers in view-mode
+  ;; (enables niceties like `q' for quit)
+  (view-read-only t))
 
-(defun b/start-process (program &rest args)
-  "Same as `start-process', but doesn't bother about name and buffer."
-  (let ((process-name (concat program "_process"))
-        (buffer-name  (generate-new-buffer-name
-                       (concat program "_output"))))
-    (apply #'start-process
-           process-name buffer-name program args)))
-
-(defun b/dired-start-process (program &optional args)
-  "Open current file with a PROGRAM."
-  ;; Shell command looks like this: "program [ARGS]... FILE" (ARGS can
-  ;; be nil, so remove it).
-  (apply #'b/start-process
-         program
-         (remove nil (list args (dired-get-file-for-visit)))))
+;; disable disabled commands
+(setq disabled-command-function nil)
 
-(defun b/add-elisp-section ()
-  (interactive)
-  (insert "\n")
-  (previous-line)
-  (insert "\n\f\n;;; "))
+;; lazy-person-friendly yes/no prompts
+(defalias 'yes-or-no-p #'y-or-n-p)
 
-\f
-;;; Defaults
+;; enable automatic reloading of changed buffers and files
+(use-feature autorevert
+  :demand
+  :config
+  (global-auto-revert-mode 1)
+  :custom
+  (auto-revert-verbose nil)
+  (global-auto-revert-non-file-buffers nil))
 
 ;; time and battery in mode-line
 (comment
-  (use-package time
+  (use-feature time
     :init
     (setq display-time-default-load-average nil)
     :config
     (display-time-mode))
 
-  (use-package battery
+  (use-feature battery
     :config
     (display-battery-mode)))
 
-;; smaller fringe
-;; (fringe-mode '(3 . 1))
-(fringe-mode nil)
-
-;; disable disabled commands
-(setq disabled-command-function nil)
-
-;; 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.
-(setq save-interprogram-paste-before-kill t)
-
-;; minibuffer
-(setq enable-recursive-minibuffers t
-      resize-mini-windows t)
-
-;; lazy-person-friendly yes/no prompts
-(defalias 'yes-or-no-p #'y-or-n-p)
-
-;; i want *scratch* as my startup buffer
-(setq initial-buffer-choice t)
-
-;; i don't need the default hint
-(setq initial-scratch-message nil)
-
-;; use customizable text-mode as major mode for *scratch*
-(setq initial-major-mode 'text-mode)
-
-;; inhibit buffer list when more than 2 files are loaded
-(setq inhibit-startup-buffer-menu t)
-
-;; don't need to see the startup screen or the echo area message
-(advice-add #'display-startup-echo-area-message :override #'ignore)
-(setq inhibit-startup-screen t
-      inhibit-startup-echo-area-message user-login-name)
-
-;; more useful frame titles
-(setq frame-title-format
-      '("" invocation-name " - "
-        (:eval (if (buffer-file-name)
-                   (abbreviate-file-name (buffer-file-name))
-                 "%b"))))
-
-;; backups (C-h v make-backup-files RET)
-(setq backup-by-copying t
-      version-control t
-      delete-old-versions t)
-
-;; enable automatic reloading of changed buffers and files
-(global-auto-revert-mode 1)
-(setq auto-revert-verbose nil
-      global-auto-revert-non-file-buffers nil)
-
-;; always use space for indentation
-(setq-default
- indent-tabs-mode nil
- require-final-newline t
- tab-width 4)
+(use-feature fringe
+  :demand
+  :config
+  ;; smaller fringe
+  ;; (fringe-mode '(3 . 1))
+  (fringe-mode nil))
 
-;; enable winner-mode (C-h f winner-mode RET)
-(winner-mode 1)
+(use-feature winner
+  :demand
+  :config
+  ;; enable winner-mode (C-h f winner-mode RET)
+  (winner-mode 1))
 
-;; don't display *compilation* buffer on success.  based on
-;; https://stackoverflow.com/a/17788551, with changes to use `cl-letf'
-;; instead of the now obsolete `flet'.
-(with-eval-after-load 'compile
+(use-feature compile
+  :config
+  ;; don't display *compilation* buffer on success.  based on
+  ;; https://stackoverflow.com/a/17788551, with changes to use `cl-letf'
+  ;; instead of the now obsolete `flet'.
   (defun b/compilation-finish-function (buffer outstr)
     (unless (string-match "finished" outstr)
       (switch-to-buffer-other-window buffer))
@@ -426,23 +435,21 @@ For disabling the behaviour for certain buffers and/or modes."
       ad-do-it))
   (ad-activate 'compilation-start))
 
-;; search for non-ASCII characters: i’d like non-ASCII characters such
-;; as ‘’“”«»‹›áⓐ𝒶 to be selected when i search for their ASCII
-;; counterpart.  shoutout to
-;; http://endlessparentheses.com/new-in-emacs-25-1-easily-search-non-ascii-characters.html
-(setq search-default-mode #'char-fold-to-regexp)
-;; uncomment to extend this behaviour to query-replace
-;; (setq replace-char-fold t)
-
-;; cursor shape
-(setq-default cursor-type 'bar)
-
-;; allow scrolling in Isearch
-(setq isearch-allow-scroll t)
-
-;; open read-only file buffers in view-mode
-;; (enables niceties like `q' for quit)
-(setq view-read-only t)
+(use-feature isearch
+  :custom
+  ;; allow scrolling in Isearch
+  (isearch-allow-scroll t)
+  ;; search for non-ASCII characters: i’d like non-ASCII characters such
+  ;; as ‘’“”«»‹›áⓐ𝒶 to be selected when i search for their ASCII
+  ;; counterpart.  shoutout to
+  ;; http://endlessparentheses.com/new-in-emacs-25-1-easily-search-non-ascii-characters.html
+  (search-default-mode #'char-fold-to-regexp))
+
+;; uncomment to extend the above behaviour to query-replace
+(comment
+  (use-feature replace
+    :custom
+    (replace-char-fold t)))
 
 (use-feature vc
   :bind ("C-x v C-=" . vc-ediff))
@@ -452,9 +459,25 @@ For disabling the behaviour for certain buffers and/or modes."
   :custom ((ediff-window-setup-function 'ediff-setup-windows-plain)
            (ediff-split-window-function 'split-window-horizontally)))
 
-;; i don't feel like jumping out of my chair every now and again; so
-;; don't BEEP! at me, emacs
-(setq ring-bell-function 'ignore)
+(use-feature face-remap
+  :custom
+  ;; gentler font resizing
+  (text-scale-mode-step 1.05))
+
+(use-feature mwheel
+  :defer 0.4
+  :config
+  (setq 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-feature pixel-scroll
+  :defer 0.4
+  :config (pixel-scroll-mode 1))
+
+(use-feature epg-config
+  :custom
+  ((epg-gpg-program (executable-find "gpg"))))
 
 \f
 ;;; General bindings
@@ -959,7 +982,13 @@ This function is intended for use with `ivy-ignore-buffers'."
 
 (use-feature simple
   :delight (auto-fill-function " fill")
-  :config (column-number-mode))
+  :config (column-number-mode)
+  :custom
+  ;; 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))
 
 ;; save minibuffer history
 (use-feature savehist
@@ -1661,10 +1690,6 @@ This function is intended for use with `ivy-ignore-buffers'."
           (goto-char (cdr macro)))
         (reftex-this-word)))))
 
-(use-feature files
-  :custom (auto-save-file-name-transforms
-           `((".*" ,(b/var "auto-save/") t))))
-
 \f
 ;;; Email (with Gnus)