Emacs configurations
Go to file
2024-09-06 05:33:33 -04:00
.gitignore rename config to README 2024-09-06 05:10:32 -04:00
init.el rename config to README 2024-09-06 05:10:32 -04:00
README.org try to organize first try 2024-09-06 05:33:33 -04:00

Emacs Configuration

Package Bootstrapping

  ;; Add MELPA to the repositories list
  (require 'package)
  (add-to-list 'package-archives
	       '("melpa" . "https://melpa.org/packages/") t)

  ;; Load packages list
  (package-initialize)

  ;; Setup `use-package'
  (unless (package-installed-p 'use-package)
    (package-refresh-contents)
    (package-install 'use-package))
  (eval-when-compile
    (require 'use-package))

Look and Feel

  ;; Set the theme
  (use-package ample-theme
    :ensure t
    :config (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
  (use-package mode-line-bell
    :ensure t
    :config (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))