Merge branch 'migrate-to-mint-bsd'

This commit is contained in:
Fabio Scotto di Santolo
2026-07-17 17:43:45 +02:00
51 changed files with 1457 additions and 354 deletions

View File

@@ -0,0 +1,34 @@
---
- name: Install packages on FreeBSD
tags: [packages]
community.general.pkgng:
name: >-
{{
(
(freebsd_packages_base | default([]))
+ (freebsd_development_packages | default([]))
+ (
(freebsd_desktop_common_packages | default([]))
if 'graphical_desktop' in group_names
else []
)
+ (
(freebsd_hyprland_packages | default([]))
if 'desktop_hyprland' in group_names
else []
)
+ (
(freebsd_niri_packages | default([]))
if 'desktop_niri' in group_names
else []
)
+ (
(freebsd_lab_packages | default([]))
if 'role_lab' in group_names
else []
)
+ (host_packages | default([]))
)
| unique
}}
state: present

View File

@@ -0,0 +1,88 @@
---
- name: Refresh apt package cache on Linux Mint
tags: [packages]
ansible.builtin.apt:
update_cache: true
cache_valid_time: 3600
- name: Install packages on Linux Mint
tags: [packages]
ansible.builtin.apt:
name: >-
{{
(
(common_packages | default([]))
+ (mint_packages_base | default([]))
+ (mint_development_packages | default([]))
+ (
(mint_desktop_common_packages | default([]))
if 'graphical_desktop' in group_names
else []
)
+ (
(mint_emacs_packages | default([]))
if (
'graphical_desktop' in group_names
and (emacs_enabled | default(false) | bool)
)
else []
)
+ (
(mint_cinnamon_packages | default([]))
if 'desktop_cinnamon' in group_names
else []
)
+ (
(mint_personal_workstation_packages | default([]))
if 'role_personal_workstation' in group_names
else []
)
+ (host_packages | default([]))
)
| unique
}}
state: present
- name: Ensure Flathub remote is configured on Linux Mint
tags: [packages]
community.general.flatpak_remote:
name: "{{ mint_flatpak_remote_name | default('flathub') }}"
state: present
flatpakrepo_url: "{{ mint_flatpak_remote_url | default('https://dl.flathub.org/repo/flathub.flatpakrepo') }}"
when:
- mint_manage_flatpak | default(true)
- >-
(
(mint_flatpak_packages | default([]))
+ (personal_workstation_flatpak_packages | default([]))
) | length > 0
- name: Install Linux Mint Flatpak applications
tags: [packages]
community.general.flatpak:
name: >-
{{
(
(mint_flatpak_packages | default([]))
+ (
(personal_workstation_flatpak_packages | default([]))
if 'role_personal_workstation' in group_names
else []
)
)
| unique
}}
state: present
remote: "{{ mint_flatpak_remote_name | default('flathub') }}"
method: system
when:
- mint_manage_flatpak | default(true)
- >-
(
(mint_flatpak_packages | default([]))
+ (
(personal_workstation_flatpak_packages | default([]))
if 'role_personal_workstation' in group_names
else []
)
) | length > 0

View File

@@ -76,6 +76,14 @@
)
else []
)
+ (
(desktop_niri_packages | default([]))
if (
(desktop_environment | default('minimal')) == 'minimal'
and 'niri' in (desktop_sessions_enabled | default([]))
)
else []
)
| unique
}}
@@ -88,6 +96,7 @@
(desktop_minimal_packages | default([]))
+ (desktop_sway_packages | default([]))
+ (desktop_hyprland_packages | default([]))
+ (desktop_niri_packages | default([]))
+ (desktop_xfce_packages | default([]))
+ (desktop_kde_packages | default([]))
)
@@ -105,8 +114,11 @@
(common_packages | default([]))
+ (void_packages_base | default([]))
+ (profile_packages | default([]))
+ ((profile_emacs_packages | default([])) if (emacs_enabled | default(false) | bool) else [])
+ (desktop_common_packages | default([]))
+ ((desktop_emacs_packages | default([])) if (emacs_enabled | default(false) | bool) else [])
+ (packages_void_selected_desktop_packages | default([]))
+ ((void_lab_packages | default([])) if 'role_lab' in group_names else [])
+ (host_packages | default([]))
)
| unique

View File

