Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.jylhis.com/llms.txt

Use this file to discover all available pages before exploring further.

Marchyo provides a unified way to configure keyboard layouts, variants, input methods (IMEs), and XKB options across the system (TTY/console) and the desktop environment (Hyprland + fcitx5).

Defaults

Out of the box:
  • layouts = [ { layout = "us"; variant = "altgr-intl"; } "fi" ]
  • options = [ "grp:win_space_toggle" ] (Super+Space switches layout/IME)
  • composeKey = "menu"
The altgr-intl variant (“English (US, intl., AltGr dead keys)”) behaves like a plain US layout for the unmodified keys — ', ", `, ~, ^ produce their normal characters, not dead keys. The international characters live behind the AltGr modifier (Right Alt).

Typography on AltGr

SequenceResult
AltGr + - (en dash)
AltGr + Shift + - (em dash)
AltGr + 9 / AltGr + 0 / (curly single quotes)
AltGr + Shift + 9 / AltGr + Shift + 0 / (curly double quotes)
AltGr + [ / AltGr + ]« / » (guillemets)
AltGr + 5
AltGr + 4¤ (currency)
The Menu key acts as Compose for everything else (Menu then ' then eé, Menu then - - -, etc.). If you want the stronger dead-key behavior of plain us(intl) (where ', ", `, ~, ^ wait for a follow-up letter):
marchyo.keyboard.layouts = [ { layout = "us"; variant = "intl"; } "fi" ];
If you have no Menu key, point Compose elsewhere (or disable it):
marchyo.keyboard.composeKey = "caps";   # or "rwin", "rctrl", or null

Layouts

The marchyo.keyboard.layouts option accepts a list of layouts. Each can be a simple string or an attribute set for advanced configuration.

Simple layouts

marchyo.keyboard.layouts = [
  "us"
  "fi"
  "de"
];

Layouts with variants

marchyo.keyboard.layouts = [
  "us"
  { layout = "us"; variant = "intl"; }   # US International with dead keys
  { layout = "us"; variant = "dvorak"; }
];

Layouts with input methods

For CJK languages and other complex input, specify an IME:
marchyo.keyboard.layouts = [
  "us"
  { layout = "cn"; ime = "pinyin"; }   # Chinese with Pinyin
  { layout = "jp"; ime = "mozc"; }     # Japanese with Mozc
  { layout = "kr"; ime = "hangul"; }   # Korean with Hangul
];
When an entry includes ime, the input method engine is automatically activated when you switch to that layout.

Available IMEs

IMELanguageRequired package
"pinyin"Chinesefcitx5-chinese-addons
"mozc"Japanesefcitx5-mozc
"hangul"Koreanfcitx5-hangul
"unicode"Unicode picker
Required packages are installed automatically when an IME is specified.

Layout attribute set options

OptionTypeDefaultDescription
layoutstringKeyboard layout code (e.g., "us", "fi", "cn")
variantstring""Layout variant (e.g., "intl", "dvorak")
imestring or nullnullInput method engine
labelstring or nullnullDisplay label (auto-generated if null)

Keyboard switching

XKB options

Use marchyo.keyboard.options for standard XKB options. Default: ["grp:win_space_toggle"] (Super+Space to switch layouts).
marchyo.keyboard.options = [
  "grp:win_space_toggle"   # Super+Space to switch inputs
  "ctrl:swapcaps"          # Swap Caps Lock and Left Control
  "caps:escape"            # Map Caps Lock to Escape
];

Compose key

The compose key lets you type special characters via key sequences (e.g., Compose + ' + e = é).
marchyo.keyboard.composeKey = "menu";  # Default: Menu key
ValueKey
"menu"Menu key (default)
"ralt"Right Alt — avoid when using us(altgr-intl) or us(intl) (it needs Right Alt as AltGr)
"rwin"Right Super/Windows
"caps"Caps Lock
nullDisable compose key

IME behavior

Auto-activation

By default, switching to a layout with an IME activates it automatically. Disable this to require manual activation:
marchyo.keyboard.autoActivateIME = false;

Manual IME toggle

Configure a key to manually toggle IME on/off:
marchyo.keyboard.imeTriggerKey = [ "Super+I" ];   # Default

Full example

marchyo.keyboard = {
  layouts = [
    { layout = "us"; variant = "altgr-intl"; }
    { layout = "fi"; }
    { layout = "us"; variant = "intl"; }
    { layout = "cn"; ime = "pinyin"; }
    { layout = "jp"; ime = "mozc"; }
  ];
  options = [ "grp:win_space_toggle" ];
  composeKey = "menu";
  autoActivateIME = true;
  imeTriggerKey = [ "Super+I" ];
};

How it works

  1. NixOS (services.xserver.xkb) — Basic layout codes and variants are applied to the console/TTY for fallback support outside the graphical environment.
  2. Hyprland (home.keyboard) — Layout and XKB options are passed to Hyprland’s input configuration.
  3. fcitx5 — Acts as the authoritative input manager in the graphical environment, managing layouts, IMEs, and layout switching.

All options reference

OptionTypeDefaultDescription
marchyo.keyboard.layoutslist of strings or attrsets[{ layout = "us"; variant = "altgr-intl"; } "fi"]Keyboard layouts and input methods
marchyo.keyboard.optionslist of strings["grp:win_space_toggle"]XKB keyboard options
marchyo.keyboard.composeKeystring or null"menu"Compose key
marchyo.keyboard.autoActivateIMEbooltrueAuto-activate IME on layout switch
marchyo.keyboard.imeTriggerKeylist of strings["Super+I"]Manual IME toggle keys
Last modified on May 14, 2026