dotfiles/.local/bin/dev
2024-10-03 14:56:44 +02:00

105 lines
2.6 KiB
Bash
Executable file

#!/bin/bash
# Constants
gfetch="gfetch -d churn contributors --no-color-palette --no-title"
ls="eza --header --icons --all --color=always --group-directories-first --hyperlink"
projects_dir="$HOME/dev"
projects_command="find $projects_dir -mindepth 2 -maxdepth 2 -type d"
fzf_command="fzf --height=100%"
yaml_config() {
local yaml_file="$1"
local dest_dir="$2"
local dest_yaml_file="$dest_dir/.tmuxp.yaml"
cp "$yaml_file" "$dest_yaml_file"
sed -i "1i start_directory: $dest_dir\nsession_name: $tab_title" "$dest_yaml_file"
}
tmuxp_load() {
if [[ -n "$TMUX" ]]; then
tmuxp load -d "$selected_dir"
zoxide_score
else
tmuxp load "$selected_dir"
zoxide_score
fi
tmux switch-client -t "$tab_title"
}
handle_tmuxp() {
if [[ -f "$selected_dir/.tmuxp.yaml" ]]; then
tmuxp_load
else
if [[ -d "$XDG_CONFIG_HOME/tmuxp" ]]; then
local yaml_file=$(find "$XDG_CONFIG_HOME/tmuxp" -name "*.yaml" -print0 |
xargs -0 -n 1 basename | sed 's/\.yaml$//' |
fzf --preview "bat --style=numbers --color=always $XDG_CONFIG_HOME/tmuxp/{}.yaml" \
--prompt="Select a session file: ")
if [[ -n "$yaml_file" ]]; then
yaml_config "$XDG_CONFIG_HOME/tmuxp/$yaml_file.yaml" "$selected_dir"
tmuxp_load
else
handle_tmux
fi
fi
fi
}
handle_tmux() {
if [[ -n "$TMUX" ]]; then
tmux new-session -ds "$tab_title" -c "$selected_dir"
tmux switch-client -t "$tab_title"
else
tmux new-session -s "$tab_title" -c "$selected_dir"
fi
zoxide_score
}
handle_kitty() {
kitty @ set-tab-title "$tab_title"
cd "$selected_dir"
zoxide_score
$gfetch
$ls
}
handle_editor() {
if [[ "$EDITOR" == "nvim" || "$EDITOR" == "vim" ]]; then
echo "terminal"
elif [[ "$EDITOR" == "code" || "$EDITOR" == "codium" ]]; then
echo "gui"
fi
}
zoxide_score() {
if command -v zoxide &>/dev/null; then
zoxide add "$selected_dir"
fi
}
selected_dir=$($projects_command | $fzf_command --prompt='Select a directory: ' \
--header='CTRL-P: Projects / CTRL-Z: Zoxide' \
--bind "ctrl-p:reload($projects_command)" \
--bind "ctrl-z:reload(zoxide query -l)" \
--preview "$gfetch {} 2>&1 | grep -v 'Error: Could not find a git repository in' || true && $ls {} || $ls {}")
tab_title=$(basename "$selected_dir")
if [[ -n "$selected_dir" ]]; then
editor_type=$(handle_editor)
if [[ $editor_type == "terminal" ]]; then
if command -v tmux &>/dev/null; then
if command -v tmuxp &>/dev/null; then
handle_tmuxp
else
handle_tmux
fi
elif [[ "$TERM" == "xterm-kitty" ]]; then
handle_kitty
fi
else
$EDITOR -r "$selected_dir"
zoxide_score
fi
fi