diff options
author | Timo Wilken | 2024-03-09 14:52:56 +0100 |
---|---|---|
committer | Timo Wilken | 2024-03-10 16:19:00 +0100 |
commit | de20fc8d904643ffe6957febfc6a24e57c12b512 (patch) | |
tree | 8177459e40786bd432a37c5833f26350fb689356 /tw/services/dev-env.scm | |
parent | da5e9d5ee98dfc216eb7e3b1559c09f4bf868bf6 (diff) |
Separate home service into PIM, dev env and graphical parts
This means we only instantiate Shepherd and mcron services if we really need
them, to avoid annoyance on servers.
Diffstat (limited to 'tw/services/dev-env.scm')
-rw-r--r-- | tw/services/dev-env.scm | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/tw/services/dev-env.scm b/tw/services/dev-env.scm new file mode 100644 index 00000000..8e38ea8f --- /dev/null +++ b/tw/services/dev-env.scm @@ -0,0 +1,158 @@ +(define-module (tw services dev-env) + #:use-module (gnu) + #:use-module (gnu home services) + #:use-module (gnu home services shepherd) + #:use-module ((gnu packages commencement) #:select (gcc-toolchain)) + #:use-module ((gnu packages databases) #:select (emacs-rec-mode)) + #:use-module ((gnu packages elf) #:select (patchelf elfutils)) + #:use-module (gnu packages emacs) + #:use-module (gnu packages emacs-xyz) + #:use-module ((gnu packages finance) #:select (emacs-ledger-mode)) + #:use-module ((gnu packages haskell-apps) #:select (shellcheck)) + #:use-module ((gnu packages llvm) #:select (clang)) + #:use-module ((gnu packages python-xyz) #:select (python-lsp-server python-yamllint)) + #:use-module ((gnu packages sqlite) #:select (sqlite)) + #:use-module (gnu packages tree-sitter) + #:use-module (gnu packages vim) + #:use-module (gnu services configuration) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module ((tw theme) #:select (catppuccin-emacs catppuccin-vim)) + #:export (home-emacs-configuration + home-emacs-service-type + home-vim-configuration + home-vim-service-type)) + + + +(define (vim-environment config) + '(("EDITOR" . "vim"))) ; we define no ASYNC_EDITOR + +(define (vim-xdg-config config) + `((".vim/vimrc" ,(local-file "files/vimrc")) + (".vim/catppuccin.vim" ,catppuccin-vim))) + +;; In non-graphical environments, install vim as an editor. Neovim might be +;; better, but doesn't have an equivalent to `vim-surround' packaged. +(define (vim-packages config) + (list vim vim-surround)) + +(define (emacs-environment config) + '(("EDITOR" . "emacsclient -qc") + ;; Tell emacsclient to return immediately after opening the file. I + ;; can't put this in $EDITOR as many programs expect $EDITOR to exit + ;; only when the user is done editing. + ("ASYNC_EDITOR" . "emacsclient -qcn"))) + +(define (emacs-xdg-config config) + `(("emacs/include" ,(local-file "files/emacs-packages" #:recursive? #t)) + ("emacs/init.el" ,(local-file "files/emacs-init.el")) + ("emacs/catppuccin-theme.el" ,catppuccin-emacs))) + +(define (emacs-files config) + `((".local/share/applications/emacsclient.desktop" + ,(local-file "files/emacsclient.desktop")))) + +(define (emacs-daemon config) + (list (shepherd-service + (documentation "Emacs server; connect using emacsclient.") + (provision '(emacs)) + (requirement '(x11-display)) + (start #~(make-forkexec-constructor + (list #$(file-append emacs "/bin/emacs") "--fg-daemon"))) + (stop #~(make-kill-destructor))))) + +(define (emacs-packages config) + (list + ;; Development & language servers + gnu-make python-lsp-server python-yamllint shellcheck gcc-toolchain binutils patchelf elfutils + clang ; for clangd + glibc ; for ldd + + ;; Emacs general + emacs ; for Wayland, switch to emacs-pgtk for better fractional scaling support + emacs-use-package + emacs-gcmh + emacs-eglot + emacs-counsel + emacs-counsel-dash sqlite ; emacs-counsel-dash requires the sqlite3 binary + emacs-ivy + emacs-company emacs-company-quickhelp emacs-company-posframe + emacs-undo-tree + emacs-aggressive-indent + emacs-which-key + emacs-smart-mode-line + emacs-diminish + emacs-rainbow-mode + emacs-form-feed + emacs-guix + ;; TODO: emacs-editorconfig emacs-sly emacs-sly-macrostep + emacs-org ; emacs-org-modern theme? + + ;; Emacs Evil + emacs-evil + emacs-evil-collection + emacs-evil-expat ; for :reverse, :remove, :rename, :colo, :g*, ... ex commands + emacs-evil-surround + ;; emacs-evil-owl ; tests failing + emacs-evil-args + emacs-evil-numbers + emacs-evil-multiedit + emacs-evil-goggles + emacs-evil-traces + emacs-evil-commentary + emacs-evil-replace-with-register + emacs-evil-cleverparens + emacs-evil-org + emacs-evil-markdown + emacs-evil-tex + emacs-evil-text-object-python + + ;; Emacs language modes + emacs-flymake-collection + emacs-geiser emacs-geiser-guile + emacs-sly + emacs-gnuplot + emacs-graphviz-dot-mode + emacs-haskell-mode + emacs-hcl-mode + emacs-ledger-mode + emacs-mmm-mode + emacs-puppet-mode + emacs-rec-mode + emacs-web-mode + emacs-yaml-mode + + ;; Tree sitter libraries, for Emacs' built-in X-ts-modes. + tree-sitter-bash + tree-sitter-c + tree-sitter-cmake + tree-sitter-cpp + tree-sitter-css + tree-sitter-dockerfile + tree-sitter-javascript + tree-sitter-json + tree-sitter-python + tree-sitter-ruby)) + +(define-public home-basic-dev-env-service-type + (service-type + (name 'basic-dev-env) + (description "Set up a basic development environment using vim.") + (default-value #f) + (extensions + (list (service-extension home-profile-service-type vim-packages) + (service-extension home-xdg-configuration-files-service-type vim-xdg-config) + (service-extension home-environment-variables-service-type vim-environment))))) + +(define-public home-full-dev-env-service-type + (service-type + (name 'full-dev-env) + (description "Set up a full-featured, interactive development environment using Emacs.") + (default-value #f) + (extensions + (list (service-extension home-profile-service-type emacs-packages) + (service-extension home-xdg-configuration-files-service-type emacs-xdg-config) + (service-extension home-files-service-type emacs-files) + (service-extension home-environment-variables-service-type emacs-environment) + (service-extension home-shepherd-service-type emacs-daemon))))) |