diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-08-20 14:31:34 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-08-20 14:43:50 +0300 |
| commit | e81f356908fe38ec45c74cf822dd102efbcf6457 (patch) | |
| tree | 5c5263b210a0755f48b1511cc1ff8c2697e095a6 /niri-config/src | |
| parent | 1013147ba3154788cb16ffc32b8155fd2008dfa3 (diff) | |
| download | niri-e81f356908fe38ec45c74cf822dd102efbcf6457.tar.gz niri-e81f356908fe38ec45c74cf822dd102efbcf6457.tar.bz2 niri-e81f356908fe38ec45c74cf822dd102efbcf6457.zip | |
Add spawn-sh, spawn-at-startup-sh
Our top 10 most confusing config moments
Diffstat (limited to 'niri-config/src')
| -rw-r--r-- | niri-config/src/lib.rs | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index dbd6b5ea..94d7d5c0 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -41,6 +41,8 @@ pub struct Config { pub outputs: Outputs, #[knuffel(children(name = "spawn-at-startup"))] pub spawn_at_startup: Vec<SpawnAtStartup>, + #[knuffel(children(name = "spawn-at-startup-sh"))] + pub spawn_at_startup_sh: Vec<SpawnAtStartupSh>, #[knuffel(child, default)] pub layout: Layout, #[knuffel(child, default)] @@ -606,6 +608,12 @@ pub struct SpawnAtStartup { pub command: Vec<String>, } +#[derive(knuffel::Decode, Debug, Clone, PartialEq, Eq)] +pub struct SpawnAtStartupSh { + #[knuffel(argument)] + pub command: String, +} + #[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq)] pub struct FocusRing { #[knuffel(child)] @@ -1719,6 +1727,7 @@ pub enum Action { DebugToggleOpaqueRegions, DebugToggleDamage, Spawn(#[knuffel(arguments)] Vec<String>), + SpawnSh(#[knuffel(argument)] String), DoScreenTransition(#[knuffel(property(name = "delay-ms"))] Option<u16>), #[knuffel(skip)] ConfirmScreenshot { @@ -1962,6 +1971,7 @@ impl From<niri_ipc::Action> for Action { niri_ipc::Action::PowerOffMonitors {} => Self::PowerOffMonitors, niri_ipc::Action::PowerOnMonitors {} => Self::PowerOnMonitors, niri_ipc::Action::Spawn { command } => Self::Spawn(command), + niri_ipc::Action::SpawnSh { command } => Self::SpawnSh(command), niri_ipc::Action::DoScreenTransition { delay_ms } => Self::DoScreenTransition(delay_ms), niri_ipc::Action::Screenshot { show_pointer } => Self::Screenshot(show_pointer), niri_ipc::Action::ScreenshotScreen { @@ -3854,7 +3864,7 @@ where } match Action::decode_node(child, ctx) { Ok(action) => { - if !matches!(action, Action::Spawn(_)) { + if !matches!(action, Action::Spawn(_) | Action::SpawnSh(_)) { if let Some(node) = allow_when_locked_node { ctx.emit_error(DecodeError::unexpected( node, @@ -4453,6 +4463,7 @@ mod tests { } spawn-at-startup "alacritty" "-e" "fish" + spawn-at-startup-sh "qs -c ~/source/qs/MyAwesomeShell" prefer-no-csd @@ -4549,6 +4560,7 @@ mod tests { Mod+Shift+1 { focus-workspace "workspace-1"; } Mod+Shift+E allow-inhibiting=false { quit skip-confirmation=true; } Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } + Super+Alt+S allow-when-locked=true { spawn-sh "pkill orca || exec orca"; } } switch-events { @@ -4794,6 +4806,11 @@ mod tests { ], }, ], + spawn_at_startup_sh: [ + SpawnAtStartupSh { + command: "qs -c ~/source/qs/MyAwesomeShell", + }, + ], layout: Layout { focus_ring: FocusRing { off: false, @@ -5681,6 +5698,24 @@ mod tests { allow_inhibiting: true, hotkey_overlay_title: None, }, + Bind { + key: Key { + trigger: Keysym( + XK_s, + ), + modifiers: Modifiers( + ALT | SUPER, + ), + }, + action: SpawnSh( + "pkill orca || exec orca", + ), + repeat: true, + cooldown: None, + allow_when_locked: true, + allow_inhibiting: true, + hotkey_overlay_title: None, + }, ], ), switch_events: SwitchBinds { |
