aboutsummaryrefslogtreecommitdiff
path: root/tw/services/dev-env.scm
diff options
context:
space:
mode:
authorTimo Wilken2024-03-09 14:52:56 +0100
committerTimo Wilken2024-03-10 16:19:00 +0100
commitde20fc8d904643ffe6957febfc6a24e57c12b512 (patch)
tree8177459e40786bd432a37c5833f26350fb689356 /tw/services/dev-env.scm
parentda5e9d5ee98dfc216eb7e3b1559c09f4bf868bf6 (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.scm158
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)))))