diff --git a/group_vars/all/apps.yml b/group_vars/all/apps.yml index c78f6e7..d125835 100644 --- a/group_vars/all/apps.yml +++ b/group_vars/all/apps.yml @@ -2,6 +2,7 @@ dnf_remove_repos: - google-chrome + dnf_remove: - abrt - anaconda-live @@ -33,11 +34,10 @@ apps: - mullvad-vpn - nautilus-python - pinta - - profile-sync-daemon - python3-virtualenv - python3-virtualenvwrapper - remmina - - rpmfusion-free-release + - https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-{{ ansible_facts['distribution_major_version'] }}.noarch.rpm - setroubleshoot - ShellCheck - snapd diff --git a/group_vars/laptop/apps.yml b/group_vars/laptop/apps.yml new file mode 100644 index 0000000..55a2e29 --- /dev/null +++ b/group_vars/laptop/apps.yml @@ -0,0 +1,2 @@ +apps_group: + - profile-sync-daemon \ No newline at end of file diff --git a/group_vars/workstation/apps.yml b/group_vars/workstation/apps.yml new file mode 100644 index 0000000..e260be6 --- /dev/null +++ b/group_vars/workstation/apps.yml @@ -0,0 +1,3 @@ +apps_group: + - + # - profile-sync-daemon \ No newline at end of file diff --git a/roles/apps/aichat.yml b/roles/apps/aichat.yml index 57d32f6..d5c9807 100644 --- a/roles/apps/aichat.yml +++ b/roles/apps/aichat.yml @@ -1,4 +1,4 @@ -cargo_packages_app: +cargo: - aichat configs: diff --git a/roles/apps/btrbk.yml b/roles/apps/btrbk.yml index 0215b53..c418ba2 100644 --- a/roles/apps/btrbk.yml +++ b/roles/apps/btrbk.yml @@ -1,4 +1,4 @@ -services: +system_services: - btrbk.timer configs: diff --git a/roles/apps/btrfsmaintenance.yml b/roles/apps/btrfsmaintenance.yml index 1312dda..e56c196 100644 --- a/roles/apps/btrfsmaintenance.yml +++ b/roles/apps/btrfsmaintenance.yml @@ -1,4 +1,4 @@ -services: +system_services: - btrfs-balance.timer - btrfs-scrub.timer - btrfs-trim.timer diff --git a/roles/apps/code.yml b/roles/apps/code.yml index fa6adec..181df15 100644 --- a/roles/apps/code.yml +++ b/roles/apps/code.yml @@ -1,4 +1,4 @@ -dnf_add_repos_app: +repos: - name: code description: Visual Studio Code baseurl: https://packages.microsoft.com/yumrepos/vscode diff --git a/roles/apps/dnf-automatic.yml b/roles/apps/dnf-automatic.yml index 245a30b..3c35b6a 100644 --- a/roles/apps/dnf-automatic.yml +++ b/roles/apps/dnf-automatic.yml @@ -1,2 +1,2 @@ -services: +system_services: - dnf-automatic.timer \ No newline at end of file diff --git a/roles/apps/keyd.yml b/roles/apps/keyd.yml index f91170f..7b15837 100644 --- a/roles/apps/keyd.yml +++ b/roles/apps/keyd.yml @@ -1,7 +1,7 @@ -dnf_add_copr_app: +copr: - alternateved/keyd -services: +system_services: - keyd configs: diff --git a/roles/apps/mediacenter35.yml b/roles/apps/mediacenter35.yml index 22f4a6f..b4aa3a9 100644 --- a/roles/apps/mediacenter35.yml +++ b/roles/apps/mediacenter35.yml @@ -1,4 +1,4 @@ -dnf_add_repos_app: +repos: - name: jriver description: JRiver Media Center by BryanC baseurl: https://repos.bryanroessler.com/jriver diff --git a/roles/apps/mullvad-vpn.yml b/roles/apps/mullvad-vpn.yml index af6edf1..88957fe 100644 --- a/roles/apps/mullvad-vpn.yml +++ b/roles/apps/mullvad-vpn.yml @@ -1,3 +1,3 @@ -dnf_add_repofiles_app: +repofiles: - name: Mullvad VPN url: https://repository.mullvad.net/rpm/stable/mullvad.repo \ No newline at end of file diff --git a/roles/apps/profile-sync-daemon.yml b/roles/apps/profile-sync-daemon.yml index dacb9c0..daae9e8 100644 --- a/roles/apps/profile-sync-daemon.yml +++ b/roles/apps/profile-sync-daemon.yml @@ -1,2 +1,2 @@ -services: +user_services: - psd.service \ No newline at end of file diff --git a/roles/apps/pwrstatd.yml b/roles/apps/pwrstatd.yml index cb3e286..f30bc4b 100644 --- a/roles/apps/pwrstatd.yml +++ b/roles/apps/pwrstatd.yml @@ -1,7 +1,7 @@ -apps_app: +packages: - "https://dl4jz3rbrsfum.cloudfront.net/software/PPL_64bit_v1.4.1.rpm" -services: +system_services: - pwrstatd.service configs: diff --git a/roles/apps/tailscale.yml b/roles/apps/tailscale.yml index 9807ad0..749ec7d 100644 --- a/roles/apps/tailscale.yml +++ b/roles/apps/tailscale.yml @@ -1,2 +1,2 @@ -services: +system_services: - tailscaled.service \ No newline at end of file diff --git a/roles/apps/tasks/main.yml b/roles/apps/tasks/main.yml index ba69861..bd9a863 100644 --- a/roles/apps/tasks/main.yml +++ b/roles/apps/tasks/main.yml @@ -1,20 +1,41 @@ --- +- name: Load per-app configuration files + ansible.builtin.include_vars: + file: "{{ role_path }}/{{ item }}.yml" + name: "app_{{ item }}" + loop: "{{ ((apps | default([])) + (apps_group | default([]))) | select | list }}" + failed_when: false + +- name: Merge app configuration + ansible.builtin.set_fact: + apps_copr: "{{ apps_copr | default([]) + (lookup('vars', 'app_' + item, default={}).copr | default([])) }}" + apps_repos: "{{ apps_repos | default([]) + (lookup('vars', 'app_' + item, default={}).repos | default([])) }}" + apps_repofiles: "{{ apps_repofiles | default([]) + (lookup('vars', 'app_' + item, default={}).repofiles | default([])) }}" + apps_packages: "{{ apps_packages | default([]) + (lookup('vars', 'app_' + item, default={}).packages | default([])) }}" + apps_cargo: "{{ apps_cargo | default([]) + (lookup('vars', 'app_' + item, default={}).cargo | default([])) }}" + apps_system_services: "{{ apps_system_services | default([]) + (lookup('vars', 'app_' + item, default={}).system_services | default([])) }}" + apps_user_services: "{{ apps_user_services | default([]) + (lookup('vars', 'app_' + item, default={}).user_services | default([])) }}" + loop: "{{ ((apps | default([])) + (apps_group | default([]))) | select | list }}" + - name: Enable COPR repositories community.general.copr: name: "{{ item.repo | default(item) }}" state: enabled - loop: "{{ (dnf_add_copr | default([])) + (dnf_add_copr_group | default([])) + (dnf_add_copr_app | default([])) }}" + loop: "{{ apps_copr | default([]) }}" become: true - name: Add DNF repositories ansible.builtin.yum_repository: name: "{{ item.name }}" description: "{{ item.description | default(omit) }}" - baseurl: "{{ item.baseurl }}" - enabled: true + baseurl: "{{ item.baseurl | default(omit) }}" + metalink: "{{ item.metalink | default(omit) }}" + enabled: "{{ item.enabled | default(true) }}" + metadata_expire: "{{ item.metadata_expire | default(omit) }}" gpgcheck: "{{ item.gpgcheck | default(true) }}" + repo_gpgcheck: "{{ item.repo_gpgcheck | default(omit) }}" gpgkey: "{{ item.gpgkey | default(omit) }}" - loop: "{{ (dnf_add_repos | default([])) + (dnf_add_repos_group | default([])) + (dnf_add_repos_app | default([])) }}" + loop: "{{ (dnf_add_repos | default([])) + (apps_repos | default([])) }}" become: true - name: Add DNF repository files @@ -24,7 +45,7 @@ owner: root group: root mode: '0644' - loop: "{{ (dnf_add_repofiles | default([])) + (dnf_add_repofiles_group | default([])) + (dnf_add_repofiles_app | default([])) }}" + loop: "{{ apps_repofiles | default([]) }}" become: true - name: Remove DNF repositories @@ -43,9 +64,17 @@ become: true failed_when: false +- name: Install remote RPM packages (from URLs) + ansible.builtin.dnf: + name: "{{ apps_packages | default([]) | select('match', '^https?://') | list }}" + state: present + disable_gpg_check: true + become: true + when: (apps_packages | default([]) | select('match', '^https?://') | list) | length > 0 + - name: Install DNF packages ansible.builtin.dnf: - name: "{{ (apps | default([])) + (apps_group | default([])) + (apps_app | default([])) }}" + name: "{{ ((apps | default([])) + (apps_group | default([])) + (apps_packages | default([]) | reject('match', '^https?://') | list)) | select | list }}" state: present skip_broken: true become: true @@ -60,8 +89,7 @@ - name: Install cargo packages ansible.builtin.command: cmd: "cargo install {{ item }}" - loop: "{{ (cargo_packages | default([])) + (cargo_packages_group | default([])) + (cargo_packages_app | default([])) }}" - when: ((cargo_packages | default([])) + (cargo_packages_group | default([])) + (cargo_packages_app | default([]))) | length > 0 + loop: "{{ apps_cargo | default([]) }}" register: apps_cargo_install_result changed_when: "'Installing' in apps_cargo_install_result.stderr or 'Compiling' in apps_cargo_install_result.stderr" failed_when: apps_cargo_install_result.rc != 0 and 'already exists' not in apps_cargo_install_result.stderr @@ -80,7 +108,7 @@ enabled: true state: started scope: system - loop: "{{ (services_system_enabled | default([])) + (services_system_enabled_group | default([])) + (services_system_enabled_app | default([])) }}" + loop: "{{ (services_system_enabled | default([])) + (services_system_enabled_group | default([])) + (apps_system_services | default([])) }}" become: true - name: Disable and stop system services @@ -89,7 +117,7 @@ enabled: false state: stopped scope: system - loop: "{{ (services_system_disabled | default([])) + (services_system_disabled_group | default([])) + (services_system_disabled_app | default([])) }}" + loop: "{{ (services_system_disabled | default([])) + (services_system_disabled_group | default([])) }}" become: true - name: Enable and start user services @@ -98,12 +126,12 @@ enabled: true state: started scope: user - loop: "{{ (services_user_enabled | default([])) + (services_user_enabled_group | default([])) + (services_user_enabled_app | default([])) }}" + loop: "{{ (services_user_enabled | default([])) + (services_user_enabled_group | default([])) + (apps_user_services | default([])) }}" - name: Disable and stop user services ansible.builtin.systemd: name: "{{ item }}" enabled: false state: stopped - scope: system - loop: "{{ (services_user_disabled | default([])) + (services_user_disabled_group | default([])) + (services_user_disabled_app | default([])) }}" \ No newline at end of file + scope: user + loop: "{{ (services_user_disabled | default([])) + (services_user_disabled_group | default([])) }}" \ No newline at end of file diff --git a/roles/apps/zsh-completions.yml b/roles/apps/zsh-completions.yml index f66cb7e..49b91f2 100644 --- a/roles/apps/zsh-completions.yml +++ b/roles/apps/zsh-completions.yml @@ -1,4 +1,4 @@ -dnf_add_repos_app: +repos: - name: zsh-completions description: zsh-completions from openSUSE baseurl: https://download.opensuse.org/repositories/shells:zsh-users:zsh-completions/Fedora_Rawhide/