@@ -0,0 +1,229 @@
---
- name: Ensure Cinnamon user config directories exist
tags: [dotfiles, dotfiles:desktop, cinnamon]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
loop:
- "{{ user_home }}/.config"
- "{{ user_home }}/.local"
- "{{ user_home }}/.local/share"
- "{{ user_home }}/.local/bin"
- "{{ user_home }}/.local/state"
- "{{ user_home }}/.bashrc.d"
- "{{ user_home }}/.tmux"
- "{{ user_home }}/.tmux/bin"
- "{{ user_home }}/.tmux/plugins"
- name: Apply Cinnamon dconf settings
tags: [cinnamon]
community.general.dconf:
key: "{{ item.key }}"
value: "{{ item.value }}"
state: present
become: true
become_user: "{{ username }}"
environment:
HOME: "{{ user_home }}"
loop: "{{ cinnamon_dconf_settings | default([]) }}"
loop_control:
label: "{{ item.key }}"
- name: Ensure Emacs config directory exists
tags: [dotfiles, dotfiles:desktop, emacs]
ansible.builtin.file:
path: "{{ user_home }}/.emacs.d"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
when: emacs_enabled | default(false) | bool
- name: Ensure GnuPG directory exists
tags: [dotfiles, dotfiles:desktop, git]
ansible.builtin.file:
path: "{{ user_home }}/.gnupg"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0700"
- name: Ensure private user directories exist
tags: [dotfiles, dotfiles:desktop]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0700"
loop:
- "{{ user_home }}/.ssh"
- "{{ user_home }}/.local/state/ssh/sockets"
- name: Copy Emacs desktop dotfiles
tags: [dotfiles, dotfiles:desktop, emacs]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_emacs_dotfiles | default([]) }}"
when: emacs_enabled | default(false) | bool
loop_control:
label: "{{ item.dest }}"
- name: Copy WM-agnostic common desktop dotfiles
tags: [dotfiles, dotfiles:desktop]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: >-
{{
desktop_common_dotfiles
| default([])
| rejectattr('name', 'in', cinnamon_desktop_dotfiles_exclude | default([]))
| list
}}
loop_control:
label: "{{ item.dest }}"
- name: Copy gpg-agent configuration
tags: [dotfiles, dotfiles:desktop, git]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/.gnupg/gpg-agent.conf"
dest: "{{ user_home }}/.gnupg/gpg-agent.conf"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0600"
- name: Render git configuration with private values
tags: [dotfiles, dotfiles:desktop, git]
ansible.builtin.template:
src: desktop/.gitconfig.j2
dest: "{{ user_home }}/.gitconfig"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0644"
- name: Bootstrap tmux plugin manager checkout
tags: [dotfiles, dotfiles:desktop, tmux]
ansible.builtin.git:
repo: https://github.com/tmux-plugins/tpm
dest: "{{ user_home }}/.tmux/plugins/tpm"
version: master
update: true
become_user: "{{ username }}"
environment:
HOME: "{{ user_home }}"
- name: Install tmux plugins through TPM
tags: [dotfiles, dotfiles:desktop, tmux]
ansible.builtin.command:
cmd: "{{ user_home }}/.tmux/plugins/tpm/bin/install_plugins"
become_user: "{{ username }}"
environment:
HOME: "{{ user_home }}"
register: cinnamon_tmux_plugin_install
changed_when: >-
(cinnamon_tmux_plugin_install.stdout | default('')) is search('download success') or
(cinnamon_tmux_plugin_install.stderr | default('')) is search('download success')
- name: Install desktop npm packages
tags: [packages, npm]
community.general.npm:
name: "{{ item.name }}"
global: true
state: "{{ item.state | default('present') }}"
become: true
loop: "{{ desktop_npm_packages | default([]) }}"
when: desktop_npm_packages | length > 0
loop_control:
label: "{{ item.name }}"
- name: Ensure /usr/src is writable for source builds
tags: [packages]
ansible.builtin.file:
path: /usr/src
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
- name: Build and install the gf debugger frontend from source
tags: [packages]
ansible.builtin.include_tasks:
file: "{{ role_path }}/../profile_desktop_common/tasks/source_tool.yml"
apply:
tags: [packages]
loop: >-
{{
desktop_source_tools
| default([])
| selectattr('name', 'equalto', 'gf')
| list
}}
loop_control:
loop_var: source_tool
label: "{{ source_tool.name }}"
- name: Ensure Nerd Fonts base directory exists
tags: [packages, fonts]
ansible.builtin.file:
path: /usr/local/share/fonts/nerd-fonts
state: directory
owner: root
group: root
mode: "0755"
become: true
- name: Ensure per-font Nerd Fonts directories exist
tags: [packages, fonts]
ansible.builtin.file:
path: "/usr/local/share/fonts/nerd-fonts/{{ item }}"
state: directory
owner: root
group: root
mode: "0755"
become: true
loop: "{{ mint_nerd_fonts | default([]) }}"
- name: Download Nerd Font archives
tags: [packages, fonts]
ansible.builtin.get_url:
url: "https://github.com/ryanoasis/nerd-fonts/releases/download/{{ mint_nerd_fonts_version }}/{{ item }}.zip"
dest: "/usr/local/share/fonts/nerd-fonts/{{ item }}.zip"
owner: root
group: root
mode: "0644"
become: true
loop: "{{ mint_nerd_fonts | default([]) }}"
loop_control:
label: "{{ item }}"
- name: Extract Nerd Font archives
tags: [packages, fonts]
ansible.builtin.unarchive:
src: "/usr/local/share/fonts/nerd-fonts/{{ item }}.zip"
dest: "/usr/local/share/fonts/nerd-fonts/{{ item }}"
remote_src: true
owner: root
group: root
become: true
loop: "{{ mint_nerd_fonts | default([]) }}"
loop_control:
label: "{{ item }}"
register: cinnamon_nerd_fonts_extract
- name: Refresh system font cache after installing Nerd Fonts
tags: [packages, fonts]
ansible.builtin.command: fc-cache -f
become: true
changed_when: false
when: cinnamon_nerd_fonts_extract is changed

