Compare commits
6 Commits
132b465cba
...
45afbf9517
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45afbf9517
|
||
|
|
ee8212779c
|
||
|
|
c5e87681a4
|
||
|
|
b512e64fcb
|
||
|
|
1679ca1e19
|
||
|
|
28dc7d9039
|
@@ -72,6 +72,7 @@ warnings.
|
||||
|
||||
(setq native-comp-async-report-warnings-errors nil)
|
||||
(setenv "LSP_USE_PLISTS" "true")
|
||||
(setq lsp-use-plists t)
|
||||
#+end_src
|
||||
|
||||
** Appearance
|
||||
@@ -204,7 +205,6 @@ configuration I do *indeed* use it as an editor.
|
||||
(setq-default tab-width 2)
|
||||
(editorconfig-mode)
|
||||
#+end_src
|
||||
|
||||
* Garbage Collection
|
||||
|
||||
There's a lot of clashes that can happen with regards to performance, and
|
||||
@@ -1509,6 +1509,7 @@ the package.
|
||||
(clojure-ts-mode . lsp-deferred)
|
||||
(elixir-ts-mode . lsp-deferred)
|
||||
(gleam-ts-mode . lsp-deferred)
|
||||
(python-ts-mode . lsp-deferred)
|
||||
(rust-ts-mode . lsp-deferred)
|
||||
(slint-mode . lsp-deferred)
|
||||
(zig-mode . lsp-deferred)
|
||||
|
||||
189
config.org
189
config.org
@@ -72,6 +72,7 @@ warnings.
|
||||
|
||||
(setq native-comp-async-report-warnings-errors nil)
|
||||
(setenv "LSP_USE_PLISTS" "true")
|
||||
(setq lsp-use-plists t)
|
||||
#+end_src
|
||||
|
||||
** Appearance
|
||||
@@ -195,192 +196,15 @@ features.
|
||||
|
||||
#+INCLUDE: "config/editing.org" :minlevel 1
|
||||
|
||||
* Garbage Collection
|
||||
#+INCLUDE: "config/gc.org" :minlevel 1
|
||||
|
||||
There's a lot of clashes that can happen with regards to performance, and
|
||||
garbage collection. There are a lot of [[https://emacsredux.com/blog/2025/03/28/speed-up-emacs-startup-by-tweaking-the-gc-settings/][settings]] improvements that can make
|
||||
a huge difference in this regard. Especially when it comes to LSPs,
|
||||
completion, and the like. I've chosen to let GCCH (Garbage Collector
|
||||
Magic Hack) to handle this. It seems to work pretty well.
|
||||
#+INCLUDE: "config/tidy.org" :minlevel 1
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
;; Garbage collection
|
||||
(use-package gcmh
|
||||
:ensure t
|
||||
:hook (after-init . gcmh-mode)
|
||||
:custom
|
||||
(gcmh-idle-delay 'auto)
|
||||
(gcmh-auto-idle-delay-factor 10))
|
||||
#+end_src
|
||||
#+INCLUDE: "config/auth.org" :minlevel 1
|
||||
|
||||
* Keeping things tidy
|
||||
#+INCLUDE: "config/profiling.org" :minlevel 1
|
||||
|
||||
I'd like to keep all of my configuration, and emacs files in one place. I've found
|
||||
the [[https://github.com/emacscollective/no-littering][no-littering]] package does this well. This keeps everything under the .emacs.d
|
||||
directory rather than littering $HOME.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package no-littering
|
||||
:ensure t
|
||||
:config
|
||||
(no-littering-theme-backups)
|
||||
(let ((dir (no-littering-expand-var-file-name "lock-files/")))
|
||||
(make-directory dir t)
|
||||
(setq lock-file-name-transforms `((".*" ,dir t))))
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory)))
|
||||
#+end_src
|
||||
|
||||
* Auth sources
|
||||
|
||||
I make sure the auth sources are within the emacs directory. I use gpg, but in case there's
|
||||
a plain text one laying around I'll use that too. Finally as I use pass I've enabled
|
||||
password-store as well; Though I'm not sure this actually works currently.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(auth-source-pass-enable)
|
||||
(setq auth-sources '("~/.emacs.d/.authinfo.gpg" "~/.emacs.d/.authinfo"
|
||||
"password-store"))
|
||||
#+end_src
|
||||
|
||||
* Path
|
||||
|
||||
Rather than having to manage potential paths in the configuration I'll use the
|
||||
[[https://github.com/purcell/exec-path-from-shell][exec-path-from-shell]] package. This pulls in =$PATH= from various different shells
|
||||
and operating systems. At least BSD, Linux, and MacOS are supported anyway.
|
||||
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(use-package exec-path-from-shell
|
||||
:ensure t
|
||||
:config
|
||||
(when (memq window-system '(mac ns))
|
||||
(exec-path-from-shell-initialize)))
|
||||
#+end_src
|
||||
|
||||
* Profiling
|
||||
|
||||
Sometimes if I experience slow start times I've found [[https://github.com/jschaf/esup][esup]] does this quickly and
|
||||
without having to quit Emacs.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package esup
|
||||
:ensure t
|
||||
:config
|
||||
(setq esup-depth 0))
|
||||
#+end_src
|
||||
|
||||
* General Settings
|
||||
|
||||
I have some configuration tweaks on existing features in emacs.
|
||||
|
||||
** Fancy Compile Output
|
||||
|
||||
Just want to add a bit of color to compilation output. This also will scroll
|
||||
to the first error if there is one.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-feature compile
|
||||
:commands (compile recompile)
|
||||
:custom (compilation-scroll-output 'first-error)
|
||||
:config
|
||||
(defun +compilation-colorize ()
|
||||
"Colorize from `compilation-filter-start' to `point'."
|
||||
(require 'ansi-color)
|
||||
(let ((inhibit-read-only t))
|
||||
(ansi-color-apply-on-region (point-min) (point-max))))
|
||||
(add-hook 'compilation-filter-hook #'+compilation-colorize))
|
||||
#+end_src
|
||||
|
||||
** General Emacs Settings
|
||||
|
||||
These are my overall emacs settings. More settings could be moved here. Though
|
||||
keep the loading order in mind when doing so.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-feature emacs
|
||||
:demand t
|
||||
:config
|
||||
(epa-file-enable)
|
||||
(setq epg-pinentry-mode 'loopback)
|
||||
(setq epa-file-encrypt-to '("xulfer@cheapbsd.net"))
|
||||
:custom
|
||||
(scroll-conservatively 101 "Scroll just enough to bring text into view")
|
||||
(enable-recursive-minibuffers t "Allow minibuffer commands in minibuffer")
|
||||
(frame-title-format '(buffer-file-name "%f" ("%b"))
|
||||
"Make frame title current file's name.")
|
||||
(find-library-include-other-files nil)
|
||||
(indent-tabs-mode nil "Use spaces, not tabs")
|
||||
(inhibit-startup-screen t)
|
||||
(history-delete-duplicates t "Don't clutter history")
|
||||
(pgtk-use-im-context-on-new-connection nil "Prevent GTK from stealing Shift + Space")
|
||||
(sentence-end-double-space nil "Double space sentence demarcation breaks sentence navigation in Evil")
|
||||
(tab-stop-list (number-sequence 2 120 2))
|
||||
(tab-width 2 "Shorter tab widths")
|
||||
(completion-styles '(flex basic partial-completion emacs22))
|
||||
(report-emacs-bug-no-explanations t)
|
||||
(report-emacs-bug-no-confirmation t)
|
||||
(setq shr-use-xwidgets-for-media t))
|
||||
#+end_src
|
||||
|
||||
** Diffs
|
||||
|
||||
I have a slight tweak to diff output here. Mainly making the diff horizontally
|
||||
split by default.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-feature ediff
|
||||
:defer t
|
||||
:custom
|
||||
(ediff-window-setup-function #'ediff-setup-windows-plain)
|
||||
(ediff-split-window-function #'split-window-horizontally)
|
||||
:config
|
||||
(add-hook 'ediff-quit-hook #'winner-undo))
|
||||
#+end_src
|
||||
|
||||
** Minibuffer
|
||||
|
||||
The minibuffer is already pretty well sorted by other packages that will be
|
||||
discussed later. However, there is still a bit of tidying that can be done
|
||||
with long paths, and some helpful file based completion.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-feature minibuffer
|
||||
:custom (read-file-name-completion-ignore-case t)
|
||||
:config
|
||||
(defun +minibuffer-up-dir ()
|
||||
"Trim rightmost directory component of `minibuffer-contents'."
|
||||
(interactive)
|
||||
(unless (minibufferp) (user-error "Minibuffer not selected"))
|
||||
(let* ((f (directory-file-name (minibuffer-contents)))
|
||||
(s (file-name-directory f)))
|
||||
(delete-minibuffer-contents)
|
||||
(when s (insert s))))
|
||||
(define-key minibuffer-local-filename-completion-map
|
||||
(kbd "C-h") #'+minibuffer-up-dir)
|
||||
(minibuffer-depth-indicate-mode))
|
||||
#+end_src
|
||||
|
||||
** Remote Editing
|
||||
|
||||
There are a lot of solutions for editing files, and projects remotely. At the moment
|
||||
[[https://www.gnu.org/software/tramp/][tramp]] still seems to work perfectly well... albeit somewhat slower than I'd like.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-feature tramp
|
||||
:config
|
||||
;; Enable full-featured Dirvish over TRAMP on ssh connections
|
||||
;; https://www.gnu.org/software/tramp/#Improving-performance-of-asynchronous-remote-processes
|
||||
(connection-local-set-profile-variables
|
||||
'remote-direct-async-process
|
||||
'((tramp-direct-async-process . t)))
|
||||
(connection-local-set-profiles
|
||||
'(:application tramp :protocol "ssh")
|
||||
'remote-direct-async-process)
|
||||
;; Tips to speed up connections
|
||||
(setq tramp-verbose 0)
|
||||
(setq tramp-chunksize 2000)
|
||||
(setq tramp-ssh-controlmaster-options nil))
|
||||
#+end_src
|
||||
#+INCLUDE: "config/general.org" :minlevel 1
|
||||
|
||||
* Blocks, Parentheses and Formatting Oh My!
|
||||
|
||||
@@ -1293,6 +1117,7 @@ the package.
|
||||
(clojure-ts-mode . lsp-deferred)
|
||||
(elixir-ts-mode . lsp-deferred)
|
||||
(gleam-ts-mode . lsp-deferred)
|
||||
(python-ts-mode . lsp-deferred)
|
||||
(rust-ts-mode . lsp-deferred)
|
||||
(slint-mode . lsp-deferred)
|
||||
(zig-mode . lsp-deferred)
|
||||
|
||||
11
config/auth.org
Normal file
11
config/auth.org
Normal file
@@ -0,0 +1,11 @@
|
||||
* Auth sources
|
||||
|
||||
I make sure the auth sources are within the emacs directory. I use gpg, but in case there's
|
||||
a plain text one laying around I'll use that too. Finally as I use pass I've enabled
|
||||
password-store as well; Though I'm not sure this actually works currently.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(auth-source-pass-enable)
|
||||
(setq auth-sources '("~/.emacs.d/.authinfo.gpg" "~/.emacs.d/.authinfo"
|
||||
"password-store"))
|
||||
#+end_src
|
||||
18
config/gc.org
Normal file
18
config/gc.org
Normal file
@@ -0,0 +1,18 @@
|
||||
* Garbage Collection
|
||||
|
||||
There's a lot of clashes that can happen with regards to performance, and
|
||||
garbage collection. There are a lot of [[https://emacsredux.com/blog/2025/03/28/speed-up-emacs-startup-by-tweaking-the-gc-settings/][settings]] improvements that can make
|
||||
a huge difference in this regard. Especially when it comes to LSPs,
|
||||
completion, and the like. I've chosen to let GCCH (Garbage Collector
|
||||
Magic Hack) to handle this. It seems to work pretty well.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
;; Garbage collection
|
||||
(use-package gcmh
|
||||
:ensure t
|
||||
:hook (after-init . gcmh-mode)
|
||||
:custom
|
||||
(gcmh-idle-delay 'auto)
|
||||
(gcmh-auto-idle-delay-factor 10))
|
||||
#+end_src
|
||||
|
||||
112
config/general.org
Normal file
112
config/general.org
Normal file
@@ -0,0 +1,112 @@
|
||||
* General Settings
|
||||
|
||||
I have some configuration tweaks on existing features in emacs.
|
||||
|
||||
** Fancy Compile Output
|
||||
|
||||
Just want to add a bit of color to compilation output. This also will scroll
|
||||
to the first error if there is one.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-feature compile
|
||||
:commands (compile recompile)
|
||||
:custom (compilation-scroll-output 'first-error)
|
||||
:config
|
||||
(defun +compilation-colorize ()
|
||||
"Colorize from `compilation-filter-start' to `point'."
|
||||
(require 'ansi-color)
|
||||
(let ((inhibit-read-only t))
|
||||
(ansi-color-apply-on-region (point-min) (point-max))))
|
||||
(add-hook 'compilation-filter-hook #'+compilation-colorize))
|
||||
#+end_src
|
||||
|
||||
** General Emacs Settings
|
||||
|
||||
These are my overall emacs settings. More settings could be moved here. Though
|
||||
keep the loading order in mind when doing so.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-feature emacs
|
||||
:demand t
|
||||
:config
|
||||
(epa-file-enable)
|
||||
(setq epg-pinentry-mode 'loopback)
|
||||
(setq epa-file-encrypt-to '("xulfer@cheapbsd.net"))
|
||||
:custom
|
||||
(scroll-conservatively 101 "Scroll just enough to bring text into view")
|
||||
(enable-recursive-minibuffers t "Allow minibuffer commands in minibuffer")
|
||||
(frame-title-format '(buffer-file-name "%f" ("%b"))
|
||||
"Make frame title current file's name.")
|
||||
(find-library-include-other-files nil)
|
||||
(indent-tabs-mode nil "Use spaces, not tabs")
|
||||
(inhibit-startup-screen t)
|
||||
(history-delete-duplicates t "Don't clutter history")
|
||||
(pgtk-use-im-context-on-new-connection nil "Prevent GTK from stealing Shift + Space")
|
||||
(sentence-end-double-space nil "Double space sentence demarcation breaks sentence navigation in Evil")
|
||||
(tab-stop-list (number-sequence 2 120 2))
|
||||
(tab-width 2 "Shorter tab widths")
|
||||
(completion-styles '(flex basic partial-completion emacs22))
|
||||
(report-emacs-bug-no-explanations t)
|
||||
(report-emacs-bug-no-confirmation t)
|
||||
(setq shr-use-xwidgets-for-media t))
|
||||
#+end_src
|
||||
|
||||
** Diffs
|
||||
|
||||
I have a slight tweak to diff output here. Mainly making the diff horizontally
|
||||
split by default.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-feature ediff
|
||||
:defer t
|
||||
:custom
|
||||
(ediff-window-setup-function #'ediff-setup-windows-plain)
|
||||
(ediff-split-window-function #'split-window-horizontally)
|
||||
:config
|
||||
(add-hook 'ediff-quit-hook #'winner-undo))
|
||||
#+end_src
|
||||
|
||||
** Minibuffer
|
||||
|
||||
The minibuffer is already pretty well sorted by other packages that will be
|
||||
discussed later. However, there is still a bit of tidying that can be done
|
||||
with long paths, and some helpful file based completion.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-feature minibuffer
|
||||
:custom (read-file-name-completion-ignore-case t)
|
||||
:config
|
||||
(defun +minibuffer-up-dir ()
|
||||
"Trim rightmost directory component of `minibuffer-contents'."
|
||||
(interactive)
|
||||
(unless (minibufferp) (user-error "Minibuffer not selected"))
|
||||
(let* ((f (directory-file-name (minibuffer-contents)))
|
||||
(s (file-name-directory f)))
|
||||
(delete-minibuffer-contents)
|
||||
(when s (insert s))))
|
||||
(define-key minibuffer-local-filename-completion-map
|
||||
(kbd "C-h") #'+minibuffer-up-dir)
|
||||
(minibuffer-depth-indicate-mode))
|
||||
#+end_src
|
||||
|
||||
** Remote Editing
|
||||
|
||||
There are a lot of solutions for editing files, and projects remotely. At the moment
|
||||
[[https://www.gnu.org/software/tramp/][tramp]] still seems to work perfectly well... albeit somewhat slower than I'd like.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-feature tramp
|
||||
:config
|
||||
;; Enable full-featured Dirvish over TRAMP on ssh connections
|
||||
;; https://www.gnu.org/software/tramp/#Improving-performance-of-asynchronous-remote-processes
|
||||
(connection-local-set-profile-variables
|
||||
'remote-direct-async-process
|
||||
'((tramp-direct-async-process . t)))
|
||||
(connection-local-set-profiles
|
||||
'(:application tramp :protocol "ssh")
|
||||
'remote-direct-async-process)
|
||||
;; Tips to speed up connections
|
||||
(setq tramp-verbose 0)
|
||||
(setq tramp-chunksize 2000)
|
||||
(setq tramp-ssh-controlmaster-options nil))
|
||||
#+end_src
|
||||
14
config/path.org
Normal file
14
config/path.org
Normal file
@@ -0,0 +1,14 @@
|
||||
* Path
|
||||
|
||||
Rather than having to manage potential paths in the configuration I'll use the
|
||||
[[https://github.com/purcell/exec-path-from-shell][exec-path-from-shell]] package. This pulls in =$PATH= from various different shells
|
||||
and operating systems. At least BSD, Linux, and MacOS are supported anyway.
|
||||
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(use-package exec-path-from-shell
|
||||
:ensure t
|
||||
:config
|
||||
(when (memq window-system '(mac ns))
|
||||
(exec-path-from-shell-initialize)))
|
||||
#+end_src
|
||||
12
config/profiling.org
Normal file
12
config/profiling.org
Normal file
@@ -0,0 +1,12 @@
|
||||
* Profiling
|
||||
|
||||
Sometimes if I experience slow start times I've found [[https://github.com/jschaf/esup][esup]] does this quickly and
|
||||
without having to quit Emacs.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package esup
|
||||
:ensure t
|
||||
:config
|
||||
(setq esup-depth 0))
|
||||
#+end_src
|
||||
|
||||
17
config/tidy.org
Normal file
17
config/tidy.org
Normal file
@@ -0,0 +1,17 @@
|
||||
* Keeping things tidy
|
||||
|
||||
I'd like to keep all of my configuration, and emacs files in one place. I've found
|
||||
the [[https://github.com/emacscollective/no-littering][no-littering]] package does this well. This keeps everything under the .emacs.d
|
||||
directory rather than littering $HOME.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package no-littering
|
||||
:ensure t
|
||||
:config
|
||||
(no-littering-theme-backups)
|
||||
(let ((dir (no-littering-expand-var-file-name "lock-files/")))
|
||||
(make-directory dir t)
|
||||
(setq lock-file-name-transforms `((".*" ,dir t))))
|
||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory)))
|
||||
#+end_src
|
||||
|
||||
Reference in New Issue
Block a user