diff options
author | Jae-Heon Ji <32578710+jaeheonji@users.noreply.github.com> | 2023-04-27 00:26:07 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-27 00:26:07 +0900 |
commit | ff36798c9e52c9c73111afd03c9a69ecb1aee073 (patch) | |
tree | c03640f71a6dc08ef544e8dd34aa4ce5c49ff28f | |
parent | 0a8bbd7f2310b849dec324aae88c546f82ec7fe8 (diff) |
feat: provide default themes (#2307)
* refactor: move themes to zellij-assets
* feat: add theme to the binary
* chore: move new theme from example to assets
-rw-r--r-- | example/themes/README.md | 18 | ||||
-rw-r--r-- | example/themes/example.kdl | 34 | ||||
-rwxr-xr-x | zellij-utils/assets/plugins/compact-bar.wasm | bin | 794980 -> 490119 bytes | |||
-rwxr-xr-x | zellij-utils/assets/plugins/status-bar.wasm | bin | 921339 -> 621069 bytes | |||
-rwxr-xr-x | zellij-utils/assets/plugins/strider.wasm | bin | 809895 -> 503181 bytes | |||
-rwxr-xr-x | zellij-utils/assets/plugins/tab-bar.wasm | bin | 765705 -> 458835 bytes | |||
-rw-r--r-- | zellij-utils/assets/themes/catppuccin.kdl (renamed from example/themes/catppuccin.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/dracula.kdl (renamed from example/themes/dracula.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/everforest-dark.kdl (renamed from example/themes/everforest-dark.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/everforest-light.kdl (renamed from example/themes/everforest-light.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/gruvbox.kdl (renamed from example/themes/gruvbox.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/kanagawa.kdl (renamed from example/themes/kanagawa.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/menace.kdl (renamed from example/themes/menace.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/molokai-dark.kdl (renamed from example/themes/molokai-dark.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/nightfox.kdl (renamed from example/themes/nightfox.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/nord.kdl (renamed from example/themes/nord.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/one-half-dark.kdl (renamed from example/themes/one-half-dark.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/pencil.kdl (renamed from example/themes/pencil.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/solarized-dark.kdl (renamed from example/themes/solarized-dark.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/solarized-light.kdl (renamed from example/themes/solarized-light.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/tokyo-night-dark.kdl (renamed from example/themes/tokyo-night-dark.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/tokyo-night-light.kdl (renamed from example/themes/tokyo-night-light.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/tokyo-night-storm.kdl (renamed from example/themes/tokyo-night-storm.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/assets/themes/tokyo-night.kdl (renamed from example/themes/tokyo-night.kdl) | 0 | ||||
-rw-r--r-- | zellij-utils/src/consts.rs | 14 | ||||
-rw-r--r-- | zellij-utils/src/kdl/mod.rs | 14 | ||||
-rw-r--r-- | zellij-utils/src/setup.rs | 38 |
27 files changed, 82 insertions, 36 deletions
diff --git a/example/themes/README.md b/example/themes/README.md index 0102efe73..c1a6492c8 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 000000000..21f86b59d --- /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 Binary files differindex 0e3598d0b..d59cb92b8 100755 --- a/zellij-utils/assets/plugins/compact-bar.wasm +++ b/zellij-utils/assets/plugins/compact-bar.wasm diff --git a/zellij-utils/assets/plugins/status-bar.wasm b/zellij-utils/assets/plugins/status-bar.wasm Binary files differindex a1d0c8179..63907aed5 100755 --- a/zellij-utils/assets/plugins/status-bar.wasm +++ b/zellij-utils/assets/plugins/status-bar.wasm diff --git a/zellij-utils/assets/plugins/strider.wasm b/zellij-utils/assets/plugins/strider.wasm Binary files differindex 37da81bcc..39909aaa4 100755 --- a/zellij-utils/assets/plugins/strider.wasm +++ b/zellij-utils/assets/plugins/strider.wasm diff --git a/zellij-utils/assets/plugins/tab-bar.wasm b/zellij-utils/assets/plugins/tab-bar.wasm Binary files differindex 38f17dfc1..5f59fe4fe 100755 --- a/zellij-utils/assets/plugins/tab-bar.wasm +++ b/zellij-utils/assets/plugins/tab-bar.wasm diff --git a/example/themes/catppuccin.kdl b/zellij-utils/assets/themes/catppuccin.kdl index b8e70bbb6..b8e70bbb6 100644 --- a/example/themes/catppuccin.kdl +++ b/zellij-utils/assets/themes/catppuccin.kdl diff --git a/example/themes/dracula.kdl b/zellij-utils/assets/themes/dracula.kdl index 26f20504e..26f20504e 100644 --- a/example/themes/dracula.kdl +++ b/zellij-utils/assets/themes/dracula.kdl diff --git a/example/themes/everforest-dark.kdl b/zellij-utils/assets/themes/everforest-dark.kdl index 00f996fec..00f996fec 100644 --- a/example/themes/everforest-dark.kdl +++ b/zellij-utils/assets/themes/everforest-dark.kdl diff --git a/example/themes/everforest-light.kdl b/zellij-utils/assets/themes/everforest-light.kdl index 0bfb9d8f6..0bfb9d8f6 100644 --- a/example/themes/everforest-light.kdl +++ b/zellij-utils/assets/themes/everforest-light.kdl diff --git a/example/themes/gruvbox.kdl b/zellij-utils/assets/themes/gruvbox.kdl index 2c7ca0c8f..2c7ca0c8f 100644 --- a/example/themes/gruvbox.kdl +++ b/zellij-utils/assets/themes/gruvbox.kdl diff --git a/example/themes/kanagawa.kdl b/zellij-utils/assets/themes/kanagawa.kdl index f0b575555..f0b575555 100644 --- a/example/themes/kanagawa.kdl +++ b/zellij-utils/assets/themes/kanagawa.kdl diff --git a/example/themes/menace.kdl b/zellij-utils/assets/themes/menace.kdl index e0840df36..e0840df36 100644 --- a/example/themes/menace.kdl +++ b/zellij-utils/assets/themes/menace.kdl diff --git a/example/themes/molokai-dark.kdl b/zellij-utils/assets/themes/molokai-dark.kdl index 6fd96f9af..6fd96f9af 100644 --- a/example/themes/molokai-dark.kdl +++ b/zellij-utils/assets/themes/molokai-dark.kdl diff --git a/example/themes/nightfox.kdl b/zellij-utils/assets/themes/nightfox.kdl index e40075b47..e40075b47 100644 --- a/example/themes/nightfox.kdl +++ b/zellij-utils/assets/themes/nightfox.kdl diff --git a/example/themes/nord.kdl b/zellij-utils/assets/themes/nord.kdl index a56a9bfb3..a56a9bfb3 100644 --- a/example/themes/nord.kdl +++ b/zellij-utils/assets/themes/nord.kdl diff --git a/example/themes/one-half-dark.kdl b/zellij-utils/assets/themes/one-half-dark.kdl index ade1874bf..ade1874bf 100644 --- a/example/themes/one-half-dark.kdl +++ b/zellij-utils/assets/themes/one-half-dark.kdl diff --git a/example/themes/pencil.kdl b/zellij-utils/assets/themes/pencil.kdl index 166368349..166368349 100644 --- a/example/themes/pencil.kdl +++ b/zellij-utils/assets/themes/pencil.kdl diff --git a/example/themes/solarized-dark.kdl b/zellij-utils/assets/themes/solarized-dark.kdl index 20482f5c3..20482f5c3 100644 --- a/example/themes/solarized-dark.kdl +++ b/zellij-utils/assets/themes/solarized-dark.kdl diff --git a/example/themes/solarized-light.kdl b/zellij-utils/assets/themes/solarized-light.kdl index 93bac49b7..93bac49b7 100644 --- a/example/themes/solarized-light.kdl +++ b/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 index 6813a3360..6813a3360 100644 --- a/example/themes/tokyo-night-dark.kdl +++ b/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 index 3ac5fb767..3ac5fb767 100644 --- a/example/themes/tokyo-night-light.kdl +++ b/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 index e727ef72f..e727ef72f 100644 --- a/example/themes/tokyo-night-storm.kdl +++ b/zellij-utils/assets/themes/tokyo-night-storm.kdl diff --git a/example/themes/tokyo-night.kdl b/zellij-utils/assets/themes/tokyo-night.kdl index 4ea1a8104..4ea1a8104 100644 --- a/example/themes/tokyo-night.kdl +++ b/zellij-utils/assets/themes/tokyo-night.kdl diff --git a/zellij-utils/src/consts.rs b/zellij-utils/src/consts.rs index 5709db891..b851b1524 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 a892cf8c3..1d488f39d 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<Self, ConfigError> { + 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 0086c6a99..a40df7091 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 { |