diff --git a/.gitignore b/.gitignore index 95bc89c..8523815 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -elpa/ +**/* +!init.el +!config.org diff --git a/config.org b/config.org new file mode 100644 index 0000000..1472ceb --- /dev/null +++ b/config.org @@ -0,0 +1,220 @@ +#+TITLE: Emacs Configuration +#+AUTHOR: frosty +#+EMAIL: passedgoandgot200@gmail.com +#+OPTIONS: num:nil + +#+BEGIN_SRC emacs-lisp + ;;; 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)) + +#+END_SRC diff --git a/init.el b/init.el index 398d3b0..93bd4e1 100644 --- a/init.el +++ b/init.el @@ -1,36 +1,6 @@ -(require 'package) -(add-to-list 'package-archives - '("melpa" . "https://melpa.org/packages/")) -(package-initialize) -(package-refresh-contents) +;;; init.el --- Initialize configuration -*- lexical-binding: t -*- +;;; Commentary: +;;; Code: -;; Download Evil -(unless (package-installed-p 'evil) - (package-install 'evil)) - -;; Enable Evil -(require 'evil) -(evil-mode 1) - -(unless (package-installed-p 'gruvbox-theme) - (package-install 'gruvbox-theme)) - -(load-theme 'gruvbox-dark-medium) - -(set-face-attribute 'default nil - :font "Fira Mono" - :height 100 - :weight 'medium) - -(set-face-attribute 'font-lock-comment-face nil - :slant 'italic) - -(menu-bar-mode -1) -(tool-bar-mode -1) -(scroll-bar-mode -1) - -(global-display-line-numbers-mode 1) -(global-visual-line-mode t) - -;; Disable custom.el -(setq custom-file null-device) +(org-babel-load-file (locate-user-emacs-file "config.org")) +;;; init.el ends here