.emacs.d

the most bloated Emacs config on this planet
git clone https://git.trogloxene.org/.emacs.d.git
Log | Files | Refs

init-terminal.el (11020B)


      1 ;;; init-terminal.el --- minimum config -*- lexical-binding: t -*-
      2 
      3 ;;; Commentary:
      4 
      5 ;;; Code:
      6 
      7 (global-display-line-numbers-mode 1)
      8 
      9 (set-selection-coding-system 'utf-8)
     10 (when (fboundp 'set-charset-priority)
     11   (set-charset-priority 'unicode))
     12 (set-default-coding-systems 'utf-8)
     13 (set-buffer-file-coding-system 'utf-8)
     14 (set-clipboard-coding-system 'utf-8)
     15 (set-file-name-coding-system 'utf-8)
     16 (set-keyboard-coding-system 'utf-8)
     17 (set-next-selection-coding-system 'utf-8)
     18 (set-terminal-coding-system 'utf-8)
     19 (setq locale-coding-system 'utf-8)
     20 (setq system-time-locale "C")
     21 
     22 (setq backup-directory-alist
     23       `((".*" . ,(expand-file-name "backup/" user-emacs-directory)))
     24       backup-by-copying t
     25       delete-old-versions t
     26       kept-new-versions 6
     27       kept-old-versions 2
     28       version-control t)
     29 
     30 (setq auto-save-file-name-transforms
     31       `((".*" ,(expand-file-name "auto-save-list/" user-emacs-directory) t)))
     32 
     33 (put 'narrow-to-region 'disabled nil)
     34 (put 'scroll-left 'disabled nil)
     35 
     36 (setq create-lockfiles nil)
     37 
     38 (setq ring-bell-function 'ignore)
     39 
     40 (cond
     41  (*is-windows*
     42   (add-to-list 'exec-path (expand-file-name "H/appppppppppp/scoop/apps/"))
     43   (setenv "PATH" (concat (expand-file-name "H/appppppppppp/scoop/apps/") ";" (getenv "PATH"))))
     44  (*is-mac*
     45   (add-to-list 'exec-path (expand-file-name "/opt/homebrew/bin/"))
     46   (setenv "PATH" (concat (expand-file-name "/opt/homebrew/bin/") ":" (getenv "PATH"))))
     47  (*is-linux*
     48   (add-to-list 'exec-path (expand-file-name "~/.guix-home/profile/bin/"))
     49   (setenv "PATH" (concat (expand-file-name "~/.guix-home/profile/bin/") ":" (getenv "PATH")))))
     50 
     51 (delete-selection-mode 1)
     52 
     53 (setq initial-scratch-message
     54       "")
     55 
     56 (setq native-comp-async-warnings-errors-kind 'silent)
     57 
     58 (if (boundp 'use-short-answers)
     59     (setq use-short-answers t)
     60   (fset 'yes-or-no-p 'y-or-n-p))
     61 
     62 (setq delete-by-moving-to-trash t)
     63 
     64 (setq xref-search-program
     65       (cond
     66        ((or (executable-find "ripgrep")
     67             (executable-find "rg"))
     68         'ripgrep)
     69        (t 'grep)))
     70 
     71 (setq word-wrap-by-category t)
     72 
     73 (setq-default indent-tabs-mode nil)
     74 
     75 (setq kill-whole-line t)
     76 
     77 (setq epg-pinentry-mode 'loopback)
     78 
     79 (add-hook 'emacs-startup-hook
     80           (lambda ()
     81             (setq gc-cons-threshold 4000000)))
     82 
     83 (use-package recentf
     84   :hook
     85   (after-init . recentf-mode)
     86   :init
     87   (setq recentf-max-saved-items 30)
     88   :config
     89   (add-to-list 'recentf-exclude "~/org/my-org-note/journal/.*\\.org\\'")
     90   (add-to-list 'recentf-exclude "~/org/my-org-note/20260509T232442==agenda--all-my-todos\\.org")
     91   (add-to-list 'recentf-exclude "~/org/my-org-note/20260810T233455==agenda--all-about-game__game\\.org")
     92   (add-to-list 'recentf-exclude "~/.emacs.d/emms/history")
     93   (add-to-list 'recentf-exclude "~/.emacs.d/bookmarks"))
     94 
     95 (use-package savehist
     96   :hook
     97   (after-init . savehist-mode)
     98   :init
     99   (setq enable-recursive-minibuffers t
    100         history-length 50
    101         savehist-additional-variables '(mark-ring
    102                                         global-mark-ring
    103                                         search-ring
    104                                         regexp-search-ring
    105                                         extended-command-history)
    106         savehist-autosave-interval 300))
    107 
    108 (use-package saveplace
    109   :hook
    110   (after-init . save-place-mode))
    111 
    112 (use-package autorevert
    113   :delight
    114   :hook
    115   (after-init . global-auto-revert-mode))
    116 
    117 (use-package icomplete
    118   :hook
    119   (after-init . fido-mode)
    120   :config
    121   (keymap-unset minibuffer-local-completion-map "TAB")
    122   (keymap-set minibuffer-local-completion-map "TAB" 'icomplete-force-complete))
    123 
    124 ;; display file size in mode line
    125 (size-indication-mode 1)
    126 
    127 ;; display column number in mode line
    128 (column-number-mode 1)
    129 
    130 ;; highlight current line
    131 (global-hl-line-mode 1)
    132 
    133 ;; mouse support
    134 (xterm-mouse-mode 1)
    135 
    136 ;; show isearch match numbers
    137 (setq isearch-lazy-count t)
    138 
    139 ;; theme
    140 (if (>= (display-color-cells) 16777216)
    141     (progn
    142       (defvar my-base03 "#062624")
    143       (defvar my-base02 "#0c2b29")
    144       (defvar my-base01 "#4d6967")
    145       (defvar my-base00 "#728e8c")
    146       (defvar my-base1 "#7f9b99")
    147       (defvar my-cyan "#01928d")
    148       (defvar my-blue "#2570cd")
    149       (defvar my-green "#3a9c36")
    150       (defvar my-magenta "#d33682")
    151       (defvar my-yellow "#a87c04")
    152       (defvar my-orange "#c24713")
    153       (defvar my-red "#ce2825")
    154 
    155       (custom-set-faces
    156        `(default ((t (:foreground ,my-base00 :background ,my-base03))))
    157        `(cursor ((t (:inverse t))))
    158        `(region ((t (:extend t :foreground ,my-base03 :background ,my-base00))))
    159        `(shadow ((t (:foreground ,my-base01))))
    160        `(error ((t (:foreground ,my-orange))))
    161        `(warning ((t (:foreground ,my-yellow))))
    162        `(font-lock-builtin-face ((t (:foreground ,my-base00 :weight bold :slant normal))))
    163        `(font-lock-comment-face ((t (:foreground ,my-base01))))
    164        `(font-lock-keyword-face ((t (:foreground ,my-cyan :weight bold))))
    165        `(font-lock-variable-name-face ((t (:foreground ,my-blue))))
    166        `(font-lock-constant-face ((t (:foreground ,my-blue :weight bold))))
    167        `(font-lock-string-face ((t (:foreground ,my-green))))
    168        `(font-lock-type-face ((t (:foreground ,my-yellow))))
    169        `(font-lock-function-name-face ((t (:foreground ,my-blue))))
    170        `(hl-line ((t (:background ,my-base02 :extend t))))
    171        `(show-paren-match ((t (:foreground ,my-magenta :weight bold))))
    172        `(show-paren-mismatch ((t (:foreground ,my-base03 :background ,my-red))))
    173        `(icomplete-first-match ((t (:foreground ,my-yellow :weight bold))))
    174        `(completions-common-part ((t (:foreground ,my-blue))))
    175        `(minibuffer-prompt ((t (:foreground ,my-base01 :weight bold))))
    176        `(line-number ((t (:foreground ,my-base01 :weight extra-light))))
    177        `(button ((t (:foreground ,my-base00 :underline t))))
    178        `(mode-line ((t (:background ,my-base00 :foreground ,my-base03))))
    179        `(mode-line-inactive ((t (:background ,my-base02 :foreground ,my-base00))))
    180        `(dired-header ((t (:foreground ,my-green))))
    181        `(dired-directory ((t (:foreground ,my-blue))))
    182        `(dired-ignored ((t (:foreground ,my-base01))))
    183        `(isearch ((t (:background ,my-magenta :foreground ,my-base03))))
    184        `(lazy-highlight ((t (:background ,my-yellow :foreground ,my-base03))))
    185        `(isearch-fail ((t (:foreground ,my-red))))
    186        `(org-block ((t (:inherit default))))
    187        `(org-document-title ((t (:inherit default :weight bold))))
    188        `(org-document-info ((t (:inherit org-document-title))))
    189        `(eshell-prompt ((t (:foreground ,my-yellow :weight bold))))
    190        `(diff-header ((t (:foreground ,my-base00 :background ,my-base02))))
    191        `(diff-file-header ((t (:inherit: diff-header :weight bold))))
    192        `(diff-hunk-header ((t (:foreground "#c1a059" :background "#253224"))))
    193        `(diff-added ((t (:foreground "#73b971" :background "#103628"))))
    194        `(diff-refine-added ((t (:foreground "#8cc78d" :background "#1d522e"))))
    195        `(diff-removed ((t (:foreground "#e17360" :background "#2d2c25"))))
    196        `(diff-refine-removed ((t (:foreground "#e7917f" :background "#5c3225"))))
    197        `(xref-file-header ((t (:foreground ,my-base01))))
    198        `(xref-line-number ((t (:foreground ,my-green))))
    199        `(match ((t (:foreground ,my-base1 :background ,my-base02 :weight bold))))))
    200 
    201   (progn
    202     (global-hl-line-mode -1)))
    203 
    204 (defun open-init-file()
    205   "Open user's init.el file in ~/.emacs.d ."
    206   (interactive)
    207   (find-file "~/.emacs.d/init.el"))
    208 
    209 (defun my-scratch-buffer (&optional arg)
    210   "Switch to the *scratch* buffer.
    211 With a prefix ARG create a new *scratch* buffer."
    212   (interactive "P")
    213   (if arg
    214       (let ((buf (generate-new-buffer "*scratch*")))
    215         (switch-to-buffer buf)
    216         (funcall initial-major-mode))
    217     (scratch-buffer)))
    218 
    219 (defun crux-get-positions-of-line-or-region ()
    220   "Return positions (beg . end) of the current line or region."
    221   (let (beg end)
    222     (if (and mark-active (> (point) (mark)))
    223         (exchange-point-and-mark))
    224     (setq beg (line-beginning-position))
    225     (if mark-active
    226         (exchange-point-and-mark))
    227     (setq end (line-end-position))
    228     (cons beg end)))
    229 
    230 (defun crux-duplicate-current-line-or-region (arg)
    231   "Duplicates the current line or region ARG times.
    232 If there's no region, the current line will be duplicated.  However, if
    233 there's a region, all lines that region covers will be duplicated."
    234   (interactive "p")
    235   (pcase-let* ((origin (point))
    236                (`(,beg . ,end) (crux-get-positions-of-line-or-region))
    237                (region (buffer-substring-no-properties beg end)))
    238     (dotimes (_i arg)
    239       (goto-char end)
    240       (newline)
    241       (insert region)
    242       (setq end (point)))
    243     (goto-char (+ origin (* (length region) arg) arg))))
    244 
    245 (defun er/looking-back-on-line (regexp)
    246   "Version of `looking-back' that only checks current line."
    247   (looking-back regexp (line-beginning-position)))
    248 
    249 (defun er/mark-symbol ()
    250   "Mark the entire symbol around or in front of point."
    251   (interactive)
    252   (let ((symbol-regexp "\\s_\\|\\sw"))
    253     (when (or (looking-at symbol-regexp)
    254               (er/looking-back-on-line symbol-regexp))
    255       (skip-syntax-forward "_w")
    256       (set-mark (point))
    257       (skip-syntax-backward "_w"))))
    258 
    259 (defun er/mark-word ()
    260   "Mark the entire word around or in front of point."
    261   (interactive)
    262   (let ((word-regexp "\\sw"))
    263     (when (or (looking-at word-regexp)
    264               (er/looking-back-on-line word-regexp))
    265       (skip-syntax-forward "w")
    266       (set-mark (point))
    267       (skip-syntax-backward "w"))))
    268 
    269 ;; scratch buffer
    270 (if *is-mac*
    271     (keymap-global-set "C-c <f12>" #'my-scratch-buffer)
    272   (keymap-global-set "C-c <delete>" #'my-scratch-buffer)
    273   (keymap-global-set "C-c <deletechar>" #'my-scratch-buffer))
    274 
    275 ;; diff
    276 (with-eval-after-load 'diff-mode
    277   (keymap-set diff-mode-map "M-o" #'other-window))
    278 
    279 ;; dired
    280 (with-eval-after-load 'dired
    281   (keymap-set dired-mode-map "b" #'dired-up-directory))
    282 
    283 
    284 ;; global map
    285 
    286 ;; buffer, file, and window
    287 (keymap-global-set "<f2>" #'open-init-file)
    288 (keymap-global-set "C-x C-b" #'ibuffer-other-window)
    289 
    290 ;; edit
    291 (keymap-global-set "M-c" #'capitalize-dwim)
    292 (keymap-global-set "M-u" #'upcase-dwim)
    293 (keymap-global-set "M-l" #'downcase-dwim)
    294 (keymap-global-set "C-," #'crux-duplicate-current-line-or-region)
    295 (keymap-global-set "M-y" #'yank-from-kill-ring)
    296 (keymap-global-set "C-M-@" #'er/mark-symbol)
    297 (keymap-global-set "M-@" #'er/mark-word)
    298 (keymap-global-set "C-M-h" #'backward-kill-sexp)
    299 (keymap-global-set "C-c k" #'comment-line)
    300 
    301 ;; undo
    302 (keymap-global-set "C-/" #'undo)
    303 (keymap-global-set "C-M-_" #'undo-redo)
    304 
    305 ;; navigate
    306 (keymap-global-set "M-p" #'backward-paragraph)
    307 (keymap-global-set "M-n" #'forward-paragraph)
    308 
    309 ;; window
    310 (keymap-global-set "M-<left>" #'shrink-window-horizontally)
    311 (keymap-global-set "M-<right>" #'enlarge-window-horizontally)
    312 (keymap-global-set "M-<down>" #'shrink-window)
    313 (keymap-global-set "M-<up>" #'enlarge-window)
    314 (keymap-global-set "M-o" #'other-window)
    315 
    316 ;; other
    317 (keymap-global-set "C-c f r" #'recentf)
    318 
    319 (provide 'init-terminal)
    320 ;;; init-terminal.el ends here