;; -*- coding: utf-8 -*- (setq use-package-always-ensure t) ;;; For performance (setq gc-cons-threshold 100000000) (setq read-process-output-max (* 1024 1024)) ;; 1mb (add-hook 'after-init-hook #'(lambda () ;; restore after startup (setq gc-cons-threshold 800000))) ;;; Disable menu-bar, tool-bar, and scroll-bar. (if (fboundp 'menu-bar-mode) (menu-bar-mode -1)) (if (fboundp 'tool-bar-mode) (tool-bar-mode -1)) (if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1)) ;;; Fix this bug: ;;; https://www.reddit.com/r/emacs/comments/cueoug/the_failed_to_download_gnu_archive_is_a_pretty/ (when (version< emacs-version "26.3") (setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")) (setq inhibit-startup-screen t) ; Disable startup screen (setq initial-scratch-message "") ; Make *scratch* buffer blank (setq-default frame-title-format '("%b")) ; Make window title the buffer name (setq ring-bell-function 'ignore) ; Disable bell sound (fset 'yes-or-no-p 'y-or-n-p) ; y-or-n-p makes answering questions faster (show-paren-mode 1) ; Show closing parens by default (setq linum-format "%4d ") ; Line number format (delete-selection-mode 1) ; Selected text will be overwritten when you start typing (global-auto-revert-mode t) ; Auto-update buffer if file has changed on disk ;; Show line numbers in programming modes (add-hook 'prog-mode-hook (if (or ; If linum-mode doesn't exist... (not (fboundp 'linum-mode)) ; ...or Emacs has display-line-numbers-mode capability (and (fboundp 'display-line-numbers-mode) (display-graphic-p))) ; ...then use display-line-numbers-mode! 'display-line-numbers-mode ; Otherwise, use linum-mode 'linum-mode)) (global-display-line-numbers-mode) ;; Define the whitespace style. (setq-default whitespace-style '(face spaces tabs newline space-mark tab-mark newline-mark)) (setq-default whitespace-display-mappings ;; all numbers are unicode codepoint in decimal '( ;; 32 is SPACE, 183 is MIDDLE DOT · (space-mark 32 [183]) ;; 10 is LINE FEED, 182 isPILCROW SIGN ¶ (newline-mark 10 [182 10]) ;; 9 is tab, 182 isPILCROW SIGN ¶ (tab-mark 9 [9655 9]))) ;; Set whitespace actions. (setq-default whitespace-action '(cleanup auto-cleanup)) ;;; Put Emacs auto-save and backup files to /tmp/ or C:/Temp/ (defconst emacs-tmp-dir (expand-file-name (format "emacs%d" (user-uid)) temporary-file-directory)) (setq backup-by-copying t ; Avoid symlinks delete-old-versions t kept-new-versions 6 kept-old-versions 2 version-control t auto-save-list-file-prefix emacs-tmp-dir auto-save-file-name-transforms `((".*" ,emacs-tmp-dir t)) ; Change autosave dir to tmp backup-directory-alist `((".*" . ,emacs-tmp-dir))) ;;; Lockfiles unfortunately cause more pain than benefit (setq create-lockfiles nil) ;;; Load wheatgrass as the default theme if one is not loaded already (if (not custom-enabled-themes) (load-theme 'wheatgrass t)) (defun reload-config () (interactive) (load-file (expand-file-name "init.el" user-emacs-directory))) ;; Make a single ESC quit the current action (global-set-key (kbd "") 'keyboard-escape-quit) ;; Autopairs (add-hook 'prog-mode-hook (lambda () (electric-pair-mode 1))) ;; Org mode config (setq-default org-startup-indented t) ;; Emacs lisp mode config (add-hook 'emacs-lisp-mode-hook (lambda () ;; Use spaces, not tabs (setq indent-tabs-mode nil))) ;; Theme (use-package doom-themes :config (setq doom-themes-enable-bold t doom-themes-enable-italic t) (load-theme 'doom-moonlight t) ;; Enable flashing mode-line on errors (doom-themes-visual-bell-config) ;; Corrects (and improves) org-mode's native fontification. (doom-themes-org-config)) ;; Some quality of life packages (use-package which-key :config (which-key-mode)) (use-package helm ;; :bind ("C-c C-p" . helm-find-files) :config ;; Enable global fuzzy matching (setq helm-mode-fuzzy-match t helm-completion-in-region-fuzzy-match t) (helm-mode 1)) (use-package corfu :custom (corfu-cycle t) (corfu-auto t) ;; Enable auto-completion :init (global-corfu-mode)) (use-package emacs :custom ;; Enable indentation+completion using the TAB key. ;; `completion-at-point' is often bound to M-TAB. (tab-always-indent 'complete) ;; Emacs 30 and newer: Disable Ispell completion function. As an alternative, ;; try `cape-dict'. (text-mode-ispell-word-completion nil) ;; Emacs 28 and newer: Hide commands in M-x which do not apply to the current ;; mode. Corfu commands are hidden, since they are not used via M-x. This ;; setting is useful beyond Corfu. (read-extended-command-predicate #'command-completion-default-include-p)) (use-package paredit :hook ((emacs-lisp-mode . enable-paredit-mode) (lisp-mode . enable-paredit-mode) (lisp-interaction-mode . enable-paredit-mode) (ielm-mode . enable-paredit-mode))) (use-package nix-mode :mode "\\.nix\\'") (use-package meow :init (defun meow-setup () (setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty) (meow-motion-overwrite-define-key '("j" . meow-next) '("k" . meow-prev) '("" . ignore)) (meow-leader-define-key ;; SPC j/k will run the original command in MOTION state. '("j" . "H-j") '("k" . "H-k") ;; Use SPC (0-9) for digit arguments. '("1" . meow-digit-argument) '("2" . meow-digit-argument) '("3" . meow-digit-argument) '("4" . meow-digit-argument) '("5" . meow-digit-argument) '("6" . meow-digit-argument) '("7" . meow-digit-argument) '("8" . meow-digit-argument) '("9" . meow-digit-argument) '("0" . meow-digit-argument) '("/" . meow-keypad-describe-key) '("?" . meow-cheatsheet)) (meow-normal-define-key '("0" . meow-expand-0) '("9" . meow-expand-9) '("8" . meow-expand-8) '("7" . meow-expand-7) '("6" . meow-expand-6) '("5" . meow-expand-5) '("4" . meow-expand-4) '("3" . meow-expand-3) '("2" . meow-expand-2) '("1" . meow-expand-1) '("-" . negative-argument) '(";" . meow-reverse) '("," . meow-inner-of-thing) '("." . meow-bounds-of-thing) '("[" . meow-beginning-of-thing) '("]" . meow-end-of-thing) '("a" . meow-append) '("o" . meow-open-below) '("b" . meow-back-word) '("c" . meow-change) '("d" . meow-delete) '("g" . meow-cancel-selection) '("G" . meow-grab) '("h" . meow-left) '("H" . meow-left-expand) '("i" . meow-insert) '("j" . meow-next) '("J" . meow-next-expand) '("k" . meow-prev) '("K" . meow-prev-expand) '("l" . meow-right) '("L" . meow-right-expand) '("m" . meow-join) '("n" . meow-search) '("O" . meow-to-block) '("p" . meow-yank) '("q" . meow-quit) '("Q" . meow-goto-line) '("r" . meow-replace) '("R" . meow-swap-grab) '("s" . meow-kill) '("t" . meow-till) '("u" . meow-undo) '("U" . meow-undo-in-selection) '("v" . meow-visit) '("w" . meow-next-word) '("x" . meow-line) '("Y" . meow-sync-grab) '("z" . meow-pop-selection) '("'" . repeat) '("" . ignore))) :config (meow-setup) (meow-setup-indicator) (meow-global-mode 1))