On Umlaute (with Espanso)

December 22, 2025

Technology

Recently, i built a new mechanical Keyboard. I based this on an american layout, as the [, ] and \ Keys are more accessible. This poses a problem how to type the German Characters Ä, Ü, Ö ("Umlaute") and ß. Ideally, i'd want to implement this by customizing the firmware1 of the keyboard. But as the base-layout is US, there is no way for the micro-controller on the board to communicate the characters to the OS. So there are 2 options

  1. Register the keyboard as a german keyboard, and "rebuild" the US Layout in QMK. (time-intensive)
  2. Send the characters as unicodes

Option 2 is problematic too, since i use multiple operating systems (Fedora on the Desktop, a Macbook and Windows for Work). Since different OSes require different methods of sending unicode characters, i'd have to build in a switch, where the current os can be configured. This, again, is time-intensive. What then? Implement the Umlaute on the software layer. This can be done with a hotkey application. Requirements:

  • Open-Source (Since this is also a keylogger, basically)
  • Cross-Platform (I want to reuse the configuration, DRY!)

My choice fell on Espanso. On Fedora, there are 2 installation options

  1. Use the Package from the Terra repositories. The package is created directly from the Github-actions pipeline. This is a potential security risk2.
  2. Manual compilation

The rest of this post is a set of instructions on how i did this. To replicate, also refer to the official Instructions.

Compiling, installing and setting up Espanso on Fedora Linux

Prerequisites

  • Fedora system
  • Cargo / Rust
  • X11 or Wayland3

Install required packages:

001sudo dnf install cargo
002sudo dnf install wxGTK-devel
003sudo dnf install libcap # For setting permissions for keyboard access later

Compile Espanso

001git clone https://github.com/espanso/espanso.git --depth 1
002cd espanso
001cargo build --release --no-default-features --features wayland,modulo,vendored-tl
001sudo cp target/release /opt/espanso/espanso
002sudo chmod +x /usr/local/bin/espanso

Espanso Capabilities

001sudo setcap cap_dac_override+ep /opt/espanso/espanso
002getcap /opt/espanso/espanso

Configure German Umlaute

File: ~/.config/espanso/match/german.yml

  • Prefix: ;;
  • word: false → anywhere
001matches:
002 - trigger: ";;a"
003 replace: "ä"
004 word: false
005 - trigger: ";;A"
006 replace: "Ä"
007 word: false
008 - trigger: ";;o"
009 replace: "ö"
010 word: false
011 - trigger: ";;O"
012 replace: "Ö"
013 word: false
014 - trigger: ";;u"
015 replace: "ü"
016 word: false
017 - trigger: ";;U"
018 replace: "Ü"
019 word: false
020 - trigger: ";;s"
021 replace: "ß"
022 word: false

Here is a Github-Gist.

Start Espanso

001espanso register
002espanso start
003espanso status

Test in editor:

001;;a → ä
002;;A → Ä
003;;o → ö
004;;O → Ö
005;;u → ü
006;;U → Ü
007;;s → ß

Footnotes

  1. Link

  2. Link

  3. Link