base_layer = "1_base"
caps_lock_layer = "2_shift"

[layers]
1_base = [
    # Dead keys
    { scan_code = 0x29, characters = "\u0302" }, # Combining Circumflex Accent
    { scan_code = 0x0D, characters = "\u0300" }, # Combining Grave Accent
    { scan_code = 0x1B, characters = "\u0301" }, # Combining Acute Accent
    # Numbers and letters
    { scan_code = 0x02, characters = "1234567890-" },
    { scan_code = 0x10, characters = "xvlcwkhgfqß" },
    { scan_code = 0x1E, characters = "uiaeosnrtdy" },
    { scan_code = 0x2C, characters = "üöäpzbm,.j" },
    # Layer modifiers
    { scan_code = 0x2A, layer = "2_shift", virtual_key = 0xA0 }, # left shift
    { scan_code = 0xE036, layer = "2_shift", virtual_key = 0xA1 }, # right shift
    { scan_code = 0x3A, layer = "3_symbols" }, # caps lock
    { scan_code = 0x2B, layer = "3_symbols" }, # `\` on US layout, `#` key on german layout
    { scan_code = 0x56, layer = "4_navigation_numpad" }, # `>` on german layout
    { scan_code = 0xE038, layer = "4_navigation_numpad" }, # `right alt` US layout, `Alt Gr` on german layout
    { scan_code = 0x021D, virtual_keys = [] }, # ignore additional scan code from `Alt Gr`
]

2_shift = [
    # Dead keys
    { scan_code = 0x29, characters = "\u030C" }, # Combining Caron
    { scan_code = 0x0D, characters = "\u0327" }, # Combining Cedilla
    { scan_code = 0x1B, characters = "\u0303" }, # Combining Tilde
    # Numbers and letters
    { scan_code = 0x02, characters = "°§ℓ»«$€„“”—" },
    { scan_code = 0x10, characters = "XVLCWKHGFQẞ" },
    { scan_code = 0x1E, characters = "UIAEOSNRTDY" },
    { scan_code = 0x2C, characters = "ÜÖÄPZBM–•J" },
    # Layer modifiers
    { scan_code = 0x2A, lock = "2_shift", layer = "1_base", virtual_key = 0xA0 }, # left shift
    { scan_code = 0xE036, lock = "2_shift", layer = "1_base", virtual_key = 0xA0 }, # right shift
    { scan_code = 0x3A, layer = "5_greek" }, # caps lock
    { scan_code = 0x2B, layer = "5_greek" }, # `\` on US layout, `#` key on german layout
]

3_symbols = [
    { scan_code = 0x0D, characters = "\u030A" }, # Combining Ring Above
    { scan_code = 0x1B, characters = "\u0338" }, # Combining Long Solidus Overlay
    { scan_code = 0x02, characters = "¹²³›‹¢¥‚‘’" },
    { scan_code = 0x10, characters = "…_[]^!<>=&ſ" },
    { scan_code = 0x1E, characters = "\\/{}*?()-:@" },
    { scan_code = 0x2C, characters = "#$|~`+%\"`;" },
    # Layer modifiers
    { scan_code = 0x2A, layer = "5_greek", virtual_key = 0xA0 }, # left shift
    { scan_code = 0xE036, layer = "5_greek", virtual_key = 0xA1 }, # right shift
    { scan_code = 0x56, layer = "6_greek" }, # `>` on german layout
    { scan_code = 0xE038, layer = "6_greek" }, # `right alt` US layout, `Alt Gr` on german layout
]

4_navigation_numpad = [
    { scan_code = 0x29, characters = "\u0307" }, # Combining Dot Above
    { scan_code = 0x0D, characters = "\u0308" }, # Combining Diaeresis
    { scan_code = 0x1B, characters = "\u030B" }, # Combining Double Acute Accent
    { scan_code = 0x02, characters = "ªº№⋮·£¤0/*-" },
    { scan_code = 0x15, characters = "¿" },
    { scan_code = 0x23, characters = "¡" },
    { scan_code = 0x1B, characters = "˝" },
    # Navigation
    { scan_code = 0x10, virtual_keys = [0x21, 0x08, 0x26, 0x2E, 0x22] },
    { scan_code = 0x1E, virtual_keys = [0x24, 0x25, 0x28, 0x27, 0x23] },
    { scan_code = 0x2C, virtual_keys = [0x1B, 0x09, 0x2D, 0x0D] },
    # Numpad
    { scan_code = 0x16, virtual_keys = [0x67, 0x68, 0x69, 0x6B, 0x6D] },
    { scan_code = 0x24, virtual_keys = [0x64, 0x65, 0x66] },
    { scan_code = 0x27, characters = ",." },
    { scan_code = 0x31, characters = ":" },
    { scan_code = 0x32, virtual_keys = [0x61, 0x62, 0x63] },
    { scan_code = 0x35, characters = ";" },
    { scan_code = 0x39, virtual_keys = [0x60] },
    # Layer modifiers
    { scan_code = 0x56, lock = "4_navigation_numpad", layer = "1_base" }, # `>` on german layout
    { scan_code = 0xE038, lock = "4_navigation_numpad", layer = "1_base" }, # `right alt` US layout, `Alt Gr` on german layout
    { scan_code = 0x3A, layer = "6_greek" }, # caps lock
    { scan_code = 0x2B, layer = "6_greek" }, # `\` on US layout, `#` key on german layout
]

5_greek = [
    { scan_code = 0x02, characters = "₁₂₃♂♀⚥ϰ⟨⟩₀-" },
    { scan_code = 0x10, characters = "ξ\u0000λχωκψγφς" },
    { scan_code = 0x1E, characters = "\u0000ιαεοσνρτδυ" },
    { scan_code = 0x2C, characters = "\u0000ϵηπζβμϱϑθ" },
    { scan_code = 0x39, characters = "\u00A0" }, # no-break space
]

6_greek = [
    { scan_code = 0x02, characters = "¬∨∧⊥∡∥→∞∝⌀╌" },
    { scan_code = 0x10, characters = "Ξ√ΛℂΩ⨯ΨΓΦℚ∘" },
    { scan_code = 0x1E, characters = "⊂∫∀∃∈Σℕℝ∂Δ∇" },
    { scan_code = 0x2C, characters = "∪∩ℵΠℤ⇐⇔⇒↦Θ" },
    { scan_code = 0x39, characters = "\u202F" }, # narrow no-break space
]