summaryrefslogtreecommitdiff
path: root/modules/system-defaults.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
committerCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
commit754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 (patch)
treef1190704f78f04a2b0b4c977d20fe96a828377f1 /modules/system-defaults.el
new repository
Diffstat (limited to 'modules/system-defaults.el')
-rw-r--r--modules/system-defaults.el195
1 files changed, 195 insertions, 0 deletions
diff --git a/modules/system-defaults.el b/modules/system-defaults.el
new file mode 100644
index 00000000..48ac3d50
--- /dev/null
+++ b/modules/system-defaults.el
@@ -0,0 +1,195 @@
+;;; system-defaults --- Emacs Non-UI Preferences -*- lexical-binding: t; -*-
+;; author: Craig Jennings <c@cjennings.net>
+
+;;; Commentary:
+
+;;; Code:
+
+;; ---------------------------------- Unicode ----------------------------------
+
+(set-locale-environment "en_US.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)
+(set-selection-coding-system 'utf-8)
+(setq locale-coding-system 'utf-8)
+(set-charset-priority 'unicode)
+(setq x-select-request-type
+ '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
+
+;; -------------------------- Disabling Functionality --------------------------
+
+(defun cj/disabled ()
+ "Do nothing. Functionality disabled."
+ (interactive))
+
+;; VIEW EMACS NEWS
+;; no news is good news
+(defalias 'view-emacs-news 'cj/disabled)
+(global-unset-key (kbd "C-h n"))
+
+;; DESCRIBE GNU PROJECT
+;; no gnus is good gnus
+(defalias 'describe-gnu-project 'cj/disabled)
+(global-unset-key (kbd "C-h g"))
+
+;; CUSTOMIZATIONS
+;; All customizations should be declared in Emacs init files.
+;; any customizations go into a temp file that's never read.
+(setq custom-file (make-temp-file
+ "emacs-customizations-trashbin"))
+
+;; ------------------------- Re-Enabling Functionality -------------------------
+
+(put 'upcase-region 'disabled nil) ;; upcase region is useful
+(put 'erase-buffer 'disabled nil) ;; and so is erase-buffer
+
+;; ------------------------------ Non UI Settings ------------------------------
+
+(setq ring-bell-function 'ignore) ;; disable the bell ring.
+(setq default-directory user-home-dir) ;; consider user home the default directory
+
+(global-auto-revert-mode) ;; update the buffer when the associated file has changed
+(setq global-auto-revert-non-file-buffers t) ;; do so for all buffer types (e.g., ibuffer)
+(setq bidi-display-reordering nil) ;; don't reorder bidirectional text for display
+(setq bidi-paragraph-direction t) ;; forces directionality of text for performance.
+
+(setq system-time-locale "C") ;; use en_US locale to format time.
+
+;; --------------------------------- Clipboard ---------------------------------
+
+(setq select-enable-clipboard t) ;; cut and paste using clipboard
+(setq yank-pop-change-selection t) ;; update system clipboard when yanking in emacs
+(setq save-interprogram-paste-before-kill t) ;; saves existing clipboard to kill ring before replacing
+
+;; -------------------------------- Tab Settings -------------------------------
+;; use spaces, not tabs
+
+(setq-default tab-width 4) ;; if tab, make them 4 spaces default
+(setq-default indent-tabs-mode nil) ;; but turn off tabs by default
+
+;; ------------------------------ Scroll Settings ------------------------------
+
+(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time
+(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling
+
+;; ----------------------------- Case Insensitivity ----------------------------
+;; make user interfaces case insensitive
+
+(setq case-fold-search t) ;; case-insensitive searches
+(setq completion-ignore-case t) ;; case-insensitive completion
+(setq read-file-name-completion-ignore-case t) ;; case-insensitive file completion
+
+;; ------------------------------- Async Commands ------------------------------
+;; always create new async command buffers silently
+
+(setq async-shell-command-buffer 'new-buffer)
+
+;; never automatically display async command output buffers
+;; but keep them in the buffer list for later inspection
+(add-to-list 'display-buffer-alist
+ '("*Async Shell Command*" display-buffer-no-window (nil)))
+
+;; ------------------------ Mouse And Trackpad Settings ------------------------
+;; provide smoothest scrolling and avoid accidental gestures
+
+(setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse
+(setq scroll-margin 5) ;; scroll w/in 10 lines of top/bottom
+(setq scroll-step 1) ;; keyboard scroll one line at a time
+
+;; disable pasting with mouse-wheel click
+(global-unset-key (kbd "<mouse-2>"))
+
+;; disable pinching gesture or mouse-wheel changing font size
+(global-unset-key (kbd "<pinch>"))
+(global-set-key [remap mouse-wheel-text-scale] 'cj/disabled)
+
+;; ------------------------------- Be Quiet(er)! -------------------------------
+;; reduces "helpful" instructions that distract Emacs power users.
+
+(setq-default vc-follow-symlinks) ;; don't ask to follow symlinks if target is version controlled
+(setq kill-buffer-query-functions ;; don't ask about killing buffers with processes, just kill them
+ (remq 'process-kill-buffer-query-function
+ kill-buffer-query-functions))
+(setq confirm-kill-processes nil) ;; automatically kill running processes on exit
+(setq confirm-nonexistent-file-or-buffer nil) ;; don't ask if a file I visit with C-x C-f or C-x b doesn't exist
+(setq ad-redefinition-action 'accept) ;; silence warnings about advised functions getting redefined.
+(setq large-file-warning-threshold nil) ;; open files regardless of size
+(fset 'yes-or-no-p 'y-or-n-p) ;; require a single letter for binary answers
+(setq use-short-answers t) ;; same as above with Emacs 28+
+(setq auto-revert-verbose nil) ;; turn off auto revert messages
+(setq custom-safe-themes t) ;; treat all themes as safe (stop asking)
+(setq server-client-instructions nil) ;; I already know what to do when done with the frame
+
+;; ------------------ Reduce Garbage Collections In Minibuffer -----------------
+;; triggers garbage collection when it won't impact user minibuffer entries
+
+(defun cj/minibuffer-setup-hook ()
+ "Hook to prevent garbage collection while user's in minibuffer."
+ (setq gc-cons-threshold most-positive-fixnum))
+
+(defun cj/minibuffer-exit-hook ()
+ "Hook to trigger garbage collection when exiting minibuffer."
+ (setq gc-cons-threshold 800000))
+
+(add-hook 'minibuffer-setup-hook #'cj/minibuffer-setup-hook)
+(add-hook 'minibuffer-exit-hook #'cj/minibuffer-exit-hook)
+
+;; ----------------------------- Bookmark Settings -----------------------------
+;; keep bookmarks in sync location, and save the file whenever a mark is added
+
+;; place bookmark file sync'd org files
+(setq bookmark-default-file (concat sync-dir "emacs_bookmarks"))
+
+;; save bookmarks each (1) time it's modified.
+(setq bookmark-save-flag 1)
+
+;; -------------------------------- Recent Files -------------------------------
+;; don't suggest bookmarks, packages, indexes, or recentf in recent files.
+
+(use-package recentf
+ :defer .5
+ :ensure nil ;;built-in
+ :config
+ (setq recentf-max-saved-items 1000)
+ (setq recentf-max-menu-items 50)
+ (add-to-list 'recentf-exclude "emacs_bookmarks")
+ (add-to-list 'recentf-exclude "\\.emacs\\.d/elpa")
+ (add-to-list 'recentf-exclude "\\.emacs\\.d/recentf")
+ (add-to-list 'recentf-exclude "\\ElfeedDB/index"))
+
+;; -------------------------- Autosave And Lock Files --------------------------
+;; don't create lockfiles or autosave (i.e., filename~) files.
+
+(setq auto-save-default nil)
+(setq create-lockfiles nil)
+
+;; ------------------------------ Backup Settings ------------------------------
+;; per-save backups can be invaluable, so create them in ~/.emacs.d/backups
+
+;; BACKUP DIRECTORY CREATION
+(defvar cj/backup-directory (concat user-emacs-directory "backups"))
+(if (not (file-exists-p cj/backup-directory))
+ (make-directory cj/backup-directory t))
+
+;; BACKUP SETTINGS
+(setq make-backup-files t) ;; do make backup files
+(setq backup-directory-alist `(("." . ,cj/backup-directory))) ;; put all originals in backup directory
+(setq backup-by-copying t) ;; don't clobber symlinks
+(setq version-control t) ;; make numeric backup versions
+(setq delete-old-versions t) ;; delete excess backup files w/o asking
+(setq kept-new-versions 25) ;; keep 25 of the newest backups made (default: 2)
+(setq vc-make-backup-files t) ;; also backup any files in version control
+
+;; ---------------------------- Exec Path From Shell ---------------------------
+;; ensure $PATH is the same between your normal shell and your Emacs shells.
+
+(use-package exec-path-from-shell
+ :defer .5
+ :config
+ (when (daemonp)
+ (exec-path-from-shell-initialize)))
+
+(provide 'system-defaults)
+;;; system-defaults.el ends here