Files
dotfiles/profiles/desktop/.emacs.d/modules/common.el
2026-02-13 04:20:30 +01:00

50 lines
1.7 KiB
EmacsLisp

;;; common.el --- common stuff -*- lexical-binding: t -*-
;;; Commentary:
;; add directory containing own stuff and helper utilities to load path
(add-to-list 'load-path "~/.emacs.d/lisp")
;; keep ~/.emacs.d clean
(setq no-littering-etc-directory "~/.emacs.d/")
(let ((var "~/.cache/emacs/")
(etc "~/.emacs.d/"))
(make-directory var t)
(setq no-littering-var-directory var)
(setq lock-file-name-transforms `((".*" ,(concat var "lock-files/") t)))
(setq custom-file (concat etc "lisp/custom-settings.el")))
(require 'no-littering)
(no-littering-theme-backups)
;; load settings set by customize
(require 'custom-settings)
;; enable integration with pass
(auth-source-pass-enable)
;; copied from https://systemcrafters.net/emacs-tips/using-encrypted-passwords/
(defun pt/lookup-password (&rest keys)
(let ((result (apply #'auth-source-search keys)))
(if result
(funcall (plist-get (car result) :secret))
nil)))
;; useful stuff
(defmacro fmt (str)
"Elisp string interpolation.
Example:
(fmt \"My name is #{user-full-name}, I am running Emacs #{(if (display-graphic-p) \\\"with a GUI\\\" \\\"in a terminal\\\".)}\""
(let ((exprs nil))
(with-temp-buffer
(insert str)
(goto-char 1)
(while (re-search-forward "#{" nil t 1)
(let ((here (point))
(emptyp (eql (char-after) ?})))
(unless emptyp (push (read (buffer-substring (point) (progn (forward-sexp 1) (point)))) exprs))
(delete-region (- here 2) (progn (search-forward "}") (point)))
(unless emptyp (insert "%s"))
(ignore-errors (forward-char 1))))
(append (list 'format (buffer-string)) (reverse exprs)))))
(provide 'common)
;;; common.el ends here