(require 'fcuny-defuns) (require 'fcuny-vars) (use-package gitconfig-mode :ensure t) (use-package gitattributes-mode :ensure t) (use-package gitignore-mode :ensure t) (use-package magit :ensure t :after (flyspell) :bind (("C-x g" . magit-status)) :custom (vc-follow-symlinks t) :custom (magit-completing-read-function 'ivy-completing-read)) (use-package magit-repos :ensure nil :after (magit) :custom (magit-repository-directories '(("~/workspace" . 1)))) (use-package git-commit :ensure t :after magit :hook (git-commit-mode . fcuny/git-commit-auto-fill) :custom (git-commit-summary-max-length 50) :preface (defun fcuny/git-commit-auto-fill () "Ensures that the commit body does not exceed 72 characters." (setq-local fill-column 72) (setq-local comment-auto-fill-only-comments nil))) (use-package forge :ensure t :after (magit) :custom (forge-database-file (expand-file-name "forge-database-file.sqlite" fcuny/path-emacs-var)) (auth-sources `(,(expand-file-name "authinfo.gpg" fcuny/path-emacs-etc))) :config (add-to-list 'forge-alist '("git.fcuny.net" "git.fcuny.net/api/v1" "git.fcuny.net" forge-gitea-repository))) (use-package git-link :ensure t :after magit :bind (("C-c g l" . git-link) ("C-c g a" . git-link-commit)) :config (defun fcuny/get-sg-remote-from-hostname (hostname) (format "sourcegraph.twitter.biz/%s" hostname)) (defun fcuny/git-link-work-sourcegraph (hostname dirname filename _branch commit start end) ;;; For a given repository, build the proper link for sourcegraph. ;;; Use the default branch of the repository instead of the ;;; current one (we might be on a feature branch that is not ;;; available on the remote). (require 'magit-branch) (let ((sg-base-url (fcuny/get-sg-remote-from-hostname hostname)) (main-branch (magit-main-branch))) (git-link-sourcegraph sg-base-url dirname filename main-branch commit start end))) (defun fcuny/git-link-commit-work-sourcegraph (hostname dirname commit) (let ((sg-base-url (fcuny/get-sg-remote-from-hostname hostname))) (git-link-commit-sourcegraph sg-base-url dirname commit))) ;; for work related repositories, open them in our instance of sourcegraph (add-to-list 'git-link-remote-alist '("twitter" fcuny/git-link-work-sourcegraph)) (add-to-list 'git-link-commit-remote-alist '("twitter" fcuny/git-link-commit-work-sourcegraph)) ;; for personal code I use gitea, which is similar to codeberg (add-to-list 'git-link-remote-alist '("git\\.fcuny\\.net" git-link-codeberg)) (add-to-list 'git-link-commit-remote-alist '("git\\.fcuny\\.net" git-link-commit-codeberg)) (setq git-link-open-in-browser 't)) ;; https://magit.vc/manual/magit/Per_002dRepository-Configuration.html ;; we don't want to refresh buffers in source. This should help with ;; performances. (dir-locals-set-class-variables 'huge-git-repository '((nil . ((magit-refresh-buffers . nil))))) (dir-locals-set-directory-class "/Users/fcuny/workspace/source" 'huge-git-repository) (defun fcuny/clone-repo (url) "Clone a repository in the workspace" (interactive "sURL:") (let* ((repo-name (magit-clone--url-to-name url)) (target-dir (concat fcuny/path-workspace "/" repo-name))) (magit-clone-regular url target-dir nil))) (provide 'fcuny-git)