LmCast :: Stay tuned in

Maak.el: Lisp machine command runner in Emacs, infinitely extensible and Scheme

Recorded: Sept. 9, 2026, 9:01 a.m.

Original Summarized

jjba23/maak.el: Maak integration for Emacs - Codeberg.org

Codeberg has changed its Terms of Use. View complete changes.

LLM-generated content is being restricted. View change or read the blog post
Cryptocurrency projects are no longer allowed. View change

Dismiss

This website requires JavaScript.

Explore
About
FAQ
Help
Donate

Register

Sign in

jjba23/maak.el

Watch

1

Star

0

Fork

You've already forked maak.el

0

Code

Issues

Pull requests

Activity

Maak integration for Emacs

8 commits

1 branch

1 tag

44 KiB


Emacs Lisp


100%

trunk

Find a file

HTTPS

Download ZIP
Download TAR.GZ
Download BUNDLE
Open with VS Code
Open with VSCodium
Open with Intellij IDEA

Repository files (latest commit first)

Filename
Latest commit message
Latest commit date

Josep Bigorra

2a6cdcf181

docs: README

2026-09-08 11:19:57 +02:00

COPYING

feat: ✨ Implement maak.el

2026-07-17 09:13:23 +02:00

maak.el

feat: ✨ Implement maak.el

2026-07-17 09:13:23 +02:00

README.org

docs: README

2026-09-08 11:19:57 +02:00

README.org

maak.el — Maak integration for Emacs

Community & Support

Installing

Usage

Customization

Licensing

AI Policy

Code of conduct

maak.el brings seamless integration for Maak: The infinitely extensible command runner, control plane and project automator à la Make (Guile Scheme - Lisp) into your Emacs workflow. Maak replaces archaic Makefiles with the elegance and power of GNU Guile Scheme. With maak.el, you can discover, inspect, and execute your Maak tasks directly from the comfort of Emacs, complete with rich minibuffer completions.

Most build tools invent their own limited domain-specific language. Maak embraces the powerful λ Lisp and the amazing Guile Scheme programming language.

This also means your code is flexible, robust and reliable (+declarative) for at least the next 50 years.

Automatic Project Discovery: Automatically locates your root maak.scm file using dominating-file heuristics.
Smart Visibility Parsing: Respects your Maak configuration's #:export lists—only showing public tasks (or all, if no exports).
Polished Completion UI: Implements aligned columns in your preferred completion framework (Vertico, Ivy, Helm, or native completing-read) showcasing task signatures and docstrings.
Interactive Argument Gathering: If a task expects parameters, maak.el will sequentially prompt you for them in the minibuffer before executing.
Native Compilation Buffers: Executes tasks asynchronously via Emacs's native compile system, keeping shell-escaping watertight and allowing you to jump straight to errors.

Using standard Emacs properties, your tasks are dynamically formatted in completion list. It will render beautifully aligned columns matching your theme's default font lock faces.

Thanks to Lisp being universal, and Scheme and Emacs Lisp being mutually parseable, maak.el parses maak.scm locally and cleanly, while being aware of S-exps, comments, etc.

It spins up a temporary buffer inside standard Emacs Lisp mode to parse Scheme forms safely.
It locates the module's #:export form (handling comments and strings seamlessly) to build a whitelist.
It maps defined procedures matching public exports (or all, if no exports), extracting Scheme docstrings and formal parameter lists.

