diff --git a/.bash_completion.d/kops b/.bash_completion.d/kops
new file mode 100644
index 0000000000000000000000000000000000000000..bf04536ce257ac066b2011445fb4eda76f1b9002
--- /dev/null
+++ b/.bash_completion.d/kops
@@ -0,0 +1 @@
+command -v kops >/dev/null && eval $(kops completion bash)
diff --git a/.bash_completion.d/kubectl b/.bash_completion.d/kubectl
new file mode 100644
index 0000000000000000000000000000000000000000..81269ab390c6870ef5287fc5dab048cd11779005
--- /dev/null
+++ b/.bash_completion.d/kubectl
@@ -0,0 +1 @@
+command -v kubectl >/dev/null && eval $(kubectl completion bash)
diff --git a/.bash_completion.d/minikube b/.bash_completion.d/minikube
new file mode 100644
index 0000000000000000000000000000000000000000..35f00a83fcbafb4a21b97dc71e10472e2177287d
--- /dev/null
+++ b/.bash_completion.d/minikube
@@ -0,0 +1 @@
+command -v minikube >/dev/null && eval $(minikube completion bash)
diff --git a/.bash_completion.d/packer b/.bash_completion.d/packer
new file mode 100644
index 0000000000000000000000000000000000000000..e9732a42ff5d97de51b72cf78785221fad1c0cc4
--- /dev/null
+++ b/.bash_completion.d/packer
@@ -0,0 +1 @@
+! command -v packer >/dev/null || complete -C packer packer
diff --git a/.bash_completion.d/pandoc b/.bash_completion.d/pandoc
new file mode 100644
index 0000000000000000000000000000000000000000..f62e7ba543fa9efe7cb3b12b5868e406c75d7e82
--- /dev/null
+++ b/.bash_completion.d/pandoc
@@ -0,0 +1 @@
+command -v pandoc > /dev/null && pandoc --bash-completion > /dev/null && eval $( pandoc --bash-completion )
diff --git a/.bash_completion.d/pipenv b/.bash_completion.d/pipenv
new file mode 100644
index 0000000000000000000000000000000000000000..17f1c103449959c44d1a1e6d85f091ed9358dae1
--- /dev/null
+++ b/.bash_completion.d/pipenv
@@ -0,0 +1 @@
+command -v pipenv > /dev/null || eval $(pipenv --completion)
diff --git a/.bash_completion.d/terraform b/.bash_completion.d/terraform
new file mode 100644
index 0000000000000000000000000000000000000000..45cedef248f53af71faaefa34595028cc8df7a96
--- /dev/null
+++ b/.bash_completion.d/terraform
@@ -0,0 +1 @@
+! command -v terraform >/dev/null || complete -C terraform terraform
diff --git a/.bash_completion.d/vault b/.bash_completion.d/vault
new file mode 100644
index 0000000000000000000000000000000000000000..ee68604546aab3d48fb4fb067cac748c682a1f4f
--- /dev/null
+++ b/.bash_completion.d/vault
@@ -0,0 +1 @@
+! command -v vault >/dev/null || complete -C vault vault
diff --git a/.bashrc b/.bashrc
index 0883009a461caf3a049ab8d19026cb6a007726d3..3dbf81a707e79e355f8a0746bd97d119e7f36a43 100644
--- a/.bashrc
+++ b/.bashrc
@@ -55,7 +55,6 @@ alias deborphan='deborphan -a --no-show-section --ignore-suggests'
 alias aptitude='aptitude --display-format %p --quiet'
 alias obsolete='aptitude search ?obsolete'
 alias missing-recommends="aptitude search '~RBrecommends:~i'"
-alias missing-suggests="aptitude search '~RBsuggests:~i'"
 # shellcheck disable=SC2142
 alias deinstalled="dpkg --get-selections | awk '\$2==\"deinstall\" {print \$1}'"
 alias ansible-local='ansible localhost -c local -i localhost,'
