1
0
Files
emacs/init.el.org
2025-11-01 00:08:31 +01:00

12 KiB

init.el.org

My Emacs configuration

More about the Emacs initialization file

~/.emacs.d/init.el is generated from this org file with Org-babel

How to tangle: M-x org-babel-tangle or C-c C-v t

My Emacs repository: git.minded.net/anne/emacs

The source version of this file: git.minded.net/anne/emacs/src/branch/main/init.el.org

Or view this file on my blog: blog.minded.net/pages/emacs/init.el.org

About me

  (setq user-full-name "Anne"
        user-mail-address "anne@minded.net")

Use-package

https://github.com/jwiegley/use-package

  (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

M-x reload-emacs-init

  (defun reload-emacs-init ()
    (interactive)
    (load-file "~/.emacs.d/init.el")
    (message "Configuarion reloaded!"))

Customizations file

https://www.gnu.org/software/emacs/manual/html_node/emacs/Saving-Customizations.html

You can choose to save customizations somewhere other than your initialization file.

  (setq custom-file "~/.emacs.d/custom.el")
  (load custom-file 'noerror 'nomessage)

zone-mode

  (add-to-list 'auto-mode-alist '("/etc/bind/zones/" . zone-mode))

Lock files

https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Locks.html

If create-lockfiles is nil, Emacs does not lock files.

  (setq create-lockfiles nil)

Yes-or-no prompts

https://www.emacswiki.org/emacs/YesOrNoP

  (defalias 'yes-or-no-p 'y-or-n-p)

Keeping buffers up-to-date

https://www.gnu.org/software/emacs/manual/html_node/emacs/Auto-Revert.html

  (global-auto-revert-mode 1)
  (setq global-auto-revert-non-file-buffers t)

Disable startup screen

What to display

https://www.gnu.org/software/emacs/manual/html_node/emacs/Frames.html

I do like the menu bar after all.

  (tool-bar-mode -1)
  ;;(menu-bar-mode -1)
  (tooltip-mode -1)

Theme

  (use-package ef-themes   
    :ensure t
    :demand t
    :config
    (ef-themes-select 'ef-dream))
  (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

https://gitlab.com/jessieh/mood-line

A lightweight, drop-in replacement for the default Emacs mode line configuration.

  (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

Minibuffer

https://www.gnu.org/software/emacs/manual/html_node/emacs/Minibuffer-Edit.html

  (setq resize-mini-windows t)
  (setq max-mini-window-height 0.5)

Word wrap

Mouse support

https://www.gnu.org/software/emacs/manual/html_node/emacs/Mouse-Input.html

  (xterm-mouse-mode 1)
  (mouse-wheel-mode 1)
  (context-menu-mode 1)

Kill-line

https://www.gnu.org/software/emacs/manual/html_node/emacs/Killing-by-Lines.html

If non-nil, kill-line with no arg at start of line kills the whole line.

  (setq kill-whole-line t)

Electric pair mode

Window handling

https://www.gnu.org/software/emacs/manual/html_node/emacs/Window-Convenience.html

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.

  (winner-mode 1)

The Windmove package defines commands for moving directionally between neighboring windows in a frame.

  (use-package windmove
    :bind
    (("<f2> <right>" . windmove-right)
     ("<f2> <left>" . windmove-left)
     ("<f2> <up>" . windmove-up)
     ("<f2> <down>" . windmove-down)))

Crux

https://github.com/bbatsov/crux

A Collection of Ridiculously Useful eXtensions for Emacs. crux bundles many useful interactive commands to enhance your overall Emacs experience.

  (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

https://www.gnu.org/software/emacs/manual/html_node/emacs/Dired.html

  (put 'dired-find-alternate-file 'disabled nil)
  (setq dired-listing-switches "-agho --group-directories-first")

Kill buffer

  (global-set-key (kbd "C-x k") 'kill-current-buffer)

Unset C-z

Unset C-z which is bound to `suspend-frame' by default.

  (global-unset-key (kbd "C-z"))

Backups

https://www.gnu.org/software/emacs/manual/html_node/emacs/Backup.html

Automatically backup buffers/files into the ~.emacs.d/backup/ directory.

  (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

https://github.com/lewang/backup-walker

  (use-package backup-walker
    :bind
    ("C-c b" . backup-walker-start))

Auto save

https://www.gnu.org/software/emacs/manual/html_node/emacs/Auto-Save-Control.html

  (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

  (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)

Which-key

https://github.com/justbur/emacs-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.

  (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

https://emacs-helm.github.io/helm/

Imagine a life without Helm…

  (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)
           ("<tab>" . helm-execute-persistent-action)))

Org-appear

https://github.com/awth13/org-appear

Make invisible parts of Org elements appear visible.

  (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.

  (setq org-hide-emphasis-markers t)

Org-roam

https://github.com/org-roam/org-roam

https://www.orgroam.com/

  (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)))