diff --git a/.gitmodules b/.gitmodules
index 8a1429aa478515e5a29fcbfce4def04c337004f3..e8ad259c0116578805e374e9be0b376606f73970 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,3 +4,6 @@
 [submodule "voiceinput-shared/src/main/ml"]
 	path = voiceinput-shared/src/main/ml
 	url = https://gitlab.futo.org/keyboard/voice-input-models.git
+[submodule "java/assets/layouts"]
+	path = java/assets/layouts
+	url = https://github.com/futo-org/futo-keyboard-layouts.git
diff --git a/README.md b/README.md
index 8be35ebf702cb57f40efe074ee82f5eef9d3489b..9e12e193aeac2af86cba6406bc3dbda05e956a58 100644
--- a/README.md
+++ b/README.md
@@ -2,10 +2,14 @@
 
 The goal is to make a good keyboard that doesn't spy on users. This repository is a fork of [LatinIME (the Android Open-Source Keyboard)](https://android.googlesource.com/platform/packages/inputmethods/LatinIME).
 
-The code is licensed under the [FUTO Source First License 1.0](LICENSE.md).
+The code is licensed under the [FUTO Source First License 1.1](LICENSE.md).
 
 Check out the [FUTO Keyboard Wiki](https://gitlab.futo.org/alex/keyboard-wiki/-/wikis/FUTO-Keyboard)
 
+## Layouts
+
+If you want to contribute layouts, check out the [layouts repo](https://github.com/futo-org/futo-keyboard-layouts).
+
 ## Building
 
 When cloning the repository, you must perform a recursive clone to fetch all dependencies:
diff --git a/java/assets/layouts b/java/assets/layouts
new file mode 160000
index 0000000000000000000000000000000000000000..5b89851d69be1be799c07021c65114c176ada625
--- /dev/null
+++ b/java/assets/layouts
@@ -0,0 +1 @@
+Subproject commit 5b89851d69be1be799c07021c65114c176ada625
diff --git a/java/assets/layouts/Arabic/arabic.yaml b/java/assets/layouts/Arabic/arabic.yaml
deleted file mode 100644
index dc7f061251fd92ee6bdd64e534793467964fc052..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Arabic/arabic.yaml
+++ /dev/null
@@ -1,131 +0,0 @@
-name: Arabic (AOSP)
-description: The default Arabic keyboard from AOSP Keyboard.
-languages: ar
-rows:
-  - letters:
-      # U+0636: "ض" ARABIC LETTER DAD
-      - "\u0636"
-
-      # U+0635: "ص" ARABIC LETTER SAD
-      - "\u0635"
-
-      # U+062B: "Ø«" ARABIC LETTER THEH
-      - "\u062B"
-
-      # U+0642: "Ù‚" ARABIC LETTER QAF
-      # U+06A8: "Ú¨" ARABIC LETTER QAF WITH THREE DOTS ABOVE
-      - ["\u0642", "\u06A8"]
-
-      # U+0641: "ف" ARABIC LETTER FEH
-      # U+06A4: "Ú¤" ARABIC LETTER VEH
-      # U+06A2: "Ú¢" ARABIC LETTER FEH WITH DOT MOVED BELOW
-      # U+06A5: "Ú¥" ARABIC LETTER FEH WITH THREE DOTS BELOW -->
-      - ["\u0641", "\u06A4", "\u06A2", "\u06A5"]
-
-      # U+063A: "غ" ARABIC LETTER GHAIN
-      - "\u063A"
-
-      # U+0639: "ع" ARABIC LETTER AIN
-      - "\u0639"
-
-      # U+0647: "Ù‡" ARABIC LETTER HEH
-      # U+FEEB: "ﻫ" ARABIC LETTER HEH INITIAL FORM
-      # U+0647 U+200D: ARABIC LETTER HEH + ZERO WIDTH JOINER
-      - ["\u0647", "\uFEEB|\u0647\u200D"]
-
-      # U+062E: "Ø®" ARABIC LETTER KHAH
-      - "\u062E"
-
-      # U+062D: "Ø­" ARABIC LETTER HAH
-      - "\u062D"
-
-      # U+062C: "ج" ARABIC LETTER JEEM
-      # U+0686: "Ú†" ARABIC LETTER TCHEH
-      - ["\u062C", "\u0686"]
-
-  - letters:
-      # U+0634: "Ø´" ARABIC LETTER SHEEN
-      # U+069C: "ڜ" ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE
-      - ["\u0634", "\u069C"]
-
-      # U+0633: "س" ARABIC LETTER SEEN
-      - "\u0633"
-
-      # U+064A: "ÙŠ" ARABIC LETTER YEH
-      # U+0626: "ئ" ARABIC LETTER YEH WITH HAMZA ABOVE
-      # U+0649: "Ù‰" ARABIC LETTER ALEF MAKSURA
-      - ["\u064A", "\u0626", "\u0649"]
-
-      # U+0628: "ب" ARABIC LETTER BEH
-      # U+067E: "Ù¾" ARABIC LETTER PEH
-      - ["\u0628", "\u067E"]
-
-      # U+0644: "Ù„" ARABIC LETTER LAM
-      # U+FEFB: "ï»»" ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
-      # U+0627: "ا" ARABIC LETTER ALEF
-      # U+FEF7: "ï»·" ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
-      # U+0623: "Ø£" ARABIC LETTER ALEF WITH HAMZA ABOVE
-      # U+FEF9: "ﻹ" ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM
-      # U+0625: "Ø¥" ARABIC LETTER ALEF WITH HAMZA BELOW
-      # U+FEF5: "ﻵ" ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
-      # U+0622: "Ø¢" ARABIC LETTER ALEF WITH MADDA ABOVE
-      - ["\u0644", "\uFEFB|\u0644\u0627", "\uFEF7|\u0644\u0623", "\uFEF9|\u0644\u0625", "\uFEF5|\u0644\u0622"]
-
-      # U+0627: "ا" ARABIC LETTER ALEF
-      # U+0622: "Ø¢" ARABIC LETTER ALEF WITH MADDA ABOVE
-      # U+0621: "Ø¡" ARABIC LETTER HAMZA
-      # U+0623: "Ø£" ARABIC LETTER ALEF WITH HAMZA ABOVE
-      # U+0625: "Ø¥" ARABIC LETTER ALEF WITH HAMZA BELOW
-      # U+0671: "Ù±" ARABIC LETTER ALEF WASLA -->
-      - ["\u0627", "!fixedColumnOrder!5", "\u0622", "\u0621", "\u0623", "\u0625", "\u0671"]
-
-      # U+062A: "ت" ARABIC LETTER TEH
-      - "\u062A"
-
-      # U+0646: "Ù†" ARABIC LETTER NOON
-      - "\u0646"
-
-      # U+0645: "Ù…" ARABIC LETTER MEEM
-      - "\u0645"
-
-      # U+0643: "Ùƒ" ARABIC LETTER KAF
-      # U+06AF: "Ú¯" ARABIC LETTER GAF
-      # U+06A9: "Ú©" ARABIC LETTER KEHEH
-      - ["\u0643", "\u06AF", "\u06A9"]
-
-      # U+0637: "Ø·" ARABIC LETTER TAH
-      - "\u0637"
-  - letters:
-      # U+0630: "Ø°" ARABIC LETTER THAL
-      - "\u0630"
-
-      # U+0621: "Ø¡" ARABIC LETTER HAMZA
-      - "\u0621"
-
-      # U+0624: "ؤ" ARABIC LETTER WAW WITH HAMZA ABOVE
-      - "\u0624"
-
-      # U+0631: "ر" ARABIC LETTER REH
-      - "\u0631"
-
-      # U+0649: "Ù‰" ARABIC LETTER ALEF MAKSURA
-      # U+0626: "ئ" ARABIC LETTER YEH WITH HAMZA ABOVE
-      - ["\u0649", "\u0626"]
-
-      # U+0629: "Ø©" ARABIC LETTER TEH MARBUTA
-      - "\u0629"
-
-      # U+0648: "Ùˆ" ARABIC LETTER WAW
-      - "\u0648"
-
-      # U+0632: "ز" ARABIC LETTER ZAIN
-      # U+0698: "Ú˜" ARABIC LETTER JEH
-      - ["\u0632", "\u0698"]
-
-      # U+0638: "ظ" ARABIC LETTER ZAH
-      - "\u0638"
-
-      # U+062F: "د" ARABIC LETTER DAL
-      - "\u062F"
-
-      - "$delete"
\ No newline at end of file
diff --git a/java/assets/layouts/Arabic/farsi.yaml b/java/assets/layouts/Arabic/farsi.yaml
deleted file mode 100644
index 5f2c2df0af284c32c183ed18c5a421a540549975..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Arabic/farsi.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-name: Farsi
-languages: fa
-useZWNJKey: true
-rows:
-  - letters: # rowkeys_farsi1.xml
-    - ['ض']
-    - ['ص']
-    - ['Ø«']
-    - ['Ù‚']
-    - ['ف']
-    - ['غ']
-    - ['ع']
-    - ['ه', "ﻫ|ه\u200d", 'هٔ', 'ة', '%']
-    - ['Ø®']
-    - ['Ø­']
-    - ['ج']
-  - letters: # rowkeys_farsi2.xml
-    - ['Ø´']
-    - ['س']
-    - ['ی', 'ئ', 'ي', 'ﯨ|ى']
-    - ['ب']
-    - ['Ù„']
-    - ['ا', '!fixedColumnOrder!5', 'ٱ', 'ء', 'آ', 'أ', 'إ']
-    - ['ت', 'ة']
-    - ['Ù†']
-    - ['Ù…']
-    - ['Ú©', 'Ùƒ']
-    - ['Ú¯']
-  - letters: # rowkeys_farsi3.xml
-    - ['ظ']
-    - ['Ø·']
-    - ['Ú˜']
-    - ['ز']
-    - ['ر']
-    - ['Ø°']
-    - ['د']
-    - ['Ù¾']
-    - ['و', 'ؤ']
-    - ['Ú†']
-    - $delete # forces no shift key
\ No newline at end of file
diff --git a/java/assets/layouts/Arabic/kurdish.yaml b/java/assets/layouts/Arabic/kurdish.yaml
deleted file mode 100644
index 13bd457ce56ddd6fd9f3dae08c55ec961ce3beaa..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Arabic/kurdish.yaml
+++ /dev/null
@@ -1,107 +0,0 @@
-name: Kurdish
-languages: ckb
-rows:
-  - letters: # rowkeys_kurdish1.xml
-    # U+0642: Ù‚ ARABIC LETTER QAF
-    - {type: case, normal: ["\u0642", "`"], shifted: ["`", "\u0642"]}
-
-    # U+0648: Ùˆ ARABIC LETTER WAW
-    - {type: case, normal: ["\u0648", "\u0648\u0648"], shifted: ["\u0648\u0648", "\u0648"]}
-
-    # U+06D5: Û• ARABIC LETTER AE
-    # U+064A: ÙŠ ARABIC LETTER YEH
-    - {type: case, normal: ["\u06d5", "\u064a"], shifted: ["\u064a", "\u06d5"]}
-
-    # U+0631: ر ARABIC LETTER REH
-    # U+0695: Ú• ARABIC LETTER REH WITH SMALL V BELOW
-    - {type: case, normal: ["\u0631", "\u0695"], shifted: ["\u0695", "\u0631"]}
-
-    # U+062A: ت ARABIC LETTER TEH
-    # U+0637: Ø· ARABIC LETTER TAH
-    - {type: case, normal: ["\u062a", "\u0637"], shifted: ["\u0637", "\u062a"]}
-
-    # U+06CC: ی ARABIC LETTER FARSI YEH
-    # U+06CE: ÛŽ ARABIC LETTER YEH WITH SMALL V
-    - {type: case, normal: ["\u06cc", "\u06ce"], shifted: ["\u06ce", "\u06cc"]}
-
-    # U+0626: ئ ARABIC LETTER YEH WITH HAMZA ABOVE
-    # U+0621: Ø¡ ARABIC LETTER HAMZA
-    - {type: case, normal: ["\u0626", "\u0621"], shifted: ["\u0621", "\u0626"]}
-
-    # U+062D: Ø­ ARABIC LETTER HAH
-    # U+0639: ع ARABIC LETTER AIN
-    - {type: case, normal: ["\u062d", "\u0639"], shifted: ["\u0639", "\u062d"]}
-
-    # U+06C6: Û† ARABIC LETTER OE
-    # U+0624: ؤ ARABIC LETTER WAW WITH HAMZA ABOVE
-    - {type: case, normal: ["\u06c6", "\u0624"], shifted: ["\u0624", "\u06c6"]}
-
-    # U+067E: Ù¾ ARABIC LETTER PEH
-    # U+062B: Ø« ARABIC LETTER THEH
-    - {type: case, normal: ["\u067e", "\u062b"], shifted: ["\u062b", "\u067e"]}
-
-  - letters: # rowkeys_kurdish2.xml
-    # U+0627: ا ARABIC LETTER ALEF
-    # U+0622: آ ARABIC LETTER ALEF WITH MADDA ABOVE
-    - {type: case, normal: ["\u0627", "\u0622"], shifted: ["\u0622", "\u0627"]}
-
-    # U+0633: س ARABIC LETTER SEEN
-    # U+0634: Ø´ ARABIC LETTER SHEEN
-    - {type: case, normal: ["\u0633", "\u0634"], shifted: ["\u0634", "\u0633"]}
-
-    # U+062F: د ARABIC LETTER DAL
-    # U+0630: Ø° ARABIC LETTER THAL
-    - {type: case, normal: ["\u062f", "\u0630"], shifted: ["\u0630", "\u062f"]}
-
-    # U+0641: ف ARABIC LETTER FEH
-    # U+0625: إ ARABIC LETTER ALEF WITH HAMZA BELOW
-    - {type: case, normal: ["\u0641", "\u0625"], shifted: ["\u0625", "\u0641"]}
-
-    # U+06AF: Ú¯ ARABIC LETTER GAF
-    # U+063A: غ ARABIC LETTER GHAIN
-    - {type: case, normal: ["\u06af", "\u063a"], shifted: ["\u063a", "\u06af"]}
-
-    # U+0647: Ù‡ ARABIC LETTER HEH
-    # U+200C: ‌ ZERO WIDTH NON-JOINER
-    - {type: case, normal: ["\u0647", "!icon/zwnj_key|\u200c"], shifted: ["!icon/zwnj_key|\u200c", "\u0647"]}
-
-    # U+0698: Ú˜ ARABIC LETTER JEH
-    # U+0623: أ ARABIC LETTER ALEF WITH HAMZA ABOVE
-    - {type: case, normal: ["\u0698", "\u0623"], shifted: ["\u0623", "\u0698"]}
-
-    # U+06A9: Ú© ARABIC LETTER KEHEH
-    # U+0643: Ùƒ ARABIC LETTER KAF
-    - {type: case, normal: ["\u06a9", "\u0643"], shifted: ["\u0643", "\u06a9"]}
-
-    # U+0644: Ù„ ARABIC LETTER LAM
-    # U+06B5: Úµ ARABIC LETTER LAM WITH SMALL V
-    - {type: case, normal: ["\u0644", "\u06b5"], shifted: ["\u06b5", "\u0644"]}
-
-  - letters: # rowkeys_kurdish3.xml
-    # U+0632: ز ARABIC LETTER ZAIN
-    # U+0636: ض ARABIC LETTER DAD
-    - {type: case, normal: ["\u0632", "\u0636"], shifted: ["\u0636", "\u0632"]}
-
-    # U+062E: Ø® ARABIC LETTER KHAH
-    # U+0635: ص ARABIC LETTER SAD
-    - {type: case, normal: ["\u062e", "\u0635"], shifted: ["\u0635", "\u062e"]}
-
-    # U+062C: ج ARABIC LETTER JEEM
-    # U+0686: Ú† ARABIC LETTER TCHEH
-    - {type: case, normal: ["\u062c", "\u0686"], shifted: ["\u0686", "\u062c"]}
-
-    # U+06A4: Ú¤ ARABIC LETTER VEH
-    # U+0638: ظ ARABIC LETTER ZAH
-    - {type: case, normal: ["\u06a4", "\u0638"], shifted: ["\u0638", "\u06a4"]}
-
-    # U+0628: ب ARABIC LETTER BEH
-    # U+0649: Ù‰ ARABIC LETTER ALEF MAKSURA
-    - {type: case, normal: ["\u0628", "\u0649"], shifted: ["\u0649", "\u0628"]}
-
-    # U+0646: Ù† ARABIC LETTER NOON
-    # U+0648: Ùˆ ARABIC LETTER WAW
-    - {type: case, normal: ["\u0646", "\u0648"], shifted: ["\u0648", "\u0646"]}
-
-    # U+0645: Ù… ARABIC LETTER MEEM
-    # U+0640: Ù€ ARABIC TATWEEL
-    - {type: case, normal: ["\u0645", "\u0640"], shifted: ["\u0640", "\u0645"]}
\ No newline at end of file
diff --git a/java/assets/layouts/Arabic/lulua.yaml b/java/assets/layouts/Arabic/lulua.yaml
deleted file mode 100644
index a313013e952672997139df846f11171e1573986b..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Arabic/lulua.yaml
+++ /dev/null
@@ -1,94 +0,0 @@
-# TODO: Split layout is broken due to use of grow
-name: "العربية/لؤلؤة"
-description: Arabic/lulua keyboard from AnySoftKeyboard
-languages: ar
-attributes:
-  width: Grow
-overrideWidths:
-  FunctionalKey: 0.25
-rows:
-  - letters:
-      - - "\u062B"
-        - "\u0663"
-      - - "\u0637"
-        - "\u0662"
-      - - "\u0641"
-        - "\u0671"
-        - "\u0661"
-      - - "\u0629"
-        - '-'
-        - "\u0640"
-        - "\u0660"
-      - - "\u0654"
-        - "\u066A"
-      - "\u0642"
-      - - "\u062F"
-        - '!'
-        - "\u064C"
-      - - "\u0639"
-        - "\u064B"
-      - - "\u062D"
-        - "\u064D"
-      - - "\u0636"
-        - "\u2026"
-      - - "\u0621"
-        - "\u2067"
-      - - "\u0638"
-        - "\u2066"
-    splittable: false
-  - letters:
-      - - "\u0628"
-        - ':'
-        - "\u0667"
-      - - "\u0645"
-        - (
-        - "\u0666"
-      - - "\u0627"
-        - "\u061B"
-        - "\u0652"
-        - "\u0665"
-      - - "\u0648"
-        - "\u061F"
-        - "\u0651"
-        - "\u0664"
-      - - "\u062A"
-        - "\xAB"
-        - "\u0670"
-        - "\u2212"
-      - - "\u0631"
-        - "\xBB"
-        - "\u0653"
-      - - "\u0644"
-        - .
-        - "\u064F"
-      - - "\u064A"
-        - "\u060C"
-        - "\u064E"
-      - - "\u0646"
-        - )
-        - "\u0650"
-      - "\u0633"
-      - - "\u0635"
-        - "\u2069"
-    splittable: false
-  - letters:
-      - - "\u0630"
-        - "\u066C"
-      - - "\u0649"
-        - "\u066B"
-      - - "\u062C"
-        - "\u0669"
-      - - "\u0634"
-        - "\u0668"
-      - - "\u0655"
-        - "\u0609"
-      - "\u0647"
-      - "\u0632"
-      - "\u0643"
-      - "\u062E"
-      - "\u063A"
-    splittable: false
-  - bottom:
-      - "$enter"
-      - "$space"
-      - "$delete"
\ No newline at end of file
diff --git a/java/assets/layouts/Armenian/armenian_phonetic.yaml b/java/assets/layouts/Armenian/armenian_phonetic.yaml
deleted file mode 100644
index cecd339f4942bf092e9adb90d20f19b867d6fa3c..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Armenian/armenian_phonetic.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-name: Õ€Õ¡ÕµÕ¥Ö€Õ¥Õ¶
-languages: hy
-rows:
-  - letters: [Õ§, Õ©, Öƒ, Õ±, Õ», Ö€, Õ¹, Õ³, Õª, Õ®]
-  - letters: [Ö„, Õ¸, [Õ¥, Ö‡], Õ¼, Õ¿, Õ¨, Ö‚, Õ«, Ö…, Õº]
-  - letters: [Õ¡, Õ½, Õ¤, Ö†, Õ£, Õ°, Õµ, Õ¯, Õ¬, Õ­]
-  - letters: [զ, ղ, ց, վ, բ, ն, մ, շ]
-# Note: period is replaced with Ö‰ in locales/hy.json
\ No newline at end of file
diff --git a/java/assets/layouts/Bengali/bengali.yaml b/java/assets/layouts/Bengali/bengali.yaml
deleted file mode 100644
index dec201c244b49298eda8784bdff8b1abfa695ae7..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Bengali/bengali.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-name: bengali
-languages: bn
-rows:
-  - letters: # rowkeys_bengali1.xml
-    - ['ঔ', 'ৌ', '১']
-    - ['ঐ', 'ৈ', '২']
-    - ['আ', 'া', '৩']
-    - ['ঈ', 'ী', '৪']
-    - ['ঊ', 'ূ', '৫']
-    - ['ব', 'ভ', '৬']
-    - ['হ', '৭']
-    - ['গ', 'ঘ', '৮']
-    - ['দ', 'ধ', '৯']
-    - ['জ', 'ঝ', 'জ্ঞ', '০']
-    - ['ড', 'ড়']
-  - letters: # rowkeys_bengali2.xml
-    - ['ও', 'ো']
-    - ['এ', 'ে']
-    - ['অ', '্']
-    - ['ই', 'ি']
-    - ['উ', 'ু']
-    - ['প', 'ফ']
-    - ['র', 'ৃ', 'ঋ', 'ত্র']
-    - ['ক', 'খ']
-    - ['ত', 'ৎ', 'থ', 'ত্ত']
-    - ['চ', 'ছ']
-    - ['ট', 'ঠ']
-  - letters: # rowkeys_bengali3.xml
-    - ['ঁ', 'ঃ', 'ং']
-    - ['ঢ', 'ঢ়']
-    - ['ম']
-    - ['ন', 'ণ']
-    - ['ঞ', 'ঙ', 'ঞ্জ']
-    - ['ল']
-    - ['ষ', 'ক্ষ']
-    - ['স', 'শ']
-    - ['য়', 'য']
-    - ['।', '॥']
-    - $delete
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Bengali/bengali_akkhor.yaml b/java/assets/layouts/Bengali/bengali_akkhor.yaml
deleted file mode 100644
index c2220f804de849ded2156cf4781fad32aecd17ed..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Bengali/bengali_akkhor.yaml
+++ /dev/null
@@ -1,100 +0,0 @@
-name: bengali akkhor
-languages: bn-BD
-useZWNJKey: true
-rows:
-  - letters:
-        - type: case
-          normal: [ 'ধ', '১', 'ধ্ব', 'ধ্য', 'ধ্র' ]
-          shifted: [ 'ঢ' ]
-        - type: case
-          normal: [ 'থ', '২', 'থ্য', 'থ্র' ]
-          shifted: [ 'ঠ' ]
-        - type: case
-          normal: [ 'ে', '৩', 'এ' ]
-          shifted: [ 'ৈ', 'ঐ' ]
-        - type: case
-          normal: [ 'র', '৪' ]
-          shifted: [ 'ড়', '়' ]
-        - type: case
-          normal: [ 'ত', '৫', 'ৎ', 'ত্ত', 'ত্ন', 'ত্ব', 'ত্ম' ]
-          shifted: [ 'ট', '৳', 'ট্ট', 'ট্ব', 'ট্ম' ]
-        - type: case
-          normal: [ 'য়', '৬' ]
-          shifted: [ 'ঞ', 'ঞ্চ', 'ঞ্ছ', 'ঞ্জ' ]
-        - type: case
-          normal: [ 'ু', '৭', 'উ' ]
-          shifted: [ 'ূ', 'ঊ' ]
-        - type: case
-          normal: [ 'ি', '৮', 'ই' ]
-          shifted: [ 'ী', 'ঈ' ]
-        - type: case
-          normal: [ 'ো', '৯', 'ও' ]
-          shifted: [ 'ৌ', 'চ', 'ৗ' ]
-        - type: case
-          normal: [ 'প', '০', 'প্ত', 'প্ন', 'প্প', 'প্য', 'প্র', 'প্ল', 'প্স' ]
-          shifted: [ 'ফ', 'ফ্ট', 'ফ্য', 'ফ্র', 'ফ্ল' ]
-        - type: case
-          normal: [ 'আ' ]
-          shifted: [ 'ঋ', 'ঌ', 'ৡ', '৴', '৵', '৶', 'ৢ', 'ৣ' ]
-  - letters:
-        - type: case
-          normal: [ 'া', 'আ' ]
-          shifted: [ 'অ' ]
-        - type: case
-          normal: [ 'স', 'স্ব', 'স্ত', 'স্ট', 'স্ক', 'স্প' ]
-          shifted: [ 'শ', 'শ্চ', 'শ্ছ', 'শ্ত', 'শ্ন', 'শ্ব', 'শ্ম', 'শ্র', 'শ্ল' ]
-        - type: case
-          normal: [ 'দ', 'দ্দ', 'দ্ধ', 'দ্ব', 'দ্ভ', 'দ্ম', 'দ্য', 'দ্র' ]
-          shifted: [ 'ড', 'ড্ড' ]
-        - type: case
-          normal: [ 'ৃ', 'ঋ' ]
-          shifted: [ 'ঢ়' ]
-        - type: case
-          normal: [ 'গ', 'গ্ধ', 'গ্র', 'গ্ল', 'গ্ন' ]
-          shifted: [ 'ঘ' ]
-        - type: case
-          normal: [ '্' ]
-          shifted: [ 'হ', 'ঽ', 'হ্ণ', 'হ্ন', 'হ্ব', 'হ্ম', 'হ্র', 'হ্ল' ]
-        - type: case
-          normal: [ 'জ', 'জ্ঞ', 'জ্জ', 'জ্য', 'জ্ব', 'জ্র' ]
-          shifted: [ 'ঝ' ]
-        - type: case
-          normal: [ 'ক', 'ক্ষ', 'ক্ক', 'ক্ট', 'ক্ত', 'ক্র', 'ক্স', 'ক্ল' ]
-          shifted: [ 'খ' ]
-        - type: case
-          normal: [ 'ল', 'ল্ক', 'ল্গ', 'ল্ট', 'ল্ড', 'ল্ত', 'ল্দ', 'ল্ধ', 'ল্প', 'ল্ফ', 'ল্ব', 'ল্ম', 'ল্ল' ]
-          shifted: [ 'ৎ' ]
-        - type: case
-          normal: [ 'ই' ]
-          shifted: [ 'ঈ' ]
-        - type: case
-          normal: [ 'উ' ]
-          shifted: [ 'ঊ' ]
-  - letters:
-        - type: case
-          normal:  ['য', '্য']
-          shifted: ['।', '॥']
-        - type: case
-          normal:  ['ষ', 'ষ্ক', 'ষ্ট', 'ষ্ঠ', 'ষ্ণ', 'ষ্প', 'ষ্ফ', 'ষ্ম']
-          shifted: ['ঙ', 'ঙ্ক', 'ঙ্খ', 'ঙ্গ']
-        - type: case
-          normal:  ['চ', 'চ্চ', 'চ্ছ']
-          shifted: ['ছ']
-        - type: case
-          normal:  ['ভ', 'ভ্য', 'ভ্র', 'ভ্ল']
-          shifted: ['ঃ']
-        - type: case
-          normal:  ['ব', '্ব', 'ব্র', 'ব্জ', 'ব্দ', 'ব্ধ', 'ব্ব', 'ব্ল', 'ৱ', 'ৰ']
-          shifted: ['ঁ']
-        - type: case
-          normal:  ['ন', 'ন্ত', 'ন্থ', 'ন্ট', 'ন্দ', 'ন্ধ', 'ন্ড', 'ন্ন', 'ন্ব', 'ন্ম', 'ন্স']
-          shifted: ['ণ', 'ণ্ট', 'ণ্ড', 'ণ্ণ']
-        - type: case
-          normal:  ['ম', 'ম্ন', 'ম্প', 'ম্ব', 'ম্ভ', 'ম্ম', 'ম্র', 'ম্ল']
-          shifted: ['ং']
-        - type: case
-          normal:  ['এ']
-          shifted: ['ঐ']
-        - type: case
-          normal:  ['ও']
-          shifted: ['ঔ']
\ No newline at end of file
diff --git a/java/assets/layouts/Bulgarian/bulgarian.yaml b/java/assets/layouts/Bulgarian/bulgarian.yaml
deleted file mode 100644
index 576bbfe2b5fd62efdb0b890141d82a46c722b8ae..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Bulgarian/bulgarian.yaml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: Bulgarian
-languages: bg
-rows:
-  - letters:
-    - ['я']
-    - ['в']
-    - ['е']
-    - ['Ñ€']
-    - ['Ñ‚']
-    - ['ÑŠ']
-    - ['у']
-    - ['и', '%', 'ѝ']
-    - ['о']
-    - ['п']
-    - ['ч']
-  - letters:
-    - ['а']
-    - ['с']
-    - ['д']
-    - ['Ñ„']
-    - ['г']
-    - ['Ñ…']
-    - ['й']
-    - ['к']
-    - ['л']
-    - ['ш']
-    - ['щ']
-  - letters:
-    - ['з']
-    - ['ь']
-    - ['ц']
-    - ['ж']
-    - ['б']
-    - ['н']
-    - ['м']
-    - ['ÑŽ']
\ No newline at end of file
diff --git a/java/assets/layouts/Bulgarian/bulgarian_bds.yaml b/java/assets/layouts/Bulgarian/bulgarian_bds.yaml
deleted file mode 100644
index 9bc164e7bf06c1a94c39d480302fcb7b37845791..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Bulgarian/bulgarian_bds.yaml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Bulgarian (BDS)
-languages: bg
-rows:
-  - letters:
-    - ['у']
-    - ['е']
-    - ['и', '%', 'ѝ']
-    - ['ш']
-    - ['щ']
-    - ['к']
-    - ['с']
-    - ['д']
-    - ['з']
-    - ['ц']
-    - ['б']
-  - letters:
-    - ['ь']
-    - ['я']
-    - ['а']
-    - ['о']
-    - ['ж']
-    - ['г']
-    - ['Ñ‚']
-    - ['н']
-    - ['в']
-    - ['м']
-    - ['ч']
-  - letters:
-    - ['ÑŽ']
-    - ['й']
-    - ['ÑŠ']
-    - ['э']
-    - ['Ñ„']
-    - ['Ñ…']
-    - ['п']
-    - ['Ñ€']
-    - ['л']
\ No newline at end of file
diff --git a/java/assets/layouts/Default/azerty.yaml b/java/assets/layouts/Default/azerty.yaml
deleted file mode 100644
index 55e770c926bf57768565d3806ca118943e391893..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/azerty.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-name: AZERTY
-rows:
-  - letters: a z e r t y u i o p
-  - letters: q s d f g h j k l m
-  - letters:
-    - w
-    - x
-    - c
-    - v
-    - b
-    - n
-    - {type: case, normal: "'", shifted: "?"}
\ No newline at end of file
diff --git a/java/assets/layouts/Default/colemak.yaml b/java/assets/layouts/Default/colemak.yaml
deleted file mode 100644
index 5206daaedc5fff741ae4f2a78d2150451ad39c5d..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/colemak.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-name: Colemak
-rows:
-  - letters:
-    - q
-    - w
-    - f
-    - p
-    - g
-    - j
-    - l
-    - u
-    - y
-    - {type: case, normal: ";", shifted: ":"}
-  - letters: a r s t d h n e i o
-  - letters: z x c v b k m
\ No newline at end of file
diff --git a/java/assets/layouts/Default/colemak_dh.yaml b/java/assets/layouts/Default/colemak_dh.yaml
deleted file mode 100644
index 2b69cb992186330ea398c849769f8bd7d5dcd78b..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/colemak_dh.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-name: "Colemak DH"
-rows:
-  - letters:
-    - q
-    - w
-    - f
-    - p
-    - b
-    - j
-    - l
-    - u
-    - y
-    - {type: case, normal: ";", shifted: ":"}
-  - letters: a r s t g m n e i o
-  - letters: z x c d v k h
\ No newline at end of file
diff --git a/java/assets/layouts/Default/colemak_dh_ansi.yaml b/java/assets/layouts/Default/colemak_dh_ansi.yaml
deleted file mode 100644
index fdb3ac795b65aaeb5d0139c52f4c0c6aa4d5463f..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/colemak_dh_ansi.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-name: "Colemak DH (ANSI)"
-rows:
-  - letters:
-      - q
-      - w
-      - f
-      - p
-      - b
-      - j
-      - l
-      - u
-      - y
-      - {type: case, normal: ";", shifted: ":"}
-  - letters: a r s t g m n e i o
-  - letters: x c d v z k h
\ No newline at end of file
diff --git a/java/assets/layouts/Default/dvorak.yaml b/java/assets/layouts/Default/dvorak.yaml
deleted file mode 100644
index 31b08ddc506a17f7ea7c69c9333dce215b8c8eee..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/dvorak.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-name: Dvorak
-rows:
-  - letters:
-    - {type: case, normal: "'", shifted: "\""}
-    - {type: case, normal: ",", shifted: "<"}
-    - {type: case, normal: ".", shifted: ">"}
-    - p
-    - y
-    - f
-    - g
-    - c
-    - r
-    - l
-  - letters: a o e u i d h t n s
-  - letters: $shift j k x b m w v $delete
-  - bottom:  $symbols q $action $space $contextual z $enter
\ No newline at end of file
diff --git a/java/assets/layouts/Default/ipa.yaml b/java/assets/layouts/Default/ipa.yaml
deleted file mode 100644
index 766659efcc15ed70a6b2f582f6aaceb153b20c2c..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/ipa.yaml
+++ /dev/null
@@ -1,225 +0,0 @@
-# This layout is preliminary and is missing moreKeys
-name: International Phonetic Alphabet
-minimumFunctionalKeyWidth: 0.0
-attributes: &attrs
-    shiftable: false
-    useKeySpecShortcut: false
-    moreKeyMode: OnlyExplicit
-    labelFlags: { followKeyLetterRatio: true }
-rows:
-    - letters:
-          - "p"
-          - "b"
-          - "t"
-          - "d"
-          - "ʈ"
-          - "É–"
-          - "c"
-          - "ÉŸ"
-          - "k"
-          - "É¡"
-          - "q"
-          - "É¢"
-    - letters:
-          - "m"
-          - "ɱ"
-          - "Ê™"
-          - "n"
-          - "r"
-          - "ɳ"
-          - "ɽ"
-          - "ɲ"
-          - "Å‹"
-          - "É´"
-          - "Ê€"
-          - "Ê”"
-    - letters:
-          - "ɸ"
-          - "f"
-          - "θ"
-          - "ɬ"
-          - "s"
-          - "ʃ"
-          - "Ê‚"
-          - "ç"
-          - "x"
-          - "χ"
-          - "ħ"
-          - "h"
-    - letters:
-          - "β"
-          - "v"
-          - "ð"
-          - "É®"
-          - "z"
-          - "Ê’"
-          - "ʐ"
-          - "ʝ"
-          - "É£"
-          - "ʁ"
-          - "Ê•"
-          - "ɦ"
-    - letters:
-          - {
-              type: base,
-              spec: "1/3|!code/key_to_alt_0_layout",
-              attributes:
-                &functional {
-                    width: FunctionalKey,
-                    style: Functional,
-                    anchored: true,
-                    showPopup: false,
-                    labelFlags: { followKeyLetterRatio: false }
-                },
-          }
-          - "w"
-          - "Ê‹"
-          - "ɹ"
-          - "l"
-          - "É»"
-          - "É­"
-          - "É¥"
-          - "j"
-          - "ÊŽ"
-          - "É°"
-          - "$delete"
-
-altPages:
-    -     - letters:
-                - "i"
-                - "y"
-                - "$gap"
-                - "$gap"
-                - "$gap"
-                - "ɨ"
-                - "ʉ"
-                - "$gap"
-                - "$gap"
-                - "ɯ"
-                - "u"
-                - "$gap"
-          - letters:
-                - "$gap"
-                - "$gap"
-                - "ɪ"
-                - "ʏ"
-                - "$gap"
-                - "ɪ̈"
-                - "ʊ̈"
-                - "$gap"
-                - "ɯ̽"
-                - "ÊŠ"
-                - "$gap"
-                - "$gap"
-          - letters:
-                - "$gap"
-                - "e"
-                - "ø"
-                - "$gap"
-                - "ɘ"
-                - "ɵ"
-                - "$gap"
-                - "É™"
-                - "$gap"
-                - "ɤ"
-                - "o"
-                - "$gap"
-          - letters:
-                - "$gap"
-                - "É›"
-                - "Å“"
-                - "$gap"
-                - "ɜ"
-                - "Éž"
-                - "$gap"
-                - "ɐ"
-                - "$gap"
-                - "ʌ"
-                - "É”"
-                - "$gap"
-          - letters:
-                - {
-                    type: base,
-                    spec: "2/3|!code/key_to_alt_1_layout",
-                    attributes: *functional,
-                }
-                - "$gap"
-                - "æ"
-                - "a"
-                - "ɶ"
-                - "$gap"
-                - "ä"
-                - "ɒ̈"
-                - "$gap"
-                - "É‘"
-                - "É’"
-                - "$delete"
-    -     - letters:
-                - "É“Ì¥"
-                - "É“"
-                - "É—Ì¥"
-                - "É—"
-                - "ᶑ̥"
-                - "ᶑ"
-                - "Ê„ÌŠ"
-                - "Ê„"
-                - "É ÌŠ"
-                - "É "
-                - "ʛ̥"
-                - "Ê›"
-          - letters:
-                - "pʼ"
-                - "tʼ"
-                - "tsʼ"
-                - "t̠ʃʼ"
-                - "ʈʂʼ"
-                - "ʈʼ"
-                - "ɬʼ"
-                - "tɬʼ"
-                - "cʼ"
-                - "kʼ"
-                - "qʼ"
-                - "ʡʼ"
-          - letters:
-                - "ɸʼ"
-                - "fʼ"
-                - "θʼ"
-                - "sʼ"
-                - "ʃʼ"
-                - "ʂʼ"
-                - "ɕʼ"
-                - "cʎ̝̊ʼ"
-                - "xʼ"
-                - "kʟ̝̊ʼ"
-                - "xʼ"
-                - "χʼ"
-          - letters:
-                - "ʘ"
-                - "ʘ̬"
-                - "Ç€"
-                - "ǀ̬"
-                - "ǀ̃"
-                - "ǃ"
-                - "ǃ̬"
-                - "ǃ˞"
-                - "Ç‚"
-                - "ǂ̬"
-                - "Ë€"
-                - "̃ˀ"
-          - letters:
-                - {
-                    type: base,
-                    spec: "3/3|!code/key_to_alt_1_layout",
-                    attributes: *functional,
-                }
-                - "ʘ̃"
-                - "ǁ"
-                - "ǁ̬"
-                - "ǁ̃"
-                - "ǃ̃"
-                - "ǃ̃˞"
-                - "ǃ̬˞"
-                - "ǂ̃"
-                - "Ì¥"
-                - "ʼ"
-                - "$delete"
diff --git a/java/assets/layouts/Default/nordic.yaml b/java/assets/layouts/Default/nordic.yaml
deleted file mode 100644
index b87724b408066d5568d7dbed5c37298e328d0176..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/nordic.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-name: "QWERTY+3 (Nordic)"
-languages: fi sv da et nb
-rows:
-  - letters:
-      - q
-      - w
-      - e
-      - r
-      - t
-      - y
-      - u
-      - i
-      - o
-      - p
-      - ["!text/keyspec_nordic_row1_11", "!text/morekeys_nordic_row1_11"]
-  - letters:
-      - a
-      - s
-      - d
-      - f
-      - g
-      - h
-      - j
-      - k
-      - l
-      - ["!text/keyspec_nordic_row2_10", "!text/morekeys_nordic_row2_10"]
-      - ["!text/keyspec_nordic_row2_11", "!text/morekeys_nordic_row2_11"]
-  - letters:
-      - z
-      - x
-      - c
-      - v
-      - b
-      - n
-      - m
\ No newline at end of file
diff --git a/java/assets/layouts/Default/pcqwerty.yaml b/java/assets/layouts/Default/pcqwerty.yaml
deleted file mode 100644
index 38cc857d56969fd11cf53a5b1c4a3f9955a6cae8..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/pcqwerty.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-name: "PC QWERTY"
-rows:
-  - numbers:
-      - {type: case, normal: ["`", "~"], shifted: "~"}
-      - {type: case, normal: ["1", "!"], shifted: "!"}
-      - {type: case, normal: ["2", "@"], shifted: "@"}
-      - {type: case, normal: ["3", "#"], shifted: "#"}
-      - {type: case, normal: ["4", "$"], shifted: "$"}
-      - {type: case, normal: ["5", "%"], shifted: "%"}
-      - {type: case, normal: ["6", "^"], shifted: "^"}
-      - {type: case, normal: ["7", "&"], shifted: "&"}
-      - {type: case, normal: ["8", "*"], shifted: "*"}
-      - {type: case, normal: ["9", "("], shifted: "("}
-      - {type: case, normal: ["0", ")"], shifted: ")"}
-      - {type: case, normal: ["-", "_"], shifted: "_"}
-      - {type: case, normal: ["=", "+"], shifted: "+"}
-  - letters:
-      - q
-      - w
-      - e
-      - r
-      - t
-      - y
-      - u
-      - i
-      - o
-      - p
-      - {type: case, normal: ["[", "{"], shifted: "{"}
-      - {type: case, normal: ["]", "}"], shifted: "}"}
-      - {type: case, normal: ["\\\\", "|"], shifted: "\\|"}
-  - letters:
-      - a
-      - s
-      - d
-      - f
-      - g
-      - h
-      - j
-      - k
-      - l
-      - {type: case, normal: [";", ":"], shifted: ":"}
-      - {type: case, normal: ["'", "\""], shifted: "\""}
-      - $delete
-  - letters:
-      - $shift
-      - z
-      - x
-      - c
-      - v
-      - b
-      - n
-      - m
-      - {type: case, normal: [",", "<"], shifted: "<"}
-      - {type: case, normal: [".", ">"], shifted: ">"}
-      - {type: case, normal: ["/", "?"], shifted: "?"}
-      - $shift
-  - bottom: ["$symbols", "$space", "$enter"]
-numberRowMode: AlwaysEnabled
\ No newline at end of file
diff --git a/java/assets/layouts/Default/qwerty.yaml b/java/assets/layouts/Default/qwerty.yaml
deleted file mode 100644
index 1df6bb9ff0653833aa9262299438ad8e497a97df..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/qwerty.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: QWERTY
-rows:
-  - letters: q w e r t y u i o p
-  - letters: a s d f g h j k l
-  - letters: z x c v b n m
\ No newline at end of file
diff --git a/java/assets/layouts/Default/qwertz.yaml b/java/assets/layouts/Default/qwertz.yaml
deleted file mode 100644
index 487fb1486e55b62e6f6bda8bf0c9b3c8652b7de3..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/qwertz.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: QWERTZ
-rows:
-  - letters: q w e r t z u i o p
-  - letters: a s d f g h j k l
-  - letters: y x c v b n m
\ No newline at end of file
diff --git a/java/assets/layouts/Default/spanish.yaml b/java/assets/layouts/Default/spanish.yaml
deleted file mode 100644
index f2a45adc94d739ee15ca379cc19ca91e2da39fdc..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/spanish.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: "QWERTY+1 (Spanish)"
-languages: es ca eo pt
-rows:
-  - letters: "q w e r t y u i o p"
-  - letters: "a s d f g h j k l !text/keyspec_spanish_row2_10"
-  - letters: "z x c v b n m"
\ No newline at end of file
diff --git a/java/assets/layouts/Default/swiftdvorak.yaml b/java/assets/layouts/Default/swiftdvorak.yaml
deleted file mode 100644
index 91b711b677e12b692d4d8408124e8fc8f2f1d41d..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/swiftdvorak.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: "Swift DVORAK"
-rows:
-  - letters: "$delete $delete ' p y f g c r l"
-  - letters: "a o e u i d h t n s"
-  - letters: "$shift q j k x b m w v z"
-  - bottom: "$symbols , $space . $enter"
\ No newline at end of file
diff --git a/java/assets/layouts/Default/swiss.yaml b/java/assets/layouts/Default/swiss.yaml
deleted file mode 100644
index ddef5f8d3e62cdaa4211cc537c03754d65a237d1..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Default/swiss.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-name: "QWERTZ+3 (Swiss)"
-languages: de fr it
-rows:
-  - letters:
-      - q
-      - w
-      - e
-      - r
-      - t
-      - z
-      - u
-      - i
-      - o
-      - p
-      - ["!text/keyspec_swiss_row1_11", "!text/morekeys_swiss_row1_11"]
-  - letters:
-      - a
-      - s
-      - d
-      - f
-      - g
-      - h
-      - j
-      - k
-      - l
-      - ["!text/keyspec_swiss_row2_10", "!text/morekeys_swiss_row2_10"]
-      - ["!text/keyspec_swiss_row2_11", "!text/morekeys_swiss_row2_11"]
-  - letters:
-      - y
-      - x
-      - c
-      - v
-      - b
-      - n
-      - m
\ No newline at end of file
diff --git a/java/assets/layouts/Devanagari/hindi.yaml b/java/assets/layouts/Devanagari/hindi.yaml
deleted file mode 100644
index a6a0ef4a83dab0540900e6e3d3411207738488cd..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Devanagari/hindi.yaml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Hindi
-languages: hi
-rows:
-  - letters: # rowkeys_hindi1.xml
-      - {type: case, normal: ['ौ', 'ौं'], shifted: ['औ', 'ऒं']}
-      - {type: case, normal: ['ै', 'ैं'], shifted: ['ऐ', 'ऐं']}
-      - {type: case, normal: ['ा', 'ां', 'ाँ'], shifted: ['आ', 'आं', 'आँ']}
-      - {type: case, normal: ['ी', 'ीं'], shifted: ['ई', 'ईं']}
-      - {type: case, normal: ['ू', 'ूं', 'ूँ'], shifted: ['ऊ', 'ऊं', 'ऊँ']}
-      - {type: case, normal: ['ब', 'ब॒'], shifted: ['भ']}
-      - {type: case, normal: ['ह'], shifted: ['ः']}
-      - {type: case, normal: ['ग', 'ज्ञ', 'ग़', 'ग॒'], shifted: ['घ']}
-      - {type: case, normal: ['द'], shifted: ['ध', 'क्ष', 'श्र']}
-      - {type: case, normal: ['ज', 'ज॒', 'ज्ञ', 'ज़'], shifted: ['झ']}
-      - {type: case, normal: ['ड', 'ड॒', 'ड़'], shifted: ['ढ']}
-  - letters: # rowkeys_hindi2.xml
-      - {type: case, normal: ['ो', 'ों', 'ॉ', 'ॊ'], shifted: ['ओ', 'ओं', 'ऑ', 'ऒ']}
-      - {type: case, normal: ['े', 'ें'], shifted: ['ए', 'एं', 'एँ', 'ऍ', 'ऎ']}
-      - {type: case, normal: ['्'], shifted: ['अ', 'अं', 'अँ']}
-      - {type: case, normal: ['ि', 'िं'], shifted: ['इ', 'इं', 'इँ']}
-      - {type: case, normal: ['ु', 'ुं', 'ुँ'], shifted: ['उ', 'उं', 'उँ']}
-      - {type: case, normal: ['प'], shifted: ['फ', 'फ़']}
-      - {type: case, normal: ['र', 'ऋ', 'ऱ', 'ॠ'], shifted: ['ऱ', '्र', 'र्']}
-      - {type: case, normal: ['क', 'क़'], shifted: ['ख', 'ख़']}
-      - {type: case, normal: ['त', 'त्र'], shifted: ['थ']}
-      - {type: case, normal: ['च'], shifted: ['छ']}
-      - {type: case, normal: ['ट'], shifted: ['ठ']}
-  - letters: # rowkeys_hindi3.xml
-      - {type: case, normal: ['ॉ'], shifted: ['ऑ']}
-      - {type: case, normal: ['ं'], shifted: ['ँ', 'ॅ']}
-      - {type: case, normal: ['म', 'ॐ'], shifted: ['ण']}
-      - {type: case, normal: ['न', 'ञ', 'ङ', 'ऩ'], shifted: ['ऩ']}
-      - {type: case, normal: ['व'], shifted: ['ळ', 'ऴ']}
-      - {type: case, normal: ['ल', 'ऌ', 'ॡ'], shifted: ['श']}
-      - {type: case, normal: ['स'], shifted: ['ष']}
-      - {type: case, normal: ['य', 'य़'], shifted: ['ृ', 'ॄ']}
-      - {type: case, normal: ['़', 'ॽ', '॰', 'ऽ'], shifted: ['ञ']}
\ No newline at end of file
diff --git a/java/assets/layouts/Devanagari/hindi_compact.yaml b/java/assets/layouts/Devanagari/hindi_compact.yaml
deleted file mode 100644
index 844b4b7260c195d10ceb773aea1aba0c7a4ea8bc..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Devanagari/hindi_compact.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-name: Hindi Compact
-languages: hi
-useZWNJKey: true
-rows:
-  - letters: # rowkeys_hindi_compact1.xml
-    - ['औ', 'ौ']
-    - ['ऐ', 'ै']
-    - ['आ', 'ा']
-    - ['ई', 'ी']
-    - ['ऊ', 'ू']
-    - ['ब', 'भ']
-    - ['ह']
-    - ['ग', 'घ']
-    - ['द', 'ध']
-    - ['ज', 'झ', 'ज्ञ']
-    - ['ड', 'ढ']
-  - letters: # rowkeys_hindi_compact2.xml
-    - ['ओ', 'ो']
-    - ['ए', 'े']
-    - ['अ', '्']
-    - ['इ', 'ि']
-    - ['उ', 'ु']
-    - ['प', 'फ']
-    - ['र', 'ऋ', 'ृ']
-    - ['क', 'ख']
-    - ['त', 'थ', 'त्र']
-    - ['च', 'छ']
-    - ['ट', 'ठ']
-  - letters: # rowkeys_hindi_compact3.xml
-    - ['ऑ', 'ॉ']
-    - ['्', 'ॅ', 'ऍ']
-    - ['ं', 'ः', 'ँ', '़']
-    - ['म', 'ॐ']
-    - ['न', 'ण', 'ञ', 'ङ']
-    - ['व']
-    - ['ल']
-    - ['स', 'श', 'ष', 'श्र']
-    - ['य']
-    - ['क्ष']
-    - $delete
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Devanagari/marathi.yaml b/java/assets/layouts/Devanagari/marathi.yaml
deleted file mode 100644
index db9e0ece37bb5f41a78bb0393fe198fa428e3eba..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Devanagari/marathi.yaml
+++ /dev/null
@@ -1,146 +0,0 @@
-name: Marathi
-languages: mr-IN
-rows:
-  - letters: # rowkeys_marathi1.xml
-    # U+094C: ौ DEVANAGARI VOWEL SIGN AU
-    # U+0914: औ DEVANAGARI LETTER AU
-    - ["\u094c", "\u0914"]
-
-    # U+0948: ै DEVANAGARI VOWEL SIGN AI
-    # U+0910: ऐ DEVANAGARI LETTER AI
-    - ["\u0948", "\u0910"]
-
-    # U+093E: ा DEVANAGARI VOWEL SIGN AA
-    # U+0906: आ DEVANAGARI LETTER AA
-    - ["\u093e", "\u0906"]
-
-    # U+0940: ी DEVANAGARI VOWEL SIGN II
-    # U+0908: ई DEVANAGARI LETTER II
-    - ["\u0940", "\u0908"]
-
-    # U+0942: ू DEVANAGARI VOWEL SIGN UU
-    # U+090A: ऊ DEVANAGARI LETTER UU
-    - ["\u0942", "\u090a"]
-
-    # U+092C: ब DEVANAGARI LETTER BA
-    # U+092D: भ DEVANAGARI LETTER BHA
-    - ["\u092c", "\u092d"]
-
-    # U+0939: ह DEVANAGARI LETTER HA
-    - ["\u0939"]
-
-    # U+0917: ग DEVANAGARI LETTER GA
-    # U+0918: घ DEVANAGARI LETTER GHA
-    - ["\u0917", "\u0918"]
-
-    # U+0926: द DEVANAGARI LETTER DA
-    # U+0927: ध DEVANAGARI LETTER DHA
-    - ["\u0926", "\u0927"]
-
-    # U+091C: ज DEVANAGARI LETTER JA
-    # U+091D: झ DEVANAGARI LETTER JHA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+091E: ञ DEVANAGARI LETTER NYA
-    - ["\u091c", "\u091d", "\u091c\u094d\u091e"]
-
-    # U+0921: ड DEVANAGARI LETTER DDA
-    # U+0922: ढ DEVANAGARI LETTER DDHA
-    - ["\u0921", "\u0922"]
-
-  - letters: # rowkeys_marathi2.xml
-    # U+094B: ो DEVANAGARI VOWEL SIGN O
-    # U+0913: ओ DEVANAGARI LETTER O
-    - ["\u094b", "\u0913"]
-
-    # U+0947: े DEVANAGARI VOWEL SIGN E
-    # U+090F: ए DEVANAGARI LETTER E
-    - ["\u0947", "\u090f"]
-
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+0905: अ DEVANAGARI LETTER A
-    - ["\u094d", "\u0905"]
-
-    # U+093F: ि DEVANAGARI VOWEL SIGN I
-    # U+0907: इ DEVANAGARI LETTER I
-    - ["\u093f", "\u0907"]
-
-    # U+0941: ु DEVANAGARI VOWEL SIGN U
-    # U+0909: उ DEVANAGARI LETTER U
-    - ["\u0941", "\u0909"]
-
-    # U+092A: प DEVANAGARI LETTER PA
-    # U+092B: फ DEVANAGARI LETTER PHA
-    - ["\u092a", "\u092b"]
-
-    # U+0930: र DEVANAGARI LETTER RA
-    # U+0931: ऱ DEVANAGARI LETTER RRA
-    # U+090B: ऋ DEVANAGARI LETTER VOCALIC R
-    # U+0943: ृ DEVANAGARI VOWEL SIGN VOCALIC R
-    - ["\u0930", "\u0931", "\u090b", "\u0943"]
-
-    # U+0915: क DEVANAGARI LETTER KA
-    # U+0916: ख DEVANAGARI LETTER KHA
-    - ["\u0915", "\u0916"]
-
-    # U+0924: त DEVANAGARI LETTER TA
-    # U+0925: थ DEVANAGARI LETTER THA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+0930: र DEVANAGARI LETTER RA
-    - ["\u0924", "\u0925", "\u0924\u094d\u0930"]
-
-    # U+091A: च DEVANAGARI LETTER CA
-    # U+091B: छ DEVANAGARI LETTER CHA
-    - ["\u091a", "\u091b"]
-
-    # U+091F: ट DEVANAGARI LETTER TTA
-    # U+0920: ठ DEVANAGARI LETTER TTHA
-    - ["\u091f", "\u0920"]
-
-  - letters: # rowkeys_marathi3.xml
-    # U+0949: ॉ DEVANAGARI VOWEL SIGN CANDRA O
-    # U+0911: ऑ DEVANAGARI LETTER CANDRA O
-    - ["\u0949", "\u0911"]
-
-    # U+0945: ॅ DEVANAGARI VOWEL SIGN CANDRA E
-    # U+090D: ऍ DEVANAGARI LETTER CANDRA E
-    - ["\u0945", "\u090d"]
-
-    # U+0902: ं DEVANAGARI SIGN ANUSVARA
-    # U+0903: ः DEVANAGARI SIGN VISARGA
-    # U+0901: ँ DEVANAGARI SIGN CANDRABINDU
-    - ["\u0902", "\u0903", "\u0901"]
-
-    # U+092E: म DEVANAGARI LETTER MA
-    - ["\u092e"]
-
-    # U+0928: न DEVANAGARI LETTER NA
-    # U+0923: ण DEVANAGARI LETTER NNA
-    # U+091E: ञ DEVANAGARI LETTER NYA
-    # U+0919: ङ DEVANAGARI LETTER NGA
-    - ["\u0928", "\u0923", "\u091e", "\u0919"]
-
-    # U+0935: व DEVANAGARI LETTER VA
-    - ["\u0935"]
-
-    # U+0932: ल DEVANAGARI LETTER LA
-    # U+0933: ळ DEVANAGARI LETTER LLA
-    - ["\u0932", "\u0933"]
-
-    # U+0938: स DEVANAGARI LETTER SA
-    # U+0936: श DEVANAGARI LETTER SHA
-    # U+0937: ष DEVANAGARI LETTER SSA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+0930: र DEVANAGARI LETTER RA
-    - ["\u0938", "\u0936", "\u0937", "\u0936\u094d\u0930"]
-
-    # U+092F: य DEVANAGARI LETTER YA
-    - ["\u092f"]
-
-    # U+0915: क DEVANAGARI LETTER KA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+0937: ष DEVANAGARI LETTER SSA
-    - ["\u0915\u094d\u0937"]
-
-    - $delete
-
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Devanagari/nepali_romanized.yaml b/java/assets/layouts/Devanagari/nepali_romanized.yaml
deleted file mode 100644
index 4bf85c7f55e6497c3787f18cec94877fe51f649b..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Devanagari/nepali_romanized.yaml
+++ /dev/null
@@ -1,128 +0,0 @@
-name: Nepali (Romanized)
-languages: ne-NP
-useZWNJKey: true
-rows:
-  - letters: # rowkeys_nepali_romanized1.xml
-    # U+091F: ट DEVANAGARI LETTER TTA
-    # U+093C: ़ DEVANAGARI SIGN NUKTA
-    # U+0920: ठ DEVANAGARI LETTER TTHA
-    - {type: case, normal: ["\u091f", "%", "\u093c"], shifted: ["\u0920"]}
-
-    # U+094C: ौ DEVANAGARI VOWEL SIGN AU
-    # U+0914: औ DEVANAGARI LETTER AU
-    - {type: case, normal: ["\u094c"], shifted: ["\u0914"]}
-
-    # U+0947: े DEVANAGARI VOWEL SIGN E
-    # U+0948: ै DEVANAGARI VOWEL SIGN AI
-    - {type: case, normal: ["\u0947"], shifted: ["\u0948"]}
-
-    # U+0930: र DEVANAGARI LETTER RA
-    # U+0943: ृ DEVANAGARI VOWEL SIGN VOCALIC R
-    - {type: case, normal: ["\u0930"], shifted: ["\u0943"]}
-
-    # U+0924: त DEVANAGARI LETTER TA
-    # U+0925: थ DEVANAGARI LETTER THA
-    - {type: case, normal: ["\u0924"], shifted: ["\u0925"]}
-
-    # U+092F: य DEVANAGARI LETTER YA
-    # U+091E: ञ DEVANAGARI LETTER NYA
-    - {type: case, normal: ["\u092f"], shifted: ["\u091e"]}
-
-    # U+0941: ु DEVANAGARI VOWEL SIGN U
-    # U+0942: ू DEVANAGARI VOWEL SIGN UU
-    - {type: case, normal: ["\u0941"], shifted: ["\u0942"]}
-
-    # U+093F: ि DEVANAGARI VOWEL SIGN I
-    # U+0940: ी DEVANAGARI VOWEL SIGN II
-    - {type: case, normal: ["\u093f"], shifted: ["\u0940"]}
-
-    # U+094B: ो DEVANAGARI VOWEL SIGN O
-    # U+0913: ओ DEVANAGARI LETTER O
-    - {type: case, normal: ["\u094b"], shifted: ["\u0913"]}
-
-    # U+092A: प DEVANAGARI LETTER PA
-    # U+092B: फ DEVANAGARI LETTER PHA
-    - {type: case, normal: ["\u092a"], shifted: ["\u092b"]}
-
-    # U+0907: इ DEVANAGARI LETTER I
-    # U+0908: ई DEVANAGARI LETTER II
-    - {type: case, normal: ["\u0907"], shifted: ["\u0908"]}
-
-  - letters: # rowkeys_nepali_romanized2.xml
-    # U+093E: ा DEVANAGARI VOWEL SIGN AA
-    # U+0906: आ DEVANAGARI LETTER AA
-    - {type: case, normal: ["\u093e"], shifted: ["\u0906"]}
-
-    # U+0938: स DEVANAGARI LETTER SA
-    # U+0936: श DEVANAGARI LETTER SHA
-    - {type: case, normal: ["\u0938"], shifted: ["\u0936"]}
-
-    # U+0926: द DEVANAGARI LETTER DA
-    # U+0927: ध DEVANAGARI LETTER DHA
-    - {type: case, normal: ["\u0926"], shifted: ["\u0927"]}
-
-    # U+0909: उ DEVANAGARI LETTER U
-    # U+090A: ऊ DEVANAGARI LETTER UU
-    - {type: case, normal: ["\u0909"], shifted: ["\u090a"]}
-
-    # U+0917: ग DEVANAGARI LETTER GA
-    # U+0918: घ DEVANAGARI LETTER GHA
-    - {type: case, normal: ["\u0917"], shifted: ["\u0918"]}
-
-    # U+0939: ह DEVANAGARI LETTER HA
-    # U+0905: अ DEVANAGARI LETTER A
-    - {type: case, normal: ["\u0939"], shifted: ["\u0905"]}
-
-    # U+091C: ज DEVANAGARI LETTER JA
-    # U+091D: झ DEVANAGARI LETTER JHA
-    - {type: case, normal: ["\u091c"], shifted: ["\u091d"]}
-
-    # U+0915: क DEVANAGARI LETTER KA
-    # U+0916: ख DEVANAGARI LETTER KHA
-    - {type: case, normal: ["\u0915"], shifted: ["\u0916"]}
-
-    # U+0932: ल DEVANAGARI LETTER LA
-    # U+0965: ॥ DEVANAGARI DOUBLE DANDA
-    - {type: case, normal: ["\u0932"], shifted: ["\u0965"]}
-
-    # U+090F: ए DEVANAGARI LETTER E
-    # U+0910: ऐ DEVANAGARI LETTER AI
-    - {type: case, normal: ["\u090f"], shifted: ["\u0910"]}
-
-    # U+0950: ॐ DEVANAGARI OM
-    # U+0903: ः DEVANAGARI SIGN VISARGA
-    - {type: case, normal: ["\u0950"], shifted: ["\u0903"]}
-
-  - letters: # rowkeys_nepali_romanized3.xml
-    # U+0937: ष DEVANAGARI LETTER SSA
-    # U+090B: ऋ DEVANAGARI LETTER VOCALIC R
-    - {type: case, normal: ["\u0937"], shifted: ["\u090b"]}
-
-    # U+0921: ड DEVANAGARI LETTER DDA
-    # U+0922: ढ DEVANAGARI LETTER DDHA
-    - {type: case, normal: ["\u0921"], shifted: ["\u0922"]}
-
-    # U+091A: च DEVANAGARI LETTER CA
-    # U+091B: छ DEVANAGARI LETTER CHA
-    - {type: case, normal: ["\u091a"], shifted: ["\u091b"]}
-
-    # U+0935: व DEVANAGARI LETTER VA
-    # U+0901: ँ DEVANAGARI SIGN CANDRABINDU
-    - {type: case, normal: ["\u0935"], shifted: ["\u0901"]}
-
-    # U+092C: ब DEVANAGARI LETTER BA
-    # U+092D: भ DEVANAGARI LETTER BHA
-    - {type: case, normal: ["\u092c"], shifted: ["\u092d"]}
-
-    # U+0928: न DEVANAGARI LETTER NA
-    # U+0923: ण DEVANAGARI LETTER NNA
-    - {type: case, normal: ["\u0928"], shifted: ["\u0923"]}
-
-    # U+092E: म DEVANAGARI LETTER MA
-    # U+0902: ं DEVANAGARI SIGN ANUSVARA
-    - {type: case, normal: ["\u092e"], shifted: ["\u0902"]}
-
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+093D: ऽ DEVANAGARI SIGN AVAGRAHA
-    # U+0919: ङ DEVANAGARI LETTER NGA
-    - {type: case, normal: ["\u094d", "\u093d"], shifted: ["\u0919"]}
\ No newline at end of file
diff --git a/java/assets/layouts/Devanagari/nepali_traditional.yaml b/java/assets/layouts/Devanagari/nepali_traditional.yaml
deleted file mode 100644
index 53488a6532f15579122f58ac8afcee895abe97d2..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Devanagari/nepali_traditional.yaml
+++ /dev/null
@@ -1,166 +0,0 @@
-name: Nepali (Traditional)
-languages: ne-NP
-useZWNJKey: true
-rows:
-  - letters: # rowkeys_nepali_traditional1.xml
-    # U+091F: ट DEVANAGARI LETTER TTA
-    # U+0924: त DEVANAGARI LETTER TA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+091E: ञ DEVANAGARI LETTER NYA
-    # U+091C: ज DEVANAGARI LETTER JA
-    # U+0965: ॥ DEVANAGARI DOUBLE DANDA
-    - {type: case, normal: ["\u091f"], shifted: ["\u0924\u094d\u0924", "\u091e", "\u091c\u094d\u091e", "\u0965"]}
-
-    # U+0927: ध DEVANAGARI LETTER DHA
-    # U+0921: ड DEVANAGARI LETTER DDA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+0922: ढ DEVANAGARI LETTER DDHA
-    # U+0908: ई DEVANAGARI LETTER II
-    - {type: case, normal: ["\u0927"], shifted: ["\u0921\u094d\u0922", "\u0908"]}
-
-    # U+092D: भ DEVANAGARI LETTER BHA
-    # U+0910: ऐ DEVANAGARI LETTER AI
-    # U+0918: घ DEVANAGARI LETTER GHA
-    - {type: case, normal: ["\u092d"], shifted: ["\u0910", "\u0918"]}
-
-    # U+091A: च DEVANAGARI LETTER CA
-    # U+0926: द DEVANAGARI LETTER DA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+0935: व DEVANAGARI LETTER VA
-    # U+0927: ध DEVANAGARI LETTER DHA
-    - {type: case, normal: ["\u091a"], shifted: ["\u0926\u094d\u0935", "\u0926\u094d\u0927"]}
-
-    # U+0924: त DEVANAGARI LETTER TA
-    # U+091F: ट DEVANAGARI LETTER TTA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+091B: छ DEVANAGARI LETTER CHA
-    - {type: case, normal: ["\u0924"], shifted: ["\u091f\u094d\u091f", "\u091b"]}
-
-    # U+0925: थ DEVANAGARI LETTER THA
-    # U+0920: ठ DEVANAGARI LETTER TTHA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+091F: ट DEVANAGARI LETTER TTA
-    - {type: case, normal: ["\u0925"], shifted: ["\u0920\u094d\u0920", "\u091f"]}
-
-    # U+0917: ग DEVANAGARI LETTER GA
-    # U+090A: ऊ DEVANAGARI LETTER UU
-    # U+0920: ठ DEVANAGARI LETTER TTHA
-    - {type: case, normal: ["\u0917"], shifted: ["\u090a", "\u0920"]}
-
-    # U+0937: ष DEVANAGARI LETTER SSA
-    # U+0915: क DEVANAGARI LETTER KA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+0921: ड DEVANAGARI LETTER DDA
-    - {type: case, normal: ["\u0937"], shifted: ["\u0915\u094d\u0937", "\u0921"]}
-
-    # U+092F: य DEVANAGARI LETTER YA
-    # U+0907: इ DEVANAGARI LETTER I
-    # U+0922: ढ DEVANAGARI LETTER DDHA
-    - {type: case, normal: ["\u092f"], shifted: ["\u0907", "\u0922"]}
-
-    # U+0909: उ DEVANAGARI LETTER U
-    # U+090F: ए DEVANAGARI LETTER E
-    # U+0923: ण DEVANAGARI LETTER NNA
-    - {type: case, normal: ["\u0909"], shifted: ["\u090f", "\u0923"]}
-
-    # U+0907: इ DEVANAGARI LETTER I
-    # U+0914: औ DEVANAGARI LETTER AU
-    # U+0943: ृ DEVANAGARI VOWEL SIGN VOCALIC R
-    # U+0913: ओ DEVANAGARI LETTER O
-    - {type: case, normal: ["\u0907", "\u0914"], shifted: ["\u0943", "\u0913"]}
-
-  - letters: # rowkeys_nepali_traditional2.xml
-    # U+092C: ब DEVANAGARI LETTER BA
-    # U+0906: आ DEVANAGARI LETTER AA
-    - {type: case, normal: ["\u092c"], shifted: ["\u0906"]}
-
-    # U+0915: क DEVANAGARI LETTER KA
-    # U+0919: ङ DEVANAGARI LETTER NGA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    - {type: case, normal: ["\u0915"], shifted: ["\u0919\u094d"]}
-
-    # U+092E: म DEVANAGARI LETTER MA
-    # U+0921: ड DEVANAGARI LETTER DDA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    - {type: case, normal: ["\u092e"], shifted: ["\u0921\u094d\u0921"]}
-
-    # U+093E: ा DEVANAGARI VOWEL SIGN AA
-    # U+0901: ँ DEVANAGARI SIGN CANDRABINDU
-    - {type: case, normal: ["\u093e"], shifted: ["\u0901"]}
-
-    # U+0928: न DEVANAGARI LETTER NA
-    # U+0926: द DEVANAGARI LETTER DA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    - {type: case, normal: ["\u0928"], shifted: ["\u0926\u094d\u0926"]}
-
-    # U+091C: ज DEVANAGARI LETTER JA
-    # U+091D: झ DEVANAGARI LETTER JHA
-    - {type: case, normal: ["\u091c"], shifted: ["\u091d"]}
-
-    # U+0935: व DEVANAGARI LETTER VA
-    # U+094B: ो DEVANAGARI VOWEL SIGN O
-    - {type: case, normal: ["\u0935"], shifted: ["\u094b"]}
-
-    # U+092A: प DEVANAGARI LETTER PA
-    # U+092B: फ DEVANAGARI LETTER PHA
-    - {type: case, normal: ["\u092a"], shifted: ["\u092b"]}
-
-    # U+093F: ि DEVANAGARI VOWEL SIGN I
-    # U+0940: ी DEVANAGARI VOWEL SIGN II
-    - {type: case, normal: ["\u093f"], shifted: ["\u0940"]}
-
-    # U+0938: स DEVANAGARI LETTER SA
-    # U+091F: ट DEVANAGARI LETTER TTA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+0920: ठ DEVANAGARI LETTER TTHA
-    - {type: case, normal: ["\u0938"], shifted: ["\u091f\u094d\u0920"]}
-
-    # U+0941: ु DEVANAGARI VOWEL SIGN U
-    # U+0942: ू DEVANAGARI VOWEL SIGN UU
-    - {type: case, normal: ["\u0941"], shifted: ["\u0942"]}
-
-  - letters: # rowkeys_nepali_traditional3.xml
-    # U+0936: श DEVANAGARI LETTER SHA
-    # U+0915: क DEVANAGARI LETTER KA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    - {type: case, normal: ["\u0936"], shifted: ["\u0915\u094d"]}
-
-    # U+0939: ह DEVANAGARI LETTER HA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+092E: म DEVANAGARI LETTER MA
-    - {type: case, normal: ["\u0939"], shifted: ["\u0939\u094d\u092e"]}
-
-    # U+0905: अ DEVANAGARI LETTER A
-    # U+090B: ऋ DEVANAGARI LETTER VOCALIC R
-    - {type: case, normal: ["\u0905"], shifted: ["\u090b"]}
-
-    # U+0916: ख DEVANAGARI LETTER KHA
-    # U+0950: ॐ DEVANAGARI OM
-    - {type: case, normal: ["\u0916"], shifted: ["\u0950"]}
-
-    # U+0926: द DEVANAGARI LETTER DA
-    # U+094C: ौ DEVANAGARI VOWEL SIGN AU
-    - {type: case, normal: ["\u0926"], shifted: ["\u094c"]}
-
-    # U+0932: ल DEVANAGARI LETTER LA
-    # U+0926: द DEVANAGARI LETTER DA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+092F: य DEVANAGARI LETTER YA
-    - {type: case, normal: ["\u0932"], shifted: ["\u0926\u094d\u092f"]}
-
-    # U+0947: े DEVANAGARI VOWEL SIGN E
-    # U+0903: ः DEVANAGARI SIGN VISARGA
-    # U+093D: ऽ DEVANAGARI SIGN AVAGRAHA
-    # U+0902: ं DEVANAGARI SIGN ANUSVARA
-    - {type: case, normal: ["\u0947", "\u0903", "\u093d"], shifted: ["\u0902"]}
-
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    # U+0919: ङ DEVANAGARI LETTER NGA
-    - {type: case, normal: ["\u094d"], shifted: ["\u0919"]}
-
-    # U+0930: र DEVANAGARI LETTER RA
-    # U+0941: ु DEVANAGARI VOWEL SIGN U
-    # U+0948: ै DEVANAGARI VOWEL SIGN AI
-    # U+0936: श DEVANAGARI LETTER SHA
-    # U+094D: ् DEVANAGARI SIGN VIRAMA
-    - {type: case, normal: ["\u0930", "\u0930\u0941"], shifted: ["\u0948", "\u0936\u094d\u0930"]}
\ No newline at end of file
diff --git a/java/assets/layouts/French/bepo.yaml b/java/assets/layouts/French/bepo.yaml
deleted file mode 100644
index 16683f35242bd221cf4788af3d8c218c3574e417..0000000000000000000000000000000000000000
--- a/java/assets/layouts/French/bepo.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-name: BEPO
-languages: fr
-rows:
-  - letters: # rowkeys_bepo1.xml
-    - ['b']
-    - ['é', 'è']
-    - ['p']
-    - ['o']
-    - ['v']
-    - ['d']
-    - ['l']
-    - ['j']
-    - ['z']
-    - ['w']
-  - letters: # rowkeys_bepo2.xml
-    - ['a']
-    - ['u']
-    - ['i']
-    - ['e']
-    - ['c']
-    - ['t']
-    - ['s']
-    - ['r']
-    - ['n']
-    - ['m']
-  - letters: # rowkeys_bepo3.xml
-    - ['y']
-    - ['x']
-    - ['k']
-    - ['q']
-    - ['g']
-    - ['h']
-    - ['f']
\ No newline at end of file
diff --git a/java/assets/layouts/Georgian/georgian.yaml b/java/assets/layouts/Georgian/georgian.yaml
deleted file mode 100644
index 14a42bd1ef36815e9e0a96ce49ed29830d86a77b..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Georgian/georgian.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-name: Georgian
-languages: ka_GE
-attributes: {shiftable: false} # Automatic shifting breaks many of the characters
-rows:
-  - letters:
-    - 'ქ'
-    - {type: case, normal: ['წ', 'ჭ'], shiftedManually: ['ჭ']}
-    - ['ე', '%', 'ჱ']
-    - {type: case, normal: ['რ', 'ღ'], shiftedManually: ['ღ']}
-    - {type: case, normal: ['ტ', 'თ'], shiftedManually: ['თ']}
-    - ['ყ', '%', 'ჸ']
-    - 'უ'
-    - ['ი', '%', 'ჲ']
-    - 'ო'
-    - 'პ'
-  - letters:
-    - ['ა', 'ჺ']
-    - {type: case, normal: ['ს', 'შ'], shiftedManually: ['შ']}
-    - 'დ'
-    - ['ფ', 'ჶ']
-    - ['გ', 'ჹ']
-    - ['ჰ', 'ჵ']
-    - {type: case, normal: ['ჯ', 'ჟ', 'ჷ'], shiftedManually: ['ჟ']}
-    - 'კ'
-    - 'ლ'
-  - letters:
-    - {type: case, normal: ['ზ', 'ძ'], shiftedManually: ['ძ']}
-    - ['ხ', 'ჴ']
-    - {type: case, normal: ['ც', 'ჩ'], shiftedManually: ['ჩ']}
-    - ['ვ', 'ჳ']
-    - 'ბ'
-    - ['ნ', 'ჼ']
-    - 'მ'
\ No newline at end of file
diff --git a/java/assets/layouts/German/german.yaml b/java/assets/layouts/German/german.yaml
deleted file mode 100644
index 61a1115f6841ed639706d7eaa76ea14cc2e19f2d..0000000000000000000000000000000000000000
--- a/java/assets/layouts/German/german.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-# TODO: Redundant with swiss?
-name: Deutsch
-languages: de
-rows:
-  - letters: q w e r t z u i o p ü
-  - letters: a s d f g h j k l ö ä
-  - letters: y x c v b n m
\ No newline at end of file
diff --git a/java/assets/layouts/Greek/greek.yaml b/java/assets/layouts/Greek/greek.yaml
deleted file mode 100644
index 6e24596597ffaa4ae54d2efd09f0ffdf8ac10cf1..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Greek/greek.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-name: Greek
-languages: el
-rows:
-  - letters: # rowkeys_greek1.xml
-    - {type: case, normal: [';', '%', ':', '·'], shifted: [':', '%', ';', '·']}
-    - {type: base, spec: 'Ï‚', attributes: {shiftable: false}} # This specific character must not be shifted
-    - ['ε', 'έ', '%', 'ὲ', 'ἐ', 'ἑ', 'ἔ', 'ἕ', 'ἒ', 'ἓ']
-    - ['ρ', '%', 'ῥ']
-    - ['Ï„']
-    - ['υ', 'ύ', '%', 'ϋ', 'ΰ', 'ὺ', 'ῦ', 'ὐ', 'ὑ', 'ὔ', 'ὕ', 'ὒ', 'ὓ', 'ὖ', 'ὗ', 'ῢ', 'ῧ']
-    - ['θ']
-    - ['ι', 'ί', '%', 'ϊ', 'ΐ', 'ὶ', 'ῖ', 'ἰ', 'ἱ', 'ἴ', 'ἵ', 'ἲ', 'ἳ', 'ἶ', 'ἷ', 'ῒ', 'ῗ']
-    - ['ο', 'ό', '%', 'ὸ', 'ὀ', 'ὁ', 'ὄ', 'ὅ', 'ὂ', 'ὃ']
-    - ['Ï€']
-  - letters: # rowkeys_greek2.xml
-    - {type: case, normal: ['α', 'ά', 'ὰ', 'ᾶ', 'ἀ', 'ἁ', 'ἄ', 'ἅ', 'ἂ', 'ἃ', 'ἆ', 'ἇ', 'ᾳ', 'ᾴ', 'ᾲ', 'ᾷ', 'ᾀ', 'ᾁ', 'ᾄ', 'ᾅ', 'ᾂ', 'ᾃ', 'ᾆ', 'ᾇ'], shifted: ['Α', 'Ά', 'Ὰ', 'Ἀ', 'Ἁ', 'ἄ', 'ἅ', 'Ἂ', 'Ἃ', 'Ἆ', 'Ἇ']}
-    - ['σ']
-    - ['δ']
-    - ['φ']
-    - ['γ']
-    - {type: case, normal: ['η', 'ή', 'ὴ', 'ῆ', 'ἠ', 'ἡ', 'ἤ', 'ἥ', 'ἢ', 'ἣ', 'ἦ', 'ἧ', 'ῃ', 'ῄ', 'ῂ', 'ῇ', 'ᾐ', 'ᾑ', 'ᾔ', 'ᾕ', 'ᾒ', 'ᾓ', 'ᾖ', 'ᾗ'], shifted: ['Η', 'Ή', 'Ὴ', 'Ἠ', 'Ἡ', 'Ἤ', 'Ἥ', 'Ἢ', 'Ἣ', 'Ἦ', 'Ἧ']}
-    - ['ξ']
-    - ['κ']
-    - ['λ']
-  - letters: # rowkeys_greek3.xml
-    - ['ζ']
-    - ['χ']
-    - ['ψ']
-    - {type: case, normal: ['ω', 'ώ', 'ὼ', 'ῶ', 'ὠ', 'ὡ', 'ὤ', 'ὥ', 'ὢ', 'ὣ', 'ὦ', 'ὧ', 'ῳ', 'ῴ', 'ῲ', 'ῷ', 'ᾠ', 'ᾡ', 'ᾤ', 'ᾥ', 'ᾢ', 'ᾣ', 'ᾦ', 'ᾧ'], shifted: ['ω', 'Ώ', 'Ὼ', 'Ὠ', 'Ὡ', 'Ὤ', 'Ὥ', 'Ὢ', 'Ὣ', 'Ὦ', 'Ὧ']}
-    - ['β']
-    - ['ν']
-    - ['μ']
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Hebrew/hebrew-staggered.yaml b/java/assets/layouts/Hebrew/hebrew-staggered.yaml
deleted file mode 100644
index b75b5a1275d1a56da6b8482b1c7db61dbbce3cbd..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Hebrew/hebrew-staggered.yaml
+++ /dev/null
@@ -1,35 +0,0 @@
-name: Hebrew Staggered
-languages: iw
-attributes: {moreKeyMode: OnlyExplicit}
-rows:
-  - letters:
-    - ['ק', '1']
-    - ['ר', '2']
-    - ['א', '3']
-    - ['ט', '4']
-    - ['ו', '5']
-    - ['ן', '6']
-    - ['ם', '7']
-    - ['פ', '8']
-    - $delete
-  - letters:
-    - ['ש']
-    - ['ד']
-    - ['ג', 'ג׳']
-    - ['×›']
-    - ['×¢']
-    - ['י', 'ײַ']
-    - ['ח', 'ח׳']
-    - ['ל']
-    - ['ך', '9']
-    - ['×£', '0']
-  - letters:
-    - ['ז', 'ז׳']
-    - ['ס']
-    - ['ב']
-    - ['×”']
-    - ['× ']
-    - ['מ']
-    - ['צ', 'צ׳']
-    - ['ת', 'ת׳']
-    - ['ץ', 'ץ׳']
\ No newline at end of file
diff --git a/java/assets/layouts/Hebrew/hebrew.yaml b/java/assets/layouts/Hebrew/hebrew.yaml
deleted file mode 100644
index a1dad772577e1e7a13c3e34e04af09a6e26aa990..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Hebrew/hebrew.yaml
+++ /dev/null
@@ -1,38 +0,0 @@
-name: Hebrew
-languages: iw
-rows:
-  - letters: # rowkeys_hebrew1.xml
-    # skipped unknown case {'{http://schemas.android.com/apk/res-auto}mode': 'email|url'}
-    - ["\\'", '%', '"']
-    - ['-', '%', '_']
-    - ['ק']
-    - ['ר']
-    - ['א']
-    - ['ט']
-    - ['ו']
-    - ['ן']
-    - ['ם']
-    - ['פ']
-  - letters: # rowkeys_hebrew2.xml
-    - ['ש']
-    - ['ד']
-    - ['ג', 'ג׳']
-    - ['×›']
-    - ['×¢']
-    - ['י', 'ײַ']
-    - ['ח', 'ח׳']
-    - ['ל']
-    - ['ך']
-    - ['×£']
-  - letters: # rowkeys_hebrew3.xml
-    - ['ז', 'ז׳']
-    - ['ס']
-    - ['ב']
-    - ['×”']
-    - ['× ']
-    - ['מ']
-    - ['צ', 'צ׳']
-    - ['ת', 'ת׳']
-    - ['ץ', 'ץ׳']
-    - $delete # force no shift key
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Icelandic/icelandic.yaml b/java/assets/layouts/Icelandic/icelandic.yaml
deleted file mode 100644
index 83a4b8fbb26f03f90d9ce42cba6f31d35adca530..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Icelandic/icelandic.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Contributed by ornstrange
-name: Íslenska
-languages: is
-rows:
-  - letters: q w e r t y u i o p ð
-  - letters: a s d f g h j k l æ ö
-  - letters: z x c v b n m þ
diff --git a/java/assets/layouts/Kannada/kannada.yaml b/java/assets/layouts/Kannada/kannada.yaml
deleted file mode 100644
index d4ccf6192694499041b79370486b916946281d35..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Kannada/kannada.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-name: Kannada
-languages: kn-IN
-useZWNJKey: true
-rows:
-  - letters: # rowkeys_kannada1.xml
-    - ['ೌ', 'ಔ', '೧']
-    - ['ೈ', 'ಐ', '೨']
-    - ['ಾ', 'ಆ', '೩']
-    - ['ೀ', 'ಈ', '೪']
-    - ['ೂ', 'ಊ', '೫']
-    - ['ಬ', 'ಭ', '೬']
-    - ['ಹ', 'ಙ', '೭']
-    - ['ಗ', 'ಘ', '೮']
-    - ['ದ', 'ಧ', '೯']
-    - ['ಜ', 'ಝ', '೦']
-    - ['ಡ', 'ಢ']
-  - letters: # rowkeys_kannada2.xml
-    - ['ೋ', 'ಓ']
-    - ['ೇ', 'ಏ']
-    - ['್', 'ಅ']
-    - ['ಿ', 'ಇ']
-    - ['ು', 'ಉ']
-    - ['ಪ', 'ಫ']
-    - ['ರ', 'ಱ', 'ೃ']
-    - ['ಕ', 'ಖ']
-    - ['ತ', 'ಥ']
-    - ['ಚ', 'ಛ']
-    - ['ಟ', 'ಠ']
-  - letters: # rowkeys_kannada3.xml
-    - ['ೆ', 'ಒ']
-    - ['ಂ', 'ಎ']
-    - ['ಮ']
-    - ['ನ', 'ಣ']
-    - ['ವ']
-    - ['ಲ', 'ಳ']
-    - ['ಸ', 'ಶ']
-    - ['ಋ', '್ರ']
-    - ['ಷ', 'ಕ್ಷ']
-    - ['ಯ', 'ಜ್ಞ']
-    - $delete # force no shift key
\ No newline at end of file
diff --git a/java/assets/layouts/Khmer/khmer.yaml b/java/assets/layouts/Khmer/khmer.yaml
deleted file mode 100644
index 556c95a80063d877615682f1d5430eae0a7934dc..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Khmer/khmer.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-name: Khmer
-languages: km-KH
-minimumFunctionalKeyWidth: 0.0
-attributes: { moreKeyMode: OnlyExplicit }
-numberRowMode: AlwaysDisabled
-rows:
-  - letters: # rowkeys_khmer1.xml
-    - {type: case, normal: ['១', '1', '៱'], shifted: ['!', "!icon/zwj_key|\u200d"]}
-    - {type: case, normal: ['២', '2', '៲'], shifted: ['ៗ', "!icon/zwnj_key|\u200c"]}
-    - {type: case, normal: ['៣', '3', '៳'], shifted: ['"', '៑']}
-    - {type: case, normal: ['៤', '4', '៴'], shifted: ['៛', '$', '€']}
-    - {type: case, normal: ['៥', '5', '៵'], shifted: ['%', '៖']}
-    - {type: case, normal: ['៦', '6', '៶'], shifted: ['៍', '៙']}
-    - {type: case, normal: ['៧', '7', '៷'], shifted: ['័', '៚']}
-    - {type: case, normal: ['៨', '8', '៸'], shifted: ['៏', "\u17d7", '*']}
-    - {type: case, normal: ['៩', '9', '៹'], shifted: ['(', '{', '«']}
-    - {type: case, normal: ['០', '0', '៰'], shifted: [')', '}', '»']}
-    - {type: case, normal: ['ឥ', 'ឦ'], shifted: ['៌', '×']}
-    - {type: case, normal: ['ឲ', 'ឱ'], shifted: ['៎']}
-  - letters: # rowkeys_khmer2.xml
-    - {type: case, normal: ['ឆ'], shifted: ['ឈ', 'ៜ']}
-    - {type: case, normal: ['ឹ'], shifted: ['ឺ', '៝']}
-    - {type: case, normal: ['េ'], shifted: ['ែ']}
-    - {type: case, normal: ['រ'], shifted: ['ឬ', 'ឫ']}
-    - {type: case, normal: ['ត'], shifted: ['ទ']}
-    - {type: case, normal: ['áž™'], shifted: ['áž½']}
-    - {type: case, normal: ['áž»'], shifted: ['áž¼']}
-    - {type: case, normal: ['ិ'], shifted: ['ី']}
-    - {type: case, normal: ['ោ'], shifted: ['ៅ']}
-    - {type: case, normal: ['áž•'], shifted: ['áž—']}
-    - {type: case, normal: ['ៀ'], shifted: ['ឿ']}
-    - {type: case, normal: ['ឪ', 'ឧ', 'ឱ', 'ឳ', 'ឩ', 'ឨ'], shifted: ['ឰ']}
-  - letters: # rowkeys_khmer3.xml
-    - {type: case, normal: ['ា'], shifted: ['ាំ']}
-    - {type: case, normal: ['ស'], shifted: ['ៃ']}
-    - {type: case, normal: ['ដ'], shifted: ['ឌ']}
-    - {type: case, normal: ['ថ'], shifted: ['ធ']}
-    - {type: case, normal: ['ង'], shifted: ['អ']}
-    - {type: case, normal: ['ហ'], shifted: ['ះ', 'ៈ']}
-    - {type: case, normal: ['្'], shifted: ['ញ']}
-    - {type: case, normal: ['ក'], shifted: ['គ', 'ឝ']}
-    - {type: case, normal: ['áž›'], shifted: ['áž¡']}
-    - {type: case, normal: ['ើ'], shifted: ['ោះ']}
-    - {type: case, normal: ['់'], shifted: ['៉']}
-    - {type: case, normal: ['ឮ', 'ឭ', 'ឰ'], shifted: ['ឯ']}
-  - letters: # rowkeys_khmer4.xml
-    - {type: case, normal: ['ឋ'], shifted: ['ឍ']}
-    - {type: case, normal: ['ខ'], shifted: ['ឃ']}
-    - {type: case, normal: ['ច'], shifted: ['ជ']}
-    - {type: case, normal: ['វ'], shifted: ['េះ']}
-    - {type: case, normal: ['áž”'], shifted: ['áž–', 'ážž']}
-    - {type: case, normal: ['ន'], shifted: ['ណ']}
-    - {type: case, normal: ['ម'], shifted: ['ំ']}
-    - {type: case, normal: ['ុំ'], shifted: ['ុះ']}
-    - {type: case, normal: ['។'], shifted: ['៕']}
-    - {type: case, normal: ['៊', "\u17d8"], shifted: ['?']}
-# detected 4 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Lao/lao.yaml b/java/assets/layouts/Lao/lao.yaml
deleted file mode 100644
index 7c64b7de2269f50843206a78bec65aeeab046864..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Lao/lao.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-name: Lao
-languages: lo-LA
-minimumFunctionalKeyWidth: 0.0
-attributes: { moreKeyMode: OnlyExplicit }
-numberRowMode: AlwaysDisabled
-rows:
-  - letters: # rowkeys_lao1.xml
-    - {type: case, normal: ['ຢ', '1', '໑'], shifted: ['໑']}
-    - {type: case, normal: ['ຟ', '2', '໒'], shifted: ['໒']}
-    - {type: case, normal: ['ໂ', '3', '໓'], shifted: ['໓']}
-    - {type: case, normal: ['ຖ', '4', '໔'], shifted: ['໔']}
-    - {type: case, normal: ['ຸ'], shifted: ['໌']}
-    - {type: case, normal: ['ູ'], shifted: ['ຼ']}
-    - {type: case, normal: ['ຄ', '5', '໕'], shifted: ['໕']}
-    - {type: case, normal: ['ຕ', '6', '໖'], shifted: ['໖']}
-    - {type: case, normal: ['ຈ', '7', '໗'], shifted: ['໗']}
-    - {type: case, normal: ['ຂ', '8', '໘'], shifted: ['໘']}
-    - {type: case, normal: ['ຊ', '9', '໙'], shifted: ['໙']}
-    - {type: case, normal: ['ໍ'], shifted: ['ໍ່']}
-  - letters: # rowkeys_lao2.xml
-    - {type: case, normal: ['ົ'], shifted: ['ົ້']}
-    - {type: case, normal: ['ໄ', '0', '໐'], shifted: ['໐']}
-    - {type: case, normal: ['ຳ'], shifted: ['ຳ້']}
-    - {type: case, normal: ['ພ'], shifted: ['_']}
-    - {type: case, normal: ['ະ'], shifted: ['+']}
-    - {type: case, normal: ['ິ'], shifted: ['ິ້']}
-    - {type: case, normal: ['ີ'], shifted: ['ີ້']}
-    - {type: case, normal: ['ຮ'], shifted: ['ຣ']}
-    - {type: case, normal: ['ນ'], shifted: ['ໜ']}
-    - {type: case, normal: ['ຍ'], shifted: ['ຽ']}
-    - {type: case, normal: ['ບ'], shifted: ['ຫຼ']}
-    - {type: case, normal: ['ລ'], shifted: ['”']}
-  - letters: # rowkeys_lao3.xml
-    - {type: case, normal: ['ັ'], shifted: ['ັ້']}
-    - {type: case, normal: ['ຫ'], shifted: [';']}
-    - {type: case, normal: ['ກ'], shifted: ['.']}
-    - {type: case, normal: ['ດ'], shifted: [',']}
-    - {type: case, normal: ['ເ'], shifted: [':']}
-    - {type: case, normal: ['້'], shifted: ['໊']}
-    - {type: case, normal: ['່'], shifted: ['໋']}
-    - {type: case, normal: ['າ'], shifted: ['!']}
-    - {type: case, normal: ['ສ'], shifted: ['?']}
-    - {type: case, normal: ['ວ'], shifted: ['%']}
-    - {type: case, normal: ['ງ'], shifted: ['=']}
-    - {type: case, normal: ['“'], shifted: ['“']}
-  - letters: # rowkeys_lao4.xml
-    - {type: case, normal: ['ຜ'], shifted: ['₭']}
-    - {type: case, normal: ['ປ'], shifted: ['(']}
-    - {type: case, normal: ['ແ'], shifted: ['ຯ']}
-    - {type: case, normal: ['ອ'], shifted: ['@']}
-    - {type: case, normal: ['ຶ'], shifted: ['ຶ້']}
-    - {type: case, normal: ['ື'], shifted: ['ື້']}
-    - {type: case, normal: ['ທ'], shifted: ['ໆ']}
-    - {type: case, normal: ['ມ'], shifted: ['ໝ']}
-    - {type: case, normal: ['ໃ'], shifted: ['$']}
-    - {type: case, normal: ['ຝ'], shifted: [')']}
-# detected 4 rows
\ No newline at end of file
diff --git a/java/assets/layouts/LayoutSpec.md b/java/assets/layouts/LayoutSpec.md
deleted file mode 100644
index 2edd76271cf645f953880565519bea95419c7aab..0000000000000000000000000000000000000000
--- a/java/assets/layouts/LayoutSpec.md
+++ /dev/null
@@ -1,1020 +0,0 @@
-# Keyboard Layout Format
-
-A lot of concepts are explained through examples in this document, please read through them to
-understand different ways of defining layouts.
-
-A good way to learn is also to read through the existing layouts in this repository.
-
-## Starting out
-
-The YAML file's entry point is the [Keyboard](#keyboard) data class. It only requires a name and
-rows.
-
-The QWERTY layout is defined like so:
-```yaml
-name: "QWERTY"
-rows:
-  - letters: q w e r t y u i o p
-  - letters: a s d f g h j k l
-  - letters: z x c v b n m
-```
-
-The name must be defined first, and letter rows are defined next.
-
-There are many ways to define the same thing. Use which one makes most sense for your use case. All rows in the below example are functionally identical:
-```yaml
-name: Different examples
-rows:
-  # Basic definition as string
-  - letters: q w e r t
-  
-  # Basic definition as string (quoting is necessary if you use some symbols)
-  - letters: "q w e r t"
-
-  # Definition as inline list
-  - letters: ["q", "w", "e", "r", "t"]
-
-  # Definition as multiline list, and unicode escapes
-  - letters:
-      # U+0071: LATIN SMALL LETTER Q
-      - "\u0071"
-      # U+0077: LATIN SMALL LETTER W
-      - "\u0077"
-      # U+0065: LATIN SMALL LETTER E
-      - "\u0065"
-      # U+0072: LATIN SMALL LETTER R
-      - "\u0072"
-      # U+0074: LATIN SMALL LETTER T
-      - "\u0074"
-
-  # Defining base, explicit case, and mixing randomly
-  - letters:
-      - {type: base, spec: q}
-      - {type: case, normal: w, shifted: W}
-      - e
-      - "\u0072"
-      - type: case
-        normal:
-          type: base
-          spec: "t|t" # pipe symbol is keyspec syntax: label|code
-          code: 0x74  # though you can set code explicitly too
-        shifted: {type: base, spec: T}
-```
-
-Defining layout-specific moreKeys can also be done in multiple ways:
-```yaml
-name: MoreKeys examples
-rows:
-  # List syntax: [primarykey, ...morekeys]
-  - letters:
-      - [a, Ä…]
-      - b
-      - [c, č]
-      - [d] # For consistency you can also specify a key without morekeys like this
-      - [e, Ä—, Ä™]
-
-  # You can also do it inline at the cost of readability
-  - letters: [[a, ą], b, [c, č], d, [e, ė, ę]]
-
-  # Explicit BaseKey syntax
-  - letters:
-      - {type: base, spec: "a", moreKeys: "Ä…"}
-      - {type: base, spec: b}
-      - type: base
-        spec: "c"
-        moreKeys: "č"
-      - "d"
-      - type: base
-        spec: "e"
-        moreKeys: ["Ä™", "Ä—"]
-
-  # You can use list syntax anywhere that expects a Key, such as `case`
-  - letters:
-      - type: case
-        normal: [a, Ä…]
-        shifted: [A, Ä„]
-      - b
-      - {type: case, normal: [c, č], shifted: [C, Č]}
-      - d
-      - [e, Ä™, Ä—]
-```
-
-These shortcuts for defining things are explained more in the shortcuts section. In practice you
-should avoid randomly mixing different ways of defining keys, you should stick to something that
-keeps the file readable and understandable.
-
-With RTL languages it's advised to use unicode escapes in order to keep the file easily editable.
-It's good practice to include a comment explaining each unicode character:
-```yaml
-name: Arabic
-rows:
-  - letters:
-      # U+0636: "ض" ARABIC LETTER DAD
-      - "\u0636"
-      # U+0635: "ص" ARABIC LETTER SAD
-      - "\u0635"
-      # U+062B: "Ø«" ARABIC LETTER THEH
-      - "\u062B"
-      # U+0642: "Ù‚" ARABIC LETTER QAF
-      # U+06A8: "Ú¨" ARABIC LETTER QAF WITH THREE DOTS ABOVE
-      - ["\u0642", "\u06A8"]
-```
-
-
-### Number row and bottom row
-
-A default number row and bottom row will be added if they are not explicitly defined. You can
-override them with custom ones for more advanced layouts:
-
-```yaml
-name: "PC QWERTY Example"
-numberRowMode: AlwaysEnabled
-rows:
-  - numbers: "` 1 2 3 4 5 6 7 8 9 0 - ="
-  - letters: "q w e r t y u i o p [ ] \\"
-  - letters: "a s d f g h j k l ; ' $delete"
-  - letters: "$shift z x c v b n m , . / $shift"
-  - bottom:  "$symbols $space $enter"
-```
-
-There can at most be one number row, and one bottom row. If they are explicitly defined in the
-layout file, then the number row must be at the top and bottom row must be at the bottom.
-Between 1 and 8 letter rows are permitted.
-
-### Template keys (automatic shift and backspace)
-The keyboard parser automatically prepends `$shift` and appends `$delete` to the final letter row
-when all of the following conditions are met:
-1. No `bottom` row is explicitly defined
-2. None of the letter rows explicitly set `$shift` or `$delete`
-
-What this means is that to customize the location of shift and delete, or to disable the shift key
-in your layout, you just need to specify `$shift` and/or `$delete` somewhere, and the automatic
-insertion will be disabled.  If you specify an explicit bottom row, you will need to manually specify
-them as well.
-
-In this example, the backspace (`$delete`) is relocated to the second row instead of its usual place in the third row:
-```yaml
-name: "Alphabet"
-rows:
-  - letters: a b c d e f g h i j
-  - letters: k l m n o p q r s $delete    # Backspace on this row instead of bottom row
-  - letters: $shift t u v w x y z $shift  # Two shift keys
-  - bottom:  $symbols $space $enter       # No comma or period
-```
-
-
-You can use the following template keys:
-
-* `$shift` - shift key
-* `$delete` - backspace key
-* `$space` - spacebar
-* `$enter` - enter/search/next/prev/go key
-* `$symbols` - switch to symbols menu
-* `$alphabet` - switch back to alphabet (only used in symbols layout)
-* `$action` - action key, user-defined, may be empty
-* `$number` - switch to numpad mode
-* `$contextual` - contextual key, `/` for URLs and date fields, `@` for email fields, `:` for time fields
-* `$zwnj` - Zero-width non-joiner key, and zero-width joiner key in morekeys.
-* `$gap` - regular-width gap
-* `$alt0` - switch to alt page 0, or back from alt page 0
-* `$alt1` - switch to alt page 1, or back from alt page 1
-* `$alt2` - switch to alt page 2, or back from alt page 2
-
----
-
-### List<Key> and Key definition shortcuts
-
-There are a few shortcuts to help make it easier to define layouts. These are documented in this section.
-
-#### `Key` as a YAML string
-
-An example of a full BaseKey definition:
-```yaml
-name: example
-rows:
-  - letters:
-      - type: base
-        spec: "a"
-```
-
-This shortcut allows you to define the exact same thing with just
-```yaml
-name: example
-rows:
-  - letters:
-      - a
-```
-
-#### `Key` as a YAML list
-
-An example of a full BaseKey definition with moreKeys:
-```yaml
-name: example
-rows:
-  - letters:
-      - type: base
-        spec: "a"
-        moreKeys: "ayy,ahh"
-```
-
-This shortcut allows you to define the exact same thing with just
-```yaml
-name: example
-rows:
-  - letters:
-      - [a, ayy, ahh]
-```
-
-The first element is treated as the spec, and all subsequent elements are turned into moreKeys.
-
-#### `List<Key>` as a YAML string
-
-An example of a List<Key> definition, using the string shortcut for defining `Key`:
-```yaml
-name: example
-rows:
-  - letters: [a, b, c]
-```
-
-This shortcut allows you to define the exact same thing with just
-```yaml
-name: example
-rows:
-  - letters: a b c
-  # or - letters: "a b c", necessary for yaml parsing if you use some special symbols
-```
-
-
-#### Key specs
-Key specs work the same way they do in AOSP keyboard. For example you can define a differing label from its code, without needing to use the long format.
-```yaml
-name: "Arabic example"
-rows:
-  - letters:
-    - " \u0654◌|\u0654" # The label will appear as ٔ◌ but it will only type the Hamza mark, without the ◌ circle
-```
-
-
-### Automatic moreKeys
-
-moreKeys refers to the extra keys that are accessible by long-pressing a key. The layout engine
-automatically adds a bunch of moreKeys to keys by default - symbols, actions, numbers, and accented
-letters are added based on the key's location and user settings.
-
-You can customize the behavior of automatic moreKeys by setting `moreKeyMode` in attributes. For
-example, to disable all automatic moreKeys, you can include this near the top of your layout
-definition:
-
-```yaml
-attributes: {moreKeyMode: OnlyExplicit}
-```
-
-moreKey modes are documented in the [More Key Mode](#more-key-mode) section of API reference.
-
-### Attribute system
-
-Attributes can be defined in multiple places: the keyboard itself, a specific row, or an individual
-key. Attributes which are unset get inherited in a particular order. See the
-[Key Attributes](#key-attributes) section of the API reference for all attributes and defaults.
-
-### Different key types
-
-The `base` key is fit for most cases, but `case` is also useful when you need the key to change
-based on shift state. See the [Keys](#keys) section of the API reference for all key types.
-
----
-
-
-
-
-# API Reference
-## Keyboard
-### Overview
-
-The `Keyboard` data class represents a keyboard layout definition, serving as the entry point for layout YAML files.
-
-### Properties
-
-#### `name`
-
-* **Description**: The human-readable name of the layout. If the layout is for a specific language, this should be written in the relevant language.
-* **Type**: `String`
-* **Optional**: No
-
-#### `rows`
-
-* **Description**: The rows defined for the layout. Defining the number row, bottom row, or the functional keys (shift/backspace) is optional here. If they are missing, defaults will automatically be added to `effectiveRows`.
-* **Type**: `List<`[`Row`](#row)`>`
-* **Optional**: No
-
-#### `languages`
-
-* **Description**: (optional) List of languages this layout is intended for. It will be displayed as an option for the specified languages.
-* **Type**: `List<String>`
-* **Optional**: Yes
-* **Default Value**: empty list
-
-#### `description`
-
-* **Description**: (optional) A human-readable description of the layout. Authorship/origin information may be added here. This is intended to be displayed to the user when they are selecting layouts.
-* **Type**: `String`
-* **Optional**: Yes
-* **Default Value**: empty string
-
-#### `layoutSetOverrides`
-
-* **Description**: (optional) Override the symbols layout or other layouts for this layout set.
-* **Type**: [`LayoutSetOverrides`](#layout-set-overrides)
-* **Optional**: Yes
-* **Default Value**: A default instance of `LayoutSetOverrides`
-
-#### `numberRowMode`
-
-* **Description**: (optional) Whether the number row should be user-configurable, always displayed, or never.
-* **Type**: [`NumberRowMode`](#numberrowmode-1)
-* **Optional**: Yes
-* **Default Value**: `UserConfigurable`
-
-#### `bottomRowHeightMode`
-
-* **Description**: (optional) Whether the bottom row should always maintain a consistent height, or whether it should grow and shrink.
-* **Type**: [`BottomRowHeightMode`](#bottomrowheightmode-1)
-* **Optional**: Yes
-* **Default Value**: `Fixed`
-
-#### `bottomRowWidthMode`
-
-* **Description**: (optional) Whether the bottom row should follow key widths of other rows, or should maintain separate widths for consistency.
-* **Type**: [`BottomRowWidthMode`](#bottomrowwidthmode-1)
-* **Optional**: Yes
-* **Default Value**: `SeparateFunctional`
-
-#### `attributes`
-
-* **Description**: (optional) Default attributes to use for all rows
-* **Type**: [`KeyAttributes`](#key-attributes)
-* **Optional**: Yes
-* **Default Value**: A default instance of `KeyAttributes`
-
-#### `overrideWidths`
-
-* **Description**: (optional) Definitions of custom key widths. Values are between 0.0 and 1.0, with 1.0 representing 100% of the keyboard width.
-* **Type**: `Map<`[`KeyWidth`](#key-widths)`, Float>``
-* **Optional**: Yes
-* **Default Value**: empty map
-
-#### `rowHeightMode`
-
-* **Description**: (optional) Whether or not rows should fill the vertical space, or have vertical gaps added.
-* **Type**: [`RowHeightMode`](#rowheightmode-1)
-* **Optional**: Yes
-* **Default Value**: `ClampHeight`
-
-#### `useZWNJKey`
-
-* **Description**: (optional) Whether or not the ZWNJ key should be shown in place of the contextual key.
-* **Type**: `Boolean`
-* **Optional**: Yes
-* **Default Value**: `false`
-
-#### `minimumFunctionalKeyWidth`
-
-* **Description**: (optional) Minimum width for functional keys.
-* **Type**: `Float`
-* **Optional**: Yes
-* **Default Value**: 0.125f
-
-#### `minimumBottomRowFunctionalKeyWidth`
-
-* **Description**: (optional) Minimum width for functional keys in the bottom row.
-* **Type**: `Float`
-* **Optional**: Yes
-* **Default Value**: 0.15f
-
-#### `altPages`
-
-* **Description**: (optional) Alternative pages for this layout, use in conjunction with `$alt0`, `$alt1`, `$alt2`.
-* **Type**: `List<List<`[`Row`](#row)`>>`
-* **Optional**: Yes
-* **Default Value**: empty list
-
-## Row
-
-### Overview
-
-The `Row` data class represents a single row in a keyboard layout. It allows for customization of various aspects, including the type of keys, row height, splittability, and behavior with respect to the number row.
-
-One of `numbers`, `letters` or `bottom` must be defined.
-
-#### `numbers`
-
-*   **Description**: Defines this as a number row.
-*   **Type**: `List<Key>?`
-*   **Optional**: One of `numbers`, `letters` or `bottom` must be defined.
-*   **Default Value**: `null`
-*   **Behavior**:
-    *   If defined, will be treated as a number row by default.
-    *   Number rows are given grow keys, no background, and smaller height by default.
-
-#### `letters`
-
-*   **Description**: Defines this as a letters row.
-*   **Type**: `List<Key>?`
-*   **Optional**: One of `numbers`, `letters` or `bottom` must be defined.
-*   **Default Value**: `null`
-*   **Behavior**:
-    *   If defined, will be treated as a letters row by default.
-    *   Letter rows are splittable by default.
-
-#### `bottom`
-
-*   **Description**: Defines this as a bottom row.
-*   **Type**: `List<Key>?`
-*   **Optional**: One of `numbers`, `letters` or `bottom` must be defined.
-*   **Default Value**: `null`
-*   **Behavior**:
-    *   If defined, this is a bottom row. Bottom row should typically contain: `$symbols , $action $space $contextual . $enter`
-
-#### `rowHeight`
-
-*   **Description**: The height multiplier for this row.
-*   **Type**: `Double`
-*   **Optional**: Yes
-*   **Default Value**: `1.0` for letters and bottom rows, `0.8` for number rows.
-*   **Behavior**:
-    *   Can be used to customize the row height with respect to other rows.
-
-#### `splittable`
-
-*   **Description**: Whether this row is splittable.
-*   **Type**: `Boolean`
-*   **Optional**: Yes
-*   **Default Value**: `true` if defined as a letters row, `false` otherwise
-*   **Behavior**:
-    *   If true, allows the row to be split when the user prefers a split layout (e.g. landscape)
-
-#### `numRowMode`
-
-*   **Description**: How this row should behave with respect to the number row.
-*   **Type**: [`RowNumberRowMode`](#rownumberrowmode)
-*   **Optional**: Yes
-*   **Default Value**: `Default`
-*   **Behavior**:
-    *   Can be customized to control when the row is displayed in relation to the number row.
-
-#### `attributes`
-
-*   **Description**: Default key attributes for this row.
-*   **Type**: [`KeyAttributes`](#key-attributes)
-*   **Optional**: Yes
-*   **Default Value**: a default set of attributes
-*   **Behavior**:
-    *   Allows customization of key styles, widths, and other attributes.
-
-
-## Layout Set Overrides
-### Overview
-
-The `LayoutSetOverrides` data class represents a set of overrides for specific layouts.
-All layouts currently leave this default.
-
-### Properties
-
-#### `symbols`
-*   **Description**: The layout used when the keyboard is in symbols mode.
-*   **Type**: `String`
-*   **Default Value**: `"symbols"`
-
-#### `symbolsShifted`
-*   **Description**: The layout used when the keyboard is in shifted symbols mode.
-*   **Type**: `String`
-*   **Default Value**: `"symbols_shift"`
-
-#### `number`
-*   **Description**: The layout used when the keyboard is in numpad mode.
-*   **Type**: `String`
-*   **Default Value**: `"number"`
-
-#### `numberShifted`
-*   **Description**: The layout used when the keyboard is in shifted numpad mode (this is currently unused).
-*   **Type**: `String`
-*   **Default Value**: `"number_shift"`
-
-#### `phone`
-*   **Description**: The layout used when the keyboard is in phone mode.
-*   **Type**: `String`
-*   **Default Value**: `"phone"`
-
-#### `phoneShifted`
-*   **Description**: The layout used when the keyboard is in shifted phone mode.
-*   **Type**: `String`
-*   **Default Value**: `"phone_shift"`
-
-## Label Flags
-
-### Overview
-
-The `LabelFlags` data class represents flags for customizing the behavior of key labels on a key.
-
-### Properties
-
-#### `alignHintLabelToBottom`
-
-*   **Description**: Aligns the hint label to the bottom of the key.
-*   **Type**: `Boolean`
-*   **Default Value**: `false`
-
-#### `alignIconToBottom`
-
-*   **Description**: Aligns icon to the bottom of the key.
-*   **Type**: `Boolean`
-*   **Default Value**: `false`
-
-#### `alignLabelOffCenter`
-
-*   **Description**: Aligns label off-center in the key.
-*   **Type**: `Boolean`
-*   **Default Value**: `false`
-
-#### `hasHintLabel`
-
-*   **Description**: Indicates whether the key has a hint label.
-*   **Type**: `Boolean`
-*   **Default Value**: `false`
-
-#### `followKeyLabelRatio`
-
-*   **Description**: Follows the key label ratio for text size.
-*   **Type**: `Boolean`
-*   **Default Value**: `false`
-
-#### `followKeyLetterRatio`
-
-*   **Description**: Follows the key letter ratio for text size.
-*   **Type**: `Boolean`
-*   **Default Value**: `false`
-
-#### `followKeyLargeLetterRatio`
-
-*   **Description**: Follows the key large letter ratio for text size.
-*   **Type**: `Boolean`
-*   **Default Value**: `false`
-
-#### `autoXScale`
-
-*   **Description**: Enables automatic x-axis scaling to fit label within key.
-*   **Type**: `Boolean`
-*   **Default Value**: `false`
-
-
-## Key Attributes
-### Overview
-
-The `KeyAttributes` data class represents various attributes for keys in a keyboard layout. These attributes control how keys are displayed and behave.
-
-### Properties
-
-#### `width`
-
-*   **Description**: The width token for the key.
-*   **Type**: [`KeyWidth?`](#key-widths)
-*   **DefaultKeyAttributes Value**: `Regular`
-*   **Behavior**:
-    *   Specifies the width of the key using a width token.
-
-#### `style`
-
-*   **Description**: The visual style (background) for the key.
-*   **Type**: [`KeyVisualStyle?`](#key-visual-style)
-*   **DefaultKeyAttributes Value**: `Normal`
-*   **Behavior**:
-    *   Defines the background appearance of the key.
-
-#### `anchored`
-
-*   **Description**: Whether or not to anchor the key to the edges.
-*   **Type**: `Boolean?`
-*   **DefaultKeyAttributes Value**: `false`
-*   **Behavior**:
-    *   If true, anchors the key to the edges, adding padding as needed.
-
-#### `showPopup`
-
-*   **Description**: Whether or not to show the popup indicator when the key is pressed.
-*   **Type**: `Boolean?`
-*   **DefaultKeyAttributes Value**: `true`
-*   **Behavior**:
-    *   If true, displays a popup indicator for letters, but this may be undesirable for functional or large keys.
-
-#### `moreKeyMode`
-
-*   **Description**: Which moreKeys to add automatically.
-*   **Type**: [`MoreKeyMode?`](#more-key-mode)
-*   **getEffectiveAttributes Default Value**: `All` if the row is a letter or bottom row, and the effective width is Regular, else `OnlyFromLetter`
-*   **Behavior**:
-    *   Specifies the mode for adding more keys automatically.
-
-#### `useKeySpecShortcut`
-
-*   **Description**: Whether or not to use keyspec shortcuts.
-*   **Type**: `Boolean?`
-*   **DefaultKeyAttributes Value**: `true`
-*   **Behavior**:
-    *   If true, enables automatic conversion of certain characters using keyspec shortcuts.
-
-#### `longPressEnabled`
-
-*   **Description**: Whether or not longpress is enabled for the key.
-*   **Type**: `Boolean?`
-*   **DefaultKeyAttributes Value**: `false`
-*   **Behavior**:
-    *   If true, enables long press functionality for the key.
-
-#### `labelFlags`
-
-*   **Description**: Label flags for how the key's label (and its hint) should be presented.
-*   **Type**: [`LabelFlags?`](#label-flags)
-*   **DefaultKeyAttributes Value**: `{ autoXScale: true }`
-*   **Behavior**:
-    *   Specifies how to display the key's label and hint.
-
-#### `repeatableEnabled`
-
-*   **Description**: Whether or not the key is repeatable, intended for backspace or arrow keys.
-*   **Type**: `Boolean?`
-*   **DefaultKeyAttributes Value**: `false`
-*   **Behavior**:
-    *   If true, enables repeat functionality for the key.
-
-#### `shiftable`
-
-*   **Description**: Whether or not the key is automatically shiftable.
-*   **Type**: `Boolean?`
-*   **DefaultKeyAttributes Value**: `true`
-*   **Behavior**:
-    *   If true, the code and label automatically becomes uppercased when the layout is shifted. If this is not desired, this can be set to false. Shift behavior can be customized by using a CaseSelector.
-
-### Inheritance
-
-The attributes are inherited in the following order:
-
-1.  `Key.attributes`
-2.  `Row.attributes`
-3.  `Keyboard.attributes`
-4.  `DefaultKeyAttributes`
-
-
-
-# Keys
-
-## Base
-### Overview
-The `BaseKey` data class is the main one used to define keys in a keyboard layout. It contains various attributes and settings for customization.
-
-Explicit definition in yaml is done with `type: base`.
-
-You can automatically define a BaseKey with default settings by simply specifying the spec in place of the BaseKey object:
-```yaml
-# Instead of
-  - letters:
-     - type: base
-       spec: "a"
-
-# You can do the same thing like this
-  - letters:
-      - "a"
-
-# But customizing attributes requires the long-form definition
-  - letters:
-      - type: base
-        spec: "a"
-        attributes: { style: NoBackground }
-```
-
-### Properties
-
-#### `spec`
-*   **Description**: [AOSP key spec](#key-spec).
-*   **Type**: `String`
-*   **Behavior**:
-    *   Specifies the key specification, which can contain custom label, code, icon, or output text.
-
-#### `attributes`
-*   **Description**: Attributes for this key.
-*   **Type**: [`KeyAttributes`](#key-attributes)
-*   **Default Value**: blank
-*   **Behavior**:
-    *   Specifies various attributes for the key, such as width, style, and more.
-    *   Values defined here supersede any other values inherited from row, keyboard, or default attributes.
-
-#### `moreKeys`
-*   **Description**: More keys for this key.
-*   **Type**: `List<String>`
-*   **Default Value**: empty list
-*   **Behavior**:
-    *   Specifies more keys that should be added.
-    *   Can be defined as a list or comma-separated string in YAML (e.g. `a,b,c`)
-
-#### `hint`
-*   **Description**: Hint for the key.
-*   **Type**: `String?`
-*   **Default Value**: `null`
-*   **Behavior**:
-    *   If set, overrides a default hint from the value of moreKeys.
-    *   Specifies a custom hint for the key.
-
-### Key Spec
-
-Each key specification is one of the following:
-- Label optionally followed by keyOutputText (keyLabel|keyOutputText).
-- Label optionally followed by code point (keyLabel|!code/code_name).
-- Icon followed by keyOutputText (!icon/icon_name|keyOutputText).
-- Icon followed by code point (!icon/icon_name|!code/code_name).
-
-Label and keyOutputText are one of the following:
-- Literal string.
-- Label reference represented by (!text/label_name), see {@link KeyboardTextsSet}.
-- String resource reference represented by (!text/resource_name), see {@link KeyboardTextsSet}.
-
-Icon is represented by (!icon/icon_name), see {@link KeyboardIconsSet}.
-
-Code is one of the following:
-- Code point presented by hexadecimal string prefixed with "0x"
-- Code reference represented by (!code/code_name), see {@link KeyboardCodesSet}.
-
-Special character, comma ',' backslash '\', and bar '|' can be escaped by '\' character.
-Note that the '\' is also parsed by XML parser and {@link MoreKeySpec#splitKeySpecs(String)}
-as well.
-
-
-## Case Selector
-### Overview
-The `CaseSelector` data class represents a case selector key in a keyboard layout. It allows specifying different types of keys depending on when the layout is shifted or not.
-
-Defined in yaml using `type: case`
-
-Note: You can specify a different type of Key in different cases. For example, normal can be a base key, and shifted can be a gap.
-
-### Properties
-
-#### `normal`
-*   **Description**: Key to use normally. Required.
-*   **Type**: `Key`
-*   **Behavior**:
-    *   Specifies the key to use when the layout is not shifted.
-
-#### `shifted`
-*   **Description**: Key to use when shifted.
-*   **Type**: `Key`
-*   **Default Value**: same as `normal`
-*   **Behavior**:
-    *   Specifies the key to use when the layout is shifted.
-
-#### `shiftedManually`
-*   **Description**: Key to use when shifted, excluding automatic shift.
-*   **Type**: `Key`
-*   **Default Value**: same as `shifted`
-*   **Behavior**:
-    *   Specifies the key to use when the layout is shifted manually.
-
-#### `shiftLocked`
-*   **Description**: Key to use when shift locked (caps lock).
-*   **Type**: `Key`
-*   **Default Value**: same as `shiftedManually`
-*   **Behavior**:
-    *   Specifies the key to use when the shift lock is enabled.
-
-#### `symbols`
-*   **Description**: Key to use when in symbols layout.
-*   **Type**: `Key`
-*   **Default Value**: same as `normal`
-*   **Behavior**:
-    *   Specifies the key to use when the layout is in symbols mode.
-
-#### `symbolsShifted`
-*   **Description**: Key to use when in symbols layout and shifted.
-*   **Type**: `Key`
-*   **Default Value**: same as `normal`
-*   **Behavior**:
-    *   Specifies the key to use when the layout is in symbols mode and shifted.
-
-
-## Gap
-### Overview
-The `GapKey` data class represents a gap in the keyboard layout.
-Instead of a key, a gap will be placed in its place.
-
-Defined in yaml using `type: gap`, or just use the `$gap` shortcut.
-
-### Properties
-
-#### `attributes`
-*   **Description**: Attributes for this key. This is mainly useful for setting the width.
-*   **Type**: `KeyAttributes`
-*   **Default Value**: blank
-
-
-## Enter
-### Overview
-The `EnterKey` data class represents an enter key. Its icon and moreKeys will depend on the input field.
-
-Defined in yaml using `type: enter`
-
-This is not intended to be used in layouts, instead please use the `$enter` shortcut when possible.
-
-### Properties
-
-#### `attributes`
-*   **Description**: Attributes for this key.
-*   **Type**: `KeyAttributes`
-*   **Default Value**: blank
-
-
-## Action
-### Overview
-The `ActionKey` data class represents the user-configurable action key. If an action key is not set,
-then the key will be skipped.
-
-Defined in yaml using `type: action`
-
-This is not intended to be used in layouts, instead please use the `$action` shortcut when possible.
-
-### Properties
-
-#### `attributes`
-*   **Description**: Attributes for this key.
-*   **Type**: `KeyAttributes`
-*   **Default Value**: blank
-
-
-## Contextual
-### Overview
-The `ContextualKey` data class represents a contextual key. It's shown only in specific keyboard layouts as defined here:
-```kotlin
-        KeyboardId.MODE_EMAIL    to BaseKey(spec = "@", attributes = attributes),
-        KeyboardId.MODE_URL      to BaseKey(spec = "/", attributes = attributes),
-        KeyboardId.MODE_DATETIME to BaseKey(spec = "/", moreKeys = listOf(":"), attributes = attributes),
-        KeyboardId.MODE_DATE     to BaseKey(spec = "/", attributes = attributes),
-        KeyboardId.MODE_TIME     to BaseKey(spec = ":", attributes = attributes),
-```
-Defined in yaml using `type: contextual`
-
-This is not intended to be used in layouts, instead please use the `$contextual` shortcut when possible.
-
-### Properties
-
-#### `attributes`
-*   **Description**: Attributes for this key.
-*   **Type**: `KeyAttributes`
-*   **Default Value**: blank
-
-
---- --- ---
-
-# Enums
-
-## Key Widths
-
-The `KeyWidth` enum represents various width tokens for keys in a keyboard layout. It simplifies the process of specifying key widths by using tokens instead of explicit percentages.
-
-#### `Regular`
-*   **Description**: Regular key width, used for normal letters.
-*   **Behavior**:
-    *   Calculated based on the total keyboard width and maximum number of keys in a row.
-    *   Consistent across the entire keyboard except in some cases (bottom row, split layout, or rows with functional keys).
-
-#### `FunctionalKey`
-*   **Description**: Functional key width, used for functional keys like Shift, Backspace, Enter, and Symbols.
-*   **Behavior**:
-    *   Has a minimum width specified by the [`minimumFunctionalKeyWidth`](#minimumfunctionalkeywidth) property.
-    *   May be larger than the minimum if there is available space.
-
-#### `Grow`
-*   **Description**: Grow width, used for keys that take up remaining space divided evenly among all grow keys in the row.
-*   **Behavior**:
-    *   Currently not supported in splittable rows.
-    *   Can complicate width calculation for functional keys and others.
-    *   Mainly used for spacebar.
-
-#### `Custom1`, `Custom2`, `Custom3`, `Custom4`
-*   **Description**: Custom width tokens, defined in the [`overrideWidths`](#overridewidths) property of the keyboard configuration.
-*   **Behavior**:
-    *   Values are between 0.0 and 1.0.
-    *   Used to specify custom widths for specific keys or layouts.
-
-## Key Visual Style
-The `KeyVisualStyle` enum represents the visual style of a key in a keyboard layout. It affects the background of the key based on user theme settings.
-
-#### `Normal`
-*   **Description**: Uses a normal key background, intended for all letters.
-*   **Behavior**: This may be a rounded rectangle or no background depending on user settings.
-
-#### `NoBackground`
-*   **Description**: Uses no key background, intended for number row numbers.
-*   **Behavior**: No background will be shown for this key.
-
-#### `Functional`
-*   **Description**: Uses a slightly darker colored background, intended for functional keys (backspace, etc).
-*   **Behavior**: A more visually distinct background is used, it may be dimmer or more saturated.
-
-#### `StickyOff`
-*   **Description**: Intended for Shift when it's not shiftlocked.
-*   **Behavior**: Specifies a background for Shift when it's not shiftlocked.
-
-#### `StickyOn`
-*   **Description**: Intended for Shift to indicate it's shiftlocked. Uses a more bright background.
-*   **Behavior**: Specifies a brighter background for Shift when it's shiftlocked.
-
-#### `Action`
-*   **Description**: Uses a bright fully rounded background, normally used for the enter key.
-*   **Behavior**: Specifies a bright, fully rounded background for the enter key.
-
-#### `Spacebar`
-*   **Description**: Depending on the key borders setting, this is either the same as Normal (key borders enabled) or a fully rounded rectangle (key borders disabled).
-*   **Behavior**: Specifies a background for the spacebar key, which may be the same as Normal or a fully rounded rectangle depending on key borders settings.
-
-#### `MoreKey`
-*   **Description**: Visual style for moreKeys. Not intended for use in layout definitions.
-*   **Behavior**: Specifies a background for more keys.
-
-
-## More Key Mode
-The `MoreKeyMode` enum specifies which morekeys can be automatically added to the key.
-
-#### `All`
-*   **Description**: Insert all possible automatic moreKeys
-*   **Behavior**:
-    *   Inserts moreKeys from keyspec shortcut.
-    *   Inserts moreKeys for numbers, symbols, actions, and language letters based on user settings and based on the key's coordinate.
-    *   Counts towards keyCoordinate.
-
-#### `OnlyFromLetter`
-*   **Description**: Only automatically insert morekeys from keyspec shortcut or language-related accents
-*   **Behavior**:
-    *   Inserts moreKeys from keyspec shortcut, and for language letters based on user settings.
-    *   Does not count towards keyCoordinate.
-
-#### `OnlyExplicit`
-*   **Description**: Do not automatically insert any morekeys.
-*   **Behavior**:
-    *   Does not count towards keyCoordinate
-    *   Only moreKeys explicitly defined for the key are included.
-
-## `BottomRowHeightMode`
-Represents the height mode of the bottom row in a layout.
-
-#### `Fixed`
-*   **Description**: The bottom row height is fixed.
-
-#### `Flexible`
-*   **Description**: The bottom row height can vary based on row count.
-
-
-## `BottomRowWidthMode`
-
-Represents the key width mode of keys in the bottom row.
-
-#### `SeparateFunctional`
-*   **Description**: The functional keys (symbols, enter) are at least [`minimumBottomFunctionalKeyWidth`](#minimumbottomrowfunctionalkeywidth) wide.
-
-#### `Identical`
-*   **Description**: The functional keys (symbols, enter) follow the functional width from other rows.
-
-
-## `RowHeightMode`
-
-Represents the height mode of rows in this layout.
-
-#### `ClampHeight`
-*   **Description**: The row height is clamped to a reasonable height, row spacing is added to fill the space.
-
-#### `FillHeight`
-*   **Description**: The row height fills available height.
-
-
-## `NumberRowMode`
-
-Represents the behavior of the number row in a layout.
-
-#### `UserConfigurable`
-*   **Description**: The number row can be enabled or disabled by the user in typing settings.
-
-#### `AlwaysEnabled`
-*   **Description**: The number row is always enabled and visible.
-
-#### `AlwaysDisabled`
-*   **Description**: The number row is never enabled or visible.
-
-
-## `RowNumberRowMode`
-
-Represents the behavior of a row's visibility with respect to the number row in a layout.
-
-#### `Default`
-*   **Description**: The row is unaffected by the state of the number row
-
-#### `Filler`
-*   **Description**: This row only displays when the number row is active.
-
-#### `Hideable`
-*   **Description**: This row only displays when the number row is inactive.
diff --git a/java/assets/layouts/Legacy/east_slavic_phonetic.yaml b/java/assets/layouts/Legacy/east_slavic_phonetic.yaml
deleted file mode 100644
index 473754add7604118aecb03e2d40f1f1352c92366..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Legacy/east_slavic_phonetic.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: яВерт
-languages: ru
-rows:
-  - letters:
-      - я
-      - [ш, ч, щ]
-      - [е, э, ё]
-      - р
-      - Ñ‚
-      - Ñ‹
-      - [у, ю]
-      - и
-      - о
-      - п
-  - letters:
-      - а
-      - с
-      - д
-      - Ñ„
-      - г
-      - Ñ…
-      - й
-      - к
-      - л
-  - letters:
-      - [з, ж]
-      - [ь, ъ]
-      - ц
-      - в
-      - б
-      - н
-      - м
\ No newline at end of file
diff --git a/java/assets/layouts/Malayalam/malayalam.yaml b/java/assets/layouts/Malayalam/malayalam.yaml
deleted file mode 100644
index ac6e73e7b68cff5e60da33cc34d5e9bcce881992..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Malayalam/malayalam.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-name: Malayalam
-languages: ml-IN
-rows:
-  - letters: # rowkeys_malayalam1.xml
-    - ['്', 'അ']
-    - ['à´¾', 'à´†']
-    - ['à´¿', 'à´‡']
-    - ['ീ', 'ഈ']
-    - ['ു', 'ഉ']
-    - ['ൂ', 'ഊ']
-    - ['ൃ', 'ഋ']
-    - ['െ', 'എ', 'ഐ', 'ൈ']
-    - ['േ', 'ഏ']
-    - ['ൊ', 'ഒ']
-    - ['ോ', 'ഓ', 'ഔ', 'ൗ']
-  - letters: # rowkeys_malayalam2.xml
-    - ['à´•', 'à´–']
-    - ['à´—', 'à´˜']
-    - ['à´™', 'à´ž']
-    - ['à´š', 'à´›']
-    - ['ജ', 'ഝ']
-    - ['à´Ÿ', 'à´ ']
-    - ['à´¡', 'à´¢']
-    - ['ണ', 'ൺ']
-    - ['à´¤', 'à´¥']
-    - ['à´¦', 'à´§']
-    - ['ന', 'ൻ']
-  - letters: # rowkeys_malayalam3.xml
-    - ['à´ª', 'à´«']
-    - ['à´¬', 'à´­']
-    - ['à´®', 'à´‚']
-    - ['യ', '്യ']
-    - ['ര', '്ര', 'ർ', 'റ']
-    - ['ല', 'ൽ']
-    - ['വ', '്വ']
-    - ['à´¶', 'à´·', 'à´¸']
-    - ['à´¹', 'à´ƒ']
-    - ['ള', 'ൾ', 'ഴ']
-    - $delete # force no shift key
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/README.md b/java/assets/layouts/README.md
deleted file mode 100644
index 558bfd0677692167d890c5a0be7d902de1e5c129..0000000000000000000000000000000000000000
--- a/java/assets/layouts/README.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# Keyboard Layout definitions
-
-This repo contains the keyboard layout definitions for FUTO Keyboard.
-
-See the [Layout Spec](LayoutSpec.md) for information on the YAML format.
-
-## Custom Layouts
-
-In FUTO Keyboard nightly, you can define custom layouts within the app for testing and development.
-
-To activate developer settings, go to the "Help & Feedback" section and tap the version code a bunch
-of times, this will activate the "Developer Options" section in the settings home menu.
-
-Visit "Developer Settings" > "Custom layouts" to create custom layouts. They will be activated
-in the layout switcher by default once saved.
-
-If you're planning to contribute this layout, please make sure to test it with different settings
-enabled to make sure it behaves as expected:
-* Split keyboard in landscape
-* Number row enabled / disabled
-* Arrow keys enabled / disabled
-* Long-press key settings in various orders
-* (if you edited the bottom row) Action key and contextual key
-
-## Contributing via Pull Request
-
-After testing and verifying your layout works and is accurate, you can open a pull request to
-contribute the layout.
-
-The app will search for `*.yml` and `*.yaml` files here recursively. The directories not namespaced,
-so please ensure there are no two files with the same name (i.e. place Lithuanian QWERTY in
-`Lithuanian/lithuanian-qwerty.yaml`, not `Lithuanian/qwerty.yaml`).
-
-Please also update [mapping.yaml](mapping.yaml) and insert your layout name under the relevant
-languages.
-
-If you're having issues with opening a pull request, you can also just open an issue and include
-your YAML and request it to be added.
-
-## Contribution Standards
-
-Obscure layouts can serve to confuse users and bloat the layout list, so we are likely going to have
-some standards for inclusion of layouts.
-
-## Layout Limitations
-
-If you're unable to express a layout under the current system, let us know by opening an issue.
-Some limitations currently exist due to the non-triviality of implementing the necessary features
-(e.g. Japanese flick keys are unsupported).
\ No newline at end of file
diff --git a/java/assets/layouts/Serbian/serbian_qwertz.yaml b/java/assets/layouts/Serbian/serbian_qwertz.yaml
deleted file mode 100644
index 9445e9bbab38c6e88f8fad57b2957f272dfd42b2..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Serbian/serbian_qwertz.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: Serbian QWERTZ
-languages: sr-Latn
-rows:
-  - letters: q w e r t z u i o p Å¡
-  - letters: a s d f g h j k l č ć
-  - letters: y x c v b n m đ ž
\ No newline at end of file
diff --git a/java/assets/layouts/Sinhala/sinhala.yaml b/java/assets/layouts/Sinhala/sinhala.yaml
deleted file mode 100644
index 02ebb2e1d316f06dac1a9acc762d2a0be8c5d337..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Sinhala/sinhala.yaml
+++ /dev/null
@@ -1,38 +0,0 @@
-name: Sinhala
-languages: si-LK
-rows:
-  - letters: # rowkeys_sinhala1.xml
-    - {type: case, normal: ['à·”'], shifted: ['à·–']}
-    - {type: case, normal: ['අ'], shifted: ['උ']}
-    - {type: case, normal: ['ැ'], shifted: ['ෑ']}
-    - {type: case, normal: ['ර'], shifted: ['ඍ']}
-    - {type: case, normal: ['එ'], shifted: ['ඔ']}
-    - {type: case, normal: ['හ'], shifted: ['ශ']}
-    - {type: case, normal: ['ම'], shifted: ['ඹ']}
-    - {type: case, normal: ['à·ƒ'], shifted: ['à·‚']}
-    - {type: case, normal: ['ද', '%', 'ඳ'], shifted: ['ධ']}
-    - {type: case, normal: ['ච'], shifted: ['ඡ']}
-    - {type: case, normal: ['ඤ', '෴'], shifted: ['ඥ', '෴']}
-  - letters: # rowkeys_sinhala2.xml
-    - {type: case, normal: ['à·Š'], shifted: ['à·Ÿ']}
-    - {type: case, normal: ['à·’'], shifted: ['à·“']}
-    - {type: case, normal: ['ා'], shifted: ['ෘ']}
-    - {type: case, normal: ['à·™'], shifted: ['à·†']}
-    - {type: case, normal: ['ට'], shifted: ['ඨ']}
-    - {type: case, normal: ['ය'], shifted: ["්\u200dය"]}
-    - {type: case, normal: ['à·€'], shifted: ['à·…à·”']}
-    - {type: case, normal: ['න'], shifted: ['ණ']}
-    - {type: case, normal: ['ක'], shifted: ['ඛ']}
-    - {type: case, normal: ['ත'], shifted: ['ථ']}
-    - {type: case, normal: ['ඏ'], shifted: ["්\u200dර"]}
-  - letters: # rowkeys_sinhala3.xml
-    - {type: case, normal: ['ං', 'ඃ'], shifted: ['ඞ']}
-    - {type: case, normal: ['ජ', 'ඦ'], shifted: ['ඣ']}
-    - {type: case, normal: ['ඩ', 'ඬ'], shifted: ['ඪ']}
-    - {type: case, normal: ['ඉ'], shifted: ['ඊ']}
-    - {type: case, normal: ['බ'], shifted: ['භ']}
-    - {type: case, normal: ['ප'], shifted: ['ඵ']}
-    - {type: case, normal: ['ල'], shifted: ['ළ']}
-    - {type: case, normal: ['ග', 'ඟ'], shifted: ['ඝ']}
-    - {type: case, normal: ['ෳ'], shifted: ["ර්\u200d"]}
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Slavic/east_slavic.yaml b/java/assets/layouts/Slavic/east_slavic.yaml
deleted file mode 100644
index b28149eea9733e3a7799bdc37ac49a943c8b0dc2..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Slavic/east_slavic.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: East Slavic
-languages: ru be bg bn kk ky uk
-rows:
-  - letters: й ц у к е н г ш щ з х
-  - letters: ф ы в а п р о л д ж э
-  - letters: я ч с м и т ь б ю
\ No newline at end of file
diff --git a/java/assets/layouts/Slavic/mongolian.yaml b/java/assets/layouts/Slavic/mongolian.yaml
deleted file mode 100644
index b670d55288aa2b8524e3524120102ef778c3df70..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Slavic/mongolian.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-name: Mongolian
-languages: mn-MN
-rows:
-  - letters: # rowkeys_mongolian1.xml
-    - ['Ñ„']
-    - ['ц']
-    - ['у', '!text/morekeys_cyrillic_u']
-    - ['ж']
-    - ['э', '!text/morekeys_cyrillic_ie']
-    - ['н', '!text/morekeys_cyrillic_en']
-    - ['г', '!text/morekeys_cyrillic_ghe']
-    - ['ш', '%', 'щ']
-    - ['Ò¯']
-    - ['з']
-    - ['к']
-    - ['е']
-  - letters: # rowkeys_mongolian2.xml
-    - ['й']
-    - ['Ñ‹']
-    - ['б']
-    - ['Ó©']
-    - ['а']
-    - ['Ñ…']
-    - ['Ñ€']
-    - ['о']
-    - ['л']
-    - ['д']
-    - ['п']
-    - ['ÑŽ']
-  - letters: # rowkeys_mongolian3.xml
-    - ['я']
-    - ['ч']
-    - ['Ñ‘']
-    - ['с']
-    - ['м']
-    - ['и']
-    - ['Ñ‚']
-    - ['ь', 'ъ']
-    - ['в']
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Slavic/russian_student.yaml b/java/assets/layouts/Slavic/russian_student.yaml
deleted file mode 100644
index c1ac5b2a23e576a93a85c313464aac651e968876..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Slavic/russian_student.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: Студенческий
-languages: ru
-rows:
-  - letters: я ш е р т ы у и о п э
-  - letters: а с д ф г ч й к л ж щ
-  - letters: з х ц в б н м ь ю
\ No newline at end of file
diff --git a/java/assets/layouts/Slavic/russian_yavert.yaml b/java/assets/layouts/Slavic/russian_yavert.yaml
deleted file mode 100644
index ce5aca81762366fb391f8304ab4c7f2e545a062c..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Slavic/russian_yavert.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: яВерт
-languages: ru
-rows:
-  - letters: я в е р т ы у и о п ч
-  - letters: а с д ф г х й к л ш щ
-  - letters: з ь ц ж б н м э ю
\ No newline at end of file
diff --git a/java/assets/layouts/Slavic/russian_yazhert.yaml b/java/assets/layouts/Slavic/russian_yazhert.yaml
deleted file mode 100644
index 14df197d89027bdd09b60b5d31e6ed1d9ef0ac8b..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Slavic/russian_yazhert.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: яЖерт
-languages: ru
-rows:
-  - letters: я ж е р т ы у и о п э
-  - letters: а с д ф г ч й к л ш щ
-  - letters: з х ц в б н м ь ю
\ No newline at end of file
diff --git a/java/assets/layouts/Slavic/south_slavic.yaml b/java/assets/layouts/Slavic/south_slavic.yaml
deleted file mode 100644
index e1bed924377d8089f9fe77a7b0675b5bc65bf32b..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Slavic/south_slavic.yaml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: South Slavic
-languages: mk sr
-rows:
-  - letters:
-      - Ñ™
-      - Ñš
-      - е
-      - р
-      - Ñ‚
-      - "!text/keyspec_south_slavic_row1_6"
-      - у
-      - и
-      - о
-      - п
-      - ш
-  - letters:
-      - а
-      - с
-      - д
-      - Ñ„
-      - г
-      - Ñ…
-      - ј
-      - к
-      - л
-      - ч
-      - "!text/keyspec_south_slavic_row2_11"
-  - letters:
-      - "!text/keyspec_south_slavic_row3_1"
-      - ÑŸ
-      - ц
-      - в
-      - б
-      - н
-      - м
-      - "!text/keyspec_south_slavic_row3_8"
-      - ж
\ No newline at end of file
diff --git a/java/assets/layouts/Special/error.yaml b/java/assets/layouts/Special/error.yaml
deleted file mode 100644
index 9ce8fc7f1006dd3c01a98ea6ad4e5296b59387a4..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Special/error.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-name: Error Layout
-numberRowMode: AlwaysDisabled
-attributes:
-  width: Grow
-  showPopup: false
-  moreKeyMode: OnlyExplicit
-  useKeySpecShortcut: false
-  style: NoBackground
-  longPressEnabled: true
-  labelFlags:
-    followKeyLabelRatio: true
-    alignLabelOffCenter: false
-    hasHintLabel: false
-    autoXScale: true
-rows:
-  - letters:
-      - {type: base, spec: "View layout error details|!code/action_bugs"}
-    splittable: false
-  - bottom:
-      - {type: base, spec: "Switch language|!code/action_switch_language"}
-    attributes: { style: Action, width: Grow }
-    splittable: false
\ No newline at end of file
diff --git a/java/assets/layouts/Special/number.yaml b/java/assets/layouts/Special/number.yaml
deleted file mode 100644
index f6f735f691dd21e91d09e6d5dae1a8de08769279..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Special/number.yaml
+++ /dev/null
@@ -1,61 +0,0 @@
-name: Numbers
-bottomRowWidthMode: Identical
-
-# Functional = 0.15
-# Each regular row has 2 functional keys and 3 Custom1 keys, therefore
-# Custom1 = (1.0 - 2*Functional) / 3 = 1/3 - 2/3 * Functional
-overrideWidths:
-  FunctionalKey: 0.15
-  Custom1: 0.23333333333
-  Regular: 0.1
-
-rowHeightMode: FillHeight
-
-attributes: &globalAttrs
-  width: Custom1
-  showPopup: false
-  useKeySpecShortcut: false
-  style: Normal
-  shiftable: false
-  labelFlags: { followKeyLabelRatio: false }
-rows:
-  - numbers:
-      - {type: base, spec: "x", moreKeys: ["!fixedColumnOrder!4", "a", "b", "c", "d"], hint: "abcd"}
-      - {type: base, spec: "y", moreKeys: ["!fixedColumnOrder!4", "i", "j", "k", "l"], hint: "ijkl"}
-      - {type: base, spec: "z", moreKeys: ["!fixedColumnOrder!4", "α", "β", "γ", "θ"], hint: "αβγθ"}
-      - {type: base, spec: "w", moreKeys: ["!fixedColumnOrder!4", "u", "v", "θ", "ϕ"], hint: "uv"}
-    attributes:
-      width: Grow
-      style: NoBackground
-      moreKeyMode: OnlyExplicit
-  - letters:
-      - {type: base, spec: "+", moreKeys: ["(", "<"], attributes: &side { style: Functional, width: FunctionalKey }}
-      - "1"
-      - "2"
-      - "3"
-      - {type: base, spec: "%", attributes: *side}
-    splittable: false
-  - letters:
-      - {type: base, spec: "-", moreKeys: [")", ">"], attributes: *side}
-      - "4"
-      - "5"
-      - "6"
-      - {type: base, spec: "!icon/space_key_for_number_layout|!code/key_space", attributes: *side}
-    splittable: false
-  - letters:
-      - {type: base, spec: "*", moreKeys: ["/"], attributes: *side}
-      - "7"
-      - "8"
-      - "9"
-      - {type: base, spec: "!icon/delete_key|!code/key_delete", attributes: *side}
-    splittable: false
-  - bottom:
-      - {type: base, spec: "!text/keylabel_to_alpha|!code/key_switch_alpha_symbol", attributes: *side}
-      - {type: base, spec: ",", attributes: &regular { style: Functional, width: Regular }}
-      - {type: base, spec: "!?#|!code/key_to_number_layout", attributes: &grow { style: Functional, width: Grow } }
-      - "0"
-      - {type: contextual, attributes: *grow, fallbackKey: {type: base, spec: "=", attributes: *grow}}
-      - {type: base, spec: ".", attributes: *regular}
-      - {type: enter, attributes: *side}
-    attributes: *globalAttrs
-    splittable: false
\ No newline at end of file
diff --git a/java/assets/layouts/Special/number_shift.yaml b/java/assets/layouts/Special/number_shift.yaml
deleted file mode 100644
index 956a88ea2379842c89919f0ac561c103e756559a..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Special/number_shift.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-name: Numbers
-numberRowMode: AlwaysDisabled
-bottomRowWidthMode: Identical
-overrideWidths:
-  FunctionalKey: 0.14
-  Regular: 0.1
-  Grow: 0.12
-rowHeightMode: FillHeight
-attributes:
-  width: Grow
-  showPopup: false
-  moreKeyMode: OnlyExplicit
-  useKeySpecShortcut: false
-  style: Normal
-  shiftable: false
-rows:
-  - letters:
-      - {type: base, spec: "#", attributes: &side { style: Functional, width: FunctionalKey, labelFlags: {} }}
-      - "("
-      - ")"
-      - "<"
-      - ">"
-      - ":"
-      - ";"
-      - {type: base, spec: "%", attributes: *side}
-    splittable: false
-  - letters:
-      - {type: base, spec: "=", attributes: *side}
-      - "×"
-      - "*"
-      - "÷"
-      - "/"
-      - "-"
-      - "+"
-      - {type: base, spec: "^", attributes: *side}
-    splittable: false
-  - letters:
-      - {type: base, spec: "( ) /|!code/key_shift", attributes: *side}
-      - "$"
-      - "~"
-      - "\\"
-      - "="
-      - "\u00B0" # Degrees symbol
-      - "."
-      - {type: base, spec: "!icon/delete_key|!code/key_delete", attributes: *side}
-    splittable: false
-  - bottom:
-      - {type: base, spec: "!text/keylabel_to_alpha|!code/key_switch_alpha_symbol", attributes: *side}
-      - {type: base, spec: ",", attributes: &regular { width: Regular, labelFlags: {} }}
-      - {type: base, spec: "!?#|!code/key_to_number_layout", attributes: *side}
-      - "$space"
-      - "$space"
-      - {type: base, spec: "=", attributes: *side}
-      - {type: base, spec: ".", attributes: *regular}
-      - {type: enter, attributes: *side}
-    attributes: { style: Normal }
-    splittable: false
\ No newline at end of file
diff --git a/java/assets/layouts/Special/phone.yaml b/java/assets/layouts/Special/phone.yaml
deleted file mode 100644
index c888b11751b21b6e177b8c1b6a52748191b4a2ca..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Special/phone.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-name: Phone
-numberRowMode: AlwaysDisabled
-attributes: &globalAttrs
-  width: Grow
-  showPopup: false
-  moreKeyMode: OnlyExplicit
-  useKeySpecShortcut: false
-  style: Normal
-  shiftable: false
-  labelFlags:
-    alignLabelOffCenter: true
-    hasHintLabel: true
-rowHeightMode: FillHeight
-rows:
-  - letters:
-      - "1"
-      - {type: base, spec: "2", hint: "ABC"}
-      - {type: base, spec: "3", hint: "DEF"}
-      - {type: base, spec: "-", attributes: &functional { style: Functional, labelFlags: {} }}
-    splittable: false
-  - letters:
-      - {type: base, spec: "4", hint: "GHI"}
-      - {type: base, spec: "5", hint: "JKL"}
-      - {type: base, spec: "6", hint: "MNO"}
-      - {type: base, spec: "!icon/space_key_for_number_layout|!code/key_space", attributes: *functional}
-    splittable: false
-  - letters:
-      - {type: base, spec: "7", hint: "PQRS"}
-      - {type: base, spec: "8", hint: "TUV"}
-      - {type: base, spec: "9", hint: "WXYZ"}
-      - {type: base, spec: "!icon/delete_key|!code/key_delete", attributes: *functional}
-    splittable: false
-  - bottom:
-      - {type: base, spec: "!text/keylabel_to_phone_symbols|!code/key_shift"}
-      - {type: base, spec: "0", moreKeys: "!noPanelAutoMoreKey!,+"}
-      - {type: base, spec: "."}
-      - {type: enter, attributes: { width: Grow }}
-    attributes: *globalAttrs
-    splittable: false
\ No newline at end of file
diff --git a/java/assets/layouts/Special/phone_shift.yaml b/java/assets/layouts/Special/phone_shift.yaml
deleted file mode 100644
index 7dfd1d505b064c893a65944a478f454fe6c74b56..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Special/phone_shift.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-name: Phone Symbols
-numberRowMode: AlwaysDisabled
-attributes: &globalAttrs
-  width: Grow
-  showPopup: false
-  moreKeyMode: OnlyExplicit
-  useKeySpecShortcut: false
-  style: Normal
-  shiftable: false
-  labelFlags:
-    alignLabelOffCenter: false
-    hasHintLabel: false
-rowHeightMode: FillHeight
-rows:
-  - letters:
-      - "("
-      - "/"
-      - ")"
-      - {type: base, spec: "-", attributes: &functional { style: Functional, labelFlags: {} }}
-    splittable: false
-  - letters:
-      - "N"
-      - "!string/label_pause_key|,"
-      - ","
-      - {type: base, spec: "!icon/space_key_for_number_layout|!code/key_space", attributes: *functional}
-    splittable: false
-  - letters:
-      - "\uFF0A|*"
-      - "!string/label_wait_key|;"
-      - "#"
-      - {type: base, spec: "!icon/delete_key|!code/key_delete", attributes: *functional}
-    splittable: false
-  - bottom:
-      - {type: base, spec: "!text/keylabel_to_phone_numeric|!code/key_shift"}
-      - {type: base, spec: "+"}
-      - {type: base, spec: "."}
-      - {type: enter, attributes: { width: Grow }}
-    attributes: *globalAttrs
-    splittable: false
\ No newline at end of file
diff --git a/java/assets/layouts/Special/symbols.yaml b/java/assets/layouts/Special/symbols.yaml
deleted file mode 100644
index 78f47b3d33051cff6d08128d7380b52a7feaf321..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Special/symbols.yaml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: "Symbols"
-attributes:
-  shiftable: false
-rows:
-  - letters: "1 2 3 4 5 6 7 8 9 0"
-    # Only show this row if number row is inactive on main layout
-    numRowMode: Hideable
-  - letters: "% \\ | = [ ] < > { }"
-    # Only show this row if number row is active on main layout
-    numRowMode: Filler
-  - letters:
-      - "@"
-      - "#"
-      - "$"
-      - "_"
-      - "%"
-      - "&"
-      # U+2013: "–" EN DASH
-      # U+2014: "—" EM DASH
-      # U+00B7: "·" MIDDLE DOT
-      - ["-", "_", "\u2013", "\u2014", "\u00B7"]
-      - "+"
-      - "("
-      - ")"
-  - letters:
-      - "$shift"
-      - "*"
-      - "\""
-      - "'"
-      - ":"
-      - ";"
-      - "!"
-      - "?"
-      - "$delete"
-  - bottom: "$alphabet , $number $space / . $enter"
-
diff --git a/java/assets/layouts/Special/symbols_shift.yaml b/java/assets/layouts/Special/symbols_shift.yaml
deleted file mode 100644
index dec5d6b1d5ba241dcd34c5340781bf9807af796f..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Special/symbols_shift.yaml
+++ /dev/null
@@ -1,85 +0,0 @@
-name: "Symbols (Shifted)"
-numberRowMode: UserConfigurable
-attributes:
-  shiftable: false
-rows:
-  - letters:
-      - type: base
-        spec: "~"
-
-      - type: base
-        spec: "`"
-
-      - type: base
-        spec: "|"
-
-      # U+2022: "•" BULLET
-      - type: base
-        spec: "\u2022"
-        moreKeys: "!text/morekeys_bullet"
-
-      # U+221A: "√" SQUARE ROOT
-      - type: base
-        spec: "\u221A"
-
-      # U+03C0: "Ï€" GREEK SMALL LETTER PI
-      # U+03A0: "Π" GREEK CAPITAL LETTER PI
-      - type: base
-        spec: "\u03C0"
-        moreKeys: "\u03A0"
-
-      # U+00F7: "÷" DIVISION SIGN
-      - type: base
-        spec: "\u00F7"
-
-      # U+00D7: "×" MULTIPLICATION SIGN
-      - type: base
-        spec: "\u00D7"
-
-      # U+00B6: "¶" PILCROW SIGN
-      # U+00A7: "§" SECTION SIGN
-      - type: base
-        spec: "\u00B6"
-        moreKeys: "\u00A7"
-
-      # U+2206: "∆" INCREMENT
-      - type: base
-        spec: "\u2206"
-  - letters:
-      - "£"
-      - "¢"
-      - "€"
-      - "Â¥"
-
-      # U+2191: "↑" UPWARDS ARROW
-      # U+2193: "↓" DOWNWARDS ARROW
-      # U+2190: "←" LEFTWARDS ARROW
-      # U+2192: "→" RIGHTWARDS ARROW
-      - type: base
-        spec: "^"
-        moreKeys: "\u2191,\u2193,\u2190,\u2192"
-
-      # U+00B0: "°" DEGREE SIGN
-      # U+2032: "′" PRIME
-      # U+2033: "″" DOUBLE PRIME
-      - type: base
-        spec: "\u00B0"
-        moreKeys: "\u2032,\u2033"
-
-      - type: base
-        spec: "="
-
-      # Curly brackets
-      - "!text/keyspec_left_curly_bracket"
-      - "!text/keyspec_right_curly_bracket"
-  - letters:
-      - "$shift"
-      - "\\"
-      - "\u00A9" # U+00A9: "©" COPYRIGHT SIGN
-      - "\u00AE" # U+00AE: "®" REGISTERED SIGN
-      - "\u2122" # U+2122: "â„¢" TRADE MARK SIGN
-      - "\u2105" # U+2105: "â„…" CARE OF
-      - "!text/keyspec_left_square_bracket"
-      - "!text/keyspec_right_square_bracket"
-      - "$delete"
-  - bottom: "$alphabet , < $space > . $enter"
\ No newline at end of file
diff --git a/java/assets/layouts/Tamil/tamil.yaml b/java/assets/layouts/Tamil/tamil.yaml
deleted file mode 100644
index 217e9c434cea7774c3c1b3a494df01cee57e81bb..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Tamil/tamil.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-name: Tamil
-languages: ta-LK ta-IN ta-SG
-rows:
-  - letters: # rowkeys_tamil1.xml
-    - ['ஔ', 'ௌ']
-    - ['ஐ', 'ை']
-    - ['ஆ', 'ா']
-    - ['ஈ', 'ீ']
-    - ['ஊ', 'ூ']
-    - ['à®®']
-    - ['ன']
-    - ['ந']
-    - ['à®™']
-    - ['ண']
-    - ['ஞ']
-  - letters: # rowkeys_tamil2.xml
-    - ['ஓ', 'ோ', 'ௐ']
-    - ['ஏ', 'ே']
-    - ['அ', 'ஃ']
-    - ['இ', 'ி']
-    - ['உ', 'ு']
-    - ['à®±']
-    - ['ப']
-    - ['க', 'ஹ', 'க்ஷ']
-    - ['த']
-    - ['ச', 'ஸ', 'ஶ்ரீ']
-    - ['ட']
-  - letters: # rowkeys_tamil3.xml
-    - ['ஒ', 'ொ']
-    - ['எ', 'ெ']
-    - ['்']
-    - ['à®°']
-    - ['வ']
-    - ['à®´']
-    - ['ல']
-    - ['ள']
-    - ['ய']
-    - ['ஷ', 'ஜ']
-    - $delete # force no shift key
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Telugu/telugu.yaml b/java/assets/layouts/Telugu/telugu.yaml
deleted file mode 100644
index 85e3fd3543606972a7f3ed8d28e36fcdf1b5ff99..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Telugu/telugu.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-name: Telugu
-languages: te-IN
-useZWNJKey: true
-rows:
-  - letters: # rowkeys_telugu1.xml
-    - ['ౌ', 'ఔ']
-    - ['ై', 'ఐ']
-    - ['à°¾', 'à°†']
-    - ['à±€', 'à°ˆ']
-    - ['ూ', 'ఊ']
-    - ['à°¬', 'à°­']
-    - ['à°¹', 'à°ƒ']
-    - ['à°—', 'à°˜']
-    - ['à°¦', 'à°§']
-    - ['జ', 'ఝ']
-    - ['à°¡', 'à°¢']
-  - letters: # rowkeys_telugu2.xml
-    - ['ో', 'ఓ']
-    - ['ే', 'ఏ']
-    - ['్', 'అ']
-    - ['à°¿', 'à°‡']
-    - ['ు', 'ఉ']
-    - ['à°ª', 'à°«']
-    - ['ర', 'ఱ', '్ర']
-    - ['à°•', 'à°–']
-    - ['à°¤', 'à°¥']
-    - ['à°š', 'à°›']
-    - ['à°Ÿ', 'à° ']
-  - letters: # rowkeys_telugu3.xml
-    - ['ొ', 'ఒ']
-    - ['ె', 'ఎ']
-    - ['మ', 'ం', 'ఁ']
-    - ['à°¨', 'à°£', 'à°™', 'à°ž']
-    - ['à°µ']
-    - ['à°²', 'à°³']
-    - ['à°¸', 'à°¶']
-    - ['ఋ', 'ృ']
-    - ['ష', 'క్ష']
-    - ['య', 'జ్ఞ']
-    - $delete # force no shift key
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Thai/thai.yaml b/java/assets/layouts/Thai/thai.yaml
deleted file mode 100644
index e9100bc0fb3f68ca4a1d9e3b305d7c4d003aa6fc..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Thai/thai.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-name: Thai
-languages: th
-minimumFunctionalKeyWidth: 0.0
-attributes: { moreKeyMode: OnlyExplicit }
-numberRowMode: AlwaysDisabled
-rows:
-  - letters: # rowkeys_thai1.xml
-    - {type: case, normal: ['ๅ'], shifted: ['+']}
-    - {type: case, normal: ['/', '1', '๑'], shifted: ['๑']}
-    - {type: case, normal: ['_', '2', '๒'], shifted: ['๒']}
-    - {type: case, normal: ['ภ', '3', '๓'], shifted: ['๓']}
-    - {type: case, normal: ['ถ', '4', '๔'], shifted: ['๔']}
-    - {type: case, normal: [' ุ|ุ'], shifted: [' ู|ู']}
-    - {type: case, normal: [' ึ|ึ'], shifted: ['฿']}
-    - {type: case, normal: ['ค', '5', '๕'], shifted: ['๕']}
-    - {type: case, normal: ['ต', '6', '๖'], shifted: ['๖']}
-    - {type: case, normal: ['จ', '7', '๗'], shifted: ['๗']}
-    - {type: case, normal: ['ข', '8', '๘'], shifted: ['๘']}
-    - {type: case, normal: ['ช', '9', '๙'], shifted: ['๙']}
-  - letters: # rowkeys_thai2.xml
-    - {type: case, normal: ['ๆ', '0', '๐'], shifted: ['๐']}
-    - {type: case, normal: ['ไ'], shifted: ['"']}
-    - {type: case, normal: ['ำ'], shifted: ['ฎ']}
-    - {type: case, normal: ['พ'], shifted: ['ฑ']}
-    - {type: case, normal: ['ะ'], shifted: ['ธ']}
-    - {type: case, normal: [' ั|ั'], shifted: [' ํ|ํ']}
-    - {type: case, normal: [' ี|ี'], shifted: [' ๊|๊']}
-    - {type: case, normal: ['ร'], shifted: ['ณ']}
-    - {type: case, normal: ['น'], shifted: ['ฯ']}
-    - {type: case, normal: ['ย'], shifted: ['ญ']}
-    - {type: case, normal: ['บ'], shifted: ['ฐ']}
-    - {type: case, normal: ['ล'], shifted: [',']}
-  - letters: # rowkeys_thai3.xml
-    - {type: case, normal: ['ฟ'], shifted: ['ฤ']}
-    - {type: case, normal: ['ห'], shifted: ['ฆ']}
-    - {type: case, normal: ['ก'], shifted: ['ฏ']}
-    - {type: case, normal: ['ด'], shifted: ['โ']}
-    - {type: case, normal: ['เ'], shifted: ['ฌ']}
-    - {type: case, normal: [' ้|้'], shifted: [' ็|็']}
-    - {type: case, normal: [' ่|่'], shifted: [' ๋|๋']}
-    - {type: case, normal: ['า'], shifted: ['ษ']}
-    - {type: case, normal: ['ส'], shifted: ['ศ']}
-    - {type: case, normal: ['ว'], shifted: ['ซ']}
-    - {type: case, normal: ['ง'], shifted: ['.']}
-    - {type: case, normal: ['ฃ'], shifted: ['ฅ']}
-  - letters: # rowkeys_thai4.xml
-    - {type: case, normal: ['ผ'], shifted: ['(']}
-    - {type: case, normal: ['ป'], shifted: [')']}
-    - {type: case, normal: ['แ'], shifted: ['ฉ']}
-    - {type: case, normal: ['อ'], shifted: ['ฮ']}
-    - {type: case, normal: [' ิ|ิ'], shifted: [' ฺ|ฺ']}
-    - {type: case, normal: [' ื|ื'], shifted: [' ์|์']}
-    - {type: case, normal: ['ท'], shifted: ['?']}
-    - {type: case, normal: ['ม'], shifted: ['ฒ']}
-    - {type: case, normal: ['ใ'], shifted: ['ฬ']}
-    - {type: case, normal: ['ฝ'], shifted: ['ฦ']}
-# detected 4 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Turkish/turkish.yaml b/java/assets/layouts/Turkish/turkish.yaml
deleted file mode 100644
index 5f7687f1b66d4b3ce687e5aa2e92394207b3ee1c..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Turkish/turkish.yaml
+++ /dev/null
@@ -1,39 +0,0 @@
-name: Turkish
-languages: tr
-rows:
-  - letters: # rowkeys_turkish1.xml
-    - ['!text/keyspec_q']
-    - ['!text/keyspec_w']
-    - ['e']
-    - ['r']
-    - ['t']
-    - ['!text/keyspec_y']
-    - ['u']
-    - ['ı']
-    - ['o']
-    - ['p']
-    - ['ÄŸ']
-    - ['ü']
-  - letters: # rowkeys_turkish2.xml
-    - a
-    - s
-    - d
-    - f
-    - g
-    - h
-    - j
-    - k
-    - l
-    - ['ÅŸ']
-    - ['i']
-  - letters: # rowkeys_turkish3.xml
-    - z
-    - x
-    - c
-    - v
-    - b
-    - n
-    - m
-    - ['ö']
-    - ['ç']
-# detected 3 rows
\ No newline at end of file
diff --git a/java/assets/layouts/Uzbek/uzbek.yaml b/java/assets/layouts/Uzbek/uzbek.yaml
deleted file mode 100644
index f9604e10bcbcdc76ed9ecdf382816cd93adfecdc..0000000000000000000000000000000000000000
--- a/java/assets/layouts/Uzbek/uzbek.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: Uzbek
-languages: uz-UZ
-rows:
-  - letters: q w e r t y u i o p oÊ»
-  - letters: a s d f g h j k l gʻ ʼ
-  - letters: z x c v b n m
\ No newline at end of file
diff --git a/java/assets/layouts/mapping.yaml b/java/assets/layouts/mapping.yaml
deleted file mode 100644
index 1fca32e9ba924120ac5f3ec54ec1f4394903400c..0000000000000000000000000000000000000000
--- a/java/assets/layouts/mapping.yaml
+++ /dev/null
@@ -1,615 +0,0 @@
-languages:
-  af:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  ar:
-    - arabic
-    - lulua
-  az_AZ:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  be_BY:
-    - east_slavic
-    - russian_student
-    - russian_yavert
-    - russian_yazhert
-  bg:
-    - bulgarian
-    - bulgarian_bds
-  bn_BD:
-    - bengali_akkhor
-  bn_IN:
-    - bengali
-  ca:
-    - spanish
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  ckb:
-    - kurdish
-  cs:
-    - qwertz
-    - qwerty
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  da:
-    - nordic
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-  de:
-    - german
-    - qwertz
-    - swiss
-    - qwerty
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  de_CH:
-    - swiss
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  el:
-    - greek
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  en_GB:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  en_IN:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  en_US:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  eo:
-    - spanish
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  es:
-    - spanish
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  es_419:
-    - spanish
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  es_US:
-    - spanish
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  et_EE:
-    - nordic
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-  eu_ES:
-    - spanish
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  fa:
-    - farsi
-  fi:
-    - nordic
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-  fr:
-    - azerty
-    - swiss
-    - qwerty
-    - qwertz
-    - dvorak
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  fr_CA:
-    - qwerty
-    - swiss
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  fr_CH:
-    - swiss
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  gl_ES:
-    - spanish
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  hi:
-    - hindi
-    - hindi_compact
-  hi_Latn:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  hr:
-    - qwertz
-    - qwerty
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  hu:
-    - qwertz
-    - qwerty
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  hy_AM:
-    - armenian_phonetic
-  in:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  is:
-    - icelandic
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  it:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  it_CH:
-    - swiss
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  iw:
-    - hebrew
-    - hebrew-staggered
-  ka_GE:
-    - georgian
-  kk:
-    - east_slavic
-    - russian_student
-    - russian_yavert
-    - russian_yazhert
-  km_KH:
-    - khmer
-  kn_IN:
-    - kannada
-  ky:
-    - east_slavic
-    - russian_student
-    - russian_yavert
-    - russian_yazhert
-  lo_LA:
-    - lao
-  lt:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  lv:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  mk:
-    - south_slavic
-  ml_IN:
-    - malayalam
-  mn_MN:
-    - mongolian
-  mr_IN:
-    - marathi
-  ms_MY:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  nb:
-    - nordic
-  ne_NP:
-    - nepali_romanized
-    - nepali_traditional
-  nl:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  nl_BE:
-    - azerty
-    - qwerty
-    - qwertz
-    - dvorak
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  pl:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  pt_BR:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  pt_PT:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  ro:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  ru:
-    - east_slavic
-    - russian_student
-    - russian_yavert
-    - russian_yazhert
-  si_LK:
-    - sinhala
-  sk:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  sl:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  sr:
-    - south_slavic
-  sr_Latn:
-    - serbian_qwertz
-  sv:
-    - nordic
-  sw:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  ta_IN:
-    - tamil
-  ta_LK:
-    - tamil
-  ta_SG:
-    - tamil
-  te_IN:
-    - telugu
-  th:
-    - thai
-  tl:
-    - spanish
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  tr:
-    - turkish
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  uk:
-    - east_slavic
-    - russian_student
-    - russian_yavert
-    - russian_yazhert
-  uz_UZ:
-    - uzbek
-  vi:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  zu:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  zz:
-    - qwerty
-    - qwertz
-    - dvorak
-    - azerty
-    - colemak
-    - colemak_dh
-    - colemak_dh_ansi
-    - bepo
-    - pcqwerty
-    - nordic
-  ipa:
-    - ipa
\ No newline at end of file