---
#########
# Management: Ansible User benötigt auf den Clients kein 
# Passwort für sudo
- name: Enable passwordless sudo access for user ansible
  lineinfile:
    path: /etc/sudoers
    state: present
    regexp: '^ansible ALL='
    line: 'ansible ALL=(ALL) NOPASSWD: ALL'
    validate: '/usr/sbin/visudo -cf %s'

#########
# Paketvorkonfigurationen
- name: Preseed ttf-mscorefonts-installer
  ansible.builtin.debconf:
    name: ttf-mscorefonts-installer
    question: msttcorefonts/dlurl
    value: "{{ mirror_msfonts }}"
    vtype: string
  when: mirror_msfonts is defined and mirror_msfonts | length > 0

- name: Preseed libdvd-pkg
  ansible.builtin.debconf:
    name: libdvd-pkg
    question: libdvd-pkg/build
    value: "true"
    vtype: boolean
  ansible.builtin.debconf:
    name: libdvd-pkg
    question: libdvd-pkg/post-invoke_hook-install
    value: "true"
    vtype: boolean
  ansible.builtin.debconf:
    name: libdvd-pkg
    question: libdvd-pkg/post-invoke_hook-remove
    value: "false"
    vtype: boolean

#########
# Softwareauswahl
- name: Install desktop EDU packages and some more
  apt:
    name:
      - curl
      - git
      - gitg
      - gitk
      - libnotify-bin ## needed for pwroff script
      - neovim
      - net-tools
      - netcat-openbsd
      - nmap
      - tmux
      - tree
      - ttf-mscorefonts-installer
      - libdvd-pkg
      - handbrake
      - slic3r-prusa
      - filius
    autoremove: true
    state: latest
  environment:
    http_proxy: ''  # this is needed to avoid ttf-mscorefonts-installer picking up aptcacher

#########
# libdvdcss muss gebaut werden
# Optimierungspotential: Einmal bauen und über netboot
# die Pakete verteilen geht wahrscheinlich schneller
 
- name: Build libdvdcss
  ansible.builtin.shell:
    cmd: dpkg-reconfigure -f noninteractive libdvd-pkg

#########
# Den cups-browsed will ich gar nicht haben, nicht 
# nur disablen.
- name: Remove cups-browsed
  ansible.builtin.apt:
    name: cups-browsed
    state: absent

#########
# Anpassungen für Login Screen und Hintergrund
# Wir möchten am Login-Screen das Hintergrund-Bild
# qgm_background.jpg - in Schwarz/Weiss haben
# Bei der Anmeldung soll das Bild
# qgm_background_desktop.jpg - in Farbe
# gesetzt werden.
# Das passiert im Skript qgm-login.sh, das weiter unten 
# auf die Rechner kopiert wird

- name: Make qgm share directory
  file: 
    path: /usr/local/share/qgm
    state: directory
    mode: '0755'
    owner: root
    group: root

- name: Copy qgm background pictures
  ansible.builtin.copy: 
    src: "{{ item }}"
    dest: /usr/local/share/qgm/
    mode: '0644'
    owner: root
    group: root
  loop: 
    - qgm_background.jpg
    - qgm_background_wallpaper.jpg

- name: Entpacke qgm-breeze-sddm.tgz nach /usr/share/sddm/themes
  unarchive:
    src: files/qgm-breeze-sddm.tgz
    dest: /usr/share/sddm/themes

- name: Link /etc/alternatives/sddm-debian-theme nach /usr/share/sddm/themes/qgm-breeze/
  file:
    src: /usr/share/sddm/themes/qgm-breeze/
    dest: /etc/alternatives/sddm-debian-theme
    owner: root
    group: root
    state: link

#########
# Das Skript, das beim Userlogin ausgeführt wird
# Setzt derzeit nur den Hintergrund zurück - nicht bei der 
# allerersten Anmeldung eines Nutzers, weil es da die KDE Config noch 
# nicht gibt.  

- name: Copy qgm-login.sh for misc login Tasks
  copy: 
    src: files/qgm-login.sh   
    dest: /etc/profile.d/qgm-login.sh
    mode: '0644'
    owner: root
    group: root

#########
# Anpassungen an KDE
# - Doppelklick zum öffnen von Dateien
# - Style aug breeze fetstackern
# - Kein Benutzerwechsel
# - Kein Lockscreen
# - Keine neue Session

