1mod editable_setting_control;
2mod keymap_file;
3mod settings_file;
4mod settings_store;
5
6use gpui::AppContext;
7use rust_embed::RustEmbed;
8use std::{borrow::Cow, str};
9use util::asset_str;
10
11pub use editable_setting_control::*;
12pub use keymap_file::KeymapFile;
13pub use settings_file::*;
14pub use settings_store::{
15 Settings, SettingsJsonSchemaParams, SettingsLocation, SettingsSources, SettingsStore,
16};
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}