@@ -67,7 +66,7 @@ alias hostlocal='docker run --rm --privileged --net=host gliderlabs/hostlocal'
 alias cadvisor='docker run --rm   --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest'
 alias __apt-daily="sudo /bin/sh -c 'apt-get update && apt-get dist-upgrade --download-only --yes && apt-get autoclean'"
 alias apt-daily="monitor __apt-daily"
-alias __flatpak-daily="sudo /bin/sh -c 'flatpak update --assumeyes && flatpak uninstall --unused --assumeyes'"
+alias __flatpak-daily='sudo flatpak update --assumeyes'
 alias flatpak-daily="monitor __flatpak-daily"
 alias cdtemp='cd $(mktemp -d)'
 alias 0-day-cleanup='ssh xbmc.shore.co.il "sudo -u debian-transmission find /srv/library/Comics -name *.part -path *0-Day\ Week\ of* -delete"'
diff --git a/.config/git/config b/.config/git/config
index 5724ab702a338281dbb075ca7b5f51bdd00adca5..a86056f9125b7cfab0ee457306d4e17fd51edd3c 100644
--- a/.config/git/config
+++ b/.config/git/config
@@ -4,6 +4,7 @@
     amend = commit --amend
     autorebase = -c 'core.editor=true' rebase -i --autosquash --autostash
     bull = submodule update --remote --init
+    cdiff = diff --cached
     cleaan = clean -fdX
     cleaaan = clean -fdx
     dif = diff --color-words
@@ -41,6 +42,9 @@
 [fetch]
     fsckobjects = true
     prune = true
+[filter "ansible-vault"]
+    clean = ANSIBLE_VERBOSITY=0 ansible-vault encrypt
+    smudge = ANSIBLE_VERBOSITY=0 ansible-vault decrypt
 [grep]
     linenumber = true
 [merge]
diff --git a/.config/pythonrc b/.config/pythonrc
index d9f2c7a9caf0076c011bbe0aa42fca641432ea57..aa1e7d3063d1b6f8dbee4cc65db25c642aea4edf 160000
--- a/.config/pythonrc
+++ b/.config/pythonrc
@@ -1 +1 @@
-Subproject commit d9f2c7a9caf0076c011bbe0aa42fca641432ea57
+Subproject commit aa1e7d3063d1b6f8dbee4cc65db25c642aea4edf
diff --git a/.githooks/post-merge b/.githooks/post-merge
index 3b0fd3c72aa5755c7c87d09f4a7180fd283d2d3c..bb6f64c7a8f2252bc29e461af56160632f78c0d5 100755
--- a/.githooks/post-merge
+++ b/.githooks/post-merge
@@ -1,6 +1,11 @@
 #!/bin/sh
 set -eu
 cd "$(git rev-parse --show-toplevel)"
+echo Installing Golang apps >> /dev/stderr
+go get github.com/giantswarm/semver-bump || true
+go get github.com/nishanths/license || true
+echo Installing Python apps >> /dev/stderr
+python3 -m pip install --user --requirement requirements.txt
 echo Installing Git hooks >> /dev/stderr
 Documents/bin/install-git-hooks
 echo Generating SSH config >> /dev/stderr
@@ -9,7 +14,5 @@ echo Loading dconf config >> /dev/stderr
 Documents/bin/dconf-load
 echo Configuring Git repo >> /dev/stderr
 git config --local status.showUntrackedFiles no
-echo Creating Bash completion scripts >> /dev/stderr
-Documents/bin/gen-bash-completion
 echo Adding Cron job >> /dev/stderr
 Documents/bin/cron-jobs
diff --git a/.gitignore b/.gitignore
index ee0d7edd0530a3b100f45803b999a92bcffbb8d8..72e8ffc0db8aad71a934dd11e5968bd5109e54b4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1 @@
 *
