;; -*- lexical-binding: t; -*- ;; Magit! (use-package magit :commands (magit-status magit-file-dispatch magit-dispatch magit-name-local-branch) :init (leader-def-key "g" '(nil :which-key "git")) :config (add-hook 'magit-mode-hook #'hl-line-mode) :general (leader-map "gs" #'magit-status "gg" #'magit-file-dispatch "gd" #'magit-dispatch)) ;; Not strictly git-related, but with-editor is the part of Magit that ;; lets Emacs be the $EDITOR for shell commands (use-package with-editor :hook ((eshell-mode . with-editor-export-editor) (shell-mode . with-editor-export-editor) (vterm-mode . (lambda () (with-editor-export-editor) (vterm-clear)))) :commands (with-editor-async-shell-command with-editor-shell-command)) ;; git-link makes it easy to copy the GitHub URL of the current file/line (use-package git-link :commands (git-link git-link-commit) :init (defun git-link-browse () (interactive) (let ((git-link-open-in-browser t)) (call-interactively 'git-link))) (defun git-link-browse-commit () (interactive) (let ((git-link-open-in-browser t)) (call-interactively 'git-link-commit))) :config (add-to-list 'git-link-remote-alist '("git.jeremydormitzer.com" git-link-bitbucket)) (add-to-list 'git-link-commit-remote-alist '("git.jeremydormitzer.com" git-link-commit-bitbucket)) (add-to-list 'git-link-remote-alist '("ghe.spotify.net" git-link-github)) (add-to-list 'git-link-commit-remote-alist '("ghe.spotify.net" git-link-commit-github)) :general (leader-map "gy" #'git-link "gl" #'git-link-browse "gc" #'git-link-commit "gb" #'git-link-browse-commit)) ;; forge requires sqlite (use-package sqlite3) ;; Interact with GitHub etc. from Magit (use-package forge :after (magit sqlite3) :demand t :config (setq forge-add-default-bindings nil) (add-to-list 'forge-alist '("git.jeremydormitzer.com" "git.jeremydormitzer.com/api/v1" "git.jeremydormitzer.com" forge-gitea-repository)) ;; forge-topic-at-point really should just return nil if the buffer is not readable (advice-add 'forge-topic-at-point :around (lambda (oldfn &rest args) (ignore-errors (apply oldfn args)))) (defun forge-diff-for-pr () (interactive) (let ((target forge--buffer-base-branch) (source forge--buffer-head-branch)) (magit-diff-range (format "%s..%s" source target)))) (add-hook 'forge-create-pullreq-hook #'forge-diff-for-pr) :custom (forge-owned-accounts '((jdormit . (remote-name "jdormit")))) :general (normal magit-mode-map "yu" #'forge-copy-url-at-point-as-kill) (magit-revision-mode-map [remap magit-browse-thing] #'forge-browse-dwim)) (provide 'init-git)