View File

@@ -9,7 +9,7 @@
or (desktop_sessions_enabled | default([]) | length > 0)
- >-
(desktop_environment | default('minimal')) != 'minimal'
or (desktop_sessions_enabled | default([]) | difference(['sway', 'hyprland']) | length == 0)
or (desktop_sessions_enabled | default([]) | difference(['sway', 'hyprland', 'niri']) | length == 0)
- >-
(desktop_environment | default('minimal')) != 'minimal'
or desktop_default_session in (desktop_sessions_enabled | default([]))
@@ -315,32 +315,18 @@
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_emacs_dotfiles | default([]) }}"
when: emacs_enabled | default(false) | bool
loop_control:
label: "{{ item.dest }}"
- name: Render desktop templates with private values
tags: [dotfiles, dotfiles:desktop]
- name: Render git configuration with private values
tags: [dotfiles, dotfiles:desktop, git]
ansible.builtin.template:
src: "{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
src: desktop/.gitconfig.j2
dest: "{{ user_home }}/.gitconfig"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop:
- src: desktop/.gitconfig.j2
dest: .gitconfig
mode: "0644"
- src: desktop/.mbsyncrc.j2
dest: .mbsyncrc
mode: "0600"
- src: desktop/.msmtprc.j2
dest: .msmtprc
mode: "0600"
- src: desktop/email.el.j2
dest: .emacs.d/lisp/misc/email.el
mode: "0644"
loop_control:
label: "{{ item.dest }}"
mode: "0644"
- name: Define managed tmux plugin directories
tags: [dotfiles, dotfiles:desktop, tmux]
@@ -451,19 +437,6 @@
- path: /usr/src
mode: "0755"
- name: Ensure maildir directories exist
tags: [dotfiles, dotfiles:desktop]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0700"
loop:
- "{{ user_home }}/Maildir"
- "{{ user_home }}/Maildir/iCloudAccount"
- "{{ user_home }}/Maildir/ProtonMailAccount"
- name: Make Qt apps follow the GTK theme
tags: [theme]
ansible.builtin.copy:
@@ -592,7 +565,7 @@
label: "{{ item.name }}"
- name: Install desktop Python tools with uv
tags: [packages, emacs]
tags: [packages]
ansible.builtin.command:
cmd: "uv tool install --upgrade {{ item }}"
become: true

View File

@@ -0,0 +1,4 @@
[preferred]
default=gtk
org.freedesktop.impl.portal.Screenshot=hyprland
org.freedesktop.impl.portal.ScreenCast=hyprland

View File