-.bash_completion.d/.pipenv
-.pre-commit/
-.ssh/config
diff --git a/.ssh/config.d/20_endless b/.ssh/config.d/20_endless
new file mode 100644
index 0000000000000000000000000000000000000000..030a5a88e448988b9abdbccefd5bdb8d6392379b
--- /dev/null
+++ b/.ssh/config.d/20_endless
@@ -0,0 +1,18 @@
+Host 172.31.*.* 10.*.*.* *.endlessm.com *.endlessm-sf.com endlessm.com
+User nimrod
+IdentityFile ~/.ssh/endless_ecdsa
+
+Host 10.17.*.* home.dev.endlessm.com
+ProxyCommand ssh vpn-router.uw1.endlessm.com -W %h:%p
+
+Host 172.31.*.* 10.*.*.* *.endlessm-sf.com
+UserKnownHostsFile /dev/null
+StrictHostKeyChecking no
+ProxyCommand ssh vpn-router.uw2.endlessm.com -W %h:%p
+
+Host appupdates.endlessm.com irc.endlessm.com status.endlessm.com
+Port 2200
+ProxyCommand ssh vpn-router.uw2.endlessm.com -W %h:%p
+
+Host vpn-router.sf.endlessm.com
+Port 2022
diff --git a/Documents/Endless/.gitkeep b/Documents/Endless/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Documents/bin/__apt-daily b/Documents/bin/__apt-daily
new file mode 100755
index 0000000000000000000000000000000000000000..65258e080e0f4ceca66e840e4e98994b205ec0fb
--- /dev/null
+++ b/Documents/bin/__apt-daily
@@ -0,0 +1,2 @@
+#!/bin/sh
+exec sudo /bin/sh -c 'apt-get update && apt-get dist-upgrade --download-only --yes && apt-get autoclean'
diff --git a/Documents/bin/gen-bash-completion b/Documents/bin/gen-bash-completion
deleted file mode 100755
index 83b18521eae51f5502e2709683fe4daa43132aa6..0000000000000000000000000000000000000000
--- a/Documents/bin/gen-bash-completion
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/sh
-set -eu
-
-gen_completion () {
-    executable="$1"
-    ! command -v "$executable" > /dev/null || "$@" > "$HOME/.bash_completion.d/$executable"
-}
-
-gen_completion pandoc --bash-completion
-gen_completion pipenv --completion
-gen_completion kops completion bash
-gen_completion kubectl completion bash
-gen_completion minikube completion bash
diff --git a/Documents/bin/monitor b/Documents/bin/monitor
new file mode 100755
index 0000000000000000000000000000000000000000..5053f61d5520473839c1b842ee53c98762a41dc9
--- /dev/null
+++ b/Documents/bin/monitor
@@ -0,0 +1,24 @@
+#!/bin/sh
+set -eu
+
+if ! command -v notify-send > /dev/null
+then
+    notify="printf '\\a'"
+elif [ "$(whoami)" = "root" ] && [ -n "${SUDO_USER:-}" ]
+then
+    notify="sudo --preserve-env --set-home --user $SUDO_USER notify-send"
+else
+    notify='notify-send'
+fi
+
+eval "$@" || code="$?"
+code="${code:-0}"
+
+if [ "$code" -eq 0 ]
+then
+    $notify "$(basename "${1#__}") has finished."
+else
+    $notify --urgency=critical "$(basename "${1#__}") has failed."
+fi
+
+return "$code"
diff --git a/Documents/bin/sudome b/Documents/bin/sudome
new file mode 100755
index 0000000000000000000000000000000000000000..057826669ba45ee4a0b5f0620c1ee9b99654f0e5
--- /dev/null
+++ b/Documents/bin/sudome
@@ -0,0 +1,11 @@
+#!/bin/sh
+set -eu
+
+if command -v "$1" >/dev/null
+then
+    executable="$(command -v "$1")"
+    shift
+    exec sudo --preserve-env --set-home "$executable" "$@"
+else
+    exec sudo --preserve-env --set-home "$@"
+fi
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..daf1f0ccdfc39532c949eec5dc85eee161920e93
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,28 @@
+ansible
+awscli
+awslogs
+#aws-shell
+bcrypt
+boto
+boto3
+docker-compose
+Glances
+gunicorn
+httpbin
+httpie
+khal
+khard
+mycli
+netaddr
+parse
+passlib
+pgcli
+pipenv
+piprot
+pre-commit
+pur
+pygments
+sh
+template
+todoman
+tox