blob: be80789b0963f256a252af5dc0a715c3aa57e6cd (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
;;; mm-projects.el --- Configuration for project management -*- lexical-binding: t; -*-
;;; Project Configuration
(defun mm-projects-project-magit-status ()
"Open a Git status buffer for the current project.
This is intended to be called interactively via
`project-switch-commands'."
(interactive)
(thread-last
(project-current t)
(project-root)
(magit-status-setup-buffer)))
(use-package project
:custom
(project-switch-commands
'((project-dired "Dired" ?d)
(project-find-file "Find File" ?f)
(mm-projects-project-magit-status "Git Status" ?s)))
:config
(unless mm-darwin-p
(if-let ((repo-directory (getenv "REPODIR")))
(with-eval-after-load 'async
(async-start
(lambda ()
(require 'project)
(let* ((list-dir
(lambda (path)
(directory-files path :full "\\`[^.]")))
(directories
(cl-loop for author in (funcall list-dir (getenv "REPODIR"))
append (cl-loop for path in (funcall list-dir author)
collect (list (concat path "/"))))))
(with-temp-buffer
(prin1 directories (current-buffer))
(write-file project-list-file))))
(lambda (_proc)
(project--read-project-list))))
(warn "The REPODIR environment variable is not set."))))
^L
;;; Emacs VC
(use-package vc-hooks
:custom
(vc-follow-symlinks t)
(vc-handled-backends '(Git)))
^L
;;; Git Client
(use-package magit
:ensure t
:bind ( :map magit-status-mode-map
("[" . magit-section-backward-sibling)
("]" . magit-section-forward-sibling))
:custom
(git-commit-style-convention-checks
'(non-empty-second-line overlong-summary-line))
(git-commit-summary-max-length 50)
(magit-diff-refine-hunk t)
(magit-display-buffer-function
#'magit-display-buffer-same-window-except-diff-v1)
(transient-default-level 7)
:config
(transient-define-suffix mm-projects-magit-push-current-to-all-remotes (args)
"Push the current branch to all remotes."
:if #'magit-get-current-branch
(interactive (list (magit-push-arguments)))
(run-hooks 'magit-credential-hook)
(let ((branch (magit-get-current-branch)))
(dolist (remote (magit-list-remotes))
(magit-run-git-async
"push" "-v" args remote
(format "refs/heads/%s:refs/heads/%s" branch branch)))))
(transient-append-suffix #'magit-push '(1 -1)
'("a" "all remotes" mm-projects-magit-push-current-to-all-remotes)))
(use-package magit-repos
:ensure nil ; Part of ‘magit’
:if (not mm-darwin-p)
:commands (magit-list-repositories)
:init
(if-let ((directory (getenv "REPODIR")))
(setopt magit-repository-directories `((,directory . 2)))
(warn "The REPODIR environment variable is not set.")))
(use-package magit-todos
:ensure t
:after magit
:hook magit-mode
:custom
(magit-todos-exclude-globs '("vendor/")))
^L
;; Project Compilation
(use-package compile
:config
(require 'ansi-color)
(add-hook 'compilation-filter-hook #'ansi-color-compilation-filter))
(provide 'mm-projects)
|