Files
ansible/roles/fedora_setup/tasks/main.yml
2025-11-05 17:39:40 -08:00

260 lines
5.8 KiB
YAML
Executable File

---
# Packages and Updates
- name: Enable COPR repositories
command:
cmd: dnf5 copr enable -y {{ item }}
creates: "/etc/yum.repos.d/_copr:copr.fedorainfracloud.org:{{ item | replace('/', ':') }}.repo"
loop: "{{ copr_repos }}"
tags:
- packages
- name: Add LibreWolf repository
get_url:
url: https://repo.librewolf.net/librewolf.repo
dest: /etc/yum.repos.d/librewolf.repo
mode: '0644'
tags:
- packages
- name: Upgrade all packages
dnf5:
name: "*"
state: latest
tags:
- packages
- name: Install packages
package:
name: "{{ item }}"
state: present
loop: "{{ packages }}"
tags:
- packages
## RPM Fusion
- name: Install RPM Fusion Free Repository
package:
name: "https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-{{ ansible_distribution_major_version }}.noarch.rpm"
state: present
- name: Install RPM Fusion Nonfree Repository
package:
name: "https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-{{ ansible_distribution_major_version }}.noarch.rpm"
state: present
- name: Install Multimedia Group Packages
package:
name: "@multimedia"
state: present
- name: Install Sound and Video Group Packages
package:
name: "@sound-and-video"
state: present
- name: Install Additional Multimedia Codecs
package:
name:
- gstreamer1-plugins-bad-free
- gstreamer1-plugins-good
- gstreamer1-plugins-ugly
- gstreamer1-plugins-base
- gstreamer1-plugin-openh264
- gstreamer1-libav
- lame
state: present
- name: Swap ffmpeg-free with full ffmpeg
command: dnf5 swap ffmpeg-free ffmpeg --allowerasing
args:
warn: false
# Base System Setup
- name: Create groups
group:
name: "{{ item }}"
state: present
loop: "{{ init_groups }}"
tags:
- base
- name: Ensure Users are Configured Correctly
user:
name: "{{ item.value.name }}"
group: "{{ item.value.group }}"
groups: "{{ item.value.groups }}"
state: "{{ item.value.state }}"
create_home: "{{ item.value.create_home }}"
shell: "{{ item.value.shell }}"
loop: "{{ init_users | dict2items }}"
tags:
- base
- name: Create or ensure presence of custom home directories
file:
path: /home/opal/{{ item }}
state: directory
mode: '0755'
owner: opal
group: opal
loop: "{{ create_directories }}"
tags:
- base
- name: Remove default home directories if present
file:
path: /home/opal/{{ item }}
state: absent
loop: "{{ remove_directories }}"
tags:
- base
- name: Create/Ensure ~/.ssh directories
file:
path: "/home/{{ item.value.name }}/.ssh"
state: directory
mode: '0700'
owner: "{{ item.value.name }}"
group: "{{ item.value.group }}"
loop: "{{ init_users | dict2items }}"
tags:
- base
- name: Ensure SELinux is enabled and configured persistently
selinux:
policy: targeted
state: enforcing
configfile: /etc/selinux/config
tags:
- security
# DNF Automatic Security Updates
- name: Install dnf-automatic for automatic security updates
package:
name: dnf-automatic
state: present
tags:
- updates
- name: Configure dnf-automatic
template:
src: dnf-automatic.conf.j2
dest: /etc/dnf/automatic.conf
owner: root
group: root
mode: '0644'
tags:
- updates
- name: Enable and start dnf-automatic timer
systemd:
name: dnf-automatic.timer
enabled: true
state: started
tags:
- updates
# Git Config
- name: Set global Git configuration
become: yes
become_user: opal
git_config:
name: "{{ item.name }}"
scope: global
value: "{{ item.value }}"
loop: "{{ git_global_config }}"
tags: git
- name: Install ET Book fonts
copy:
src: fonts
dest: "{{ lookup('env', 'HOME') }}/.local/share/fonts/"
mode: '0644'
directory_mode: '0755'
tags: fonts
- name: Configure gpg-agent
copy:
src: gnupg
dest: "{{ lookup('env', 'HOME') }}/.gnupg"
mode: '0644'
directory_mode: '0700'
tags: gpg
- name: Create MPD directories
file:
path: "{{ item }}"
state: directory
mode: '0755'
loop:
- "{{ lookup('env', 'HOME') }}/.config/mpd"
- "{{ lookup('env', 'HOME') }}/.config/mpd/playlists"
- "{{ lookup('env', 'HOME') }}/.local/share/mpd"
- "{{ lookup('env', 'HOME') }}/.local/share/mpd/music"
- name: Create MPD log, db, pid, state, and socket files
file:
path: "{{ lookup('env', 'HOME') }}/.local/share/mpd/{{ item }}"
state: touch
mode: '0644'
loop:
- db
- log
- pid
- state
- sticker.sql
- name: Systemd override to use custom mpd.conf
copy:
dest: "{{ lookup('env', 'HOME') }}/.config/systemd/user/mpd.service.d/override.conf"
content: |
[Service]
ExecStart=
ExecStart=/usr/bin/mpd --no-daemon {{ lookup('env', 'HOME') }}/.config/mpd/mpd.conf
notify: Reload systemd user daemon
- name: Enable and start user mpd service
systemd:
scope: user
enabled: true
name: mpd
state: started
daemon_reload: true
# Dunst
- name: Install dunst systemd user service
copy:
dest: "{{ lookup('env', 'HOME') }}/.config/systemd/user/dunst.service"
mode: '0644'
content: |
[Unit]
Description=Dunst notification daemon
After=graphical-session.target
[Service]
ExecStart=/usr/bin/dunst
Restart=always
RestartSec=2
[Install]
WantedBy=default.target
tags: dunst
- name: Reload systemd user daemon
systemd:
daemon_reload: true
scope: user
environment:
XDG_RUNTIME_DIR: "/run/user/{{ ansible_uid }}"
tags: dunst
- name: Enable and start dunst systemd user service
systemd:
name: dunst.service
scope: user
enabled: true
state: started
environment:
XDG_RUNTIME_DIR: "/run/user/{{ ansible_uid }}"
tags: dunst