Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- cat .config/emacs/init.el
- ;;; suckless EmacS config (2025)
- ;;; Performance tweaks
- ;;; ---------------------------------------
- (setq site-run-file nil)
- (setq package-native-compile t)
- ;; Disable eldoc globally
- (global-eldoc-mode -1)
- ;; Faster syntax highlighting without tree-sitter
- (setq font-lock-maximum-decoration 1) ; Less fancy highlighting
- (setq jit-lock-stealth-time 2) ; Delay background highlighting
- ;; Store custom settings in a separate file
- (setq custom-file (expand-file-name "custom.el" user-emacs-directory))
- ;; Increase garbage collection threshold during startup
- (setq gc-cons-threshold most-positive-fixnum)
- (add-hook 'after-init-hook
- (lambda () (setq gc-cons-threshold 800000)))
- ;; Better memory management
- (setq gc-cons-percentage 0.6
- read-process-output-max (* 1024 1024)) ;; 1mb
- ;; Additional startup optimizations
- (setq frame-inhibit-implied-resize t
- inhibit-compacting-font-caches t
- jit-lock-defer-time nil)
- ;; Faster startup with native compilation settings
- (when (featurep 'native-compile)
- (setq native-comp-deferred-compilation nil)
- (setq native-comp-speed 2))
- ;; More responsive keyboard in terminal
- (setq echo-keystrokes 0.01
- redisplay-dont-pause t)
- ;; Better terminal scrolling
- (setq auto-window-vscroll nil)
- ;;; UI settings
- ;;; ---------------------------------------
- ;; Minimal startup settings
- (setq inhibit-startup-message t
- initial-scratch-message nil
- make-backup-files nil
- auto-save-default nil
- ring-bell-function 'ignore
- create-lockfiles nil)
- (menu-bar-mode -1)
- (column-number-mode 1)
- (defun display-startup-echo-area-message () (message " "))
- ;; Cursor settings
- (blink-cursor-mode -1)
- (setq visible-cursor nil)
- ;; Save minibuffer history
- (savehist-mode 1)
- ;; But not Evil ex commands
- (setq evil-ex-history nil)
- ;; Disable mode showed
- (setq evil-echo-state nil)
- ;; Faster Evil search (disable two-char delay)
- (setq evil-search-module 'evil-search)
- ;; Match Vim's * and # behavior more closely
- (setq evil-symbol-word-search t)
- ;; Remember and restore the last cursor location of opened files
- (save-place-mode 1)
- ;; Revert buffers automatically when underlying files are changed
- (global-auto-revert-mode 1)
- ;; Simple UI improvements
- (defalias 'yes-or-no-p 'y-or-n-p)
- (setq-default indent-tabs-mode nil
- tab-width 4
- standard-indent 4)
- ;; Your righteous theme - keep it!
- (add-to-list 'custom-theme-load-path "~/.config/emacs/themes/")
- (load-theme 'righteous t)
- ;; Better paren matching
- (show-paren-mode 1)
- (setq show-paren-delay 0
- show-paren-context-when-offscreen t)
- (global-font-lock-mode 1)
- ;;; Package management
- ;;; ---------------------------------------
- ;; Package initialization optimization
- (require 'package)
- (setq package-archives '(("melpa" . "https://melpa.org/packages/")
- ("gnu" . "https://elpa.gnu.org/packages/"))
- package-enable-at-startup nil)
- (package-initialize)
- (require 'use-package)
- (setq use-package-always-ensure t)
- ;;; Evil Mode
- ;;; ---------------------------------------
- (use-package evil
- :init
- (setq evil-want-integration t)
- (setq evil-want-keybinding nil)
- (setq evil-want-C-h-delete t)
- (setq evil-want-C-u-scroll t)
- ;(setq evil-move-cursor-back nil)
- (setq evil-respect-visual-line-mode t)
- (setq evil-undo-system 'undo-redo)
- :config
- (evil-mode 1)
- ;; Set leader key to comma like your vim config
- (evil-set-leader '(normal visual) (kbd ","))
- ;; Fix Tab behavior for visual selection indentation
- (define-key evil-visual-state-map (kbd "TAB") 'indent-region)
- (define-key evil-visual-state-map (kbd "<tab>") 'indent-region)
- ;; Make ESC quit everywhere like double ESC in your vim
- (define-key evil-normal-state-map [escape] 'keyboard-quit)
- (define-key evil-visual-state-map [escape] 'keyboard-quit)
- (define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
- (define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
- (define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
- (define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
- (define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit))
- (use-package evil-collection
- :after (evil nov)
- :ensure t
- :config
- (evil-collection-init))
- ;; Cursor on evil change by mode
- (add-hook 'evil-insert-state-entry-hook
- (lambda () (send-string-to-terminal "\033[6 q"))) ; bar
- (add-hook 'evil-normal-state-entry-hook
- (lambda () (send-string-to-terminal "\033[2 q"))) ; block
- (add-hook 'evil-replace-state-entry-hook
- (lambda () (send-string-to-terminal "\033[4 q"))) ; underline
- ;;; Programming modes
- ;;; ---------------------------------------
- ;; Common programming settings
- (add-hook 'prog-mode-hook
- (lambda ()
- (setq show-trailing-whitespace t)
- (set-face-background 'trailing-whitespace "orange")))
- ;; Rust mode with your exact keybindings
- (use-package rust-mode
- :defer t
- :mode "\\.rs\\'"
- :config
- (evil-define-key 'normal rust-mode-map
- (kbd "<leader>rc") (lambda () (interactive) (compile "cargo check"))
- (kbd "<leader>rb") (lambda () (interactive) (compile "cargo build"))
- (kbd "<leader>rt") (lambda () (interactive) (compile "cargo test"))
- (kbd "<leader>rr") (lambda () (interactive) (compile "cargo run"))
- (kbd "<leader>rl") (lambda () (interactive) (compile "cargo clippy"))
- (kbd "<leader>rf") 'rust-format-buffer))
- ;; Go mode with your exact keybindings
- (use-package go-mode
- :defer t
- :mode "\\.go\\'"
- :config
- (setq gofmt-command "goimports")
- (add-hook 'before-save-hook 'gofmt-before-save)
- (evil-define-key 'normal go-mode-map
- (kbd "<leader>gb") (lambda () (interactive) (compile "go build"))
- (kbd "<leader>gt") (lambda () (interactive) (compile "go test"))
- (kbd "<leader>gr") (lambda () (interactive) (compile "go run ."))
- (kbd "<leader>gf") 'gofmt
- (kbd "<leader>ge") (lambda () (interactive) (compile "go vet"))
- (kbd "<leader>gl") (lambda () (interactive) (compile "golint"))
- (kbd "<leader>gi") 'gofmt)
- ;; Go uses tabs, not spaces
- (setq indent-tabs-mode t
- tab-width 4))
- (use-package puppet-mode
- :defer t
- :mode "\\.pp\\'"
- :config
- (setq puppet-indent-level 2)
- (setq indent-tabs-mode nil
- tab-width 2))
- ;; Built-in modes with deferred loading
- (use-package cc-mode
- :ensure nil
- :defer t
- :mode (("\\.c\\'" . c-mode)
- ("\\.h\\'" . c-mode)
- ("\\.cpp\\'" . c++-mode)
- ("\\.hpp\\'" . c++-mode))
- :config
- (setq c-default-style "linux"
- c-basic-offset 4))
- ;; Other built-in mode associations
- (use-package python-mode
- :ensure nil
- :defer t
- :mode "\\.py\\'")
- (use-package sql-mode
- :ensure nil
- :defer t
- :mode "\\.sql\\'")
- (use-package sh-mode
- :ensure nil
- :defer t
- :mode ("\\.sh\\'" "\\.bash\\'" "\\.ksh\\'" "\\.zsh\\'"))
- ;; C# mode (built-in since Emacs 29)
- (use-package csharp-mode
- :ensure nil
- :defer t
- :mode "\\.cs\\'")
- ;; ePUB read
- (use-package nov
- :ensure t
- :mode ("\\.epub\\'" . nov-mode)
- :config
- (setq shr-use-fonts nil))
- ;; fb2 reader
- (use-package fb2-reader
- :ensure t
- :mode ("\\.fb2\\'" . fb2-reader-mode))
- ;; Default to conf-mode for unknown files
- (setq major-mode 'conf-mode)
- ;;; Additional Evil keybindings
- ;;; ---------------------------------------
- (with-eval-after-load 'evil
- (evil-define-key 'normal 'global
- (kbd "<leader>w") 'delete-trailing-whitespace))
- ;;; Improve mode-line
- ;;; ---------------------------------------
- ;; Remove Evil state indicator from mode line
- (setq evil-mode-line-format nil)
- ;; Remove the trailing dashes
- (setq-default mode-line-end-spaces nil)
- ;; Remove mode indicators
- ;(setq minor-mode-alist nil)
- ;; Custom mode line format
- (setq-default mode-line-format
- '("%f %I %p %l,%c"))
Advertisement
Add Comment
Please, Sign In to add comment