1 ;; -*- lexical-binding: t; -*-
8 (cond ((eq system-type 'gnu/linux) (or (xdg-user-dir "DOCUMENTS") "~/Documents"))
9 ((eq system-type 'windows-nt) "~/Documents"))))
10 (setq lh/dir-data-home
12 (cond ((eq system-type 'gnu/linux) (or (xdg-data-home) "~/.local/share"))
13 ((eq system-type 'windows-nt) (getenv "APPDATA")))))
15 (let ((lisp-dir (expand-file-name "lisp" user-emacs-directory)))
16 (make-directory lisp-dir t)
17 (add-to-list 'load-path lisp-dir))
19 (defun lh/keymap-set-keys (keymap &rest pairs)
20 (cl-loop for (key function) on pairs by #'cddr
21 do (keymap-set keymap key function)))
23 (setopt custom-file (expand-file-name "custom.el" user-emacs-directory))
25 (lh/keymap-set-keys global-map
26 "<mouse-8>" 'xref-go-back
27 "<mouse-9>" 'xref-go-forward)
30 (setopt package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
31 ("nongnu" . "https://elpa.nongnu.org/nongnu/")
32 ("melpa-stable" . "https://stable.melpa.org/packages/")
33 ("melpa" . "https://melpa.org/packages/"))
34 package-archive-priorities '(("gnu" . 3)
38 package-pinned-packages '((sly . "melpa"))
39 package-selected-packages '(csv-mode denote denote-org elfeed magit nhexl-mode notmuch
40 ob-restclient paredit paredit-menu restclient
45 (setopt tab-always-indent 'complete
46 completion-ignore-case t
47 completion-styles '(basic substring initials flex)
48 completion-preview-mode t
49 completion-auto-select t
50 completion-auto-help 'visible
51 completion-show-help nil
52 completions-sort 'historical
53 completions-format 'one-column
54 completions-max-height 20)
55 (setopt fido-vertical-mode t)
56 (lh/keymap-set-keys icomplete-fido-mode-map
57 "TAB" 'icomplete-force-complete
60 "^" 'icomplete-fido-backward-updir
61 "DEL" 'backward-delete-char)
63 ;; This hack allows using my default set of completion styles in fido instead of being forced to
64 ;; use flex. Flex is especially annoying since it does not prioritise prefix matches.
65 (defun lh/advice-fido-setup (func &rest args)
66 (let ((cs completion-styles))
69 (setq-local completion-styles cs))))
70 (advice-add 'icomplete--fido-mode-setup :around 'lh/advice-fido-setup)
75 (defun lh/enable-trailing-whitespace ()
76 (setq show-trailing-whitespace t))
77 (add-hook 'prog-mode-hook 'lh/enable-trailing-whitespace)
80 (setopt inferior-lisp-program "sbcl")
81 (defun lh/enable-paredit-menu ()
82 (require 'paredit-menu))
83 (add-hook 'paredit-mode-hook 'lh/enable-paredit-menu)
84 (add-hook 'lisp-mode-hook 'paredit-mode)
85 (add-hook 'emacs-lisp-mode-hook 'paredit-mode)
86 (with-eval-after-load "sly"
87 (lh/keymap-set-keys sly-inspector-mode-map
88 "<mouse-8>" 'sly-inspector-pop
89 "<mouse-9>" 'sly-inspector-next))
92 (add-hook 'csv-mode-hook 'csv-align-mode)
95 (let ((elfeed-feeds-file (expand-file-name "feeds.el" user-emacs-directory))
96 (elfeed-data-dir (expand-file-name "elfeed" lh/dir-data-home)))
97 (when (file-exists-p elfeed-feeds-file)
98 (load elfeed-feeds-file))
99 (make-directory elfeed-data-dir t)
100 (setopt elfeed-db-directory elfeed-data-dir))
103 (setopt notmuch-archive-tags '("-inbox" "-unread")
104 notmuch-poll-script "notmuch-poll") ; TODO: deprecated, use hooks
107 (with-eval-after-load 'restclient
108 (require 'restclient-capf))
111 (let* ((org-dir (expand-file-name "org" lh/dir-documents))
112 (denote-dir (expand-file-name "notes" org-dir)))
113 (make-directory org-dir t)
114 (make-directory denote-dir t)
115 (setopt org-directory org-dir
116 denote-directory denote-dir))
119 (setopt focus-follows-mouse t
120 mouse-autoselect-window 0.2
121 frame-resize-pixelwise t
122 scroll-conservatively 100
123 pixel-scroll-precision-mode t
126 ring-bell-function 'ignore
128 recentf-max-saved-items 200
131 delete-selection-mode t
138 delete-old-versions t)
140 (let ((backup-dir (expand-file-name "backup" user-emacs-directory)))
141 (make-directory backup-dir t)
142 (setopt backup-directory-alist `(("." . ,backup-dir))))
144 (put 'narrow-to-region 'disabled nil)
146 ;;;; Private and custom overrides
147 (let ((private-file (expand-file-name "private.el" user-emacs-directory)))
148 (when (file-exists-p custom-file)
150 (when (file-exists-p private-file)
151 (load private-file)))