+++ title = "init.el.org" author = ["Anne"] date = 2025-10-31T00:00:00+01:00 lastmod = 2025-11-01T00:03:32+01:00 tags = ["emacs"] draft = false +++ ## My Emacs configuration {#my-emacs-configuration} More about [the Emacs initialization file](https://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html) `~/.emacs.d/init.el` is generated from this org file with [Org-babel](https://orgmode.org/worg/org-contrib/babel/) How to tangle: `M-x org-babel-tangle` or `C-c C-v t` My Emacs repository: [git.minded.net/anne/emacs](https://git.minded.net/anne/emacs) The source version of this file: [git.minded.net/anne/emacs/src/branch/main/init.el.org](https://git.minded.net/anne/emacs/src/branch/main/init.el.org?display=source) Or view this file on my blog: [blog.minded.net/pages/emacs/init.el.org](https://blog.minded.net/pages/emacs/init.el.org) ### About me {#about-me} ```elisp (setq user-full-name "Anne" user-mail-address "anne@minded.net") ``` ### Use-package {#use-package} ```elisp (require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) (package-initialize) (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) (setq use-package-always-ensure 't) ``` ### Reload configuration {#reload-configuration} `M-x reload-emacs-init` ```elisp (defun reload-emacs-init () (interactive) (load-file "~/.emacs.d/init.el") (message "Configuarion reloaded!")) ``` ### Customizations file {#customizations-file} You can choose to save customizations somewhere other than your initialization file. ```elisp (setq custom-file "~/.emacs.d/custom.el") (load custom-file 'noerror 'nomessage) ``` ### TRAMP {#tramp} ```elisp (setq tramp-allow-unsafe-temporary-files t) ``` ### zone-mode {#zone-mode} ```elisp (add-to-list 'auto-mode-alist '("/etc/bind/zones/" . zone-mode)) ``` ### Lock files {#lock-files} If create-lockfiles is nil, Emacs does not lock files. ```elisp (setq create-lockfiles nil) ``` ### Yes-or-no prompts {#yes-or-no-prompts} ```elispx1 (defalias 'yes-or-no-p 'y-or-n-p) ``` ### Keeping buffers up-to-date {#keeping-buffers-up-to-date} ```elisp (global-auto-revert-mode 1) (setq global-auto-revert-non-file-buffers t) ``` ### Disable startup screen {#disable-startup-screen} ```elisp (setq inhibit-startup-screen nil) ``` ### What to display {#what-to-display} I do like the menu bar after all. ```elisp (tool-bar-mode -1) ;;(menu-bar-mode -1) (tooltip-mode -1) ``` ### Mode line column and line numbers {#mode-line-column-and-line-numbers} ```elisp (column-number-mode t) ``` ### Theme {#theme} ```elisp (use-package ef-themes :ensure t :demand t :config (ef-themes-select 'ef-dream)) ``` ```elisp (custom-set-faces '(helm-buffer-directory ((t (:extend t :background "dim gray" :foreground "DarkRed")))) '(helm-ff-directory ((t (:extend t :background "dim gray" :foreground "DarkRed")))) '(org-agenda-date-today ((t (:inherit org-agenda-date :underline nil)))) '(menu ((t (:background "magenta"))))) ``` ### Mood-line {#mood-line} A lightweight, drop-in replacement for the default Emacs mode line configuration. ```elisp (use-package mood-line :config (mood-line-mode) ;;(setq mood-line-format mood-line-format-default) (setq mood-line-format mood-line-format-default-extended) (setq mood-line-glyph-alist mood-line-glyphs-unicode)) ``` ### Suppress dialog boxes {#suppress-dialog-boxes} ```elisp (setq use-dialog-box nil) ``` ### Sentences {#sentences} ```elisp (setq sentence-end-double-space nil) ``` ### Minibuffer {#minibuffer} ```elisp (setq resize-mini-windows t) (setq max-mini-window-height 0.5) ``` ### Word wrap {#word-wrap} ```elisp (add-hook 'text-mode-hook 'visual-line-mode) ``` ### Mouse support {#mouse-support} ```elisp (xterm-mouse-mode 1) (mouse-wheel-mode 1) (context-menu-mode 1) ``` ### Kill-line {#kill-line} If non-nil, `kill-line` with no arg at start of line kills the whole line. ```elisp (setq kill-whole-line t) ``` ### Indentation {#indentation} ```elisp (setq-default indent-tabs-mode nil) ``` ### Electric pair mode {#electric-pair-mode} ```elisp (electric-pair-mode 1) ``` ### Overwrite highlighted region {#overwrite-highlighted-region} ```elisp (delete-selection-mode t) ``` ### Scrolling {#scrolling} ```elisp (setq scroll-error-top-bottom t) ``` ### Cursor {#cursor} ```elisp (global-hl-line-mode t) ``` ### Window handling {#window-handling} Winner mode is a global minor mode that records the changes in the window configuration (i.e., how the frames are partitioned into windows), so that you can undo them. ```elisp (winner-mode 1) ``` The Windmove package defines commands for moving directionally between neighboring windows in a frame. ```elisp (use-package windmove :bind ((" " . windmove-right) (" " . windmove-left) (" " . windmove-up) (" " . windmove-down))) ``` ### Crux {#crux} A Collection of Ridiculously Useful eXtensions for Emacs. crux bundles many useful interactive commands to enhance your overall Emacs experience. ```elisp (use-package crux :bind ("C-a" . crux-move-beginning-of-line) ("C-c o" . crux-open-with) ("C-k" . crux-kill-whole-line) ("C-c f" . crux-cleanup-buffer-or-region) ("C-x C-a" . crux-sudo-edit) :config (crux-with-region-or-buffer indent-region) (crux-with-region-or-buffer untabify) (crux-with-region-or-line comment-or-uncomment-region)) ``` ### Dired {#dired} ```elisp (put 'dired-find-alternate-file 'disabled nil) (setq dired-listing-switches "-agho --group-directories-first") ``` ### Kill buffer {#kill-buffer} ```elisp (global-set-key (kbd "C-x k") 'kill-current-buffer) ``` ### Unset C-z {#unset-c-z} Unset C-z which is bound to \`suspend-frame' by default. ```elisp (global-unset-key (kbd "C-z")) ``` ### Backups {#backups} Automatically backup buffers/files into the ~.emacs.d/backup/ directory. ```elisp (setq backup-directory-alist '(("." . "~/.emacs.d/backups"))) (setq backup-by-copying t ; Don't delink hardlinks version-control t ; Use version numbers on backups delete-old-versions t ; Automatically delete excess backups kept-new-versions 20 ; how many of the newest versions to keep kept-old-versions 5) ; and how many of the old ``` ### backup-walker {#backup-walker} ```elisp (use-package backup-walker :bind ("C-c b" . backup-walker-start)) ``` ### Auto save {#auto-save} ```elisp (setq auto-save-timeout 20 ; number of seconds idle time before auto-save (default: 30) auto-save-interval 200) ; number of keystrokes between auto-saves (default: 300) ``` ### Lastmod time stamp {#lastmod-time-stamp} ```elisp (setq time-stamp-start "\\(^:last_modified: \\\\?[\[<]+\\|^:LASTMOD: \\\\?[\[<]+\\|^#\\+lastmod: \\\\?[\[<]+\\|^;; lastmod: \\\\?[\[<]+\\)") (setq time-stamp-end "\\\\?[\]>]") (setq time-stamp-format "%Y-%02m-%02d %3a %02H:%02M") (setq time-stamp-limit 12) (add-hook 'before-save-hook 'time-stamp) (setq time-stamp-active t) ``` ### Magit {#magit} ```elisp (use-package magit :ensure t) ``` ### Which-key {#which-key} which-key is a minor mode for Emacs that displays the key bindings following your currently entered incomplete command (a prefix) in a popup. ```elisp (use-package which-key :config (which-key-mode) (setq which-key-idle-delay 0.5 which-key-idle-secondary-delay 0.5) (which-key-setup-side-window-bottom)) ``` ### Helm {#helm} Imagine a life without Helm... ```elisp (use-package helm :ensure t :config ;;(require 'helm-config) :init (helm-mode 1) (setq helm-split-window-inside-p t) :diminish helm-mode :bind (("M-x" . helm-M-x) ; Evaluate functions ("C-x C-f" . helm-find-files) ; Open or create files ("C-x b" . helm-mini) ; Select buffers ("C-x C-b" . helm-buffers-list) ("C-x C-r" . helm-recentf) ; Select recently saved files ("C-c i" . helm-imenu) ; Select document heading ("M-y" . helm-show-kill-ring) ; Show the kill ring ("C-x c g" . helm-do-grep-ag) :map helm-map ("C-z" . helm-select-action) ("" . helm-execute-persistent-action))) ``` ### Org-appear {#org-appear} Make invisible parts of Org elements appear visible. ```elisp (use-package org-appear :load-path "~/.emacs.d/etc/elisp/org-appear" :hook (org-mode . org-appear-mode) :init (setq org-appear-autolinks t)) ``` Hide emphasis markers by default. ```elisp (setq org-hide-emphasis-markers t) ``` ### Org-roam {#org-roam} ```elisp (use-package org-roam :ensure t ;;:init ;;(setq org-roam-v2-ack t) :custom (org-roam-directory "~/org/notes") (org-roam-completion-everywhere t) (org-roam-capture-templates '(("d" "default" plain "%?" :target (file+head "%<%Y%m%d>-${slug}.org" ":PROPERTIES:\n:CREATED: %U\n:LASTMOD: []\n:END:\n#+title: ${title}\n\n\n") :unnarrowed t))) :config (org-roam-db-autosync-mode) (setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:42}" 'face 'org-tag))) :bind (("C-c n l" . org-roam-buffer-toggle) ("C-c n f" . org-roam-node-find) ("C-c n i" . org-roam-node-insert) ("C-c n c" . org-roam-capture) ("C-c n d" . org-id-get-create) ("C-c n t" . org-roam-tag-add) ("C-c n u" . org-roam-tag-remove) ("C-c n a" . org-roam-alias-add) ("C-c n b" . org-roam-alias-remove))) ```