All checks were successful
CI / skip-ci-check (pull_request) Successful in 1m18s
CI / lint-and-test (pull_request) Successful in 1m21s
CI / ansible-validation (pull_request) Successful in 2m43s
CI / secret-scanning (pull_request) Successful in 1m19s
CI / dependency-scan (pull_request) Successful in 1m23s
CI / sast-scan (pull_request) Successful in 2m28s
CI / license-check (pull_request) Successful in 1m20s
CI / vault-check (pull_request) Successful in 2m21s
CI / playbook-test (pull_request) Successful in 2m19s
CI / container-scan (pull_request) Successful in 1m48s
CI / sonar-analysis (pull_request) Successful in 1m26s
CI / workflow-summary (pull_request) Successful in 1m17s
147 lines
5.0 KiB
YAML
147 lines
5.0 KiB
YAML
---
|
|
# Configure shell for a single user
|
|
# Variable: current_user - the username to configure
|
|
|
|
- name: "Get user information: {{ current_user }}"
|
|
ansible.builtin.getent:
|
|
database: passwd
|
|
key: "{{ current_user }}"
|
|
register: user_info
|
|
failed_when: false
|
|
|
|
- name: "Set user home directory: {{ current_user }}"
|
|
ansible.builtin.set_fact:
|
|
user_home: "{{ user_info.ansible_facts.getent_passwd[current_user][4] }}"
|
|
when: user_info.ansible_facts.getent_passwd[current_user] is defined
|
|
|
|
- name: Skip if user not found
|
|
ansible.builtin.debug:
|
|
msg: "User {{ current_user }} not found, skipping shell configuration"
|
|
when: user_info.ansible_facts.getent_passwd[current_user] is not defined
|
|
|
|
- name: Configure shell environment
|
|
when: user_info.ansible_facts.getent_passwd[current_user] is defined
|
|
block:
|
|
- name: "Optionally set zsh as default shell: {{ current_user }}"
|
|
ansible.builtin.user:
|
|
name: "{{ current_user }}"
|
|
shell: /usr/bin/zsh
|
|
become: true
|
|
when: shell_set_default_shell | bool
|
|
|
|
- name: "Install managed zsh aliases file: {{ current_user }}"
|
|
ansible.builtin.copy:
|
|
src: files/ansible_aliases.zsh
|
|
dest: "{{ user_home }}/{{ shell_aliases_filename }}"
|
|
owner: "{{ current_user }}"
|
|
group: "{{ current_user }}"
|
|
mode: "0644"
|
|
become: true
|
|
|
|
- name: "Ensure ~/.zshrc exists (do not overwrite): {{ current_user }}"
|
|
ansible.builtin.file:
|
|
path: "{{ user_home }}/.zshrc"
|
|
state: touch
|
|
owner: "{{ current_user }}"
|
|
group: "{{ current_user }}"
|
|
mode: "0644"
|
|
become: true
|
|
when: not (shell_deploy_managed_zshrc | bool)
|
|
|
|
- name: "Ensure ~/.zshrc sources managed aliases: {{ current_user }}"
|
|
ansible.builtin.lineinfile:
|
|
path: "{{ user_home }}/.zshrc"
|
|
line: "{{ shell_zshrc_source_line }}"
|
|
state: present
|
|
insertafter: EOF
|
|
become: true
|
|
when: not (shell_deploy_managed_zshrc | bool)
|
|
|
|
- name: "Install Oh My Zsh: {{ current_user }}"
|
|
become: true
|
|
become_user: "{{ current_user }}"
|
|
ansible.builtin.shell: sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)" "" --unattended
|
|
args:
|
|
creates: "{{ user_home }}/.oh-my-zsh"
|
|
changed_when: false
|
|
when: shell_install_oh_my_zsh | bool
|
|
|
|
- name: "Clone Powerlevel10k theme: {{ current_user }}"
|
|
ansible.builtin.git:
|
|
repo: https://github.com/romkatv/powerlevel10k.git
|
|
dest: "{{ user_home }}/.oh-my-zsh/custom/themes/powerlevel10k"
|
|
version: master
|
|
depth: 1
|
|
update: false
|
|
become: true
|
|
become_user: "{{ current_user }}"
|
|
when:
|
|
- shell_install_powerlevel10k | bool
|
|
- shell_install_oh_my_zsh | bool
|
|
|
|
- name: "Install zsh plugins: {{ current_user }}"
|
|
ansible.builtin.git:
|
|
repo: "{{ item.repo }}"
|
|
dest: "{{ user_home }}/.oh-my-zsh/custom/plugins/{{ item.name }}"
|
|
version: master
|
|
depth: 1
|
|
update: false
|
|
become: true
|
|
become_user: "{{ current_user }}"
|
|
loop: "{{ zsh_plugins }}"
|
|
when:
|
|
- shell_install_plugins | bool
|
|
- shell_install_oh_my_zsh | bool
|
|
|
|
- name: "Deploy managed .zshrc (full mode): {{ current_user }}"
|
|
ansible.builtin.copy:
|
|
src: files/zshrc.full
|
|
dest: "{{ user_home }}/.zshrc"
|
|
owner: "{{ current_user }}"
|
|
group: "{{ current_user }}"
|
|
mode: "0644"
|
|
backup: true
|
|
become: true
|
|
when: shell_deploy_managed_zshrc | bool
|
|
|
|
- name: "Deploy Powerlevel10k config (full mode): {{ current_user }}"
|
|
ansible.builtin.copy:
|
|
src: files/p10k.zsh
|
|
dest: "{{ user_home }}/.p10k.zsh"
|
|
owner: "{{ current_user }}"
|
|
group: "{{ current_user }}"
|
|
mode: "0644"
|
|
backup: true
|
|
become: true
|
|
when:
|
|
- shell_install_powerlevel10k | bool
|
|
- shell_deploy_managed_zshrc | bool
|
|
|
|
- name: "Ensure .local/bin directory exists: {{ current_user }}"
|
|
ansible.builtin.file:
|
|
path: "{{ user_home }}/.local/bin"
|
|
state: directory
|
|
owner: "{{ current_user }}"
|
|
group: "{{ current_user }}"
|
|
mode: '0755'
|
|
become: true
|
|
|
|
- name: "Deploy showapps script: {{ current_user }}"
|
|
ansible.builtin.copy:
|
|
src: files/showapps.sh
|
|
dest: "{{ user_home }}/.local/bin/showapps"
|
|
owner: "{{ current_user }}"
|
|
group: "{{ current_user }}"
|
|
mode: '0755'
|
|
become: true
|
|
|
|
- name: "Display post-installation instructions: {{ current_user }}"
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "=== Shell Configuration Complete for {{ current_user }} ==="
|
|
- "Aliases installed: {{ user_home }}/{{ shell_aliases_filename }}"
|
|
- >-
|
|
Mode: {{ shell_mode | default('minimal') }} ({{ 'managed ~/.zshrc deployed' if (shell_deploy_managed_zshrc | bool) else 'aliases-only appended to ~/.zshrc' }})
|
|
- "If you want zsh as default login shell, set: shell_set_default_shell=true"
|
|
- "=========================================="
|