Browse Source

initial commit

master
Levi Olson 6 years ago
parent
commit
94fbbca7cc
19 changed files with 1123 additions and 0 deletions
  1. +26
    -0
      .Xdefaults
  2. +12
    -0
      .Xresources
  3. +96
    -0
      .aliases
  4. +45
    -0
      .bash_profile
  5. +128
    -0
      .bash_prompt
  6. +45
    -0
      .bashrc
  7. +390
    -0
      .dockerfunc
  8. +35
    -0
      .exports
  9. +156
    -0
      .functions
  10. +1
    -0
      .gitignore
  11. +5
    -0
      .path
  12. +16
    -0
      .xinitrc
  13. +3
    -0
      .xmodmap
  14. +3
    -0
      Makefile
  15. +48
    -0
      bin/browser-exec
  16. +27
    -0
      bin/docker-cleanup-everything
  17. +27
    -0
      bin/docker-cleanup-non-running-images
  18. +19
    -0
      bin/lockscreen
  19. +41
    -0
      init.sh

+ 26
- 0
.Xdefaults View File

@ -0,0 +1,26 @@
! GENERAL
URxvt*saveLines: 100000
URxvt*scrollBar: false
URxvt*scrollBar_right: false
URxvt*scrollstyle: rxvt
URxvt*termName: rxvt-256color
! THEME
URxvt*transparent: true
URxvt*depth: 32
URxvt*tintColor: Gray
URxvt*shading: 30
URxvt*foreground: White
URxvt*background: Blue
URxvt*internalBorder: 14
URxvt*externalBorder: 0
! FONT
URxvt*font: xft:Pragmata Pro:pixelsize=12:antialias=true:hinting=true
URxvt*boldFont: xft:Pragmata Pro:bold:pixelsize=12:antialias=true:hinting=true
URxvt*letterSpace: 0
! EXT
URxvt.keysym.Shift-Control-V: perl:clipboard:paste
URxvt.iso14755: False
URxvt.perl-ext-common: default,clipboard

+ 12
- 0
.Xresources View File

@ -0,0 +1,12 @@
Xft.dpi: 192
Xft.autohint: 0
Xft.lcdfilter: lcddefault
Xft.hintstyle: hintfull
Xft.hinting: 1
Xft.antialias: 1
Xft.rgba: rgb
! ------------------------------------------------------------------------------
! URxvt
! -----------------------------------------------------------------------------
! see ~/.Xdefaults

+ 96
- 0
.aliases View File

@ -0,0 +1,96 @@
#!/bin/bash
##################################################
# .aliases
# ------------
# Loosly based on the amazing work of Jess Frazelle
#
# :author: Levi Olson
# :date: 1 Feb 2018
# :version: 0.0.1
##################################################
# Check for various OS openers. Quit as soon as we find one that works.
for opener in browser-exec xdg-open cmd.exe cygstart "start" open; do
if command -v $opener >/dev/null 2>&1; then
if [[ "$opener" == "cmd.exe" ]]; then
# shellcheck disable=SC2139
alias open="$opener /c start";
else
# shellcheck disable=SC2139
alias open="$opener";
fi
break;
fi
done
alias a='emacsclient ~/.bashrc'
alias sf='source ~/.bashrc'
alias ll='ls -ahl --color'
alias l='ls -ahl --color'
alias e='emacsclient'
alias brightness='sudo tee /sys/class/backlight/acpi_video1/brightness <<<'
alias pmsyu='sudo pacman -Syu --color=auto'
alias pacman='sudo pacman --color auto'
alias update='sudo pacman -Syu'
alias upmirrors='sudo reflector --score 100 --fastest 25 --sort rate --save /etc/pacman.d/mirrorlist --verbose'
#git
alias pr='git push origin HEAD'
alias gaa='git add --all .'
alias gcm='git commit -m'
alias gc='git checkout'
alias gd='git diff --patience'
alias gds='git diff --staged --patience'
alias st='git status'
alias gl='git log --decorate'
alias glb='git log --oneline --decorate --all --graph -n15'
alias glv='git log --oneline --decorate --all --graph'
#dirs
alias thit='cd ~/Projects/work/thit-mobile-api/; clear'
alias gothit='cd ~/go/src/go-thit/; clear'
#docker
alias dps='docker ps'
alias dpsa='docker ps -a'
#misc
alias copy='xsel --clipboard --input'
alias paste='xsel --clipboard --output'
#untar
alias untar='tar xvf'
#afk
alias afk='i3lock -c 000000'
# copy file interactive
alias cp='cp -i'
# move file interactive
alias mv='mv -i'
# Intuitive map function
# For example, to list all directories that contain a certain file:
# find . -name .gitattributes | map dirname
alias map="xargs -n1"
# Stopwatch
alias timer='echo "Timer started. Stop with Ctrl-D." && date && time cat && date'
# Always enable colored `grep` output
alias grep='grep --color=auto '
# Easier navigation: .., ..., ...., ....., ~ and -
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."
alias ~="cd ~"
alias -- -="cd -"
# Allow aliases to be "sudoed"
alias sudo='sudo '

