doomemacs/modules/tools/magit/config.el
Henrik Lissner 6956525f79
I silenced the byte compiler, what happened next will blow your mind
Top 10 incredible ways to silence the byte compiler

The byte compiler just wouldn't shut up. You wouldn't believe what
happened next.

40 hot singles in your area are waiting for the byte compiler to shut
up.

20 INSANE life hacks to put an end to the byte compiler's tyranny.

(DEFINITELY NOT CLICKBAIT)
2019-02-18 01:05:26 -05:00

83 lines
3.1 KiB
EmacsLisp

;;; tools/magit/config.el -*- lexical-binding: t; -*-
;;
;; Packages
(def-package! magit
:commands magit-file-delete
:defer-incrementally (dash f s with-editor git-commit package eieio lv transient)
:init
(setq magit-auto-revert-mode nil) ; we already use `global-auto-revert-mode'
:config
(setq transient-default-level 5
transient-levels-file (concat doom-etc-dir "transient/levels")
transient-values-file (concat doom-etc-dir "transient/values")
transient-history-file (concat doom-etc-dir "transient/history")
magit-revision-show-gravatars '("^Author: " . "^Commit: ")
magit-diff-refine-hunk t) ; show granular diffs in selected hunk
;; Leave it to `+magit-display-buffer' and `+magit-display-popup-buffer' to
;; manage popup windows.
(setq magit-display-buffer-function #'+magit-display-buffer
magit-popup-display-buffer-action '((+magit-display-popup-buffer)))
(set-popup-rule! "^\\(?:\\*magit\\|magit:\\)" :ignore t)
;; so magit buffers can be switched to (except for process buffers)
(defun +magit-buffer-p (buf)
(with-current-buffer buf
(and (derived-mode-p 'magit-mode)
(not (eq major-mode 'magit-process-mode)))))
(add-to-list 'doom-real-buffer-functions #'+magit-buffer-p nil #'eq)
;; modeline isn't helpful in magit
(add-hook! '(magit-mode-hook magit-popup-mode-hook)
#'hide-mode-line-mode)
;; properly kill leftover magit buffers on quit
(define-key magit-status-mode-map [remap magit-mode-bury-buffer] #'+magit/quit))
(def-package! forge
;; We defer loading even further because forge's dependencies will try to
;; compile emacsql, which is a slow and blocking operation.
:after-call magit-status
:init
(setq forge-database-file (concat doom-etc-dir "forge/forge-database.sqlite"))
:config
;; All forge list modes are derived from `forge-topic-list-mode'
(map! :map forge-topic-list-mode-map :n "q" #'kill-this-buffer)
(set-popup-rule! "^\\*?[0-9]+:\\(?:new-\\|[0-9]+$\\)" :size 0.45 :modeline t :ttl 0 :quit nil)
(set-popup-rule! "^\\*\\(?:[^/]+/[^ ]+ #[0-9]+\\*$\\|Issues\\|Pull-Requests\\|forge\\)" :ignore t))
(def-package! magit-todos
:after magit
:config
(setq magit-todos-require-colon nil)
(define-key magit-todos-section-map "j" nil)
(advice-add #'magit-todos-mode :around #'doom*shut-up)
(magit-todos-mode +1))
(def-package! magit-gitflow
:hook (magit-mode . turn-on-magit-gitflow))
(def-package! evil-magit
:when (featurep! :feature evil +everywhere)
:after magit
:init
(setq evil-magit-state 'normal
evil-magit-use-z-for-folds t)
:config
(unmap! magit-mode-map "M-1" "M-2" "M-3" "M-4") ; replaced by z1, z2, z3, etc
(evil-define-key* '(normal visual) magit-mode-map
"zz" #'evil-scroll-line-to-center
"%" #'magit-gitflow-popup)
(after! git-rebase
(dolist (key '(("M-k" . "gk") ("M-j" . "gj")))
(when-let* ((desc (assoc (car key) evil-magit-rebase-commands-w-descriptions)))
(setcar desc (cdr key))))
(evil-define-key* evil-magit-state git-rebase-mode-map
"gj" #'git-rebase-move-line-down
"gk" #'git-rebase-move-line-up)))