├── .gitignore ├── rustfmt.toml ├── assets ├── kiara.blend └── kiara.blend1 ├── res └── kiara │ └── ring.glb ├── README.md ├── flake.nix ├── Cargo.toml ├── LICENSE ├── flake.lock ├── src ├── kiara.rs ├── main.rs ├── ring.rs └── niri_config.kdl └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | hard_tabs = true 2 | # fn_single_line = true 3 | -------------------------------------------------------------------------------- /assets/kiara.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StardustXR/kiara/HEAD/assets/kiara.blend -------------------------------------------------------------------------------- /res/kiara/ring.glb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StardustXR/kiara/HEAD/res/kiara/ring.glb -------------------------------------------------------------------------------- /assets/kiara.blend1: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StardustXR/kiara/HEAD/assets/kiara.blend1 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kiara 2 | 3 | A stardust app shell/DE that uses [Niri](https://github.com/YaLTeR/niri) with a 360deg virtual monitor to expand your wortkspace with easy to learn keyboard shortcuts or buttons. 4 | 5 | ## Build 6 | 1. Install niri from source or package manager 7 | 2. `cargo build` 8 | 9 | ## Run 10 | 1. Run the stardust server 11 | 2. Run azimuth or such if needed to get mouse/keyboard input working 12 | 3. `cargo run` -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs = { 3 | nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 4 | crane = { 5 | inputs.nixpkgs.follows = "nixpkgs"; 6 | url = "github:ipetkov/crane"; 7 | }; 8 | }; 9 | 10 | 11 | outputs = { self, nixpkgs, crane }: 12 | let supportedSystems = [ "aarch64-linux" "x86_64-linux" ]; 13 | forAllSystems = nixpkgs.lib.genAttrs supportedSystems; 14 | nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); 15 | in { 16 | packages = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in { 17 | default = crane.lib.${system}.buildPackage rec { 18 | src = ./.; 19 | 20 | NIRI_CONFIG = "${src}/src/niri_config.kdl"; 21 | STARDUST_RES_PREFIXES = "${src}/res"; 22 | }; 23 | }); 24 | 25 | devShells = forAllSystems (system: { 26 | default = crane.lib.${system}.devShell { 27 | }; 28 | }); 29 | }; 30 | } 31 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "kiara" 3 | version = "0.1.0" 4 | edition = "2021" 5 | authors = ["Nova King "] 6 | description = "App shell for Niri, the infinite horizontal wayland compositor" 7 | license = "MIT" 8 | repository = "https://github.com/StardustXR/flatland/" 9 | homepage = "https://stardustxr.org" 10 | 11 | [dependencies] 12 | glam = { version = "0.25", features = ["mint"] } 13 | mint = "0.5.9" 14 | manifest-dir-macros = "0.1.17" 15 | lazy_static = "1.4.0" 16 | tokio = { version = "1.28.0", features = ["full"] } 17 | input-event-codes = "5.16.8" 18 | rustc-hash = "1.1.0" 19 | tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } 20 | tracing = "0.1.37" 21 | color-eyre = "0.6.2" 22 | color-rs = "0.8.0" 23 | colorgrad = "0.6.2" 24 | map-range = "0.1.2" 25 | clap = { version = "4.5.0", features = ["derive"] } 26 | 27 | [dependencies.stardust-xr-fusion] 28 | git = "https://github.com/StardustXR/core.git" 29 | # path = "../../core/fusion" 30 | 31 | [dependencies.stardust-xr-molecules] 32 | git = "https://github.com/StardustXR/molecules.git" 33 | # path = "../../molecules" 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 [fullname] 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "crane": { 4 | "inputs": { 5 | "nixpkgs": [ 6 | "nixpkgs" 7 | ] 8 | }, 9 | "locked": { 10 | "lastModified": 1712681629, 11 | "narHash": "sha256-bMDXn4AkTXLCpoZbII6pDGoSeSe9gI87jxPsHRXgu/E=", 12 | "owner": "ipetkov", 13 | "repo": "crane", 14 | "rev": "220387ac8e99cbee0ca4c95b621c4bc782b6a235", 15 | "type": "github" 16 | }, 17 | "original": { 18 | "owner": "ipetkov", 19 | "repo": "crane", 20 | "type": "github" 21 | } 22 | }, 23 | "nixpkgs": { 24 | "locked": { 25 | "lastModified": 1712791164, 26 | "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", 27 | "owner": "NixOS", 28 | "repo": "nixpkgs", 29 | "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", 30 | "type": "github" 31 | }, 32 | "original": { 33 | "owner": "NixOS", 34 | "ref": "nixos-unstable", 35 | "repo": "nixpkgs", 36 | "type": "github" 37 | } 38 | }, 39 | "root": { 40 | "inputs": { 41 | "crane": "crane", 42 | "nixpkgs": "nixpkgs" 43 | } 44 | } 45 | }, 46 | "root": "root", 47 | "version": 7 48 | } 49 | -------------------------------------------------------------------------------- /src/kiara.rs: -------------------------------------------------------------------------------- 1 | use std::sync::OnceLock; 2 | 3 | use crate::ring::Ring; 4 | use stardust_xr_fusion::{ 5 | client::{ClientState, FrameInfo, RootHandler}, 6 | items::{ 7 | panel::{PanelItem, PanelItemInitData}, 8 | ItemUIHandler, 9 | }, 10 | }; 11 | 12 | pub struct Kiara { 13 | ring: OnceLock<(String, Ring)>, 14 | } 15 | impl Kiara { 16 | pub fn new() -> Self { 17 | Kiara { 18 | ring: OnceLock::new(), 19 | } 20 | } 21 | 22 | fn add_item(&mut self, uid: String, item: PanelItem, _init_data: PanelItemInitData) { 23 | // dbg!(init_data); 24 | self.ring.get_or_init(|| { 25 | let ring = Ring::new(item); 26 | (uid, ring) 27 | }); 28 | } 29 | fn remove_item(&mut self, uid: &str) { 30 | if let Some((this_uid, _)) = self.ring.get() { 31 | if this_uid == uid { 32 | self.ring.take(); 33 | } 34 | } 35 | } 36 | } 37 | impl ItemUIHandler for Kiara { 38 | fn item_created(&mut self, uid: String, item: PanelItem, init_data: PanelItemInitData) { 39 | self.add_item(uid, item, init_data); 40 | } 41 | fn item_destroyed(&mut self, uid: String) { 42 | self.remove_item(&uid); 43 | } 44 | } 45 | // impl ItemAcceptorHandler for Flatland { 46 | // fn captured(&mut self, uid: String, item: PanelItem, init_data: PanelItemInitData) { 47 | // self.add_item(uid, item, init_data); 48 | // } 49 | // fn released(&mut self, uid: String) { 50 | // self.remove_item(uid); 51 | // } 52 | // } 53 | impl RootHandler for Kiara { 54 | fn frame(&mut self, _info: FrameInfo) { 55 | if let Some((_, ring)) = self.ring.get_mut() { 56 | ring.update(); 57 | } 58 | } 59 | 60 | fn save_state(&mut self) -> ClientState { 61 | ClientState::default() 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | pub mod kiara; 2 | pub mod ring; 3 | 4 | use crate::kiara::Kiara; 5 | use clap::Parser; 6 | use color_eyre::eyre::{bail, Result}; 7 | use manifest_dir_macros::{directory_relative_path, file_relative_path}; 8 | use stardust_xr_fusion::{client::Client, items::ItemUI}; 9 | use std::env::set_var; 10 | use tokio::process::Command; 11 | use tracing_subscriber::EnvFilter; 12 | 13 | #[derive(Debug, clap::Parser)] 14 | pub struct Cli { 15 | #[arg(long = "", num_args(0..))] 16 | niri_launch: Vec, 17 | } 18 | 19 | #[tokio::main(flavor = "current_thread")] 20 | async fn main() -> Result<()> { 21 | tracing_subscriber::fmt() 22 | .compact() 23 | .with_env_filter(EnvFilter::from_env("LOG_LEVEL")) 24 | .init(); 25 | let args = Cli::parse(); 26 | let (client, event_loop) = Client::connect_with_async_loop().await?; 27 | client.set_base_prefixes(&[directory_relative_path!("res")]); 28 | 29 | let kiara = client.wrap_root(Kiara::new())?; 30 | let _item_ui_wrapped = ItemUI::register(&client)?.wrap_raw(kiara)?; 31 | let env = client.get_connection_environment()?.await?; 32 | for (key, value) in env { 33 | set_var(key, value); 34 | } 35 | let niri_config_path = 36 | option_env!("NIRI_CONFIG").unwrap_or(file_relative_path!("src/niri_config.kdl")); 37 | let mut niri_open = Command::new("niri") 38 | .args(&["-c", niri_config_path, "--"]) 39 | .args(&args.niri_launch) 40 | .spawn()?; 41 | 42 | let result = tokio::select! { 43 | n = niri_open.wait() => { 44 | println!("Niri stopped. Output status: {:?}", n); 45 | Ok(()) 46 | }, 47 | _ = tokio::signal::ctrl_c() => { 48 | niri_open.kill().await?; 49 | Ok(()) 50 | }, 51 | _ = event_loop => { 52 | niri_open.kill().await?; 53 | bail!("Server crashed") 54 | } 55 | }; 56 | result 57 | } 58 | -------------------------------------------------------------------------------- /src/ring.rs: -------------------------------------------------------------------------------- 1 | use std::f32::consts::PI; 2 | 3 | use color::rgba_linear; 4 | use glam::{vec2, Vec2, Vec3, Vec3Swizzles}; 5 | use map_range::MapRange; 6 | use mint::Vector2; 7 | use stardust_xr_fusion::{ 8 | core::values::ResourceID, 9 | drawable::{Line, Lines, Model}, 10 | fields::CylinderField, 11 | input::{InputDataType, InputHandler, Pointer}, 12 | items::panel::{PanelItem, SurfaceID}, 13 | node::NodeType, 14 | spatial::Transform, 15 | HandlerWrapper, 16 | }; 17 | use stardust_xr_molecules::{ 18 | data::SimplePulseReceiver, 19 | input_action::{BaseInputAction, InputActionHandler, SingleActorAction}, 20 | keyboard::KeyboardEvent, 21 | lines::{circle, make_line_points}, 22 | }; 23 | 24 | const ANGLE: f32 = 360.0; 25 | const RADIUS: f32 = 2.0; 26 | const HEIGHT_METERS: f32 = 1.0; 27 | const HEIGHT_PIXELS: u32 = 1080; 28 | 29 | fn ray_circle_closest_intersection( 30 | ray_origin: Vec2, 31 | ray_direction: Vec2, 32 | circle_radius: f32, 33 | ) -> Option { 34 | let a = ray_direction.x * ray_direction.x + ray_direction.y * ray_direction.y; 35 | let b = 2.0 * (ray_direction.x * ray_origin.x + ray_direction.y * ray_origin.y); 36 | let c = 37 | ray_origin.x * ray_origin.x + ray_origin.y * ray_origin.y - circle_radius * circle_radius; 38 | 39 | let disc = b * b - 4.0 * a * c; 40 | if disc < 0.0 { 41 | return None; 42 | } 43 | 44 | let t1 = (-b - disc.sqrt()) / (2.0 * a); 45 | if t1 >= 0.0 { 46 | return Some(t1); 47 | } 48 | 49 | let t2 = (-b + disc.sqrt()) / (2.0 * a); 50 | if t2 >= 0.0 { 51 | return Some(t2); 52 | } 53 | 54 | None 55 | } 56 | fn map_pointer_screen_coords(pointer: &Pointer) -> Option { 57 | let origin: Vec3 = pointer.origin.into(); 58 | let direction: Vec3 = pointer.direction().into(); 59 | let t_2d = ray_circle_closest_intersection(origin.xz(), direction.xz().normalize(), RADIUS)?; 60 | let xz_length = direction.xz().length(); 61 | let t = t_2d / xz_length; 62 | let intersection_point = origin + (direction * t); 63 | map_point_screen_coords(intersection_point) 64 | } 65 | fn map_point_screen_coords(point: Vec3) -> Option { 66 | if point.y.abs() > HEIGHT_METERS / 2.0 { 67 | return None; 68 | } 69 | 70 | let x = point.x.atan2(-point.z).map_range(-PI..PI, 0.0..1.0); 71 | let y = point 72 | .y 73 | .map_range(HEIGHT_METERS / 2.0..-HEIGHT_METERS / 2.0, 0.0..1.0); 74 | Some(vec2(x, y)) 75 | } 76 | 77 | pub struct Ring { 78 | panel_item: PanelItem, 79 | _model: Model, 80 | _field: CylinderField, 81 | size_pixels: Vector2, 82 | input_handler: HandlerWrapper>, 83 | hover_action: SingleActorAction<()>, 84 | click_action: BaseInputAction<()>, 85 | context_action: BaseInputAction<()>, 86 | _keyboard: SimplePulseReceiver, 87 | _lines: Lines, 88 | } 89 | impl Ring { 90 | pub fn new(panel_item: PanelItem) -> Self { 91 | let client = panel_item.node().client().unwrap(); 92 | let model = Model::create( 93 | client.get_root(), 94 | Transform::identity(), 95 | &ResourceID::new_namespaced("kiara", "ring"), 96 | ) 97 | .unwrap(); 98 | let ring = model.model_part("Ring").unwrap(); 99 | let field = 100 | CylinderField::create(&model, Transform::identity(), RADIUS, HEIGHT_METERS).unwrap(); 101 | let input_handler = InputActionHandler::wrap( 102 | InputHandler::create(&model, Transform::identity(), &field).unwrap(), 103 | (), 104 | ) 105 | .unwrap(); 106 | let hover_action = SingleActorAction::new( 107 | false, 108 | |data, _: &()| match &data.input { 109 | InputDataType::Pointer(p) => map_pointer_screen_coords(&p).is_some(), 110 | InputDataType::Hand(h) => map_point_screen_coords(h.palm.position.into()).is_some(), 111 | InputDataType::Tip(t) => map_point_screen_coords(t.origin.into()).is_some(), 112 | }, 113 | true, 114 | ); 115 | let click_action = BaseInputAction::new(false, |data, _: &()| match data.input { 116 | InputDataType::Pointer(_) => data.datamap.with_data(|r| r.idx("select").as_f32() > 0.0), 117 | _ => false, 118 | }); 119 | let context_action = BaseInputAction::new(false, |data, _: &()| match data.input { 120 | InputDataType::Pointer(_) => { 121 | data.datamap.with_data(|r| r.idx("context").as_f32() > 0.0) 122 | } 123 | _ => false, 124 | }); 125 | 126 | let panel_alias = panel_item.alias(); 127 | let keyboard = SimplePulseReceiver::create( 128 | &model, 129 | Transform::identity(), 130 | &field, 131 | move |_, keyboard_event: KeyboardEvent| { 132 | keyboard_event 133 | .send_to_panel(&panel_alias, &SurfaceID::Toplevel) 134 | .unwrap(); 135 | }, 136 | ) 137 | .unwrap(); 138 | 139 | let arc_length = ANGLE.to_radians() * RADIUS; 140 | let aspect_ratio = arc_length / HEIGHT_METERS; 141 | let width_pixels = aspect_ratio * (HEIGHT_PIXELS as f32); 142 | let size_pixels = [width_pixels as u32, HEIGHT_PIXELS].into(); 143 | panel_item.set_toplevel_size(size_pixels).unwrap(); 144 | panel_item 145 | .apply_surface_material(&SurfaceID::Toplevel, &ring) 146 | .unwrap(); 147 | 148 | let circle = circle(128, 0.0, RADIUS + 0.01); 149 | let lines = Lines::create( 150 | &model, 151 | Transform::identity(), 152 | &[ 153 | Line { 154 | points: make_line_points( 155 | circle 156 | .iter() 157 | .map(|p| [p.x, HEIGHT_METERS / 2.0, p.y].into()) 158 | .collect(), 159 | 0.01, 160 | rgba_linear!(1.0, 1.0, 1.0, 1.0), 161 | ), 162 | cyclic: true, 163 | }, 164 | Line { 165 | points: make_line_points( 166 | circle 167 | .iter() 168 | .map(|p| [p.x, -HEIGHT_METERS / 2.0, p.y].into()) 169 | .collect(), 170 | 0.01, 171 | rgba_linear!(1.0, 1.0, 1.0, 1.0), 172 | ), 173 | cyclic: true, 174 | }, 175 | ], 176 | ) 177 | .unwrap(); 178 | Ring { 179 | panel_item, 180 | _model: model, 181 | _field: field, 182 | size_pixels, 183 | input_handler, 184 | hover_action, 185 | click_action, 186 | context_action, 187 | _keyboard: keyboard, 188 | _lines: lines, 189 | } 190 | } 191 | pub fn update(&mut self) { 192 | self.input_handler.lock_wrapped().update_actions([ 193 | self.hover_action.base_mut(), 194 | &mut self.click_action, 195 | &mut self.context_action, 196 | ]); 197 | self.hover_action.update(None); 198 | if let Some(hover_actor) = self.hover_action.actor() { 199 | if let Some(pointer_pos) = match &hover_actor.input { 200 | InputDataType::Pointer(p) => map_pointer_screen_coords(p), 201 | InputDataType::Hand(_) => None, 202 | InputDataType::Tip(_) => None, 203 | } { 204 | let pointer_pos = vec2( 205 | pointer_pos.x * self.size_pixels.x as f32, 206 | pointer_pos.y * self.size_pixels.y as f32, 207 | ); 208 | self.panel_item 209 | .pointer_motion(&SurfaceID::Toplevel, pointer_pos) 210 | .unwrap(); 211 | if self.click_action.started_acting.contains(hover_actor) { 212 | self.panel_item 213 | .pointer_button(&SurfaceID::Toplevel, input_event_codes::BTN_LEFT!(), true) 214 | .unwrap(); 215 | } 216 | if self.click_action.stopped_acting.contains(hover_actor) { 217 | self.panel_item 218 | .pointer_button(&SurfaceID::Toplevel, input_event_codes::BTN_LEFT!(), false) 219 | .unwrap(); 220 | } 221 | if self.context_action.started_acting.contains(hover_actor) { 222 | self.panel_item 223 | .pointer_button(&SurfaceID::Toplevel, input_event_codes::BTN_RIGHT!(), true) 224 | .unwrap(); 225 | } 226 | if self.context_action.stopped_acting.contains(hover_actor) { 227 | self.panel_item 228 | .pointer_button( 229 | &SurfaceID::Toplevel, 230 | input_event_codes::BTN_RIGHT!(), 231 | false, 232 | ) 233 | .unwrap(); 234 | } 235 | } 236 | } 237 | } 238 | } 239 | -------------------------------------------------------------------------------- /src/niri_config.kdl: -------------------------------------------------------------------------------- 1 | // This config is in the KDL format: https://kdl.dev 2 | // "/-" comments out the following node. 3 | 4 | input { 5 | keyboard { 6 | xkb { 7 | // You can set rules, model, layout, variant and options. 8 | // For more information, see xkeyboard-config(7). 9 | 10 | // For example: 11 | // layout "us,ru" 12 | // options "grp:win_space_toggle,compose:ralt,ctrl:nocaps" 13 | } 14 | 15 | // You can set the keyboard repeat parameters. The defaults match wlroots and sway. 16 | // Delay is in milliseconds before the repeat starts. Rate is in characters per second. 17 | // repeat-delay 600 18 | // repeat-rate 25 19 | 20 | // Niri can remember the keyboard layout globally (the default) or per-window. 21 | // - "global" - layout change is global for all windows. 22 | // - "window" - layout is tracked for each window individually. 23 | // track-layout "global" 24 | } 25 | 26 | // Next sections include libinput settings. 27 | // Omitting settings disables them, or leaves them at their default values. 28 | touchpad { 29 | tap 30 | // dwt 31 | natural-scroll 32 | // accel-speed 0.2 33 | // accel-profile "flat" 34 | // tap-button-map "left-middle-right" 35 | } 36 | 37 | mouse { 38 | // natural-scroll 39 | // accel-speed 0.2 40 | // accel-profile "flat" 41 | } 42 | 43 | tablet { 44 | // Set the name of the output (see below) which the tablet will map to. 45 | // If this is unset or the output doesn't exist, the tablet maps to one of the 46 | // existing outputs. 47 | map-to-output "eDP-1" 48 | } 49 | 50 | // By default, niri will take over the power button to make it sleep 51 | // instead of power off. 52 | // Uncomment this if you would like to configure the power button elsewhere 53 | // (i.e. logind.conf). 54 | // disable-power-key-handling 55 | } 56 | 57 | // You can configure outputs by their name, which you can find 58 | // by running `niri msg outputs` while inside a niri instance. 59 | // The built-in laptop monitor is usually called "eDP-1". 60 | // Remember to uncommend the node by removing "/-"! 61 | /-output "eDP-1" { 62 | // Uncomment this line to disable this output. 63 | // off 64 | 65 | // Scale is a floating-point number, but at the moment only integer values work. 66 | scale 2.0 67 | 68 | // Transform allows to rotate the output counter-clockwise, valid values are: 69 | // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270. 70 | transform "normal" 71 | 72 | // Resolution and, optionally, refresh rate of the output. 73 | // The format is "x" or "x@". 74 | // If the refresh rate is omitted, niri will pick the highest refresh rate 75 | // for the resolution. 76 | // If the mode is omitted altogether or is invalid, niri will pick one automatically. 77 | // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes. 78 | mode "1920x1080@144" 79 | 80 | // Position of the output in the global coordinate space. 81 | // This affects directional monitor actions like "focus-monitor-left", and cursor movement. 82 | // The cursor can only move between directly adjacent outputs. 83 | // Output scale has to be taken into account for positioning: 84 | // outputs are sized in logical, or scaled, pixels. 85 | // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080, 86 | // so to put another output directly adjacent to it on the right, set its x to 1920. 87 | // It the position is unset or results in an overlap, the output is instead placed 88 | // automatically. 89 | position x=1280 y=0 90 | } 91 | 92 | layout { 93 | // By default focus ring and border are rendered as a solid background rectangle 94 | // behind windows. That is, they will show up through semitransparent windows. 95 | // This is because windows using client-side decoratins can have an arbitrary shape. 96 | // 97 | // If you don't like that, you should uncomment `prefer-no-csd` below. 98 | // Niri will draw focus ring and border *around* windows that agree to omit their 99 | // client-side decorations. 100 | 101 | // You can change how the focus ring looks. 102 | focus-ring { 103 | // Uncomment this line to disable the focus ring. 104 | // off 105 | 106 | // How many logical pixels the ring extends out from the windows. 107 | width 4 108 | 109 | // Color of the ring on the active monitor: red, green, blue, alpha. 110 | active-color 127 200 255 255 111 | 112 | // Color of the ring on inactive monitors: red, green, blue, alpha. 113 | inactive-color 80 80 80 255 114 | } 115 | 116 | // You can also add a border. It's similar to the focus ring, but always visible. 117 | border { 118 | // The settings are the same as for the focus ring. 119 | // If you enable the border, you probably want to disable the focus ring. 120 | off 121 | 122 | width 4 123 | active-color 255 200 127 255 124 | inactive-color 80 80 80 255 125 | } 126 | 127 | // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. 128 | preset-column-widths { 129 | // Proportion sets the width as a fraction of the output width, taking gaps into account. 130 | // For example, you can perfectly fit four windows sized "proportion 0.25" on an output. 131 | // The default preset widths are 1/3, 1/2 and 2/3 of the output. 132 | proportion 0.125 133 | proportion 0.2 134 | proportion 0.25 135 | 136 | // Fixed sets the width in logical pixels exactly. 137 | fixed 1920 138 | } 139 | 140 | // You can change the default width of the new windows. 141 | default-column-width { proportion 0.125; } 142 | // default-column-width { proportion 1.0; } 143 | // If you leave the brackets empty, the windows themselves will decide their initial width. 144 | // default-column-width {} 145 | 146 | // Set gaps around windows in logical pixels. 147 | gaps 16 148 | // gaps 0 149 | 150 | // Struts shrink the area occupied by windows, similarly to layer-shell panels. 151 | // You can think of them as a kind of outer gaps. They are set in logical pixels. 152 | // Left and right struts will cause the next window to the side to always be visible. 153 | // Top and bottom struts will simply add outer gaps in addition to the area occupied by 154 | // layer-shell panels and regular gaps. 155 | struts { 156 | // left 64 157 | // right 64 158 | // top 64 159 | // bottom 64 160 | } 161 | 162 | // When to center a column when changing focus, options are: 163 | // - "never", default behavior, focusing an off-screen column will keep at the left 164 | // or right edge of the screen. 165 | // - "on-overflow", focusing a column will center it if it doesn't fit 166 | // together with the previously focused column. 167 | // - "always", the focused column will always be centered. 168 | center-focused-column "always" 169 | } 170 | 171 | // Add lines like this to spawn processes at startup. 172 | // Note that running niri as a session supports xdg-desktop-autostart, 173 | // which may be more convenient to use. 174 | // spawn-at-startup "alacritty" "-e" "fish" 175 | 176 | cursor { 177 | // Change the theme and size of the cursor as well as set the 178 | // `XCURSOR_THEME` and `XCURSOR_SIZE` env variables. 179 | // xcursor-theme "default" 180 | // xcursor-size 24 181 | } 182 | 183 | // Uncomment this line to ask the clients to omit their client-side decorations if possible. 184 | // If the client will specifically ask for CSD, the request will be honored. 185 | // Additionally, clients will be informed that they are tiled, removing some rounded corners. 186 | prefer-no-csd 187 | 188 | // You can change the path where screenshots are saved. 189 | // A ~ at the front will be expanded to the home directory. 190 | // The path is formatted with strftime(3) to give you the screenshot date and time. 191 | screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" 192 | 193 | // You can also set this to null to disable saving screenshots to disk. 194 | // screenshot-path null 195 | 196 | // Settings for the "Important Hotkeys" overlay. 197 | hotkey-overlay { 198 | // Uncomment this line if you don't want to see the hotkey help at niri startup. 199 | // skip-at-startup 200 | } 201 | 202 | binds { 203 | // Keys consist of modifiers separated by + signs, followed by an XKB key name 204 | // in the end. To find an XKB name for a particular key, you may use a program 205 | // like wev. 206 | // 207 | // "Mod" is a special modifier equal to Super when running on a TTY, and to Alt 208 | // when running as a winit window. 209 | 210 | // Mod-Shift-/, which is usually the same as Mod-?, 211 | // shows a list of important hotkeys. 212 | Mod+Shift+Slash { show-hotkey-overlay; } 213 | 214 | // Suggested binds for running programs: terminal, app launcher, screen locker. 215 | Mod+T { spawn "alacritty"; } 216 | Mod+D { spawn "fuzzel"; } 217 | Mod+Alt+L { spawn "swaylock"; } 218 | 219 | // You can also use a shell: 220 | // Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; } 221 | 222 | // Example volume keys mappings for PipeWire & WirePlumber. 223 | XF86AudioRaiseVolume { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; } 224 | XF86AudioLowerVolume { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; } 225 | 226 | Mod+Q { close-window; } 227 | 228 | Mod+Left { focus-column-left; } 229 | Mod+Down { focus-window-down; } 230 | Mod+Up { focus-window-up; } 231 | Mod+Right { focus-column-right; } 232 | Mod+H { focus-column-left; } 233 | Mod+J { focus-window-down; } 234 | Mod+K { focus-window-up; } 235 | Mod+L { focus-column-right; } 236 | 237 | Mod+Ctrl+Left { move-column-left; } 238 | Mod+Ctrl+Down { move-window-down; } 239 | Mod+Ctrl+Up { move-window-up; } 240 | Mod+Ctrl+Right { move-column-right; } 241 | Mod+Ctrl+H { move-column-left; } 242 | Mod+Ctrl+J { move-window-down; } 243 | Mod+Ctrl+K { move-window-up; } 244 | Mod+Ctrl+L { move-column-right; } 245 | 246 | // Alternative commands that move across workspaces when reaching 247 | // the first or last window in a column. 248 | // Mod+J { focus-window-or-workspace-down; } 249 | // Mod+K { focus-window-or-workspace-up; } 250 | // Mod+Ctrl+J { move-window-down-or-to-workspace-down; } 251 | // Mod+Ctrl+K { move-window-up-or-to-workspace-up; } 252 | 253 | Mod+Home { focus-column-first; } 254 | Mod+End { focus-column-last; } 255 | Mod+Ctrl+Home { move-column-to-first; } 256 | Mod+Ctrl+End { move-column-to-last; } 257 | 258 | Mod+Shift+Left { focus-monitor-left; } 259 | Mod+Shift+Down { focus-monitor-down; } 260 | Mod+Shift+Up { focus-monitor-up; } 261 | Mod+Shift+Right { focus-monitor-right; } 262 | Mod+Shift+H { focus-monitor-left; } 263 | Mod+Shift+J { focus-monitor-down; } 264 | Mod+Shift+K { focus-monitor-up; } 265 | Mod+Shift+L { focus-monitor-right; } 266 | 267 | Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } 268 | Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } 269 | Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } 270 | Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } 271 | Mod+Shift+Ctrl+H { move-column-to-monitor-left; } 272 | Mod+Shift+Ctrl+J { move-column-to-monitor-down; } 273 | Mod+Shift+Ctrl+K { move-column-to-monitor-up; } 274 | Mod+Shift+Ctrl+L { move-column-to-monitor-right; } 275 | 276 | // Alternatively, there are commands to move just a single window: 277 | // Mod+Shift+Ctrl+Left { move-window-to-monitor-left; } 278 | // ... 279 | 280 | // And you can also move a whole workspace to another monitor: 281 | // Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; } 282 | // ... 283 | 284 | Mod+Page_Down { focus-workspace-down; } 285 | Mod+Page_Up { focus-workspace-up; } 286 | Mod+U { focus-workspace-down; } 287 | Mod+I { focus-workspace-up; } 288 | Mod+Ctrl+Page_Down { move-column-to-workspace-down; } 289 | Mod+Ctrl+Page_Up { move-column-to-workspace-up; } 290 | Mod+Ctrl+U { move-column-to-workspace-down; } 291 | Mod+Ctrl+I { move-column-to-workspace-up; } 292 | 293 | // Alternatively, there are commands to move just a single window: 294 | // Mod+Ctrl+Page_Down { move-window-to-workspace-down; } 295 | // ... 296 | 297 | Mod+Shift+Page_Down { move-workspace-down; } 298 | Mod+Shift+Page_Up { move-workspace-up; } 299 | Mod+Shift+U { move-workspace-down; } 300 | Mod+Shift+I { move-workspace-up; } 301 | 302 | Mod+1 { focus-workspace 1; } 303 | Mod+2 { focus-workspace 2; } 304 | Mod+3 { focus-workspace 3; } 305 | Mod+4 { focus-workspace 4; } 306 | Mod+5 { focus-workspace 5; } 307 | Mod+6 { focus-workspace 6; } 308 | Mod+7 { focus-workspace 7; } 309 | Mod+8 { focus-workspace 8; } 310 | Mod+9 { focus-workspace 9; } 311 | Mod+Ctrl+1 { move-column-to-workspace 1; } 312 | Mod+Ctrl+2 { move-column-to-workspace 2; } 313 | Mod+Ctrl+3 { move-column-to-workspace 3; } 314 | Mod+Ctrl+4 { move-column-to-workspace 4; } 315 | Mod+Ctrl+5 { move-column-to-workspace 5; } 316 | Mod+Ctrl+6 { move-column-to-workspace 6; } 317 | Mod+Ctrl+7 { move-column-to-workspace 7; } 318 | Mod+Ctrl+8 { move-column-to-workspace 8; } 319 | Mod+Ctrl+9 { move-column-to-workspace 9; } 320 | 321 | // Alternatively, there are commands to move just a single window: 322 | // Mod+Ctrl+1 { move-window-to-workspace 1; } 323 | 324 | Mod+Comma { consume-window-into-column; } 325 | Mod+Period { expel-window-from-column; } 326 | 327 | // There are also commands that consume or expel a single window to the side. 328 | // Mod+BracketLeft { consume-or-expel-window-left; } 329 | // Mod+BracketRight { consume-or-expel-window-right; } 330 | 331 | Mod+R { switch-preset-column-width; } 332 | Mod+F { maximize-column; } 333 | Mod+Shift+F { fullscreen-window; } 334 | Mod+C { center-column; } 335 | 336 | // Finer width adjustments. 337 | // This command can also: 338 | // * set width in pixels: "1000" 339 | // * adjust width in pixels: "-5" or "+5" 340 | // * set width as a percentage of screen width: "25%" 341 | // * adjust width as a percentage of screen width: "-10%" or "+10%" 342 | // Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0, 343 | // set-column-width "100" will make the column occupy 200 physical screen pixels. 344 | Mod+Minus { set-column-width "-10%"; } 345 | Mod+Equal { set-column-width "+10%"; } 346 | 347 | // Finer height adjustments when in column with other windows. 348 | Mod+Shift+Minus { set-window-height "-10%"; } 349 | Mod+Shift+Equal { set-window-height "+10%"; } 350 | 351 | // Actions to switch layouts. 352 | // Note: if you uncomment these, make sure you do NOT have 353 | // a matching layout switch hotkey configured in xkb options above. 354 | // Having both at once on the same hotkey will break the switching, 355 | // since it will switch twice upon pressing the hotkey (once by xkb, once by niri). 356 | // Mod+Space { switch-layout "next"; } 357 | // Mod+Shift+Space { switch-layout "prev"; } 358 | 359 | Print { screenshot; } 360 | Ctrl+Print { screenshot-screen; } 361 | Alt+Print { screenshot-window; } 362 | 363 | Mod+Shift+E { quit; } 364 | Mod+Shift+P { power-off-monitors; } 365 | 366 | Mod+Shift+Ctrl+T { toggle-debug-tint; } 367 | } 368 | 369 | // Settings for debugging. Not meant for normal use. 370 | // These can change or stop working at any point with little notice. 371 | debug { 372 | // Make niri take over its DBus services even if it's not running as a session. 373 | // Useful for testing screen recording changes without having to relogin. 374 | // The main niri instance will *not* currently take back the services; so you will 375 | // need to relogin in the end. 376 | // dbus-interfaces-in-non-session-instances 377 | 378 | // Wait until every frame is done rendering before handing it over to DRM. 379 | // wait-for-frame-completion-before-queueing 380 | 381 | // Enable direct scanout into overlay planes. 382 | // May cause frame drops during some animations on some hardware. 383 | // enable-overlay-planes 384 | 385 | // Disable the use of the cursor plane. 386 | // The cursor will be rendered together with the rest of the frame. 387 | // disable-cursor-plane 388 | 389 | // Slow down animations by this factor. 390 | // animation-slowdown 3.0 391 | 392 | // Override the DRM device that niri will use for all rendering. 393 | // render-drm-device "/dev/dri/renderD129" 394 | } 395 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.21.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "aho-corasick" 22 | version = "1.1.2" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" 25 | dependencies = [ 26 | "memchr", 27 | ] 28 | 29 | [[package]] 30 | name = "aliasable" 31 | version = "0.1.3" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" 34 | 35 | [[package]] 36 | name = "android-tzdata" 37 | version = "0.1.1" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 40 | 41 | [[package]] 42 | name = "android_system_properties" 43 | version = "0.1.5" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 46 | dependencies = [ 47 | "libc", 48 | ] 49 | 50 | [[package]] 51 | name = "angle" 52 | version = "0.5.0" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "0bf965b6b142c8c68150e815ef527d17f0fe74e622b2c5287fd8626cb7c4a5fa" 55 | dependencies = [ 56 | "num-traits", 57 | "serde", 58 | "serde_derive", 59 | ] 60 | 61 | [[package]] 62 | name = "anstream" 63 | version = "0.6.11" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" 66 | dependencies = [ 67 | "anstyle", 68 | "anstyle-parse", 69 | "anstyle-query", 70 | "anstyle-wincon", 71 | "colorchoice", 72 | "utf8parse", 73 | ] 74 | 75 | [[package]] 76 | name = "anstyle" 77 | version = "1.0.6" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" 80 | 81 | [[package]] 82 | name = "anstyle-parse" 83 | version = "0.2.3" 84 | source = "registry+https://github.com/rust-lang/crates.io-index" 85 | checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" 86 | dependencies = [ 87 | "utf8parse", 88 | ] 89 | 90 | [[package]] 91 | name = "anstyle-query" 92 | version = "1.0.2" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" 95 | dependencies = [ 96 | "windows-sys 0.52.0", 97 | ] 98 | 99 | [[package]] 100 | name = "anstyle-wincon" 101 | version = "3.0.2" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" 104 | dependencies = [ 105 | "anstyle", 106 | "windows-sys 0.52.0", 107 | ] 108 | 109 | [[package]] 110 | name = "autocfg" 111 | version = "1.1.0" 112 | source = "registry+https://github.com/rust-lang/crates.io-index" 113 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 114 | 115 | [[package]] 116 | name = "backtrace" 117 | version = "0.3.69" 118 | source = "registry+https://github.com/rust-lang/crates.io-index" 119 | checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" 120 | dependencies = [ 121 | "addr2line", 122 | "cc", 123 | "cfg-if", 124 | "libc", 125 | "miniz_oxide", 126 | "object", 127 | "rustc-demangle", 128 | ] 129 | 130 | [[package]] 131 | name = "base64" 132 | version = "0.21.7" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 135 | 136 | [[package]] 137 | name = "bitflags" 138 | version = "1.3.2" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 141 | 142 | [[package]] 143 | name = "bitflags" 144 | version = "2.4.2" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" 147 | 148 | [[package]] 149 | name = "bumpalo" 150 | version = "3.14.0" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" 153 | 154 | [[package]] 155 | name = "byteorder" 156 | version = "1.5.0" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 159 | 160 | [[package]] 161 | name = "bytes" 162 | version = "1.5.0" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" 165 | 166 | [[package]] 167 | name = "cc" 168 | version = "1.0.83" 169 | source = "registry+https://github.com/rust-lang/crates.io-index" 170 | checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" 171 | dependencies = [ 172 | "libc", 173 | ] 174 | 175 | [[package]] 176 | name = "cfg-if" 177 | version = "1.0.0" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 180 | 181 | [[package]] 182 | name = "chrono" 183 | version = "0.4.33" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" 186 | dependencies = [ 187 | "android-tzdata", 188 | "iana-time-zone", 189 | "num-traits", 190 | "serde", 191 | "windows-targets 0.52.0", 192 | ] 193 | 194 | [[package]] 195 | name = "clap" 196 | version = "4.5.0" 197 | source = "registry+https://github.com/rust-lang/crates.io-index" 198 | checksum = "80c21025abd42669a92efc996ef13cfb2c5c627858421ea58d5c3b331a6c134f" 199 | dependencies = [ 200 | "clap_builder", 201 | "clap_derive", 202 | ] 203 | 204 | [[package]] 205 | name = "clap_builder" 206 | version = "4.5.0" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "458bf1f341769dfcf849846f65dffdf9146daa56bcd2a47cb4e1de9915567c99" 209 | dependencies = [ 210 | "anstream", 211 | "anstyle", 212 | "clap_lex", 213 | "strsim 0.11.0", 214 | ] 215 | 216 | [[package]] 217 | name = "clap_derive" 218 | version = "4.5.0" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" 221 | dependencies = [ 222 | "heck", 223 | "proc-macro2", 224 | "quote", 225 | "syn 2.0.48", 226 | ] 227 | 228 | [[package]] 229 | name = "clap_lex" 230 | version = "0.7.0" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" 233 | 234 | [[package]] 235 | name = "cluFlock" 236 | version = "1.2.7" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "a5c0fabbd86438044c17b633a514a4e5512f356ee114d7378665d24212462f88" 239 | dependencies = [ 240 | "libc", 241 | "winapi", 242 | ] 243 | 244 | [[package]] 245 | name = "color-eyre" 246 | version = "0.6.2" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" 249 | dependencies = [ 250 | "backtrace", 251 | "color-spantrace", 252 | "eyre", 253 | "indenter", 254 | "once_cell", 255 | "owo-colors", 256 | "tracing-error", 257 | ] 258 | 259 | [[package]] 260 | name = "color-rs" 261 | version = "0.8.0" 262 | source = "registry+https://github.com/rust-lang/crates.io-index" 263 | checksum = "3415c18b81f66b23614db9fcccbf19d2af434e04d9a6c7ac10e49930f39d89f8" 264 | dependencies = [ 265 | "angle", 266 | "half", 267 | "num-traits", 268 | "serde", 269 | "serde_derive", 270 | ] 271 | 272 | [[package]] 273 | name = "color-spantrace" 274 | version = "0.2.1" 275 | source = "registry+https://github.com/rust-lang/crates.io-index" 276 | checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" 277 | dependencies = [ 278 | "once_cell", 279 | "owo-colors", 280 | "tracing-core", 281 | "tracing-error", 282 | ] 283 | 284 | [[package]] 285 | name = "colorchoice" 286 | version = "1.0.0" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" 289 | 290 | [[package]] 291 | name = "colorgrad" 292 | version = "0.6.2" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "6a5f405d474b9d05e0a093d3120e77e9bf26461b57a84b40aa2a221ac5617fb6" 295 | dependencies = [ 296 | "csscolorparser", 297 | ] 298 | 299 | [[package]] 300 | name = "convert_case" 301 | version = "0.6.0" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" 304 | dependencies = [ 305 | "unicode-segmentation", 306 | ] 307 | 308 | [[package]] 309 | name = "core-foundation-sys" 310 | version = "0.8.6" 311 | source = "registry+https://github.com/rust-lang/crates.io-index" 312 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 313 | 314 | [[package]] 315 | name = "csscolorparser" 316 | version = "0.6.2" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "eb2a7d3066da2de787b7f032c736763eb7ae5d355f81a68bab2675a96008b0bf" 319 | dependencies = [ 320 | "phf", 321 | ] 322 | 323 | [[package]] 324 | name = "darling" 325 | version = "0.20.5" 326 | source = "registry+https://github.com/rust-lang/crates.io-index" 327 | checksum = "fc5d6b04b3fd0ba9926f945895de7d806260a2d7431ba82e7edaecb043c4c6b8" 328 | dependencies = [ 329 | "darling_core", 330 | "darling_macro", 331 | ] 332 | 333 | [[package]] 334 | name = "darling_core" 335 | version = "0.20.5" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "04e48a959bcd5c761246f5d090ebc2fbf7b9cd527a492b07a67510c108f1e7e3" 338 | dependencies = [ 339 | "fnv", 340 | "ident_case", 341 | "proc-macro2", 342 | "quote", 343 | "strsim 0.10.0", 344 | "syn 2.0.48", 345 | ] 346 | 347 | [[package]] 348 | name = "darling_macro" 349 | version = "0.20.5" 350 | source = "registry+https://github.com/rust-lang/crates.io-index" 351 | checksum = "1d1545d67a2149e1d93b7e5c7752dce5a7426eb5d1357ddcfd89336b94444f77" 352 | dependencies = [ 353 | "darling_core", 354 | "quote", 355 | "syn 2.0.48", 356 | ] 357 | 358 | [[package]] 359 | name = "deranged" 360 | version = "0.3.11" 361 | source = "registry+https://github.com/rust-lang/crates.io-index" 362 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 363 | dependencies = [ 364 | "powerfmt", 365 | "serde", 366 | ] 367 | 368 | [[package]] 369 | name = "dirs" 370 | version = "5.0.1" 371 | source = "registry+https://github.com/rust-lang/crates.io-index" 372 | checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" 373 | dependencies = [ 374 | "dirs-sys", 375 | ] 376 | 377 | [[package]] 378 | name = "dirs-sys" 379 | version = "0.4.1" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" 382 | dependencies = [ 383 | "libc", 384 | "option-ext", 385 | "redox_users", 386 | "windows-sys 0.48.0", 387 | ] 388 | 389 | [[package]] 390 | name = "either" 391 | version = "1.9.0" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" 394 | 395 | [[package]] 396 | name = "enum_dispatch" 397 | version = "0.3.12" 398 | source = "registry+https://github.com/rust-lang/crates.io-index" 399 | checksum = "8f33313078bb8d4d05a2733a94ac4c2d8a0df9a2b84424ebf4f33bfc224a890e" 400 | dependencies = [ 401 | "once_cell", 402 | "proc-macro2", 403 | "quote", 404 | "syn 2.0.48", 405 | ] 406 | 407 | [[package]] 408 | name = "equivalent" 409 | version = "1.0.1" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 412 | 413 | [[package]] 414 | name = "eyre" 415 | version = "0.6.12" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" 418 | dependencies = [ 419 | "indenter", 420 | "once_cell", 421 | ] 422 | 423 | [[package]] 424 | name = "flagset" 425 | version = "0.4.4" 426 | source = "registry+https://github.com/rust-lang/crates.io-index" 427 | checksum = "d52a7e408202050813e6f1d9addadcaafef3dca7530c7ddfb005d4081cce6779" 428 | dependencies = [ 429 | "serde", 430 | ] 431 | 432 | [[package]] 433 | name = "flatbuffers" 434 | version = "23.5.26" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "4dac53e22462d78c16d64a1cd22371b54cc3fe94aa15e7886a2fa6e5d1ab8640" 437 | dependencies = [ 438 | "bitflags 1.3.2", 439 | "rustc_version", 440 | ] 441 | 442 | [[package]] 443 | name = "flexbuffers" 444 | version = "2.0.0" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "15d14128f06405808ce75bfebe11e9b0f9da18719ede6d7bdb1702d6bfe0f7e8" 447 | dependencies = [ 448 | "bitflags 1.3.2", 449 | "byteorder", 450 | "num_enum", 451 | "serde", 452 | "serde_derive", 453 | ] 454 | 455 | [[package]] 456 | name = "fnv" 457 | version = "1.0.7" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 460 | 461 | [[package]] 462 | name = "getrandom" 463 | version = "0.2.12" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" 466 | dependencies = [ 467 | "cfg-if", 468 | "libc", 469 | "wasi", 470 | ] 471 | 472 | [[package]] 473 | name = "gimli" 474 | version = "0.28.1" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" 477 | 478 | [[package]] 479 | name = "glam" 480 | version = "0.24.2" 481 | source = "registry+https://github.com/rust-lang/crates.io-index" 482 | checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" 483 | dependencies = [ 484 | "mint", 485 | ] 486 | 487 | [[package]] 488 | name = "glam" 489 | version = "0.25.0" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" 492 | dependencies = [ 493 | "mint", 494 | ] 495 | 496 | [[package]] 497 | name = "global_counter" 498 | version = "0.2.2" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "2a77c0a6d353621e0ba32c0eb64a5ed3832d900135712779e38bd2ea31d6509f" 501 | dependencies = [ 502 | "once_cell", 503 | "parking_lot 0.11.2", 504 | ] 505 | 506 | [[package]] 507 | name = "half" 508 | version = "1.8.2" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" 511 | 512 | [[package]] 513 | name = "hashbrown" 514 | version = "0.12.3" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 517 | 518 | [[package]] 519 | name = "hashbrown" 520 | version = "0.14.3" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" 523 | 524 | [[package]] 525 | name = "heck" 526 | version = "0.4.1" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 529 | 530 | [[package]] 531 | name = "hermit-abi" 532 | version = "0.3.5" 533 | source = "registry+https://github.com/rust-lang/crates.io-index" 534 | checksum = "d0c62115964e08cb8039170eb33c1d0e2388a256930279edca206fff675f82c3" 535 | 536 | [[package]] 537 | name = "hex" 538 | version = "0.4.3" 539 | source = "registry+https://github.com/rust-lang/crates.io-index" 540 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 541 | 542 | [[package]] 543 | name = "iana-time-zone" 544 | version = "0.1.60" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" 547 | dependencies = [ 548 | "android_system_properties", 549 | "core-foundation-sys", 550 | "iana-time-zone-haiku", 551 | "js-sys", 552 | "wasm-bindgen", 553 | "windows-core", 554 | ] 555 | 556 | [[package]] 557 | name = "iana-time-zone-haiku" 558 | version = "0.1.2" 559 | source = "registry+https://github.com/rust-lang/crates.io-index" 560 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 561 | dependencies = [ 562 | "cc", 563 | ] 564 | 565 | [[package]] 566 | name = "ident_case" 567 | version = "1.0.1" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 570 | 571 | [[package]] 572 | name = "indenter" 573 | version = "0.3.3" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" 576 | 577 | [[package]] 578 | name = "indexmap" 579 | version = "1.9.3" 580 | source = "registry+https://github.com/rust-lang/crates.io-index" 581 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 582 | dependencies = [ 583 | "autocfg", 584 | "hashbrown 0.12.3", 585 | "serde", 586 | ] 587 | 588 | [[package]] 589 | name = "indexmap" 590 | version = "2.2.2" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" 593 | dependencies = [ 594 | "equivalent", 595 | "hashbrown 0.14.3", 596 | "serde", 597 | ] 598 | 599 | [[package]] 600 | name = "input-event-codes" 601 | version = "5.16.8" 602 | source = "registry+https://github.com/rust-lang/crates.io-index" 603 | checksum = "6b6b0f8557f596a2db592f172015c40d0c149e16a956c7848e733d663f2c6636" 604 | 605 | [[package]] 606 | name = "instant" 607 | version = "0.1.12" 608 | source = "registry+https://github.com/rust-lang/crates.io-index" 609 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 610 | dependencies = [ 611 | "cfg-if", 612 | ] 613 | 614 | [[package]] 615 | name = "itertools" 616 | version = "0.12.1" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 619 | dependencies = [ 620 | "either", 621 | ] 622 | 623 | [[package]] 624 | name = "itoa" 625 | version = "1.0.10" 626 | source = "registry+https://github.com/rust-lang/crates.io-index" 627 | checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" 628 | 629 | [[package]] 630 | name = "js-sys" 631 | version = "0.3.68" 632 | source = "registry+https://github.com/rust-lang/crates.io-index" 633 | checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" 634 | dependencies = [ 635 | "wasm-bindgen", 636 | ] 637 | 638 | [[package]] 639 | name = "kdl" 640 | version = "4.6.0" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "062c875482ccb676fd40c804a40e3824d4464c18c364547456d1c8e8e951ae47" 643 | dependencies = [ 644 | "miette", 645 | "nom", 646 | "thiserror", 647 | ] 648 | 649 | [[package]] 650 | name = "kiara" 651 | version = "0.1.0" 652 | dependencies = [ 653 | "clap", 654 | "color-eyre", 655 | "color-rs", 656 | "colorgrad", 657 | "glam 0.25.0", 658 | "input-event-codes", 659 | "lazy_static", 660 | "manifest-dir-macros", 661 | "map-range", 662 | "mint", 663 | "rustc-hash", 664 | "stardust-xr-fusion", 665 | "stardust-xr-molecules", 666 | "tokio", 667 | "tracing", 668 | "tracing-subscriber", 669 | ] 670 | 671 | [[package]] 672 | name = "lazy_static" 673 | version = "1.4.0" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 676 | 677 | [[package]] 678 | name = "lerp" 679 | version = "0.5.0" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "ecc56a024593ecbcacb6bb4f8f4ace719eb08ae9b701535640ef3efb0e706260" 682 | dependencies = [ 683 | "num-traits", 684 | ] 685 | 686 | [[package]] 687 | name = "libc" 688 | version = "0.2.153" 689 | source = "registry+https://github.com/rust-lang/crates.io-index" 690 | checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" 691 | 692 | [[package]] 693 | name = "libredox" 694 | version = "0.0.1" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" 697 | dependencies = [ 698 | "bitflags 2.4.2", 699 | "libc", 700 | "redox_syscall 0.4.1", 701 | ] 702 | 703 | [[package]] 704 | name = "lock_api" 705 | version = "0.4.11" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" 708 | dependencies = [ 709 | "autocfg", 710 | "scopeguard", 711 | ] 712 | 713 | [[package]] 714 | name = "log" 715 | version = "0.4.20" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" 718 | 719 | [[package]] 720 | name = "manifest-dir-macros" 721 | version = "0.1.18" 722 | source = "registry+https://github.com/rust-lang/crates.io-index" 723 | checksum = "9c6d40de1ccdbf8bde2eaa0750595478a368f7b3a3f89c426e3454f64e29f593" 724 | dependencies = [ 725 | "once_cell", 726 | "proc-macro2", 727 | "quote", 728 | "syn 2.0.48", 729 | ] 730 | 731 | [[package]] 732 | name = "map-range" 733 | version = "0.1.2" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "bffa558d7f51b549670be5ff6db164cd9be428c035cbf4e3f782db3da66845a5" 736 | dependencies = [ 737 | "num-traits", 738 | ] 739 | 740 | [[package]] 741 | name = "matchers" 742 | version = "0.1.0" 743 | source = "registry+https://github.com/rust-lang/crates.io-index" 744 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 745 | dependencies = [ 746 | "regex-automata 0.1.10", 747 | ] 748 | 749 | [[package]] 750 | name = "memchr" 751 | version = "2.7.1" 752 | source = "registry+https://github.com/rust-lang/crates.io-index" 753 | checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" 754 | 755 | [[package]] 756 | name = "memoffset" 757 | version = "0.7.1" 758 | source = "registry+https://github.com/rust-lang/crates.io-index" 759 | checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" 760 | dependencies = [ 761 | "autocfg", 762 | ] 763 | 764 | [[package]] 765 | name = "miette" 766 | version = "5.10.0" 767 | source = "registry+https://github.com/rust-lang/crates.io-index" 768 | checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" 769 | dependencies = [ 770 | "miette-derive", 771 | "once_cell", 772 | "thiserror", 773 | "unicode-width", 774 | ] 775 | 776 | [[package]] 777 | name = "miette-derive" 778 | version = "5.10.0" 779 | source = "registry+https://github.com/rust-lang/crates.io-index" 780 | checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" 781 | dependencies = [ 782 | "proc-macro2", 783 | "quote", 784 | "syn 2.0.48", 785 | ] 786 | 787 | [[package]] 788 | name = "minimal-lexical" 789 | version = "0.2.1" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 792 | 793 | [[package]] 794 | name = "miniz_oxide" 795 | version = "0.7.2" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" 798 | dependencies = [ 799 | "adler", 800 | ] 801 | 802 | [[package]] 803 | name = "mint" 804 | version = "0.5.9" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" 807 | dependencies = [ 808 | "serde", 809 | ] 810 | 811 | [[package]] 812 | name = "mio" 813 | version = "0.8.10" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" 816 | dependencies = [ 817 | "libc", 818 | "wasi", 819 | "windows-sys 0.48.0", 820 | ] 821 | 822 | [[package]] 823 | name = "nanoid" 824 | version = "0.4.0" 825 | source = "registry+https://github.com/rust-lang/crates.io-index" 826 | checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" 827 | dependencies = [ 828 | "rand", 829 | ] 830 | 831 | [[package]] 832 | name = "nix" 833 | version = "0.26.4" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" 836 | dependencies = [ 837 | "bitflags 1.3.2", 838 | "cfg-if", 839 | "libc", 840 | "memoffset", 841 | "pin-utils", 842 | ] 843 | 844 | [[package]] 845 | name = "nom" 846 | version = "7.1.3" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 849 | dependencies = [ 850 | "memchr", 851 | "minimal-lexical", 852 | ] 853 | 854 | [[package]] 855 | name = "nu-ansi-term" 856 | version = "0.46.0" 857 | source = "registry+https://github.com/rust-lang/crates.io-index" 858 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 859 | dependencies = [ 860 | "overload", 861 | "winapi", 862 | ] 863 | 864 | [[package]] 865 | name = "num-conv" 866 | version = "0.1.0" 867 | source = "registry+https://github.com/rust-lang/crates.io-index" 868 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 869 | 870 | [[package]] 871 | name = "num-traits" 872 | version = "0.2.17" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" 875 | dependencies = [ 876 | "autocfg", 877 | ] 878 | 879 | [[package]] 880 | name = "num_cpus" 881 | version = "1.16.0" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 884 | dependencies = [ 885 | "hermit-abi", 886 | "libc", 887 | ] 888 | 889 | [[package]] 890 | name = "num_enum" 891 | version = "0.5.11" 892 | source = "registry+https://github.com/rust-lang/crates.io-index" 893 | checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" 894 | dependencies = [ 895 | "num_enum_derive", 896 | ] 897 | 898 | [[package]] 899 | name = "num_enum_derive" 900 | version = "0.5.11" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" 903 | dependencies = [ 904 | "proc-macro-crate", 905 | "proc-macro2", 906 | "quote", 907 | "syn 1.0.109", 908 | ] 909 | 910 | [[package]] 911 | name = "object" 912 | version = "0.32.2" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" 915 | dependencies = [ 916 | "memchr", 917 | ] 918 | 919 | [[package]] 920 | name = "once_cell" 921 | version = "1.19.0" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 924 | 925 | [[package]] 926 | name = "option-ext" 927 | version = "0.2.0" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 930 | 931 | [[package]] 932 | name = "ouroboros" 933 | version = "0.18.3" 934 | source = "registry+https://github.com/rust-lang/crates.io-index" 935 | checksum = "97b7be5a8a3462b752f4be3ff2b2bf2f7f1d00834902e46be2a4d68b87b0573c" 936 | dependencies = [ 937 | "aliasable", 938 | "ouroboros_macro", 939 | "static_assertions", 940 | ] 941 | 942 | [[package]] 943 | name = "ouroboros_macro" 944 | version = "0.18.3" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "b645dcde5f119c2c454a92d0dfa271a2a3b205da92e4292a68ead4bdbfde1f33" 947 | dependencies = [ 948 | "heck", 949 | "itertools", 950 | "proc-macro2", 951 | "proc-macro2-diagnostics", 952 | "quote", 953 | "syn 2.0.48", 954 | ] 955 | 956 | [[package]] 957 | name = "overload" 958 | version = "0.1.1" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 961 | 962 | [[package]] 963 | name = "owo-colors" 964 | version = "3.5.0" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" 967 | 968 | [[package]] 969 | name = "parking_lot" 970 | version = "0.11.2" 971 | source = "registry+https://github.com/rust-lang/crates.io-index" 972 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 973 | dependencies = [ 974 | "instant", 975 | "lock_api", 976 | "parking_lot_core 0.8.6", 977 | ] 978 | 979 | [[package]] 980 | name = "parking_lot" 981 | version = "0.12.1" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 984 | dependencies = [ 985 | "lock_api", 986 | "parking_lot_core 0.9.9", 987 | ] 988 | 989 | [[package]] 990 | name = "parking_lot_core" 991 | version = "0.8.6" 992 | source = "registry+https://github.com/rust-lang/crates.io-index" 993 | checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" 994 | dependencies = [ 995 | "cfg-if", 996 | "instant", 997 | "libc", 998 | "redox_syscall 0.2.16", 999 | "smallvec", 1000 | "winapi", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "parking_lot_core" 1005 | version = "0.9.9" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" 1008 | dependencies = [ 1009 | "cfg-if", 1010 | "libc", 1011 | "redox_syscall 0.4.1", 1012 | "smallvec", 1013 | "windows-targets 0.48.5", 1014 | ] 1015 | 1016 | [[package]] 1017 | name = "phf" 1018 | version = "0.11.2" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" 1021 | dependencies = [ 1022 | "phf_macros", 1023 | "phf_shared", 1024 | ] 1025 | 1026 | [[package]] 1027 | name = "phf_generator" 1028 | version = "0.11.2" 1029 | source = "registry+https://github.com/rust-lang/crates.io-index" 1030 | checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" 1031 | dependencies = [ 1032 | "phf_shared", 1033 | "rand", 1034 | ] 1035 | 1036 | [[package]] 1037 | name = "phf_macros" 1038 | version = "0.11.2" 1039 | source = "registry+https://github.com/rust-lang/crates.io-index" 1040 | checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" 1041 | dependencies = [ 1042 | "phf_generator", 1043 | "phf_shared", 1044 | "proc-macro2", 1045 | "quote", 1046 | "syn 2.0.48", 1047 | ] 1048 | 1049 | [[package]] 1050 | name = "phf_shared" 1051 | version = "0.11.2" 1052 | source = "registry+https://github.com/rust-lang/crates.io-index" 1053 | checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" 1054 | dependencies = [ 1055 | "siphasher", 1056 | ] 1057 | 1058 | [[package]] 1059 | name = "pin-project-lite" 1060 | version = "0.2.13" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" 1063 | 1064 | [[package]] 1065 | name = "pin-utils" 1066 | version = "0.1.0" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1069 | 1070 | [[package]] 1071 | name = "powerfmt" 1072 | version = "0.2.0" 1073 | source = "registry+https://github.com/rust-lang/crates.io-index" 1074 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1075 | 1076 | [[package]] 1077 | name = "ppv-lite86" 1078 | version = "0.2.17" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1081 | 1082 | [[package]] 1083 | name = "proc-macro-crate" 1084 | version = "1.3.1" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" 1087 | dependencies = [ 1088 | "once_cell", 1089 | "toml_edit", 1090 | ] 1091 | 1092 | [[package]] 1093 | name = "proc-macro2" 1094 | version = "1.0.78" 1095 | source = "registry+https://github.com/rust-lang/crates.io-index" 1096 | checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" 1097 | dependencies = [ 1098 | "unicode-ident", 1099 | ] 1100 | 1101 | [[package]] 1102 | name = "proc-macro2-diagnostics" 1103 | version = "0.10.1" 1104 | source = "registry+https://github.com/rust-lang/crates.io-index" 1105 | checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" 1106 | dependencies = [ 1107 | "proc-macro2", 1108 | "quote", 1109 | "syn 2.0.48", 1110 | "version_check", 1111 | "yansi", 1112 | ] 1113 | 1114 | [[package]] 1115 | name = "quote" 1116 | version = "1.0.35" 1117 | source = "registry+https://github.com/rust-lang/crates.io-index" 1118 | checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" 1119 | dependencies = [ 1120 | "proc-macro2", 1121 | ] 1122 | 1123 | [[package]] 1124 | name = "rand" 1125 | version = "0.8.5" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1128 | dependencies = [ 1129 | "libc", 1130 | "rand_chacha", 1131 | "rand_core", 1132 | ] 1133 | 1134 | [[package]] 1135 | name = "rand_chacha" 1136 | version = "0.3.1" 1137 | source = "registry+https://github.com/rust-lang/crates.io-index" 1138 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1139 | dependencies = [ 1140 | "ppv-lite86", 1141 | "rand_core", 1142 | ] 1143 | 1144 | [[package]] 1145 | name = "rand_core" 1146 | version = "0.6.4" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1149 | dependencies = [ 1150 | "getrandom", 1151 | ] 1152 | 1153 | [[package]] 1154 | name = "redox_syscall" 1155 | version = "0.2.16" 1156 | source = "registry+https://github.com/rust-lang/crates.io-index" 1157 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 1158 | dependencies = [ 1159 | "bitflags 1.3.2", 1160 | ] 1161 | 1162 | [[package]] 1163 | name = "redox_syscall" 1164 | version = "0.4.1" 1165 | source = "registry+https://github.com/rust-lang/crates.io-index" 1166 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 1167 | dependencies = [ 1168 | "bitflags 1.3.2", 1169 | ] 1170 | 1171 | [[package]] 1172 | name = "redox_users" 1173 | version = "0.4.4" 1174 | source = "registry+https://github.com/rust-lang/crates.io-index" 1175 | checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" 1176 | dependencies = [ 1177 | "getrandom", 1178 | "libredox", 1179 | "thiserror", 1180 | ] 1181 | 1182 | [[package]] 1183 | name = "regex" 1184 | version = "1.10.3" 1185 | source = "registry+https://github.com/rust-lang/crates.io-index" 1186 | checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" 1187 | dependencies = [ 1188 | "aho-corasick", 1189 | "memchr", 1190 | "regex-automata 0.4.5", 1191 | "regex-syntax 0.8.2", 1192 | ] 1193 | 1194 | [[package]] 1195 | name = "regex-automata" 1196 | version = "0.1.10" 1197 | source = "registry+https://github.com/rust-lang/crates.io-index" 1198 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 1199 | dependencies = [ 1200 | "regex-syntax 0.6.29", 1201 | ] 1202 | 1203 | [[package]] 1204 | name = "regex-automata" 1205 | version = "0.4.5" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" 1208 | dependencies = [ 1209 | "aho-corasick", 1210 | "memchr", 1211 | "regex-syntax 0.8.2", 1212 | ] 1213 | 1214 | [[package]] 1215 | name = "regex-syntax" 1216 | version = "0.6.29" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 1219 | 1220 | [[package]] 1221 | name = "regex-syntax" 1222 | version = "0.8.2" 1223 | source = "registry+https://github.com/rust-lang/crates.io-index" 1224 | checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" 1225 | 1226 | [[package]] 1227 | name = "rustc-demangle" 1228 | version = "0.1.23" 1229 | source = "registry+https://github.com/rust-lang/crates.io-index" 1230 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" 1231 | 1232 | [[package]] 1233 | name = "rustc-hash" 1234 | version = "1.1.0" 1235 | source = "registry+https://github.com/rust-lang/crates.io-index" 1236 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1237 | 1238 | [[package]] 1239 | name = "rustc_version" 1240 | version = "0.4.0" 1241 | source = "registry+https://github.com/rust-lang/crates.io-index" 1242 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1243 | dependencies = [ 1244 | "semver", 1245 | ] 1246 | 1247 | [[package]] 1248 | name = "ryu" 1249 | version = "1.0.16" 1250 | source = "registry+https://github.com/rust-lang/crates.io-index" 1251 | checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" 1252 | 1253 | [[package]] 1254 | name = "scopeguard" 1255 | version = "1.2.0" 1256 | source = "registry+https://github.com/rust-lang/crates.io-index" 1257 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1258 | 1259 | [[package]] 1260 | name = "semver" 1261 | version = "1.0.21" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" 1264 | 1265 | [[package]] 1266 | name = "serde" 1267 | version = "1.0.196" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" 1270 | dependencies = [ 1271 | "serde_derive", 1272 | ] 1273 | 1274 | [[package]] 1275 | name = "serde_derive" 1276 | version = "1.0.196" 1277 | source = "registry+https://github.com/rust-lang/crates.io-index" 1278 | checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" 1279 | dependencies = [ 1280 | "proc-macro2", 1281 | "quote", 1282 | "syn 2.0.48", 1283 | ] 1284 | 1285 | [[package]] 1286 | name = "serde_json" 1287 | version = "1.0.113" 1288 | source = "registry+https://github.com/rust-lang/crates.io-index" 1289 | checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" 1290 | dependencies = [ 1291 | "itoa", 1292 | "ryu", 1293 | "serde", 1294 | ] 1295 | 1296 | [[package]] 1297 | name = "serde_repr" 1298 | version = "0.1.18" 1299 | source = "registry+https://github.com/rust-lang/crates.io-index" 1300 | checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" 1301 | dependencies = [ 1302 | "proc-macro2", 1303 | "quote", 1304 | "syn 2.0.48", 1305 | ] 1306 | 1307 | [[package]] 1308 | name = "serde_with" 1309 | version = "3.6.0" 1310 | source = "registry+https://github.com/rust-lang/crates.io-index" 1311 | checksum = "1b0ed1662c5a68664f45b76d18deb0e234aff37207086803165c961eb695e981" 1312 | dependencies = [ 1313 | "base64", 1314 | "chrono", 1315 | "hex", 1316 | "indexmap 1.9.3", 1317 | "indexmap 2.2.2", 1318 | "serde", 1319 | "serde_json", 1320 | "serde_with_macros", 1321 | "time", 1322 | ] 1323 | 1324 | [[package]] 1325 | name = "serde_with_macros" 1326 | version = "3.6.0" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | checksum = "568577ff0ef47b879f736cd66740e022f3672788cdf002a05a4e609ea5a6fb15" 1329 | dependencies = [ 1330 | "darling", 1331 | "proc-macro2", 1332 | "quote", 1333 | "syn 2.0.48", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "sharded-slab" 1338 | version = "0.1.7" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 1341 | dependencies = [ 1342 | "lazy_static", 1343 | ] 1344 | 1345 | [[package]] 1346 | name = "signal-hook-registry" 1347 | version = "1.4.1" 1348 | source = "registry+https://github.com/rust-lang/crates.io-index" 1349 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" 1350 | dependencies = [ 1351 | "libc", 1352 | ] 1353 | 1354 | [[package]] 1355 | name = "siphasher" 1356 | version = "0.3.11" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 1359 | 1360 | [[package]] 1361 | name = "smallvec" 1362 | version = "1.13.1" 1363 | source = "registry+https://github.com/rust-lang/crates.io-index" 1364 | checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" 1365 | 1366 | [[package]] 1367 | name = "socket2" 1368 | version = "0.5.5" 1369 | source = "registry+https://github.com/rust-lang/crates.io-index" 1370 | checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" 1371 | dependencies = [ 1372 | "libc", 1373 | "windows-sys 0.48.0", 1374 | ] 1375 | 1376 | [[package]] 1377 | name = "split-iter" 1378 | version = "0.1.0" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "2f2b15926089e5526bb2dd738a2eb0e59034356e06eb71e1cd912358c0e62c4d" 1381 | 1382 | [[package]] 1383 | name = "stardust-xr" 1384 | version = "0.14.1" 1385 | source = "git+https://github.com/StardustXR/core.git#ddb2953f6acac01ee9c4ccfae2d4b7eb959a07a2" 1386 | dependencies = [ 1387 | "cluFlock", 1388 | "color-rs", 1389 | "dirs", 1390 | "global_counter", 1391 | "mint", 1392 | "nix", 1393 | "parking_lot 0.12.1", 1394 | "rustc-hash", 1395 | "serde", 1396 | "stardust-xr-schemas", 1397 | "thiserror", 1398 | "tokio", 1399 | "tracing", 1400 | ] 1401 | 1402 | [[package]] 1403 | name = "stardust-xr-fusion" 1404 | version = "0.43.2" 1405 | source = "git+https://github.com/StardustXR/core.git#ddb2953f6acac01ee9c4ccfae2d4b7eb959a07a2" 1406 | dependencies = [ 1407 | "color-eyre", 1408 | "color-rs", 1409 | "enum_dispatch", 1410 | "flagset", 1411 | "mint", 1412 | "nanoid", 1413 | "parking_lot 0.12.1", 1414 | "rustc-hash", 1415 | "serde", 1416 | "serde_repr", 1417 | "serde_with", 1418 | "stardust-xr", 1419 | "stardust-xr-fusion-codegen", 1420 | "thiserror", 1421 | "tokio", 1422 | "tracing", 1423 | ] 1424 | 1425 | [[package]] 1426 | name = "stardust-xr-fusion-codegen" 1427 | version = "0.1.0" 1428 | source = "git+https://github.com/StardustXR/core.git#ddb2953f6acac01ee9c4ccfae2d4b7eb959a07a2" 1429 | dependencies = [ 1430 | "convert_case", 1431 | "mint", 1432 | "proc-macro2", 1433 | "quote", 1434 | "split-iter", 1435 | "stardust-xr-schemas", 1436 | ] 1437 | 1438 | [[package]] 1439 | name = "stardust-xr-molecules" 1440 | version = "0.29.0" 1441 | source = "git+https://github.com/StardustXR/molecules.git#8681d8f60bf49bcb73e5fb32c89c4f441b94533b" 1442 | dependencies = [ 1443 | "color-rs", 1444 | "glam 0.24.2", 1445 | "lazy_static", 1446 | "lerp", 1447 | "map-range", 1448 | "mint", 1449 | "rustc-hash", 1450 | "serde", 1451 | "stardust-xr-fusion", 1452 | "tokio", 1453 | "tracing", 1454 | ] 1455 | 1456 | [[package]] 1457 | name = "stardust-xr-schemas" 1458 | version = "1.5.3" 1459 | source = "git+https://github.com/StardustXR/core.git#ddb2953f6acac01ee9c4ccfae2d4b7eb959a07a2" 1460 | dependencies = [ 1461 | "flatbuffers", 1462 | "flexbuffers", 1463 | "glam 0.24.2", 1464 | "kdl", 1465 | "manifest-dir-macros", 1466 | "mint", 1467 | "ouroboros", 1468 | "serde", 1469 | "serde_repr", 1470 | "thiserror", 1471 | ] 1472 | 1473 | [[package]] 1474 | name = "static_assertions" 1475 | version = "1.1.0" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 1478 | 1479 | [[package]] 1480 | name = "strsim" 1481 | version = "0.10.0" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 1484 | 1485 | [[package]] 1486 | name = "strsim" 1487 | version = "0.11.0" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" 1490 | 1491 | [[package]] 1492 | name = "syn" 1493 | version = "1.0.109" 1494 | source = "registry+https://github.com/rust-lang/crates.io-index" 1495 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 1496 | dependencies = [ 1497 | "proc-macro2", 1498 | "quote", 1499 | "unicode-ident", 1500 | ] 1501 | 1502 | [[package]] 1503 | name = "syn" 1504 | version = "2.0.48" 1505 | source = "registry+https://github.com/rust-lang/crates.io-index" 1506 | checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" 1507 | dependencies = [ 1508 | "proc-macro2", 1509 | "quote", 1510 | "unicode-ident", 1511 | ] 1512 | 1513 | [[package]] 1514 | name = "thiserror" 1515 | version = "1.0.56" 1516 | source = "registry+https://github.com/rust-lang/crates.io-index" 1517 | checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" 1518 | dependencies = [ 1519 | "thiserror-impl", 1520 | ] 1521 | 1522 | [[package]] 1523 | name = "thiserror-impl" 1524 | version = "1.0.56" 1525 | source = "registry+https://github.com/rust-lang/crates.io-index" 1526 | checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" 1527 | dependencies = [ 1528 | "proc-macro2", 1529 | "quote", 1530 | "syn 2.0.48", 1531 | ] 1532 | 1533 | [[package]] 1534 | name = "thread_local" 1535 | version = "1.1.7" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" 1538 | dependencies = [ 1539 | "cfg-if", 1540 | "once_cell", 1541 | ] 1542 | 1543 | [[package]] 1544 | name = "time" 1545 | version = "0.3.34" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" 1548 | dependencies = [ 1549 | "deranged", 1550 | "itoa", 1551 | "num-conv", 1552 | "powerfmt", 1553 | "serde", 1554 | "time-core", 1555 | "time-macros", 1556 | ] 1557 | 1558 | [[package]] 1559 | name = "time-core" 1560 | version = "0.1.2" 1561 | source = "registry+https://github.com/rust-lang/crates.io-index" 1562 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 1563 | 1564 | [[package]] 1565 | name = "time-macros" 1566 | version = "0.2.17" 1567 | source = "registry+https://github.com/rust-lang/crates.io-index" 1568 | checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" 1569 | dependencies = [ 1570 | "num-conv", 1571 | "time-core", 1572 | ] 1573 | 1574 | [[package]] 1575 | name = "tokio" 1576 | version = "1.36.0" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" 1579 | dependencies = [ 1580 | "backtrace", 1581 | "bytes", 1582 | "libc", 1583 | "mio", 1584 | "num_cpus", 1585 | "parking_lot 0.12.1", 1586 | "pin-project-lite", 1587 | "signal-hook-registry", 1588 | "socket2", 1589 | "tokio-macros", 1590 | "windows-sys 0.48.0", 1591 | ] 1592 | 1593 | [[package]] 1594 | name = "tokio-macros" 1595 | version = "2.2.0" 1596 | source = "registry+https://github.com/rust-lang/crates.io-index" 1597 | checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" 1598 | dependencies = [ 1599 | "proc-macro2", 1600 | "quote", 1601 | "syn 2.0.48", 1602 | ] 1603 | 1604 | [[package]] 1605 | name = "toml_datetime" 1606 | version = "0.6.5" 1607 | source = "registry+https://github.com/rust-lang/crates.io-index" 1608 | checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" 1609 | 1610 | [[package]] 1611 | name = "toml_edit" 1612 | version = "0.19.15" 1613 | source = "registry+https://github.com/rust-lang/crates.io-index" 1614 | checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" 1615 | dependencies = [ 1616 | "indexmap 2.2.2", 1617 | "toml_datetime", 1618 | "winnow", 1619 | ] 1620 | 1621 | [[package]] 1622 | name = "tracing" 1623 | version = "0.1.40" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 1626 | dependencies = [ 1627 | "pin-project-lite", 1628 | "tracing-attributes", 1629 | "tracing-core", 1630 | ] 1631 | 1632 | [[package]] 1633 | name = "tracing-attributes" 1634 | version = "0.1.27" 1635 | source = "registry+https://github.com/rust-lang/crates.io-index" 1636 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" 1637 | dependencies = [ 1638 | "proc-macro2", 1639 | "quote", 1640 | "syn 2.0.48", 1641 | ] 1642 | 1643 | [[package]] 1644 | name = "tracing-core" 1645 | version = "0.1.32" 1646 | source = "registry+https://github.com/rust-lang/crates.io-index" 1647 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 1648 | dependencies = [ 1649 | "once_cell", 1650 | "valuable", 1651 | ] 1652 | 1653 | [[package]] 1654 | name = "tracing-error" 1655 | version = "0.2.0" 1656 | source = "registry+https://github.com/rust-lang/crates.io-index" 1657 | checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" 1658 | dependencies = [ 1659 | "tracing", 1660 | "tracing-subscriber", 1661 | ] 1662 | 1663 | [[package]] 1664 | name = "tracing-log" 1665 | version = "0.2.0" 1666 | source = "registry+https://github.com/rust-lang/crates.io-index" 1667 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 1668 | dependencies = [ 1669 | "log", 1670 | "once_cell", 1671 | "tracing-core", 1672 | ] 1673 | 1674 | [[package]] 1675 | name = "tracing-subscriber" 1676 | version = "0.3.18" 1677 | source = "registry+https://github.com/rust-lang/crates.io-index" 1678 | checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" 1679 | dependencies = [ 1680 | "matchers", 1681 | "nu-ansi-term", 1682 | "once_cell", 1683 | "regex", 1684 | "sharded-slab", 1685 | "smallvec", 1686 | "thread_local", 1687 | "tracing", 1688 | "tracing-core", 1689 | "tracing-log", 1690 | ] 1691 | 1692 | [[package]] 1693 | name = "unicode-ident" 1694 | version = "1.0.12" 1695 | source = "registry+https://github.com/rust-lang/crates.io-index" 1696 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1697 | 1698 | [[package]] 1699 | name = "unicode-segmentation" 1700 | version = "1.11.0" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" 1703 | 1704 | [[package]] 1705 | name = "unicode-width" 1706 | version = "0.1.11" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" 1709 | 1710 | [[package]] 1711 | name = "utf8parse" 1712 | version = "0.2.1" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 1715 | 1716 | [[package]] 1717 | name = "valuable" 1718 | version = "0.1.0" 1719 | source = "registry+https://github.com/rust-lang/crates.io-index" 1720 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 1721 | 1722 | [[package]] 1723 | name = "version_check" 1724 | version = "0.9.4" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1727 | 1728 | [[package]] 1729 | name = "wasi" 1730 | version = "0.11.0+wasi-snapshot-preview1" 1731 | source = "registry+https://github.com/rust-lang/crates.io-index" 1732 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1733 | 1734 | [[package]] 1735 | name = "wasm-bindgen" 1736 | version = "0.2.91" 1737 | source = "registry+https://github.com/rust-lang/crates.io-index" 1738 | checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" 1739 | dependencies = [ 1740 | "cfg-if", 1741 | "wasm-bindgen-macro", 1742 | ] 1743 | 1744 | [[package]] 1745 | name = "wasm-bindgen-backend" 1746 | version = "0.2.91" 1747 | source = "registry+https://github.com/rust-lang/crates.io-index" 1748 | checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" 1749 | dependencies = [ 1750 | "bumpalo", 1751 | "log", 1752 | "once_cell", 1753 | "proc-macro2", 1754 | "quote", 1755 | "syn 2.0.48", 1756 | "wasm-bindgen-shared", 1757 | ] 1758 | 1759 | [[package]] 1760 | name = "wasm-bindgen-macro" 1761 | version = "0.2.91" 1762 | source = "registry+https://github.com/rust-lang/crates.io-index" 1763 | checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" 1764 | dependencies = [ 1765 | "quote", 1766 | "wasm-bindgen-macro-support", 1767 | ] 1768 | 1769 | [[package]] 1770 | name = "wasm-bindgen-macro-support" 1771 | version = "0.2.91" 1772 | source = "registry+https://github.com/rust-lang/crates.io-index" 1773 | checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" 1774 | dependencies = [ 1775 | "proc-macro2", 1776 | "quote", 1777 | "syn 2.0.48", 1778 | "wasm-bindgen-backend", 1779 | "wasm-bindgen-shared", 1780 | ] 1781 | 1782 | [[package]] 1783 | name = "wasm-bindgen-shared" 1784 | version = "0.2.91" 1785 | source = "registry+https://github.com/rust-lang/crates.io-index" 1786 | checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" 1787 | 1788 | [[package]] 1789 | name = "winapi" 1790 | version = "0.3.9" 1791 | source = "registry+https://github.com/rust-lang/crates.io-index" 1792 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1793 | dependencies = [ 1794 | "winapi-i686-pc-windows-gnu", 1795 | "winapi-x86_64-pc-windows-gnu", 1796 | ] 1797 | 1798 | [[package]] 1799 | name = "winapi-i686-pc-windows-gnu" 1800 | version = "0.4.0" 1801 | source = "registry+https://github.com/rust-lang/crates.io-index" 1802 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1803 | 1804 | [[package]] 1805 | name = "winapi-x86_64-pc-windows-gnu" 1806 | version = "0.4.0" 1807 | source = "registry+https://github.com/rust-lang/crates.io-index" 1808 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1809 | 1810 | [[package]] 1811 | name = "windows-core" 1812 | version = "0.52.0" 1813 | source = "registry+https://github.com/rust-lang/crates.io-index" 1814 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 1815 | dependencies = [ 1816 | "windows-targets 0.52.0", 1817 | ] 1818 | 1819 | [[package]] 1820 | name = "windows-sys" 1821 | version = "0.48.0" 1822 | source = "registry+https://github.com/rust-lang/crates.io-index" 1823 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 1824 | dependencies = [ 1825 | "windows-targets 0.48.5", 1826 | ] 1827 | 1828 | [[package]] 1829 | name = "windows-sys" 1830 | version = "0.52.0" 1831 | source = "registry+https://github.com/rust-lang/crates.io-index" 1832 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1833 | dependencies = [ 1834 | "windows-targets 0.52.0", 1835 | ] 1836 | 1837 | [[package]] 1838 | name = "windows-targets" 1839 | version = "0.48.5" 1840 | source = "registry+https://github.com/rust-lang/crates.io-index" 1841 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 1842 | dependencies = [ 1843 | "windows_aarch64_gnullvm 0.48.5", 1844 | "windows_aarch64_msvc 0.48.5", 1845 | "windows_i686_gnu 0.48.5", 1846 | "windows_i686_msvc 0.48.5", 1847 | "windows_x86_64_gnu 0.48.5", 1848 | "windows_x86_64_gnullvm 0.48.5", 1849 | "windows_x86_64_msvc 0.48.5", 1850 | ] 1851 | 1852 | [[package]] 1853 | name = "windows-targets" 1854 | version = "0.52.0" 1855 | source = "registry+https://github.com/rust-lang/crates.io-index" 1856 | checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" 1857 | dependencies = [ 1858 | "windows_aarch64_gnullvm 0.52.0", 1859 | "windows_aarch64_msvc 0.52.0", 1860 | "windows_i686_gnu 0.52.0", 1861 | "windows_i686_msvc 0.52.0", 1862 | "windows_x86_64_gnu 0.52.0", 1863 | "windows_x86_64_gnullvm 0.52.0", 1864 | "windows_x86_64_msvc 0.52.0", 1865 | ] 1866 | 1867 | [[package]] 1868 | name = "windows_aarch64_gnullvm" 1869 | version = "0.48.5" 1870 | source = "registry+https://github.com/rust-lang/crates.io-index" 1871 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 1872 | 1873 | [[package]] 1874 | name = "windows_aarch64_gnullvm" 1875 | version = "0.52.0" 1876 | source = "registry+https://github.com/rust-lang/crates.io-index" 1877 | checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" 1878 | 1879 | [[package]] 1880 | name = "windows_aarch64_msvc" 1881 | version = "0.48.5" 1882 | source = "registry+https://github.com/rust-lang/crates.io-index" 1883 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 1884 | 1885 | [[package]] 1886 | name = "windows_aarch64_msvc" 1887 | version = "0.52.0" 1888 | source = "registry+https://github.com/rust-lang/crates.io-index" 1889 | checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" 1890 | 1891 | [[package]] 1892 | name = "windows_i686_gnu" 1893 | version = "0.48.5" 1894 | source = "registry+https://github.com/rust-lang/crates.io-index" 1895 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 1896 | 1897 | [[package]] 1898 | name = "windows_i686_gnu" 1899 | version = "0.52.0" 1900 | source = "registry+https://github.com/rust-lang/crates.io-index" 1901 | checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" 1902 | 1903 | [[package]] 1904 | name = "windows_i686_msvc" 1905 | version = "0.48.5" 1906 | source = "registry+https://github.com/rust-lang/crates.io-index" 1907 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 1908 | 1909 | [[package]] 1910 | name = "windows_i686_msvc" 1911 | version = "0.52.0" 1912 | source = "registry+https://github.com/rust-lang/crates.io-index" 1913 | checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" 1914 | 1915 | [[package]] 1916 | name = "windows_x86_64_gnu" 1917 | version = "0.48.5" 1918 | source = "registry+https://github.com/rust-lang/crates.io-index" 1919 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 1920 | 1921 | [[package]] 1922 | name = "windows_x86_64_gnu" 1923 | version = "0.52.0" 1924 | source = "registry+https://github.com/rust-lang/crates.io-index" 1925 | checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" 1926 | 1927 | [[package]] 1928 | name = "windows_x86_64_gnullvm" 1929 | version = "0.48.5" 1930 | source = "registry+https://github.com/rust-lang/crates.io-index" 1931 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 1932 | 1933 | [[package]] 1934 | name = "windows_x86_64_gnullvm" 1935 | version = "0.52.0" 1936 | source = "registry+https://github.com/rust-lang/crates.io-index" 1937 | checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" 1938 | 1939 | [[package]] 1940 | name = "windows_x86_64_msvc" 1941 | version = "0.48.5" 1942 | source = "registry+https://github.com/rust-lang/crates.io-index" 1943 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 1944 | 1945 | [[package]] 1946 | name = "windows_x86_64_msvc" 1947 | version = "0.52.0" 1948 | source = "registry+https://github.com/rust-lang/crates.io-index" 1949 | checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" 1950 | 1951 | [[package]] 1952 | name = "winnow" 1953 | version = "0.5.39" 1954 | source = "registry+https://github.com/rust-lang/crates.io-index" 1955 | checksum = "5389a154b01683d28c77f8f68f49dea75f0a4da32557a58f68ee51ebba472d29" 1956 | dependencies = [ 1957 | "memchr", 1958 | ] 1959 | 1960 | [[package]] 1961 | name = "yansi" 1962 | version = "1.0.0-rc.1" 1963 | source = "registry+https://github.com/rust-lang/crates.io-index" 1964 | checksum = "1367295b8f788d371ce2dbc842c7b709c73ee1364d30351dd300ec2203b12377" 1965 | --------------------------------------------------------------------------------