--- - name: Packages ansible.builtin.apt: name: - git - libvlc5 # runtime lib python-vlc (installed into the venv by uv) binds against - vlc-plugin-base - alsa-utils - samba cache_valid_time: 7200 - name: Ensure uv install directory exists ansible.builtin.file: path: "/opt/uv-{{ pi_musicmouse_uv_version }}" state: directory mode: "0755" - name: Download and extract uv {{ pi_musicmouse_uv_version }} ansible.builtin.unarchive: src: "https://github.com/astral-sh/uv/releases/download/{{ pi_musicmouse_uv_version }}/uv-aarch64-unknown-linux-gnu.tar.gz" dest: "/opt/uv-{{ pi_musicmouse_uv_version }}" remote_src: true extra_opts: ["--strip-components=1"] creates: "/opt/uv-{{ pi_musicmouse_uv_version }}/uv" - name: Symlink uv/uvx into /usr/local/bin ansible.builtin.file: src: "/opt/uv-{{ pi_musicmouse_uv_version }}/{{ item }}" dest: "/usr/local/bin/{{ item }}" state: link force: true loop: - uv - uvx - name: Checkout Musicmouse repo ansible.builtin.git: repo: "{{ pi_musicmouse_repo }}" dest: /opt/musicmouse version: "{{ musicmouse_version }}" accept_hostkey: true force: true notify: Reinstall musicmouse backend - name: Create virtualenv with Python {{ pi_musicmouse_python_version }} ansible.builtin.command: cmd: "/usr/local/bin/uv venv --python {{ pi_musicmouse_python_version }} /opt/musicmouse/.venv" creates: /opt/musicmouse/.venv/bin/python - name: Create media directory ansible.builtin.file: path: /media/musicmouse state: directory mode: "0755" - name: Install config file ansible.builtin.copy: src: "{{ pi_musicmouse_config_file }}" dest: /media/musicmouse/config.yml mode: "0644" notify: Restart musicmouse - name: Install systemd service file (from the checked-out repo, not a copy kept here) ansible.builtin.copy: src: /opt/musicmouse/python-backend/musicmouse.service dest: /etc/systemd/system/musicmouse.service mode: "0644" remote_src: true notify: Restart musicmouse - name: Add script to autostart and start now ansible.builtin.systemd: name: musicmouse state: started enabled: "yes" daemon_reload: "yes" - name: Ensure local frontend build cache directory exists ansible.builtin.file: path: "{{ pi_musicmouse_build_cache }}/{{ musicmouse_version | regex_replace('/', '_') }}" state: directory mode: "0755" delegate_to: localhost become: false - name: Checkout Musicmouse repo for frontend build (control machine) ansible.builtin.git: repo: "{{ pi_musicmouse_repo }}" dest: "{{ pi_musicmouse_build_cache }}/{{ musicmouse_version | regex_replace('/', '_') }}" version: "{{ musicmouse_version }}" accept_hostkey: true force: true delegate_to: localhost become: false notify: Build frontend - name: Samba setup ansible.builtin.copy: src: smb.conf dest: /etc/samba/ mode: "0644" - name: Restart samba ansible.builtin.systemd: name: smbd state: restarted enabled: "yes" daemon_reload: "yes" # manual steps: # - set samba passwords with smbpasswd # - copy music into /media/musicmouse (or via samba share) # - manual patching of hassclient necessary :( loop has to be passed in, to not use running_event_loop