Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T02:36:52.978Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

title_bar.rs

131 lines · 4.4 KB · rust
1use gpui::WindowButtonLayout;
2use schemars::{JsonSchema, Schema, SchemaGenerator, json_schema};
3use serde::{Deserialize, Serialize};
4use settings_macros::{MergeFrom, with_fallible_options};
5
6/// The layout of window control buttons as represented by user settings.
7///
8/// Custom layout strings use the GNOME `button-layout` format (e.g.
9/// `"close:minimize,maximize"`).
10#[derive(
11    Clone,
12    PartialEq,
13    Debug,
14    Serialize,
15    Deserialize,
16    JsonSchema,
17    MergeFrom,
18    Default,
19    strum::EnumDiscriminants,
20)]
21#[strum_discriminants(derive(strum::VariantArray, strum::VariantNames, strum::FromRepr))]
22#[schemars(schema_with = "window_button_layout_schema")]
23#[serde(from = "String", into = "String")]
24pub enum WindowButtonLayoutContent {
25    /// Follow the system/desktop configuration.
26    #[default]
27    PlatformDefault,
28    /// Use Omega's built-in standard layout, regardless of system config.
29    Standard,
30    /// A raw GNOME-style layout string.
31    Custom(String),
32}
33
34impl WindowButtonLayoutContent {
35    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
36    pub fn into_layout(self) -> Option<WindowButtonLayout> {
37        use util::ResultExt;
38
39        match self {
40            Self::PlatformDefault => None,
41            Self::Standard => Some(WindowButtonLayout::linux_default()),
42            Self::Custom(layout) => WindowButtonLayout::parse(&layout).log_err(),
43        }
44    }
45
46    #[cfg(not(any(target_os = "linux", target_os = "freebsd")))]
47    pub fn into_layout(self) -> Option<WindowButtonLayout> {
48        None
49    }
50}
51
52fn window_button_layout_schema(_: &mut SchemaGenerator) -> Schema {
53    json_schema!({
54        "anyOf": [
55            { "enum": ["platform_default", "standard"] },
56            { "type": "string" }
57        ]
58    })
59}
60
61impl From<WindowButtonLayoutContent> for String {
62    fn from(value: WindowButtonLayoutContent) -> Self {
63        match value {
64            WindowButtonLayoutContent::PlatformDefault => "platform_default".to_string(),
65            WindowButtonLayoutContent::Standard => "standard".to_string(),
66            WindowButtonLayoutContent::Custom(s) => s,
67        }
68    }
69}
70
71impl From<String> for WindowButtonLayoutContent {
72    fn from(layout_string: String) -> Self {
73        match layout_string.as_str() {
74            "platform_default" => Self::PlatformDefault,
75            "standard" => Self::Standard,
76            _ => Self::Custom(layout_string),
77        }
78    }
79}
80
81#[with_fallible_options]
82#[derive(Clone, PartialEq, Default, Serialize, Deserialize, JsonSchema, MergeFrom, Debug)]
83pub struct TitleBarSettingsContent {
84    /// Whether to show git status indicators on the branch icon in the title bar.
85    /// When enabled, the branch icon changes to reflect the current repository
86    /// status (e.g. modified, added, deleted, or conflict).
87    ///
88    /// Default: false
89    pub show_branch_status_icon: Option<bool>,
90    /// Whether to show onboarding banners in the title bar.
91    ///
92    /// Default: true
93    pub show_onboarding_banner: Option<bool>,
94    /// Whether to show user avatar in the title bar.
95    ///
96    /// Default: true
97    pub show_user_picture: Option<bool>,
98    /// Whether to show the branch name button in the titlebar.
99    ///
100    /// Default: true
101    pub show_branch_name: Option<bool>,
102    /// Whether to show the worktree name button in the titlebar.
103    ///
104    /// Default: true
105    pub show_worktree_name: Option<bool>,
106    /// Whether to show the project host and name in the titlebar.
107    ///
108    /// Default: true
109    pub show_project_items: Option<bool>,
110    /// Whether to show the sign in button in the title bar.
111    ///
112    /// Default: true
113    pub show_sign_in: Option<bool>,
114    /// Whether to show the user menu button in the title bar.
115    ///
116    /// Default: true
117    pub show_user_menu: Option<bool>,
118    /// Whether to show the menus in the title bar.
119    ///
120    /// Default: false
121    pub show_menus: Option<bool>,
122    /// The layout of window control buttons in the title bar (Linux only).
123    ///
124    /// This can be set to "platform_default" to follow the system configuration, or
125    /// "standard" to use Omega's built-in layout. For custom layouts, use a
126    /// GNOME-style layout string like "close:minimize,maximize".
127    ///
128    /// Default: "platform_default"
129    pub button_layout: Option<WindowButtonLayoutContent>,
130}
131
Served at tenant.openagents/omega Member data and write actions are omitted.