settings.rs

 1mod editable_setting_control;
 2mod json_schema;
 3mod keymap_file;
 4mod settings_file;
 5mod settings_store;
 6
 7use gpui::AppContext;
 8use rust_embed::RustEmbed;
 9use std::{borrow::Cow, str};
10use util::asset_str;
11
12pub use editable_setting_control::*;
13pub use json_schema::*;
14pub use keymap_file::KeymapFile;
15pub use settings_file::*;
16pub use settings_store::{Settings, SettingsLocation, SettingsSources, SettingsStore};
17
18#[derive(RustEmbed)]
19#[folder = "../../assets"]
20#[include = "settings/*"]
21#[include = "keymaps/*"]
22#[exclude = "*.DS_Store"]
23pub struct SettingsAssets;
24
25pub fn init(cx: &mut AppContext) {
26    let mut settings = SettingsStore::new(cx);
27    settings
28        .set_default_settings(&default_settings(), cx)
29        .unwrap();
30    cx.set_global(settings);
31}
32
33pub fn default_settings() -> Cow<'static, str> {
34    asset_str::<SettingsAssets>("settings/default.json")
35}
36
37#[cfg(target_os = "macos")]
38pub const DEFAULT_KEYMAP_PATH: &str = "keymaps/default-macos.json";
39
40#[cfg(not(target_os = "macos"))]
41pub const DEFAULT_KEYMAP_PATH: &str = "keymaps/default-linux.json";
42
43pub fn default_keymap() -> Cow<'static, str> {
44    asset_str::<SettingsAssets>(DEFAULT_KEYMAP_PATH)
45}
46
47pub fn vim_keymap() -> Cow<'static, str> {
48    asset_str::<SettingsAssets>("keymaps/vim.json")
49}
50
51pub fn initial_user_settings_content() -> Cow<'static, str> {
52    asset_str::<SettingsAssets>("settings/initial_user_settings.json")
53}
54
55pub fn initial_local_settings_content() -> Cow<'static, str> {
56    asset_str::<SettingsAssets>("settings/initial_local_settings.json")
57}
58
59pub fn initial_keymap_content() -> Cow<'static, str> {
60    asset_str::<SettingsAssets>("keymaps/initial.json")
61}
62
63pub fn initial_tasks_content() -> Cow<'static, str> {
64    asset_str::<SettingsAssets>("settings/initial_tasks.json")
65}