Image 1 — Need advice on cross-platform Emacs config - need my GNU/Linux setup running macOS + Windows
Image 2 — Need advice on cross-platform Emacs config - need my GNU/Linux setup running macOS + Windows
Image 3 — Need advice on cross-platform Emacs config - need my GNU/Linux setup running macOS + Windows
▲ 20 r/emacs+1 crossposts

Need advice on cross-platform Emacs config - need my GNU/Linux setup running macOS + Windows

I've been building my Emacs configuration for quite a while now, and it has grown into something I jokingly describe as my “temple to computing”, I wanted to keep the experience feeling like Emacs, while building a modern, fast, modular environment on top of it and I've been using it as my daily environment for development, writing, work, Org, shells, Git, music, mail, etc.

Codeberg Repo: https://codeberg.org/jjba23/heks-emacs

The dream I have now (and need for work) is basically:

>One Emacs configuration, same muscle memory, same workflow, same packages, regardless of which machine/OS I'm currently sitting in front of.

If you're an experienced macOS or Windows Emacs user, I'd genuinely appreciate pointers to things I should fix or rethink.

A few things I'm particularly happy with this setup:

  • Elpaca for package management
  • Vertico / Corfu / Cape / Orderless for a really fast completion and minibuffer experience
  • Consult for navigation, searching, buffers, projects, registers, xrefs, etc.
  • Eglot and Language Server Support
  • Tree-sitter where appropriate
  • Magit for Git
  • Eshell with a bunch of custom workflow improvements
  • Org + Org Roam as a serious knowledge-management environment
  • Tempel for snippets
  • Jinx for proofreading
  • Helpful for inspecting Emacs
  • A fairly extensive collection of development tooling for Rust, Scala, Haskell, Scheme/Guile, Lisp, Kotlin, Python, Go, Nix, JavaScript/TypeScript, etc.
  • A modular theme system supporting things like Modus/EF, Everforest, Gruvbox, Catppuccin, Dracula, Kanagawa, Rose Pine, Doom, etc.

The configuration is deliberately split into modules so that the individual pieces remain understandable and replaceable rather than becoming one enormous init.el.

The current README has a breakdown of the modules if anyone is curious about the architecture.

And there is a lot more in there than just UI polish, there are modules for development, Org/knowledge management, shells/system interaction, mail, music, maps, AI assistance, etc.

----------------------

I've mostly developed and used this on GNU/Linux, but that is about to change.

I'm going to need soon to use a multi-OS setup, including macOS and Windows, and I really want to be able to take the same Emacs environment with me instead of maintaining completely different configurations for different operating systems.

I've tried to keep the config portable from the beginning, but I know there are probably a lot of assumptions buried in the configuration that are very Linux-centric.

So I'm looking for advice from people who actually use Emacs on: macOS and/or Windows.

Some initial questions I have already:

  • What are the common portability traps you've encountered?
  • Which packages behave differently across macOS/Windows?
  • What should I avoid assuming about paths, processes, shells, fonts, clipboard integration, notifications, etc.?
  • How do you handle external dependencies cleanly? (rg, git, or others)
  • Are there good patterns for making OS-specific configuration disappear behind small compatibility layers?
  • Anything particularly problematic with Eglot, Corfu, Vertico, Tree-sitter, Magit, Eshell, Org, etc.?
  • what are the things you wish Linux-oriented Emacs configurations understood about Windows or macOS?
  • are there particular GUI/keybinding/font/process quirks worth designing around?

And if you're interested in the project itself, feel free to poke around the source. I'm hoping HEKS-EMACS can be useful not only as a configuration people install, but also as a collection of ideas/patterns that people can steal for their own configs.

Repository: HEKS-EMACS

I'm particularly interested in hearing from people who have already solved the “I want my Emacs environment to follow me across operating systems” problem.

u/SandPrestigious2317 — 1 day ago
▲ 75 r/GUIX+3 crossposts

I'm building a GTK4 C + Lisp dock application (a la CairoDock / macOS) - am I doing things right?

I am having a blast doing a more serious project in the C language, for the first time. I am consulting with books and also with some AI for code review and explanation as I am new to the language and to GTK (not new to programming).

https://codeberg.org/jjba23/lambdock

For a while already I have been looking for a dock that would work well in Wayland (like in my beloved Niri) with modern features, theme support and a hackable Lisp config (using libguile.h)

Could you help me out by checking the implementation for sanity (also the Meson build)? Also for developing on it, I'm using CCLS and Guix development environment and things are working amazingly well.

Only small bit of trouble in devex is with #include "wlr-foreign-toplevel-management-unstable-v1-protocol.h"

Also, all feedback is welcome, either on code level, or conceptual ideas, Thanks in advance