,---. ,---.
( \ / )
) ( \____/ ) (
( \ @ @ / ) [ Maak ]
) ( oo ) ( The infinitely extensible
( \__/ ) command runner, control plane,
`------------' and project automator.

If you like my work, please support me by buying me a cup of coffee ☕ so I can continue with a lot of motivation.

Community & Support

Join the maak community to ask questions, discuss development, share configurations, screenshots, report issues, or just hang out:

Issues & development: Codeberg repository

Chat, support, discussion, announcements (Zulip): Join the maak Zulip community

If you're unsure where to start, Zulip is recommended. Codeberg issues is also a good place to add ideas, report bugs or improvements.

Installing

This package is not (yet) available in popular Emacs repositories such as MELPA or ELPA.
An example installation with Elpaca:

(use-package maak.el
:ensure (:host codeberg :repo "jjba23/maak.el" :branch "trunk")
:demand t
:bind ("C-c m r" . maak-run-task))

Usage

Running Tasks

Invoke the primary command:

M-x maak-run-task

Emacs will search upwards from your current buffer to find a maak.scm.
A completion menu will pop up listing all exported tasks from your Scheme configuration.
If the task you select defines parameters (e.g., (define (deploy server env) ...)), the minibuffer will prompt you sequentially.
A standard *compilation* buffer will spawn executing your task via maak <args...>.

Using standard Emacs properties, your tasks are dynamically formatted in completion list. It will render beautifully aligned columns matching your theme's default font lock faces.

Customization

You can customize maak.el behavior and looks with Emacs Lisp config (or via M-x customize-group RET maak RET ). Some worthy mentions:

Variable / Face
Default Value
Description

maak-annotation-padding
4
Number of spaces to maintain between the arguments and the docstring in completion columns.

maak-task-arguments-face
Inherits font-lock-variable-name-face (italic)
Face used to render the task arguments list in completion.

maak-task-documentation-face
Inherits font-lock-doc-face
Face used to render the task docstring in completion.

Thanks to Lisp being universal, and Scheme and Emacs Lisp being mutually parseable, maak.el parses maak.scm locally and cleanly, while being aware of S-exps, comments, etc.

It spins up a temporary buffer inside standard Emacs Lisp mode to parse Scheme forms safely.
It locates the module's #:export form (handling comments and strings seamlessly) to build a whitelist.
It maps defined procedures matching public exports (or all, if no exports), extracting Scheme docstrings and formal parameter lists.

Licensing

Maak and all of its source code are free software, licensed under the GNU General Public License v3 (or newer at your convenience).

https://www.gnu.org/licenses/gpl-3.0.html

The documentation and examples, including this document, which are provided with Maak, are all licensed under the GNU Free Documentation License v1.3 (or newer at your convenience).

https://www.gnu.org/licenses/fdl-1.3.html

AI Policy

This project adheres to the jointhefreeworld AI (Artificial Intelligence) policy.

Our core principle is simple: AI should assist human creativity and problem-solving, never replace human reasoning.

While tools like Large Language Models (LLMs) and interactive chatbots can be beneficial for reviewing, refactoring small functions, or acting as a sounding board, they should be used with moderation.

We require a human in the loop for all contributions. The use of autonomous AI agents to automatically generate and submit pull requests to this project is strictly prohibited.

Code of conduct

This project adheres to the jointhefreeworld code of conduct. Find it here:

https://jointhefreeworld.org/blog/articles/personal/jointhefreeworld-code-of-conduct/index.html

In summary, we foster an inclusive, respectful, and cooperative environment for all contributors and users of this free software project. Inspired by the ideals of the GNU Project, we strive to uphold freedom, equality, and community as guiding principles. We believe that collaboration in a community of mutual respect is essential to creating excellent free software.

Powered by

with modifications

Codeberg

Blog
Documentation
Community issues
Contributing
Report abuse

Association

Who are we?
Bylaws / Satzung
Donate
Join / Support
Contact

Services

Codeberg Pages
Codeberg Translate
Woodpecker CI
Forgejo API
Status page

Legal

Imprint / Impressum
Privacy Policy
Licenses
Terms of Use

Mastodon |
Matrix Space
(Web link)

Powered by Forgejo

English

Bahasa Indonesia
Dansk
Deutsch
English
Español
Esperanto
Filipino
Français
Italiano
Latviešu
Magyar nyelv
Nederlands
Plattdüütsch
Polski
Português de Portugal
Português do Brasil
Slovenščina
Suomi
Svenska
Türkçe
Čeština
Ελληνικά
Български
Русский
Українська
فارسی
日本語
简体中文
繁體中文(台灣)
繁體中文(香港)
한국어


Page: 148ms
Template: 6ms

Maak integration for Emacs provides seamless integration for Maak, a system designed as an infinitely extensible command runner, control plane, and project automator based on the principles of Make, implemented using GNU Guile Scheme. This integration, embodied by maak.el, extends the functionality of Emacs to manage and execute Maak tasks directly within the Emacs workflow, replacing traditional Makefiles with the expressive power of Guile Scheme. The underlying philosophy champions the flexibility, robustness, and reliability of code derived from lambda Lisp and Guile Scheme, suggesting longevity for these systems.

The core functionality of maak.el revolves around automated project discovery, smart visibility parsing, and sophisticated interactive user interfaces. It automatically locates the root maak.scm file by employing dominating-file heuristics to identify the relevant configuration. Furthermore, it intelligently respects the configuration's export lists, presenting only public tasks or all available tasks, which enhances usability. For the user interface, it implements a polished completion engine that arranges task signatures and documentation in beautifully aligned columns conforming to the user’s preferred theme font lock faces, supporting frameworks such as Vertico, Ivy, Helm, or native completing-read.

A crucial aspect of interaction is the handling of task execution. If a selected task requires parameters, maak.el manages interactive argument gathering by sequentially prompting the user in the minibuffer before execution. Execution itself occurs asynchronously using Emacs’s native compile system, which ensures that shell escaping is maintained and errors are immediately surfaced within a dedicated compilation buffer. This approach maintains integrity during command execution.

Technically, maak.el achieves its functionality by parsing the maak.scm file locally and cleanly while maintaining awareness of Scheme extensions, comments, and strings. It safely executes Scheme forms in a temporary buffer within standard Emacs Lisp mode. The process involves locating the module’s export definitions to build a whitelist of public procedures, extracting associated Scheme docstrings and formal parameter lists from these definitions.

Users have options for customization through Emacs Lisp configuration or by using Emacs's customize group mechanism. Specific customizations allow adjusting aspects of the completion display, such as defining padding between arguments and documentation, and specifying appearance faces for task arguments and documentation. This level of configurability is managed through variables like maak-annotation-padding and dedicated faces such as maak-task-arguments-face and maak-task-documentation-face.

Installation can be achieved by using package management systems tailored for Emacs, such as ensuring the requested Codeberg repository is specified during installation while defining dependencies. Usage is initiated by invoking the primary command, maak-run-task, which triggers the discovery process, presents completion options, handles argument input, and initiates the compilation buffer. The project adheres to open-source principles, with the source code licensed under the GNU General Public License v3 or newer, and the documentation provided under the GNU Free Documentation License. The project also adheres to the jointhefreeworld AI policy and code of conduct, emphasizing human oversight in development and fostering a cooperative environment for all contributors.