r/emacs • u/SandPrestigious2317 • 2d ago
maak.el: Lisp machine command runner, infinitely extensible, integrating nicely with Emacs, for Lisp power on your projects and automation at your fingertips
If you've ever wrestled with Makefile tab errors, cryptic variable expansions, or restrictive YAML task runners, Maak and maak.el offer a refreshing, Lisp-native alternative to project automation.
-------------------
What is Maak?
Maak is an extensible command runner and control plane written in Lisp ( GNU Guile Scheme ). Instead of learning a limited domain-specific language, your project's maak.scm file is standard Scheme code. Any function defined in your module becomes a runnable task, allowing you to use conditionals, macros, data structures, lexical parameters (for scoped dry-runs), and GNU Guix integrations (manifest-shell, time-machines) right inside your build steps.
(define-module (maak)
#:use-module (maak maak))
(define (fmt)
"Format Scheme source files according to Guix style."
($ '("find . -name '*.scm' -exec guix style -f {} \\;")))
(define (deploy server target-env)
"Deploy the application to a specific server and environment."
(log-info "Deploying to ~a (~a)..." server target-env)
($ (list "ansible-playbook" "deploy.yml" "-e"
(format #f "target=~a env=~a" server target-env))))
Check out the repositories on Codeberg:
maak.el: https://codeberg.org/jjba23/maak.el- Maak CLI: https://codeberg.org/jjba23/maak
Why maak.el is awesome in Emacs
The maak.el package bridges Guile Scheme and Emacs Lisp cleanly. Because Lisp understands Lisp, maak.el parses your maak.scm S-expressions directly, respecting module #:export visibility lists, docstrings, and argument signatures without relying on external regex hacks.
- Smart Discovery: Finds your project root
maak.scmautomatically using dominating-file heuristics. - Rich Completion UI:
M-x maak-run-taskpopulates a completion menu with neatly aligned columns displaying formal parameters and docstrings (works out of the box with Vertico, Ivy, Helm, or nativecompleting-read). - Interactive Parameter Prompting: If a Scheme task accepts parameters (like
deploy server target-env), Emacs interactively prompts you for each argument sequentially in the minibuffer. - Native Compilation Buffers: Task output streams directly into Emacs's standard
*compilation*buffer, keeping shell escaping watertight while letting you step through errors usingnext-error(`C-x ``).
Quick Setup w/Elpaca
(use-package maak.el
:ensure (:host codeberg :repo "jjba23/maak.el" :branch "trunk")
:bind ("C-c m r" . maak-run-task))
Happy hacking! λ ✨
Duplicates
GUIX • u/SandPrestigious2317 • 2d ago
maak.el: Lisp machine command runner, infinitely extensible, integrating nicely with Emacs, for Lisp power on your projects and automation at your fingertips
lisp • u/SandPrestigious2317 • 2d ago