@@ -0,0 +1,58 @@
---
- name: Ensure FreeBSD Hyprland user config directories exist
tags: [dotfiles, dotfiles:desktop, hyprland]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
loop:
- "{{ user_home }}/.config"
- "{{ user_home }}/.config/alacritty"
- "{{ user_home }}/.config/dunst"
- "{{ user_home }}/.config/foot"
- "{{ user_home }}/.config/hypr"
- "{{ user_home }}/.config/rofi"
- "{{ user_home }}/.config/waybar"
- "{{ user_home }}/.local"
- "{{ user_home }}/.local/bin"
- name: Copy common Hyprland desktop dotfiles on FreeBSD
tags: [dotfiles, dotfiles:desktop, hyprland]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_hyprland_dotfiles | default([]) }}"
loop_control:
label: "{{ item.dest }}"
- name: Render FreeBSD Hyprland session launcher
tags: [packages, services, hyprland]
ansible.builtin.template:
src: start-hyprland-session.j2
dest: /usr/local/bin/start-hyprland-session
owner: root
group: wheel
mode: "0755"
- name: Ensure FreeBSD xdg-desktop-portal config directory exists
tags: [packages, services, hyprland, portal]
ansible.builtin.file:
path: "{{ freebsd_xdg_config_dir | default('/usr/local/etc/xdg') }}/xdg-desktop-portal"
state: directory
owner: root
group: wheel
mode: "0755"
- name: Configure xdg-desktop-portal backend preferences for FreeBSD Hyprland
tags: [packages, services, hyprland, portal]
ansible.builtin.copy:
src: hyprland-portals.conf
dest: "{{ freebsd_xdg_config_dir | default('/usr/local/etc/xdg') }}/xdg-desktop-portal/hyprland-portals.conf"
owner: root
group: wheel
mode: "0644"

View File

@@ -0,0 +1,24 @@
#!/bin/sh
[ -r /etc/profile ] && . /etc/profile
[ -r "$HOME/.profile" ] && . "$HOME/.profile"
export XDG_CURRENT_DESKTOP=Hyprland
export XDG_SESSION_DESKTOP=Hyprland
export XDG_SESSION_TYPE=wayland
export MOZ_ENABLE_WAYLAND=1
export QT_QPA_PLATFORM='wayland;xcb'
export _JAVA_AWT_WM_NONREPARENTING=1
export SDL_VIDEODRIVER=wayland
export GDK_BACKEND='wayland,x11'
export SSH_AUTH_SOCK="$HOME/.local/state/ssh-agent/socket"
[ -r "$HOME/.config/hypr/session-env" ] && . "$HOME/.config/hypr/session-env"
if command -v dbus-run-session >/dev/null 2>&1; then
exec dbus-run-session Hyprland
fi
exec Hyprland

View File

@@ -0,0 +1,4 @@
[preferred]
default=gtk
org.freedesktop.impl.portal.Screenshot=gtk
org.freedesktop.impl.portal.ScreenCast=gtk

View File

@@ -0,0 +1,5 @@
[Desktop Entry]
Name=Niri
Comment=Niri scrollable-tiling (Wayland)
Exec=/usr/local/bin/start-niri
Type=Application

View File

@@ -0,0 +1,81 @@
---
- name: Ensure niri config directories exist
tags: [dotfiles, dotfiles:desktop, niri]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
loop:
- "{{ user_home }}/.config/foot"
- "{{ user_home }}/.config/dunst"
- "{{ user_home }}/.config/rofi"
- "{{ user_home }}/.config/waybar"
- "{{ user_home }}/.config/niri"
when:
- (desktop_environment | default('minimal')) == 'minimal'
- "'niri' in (desktop_sessions_enabled | default([]))"
- name: Install allowed emptty Wayland sessions
tags: [packages, services, emptty, niri]
ansible.builtin.copy:
src: niri.desktop
dest: /etc/emptty/wayland-sessions/niri.desktop
owner: root
group: root
mode: "0644"
when:
- (desktop_environment | default('minimal')) == 'minimal'
- "'niri' in (desktop_sessions_enabled | default([]))"
- name: Install Niri session launcher in /usr/local/bin
tags: [packages, services, niri]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/.local/bin/start-niri"
dest: /usr/local/bin/start-niri
owner: root
group: root
mode: "0755"
when:
- (desktop_environment | default('minimal')) == 'minimal'
- "'niri' in (desktop_sessions_enabled | default([]))"
- name: Ensure /etc/xdg/xdg-desktop-portal exists
tags: [packages, services, niri, portal]
ansible.builtin.file:
path: /etc/xdg/xdg-desktop-portal
state: directory
owner: root
group: root
mode: "0755"
when:
- (desktop_environment | default('minimal')) == 'minimal'
- "'niri' in (desktop_sessions_enabled | default([]))"
- name: Configure xdg-desktop-portal backend preferences for niri
tags: [packages, services, niri, portal]
ansible.builtin.copy:
src: niri-portals.conf
dest: /etc/xdg/xdg-desktop-portal/niri-portals.conf
owner: root
group: root
mode: "0644"
when:
- (desktop_environment | default('minimal')) == 'minimal'
- "'niri' in (desktop_sessions_enabled | default([]))"
- name: Copy niri desktop dotfiles
tags: [dotfiles, dotfiles:desktop, niri]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_niri_dotfiles | default([]) }}"
loop_control:
label: "{{ item.dest }}"
when:
- (desktop_environment | default('minimal')) == 'minimal'
- "'niri' in (desktop_sessions_enabled | default([]))"

