doomemacs/modules/tools/chezmoi/config.el

46 lines
1.8 KiB
EmacsLisp

;;; tools/chezmoi/config.el -*- lexical-binding: t; -*-
(use-package! chezmoi
:commands (chezmoi-write
chezmoi-magit-status
chezmoi-diff
chezmoi-ediff
chezmoi-find
chezmoi-write-files
chezmoi-open-other
chezmoi-template-buffer-display
chezmoi-mode)
:config
;; Company integration
(when (featurep! :completion company)
(defun +chezmoi--company-backend-h ()
(require 'chezmoi-company)
(if chezmoi-mode
(add-to-list 'company-backends 'chezmoi-company-backend)
(delete 'chezmoi-company-backend 'company-backends)))
(add-hook 'chezmoi-mode-hook #'+chezmoi--company-backend-h))
;; Integrate with evil mode by toggling template display when entering insert mode.
(when (featurep! :editor evil)
(defun +chezmoi--evil-insert-state-enter-h ()
"Run after evil-insert-state-entry."
(chezmoi-template-buffer-display nil (point))
(remove-hook 'after-change-functions #'chezmoi-template--after-change 1))
(defun +chezmoi--evil-insert-state-exit-h ()
"Run after evil-insert-state-exit."
(chezmoi-template-buffer-display nil)
(chezmoi-template-buffer-display t)
(add-hook 'after-change-functions #'chezmoi-template--after-change nil 1))
(defun +chezmoi--evil-h ()
(if chezmoi-mode
(progn
(add-hook 'evil-insert-state-entry-hook #'+chezmoi--evil-insert-state-enter-h nil 1)
(add-hook 'evil-insert-state-exit-hook #'+chezmoi--evil-insert-state-exit-h nil 1))
(progn
(remove-hook 'evil-insert-state-entry-hook #'+chezmoi--evil-insert-state-enter-h 1)
(remove-hook 'evil-insert-state-exit-hook #'+chezmoi--evil-insert-state-exit-h 1))))
(add-hook 'chezmoi-mode-hook #'+chezmoi--evil-h)))