summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJae-Heon Ji <32578710+jaeheonji@users.noreply.github.com>2023-04-27 00:26:07 +0900
committerGitHub <noreply@github.com>2023-04-27 00:26:07 +0900
commitff36798c9e52c9c73111afd03c9a69ecb1aee073 (patch)
treec03640f71a6dc08ef544e8dd34aa4ce5c49ff28f
parent0a8bbd7f2310b849dec324aae88c546f82ec7fe8 (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.md18
-rw-r--r--example/themes/example.kdl34
-rwxr-xr-xzellij-utils/assets/plugins/compact-bar.wasmbin794980 -> 490119 bytes
-rwxr-xr-xzellij-utils/assets/plugins/status-bar.wasmbin921339 -> 621069 bytes
-rwxr-xr-xzellij-utils/assets/plugins/strider.wasmbin809895 -> 503181 bytes
-rwxr-xr-xzellij-utils/assets/plugins/tab-bar.wasmbin765705 -> 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.rs14
-rw-r--r--zellij-utils/src/kdl/mod.rs14
-rw-r--r--zellij-utils/src/setup.rs38
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
index 0e3598d0b..d59cb92b8 100755
--- a/zellij-utils/assets/plugins/compact-bar.wasm
+++ b/zellij-utils/assets/plugins/compact-bar.wasm
Binary files differ
diff --git a/zellij-utils/assets/plugins/status-bar.wasm b/zellij-utils/assets/plugins/status-bar.wasm
index a1d0c8179..63907aed5 100755
--- a/zellij-utils/assets/plugins/status-bar.wasm
+++ b/zellij-utils/assets/plugins/status-bar.wasm
Binary files differ
diff --git a/zellij-utils/assets/plugins/strider.wasm b/zellij-utils/assets/plugins/strider.wasm
index 37da81bcc..39909aaa4 100755
--- a/zellij-utils/assets/plugins/strider.wasm
+++ b/zellij-utils/assets/plugins/strider.wasm
Binary files differ
diff --git a/zellij-utils/assets/plugins/tab-bar.wasm b/zellij-utils/assets/plugins/tab-bar.wasm
index 38f17dfc1..5f59fe4fe 100755
--- a/zellij-utils/assets/plugins/tab-bar.wasm
+++ b/zellij-utils/assets/plugins/tab-bar.wasm
Binary files differ
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 {