Files
dotfiles/config/fish/config.fish
T
2026-06-22 11:00:42 +02:00

137 lines
4.3 KiB
Fish

# ==============================================================================
# ENVIRONMENT VARIABLES
# ==============================================================================
# Disable fish greeting
set -g fish_greeting
set -g fish_prompt_pwd_dir_length 999
set -gx XDG_CONFIG_HOME $HOME/.config
set -gx XDG_DATA_HOME $HOME/.local/share
set -gx XDG_CACHE_HOME $HOME/.cache
set -gx XDG_STATE_HOME $HOME/.local/state
set -gx GOOGLE_API_KEY "no"
set -gx GOOGLE_DEFAULT_CLIENT_ID "no"
set -gx GOOGLE_DEFAULT_CLIENT_SECRET "no"
# Core settings
set -gx EDITOR "nvim"
set -gx VISUAL "nvim"
set -gx MANPAGER "nvim +Man!"
set -gx BROWSER firefox
# set -gx TERM xterm-256color
set -gx COLORTERM truecolor
set -gx LANG "en_US.UTF-8"
set -gx LC_ALL "en_US.UTF-8"
# Development
set -gx DEBUG 1
set -gx GOPATH "$HOME/.go"
set -gx GOCACHE "$HOME/.go/cache"
set -gx GOROOT /usr/local/go
set -gx PATH /usr/local/go/bin $GOPATH/bin $PATH
# Direnv
direnv hook fish | source
# ==============================================================================
# FZF configuration
# ==============================================================================
set -gx FZF_DEFAULT_OPTS "
--height 40%
--layout=reverse
--border
--ansi
--preview-window=down:30%
--bind 'ctrl-d:preview-page-down,ctrl-u:preview-page-up'
--color=fg:#ffffff,header:#f38ba8,info:#cba6ac,pointer:#f5e0dc
--color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6ac,hl+:#f38ba8"
set -gx FZF_DEFAULT_COMMAND 'fdfind --exclude={.git,.cache,.xmake,.zig-cache,build,tmp,node_modules,elpa} --type f -H'
# ==============================================================================
# PATH CONFIGURATION
# ==============================================================================
# Fish's 'fish_add_path' is smart: it checks if the dir exists and prevents duplicates.
fish_add_path /var/lib/flatpak/exports/bin
fish_add_path /usr/local/bin
fish_add_path /usr/local/go/bin
fish_add_path $GOPATH/bin
fish_add_path "$HOME/bin"
fish_add_path "$HOME/.local/bin"
fish_add_path "$HOME/.local/share/flatpak/exports/bin"
fish_add_path "$HOME/.npm-global/bin"
fish_add_path "$HOME/.odin/"
# ==============================================================================
# ALIASES & ABBREVIATIONS
# ==============================================================================
# List commands
alias ls='ls -lh --color=auto --group-directories-first'
alias ll='ls -lAh --color=auto --group-directories-first'
alias la='ls -la --color=auto --group-directories-first'
alias l='ls -CF --color=auto'
alias tree='tree --dirsfirst -C'
# Safety aliases
alias rm='rm -I --preserve-root'
alias mv='mv -i'
alias cp='cp -i'
alias ln='ln -i'
# System information
alias df='df -h'
alias du='du -h'
alias free='free -h'
alias bat='bat --theme="ansi" --paging=never'
# Application shortcuts
alias vi='nvim'
alias :q='exit'
alias files='thunar .'
alias fetch='pfetch'
# Custom shortcuts
alias reload='source ~/.config/fish/config.fish'
alias dotf='cd ~/.dotfiles'
alias doti='bash ~/.dotfiles/install.sh -i'
alias dotl='bash ~/.dotfiles/install.sh -l'
alias myip='curl ipinfo.io/ip; echo ""'
alias query='xbps-query -Rs'
alias commits='git log origin/main..HEAD --oneline'
## Basic project picker using mini sessions and neovim
function pp
set project (
find ~/Projects -mindepth 1 -maxdepth 1 -type d |
awk -F/ '{print $NF "\t" $0}' |
fzf --with-nth=1
)
if test -z "$project"
return
end
set project (echo $project | cut -f2)
cd $project && clear
end
# ==============================================================================
# PROMPT COLORS
# ==============================================================================
set -l user_color (set_color green)
set -l host_color (set_color blue)
set -l path_color (set_color cyan)
# Fish's built-in git prompt configuration
set -eg ___fish_git_prompt_char_stateseparator
set -g __fish_git_prompt_show_informative_status 1
set -g __fish_git_prompt_color_branch magenta --bold
set -g __fish_git_prompt_color_stagedstate yellow
set -g __fish_git_prompt_color_invalidstate red
set -g __fish_git_prompt_color_cleanstate green --bold
set -g __fish_git_prompt_separator ' '
set -g __fish_git_prompt_char_dirtystate '+'
set -g __fish_git_prompt_char_stagedstate '●'
set -g __fish_git_prompt_char_untrackedfiles ''