boma/roles/dev_env/tasks/per_user.yml
sjat f3f382ae69 Add dev_env role: zsh/tmux/nvim for workstation-class hosts
A new role (separate from base) that gives workstation-class hosts (ubongo
now, mamba later) a clean interactive environment: zsh + oh-my-zsh +
oh-my-posh, tmux + TPM plugins, and neovim. Dotfiles are real files deployed
via GNU stow (not templated); pinned nvim v0.12.2 + oh-my-posh 29.0.1.

Configs re-derived (ADR-013) from AnsibleBaobabV4 + the operator's fisi setup
on boma's terms: no Nerd Font (headless host), no system LSP suite (nvim uses
mason), versions pinned (V4 tracks latest). Applied via playbooks/workstation.yml
to the control group for users sjat + claude. Lint + Molecule (idempotent) green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 13:50:11 +02:00

69 lines
2 KiB
YAML

---
- name: Look up account for {{ dev_env__user }}
ansible.builtin.getent:
database: passwd
key: "{{ dev_env__user }}"
- name: Resolve home directory for {{ dev_env__user }}
ansible.builtin.set_fact:
dev_env__home: "{{ getent_passwd[dev_env__user][4] }}"
- name: Set login shell to zsh for {{ dev_env__user }}
ansible.builtin.user:
name: "{{ dev_env__user }}"
shell: /usr/bin/zsh
tags: [users]
- name: Clone oh-my-zsh for {{ dev_env__user }}
become: true
become_user: "{{ dev_env__user }}"
ansible.builtin.git:
repo: https://github.com/ohmyzsh/ohmyzsh.git
dest: "{{ dev_env__home }}/.oh-my-zsh"
version: master
depth: 1
update: false
- name: Clone oh-my-zsh custom plugins for {{ dev_env__user }}
become: true
become_user: "{{ dev_env__user }}"
ansible.builtin.git:
repo: "{{ item.repo }}"
dest: "{{ dev_env__home }}/.oh-my-zsh/custom/plugins/{{ item.name }}"
version: master
depth: 1
update: false
loop: "{{ dev_env__omz_custom_plugins }}"
loop_control:
label: "{{ item.name }}"
- name: Clone tmux plugins (incl. TPM) for {{ dev_env__user }}
become: true
become_user: "{{ dev_env__user }}"
ansible.builtin.git:
repo: "{{ item.repo }}"
dest: "{{ dev_env__home }}/.tmux/plugins/{{ item.name }}"
version: "{{ item.version }}"
depth: 1
update: false
loop: "{{ dev_env__tmux_plugins }}"
loop_control:
label: "{{ item.name }}"
- name: Install dotfiles into ~/.dotfiles for {{ dev_env__user }}
become: true
become_user: "{{ dev_env__user }}"
ansible.builtin.copy:
src: dotfiles/
dest: "{{ dev_env__home }}/.dotfiles/"
mode: preserve
tags: [config]
- name: Stow dotfiles into home for {{ dev_env__user }}
become: true
become_user: "{{ dev_env__user }}"
ansible.builtin.command:
cmd: "stow --no-folding -v -d {{ dev_env__home }}/.dotfiles -t {{ dev_env__home }} zsh tmux nvim"
register: dev_env__stow
changed_when: "'LINK:' in dev_env__stow.stderr or 'LINK:' in dev_env__stow.stdout"
tags: [config]