Configure ‘emacs-vterm’ through Guix

This commit is contained in:
Tom Willemse 2024-01-07 21:42:32 -08:00
parent 079078c7eb
commit 7f691ec18e
2 changed files with 103 additions and 7 deletions

View file

@ -22,7 +22,6 @@
#:select (emacs-next-tree-sitter)) #:select (emacs-next-tree-sitter))
#:use-module ((gnu packages emacs-xyz) #:use-module ((gnu packages emacs-xyz)
#:select (emacs-org-roam #:select (emacs-org-roam
emacs-vterm
emacs-guix emacs-guix
emacs-org-contacts)) emacs-org-contacts))
#:use-module ((gnu packages file-systems) #:use-module ((gnu packages file-systems)
@ -90,7 +89,9 @@
home-emacs-ace-link-service-type home-emacs-ace-link-service-type
home-emacs-ace-link-configuration home-emacs-ace-link-configuration
home-emacs-golden-ratio-service-type home-emacs-golden-ratio-service-type
home-emacs-pinentry-service-type)) home-emacs-pinentry-service-type
home-emacs-vterm-service-type
home-emacs-vterm-configuration))
#:use-module ((oni home services environment) #:use-module ((oni home services environment)
#:select (home-environment-service)) #:select (home-environment-service))
#:use-module ((oni home services flameshot) #:use-module ((oni home services flameshot)
@ -140,7 +141,6 @@
emacs-syncthing-status)) emacs-syncthing-status))
#:use-module ((oni packages emacs-config) #:use-module ((oni packages emacs-config)
#:select (emacs-oni-org-roam #:select (emacs-oni-org-roam
emacs-oni-vterm
emacs-oni-elfeed emacs-oni-elfeed
emacs-oni-elisp emacs-oni-elisp
emacs-oni-eshell emacs-oni-eshell
@ -277,7 +277,6 @@
shutdown-rofi shutdown-rofi
emacs-org-roam emacs-org-roam
emacs-org-roam-ui emacs-org-roam-ui
emacs-vterm
emacs-org-contacts emacs-org-contacts
fakeroot ; Needed for build arch packages fakeroot ; Needed for build arch packages
tmsu tmsu
@ -289,7 +288,6 @@
emacs-guix emacs-guix
(emacs-oni-org-roam my-emacs) (emacs-oni-org-roam my-emacs)
emacs-oni-vterm
emacs-oni-elisp emacs-oni-elisp
emacs-oni-core emacs-oni-core
emacs-oni-elfeed emacs-oni-elfeed
@ -449,6 +447,9 @@
(org-mode-key "C-S-e"))) (org-mode-key "C-S-e")))
(service home-emacs-golden-ratio-service-type) (service home-emacs-golden-ratio-service-type)
(service home-emacs-pinentry-service-type) (service home-emacs-pinentry-service-type)
(service home-emacs-vterm-service-type
(home-emacs-vterm-configuration
(buffer-name-string "*vterm* %s")))
(service home-flameshot-service-type) (service home-flameshot-service-type)

View file

