--- - name: Ensure Proxmox GPG key is present (for Raspberry Pi/PBS) ansible.builtin.get_url: url: https://enterprise.proxmox.com/debian/proxmox-release-trixie.gpg dest: /etc/apt/trusted.gpg.d/proxmox-release-trixie.gpg mode: '0644' become: yes # Added when: ansible_distribution == 'Debian' tags: [setup] - name: Set hostname ansible.builtin.hostname: name: "{{ inventory_hostname }}" become: yes # Added tags: [identity] - name: Update /etc/hosts for FQDN resolution ansible.builtin.lineinfile: path: /etc/hosts regexp: '^127\.0\.1\.1' line: "127.0.1.1 {{ inventory_hostname }}.{{ domain_name }} {{ inventory_hostname }}" become: yes # Added tags: [identity] - name: Check for NetworkManager ansible.builtin.command: systemctl is-active NetworkManager register: nm_status ignore_errors: yes changed_when: false tags: [identity, network] - name: Configure NetworkManager Search Domain (Raspberry Pi/mDNS Style) when: nm_status.rc == 0 tags: [identity, network] block: - name: Get active connection name ansible.builtin.shell: "nmcli -t -f NAME connection show --active | head -n 1" register: active_conn changed_when: false - name: Apply search domain via nmcli ansible.builtin.command: "nmcli connection modify '{{ active_conn.stdout }}' ipv4.dns-search '{{ domain_name }}'" when: active_conn.stdout != "" notify: Reload NetworkManager - name: Configure systemd-resolved Search Domain (Vanilla Debian Style) ansible.builtin.ini_file: path: /etc/systemd/resolved.conf section: Resolve option: Domains value: "{{ domain_name }}" become: yes # Added notify: Restart systemd-resolved when: nm_status.rc != 0 tags: [identity, network] - name: Set system timezone community.general.timezone: name: Europe/Berlin become: yes tags: [localization] #- name: Ensure locales are generated # ansible.builtin.locale_gen: # name: en_US.UTF-8 # state: present # become: yes # tags: [localization] #- name: Set system locale # ansible.builtin.debconf: # name: locales # question: locales/default_environment_locale # value: en_US.UTF-8 # vtype: select # become: yes # tags: [localization] #- name: Force 24h clock format globally # ansible.builtin.lineinfile: # path: /etc/default/locale # regexp: '^LC_TIME=' # line: 'LC_TIME=en_DK.UTF-8' # en_DK is the standard trick for English lang + 24h clock # become: yes # tags: [localization] #- name: Set system-wide locale and 24h clock # ansible.builtin.command: > # update-locale LANG=en_US.UTF-8 LC_TIME=en_DK.UTF-8 # become: yes # changed_when: true #- name: Ensure en_US.UTF-8 is generated # ansible.builtin.locale_gen: # name: en_US.UTF-8 # state: present # become: yes # tags: [localization] - name: Generate required locales ansible.builtin.locale_gen: name: "{{ item }}" state: present become: yes loop: - en_US.UTF-8 - en_DK.UTF-8 # We must generate this to use it for the 24h clock tags: [localization] - name: Force system-wide locale and 24h clock ansible.builtin.command: update-locale LANG=en_US.UTF-8 LC_TIME=en_DK.UTF-8 become: yes changed_when: true tags: [localization] - name: Flush handlers to apply DNS changes immediately ansible.builtin.meta: flush_handlers - name: Wait for DNS to be functional ansible.builtin.command: getent hosts google.com register: dns_check until: dns_check.rc == 0 retries: 3 delay: 5 changed_when: false tags: [identity, network] - name: Install baseline packages (Unified list) ansible.builtin.apt: name: "{{ common_packages }}" state: present update_cache: yes cache_valid_time: 3600 become: yes tags: [packages] - name: Install fastfetch (Optional - may not be in legacy repos) ansible.builtin.apt: name: - fastfetch - btm state: present become: yes ignore_errors: yes tags: [packages] - name: Configure needrestart for non-interactive automation ansible.builtin.lineinfile: path: /etc/needrestart/needrestart.conf regexp: '^#?\$nrconf{restart}' line: "$nrconf{restart} = 'a';" become: yes tags: [packages, config] - name: Ensure discovery services are enabled and running ansible.builtin.service: name: "{{ item }}" state: started enabled: yes loop: - avahi-daemon - lldpd become: yes tags: [services] - name: Include maintenance tasks ansible.builtin.include_tasks: maintenance.yml tags: [maintenance]