+ 45
- 0
.bash_profile View File

@ -0,0 +1,45 @@
#!/bin/bash
############################################
# .bash_profile
# ---------------
# Based on the amazing work of Jess Frazelle
############################################
# Load the shell dotfiles, and then some:
# * ~/.path can be used to extend `$PATH`.
# * ~/.extra can be used for other settings you don’t want to commit.
for file in ~/.{bash_prompt,aliases,functions,path,dockerfunc,extra,exports}; do
if [[ -r "$file" ]] && [[ -f "$file" ]]; then
# shellcheck source=/dev/null
source "$file"
fi
done
unset file
# Save multi-line commands as single line in history
shopt -s cmdhist
# Case-insensitive globbing (used in pathname expansion)
shopt -s nocaseglob
# Append to the Bash history file, rather than overwriting it
shopt -s histappend
# Autocorrect typos in path names when using `cd`
shopt -s cdspell
# Enable some Bash 4 features when possible:
# * `autocd`, e.g. `**/qux` will enter `./foo/bar/baz/qux`
# * Recursive globbing, e.g. `echo **/*.txt`
for option in autocd globstar; do
shopt -s "$option" 2> /dev/null
done
# Add tab completion for SSH hostnames based on ~/.ssh/config
# ignoring wildcards
[[ -e "$HOME/.ssh/config" ]] && complete -o "default" \
-o "nospace" \
-W "$(grep "^Host" ~/.ssh/config | \
grep -v "[?*]" | cut -d " " -f2 | \
tr ' ' '\n')" scp sftp ssh

+ 128
- 0
.bash_prompt View File

