From a5d503f1a646c7c0d06690bb1226d89543ee3a39 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Fri, 30 May 2025 11:29:23 +0200 Subject: [PATCH] Move builtin package initialisation from configuration.org to init.el --- configuration.org | 397 ---------------------------------------------- init.el | 254 +++++++++++++++++++++++++++++ 2 files changed, 254 insertions(+), 397 deletions(-) diff --git a/configuration.org b/configuration.org index 0382fd8..4fae3a0 100644 --- a/configuration.org +++ b/configuration.org @@ -1,400 +1,3 @@ -* Global built-in packages - -** ~simple~, to always show the current column, and using visual lines in text modes - -Column numbers help a lot in debugging, while visual line mode is easier on the eye when writing long text. - -#+begin_src emacs-lisp -(use-package simple - :ensure nil - :custom - (column-number-mode t) - :hook - (text-mode . (lambda () (visual-line-mode t)))) -#+end_src - -** ~prog-mode~ - -Plus prettify all the symbols! - -#+begin_src emacs-lisp -(use-package prog-mode - :ensure nil - :init - (setq prettify-symbols-alist - '(("lambda" . ?λ) - ("function" . ?ƒ) - ("map" . ?↦) - ("not" . ?¬) - ("and" . ?∧) - ("or" . ?∨))) - :config - (global-prettify-symbols-mode t)) -#+end_src - -** ~thingatpt~ - -#+begin_src emacs-lisp -(use-package thingatpt - :ensure nil) -#+end_src - -** ~nxml~ - -#+begin_src emacs-lisp -(use-package nxml-mode - :ensure nil - :custom - (nxml-attribute-indent 4) - (nxml-child-indent 4) - (nxml-outline-child-indent 4)) -#+end_src - -** ~recentf~ - -#+begin_src emacs-lisp -(use-package recentf - :ensure nil - :config - (run-at-time nil (* 5 60) 'recentf-save-list) - (add-to-list 'recentf-exclude (expand-file-name "elpa" user-emacs-directory))) -#+end_src - -** ~files~ - -#+begin_src emacs-lisp -(use-package files - :ensure nil - :custom - (make-backup-file-name-function 'xah/backup-file-name)) -#+end_src - -** ~whitespace~ - -~whitespace-mode~ is turned on by default, and can be toggled with ~F10~. - -#+begin_src emacs-lisp -(defun prevent-whitespace-mode-for-some () - "Prevent whitespace-mode from running in some modes." - (and - (not (derived-mode-p 'magit-mode)) - (not (derived-mode-p 'org-mode)))) - -(use-package whitespace - :demand - :config - (add-function :before-while whitespace-enable-predicate 'prevent-whitespace-mode-for-some) - (global-whitespace-mode 1) - :custom - (whitespace-line-column 120) - :bind - (([f10] . whitespace-mode) - ([(shift f10)] . global-whitespace-mode) - :map gpolonkai/pers-map - ("w" . whitespace-cleanup)) - :custom-face - (whitespace-line ((t (:inherit nil :background "orange4"))))) -#+end_src - -** ~eshell~ - -This is a function to delete a character, or close ~eshell~ if there’s nothing to delete. Taken -from [[https://ryuslash.org/posts/C-d-to-close-eshell.html][here]]. - -#+begin_src emacs-lisp -(defun eshell-C-d () - "Either call `delete-char' interactively or quit." - (interactive) - - (condition-case err - (call-interactively #'delete-char) - (error (if (and (eq (car err) 'end-of-buffer) - (looking-back eshell-prompt-regexp nil)) - (kill-buffer) - (signal (car err) (cdr err)))))) -#+end_src - -Function to bind it locally to =C-d=. - -#+begin_src emacs-lisp -(defun gpolonkai/eshell-set-c-d-locally () - (local-set-key (kbd "C-d") #'eshell-C-d)) -#+end_src - -This sends an alert when an eshell command is finished. Taken from -[[https://blog.hoetzel.info/post/eshell-notifications/][here]]. - -#+begin_src emacs-lisp -(defun eshell-command-alert (process status) - "Send `alert' with severity based on STATUS when PROCESS finished." - (let* ((cmd (process-command process)) - (buffer (process-buffer process)) - (msg (format "%s: %s" (mapconcat 'identity cmd " ") status))) - (if (string-prefix-p "finished" status) - (alert msg :buffer buffer :severity 'normal) - (alert msg :buffer buffer :severity 'urgent)))) -#+end_src - -Now set up eshell. - -#+begin_src emacs-lisp -(use-package eshell - :bind - (:map gpolonkai/pers-map - ("e" . eshell)) - :hook - (eshell-mode . gpolonkai/eshell-set-c-d-locally) - (eshell-kill . eshell-command-alert)) -#+end_src - -** ~calendar~ & Co. - -#+begin_src emacs-lisp -(use-package calendar - :ensure nil - :custom - (calendar-week-start-day 1)) - -(use-package cal-dst - :ensure nil - :custom - (calendar-time-zone 60) - (calendar-standard-time-zone-name "CET") - (calendar-daylight-time-zone-name "CEST")) - -(use-package solar - :ensure nil - :custom - (calendar-latitude 47.4) - (calendar-longitude 19.0) - (calendar-location-name "Budapest, Hungary")) -#+end_src - -*** Add Hungarian holidays to the calendar - -I know this is the builtin packages section. Sorry for cheating. - -#+begin_src emacs-lisp -(use-package hungarian-holidays - :config - (hungarian-holidays-add)) -#+end_src - -*** Add some other important dates to the calendar - -#+begin_src emacs-lisp -(add-to-list 'holiday-other-holidays '(holiday-float 7 5 -1 "SysAdmin Day") t) -(add-to-list 'holiday-other-holidays '(holiday-fixed 10 21 "Reptile Awareness Day") t) -#+end_src - -** ~saveplace~ - -#+begin_src emacs-lisp -(use-package saveplace - :ensure nil - :config - (save-place-mode 1) - :custom - (save-place-file (expand-file-name ".places" user-emacs-directory))) -#+end_src - -** ~ediff~ - -#+begin_src emacs-lisp -(use-package ediff - :ensure nil - :custom - (ediff-merge-split-window-function 'split-window-horizontally) - (ediff-split-window-function 'split-window-vertically) - (ediff-window-setup-function 'ediff-setup-windows-plain)) -#+end_src - -** ~autorevert~ - -…unless they are modified, of course. - -#+begin_src emacs-lisp -(use-package autorevert - :ensure nil - :config - (global-auto-revert-mode 1)) -#+end_src - -** ~eww~ - -For in-Emacs browsing needs. - -#+begin_src emacs-lisp -(use-package eww - :custom - (eww-search-prefix "https://duckduckgo.com/html/?q=")) -#+end_src - -** ~electric~, for automatic indentation - -#+begin_src emacs-lisp -(use-package electric - :config - ;; This seems to be the default, but let’s make sure… - (electric-indent-mode 1)) -#+end_src - -** ~savehist~ - -#+begin_src emacs-lisp -(use-package savehist - :config - (savehist-mode 1)) -#+end_src - -** ~webjump~ - -#+begin_src emacs-lisp -(use-package webjump - :bind - (:map gpolonkai/pers-map - ("j" . webjump))) -#+end_src - -** ~which-func~ - -#+begin_src emacs-lisp -(defun gpolonkai/activate-which-func-mode () - (if (fboundp 'which-function-mode) - (which-function-mode) - (which-func-mode))) -#+end_src - -Enable ~which-func-mode~ in every ~prog-mode~ derived mode. - -#+begin_src emacs-lisp -(use-package which-func - :config - (setq which-func-unknown "∅") - :hook - (prog-mode . gpolonkai/activate-which-func-mode)) -#+end_src - -** ~cookie1~, AKA fortune cookies - -“Fortunes” are from the Hungarian version an ancient MS-DOS based program called ~TAGLINE~. - -#+begin_src emacs-lisp -(use-package cookie1 - :demand t - :custom - (cookie-file (expand-file-name "fortune-cookies.txt" user-emacs-directory)) - :bind - (:map gpolonkai/pers-map - ("k" . cookie))) -#+end_src - -** ~dired~ - -#+begin_src emacs-lisp -(use-package dired - :ensure nil - :custom - (dired-dwim-target t) - (wdired-create-parent-directories t) - (wdired-allow-to-change-permissions t) - :bind - (:map dired-mode-map - ("RET" . dired-find-alternate-file) - ("^" . (lambda () (interactive) (find-alternate-file ".."))) - ("W" . wdired-change-to-wdired-mode))) -#+end_src - -** ~goto-addr~, actionable URLs - -#+begin_src emacs-lisp -(use-package goto-addr - :hook ((compilation-mode . goto-address-mode) - (prog-mode . goto-address-prog-mode) - (eshell-mode . goto-address-mode) - (shell-mode . goto-address-mode)) - :bind - (:map goto-address-highlight-keymap - ("" . goto-address-at-point) - ("M-" . newline)) - :commands (goto-address-prog-mode goto-address-mode)) -#+end_src - -** Do things at ~midnight~ - -Since my machine (and thus, my Emacs) is turned on pretty much 24/7, it’s a pretty good idea. - -By default, it closes a bunch of unused buffers. I might add some more things there later. - -#+begin_src emacs-lisp -(use-package midnight - :ensure nil - :config - (setq clean-buffer-list-kill-never-buffer-names '("*scratch*" - "*Messages*" - "*dashboard*")) - (midnight-mode t)) -#+end_src - -** ~display-line-numbers~ - -I usually don’t want to see them, but there are occasions when they’re useful. - -#+begin_src emacs-lisp -(use-package display-line-numbers - :bind - (:map gpolonkai/pers-map - ("C-n" . display-line-numbers-mode))) -#+end_src - -** ~ispell~ - -#+begin_src emacs-lisp -(use-package ispell - :custom - (ispell-dictionary "en_GB") - (ispell-program-name "/usr/bin/hunspell") - :hook - (mail-send . ispell-message) - (message-send . ispell-message)) -#+end_src - -** ~speedbar~ - -This is basically just a dependency for [[*projectile-speedbar][projectile-speedbar]]. - -#+begin_src emacs-lisp -(use-package speedbar) -#+end_src - -** ~browse-url~ - -This is a Termux-specific override. - -#+begin_src emacs-lisp -(when (gpolonkai/termux-p) - (use-package browse-url - :ensure nil - :config - (advice-add 'browse-url-default-browser :override - (lambda (url &rest args) - (start-process-shell-command - "open-url" - nil - (concat "am start -a android.intent.action.VIEW --user 0 -d " - url)))))) -#+end_src - -** ~dabbrev~ - -I simply remap ~dabbrev-expand~ to a different key and replace the default binding with ~dabbrev-completion~. - -#+begin_src emacs-lisp -(use-package dabbrev - :bind (("M-/" . dabbrev-completion) - ("C-M-/" . dabbrev-expand))) -#+end_src - * Project management ** ~projectile~ diff --git a/init.el b/init.el index 19e297a..812b7aa 100644 --- a/init.el +++ b/init.el @@ -276,6 +276,260 @@ order." (put 'Info-edit 'disabled nil) (put 'list-timers 'disabled nil) +;; simple to always show the current column, and using visual lines in text +;; modes + +(use-package simple + :ensure nil + :custom + (column-number-mode t) + :hook + (text-mode . (lambda () (visual-line-mode t)))) + +(use-package prog-mode + :ensure nil + :init + (setq prettify-symbols-alist + '(("lambda" . ?λ) + ("function" . ?ƒ) + ("map" . ?↦) + ("not" . ?¬) + ("and" . ?∧) + ("or" . ?∨))) + :config + (global-prettify-symbols-mode t)) + +(use-package thingatpt + :ensure nil) + +(use-package nxml-mode + :ensure nil + :custom + (nxml-attribute-indent 4) + (nxml-child-indent 4) + (nxml-outline-child-indent 4)) + +(use-package recentf + :ensure nil + :config + (run-at-time nil (* 5 60) 'recentf-save-list) + (add-to-list 'recentf-exclude (expand-file-name "elpa" user-emacs-directory))) + +(use-package files + :ensure nil + :custom + (make-backup-file-name-function 'xah/backup-file-name)) + +(defun prevent-whitespace-mode-for-some () + "Prevent `whitespace-mode' from running in some modes." + (and + (not (derived-mode-p 'magit-mode)) + (not (derived-mode-p 'org-mode)))) + +(use-package whitespace + :demand + :config + (add-function :before-while whitespace-enable-predicate 'prevent-whitespace-mode-for-some) + (global-whitespace-mode 1) + :custom + (whitespace-line-column 120) + :bind + (([f10] . whitespace-mode) + ([(shift f10)] . global-whitespace-mode) + :map gpolonkai/pers-map + ("w" . whitespace-cleanup)) + :custom-face + (whitespace-line ((t (:inherit nil :background "orange4"))))) + +;; Taken from https://ryuslash.org/posts/C-d-to-close-eshell.html + +(defun eshell-C-d () + "Either call `delete-char' interactively or quit." + (interactive) + + (condition-case err + (call-interactively #'delete-char) + (error (if (and (eq (car err) 'end-of-buffer) + (looking-back eshell-prompt-regexp nil)) + (kill-buffer) + (signal (car err) (cdr err)))))) + +(defun gpolonkai/eshell-set-c-d-locally () + "Bind my `eshell-C-d' function locally." + (local-set-key (kbd "C-d") #'eshell-C-d)) + +;; Taken from https://blog.hoetzel.info/post/eshell-notifications/ + +(defun eshell-command-alert (process status) + "Send `alert' with severity based on STATUS when PROCESS finished." + (let* ((cmd (process-command process)) + (buffer (process-buffer process)) + (msg (format "%s: %s" (mapconcat 'identity cmd " ") status))) + (if (string-prefix-p "finished" status) + (alert msg :buffer buffer :severity 'normal) + (alert msg :buffer buffer :severity 'urgent)))) + +(use-package eshell + :bind + (:map gpolonkai/pers-map + ("e" . eshell)) + :hook + (eshell-mode . gpolonkai/eshell-set-c-d-locally) + (eshell-kill . eshell-command-alert)) + +(use-package calendar + :ensure nil + :custom + (calendar-week-start-day 1)) + +(use-package cal-dst + :ensure nil + :custom + (calendar-time-zone 60) + (calendar-standard-time-zone-name "CET") + (calendar-daylight-time-zone-name "CEST")) + +(use-package solar + :ensure nil + :custom + (calendar-latitude 47.4) + (calendar-longitude 19.0) + (calendar-location-name "Budapest, Hungary")) + +;; TODO: This :config call can be omitted if i add it to the calendar-load-hook +(use-package hungarian-holidays + :config + (hungarian-holidays-add)) + +(add-to-list 'holiday-other-holidays '(holiday-float 7 5 -1 "SysAdmin Day") t) +(add-to-list 'holiday-other-holidays '(holiday-fixed 10 21 "Reptile Awareness Day") t) + +(use-package saveplace + :ensure nil + :config + (save-place-mode 1) + :custom + (save-place-file (expand-file-name ".places" user-emacs-directory))) + +(use-package ediff + :ensure nil + :custom + (ediff-merge-split-window-function 'split-window-horizontally) + (ediff-split-window-function 'split-window-vertically) + (ediff-window-setup-function 'ediff-setup-windows-plain)) + +(use-package autorevert + :ensure nil + :config + (global-auto-revert-mode 1)) + +(use-package eww + :custom + (eww-search-prefix "https://duckduckgo.com/html/?q=")) + +;; TODO: This :config call can be omitted if i add it to prog-mode-hook +(use-package electric + :config + ;; This seems to be the default, but let’s make sure… + (electric-indent-mode 1)) + +(use-package savehist + :config + (savehist-mode 1)) + +(use-package webjump + :bind + (:map gpolonkai/pers-map + ("j" . webjump))) + +(defun gpolonkai/activate-which-func-mode () + "Activate `which-func-mode' if it exists." + (if (fboundp 'which-function-mode) + (which-function-mode) + (which-func-mode))) + +;; This :config call can be omitted if i add it to which-function-mode-hook +(use-package which-func + :config + (setq which-func-unknown "∅") + :hook + (prog-mode . gpolonkai/activate-which-func-mode)) + +;; “Fortunes” are from the Hungarian version an ancient MS-DOS based program called TAGLINE + +(use-package cookie1 + :demand t + :custom + (cookie-file (expand-file-name "fortune-cookies.txt" user-emacs-directory)) + :bind + (:map gpolonkai/pers-map + ("k" . cookie))) + +(use-package dired + :ensure nil + :custom + (dired-dwim-target t) + (wdired-create-parent-directories t) + (wdired-allow-to-change-permissions t) + :bind + (:map dired-mode-map + ("RET" . dired-find-alternate-file) + ("^" . (lambda () (interactive) (find-alternate-file ".."))) + ("W" . wdired-change-to-wdired-mode))) + +(use-package goto-addr + :hook ((compilation-mode . goto-address-mode) + (prog-mode . goto-address-prog-mode) + (eshell-mode . goto-address-mode) + (shell-mode . goto-address-mode)) + :bind + (:map goto-address-highlight-keymap + ("" . goto-address-at-point) + ("M-" . newline)) + :commands (goto-address-prog-mode goto-address-mode)) + +;; Close unused buffers at midnight. +(use-package midnight + :ensure nil + :custom + (clean-buffer-list-kill-never-buffer-names '("*scratch*" + "*Messages*" + "*dashboard*")) + :config + (midnight-mode t)) + +(use-package display-line-numbers + :bind + (:map gpolonkai/pers-map + ("C-n" . display-line-numbers-mode))) + +(use-package ispell + :custom + (ispell-dictionary "en_GB") + (ispell-program-name "/usr/bin/hunspell") + :hook + (mail-send . ispell-message) + (message-send . ispell-message)) + +(use-package speedbar) + +;; A Termux-specific override for `browse-url' +(when (gpolonkai/termux-p) + (use-package browse-url + :ensure nil + :config + (advice-add 'browse-url-default-browser :override + (lambda (url &rest args) + (start-process-shell-command + "open-url" + nil + (concat "am start -a android.intent.action.VIEW --user 0 -d " + url)))))) + +(use-package dabbrev + :bind (("M-/" . dabbrev-completion) + ("C-M-/" . dabbrev-expand))) + ;; I started moving my configuration to this Org file. It’s easier to document this way. (org-babel-load-file (expand-file-name "configuration.org" user-emacs-directory))