Core features of lambdock include:

  • Wayland Native: Built on GTK4 and gtk4-layer-shell for smooth positioning and desktop integration.
  • Declarative Lisp configuration : The power of Lisp in your configuratio with clean powerful declarative config and all possibilities at your disposal
  • Async Launching: Spawns commands asynchronously without freezing the dock UI.
  • Reproducible builds: Hermetic development environment provided via GNU Guix manifest and build definitions.
  • Dock auto-hide : You can let the dock stay out of your way with the smooth auto-hide feature.
  • Flexible icon system: lambdock has several mechanism in a best-effort way to render your wanted icons, respecting GTK theme
  • Theme support: lambdock has built-in themes you can choose from that are very unique, and also lets you extend and override those themes dynamically.
u/SandPrestigious2317 — 16 days ago
▲ 6 r/cprogramming+2 crossposts

I'm building a GTK4 C + Lisp dock application (a la CairoDock / macOS) - am I doing things right?

I am having a blast doing a more serious project in the C language, for the first time. I am consulting with books and also with some AI for code review and explanation as I am new to the language and to GTK (not new to programming).

https://codeberg.org/jjba23/lambdock

For a while already I have been looking for a dock that would work well in Wayland (like in my beloved Niri) with modern features, theme support and a hackable Lisp config (using libguile.h)

Could you help me out by checking the implementation for sanity (also the Meson build)? Also for developing on it, I'm using CCLS and Guix development environment and things are working amazingly well.

Only small bit of trouble in devex is with #include "wlr-foreign-toplevel-management-unstable-v1-protocol.h"

Also, all feedback is welcome, either on code level, or conceptual ideas, Thanks in advance

Core features of lambdock include:

  • Wayland Native: Built on GTK4 and gtk4-layer-shell for smooth positioning and desktop integration.
  • Declarative Lisp configuration : The power of Lisp in your configuratio with clean powerful declarative config and all possibilities at your disposal
  • Async Launching: Spawns commands asynchronously without freezing the dock UI.
  • Reproducible builds: Hermetic development environment provided via GNU Guix manifest and build definitions.
  • Dock auto-hide : You can let the dock stay out of your way with the smooth auto-hide feature.
  • Flexible icon system: lambdock has several mechanism in a best-effort way to render your wanted icons, respecting GTK theme
  • Theme support: lambdock has built-in themes you can choose from that are very unique, and also lets you extend and override those themes dynamically.
u/SandPrestigious2317 — 16 days ago
▲ 43 r/scheme+1 crossposts

GGG: Guile Glyph Generator v0.6.1 🪄 — Generate pixel-perfect SVG/PNG status badges in Lisp (Guile Scheme) - now upstream on Guix

I wanted to share an update on GGG (Guile Glyph Generator), a lightweight tool built with GNU Guile Scheme designed to generate crisp, minimalist status badges (1 to 3 parts) as SVG and PNG files. We hit v0.6.1 already :)

https://codeberg.org/jjba23/ggg

If you're tired of static, rigid badge generators, old badges in low quality PNG, or heavy JavaScript tooling for simple vector assets, GGG offers a functional, data-driven approach leveraging a custom Lisp DSL and SXML. All we need now is some community help to expand the library of available badges, and the world's READMEs will flourish.

Instead of relying on heavy browser engines or complex layout trees, GGG combines mathematical character-width estimation with standard SVG primitives using SXML (S-expressions representing XML):

  • Dynamic Text Metrics: Estimates pixel widths per character based on font size and length bounds to apply optimal padding automatically.
  • Geometric Precision: Renders with shape-rendering="geometricPrecision" enabled to prioritize clean vector geometry on high-DPI displays.
  • Data-Driven Declarative Specs: Simple association lists define structure, style, and vector paths.

Glyphs are defined cleanly inside Scheme modules (by default expected at (ggg config)):

Scheme

