Move usability package configurations from configuration.org to init.el

This commit is contained in:
Gergely Polonkai 2025-05-30 16:46:40 +02:00
parent a5d503f1a6
commit 8a6353b2c5
No known key found for this signature in database
GPG Key ID: 2D2885533B869ED4
2 changed files with 325 additions and 514 deletions

View File

@ -37,520 +37,6 @@
(push (org-projectile-project-todo-entry) org-capture-templates))
#+end_src
* External packages to boost usability
** ~gnu-elpa-keyring-update~, to make sure we always have the latest ELPA GPG keys
#+begin_src emacs-lisp
(use-package gnu-elpa-keyring-update)
#+end_src
** ~auto-package-update~, to automatically upgrade packages every week
#+begin_src emacs-lisp
(use-package auto-package-update
:custom
(auto-package-update-interval 7)
(auto-package-update-delete-old-versions t)
;; Lets do this in after-init-hook, as use-package invocations may modify
;; the list of installed packages
:hook
(after-init . auto-package-update-maybe))
#+end_src
** ~ace-window~, for better window navigation
Besides its standard functionality i also add key bindings for burying or scrolling other windows.
#+begin_src emacs-lisp
(use-package ace-window
:custom
(aw-background nil)
(aw-dispatch-always t)
:config
(add-to-list 'aw-dispatch-alist
'(?s gpolonkai/scroll-window-up " Scroll window up")
t)
(add-to-list 'aw-dispatch-alist
'(?S gpolonkai/scroll-window-down " Scroll window down")
t)
(add-to-list 'aw-dispatch-alist
'(?q gpolonkai/bury-window " Bury (quit) window")
t)
:bind
(:map ctl-x-map
("o" . ace-window))
:custom-face
(aw-leading-char-face ((t (:inherit ace-jump-face-foreground :height 2.0)))))
#+end_src
** ~doom-themes~
#+begin_src emacs-lisp
(use-package doom-themes
:custom
(doom-themes-enable-bold t)
(doom-themes-enable-italic t)
:config
(load-theme 'doom-nord-aurora t)
(doom-themes-visual-bell-config)
(doom-themes-org-config))
#+end_src
** Nyanyanyanyanya
*** ~nyan-mode~: Nyan-cat style position marker
The package that [[https://gergely.polonkai.eu/blog/2014/9/17/nyanmacs.html][made me]] switch to Emacs.
#+begin_src emacs-lisp
(use-package nyan-mode
:config
(nyan-mode t)
:custom
(nyan-bar-length 20)
(nyan-animate-nyancat t)
(nyan-wavy-trail t))
#+end_src
** ~delight~ to de-light some minor modes
The list of active minor modes can easily fill my whole mode line (twice…). This is one of the things to protect me from that.
#+begin_src emacs-lisp
(use-package delight)
#+end_src
** ~minions~, to put all minor modes into a menu
#+begin_src emacs-lisp
(use-package minions
:config
(minions-mode 1))
#+end_src
** ~doom-modeline~, because its much, much more beautiful than the vanilla one
#+begin_src emacs-lisp
(use-package doom-modeline
:init
(doom-modeline-mode 1)
:custom
(doom-modeline-continuous-word-count-modes '(markdown-mode gfm-mode org-mode rst-mode))
(doom-modeline-hud t)
(doom-modeline-minor-modes t))
#+end_src
** ~beacon~ to find the cursor
Sometimes it disappears, or just too hard to see.
#+begin_src emacs-lisp
(use-package beacon
:demand
:config
(beacon-mode 1)
:bind
(:map gpolonkai/pers-map
("b" . beacon-blink)))
#+end_src
** ~eshell~ extras
*** Display the status of the last command in the fringe of EShell
#+begin_src emacs-lisp
(use-package eshell-fringe-status
:hook
(eshell-mode . eshell-fringe-status-mode))
#+end_src
*** Extras for the EShell prompt
#+begin_src emacs-lisp
(use-package eshell-prompt-extras
:config
(with-eval-after-load "esh-opt"
(autoload 'epe-theme-lambda "eshell-prompt-extras"))
:custom
(eshell-highlight-prompt nil)
(eshell-prompt-function 'epe-theme-lambda))
#+end_src
** ~form-feed~, to show form feed characters as a horizontal line
Some (many? most?) Emacs packages use this to do some logical separation of the code. It is also used by some compilers, and Emacs help system.
#+begin_src emacs-lisp
(use-package form-feed
:hook
(emacs-lisp-mode . form-feed-mode)
(compilation-mode . form-feed-mode)
(help-mode . form-feed-mode))
#+end_src
** ~hl-line~, to highlight the current line
#+begin_src emacs-lisp
(use-package hl-line
:config
(when window-system
(global-hl-line-mode))
:custom-face
(hl-line ((t (:inherit nil :background "gray25")))))
#+end_src
** ~ace-jump-mode~, to jump to a specific character
#+begin_src emacs-lisp
(use-package ace-jump-mode
:bind
(:map gpolonkai/pers-map
("SPC" . ace-jump-mode)))
#+end_src
** Multiple cursors, because one is often not enough
*** ~multiple-cursors~
#+begin_src emacs-lisp
(defun gpolonkai/no-blink-matching-paren ()
(customize-set-variable 'blink-matching-paren nil))
(defun gpolonkai/blink-matching-paren ()
(customize-set-variable 'blink-matching-paren t))
(use-package multiple-cursors
:init
(defvar gpolonkai/mc-prefix-map (make-sparse-keymap)
"Prefix keymap for multiple-cursors")
(define-prefix-command 'gpolonkai/mc-prefix-map)
(define-key global-map (kbd "C-c m") 'gpolonkai/mc-prefix-map)
:hook
(multiple-cursors-mode-enabled . gpolonkai/no-blink-matching-paren)
(multiple-cursors-mode-disabled . gpolonkai/blink-matching-paren)
:bind
(:map gpolonkai/mc-prefix-map
("t" . mc/mark-all-like-this)
("m" . mc/mark-all-like-this-dwim)
("l" . mc/edit-lines)
("e" . mc/edit-ends-of-lines)
("a" . mc/edit-beginnings-of-lines)
("n" . mc/mark-next-like-this)
("p" . mc/mark-previous-like-this)
("s" . mc/mark-sgml-tag-pair)
("d" . mc/mark-all-like-this-in-defun)
("M-<mouse-1>" . mc/add-cursor-on-click)))
#+end_src
*** ~phi-search~, incremental search compatible with ~multiple-cursors~
#+begin_src emacs-lisp
(use-package phi-search)
(use-package phi-search-mc
:config
(phi-search-mc/setup-keys))
#+end_src
*** ~mc-extras~
#+begin_src emacs-lisp
(use-package mc-extras
:demand
:bind
(:map mc/keymap
("=" . mc/compare-chars)))
#+end_src
*** Add extra cursors with ~ace-jump~
#+begin_src emacs-lisp
(use-package ace-mc
:bind
(:map gpolonkai/mc-prefix-map
("SPC" . ace-mc-add-multiple-cursors)
("C-SPC" . ace-mc-add-single-cursor)))
#+end_src
** ~smartparens~ for easier parentheses insertion
#+begin_src emacs-lisp
(use-package smartparens
:demand
:config
(require 'smartparens-config)
(show-smartparens-global-mode t)
:hook
(prog-mode . turn-on-smartparens-strict-mode)
(markdown-mode . turn-on-smartparens-strict-mode)
:bind
(([f9] . smartparens-strict-mode)
("C-c s u" . sp-unwrap-sexp)
("C-c s k" . sp-kill-sexp)
("C-c s r" . sp-rewrap-sexp)))
#+end_src
** ~which-key~ to display available key bindings
#+begin_src emacs-lisp
(use-package which-key
:config
(which-key-mode)
(which-key-setup-minibuffer)
:custom
(which-key-idle-delay 0.3))
#+end_src
** ~visual-fill-column~, width limited text view
Its much easier on the eye when writing text, not code.
#+begin_src emacs-lisp
(use-package visual-fill-column
:custom
(visual-fill-column-center-text t)
(visual-fill-column-width 120)
:hook
(org-mode . visual-fill-column-mode))
#+end_src
** ~spinner~, to display a progress bar for e.g. background tasks
#+begin_src emacs-lisp
(use-package spinner)
#+end_src
** ~avy~ to jump to things
#+begin_src emacs-lisp
(use-package avy
:demand
:config
(avy-setup-default)
:bind
(("M-g c" . avy-goto-char)
("M-g C" . avy-goto-char-2)
("M-g f" . avy-goto-line)
("M-g w" . avy-goto-word-1)
("M-g e" . avy-goto-word-0)))
#+end_src
** ~goto-last-change~
#+begin_src emacs-lisp
(use-package goto-last-change
:bind
(("M-g /" . goto-last-change)))
#+end_src
** ~rainbow-mode~ to highlight colours based on their name/hex code
#+begin_src emacs-lisp
(use-package rainbow-mode
:hook
(css-mode . rainbow-mode)
(scss-mode . rainbow-mode)
(sass-mode . rainbow-mode))
#+end_src
** ~zygospore~ to toggle other windows for maximum focus
When focus is no longer needed, they can be toggled back.
#+begin_src emacs-lisp
(use-package zygospore
:bind
(:map ctl-x-map
("1" . zygospore-toggle-delete-other-windows)))
#+end_src
** ~dashboard~
#+begin_src emacs-lisp
(use-package dashboard
:after
projectile
:config
(add-to-list 'dashboard-items '(projects . 5) t)
(dashboard-setup-startup-hook)
:custom
(dashboard-set-heading-icons t)
(dashboard-set-file-icons t)
(dashboard-center-content t)
(dashboard-set-navigator t)
(dashboard-items '((agenda . 5)
(projects . 5)
(recents . 5)
(bookmarks . 5))))
#+end_src
** ~sr-speedbar~, speed bar in the same frame
#+begin_src emacs-lisp
(use-package sr-speedbar
:after speedbar)
#+end_src
** ~hungry-delete~ to delete all the whitespace
#+begin_src emacs-lisp
(use-package hungry-delete
:config
(global-hungry-delete-mode))
#+end_src
** ~anzu~, to show number of matches while searching
#+begin_src emacs-lisp
(use-package anzu
:delight
:config
(global-anzu-mode 1))
#+end_src
** ~all-the-icons~
Should the fonts be missing, run ~(all-the-icons-install-fonts)~. Its not run
automatically, as it requires connecting to a website and download a pretty
large font file.
#+begin_src emacs-lisp
(use-package all-the-icons)
#+end_src
And apply it to dired, too.
#+begin_src emacs-lisp
(use-package all-the-icons-dired
:hook
(dired-mode . all-the-icons-dired-mode))
#+end_src
** ~flyspell~ for all my spell-checking needs
#+begin_src emacs-lisp
(use-package flyspell
:hook
(prog-mode . flyspell-prog-mode)
(text-mode . flyspell-mode))
#+end_src
** ~ace-flyspell~
#+begin_src emacs-lisp
(use-package ace-flyspell
:bind
(:map flyspell-mode-map
("C-M-i" . ace-flyspell-correct-word)))
#+end_src
** ~objed~, text object manipulation
From the package description:
#+begin_quote
Text objects are textual patterns like a line, a top level definition, a word, a sentence or any
other unit of text. When objed-mode is enabled, certain editing commands (configurable) will
activate objed and enable its modal editing features.
#+end_quote
#+begin_src emacs-lisp
(use-package objed
:demand t
:bind
(:map global-map
("M-SPC" . objed-activate)))
#+end_src
** ~alert~ to send alerts to a notification system
#+begin_src emacs-lisp
(use-package alert
:config
(setq alert-default-style 'libnotify))
#+end_src
Only send alerts from eshell when the buffer is not visible:
#+begin_src emacs-lisp
(alert-add-rule
:status '(buried)
:mode 'eshell-mode
:style 'notifications)
#+end_src
Send alerts to Termux if we are running there
#+begin_src emacs-lisp
(when (gpolonkai/termux-p)
(use-package alert-termux
:after alert
:config
(setq alert-default-style 'termux)))
#+end_src
** ~undo-tree~
#+begin_src emacs-lisp
(use-package undo-tree
:config
(global-undo-tree-mode)
:custom
(undo-tree-auto-save-history nil))
#+end_src
** ~ciel~ to mimic ViMs ~ci~ functionality
#+begin_src emacs-lisp
(use-package ciel
:bind
(:map global-map
("C-c i" . ciel-ci)
("C-c o" . ciel-co)))
#+end_src
** ~hide-mode-line~ to hide the modeline occasionally
#+begin_src emacs-lisp
(use-package hide-mode-line
:bind (:map gpolonkai/pers-map
("h" . hide-mode-line-mode)))
#+end_src
** ~string-inflection~
#+begin_src emacs-lisp
(use-package string-inflection
:bind (:map gpolonkai/pers-map
("i" . string-inflection-all-cycle)))
#+end_src
** ~spdx~ to insert SPDX compatible license text
#+begin_src emacs-lisp
(use-package spdx
:bind (:map gpolonkai/pers-map
("L" . spdx-insert-spdx-copyright))
:custom
(spdx-copyright-holder 'user)
(spdx-copyright-sign 'unicode))
#+end_src
** ~ag~ to use the silver searcher
#+begin_src emacs-lisp
(use-package ag
:commands (ag))
#+end_src
** ~rg~ to use ripgrep
#+begin_src emacs-lisp
(use-package rg
:commands (rg))
#+end_src
* Dired extras
** ~dired-collapse~, to collapse directories that contain a single file somewhere deep

325
init.el
View File

@ -530,6 +530,331 @@ order."
:bind (("M-/" . dabbrev-completion)
("C-M-/" . dabbrev-expand)))
;; Make sure we always have the latest ELPA GPG keys
(use-package gnu-elpa-keyring-update)
;; Keep packages up to date
(use-package auto-package-update
:custom
(auto-package-update-interval 7)
(auto-package-update-delete-old-versions t)
;; Even though this might require a restart when packages are updated, since
;; `use-package' invocations update the list of installed packages, we have to
;; do this in `after-init-hook'.
:hook
(after-init . auto-package-update-maybe))
;; TODO: This :config call might be omitted if i move it to
;; ace-window-display-mode-hook
(use-package ace-window
:custom
(aw-background nil)
(aw-dispatch-always t)
:config
(add-to-list 'aw-dispatch-alist
'(?s gpolonkai/scroll-window-up " Scroll window up")
t)
(add-to-list 'aw-dispatch-alist
'(?S gpolonkai/scroll-window-down " Scroll window down")
t)
(add-to-list 'aw-dispatch-alist
'(?q gpolonkai/bury-window " Bury (quit) window")
t)
:bind
(:map ctl-x-map
("o" . ace-window))
:custom-face
(aw-leading-char-face ((t (:inherit ace-jump-face-foreground :height 2.0)))))
(use-package doom-themes
:custom
(doom-themes-enable-bold t)
(doom-themes-enable-italic t)
:config
(load-theme 'doom-nord-aurora t)
(doom-themes-visual-bell-config)
(doom-themes-org-config))
;; The package that converted me to Emacs:
;; https://gergely.polonkai.eu/blog/2014/9/17/nyanmacs.html
(use-package nyan-mode
:config
(nyan-mode t)
:custom
(nyan-bar-length 20)
(nyan-animate-nyancat t)
(nyan-wavy-trail t))
;; The list of active minor modes can easily fill my whole mode line (twice…).
;; This is one of the things to protect me from that.
(use-package delight)
(use-package minions
:config
(minions-mode 1))
(use-package doom-modeline
:init
(doom-modeline-mode 1)
:custom
(doom-modeline-continuous-word-count-modes '(markdown-mode gfm-mode org-mode rst-mode))
(doom-modeline-hud t)
(doom-modeline-minor-modes t))
(use-package beacon
:demand
:config
(beacon-mode 1)
:bind
(:map gpolonkai/pers-map
("b" . beacon-blink)))
(use-package eshell-fringe-status
:hook
(eshell-mode . eshell-fringe-status-mode))
(use-package eshell-prompt-extras
:config
(with-eval-after-load "esh-opt"
(autoload 'epe-theme-lambda "eshell-prompt-extras"))
:custom
(eshell-highlight-prompt nil)
(eshell-prompt-function 'epe-theme-lambda))
;; Some (many? most?) Emacs packages use this to do some logical separation of
;; the code. It is also used by some compilers, and Emacs help system.
(use-package form-feed
:hook
(emacs-lisp-mode . form-feed-mode)
(compilation-mode . form-feed-mode)
(help-mode . form-feed-mode))
(use-package hl-line
:config
(when window-system
(global-hl-line-mode))
:custom-face
(hl-line ((t (:inherit nil :background "gray25")))))
(use-package ace-jump-mode
:bind
(:map gpolonkai/pers-map
("SPC" . ace-jump-mode)))
(defun gpolonkai/no-blink-matching-paren ()
"Disable blinking matching parens."
(customize-set-variable 'blink-matching-paren nil))
(defun gpolonkai/blink-matching-paren ()
"Enable blinking matching parens."
(customize-set-variable 'blink-matching-paren t))
(use-package multiple-cursors
:init
(defvar gpolonkai/mc-prefix-map (make-sparse-keymap)
"Prefix keymap for multiple-cursors")
(define-prefix-command 'gpolonkai/mc-prefix-map)
(define-key global-map (kbd "C-c m") 'gpolonkai/mc-prefix-map)
:hook
(multiple-cursors-mode-enabled . gpolonkai/no-blink-matching-paren)
(multiple-cursors-mode-disabled . gpolonkai/blink-matching-paren)
:bind
(:map gpolonkai/mc-prefix-map
("t" . mc/mark-all-like-this)
("m" . mc/mark-all-like-this-dwim)
("l" . mc/edit-lines)
("e" . mc/edit-ends-of-lines)
("a" . mc/edit-beginnings-of-lines)
("n" . mc/mark-next-like-this)
("p" . mc/mark-previous-like-this)
("s" . mc/mark-sgml-tag-pair)
("d" . mc/mark-all-like-this-in-defun)
("M-<mouse-1>" . mc/add-cursor-on-click)))
;; phi-search is an incremental search compatible with multiple-cursors
(use-package phi-search)
(use-package phi-search-mc
:config
(phi-search-mc/setup-keys))
(use-package mc-extras
:demand
:bind
(:map mc/keymap
("=" . mc/compare-chars)))
(use-package ace-mc
:bind
(:map gpolonkai/mc-prefix-map
("SPC" . ace-mc-add-multiple-cursors)
("C-SPC" . ace-mc-add-single-cursor)))
(use-package smartparens
:demand
:config
(require 'smartparens-config)
(show-smartparens-global-mode t)
:hook
(prog-mode . turn-on-smartparens-strict-mode)
(markdown-mode . turn-on-smartparens-strict-mode)
:bind
(([f9] . smartparens-strict-mode)
("C-c s u" . sp-unwrap-sexp)
("C-c s k" . sp-kill-sexp)
("C-c s r" . sp-rewrap-sexp)))
(use-package which-key
:config
(which-key-mode)
(which-key-setup-minibuffer)
:custom
(which-key-idle-delay 0.3))
(use-package visual-fill-column
:custom
(visual-fill-column-center-text t)
(visual-fill-column-width 120)
:hook
(org-mode . visual-fill-column-mode))
(use-package spinner)
(use-package avy
:demand
:config
(avy-setup-default)
:bind
(("M-g c" . avy-goto-char)
("M-g C" . avy-goto-char-2)
("M-g f" . avy-goto-line)
("M-g w" . avy-goto-word-1)
("M-g e" . avy-goto-word-0)))
(use-package goto-last-change
:bind
(("M-g /" . goto-last-change)))
(use-package rainbow-mode
:hook
(css-mode . rainbow-mode)
(scss-mode . rainbow-mode)
(sass-mode . rainbow-mode))
(use-package zygospore
:bind
(:map ctl-x-map
("1" . zygospore-toggle-delete-other-windows)))
(use-package dashboard
:after
projectile
:config
(add-to-list 'dashboard-items '(projects . 5) t)
(dashboard-setup-startup-hook)
:custom
(dashboard-set-heading-icons t)
(dashboard-set-file-icons t)
(dashboard-center-content t)
(dashboard-set-navigator t)
(dashboard-items '((agenda . 5)
(projects . 5)
(recents . 5)
(bookmarks . 5))))
(use-package sr-speedbar
:after speedbar)
(use-package hungry-delete
:config
(global-hungry-delete-mode))
(use-package anzu
:delight
:config
(global-anzu-mode 1))
;; Should the fonts be missing, run `all-the-icons-install-fonts'. Its not run
;; automatically, as it requires connecting to a website and download a pretty
;; large font file.
(use-package all-the-icons)
(use-package all-the-icons-dired
:hook
(dired-mode . all-the-icons-dired-mode))
(use-package flyspell
:hook
(prog-mode . flyspell-prog-mode)
(text-mode . flyspell-mode))
(use-package ace-flyspell
:bind
(:map flyspell-mode-map
("C-M-i" . ace-flyspell-correct-word)))
;; Text objects are textual patterns like a line, a top level definition, a
;; word, a sentence or any other unit of text. When objed-mode is enabled,
;; certain editing commands (configurable) will activate objed and enable its
;; modal editing features.
;;
;; TODO: is :demand really needed here?
(use-package objed
:demand t
:bind
(:map global-map
("M-SPC" . objed-activate)))
(use-package alert
:config
(setq alert-default-style 'libnotify))
(alert-add-rule
:status '(buried)
:mode 'eshell-mode
:style 'notifications)
(when (gpolonkai/termux-p)
(use-package alert-termux
:after alert
:config
(setq alert-default-style 'termux)))
(use-package undo-tree
:config
(global-undo-tree-mode)
:custom
(undo-tree-auto-save-history nil))
(use-package ciel
:bind
(:map global-map
("C-c i" . ciel-ci)
("C-c o" . ciel-co)))
(use-package hide-mode-line
:bind (:map gpolonkai/pers-map
("h" . hide-mode-line-mode)))
(use-package string-inflection
:bind (:map gpolonkai/pers-map
("i" . string-inflection-all-cycle)))
(use-package spdx
:bind (:map gpolonkai/pers-map
("L" . spdx-insert-spdx-copyright))
:custom
(spdx-copyright-holder 'user)
(spdx-copyright-sign 'unicode))
(use-package ag
:commands (ag))
(use-package rg
:commands (rg))
;; I started moving my configuration to this Org file. Its easier to document this way.
(org-babel-load-file (expand-file-name "configuration.org" user-emacs-directory))