143 lines
5.5 KiB
YAML
143 lines
5.5 KiB
YAML
---
|
|
- name: Organize Home Directory based on XDG Specification
|
|
hosts: localhost
|
|
connection: local
|
|
gather_facts: no
|
|
|
|
# This playbook helps organize your home directory by moving dotfiles
|
|
# into XDG standard directories (~/.config, ~/.local/share, ~/.cache).
|
|
#
|
|
# WHAT CAN'T BE DONE and WHY:
|
|
# 1. Automatic Backup: This playbook does not automatically back up your files.
|
|
# It is CRITICAL that you back up your dotfiles before running this playbook.
|
|
# A mistake could lead to data loss.
|
|
#
|
|
# 2. Sourcing Shell RC file: The playbook will update your .bashrc, but for the
|
|
# changes to take effect in your current terminal, you must manually source it
|
|
# with `source ~/.bashrc` or open a new terminal.
|
|
#
|
|
# 3. Risky Moves: Some application directories like .mozilla or .thunderbird
|
|
# are not moved because they can be complex and moving them might break
|
|
# profiles or extensions. It's safer to leave them in place.
|
|
#
|
|
# 4. Applications without standard way to change config path: Some applications
|
|
# do not follow XDG specs and do not provide an easy way to change their
|
|
# ax_path. These are left untouched.
|
|
|
|
vars:
|
|
home_dir: "{{ lookup('env', 'HOME') }}"
|
|
user: "{{ lookup('env', 'USER') }}"
|
|
|
|
tasks:
|
|
- name: IMPORTANT - Manual Backup Reminder
|
|
pause:
|
|
prompt: |
|
|
This playbook will move files in your home directory.
|
|
PLEASE back up your dotfiles before proceeding.
|
|
Press Enter to continue if you have a backup, or Ctrl+C to abort.
|
|
|
|
- name: Ensure XDG base directories exist
|
|
file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
mode: '0755'
|
|
loop:
|
|
- "{{ home_dir }}/.config"
|
|
- "{{ home_dir }}/.local/share"
|
|
- "{{ home_dir }}/.cache"
|
|
|
|
- name: Ensure parent directories for files exist
|
|
file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
mode: '0755'
|
|
loop:
|
|
- "{{ home_dir }}/.local/share/python"
|
|
- "{{ home_dir }}/.config/git"
|
|
- "{{ home_dir }}/.config/gtk-2.0"
|
|
- "{{ home_dir }}/.config/mycli"
|
|
- "{{ home_dir }}/.local/share/tig"
|
|
|
|
- name: Move dotfiles and directories to XDG locations
|
|
block:
|
|
- name: Check if dotfile/directory exists
|
|
stat:
|
|
path: "{{ home_dir }}/{{ item.src }}"
|
|
register: stat_result
|
|
loop:
|
|
- { src: '.android', dest: '.config/android' }
|
|
- { src: '.ansible', dest: '.config/ansible' }
|
|
- { src: '.docker', dest: '.config/docker' }
|
|
- { src: '.npm', dest: '.cache/npm' }
|
|
- { src: '.nvm', dest: '.local/share/nvm' }
|
|
- { src: '.wine', dest: '.local/share/wine' }
|
|
- { src: '.steam', dest: '.local/share/Steam' }
|
|
- { src: '.yt-dlp', dest: '.config/yt-dlp' }
|
|
- { src: '.vim', dest: '.config/vim' }
|
|
- { src: '.python_history', dest: '.local/share/python/history' }
|
|
- { src: '.gitconfig', dest: '.config/git/config' }
|
|
- { src: '.gtkrc-2.0', dest: '.config/gtk-2.0/gtkrc' }
|
|
- { src: '.gtkrc-2.0-kde4', dest: '.config/gtk-2.0/' }
|
|
- { src: '.myclirc', dest: '.config/mycli/myclirc' }
|
|
- { src: '.tig_history', dest: '.local/share/tig/history' }
|
|
|
|
- name: Move file or directory
|
|
command: "mv {{ home_dir }}/{{ item.item.src }} {{ home_dir }}/{{ item.item.dest }}"
|
|
when: item.stat.exists
|
|
loop: "{{ stat_result.results }}"
|
|
loop_control:
|
|
label: "Moving {{ item.item.src }}"
|
|
args:
|
|
# This makes the move idempotent. If the source is gone, it won't run.
|
|
removes: "{{ home_dir }}/{{ item.item.src }}"
|
|
|
|
- name: Update .bashrc with XDG environment variables
|
|
blockinfile:
|
|
path: "{{ home_dir }}/.bashrc"
|
|
block: |
|
|
# XDG Base Directory Specification
|
|
export XDG_CONFIG_HOME="$HOME/.config"
|
|
export XDG_CACHE_HOME="$HOME/.cache"
|
|
export XDG_DATA_HOME="$HOME/.local/share"
|
|
export XDG_STATE_HOME="$HOME/.local/state"
|
|
|
|
# Tell applications where to find their files
|
|
export ANDROID_PREFS_ROOT="$HOME/.config/android"
|
|
export ANSIBLE_CONFIG="$XDG_CONFIG_HOME/ansible/ansible.cfg"
|
|
export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker"
|
|
export NVM_DIR="$XDG_DATA_HOME/nvm"
|
|
export PYTHONHISTFILE="$XDG_DATA_HOME/python/history"
|
|
export WINEPREFIX="$XDG_DATA_HOME/wine"
|
|
marker: "# {mark} ANSIBLE MANAGED BLOCK - XDG VARS"
|
|
|
|
- name: Update application-specific configurations
|
|
block:
|
|
- name: Configure mycli to use new log file path
|
|
ini_file:
|
|
path: "{{ home_dir }}/.config/mycli/myclirc"
|
|
section: main
|
|
option: log_file
|
|
value: "{{ home_dir }}/.cache/mycli/mycli.log"
|
|
create: yes
|
|
mode: '0644'
|
|
|
|
- name: Configure vim to use new viminfo path
|
|
lineinfile:
|
|
path: "{{ home_dir }}/.config/vim/vimrc"
|
|
line: "set viminfo='100,n{{ home_dir }}/.local/share/vim/viminfo'"
|
|
create: yes
|
|
mode: '0644'
|
|
|
|
- name: Configure tig to use new history file path
|
|
copy:
|
|
dest: "{{ home_dir }}/.config/tig/config"
|
|
content: "set history-file = {{ home_dir }}/.local/share/tig/history"
|
|
create: yes
|
|
mode: '0644'
|
|
|
|
- name: Final instructions
|
|
debug:
|
|
msg: |
|
|
Playbook execution finished.
|
|
Please run `source ~/.bashrc` or open a new terminal for changes to take effect.
|