Introduce initial implementation of the vmic CLI with PipeWire integration

- Added `Cargo.toml` to define dependencies and project metadata.
- Implemented core CLI functionality for managing virtual microphones (`create`, `edit`, `delete`, `list`, `route`, and `wipe` commands) using `clap`.
- Integrated `rusqlite` for persistent state storage and `pipewire` to manage PipeWire nodes.
- Ensured graceful handling of feedback loops and system defaults during virtual mic creation and deletion.
- Added error handling via `thiserror` for cleaner error definitions.
This commit is contained in:
2026-08-11 13:28:33 +02:00
parent 76c129a5dc
commit e19f398397
18 changed files with 2151 additions and 1 deletions

27
Cargo.toml Normal file
View File

@@ -0,0 +1,27 @@
[package]
name = "vmic"
version = "0.1.0"
edition = "2021"
description = "Create and manage PipeWire virtual microphones."
license = "AGPL-3+"
[[bin]]
name = "vmic"
path = "src/main.rs"
[dependencies]
clap = { version = "4", features = ["derive"] }
clap_complete = "4"
thiserror = "^2"
dirs = "6"
rusqlite = { version = "^0", features = ["bundled"] }
pipewire = "=0.8.0"
libc = "0.2"
# Keep panics from corrupting the sqlite connection mid-transaction; abort
# is fine for a CLI as there is no long-lived state to unwind for.
[profile.release]
panic = "abort"
lto = true