# SPDX-License-Identifier: MIT-0 --- # handlers file for bootstrap - name: Configure git listen: git block: # @NOTE below are system git configuration - name: Configure git aliases become: true block: - name: Configure non-coding alias for merge subcommand community.general.git_config: name: alias.assimilate add_mode: replace-all state: present value: merge - name: Configure alias for merge subcommand community.general.git_config: name: alias.mrg add_mode: replace-all state: present value: merge - name: Configure non-coding alias for add subcommand community.general.git_config: name: alias.approve add_mode: replace-all state: present value: add - name: Configure non-coding alias for status subcommand community.general.git_config: name: alias.revisions add_mode: replace-all state: present value: status - name: Configure alias for status subcommand community.general.git_config: name: alias.stat add_mode: replace-all state: present value: status - name: Configure non-coding alias for commit subcommand community.general.git_config: name: alias.finalize add_mode: replace-all state: present value: commit - name: Configure alias for commit subcommand community.general.git_config: name: alias.cit add_mode: replace-all state: present value: commit - name: Configure alias for config subcommand community.general.git_config: name: alias.cfg add_mode: replace-all state: present value: config - name: Configure non-coding alias for commit subcommand with signing flag community.general.git_config: name: alias.claim add_mode: replace-all state: present value: commit -S - name: Configure alias for commit subcommand with signing flag community.general.git_config: name: alias.sig add_mode: replace-all state: present value: commit -S - name: Configure non-coding alias for show subcommand community.general.git_config: name: alias.review add_mode: replace-all state: present value: show - name: Configure alias for show subcommand community.general.git_config: name: alias.peek add_mode: replace-all state: present value: show - name: Configure alias for add subcommand with universal staging flag community.general.git_config: name: alias.badd add_mode: replace-all state: present value: add -A - name: Configure non-coding alias for add subcommand with universal staging flag community.general.git_config: name: alias.approve-all add_mode: replace-all state: present value: add -A - name: Configure non-coding alias for rm subcommand community.general.git_config: name: alias.redact add_mode: replace-all state: present value: rm - name: Configure non-coding alias for init subcommand community.general.git_config: name: alias.author add_mode: replace-all state: present value: init - name: Configure non-coding alias for mv subcommand community.general.git_config: name: alias.revise add_mode: replace-all state: present value: mv - name: Configure non-coding alias for rebase subcommand community.general.git_config: name: alias.retroact add_mode: replace-all state: present value: rebase - name: Configure alias for rebase subcommand community.general.git_config: name: alias.rb add_mode: replace-all state: present value: rebase - name: Configure non-coding alias for push subcommand community.general.git_config: name: alias.publish add_mode: replace-all state: present value: push - name: Configure non-coding alias for pull subcommand community.general.git_config: name: alias.publication add_mode: replace-all state: present value: pull - name: Configure non-coding alias for fetch subcommand community.general.git_config: name: alias.manuscript add_mode: replace-all state: present value: fetch - name: Configure alias for fetch subcommand community.general.git_config: name: alias.get add_mode: replace-all state: present value: fetch - name: Configure non-coding alias for clone subcommand community.general.git_config: name: alias.copy add_mode: replace-all state: present value: clone - name: Configure alias for clone subcommand community.general.git_config: name: alias.cp add_mode: replace-all state: present value: clone - name: Configure non-coding alias for branch subcommand community.general.git_config: name: alias.draft add_mode: replace-all state: present value: branch - name: Configure alias for branch subcommand community.general.git_config: name: alias.br add_mode: replace-all state: present value: branch - name: Configure non-coding alias for switch subcommand community.general.git_config: name: alias.edit add_mode: replace-all state: present value: switch - name: Configure alias for switch subcommand community.general.git_config: name: alias.cd add_mode: replace-all state: present value: switch - name: Configure non-coding alias for restore subcommand community.general.git_config: name: alias.revert add_mode: replace-all state: present value: restore - name: Configure alias for restore subcommand community.general.git_config: name: alias.rs add_mode: replace-all state: present value: restore - name: Set default editor for git become: true community.general.git_config: add_mode: replace-all name: core.editor state: present value: "{{ config.git.sys.editor }}" - name: Create a directory for storing system-level templates for git become: true ansible.builtin.file: group: root owner: root path: /etc/gitconfig.d state: directory - name: Create a commit message template file for git become: true ansible.builtin.copy: owner: root group: root backup: true dest: /etc/gitconfig.d/commit.msg force: true src: gitconfig.d/commit.msg - name: Set system-level commit message template file path for git become: true community.general.git_config: add_mode: replace-all name: commit.template state: present value: /etc/gitconfig.d/commit.msg - name: Set UI to have color for git at system-level become: true community.general.git_config: add_mode: replace-all name: color.ui state: present value: "true" - name: Set line-end conversion behavior for git become: true community.general.git_config: add_mode: replace-all name: core.autocrlf state: present value: input # @NOTE below are user git configuration - name: Create a user directory for a user gitignore file for git when: ansible_facts['user_id'] in hostvars[inventory_hostname].users ansible.builtin.file: owner: "{{ ansible_facts['user_id'] }}" group: "{{ hostvars[inventory_hostname].users[ansible_facts['user_id']].group | default(ansible_facts['user_id']) }}" path: "{{ ansible_facts['user_dir'] }}/.config/git" state: directory - name: Create a user gitignore file for git when: ansible_facts['user_id'] in hostvars[inventory_hostname].users ansible.builtin.copy: owner: "{{ ansible_facts['user_id'] }}" group: "{{ hostvars[inventory_hostname].users[ansible_facts['user_id']].group | default(ansible_facts['user_id']) }}" backup: true dest: "{{ ansible_facts['user_dir'] }}/.config/git/gitignore" force: true src: gitconfig.d/exclude.rules - name: Set user gitignore file path for git when: ansible_facts['user_id'] in hostvars[inventory_hostname].users community.general.git_config: add_mode: replace-all name: core.excludesfile scope: global state: present value: "{{ ansible_facts['user_dir'] }}/.config/git/gitignore" - name: Create link from user config directory git config file to user home directory git config file when: ansible_facts['user_id'] in hostvars[inventory_hostname].users community.general.file: src: "{{ ansible_facts['user_dir'] }}/.gitconfig" dest: "{{ ansible_facts['user_dir'] }}/.config/git/config" # @TODO check whether below two attributes make sense for links owner: "{{ ansible_facts['user_id'] }}" group: "{{ hostvars[inventory_hostname].users[ansible_facts['user_id']].group | default(ansible_facts['user_id']) }}" state: hard - name: Set format for keys used by git when: ansible_facts['user_id'] in hostvars[inventory_hostname].users community.general.git_config: add_mode: replace-all name: gpg.format scope: global state: present value: openpgp - name: Set signing key to be used by git when: ansible_facts['user_id'] in hostvars[inventory_hostname].users and hostvars[inventory_hostname].users[ansible_facts['user_id']].gpg_keys is not None and len(hostvars[inventory_hostname].users[ansible_facts['user_id']].gpg_keys) > 0 community.general.git_config: add_mode: replace-all name: user.signingkey scope: global state: present value: "{{ hostvars[inventory_hostname].users[ansible_facts['user_id']].gpg_keys[hostvars[inventory_hostname].users[ansible_facts['user_id']].gpg_keyid_pref].id | default((hostvars[inventory_hostname].users[ansible_facts['user_id']].gpg_keys | random).id) }}" - name: Set name of user of git when: ansible_facts['user_id'] in hostvars[inventory_hostname].users community.general.git_config: add_mode: replace-all name: user.name scope: global state: present value: "{{ hostvars[inventory_hostname].users[ansible_facts['user_id']].git_profile.name }}" - name: Set email of user of git when: ansible_facts['user_id'] in hostvars[inventory_hostname].users community.general.git_config: add_mode: replace-all name: user.email scope: global state: present value: "{{ hostvars[inventory_hostname].users[ansible_facts['user_id']].git_profile.email }}" - name: Set default initial branch name become: true community.general.git_config: add_mode: replace-all name: init.defaultBranch scope: system state: present value: main