@ -0,0 +1,128 @@
#!/bin/bash
# Shell prompt based on the amazing work of Jess Frazelle.
# Screenshot: http://i.imgur.com/EkEtphC.png
if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then
export TERM='gnome-256color';
elif infocmp xterm-256color >/dev/null 2>&1; then
export TERM='xterm-256color';
fi;
prompt_git() {
local s='';
local branchName='';
# Check if the current directory is in a Git repository.
if [ "$(git rev-parse --is-inside-work-tree &>/dev/null; echo "${?}")" == '0' ]; then
# check if the current directory is in .git before running git checks
if [ "$(git rev-parse --is-inside-git-dir 2> /dev/null)" == 'false' ]; then
if [[ -O "$(git rev-parse --show-toplevel)/.git/index" ]]; then
git update-index --really-refresh -q &> /dev/null;
fi;
# Check for uncommitted changes in the index.
if ! git diff --quiet --ignore-submodules --cached; then
s+='+';
fi;
# Check for unstaged changes.
if ! git diff-files --quiet --ignore-submodules --; then
s+='!';
fi;
# Check for untracked files.
if [ -n "$(git ls-files --others --exclude-standard)" ]; then
s+='?';
fi;
# Check for stashed files.
if git rev-parse --verify refs/stash &>/dev/null; then
s+='$';
fi;
fi;
# Get the short symbolic ref.
# If HEAD isn’t a symbolic ref, get the short SHA for the latest commit
# Otherwise, just give up.
branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \
git rev-parse --short HEAD 2> /dev/null || \
echo '(unknown)')";
[ -n "${s}" ] && s=" [${s}]";
echo -e "${1}${branchName}${blue}${s}";
else
return;
fi;
}
cloud=""
if grep -q "^flags.* hypervisor" /proc/cpuinfo && [[ ! -d "/mnt/c/Windows/" ]]; then
cloud="☁️ "
fi
if tput setaf 1 &> /dev/null; then
tput sgr0; # reset colors
bold=$(tput bold);
reset=$(tput sgr0);
# Solarized colors, taken from http://git.io/solarized-colors.
black=$(tput setaf 0);
blue=$(tput setaf 33);
cyan=$(tput setaf 37);
green=$(tput setaf 64);
orange=$(tput setaf 166);
purple=$(tput setaf 125);
red=$(tput setaf 124);
violet=$(tput setaf 61);
white=$(tput setaf 15);
yellow=$(tput setaf 136);
else
bold='';
reset="\\e[0m";
# shellcheck disable=SC2034
black="\\e[1;30m";
blue="\\e[1;34m";
cyan="\\e[1;36m";
green="\\e[1;32m";
# shellcheck disable=SC2034
orange="\\e[1;33m";
# shellcheck disable=SC2034
purple="\\e[1;35m";
red="\\e[1;31m";
violet="\\e[1;35m";
white="\\e[1;37m";
yellow="\\e[1;33m";
fi;
# Highlight the user name when logged in as root.
if [[ "${USER}" == "root" ]]; then
userStyle="${red}";
else
userStyle="${blue}";
fi;
# Highlight the hostname when connected via SSH.
if [[ "${SSH_TTY}" ]]; then
hostStyle="${bold}${cyan}";
else
hostStyle="${cyan}";
fi;
# Set the terminal title to the current working directory.
PS1="\\[\\033]0;\\w\\007\\]";
PS1+="\\[${bold}\\]\\n"; # newline
PS1+="\\[${userStyle}\\]\\u"; # username
PS1+="\\[${white}\\] at ";
PS1+="\\[${hostStyle}\\]${cloud}\\h"; # host
PS1+="\\[${white}\\] in ";
PS1+="\\[${green}\\]\\w"; # working directory
PS1+="\$(prompt_git \"${white} on ${violet}\")"; # Git repository details
PS1+="\\n";
PS1+="\\[${white}\\]\$ \\[${reset}\\]"; # `$` (and reset color)
export PS1;
PS2="\\[${yellow}\\]→ \\[${reset}\\]";
export PS2;

+ 45
- 0
.bashrc View File

