Group vars refactor

This commit is contained in:
Sonny Bakker 2025-03-15 16:57:00 +01:00
parent f7eb8dc56d
commit 755493d155
31 changed files with 355 additions and 398 deletions

View file

@ -0,0 +1,53 @@
- name: Set package directory
ansible.builtin.set_fact:
build_dir: '{{ aur_build_dir }}/{{ item.name }}'
- name: 'Retrieve package name for {{ item.name }}'
command:
argv:
- grep
- --only-matching
- --perl-regexp
- "(?<=pkgname=).*"
- "{{ build_dir }}/PKGBUILD"
register: pkg_name
- name: 'Retrieve package version for {{ item.name }}'
command:
argv:
- grep
- --only-matching
- --perl-regexp
- "(?<=pkgver=).*"
- "{{ build_dir }}/PKGBUILD"
register: pkg_version
- name: 'Retrieve package release for {{ item.name }}'
command:
argv:
- grep
- --only-matching
- --perl-regexp
- "(?<=pkgrel=).*"
- "{{ build_dir }}/PKGBUILD"
register: pkg_release
- name: Set package filename & version
ansible.builtin.set_fact:
package_filename: '{{ pkg_name.stdout }}-{{ pkg_version.stdout }}-{{ pkg_release.stdout }}-{{ item.arch }}.pkg.tar.zst'
installed_version: ansible_facts.packages[item.package_name].version|default('')
- name: 'Build package {{ item.name }}'
ansible.builtin.command: 'makepkg --syncdeps --rmdeps --clean --noconfirm --force'
args:
chdir: '{{ build_dir }}'
creates: '{{ build_dir }}/{{ package_filename }}'
register: package_build
when: item.version != installed_version
- name: 'Install {{ item.name }}'
become: true
community.general.pacman:
name: '{{ build_dir }}/{{ package_filename }}'
state: present
when: item.version != installed_version

26
tasks/arch/aur.yml Normal file
View file

@ -0,0 +1,26 @@
- name: Retrieve directory stats
ansible.builtin.stat:
path: '{{ aur_build_dir }}/{{ item.name }}'
loop: '{{ aur_packages }}'
- name: Clone aur packages
become: true
ansible.builtin.git:
repo: '{{ item.url }}'
dest: '{{ aur_build_dir }}/{{ item.name }}'
update: true
loop: '{{ aur_packages }}'
- name: Change aur package directories owner
become: true
ansible.builtin.file:
path: '{{ aur_build_dir }}/{{ item.name }}'
state: directory
owner: '{{ ansible_user_id }}'
group: '{{ ansible_user_id }}'
recurse: true
loop: '{{ aur_packages }}'
- name: Build & install aur packages
ansible.builtin.include_tasks: 'tasks/arch/aur-package.yml'
loop: '{{ aur_packages }}'

66
tasks/arch/docker.yml Normal file
View file

@ -0,0 +1,66 @@
- name: Remove docker mapping files
become: true
ansible.builtin.file:
path: '{{ item }}'
state: absent
loop:
- /etc/subgid
- /etc/subuid
- name: Setup desktop configuration
become: true
ansible.builtin.file:
path: 'files/desktop/docker-daemon.json'
dest: '/etc/docker/daemon.json'
mode: '0755'
when: ansible_hostname == 'desktop'
- name: Remove user setup desktop configuration
ansible.builtin.file:
path: '{{ xdg_config_dir }}/docker/daemon.json'
state: absent
when: ansible_hostname == 'desktop'
- name: Check for .bashrc.override
ansible.builtin.stat:
path: '{{ ansible_env.HOME }}/.bashrc.override'
register: bashrc_override
- name: Create .bashrc.override
ansible.builtin.file:
path: '{{ ansible_env.HOME }}/.bashrc.override'
state: touch
mode: '0755'
when: not bashrc_override.stat.exists
- name: Remove rootless DOCKER_HOST variable assignment
ansible.builtin.lineinfile:
path: '{{ ansible_env.HOME }}/.bashrc.override'
regexp: '^export DOCKER_HOST='
line: ''
- name: Disable user docker socket
ansible.builtin.systemd:
name: '{{ item }}'
state: stopped
enabled: false
scope: user
daemon_reload: true
register: disable_stats
ignore_errors: true # TODO: add better error handling
loop:
- docker.socket
- docker.service
- name: Remove docker rootless package
become: true
ansible.builtin.package:
name: docker-rootless-extras
state: absent
- name: Enable system docker socket
become: true
ansible.builtin.systemd:
name: docker.socket
state: started
enabled: true

6
tasks/arch/neovim.yml Normal file
View file

@ -0,0 +1,6 @@
- name: Install language servers
become: true
community.general.pacman:
name: '{{ item }}'
state: present
loop: '{{ language_servers | map(attribute="package") | list }}'

15
tasks/arch/nvm.yml Normal file
View file

@ -0,0 +1,15 @@
- name: Set NVM install directory
ansible.builtin.set_fact:
install_dir: '{{ xdg_config_dir }}/nvm'
- name: Remove manually installed nvm install directory
ansible.builtin.file:
path: '{{ install_dir }}'
state: absent
- name: Remove nvm entry from bashrc
ansible.builtin.lineinfile:
path: '{{ ansible_env.HOME }}/.bashrc.override'
line: >
[ -s "{{ install_dir }}/nvm.sh" ] && \. "{{ install_dir }}/nvm.sh" # This loads nvm
state: absent

65
tasks/arch/python.yml Normal file
View file

@ -0,0 +1,65 @@
- name: 'check for {{ item.binary }} binary'
command: 'which {{ item.binary }}'
changed_when: false
failed_when: python_installed.rc not in [ 0, 1 ]
register: python_installed
- name: 'check for {{ item.binary }} download'
stat:
path: '{{ python_build_dir }}/python-{{ item.version }}.tgz'
register: python_download
- block:
# TODO: verify for checksum
- name: 'retrieve python {{ item.version }} source'
become: true
get_url:
url: '{{ python_download_url }}/{{ item.version }}/Python-{{ item.version }}.tgz'
dest: '{{ python_build_dir }}/python-{{ item.version }}.tgz'
owner: '{{ ansible_user_id }}'
group: '{{ ansible_user_id }}'
when: not python_download.stat.exists
- name: 'extract python {{ item.version }} sources'
become: true
unarchive:
src: '{{ python_build_dir }}/python-{{ item.version }}.tgz'
dest: '{{ python_build_dir }}'
include: 'Python-{{ item.version }}'
- name: rename source directory
become: true
ansible.builtin.command: 'mv {{ python_build_dir}}/Python-{{ item.version }} {{ python_build_dir }}/{{ item.path }}'
- name: set correct permissions
become: true
file:
path: '{{ python_build_dir }}/{{ item.path }}'
recurse: true
owner: '{{ ansible_user_id }}'
group: '{{ ansible_user_id }}'
state: directory
- name: configure build
ansible.builtin.command: 'sh ./configure --prefix={{ python_install_dir }}/{{ item.path }}'
args:
chdir: '{{ python_build_dir }}/{{ item.path }}/'
- name: make build
ansible.builtin.command: 'make'
args:
chdir: '{{ python_build_dir }}/{{ item.path }}/'
- name: install build
become: true
ansible.builtin.command: 'make install'
args:
chdir: '{{ python_build_dir }}/{{ item.path }}/'
- name: 'create symlink for python {{ item.version }}'
become: true
file:
src: '{{ python_install_dir }}/{{ item.path }}/bin/{{ item.binary }}'
dest: '/usr/bin/{{ item.binary }}'
state: link
when: python_installed.rc not in [ 0 ]