diff --git a/bun.lock b/bun.lock
index d00ce99..1af0ccd 100644
--- a/bun.lock
+++ b/bun.lock
@@ -14,7 +14,7 @@
},
"packages/desktop": {
"name": "@bluemacaw/desktop",
- "version": "0.0.0",
+ "version": "0.1.4",
"dependencies": {
"@ai-sdk/assemblyai": "^2.0.33",
"@ai-sdk/azure": "^3.0.64",
@@ -32,6 +32,7 @@
"@radix-ui/react-switch": "^1.2.6",
"@radix-ui/react-tabs": "^1.1.13",
"@tauri-apps/api": "^2.0.0",
+ "@tauri-apps/plugin-autostart": "^2.5.1",
"@tauri-apps/plugin-clipboard-manager": "^2.0.0",
"@tauri-apps/plugin-global-shortcut": "^2.0.0",
"@tauri-apps/plugin-sql": "^2.0.0",
@@ -70,7 +71,7 @@
},
"packages/landing": {
"name": "@bluemacaw/landing",
- "version": "0.0.0",
+ "version": "0.1.0",
"dependencies": {
"@fontsource-variable/nunito": "^5.2.7",
"@radix-ui/react-separator": "^1.1.8",
@@ -527,6 +528,8 @@
"@tauri-apps/cli-win32-x64-msvc": ["@tauri-apps/cli-win32-x64-msvc@2.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-b3ORhIAKgp9ZYY+zBt7b7r0kLU2kjvyGF0+MS2SBym3emsweGPybEqocJcmtMuxyBhkOKHP4CiuEJEDuAlTx6A=="],
+ "@tauri-apps/plugin-autostart": ["@tauri-apps/plugin-autostart@2.5.1", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-zS/xx7yzveCcotkA+8TqkI2lysmG2wvQXv2HGAVExITmnFfHAdj1arGsbbfs3o6EktRHf6l34pJxc3YGG2mg7w=="],
+
"@tauri-apps/plugin-clipboard-manager": ["@tauri-apps/plugin-clipboard-manager@2.3.2", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-CUlb5Hqi2oZbcZf4VUyUH53XWPPdtpw43EUpCza5HWZJwxEoDowFzNUDt1tRUXA8Uq+XPn17Ysfptip33sG4eQ=="],
"@tauri-apps/plugin-global-shortcut": ["@tauri-apps/plugin-global-shortcut@2.3.1", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-vr40W2N6G63dmBPaha1TsBQLLURXG538RQbH5vAm0G/ovVZyXJrmZR1HF1W+WneNloQvwn4dm8xzwpEXRW560g=="],
diff --git a/packages/desktop/package.json b/packages/desktop/package.json
index 6921454..206f21a 100644
--- a/packages/desktop/package.json
+++ b/packages/desktop/package.json
@@ -36,6 +36,7 @@
"@radix-ui/react-switch": "^1.2.6",
"@radix-ui/react-tabs": "^1.1.13",
"@tauri-apps/api": "^2.0.0",
+ "@tauri-apps/plugin-autostart": "^2.5.1",
"@tauri-apps/plugin-clipboard-manager": "^2.0.0",
"@tauri-apps/plugin-global-shortcut": "^2.0.0",
"@tauri-apps/plugin-sql": "^2.0.0",
diff --git a/packages/desktop/src-tauri/Cargo.lock b/packages/desktop/src-tauri/Cargo.lock
index 277de08..d86d324 100644
--- a/packages/desktop/src-tauri/Cargo.lock
+++ b/packages/desktop/src-tauri/Cargo.lock
@@ -220,6 +220,17 @@ version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+[[package]]
+name = "auto-launch"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f012b8cc0c850f34117ec8252a44418f2e34a2cf501de89e29b241ae5f79471"
+dependencies = [
+ "dirs 4.0.0",
+ "thiserror 1.0.69",
+ "winreg 0.10.1",
+]
+
[[package]]
name = "autocfg"
version = "1.5.0"
@@ -364,6 +375,7 @@ dependencies = [
"sqlx",
"tauri",
"tauri-build",
+ "tauri-plugin-autostart",
"tauri-plugin-clipboard-manager",
"tauri-plugin-global-shortcut",
"tauri-plugin-sql",
@@ -1067,13 +1079,33 @@ dependencies = [
"subtle",
]
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys 0.3.7",
+]
+
[[package]]
name = "dirs"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
dependencies = [
- "dirs-sys",
+ "dirs-sys 0.5.0",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users 0.4.6",
+ "winapi",
]
[[package]]
@@ -1084,7 +1116,7 @@ checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
dependencies = [
"libc",
"option-ext",
- "redox_users",
+ "redox_users 0.5.2",
"windows-sys 0.61.2",
]
@@ -1232,7 +1264,7 @@ dependencies = [
"rustc_version",
"toml 1.1.2+spec-1.1.0",
"vswhom",
- "winreg",
+ "winreg 0.55.0",
]
[[package]]
@@ -3836,6 +3868,17 @@ dependencies = [
"bitflags 2.11.1",
]
+[[package]]
+name = "redox_users"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
+dependencies = [
+ "getrandom 0.2.17",
+ "libredox",
+ "thiserror 1.0.69",
+]
+
[[package]]
name = "redox_users"
version = "0.5.2"
@@ -5021,7 +5064,7 @@ dependencies = [
"anyhow",
"bytes",
"cookie",
- "dirs",
+ "dirs 6.0.0",
"dunce",
"embed_plist",
"getrandom 0.3.4",
@@ -5071,7 +5114,7 @@ checksum = "3a318b234cc2dea65f575467bafcfb76286bce228ebc3778e337d61d03213007"
dependencies = [
"anyhow",
"cargo_toml",
- "dirs",
+ "dirs 6.0.0",
"glob",
"heck 0.5.0",
"json-patch",
@@ -5141,6 +5184,20 @@ dependencies = [
"walkdir",
]
+[[package]]
+name = "tauri-plugin-autostart"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "459383cebc193cdd03d1ba4acc40f2c408a7abce419d64bdcd2d745bc2886f70"
+dependencies = [
+ "auto-launch",
+ "serde",
+ "serde_json",
+ "tauri",
+ "tauri-plugin",
+ "thiserror 2.0.18",
+]
+
[[package]]
name = "tauri-plugin-clipboard-manager"
version = "2.3.2"
@@ -5215,7 +5272,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "806d9dac662c2e4594ff03c647a552f2c9bd544e7d0f683ec58f872f952ce4af"
dependencies = [
"base64 0.22.1",
- "dirs",
+ "dirs 6.0.0",
"flate2",
"futures-util",
"http",
@@ -5751,7 +5808,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15edbb0d80583e85ee8df283410038e17314df5cba30da2087a54a85216c0773"
dependencies = [
"crossbeam-channel",
- "dirs",
+ "dirs 6.0.0",
"libappindicator",
"muda",
"objc2 0.6.4",
@@ -6984,6 +7041,15 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
[[package]]
name = "winreg"
version = "0.55.0"
@@ -7145,7 +7211,7 @@ dependencies = [
"block2 0.6.2",
"cookie",
"crossbeam-channel",
- "dirs",
+ "dirs 6.0.0",
"dom_query",
"dpi",
"dunce",
diff --git a/packages/desktop/src-tauri/Cargo.toml b/packages/desktop/src-tauri/Cargo.toml
index 44912bf..9d69daf 100644
--- a/packages/desktop/src-tauri/Cargo.toml
+++ b/packages/desktop/src-tauri/Cargo.toml
@@ -14,6 +14,7 @@ tauri-build = { version = "2", features = [] }
[dependencies]
tauri = { version = "2", features = ["macos-private-api", "tray-icon"] }
+tauri-plugin-autostart = "2"
tauri-plugin-clipboard-manager = "2"
tauri-plugin-global-shortcut = "2"
tauri-plugin-sql = { version = "2", features = ["sqlite"] }
diff --git a/packages/desktop/src-tauri/capabilities/default.json b/packages/desktop/src-tauri/capabilities/default.json
index 37d68c5..2298d68 100644
--- a/packages/desktop/src-tauri/capabilities/default.json
+++ b/packages/desktop/src-tauri/capabilities/default.json
@@ -29,6 +29,10 @@
"store:allow-save",
"updater:default",
"updater:allow-check",
- "updater:allow-download-and-install"
+ "updater:allow-download-and-install",
+ "autostart:default",
+ "autostart:allow-enable",
+ "autostart:allow-disable",
+ "autostart:allow-is-enabled"
]
}
diff --git a/packages/desktop/src-tauri/src/commands.rs b/packages/desktop/src-tauri/src/commands.rs
index 0d100c2..f78dca9 100644
--- a/packages/desktop/src-tauri/src/commands.rs
+++ b/packages/desktop/src-tauri/src/commands.rs
@@ -8,7 +8,9 @@ use crate::paste::Paster;
use crate::platform::is_wayland_session;
use crate::secrets::Vault;
use crate::shortcut::HotkeyCombo;
-use crate::shortcut::parse::{format_combo, parse_combo};
+use crate::shortcut::parse::{
+ format_combo, parse_combo, parse_combo_permissive, parse_double_tap, parse_modifiers_only,
+};
use serde::{Deserialize, Serialize};
use std::sync::{Arc, Mutex};
use tauri::{AppHandle, Emitter, State};
@@ -16,7 +18,7 @@ use tauri_plugin_global_shortcut::{GlobalShortcutExt, Shortcut, ShortcutState};
use uuid::Uuid;
#[cfg(target_os = "macos")]
-use crate::shortcut::{ShortcutManager, macos_fn::MacOsFnTap};
+use crate::shortcut::{ShortcutManager, macos_chord::MacOsChordTap, macos_fn::MacOsFnTap};
/// Application state shared across Tauri commands.
///
@@ -48,6 +50,13 @@ pub struct AppState {
/// combo just unregisters the global shortcut, the dormant tap stays.
#[cfg(target_os = "macos")]
pub fn_tap: Mutex
)}
+
+
+
+
+ Launch automatically into the tray when you sign in. You can change this
+ later in Settings → Recording.
+
+
+
void handleAutostartToggle(v)}
+ />
+
+ {autostartError && (
+
+ {autostartError}
+
+ )}
Per-mic selection lives in Settings → Recording after onboarding.