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 Dismiss This website requires JavaScript. Explore 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 trunk Find a file HTTPS Download ZIP Repository files (latest commit first) Filename 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. 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. ,---. ,---. 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. (use-package maak.el 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. 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 maak-annotation-padding maak-task-arguments-face maak-task-documentation-face 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. 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 Association Who are we? Services Codeberg Pages Legal Imprint / Impressum Mastodon | Powered by Forgejo English Bahasa Indonesia |
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. |