From 09d69dc9fc25bb826efcb701a66794b2e3f0bacf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joseph=20Hopfm=C3=BCller?= Date: Tue, 12 Nov 2024 23:43:37 +0100 Subject: [PATCH] zsh config --- .zshrc | 164 +++++++++++++++++++++++++-------------------------------- 1 file changed, 71 insertions(+), 93 deletions(-) diff --git a/.zshrc b/.zshrc index 3fdad81..a9a3d1b 100644 --- a/.zshrc +++ b/.zshrc @@ -1,3 +1,56 @@ +# functions + +# Function to remove duplicates from a specified environment variable +dedup_env_var() { + local var_name="$1" + local var_value=$(eval echo "\$$var_name") + + # Use awk to remove duplicate entries + local deduped_value=$(echo "$var_value" | awk -v RS=: -v ORS=: '!seen[$0]++') + # Remove trailing colon + deduped_value=${deduped_value%:} + + # Export the deduplicated value back to the environment variable + export $var_name="$deduped_value" +} + +# Function to find the .venv directory +function find_venv() { + local dir="$PWD" + + while [[ "$dir" != "/" ]]; do + if [[ -d "$dir/.venv" ]]; then + echo "true $dir/.venv" + return 0 + fi + dir=$(dirname "$dir") + done + + echo "false" + return 1 +} + +# Function that uses the .venv directory found by find_venv +function python_venv() { + local result + result=$(find_venv) + + if [[ "$result" == true* ]]; then + local venv_path="${result#true }" + source "$venv_path/bin/activate" + # echo "activated $venv_path" + else + # echo "No .venv directory found" + + # Check if a virtual environment is currently active + if [[ -n "$VIRTUAL_ENV" ]]; then + deactivate + # echo "deactivated venv" + fi + fi +} + + # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. # Initialization code that may require console input (password prompts, [y/n] # confirmations, etc.) must go above this block; everything else may go below. @@ -6,103 +59,29 @@ if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]] fi # If you come from bash you might have to change your $PATH. -# export PATH=$HOME/bin:/usr/local/bin:$PATH +export PATH="$HOME/bin:/usr/local/bin:$PATH" +export PATH="$HOME/.local/bin:$PATH" # Path to your oh-my-zsh installation. export ZSH="$HOME/.oh-my-zsh" -# Set name of the theme to load --- if set to "random", it will -# load a random theme each time oh-my-zsh is loaded, in which case, -# to know which specific one was loaded, run: echo $RANDOM_THEME -# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes ZSH_THEME="powerlevel10k/powerlevel10k" -# Set list of themes to pick from when loading at random -# Setting this variable when ZSH_THEME=random will cause zsh to load -# a theme from this variable instead of looking in $ZSH/themes/ -# If set to an empty array, this variable will have no effect. -# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) +zstyle ':omz:update' mode reminder # just remind me to update when it's time +zstyle ':omz:update' frequency 7 +ENABLE_CORRECTION="true" -# Uncomment the following line to use case-sensitive completion. -# CASE_SENSITIVE="true" +COMPLETION_WAITING_DOTS="true" -# Uncomment the following line to use hyphen-insensitive completion. -# Case-sensitive completion must be off. _ and - will be interchangeable. -# HYPHEN_INSENSITIVE="true" - -# Uncomment one of the following lines to change the auto-update behavior -# zstyle ':omz:update' mode disabled # disable automatic updates -# zstyle ':omz:update' mode auto # update automatically without asking -# zstyle ':omz:update' mode reminder # just remind me to update when it's time - -# Uncomment the following line to change how often to auto-update (in days). -# zstyle ':omz:update' frequency 13 - -# Uncomment the following line if pasting URLs and other text is messed up. -# DISABLE_MAGIC_FUNCTIONS="true" - -# Uncomment the following line to disable colors in ls. -# DISABLE_LS_COLORS="true" - -# Uncomment the following line to disable auto-setting terminal title. -# DISABLE_AUTO_TITLE="true" - -# Uncomment the following line to enable command auto-correction. -# ENABLE_CORRECTION="true" - -# Uncomment the following line to display red dots whilst waiting for completion. -# You can also set it to another string to have that shown instead of the default red dots. -# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" -# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) -# COMPLETION_WAITING_DOTS="true" - -# Uncomment the following line if you want to disable marking untracked files -# under VCS as dirty. This makes repository status check for large repositories -# much, much faster. -# DISABLE_UNTRACKED_FILES_DIRTY="true" - -# Uncomment the following line if you want to change the command execution time -# stamp shown in the history command output. -# You can set one of the optional three formats: -# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" -# or set a custom format using the strftime function format specifications, # see 'man strftime' for details. -# HIST_STAMPS="mm/dd/yyyy" +HIST_STAMPS="%F %T " -# Would you like to use another custom folder than $ZSH/custom? -# ZSH_CUSTOM=/path/to/new-custom-folder - -# Which plugins would you like to load? -# Standard plugins can be found in $ZSH/plugins/ -# Custom plugins may be added to $ZSH_CUSTOM/plugins/ -# Example format: plugins=(rails git textmate ruby lighthouse) -# Add wisely, as too many plugins slow down shell startup. plugins=(git zsh-autosuggestions zsh-syntax-highlighting virtualenv) source $ZSH/oh-my-zsh.sh # User configuration -# export MANPATH="/usr/local/man:$MANPATH" - -# You may need to manually set your language environment -# export LANG=en_US.UTF-8 - -# Preferred editor for local and remote sessions -# if [[ -n $SSH_CONNECTION ]]; then -# export EDITOR='vim' -# else -# export EDITOR='mvim' -# fi - -# Compilation flags -# export ARCHFLAGS="-arch x86_64" - -# Set personal aliases, overriding those provided by oh-my-zsh libs, -# plugins, and themes. Aliases can be placed here, though oh-my-zsh -# users are encouraged to define aliases within the ZSH_CUSTOM folder. -# For a full list of active aliases, run `alias`. -# # Example aliases # alias zshconfig="mate ~/.zshrc" # alias ohmyzsh="mate ~/.oh-my-zsh" @@ -111,20 +90,19 @@ source $ZSH/oh-my-zsh.sh [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh - -export PATH="/usr/local/cuda-12.4/bin:$PATH" - -export LD_LIBRARY_PATH="/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH" export PYENV_ROOT="$HOME/.pyenv" -[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" +[[ -d "$PYENV_ROOT/bin" ]] && export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" -python_venv() { - MYVENV=./.venv - # when you cd into a folder that contains $MYVENV - [[ -d $MYVENV ]] && source $MYVENV/bin/activate > /dev/null 2>&1 - # when you cd into a folder that doesn't - [[ ! -d $MYVENV ]] && deactivate > /dev/null 2>&1 -} autoload -U add-zsh-hook add-zsh-hook chpwd python_venv + +export VSCODE_ROOT="/mnt/c/Program Files/Microsoft VS Code" +export PATH="$VSCODE_ROOT/bin:$PATH" +export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" + +eval "$(zoxide init --cmd cd zsh)" + +# dedup env vars +dedup_env_var PATH +dedup_env_var LD_LIBRARY_PATH \ No newline at end of file