]>
us-delaporte.pagekite.me Git - dotfiles.git/blob - bin/dot
d99ef6eeef4bf1d17c0a1ef14c6dd0578627a30b
3 ANSIBLE
="$ENVS/ansible/bin/ansible-playbook"
5 dot - a (mostly) one script dotfiles manager
7 1. Install this file on your path
8 2. Clone your (or my) 'dotfiles' repository to ~/dotfiles
9 3. Run 'dot help' to get started.
11 Copyright 2026 Edward Delaporte V
12 Licensed under AGPLv3 and later.
15 install ansible CLI to $ANSIBLE
18 updates ~/dot.HOSTNAME.yaml
19 to include a symlink from ~/dotfiles/files/FILE to ~/.FILE
22 updates ~/dot.HOSTNAME.yaml
23 to run ~/dotfiles/SCRIPT.sh if it has not yet been run
24 creates ~/dot/SCRIPT.installed after SCRIPT has been run
27 check setup against ~/dot.HOSTNAME.yaml
30 apply config in ~/dot.HOSTNAME.yaml
33 if [ ! -n "$1" ] || [ "$1" == "help" ]; then
38 TASKFILE
="$HOME/dot.$HOSTNAME.yaml"
39 LINKFILES
="$HOME/dotfiles/files"
40 INSTALLS
="$HOME/dotfiles/install"
43 read -d '' EMPTY_TASKFILE
<< EOF
45 - name: Set up dotfiles on $HOSTNAME
51 - name: Check on $TASKFILE
57 if [ "$1" == "setup" ]; then
58 if [[ ! -f "$ANSIBLE" ]]; then
60 echo "Setting up Ansible in ~/envs/ansible"
61 cd $HOME/envs
; python3
-m venv ansible
62 $HOME/envs
/ansible
/bin
/pip
install ansible jinja2
64 if [[ -f "$ANSIBLE" ]]; then
65 echo "[ ok ]: Ansible setup at $ANSIBLE"
67 if [[ ! -f "$TASKFILE" ]]; then
68 echo "Creating $TASKFILE"
69 echo "$EMPTY_TASKFILE" >> $TASKFILE
71 if [[ -f "$TASKFILE" ]]; then
72 echo "[ ok ]: dot config at $TASKFILE"
76 if [ "$1" == "reset" ]; then
77 read -n1 -p "Reset $TASKFILE? [y,N]" input
78 if [[ ! $input == "Y" && ! $input == "y" ]]; then
79 echo "Aborted by user"
82 echo "$EMPTY_TASKFILE" > $TASKFILE
87 if [ "$1" == "check" ]; then
88 $ANSIBLE $TASKFILE --check --diff
91 if [ "$1" == "link" ]; then
92 if [ ! -n "$2" ]; then
93 echo "Can symlink: (from $LINKFILES)"
99 read -d '' LINK_THIS_FILE
<< EOF
102 ansible.builtin.file:
108 echo " $LINK_THIS_FILE" >> $TASKFILE
109 echo "$2 added to symlinks in $TASKFILE"
110 echo "Run 'dot apply' to create all configured symlinks"
114 if [ "$1" == "apply" ]; then
115 if [[ ! -f "$TASKFILE" ]]; then
116 echo "$TASKFILE is missing. Run 'dot setup'"
122 if [ "$1" == "install" ]; then
123 if [ ! -n "$2" ]; then
124 echo "Can install: (.sh scripts in $INSTALLS)"
126 ls -p | grep -v / | grep .sh
129 if [[ ! -f "$INSTALLS/$2.sh" ]]; then
130 echo "No such install script $INSTALLS/$2.sh"
131 echo "Run dot install with no params to list scripts."
136 read -d '' RUN_INSTALL
<< EOF
139 path: "$DOT/$2.installed"
140 register: $2_installed
142 ansible.builtin.shell: |
144 touch "$DOT/$2.installed"
145 when: not $2_installed.stat.exists
146 - name: verify $2 is installed
147 ansible.builtin.debug:
148 msg: "$2 is installed."
149 when: $2_installed.stat.exists
151 echo " $RUN_INSTALL" >> $TASKFILE
152 echo "Run 'dot apply' to run the install"