init.el/config.org
2024-09-06 05:08:40 -04:00

5.5 KiB

Emacs Configuration

  ;;; Initial bootstrapping

  ;; Enable MELPA repository
  (require 'package)
  (add-to-list 'package-archives
	       '("melpa" . "https://melpa.org/packages/") t)
  (package-initialize)

  ;;; Look and feel

  ;; Set the theme
  (unless (package-installed-p 'ample-theme)
    (package-install 'ample-theme))
  (load-theme 'ample t)

  ;; Disable menu bar
  (menu-bar-mode -1)

  ;; Disable tool bar
  (tool-bar-mode -1)

  ;; Disable scroll bars
  (toggle-scroll-bar -1)

  ;; Disable splash screen
  (setq inhibit-startup-screen t)

  ;; Display line numbers
  (global-display-line-numbers-mode 1)
  (setq-default display-line-numbers-width 3)

  ;; Highlight current line
  (global-hl-line-mode 1)

  ;; Show trailing whitespace
  (setq-default show-trailing-whitespace t)

  ;; Flash mode line on bell
  (unless (package-installed-p 'mode-line-bell)
    (package-install 'mode-line-bell))
  (require 'mode-line-bell)
  (mode-line-bell-mode)

  ;;; Buffer input and interaction

  ;; Better mouse scrolling
  (setq mouse-wheel-progressive-speed nil)

  ;; Use short yes/no answers
  (setq-default use-short-answers t)

  ;; Auto-pair parenthesis
  (electric-pair-mode 1)

  ;; VIM emulation
  (unless (package-installed-p 'evil)
    (package-install 'evil))
  (setq
   ;; Scroll up with C-u
   evil-want-C-u-scroll t
   ;; Yank to EOL with Y
   evil-want-Y-yank-to-eol t
   ;; Create split windows below
   evil-split-window-below t
   ;; Create vsplit windows to the right
   evil-vsplit-window-right t)
  (require 'evil)
  (evil-mode 1)

  ;; Automatically trim trailing whitespace on save
  (add-hook 'before-save-hook 'delete-trailing-whitespace)

  ;;; General interface

  ;; Completion UI
  (unless (package-installed-p 'vertico)
    (package-install 'vertico))
  (require 'vertico)
  (vertico-mode 1)

  ;; Improve directory navigation
  (define-key vertico-map (kbd "RET") #'vertico-directory-enter)
  (define-key vertico-map (kbd "DEL") #'vertico-directory-delete-word)
  (define-key vertico-map (kbd "M-d") #'vertico-directory-delete-char)

  ;;; Extended completion utilities
  (unless (package-installed-p 'consult)
    (package-install 'consult))
  (global-set-key [rebind switch-to-buffer] #'consult-buffer)
  (global-set-key (kbd "C-c j") #'consult-line)
  (global-set-key (kbd "C-c i") #'consult-imenu)
  (setq read-buffer-completion-ignore-case t
	read-file-name-completion-ignore-case t
	completion-ignore-case t)

  ;;; LSP Support
  (unless (package-installed-p 'eglot)
    (package-install 'eglot))

  ;; Enable LSP support by default in programming buffers
  (add-hook 'prog-mode-hook #'eglot-ensure)

  ;; Create a memorable alias for `eglot-ensure'.
  (defalias 'start-lsp-server #'eglot)

  ;; Completion style
  (unless (package-installed-p 'orderless)
    (package-install 'orderless))
  (require 'orderless)
  (setq completion-styles '(orderless basic)
	completion-category-overrides '((file (styles basic partial-completion))))

  ;; Persist history over restarts
  (require 'savehist)
  (savehist-mode 1)


  ;;; Inline static analysis

  ;; Enabled inline static analysis
  (add-hook 'prog-mode-hook #'flymake-mode)

  ;; Display messages when idle, without prompting
  (setq help-at-pt-display-when-idle t)

  ;; Message navigation bindings
  (with-eval-after-load 'flymake
    (define-key flymake-mode-map (kbd "C-c n") #'flymake-goto-next-error)
    (define-key flymake-mode-map (kbd "C-c p") #'flymake-goto-prev-error))

  ;;; Pop-up completion
  (unless (package-installed-p 'corfu)
    (package-install 'corfu))

  ;; Enable autocompletion by default in programming buffers
  (add-hook 'prog-mode-hook #'corfu-mode)

  ;; Enable automatic completion.
  (setq corfu-auto t)



  ;;; Git client
  (unless (package-installed-p 'magit)
    (package-install 'magit))

  ;; Bind the `magit-status' command to a convenient key.
  (global-set-key (kbd "C-c g") #'magit-status)

  ;;; Indication of local VCS changes
  (unless (package-installed-p 'diff-hl)
    (package-install 'diff-hl))

  ;; Enable `diff-hl' support by default in programming buffers
  (add-hook 'prog-mode-hook #'diff-hl-mode)



  ;;; Go Support
  (unless (package-installed-p 'go-mode)
    (package-install 'go-mode))

  ;;; JSON Support
  (unless (package-installed-p 'json-mode)
    (package-install 'json-mode))

  ;;; Lua Support
  (unless (package-installed-p 'lua-mode)
    (package-install 'lua-mode))

  ;;; Rust Support
  (unless (package-installed-p 'rust-mode)
    (package-install 'rust-mode))

  ;;; YAML Support
  (unless (package-installed-p 'yaml-mode)
    (package-install 'yaml-mode))

  ;;; Markdown support
  (unless (package-installed-p 'markdown-mode)
    (package-install 'markdown-mode))





  ;;; EditorConfig support
  (unless (package-installed-p 'editorconfig)
    (package-install 'editorconfig))

  ;; Enable EditorConfig
  (editorconfig-mode t)

  ;;; In-Emacs Terminal Emulation
  (unless (package-installed-p 'eat)
    (package-install 'eat))

  ;; Close the terminal buffer when the shell terminates.
  (setq eat-kill-buffer-on-exit t)

  ;; Enable mouse-support.
  (setq eat-enable-mouse t)

  ;;; Jump to arbitrary positions
  (unless (package-installed-p 'avy)
    (package-install 'avy))
  (global-set-key (kbd "C-c z") #'avy-goto-word-1)

  ;; Store automatic customisation options elsewhere
  (setq custom-file (locate-user-emacs-file "custom.el"))
  (when (file-exists-p custom-file)
    (load custom-file))