(define-module (ggg config)
  #:declarative? #t)

(define my-scheme-guile-glyph
  `((sections ((background . "#555") 
               (text . "Scheme")
               (color . "#fff")
               (logo . lambda))
              ((background . "#d0730f") 
               (text . "Guile")
               (color . "#fff")))
    (id . scheme-guile)))

;; Export your list of glyphs to render
(define ggg-glyphs
  (list my-scheme-guile-glyph))

GGG includes a collection of free-licensed vector icons out of the box (Emacs, GNU, Guix, Lambda, Scala, Rust, Fish, etc.) in resources/svg-paths.

🦸🏼 Interactive REPL Workflow

Because GGG is built on Guile Scheme, you don't need to endure slow edit-save-compile-run loops.

Connected to an environment like GNU Guix + Emacs + Geiser/Arei, you get a live development feedback loop:

  • Inspect, evaluate, and tweak individual badge calculation functions on the fly.
  • Test new font sizing logic or custom SVG path integrations instantly inside a live REPL.

GGG is distributed under free software licenses (AGPLv3+ for code, GFDL v1.3+ for documentation).

Also, feel free to look in ./dist folder where I upload my personal generated glyphs (some might be useful to you)

If you use Guix, dependencies (guile, imagemagick) are managed seamlessly:

Bash

# Enter an ephemeral development shell
guix shell -f guix.scm

# Run GGG with your custom configuration
ggg --file ./glyphs/jjba23.scm --destination ./dist

Container images are also available on DockerHub:

docker run -v /path/to/local/glyphs:/config \
  docker.io/jjba23/ggg:latest ggg --file /config/glyphs.scm --destination /config/dist

🔗 Project Links & Resources

Contributions, feedback, and pull requests are always welcome!

Happy hacking! λ

u/SandPrestigious2317 — 1 month ago
▲ 43 r/emacs+2 crossposts

Emacs Eglot for Scala and Kotlin (JVM) and some nifty workarounds for day-to-day usage

Find the blog post here: https://jointhefreeworld.org/blog/articles/emacs/emacs-eglot-scala-kotlin/index.html

When Emacs 29 made eglot the built-in, default Language Server Protocol (LSP) client, many of us rejoiced.

It is lightweight, fast, adheres strictly to Emacs philosophy, and doesn’t try to reinvent the wheel.

However, being minimal means that when an LSP server steps out of line or acts quirky, eglot doesn’t provide a million customizable toggles to fix it out-of-the-box. Instead, it expects you to leverage the power of Emacs Lisp.

In this post, I will dissect my production-ready eglot setup (part of my heks-emacs configuration) which I use in my day-to-day work, with Scala and Kotlin (and some Java).

For reference, find my full Eglot config here: https://codeberg.org/jjba23/heks-emacs/src/branch/trunk/src/modules/eglot.el

reddit.com
u/SandPrestigious2317 — 1 month ago
▲ 109 r/scheme+3 crossposts

[Niri] Heks GNU/Linux - declarative Lisp rice λ go down the rabbit hole 🐰 (Fedora & Debian) and make it yours, this photo-shoot was using modus-vivendi palette (and supporting many more) on my laptop

The witches' GNU/Linux: modular, flexible, reproducible, powered by Lisp and Fedora / Debian + GNOME / Niri

https://codeberg.org/jjba23/heks-linux

Heks GNU/Linux 🧙‍♂️ is a modular, reproducible system configuration designed for power users, developers, and researchers.

u/SandPrestigious2317 — 1 month ago

[6 YoE, Senior Software Engineer, Senior Software Engineer, Netherlands]

I would very much appreciate help in landing a role at a new company, as I am quite unsatisfied with the direction my current company is going in. (increasingly more corporate, more management layers, in 2 years time, more than 3 team reshufflings)

I am looking to continue as Senior Software Engineer (mostly backend)

I would only go for local or remote work, and would not think of relocating right now.

I would very much appreciate a language check, but also marketability. I don't want to come across too tech-focused, I also want to highlight the impact I make at companies. It would also be great to get feedback on the resume layout, since I am using my custom resume generator to render it. Is it appealing, legible, pleasant, ATS friendly?

Thanks in advance.

u/SandPrestigious2317 — 1 month ago
▲ 78 r/emacs+1 crossposts

modusregel: a simple, beautiful mode-line for Emacs

Find the modusregel project here:

https://codeberg.org/jjba23/modusregel

modusregel means mode line in the Dutch language.

This package provides a clean, simple, elegant, and beautiful mode line for Emacs (the bottom bar), built with customization, beauty and performance in mind. It is fully compatible with both Emacs GUI and TUI viewports.

  • Tree-Sitter Smart Major Mode-Mapping: prettifies major mode names, and detects -ts-mode variants (e.g., rust-ts-mode) and cleans them up beautifully (e.g., Rust).
  • LSP & Flymake Ready: Built-in, non-intrusive indicators for Eglot and Flymake counters.
  • Lightweight & Fast: Written in pure, efficient Emacs Lisp with performance in mind—no external dependencies.
  • TUI/GUI Parity: Designed to look crisp and aligned whether you are running Emacs in a terminal or a graphical window.
u/SandPrestigious2317 — 2 months ago
▲ 14 r/emacs

Finally go-to-definition w/ Eglot on JVM languages (Kotlin and Java)! do you know how to improve it?

Hey everyone, after much frustration and diving deep into my setup, I can finally say I will be using IntelliJ a lot less, for my daily work (personal projects and 90% of life already in Emacs, but work wasn't)

Kotlin-LSP (by Intellij team) and Eclipse JDTLS have go-to-definition problems for me, specially for 3rd party packages

Links to inside JARs didn't work, e.g. jar:///home/joe/.gradle/.../ConfigurationProperties.java or jar:file:///home/joe/.gradle/caches/modules-2/files-2.1/io.github.oshai/kotlin-logging-jvm/8.0.01/328a6389fbbf23e94b71586d3abb545bc86303a/kotlin-logging-jvm-8.0.01-sources.jar!/commonMain/io/github/oshai/kotlinlogging/KotlinLogging.kt

Finally, I am able to use Eglot nicely with Kotlin & Java thanks to the power of Emacs

EDIT: I use jarchive and eglot-java packages as well

Do you think this (or an improved way) should be upstreamed to Eglot, so that people out-of-the box get this fixed?

  (defun fix-ls-jar-uri (orig-fn uri &rest args)
    "Fix malformed jar:/// URIs sent by kotlin-language-server so jarchive can read them."
    (if (and (stringp uri) (string-prefix-p "jar:///" uri))
        ;; Inject 'file:' to make it a standard 'jar:file:///' URI
        (apply orig-fn (replace-regexp-in-string "^jar:///" "jar:file:///" uri) args)
      (apply orig-fn uri args)))

  ;; Apply the patch to Eglot's URI parser (handles both old and new Eglot versions)
  (if (fboundp 'eglot-uri-to-path)
      (advice-add 'eglot-uri-to-path :around #'fix-ls-jar-uri)
    (advice-add 'eglot--uri-to-path :around #'fix-ls-jar-uri))
reddit.com
u/SandPrestigious2317 — 3 months ago
▲ 41 r/scheme+1 crossposts

Iter Vitae is a free software project that aims to make it easy and maintainable to generate an attractive, modern and customizable Curriculum Vitae or resume for yourself and to allow you to define the course of your life and career directly in Guile Scheme code.

Find the project on Codeberg: https://codeberg.org/jjba23/iter-vitae

Everyone has the right to create a professional-looking Curriculum Vitae, using free software, without the constraints of proprietary software, lengthy setup processes, or a lack of freedom to modify layouts.

Traditional word processors like LibreOffice or similar can be cumbersome when trying to create a custom CV.

Iter Vitae offers an alternative by embracing the spirit of hacking and freedom, enabling you to customize every aspect of your CV.

With this tool, you can define the content, layout, and presentation of your CV directly in code, making it highly flexible and maintainable.

The tool separates data from its presentation (following the principles of the Model-View-Controller or MVC architecture), so you can focus on the data itself without worrying about formatting or styling.

Newly added as of v0.7.1 is the multi-theme support. Each theme is fully independent and can use different techniques. For example ef-cyprus is using Olive CSS, IBM Plex fonts, and Phosphor icons, while fundamental theme is completely doing something else.

Build a Curriculum Vitae for your next 40 years

This tool isn't just about creating a one-off CV — it's designed for long-term use, so you can update and evolve your resume over the years. The software supports multilingual content and is fully extensible, allowing you to add new data entries, customize the design, etc.

Also, version-control your CV code, and enjoy all the benefits. Work with a sane and flexible multi-lingual compatible data model.

Remember that with Guile Scheme, and the Lisp super-powers, everything is extensible, hackable and modifiable at any moment, giving you ultimate control and power.

See here a sample job definition

(define joe-job-ikea
        `((name (all . "IKEA - Ingka Digital"))
          (location (en . "Amsterdam, The Netherlands")
                    (nl . "Amsterdam, Nederland"))
          (position (en . "Software Engineer")
                    (nl . "Software Engineer"))
          (time (en . "January 2022 => March 2023")
                (nl . "Januari 2022 => Maart 2023"))
          (experience ((en . "Experience in Go, Java, Spring Boot and Gradle, Maven.")
                       (nl . "Ervaring in Go, Java, Spring Boot en Gradle, Maven."))
                      ((en . "Google Cloud Platform, Pub/Sub, Serverless computing.")
                       (nl . "Google Cloud Platform, Pub/Sub, Serverless computing."))
                      ((en . "Kubernetes and Docker, Terraform, Infrastructure-as-Code.")
                       (nl . "Kubernetes en Docker, Terraform, Infrastructure-as-Code."))
                      ((en . "PostgreSQL, BigTable, ElasticSearch, Redis, Firebase.")
                       (nl . "PostgreSQL, BigTable, ElasticSearch, Redis, Firebase")))))
u/SandPrestigious2317 — 4 months ago
▲ 148 r/scheme+3 crossposts

Lisp (and Scheme) allows you to express complex systems and problem domains in more simple terms than any other language can.

For all its brilliance, Haskell resists most of the attempts people make to just hack and write useful code quickly.

jointhefreeworld.org
u/SandPrestigious2317 — 4 months ago