feature(keyboard): support user-defined xkb layouts

Signed-off-by: Yolan Romailler <AnomalRoil@users.noreply.github.com>
This commit is contained in:
Yolan Romailler 2026-01-17 23:23:31 +01:00 committed by Jacob Kauffmann
parent 3182327417
commit 4a311f15a4

View file

@ -84,6 +84,7 @@ pub type Description = String;
pub enum LayoutSource {
Base,
Extra,
Custom,
}
const KB_REPEAT_DELAY_DEFAULT: u32 = 600;
@ -332,6 +333,22 @@ impl page::Page<crate::pages::Message> for Page {
)
.collect::<Vec<_>>();
// Add user-defined layouts if any are found
let user_layouts = xkb_data::user_keyboard_layouts();
match user_layouts {
Ok(ref custom) => {
sorted_layouts.extend(
custom
.layouts()
.iter()
.map(|layout| (layout, LayoutSource::Custom)),
);
}
Err(why) => {
tracing::error!(?why, "failed to get user keyboard layouts");
}
}
sorted_layouts.sort_unstable_by(|(a, _), (b, _)| {
match (a.name(), b.name()) {
// Place US at the top of the list as it's the default