settings.rs

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