commit f00401dba3e20aeb38673d92bc1d2ec245842fa9 Author: gryf Date: Thu Jun 20 10:08:48 2019 +0200 initial import diff --git a/.bash_prompt b/.bash_prompt new file mode 100644 index 0000000..2431bdc --- /dev/null +++ b/.bash_prompt @@ -0,0 +1,199 @@ +#!/bin/bash +# +# DESCRIPTION: +# +# Set the bash prompt according to: +# * the active virtualenv +# * the branch/status of the current Git, Mercurial or Subversion repository +# * the return value of the previous command +# * one line prompt +# +# USAGE: +# +# 1. Save this file as ~/.bash_prompt +# 2. Add the following line to the end of your ~/.bashrc or ~/.bash_profile: +# . ~/.bash_prompt +# +# LINEAGE: +# +# Based on work by bradsokol +# +# https://gist.github.com/bradsokol/2959821 + +# The various escape codes that we can use to color our prompt. + RED="\[\033[0;31m\]" + YELLOW="\[\033[1;33m\]" + PURPLE="\[\033[1;35m\]" + GREEN="\[\033[0;32m\]" + BLUE="\[\033[1;34m\]" + CYAN="\[\033[1;36m\]" + LIGHT_RED="\[\033[1;31m\]" +LIGHT_GREEN="\[\033[1;32m\]" + WHITE="\[\033[1;37m\]" + LIGHT_GRAY="\[\033[0;37m\]" + COLOR_NONE="\[\e[0m\]" + +GIT_PICT="◆" +HG_PICT="☿" +PY_PICT="℗" +JS_PICT="ⓙ" + +# Detect whether the current directory is a git repository. +function is_git_repository { + git branch > /dev/null 2>&1 +} + +# Detect whether the current directory is a Mercurial repository. +function is_mercurial_repository { + branch=$(hg branch 2>/dev/null) + if [ -n "${branch}" ]; then + return 0 + else + return 1 + fi +} + +# Detect whether the current directory is a Subversion repository. +function is_subversion_repository { + test -d .svn +} + +# Determine the branch/state information for this git repository. +function set_git_branch { + # Capture the output of the "git status" command. + git_status="$(git status 2> /dev/null)" + + # Set color based on clean/staged/dirty. + pat="(directory|tree) clean$" + if [[ ${git_status} =~ $pat ]]; then + state="${GREEN}" + elif [[ ${git_status} =~ "Changes to be committed" ]]; then + state="${YELLOW}" + else + state="${LIGHT_RED}" + fi + + # Set arrow icon based on status against remote. + remote_pattern="# Your branch is (.*) of" + if [[ ${git_status} =~ ${remote_pattern} ]]; then + if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then + remote="↑" + else + remote="↓" + fi + else + remote="" + fi + diverge_pattern="# Your branch and (.*) have diverged" + if [[ ${git_status} =~ ${diverge_pattern} ]]; then + remote="↕" + fi + + # Get the name of the branch. + gitsym=$(git symbolic-ref HEAD 2>/dev/null) + if [[ $? == 0 ]]; then + branch="${gitsym##refs/heads/}" + fi + + # Set the final branch string. + BRANCH="${state}${GIT_PICT} (${branch})${remote}${COLOR_NONE} " +} + +# Determine the branch/state information for this Mercurial repository. +function set_mercurial_branch { + # Get the name of the branch. + branch=$(hg branch 2>/dev/null) + # Default state + state="${GREEN}" + + if [ -n "${branch}" ]; then + branch="(${branch})" + + # Capture the output of the "hg status" command. + hg_status="$(hg status | wc -l)" + + # Set color based on clean/staged/dirty. + if [ "${hg_status}" -ne "0" ]; then + state="${RED}" + fi + fi + + # Set the final branch string. + BRANCH="${state}${HG_PICT} ${branch}${COLOR_NONE} " +} + +# Determine the branch informatioin for this Subversion repository. No support +# for svn status, since that needs to hit the remote repository. +function set_subversion_branch { + # Capture the output of the "svn info" command + svn_info="$(svn info | egrep '^URL: ' 2> /dev/null)" + + # Get the name of the branch. + branch_pattern="^URL: .*/(branches|tags)/([^/]+)" + trunk_pattern="^URL: .*/trunk(/.*)?$" + if [[ ${svn_info} =~ $branch_pattern ]]; then + branch=${BASH_REMATCH[2]} + elif [[ ${svn_info} =~ $trunk_pattern ]]; then + branch='trunk' + fi + + # Set the final branch string. + BRANCH="(${branch}) " +} + +# Return the prompt symbol to use, colorized based on the return value of the +# previous command. +function set_prompt_symbol () { + if test $1 -eq 0 ; then + PROMPT_SYMBOL="${BLUE}\$${COLOR_NONE}" + else + PROMPT_SYMBOL="${LIGHT_RED}\$${COLOR_NONE}" + fi +} + +# Determine active Python virtualenv details. +function set_virtualenv () { + if test -z "$VIRTUAL_ENV" ; then + PYTHON_VIRTUALENV="" + else + PYTHON_VIRTUALENV="${LIGHT_GREEN}[${PY_PICT} `basename \"$VIRTUAL_ENV\"`]${COLOR_NONE} " + fi +} + +function set_nodevirtenv () { + if test -z "$NODE_VIRTUAL_ENV" ; then + NODE_VIRTUALENV="" + else + NODE_VIRTUALENV="${PURPLE}[${JS_PICT} `basename \"$NODE_VIRTUAL_ENV\"`]${COLOR_NONE} " + fi +} + +# Set the full bash prompt. +function set_bash_prompt () { + # Set the PROMPT_SYMBOL variable. We do this first so we don't lose the + # return value of the last command. + set_prompt_symbol $? + + # Set the PYTHON_VIRTUALENV variable. + set_virtualenv + + # Set the NODE_PYTHON_VIRTUALENV variable. + set_nodevirtenv + + # Set the BRANCH variable. + if is_git_repository ; then + set_git_branch + elif is_subversion_repository ; then + set_subversion_branch + elif is_mercurial_repository ; then + set_mercurial_branch + else + BRANCH='' + fi + + # Set the bash prompt variable. + PS1="${CYAN}\u@\h ${PYTHON_VIRTUALENV}${NODE_VIRTUALENV}${GREEN}${BLUE}\w${COLOR_NONE} ${BRANCH}${PROMPT_SYMBOL} " +} + +# Tell bash to execute this function just before displaying its prompt. +PROMPT_COMMAND=set_bash_prompt diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 0000000..686ebae --- /dev/null +++ b/.gitconfig @@ -0,0 +1,25 @@ +[diff] + tool = default-difftool + +[difftool "default-difftool"] + cmd = vim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)' $LOCAL $REMOTE + +[difftool] + prompt = false + +[user] + email = gryf73@gmail.com + name = gryf +[color] + ui = auto + +[alias] + ci = commit + st = status + co = checkout + l = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all + g = log --graph --date-order -C -M --pretty=format:\"<%h> %ad [%an] %Cgreen%d%Creset %s\" --all --date=short + aliases = !git config --get-regexp 'alias.*' | colrm 1 6 | sed 's/[ ]/ = /' | sort + +[push] + default = simple diff --git a/.tmux.conf b/.tmux.conf new file mode 100644 index 0000000..56df9d8 --- /dev/null +++ b/.tmux.conf @@ -0,0 +1,101 @@ +# gryf tmux setup + +# Set the prefix to ^A. +unbind C-b +set -g prefix ^Q +bind q send-prefix + +set -g default-terminal "screen-256color" + +# I want xterm keys +set-window-option -g xterm-keys on +# fastest command sequences +set -s escape-time 0 +# expect UTF-8 + +# set numbering from 1 instead 0 +set -g base-index 1 +set -g pane-base-index 1 + +# don't rename my tabs +set -g allow-rename off +# renumber windows when a window is closed +set -g renumber-windows on + +#bind-key r source-file ~/.tmux.conf \; display "Config reloaded!" + +set -g clock-mode-style 24 + +# toggle status line +bind-key -n C-Space set status + +# Keep more lines than 2000 +set -g history-limit 10000 + +# magic lines to make the less (PAGER) behavie +set -g terminal-overrides 'rxvt-unicode*:sitm@' +set -ga terminal-overrides ',xterm*:smcup@:rmcup@' + +# set some nice colors, if switched on during runtime +setw -g window-status-current-bg colour8 +setw -g window-status-current-fg colour15 +setw -g window-status-current-attr bold +setw -g window-status-format '#I-#W#F' +setw -g window-status-current-format '#I-#W#F' +set -g status-bg black +set -g status-fg colour8 +set -g pane-active-border-bg default +set -g message-fg white +set -g message-bg black + +set -g pane-border-fg green +set -g pane-active-border-fg brightyellow + +# try to show window title +set -g set-titles on +set -g set-titles-string 'TMUX - #S»#W»#T' + +# track window activity +set-window-option -g monitor-activity on +set -g visual-activity off + +# usefull bindings +bind-key -n C-F1 neww -n shell +bind-key -n C-F2 neww -n mc mc +bind-key -n C-F3 neww -n root 'su -' +bind-key -n C-F4 neww -n rss newsbeuter +bind-key -n C-F5 neww -n moc mocp +bind-key -n C-F6 neww -n ncmpc++ 'ncmpcpp --host pirania' +bind-key -n C-F7 neww -n htop htop +bind-key -n C-F8 neww -n gema 'ssh vimja' +bind-key -n C-F9 neww -n vaio 'ssh vaio' +bind-key -n C-F10 neww -n pirania 'ssh -X pirania' +bind-key -n C-F11 neww -n argh 'ssh argh' + +bind a setw synchronize-panes + +# move window +bind-key -n M-Left swap-window -t :- +bind-key -n M-Right swap-window -t :+ +# move between windows +bind-key -n S-Right next-window +bind-key -n S-Left previous-window + +# split windows like vim +bind-key s split-window -v +bind-key v split-window -h + +# resize panes like vim +bind-key < resize-pane -L 3 +bind-key > resize-pane -R 3 +bind-key - resize-pane -D 3 +bind-key + resize-pane -U 3 + +# vi-style controls for copy mode +set-window-option -g mode-keys vi + +# v and y like vi in copy-mode +#bind-key -T copy-mode-vi 'v' send -X begin-selection +#bind-key -T copy-mode-vi 'y' send -X copy-selection +bind -t vi-copy 'v' begin-selection +bind -t vi-copy 'y' copy-selection diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..f77fe54 --- /dev/null +++ b/README.rst @@ -0,0 +1,4 @@ +VM strap +======== + +Bootstrap for freshly created ubuntu vm. diff --git a/bootstrap.sh b/bootstrap.sh new file mode 100755 index 0000000..a7a2863 --- /dev/null +++ b/bootstrap.sh @@ -0,0 +1,32 @@ +#!/bin/bash -x + +# 1. update +sudo apt update && sudo apt -y upgrade + +# 2. install tools +sudo apt install -y vim-gtk-py2 mc python-jedi python3-jedi htop \ + python-flake8 python3-flake8 exuberant-ctags pylint flake8 pylint3 \ + git-review silversearcher-ag python-apsw ccze python-pip + +# 3. cleanup +sudo apt-get autoremove && sudo apt-get autoclean + +# 4. set default editor +sudo update-alternatives --set editor /usr/bin/vim.gtk-py2 + +# 5. install tools from pypi +sudo pip install pip --upgrade +sudo pip install remote_pdb rainbow + +# 6. copy configuration for bash, git, tmux +sudo cp .bash_prompt ~/ +sudo cp .tmux.conf ~/ +sudo cp .gitconfig ~/ +echo '. ~/.bash_prompt' >> ~/.bashrc + +# 7. get my vim config +git clone https://github.com/gryf/.vim ~/.vim +# populate plugins +vim -c ':PlugUpdate' -c ':qa!' ${STACKUSER} +# showmarks is a stubborn one +mkdir ~/.vim/bundle/ShowMarks/doc ${STACKUSER}