From c7bbc68a92cce293b425ab9b3e5d73588924125e Mon Sep 17 00:00:00 2001 From: Jens Luedicke Date: Sun, 21 Sep 2025 09:34:34 +0200 Subject: [PATCH] Add initial configuration (rcm and zsh) --- rcrc | 3 ++ zshrc | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 rcrc create mode 100644 zshrc diff --git a/rcrc b/rcrc new file mode 100644 index 0000000..f7ebbc2 --- /dev/null +++ b/rcrc @@ -0,0 +1,3 @@ +EXCLUDES="README.md LICENSE .git .gitignore" +DOTFILES_DIRS="$HOME/.dotfiles" +SYMLINK_DIRS="" \ No newline at end of file diff --git a/zshrc b/zshrc new file mode 100644 index 0000000..fec537c --- /dev/null +++ b/zshrc @@ -0,0 +1,139 @@ +export GOPATH=$HOME/go +export PATH="$HOME/.cargo/bin:/opt/homebrew/opt/gnu-sed/libexec/gnubin:$PATH" +# The following lines have been added by Docker Desktop to enable Docker CLI completions. +fpath=(/Users/jens/.docker/completions $fpath) +autoload -Uz compinit +compinit +# End of Docker CLI completions +export PATH="/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/3.4.0/bin:$PATH" +export PATH="$HOME/.local/bin:$PATH" +export PATH="$HOME/.emacs.d/bin:$PATH" +export PERPLEXITY_API_KEY="your-api-key" + +# FZF configuration +# Enable fzf key bindings and fuzzy completion +eval "$(fzf --zsh)" + +# FZF environment variables +export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git' +export FZF_DEFAULT_OPTS=' + --height 40% + --layout=reverse + --border + --preview "bat --color=always --style=numbers --line-range=:500 {}" + --preview-window=right:60%:wrap + --bind "ctrl-/:toggle-preview" + --bind "ctrl-y:execute-silent(echo {} | pbcopy)" +' + +# Use fd for CTRL-T +export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" +export FZF_CTRL_T_OPTS=" + --preview 'bat --color=always --style=numbers --line-range=:500 {}' + --preview-window=right:60%:wrap +" + +# Use fd for ALT-C +export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git' +export FZF_ALT_C_OPTS="--preview 'tree -C {} | head -200'" + +# Better history search with fzf +export FZF_CTRL_R_OPTS=" + --preview 'echo {}' + --preview-window=down:3:wrap + --bind 'ctrl-y:execute-silent(echo {} | pbcopy)' +" + +# FZF-tmux integration +export FZF_TMUX_OPTS='-p80%,60%' + +# Useful aliases with fzf +alias fzp='fzf --preview "bat --color=always --style=numbers --line-range=:500 {}"' +alias fzd='cd $(fd --type d --hidden --follow --exclude .git | fzf --preview "tree -C {} | head -200")' +alias fzv='vim $(fzf --preview "bat --color=always --style=numbers --line-range=:500 {}")' + +# Git + fzf aliases +alias fgb='git branch | fzf | xargs git checkout' +alias fgl='git log --oneline | fzf --preview "git show --color=always {1}" | awk "{print \$1}" | xargs git show' + +# Tmux session switcher with fzf +fts() { + local session + session=$(tmux list-sessions -F "#{session_name}" 2>/dev/null | fzf --preview "tmux list-windows -t {} | column -t" --preview-window=down:20%) && tmux switch-client -t "$session" +} + +# Enhanced Zsh Prompt Configuration +# Enable prompt substitution and colors +setopt PROMPT_SUBST +autoload -U colors && colors + +# Git prompt function +git_prompt_info() { + local ref + ref=$(git symbolic-ref HEAD 2> /dev/null) || \ + ref=$(git rev-parse --short HEAD 2> /dev/null) || return + + # Get git status + local git_status="" + local STATUS=$(git status --porcelain 2> /dev/null | tail -1) + + if [[ -n $STATUS ]]; then + git_status=" %{$fg[yellow]%}✗%{$reset_color%}" + else + git_status=" %{$fg[green]%}✓%{$reset_color%}" + fi + + echo " %{$fg[cyan]%}(${ref#refs/heads/}${git_status}%{$fg[cyan]%})%{$reset_color%}" +} + +# Virtual environment indicator +virtualenv_prompt_info() { + if [[ -n "$VIRTUAL_ENV" ]]; then + echo "%{$fg[magenta]%}($(basename $VIRTUAL_ENV))%{$reset_color%} " + fi +} + +# Exit code indicator +exit_code_prompt() { + echo "%(?.%{$fg[green]%}➜%{$reset_color%}.%{$fg[red]%}➜%{$reset_color%})" +} + +# Directory with truncation +directory_prompt() { + echo "%{$fg[blue]%}%3~%{$reset_color%}" +} + +# Username and hostname for SSH sessions +user_host_prompt() { + if [[ -n "$SSH_CONNECTION" ]]; then + echo "%{$fg[yellow]%}%n@%m%{$reset_color%} " + fi +} + +# Time in 24-hour format +time_prompt() { + echo "%{$fg[gray]%}%T%{$reset_color%}" +} + +# Main prompt +PROMPT='$(user_host_prompt)$(virtualenv_prompt_info)$(directory_prompt)$(git_prompt_info) $(exit_code_prompt) ' + +# Right prompt with time +RPROMPT='$(time_prompt)' + +# Enable command execution time display +function preexec() { + timer=${timer:-$SECONDS} +} + +function precmd() { + if [ $timer ]; then + timer_show=$(($SECONDS - $timer)) + if [ $timer_show -ge 3 ]; then + export RPS1="%{$fg[gray]%}${timer_show}s%{$reset_color%} $(time_prompt)" + else + export RPS1="$(time_prompt)" + fi + unset timer + fi +}