aboutsummaryrefslogtreecommitdiff
path: root/Common/zshrc
blob: 87f7b7c715cafe6a358d77f8de60a14d11efae71 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# 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.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${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:$HOME/.local/bin:$PATH:$HOME/go/bin
export KEYTIMEOUT=1

# Check if env setup file exists
if [ ! -f ~/.zsh_env_setup ]; then
	echo "export ZSH=$HOME/.oh-my-zsh" > ~/.zsh_env_setup
    echo "DEFAULT_USER=$USER" >> ~/.zsh_env_setup
    echo "export GIT_EDITOR=\"nvim\"" >> ~/.zsh_env_setup
    echo "export GIT_AUTHOR_NAME=\"jakobst1n\"" >> ~/.zsh_env_setup
    echo "export GIT_AUTHOR_EMAIL=\"jakob.stendahl@outlook.com\"" >> ~/.zsh_env_setup
fi

# Source env setup file
source ~/.zsh_env_setup

# Source powerlevel10k theme
case "$OSTYPE" in
    darwin*)
        source /usr/local/opt/powerlevel10k/powerlevel10k.zsh-theme;;
    linux*)
        ZSH_THEME="powerlevel10k/powerlevel10k";;
esac

COMPLETION_WAITING_DOTS="true"

ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=7,bold"

# Setup plugins
plugins=(
  git
  zsh-autosuggestions
  zsh-syntax-highlighting
  #zsh-vi-mode
)

# zsh-vi-mode-setup
#ZVM_CURSOR_STYLE_ENABLED=false
# zvm_config() {
#     ZVM_INSERT_MODE_CURSOR=$ZVM_CURSOR_BLOCK
#     ZVM_NORMAL_MODE_CURSOR=$ZVM_CURSOR_UNDERLINE
#     ZVM_VISUAL_MODE_CURSOR=$ZVM_CURSOR_UNDERLINE
#     ZVM_VISUAL_LINE_MODE_CURSOR=$ZVM_CURSOR_UNDERLINE
#     ZVM_OPPEND_MODE_CURSOR=$ZVM_CURSOR_BLINKING_BLOCK
# }

# Setup oh-my-zsh
source $ZSH/oh-my-zsh.sh

# Modify locale and path
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

# Set editor
export EDITOR="nvim"

# Enable vim keybindings (This is enabled using zsh-vi-mode now.
# bindkey -v

# Add aliases
alias lsp="ps -ax | grep"
alias lsa="ls -la"
alias lsg="ls | grep"
alias lsag="ls -la | grep"
alias ls="tput setaf 3 && echo \"'lsa' for 'ls -la', \n'lsg' for 'ls | grep',\n'lsag' for 'ls -la | grep',\n'lsp' for 'ps -ax |grep'\" && tput sgr0 && ls"

alias _vi=$(which vi)
alias _vim=$(which vim)
alias vi=nvim
alias vim=nvim

# man pages in colors
man() {
    LESS_TERMCAP_md=$'\e[01;31m' \
    LESS_TERMCAP_me=$'\e[0m' \
    LESS_TERMCAP_se=$'\e[0m' \
    LESS_TERMCAP_so=$'\e[01;44;33m' \
    LESS_TERMCAP_ue=$'\e[0m' \
    LESS_TERMCAP_us=$'\e[01;32m' \
    command man "$@"
}

# Make tmux window title show the ssh hostname
# Make short hostname only if its not an IP address
__tm_get_hostname(){
    local HOST="$(echo $* | rev | cut -d ' ' -f 1 | rev)"
    if echo $HOST | grep -P "^([0-9]+\.){3}[0-9]+" -q; then
        echo $HOST
    else
        echo $HOST| cut -d . -f 1
    fi
}

__tm_get_current_window(){
    tmux list-windows| awk -F : '/\(active\)$/{print $1}'
}

# Rename window according to __tm_get_hostname and then restore it after the command
__tm_command() {
    if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=| cut -d : -f 1)" = "tmux" ]; then
        __tm_window=$(__tm_get_current_window)
        # Use current window to change back the setting. If not it will be applied to the active window
        trap "tmux set-window-option -t $__tm_window automatic-rename on 1>/dev/null" EXIT HUP INT QUIT PIPE TERM
        tmux rename-window "$(__tm_get_hostname $*)"
    	command "$@"
        tmux set-window-option -t $__tm_window automatic-rename on 1>/dev/null
	else
    	command "$@"
    fi
}

ssh() {
    __tm_command ssh "$@"
}

ec2ssh() {
    __tm_command ec2ssh "$@"
}

[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

case "$OSTYPE" in
    darwin*)
        path+=("$(readlink /Users/$DEFAULT_USER/bin)")
        path+=("/Library/TeX/texbin")
        path+=("/usr/local/share/dotnet")
        path+=("/usr/local/sbin")
        path+=("/Users/jakobstendahl/.deta/bin")
        path+=("/Applications/Racket v8.2/bin")
        path+=("/Users/jakobstendahl/Library/Python/3.9/bin/")
        export PATH

        alias krak='/Applications/GitKraken.app/Contents/MacOS/GitKraken -p "$(PWD)" &>> /dev/null &'

        #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
        export SDKMAN_DIR="/Users/jakobstendahl/.sdkman"
        [[ -s "/Users/jakobstendahl/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/jakobstendahl/.sdkman/bin/sdkman-init.sh"
    ;;
    linux*)
        alias pbcopy='xsel --clipboard --input'
        alias pbpaste='xsel --clipboard --output'
    ;;
esac

# start only one ssh-agent and reuse the created one
# this is used for sway, although keys added do not persist on reboot
SSH_DIR="$HOME"
if ! pgrep -u "$USER" ssh-agent > /dev/null; then
    ssh-agent > "$SSH_DIR/ssh-agent.env"
fi
source "$SSH_DIR/ssh-agent.env" > /dev/null

[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh