{ pkgs, lib, config, ... }: let cfg = config.collinux.terminal.programs.tmux; scriptsDir = "~/.config/tmux/scripts"; scripts.battery = '' energy_now=$(cat /sys/class/power_supply/BAT0/energy_now) energy_full=$(cat /sys/class/power_supply/BAT0/energy_full) percentage=$((energy_now * 100 / energy_full)) printf "%.0f%%" "$percentage" ''; scripts.sessionizer = '' FZF_DEFAULT_OPTS="--color bg:#1E1E2E,bg+:#313244,border:#313244,fg:#CDD6F4,fg+:#CDD6F4,header:#F38BA8,hl:#F38BA8,hl+:#F38BA8,info:#CBA6F7,label:#CDD6F4,marker:#B4BEFE,pointer:#F5E0DC,prompt:#CBA6F7,selected-bg:#45475A,spinner:#F5E0DC" projects=" $(find $HOME/projects -maxdepth 1 -mindepth 1 -type d) $HOME/Documents/brain2.0 $HOME/Music $HOME/nixos " if [ $# -eq 1 ]; then selected="$1" else selected="$(echo "$projects" | fzf --tmux --style=minimal --info=hidden $FZF_DEFAULT_OPTS)" fi [ -z "$selected" ] && exit session_name="$(basename "$selected" | tr '.' '_')" if tmux list-sessions | grep -q "^$session_name:"; then # session already exists, switch to it tmux switch -t "$session_name" else # session doesn't exist, create it and switch to it tmux new-session -ds "$session_name" -c "$selected" tmux switch -t "$session_name" fi ''; scripts.cleanSessions = '' current="$(tmux display-message -p '#S')" tmux list-sessions -F '#S' | while read -r line; do if [[ "$line" != "$current" && "$line" =~ ^[[:digit:]]+$ ]]; then tmux kill-session -t "$line" fi done ''; scripts.bar = '' text="#c6d0f5" text_dark="#7F849C" blue="#b3befe" green="#a6d189" red="#f38ba8" bg_dark="#181825" bg_light="#1E1E2E" tset() { tmux set -gq "$@" } tset status on tset status-position bottom tset status-justify absolute-centre tset status-bg $bg_light tset status-left-style fg=$green tset status-left "  #{client_session} " tset window-status-style fg=$text_dark tset window-status-format "#I:#W" tset window-status-current-style fg=$blue,bold tset window-status-current-format "#I:#W" tset window-status-separator " " tset status-right-style fg=$red tset status-right "#(${scriptsDir}/battery.sh)" ## pane borders tset pane-border-style fg=$bg_dark,bg=$bg_dark tset pane-active-border-style fg=$bg_dark,bg=$bg_dark ## pane backgrounds # Set the foreground/background color for the active window tset window-active-style bg=$bg_light # Set the foreground/background color for all other windows tset window-style bg=$bg_dark ''; tmux-conf = '' set -g mouse on # bell set -g visual-activity off set -g visual-bell off set -g visual-silence off setw -g monitor-activity off set -g bell-action none # Panes bind-key -n C-w kill-pane bind -n C-Enter if -F '#{e|>:#{e|/:#{pane_width},#{pane_height}},2.5}' { split-window -h -c '#{pane_current_path}' } { split-window -v -c '#{pane_current_path}' } unbind -n MouseDown3Pane ## disable right click menu bind-key -n M-z resize-pane -Z ## Pane zoom # Windows bind-key -n C-t new-window -c '#{pane_current_path}' bind-key -n C-Tab next-window bind-key -n C-S-Tab previous-window # doesn't work in foot :( set -g renumber-windows on set -g allow-rename off # Statusbar set-hook -g client-attached 'if -F "#{==:#{session_windows},1}" { set status off } { set status on }' set-hook -g window-linked 'if -F "#{==:#{session_windows},1}" { set status off } { set status on }' set-hook -g window-unlinked 'if -F "#{==:#{session_windows},1}" { set status off } { set status on }' ${ if (cfg.theme == "catppuccin") then "run-shell '${scriptsDir}/bar.sh'" else "" } # Sessions set-hook -ag client-detached 'run-shell ${scriptsDir}/clean-sessions.sh' set-hook -ag client-session-changed 'run-shell ${scriptsDir}/clean-sessions.sh' bind-key -n C-f run-shell "${scriptsDir}/sessionizer.sh" bind-key -n C-g display-popup -E -w 80% -h 80% -x C -y C -d "#{pane_current_path}" "${pkgs.lazygit}/bin/lazygit" ''; in lib.mkIf cfg.enable { hjem.users."${config.collinux.user.name}" = { files = let e = text: { inherit text; executable = true; }; in { ".config/tmux/scripts/battery.sh" = e scripts.battery; ".config/tmux/scripts/sessionizer.sh" = e scripts.sessionizer; ".config/tmux/scripts/clean-sessions.sh" = e scripts.cleanSessions; ".config/tmux/scripts/bar.sh" = e scripts.bar; ".config/tmux/tmux.conf".text = tmux-conf; }; packages = [pkgs.tmux]; }; }