From fce4a85960eef8d2bd471e8ec5324a2a339b326e Mon Sep 17 00:00:00 2001 From: pika Date: Tue, 1 Apr 2025 19:35:08 +0200 Subject: [PATCH] changed tmux conf --- .gitmodules | 2 +- dotfiles/.config/tmux/.gitignore | 1 + dotfiles/.config/tmux/.gitmodules | 4 + dotfiles/.config/tmux/.stow-local-ignore | 6 + dotfiles/.config/tmux/.tmux.conf | 157 +++++++++ dotfiles/.config/tmux/README.md | 2 + install.sh | 414 +++++++++++------------ tmux | 1 - 8 files changed, 378 insertions(+), 209 deletions(-) create mode 100644 dotfiles/.config/tmux/.gitignore create mode 100644 dotfiles/.config/tmux/.gitmodules create mode 100644 dotfiles/.config/tmux/.stow-local-ignore create mode 100644 dotfiles/.config/tmux/.tmux.conf create mode 100644 dotfiles/.config/tmux/README.md delete mode 160000 tmux diff --git a/.gitmodules b/.gitmodules index d2aa84f..b21fcf7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,7 +7,7 @@ url = https://git.k4li.de/dotfiles/zsh.git branch = main [submodule "tmux"] - path = tmux + path = dotfiles/.config/tmux url = https://git.k4li.de/dotfiles/tmux.git branch = main [submodule "dotfiles/.config/nvim"] diff --git a/dotfiles/.config/tmux/.gitignore b/dotfiles/.config/tmux/.gitignore new file mode 100644 index 0000000..b78112a --- /dev/null +++ b/dotfiles/.config/tmux/.gitignore @@ -0,0 +1 @@ +.tmux/plugins/ diff --git a/dotfiles/.config/tmux/.gitmodules b/dotfiles/.config/tmux/.gitmodules new file mode 100644 index 0000000..598f034 --- /dev/null +++ b/dotfiles/.config/tmux/.gitmodules @@ -0,0 +1,4 @@ +[submodule "Tmux-Plugin Manager"] + path = .tmux/plugins/tpm + url = https://github.com/tmux-plugins/tpm + branch = master diff --git a/dotfiles/.config/tmux/.stow-local-ignore b/dotfiles/.config/tmux/.stow-local-ignore new file mode 100644 index 0000000..e647e48 --- /dev/null +++ b/dotfiles/.config/tmux/.stow-local-ignore @@ -0,0 +1,6 @@ +\.git +\.gitignore +\.gitmodules +^/README.* +^/LICENCE.* +^/COPYING diff --git a/dotfiles/.config/tmux/.tmux.conf b/dotfiles/.config/tmux/.tmux.conf new file mode 100644 index 0000000..26aac8a --- /dev/null +++ b/dotfiles/.config/tmux/.tmux.conf @@ -0,0 +1,157 @@ +# ─────────────────────────────────────────────────────────────────────────── +# General tmux Settings +# ─────────────────────────────────────────────────────────────────────────── + +# ─< Enable 256 color support for tmux >────────────────────────────────────────────────── +set-option -sa terminal-overrides ",xterm-256color*:Tc" + +set -s escape-time 3 + +# ─< Enable mouse support (for scrolling, resizing, etc.) >─────────────────────────────── +set -g mouse on + +# Set the prefix key to C-Space instead of default C-b +unbind C-b + +# ─< set the prefix to "C-Space" >──────────────────────────────────────────────────────── +set -g prefix C-Space +bind C-Space send-prefix +bind h copy-mode + +set -g visual-activity on +set -g visual-bell on +set -g status-keys vi +# ─< set v for starting selection in copy mode >────────────────────────────────────────── +bind -T copy-mode-vi v send -X begin-selection + +# ─< Reload tmux configuration without restarting tmux >────────────────────────────────── +bind r source-file ~/.tmux.conf \; display-message "Config reloaded!" + +# ─< Use C-h and C-l to switch between panes >──────────────────────────────────────────── +bind -n C-h select-pane -L +bind -n C-l select-pane -R +bind -n C-f resize-pane -Z + + +# Ensure that when prefix is pressed, the mode indicator is shown +set -g mode-keys vi # Use vi keybindings in copy mode +set -g status-left-length 30 # Limit length of the left status line +set -g status-right-length 60 # Limit length of the right status line + +# ─< Start windows and panes at index 1 instead of 0 >──────────────────────────────────── +set -g base-index 1 +set -g pane-base-index 1 +set-window-option -g pane-base-index 1 +set-option -g renumber-windows on + +# set -g status-right '#{prefix_highlight} | 󰃭 %d.%m.%Y |  %H:%M' + +# prompt to display when tmux prefix key is pressed +set -g @mode_indicator_prefix_prompt ' 󱙝 ' + +# prompt to display when tmux is in copy mode +set -g @mode_indicator_copy_prompt '  ' + +# prompt to display when tmux has synchronized panes +set -g @mode_indicator_sync_prompt '  ' + +# prompt to display when tmux is in normal mode +set -g @mode_indicator_empty_prompt ' 󰊠 ' + +# style values for prefix prompt +set -g @mode_indicator_prefix_mode_style 'bg=#fe8019,fg=#1d2021' + +# style values for copy prompt +set -g @mode_indicator_copy_mode_style 'bg=cyan,fg=#1d2021' + +# style values for sync prompt +set -g @mode_indicator_sync_mode_style 'bg=red,fg=#1d2021' + +# style values for empty prompt +set -g @mode_indicator_empty_mode_style 'bg=#fabd2f,fg=#1d2021' + +# ────────────────────────────────< theme - minimal config >──────────────────────────────── +# set -g @plugin 'niksingh710/minimal-tmux-status' +# set -g @minimal-tmux-fg "#1d2021" +# set -g @minimal-tmux-bg "#fabd2f" +# set -g @minimal-tmux-indicator-str " 󰌽 $USER " +# set -g @minimal-tmux-indicator true +# set -g @minimal-tmux-status "bottom" +# +# # Enables or disables the left and right status bar +# set -g @minimal-tmux-right true +# set -g @minimal-tmux-left true +# +# # expanded icon (fullscreen icon) +# set -g @minimal-tmux-expanded-icon "󰊓 " +# +# # on all tabs (default is false) +# # false will make it visible for the current tab only +# set -g @minimal-tmux-show-expanded-icons-for-all-tabs true +# +# # To make the selection box rounded () or edged <> +# # Default is nothing, when set to true default is edged +# set -g @minimal-tmux-use-arrow false +# set -g @minimal-tmux-right-arrow "#[fg=#fabd2f]#[bg=#1d2021]" +# set -g @minimal-tmux-left-arrow "#[fg=#fabd2f]#[bg=#1d2021]" +# +# # Not recommended to change these values +# set -g @minimal-tmux-status-right "#[fg=#fabd2f]#[bg=#1d2021]#[fg=#1d2021]#[bg=#fabd2f]󰃭 %d.%m.%Y -  %H:%M#[fg=#fabd2f]#[bg=black]" +# # set -g @minimal-tmux-status-right "%d.%m.%Y" +# # set -g @minimal-tmux-status-left "refer to code" +# +# # To add or remove extra text in status bar +# set -g @minimal-tmux-status-right-extra "#[fg=#fb4934] #S" +# set -g @minimal-tmux-status-left-extra "" +# +# # If getting strings cut in left status or right +# # Here 20 is the length of the characters in the string +# set -g status-right-length 20 +# set -g status-left-length 20 +# ───────────────────────────────────< minimal --- end >───────────────────────────────── + +# ────────────────────────────────< theme - gruvbox config >──────────────────────────────── +# set -g @plugin 'egel/tmux-gruvbox' # Gruvbox theme for tmux +set -g @plugin 'https://git.k4li.de/mirrors/tmux-gruvbox' +set -g @tmux-gruvbox 'dark256' # Can be 'dark', 'dark256', 'light', 'light256' +set -g @tmux-gruvbox-left-status-a '#{tmux_mode_indicator}' +set -g @tmux-gruvbox-right-status-z "$USER@#h " # Hostname and tmux mode indicator +set -g @tmux-gruvbox-right-status-x '#[fg=yellow] %H:%M' # Time format 24H +set -g @tmux-gruvbox-right-status-y '󰃭 %d.%m.%Y' # Date format (e.g., 30.01.2024) + +# ───────────────────────────────────< gruvbox --- end >───────────────────────────────── + +# ──────────────────────────────< theme - gruvbox 2 - config >────────────────────────────── +# set -g @plugin 'l-lin/tmux-colorscheme' + +# set -g @tmux-colorscheme-show-upload-speed true +# set -g @tmux-colorscheme-show-download-speed true +# set -g @tmux-colorscheme-show-prefix-highlight true +# set -g @tmux-colorscheme-show-battery true +# set -g @tmux-colorscheme-show-cpu true +# set -g @tmux-colorscheme-show-cpu-temp true +# set -g @tmux-colorscheme-show-ram true + +# set -g @tmux-colorscheme "gruvbox-dark" +# ──────────────────────────────────< gruvbox 2 --- end >──────────────────────────────── + +# ─────────────────────────────────────────────────────────────────────────── +# Key Bindings +# ─────────────────────────────────────────────────────────────────────────── + +# # ────────────────────────────────────< status configs >──────────────────────────────────── + +# ───────────────────────────────────────< plugins >───────────────────────────────────── +set -g @plugin 'nhdaly/tmux-better-mouse-mode' +set -g @plugin 'tmux-plugins/tmux-sensible' # Sensible tmux defaults +set -g @plugin 'tmux-plugins/tmux-yank' # Yank (copy-paste) support +set -g @plugin 'b0o/tmux-autoreload' # Auto-reload tmux config when updated +set -g @plugin 'MunifTanjim/tmux-mode-indicator' +# set -g @plugin 'tmux-plugins/tmux-prefix-highlight' +set -g @plugin 'tmux-plugins/tpm' + +if "test ! -d ~/.tmux/plugins/tpm" \ + "run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'" + +# Initialize TPM (Tmux Plugin Manager) +run '~/.tmux/plugins/tpm/tpm' diff --git a/dotfiles/.config/tmux/README.md b/dotfiles/.config/tmux/README.md new file mode 100644 index 0000000..666eeb2 --- /dev/null +++ b/dotfiles/.config/tmux/README.md @@ -0,0 +1,2 @@ +# tmux + diff --git a/install.sh b/install.sh index f4bcdc7..927db0b 100755 --- a/install.sh +++ b/install.sh @@ -9,284 +9,284 @@ BOLD='\033[1m' NC='\033[0m' # No Color echo_error() { - printf "${BOLD}${RED}ERROR: ${NC}${RED}%s${NC}\n" "$1" >&2 + printf "${BOLD}${RED}ERROR: ${NC}${RED}%s${NC}\n" "$1" >&2 } echo_info() { - printf "${BOLD}${CYAN}INFO: ${NC}${CYAN}%s${NC}\n" "$1" + printf "${BOLD}${CYAN}INFO: ${NC}${CYAN}%s${NC}\n" "$1" } echo_warning() { - printf "${BOLD}${YELLOW}WARNING: ${NC}${YELLOW}%s${NC}\n" "$1" + printf "${BOLD}${YELLOW}WARNING: ${NC}${YELLOW}%s${NC}\n" "$1" } echo_note() { - printf "${BOLD}${LIGHT_GREEN}NOTE: ${NC}${LIGHT_GREEN}%s${NC}\n" "$1" + printf "${BOLD}${LIGHT_GREEN}NOTE: ${NC}${LIGHT_GREEN}%s${NC}\n" "$1" } # ─< Check if the given command exists silently >───────────────────────────────────────── command_exists() { - command -v "$@" >/dev/null 2>&1 + command -v "$@" >/dev/null 2>&1 } # ─< Check if the user is root and set sudo variable if necessary >─────────────────────── check_root() { - if [ "$(id -u)" -ne 0 ]; then - if command_exists sudo; then - echo_info "User is not root. Using sudo for privileged operations." - _sudo="sudo" - else - echo_error "No sudo found and you're not root! Can't install packages." - return 1 - fi - else - echo_info "Root access confirmed." - _sudo="" - fi + if [ "$(id -u)" -ne 0 ]; then + if command_exists sudo; then + echo_info "User is not root. Using sudo for privileged operations." + _sudo="sudo" + else + echo_error "No sudo found and you're not root! Can't install packages." + return 1 + fi + else + echo_info "Root access confirmed." + _sudo="" + fi } # ─< Distribution detection and installation >──────────────────────────────────────── get_packager() { - if [ -e /etc/os-release ]; then - echo_info "Detecting distribution..." - . /etc/os-release + if [ -e /etc/os-release ]; then + echo_info "Detecting distribution..." + . /etc/os-release - ID=$(printf "%s" "$ID" | tr '[:upper:]' '[:lower:]') - ID_LIKE=$(printf "%s" "$ID_LIKE" | tr '[:upper:]' '[:lower:]') - case "$ID" in - ubuntu | pop) _install() { $_sudo apt-get install --assume-yes "$@"; } ;; - debian) _install() { $_sudo apt-get install --assume-yes "$@"; } ;; - fedora) _install() { $_sudo dnf install -y "$@"; } ;; - alpine) _install() { $_sudo apk add "$@"; } ;; - arch | archcraft | manjaro | garuda | endeavour) _install() { $_sudo pacman -S --noconfirm "$@"; } ;; - opensuse*) _install() { $_sudo zypper in -y "$@"; } ;; - *) - if echo "$ID_LIKE" | grep -q "debian"; then - _install() { $_sudo apt-get install --assume-yes "$@"; } - elif echo "$ID_LIKE" | grep -q "ubuntu"; then - _install() { $_sudo apt-get install --assume-yes "$@"; } - elif echo "$ID_LIKE" | grep -q "arch"; then - _install() { $_sudo pacman -S --noconfirm "$@"; } - elif echo "$ID_LIKE" | grep -q "fedora"; then - _install() { $_sudo dnf install -y "$@"; } - elif echo "$ID_LIKE" | grep -q "suse"; then - _install() { $_sudo zypper in -y "$@"; } - else - echo_error "Unsupported distribution: $ID" - return 1 - fi - ;; - esac - else - echo_error "Unable to detect distribution. /etc/os-release not found." - return 1 - fi + ID=$(printf "%s" "$ID" | tr '[:upper:]' '[:lower:]') + ID_LIKE=$(printf "%s" "$ID_LIKE" | tr '[:upper:]' '[:lower:]') + case "$ID" in + ubuntu | pop) _install() { $_sudo apt-get install --assume-yes "$@"; } ;; + debian) _install() { $_sudo apt-get install --assume-yes "$@"; } ;; + fedora) _install() { $_sudo dnf install -y "$@"; } ;; + alpine) _install() { $_sudo apk add "$@"; } ;; + arch | archcraft | manjaro | garuda | endeavour) _install() { $_sudo pacman -S --noconfirm "$@"; } ;; + opensuse*) _install() { $_sudo zypper in -y "$@"; } ;; + *) + if echo "$ID_LIKE" | grep -q "debian"; then + _install() { $_sudo apt-get install --assume-yes "$@"; } + elif echo "$ID_LIKE" | grep -q "ubuntu"; then + _install() { $_sudo apt-get install --assume-yes "$@"; } + elif echo "$ID_LIKE" | grep -q "arch"; then + _install() { $_sudo pacman -S --noconfirm "$@"; } + elif echo "$ID_LIKE" | grep -q "fedora"; then + _install() { $_sudo dnf install -y "$@"; } + elif echo "$ID_LIKE" | grep -q "suse"; then + _install() { $_sudo zypper in -y "$@"; } + else + echo_error "Unsupported distribution: $ID" + return 1 + fi + ;; + esac + else + echo_error "Unable to detect distribution. /etc/os-release not found." + return 1 + fi } silentexec() { - "$@" >/dev/null 2>&1 + "$@" >/dev/null 2>&1 } __pre_stow__() { - echo_note "__pre_stow__" - conf="$HOME/.config" - bak_dir="$HOME/.bak" - dirs=( - "btop" - "zsh" - "yazi" - "nvim" - "ranger" - "lf" - ) + echo_note "__pre_stow__" + conf="$HOME/.config" + bak_dir="$HOME/.bak" + dirs=( + "btop" + "zsh" + "yazi" + "tmux" + "nvim" + "ranger" + "lf" + ) - if [ ! -d "$bak_dir" ]; then - echo_info "backup dir created at $bak_dir" && - silentexec mkdir "$bak_dir" - else - echo_info "Backup dir already present, clearing now" && - rm -rf "${bak_dir:?}/*" - fi + if [ ! -d "$bak_dir" ]; then + echo_info "backup dir created at $bak_dir" && + silentexec mkdir "$bak_dir" + else + echo_info "Backup dir already present, clearing now" && + rm -rf "${bak_dir:?}/*" + fi - for _dirs in "${dirs[@]}"; do - if [ -d "$conf/$_dirs" ]; then - mv -f "$conf/$_dirs" "$bak_dir" - fi - done + for _dirs in "${dirs[@]}"; do + if [ -d "$conf/$_dirs" ]; then + mv -f "$conf/$_dirs" "$bak_dir" + fi + done - h_files=( - ".zshrc" - ".zshenv" - ".tmux.conf" - ) + h_files=( + ".zshrc" + ".zshenv" + ) - h_dirs=( - ".tmux" - ".zsh" - ) + h_dirs=( + ".tmux" + ".zsh" + ) - for _f in "${h_files[@]}"; do - if [ -f "$HOME/$_f" ]; then - mv -f "$HOME/$_f" "$bak_dir" && echo_info "Moved $_f to $bak_dir" - fi - done + for _f in "${h_files[@]}"; do + if [ -f "$HOME/$_f" ]; then + mv -f "$HOME/$_f" "$bak_dir" && echo_info "Moved $_f to $bak_dir" + fi + done - for _d in "${h_dirs[@]}"; do - if [ -d "$HOME/$_d" ]; then - mv -f "$HOME/$_d" "$bak_dir" && echo_info "Moved $_d to $bak_dir" - fi - done + for _d in "${h_dirs[@]}"; do + if [ -d "$HOME/$_d" ]; then + mv -f "$HOME/$_d" "$bak_dir" && echo_info "Moved $_d to $bak_dir" + fi + done - if [ -d "$HOME/.local/share/fastfetch/" ]; then - mv -f "$HOME/.local/share/fastfetch" "$bak_dir" - fi + if [ -d "$HOME/.local/share/fastfetch/" ]; then + mv -f "$HOME/.local/share/fastfetch" "$bak_dir" + fi } askThings() { - # echo_info "Choose a menu - [r]ofi || [t]ofi" - # read -r askMenu