diff options
| author | erdii <me@erdii.engineering> | 2025-04-20 11:30:40 +0200 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-04-30 09:54:19 -0700 |
| commit | 82dabc21f3c2379a7bed320574ff468869d59a18 (patch) | |
| tree | 170f198475819f02cd8b161641fa12680234c9fa | |
| parent | 39b3d6287377c18042f9c96d272f3a8b7597c13e (diff) | |
| download | niri-82dabc21f3c2379a7bed320574ff468869d59a18.tar.gz niri-82dabc21f3c2379a7bed320574ff468869d59a18.tar.bz2 niri-82dabc21f3c2379a7bed320574ff468869d59a18.zip | |
feat: implement support to enable numlock at startup
Signed-off-by: erdii <me@erdii.engineering>
| -rw-r--r-- | niri-config/src/lib.rs | 4 | ||||
| -rw-r--r-- | resources/default-config.kdl | 3 | ||||
| -rw-r--r-- | src/niri.rs | 30 |
3 files changed, 26 insertions, 11 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index e77ff558..263ab7a7 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -120,6 +120,8 @@ pub struct Keyboard { pub repeat_rate: u8, #[knuffel(child, unwrap(argument), default)] pub track_layout: TrackLayout, + #[knuffel(child)] + pub numlock: bool, } impl Default for Keyboard { @@ -129,6 +131,7 @@ impl Default for Keyboard { repeat_delay: 600, repeat_rate: 25, track_layout: Default::default(), + numlock: Default::default(), } } } @@ -4059,6 +4062,7 @@ mod tests { repeat_delay: 600, repeat_rate: 25, track_layout: Window, + numlock: false, }, touchpad: Touchpad { off: false, diff --git a/resources/default-config.kdl b/resources/default-config.kdl index c90847d7..213a8ba1 100644 --- a/resources/default-config.kdl +++ b/resources/default-config.kdl @@ -16,6 +16,9 @@ input { // layout "us,ru" // options "grp:win_space_toggle,compose:ralt,ctrl:nocaps" } + + // Enable numlock on startup, omitting this setting disables it. + numlock } // Next sections include libinput settings. diff --git a/src/niri.rs b/src/niri.rs index 69e48962..ab7371dc 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -2248,22 +2248,30 @@ impl Niri { let single_pixel_buffer_state = SinglePixelBufferState::new::<State>(&display_handle); let mut seat: Seat<State> = seat_state.new_wl_seat(&display_handle, backend.seat_name()); - if let Err(err) = seat.add_keyboard( + let keyboard = match seat.add_keyboard( config_.input.keyboard.xkb.to_xkb_config(), config_.input.keyboard.repeat_delay.into(), config_.input.keyboard.repeat_rate.into(), ) { - if let smithay::input::keyboard::Error::BadKeymap = err { - warn!("error loading the configured xkb keymap, trying default"); - } else { - warn!("error adding keyboard: {err:?}"); + Err(err) => { + if let smithay::input::keyboard::Error::BadKeymap = err { + warn!("error loading the configured xkb keymap, trying default"); + } else { + warn!("error adding keyboard: {err:?}"); + } + seat.add_keyboard( + Default::default(), + config_.input.keyboard.repeat_delay.into(), + config_.input.keyboard.repeat_rate.into(), + ) + .unwrap() } - seat.add_keyboard( - Default::default(), - config_.input.keyboard.repeat_delay.into(), - config_.input.keyboard.repeat_rate.into(), - ) - .unwrap(); + Ok(keyboard) => keyboard, + }; + if config_.input.keyboard.numlock { + let mut modifier_state = keyboard.modifier_state(); + modifier_state.num_lock = true; + keyboard.set_modifier_state(modifier_state); } seat.add_pointer(); |
