50 lines
1.7 KiB
EmacsLisp
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
|