1
0
mirror of https://github.com/gryf/vmstrap.git synced 2025-12-18 20:10:28 +01:00

initial import

This commit is contained in:
2019-06-20 10:08:48 +02:00
commit f00401dba3
5 changed files with 361 additions and 0 deletions

199
.bash_prompt Normal file
View File

@@ -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

25
.gitconfig Normal file
View File

@@ -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

101
.tmux.conf Normal file
View File

@@ -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

4
README.rst Normal file
View File

@@ -0,0 +1,4 @@
VM strap
========
Bootstrap for freshly created ubuntu vm.

32
bootstrap.sh Executable file
View File

@@ -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}