@ -14,12 +14,16 @@
emacs-dashboard emacs-dashboard
emacs-eros emacs-eros
emacs-ace-link emacs-ace-link
emacs-pinentry)) emacs-pinentry
emacs-vterm))
#:use-module ((gnu home services) #:use-module ((gnu home services)
#:select (service-type #:select (service-type
service-extension service-extension
home-profile-service-type home-profile-service-type
home-files-service-type)) home-files-service-type))
#:use-module ((gnu home services shells)
#:select (home-zsh-extension
home-zsh-service-type))
#:use-module ((gnu home services shepherd) #:use-module ((gnu home services shepherd)
#:select (shepherd-service #:select (shepherd-service
home-shepherd-service-type)) home-shepherd-service-type))
@ -56,7 +60,10 @@
home-emacs-golden-ratio-configuration home-emacs-golden-ratio-configuration
home-emacs-pinentry-service-type home-emacs-pinentry-service-type
home-emacs-pinentry-configuration)) home-emacs-pinentry-configuration
home-emacs-vterm-service-type
home-emacs-vterm-configuration))
(define-maybe string) (define-maybe string)
@ -398,3 +405,91 @@
(compose identity) (compose identity)
(default-value (home-emacs-pinentry-configuration)) (default-value (home-emacs-pinentry-configuration))
(description "Install and configure emacs-pinentry."))) (description "Install and configure emacs-pinentry.")))
;;; Emacs Vterm
(define-configuration/no-serialization home-emacs-vterm-configuration
(package
(package emacs-vterm)
"Package to use for setting emacs-vterm.")
(buffer-name-string
maybe-string
"Format string for the title of vterm buffers.")
(extra-content
(text-config '())
"Extra content for emacs-pinentry configuration."))
(define (add-emacs-vterm-configuration config)
(home-emacs-extension
(configurations
(append
(list (mixed-text-file "vterm-config"
";;;;; vterm-config starts here.\n"
(let ((buffer-name-string (home-emacs-vterm-configuration-buffer-name-string config)))
(if (maybe-value-set? buffer-name-string)
(format #f "(setq vterm-buffer-name-string ~s)\n" buffer-name-string)
""))
";;;;; vterm-config ends here.\n"))
(home-emacs-vterm-configuration-extra-content config)))))
(define (add-emacs-vterm-zsh-configuration config)
(home-zsh-extension
(zshrc
(list
(mixed-text-file
"vterm-config"
"##### vterm-config starts here.\n"
"vterm_printf() {\n"
" if [ -n \"$TMUX\" ] && ([ \"${TERM%%-*}\" = \"tmux\" || [ \"${TERM%%-*}\" = \"screen\" ]); then\n"
" # Tell tmux to pass the escape sequence through\n"
" printf \"\\ePtmux;\\e\\e]%s\\007\\e\\\\\" \"$1\"\n"
" elif [ \"${TERM%%-*}\" = \"screen\" ]; then\n"
" # GNU screen (screen, screen-256color, screen-256color-bce)\n"
" printf \"\\eP\\e]%s\\007\\e\\\\\" \"$1\"\n"
" else\n"
" printf \"\\e]%s\\e\\\\\" \"$1\"\n"
" fi\n"
"}\n"
"if [[ \"$INSIDE_EMACS\" = 'vterm' ]]; then\n"
" alias clear='vterm_printf \"51;Evterm-clear-scrollback\";tput clear'\n"
"fi\n"
(if (maybe-value-set? (home-emacs-vterm-configuration-buffer-name-string config))
(string-append
"autoload -U add-zsh-hook\n"
"add-zsh-hook -Uz chpwd (){ print -Pn \"\\e]2;%m:%2~\\a\" }\n")
"")
"vterm_prompt_end() {\n"
" vterm_printf \"51;A$(whoami)@$(hostname):$(pwd)\"\n"
"}\n"
"setopt PROMPT_SUBST\n"
"PROMPT=$PROMPT'%{$(vterm_prompt_end)%}'\n"
"vterm_cmd() {\n"
" local vterm_elisp\n"
" vterm_elisp=\"\"\n"
" while [ $# -gt 0]; do\n"
" vterm_elisp=\"vterm_elisp\"\"$(printf '\"%s\" ' \"$(printf \"%s\" \"$1\" | sed -e 's|\\\\|\\\\\\\\|g' -e 's|\"|\\\\\"|g')\")\"\n"
" shift\n"
" done\n"
" vterm_printf \"51;E$vterm_elisp\"\n"
"}\n"
"##### vterm-config ends here.\n")))))
(define (add-emacs-vterm-packages config)
(list (home-emacs-vterm-configuration-package config)))
(define home-emacs-vterm-service-type
(service-type
(name 'home-emacs-vterm)
(extensions
(list (service-extension
home-emacs-service-type
add-emacs-vterm-configuration)
(service-extension
home-zsh-service-type
add-emacs-vterm-zsh-configuration)
(service-extension
home-profile-service-type
add-emacs-vterm-packages)))
(compose identity)
(default-value (home-emacs-vterm-configuration))
(description "Install and configure emacs-vterm.")))