diff --git a/installs/testinstall.toml b/installs/testinstall.toml index ca5b5dd..de22446 100644 --- a/installs/testinstall.toml +++ b/installs/testinstall.toml @@ -14,7 +14,8 @@ mode = "Desktop" locale = "de_DE.UTF-8" # Keymap -keymap = "de-latin1" +keyboard_layout = "de" +keyboard_variant = "mac" # Timezone timezone = "Europe/Berlin" diff --git a/src/config.rs b/src/config.rs index d31b3b5..42fbc41 100644 --- a/src/config.rs +++ b/src/config.rs @@ -68,8 +68,10 @@ pub struct GeneralConfig { pub mode: InstallMode, /// System locale pub locale: String, - /// Keymap - pub keymap: String, + /// Keyboard Layout + pub keyboard_layout: String, + /// Keyboard Variant + pub keyboard_variant: Option, /// Timezone pub timezone: String, /// Hostname diff --git a/src/install/first_boot.rs b/src/install/first_boot.rs index f2e30e2..4cb450f 100644 --- a/src/install/first_boot.rs +++ b/src/install/first_boot.rs @@ -38,11 +38,7 @@ pub fn first_boot_values(conf: &GeneralConfig) { // Keymap print_status("Writing /etc/vconsole.conf"); - std::fs::write( - "/mnt/etc/vconsole.conf", - format!("KEYMAP=\"{}\"", conf.keymap), - ) - .unwrap(); + std::fs::write("/mnt/etc/vconsole.conf", build_vconsole_conf(conf)).unwrap(); // Hostname print_status("Writing /etc/hostname"); @@ -57,3 +53,14 @@ pub fn first_boot_values(conf: &GeneralConfig) { systemd_service_enable("NetworkManager.service"); } + +pub fn build_vconsole_conf(conf: &GeneralConfig) -> String { + let mut ret = format!("KEYMAP={}\n", conf.keyboard_layout); + ret.push_str(&format!("XBKLAYOUT={}\n", conf.keyboard_layout)); + + if let Some(variant) = &conf.keyboard_variant { + ret.push_str(&format!("XKBMODEL={variant}\n")); + } + + ret +} diff --git a/src/install/skel.rs b/src/install/skel.rs index 6cb3214..e4231da 100644 --- a/src/install/skel.rs +++ b/src/install/skel.rs @@ -1,6 +1,14 @@ -use crate::config::GeneralConfig; +use crate::{config::GeneralConfig, create_iso::build_kxkbrc, linux::install_file, print_status}; pub fn setup_skel(conf: &GeneralConfig) { - // TODO : Implement - unimplemented!() + print_status("Setting user config"); + std::fs::create_dir_all("/mnt/etc/skel/.config").unwrap(); + install_file( + "/mnt/etc/skel/.config/kxkbrc", + &build_kxkbrc( + conf.keyboard_layout.as_str(), + conf.keyboard_variant.as_ref().map(|x| x.as_str()), + ), + 0o644, + ); }