diff --git a/main.yml b/main.yml index 14b4704..633969c 100644 --- a/main.yml +++ b/main.yml @@ -9,6 +9,8 @@ when: ansible_os_family == 'Debian' - role: roles/ssh tags: [ssh] + - role: roles/dotfiles + tags: [dotfiles] tasks: - name: Dump hostvars tags: [never, dump] diff --git a/roles/dotfiles/files/pre-commit-hook.sh b/roles/dotfiles/files/pre-commit-hook.sh new file mode 100644 index 0000000..c4f0b41 --- /dev/null +++ b/roles/dotfiles/files/pre-commit-hook.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -e + +git status --short | grep -E '^D|^R' | sed 's/...//;s/ -> .*//' | while read f +do + test -L "$HOME/$f" && rm "$HOME/$f" +done diff --git a/roles/dotfiles/tasks/main.yml b/roles/dotfiles/tasks/main.yml new file mode 100644 index 0000000..79db792 --- /dev/null +++ b/roles/dotfiles/tasks/main.yml @@ -0,0 +1,18 @@ +- name: Ensure dotfiles directory + git: + repo: git@gitea.nehrke.info:nemoinho/dotfiles.git + dest: "{{ lookup('env', 'HOME') ~ '/dotfiles' }}" + +- name: Ensure pre-commit hook to automatically remove links of deleted dotfiles + copy: + src: pre-commit-hook.sh + dest: "{{ lookup('env', 'HOME') ~ '/dotfiles/.git/hooks/pre-commit' }}" + mode: u=rwx,g=rx,o=r + +- name: Ensure dotfiles are up-to-date + shell: | + stow --adopt . + [ -n "$(git status --short)" ] && git stash || true + args: + chdir: "{{ lookup('env', 'HOME') ~ '/dotfiles' }}" + executable: /bin/bash