(define-module (guix-config home services emacs) #:use-module (gnu services configuration) #:use-module (gnu packages emacs) #:use-module (guix packages) #:use-module (guix gexp) #:use-module (gnu services) #:use-module (gnu home services) #:use-module (gnu packages emacs-xyz) #:export (home-emacs-service-type home-emacs-configuration)) (define-configuration home-emacs-configuration (emacs (package emacs-pgtk) "The Emacs package to use.") (config-file (text-config '()) "The config.el file.") (early-config-file (text-config '()) "The early-config.el file.") ) (define package-user-dir "~/.cache/emacs/elpa") (define (home-emacs-files-service config) (list `(".config/emacs/config.el" ,(mixed-text-file "config.el" ";; Emacs Config from Guix Home\n" "(load-file \"" (home-emacs-configuration-config-file config) "\")\n")) `(".config/emacs/init.el" ,(mixed-text-file "early-config.el" ";; Emacs Early Config from Guix Home\n" "(setq custom-file \"~/.config/emacs/custom.el\")\n" "(when (file-exists-p custom-file)\n" "(load custom-file))\n" (string-append "(make-directory \"" package-user-dir "\" t)\n") (string-append "(setq package-user-dir \"" package-user-dir "\")\n") "(load-file \"" (home-emacs-configuration-early-config-file config) "\")\n" "(load-file \"~/.config/emacs/config.el\")\n")))) (define (home-emacs-profile-service config) (list (home-emacs-configuration-emacs config))) (define home-emacs-service-type (service-type (name 'home-emacs) (description "The home service to configure Emacs.") (extensions (list (service-extension home-files-service-type home-emacs-files-service) (service-extension home-profile-service-type home-emacs-profile-service))) (default-value (home-emacs-configuration))))