- name: Set apt default-release to "testing"
  become: yes
  copy:
    src: "{{ role_path }}/files/20-tum.conf"
    dest: "/etc/apt/apt.conf.d/20-tum.conf"

- name: Add unstable repository
  become: yes
  ansible.builtin.apt_repository:
    repo: deb http://deb.debian.org/debian unstable main contrib non-free-firmware
    state: present
    update_cache: true

- name: Install build dependencies
  become: yes
  apt:
    state: latest
    install_recommends: false
    name:
      # General
      - build-essential
      - cmake
      - meson
      # Aquamarine
      - hwdata
      - libdrm-dev
      - libseat-dev
      - libinput-dev
      - libgbm-dev
      - libdisplay-info-dev
      - libegl-dev
      - libgles2-mesa-dev
      - wayland-protocols
      - libwayland-dev
      # hyprland-scanner
      - libpugixml-dev
      # hyprcursor
      - libzip-dev
      - librsvg2-dev
      - libxcb-util-dev
      # Hyprland
      - libpango1.0-dev
      - libtomlplusplus-dev
      - uuid-dev
      - libxcb-errors-dev
      - libxcursor-dev
      - libxkbcommon-dev
      - libxcb1-dev
      - libxcb-icccm4-dev
      - libxcb-xfixes0-dev
      - libxcb-composite0-dev
      - libxcb-res0-dev
      - xwayland
      # xdg-desktop-portal-hyprland
      - qt6-base-dev
      - libspa-0.2-dev
      - libpipewire-0.3-dev
      - libsdbus-c++-dev

- name: Create source folders
  become: yes
  file:
    path: "/usr/local/src/{{ item }}"
    state: directory
    owner: "{{ ansible_user_id }}"
    group: "{{ ansible_user_id }}"
  loop:
    - "hyprutils"
    - "hyprwayland-scanner"
    - "Hyprland"
    - "hyprlang"
    - "hyprcursor"
    - "xdg-desktop-portal-hyprland"
    - "Aquamarine"

- name: Checkout hyprutils repo
  ansible.builtin.git:
    repo: 'https://github.com/hyprwm/hyprutils.git'
    dest: /usr/local/src/hyprutils
    version: v0.2.3
    force: true
    recursive: true

- name: Checkout hyprwayland-scanner repo
  ansible.builtin.git:
    repo: 'https://github.com/hyprwm/hyprwayland-scanner.git'
    dest: /usr/local/src/hyprwayland-scanner
    version: v0.4.2
    force: true
    recursive: true

- name: Checkout hyprlang repo
  ansible.builtin.git:
    repo: 'https://github.com/hyprwm/hyprlang.git'
    dest: /usr/local/src/hyprlang
    version: v0.5.2
    force: true
    recursive: true

- name: Checkout hyprcursor repo
  ansible.builtin.git:
    repo: 'https://github.com/hyprwm/hyprcursor.git'
    dest: /usr/local/src/hyprcursor
    version: v0.1.9
    force: true
    recursive: true

- name: Checkout xdg-desktop-portal-hyprland repo
  ansible.builtin.git:
    repo: 'https://github.com/hyprwm/xdg-desktop-portal-hyprland.git'
    dest: /usr/local/src/xdg-desktop-portal-hyprland
    version: v1.3.6
    force: true
    recursive: true

- name: Checkout Aquamarine repo
  ansible.builtin.git:
    repo: 'https://github.com/hyprwm/aquamarine.git'
    dest: /usr/local/src/Aquamarine
    version: v0.3.1
    force: true
    recursive: true

- name: Checkout Hyprland repo
  ansible.builtin.git:
    repo: 'https://github.com/hyprwm/Hyprland.git'
    dest: /usr/local/src/Hyprland
    version: v0.44.1
    force: true
    recursive: true

- name: Build hyprutils
  ansible.builtin.command:
    cmd: "{{ item }}"
    chdir: /usr/local/src/hyprutils
  loop:
    - "cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build"
    - "cmake --build ./build --config Release --target all"

- name: Install hyprutils
  become: yes
  ansible.builtin.command:
    cmd: "cmake --install build"
    chdir: /usr/local/src/hyprutils

- name: Build hyprwayland-scanner
  ansible.builtin.command:
    cmd: "{{ item }}"
    chdir: /usr/local/src/hyprwayland-scanner
  loop:
    - "cmake -DCMAKE_INSTALL_PREFIX=/usr -B build"
    - "cmake --build build"

- name: Install hyprwayland-scanner
  become: yes
  ansible.builtin.command:
    cmd: "cmake --install build"
    chdir: /usr/local/src/hyprwayland-scanner

- name: Build hyprlang
  ansible.builtin.command:
    cmd: "{{ item }}"
    chdir: /usr/local/src/hyprlang
  loop:
    - "cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B build"
    - "cmake --build build --config Release --target hyprlang"

- name: Install hyprlang
  become: yes
  ansible.builtin.command:
    cmd: "cmake --install build"
    chdir: /usr/local/src/hyprlang

- name: Build hyprcursor
  ansible.builtin.command:
    cmd: "{{ item }}"
    chdir: /usr/local/src/hyprcursor
  loop:
    - "cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build"
    - "cmake --build build --config Release --target all"

- name: Install hyprcursor
  become: yes
  ansible.builtin.command:
    cmd: "cmake --install build"
    chdir: /usr/local/src/hyprcursor

- name: Build Aquamarine
  ansible.builtin.command:
    cmd: "{{ item }}"
    chdir: /usr/local/src/Aquamarine
  loop:
    - "cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build"
    - "cmake --build ./build --config Release --target all"

- name: Install Aquamarine
  become: yes
  ansible.builtin.command:
    cmd: "cmake --install build"
    chdir: /usr/local/src/Aquamarine

- name: Build Hyprland
  community.general.make:
    chdir: /usr/local/src/Hyprland
    target: all

- name: Install Hyprland
  become: true
  community.general.make:
    chdir: /usr/local/src/Hyprland
    target: install

- name: Build xdg-desktop-portal-hyprland
  ansible.builtin.command:
    cmd: "{{ item }}"
    chdir: /usr/local/src/xdg-desktop-portal-hyprland
  loop:
    - "cmake -DCMAKE_INSTALL_LIBEXECDIR=/usr/lib -DCMAKE_INSTALL_PREFIX=/usr -B build"
    - "cmake --build build"

- name: Install xdg-desktop-portal-hyprland
  become: yes
  ansible.builtin.command:
    cmd: "cmake --install build"
    chdir: /usr/local/src/xdg-desktop-portal-hyprland

- name: Reload systemd
  ansible.builtin.systemd_service:
    daemon_reload: true
    scope: user