@ -0,0 +1,45 @@
#!/bin/bash
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# restore last saved path
if [ -f ~/.last_dir ]; then
cd `cat ~/.last_dir`
fi
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# 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
# shellcheck source=/dev/null
. /usr/share/bash-completion/bash_completion
elif [[ -f /etc/bash_completion ]]; then
# shellcheck source=/dev/null
. /etc/bash_completion
fi
fi
for file in /etc/bash_completion.d/* ; do
# shellcheck source=/dev/null
source "$file"
done
if [[ -f "${HOME}/.bash_profile" ]]; then
# shellcheck source=/dev/null
source "${HOME}/.bash_profile"
fi
sleep 0.2
clear

+ 390
- 0
.dockerfunc View File

@ -0,0 +1,390 @@
#!/bin/bash
######################################
# .dockerfunc
# ------------
# Bash wrappers for docker run commands
#
# Based on the amazing work of Jess Frazelle
#
# :author: Levi Olson
# :date: 1 Feb 2018
# :version: 0.0.1
######################################
export DOCKER_REPO_PREFIX=jess
dcleanup() {
local containers
mapfile -t containers < <(docker ps -aq 2>/dev/null)
docker rm "${containers[@]}" 2>/dev/null
local volumes
mapfile -t volumes < <(docker ps --filter status=exited -q 2>/dev/null)
docker rm -v "${volumes[@]}" 2>/dev/null
local images
mapfile -t images < <(docker images --filter dangling=true -q 2>/dev/null)
docker rmi "${images[@]}" 2>/dev/null
}
del_stopped() {
local name=$1
local state
state=$(docker inspect --format "{{.State.Running}}" "$name" 2>/dev/null)
if [[ "$state" == "false" ]]; then
docker rm "$name"
fi
}
relies_on() {
for container in "$@"; do
local state
state=$(docker inspect --format "{{.State.Running}}" "$container" 2>/dev/null)
if [[ "$state" == "false" ]] || [[ "$state" == "" ]]; then
echo "$container is not running, starting it for you."
$container
fi
done
}
######################
# Container Aliases
# ---------------------
######################
aws() {
docker run -it --rm \
-v "${HOME}/.aws:/root/.aws" \
--log-driver none \
--name aws \
${DOCKER_REPO_PREFIX}/awscli "$@"
}
cadvisor() {
docker run -d \
--restart always \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-p 1234:8080 \
--name cadvisor \
google/cadvisor
hostess add cadvisor "$(docker inspect --format '{{.NetworkSettings.Networks.bridge.IPAddress}}' cadvisor)"
browser-exec "http://cadvisor:8080"
}
chrome() {
# add flags for proxy if passed
local proxy=
local map
local args=$*
if [[ "$1" == "tor" ]]; then
relies_on torproxy
map="MAP * ~NOTFOUND , EXCLUDE torproxy"
proxy="socks5://torproxy:9050"
args="https://check.torproject.org/api/ip ${*:2}"
fi
del_stopped chrome
# one day remove /etc/hosts bind mount when effing
# overlay support inotify, such bullshit
docker run -d \
--memory 6gb \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=unix${DISPLAY}" \
-v "${HOME}/Downloads:/root/Downloads" \
-v "${HOME}/Pictures:/root/Pictures" \
-v "${HOME}/Torrents:/root/Torrents" \
-v "${HOME}/.chrome:/data" \
-v /dev/shm:/dev/shm \
-v /etc/hosts:/etc/hosts \
--security-opt seccomp:$HOME/chrome.json \
--device /dev/snd \
--device /dev/dri \
--device /dev/video0 \
--device /dev/usb \
--device /dev/bus/usb \
--group-add audio \
--group-add video \
--name chrome \
${DOCKER_REPO_PREFIX}/chrome --user-data-dir=/data \
--proxy-server="$proxy" \
--host-resolver-rules="$map" "$args"
}
chromium() {
# add flags for proxy if passed
local proxy=
local map
local args=$*
if [[ "$1" == "tor" ]]; then
relies_on torproxy
map="MAP * ~NOTFOUND , EXCLUDE torproxy"
proxy="socks5://torproxy:9050"
args="https://check.torproject.org/api/ip ${*:2}"
fi
del_stopped chromium
# one day remove /etc/hosts bind mount when effing
# overlay support inotify, such bullshit
docker run -d \
--memory 6gb \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=unix${DISPLAY}" \
-v "${HOME}/Downloads:/root/Downloads" \
-v "${HOME}/Pictures:/root/Pictures" \
-v "${HOME}/Torrents:/root/Torrents" \
-v "${HOME}/.chrome:/data" \
-v /dev/shm:/dev/shm \
-v /etc/hosts:/etc/hosts \
--security-opt seccomp:$HOME/chrome.json \
--device /dev/snd \
--device /dev/dri \
--device /dev/video0 \
--device /dev/usb \
--device /dev/bus/usb \
--group-add audio \
--group-add video \
--name chromium \
${DOCKER_REPO_PREFIX}/chromium --user-data-dir=/data \
--proxy-server="$proxy" \
--host-resolver-rules="$map" "$args"
}
firefox() {
del_stopped firefox
relies_on pulseaudio
docker run -d \
--memory 6gb \
--net host \
--cpuset-cpus 0 \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v "${HOME}/.cache/mozilla:/root/.cache/mozilla" \
-v "${HOME}/.mozilla:/root/.mozilla" \
-v "${HOME}/Downloads:/root/Downloads" \
-v "${HOME}/Pictures:/root/Pictures" \
-v "${HOME}/Torrents:/root/Torrents" \
-e "DISPLAY=unix${DISPLAY}" \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--device /dev/snd \
--device /dev/dri \
--name firefox \
${DOCKER_REPO_PREFIX}/firefox "$@"
}
gimp() {
del_stopped gimp
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=unix${DISPLAY}" \
-v "${HOME}/Pictures:/root/Pictures" \
-v "${HOME}/.gtkrc:/root/.gtkrc" \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--name gimp \
${DOCKER_REPO_PREFIX}/gimp
}
hollywood() {
docker run --rm -it \
--name hollywood \
${DOCKER_REPO_PREFIX}/hollywood
}
htop() {
docker run --rm -it \
--pid host \
--net none \
--name htop \
${DOCKER_REPO_PREFIX}/htop
}
mpd() {
del_stopped mpd
# adding cap sys_admin so I can use nfs mount
# the container runs as a unpriviledged user mpd
docker run -d \
--device /dev/snd \
--cap-add SYS_ADMIN \
-e MPD_HOST=/var/lib/mpd/socket \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/exports:/etc/exports:ro \
-v "${HOME}/.mpd:/var/lib/mpd" \
-v "${HOME}/.mpd.conf:/etc/mpd.conf" \
--name mpd \
${DOCKER_REPO_PREFIX}/mpd
}
nes() {
del_stopped nes
local game=$1
docker run -d \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=unix${DISPLAY}" \
--device /dev/dri \
--device /dev/snd \
--name nes \
${DOCKER_REPO_PREFIX}/nes "/games/${game}.rom"
}
pulseaudio() {
del_stopped pulseaudio
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
--device /dev/snd \
-p 4713:4713 \
--restart always \
--group-add audio \
--name pulseaudio \
${DOCKER_REPO_PREFIX}/pulseaudio
}
spotify() {
del_stopped spotify
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v "${HOME}/.spotify:/home/spotify/.spotify" \
-v "${HOME}/.cache/spotify:/home/spotify/.cache/spotify" \
-e "DISPLAY=unix${DISPLAY}" \
-e QT_DEVICE_PIXEL_RATIO \
--security-opt seccomp:unconfined \
--device /dev/snd \
--device /dev/dri \
--group-add audio \
--group-add video \
--name spotify \
${DOCKER_REPO_PREFIX}/spotify
}
steam() {
del_stopped steam
relies_on pulseaudio
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/machine-id:/etc/machine-id:ro \
-v /var/run/dbus:/var/run/dbus \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v "${HOME}/.steam:/home/steam" \
-e "DISPLAY=unix${DISPLAY}" \
--link pulseaudio:pulseaudio \
-e PULSE_SERVER=pulseaudio \
--device /dev/dri \
--name steam \
${DOCKER_REPO_PREFIX}/steam
}
telnet() {
docker run -it --rm \
--log-driver none \
${DOCKER_REPO_PREFIX}/telnet "$@"
}
termboy() {
del_stopped termboy
local game=$1
docker run --rm -it \
--device /dev/snd \
--name termboy \
${DOCKER_REPO_PREFIX}/nes "/games/${game}.rom"
}
tor() {
del_stopped tor
docker run -d \
--net host \
--name tor \
${DOCKER_REPO_PREFIX}/tor
# set up the redirect iptables rules
sudo setup-tor-iptables
# validate we are running through tor
browser-exec "https://check.torproject.org/"
# exit current shell
# exit 0
}
torbrowser() {
del_stopped torbrowser
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=unix${DISPLAY}" \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--device /dev/snd \
--name torbrowser \
${DOCKER_REPO_PREFIX}/tor-browser
# exit current shell
# exit 0
}
tormessenger() {
del_stopped tormessenger
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=unix${DISPLAY}" \
-e GDK_SCALE \
-e GDK_DPI_SCALE \
--device /dev/snd \
--name tormessenger \
${DOCKER_REPO_PREFIX}/tor-messenger
# exit current shell
# exit 0
}
torproxy() {
del_stopped torproxy
docker run -d \
--restart always \
-v /etc/localtime:/etc/localtime:ro \
-p 9050:9050 \
--name torproxy \
${DOCKER_REPO_PREFIX}/tor-proxy
hostess add torproxy "$(docker inspect --format '{{.NetworkSettings.Networks.bridge.IPAddress}}' torproxy)"
}
traceroute() {
docker run --rm -it \
--net host \
${DOCKER_REPO_PREFIX}/traceroute "$@"
}
transmission() {
del_stopped transmission
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v "${HOME}/Torrents:/transmission/download" \
-v "${HOME}/.transmission:/transmission/config" \
-p 9091:9091 \
-p 51413:51413 \
-p 51413:51413/udp \
--name transmission \
${DOCKER_REPO_PREFIX}/transmission
hostess add transmission "$(docker inspect --format '{{.NetworkSettings.Networks.bridge.IPAddress}}' transmission)"
browser-exec "http://transmission:9091"
}
wireshark() {
del_stopped wireshark
docker run -d \
-v /etc/localtime:/etc/localtime:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=unix${DISPLAY}" \
--cap-add NET_RAW \
--cap-add NET_ADMIN \
--net host \
--name wireshark \
${DOCKER_REPO_PREFIX}/wireshark
}

+ 35
- 0
.exports View File

@ -0,0 +1,35 @@
#!/bin/bash
##################################################
# .exports
# ------------
# Loosly based on the amazing work of Jess Frazelle
#
# :author: Levi Olson
# :date: 1 Feb 2018
# :version: 0.0.1
##################################################
export EDITOR=emacsclient
export TERMINAL=kitty
# Larger bash history (allow 32³ entries; default is 500)
export HISTSIZE=50000000
export HISTFILESIZE=$HISTSIZE
export HISTCONTROL=ignoreboth:erasedups
# Prefer US English and use UTF-8
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
# Don't clear the screen after quitting a manual page
export MANPAGER="less -X"
export JOURNAL_DIR=$HOME/org/journal
export PROJECTS_DIR=$HOME/Projects
# DPI for GTK apps
export GDK_SCALE=1
export GDK_DPI_SCALE=1
export QT_DEVICE_PIXEL_RATIO=1
export GI_TYPELIB_PATH="/usr/local/lib/girepository-1.0"

+ 156
- 0
.functions View File

@ -0,0 +1,156 @@
#!/bin/bash
##################################################
# .functions
# ------------
# Based on the amazing work of Jess Frazelle
#
# :author: Levi Olson
# :date: 1 Feb 2018
# :version: 0.0.1
##################################################
# Simple calculator
calc() {
local result=""
result="$(printf "scale=10;%s\\n" "$*" | bc --mathlib | tr -d '\\\n')"
# └─ default (when `--mathlib` is used) is 20
if [[ "$result" == *.* ]]; then
# improve the output for decimal numbers
# add "0" for cases like ".5"
# add "0" for cases like "-.5"
# remove trailing zeros
printf "%s" "$result" |
sed -e 's/^\./0./' \
-e 's/^-\./-0./' \
-e 's/0*$//;s/\.$//'
else
printf "%s" "$result"
fi
printf "\\n"
}
# mkdir, cd into it
mkcd() {
mkdir -p "$@"
cd "$1"
}
# save path on cd
cd() {
builtin cd $@
pwd > ~/.last_dir
}
# Syntax-highlight JSON strings or files
# Usage: `json '{"foo":42}'` or `echo '{"foo":42}' | json`
json() {
if [ -t 0 ]; then # argument
python -mjson.tool <<< "$*" | pygmentize -l javascript
else # pipe
python -mjson.tool | pygmentize -l javascript
fi
}
# Call from a local repo to open the repository on github/bitbucket in browser
# Modified version of https://github.com/zeke/ghwd
repo() {
# Figure out github repo base URL
local base_url
base_url=$(git config --get remote.origin.url)
base_url=${base_url%\.git} # remove .git from end of string
# Fix git@github.com: URLs
base_url=${base_url//git@github\.com:/https:\/\/github\.com\/}
# Fix git://github.com URLS
base_url=${base_url//git:\/\/github\.com/https:\/\/github\.com\/}
# Fix git@bitbucket.org: URLs
base_url=${base_url//git@bitbucket.org:/https:\/\/bitbucket\.org\/}
# Fix git@gitlab.com: URLs
base_url=${base_url//git@gitlab\.com:/https:\/\/gitlab\.com\/}
# Validate that this folder is a git folder
if ! git branch 2>/dev/null 1>&2 ; then
echo "Not a git repo!"
exit $?
fi
# Find current directory relative to .git parent
full_path=$(pwd)
git_base_path=$(cd "./$(git rev-parse --show-cdup)" || exit 1; pwd)
relative_path=${full_path#$git_base_path} # remove leading git_base_path from working directory
# If filename argument is present, append it
if [ "$1" ]; then
relative_path="$relative_path/$1"
fi
# Figure out current git branch
# git_where=$(command git symbolic-ref -q HEAD || command git name-rev --name-only --no-undefined --always HEAD) 2>/dev/null
git_where=$(command git name-rev --name-only --no-undefined --always HEAD) 2>/dev/null
# Remove cruft from branchname
branch=${git_where#refs\/heads\/}
[[ $base_url == *bitbucket* ]] && tree="src" || tree="tree"
url="$base_url/$tree/$branch$relative_path"
echo "Calling $(type open) for $url"
open "$url" &> /dev/null || (echo "Using $(type open) to open URL failed." && exit 1);
}
# Get colors in manual pages
man() {
env \
LESS_TERMCAP_mb="$(printf '\e[1;31m')" \
LESS_TERMCAP_md="$(printf '\e[1;31m')" \
LESS_TERMCAP_me="$(printf '\e[0m')" \
LESS_TERMCAP_se="$(printf '\e[0m')" \
LESS_TERMCAP_so="$(printf '\e[1;44;33m')" \
LESS_TERMCAP_ue="$(printf '\e[0m')" \
LESS_TERMCAP_us="$(printf '\e[1;32m')" \
man "$@"
}
# get dbus session
dbs() {
local t=$1
if [[ -z "$t" ]]; then
local t="session"
fi
dbus-send --$t --dest=org.freedesktop.DBus \
--type=method_call --print-reply \
/org/freedesktop/DBus org.freedesktop.DBus.ListNames
}
# get the name of a x window
xname(){
local window_id=$1
if [[ -z $window_id ]]; then
echo "Please specifiy a window id, you find this with 'xwininfo'"
return 1
fi
local match_string='".*"'
local match_qstring='"[^"\\]*(\\.[^"\\]*)*"' # NOTE: Adds 1 backreference
# get the name
xprop -id "$window_id" | \
sed -nr \
-e "s/^WM_CLASS\\(STRING\\) = ($match_qstring), ($match_qstring)$/instance=\\1\\nclass=\\3/p" \
-e "s/^WM_WINDOW_ROLE\\(STRING\\) = ($match_qstring)$/window_role=\\1/p" \
-e "/^WM_NAME\\(STRING\\) = ($match_string)$/{s//title=\\1/; h}" \
-e "/^_NET_WM_NAME\\(UTF8_STRING\\) = ($match_qstring)$/{s//title=\\1/; h}" \
-e "\${g; p}"
}

+ 1
- 0
.gitignore View File

@ -0,0 +1 @@
.extra

+ 5
- 0
.path View File

@ -0,0 +1,5 @@
#!/bin/bash
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$GOBIN:$PATH:/opt/android-sdk/platform-tools

+ 16
- 0
.xinitrc View File

@ -0,0 +1,16 @@
#!/bin/sh
##########################################
# .xinitrc
# ---------
##########################################
#XDG_CONFIG_HOME="$HOME/.config"
#export XDG_CONFIG_HOME
xrdb -merge ~/.Xresources
xrdb -merge ~/.Xdefaults
xmodmap $HOME/.xmodmap
exec i3

+ 3
- 0
.xmodmap View File

@ -0,0 +1,3 @@
clear lock
keycode 66 = Control_L
add Control = Control_L

+ 3
- 0
Makefile View File

@ -0,0 +1,3 @@
init:
@echo "Let's begin"
@./init.sh

+ 48
- 0
bin/browser-exec View File

@ -0,0 +1,48 @@
#!/bin/bash
##############################################################################
# browser-exec
# -----------
# Opens a hyperlink in the browser that is currently being run in a container.
# First checks if firefox is running then chrome.
# If neither are running it starts a firefox container.
#
# Usage:
# browser-exec $uri
#
# Based on the amazing work of Jess Frazelle
#
# Dependancies: firefox, chrome, nsenter, xdg
#
# :authors: Levi Olson
# :date: 1 Feb 2018
# :version: 0.0.1
##############################################################################
#set -e
set -o pipefail
browser_exec() {
# check if firefox container is running
firefox_state=$(docker inspect --format "{{.State.Running}}" firefox 2>/dev/null)
if [[ "$firefox_state" == "true" ]]; then
docker exec -i firefox /usr/bin/firefox "$@" 2>/dev/null
else
# check if chrome container is running
chrome_state=$(docker inspect --format "{{.State.Running}}" chrome 2>/dev/null)
if [[ "$chrome_state" == "true" ]]; then
docker exec -i chrome /usr/bin/google-chrome --user-data-dir=/data "$@" 2>/dev/null
else
# maybe we are running in runc
chrome_pid=$(pgrep -f "chrome --user-data" | head -n 1 2>/dev/null)
if [[ ! -z "$chrome_pid" ]]; then
# nsenter the chrome runc container
sudo nsenter -t "$chrome_pid" --pid --user --net --uts --mount --ipc /usr/bin/google-chrome --user-data-dir=/data "$@" 2>/dev/null
else
# neither are currently running so lets try xdg-open
xdg-open "$@"
fi
fi
fi
}
browser_exec "$@"

+ 27
- 0
bin/docker-cleanup-everything View File

@ -0,0 +1,27 @@
#!/bin/bash
##########################################
# docker-cleanup-everything
# ------------
# Based on the amazing work of Jess Frazelle
#
# Dependencies: docker
#
# :author: Levi Olson
# :date: 31 Jan 2018
# :version: 0.0.1
##########################################
cleanup() {
local containers
mapfile -t containers < <(docker ps -aq 2>/dev/null)
docker rm "${containers[@]}" 2>/dev/null
local volumes
mapfile -t volumes < <(docker ps --filter status=exited -q 2>/dev/null)
docker rm -v "${volumes[@]}" 2>/dev/null
local images
mapfile -t images < <(docker images --filter dangling=true -q 2>/dev/null)
docker rmi "${images[@]}" 2>/dev/null
}
cleanup

+ 27
- 0
bin/docker-cleanup-non-running-images View File

@ -0,0 +1,27 @@
#!/bin/bash
##########################################
# docker-cleanup-non-running-images
# ------------
# Based on the amazing work of Jess Frazelle
#
# Dependencies: docker
#
# :author: Levi Olson
# :date: 31 Jan 2018
# :version: 0.0.1
##########################################
set -e
set -o pipefail
cleanup() {
mapfile -t images < <(docker images -q --no-trunc)
for c in $(docker ps -aq); do
image=$(docker inspect --format '{{.Image}}' "$c")
images=( "${images[@]/$image}" )
done
docker rmi -f "${images[@]}" 2>&1 || true
}
cleanup

+ 19
- 0
bin/lockscreen View File

@ -0,0 +1,19 @@
#!/bin/bash
##########################################
# lockscreen
# ------------
#
# Dependencies: docker, i3lock, scrot
#
# Loosly based on the amazing work of Jess Frazelle
#
# :author: Levi Olson
# :date: 31 Jan 2018
# :version: 0.0.1
##########################################
set -e
# subshell
(
i3lock -c 000000
)

+ 41
- 0
init.sh View File

@ -0,0 +1,41 @@
#!/bin/bash
######################################
# init.sh
# ---------
# Symlink ~/dotfiles to $HOME
######################################
dir=~/dotfiles # dotfiles directory
backup=~/dotfiles_backup # old dotfiles backup directory
symfiles=".aliases .bash_profile .bash_prompt .bashrc .dockerfunc .exports .functions .path .xinitrc .Xresources .Xdefaults .xmodmap"
symdefaults=".extra" # not in version control
######################################
# create dotfiles_old in homedir
echo "Creating $backup to backup of any existing dotfiles already in ~/"
mkdir -p $backup
echo "...done"
# change to the dotfiles directory
echo "Changing to the $dir directory"
cd $dir
echo "...done"
# move any existing dotfiles in homedir to dotfiles_old directory, then create symlinks
for file in $symfiles; do
echo "Moving any existing dotfiles from ~/ to $backup"
mv ~/$file $backup/
echo "Creating symlink to $file in home directory."
ln -s $dir/$file ~/$file
done
echo "...done"
# create any template/default files not in version control
for file in $symdefaults; do
echo "Creating empty file $file in home directory."
touch $dir/$file
echo "#!/bin/bash\n\n##############################\n# $file\n# ---------------\n##############################\n\n" > $dir/$file
done
echo "...done"

Loading…
Cancel
Save