- name: Set mandatory KDE settings
  ansible.builtin.copy: 
    dest: /etc/xdg/kdeglobals
    content: |
      [KDE][$i]
      SingleClick=false
      widgetStyle=breeze

      [KDE Action Restrictions][$i]
      action/switch_user=false
      action/lock_screen=false
      action/start_new_session=false
      
#########
# Screen Locking abschalten, Mittelstufenschüler...
- name: Disable screen locking
  ansible.builtin.copy: 
    dest: /etc/xdg/kscreenlockerrc
    content: |
      [Daemon][$i]
      Autolock=false
      LockOnResume=false
      
      [Greeter][Wallpaper][org.kde.image][General]
      Image=file:///usr/local/share/qgm/qgm_background.jpg 

########
# Logout beschleunigen
- name: Wartezeit nach KDE nach Logout/Shutdown verkürzen
  ansible.builtin.replace: 
     path: /usr/share/plasma/look-and-feel/org.kde.breeze.desktop/contents/logout/Logout.qml
     regexp: '^(\s+)property real timeout:.*$'
     replace: '\1property real timeout: 4'    

#########
# plasma-discover ist der grafische Paketmamanger
# der stürzt nur ab und die Bejutzer können eh 
# nichts selbst installieren
- name: Remove plasma-discover
  ansible.builtin.apt:
    name: plasma-discover
    state: absent

#########
# Greenfoot und BlueJ. 
# Müssen einmalig auf den netboot Server
# in den http Cache geschoben werden. 
# Siehe Script im Repo.
#
# Außerdem ist hier Optimierungspotential:
# - Installation direkt von der URL
# - Installation nur, wenn die neueste Version noch
#   nicht installiert ist

- name: Download greenfoot/bluej
  ansible.builtin.get_url:
    url: "{{ mirror_javadev }}/{{ item }}" 
    dest: /tmp/{{ item }}
    mode: '0400'
  loop:
    - bluej.deb
    - greenfoot.deb
  when: mirror_javadev is defined and mirror_javadev | length > 0

- name: Install greenfoot/bluej
  ansible.builtin.apt:
    deb: "/tmp/{{ item }}"
  loop:
    - bluej.deb
    - greenfoot.deb
  when: mirror_javadev is defined and mirror_javadev | length > 0

- name: Remove greenfoot/bluej debs
  ansible.builtin.file:
    path: "/tmp/{{ item }}"
    state: absent
  loop:
    - bluej.deb
    - greenfoot.deb
  when: mirror_javadev is defined and mirror_javadev | length > 0

#########
# Anpassungen für Arduino
# - modemmanager dinstallieren, soll die Probleme mit wechselnden 
#   Device Namen lössen (ungetestet)
# - Udev-Rule, so dass die Devices mit 0666 angelegt werden, wie 
#   Warnung des Debian Pakets "arduino" wegen der dialout Gruppe 
#   bleiben leider.

- name: Remove modemmanager to fix arduino problems
  ansible.builtin.apt:
    name: modemmanager
    state: absent

- name: Copy arduino udev rule
  copy: 
    src: files/52-arduino.rules    
    dest: /etc/udev/rules.d/52-arduino.rules
    mode: '0644'
    owner: root
    group: root

- name: relaod udev rules
  ansible.builtin.command: udevadm control --reload-rules
  
- name: trigger udev update
  ansible.builtin.command: udevadm trigger


#########
# Firefox ESR Anpassungen
# Lesezeichen und Startseite müssen in der 
# Datei firefox_policies.json für die eigene Schule
# angepasst werden.
- name: Create firefox policies directory
  ansible.builtin.file:
    path: /etc/firefox-esr/policies
    state: directory
    mode: '0755'

- name: Create a symbolic link firefox to firefox-esr
  ansible.builtin.file:
    src: /etc/firefox-esr
    dest: /etc/firefox
    state: link

- name: Copy firefox policy
  ansible.builtin.copy:
    src: firefox_policies.json
    dest: /etc/firefox-esr/policies/policies.json

- name: Remove file (delete file)
  ansible.builtin.file:
    path: /etc/firefox-esr/policies/firefox_policies.json
    state: absent
  
