diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5dedc76 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +# Let's not store the selected theme in version control. This file is used to +# source theme variables locally in the main function rather than polluting the +# global variable namespace. +catppuccin-selected-theme.tmuxtheme diff --git a/README.md b/README.md index 6bf042c..48e776d 100644 --- a/README.md +++ b/README.md @@ -46,10 +46,30 @@ set -g @catppuccin_flavour 'latte' # or frappe, macchiato, mocha 1. Copy your desired theme's configuration contents into your Tmux config (usually stored at `~/.tmux.conf`) 2. Reload Tmux by either restarting the session or reloading it with `tmux source-file ~/.tmux.conf` +#### Configuration options + +All flavours support certain levels of customization that match our [Catppuccin +Style Guide][style-guide]. To add these customizations, add any of the following +options to your Tmux configuration. + +##### Enable window tabs + +By default, the theme places the `window-status` in the `status-right`. With +`@catppuccin_window_tabs_enabled` set to `on`, the theme will place the +directory within the `status-right` and move the window names to the +`window-status` format variables. + +```sh +set -g @catppuccin_window_tabs_enabled on # or off to disable window_tabs +``` + +[style-guide]: https://github.com/catppuccin/catppuccin/blob/main/docs/style-guide.md + ## 💝 Thanks to - [Pocco81](https://github.com/catppuccin) - [vinnyA3](https://github.com/vinnyA3) +- [rogeruiz](https://github.com/rogeruiz)   diff --git a/catppuccin-frappe.tmuxtheme b/catppuccin-frappe.tmuxtheme old mode 100755 new mode 100644 index 8ed37a8..a38a73f --- a/catppuccin-frappe.tmuxtheme +++ b/catppuccin-frappe.tmuxtheme @@ -1,5 +1,3 @@ -#!/usr/bin/env bash - # NOTE: you can use vars with $ and ${} as long as the str is double quoted: "" # WARNING: hex colors can't contain capital letters @@ -17,55 +15,3 @@ thm_yellow="#e5c890" thm_blue="#8caaee" thm_orange="#ef9f76" thm_black4="#626880" - -# ----------------------------=== Theme ===-------------------------- - -# utils -set() { - local option=$1 - local value=$2 - tmux set-option -gq "$option" "$value" -} - -setw() { - local option=$1 - local value=$2 - tmux set-window-option -gq "$option" "$value" -} - -# status -set status "on" -set status-bg "${thm_bg}" -set status-justify "left" -set status-left-length "100" -set status-right-length "100" - -# messages -set message-style "fg=${thm_cyan},bg=${thm_gray},align=centre" -set message-command-style "fg=${thm_cyan},bg=${thm_gray},align=centre" - -# panes -set pane-border-style "fg=${thm_gray}" -set pane-active-border-style "fg=${thm_blue}" - -# windows -setw window-status-activity-style "fg=${thm_fg},bg=${thm_bg},none" -setw window-status-separator "" -setw window-status-style "fg=${thm_fg},bg=${thm_bg},none" - -# --------=== Statusline - -set status-left "" -set status-right "#[fg=$thm_pink,bg=$thm_bg,nobold,nounderscore,noitalics]#[fg=$thm_bg,bg=$thm_pink,nobold,nounderscore,noitalics] #[fg=$thm_fg,bg=$thm_gray] #W #{?client_prefix,#[fg=$thm_red],#[fg=$thm_green]}#[bg=$thm_gray]#{?client_prefix,#[bg=$thm_red],#[bg=$thm_green]}#[fg=$thm_bg] #[fg=$thm_fg,bg=$thm_gray] #S " - -# current_dir -setw window-status-format "#[fg=$thm_bg,bg=$thm_blue] #I #[fg=$thm_fg,bg=$thm_gray] #{b:pane_current_path} " -setw window-status-current-format "#[fg=$thm_bg,bg=$thm_orange] #I #[fg=$thm_fg,bg=$thm_bg] #{b:pane_current_path} " - -# parent_dir/current_dir -# setw window-status-format "#[fg=colour232,bg=colour111] #I #[fg=colour222,bg=colour235] #(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) " -# setw window-status-current-format "#[fg=colour232,bg=colour208] #I #[fg=colour255,bg=colour237] #(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) " - -# --------=== Modes -setw clock-mode-colour "${thm_blue}" -setw mode-style "fg=${thm_pink} bg=${thm_black4} bold" diff --git a/catppuccin-latte.tmuxtheme b/catppuccin-latte.tmuxtheme old mode 100755 new mode 100644 index 1ddb188..16f078f --- a/catppuccin-latte.tmuxtheme +++ b/catppuccin-latte.tmuxtheme @@ -1,5 +1,3 @@ -#!/usr/bin/env bash - # NOTE: you can use vars with $ and ${} as long as the str is double quoted: "" # WARNING: hex colors can't contain capital letters @@ -17,55 +15,3 @@ thm_yellow="#df8e1d" thm_blue="#1e66f5" thm_orange="#fe640b" thm_black4="#acb0be" - -# ----------------------------=== Theme ===-------------------------- - -# utils -set() { - local option=$1 - local value=$2 - tmux set-option -gq "$option" "$value" -} - -setw() { - local option=$1 - local value=$2 - tmux set-window-option -gq "$option" "$value" -} - -# status -set status "on" -set status-bg "${thm_bg}" -set status-justify "left" -set status-left-length "100" -set status-right-length "100" - -# messages -set message-style "fg=${thm_cyan},bg=${thm_gray},align=centre" -set message-command-style "fg=${thm_cyan},bg=${thm_gray},align=centre" - -# panes -set pane-border-style "fg=${thm_gray}" -set pane-active-border-style "fg=${thm_blue}" - -# windows -setw window-status-activity-style "fg=${thm_fg},bg=${thm_bg},none" -setw window-status-separator "" -setw window-status-style "fg=${thm_fg},bg=${thm_bg},none" - -# --------=== Statusline - -set status-left "" -set status-right "#[fg=$thm_pink,bg=$thm_bg,nobold,nounderscore,noitalics]#[fg=$thm_bg,bg=$thm_pink,nobold,nounderscore,noitalics] #[fg=$thm_fg,bg=$thm_gray] #W #{?client_prefix,#[fg=$thm_red],#[fg=$thm_green]}#[bg=$thm_gray]#{?client_prefix,#[bg=$thm_red],#[bg=$thm_green]}#[fg=$thm_bg] #[fg=$thm_fg,bg=$thm_gray] #S " - -# current_dir -setw window-status-format "#[fg=$thm_bg,bg=$thm_blue] #I #[fg=$thm_fg,bg=$thm_gray] #{b:pane_current_path} " -setw window-status-current-format "#[fg=$thm_bg,bg=$thm_orange] #I #[fg=$thm_fg,bg=$thm_bg] #{b:pane_current_path} " - -# parent_dir/current_dir -# setw window-status-format "#[fg=colour232,bg=colour111] #I #[fg=colour222,bg=colour235] #(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) " -# setw window-status-current-format "#[fg=colour232,bg=colour208] #I #[fg=colour255,bg=colour237] #(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) " - -# --------=== Modes -setw clock-mode-colour "${thm_blue}" -setw mode-style "fg=${thm_pink} bg=${thm_black4} bold" diff --git a/catppuccin-macchiato.tmuxtheme b/catppuccin-macchiato.tmuxtheme old mode 100755 new mode 100644 index 3b76e74..c90bf76 --- a/catppuccin-macchiato.tmuxtheme +++ b/catppuccin-macchiato.tmuxtheme @@ -1,5 +1,3 @@ -#!/usr/bin/env bash - # NOTE: you can use vars with $ and ${} as long as the str is double quoted: "" # WARNING: hex colors can't contain capital letters @@ -17,55 +15,3 @@ thm_yellow="#eed49f" thm_blue="#8aadf4" thm_orange="#f5a97f" thm_black4="#5b6078" - -# ----------------------------=== Theme ===-------------------------- - -# utils -set() { - local option=$1 - local value=$2 - tmux set-option -gq "$option" "$value" -} - -setw() { - local option=$1 - local value=$2 - tmux set-window-option -gq "$option" "$value" -} - -# status -set status "on" -set status-bg "${thm_bg}" -set status-justify "left" -set status-left-length "100" -set status-right-length "100" - -# messages -set message-style "fg=${thm_cyan},bg=${thm_gray},align=centre" -set message-command-style "fg=${thm_cyan},bg=${thm_gray},align=centre" - -# panes -set pane-border-style "fg=${thm_gray}" -set pane-active-border-style "fg=${thm_blue}" - -# windows -setw window-status-activity-style "fg=${thm_fg},bg=${thm_bg},none" -setw window-status-separator "" -setw window-status-style "fg=${thm_fg},bg=${thm_bg},none" - -# --------=== Statusline - -set status-left "" -set status-right "#[fg=$thm_pink,bg=$thm_bg,nobold,nounderscore,noitalics]#[fg=$thm_bg,bg=$thm_pink,nobold,nounderscore,noitalics] #[fg=$thm_fg,bg=$thm_gray] #W #{?client_prefix,#[fg=$thm_red],#[fg=$thm_green]}#[bg=$thm_gray]#{?client_prefix,#[bg=$thm_red],#[bg=$thm_green]}#[fg=$thm_bg] #[fg=$thm_fg,bg=$thm_gray] #S " - -# current_dir -setw window-status-format "#[fg=$thm_bg,bg=$thm_blue] #I #[fg=$thm_fg,bg=$thm_gray] #{b:pane_current_path} " -setw window-status-current-format "#[fg=$thm_bg,bg=$thm_orange] #I #[fg=$thm_fg,bg=$thm_bg] #{b:pane_current_path} " - -# parent_dir/current_dir -# setw window-status-format "#[fg=colour232,bg=colour111] #I #[fg=colour222,bg=colour235] #(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) " -# setw window-status-current-format "#[fg=colour232,bg=colour208] #I #[fg=colour255,bg=colour237] #(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) " - -# --------=== Modes -setw clock-mode-colour "${thm_blue}" -setw mode-style "fg=${thm_pink} bg=${thm_black4} bold" diff --git a/catppuccin-mocha.tmuxtheme b/catppuccin-mocha.tmuxtheme old mode 100755 new mode 100644 index d0b64fa..41e6369 --- a/catppuccin-mocha.tmuxtheme +++ b/catppuccin-mocha.tmuxtheme @@ -1,5 +1,3 @@ -#!/usr/bin/env bash - # NOTE: you can use vars with $ and ${} as long as the str is double quoted: "" # WARNING: hex colors can't contain capital letters @@ -17,55 +15,3 @@ thm_yellow="#f9e2af" thm_blue="#89b4fa" thm_orange="#fab387" thm_black4="#585b70" - -# ----------------------------=== Theme ===-------------------------- - -# utils -set() { - local option=$1 - local value=$2 - tmux set-option -gq "$option" "$value" -} - -setw() { - local option=$1 - local value=$2 - tmux set-window-option -gq "$option" "$value" -} - -# status -set status "on" -set status-bg "${thm_bg}" -set status-justify "left" -set status-left-length "100" -set status-right-length "100" - -# messages -set message-style "fg=${thm_cyan},bg=${thm_gray},align=centre" -set message-command-style "fg=${thm_cyan},bg=${thm_gray},align=centre" - -# panes -set pane-border-style "fg=${thm_gray}" -set pane-active-border-style "fg=${thm_blue}" - -# windows -setw window-status-activity-style "fg=${thm_fg},bg=${thm_bg},none" -setw window-status-separator "" -setw window-status-style "fg=${thm_fg},bg=${thm_bg},none" - -# --------=== Statusline - -set status-left "" -set status-right "#[fg=$thm_pink,bg=$thm_bg,nobold,nounderscore,noitalics]#[fg=$thm_bg,bg=$thm_pink,nobold,nounderscore,noitalics] #[fg=$thm_fg,bg=$thm_gray] #W #{?client_prefix,#[fg=$thm_red],#[fg=$thm_green]}#[bg=$thm_gray]#{?client_prefix,#[bg=$thm_red],#[bg=$thm_green]}#[fg=$thm_bg] #[fg=$thm_fg,bg=$thm_gray] #S " - -# current_dir -setw window-status-format "#[fg=$thm_bg,bg=$thm_blue] #I #[fg=$thm_fg,bg=$thm_gray] #{b:pane_current_path} " -setw window-status-current-format "#[fg=$thm_bg,bg=$thm_orange] #I #[fg=$thm_fg,bg=$thm_bg] #{b:pane_current_path} " - -# parent_dir/current_dir -# setw window-status-format "#[fg=colour232,bg=colour111] #I #[fg=colour222,bg=colour235] #(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) " -# setw window-status-current-format "#[fg=colour232,bg=colour208] #I #[fg=colour255,bg=colour237] #(echo '#{pane_current_path}' | rev | cut -d'/' -f-2 | rev) " - -# --------=== Modes -setw clock-mode-colour "${thm_blue}" -setw mode-style "fg=${thm_pink} bg=${thm_black4} bold" diff --git a/catppuccin.tmux b/catppuccin.tmux index 928321f..47d06e9 100755 --- a/catppuccin.tmux +++ b/catppuccin.tmux @@ -1,23 +1,108 @@ #!/usr/bin/env bash -CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -get-tmux-option() { - local option value default - option="$1" - default="$2" - value="$(tmux show-option -gqv "$option")" - - if [ -n "$value" ]; then - echo "$value" - else - echo "$default" - fi -} +PLUGIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" main() { + get-tmux-option() { + local option value default + option="$1" + default="$2" + value="$(tmux show-option -gqv "$option")" + + if [ -n "$value" ]; then + echo "$value" + else + echo "$default" + fi + } + + set() { + local option=$1 + local value=$2 + tmux set-option -gq "$option" "$value" + } + + setw() { + local option=$1 + local value=$2 + tmux set-window-option -gq "$option" "$value" + } + local theme theme="$(get-tmux-option "@catppuccin_flavour" "mocha")" - tmux run -b "$CURRENT_DIR/catppuccin-${theme}.tmuxtheme" + + # NOTE: Pulling in the selected theme by the theme that's being set as local + # variables. + sed -E 's/^(.+=)/local \1/' \ + > "${PLUGIN_DIR}/catppuccin-selected-theme.tmuxtheme" \ + < "${PLUGIN_DIR}/catppuccin-${theme}.tmuxtheme" + + source "${PLUGIN_DIR}/catppuccin-selected-theme.tmuxtheme" + + # status + set status "on" + set status-bg "${thm_bg}" + set status-justify "left" + set status-left-length "100" + set status-right-length "100" + + # messages + set message-style "fg=${thm_cyan},bg=${thm_gray},align=centre" + set message-command-style "fg=${thm_cyan},bg=${thm_gray},align=centre" + + # panes + set pane-border-style "fg=${thm_gray}" + set pane-active-border-style "fg=${thm_blue}" + + # windows + setw window-status-activity-style "fg=${thm_fg},bg=${thm_bg},none" + setw window-status-separator "" + setw window-status-style "fg=${thm_fg},bg=${thm_bg},none" + + # --------=== Statusline + + # NOTE: Checking for the value of @catppuccin_window_tabs_enabled + wt_enabled="$(get-tmux-option "@catppuccin_window_tabs_enabled" "off")" + readonly wt_enabled + + # These variables are the defaults so that the setw and set calls are easier to parse. + readonly show_directory="#[fg=$thm_pink,bg=$thm_bg,nobold,nounderscore,noitalics]#[fg=$thm_bg,bg=$thm_pink,nobold,nounderscore,noitalics] #[fg=$thm_fg,bg=$thm_gray] #{b:pane_current_path} #{?client_prefix,#[fg=$thm_red]" + readonly show_window="#[fg=$thm_pink,bg=$thm_bg,nobold,nounderscore,noitalics]#[fg=$thm_bg,bg=$thm_pink,nobold,nounderscore,noitalics] #[fg=$thm_fg,bg=$thm_gray] #W #{?client_prefix,#[fg=$thm_red]" + readonly show_session="#[fg=$thm_green]}#[bg=$thm_gray]#{?client_prefix,#[bg=$thm_red],#[bg=$thm_green]}#[fg=$thm_bg] #[fg=$thm_fg,bg=$thm_gray] #S " + readonly show_directory_in_window_status="#[fg=$thm_bg,bg=$thm_blue] #I #[fg=$thm_fg,bg=$thm_gray] #{b:pane_current_path} " + readonly show_directory_in_window_status_current="#[fg=$thm_bg,bg=$thm_orange] #I #[fg=$thm_fg,bg=$thm_bg] #{b:pane_current_path} " + readonly show_window_in_window_status="#[fg=$thm_fg,bg=$thm_bg] #W #[fg=$thm_bg,bg=$thm_blue] #I#[fg=$thm_blue,bg=$thm_bg]#[fg=$thm_fg,bg=$thm_bg,nobold,nounderscore,noitalics] " + readonly show_window_in_window_status_current="#[fg=$thm_fg,bg=$thm_gray] #W #[fg=$thm_bg,bg=$thm_orange] #I#[fg=$thm_orange,bg=$thm_bg]#[fg=$thm_fg,bg=$thm_bg,nobold,nounderscore,noitalics] " + + # Right column 1 by default shows the Window name. + local right_column1=$show_window + + # Right column 2 by default shows the current Session name. + local right_column2=$show_session + + # Window status by default shows the current directory basename. + local window_status_format=$show_directory_in_window_status + local window_status_current_format=$show_directory_in_window_status_current + + # NOTE: With the @catppuccin_window_tabs_enabled set to on, we're going to + # update the right_column1 and the window_status_* variables. + if [[ "${wt_enabled}" == "on" ]] + then + right_column1=$show_directory + window_status_format=$show_window_in_window_status + window_status_current_format=$show_window_in_window_status_current + fi + + set status-left "" + + set status-right "${right_column1},${right_column2}" + + setw window-status-format "${window_status_format}" + setw window-status-current-format "${window_status_current_format}" + + # --------=== Modes + # + setw clock-mode-colour "${thm_blue}" + setw mode-style "fg=${thm_pink} bg=${thm_black4} bold" } main "$@"