Since magithub is "disabled" by default, if enabled it might be confusing that its features aren't all enabled (which is magithub's default behavior).
109 lines
3.9 KiB
EmacsLisp
109 lines
3.9 KiB
EmacsLisp
;;; tools/magit/config.el -*- lexical-binding: t; -*-
|
|
|
|
(defvar +magit-hub-enable-by-default nil
|
|
"Whether or not to enable magithub features for all projects by default. Must
|
|
be set before `magithub' (and `magit') is loaded.")
|
|
|
|
(defvar +magit-hub-features t
|
|
"What features to initialize when `magithub' is loaded. Set this to `t' to
|
|
load everything, and nil to load nothing. See `magithub-feature-list' to see
|
|
what features are available.")
|
|
|
|
|
|
;;
|
|
;; Packages
|
|
|
|
(def-package! magit
|
|
:commands magit-file-delete
|
|
:defer-incrementally (dash f s with-editor git-commit package magit)
|
|
:init
|
|
(setq magit-auto-revert-mode nil) ; we already use `global-auto-revert-mode'
|
|
:config
|
|
(setq magit-completing-read-function
|
|
(if (featurep! :completion ivy)
|
|
#'ivy-completing-read
|
|
#'magit-builtin-completing-read)
|
|
magit-revision-show-gravatars '("^Author: " . "^Commit: ")
|
|
magit-diff-refine-hunk t ; show word-granularity on selected hunk
|
|
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)
|
|
|
|
;; Don't replace the leader key
|
|
;; FIXME remove me when general.el is integrated
|
|
(when doom-leader-key
|
|
(define-key magit-diff-mode-map (kbd doom-leader-key) nil)))
|
|
|
|
(def-package! magit-todos
|
|
:hook (magit-mode . magit-todos-mode)
|
|
:config
|
|
(setq magit-todos-require-colon nil)
|
|
(define-key magit-todos-section-map "j" nil)
|
|
(advice-add #'magit-todos-mode :around #'doom*shut-up))
|
|
|
|
|
|
(def-package! magithub
|
|
:after magit
|
|
:preface
|
|
;; Magithub is not well-behaved, so this needs to be set early
|
|
(setq magithub-dir (concat doom-etc-dir "magithub/"))
|
|
:init
|
|
(setq magithub-clone-default-directory "~/"
|
|
magithub-preferred-remote-method 'clone_url)
|
|
:config
|
|
(unless +magit-hub-enable-by-default
|
|
;; Disable magit by default. Can be enabled through magithub settings popup,
|
|
;; or setting `+magit-hub-enable-by-default'.
|
|
(advice-add #'magithub-enabled-p :override #'+magit*hub-enabled-p)
|
|
;; I don't use `magithub-settings--simple' to redefine this because it
|
|
;; changes the order of settings. Obnoxious, but the alternative is even
|
|
;; more so.
|
|
(advice-add #'magithub-settings--format-magithub.enabled
|
|
:override #'+magit*hub-settings--format-magithub.enabled))
|
|
(when +magit-hub-features
|
|
(magithub-feature-autoinject +magit-hub-features)))
|
|
|
|
|
|
(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
|
|
(define-key! magit-mode-map ; replaced by z1, z2, z3, etc
|
|
(kbd "M-1") nil
|
|
(kbd "M-2") nil
|
|
(kbd "M-3") nil
|
|
(kbd "M-4") nil)
|
|
(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")))
|
|
(setcar (assoc (car key) evil-magit-rebase-commands-w-descriptions)
|
|
(cdr key)))
|
|
(evil-define-key* evil-magit-state git-rebase-mode-map
|
|
"gj" #'git-rebase-move-line-down
|
|
"gk" #'git-rebase-move-line-up))
|
|
(define-key! (magit-mode-map magit-blame-read-only-mode-map)
|
|
(kbd doom-leader-key) nil))
|