273 lines
7.7 KiB
Org Mode
273 lines
7.7 KiB
Org Mode
#+title: Emacs Config Defaults
|
|
#+author: Evie Litherland-Smith
|
|
#+email: evie@xenia.me.uk
|
|
#+filetags: :emacs:config:org:
|
|
#+property: header-args:emacs-lisp :tangle yes :mkdirp yes :results output silent
|
|
|
|
#+begin_src emacs-lisp
|
|
(setq custom-file (locate-user-emacs-file "custom.el"))
|
|
(when (and custom-file (file-exists-p custom-file))
|
|
(load custom-file nil 'nomessage))
|
|
|
|
(setq user-full-name "Evie Litherland-Smith"
|
|
user-mail-address "evie@xenia.me.uk"
|
|
use-short-answers t
|
|
load-prefer-newer t
|
|
indent-tabs-mode nil
|
|
even-window-sizes t
|
|
global-auto-revert-non-file-buffers t
|
|
dired-auto-revert-buffer t
|
|
dired-dwim-target t
|
|
tab-always-indent t
|
|
completion-cycle-threshold nil
|
|
completions-detailed t
|
|
xref-show-definitions-function #'xref-show-definitions-completing-read
|
|
kill-do-not-save-duplicates t
|
|
auto-window-vscroll nil
|
|
fast-but-imprecise-scrolling t
|
|
scroll-conservatively 101
|
|
scroll-margin 0
|
|
scroll-preserve-screen-position 1)
|
|
|
|
|
|
;; Bind normal forward/back buttons on mouse to next/previous buffer respectively
|
|
(keymap-global-set "<mouse-8>" #'previous-buffer)
|
|
(keymap-global-set "<mouse-9>" #'next-buffer)
|
|
|
|
(set-default-coding-systems 'utf-8)
|
|
(set-terminal-coding-system 'utf-8)
|
|
(set-keyboard-coding-system 'utf-8)
|
|
|
|
(global-auto-revert-mode +1)
|
|
(delete-selection-mode +1)
|
|
|
|
;; No tabs
|
|
(customize-set-variable 'indent-tabs-mode nil)
|
|
|
|
;; Only display async output buffer when there's something to show
|
|
(customize-set-variable 'async-shell-command-display-buffer nil)
|
|
|
|
;; Make shebang (#!) file executable when saved
|
|
(add-hook 'after-save-hook #'executable-make-buffer-file-executable-if-script-p)
|
|
|
|
;; Scroll compilation buffer output
|
|
(customize-set-variable 'compilation-scroll-output t)
|
|
#+end_src
|
|
|
|
* Auto-save file settings
|
|
#+begin_src emacs-lisp :tangle yes
|
|
(setq backup-directory-alist '(("." . "~/.local/state/emacs/backups"))
|
|
tramp-backup-directory-alist backup-directory-alist
|
|
tramp-auto-save-directory (cdr (assoc "." tramp-backup-directory-alist)))
|
|
|
|
(savehist-mode +1)
|
|
#+end_src
|
|
|
|
* Recent files
|
|
#+begin_src emacs-lisp
|
|
(use-package recentf
|
|
:config
|
|
(run-at-time nil (* 5 60) 'recentf-save-list)
|
|
(recentf-mode +1)
|
|
:custom
|
|
(recentf-max-saved-items 2048))
|
|
#+end_src
|
|
|
|
* Frequent buffer shortcuts
|
|
#+begin_src emacs-lisp
|
|
;; Config file shortcut
|
|
(defun my/open-init-file ()
|
|
"Open emacs init file"
|
|
(interactive)
|
|
(find-file (locate-user-emacs-file "init.el")))
|
|
(keymap-global-set "C-c w c" #'my/open-init-file)
|
|
|
|
;; NixOS flake shortcut
|
|
(defun my/open-nixos-flake ()
|
|
"Open NixOS system config flake"
|
|
(interactive)
|
|
(let ((flake "/etc/nixos/flake.nix"))
|
|
(if (file-exists-p flake)
|
|
(find-file flake)
|
|
(warn (concat flake " not found")))))
|
|
(keymap-global-set "C-c w n" #'my/open-nixos-flake)
|
|
|
|
;; Scratch buffer shortcut
|
|
(keymap-global-set "C-c w x" #'scratch-buffer)
|
|
|
|
;; Tempel template file shortcut
|
|
(with-eval-after-load 'tempel
|
|
(defun my/open-template-file ()
|
|
"Open `tempel' template file"
|
|
(interactive)
|
|
(find-file tempel-path))
|
|
(keymap-global-set "C-c w t" #'my/open-template-file))
|
|
|
|
;; Org directory shortcut
|
|
(with-eval-after-load 'org
|
|
(defun my/open-org-directory ()
|
|
"Open base org-mode directory in dired"
|
|
(interactive)
|
|
(find-file org-directory))
|
|
(keymap-global-set "C-c w o" #'my/open-org-directory))
|
|
|
|
;; Elfeed feeds file shortcut
|
|
(with-eval-after-load 'org
|
|
(defun my/open-feeds-file ()
|
|
"Open org file containing elfeed sources"
|
|
(interactive)
|
|
(require 'elfeed)
|
|
(require 'elfeed-org)
|
|
(find-file (expand-file-name "feeds.org" elfeed-base-directory))))
|
|
(keymap-global-set "C-c w f" #'my/open-feeds-file)
|
|
#+end_src
|
|
|
|
* package-archive with priorities
|
|
#+begin_src emacs-lisp :results output silent
|
|
(when (require 'package nil :noerror)
|
|
(add-to-list 'package-archives '("stable" . "https://stable.melpa.org/packages/"))
|
|
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
|
|
|
|
(setq package-archive-priorities '(("gnu" . 99)
|
|
("nongnu" . 80)
|
|
("stable" . 70)
|
|
("melpa" . 0))))
|
|
#+end_src
|
|
* diminish modes
|
|
#+begin_src emacs-lisp
|
|
(use-package diminish :ensure t)
|
|
#+end_src
|
|
|
|
* Authentication
|
|
#+begin_src emacs-lisp
|
|
(when (require 'auth-source nil :noerror)
|
|
(setq auth-sources '("secrets:Login"))
|
|
(when (require 'auth-source-pass nil :noerror)
|
|
(auth-source-pass-enable)))
|
|
#+end_src
|
|
|
|
* Helpful
|
|
#+begin_src emacs-lisp
|
|
;; Make `describe-*' screens more helpful
|
|
(use-package helpful
|
|
:ensure t
|
|
:bind (("<remap> <describe-command>" . helpful-command)
|
|
("<remap> <describe-function>" . helpful-callable)
|
|
("<remap> <describe-key>" . helpful-key)
|
|
("<remap> <describe-symbol>" . helpful-symbol)
|
|
("<remap> <describe-variable>" . helpful-variable)
|
|
("C-h F" . helpful-function)
|
|
:map helpful-mode-map
|
|
("<remap> <revert-buffer>" . helpful-update)))
|
|
|
|
;; Bind extra `describe-*' commands
|
|
(keymap-global-set "C-h K" #'describe-keymap)
|
|
#+end_src
|
|
|
|
* Spell checking
|
|
#+begin_src emacs-lisp
|
|
;; turn on spell checking, if available.
|
|
(use-package ispell
|
|
:ensure t
|
|
:diminish
|
|
:custom
|
|
(ispell-dictionary "en_GB"))
|
|
|
|
(use-package flyspell
|
|
:ensure t
|
|
:diminish
|
|
:hook ((text-mode . flyspell-mode)
|
|
(prog-mode . flyspell-prog-mode))
|
|
:init
|
|
(require 'ispell)
|
|
:custom
|
|
(flyspell-mode-line-string nil)
|
|
(flyspell-use-meta-tab nil)
|
|
:config
|
|
(require 'flyspell-correct)
|
|
(require 'consult-flyspell))
|
|
|
|
(use-package flyspell-correct
|
|
:ensure t
|
|
:diminish
|
|
:after flyspell
|
|
:bind ( :map flyspell-mode-map
|
|
("C-;" . flyspell-correct-wrapper)))
|
|
|
|
(use-package consult-flyspell
|
|
:ensure t
|
|
:diminish
|
|
:after (consult flyspell)
|
|
:bind ( :map flyspell-mode-map
|
|
("C-c s ;" . consult-flyspell))
|
|
:config
|
|
(setq consult-flyspell-always-check-buffer t))
|
|
#+end_src
|
|
|
|
* ibuffer
|
|
#+begin_src emacs-lisp
|
|
(use-package ibuffer
|
|
:ensure t
|
|
:bind (("C-c b" . ibuffer)))
|
|
|
|
(use-package ibuffer-project
|
|
:ensure t
|
|
:after ibuffer
|
|
:hook ((ibuffer . (lambda ()
|
|
(setq ibuffer-filter-groups (ibuffer-project-generate-filter-groups))
|
|
(unless (eq ibuffer-sorting-mode 'project-file-relative)
|
|
(ibuffer-do-sort-by-project-file-relative))))))
|
|
#+end_src
|
|
|
|
* Link hint keymaps
|
|
#+begin_src emacs-lisp
|
|
(use-package link-hint
|
|
:ensure t
|
|
:bind (("C-c l o" . link-hint-open-link)
|
|
("C-c l c" . link-hint-copy-link)
|
|
("C-c l C-o" . link-hint-open-all-link)
|
|
("C-c l C-c" . link-hint-copy-all-link)))
|
|
#+end_src
|
|
|
|
* Avy keymaps
|
|
#+begin_src emacs-lisp
|
|
(use-package avy
|
|
:ensure t
|
|
:diminish
|
|
:bind (("C-c j j" . avy-goto-char-2)
|
|
("C-c j w" . avy-goto-word-0)
|
|
("C-c j c" . avy-goto-char)
|
|
("C-c j l" . avy-goto-line)))
|
|
#+end_src
|
|
|
|
* which-func config
|
|
#+begin_src emacs-lisp
|
|
(use-package which-func
|
|
:ensure t
|
|
:init (which-function-mode))
|
|
#+end_src
|
|
|
|
* Shells and terminals
|
|
#+begin_src emacs-lisp
|
|
(use-package shell
|
|
:bind (("C-c t s" . shell)))
|
|
|
|
(use-package eshell
|
|
:bind (("C-c t e" . eshell)))
|
|
#+end_src
|
|
|
|
* Web browser
|
|
#+begin_src emacs-lisp :tangle yes
|
|
(use-package eww
|
|
:defer t
|
|
:diminish
|
|
:custom
|
|
(browse-url-browser-function 'browse-url-default-browser)
|
|
(browse-url-new-window-flag t)
|
|
(eww-default-download-directory "~/Downloads/")
|
|
(eww-auto-rename-buffer 'title)
|
|
(eww-browse-url-new-window-is-tab nil))
|
|
|
|
|
|
#+end_src
|