replace ansible with bootstrap script
This commit is contained in:
parent
10cb54744c
commit
b16ca6a626
30 changed files with 198 additions and 231 deletions
|
@ -1,6 +0,0 @@
|
||||||
[defaults]
|
|
||||||
interpreter_python = auto_silent
|
|
||||||
inventory = ./inventory
|
|
||||||
nocows = True
|
|
||||||
roles_path = ./roles
|
|
||||||
|
|
198
bootstrap
Executable file
198
bootstrap
Executable file
|
@ -0,0 +1,198 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
DRY_RUN=false
|
||||||
|
DEFAULT_GIT_USER="Fernando Schauenburg"
|
||||||
|
DEFAULT_GIT_EMAIL="fernando@schauenburg.me"
|
||||||
|
|
||||||
|
XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
|
||||||
|
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$XDG_CONFIG_HOME}"
|
||||||
|
XDG_DATA_HOME="${XDG_DATA_HOME:-$home/.local/share}"
|
||||||
|
|
||||||
|
DIRS=$(cat <<EOF
|
||||||
|
${HOME}/.local/bin
|
||||||
|
${HOME}/.local/etc/git
|
||||||
|
${HOME}/.ssh
|
||||||
|
${XDG_CONFIG_HOME}/alacritty
|
||||||
|
${XDG_CONFIG_HOME}/dircolors
|
||||||
|
${XDG_CONFIG_HOME}/git
|
||||||
|
${XDG_CONFIG_HOME}/mintty
|
||||||
|
${XDG_CONFIG_HOME}/python
|
||||||
|
${XDG_CONFIG_HOME}/readline
|
||||||
|
${XDG_CONFIG_HOME}/tmux
|
||||||
|
${XDG_CONFIG_HOME}/vim
|
||||||
|
${XDG_CONFIG_HOME}/vim/autoload
|
||||||
|
${XDG_DATA_HOME}/bash
|
||||||
|
${XDG_DATA_HOME}/bash-completion/completions
|
||||||
|
${XDG_DATA_HOME}/less
|
||||||
|
${XDG_DATA_HOME}/python
|
||||||
|
${XDG_DATA_HOME}/vim
|
||||||
|
${XDG_DATA_HOME}/vim/plugged
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
|
||||||
|
DOTFILES=$(cat <<EOF
|
||||||
|
files/bashrc ${HOME}/.bash_profile
|
||||||
|
files/bashrc ${HOME}/.bashrc
|
||||||
|
files/ssh_config ${HOME}/.ssh/config
|
||||||
|
files/alacritty.yml ${XDG_CONFIG_HOME}/alacritty/alacritty.yml
|
||||||
|
files/gitconfig ${XDG_CONFIG_HOME}/git/config
|
||||||
|
files/gitignore ${XDG_CONFIG_HOME}/git/ignore
|
||||||
|
files/inputrc ${XDG_CONFIG_HOME}/readline/inputrc
|
||||||
|
files/minttyrc ${XDG_CONFIG_HOME}/mintty/config
|
||||||
|
files/plug.vim ${XDG_CONFIG_HOME}/vim/autoload/plug.vim
|
||||||
|
files/python-startup.py ${XDG_CONFIG_HOME}/python/startup.py
|
||||||
|
files/tmux-colors.conf ${XDG_CONFIG_HOME}/tmux/tmux-colors.conf
|
||||||
|
files/tmux.conf ${XDG_CONFIG_HOME}/tmux/tmux.conf
|
||||||
|
files/vimrc ${XDG_CONFIG_HOME}/vim/vimrc
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
|
||||||
|
rst=$(tput sgr0)
|
||||||
|
red=$(tput setaf 1)
|
||||||
|
green=$(tput setaf 2)
|
||||||
|
yellow=$(tput setaf 3)
|
||||||
|
blue=$(tput setaf 4)
|
||||||
|
|
||||||
|
heading() { printf '%s\n' "${blue}===== $1 ==========${rst}"; }
|
||||||
|
info() { printf '%s\n' "${green}${1}${rst}"; }
|
||||||
|
warn() { printf '%s\n' "${yellow}${1}${rst}"; }
|
||||||
|
error() { printf '%s\n' "${red}${1}${rst}"; }
|
||||||
|
|
||||||
|
directory_present() { # Make sure directory $1 exists.
|
||||||
|
if [ -d "$1" ]; then
|
||||||
|
info "OK: $1"
|
||||||
|
else
|
||||||
|
warn "creating $1"
|
||||||
|
$DRY_RUN || mkdir -p "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
file_absent() { # Make sure file $1 does not exist.
|
||||||
|
if [ ! -f "$1" ]; then
|
||||||
|
info "OK: $1"
|
||||||
|
else
|
||||||
|
warn "removing $1"
|
||||||
|
$DRY_RUN || rm "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
file_touch() { # Make sure file $1 exists (content is irrelevant).
|
||||||
|
if [ -f "$1" ]; then
|
||||||
|
info "OK: $1"
|
||||||
|
else
|
||||||
|
warn "creating $1"
|
||||||
|
$DRY_RUN || touch "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
file_link() { # Make sure $1 is a link to $2.
|
||||||
|
target="$(realpath "$2")"
|
||||||
|
if [ "$(readlink "$1")" = "$target" ]; then
|
||||||
|
info "OK: $1"
|
||||||
|
else
|
||||||
|
warn "linking $1 -> $target"
|
||||||
|
$DRY_RUN || ln -sf "$target" "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
file_content() { # Ensure $1 and $2 contents are equal, updating $1 if needed.
|
||||||
|
if diff "$1" "$2" >/dev/null 2>&1; then
|
||||||
|
info "OK: $1"
|
||||||
|
else
|
||||||
|
warn "overwriting $1 with $2:"
|
||||||
|
cat "$2"
|
||||||
|
$DRY_RUN || cp -f "$2" "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
task_gather_user_info() {
|
||||||
|
heading "Gather user information"
|
||||||
|
printf 'git name [%s]: ' "$DEFAULT_GIT_USER"
|
||||||
|
read -r git_user
|
||||||
|
printf 'git e-mail [%s]: ' "$DEFAULT_GIT_EMAIL"
|
||||||
|
read -r git_email
|
||||||
|
}
|
||||||
|
|
||||||
|
task_remove_bash_profile() {
|
||||||
|
heading "Remove pre-installed bash profile"
|
||||||
|
for f in .bash_logout .profile; do
|
||||||
|
file_absent "$HOME/$f"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
task_ensure_directories() {
|
||||||
|
heading "Ensure existence of directories used by dotfiles"
|
||||||
|
echo "$DIRS" | while read -r d; do directory_present "$d"; done
|
||||||
|
}
|
||||||
|
|
||||||
|
task_link_dotfiles() {
|
||||||
|
heading "Link dotfiles"
|
||||||
|
echo "$DOTFILES" | while read -r dest src; do
|
||||||
|
file_link "$src" "$dest"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
task_deploy_templates() {
|
||||||
|
heading "Deploy templates"
|
||||||
|
temp_git="$(mktemp)"
|
||||||
|
cat >"$temp_git" <<EOF
|
||||||
|
# *************************************
|
||||||
|
# * DO NOT EDIT THIS FILE *
|
||||||
|
# *************************************
|
||||||
|
#
|
||||||
|
# This file was generated by the bootstrap script and any changes will be
|
||||||
|
# overwritten the next time the it is run. For local settings, use this
|
||||||
|
# instead:
|
||||||
|
#
|
||||||
|
# ~/.local/etc/git/config
|
||||||
|
#
|
||||||
|
EOF
|
||||||
|
git config -f "$temp_git" user.name "${git_user:-$DEFAULT_GIT_USER}"
|
||||||
|
git config -f "$temp_git" user.email "${git_email:-$DEFAULT_GIT_EMAIL}"
|
||||||
|
file_content "$HOME/.local/etc/git/config.host" "$temp_git"
|
||||||
|
}
|
||||||
|
|
||||||
|
task_link_local_commands() {
|
||||||
|
heading "Link local commands"
|
||||||
|
for cmd in bin/*; do
|
||||||
|
file_link "$HOME/.local/bin/$(basename "$cmd")" "$cmd"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
task_link_dircolors() {
|
||||||
|
heading "Link dircolors"
|
||||||
|
for f in dircolors/*; do
|
||||||
|
file_link "$XDG_CONFIG_HOME/dircolors/$(basename "$f")" "$f"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
task_make_logins_silent() {
|
||||||
|
heading "Make logins silent"
|
||||||
|
file_touch "$HOME/.hushlogin"
|
||||||
|
}
|
||||||
|
|
||||||
|
task_install_vim_plugins() {
|
||||||
|
heading "Install vim plugins"
|
||||||
|
if command -v vim >/dev/null 2>&1; then
|
||||||
|
warn "Installing vim plugins"
|
||||||
|
$DRY_RUN || vim -nes -u "$XDG_CONFIG_HOME/vim/vimrc" -c 'PlugInstall | qall!'
|
||||||
|
else
|
||||||
|
error "vim is not installed; skipping plugin installation..."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
task_gather_user_info
|
||||||
|
task_remove_bash_profile
|
||||||
|
task_ensure_directories
|
||||||
|
task_link_dotfiles
|
||||||
|
task_deploy_templates
|
||||||
|
task_link_local_commands
|
||||||
|
task_link_dircolors
|
||||||
|
task_make_logins_silent
|
||||||
|
task_install_vim_plugins
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
localhost
|
|
||||||
|
|
||||||
[all:vars]
|
|
||||||
ansible_connection=local
|
|
||||||
|
|
15
local.yml
15
local.yml
|
@ -1,15 +0,0 @@
|
||||||
- name: Make myself at home :)
|
|
||||||
hosts: all
|
|
||||||
|
|
||||||
vars_prompt:
|
|
||||||
- name: git_user
|
|
||||||
private: no
|
|
||||||
default: Fernando Schauenburg
|
|
||||||
- name: git_email
|
|
||||||
private: no
|
|
||||||
default: fernando@schauenburg.me
|
|
||||||
|
|
||||||
roles:
|
|
||||||
- dotfiles
|
|
||||||
- packages
|
|
||||||
|
|
|
@ -1,112 +0,0 @@
|
||||||
---
|
|
||||||
- name: remove pre-installed bash profile
|
|
||||||
file:
|
|
||||||
path: "{{ item }}"
|
|
||||||
state: absent
|
|
||||||
loop:
|
|
||||||
- ~/.bash_logout
|
|
||||||
- ~/.profile
|
|
||||||
|
|
||||||
|
|
||||||
- name: ensure existence of directories used by dotfiles
|
|
||||||
file:
|
|
||||||
path: "{{ item }}"
|
|
||||||
state: directory
|
|
||||||
loop:
|
|
||||||
- ~/.config/alacritty
|
|
||||||
- ~/.config/dircolors
|
|
||||||
- ~/.config/git
|
|
||||||
- ~/.config/mintty
|
|
||||||
- ~/.config/python
|
|
||||||
- ~/.config/readline
|
|
||||||
- ~/.config/tmux
|
|
||||||
- ~/.config/vim
|
|
||||||
- ~/.config/vim/autoload # vim plugin manager
|
|
||||||
- ~/.local/bin # local commands
|
|
||||||
- ~/.local/etc/git # local git config
|
|
||||||
- ~/.local/share/bash # for bash history
|
|
||||||
- ~/.local/share/bash-completion/completions # custom bash completions
|
|
||||||
- ~/.local/share/less # less history
|
|
||||||
- ~/.local/share/python # python history
|
|
||||||
- ~/.local/share/vim # viminfo
|
|
||||||
- ~/.local/share/vim/plugged # vim plugins
|
|
||||||
- ~/.ssh
|
|
||||||
|
|
||||||
|
|
||||||
- name: link dotfiles
|
|
||||||
file:
|
|
||||||
src: "{{ role_path }}/files/{{ item.src }}"
|
|
||||||
dest: "{{ item.dest }}"
|
|
||||||
state: link
|
|
||||||
force: yes
|
|
||||||
loop:
|
|
||||||
- { src: alacritty.yml, dest: ~/.config/alacritty/alacritty.yml }
|
|
||||||
- { src: bashrc, dest: ~/.bash_profile }
|
|
||||||
- { src: bashrc, dest: ~/.bashrc }
|
|
||||||
- { src: gitconfig, dest: ~/.config/git/config }
|
|
||||||
- { src: gitignore, dest: ~/.config/git/ignore }
|
|
||||||
- { src: inputrc, dest: ~/.config/readline/inputrc }
|
|
||||||
- { src: minttyrc, dest: ~/.config/mintty/config }
|
|
||||||
- { src: plug.vim, dest: ~/.config/vim/autoload/plug.vim }
|
|
||||||
- { src: python-startup.py, dest: ~/.config/python/startup.py }
|
|
||||||
- { src: ssh_config, dest: ~/.ssh/config }
|
|
||||||
- { src: tmux-colors.conf, dest: ~/.config/tmux/tmux-colors.conf }
|
|
||||||
- { src: tmux.conf, dest: ~/.config/tmux/tmux.conf }
|
|
||||||
- { src: vimrc, dest: ~/.config/vim/vimrc }
|
|
||||||
|
|
||||||
|
|
||||||
- name: deploy templates
|
|
||||||
template:
|
|
||||||
src: "{{ item.src }}"
|
|
||||||
dest: "{{ item.dest }}"
|
|
||||||
loop:
|
|
||||||
- src: gitconfig.host.j2
|
|
||||||
dest: ~/.local/etc/git/config.host
|
|
||||||
|
|
||||||
|
|
||||||
- name: link local commands
|
|
||||||
file:
|
|
||||||
src: "{{ item }}"
|
|
||||||
dest: ~/.local/bin/{{ item | basename }}
|
|
||||||
state: link
|
|
||||||
force: yes
|
|
||||||
with_fileglob:
|
|
||||||
- "{{ role_path }}/files/bin/*"
|
|
||||||
|
|
||||||
|
|
||||||
- name: link dircolors
|
|
||||||
file:
|
|
||||||
src: "{{ item }}"
|
|
||||||
dest: ~/.config/dircolors/{{ item | basename }}
|
|
||||||
state: link
|
|
||||||
force: yes
|
|
||||||
with_fileglob:
|
|
||||||
- "{{ role_path }}/files/dircolors/*"
|
|
||||||
|
|
||||||
|
|
||||||
- block:
|
|
||||||
- name: hushlogin exists?
|
|
||||||
stat:
|
|
||||||
path: ~/.hushlogin
|
|
||||||
register: hush
|
|
||||||
|
|
||||||
- name: create hushlogin
|
|
||||||
when: hush.stat.exists == false
|
|
||||||
file:
|
|
||||||
path: ~/.hushlogin
|
|
||||||
state: touch
|
|
||||||
|
|
||||||
|
|
||||||
- block:
|
|
||||||
- name: vim plugins installed?
|
|
||||||
find:
|
|
||||||
paths: ~/.local/share/vim/plugged
|
|
||||||
file_type: directory
|
|
||||||
register: vim_plugins
|
|
||||||
|
|
||||||
- name: install vim plugins
|
|
||||||
when: vim_plugins.matched|int == 0
|
|
||||||
shell: vim -nes -u ~/.config/vim/vimrc -c 'PlugInstall | qall!'
|
|
||||||
register: result_vim_plugins
|
|
||||||
failed_when: result_vim_plugins.rc != 0
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
# *************************************
|
|
||||||
# * DO NOT EDIT THIS FILE *
|
|
||||||
# *************************************
|
|
||||||
#
|
|
||||||
# This file was generated by Ansible and any changes will be overwritten the
|
|
||||||
# next time the playbook is run. For local settings, use this instead:
|
|
||||||
#
|
|
||||||
# ~/.local/etc/git/config
|
|
||||||
#
|
|
||||||
|
|
||||||
[user]
|
|
||||||
name = {{ git_user }}
|
|
||||||
email = {{ git_email }}
|
|
||||||
|
|
||||||
{% if ansible_os_family == 'Darwin' %}
|
|
||||||
[credential]
|
|
||||||
helper = osxkeychain
|
|
||||||
{% endif %}
|
|
||||||
|
|
|
@ -1,74 +0,0 @@
|
||||||
---
|
|
||||||
- name: install apt packages
|
|
||||||
when: ansible_facts['os_family']|lower == "debian"
|
|
||||||
become: yes
|
|
||||||
apt:
|
|
||||||
state: latest
|
|
||||||
update_cache: yes
|
|
||||||
name:
|
|
||||||
- bash
|
|
||||||
- bash-completion
|
|
||||||
- curl
|
|
||||||
- exa
|
|
||||||
- exuberant-ctags
|
|
||||||
- ffmpeg
|
|
||||||
- git
|
|
||||||
- git-crypt
|
|
||||||
- git-lfs
|
|
||||||
- gpg
|
|
||||||
- htop
|
|
||||||
- nmap
|
|
||||||
- psmisc
|
|
||||||
- python3
|
|
||||||
- python3-pip
|
|
||||||
- shellcheck
|
|
||||||
- sqlite
|
|
||||||
- stow
|
|
||||||
- tmux
|
|
||||||
- tree
|
|
||||||
- vifm
|
|
||||||
- vim
|
|
||||||
- wget
|
|
||||||
- youtube-dl
|
|
||||||
|
|
||||||
|
|
||||||
- name: install homebrew packages
|
|
||||||
when: ansible_facts['os_family']|lower == "darwin"
|
|
||||||
homebrew:
|
|
||||||
state: latest
|
|
||||||
update_homebrew: yes
|
|
||||||
name:
|
|
||||||
- bash
|
|
||||||
- bash-completion
|
|
||||||
- coreutils
|
|
||||||
- ctags
|
|
||||||
- curl
|
|
||||||
- exa
|
|
||||||
- exiftool
|
|
||||||
- ffmpeg
|
|
||||||
- findutils
|
|
||||||
- git
|
|
||||||
- git-crypt
|
|
||||||
- git-lfs
|
|
||||||
- gnu-sed
|
|
||||||
- gpg
|
|
||||||
- grep
|
|
||||||
- gzip
|
|
||||||
- htop
|
|
||||||
- imagemagick
|
|
||||||
- jupyter
|
|
||||||
- make
|
|
||||||
- nmap
|
|
||||||
- pstree
|
|
||||||
- python3
|
|
||||||
- reattach-to-user-namespace
|
|
||||||
- shellcheck
|
|
||||||
- sqlite
|
|
||||||
- stow
|
|
||||||
- tmux
|
|
||||||
- tree
|
|
||||||
- vifm
|
|
||||||
- vim
|
|
||||||
- wget
|
|
||||||
- youtube-dl
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue