;;; Performance tweaks ;;; --------------------------------------- (setq site-run-file nil) (setq package-native-compile t) ;; 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 ;; 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) ;; Don't compact font caches during GC (setq inhibit-compacting-font-caches t) ;;; UI settings ;;; --------------------------------------- ;; Minimal startup settings (setq inhibit-startup-screen t initial-scratch-message nil make-backup-files nil auto-save-default nil create-lockfiles nil) (menu-bar-mode -1) (column-number-mode 1) ;; Cursor settings (blink-cursor-mode -1) (setq visible-cursor nil) ;; Save minibuffer history (savehist-mode 1) ;; 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) ;; Theme (only if needed in terminal) (add-to-list 'custom-theme-load-path "~/.emacs.d/themes/") (load-theme 'theBestTheme 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) ;; Use-package setup (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) (setq use-package-always-ensure t) ;; Better minibuffer completion (use-package vertico :init (vertico-mode 1) :config (setq vertico-cycle t)) ;; Improve minibuffer interaction (use-package orderless :init (setq completion-styles '(orderless basic) completion-category-defaults nil completion-category-overrides '((file (styles . (partial-completion)))))) ;; Expand region (use-package expand-region :ensure t :bind ("M-o" . er/expand-region)) ;; Better unique buffer names (absolutely for js, python, where identical files) (require 'uniquify) (setq uniquify-buffer-name-style 'forward) ;;; Programming modes ;;; --------------------------------------- ;; Common programming settings (add-hook 'prog-mode-hook (lambda () (setq show-trailing-whitespace t) (set-face-background 'trailing-whitespace "orange"))) ;; External packages with deferred loading (use-package go-mode :defer t :mode "\\.go\\'") (use-package puppet-mode :defer t :mode "\\.pp\\'") ;; 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 (use-package csharp-mode :ensure nil :defer t :mode "\\.cs\\'") ;; Default to conf-mode for unknown files (setq major-mode 'conf-mode) ;;; Keys ;;; --------------------------------------- (global-set-key (kbd "C-c w") 'delete-trailing-whitespace) (global-set-key (kbd "M-;") 'comment-line)