Guest User

emacs tiny for terminal

a guest
Nov 21st, 2025
27
0
12 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.96 KB | None | 0 0
  1. cat .config/emacs/init.el
  2. ;;; suckless EmacS config (2025)
  3.  
  4. ;;; Performance tweaks
  5. ;;; ---------------------------------------
  6. (setq site-run-file nil)
  7. (setq package-native-compile t)
  8.  
  9. ;; Disable eldoc globally
  10. (global-eldoc-mode -1)
  11.  
  12. ;; Faster syntax highlighting without tree-sitter
  13. (setq font-lock-maximum-decoration 1) ; Less fancy highlighting
  14. (setq jit-lock-stealth-time 2) ; Delay background highlighting
  15.  
  16. ;; Store custom settings in a separate file
  17. (setq custom-file (expand-file-name "custom.el" user-emacs-directory))
  18.  
  19. ;; Increase garbage collection threshold during startup
  20. (setq gc-cons-threshold most-positive-fixnum)
  21. (add-hook 'after-init-hook
  22. (lambda () (setq gc-cons-threshold 800000)))
  23.  
  24. ;; Better memory management
  25. (setq gc-cons-percentage 0.6
  26. read-process-output-max (* 1024 1024)) ;; 1mb
  27.  
  28. ;; Additional startup optimizations
  29. (setq frame-inhibit-implied-resize t
  30. inhibit-compacting-font-caches t
  31. jit-lock-defer-time nil)
  32.  
  33. ;; Faster startup with native compilation settings
  34. (when (featurep 'native-compile)
  35. (setq native-comp-deferred-compilation nil)
  36. (setq native-comp-speed 2))
  37.  
  38. ;; More responsive keyboard in terminal
  39. (setq echo-keystrokes 0.01
  40. redisplay-dont-pause t)
  41.  
  42. ;; Better terminal scrolling
  43. (setq auto-window-vscroll nil)
  44.  
  45. ;;; UI settings
  46. ;;; ---------------------------------------
  47. ;; Minimal startup settings
  48. (setq inhibit-startup-message t
  49. initial-scratch-message nil
  50. make-backup-files nil
  51. auto-save-default nil
  52. ring-bell-function 'ignore
  53. create-lockfiles nil)
  54. (menu-bar-mode -1)
  55. (column-number-mode 1)
  56. (defun display-startup-echo-area-message () (message " "))
  57.  
  58. ;; Cursor settings
  59. (blink-cursor-mode -1)
  60. (setq visible-cursor nil)
  61.  
  62. ;; Save minibuffer history
  63. (savehist-mode 1)
  64. ;; But not Evil ex commands
  65. (setq evil-ex-history nil)
  66. ;; Disable mode showed
  67. (setq evil-echo-state nil)
  68. ;; Faster Evil search (disable two-char delay)
  69. (setq evil-search-module 'evil-search)
  70. ;; Match Vim's * and # behavior more closely
  71. (setq evil-symbol-word-search t)
  72.  
  73. ;; Remember and restore the last cursor location of opened files
  74. (save-place-mode 1)
  75.  
  76. ;; Revert buffers automatically when underlying files are changed
  77. (global-auto-revert-mode 1)
  78.  
  79. ;; Simple UI improvements
  80. (defalias 'yes-or-no-p 'y-or-n-p)
  81. (setq-default indent-tabs-mode nil
  82. tab-width 4
  83. standard-indent 4)
  84.  
  85. ;; Your righteous theme - keep it!
  86. (add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
  87. (load-theme 'righteous t)
  88.  
  89. ;; Better paren matching
  90. (show-paren-mode 1)
  91. (setq show-paren-delay 0
  92. show-paren-context-when-offscreen t)
  93. (global-font-lock-mode 1)
  94.  
  95. ;;; Package management
  96. ;;; ---------------------------------------
  97. ;; Package initialization optimization
  98. (require 'package)
  99. (setq package-archives '(("melpa" . "https://melpa.org/packages/")
  100. ("gnu" . "https://elpa.gnu.org/packages/"))
  101. package-enable-at-startup nil)
  102. (package-initialize)
  103.  
  104. (require 'use-package)
  105. (setq use-package-always-ensure t)
  106.  
  107. ;;; Evil Mode
  108. ;;; ---------------------------------------
  109. (use-package evil
  110. :init
  111. (setq evil-want-integration t)
  112. (setq evil-want-keybinding nil)
  113. (setq evil-want-C-h-delete t)
  114. (setq evil-want-C-u-scroll t)
  115. ;(setq evil-move-cursor-back nil)
  116. (setq evil-respect-visual-line-mode t)
  117. (setq evil-undo-system 'undo-redo)
  118. :config
  119. (evil-mode 1)
  120. ;; Set leader key to comma like your vim config
  121. (evil-set-leader '(normal visual) (kbd ","))
  122. ;; Fix Tab behavior for visual selection indentation
  123. (define-key evil-visual-state-map (kbd "TAB") 'indent-region)
  124. (define-key evil-visual-state-map (kbd "<tab>") 'indent-region)
  125. ;; Make ESC quit everywhere like double ESC in your vim
  126. (define-key evil-normal-state-map [escape] 'keyboard-quit)
  127. (define-key evil-visual-state-map [escape] 'keyboard-quit)
  128. (define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
  129. (define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
  130. (define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
  131. (define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
  132. (define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit))
  133.  
  134. (use-package evil-collection
  135. :after (evil nov)
  136. :ensure t
  137. :config
  138. (evil-collection-init))
  139.  
  140. ;; Cursor on evil change by mode
  141. (add-hook 'evil-insert-state-entry-hook
  142. (lambda () (send-string-to-terminal "\033[6 q"))) ; bar
  143. (add-hook 'evil-normal-state-entry-hook
  144. (lambda () (send-string-to-terminal "\033[2 q"))) ; block
  145. (add-hook 'evil-replace-state-entry-hook
  146. (lambda () (send-string-to-terminal "\033[4 q"))) ; underline
  147.  
  148. ;;; Programming modes
  149. ;;; ---------------------------------------
  150. ;; Common programming settings
  151. (add-hook 'prog-mode-hook
  152. (lambda ()
  153. (setq show-trailing-whitespace t)
  154. (set-face-background 'trailing-whitespace "orange")))
  155.  
  156. ;; Rust mode with your exact keybindings
  157. (use-package rust-mode
  158. :defer t
  159. :mode "\\.rs\\'"
  160. :config
  161. (evil-define-key 'normal rust-mode-map
  162. (kbd "<leader>rc") (lambda () (interactive) (compile "cargo check"))
  163. (kbd "<leader>rb") (lambda () (interactive) (compile "cargo build"))
  164. (kbd "<leader>rt") (lambda () (interactive) (compile "cargo test"))
  165. (kbd "<leader>rr") (lambda () (interactive) (compile "cargo run"))
  166. (kbd "<leader>rl") (lambda () (interactive) (compile "cargo clippy"))
  167. (kbd "<leader>rf") 'rust-format-buffer))
  168.  
  169. ;; Go mode with your exact keybindings
  170. (use-package go-mode
  171. :defer t
  172. :mode "\\.go\\'"
  173. :config
  174. (setq gofmt-command "goimports")
  175. (add-hook 'before-save-hook 'gofmt-before-save)
  176. (evil-define-key 'normal go-mode-map
  177. (kbd "<leader>gb") (lambda () (interactive) (compile "go build"))
  178. (kbd "<leader>gt") (lambda () (interactive) (compile "go test"))
  179. (kbd "<leader>gr") (lambda () (interactive) (compile "go run ."))
  180. (kbd "<leader>gf") 'gofmt
  181. (kbd "<leader>ge") (lambda () (interactive) (compile "go vet"))
  182. (kbd "<leader>gl") (lambda () (interactive) (compile "golint"))
  183. (kbd "<leader>gi") 'gofmt)
  184. ;; Go uses tabs, not spaces
  185. (setq indent-tabs-mode t
  186. tab-width 4))
  187.  
  188. (use-package puppet-mode
  189. :defer t
  190. :mode "\\.pp\\'"
  191. :config
  192. (setq puppet-indent-level 2)
  193. (setq indent-tabs-mode nil
  194. tab-width 2))
  195.  
  196. ;; Built-in modes with deferred loading
  197. (use-package cc-mode
  198. :ensure nil
  199. :defer t
  200. :mode (("\\.c\\'" . c-mode)
  201. ("\\.h\\'" . c-mode)
  202. ("\\.cpp\\'" . c++-mode)
  203. ("\\.hpp\\'" . c++-mode))
  204. :config
  205. (setq c-default-style "linux"
  206. c-basic-offset 4))
  207.  
  208. ;; Other built-in mode associations
  209. (use-package python-mode
  210. :ensure nil
  211. :defer t
  212. :mode "\\.py\\'")
  213.  
  214. (use-package sql-mode
  215. :ensure nil
  216. :defer t
  217. :mode "\\.sql\\'")
  218.  
  219. (use-package sh-mode
  220. :ensure nil
  221. :defer t
  222. :mode ("\\.sh\\'" "\\.bash\\'" "\\.ksh\\'" "\\.zsh\\'"))
  223.  
  224. ;; C# mode (built-in since Emacs 29)
  225. (use-package csharp-mode
  226. :ensure nil
  227. :defer t
  228. :mode "\\.cs\\'")
  229.  
  230. ;; ePUB read
  231. (use-package nov
  232. :ensure t
  233. :mode ("\\.epub\\'" . nov-mode)
  234. :config
  235. (setq shr-use-fonts nil))
  236.  
  237. ;; fb2 reader
  238. (use-package fb2-reader
  239. :ensure t
  240. :mode ("\\.fb2\\'" . fb2-reader-mode))
  241.  
  242. ;; Default to conf-mode for unknown files
  243. (setq major-mode 'conf-mode)
  244.  
  245. ;;; Additional Evil keybindings
  246. ;;; ---------------------------------------
  247. (with-eval-after-load 'evil
  248. (evil-define-key 'normal 'global
  249. (kbd "<leader>w") 'delete-trailing-whitespace))
  250.  
  251. ;;; Improve mode-line
  252. ;;; ---------------------------------------
  253. ;; Remove Evil state indicator from mode line
  254. (setq evil-mode-line-format nil)
  255.  
  256. ;; Remove the trailing dashes
  257. (setq-default mode-line-end-spaces nil)
  258.  
  259. ;; Remove mode indicators
  260. ;(setq minor-mode-alist nil)
  261.  
  262. ;; Custom mode line format
  263. (setq-default mode-line-format
  264. '("%f %I %p %l,%c"))
  265.  
Advertisement
Add Comment
Please, Sign In to add comment