summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-12 10:11:29 -0600
committerAdam <[email protected]>2026-01-15 07:29:13 -0600
commit679270d9e0731c2b3e2c059d83907cb4086d90e2 (patch)
tree4e8d70a281b92f86a4b916ed45a5410ecbba0289 /packages/desktop
parent9f66a45970d1edf12ae9b3e7a22d77711b5e51c3 (diff)
downloadopencode-679270d9e0731c2b3e2c059d83907cb4086d90e2.tar.gz
opencode-679270d9e0731c2b3e2c059d83907cb4086d90e2.zip
feat(app): new layout
Diffstat (limited to 'packages/desktop')
-rw-r--r--packages/desktop/index.html2
-rw-r--r--packages/desktop/src-tauri/Cargo.toml1
-rw-r--r--packages/desktop/src-tauri/capabilities/default.json1
-rw-r--r--packages/desktop/src-tauri/src/lib.rs45
-rw-r--r--packages/desktop/src-tauri/tauri.conf.json14
-rw-r--r--packages/desktop/src-tauri/tauri.prod.conf.json21
6 files changed, 62 insertions, 22 deletions
diff --git a/packages/desktop/index.html b/packages/desktop/index.html
index 11e9f39a6..d7d439ab8 100644
--- a/packages/desktop/index.html
+++ b/packages/desktop/index.html
@@ -17,7 +17,7 @@
</head>
<body class="antialiased overscroll-none text-12-regular overflow-hidden">
<noscript>You need to enable JavaScript to run this app.</noscript>
- <div id="root" class="flex flex-col h-screen"></div>
+ <div id="root" class="flex flex-col h-dvh"></div>
<script src="/src/index.tsx" type="module"></script>
</body>
</html>
diff --git a/packages/desktop/src-tauri/Cargo.toml b/packages/desktop/src-tauri/Cargo.toml
index 05422b096..1a5864641 100644
--- a/packages/desktop/src-tauri/Cargo.toml
+++ b/packages/desktop/src-tauri/Cargo.toml
@@ -41,6 +41,7 @@ semver = "1.0.27"
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] }
uuid = { version = "1.19.0", features = ["v4"] }
+
[target.'cfg(target_os = "linux")'.dependencies]
gtk = "0.18.2"
webkit2gtk = "=2.0.1"
diff --git a/packages/desktop/src-tauri/capabilities/default.json b/packages/desktop/src-tauri/capabilities/default.json
index 1b305aebe..2653f8c28 100644
--- a/packages/desktop/src-tauri/capabilities/default.json
+++ b/packages/desktop/src-tauri/capabilities/default.json
@@ -7,6 +7,7 @@
"core:default",
"opener:default",
"core:window:allow-start-dragging",
+ "core:window:allow-set-theme",
"core:webview:allow-set-webview-zoom",
"core:window:allow-is-focused",
"core:window:allow-show",
diff --git a/packages/desktop/src-tauri/src/lib.rs b/packages/desktop/src-tauri/src/lib.rs
index 0d5b585e8..15033fd56 100644
--- a/packages/desktop/src-tauri/src/lib.rs
+++ b/packages/desktop/src-tauri/src/lib.rs
@@ -14,7 +14,7 @@ use std::{
sync::{Arc, Mutex},
time::{Duration, Instant},
};
-use tauri::{AppHandle, LogicalSize, Manager, RunEvent, State, WebviewUrl, WebviewWindow};
+use tauri::{AppHandle, LogicalSize, Manager, RunEvent, State, WebviewWindowBuilder};
use tauri_plugin_dialog::{DialogExt, MessageDialogButtons, MessageDialogResult};
use tauri_plugin_shell::process::{CommandChild, CommandEvent};
use tauri_plugin_store::StoreExt;
@@ -237,7 +237,14 @@ pub fn run() {
}
}))
.plugin(tauri_plugin_os::init())
- .plugin(tauri_plugin_window_state::Builder::new().build())
+ .plugin(
+ tauri_plugin_window_state::Builder::new()
+ .with_state_flags(
+ tauri_plugin_window_state::StateFlags::all()
+ - tauri_plugin_window_state::StateFlags::DECORATIONS,
+ )
+ .build(),
+ )
.plugin(tauri_plugin_store::Builder::new().build())
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_shell::init())
@@ -268,29 +275,25 @@ pub fn run() {
.map(|m| m.size().to_logical(m.scale_factor()))
.unwrap_or(LogicalSize::new(1920, 1080));
- #[allow(unused_mut)]
- let mut window_builder =
- WebviewWindow::builder(&app, "main", WebviewUrl::App("/".into()))
- .title("OpenCode")
- .inner_size(size.width as f64, size.height as f64)
- .decorations(true)
- .zoom_hotkeys_enabled(true)
- .disable_drag_drop_handler()
- .initialization_script(format!(
- r#"
+ let config = app
+ .config()
+ .app
+ .windows
+ .iter()
+ .find(|w| w.label == "main")
+ .expect("main window config missing");
+
+ let window_builder = WebviewWindowBuilder::from_config(&app, config)
+ .expect("Failed to create window builder from config")
+ .inner_size(size.width as f64, size.height as f64)
+ .initialization_script(format!(
+ r#"
window.__OPENCODE__ ??= {{}};
window.__OPENCODE__.updaterEnabled = {updater_enabled};
"#
- ));
-
- #[cfg(target_os = "macos")]
- {
- window_builder = window_builder
- .title_bar_style(tauri::TitleBarStyle::Overlay)
- .hidden_title(true);
- }
+ ));
- window_builder.build().expect("Failed to create window");
+ let _window = window_builder.build().expect("Failed to create window");
let (tx, rx) = oneshot::channel();
app.manage(ServerState::new(None, rx));
diff --git a/packages/desktop/src-tauri/tauri.conf.json b/packages/desktop/src-tauri/tauri.conf.json
index b6737d383..19da295c5 100644
--- a/packages/desktop/src-tauri/tauri.conf.json
+++ b/packages/desktop/src-tauri/tauri.conf.json
@@ -11,6 +11,20 @@
"frontendDist": "../dist"
},
"app": {
+ "windows": [
+ {
+ "label": "main",
+ "create": false,
+ "title": "OpenCode",
+ "url": "/",
+ "decorations": true,
+ "dragDropEnabled": false,
+ "zoomHotkeysEnabled": true,
+ "titleBarStyle": "Overlay",
+ "hiddenTitle": true,
+ "trafficLightPosition": { "x": 12.0, "y": 18.0 }
+ }
+ ],
"withGlobalTauri": true,
"security": {
"csp": null
diff --git a/packages/desktop/src-tauri/tauri.prod.conf.json b/packages/desktop/src-tauri/tauri.prod.conf.json
index 7ce4c7842..282db5b26 100644
--- a/packages/desktop/src-tauri/tauri.prod.conf.json
+++ b/packages/desktop/src-tauri/tauri.prod.conf.json
@@ -2,6 +2,27 @@
"$schema": "https://schema.tauri.app/config/2",
"productName": "OpenCode",
"identifier": "ai.opencode.desktop",
+ "app": {
+ "windows": [
+ {
+ "label": "main",
+ "create": false,
+ "title": "OpenCode",
+ "url": "/",
+ "decorations": true,
+ "dragDropEnabled": false,
+ "zoomHotkeysEnabled": true,
+ "titleBarStyle": "Overlay",
+ "hiddenTitle": true,
+ "trafficLightPosition": { "x": 12.0, "y": 18.0 }
+ }
+ ],
+ "withGlobalTauri": true,
+ "security": {
+ "csp": null
+ },
+ "macOSPrivateApi": true
+ },
"bundle": {
"createUpdaterArtifacts": true,
"icon": [