diff --git a/ansible/tasks/workstations/vicinae.yml b/ansible/tasks/workstations/vicinae.yml new file mode 100644 index 0000000..199e391 --- /dev/null +++ b/ansible/tasks/workstations/vicinae.yml @@ -0,0 +1,175 @@ +--- +- name: Install Vicinae + block: + - name: Set Vicinae version + ansible.builtin.set_fact: + vicinae_version: "v0.15.6" + vicinae_appimage_commit: "13865b4c5" + + - name: Set architecture-specific variables + ansible.builtin.set_fact: + vicinae_arch: "{{ 'x86_64' if ansible_architecture == 'x86_64' else ansible_architecture }}" + + - name: Ensure /opt/vicinae directory exists + ansible.builtin.file: + path: "/opt/vicinae" + state: directory + mode: "0755" + become: true + + - name: Download Vicinae AppImage + ansible.builtin.get_url: + url: "https://github.com/vicinaehq/vicinae/releases/download/{{ vicinae_version }}/Vicinae-{{ vicinae_appimage_commit }}-{{ vicinae_arch }}.AppImage" + dest: "/opt/vicinae/vicinae.AppImage" + mode: "0755" + become: true + + - name: Remove old Vicinae binary if exists + ansible.builtin.file: + path: "/usr/local/bin/vicinae" + state: absent + become: true + + - name: Create symlink to Vicinae AppImage + ansible.builtin.file: + src: "/opt/vicinae/vicinae.AppImage" + dest: "/usr/local/bin/vicinae" + state: link + become: true + + - name: Create temporary directory for Vicinae assets download + ansible.builtin.tempfile: + state: directory + suffix: vicinae + register: vicinae_temp_dir + + - name: Download Vicinae tarball for assets + ansible.builtin.get_url: + url: "https://github.com/vicinaehq/vicinae/releases/download/{{ vicinae_version }}/vicinae-linux-{{ vicinae_arch }}-{{ vicinae_version }}.tar.gz" + dest: "{{ vicinae_temp_dir.path }}/vicinae.tar.gz" + mode: "0644" + + - name: Extract Vicinae tarball + ansible.builtin.unarchive: + src: "{{ vicinae_temp_dir.path }}/vicinae.tar.gz" + dest: "{{ vicinae_temp_dir.path }}" + remote_src: true + + - name: Ensure systemd user directory exists + ansible.builtin.file: + path: "/usr/lib/systemd/user" + state: directory + mode: "0755" + become: true + + - name: Copy systemd user service + ansible.builtin.copy: + src: "{{ vicinae_temp_dir.path }}/lib/systemd/user/vicinae.service" + dest: "/usr/lib/systemd/user/vicinae.service" + mode: "0644" + remote_src: true + become: true + + - name: Update systemd service to use AppImage + ansible.builtin.replace: + path: "/usr/lib/systemd/user/vicinae.service" + regexp: "ExecStart=.*" + replace: "ExecStart=/usr/local/bin/vicinae" + become: true + + - name: Ensure applications directory exists + ansible.builtin.file: + path: "/usr/share/applications" + state: directory + mode: "0755" + become: true + + - name: Copy desktop files + ansible.builtin.copy: + src: "{{ vicinae_temp_dir.path }}/share/applications/{{ item }}" + dest: "/usr/share/applications/{{ item }}" + mode: "0644" + remote_src: true + become: true + loop: + - vicinae.desktop + - vicinae-url-handler.desktop + + - name: Update desktop files to use AppImage + ansible.builtin.replace: + path: "/usr/share/applications/{{ item }}" + regexp: "Exec=.*vicinae" + replace: "Exec=/usr/local/bin/vicinae" + become: true + loop: + - vicinae.desktop + - vicinae-url-handler.desktop + + - name: Ensure Vicinae share directory exists + ansible.builtin.file: + path: "/usr/share/vicinae" + state: directory + mode: "0755" + become: true + + - name: Copy Vicinae themes directory + ansible.builtin.copy: + src: "{{ vicinae_temp_dir.path }}/share/vicinae/themes/" + dest: "/usr/share/vicinae/themes/" + mode: "0644" + remote_src: true + become: true + + - name: Ensure hicolor icons directory exists + ansible.builtin.file: + path: "/usr/share/icons/hicolor/512x512/apps" + state: directory + mode: "0755" + become: true + + - name: Copy Vicinae icon + ansible.builtin.copy: + src: "{{ vicinae_temp_dir.path }}/share/icons/hicolor/512x512/apps/vicinae.png" + dest: "/usr/share/icons/hicolor/512x512/apps/vicinae.png" + mode: "0644" + remote_src: true + become: true + + - name: Update desktop database + ansible.builtin.command: + cmd: update-desktop-database /usr/share/applications + become: true + changed_when: false + + - name: Update icon cache + ansible.builtin.command: + cmd: gtk-update-icon-cache /usr/share/icons/hicolor + become: true + changed_when: false + failed_when: false + + - name: Clean up temporary directory + ansible.builtin.file: + path: "{{ vicinae_temp_dir.path }}" + state: absent + + - name: Verify Vicinae installation + ansible.builtin.command: + cmd: /usr/local/bin/vicinae --version + register: vicinae_version_check + changed_when: false + failed_when: false + + - name: Display installation result + ansible.builtin.debug: + msg: | + {% if vicinae_version_check.rc == 0 %} + ✓ Vicinae AppImage installed successfully with all themes and assets! + Version: {{ vicinae_version_check.stdout }} + {% else %} + ✗ Vicinae installation completed but version check failed. + This may be normal if --version flag is not supported. + Try running: vicinae + {% endif %} + tags: + - vicinae diff --git a/ansible/tasks/workstations/workstation.yml b/ansible/tasks/workstations/workstation.yml index 8aa610d..6247565 100644 --- a/ansible/tasks/workstations/workstation.yml +++ b/ansible/tasks/workstations/workstation.yml @@ -42,6 +42,10 @@ ansible.builtin.import_tasks: tasks/workstations/autostart.yml when: "'microsoft-standard-WSL2' not in ansible_kernel" + - name: Include Vicinae tasks + ansible.builtin.import_tasks: tasks/workstations/vicinae.yml + when: "'microsoft-standard-WSL2' not in ansible_kernel" + - name: Ensure workstation common packages are installed ansible.builtin.package: name: diff --git a/flake.lock b/flake.lock index 169e1fd..c88b2f8 100644 --- a/flake.lock +++ b/flake.lock @@ -41,11 +41,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1760862643, - "narHash": "sha256-PXwG0TM7Ek87DNx4LbGWuD93PbFeKAJs4FfALtp7Wo0=", + "lastModified": 1761016216, + "narHash": "sha256-G/iC4t/9j/52i/nm+0/4ybBmAF4hzR8CNHC75qEhjHo=", "owner": "nixos", "repo": "nixpkgs", - "rev": "33c6dca0c0cb31d6addcd34e90a63ad61826b28c", + "rev": "481cf557888e05d3128a76f14c76397b7d7cc869", "type": "github" }, "original": {