8.4 KiB
8.4 KiB
Emacs Configuration
- Bootstrap
- Performance Optimization
- Basic UI Configuration
- Package Management
- Theme and Visual Settings
- Evil Mode Configuration
- Completion Framework
- Project Management
- LSP Configuration
- Development Tools
- Version Control
- Terminal Support
- Tree-sitter Configuration
Bootstrap
This configuration needs to be loaded by init.el. Create an init.el with this content:
;;; init.el --- Load org config -*- lexical-binding: t -*-
;;; Commentary:
;;; Load literate config from config.org
;;; Code:
(require 'org)
(org-babel-load-file
(expand-file-name
"config.org"
user-emacs-directory))
(provide 'init)
;;; init.el ends here
Performance Optimization
Early-init optimizations for faster Emacs startup.
;; Garbage collection
(setq gc-cons-threshold 100000000) ; 100mb
(setq read-process-output-max (* 1024 1024)) ; 1mb
;; Faster startup
(setq package-enable-at-startup nil)
(setq site-run-file nil)
Basic UI Configuration
Remove unnecessary UI elements and set basic preferences.
;; Disable unnecessary UI elements
(dolist (mode '(scroll-bar-mode
tool-bar-mode
tooltip-mode
menu-bar-mode))
(when (fboundp mode) (funcall mode -1)))
(set-fringe-mode 10)
(winner-mode 1)
;; Basic settings
(setq inhibit-startup-message t
visible-bell nil
ring-bell-function 'ignore
use-dialog-box nil
custom-file (locate-user-emacs-file "custom-vars.el"))
(load custom-file 'noerror 'nomessage)
Package Management
Configure package archives and initialize use-package.
(require 'package)
(setq package-archives
'(("melpa" . "https://melpa.org/packages/")
("org" . "https://orgmode.org/elpa/")
("elpa" . "https://elpa.gnu.org/packages/")))
(package-initialize)
;; Bootstrap use-package
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure t)
Theme and Visual Settings
Configure the visual appearance of Emacs.
;; Theme configuration
(use-package catppuccin-theme)
(use-package doom-modeline
:init (doom-modeline-mode 1)
:custom
(doom-modeline-height 35)
(nerd-icons-scale-factor 1.35)
(doom-modeline-minor-modes-icon nil)
(doom-modeline-major-modes-icon nil)
(doom-modeline-icon t)
(doom-modeline-time-live-icon t))
;; Load theme
(setq modus-themes-mode-line '(accented borderless padded))
(load-theme 'modus-vivendi t)
;; Font configuration
(set-face-attribute 'default nil :font "FiraCode Nerd Font" :height 125)
;; Line numbers
(column-number-mode)
(global-display-line-numbers-mode t)
(dolist (mode '(term-mode-hook
vterm-mode-hook))
(add-hook mode (lambda () (display-line-numbers-mode 0))))
Evil Mode Configuration
Vim keybindings for Emacs.
(use-package evil
:init
(setq evil-want-integration t
evil-want-keybinding nil)
:config
(evil-mode 1))
(use-package evil-collection
:after evil
:config
(evil-collection-init))
Completion Framework
Configure Vertico, Orderless, and Marginalia for enhanced completion.
(use-package vertico
:bind (:map vertico-map
("C-j" . vertico-next)
("C-k" . vertico-previous)
("C-f" . vertico-exit)
:map minibuffer-local-map
("M-h" . backward-kill-word))
:custom
(vertico-cycle t)
:init
(vertico-mode))
(use-package orderless
:custom
(completion-styles '(orderless basic))
(completion-category-overrides '((file (styles basic partial-completion)))))
(use-package marginalia
:after vertico
:custom
(marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil))
:init
(marginalia-mode))
Project Management
Projectile configuration for project management.
(use-package projectile
:diminish projectile-mode
:bind
("C-M-p" . projectile-find-file)
:bind-keymap
("C-c p" . projectile-command-map)
:init
(setq projectile-project-search-path '("~/Code/git.dwavesys.local/"
"~/Code/nikolaishields/"
"~/.emacs.d/"
"/etc/nixos")
projectile-auto-discover t
projectile-enable-caching t
projectile-indexing-method 'alien)
:config
(projectile-mode)
(run-with-idle-timer 10 t #'projectile-discover-projects-in-search-path))
LSP Configuration
Language Server Protocol setup for development.
(use-package lsp-mode
:init
(setq lsp-keymap-prefix "C-c l")
:hook
((python-ts-mode . lsp-deferred)
(go-ts-mode . lsp-deferred)
(rust-ts-mode . lsp-deferred)
(js-ts-mode . lsp-deferred)
(typescript-ts-mode . lsp-deferred)
(lsp-mode . lsp-enable-which-key-integration))
:commands (lsp lsp-deferred)
:custom
(lsp-enable-symbol-highlighting t)
(lsp-enable-indentation t)
(lsp-enable-on-type-formatting t)
(lsp-modeline-code-actions-enable t)
(lsp-modeline-diagnostics-enable t)
(lsp-completion-provider :capf)
(lsp-idle-delay 0.500))
(use-package lsp-ui
:hook (lsp-mode . lsp-ui-mode)
:custom
(lsp-ui-doc-enable t)
(lsp-ui-doc-show-with-cursor t)
(lsp-ui-doc-show-with-mouse nil)
(lsp-ui-doc-position 'at-point)
(lsp-ui-doc-delay 0.5)
(lsp-ui-sideline-enable t)
(lsp-ui-sideline-show-diagnostics t)
(lsp-ui-sideline-show-hover t)
(lsp-ui-sideline-show-code-actions t))
Development Tools
Configure completion, snippets, and syntax checking.
(use-package company
:hook (lsp-mode . company-mode)
:custom
(company-minimum-prefix-length 1)
(company-idle-delay 0.0))
(use-package company-box
:hook (company-mode . company-box-mode))
(use-package yasnippet
:config
(yas-global-mode 1))
(use-package yasnippet-snippets
:after yasnippet)
(use-package flycheck
:init
(global-flycheck-mode))
Version Control
Magit configuration for Git integration.
(use-package magit
:bind ("C-M-;" . magit-status)
:commands (magit-status magit-get-current-branch)
:custom
(magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))
(use-package magit-todos
:after magit
:config
(magit-todos-mode 1))
Terminal Support
Configure VTerm for terminal emulation.
(use-package vterm
:commands vterm
:custom
(term-prompt-regexp "^[^#$%>\n]*[#$%>] *")
(vterm-max-scrollback 10000))
(use-package multi-vterm
:after vterm
:config
(add-hook 'vterm-mode-hook
(lambda ()
(setq-local evil-insert-state-cursor 'box)
(evil-insert-state))))
Tree-sitter Configuration
Modern syntax highlighting and parsing.
(use-package treesit-auto
:config
(global-treesit-auto-mode))
(setq treesit-language-source-alist
'((bash "https://github.com/tree-sitter/tree-sitter-bash")
(cmake "https://github.com/uyha/tree-sitter-cmake")
(css "https://github.com/tree-sitter/tree-sitter-css")
(elisp "https://github.com/Wilfred/tree-sitter-elisp")
(go "https://github.com/tree-sitter/tree-sitter-go")
(html "https://github.com/tree-sitter/tree-sitter-html")
(javascript "https://github.com/tree-sitter/tree-sitter-javascript" "master" "src")
(json "https://github.com/tree-sitter/tree-sitter-json")
(python "https://github.com/tree-sitter/tree-sitter-python")
(typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src")
(yaml "https://github.com/ikatyang/tree-sitter-yaml")))
;; Install tree-sitter languages
(defun efs/install-treesit-language (lang)
"Install tree-sitter grammar for LANG if it's not already installed."
(unless (treesit-language-available-p lang)
(treesit-install-language-grammar lang)))
(dolist (lang '(bash cmake css elisp go html javascript json python typescript yaml))
(efs/install-treesit-language lang))
;; Remap major modes to tree-sitter versions
(setq major-mode-remap-alist
'((python-mode . python-ts-mode)
(javascript-mode . js-ts-mode)
(js-mode . js-ts-mode)
(typescript-mode . typescript-ts-mode)
(json-mode . json-ts-mode)
(css-mode . css-ts-mode)
(yaml-mode . yaml-ts-mode)
(bash-mode . bash-ts-mode)
(go-mode . go-ts-mode)))