diff --git a/.aliases-linux b/.aliases-linux new file mode 100644 index 0000000..6fca347 --- /dev/null +++ b/.aliases-linux @@ -0,0 +1,28 @@ +alias gti='git' +#alias tmux='tmux -2' +alias less='less -R' +#alias diff='colordiff' +alias dc='cd' +alias glog='git log --oneline --graph --color --all --decorate' +alias ls='ls --color -lvha' +alias lsblk='lsblk -f' +alias nano='vim' +alias mkdir='mkdir -p' +alias home='cd ~' +alias gdb='gdb --batch --ex run --ex bt --ex q --args' +#alias update='sudo pacman -Syuu --needed --noconfirm && pacaur -Syuu --noconfirm' +#alias update='sudo apt-get update && sudo apt-get dist-upgrade -y' +#alias speedtest='speedtest++' +#alias clearpaccache='sudo paccache -r && sudo paccache -ruk1' +#alias cleanpac='sudo pacman -Rnus $(pacman -Qtdq)' +alias createpw='date +%s | sha256sum | base64 | head -c 64 ; echo' +#alias rkupdate='sudo rkhunter --propupd' +#alias huntrk='sudo rkhunter --propupd && sudo rkhunter --check --sk' +#alias iptlist='sudo /sbin/iptables -L -n -v --line-numbers' +#alias iptlistin='sudo /sbin/iptables -L INPUT -n -v --line-numbers' +#alias iptlistout='sudo /sbin/iptables -L OUTPUT -n -v --line-numbers' +#alias iptlistfw='sudo /sbin/iptables -L FORWARD -n -v --line-numbers' +#alias firewall=iptlist +#alias tailscale='/Applications/Tailscale.app/Contents/MacOS/Tailscale' +#alias mtr='sudo mtr' +#alias lsblk='diskutil list' diff --git a/.aliases-mac b/.aliases-mac new file mode 100644 index 0000000..5f54151 --- /dev/null +++ b/.aliases-mac @@ -0,0 +1,28 @@ +alias gti='git' +#alias tmux='tmux -2' +alias less='less -R' +#alias diff='colordiff' +alias dc='cd' +alias glog='git log --oneline --graph --color --all --decorate' +alias ls='ls --color -lvha' +#alias lsblk='lsblk -f' +alias nano='vim' +alias mkdir='mkdir -p' +alias home='cd ~' +alias gdb='gdb --batch --ex run --ex bt --ex q --args' +#alias update='sudo pacman -Syuu --needed --noconfirm && pacaur -Syuu --noconfirm' +#alias update='sudo apt-get update && sudo apt-get dist-upgrade -y' +#alias speedtest='speedtest++' +#alias clearpaccache='sudo paccache -r && sudo paccache -ruk1' +#alias cleanpac='sudo pacman -Rnus $(pacman -Qtdq)' +alias createpw='date +%s | sha256sum | base64 | head -c 64 ; echo' +#alias rkupdate='sudo rkhunter --propupd' +#alias huntrk='sudo rkhunter --propupd && sudo rkhunter --check --sk' +#alias iptlist='sudo /sbin/iptables -L -n -v --line-numbers' +#alias iptlistin='sudo /sbin/iptables -L INPUT -n -v --line-numbers' +#alias iptlistout='sudo /sbin/iptables -L OUTPUT -n -v --line-numbers' +#alias iptlistfw='sudo /sbin/iptables -L FORWARD -n -v --line-numbers' +#alias firewall=iptlist +alias tailscale='/Applications/Tailscale.app/Contents/MacOS/Tailscale' +alias mtr='sudo mtr' +alias lsblk='diskutil list' diff --git a/.bash_profile b/.bash_profile new file mode 100644 index 0000000..158bd5a --- /dev/null +++ b/.bash_profile @@ -0,0 +1,7 @@ +if [ -n "$TMUX" ]; then + # called inside tmux session, do tmux things + . ~/.profile + +fi +# Trigger ~/.bashrc commands +. ~/.bashrc diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..ca5161c --- /dev/null +++ b/.bashrc @@ -0,0 +1,147 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +export PATH=/Users/martin/bin:/Users/martin/bin/ownscripts:/Users/martin/bin/security-scripts:/Users/martin/bin/development:/Users/martin/bin/mysql-scripts:/Users/martin/bin/backup-scripts:/Users/martin/bin/Skripte:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/share/games:/usr/local/sbin:/usr/sbin:/sbin +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 +HISTTIMEFORMAT="%Y-%m-%d %T " + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1="\[\033[0;31m\]\342\224\214\342\224\200\$([[ \$? != 0 ]] && echo \"[\[\033[0;31m\]\342\234\227\[\033[0;37m\]]\342\224\200\")[$(if [[ ${EUID} == 0 ]]; then echo '\[\033[01;31m\]root\[\033[01;33m\]@\[\033[01;96m\]\h'; else echo '\[\033[0;39m\]\u\[\033[01;33m\]@\[\033[01;96m\]\h'; fi)\[\033[0;31m\]]\342\224\200[\[\033[38;5; 13m\]\t\[\033[0;31m\]]\342\224\200[\[\033[0;32m\]\w\[\033[0;31m\]]\n\[\033[0;31m\]\342\224\224\342\224\200\342\224\200\342\225\274 \[\033[0m\]\[\e[01;33m\]\\$\[\e[0m\]" +else + PS1='┌──[\u@\h]─[\t]─[\w]\n└──╼ \$ ' +fi + +# Set 'man' colors +if [ "$color_prompt" = yes ]; then + man() { + env \ + LESS_TERMCAP_mb=$'\e[01;31m' \ + 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' \ + man "$@" + } +fi + +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]\[\033[0;31m\]\342\224\214\342\224\200\$([[ \$? != 0 ]] && echo \"[\[\033[0;31m\]\342\234\227\[\033[0;37m\]]\342\224\200\")[$(if [[ ${EUID} == 0 ]]; then echo '\[\033[01;31m\]root\[\033[01;33m\]@\[\033[01;96m\]\h'; else echo '\[\033[0;39m\]\u\[\033[01;33m\]@\[\033[01;96m\]\h'; fi)\[\033[0;31m\]]\342\224\200[\[\033[38;5;13m\]\t\[\033[0;31m\]]\342\224\200[\[\033[0;32m\]\w\[\033[0;31m\]]\n\[\033[0;31m\]\342\224\224\342\224\200\342\224\200\342\225\274 \[\033[0m\]\[\e[01;33m\]\\$\[\e[0m\]" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + alias dir='dir --color=auto' + alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# some more ls aliases +alias ll='ls -l' +alias la='ls -A' +alias l='ls -CF' +alias em='emacs -nw' +alias dd='dd status=progress' +alias _='sudo' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +if [ -f ~/.aliases ]; then + . ~/.aliases +fi + +export EDITOR=vim + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi + +if [ -d "$HOME/adb-fastboot/platform-tools" ] ; then + export PATH="$HOME/adb-fastboot/platform-tools:$PATH" +fi + +#SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket" +#export SSH_AUTH_SOCK +export NMAP_PRIVILEGED="" + +# open tmux automatically +if ( [ "$HOST" == "serenity" ] || [ "$HOSTNAME" == "serenity" ] ) && [ -z "$TMUX" ]; then + #echo "open Tmux" + tmux attach || tmux new-session +fi diff --git a/.gitignore b/.gitignore index 973ffa0..af749c7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,58 +1,93 @@ -# ---> macOS -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -# ---> ArchLinuxPackages -*.tar -*.tar.* -*.jar +# Compiled source # +################### +*.com +*.class +*.dll *.exe -*.msi +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar *.zip -*.tgz + +# Logs and databases # +###################### *.log -*.log.* -*.sig +*.sql +*.sqlite +**/*.log* -pkg/ -src/ +# OS generated files # +###################### +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db -# ---> Linux -*~ +# Images # +########## +*.jpg +*.gif +*.png +*.svg +*.ico -# temporary files which can be created if a process still has a handle open of a deleted file -.fuse_hidden* +# Video # +######### +*.wmv +*.mpg +*.mpeg +*.mp4 +*.mov +*.flv +*.avi +*.ogv +*.ogg +*.webm -# KDE directory preferences -.directory +# Audio # +######### +*.wav +*.mp3 +*.wma -# Linux trash folder which might appear on any partition or disk -.Trash-* +# Fonts # +######### +*.eot +*.ttf +*.woff -# .nfs files are created when an open file is removed but is still being accessed -.nfs* +# eclipse IDE # +############### +.classpath +.project +.settings +.idea +.metadata +*.iml +*.ipr +# Backup-Files # +################ +**/*~ + +# VIM # +####### +*.swp +*.swo + +# File to inidicate dotfiles are installed # +version.installed \ No newline at end of file diff --git a/.profile b/.profile new file mode 100644 index 0000000..390c5a3 --- /dev/null +++ b/.profile @@ -0,0 +1,3 @@ +if [ -f ~/.bashrc ];then + source ~/.bashrc +fi diff --git a/.screenrc b/.screenrc new file mode 100644 index 0000000..df09f12 --- /dev/null +++ b/.screenrc @@ -0,0 +1,30 @@ +# GNU Screen - main configuration file +# Allow bold colors - necessary for some reason +attrcolor b ".I" + +# Tell screen how to set colors. AB = background, AF=foreground +termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' + +# Enables use of shift-PgUp and shift-PgDn +termcapinfo xterm|xterms|xs|rxvt ti@:te@ + +# Erase background with current bg color +defbce "on" + +# Enable 256 color term +term xterm-256color + +# Cache 30000 lines for scroll back +defscrollback 30000 + +hardstatus alwayslastline +# Very nice tabbed colored hardstatus line +hardstatus string '%{= Kd} %{= Kd}%-w%{= Kr}[%{= KW}%n %t%{= Kr}]%{= Kd}%+w %-= %{KG} %H%{KW}|%{KY}%101`%{KW}|%D %M %d %Y%{= Kc} %C%A%{-}' + +# change command character from ctrl-a to ctrl-b (emacs users may want this) +#escape ^Bb + +# Hide hardstatus: ctrl-a f +bind f eval "hardstatus ignore" +# Show hardstatus: ctrl-a F +bind F eval "hardstatus alwayslastline" diff --git a/.tmux.conf b/.tmux.conf new file mode 100644 index 0000000..17506c6 --- /dev/null +++ b/.tmux.conf @@ -0,0 +1,121 @@ +# Make it use C-a, similar to screen.. +#unbind C-b +#set -g prefix C-y +#set -g prefix C-a +set-option -g prefix C-y +unbind-key C-y +bind-key C-y send-prefix + +# Make TMUX status-position display on top +set-option -g status-position top + +set -g default-terminal "screen-256color" +set -g history-limit 50000 + +# Tmux mouse mode +set-option -g mouse on + +## Enable mouse with 'm' and disable with 'M' +unbind m +bind m \ + set -g mouse on \;\ + display 'Mouse: ON' +unbind M + bind M \ + set -g mouse off \;\ + display 'Mouse: OFF' + +# THEME +set -g status-bg colour235 +set -g status-fg yellow +#set-option -g status-attr dim +#set-window-option -g window-status-current-fg brightred #orange +#set-window-option -g window-status-current-bg colour236 +#set-window-option -g window-status-current-attr bright + +set -g status-interval 60 +#set -sg escape-time 1000 +set-option -g base-index 1 +setw -g aggressive-resize on +set -g status-justify centre +#set -g status-left '#[fg=green]#(whoami)@#H#[default]' +set -g status-left-length 70 +set -g status-left "#[fg=yellow]#(ifconfig | grep 'inet ' | grep -v 127.0.0.1 | awk '{print \"Local \" $2}') #[fg=red]#(ifconfig tun0 | grep 'inet ' | awk '{print \"vpn \" $2}') #(ifconfig ppp0 | grep 'inet ' | awk '{print \"vpn \" $2}')" +# show session name, window & pane number, date and time on right side of status bar +set -g status-right-length 60 +set -g status-right "#[fg=green]#S #I:#P #[fg=yellow]:: %d %b %Y #[fg=green]:: %H:%M %p :: #(date -u | awk '{print $4}')::" +# set pane colors - hilight the active pane +#set-option -g pane-border-fg colour235 #base02 +#set-option -g pane-active-border-fg colour240 #base01 + + +# use PREFIX | to split window horizontally and PREFIX - to split vertically +bind | split-window -h +bind - split-window -v + +# Make the current window the first window +#bind T swap-window -t 1 + +# and use C-h and C-l to cycle thru panes +#bind -r C-h select-window -t :- +#bind -r C-l select-window -t :+ + +bind o copy-mode +bind p paste-buffer + +# Resize window with alt arrow keys +#bind-key -n C-S-Up resize-pane -U 10 +#bind-key -n C-S-Down resize-pane -D 10 +#bind-key -n C-S-Left resize-pane -L 10 +#bind-key -n C-S-Right resize-pane -R 10 + +# Use alt-arrow to switch panes +bind -n M-Left select-pane -L +bind -n M-Right select-pane -R +bind -n M-Up select-pane -U +bind -n M-Down select-pane -D + +# Shift-arrow to switch windows +bind -n S-Left previous-window +bind -n S-Right next-window + + +# Rename window with ctrl a r +#bind-key -r r command-prompt 'rename-window %%' + +# Reorder windows +#bind R \ +# move-window -r\; \ +# display-message "Windows reordered..." + +## pane border and colors +#set-option -g pane-active-border-fg yellow +#set-option -g pane-border-fg white + +# Snychronise panes +bind ^ setw synchronize-panes +#bind -n j send-prefix + +# enable plugins to save sessions +# (Ctrl+A Ctrl+S to Save / Ctrl+A Ctrl+R to Resurrect) +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-sensible' +set -g @plugin 'tmux-plugins/tmux-resurrect' +set -g @plugin 'tmux-plugins/tmux-continuum' + +# automatically restore session +set -g @continuum-restore 'on' +set -g @continuum-boot 'off' + +# enable reload of config +bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded" + +# pass SSH_AUTH_SOCKET +#set-environment -g 'SSH_AUTH_SOCK' ~/.ssh/ssh_auth_sock + +# enable copy-paste +bind C-c run "tmux save-buffer - | xclip -i -sel clipboard" +#bind C-v run "tmux set-buffer "$(xclip -o -sel clipboard)"; tmux paste-buffer" + +# Initialize tmux plugin manager +run '~/.tmux/plugins/tpm/tpm' diff --git a/.vimrc b/.vimrc new file mode 100644 index 0000000..be6a1fb --- /dev/null +++ b/.vimrc @@ -0,0 +1,348 @@ +" execute pathogen#infect() +set mouse= +set ttymouse= +" Allow saving of files as sudo when I forgot to start vim using sudo. +cmap w!! w !sudo tee > /dev/null % + +" Highlight characters over 80 +"augroup vimrc_autocmds +" autocmd BufEnter * highlight OverLength ctermbg=darkgrey guibg=#111111 +" autocmd BufEnter * match OverLength /\%81v.*/ +"augroup END + +" Make Vim able to edit crontab files again. +set backupskip=/tmp/*,/private/tmp/* +set backup " enable backups +set noswapfile " it's 2015, Vim. +set undodir=~/.vim/tmp/undo// " undo files +set backupdir=~/.vim/tmp/backup// " backups +set directory=~/.vim/tmp/swap// " swap files +" Make those folders automatically if they don't already exist. +if !isdirectory(expand(&undodir)) + call mkdir(expand(&undodir), "p") +endif +if !isdirectory(expand(&backupdir)) + call mkdir(expand(&backupdir), "p") +endif +if !isdirectory(expand(&directory)) + call mkdir(expand(&directory), "p") +endif + +" Resize splits when the window is resized +au VimResized * :wincmd = + +set modelines=1 +set showmode +set history=700 +set undofile +set undoreload=10000 +set matchtime=3 +set splitbelow +set splitright +set autowrite +set autoread +set shiftround +set title +set linebreak +set colorcolumn=+1 + +" Enable filetype plugins +filetype plugin on +filetype indent on + +"Always show current position +set ruler + +"Clipboard stuff +set clipboard=unnamedplus + +" Height of the command bar +set cmdheight=2 + +" A buffer becomes hidden when it is abandoned +set hid + +" Configure backspace so it acts as it should act +set backspace=eol,start,indent +set whichwrap+=<,>,h,l + +" Ignore case when searching +set ignorecase + +" When searching try to be smart about cases +set smartcase + +" Highlight search results +set hlsearch + +" Makes search act like search in modern browsers +set incsearch + +" Don't redraw while executing macros (good performance config) +set lazyredraw + +" For regular expressions turn magic on +set magic + +" Show matching brackets when text indicator is over them +set showmatch + +" No annoying sound on errors +set noerrorbells +set novisualbell +set t_vb= + +"http://sunaku.github.io/vim-256color-bce.html +set t_ut= +set tm=500 + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Colors and Fonts +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Sets 256 color mode if the terminal supports it +set t_Co=256 + +" Enable syntax highlighting +syntax enable + +set nu +set background=dark +"let g:solarized_termcolors=256 +" colorscheme brogrammer + +" Set utf8 as standard encoding and en_US as the standard language +set encoding=utf8 + +" Use Unix as the standard file type +set ffs=unix,dos,mac + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Text, tab and indent related +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Use spaces instead of tabs +"set expandtab + +" Be smart when using tabs ;) +"set smarttab + +" 1 tab == 4 spaces +"set shiftwidth=4 +"set tabstop=4 + +" Linebreak on 500 characters +set lbr +set tw=500 + +set ai "Auto indent +set si "Smart indent +set wrap "Wrap lines + + +"""""""""""""""""""""""""""""" +" => Visual mode related +"""""""""""""""""""""""""""""" +" Visual mode pressing * or # searches for the current selection +" Super useful! From an idea by Michael Naumann +vnoremap * :call VisualSelection('f') +vnoremap # :call VisualSelection('b') + + +"""""""""""""""""""""""""""""" +" => Status line +"""""""""""""""""""""""""""""" +" Always show the status line +"set laststatus=1 + +" Format the status line +"set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Moving around, tabs, windows and buffers +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Resize splits +map + - +map - + +map > < +map < > + +" Close the current buffer +map bd :Bclose + +" Close all the buffers +map ba :1,1000 bd! + +" Useful mappings for managing tabs +map tn :tabnew +map to :tabonly +map tc :tabclose +map tm :tabmove + +" Opens a new tab with the current buffer's path +" Super useful when editing files in the same directory +map te :tabedit =expand("%:p:h")/ + +" Switch CWD to the directory of the open buffer +map cd :cd %:p:h:pwd + +" Specify the behavior when switching between buffers +try + set switchbuf=useopen,usetab,newtab + set stal=2 +catch +endtry + +" Return to last edit position when opening files (You want this!) +autocmd BufReadPost * + \ if line("'\"") > 0 && line("'\"") <= line("$") | + \ exe "normal! g`\"" | + \ endif +" Remember info about open buffers on close +set viminfo^=% + +" Vim split options +" Remaps ctrl w + $key to ctrl $key +" ctrl j = move right +nnoremap +" ctrl k = move up +nnoremap +" ctrl l = move down +nnoremap +" ctrl h = move left +nnoremap + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Helper functions +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +function! CmdLine(str) + exe "menu Foo.Bar :" . a:str + emenu Foo.Bar + unmenu Foo +endfunction + +function! VisualSelection(direction) range + let l:saved_reg = @" + execute "normal! vgvy" + + let l:pattern = escape(@", '\\/.*$^~[]') + let l:pattern = substitute(l:pattern, "\n$", "", "") + + if a:direction == 'b' + execute "normal ?" . l:pattern . "^M" + elseif a:direction == 'gv' + call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.') + elseif a:direction == 'replace' + call CmdLine("%s" . '/'. l:pattern . '/') + elseif a:direction == 'f' + execute "normal /" . l:pattern . "^M" + endif + + let @/ = l:pattern + let @" = l:saved_reg +endfunction + + +" Returns true if paste mode is enabled +function! HasPaste() + if &paste + return 'PASTE MODE ' + en + return '' +endfunction + + +" Trailing whitespace {{{ +" Only shown when not in insert mode so I don't go insane. +augroup trailing + au! + au InsertEnter * :set listchars-=trail:⌴ + au InsertLeave * :set listchars+=trail:⌴ +augroup END + +" Make sure Vim returns to the same line when you reopen a file. +augroup line_return + au! + au BufReadPost * + \ if line("'\"") > 0 && line("'\"") <= line("$") | + \ execute 'normal! g`"zvzz' | + \ endif +augroup END + +" Reselect last-pasted text +nnoremap gp `[v`] + +"""""""""""""""""""" +" PATHOGEN PLUGINS " +"""""""""""""""""""" + +" START NERDTree if no files are specified +autocmd StdinReadPre * let s:std_in=1 +autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif + +" Close NERDTree if it's the only window left open +autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif + +" https://github.com/nathanaelkane/vim-indent-guides/issues/20 +let g:indent_guides_exclude_filetypes = ['nerdtree'] +" END NERDTree + +" START Airline +let g:airline#extensions#tabline#enabled = 1 +set laststatus=2 +let g:airline_theme='murmur' +let g:airline#extensions#hunks#enabled=0 +let g:airline#extensions#branch#enabled=1 +" END Airline + +" START windowswap +let g:windowswap_map_keys = 0 "prevent default bindings +nnoremap yw :call WindowSwap#MarkWindowSwap() +nnoremap pw :call WindowSwap#DoWindowSwap() +nnoremap ww :call WindowSwap#EasyWindowSwap() +" END windowswap + +" START ctrlp +set runtimepath^=~/.vim/bundle/ctrlp.vim +" END ctrlp + +" START ansible-vim +let g:ansible_extra_keywords_highlight = 1 +let g:ansible_name_highlight = 'b' +let g:ansible_extra_syntaxes = "sh.vim" + +func! DeleteTrailingWS() + exe "normal mz" + %s/\s\+$//ge + exe "normal `z" +endfunc +autocmd BufWrite * :call DeleteTrailingWS() + +" START vim-hclfmt +let g:hcl_fmt_autosave = 1 +let g:tf_fmt_autosave = 0 +let g:nomad_fmt_autosave = 1 +" END vim-hclfmt + +nmap :call ToggleIndentGuidesSpaces() +function! ToggleIndentGuidesSpaces() + if exists('b:iguides_spaces') + call matchdelete(b:iguides_spaces) + unlet b:iguides_spaces + else + let pos = range(1, &l:textwidth, &l:shiftwidth) + call map(pos, '"\\%" . v:val . "v"') + let pat = '\%(\_^\s*\)\@<=\%(' . join(pos, '\|') . '\)\s' + let b:iguides_spaces = matchadd('CursorLine', pat) + endif +endfunction + +" START vim-hashicorp-terraform +let g:terraform_align = 1 +" END vim-hashicorp-terraform + +" Don't fix no end of line (in case you edit a joplin file) +set nofixendofline + +" Command to overwrite sudo needed for file-save +command W :execute ':silent w !sudo tee % > /dev/null' | :edit! diff --git a/.zshrc-linux b/.zshrc-linux new file mode 100644 index 0000000..61b9394 --- /dev/null +++ b/.zshrc-linux @@ -0,0 +1,119 @@ +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:/usr/local/bin:$PATH +export PATH="$HOME/nsupdate:$HOME/bin:$HOME/bin/ownscripts:$HOME/bin/security-scripts:$HOME/bin/development:$HOME/bin/mysql-scripts:$HOME/bin/backup-scripts:$HOME/bin/Skripte:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/share/games:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/opt/python/libexec/bin:$HOME/.local/lib/python3.10/site-packages:$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="agnoster" +ZSH_THEME="" + +# 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" ) + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="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="dd.mm.yyyy" + +# 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 + archlinux + systemd + ssh-agent) + +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" +# +if [ -f ~/.aliases ]; then + . ~/.aliases +fi +PATH="$HOME/bin:$HOME/nsupdate:$HOME/ansible:$PATH" +#autoload -Uz compinit +#compinit +#PS1="%B%F{magenta}%n%f%b%F{red}@%f%B%F{red}%m%f%b:%F{2}%d%f%F{184} $ %f" +#PROMPT='%{$fg[yellow]%}[%D{%f.%m.%Y} %D{%H:%M:%S}] '$PROMPT +source $HOME/.zshrc-theme +HISTSIZE=1000 +HISTFILESIZE=2000 +export EDITOR=vim diff --git a/.zshrc-linux-agnoster b/.zshrc-linux-agnoster new file mode 100644 index 0000000..9e4c68c --- /dev/null +++ b/.zshrc-linux-agnoster @@ -0,0 +1,272 @@ +# vim:ft=zsh ts=2 sw=2 sts=2 +# +# agnoster's Theme - https://gist.github.com/3712874 +# A Powerline-inspired theme for ZSH +# +# # README +# +# In order for this theme to render correctly, you will need a +# [Powerline-patched font](https://github.com/Lokaltog/powerline-fonts). +# Make sure you have a recent version: the code points that Powerline +# uses changed in 2012, and older versions will display incorrectly, +# in confusing ways. +# +# In addition, I recommend the +# [Solarized theme](https://github.com/altercation/solarized/) and, if you're +# using it on Mac OS X, [iTerm 2](https://iterm2.com/) over Terminal.app - +# it has significantly better color fidelity. +# +# If using with "light" variant of the Solarized color schema, set +# SOLARIZED_THEME variable to "light". If you don't specify, we'll assume +# you're using the "dark" variant. +# +# # Goals +# +# The aim of this theme is to only show you *relevant* information. Like most +# prompts, it will only show git information when in a git working directory. +# However, it goes a step further: everything from the current user and +# hostname to whether the last call exited with an error to whether background +# jobs are running in this shell will all be displayed automatically when +# appropriate. + +### Segment drawing +# A few utility functions to make it easy and re-usable to draw segmented prompts + +CURRENT_BG='NONE' + +case ${SOLARIZED_THEME:-dark} in + light) CURRENT_FG='white';; + *) CURRENT_FG='black';; +esac + +# Special Powerline characters + +() { + local LC_ALL="" LC_CTYPE="en_US.UTF-8" + # NOTE: This segment separator character is correct. In 2012, Powerline changed + # the code points they use for their special characters. This is the new code point. + # If this is not working for you, you probably have an old version of the + # Powerline-patched fonts installed. Download and install the new version. + # Do not submit PRs to change this unless you have reviewed the Powerline code point + # history and have new information. + # This is defined using a Unicode escape sequence so it is unambiguously readable, regardless of + # what font the user is viewing this source code in. Do not replace the + # escape sequence with a single literal character. + # Do not change this! Do not make it '\u2b80'; that is the old, wrong code point. + SEGMENT_SEPARATOR=$'\ue0b0' +} + +# Begin a segment +# Takes two arguments, background and foreground. Both can be omitted, +# rendering default background/foreground. +prompt_segment() { + local bg fg + [[ -n $1 ]] && bg="%K{$1}" || bg="%k" + [[ -n $2 ]] && fg="%F{$2}" || fg="%f" + if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then + echo -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} " + else + echo -n "%{$bg%}%{$fg%} " + fi + CURRENT_BG=$1 + [[ -n $3 ]] && echo -n $3 +} + +# End the prompt, closing any open segments +prompt_end() { + if [[ -n $CURRENT_BG ]]; then + echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR" + else + echo -n "%{%k%}" + fi + echo -n "%{%f%}" + CURRENT_BG='' +} + +### Prompt components +# Each component will draw itself, and hide itself if no information needs to be shown + +# Context: user@hostname (who am I and where am I) +prompt_context() { + if [[ "$USERNAME" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then + #prompt_segment black default "%(!.%{%F{yellow}%}.)%n@%m" + prompt_segment black yellow "%(!.%{%F{yellow}%}.)%D{%f.%m.%Y} - %n@%B%m%b - %D{%H:%M:%S}" + fi +} + +# Git: branch/detached head, dirty status +prompt_git() { + (( $+commands[git] )) || return + if [[ "$(git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]]; then + return + fi + local PL_BRANCH_CHAR + () { + local LC_ALL="" LC_CTYPE="en_US.UTF-8" + PL_BRANCH_CHAR=$'\ue0a0' #  + } + local ref dirty mode repo_path + + if [[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]]; then + repo_path=$(git rev-parse --git-dir 2>/dev/null) + dirty=$(parse_git_dirty) + ref=$(git symbolic-ref HEAD 2> /dev/null) || \ + ref="◈ $(git describe --exact-match --tags HEAD 2> /dev/null)" || \ + ref="➦ $(git rev-parse --short HEAD 2> /dev/null)" + if [[ -n $dirty ]]; then + prompt_segment yellow black + else + prompt_segment green $CURRENT_FG + fi + + local ahead behind + ahead=$(git log --oneline @{upstream}.. 2>/dev/null) + behind=$(git log --oneline ..@{upstream} 2>/dev/null) + if [[ -n "$ahead" ]] && [[ -n "$behind" ]]; then + PL_BRANCH_CHAR=$'\u21c5' + elif [[ -n "$ahead" ]]; then + PL_BRANCH_CHAR=$'\u21b1' + elif [[ -n "$behind" ]]; then + PL_BRANCH_CHAR=$'\u21b0' + fi + + if [[ -e "${repo_path}/BISECT_LOG" ]]; then + mode=" " + elif [[ -e "${repo_path}/MERGE_HEAD" ]]; then + mode=" >M<" + elif [[ -e "${repo_path}/rebase" || -e "${repo_path}/rebase-apply" || -e "${repo_path}/rebase-merge" || -e "${repo_path}/../.dotest" ]]; then + mode=" >R>" + fi + + setopt promptsubst + autoload -Uz vcs_info + + zstyle ':vcs_info:*' enable git + zstyle ':vcs_info:*' get-revision true + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' stagedstr '✚' + zstyle ':vcs_info:*' unstagedstr '±' + zstyle ':vcs_info:*' formats ' %u%c' + zstyle ':vcs_info:*' actionformats ' %u%c' + vcs_info + echo -n "${${ref:gs/%/%%}/refs\/heads\//$PL_BRANCH_CHAR }${vcs_info_msg_0_%% }${mode}" + fi +} + +prompt_bzr() { + (( $+commands[bzr] )) || return + + # Test if bzr repository in directory hierarchy + local dir="$PWD" + while [[ ! -d "$dir/.bzr" ]]; do + [[ "$dir" = "/" ]] && return + dir="${dir:h}" + done + + local bzr_status status_mod status_all revision + if bzr_status=$(bzr status 2>&1); then + status_mod=$(echo -n "$bzr_status" | head -n1 | grep "modified" | wc -m) + status_all=$(echo -n "$bzr_status" | head -n1 | wc -m) + revision=${$(bzr log -r-1 --log-format line | cut -d: -f1):gs/%/%%} + if [[ $status_mod -gt 0 ]] ; then + prompt_segment yellow black "bzr@$revision ✚" + else + if [[ $status_all -gt 0 ]] ; then + prompt_segment yellow black "bzr@$revision" + else + prompt_segment green black "bzr@$revision" + fi + fi + fi +} + +prompt_hg() { + (( $+commands[hg] )) || return + local rev st branch + if $(hg id >/dev/null 2>&1); then + if $(hg prompt >/dev/null 2>&1); then + if [[ $(hg prompt "{status|unknown}") = "?" ]]; then + # if files are not added + prompt_segment red white + st='±' + elif [[ -n $(hg prompt "{status|modified}") ]]; then + # if any modification + prompt_segment yellow black + st='±' + else + # if working copy is clean + prompt_segment green $CURRENT_FG + fi + echo -n ${$(hg prompt "☿ {rev}@{branch}"):gs/%/%%} $st + else + st="" + rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g') + branch=$(hg id -b 2>/dev/null) + if `hg st | grep -q "^\?"`; then + prompt_segment red black + st='±' + elif `hg st | grep -q "^[MA]"`; then + prompt_segment yellow black + st='±' + else + prompt_segment green $CURRENT_FG + fi + echo -n "☿ ${rev:gs/%/%%}@${branch:gs/%/%%}" $st + fi + fi +} + +# Dir: current working directory +prompt_dir() { + prompt_segment green $CURRENT_FG '%d' +} + +# Virtualenv: current working virtualenv +prompt_virtualenv() { + if [[ -n "$VIRTUAL_ENV" && -n "$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then + prompt_segment blue black "(${VIRTUAL_ENV:t:gs/%/%%})" + fi +} + +# Status: +# - was there an error +# - am I root +# - are there background jobs? +prompt_status() { + local -a symbols + + [[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}✘" + [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡" + [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}⚙" + + [[ -n "$symbols" ]] && prompt_segment black default "$symbols" +} + +#AWS Profile: +# - display current AWS_PROFILE name +# - displays yellow on red if profile name contains 'production' or +# ends in '-prod' +# - displays black on green otherwise +prompt_aws() { + [[ -z "$AWS_PROFILE" || "$SHOW_AWS_PROMPT" = false ]] && return + case "$AWS_PROFILE" in + *-prod|*production*) prompt_segment red yellow "AWS: ${AWS_PROFILE:gs/%/%%}" ;; + *) prompt_segment green black "AWS: ${AWS_PROFILE:gs/%/%%}" ;; + esac +} + +## Main prompt +build_prompt() { + RETVAL=$? + prompt_status + prompt_virtualenv + prompt_aws + prompt_context + prompt_dir + prompt_git + prompt_bzr + prompt_hg + prompt_end +} + +PROMPT='%{%f%b%k%}$(build_prompt) ' diff --git a/.zshrc-mac b/.zshrc-mac new file mode 100644 index 0000000..3fb5882 --- /dev/null +++ b/.zshrc-mac @@ -0,0 +1,117 @@ +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:/usr/local/bin:$PATH +export PATH="/Applications/jtr/run:/usr/local/opt/coreutils/libexec/gnubin:$HOME/bin:$HOME/nsupdate:$HOME/ansible:$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="agnoster" +ZSH_THEME="" + +# 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" ) + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="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="dd.mm.yyyy" + +# 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 + ssh-agent + docker + docker-compose + macos) + +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" +if [ -f ~/.aliases ]; then + . ~/.aliases +fi + +#autoload -Uz compinit +#compinit +source $HOME/.zshrc-theme +HISTSIZE=1000 +HISTFILESIZE=2000 +export EDITOR=vim \ No newline at end of file diff --git a/.zshrc-mac-agnoster b/.zshrc-mac-agnoster new file mode 100644 index 0000000..4188493 --- /dev/null +++ b/.zshrc-mac-agnoster @@ -0,0 +1,272 @@ +# vim:ft=zsh ts=2 sw=2 sts=2 +# +# agnoster's Theme - https://gist.github.com/3712874 +# A Powerline-inspired theme for ZSH +# +# # README +# +# In order for this theme to render correctly, you will need a +# [Powerline-patched font](https://github.com/Lokaltog/powerline-fonts). +# Make sure you have a recent version: the code points that Powerline +# uses changed in 2012, and older versions will display incorrectly, +# in confusing ways. +# +# In addition, I recommend the +# [Solarized theme](https://github.com/altercation/solarized/) and, if you're +# using it on Mac OS X, [iTerm 2](https://iterm2.com/) over Terminal.app - +# it has significantly better color fidelity. +# +# If using with "light" variant of the Solarized color schema, set +# SOLARIZED_THEME variable to "light". If you don't specify, we'll assume +# you're using the "dark" variant. +# +# # Goals +# +# The aim of this theme is to only show you *relevant* information. Like most +# prompts, it will only show git information when in a git working directory. +# However, it goes a step further: everything from the current user and +# hostname to whether the last call exited with an error to whether background +# jobs are running in this shell will all be displayed automatically when +# appropriate. + +### Segment drawing +# A few utility functions to make it easy and re-usable to draw segmented prompts + +CURRENT_BG='NONE' + +case ${SOLARIZED_THEME:-dark} in + light) CURRENT_FG='white';; + *) CURRENT_FG='black';; +esac + +# Special Powerline characters + +() { + local LC_ALL="" LC_CTYPE="en_US.UTF-8" + # NOTE: This segment separator character is correct. In 2012, Powerline changed + # the code points they use for their special characters. This is the new code point. + # If this is not working for you, you probably have an old version of the + # Powerline-patched fonts installed. Download and install the new version. + # Do not submit PRs to change this unless you have reviewed the Powerline code point + # history and have new information. + # This is defined using a Unicode escape sequence so it is unambiguously readable, regardless of + # what font the user is viewing this source code in. Do not replace the + # escape sequence with a single literal character. + # Do not change this! Do not make it '\u2b80'; that is the old, wrong code point. + SEGMENT_SEPARATOR=$'\ue0b0' +} + +# Begin a segment +# Takes two arguments, background and foreground. Both can be omitted, +# rendering default background/foreground. +prompt_segment() { + local bg fg + [[ -n $1 ]] && bg="%K{$1}" || bg="%k" + [[ -n $2 ]] && fg="%F{$2}" || fg="%f" + if [[ $CURRENT_BG != 'NONE' && $1 != $CURRENT_BG ]]; then + echo -n " %{$bg%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} " + else + echo -n "%{$bg%}%{$fg%} " + fi + CURRENT_BG=$1 + [[ -n $3 ]] && echo -n $3 +} + +# End the prompt, closing any open segments +prompt_end() { + if [[ -n $CURRENT_BG ]]; then + echo -n " %{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR" + else + echo -n "%{%k%}" + fi + echo -n "%{%f%}" + CURRENT_BG='' +} + +### Prompt components +# Each component will draw itself, and hide itself if no information needs to be shown + +# Context: user@hostname (who am I and where am I) +prompt_context() { + if [[ "$USERNAME" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then + #prompt_segment black yellow "%(!.%{%F{yellow}%}.)%n@%m" + prompt_segment black yellow "%(!.%{%F{yellow}%}.)%D{%f.%m.%Y} %D{%H:%M:%S}" + fi +} + +# Git: branch/detached head, dirty status +prompt_git() { + (( $+commands[git] )) || return + if [[ "$(git config --get oh-my-zsh.hide-status 2>/dev/null)" = 1 ]]; then + return + fi + local PL_BRANCH_CHAR + () { + local LC_ALL="" LC_CTYPE="en_US.UTF-8" + PL_BRANCH_CHAR=$'\ue0a0' #  + } + local ref dirty mode repo_path + + if [[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]]; then + repo_path=$(git rev-parse --git-dir 2>/dev/null) + dirty=$(parse_git_dirty) + ref=$(git symbolic-ref HEAD 2> /dev/null) || \ + ref="◈ $(git describe --exact-match --tags HEAD 2> /dev/null)" || \ + ref="➦ $(git rev-parse --short HEAD 2> /dev/null)" + if [[ -n $dirty ]]; then + prompt_segment yellow black + else + prompt_segment green $CURRENT_FG + fi + + local ahead behind + ahead=$(git log --oneline @{upstream}.. 2>/dev/null) + behind=$(git log --oneline ..@{upstream} 2>/dev/null) + if [[ -n "$ahead" ]] && [[ -n "$behind" ]]; then + PL_BRANCH_CHAR=$'\u21c5' + elif [[ -n "$ahead" ]]; then + PL_BRANCH_CHAR=$'\u21b1' + elif [[ -n "$behind" ]]; then + PL_BRANCH_CHAR=$'\u21b0' + fi + + if [[ -e "${repo_path}/BISECT_LOG" ]]; then + mode=" " + elif [[ -e "${repo_path}/MERGE_HEAD" ]]; then + mode=" >M<" + elif [[ -e "${repo_path}/rebase" || -e "${repo_path}/rebase-apply" || -e "${repo_path}/rebase-merge" || -e "${repo_path}/../.dotest" ]]; then + mode=" >R>" + fi + + setopt promptsubst + autoload -Uz vcs_info + + zstyle ':vcs_info:*' enable git + zstyle ':vcs_info:*' get-revision true + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' stagedstr '✚' + zstyle ':vcs_info:*' unstagedstr '±' + zstyle ':vcs_info:*' formats ' %u%c' + zstyle ':vcs_info:*' actionformats ' %u%c' + vcs_info + echo -n "${${ref:gs/%/%%}/refs\/heads\//$PL_BRANCH_CHAR }${vcs_info_msg_0_%% }${mode}" + fi +} + +prompt_bzr() { + (( $+commands[bzr] )) || return + + # Test if bzr repository in directory hierarchy + local dir="$PWD" + while [[ ! -d "$dir/.bzr" ]]; do + [[ "$dir" = "/" ]] && return + dir="${dir:h}" + done + + local bzr_status status_mod status_all revision + if bzr_status=$(bzr status 2>&1); then + status_mod=$(echo -n "$bzr_status" | head -n1 | grep "modified" | wc -m) + status_all=$(echo -n "$bzr_status" | head -n1 | wc -m) + revision=${$(bzr log -r-1 --log-format line | cut -d: -f1):gs/%/%%} + if [[ $status_mod -gt 0 ]] ; then + prompt_segment yellow black "bzr@$revision ✚" + else + if [[ $status_all -gt 0 ]] ; then + prompt_segment yellow black "bzr@$revision" + else + prompt_segment green black "bzr@$revision" + fi + fi + fi +} + +prompt_hg() { + (( $+commands[hg] )) || return + local rev st branch + if $(hg id >/dev/null 2>&1); then + if $(hg prompt >/dev/null 2>&1); then + if [[ $(hg prompt "{status|unknown}") = "?" ]]; then + # if files are not added + prompt_segment red white + st='±' + elif [[ -n $(hg prompt "{status|modified}") ]]; then + # if any modification + prompt_segment yellow black + st='±' + else + # if working copy is clean + prompt_segment green $CURRENT_FG + fi + echo -n ${$(hg prompt "☿ {rev}@{branch}"):gs/%/%%} $st + else + st="" + rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g') + branch=$(hg id -b 2>/dev/null) + if `hg st | grep -q "^\?"`; then + prompt_segment red black + st='±' + elif `hg st | grep -q "^[MA]"`; then + prompt_segment yellow black + st='±' + else + prompt_segment green $CURRENT_FG + fi + echo -n "☿ ${rev:gs/%/%%}@${branch:gs/%/%%}" $st + fi + fi +} + +# Dir: current working directory +prompt_dir() { + prompt_segment red $CURRENT_FG '%d' +} + +# Virtualenv: current working virtualenv +prompt_virtualenv() { + if [[ -n "$VIRTUAL_ENV" && -n "$VIRTUAL_ENV_DISABLE_PROMPT" ]]; then + prompt_segment red black "(${VIRTUAL_ENV:t:gs/%/%%})" + fi +} + +# Status: +# - was there an error +# - am I root +# - are there background jobs? +prompt_status() { + local -a symbols + + [[ $RETVAL -ne 0 ]] && symbols+="%{%F{red}%}✘" + [[ $UID -eq 0 ]] && symbols+="%{%F{yellow}%}⚡" + [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="%{%F{cyan}%}⚙" + + [[ -n "$symbols" ]] && prompt_segment black default "$symbols" +} + +#AWS Profile: +# - display current AWS_PROFILE name +# - displays yellow on red if profile name contains 'production' or +# ends in '-prod' +# - displays black on green otherwise +prompt_aws() { + [[ -z "$AWS_PROFILE" || "$SHOW_AWS_PROMPT" = false ]] && return + case "$AWS_PROFILE" in + *-prod|*production*) prompt_segment red yellow "AWS: ${AWS_PROFILE:gs/%/%%}" ;; + *) prompt_segment green black "AWS: ${AWS_PROFILE:gs/%/%%}" ;; + esac +} + +## Main prompt +build_prompt() { + RETVAL=$? + prompt_status + prompt_virtualenv + prompt_aws + prompt_context + prompt_dir + prompt_git + prompt_bzr + prompt_hg + prompt_end +} + +PROMPT='%{%f%b%k%}$(build_prompt) ' diff --git a/README.md b/README.md deleted file mode 100644 index d23d95a..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# dotfiles - diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..5e175b7 --- /dev/null +++ b/install.sh @@ -0,0 +1,105 @@ +#!/bin/bash +## Author: crunchie +## Description: Script to automatically link up certain files in home-directory to pre-built versions. +## Backups of currently installed versions are made in a .dtbak-file. +## Links the .zshrc, .zshrc-theme and .aliases file to different files depending on whether a linux or mac platform is in use. +## install routine checks whether .oh-my-zsh exists in users home-folder - and install .oh-my-zsh unattended if not. +## if .oh-my-zsh is installed the version will be updated to the current version. + +# function to check if mac or linux +check_os () { + which sw_vers > /dev/null 2>&1 + if [ $? == 0 ]; then + os=mac + else + os=linux + fi +} + +# function to unlink symlink or mv original file to dtbak +unlink_mv_file () { + local file=$1 + if [ -e $file ] || [ -L $file ]; then + if [ -L $file ]; then + unlink $file + fi + if [ -f $file ]; then + mv -f $file{,.dtbak} + fi + fi +} + +# function to check if the file exists in the home directory +# return parameters: 2 = file exists, 3 = file does not exist +check_exist () { + local file=$1 + if [ -e ~/$file ] || [ -L ~/$file ]; then + return 2 + else + return 3 + fi +} + +# function to check whether .oh-my-zsh is installed. +# installation is checked by looking if ~/.oh-my-zsh exists. +check_oh-my-zsh () { + if [ -d ~/.oh-my-zsh ]; then + return 2 + else + return 3 + fi +} + +## EXECUTE begins here + +# Check whether linux or macos is used +check_os + +# Backup dotfiles and link to local versions +for file in $(find ~/dotfiles -maxdepth 1 -name ".*" ! -name ".aliases*" ! -name ".zshrc*" ! -name ".zcompdum*" ! -name ".*history*" -type f -printf "%f\n" ); do + check_exist $file + stat_dot=$? + if [ $stat_dot == 2 ]; then + unlink_mv_file ~/$file + ln -s ~/dotfiles/$file ~/$file + elif [ $stat_dot == 3 ]; then + ln -s ~/dotfiles/$file ~/$file + fi +done + +# Unlink or move existing .zshrc config or .zshrc-theme or .aliases file +for file in .zshrc .zshrc-theme .aliases +do + check_exist $file + if [ $? == 2 ]; then + unlink_mv_file ~/$file + fi +done + +# check if .oh-my-zsh is installed - install if not, update if it is installed. +check_oh-my-zsh +inst=$? +if [ $inst == 3 ]; then + sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended +else + git -C ~/.oh-my-zsh/ pull +fi + +# link the .zshrc-file in home-directory depending on the underlying os +if [ $os == linux ];then + ln -s ~/dotfiles/.zshrc-linux ~/.zshrc + ln -s ~/dotfiles/.zshrc-linux-agnoster ~/.zshrc-theme + ln -s ~/dotfiles/.aliases-linux ~/.aliases + echo ".zshrc, .zshrc-theme and .aliases linked for linux." +elif [ $os == mac ];then + ln -s ~/dotfiles/.zshrc-mac ~/.zshrc + ln -s ~/dotfiles/.zshrc-mac-agnoster ~/.zshrc-theme + ln -s ~/dotfiles/.aliases-mac ~/.aliases + echo ".zshrc, .zshrc-theme and .aliases linked for mac" +else + echo "Unknown OS - no .zshrc, .zshrc-theme or .aliases linked." +fi + +echo "Installation done." +touch ~/dotfiles/version.installed +exit 0 \ No newline at end of file diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 0000000..b4169ff --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,68 @@ +#!/bin/bash +## Author: crunchie +## Description: Script to remove any symlinks to dotfiles and restore existing .dtbak-files + +check_location () { + if [ `pwd` == "$HOME/dotfiles" ]; then + echo "Please leave dotfile folder to uninstall dotfiles." + exit 2 + fi +} + +# function to unlink symlink or mv .dtbak-file to original name +unlink_file () { + local file=$1 + if [ -e $file ]; then + if [ -L $file ]; then + unlink $file + fi + fi +} + +# function to check if the file exists in the home directory +# return parameters: 2 = file exists, 3 = file does not exist +check_exist () { + local file=$1 + if [ -e ~/$file ]; then + return 2 + else + return 3 + fi +} + +## EXECUTE begins here + +# check if user is currently inside dotfiles-folder +check_location + +# Unlink any links in ~ and mv .dtbak-files to original location +for file in $(find ~/dotfiles -maxdepth 1 -name ".*" ! -name ".zshrc*" ! -name ".zcompdum*" ! -name ".*history*" -type f -printf "%f\n" ); do + check_exist ~/$file.dtbak + retlink=$? + if [ $retlink == 2 ]; then + unlink_file ~/$file + mv -f ~/$file{.dtbak,} + elif [ $retlink == 3 ]; then + unlink_file ~/$file + fi +done + +# Unlink or move existing .zshrc config or .zshrc-theme +for file in .zshrc .zshrc-theme +do + check_exist ~/$file.dtbak + retconf=$? + if [ $retconf == 2 ]; then + unlink_file ~/$file + mv -f ~/$file{.dtbak,} + elif [ $retconf == 3 ]; then + unlink_file ~/$file + fi +done + +# Remove dotfiles-folder in home-directory. +rm -rf $HOME/dotfiles + +rm ~/dotfiles/version.installed +echo "Removal done." +exit 0 \ No newline at end of file