diff --git a/bashrc b/bashrc index d2c42ee..ea597d2 100644 --- a/bashrc +++ b/bashrc @@ -23,5 +23,71 @@ stty -ixon # Enable Vi editing mode set -o vi -PS1='\[\033[00;34m\]┌─╼ \[\033[00;33m\]\$ \[\033[01;35m\]\u\[\033[00;34m\]@\[\033[01;35m\]\h\[\033[01;34m\] `date +%d.%m.%y` \[\033[01;35m\]\w\[\033[00m\] +git__prompt () { + git rev-parse --show-toplevel > /dev/null 2>&1 + if [ $? = 0 ] + then + branch=`git branch | grep -Po '(?<=\* )[[:alnum:]]*'` + modif=`git status --short 2>/dev/null | grep -Po '^\s*M' | wc -l` + untracked=`git status --short 2>/dev/null | grep -Po '^\?\?' | wc -l` + added=`git status --short 2>/dev/null | grep -Po '^\s*A' | wc -l` + deleted=`git status --short 2>/dev/null | grep -Po '^\s*D' | wc -l` + stat=`git branch -vv | grep -P '^\*' | grep -Po '\[.*\]'` + ahead=`echo $stat | grep -Po '(?<=ahead )\d*'` + behind=`echo $stat | grep -Po '(?<=behind )\d*'` + gray='\033[01;30m' + blue='\033[01;34m' + yellow='\033[01;33m' + red='\033[01;31m' + green='\033[01;32m' + + if [ -z $branch ] + then + branch='#'`git rev-parse --short HEAD` + fi + if [ $branch = 'master' ] + then + echo -ne " $blue$branch" + elif [ ${branch:0:1} = '#' ] + then + echo -ne " $red$branch" + else + echo -ne " $yellow$branch" + fi + + if [ $modif = 0 ] + then + echo -ne # "$gray:\033[01;36m$modif" # No modified files + else + echo -ne "$gray:\033[01;33m$modif" # Modified files + fi + if [ $added -ne 0 ] + then + echo -ne "${green}+$added" + fi + if [ $deleted -ne 0 ] + then + echo -ne "${red}-$deleted" + fi + if [ $untracked -ne 0 ] + then + echo -ne "${red}*" + fi + + if [ -z $ahead ] && [ -z $behind ] + then + echo -ne "" # Nothing to do here + elif [ -z $ahead ] + then + echo -ne "${gray}:${yellow}↓${behind}" + elif [ -z $behind ] + then + echo -ne "${gray}:${green}↑${ahead}" + else + echo -ne "${gray}:${red}↓${behind}${yellow}↑${ahead}" + fi + fi +} + +PS1='\[\033[00;34m\]┌─╼ \[\033[00;33m\]\$ \[\033[01;35m\]\u\[\033[00;34m\]@\[\033[01;35m\]\h\[\033[01;34m\] `date +%d.%m.%y` \[\033[01;35m\]\w`git__prompt`\[\033[00m\] \[\033[00;34m\]└╼ \[\033[00m\]' diff --git a/conky.conf b/conky.conf new file mode 100644 index 0000000..a1f4da2 --- /dev/null +++ b/conky.conf @@ -0,0 +1,75 @@ +-- vim: set filetype=lua :miv -- +conky.config = { + double_buffer = true, + update_interval = 1, + alignment = 'bottom_right', + gap_x = 100 + 320, + gap_y = 100 + 200, + own_window = true, + own_window_title = 'conky', + own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager', + own_window_argb_visual = true, + own_window_transparent = true, + border_inner_margin = 8, + background = true, + border_width = 1, + cpu_avg_samples = 2, + draw_borders = false, + draw_graph_borders = true, + draw_outline = false, + draw_shades = false, + use_xft = true, + font = 'Quicksand:size=14', + minimum_height = 5, + minimum_width = 250, + net_avg_samples = 2, + no_buffers = false, + out_to_console = false, + out_to_stderr = false, + extra_newline = false, + stippled_borders = 0, + uppercase = false, + use_spacer = 'none', + show_graph_scale = false, + show_graph_range = false, + default_color = '#666666', + color1 = "#664444", + color2 = "#888888", + color3 = "#663333" +} +conky.text = [[$color3${time %Y-%m-%d} +$color1${voffset -10}${font Quicksand:size=40}${time %H:%M}$font$color +${color2}Uptime:$color $alignr$uptime +# +${color3}Stats $hr$color +${color2}ip:$color $alignr${texeci 3 wget http://darkwiiplayer.com/api/ip --no-check-certificate -qO - } +${color2}vpn:$color $alignr${execi 2 expressvpn status | grep -Po 'Not connected|(?<=Connected to).*$'} +# +#${color3}Location $hr$color +#${color2}ip:$color $alignr${execi 2 ~/.bin/location} +# +${color3}Ping $hr +${color2}Google: $color$alignr${execi 2 ping google.de -c 1 | grep -Po '(?<=time=).*'} +${color2}Server: $color$alignr${execi 2 ping darkwiiplayer.com -c 1 | grep -Po '(?<=time=).*'} +# +${color3}CPU $hr +$color$cpu%$color2 CPU Usage +$color${cpubar 8}$color +${color2}Frequency:$color $alignr$freq_g GHz +# +${color3}Memory $hr$color +$color$memperc%${color2} RAM Usage +$color${membar 8}$color +$mem / $memmax +${color2}Processes:$color $processes ${color2}Running:$color $running_processes +# +${color3}Storage $hr +${color2}root $alignr$color${fs_used /}/${fs_size /} +$color${fs_bar 8 /} +${color2}data $alignr$color${fs_used /data}/${fs_size /data} +$color${fs_bar 8 /data} +# +${color3}Networking $hr +${color2}Up:$color ${upspeed enp3s0} ${color2} - Down:$color ${downspeed enp3s0} +${font Hack:size=10}$color2$alignc${execi 1000 whoami}@${execi 1000 hostname} +]] diff --git a/git.vim b/git.vim new file mode 100644 index 0000000..9ba8e4e --- /dev/null +++ b/git.vim @@ -0,0 +1,209 @@ +" ┌─────────────────┐ " +" └─┬─┬───┬─┬───┬─┬─┘ " +" │ │ │ │ │ │ " +" │ │ │ │ │ │ " +" ┌─┴─┴───┴─┴───┴─┴─┐ " +" ┌┘ Git Stuff └┐ " +" └───────────────────┘ " + +" Find the root of a git repository +function! s:gitroot() + let l:ret = substitute(system('git rev-parse --show-toplevel'), '\n\_.*', '', '') + if v:shell_error + throw l:ret + else + return l:ret + end +endf + +function! s:git_root(path) + let l:path = fnamemodify(a:path, ':p') + let l:wd = getcwd() + if isdirectory(l:path) + exec 'cd '.a:path + elseif filereadable(l:path) + exec 'cd '.fnamemodify(l:path, ':h') + else + return 0 + endif + let l:ret = substitute(system('git rev-parse --show-toplevel'), '\n\_.*', '', '') + if v:shell_error + echom l:ret + exec 'cd '.l:wd + return 0 + else + exec 'cd '.l:wd + return l:ret + end + exec 'cd '.l:wd +endf + +" Returns an array containing chronologically sorted commits +function! s:git_history() + if exists("b:git_history") + if b:git_history[0]+10 > localtime() + return b:git_history[1] + end + end + + if exists("b:git_original_file") " Is this already a file@revision buffer? + let l:fname = b:git_original_file + else + let l:fname = substitute(expand("%"), "\\\\", "/", "g") + end + let l:commits = system('git log --format="%h" '.l:fname) + let l:hist = split(l:commits, "\n") + let b:git_history = [localtime(), l:hist] + + return l:hist +endfun + +function! s:git_first() + if &modified + throw "File has unsaved modifications!" + end + call s:file_at_revision(get(s:git_history(), -1)) +endfun + +function! s:git_last() + if &modified + throw "File has unsaved modifications!" + end + call s:file_at_revision(get(s:git_history(), 1, "HEAD")) +endfun + +function! s:git_info() + if !exists("b:git_revision_hash") || !exists("b:git_original_file") + echo "Not a file@revision buffer!" + return + end + echo system("git show --no-patch ".b:git_revision_hash) +endfun + +function! s:git_next() + if !exists("b:git_revision_hash") || !exists("b:git_original_file") + echo "Error 01: Not a file@revision buffer!" + return + end + let l:history = s:git_history() + let l:idx = index(l:history, b:git_revision_hash) + if l:idx == -1 + echo "Error 02" + return + end + let l:new_revision = get(l:history, l:idx-1, "LAST") + if l:new_revision=="LAST" + throw "Already at last revision!" + else + call s:file_at_revision(l:new_revision) + end +endfun + +function! s:git_prev() + if !exists("b:git_revision_hash") || !exists("b:git_original_file") + let l:new_revision = s:git_history()[0] + else + let l:history = s:git_history() + let l:idx = index(l:history, b:git_revision_hash) + if l:idx == -1 + echo "Error 03: cannot find revision ".b:git_revision_hash + return + end + let l:new_revision = get(l:history, l:idx+1, "FIRST") + end + if l:new_revision=="FIRST" + throw "Already at earliest revision!" + else + call s:file_at_revision(l:new_revision) + end +endfun + +function! s:file_at_revision(rev) + let l:pos = getpos(".") + if exists("b:git_original_file") " Is this already a file@revision buffer? + let l:fname = b:git_original_file + let l:ftail = fnamemodify(b:git_original_file, ":t") + else + let l:fname = expand("%") + let l:ftail = expand("%:t") + end + let l:fname = substitute(l:fname, "\\\\", "/", "g") + let l:ftype = &filetype + + ene! + set modifiable + silent exec "file ".l:ftail."@".a:rev + exec "r!git show ".a:rev.":".l:fname + 1,1del + let l:pos[0] = bufnr('.') + call setpos('.', l:pos) + setl nomodifiable + setl buftype=nofile + setl bufhidden=delete + let &filetype = l:ftype + + let b:git_original_file = l:fname + let b:git_revision_hash = a:rev +endfun + +function! s:git_diff(...) + if a:0 + vert bot split + call s:file_at_revision(a:1) + diffthis + au BufUnload diffoff! + exec "normal \\" + diffthis + call s:git_info() + else + if exists("b:git_revision_hash") + call s:git_diff(get(s:git_history(), index(s:git_history(), b:git_revision_hash)+1, "NIL")) + else + call s:git_diff(get(s:git_history(), 0, "HEAD")) + end + end +endfun + +function! s:git_blame() + let l:name = expand('%') + let l:line = getpos('.')[1] + let l:char = getpos('.')[2]+59 + let l:type = &filetype + enew + set modifiable + let &filetype = l:type + set buftype=nofile + set bufhidden=delete + set nowrap + silent exec "file Blame: ".l:name + keepjumps exec 'r !git blame '.l:name + keepjumps 0,0del " + set nomodifiable + keepjumps call setpos('.', [0, l:line, l:char, 0]) +endfun + +command! Blame try + \| call s:gitroot() | call git_blame() + \| catch | echo 'Not a git repo!' + \| endtry +command! GitNext try + \| call s:gitroot() | call git_next() | call s:git_info() + \| catch | echo 'Not a git repo!' + \| endtry +command! GitPrev call git_prev() | call s:git_info() +command! GitFirst call git_first() | call s:git_info() +command! GitLast call git_last() | call s:git_info() +command! GitInfo call git_info() +command! -nargs=1 GitCheckout call file_at_revision() +command! -nargs=? GitCompare try + \| call s:gitroot() | call git_diff() + \| catch | echo 'Not a git repo!' + \| endtry +command! Uncommited try + \| call s:gitroot() | call git_diff() + \| catch | echo 'Not a git repo!' + \| endtry +command! GitRoot try + \| echo gitroot() + \| catch | echo 'Not a git repository' + \| endtry diff --git a/vimrc b/vimrc index 2c6a2d2..559ec37 100644 --- a/vimrc +++ b/vimrc @@ -1,6 +1,8 @@ " vim: set bufhidden=delete list noexpandtab :miv " "!!! makes use of marker ' +let s:root = expand(':p:h') + set nocompatible """""""""""""""" @@ -368,197 +370,7 @@ command! -nargs=* Hex call hex() command! -range=% LuaCompile ,w !luac -l -p - -" ┌─────────────────┐ -" └─┬─┬───┬─┬───┬─┬─┘ -" │ │ │ │ │ │ -" │ │ │ │ │ │ -" ┌─┴─┴───┴─┴───┴─┴─┐ -" ┌┘ Git Stuff └┐ -" └───────────────────┘ - -function! s:gitroot() - let s:ret = substitute(system('git rev-parse --show-toplevel'), '\n\_.*', '', '') - if v:shell_error - throw s:ret - else - return s:ret - end -endf - -function! s:git_history() - if exists("b:git_history") - if b:git_history[0]+10 > localtime() - return b:git_history[1] - end - end - - if exists("b:git_original_file") " Is this already a file@revision buffer? - let l:fname = b:git_original_file - else - let l:fname = substitute(expand("%"), "\\\\", "/", "g") - end - let l:commits = system('git log --format="%h" '.l:fname) - let l:hist = split(l:commits, "\n") - let b:git_history = [localtime(), l:hist] - - return l:hist -endfun - -function! s:git_first() - if &modified - echo "Save your changes first!" - return - end - let l:history = s:git_history() - call s:file_at_revision(get(l:history, -1)) -endfun - -function! s:git_last() - if &modified - echo "Save your changes first!" - return - end - let l:history = s:git_history() - call s:file_at_revision(get(l:history, 1, "HEAD")) -endfun - -function! s:git_info() - if !exists("b:git_revision_hash") || !exists("b:git_original_file") - echo "Not a file@revision buffer!" - return - end - echo system("git show --no-patch ".b:git_revision_hash) -endfun - -function! s:git_next() - if !exists("b:git_revision_hash") || !exists("b:git_original_file") - echo "Error 01: Not a file@revision buffer!" - return - end - let l:history = s:git_history() - let l:idx = index(l:history, b:git_revision_hash) - if l:idx == -1 - echo "Error 02" - return - end - let l:new_revision = get(l:history, l:idx-1, "LAST") - if l:new_revision=="LAST" - echo "Already at latest revision! ".l:new_revision - return - else - call s:file_at_revision(l:new_revision) - end -endfun - -function! s:git_prev() - if !exists("b:git_revision_hash") || !exists("b:git_original_file") - let l:new_revision = s:git_history()[0] - else - let l:history = s:git_history() - let l:idx = index(l:history, b:git_revision_hash) - if l:idx == -1 - echo "Error 03: cannot find revision ".b:git_revision_hash - return - end - let l:new_revision = get(l:history, l:idx+1, "FIRST") - end - if l:new_revision=="FIRST" - echo "Already at earliest revision! ".l:new_revision - return - else - call s:file_at_revision(l:new_revision) - end -endfun - -function! s:file_at_revision(rev) - let l:pos = getpos(".") - if exists("b:git_original_file") " Is this already a file@revision buffer? - let l:fname = b:git_original_file - let l:ftail = fnamemodify(b:git_original_file, ":t") - else - let l:fname = expand("%") - let l:ftail = expand("%:t") - end - let l:fname = substitute(l:fname, "\\\\", "/", "g") - let l:ftype = &filetype - - ene! - set modifiable - silent exec "file ".l:ftail."@".a:rev - exec "r!git show ".a:rev.":".l:fname - 1,1del - let l:pos[0] = bufnr('.') - call setpos('.', l:pos) - setl nomodifiable - setl buftype=nofile - setl bufhidden=delete - let &filetype = l:ftype - - let b:git_original_file = l:fname - let b:git_revision_hash = a:rev -endfun - -function! s:git_diff(...) - if a:0 - vert bot split - call s:file_at_revision(a:1) - diffthis - au BufUnload diffoff! - exec "normal \\" - diffthis - call s:git_info() - else - if exists("b:git_revision_hash") - call s:git_diff(get(s:git_history(), index(s:git_history(), b:git_revision_hash)+1, "NIL")) - else - call s:git_diff(get(s:git_history(), 0, "HEAD")) - end - end -endfun - -function! s:git_blame() - let l:name = expand('%') - let l:line = getpos('.')[1] - let l:char = getpos('.')[2]+59 - let l:type = &filetype - enew - set modifiable - let &filetype = l:type - set buftype=nofile - set bufhidden=delete - set nowrap - silent exec "file Blame: ".l:name - keepjumps exec 'r !git blame '.l:name - keepjumps 0,0del " - set nomodifiable - keepjumps call setpos('.', [0, l:line, l:char, 0]) -endfun - -command! Blame try - \| call s:gitroot() | call git_blame() - \| catch | echo 'Not a git repo!' - \| endtry -command! GitNext try - \| call s:gitroot() | call git_next() | call s:git_info() - \| catch | echo 'Not a git repo!' - \| endtry -command! GitPrev call git_prev() | call s:git_info() -command! GitFirst call git_first() | call s:git_info() -command! GitLast call git_last() | call s:git_info() -command! GitInfo call git_info() -command! -nargs=1 GitCheckout call file_at_revision() -command! -nargs=? GitCompare try - \| call s:gitroot() | call git_diff() - \| catch | echo 'Not a git repo!' - \| endtry -command! Uncommited try - \| call s:gitroot() | call git_diff() - \| catch | echo 'Not a git repo!' - \| endtry -command! GitRoot try - \| echo gitroot() - \| catch | echo 'Not a git repository' - \| endtry +exec 'so '.s:root.'/git.vim' " === FILE STUFF ===