diff --git a/example/themes/README.md b/example/themes/README.md index 0102efe73f..c1a6492c84 100644 --- a/example/themes/README.md +++ b/example/themes/README.md @@ -1,19 +1,5 @@ # Themes -Themes can contain different flavors in one file, or can be created as individual files. +It contains examples showing how to write a theme. -Example: - -``` -gruvbox.kdl -├─ gruvbox-light -└─ gruvbox-dark - -or - -gruvbox-light.kdl -└─ gruvbox-light - -gruvbox-dark.kdl -└─ gruvbox-dark -``` +If you would like to add a theme to zellij, please refer [zellij-utils/assets/themes](../../zellij-utils/assets/themes). diff --git a/example/themes/example.kdl b/example/themes/example.kdl new file mode 100644 index 0000000000..21f86b59df --- /dev/null +++ b/example/themes/example.kdl @@ -0,0 +1,34 @@ +// This file shows how to write a theme file +// using `gruvbox` theme. + +themes { + // example of how to set a theme in RGB format + gruvbox-light { + fg 60 56 54 + bg 251 82 75 + black 40 40 40 + red 205 75 69 + green 152 151 26 + yellow 215 153 33 + blue 69 133 136 + magenta 177 98 134 + cyan 104 157 106 + white 213 196 161 + orange 214 93 14 + } + + // example of how to set a theme in HEX format + gruvbox-dark { + fg "#D5C4A1" + bg "#282828" + black "#3C3836" + red "#CC241D" + green "#98971A" + yellow "#D79921" + blue "#3C8588" + magenta "#B16286" + cyan "#689D6A" + white "#FBF1C7" + orange "#D65D0E" + } +} \ No newline at end of file diff --git a/zellij-utils/assets/plugins/compact-bar.wasm b/zellij-utils/assets/plugins/compact-bar.wasm index 0e3598d0b2..d59cb92b8f 100755 Binary files a/zellij-utils/assets/plugins/compact-bar.wasm and b/zellij-utils/assets/plugins/compact-bar.wasm differ diff --git a/zellij-utils/assets/plugins/status-bar.wasm b/zellij-utils/assets/plugins/status-bar.wasm index a1d0c81797..63907aed5f 100755 Binary files a/zellij-utils/assets/plugins/status-bar.wasm and b/zellij-utils/assets/plugins/status-bar.wasm differ diff --git a/zellij-utils/assets/plugins/strider.wasm b/zellij-utils/assets/plugins/strider.wasm index 37da81bcc5..39909aaa4f 100755 Binary files a/zellij-utils/assets/plugins/strider.wasm and b/zellij-utils/assets/plugins/strider.wasm differ diff --git a/zellij-utils/assets/plugins/tab-bar.wasm b/zellij-utils/assets/plugins/tab-bar.wasm index 38f17dfc18..5f59fe4fef 100755 Binary files a/zellij-utils/assets/plugins/tab-bar.wasm and b/zellij-utils/assets/plugins/tab-bar.wasm differ diff --git a/example/themes/catppuccin.kdl b/zellij-utils/assets/themes/catppuccin.kdl similarity index 100% rename from example/themes/catppuccin.kdl rename to zellij-utils/assets/themes/catppuccin.kdl diff --git a/example/themes/dracula.kdl b/zellij-utils/assets/themes/dracula.kdl similarity index 100% rename from example/themes/dracula.kdl rename to zellij-utils/assets/themes/dracula.kdl diff --git a/example/themes/everforest-dark.kdl b/zellij-utils/assets/themes/everforest-dark.kdl similarity index 100% rename from example/themes/everforest-dark.kdl rename to zellij-utils/assets/themes/everforest-dark.kdl diff --git a/example/themes/everforest-light.kdl b/zellij-utils/assets/themes/everforest-light.kdl similarity index 100% rename from example/themes/everforest-light.kdl rename to zellij-utils/assets/themes/everforest-light.kdl diff --git a/example/themes/gruvbox.kdl b/zellij-utils/assets/themes/gruvbox.kdl similarity index 100% rename from example/themes/gruvbox.kdl rename to zellij-utils/assets/themes/gruvbox.kdl diff --git a/example/themes/kanagawa.kdl b/zellij-utils/assets/themes/kanagawa.kdl similarity index 100% rename from example/themes/kanagawa.kdl rename to zellij-utils/assets/themes/kanagawa.kdl diff --git a/example/themes/menace.kdl b/zellij-utils/assets/themes/menace.kdl similarity index 100% rename from example/themes/menace.kdl rename to zellij-utils/assets/themes/menace.kdl diff --git a/example/themes/molokai-dark.kdl b/zellij-utils/assets/themes/molokai-dark.kdl similarity index 100% rename from example/themes/molokai-dark.kdl rename to zellij-utils/assets/themes/molokai-dark.kdl diff --git a/example/themes/nightfox.kdl b/zellij-utils/assets/themes/nightfox.kdl similarity index 100% rename from example/themes/nightfox.kdl rename to zellij-utils/assets/themes/nightfox.kdl diff --git a/example/themes/nord.kdl b/zellij-utils/assets/themes/nord.kdl similarity index 100% rename from example/themes/nord.kdl rename to zellij-utils/assets/themes/nord.kdl diff --git a/example/themes/one-half-dark.kdl b/zellij-utils/assets/themes/one-half-dark.kdl similarity index 100% rename from example/themes/one-half-dark.kdl rename to zellij-utils/assets/themes/one-half-dark.kdl diff --git a/example/themes/pencil.kdl b/zellij-utils/assets/themes/pencil.kdl similarity index 100% rename from example/themes/pencil.kdl rename to zellij-utils/assets/themes/pencil.kdl diff --git a/example/themes/solarized-dark.kdl b/zellij-utils/assets/themes/solarized-dark.kdl similarity index 100% rename from example/themes/solarized-dark.kdl rename to zellij-utils/assets/themes/solarized-dark.kdl diff --git a/example/themes/solarized-light.kdl b/zellij-utils/assets/themes/solarized-light.kdl similarity index 100% rename from example/themes/solarized-light.kdl rename to zellij-utils/assets/themes/solarized-light.kdl diff --git a/example/themes/tokyo-night-dark.kdl b/zellij-utils/assets/themes/tokyo-night-dark.kdl similarity index 100% rename from example/themes/tokyo-night-dark.kdl rename to zellij-utils/assets/themes/tokyo-night-dark.kdl diff --git a/example/themes/tokyo-night-light.kdl b/zellij-utils/assets/themes/tokyo-night-light.kdl similarity index 100% rename from example/themes/tokyo-night-light.kdl rename to zellij-utils/assets/themes/tokyo-night-light.kdl diff --git a/example/themes/tokyo-night-storm.kdl b/zellij-utils/assets/themes/tokyo-night-storm.kdl similarity index 100% rename from example/themes/tokyo-night-storm.kdl rename to zellij-utils/assets/themes/tokyo-night-storm.kdl diff --git a/example/themes/tokyo-night.kdl b/zellij-utils/assets/themes/tokyo-night.kdl similarity index 100% rename from example/themes/tokyo-night.kdl rename to zellij-utils/assets/themes/tokyo-night.kdl diff --git a/zellij-utils/src/consts.rs b/zellij-utils/src/consts.rs index 5709db891a..b851b1524a 100644 --- a/zellij-utils/src/consts.rs +++ b/zellij-utils/src/consts.rs @@ -1,5 +1,6 @@ //! Zellij program-wide constants. +use crate::input::theme::Themes; use directories_next::ProjectDirs; use lazy_static::lazy_static; use once_cell::sync::OnceCell; @@ -28,6 +29,19 @@ lazy_static! { pub static ref ZELLIJ_PROJ_DIR: ProjectDirs = ProjectDirs::from("org", "Zellij Contributors", "Zellij").unwrap(); pub static ref ZELLIJ_CACHE_DIR: PathBuf = ZELLIJ_PROJ_DIR.cache_dir().to_path_buf(); + pub static ref ZELLIJ_DEFAULT_THEMES: Themes = { + let mut default_themes = Themes::default(); + + let path = PathBuf::from(concat!(env!("CARGO_MANIFEST_DIR"), "/assets/themes")); + match Themes::from_dir(path) { + Ok(themes) => { + default_themes = default_themes.merge(themes); + }, + Err(_) => {}, + } + + default_themes + }; } pub const FEATURES: &[&str] = &[ diff --git a/zellij-utils/src/kdl/mod.rs b/zellij-utils/src/kdl/mod.rs index a892cf8c32..1d488f39d7 100644 --- a/zellij-utils/src/kdl/mod.rs +++ b/zellij-utils/src/kdl/mod.rs @@ -1758,4 +1758,18 @@ impl Themes { let all_themes_in_file = Themes::from_kdl(kdl_themes)?; Ok(all_themes_in_file) } + + pub fn from_dir(path_to_theme_dir: PathBuf) -> Result { + let mut themes = Themes::default(); + for entry in std::fs::read_dir(path_to_theme_dir)? { + let entry = entry?; + let path = entry.path(); + if let Some(extension) = path.extension() { + if extension == "kdl" { + themes = themes.merge(Themes::from_path(path)?); + } + } + } + Ok(themes) + } } diff --git a/zellij-utils/src/setup.rs b/zellij-utils/src/setup.rs index 0086c6a992..a40df7091a 100644 --- a/zellij-utils/src/setup.rs +++ b/zellij-utils/src/setup.rs @@ -5,7 +5,7 @@ use crate::{ cli::{CliArgs, Command}, consts::{ FEATURES, SYSTEM_DEFAULT_CONFIG_DIR, SYSTEM_DEFAULT_DATA_DIR_PREFIX, VERSION, - ZELLIJ_PROJ_DIR, + ZELLIJ_DEFAULT_THEMES, ZELLIJ_PROJ_DIR, }, errors::prelude::*, input::{ @@ -63,6 +63,16 @@ pub fn get_default_data_dir() -> PathBuf { .unwrap_or_else(xdg_data_dir) } +#[cfg(not(test))] +fn get_default_themes() -> Themes { + ZELLIJ_DEFAULT_THEMES.to_owned() +} + +#[cfg(test)] +fn get_default_themes() -> Themes { + Themes::default() +} + pub fn xdg_config_dir() -> PathBuf { ZELLIJ_PROJ_DIR.config_dir().to_owned() } @@ -310,25 +320,13 @@ impl Setup { None => config.options.clone(), }; - if let Some(theme_dir) = config_options - .theme_dir - .clone() - .or_else(|| get_theme_dir(cli_args.config_dir.clone().or_else(find_default_config_dir))) - { - if theme_dir.is_dir() { - for entry in (theme_dir.read_dir()?).flatten() { - if let Some(extension) = entry.path().extension() { - if extension == "kdl" { - match Themes::from_path(entry.path()) { - Ok(themes) => config.themes = config.themes.merge(themes), - Err(e) => { - log::error!("error loading theme file: {:?}", e); - }, - } - } - } - } - } + config.themes = config.themes.merge(get_default_themes()); + + let user_theme_dir = config_options.theme_dir.clone().or_else(|| { + get_theme_dir(cli_args.config_dir.clone().or_else(find_default_config_dir)) + }); + if let Some(user_theme_dir) = user_theme_dir { + config.themes = config.themes.merge(Themes::from_dir(user_theme_dir)?); } if let Some(Command::Setup(ref setup)) = &cli_args.command {