View File

@@ -0,0 +1,41 @@
---
- name: Ensure FreeBSD Niri user config directories exist
tags: [dotfiles, dotfiles:desktop, niri]
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "0755"
loop:
- "{{ user_home }}/.config"
- "{{ user_home }}/.config/dunst"
- "{{ user_home }}/.config/foot"
- "{{ user_home }}/.config/niri"
- "{{ user_home }}/.config/rofi"
- "{{ user_home }}/.config/waybar"
- "{{ user_home }}/.local"
- "{{ user_home }}/.local/bin"
- "{{ user_home }}/.local/state"
- "{{ user_home }}/.local/state/ssh-agent"
- name: Copy common Niri desktop dotfiles on FreeBSD
tags: [dotfiles, dotfiles:desktop, niri]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/desktop/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ desktop_niri_dotfiles | default([]) }}"
loop_control:
label: "{{ item.dest }}"
- name: Render FreeBSD Niri session launcher
tags: [packages, services, niri]
ansible.builtin.template:
src: start-niri-session.j2
dest: /usr/local/bin/start-niri-session
owner: root
group: wheel
mode: "0755"

View File

@@ -0,0 +1,24 @@
#!/bin/sh
[ -r /etc/profile ] && . /etc/profile
[ -r "$HOME/.profile" ] && . "$HOME/.profile"
export XDG_CURRENT_DESKTOP=niri
export XDG_SESSION_DESKTOP=niri
export XDG_SESSION_TYPE=wayland
export MOZ_ENABLE_WAYLAND=1
export QT_QPA_PLATFORM='wayland;xcb'
export _JAVA_AWT_WM_NONREPARENTING=1
export SDL_VIDEODRIVER=wayland
export GDK_BACKEND='wayland,x11'
export SSH_AUTH_SOCK="$HOME/.local/state/ssh-agent/socket"
[ -r "$HOME/.config/niri/session-env" ] && . "$HOME/.config/niri/session-env"
if command -v dbus-run-session >/dev/null 2>&1; then
exec dbus-run-session niri --session
fi
exec niri --session

View File

@@ -0,0 +1,12 @@
---
- name: Ensure lab workspace directories exist
tags: [dotfiles]
ansible.builtin.file:
path: "{{ item.path }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ lab_workspace_directories | default([]) }}"
loop_control:
label: "{{ item.path }}"

View File

@@ -0,0 +1,24 @@
---
- name: Ensure personal workstation directories exist
tags: [dotfiles, dotfiles:workstation]
ansible.builtin.file:
path: "{{ item.path }}"
state: directory
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ personal_workstation_directories | default([]) }}"
loop_control:
label: "{{ item.path }}"
- name: Copy personal workstation dotfiles
tags: [dotfiles, dotfiles:workstation]
ansible.builtin.copy:
src: "{{ playbook_dir }}/../dotfiles/workstation/{{ item.src }}"
dest: "{{ user_home }}/{{ item.dest }}"
owner: "{{ username }}"
group: "{{ user_group }}"
mode: "{{ item.mode }}"
loop: "{{ personal_workstation_dotfiles | default([]) }}"
loop_control:
label: "{{ item.dest }}"

View File

@@ -0,0 +1,20 @@
---
- name: Configure FreeBSD rc.conf values
tags: [services, packages]
community.general.sysrc:
name: "{{ item.name }}"
value: "{{ item.value }}"
state: present
loop: "{{ freebsd_rc_conf | default([]) }}"
loop_control:
label: "{{ item.name }}"
- name: Enable FreeBSD rc services
tags: [services, packages]
ansible.builtin.service:
name: "{{ item }}"
enabled: true
state: started
loop: "{{ freebsd_enabled_services | default([]) + host_enabled_services | default([]) }}"
loop_control:
label: "{{ item }}"

View File

@@ -18,4 +18,3 @@
loop: "{{ host_enabled_services | default([]) }}"
loop_control:
label: "{{ item }}"