From a825c6d58a2f42b17de223e9b124623041b09ca9 Mon Sep 17 00:00:00 2001 From: chodak166 Date: Sat, 20 Jun 2026 20:53:21 +0200 Subject: [PATCH] Added tmux theme files; fixed sway screenshotting --- .config/sway/config | 12 +-- .config/sway/scripts/screenshot | 37 +++++++ .tmux.d/tmux-gruvbox | 1 - .tmux.d/tmux-gruvbox/gruvbox-tpm.tmux | 6 ++ .tmux.d/tmux-gruvbox/src/gruvbox-main.sh | 98 +++++++++++++++++++ .tmux.d/tmux-gruvbox/src/helper_methods.sh | 19 ++++ .../tmux-gruvbox/src/palette_gruvbox_dark.sh | 46 +++++++++ .../src/palette_gruvbox_dark256.sh | 46 +++++++++ .../tmux-gruvbox/src/palette_gruvbox_light.sh | 46 +++++++++ .../src/palette_gruvbox_light256.sh | 46 +++++++++ .../tmux-gruvbox/src/theme_gruvbox_dark.sh | 79 +++++++++++++++ .../tmux-gruvbox/src/theme_gruvbox_light.sh | 79 +++++++++++++++ .../src/theme_gruvbox_light256.sh | 79 +++++++++++++++ .tmux.d/tmux-gruvbox/src/tmux_utils.sh | 63 ++++++++++++ 14 files changed, 648 insertions(+), 9 deletions(-) create mode 100755 .config/sway/scripts/screenshot delete mode 160000 .tmux.d/tmux-gruvbox create mode 100755 .tmux.d/tmux-gruvbox/gruvbox-tpm.tmux create mode 100755 .tmux.d/tmux-gruvbox/src/gruvbox-main.sh create mode 100644 .tmux.d/tmux-gruvbox/src/helper_methods.sh create mode 100644 .tmux.d/tmux-gruvbox/src/palette_gruvbox_dark.sh create mode 100644 .tmux.d/tmux-gruvbox/src/palette_gruvbox_dark256.sh create mode 100644 .tmux.d/tmux-gruvbox/src/palette_gruvbox_light.sh create mode 100644 .tmux.d/tmux-gruvbox/src/palette_gruvbox_light256.sh create mode 100644 .tmux.d/tmux-gruvbox/src/theme_gruvbox_dark.sh create mode 100644 .tmux.d/tmux-gruvbox/src/theme_gruvbox_light.sh create mode 100644 .tmux.d/tmux-gruvbox/src/theme_gruvbox_light256.sh create mode 100644 .tmux.d/tmux-gruvbox/src/tmux_utils.sh diff --git a/.config/sway/config b/.config/sway/config index fd901c1..eb742d6 100644 --- a/.config/sway/config +++ b/.config/sway/config @@ -265,14 +265,10 @@ bindsym $mod+r mode "resize" # Omarchy also uses grim + slurp (+ satty for annotation). ################################################################# -# Fullscreen screenshot → save to ~/Pictures and copy to clipboard -bindsym Print exec grim -t png ~/Pictures/screenshot_$(date +%Y%m%d_%H%M%S).png && grim -t png - | wl-copy -t image/png - -# Region screenshot → select area with slurp -bindsym Shift+Print exec grim -t png -g "$(slurp)" ~/Pictures/screenshot_$(date +%Y%m%d_%H%M%S).png && grim -t png -g "$(slurp)" - | wl-copy -t image/png - -# Active window screenshot (sway-specific: get focused window geometry) -bindsym Control+Print exec grim -t png -g "$(swaymsg -t get_tree | jq -j '.. | select(.type?) | select(.focused) | .rect | "\(.x),\(.y) \(.width)x\(.height)"')" ~/Pictures/screenshot_$(date +%Y%m%d_%H%M%S).png +# Screenshots — capture once, save to file + copy to clipboard +bindsym Print exec $scriptsDir/screenshot full +bindsym Shift+Print exec $scriptsDir/screenshot area +bindsym Control+Print exec $scriptsDir/screenshot window ################################################################# diff --git a/.config/sway/scripts/screenshot b/.config/sway/scripts/screenshot new file mode 100755 index 0000000..d7fff82 --- /dev/null +++ b/.config/sway/scripts/screenshot @@ -0,0 +1,37 @@ +#!/bin/bash +#---------------------------------------------------------------- +# screenshot — Capture screen, window, or region +# +# Captures once, saves to ~/Pictures and copies to clipboard. +# +# Usage: +# screenshot full — full screen +# screenshot area — select region with slurp +# screenshot window — focused window +# +# Dependencies: grim, slurp, wl-copy, swaymsg, jq +#---------------------------------------------------------------- + +dir=~/Pictures +mkdir -p "$dir" +file="$dir/screenshot_$(date +%Y%m%d_%H%M%S).png" + +case "$1" in + full) + grim -t png "$file" + ;; + area) + geo=$(slurp) + grim -t png -g "$geo" "$file" + ;; + window) + geo=$(swaymsg -t get_tree | jq -j '.. | select(.type?) | select(.focused) | .rect | "\(.x),\(.y) \(.width)x\(.height)"') + grim -t png -g "$geo" "$file" + ;; + *) + echo "Usage: screenshot {full|area|window}" + exit 1 + ;; +esac + +wl-copy -t image/png < "$file" diff --git a/.tmux.d/tmux-gruvbox b/.tmux.d/tmux-gruvbox deleted file mode 160000 index aeb30c7..0000000 --- a/.tmux.d/tmux-gruvbox +++ /dev/null @@ -1 +0,0 @@ -Subproject commit aeb30c7172a8ed8663409207814cf47d9df10d15 diff --git a/.tmux.d/tmux-gruvbox/gruvbox-tpm.tmux b/.tmux.d/tmux-gruvbox/gruvbox-tpm.tmux new file mode 100755 index 0000000..936ef65 --- /dev/null +++ b/.tmux.d/tmux-gruvbox/gruvbox-tpm.tmux @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +source "${CURRENT_DIR}/src/gruvbox-main.sh" + +# vim: ai et ft=bash diff --git a/.tmux.d/tmux-gruvbox/src/gruvbox-main.sh b/.tmux.d/tmux-gruvbox/src/gruvbox-main.sh new file mode 100755 index 0000000..d9d299d --- /dev/null +++ b/.tmux.d/tmux-gruvbox/src/gruvbox-main.sh @@ -0,0 +1,98 @@ +#!/bin/bash + +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +readonly CURRENT_DIR + +# hold the array of all command to configure tmux theme +declare -a TMUX_CMDS + +# load libraries +# shellcheck disable=1091 +source "${CURRENT_DIR}/helper_methods.sh" +# shellcheck disable=1091 +source "${CURRENT_DIR}/tmux_utils.sh" + +readonly TMUX_GRUVBOX="@tmux-gruvbox" +readonly TMUX_GRUVBOX_STATUSBAR_ALPHA="@tmux-gruvbox-statusbar-alpha" +readonly TMUX_GRUVBOX_LEFT_STATUS_A="@tmux-gruvbox-left-status-a" +readonly TMUX_GRUVBOX_RIGHT_STAUTS_X="@tmux-gruvbox-right-status-x" +readonly TMUX_GRUVBOX_RIGHT_STAUTS_Y="@tmux-gruvbox-right-status-y" +readonly TMUX_GRUVBOX_RIGHT_STAUTS_Z="@tmux-gruvbox-right-status-z" + +# define simple theme options (no color interpolation required) +readonly DEFAULT_THEME="dark256" +readonly DEFAULT_STATUSBAR_ALPHA='false' +# defaults for theme option (with color interpolation) +readonly DEFAULT_LEFT_STATUS_A='#S' +readonly DEFAULT_RIGHT_STATUS_X='%Y-%m-%d' +readonly DEFAULT_RIGHT_STATUS_Y='%H:%M' +readonly DEFAULT_RIGHT_STATUS_Z='#h' + +main() { + TMUX_CMDS=() # clear + + # load proper palette for the theme asap to avoid additional variable interpolation + local _theme + _theme=$(tmux_get_option "${TMUX_GRUVBOX}" "${DEFAULT_THEME}") + _statusbar_alpha=$(tmux_get_option "${TMUX_GRUVBOX_STATUSBAR_ALPHA}" "${DEFAULT_STATUSBAR_ALPHA}") + + case "$_theme" in + light) + # shellcheck disable=1091 + source "${CURRENT_DIR}/palette_gruvbox_light.sh" + # shellcheck disable=1091 + source "${CURRENT_DIR}/theme_gruvbox_light.sh" + ;; + light256) + # shellcheck disable=1091 + source "${CURRENT_DIR}/palette_gruvbox_light256.sh" + # shellcheck disable=1091 + source "${CURRENT_DIR}/theme_gruvbox_light256.sh" + ;; + dark) + # shellcheck disable=1091 + source "${CURRENT_DIR}/palette_gruvbox_dark.sh" + # shellcheck disable=1091 + source "${CURRENT_DIR}/theme_gruvbox_dark.sh" + ;; + dark256 | *) + # shellcheck disable=1091 + source "${CURRENT_DIR}/palette_gruvbox_dark256.sh" + # shellcheck disable=1091 + source "${CURRENT_DIR}/theme_gruvbox_dark.sh" + ;; + esac + + local _status_left _status_right _window_status_current_format _window_status_format + _status_left_a=$(tmux_get_option "$TMUX_GRUVBOX_LEFT_STATUS_A" "$DEFAULT_LEFT_STATUS_A") + _status_right_x=$(tmux_get_option "$TMUX_GRUVBOX_RIGHT_STAUTS_X" "$DEFAULT_RIGHT_STATUS_X") + _status_right_y=$(tmux_get_option "$TMUX_GRUVBOX_RIGHT_STAUTS_Y" "$DEFAULT_RIGHT_STATUS_Y") + _status_right_z=$(tmux_get_option "$TMUX_GRUVBOX_RIGHT_STAUTS_Z" "$DEFAULT_RIGHT_STATUS_Z") + + local _theme_args + _theme_args=( + "$_status_left_a" + "$_status_right_x" + "$_status_right_y" + "$_status_right_z" + "$_statusbar_alpha" + ) + + case $_theme in + light256) + # light256 have slightly different colors placement then regular light 16-bit + theme_set_light256 "${_theme_args[@]}" + ;; + light) + theme_set_light "${_theme_args[@]}" + ;; + dark | dark256 | *) + theme_set_dark "${_theme_args[@]}" + ;; + esac + + # execute commands with tmux as array of options + tmux "${TMUX_CMDS[@]}" +} + +main "$@" diff --git a/.tmux.d/tmux-gruvbox/src/helper_methods.sh b/.tmux.d/tmux-gruvbox/src/helper_methods.sh new file mode 100644 index 0000000..175a5a3 --- /dev/null +++ b/.tmux.d/tmux-gruvbox/src/helper_methods.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# simply print passed array +# +# example +# +# myarray=() +# print_array myarray +# +print_array() { + local -n arr # -n available over bash 4.3 + arr=$1 + + echo "" + echo "begin >>>" + printf "%s\n" "${arr[@]}" + echo "<<< end" + echo "" +} diff --git a/.tmux.d/tmux-gruvbox/src/palette_gruvbox_dark.sh b/.tmux.d/tmux-gruvbox/src/palette_gruvbox_dark.sh new file mode 100644 index 0000000..58885b2 --- /dev/null +++ b/.tmux.d/tmux-gruvbox/src/palette_gruvbox_dark.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +########################## +# gruvbox dark pallete +########################## + +#### +# When using 'colour124' you are using the color default in terminal pallete. +# This could be important for people which terminals support only 256 colors +# and does not support HEX values. +# +# The names of colors used from https://github.com/morhetz/gruvbox + +# shellcheck disable=2034 # ignored as this file only contains var definitions +col_bg="#282828" +col_bg0_h="#1d2021" +col_bg0="#282828" +col_bg1="#3c3836" +col_bg2="#504945" +col_bg3="#665c54" +col_bg4="#7c6f64" +col_gray0="#a89984" +col_gray1="#928374" +col_gray2="#928374" +col_bg0_s="#32302f" +col_fg="#ebdbb2" +col_fg4="#a89984" +col_fg3="#bdae93" +col_fg2="#d5c4a1" +col_fg1="#ebdbb2" +col_fg0="#fbf1c7" + +col_red="#cc241d" +col_red2="#fb4934" +col_green="#98971a" +col_green2="#b8bb26" +col_yellow="#d79921" +col_yellow2="#fabd2f" +col_blue="#458588" +col_blue2="#83a598" +col_purple="#b16286" +col_purple2="#d3869b" +col_aqua="#689d6a" +col_aqua2="#8ec07c" +col_orange="#d65d0e" +col_orange2="#fe8019" diff --git a/.tmux.d/tmux-gruvbox/src/palette_gruvbox_dark256.sh b/.tmux.d/tmux-gruvbox/src/palette_gruvbox_dark256.sh new file mode 100644 index 0000000..fe6c84d --- /dev/null +++ b/.tmux.d/tmux-gruvbox/src/palette_gruvbox_dark256.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +########################## +# gruvbox dark256 pallete +########################## + +#### +# When using 'colour124' you are using the color default in terminal pallete. +# This could be important for people which terminals support only 256 colors +# and does not support HEX values. +# +# The names of colors used from https://github.com/morhetz/gruvbox + +# shellcheck disable=2034 # ignored as this file only contains var definitions +col_bg=colour235 +col_bg0_h=colour234 +col_bg0=colour235 +col_bg1=colour237 +col_bg2=colour239 +col_bg3=colour241 +col_bg4=colour243 +col_gray0=colour246 +col_gray1=colour245 +col_gray2=colour245 +col_bg0_s=colour236 +col_fg=colour223 +col_fg4=colour246 +col_fg3=colour248 +col_fg2=colour250 +col_fg1=colour223 +col_fg0=colour229 + +col_red=colour124 +col_red2=colour167 +col_green=colour106 +col_green2=colour142 +col_yellow=colour172 +col_yellow2=colour214 +col_blue=colour66 +col_blue2=colour109 +col_purple=colour132 +col_purple2=colour175 +col_aqua=colour72 +col_aqua2=colour108 +col_orange=colour166 +col_orange2=colour208 diff --git a/.tmux.d/tmux-gruvbox/src/palette_gruvbox_light.sh b/.tmux.d/tmux-gruvbox/src/palette_gruvbox_light.sh new file mode 100644 index 0000000..0652c5c --- /dev/null +++ b/.tmux.d/tmux-gruvbox/src/palette_gruvbox_light.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +########################## +# gruvbox light pallete +########################## + +#### +# When using 'colour124' you are using the color default in terminal pallete. +# This could be important for people which terminals support only 256 colors +# and does not support HEX values. +# +# The names of colors used from https://github.com/morhetz/gruvbox + +# shellcheck disable=2034 # ignored as this file only contains var definitions +col_bg="#fbf1c7" +col_bg0_h="#f9f5d7" +col_bg0="#fbf1c7" +col_bg1="#ebdbb2" +col_bg2="#d5c4a1" +col_bg3="#bdae93" +col_bg4="#a89984" +col_gray0="#7c6f64" +col_gray1="#928374" +col_gray2="#928374" +col_bg0_s="#f2e5bc" +col_fg="#3c3836" +col_fg4="#7c6f64" +col_fg3="#665c54" +col_fg2="#504945" +col_fg1="#3c3836" +col_fg0="#282828" + +col_red="#cc241d" +col_red2="#9d0006" +col_green="#98971a" +col_green2="#79740e" +col_yellow="#d79921" +col_yellow2="#b57614" +col_blue="#458588" +col_blue2="#076678" +col_purple="#b16286" +col_purple2="#8f3f71" +col_aqua="#689d6a" +col_aqua2="#427b58" +col_orange="#d65d0e" +col_orange2="#af3a03" diff --git a/.tmux.d/tmux-gruvbox/src/palette_gruvbox_light256.sh b/.tmux.d/tmux-gruvbox/src/palette_gruvbox_light256.sh new file mode 100644 index 0000000..959e5a6 --- /dev/null +++ b/.tmux.d/tmux-gruvbox/src/palette_gruvbox_light256.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +########################## +# gruvbox light256 pallete +########################## + +#### +# When using 'colour124' you are using the color default in terminal pallete. +# This could be important for people which terminals support only 256 colors +# and does not support HEX values. +# +# The names of colors used from https://github.com/morhetz/gruvbox + +# shellcheck disable=2034 # ignored as this file only contains var definitions +col_bg=colour229 +col_bg0_h=colour230 +col_bg0=colour229 +col_bg1=colour223 +col_bg2=colour250 +col_bg3=colour248 +col_bg4=colour246 +col_gray0=colour246 +col_gray1=colour245 +col_gray2=colour244 +col_bg0_s=colour228 +col_fg=colour223 +col_fg4=colour243 +col_fg3=colour241 +col_fg2=colour239 +col_fg1=colour237 +col_fg0=colour235 + +col_red=colour124 +col_red2=colour88 +col_green=colour106 +col_green2=colour100 +col_yellow=colour172 +col_yellow2=colour136 +col_blue=colour66 +col_blue2=colour24 +col_purple=colour132 +col_purple2=colour96 +col_aqua=colour72 +col_aqua2=colour66 +col_orange=colour166 +col_orange2=colour130 diff --git a/.tmux.d/tmux-gruvbox/src/theme_gruvbox_dark.sh b/.tmux.d/tmux-gruvbox/src/theme_gruvbox_dark.sh new file mode 100644 index 0000000..4bee163 --- /dev/null +++ b/.tmux.d/tmux-gruvbox/src/theme_gruvbox_dark.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +# Themes may use different colors in sets therefore we setup dark and light +# separately. +# +# shellcheck disable=SC2154 +theme_set_dark() { + local _left_status_a _right_status_x _right_status_y _right_status_z _statusbar_alpha + _left_status_a=$1 + _right_status_x=$2 + _right_status_y=$3 + _right_status_z=$4 + _statusbar_alpha=$5 + + tmux_append_seto "status" "on" + + # default statusbar bg color + local _statusbar_bg="${col_bg1}" + if [[ "$_statusbar_alpha" == "true" ]]; then _statusbar_bg="default"; fi + tmux_append_seto "status-style" "bg=${_statusbar_bg},fg=${col_fg1}" + + # default window title colors + local _window_title_bg=${col_yellow2} + if [[ "$_statusbar_alpha" == "true" ]]; then _window_title_bg="default"; fi + tmux_append_setwo "window-status-style" "bg=${_window_title_bg},fg=${col_bg1}" + + # default window with an activity alert + tmux_append_setwo "window-status-activity-style" "bg=${col_bg1},fg=${col_fg3}" + + # active window title colors + local _active_window_title_bg=${col_yellow2} + if [[ "$_statusbar_alpha" == "true" ]]; then _active_window_title_bg="default"; fi + tmux_append_setwo "window-status-current-style" "bg=${_active_window_title_bg},fg=${col_bg1}" # TODO cosider removing red! + + # pane border + tmux_append_seto "pane-active-border-style" "fg=${col_fg2}" + tmux_append_seto "pane-border-style" "fg=${col_bg1}" + + # message infos + tmux_append_seto "message-style" "bg=${col_bg2},fg=${col_fg1}" + + # writing commands inactive + tmux_append_seto "message-command-style" "bg=${col_fg3},fg=${col_bg1}" + + # pane number display + tmux_append_seto "display-panes-active-colour" "${col_fg2}" + tmux_append_seto "display-panes-colour" "${col_bg1}" + + # clock + tmux_append_setwo "clock-mode-colour" "${col_blue2}" + + # bell + tmux_append_setwo "window-status-bell-style" "bg=${col_red2},fg=${col_bg}" + + ## Theme settings mixed with colors (unfortunately, but there is no cleaner way) + tmux_append_seto "status-justify" "left" + tmux_append_seto "status-left-style" none + tmux_append_seto "status-left-length" "80" + tmux_append_seto "status-right-style" none + tmux_append_seto "status-right-length" "80" + tmux_append_setwo "window-status-separator" "" + + tmux_append_seto "status-left" "#[bg=${col_bg3},fg=${col_fg3}] ${_left_status_a} #[bg=${col_bg1},fg=${col_bg3},nobold,noitalics,nounderscore]" + + # right status + local _status_right_bg=${col_bg1} + if [[ "$_statusbar_alpha" == "true" ]]; then _status_right_bg="default"; fi + tmux_append_seto "status-right" "#[bg=${_status_right_bg},fg=${col_bg2},nobold,nounderscore,noitalics]#[bg=${col_bg2},fg=${col_fg4}] ${_right_status_x}  ${_right_status_y} #[bg=${col_bg2},fg=${col_fg3},nobold,noitalics,nounderscore]#[bg=${col_fg3},fg=${col_bg1}] ${_right_status_z}" + + # current window + local _current_window_status_format_bg=${col_bg1} + if [[ "$_statusbar_alpha" == "true" ]]; then _current_window_status_format_bg="default"; fi + tmux_append_setwo "window-status-current-format" "#[bg=${col_yellow2},fg=${col_bg1},nobold,noitalics,nounderscore]#[bg=${col_yellow2},fg=${col_bg2}] #I #[bg=${col_yellow2},fg=${col_bg2},bold] #W#{?window_zoomed_flag,*Z,} #{?window_end_flag,#[bg=${_current_window_status_format_bg}],#[bg=${col_bg1}]}#[fg=${col_yellow2},nobold,noitalics,nounderscore]" + + # default window + local _default_window_status_format_bg=${col_bg1} + if [[ "$_statusbar_alpha" == "true" ]]; then _default_window_status_format_bg="default"; fi + tmux_append_setwo "window-status-format" "#[bg=${col_bg2},fg=${col_bg1},noitalics]#[bg=${col_bg2},fg=${col_fg1}] #I #[bg=${col_bg2},fg=${col_fg1}] #W #{?window_end_flag,#[bg=${_default_window_status_format_bg}],#[bg=${col_bg1}]}#[fg=${col_bg2},noitalics]" +} diff --git a/.tmux.d/tmux-gruvbox/src/theme_gruvbox_light.sh b/.tmux.d/tmux-gruvbox/src/theme_gruvbox_light.sh new file mode 100644 index 0000000..ebbf4d9 --- /dev/null +++ b/.tmux.d/tmux-gruvbox/src/theme_gruvbox_light.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +# Themes may use different colors in sets therefore we setup dark and light +# separately. +# +# shellcheck disable=SC2154 +theme_set_light() { + local _left_status_a _right_status_x _right_status_y _right_status_z _statusbar_alpha + _left_status_a=$1 + _right_status_x=$2 + _right_status_y=$3 + _right_status_z=$4 + _statusbar_alpha=$5 + + tmux_append_seto "status" "on" + + # default statusbar bg color + local _statusbar_bg="${col_bg1}" + if [[ "$_statusbar_alpha" == "true" ]]; then _statusbar_bg="default"; fi + tmux_append_seto "status-style" "bg=${_statusbar_bg},fg=${col_fg1}" + + # default window title colors + local _window_title_bg=${col_yellow2} + if [[ "$_statusbar_alpha" == "true" ]]; then _window_title_bg="default"; fi + tmux_append_setwo "window-status-style" "bg=${_window_title_bg},fg=${col_bg1}" + + # default window with an activity alert + tmux_append_setwo "window-status-activity-style" "bg=${col_bg1},fg=${col_fg3}" + + # active window title colors + local _active_window_title_bg=${col_yellow2} + if [[ "$_statusbar_alpha" == "true" ]]; then _active_window_title_bg="default"; fi + tmux_append_setwo "window-status-current-style" "bg=${_active_window_title_bg},fg=${col_bg1}" # TODO cosider removing red! + + # pane border + tmux_append_seto "pane-active-border-style" "fg=${col_fg2}" + tmux_append_seto "pane-border-style" "fg=${col_bg1}" + + # message infos + tmux_append_seto "message-style" "bg=${col_bg2},fg=${col_fg1}" + + # writing commands inactive + tmux_append_seto "message-command-style" "bg=${col_fg3},fg=${col_bg1}" + + # pane number display + tmux_append_seto "display-panes-active-colour" "${col_fg2}" + tmux_append_seto "display-panes-colour" "${col_bg1}" + + # clock + tmux_append_setwo "clock-mode-colour" "${col_blue2}" + + # bell + tmux_append_setwo "window-status-bell-style" "bg=${col_red2},fg=${col_bg}" + + ## Theme settings mixed with colors (unfortunately, but there is no cleaner way) + tmux_append_seto "status-justify" "left" + tmux_append_seto "status-left-style" none + tmux_append_seto "status-left-length" "80" + tmux_append_seto "status-right-style" none + tmux_append_seto "status-right-length" "80" + tmux_append_setwo "window-status-separator" "" + + tmux_append_seto "status-left" "#[bg=${col_bg3},fg=${col_fg3}] ${_left_status_a} #[bg=${col_bg1},fg=${col_bg3},nobold,noitalics,nounderscore]" + + # right status + local _status_right_bg=${col_bg1} + if [[ "$_statusbar_alpha" == "true" ]]; then _status_right_bg="default"; fi + tmux_append_seto "status-right" "#[bg=${_status_right_bg},fg=${col_bg2},nobold,nounderscore,noitalics]#[bg=${col_bg2},fg=${col_fg4}] ${_right_status_x}  ${_right_status_y} #[bg=${col_bg2},fg=${col_fg3},nobold,noitalics,nounderscore]#[bg=${col_fg3},fg=${col_bg1}] ${_right_status_z}" + + # current window + local _current_window_status_format_bg=${col_bg1} + if [[ "$_statusbar_alpha" == "true" ]]; then _current_window_status_format_bg="default"; fi + tmux_append_setwo "window-status-current-format" "#[bg=${col_yellow2},fg=${col_bg1},nobold,noitalics,nounderscore]#[bg=${col_yellow2},fg=${col_bg2}] #I #[bg=${col_yellow2},fg=${col_bg2},bold] #W#{?window_zoomed_flag,*Z,} #{?window_end_flag,#[bg=${_current_window_status_format_bg}],#[bg=${col_bg1}]}#[fg=${col_yellow2},nobold,noitalics,nounderscore]" + + # default window + local _default_window_status_format_bg=${col_bg1} + if [[ "$_statusbar_alpha" == "true" ]]; then _default_window_status_format_bg="default"; fi + tmux_append_setwo "window-status-format" "#[bg=${col_bg2},fg=${col_bg1},noitalics]#[bg=${col_bg2},fg=${col_fg1}] #I #[bg=${col_bg2},fg=${col_fg1}] #W #{?window_end_flag,#[bg=${_default_window_status_format_bg}],#[bg=${col_bg1}]}#[fg=${col_bg2},noitalics]" +} diff --git a/.tmux.d/tmux-gruvbox/src/theme_gruvbox_light256.sh b/.tmux.d/tmux-gruvbox/src/theme_gruvbox_light256.sh new file mode 100644 index 0000000..9ae1a43 --- /dev/null +++ b/.tmux.d/tmux-gruvbox/src/theme_gruvbox_light256.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +# Themes may use different colors in sets therefore we setup dark and light +# separately. +# +# shellcheck disable=SC2154 +theme_set_light256() { + local _left_status_a _right_status_x _right_status_y _right_status_z _statusbar_alpha + _left_status_a=$1 + _right_status_x=$2 + _right_status_y=$3 + _right_status_z=$4 + _statusbar_alpha=$5 + + tmux_append_seto "status" "on" + + # default statusbar bg color + local _statusbar_bg="${col_bg2}" + if [[ "$_statusbar_alpha" == "true" ]]; then _statusbar_bg="default"; fi + tmux_append_seto "status-style" "bg=${_statusbar_bg},fg=${col_fg1}" + + # default window title colors + local _window_title_bg=${col_yellow2} + if [[ "$_statusbar_alpha" == "true" ]]; then _window_title_bg="default"; fi + tmux_append_setwo "window-status-style" "bg=${_window_title_bg},fg=${col_bg1}" + + # default window with an activity alert + tmux_append_setwo "window-status-activity-style" "bg=${col_bg1},fg=${col_fg3}" + + # active window title colors + local _active_window_title_bg=${col_yellow2} + if [[ "$_statusbar_alpha" == "true" ]]; then _active_window_title_bg="default"; fi + tmux_append_setwo "window-status-current-style" "bg=${_active_window_title_bg},fg=${col_bg1}" # TODO cosider removing red! + + # pane border + tmux_append_seto "pane-active-border-style" "fg=${col_fg2}" + tmux_append_seto "pane-border-style" "fg=${col_bg1}" + + # message infos + tmux_append_seto "message-style" "bg=${col_bg2},fg=${col_fg1}" + + # writing commands inactive + tmux_append_seto "message-command-style" "bg=${col_fg3},fg=${col_bg1}" + + # pane number display + tmux_append_seto "display-panes-active-colour" "${col_fg2}" + tmux_append_seto "display-panes-colour" "${col_bg1}" + + # clock + tmux_append_setwo "clock-mode-colour" "${col_blue2}" + + # bell + tmux_append_setwo "window-status-bell-style" "bg=${col_red2},fg=${col_bg}" + + ## Theme settings mixed with colors (unfortunately, but there is no cleaner way) + tmux_append_seto "status-justify" "left" + tmux_append_seto "status-left-style" none + tmux_append_seto "status-left-length" "80" + tmux_append_seto "status-right-style" none + tmux_append_seto "status-right-length" "80" + tmux_append_setwo "window-status-separator" "" + + tmux_append_seto "status-left" "#[bg=${col_fg2},fg=${col_bg1}] ${_left_status_a} #[bg=${col_bg2},fg=${col_fg2},nobold,noitalics,nounderscore]" + + # right status + local _status_right_bg=${col_bg2} + if [[ "$_statusbar_alpha" == "true" ]]; then _status_right_bg="default"; fi + tmux_append_seto "status-right" "#[bg=${_status_right_bg},fg=${col_fg4},nobold,nounderscore,noitalics]#[bg=${col_fg4},fg=${col_bg1}] ${_right_status_x}  ${_right_status_y} #[bg=${col_fg4},fg=${col_fg2},nobold,noitalics,nounderscore]#[bg=${col_fg2},fg=${col_bg1}] ${_right_status_z}" + + # current window + local _current_window_status_format_bg=${col_bg2} + if [[ "$_statusbar_alpha" == "true" ]]; then _current_window_status_format_bg="default"; fi + tmux_append_setwo "window-status-current-format" "#[bg=${col_yellow},fg=${col_bg2},nobold,noitalics,nounderscore]#[bg=${col_yellow},fg=${col_fg1}] #I #[bg=${col_yellow},fg=${col_fg1},bold] #W#{?window_zoomed_flag,*Z,} #{?window_end_flag,#[bg=${_current_window_status_format_bg}],#[bg=${col_bg2}]}#[fg=${col_yellow},nobold,noitalics,nounderscore]" + + # default window + local _default_window_status_format_bg=${col_bg2} + if [[ "$_statusbar_alpha" == "true" ]]; then _default_window_status_format_bg="default"; fi + tmux_append_setwo "window-status-format" "#[bg=${col_bg3},fg=${col_bg2},noitalics]#[bg=${col_bg3},fg=${col_fg2}] #I #[bg=${col_bg3},fg=${col_fg2}] #W #{?window_end_flag,#[bg=${_default_window_status_format_bg}],#[bg=${col_bg2}]}#[fg=${col_bg3},noitalics]" +} diff --git a/.tmux.d/tmux-gruvbox/src/tmux_utils.sh b/.tmux.d/tmux-gruvbox/src/tmux_utils.sh new file mode 100644 index 0000000..87ab063 --- /dev/null +++ b/.tmux.d/tmux-gruvbox/src/tmux_utils.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# get desired tmux option or use given default value +tmux_get_option() { + local _option_name _default_value + _option_name="$1" + _default_value="$2" + + local _current_option_value + _current_option_value=$(tmux show-option -gqv "$_option_name") + if [[ -n "$_current_option_value" ]]; then + echo "$_current_option_value" + else + echo "$_default_value" + fi +} + +# get desired window-option from tmux or default +tmux_get_window_option() { + local _option_name _default_value + _option_name="$1" + _default_value="$2" + + local _current_option_value + _current_option_value=$(tmux show-window-option -gqv "$_option_name") + if [[ -n "$_current_option_value" ]]; then + echo "$_current_option_value" + else + echo "$_default_value" + fi +} + +# append preconfigured tmux set-option to global array +tmux_append_seto() { + local _option _value _result + _option="$1" + _value="$2" + TMUX_CMDS+=("set-option" "-gq" "${_option}" "${_value}" ";") +} + +# append preconfigured tmux set-window-option to global array +tmux_append_setwo() { + local _option _value _result + _option="$1" + _value="$2" + TMUX_CMDS+=("set-window-option" "-gq" "${_option}" "${_value}" ";") +} + +# imediately execute tmux option +tmux_set_option_now() { + local _option_name _value + _option_name="$1" + _value="$2" + tmux set-option -gq "$_option_name" "$_value" +} + +# imediately execute tmux option +tmux_set_window_option_now() { + local _option_name _value + _option_name="$1" + _value="$2" + tmux set-window-option -gq "$_option_name" "$_value" +}