diff options
| author | 2025-03-24 00:37:39 -0700 | |
|---|---|---|
| committer | 2025-03-24 01:05:05 -0700 | |
| commit | f98dba55405c462888776eab0c986168bb75b481 (patch) | |
| tree | 31194652126b088c785bb17d4f5bca81f23d5ecb | |
| parent | 3ff389c053c7cd8a167e81ac31023ed43479a33e (diff) | |
| download | new-dotfiles-f98dba55405c462888776eab0c986168bb75b481.tar.gz new-dotfiles-f98dba55405c462888776eab0c986168bb75b481.zip | |
rincewind: Add git configuration
| -rw-r--r-- | oni/home/config/rincewind.scm | 17 | ||||
| -rw-r--r-- | oni/home/services/git.scm | 90 |
2 files changed, 107 insertions, 0 deletions
diff --git a/oni/home/config/rincewind.scm b/oni/home/config/rincewind.scm index 2f89603..96ed2bf 100644 --- a/oni/home/config/rincewind.scm +++ b/oni/home/config/rincewind.scm @@ -107,6 +107,9 @@ #:select (home-environment-service)) #:use-module ((oni home services flameshot) #:select (home-flameshot-service-type)) + #:use-module ((oni home services git) + #:select (home-git-service-type + home-git-configuration)) #:use-module ((oni home services gnuzilla) #:select (home-icecat-service-type home-icecat-configuration)) @@ -466,6 +469,20 @@ (service home-flameshot-service-type) + (service home-git-service-type + (home-git-configuration + (user-name "Tom Willemse") + (user-email "tom@ryuslash.org") + (sendemail-sendmailcmd "/usr/bin/msmtp") + (init-default-branch "main") + (init-default-branchname "main") + (extra " +[diff \"org\"] + xfuncname = \"^\\\\*+ +(.+)\" +[diff \"lisp\"] + xfuncname = \"^[[:space:]]*?\\\\(def\\\\w+? ((\\\\w|-|'|:|=|<|>)+)\" +"))) + (service home-mpd-service-type (home-mpd-configuration (music-directory "~/music") diff --git a/oni/home/services/git.scm b/oni/home/services/git.scm new file mode 100644 index 0000000..55c3737 --- /dev/null +++ b/oni/home/services/git.scm @@ -0,0 +1,90 @@ +(define-module (oni home services git) + #:use-module ((gnu home services) + #:select (service-type + service-extension + home-profile-service-type + home-xdg-configuration-files-service-type)) + #:use-module ((gnu packages version-control) + #:select (git)) + #:use-module ((gnu services configuration) + #:select (serialize-package + define-configuration + define-maybe + serialize-text-config + serialize-configuration + configuration-field-name)) + #:use-module ((guix packages) + #:select (package?)) + #:use-module ((guix gexp) + #:select (mixed-text-file)) + + #:export (home-git-service-type + home-git-configuration)) + +(define (pascal-case str delim) + (let ((parts (string-split str delim))) + (string-join (cons (car parts) + (map string-capitalize (cdr parts))) + ""))) + +(define-maybe string) + +(define (serialize-string field value) + (let* ((field-name (symbol->string field)) + (name (pascal-case (substring field-name (1+ (string-index field-name #\-))) #\-))) + (format #f "~a=~a~%" name value))) + +(define-configuration home-git-configuration + (package + (package git) + "Package to use for setting git.") + (user-name + (string "") + "Name of the user to specify.") + (user-email + (string "") + "Email of the user to specify.") + (sendemail-sendmailcmd + maybe-string + "Command to use to send email.") + (init-default-branchname + maybe-string + "Default name for new branches.") + (init-default-branch + maybe-string + "Default branch.") + (extra + maybe-string + "Any extra configuration.")) + +(define (add-git-packages config) + (list (home-git-configuration-package config))) + +(define (add-git-config-files config) + (let ((filter-prefix + (λ (p l) + (filter (λ (f) (string-prefix? p (symbol->string (configuration-field-name f)))) l)))) + `(("git/config" + ,(mixed-text-file + "config" + "[user]\n" + (serialize-configuration config (filter-prefix "user-" home-git-configuration-fields)) + "[sendemail]\n" + (serialize-configuration config (filter-prefix "sendemail-" home-git-configuration-fields)) + "[init]\n" + (serialize-configuration config (filter-prefix "init-" home-git-configuration-fields)) + (home-git-configuration-extra config)))))) + +(define home-git-service-type + (service-type + (name 'home-git) + (extensions + (list (service-extension + home-profile-service-type + add-git-packages) + (service-extension + home-xdg-configuration-files-service-type + add-git-config-files))) + (compose identity) + (default-value (home-git-configuration)) + (description "Install and configure git."))) |
