---
# GNOME settings, extensions, and setup.

# Check for special software that may need added to favorites.
- name: Workstation | Account Management | GNOME | Facts | Defaults
  set_fact:
    browser: "com.github.Eloston.UngoogledChromium.desktop"

- name: Workstation | Account Management | GNOME | Checks | Brave | Locate
  shell: which brave-browser
  register: brave
  ignore_errors: yes

- name: Workstation | Account Management | GNOME | Checks | Brave | Set As Browser
  set_fact:
    browser: "brave-browser.desktop"
  when: not brave.failed

#- name: Workstation | Account Management | GNOME | Checks | LibreWolf | Locate
#  shell: which librewolf
#  register: librewolf
#  ignore_errors: yes
#
#- name: Workstation | Account Management | GNOME | Checks | LibreWolf | Set As Browser
#  set_fact:
#    browser: "io.gitlab.librewolf-community.desktop"
#  when: not librewolf.failed or (flatpak_distro is defined and flatpak_distro)


# Make sure Gnome-Tweaks is installed
- name: Workstation | Account Management | GNOME | Install Dependencies
  package:
    name: 
      - "{{ gnome_tweaks }}"
      - "{{ dconf_editor }}"
      - "{{ psutil }}"
    state: present


## Dash to Dock Extension ##
# Note: Validate DtD by checking /org/gnome/shell/enabled-extensions for dash-to-dock@micxgx.gmail.com

- name: Workstation | Account Management | GNOME | Dash To Dock
  block:

  - name: Workstation | Account Management | GNOME | Dash To Dock | Check
    shell: "cd ~/.local/share/gnome-shell/extensions/dash-to-dock@micxgx.gmail.com/"
    become_user: "{{ user }}"
    register: dash_to_dock_exists

  # Install # 
  # https://micheleg.github.io/dash-to-dock/download.html

  - name: Workstation | Account Management | GNOME | Dash To Dock | Install | Clone Repo
    git: 
      repo: https://github.com/micheleg/dash-to-dock.git
      dest: "~/TRASH/dash-to-dock/"
      clone: yes
      force: no
      version: master
    become_user: "{{ user }}"
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  - name: Workstation | Account Management | GNOME | Dash To Dock | Install | Dependencies
    package:
      name: 
        - "{{ make }}"
        - "{{ msgfmt }}"
        - "{{ sassc }}"
      state: present
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  - name: Workstation | Account Management | GNOME | Dash To Dock | Install | Make
    shell: "cd ~/TRASH/dash-to-dock/; {{ make }}; {{ make }} install"
    become_user: "{{ user }}"
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  - name: Workstation | Account Management | GNOME | Dash To Dock | Read Enabled Extension Array
    dconf: 
      key: /org/gnome/shell/enabled-extensions
      state: read
    become_user: "{{ user }}"
    register: gnome_enabled_extensions
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  - name: Workstation | Account Management | GNOME | Dash To Dock | dconf Return Object
    debug:
      var: gnome_enabled_extensions
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  # https://ansible-docs.readthedocs.io/zh/stable-2.0/rst/playbooks_filters.html#filters-for-formatting-data

  - name: Workstation | Account Management | GNOME | Dash To Dock | Variables 1
    set_fact: 
      gnome_enabled_extensions: "{{ gnome_enabled_extensions.value | replace('@as ', '') }}"
      dash_to_dock_ext_comma: ""
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  - name: Workstation | Account Management | GNOME | Dash To Dock | After replace()
    debug:
      var: gnome_enabled_extensions
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  - name: Workstation | Account Management | GNOME | Dash To Dock | Variables 2
    set_fact: 
      dash_to_dock_ext_comma: ", "
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed and gnome_enabled_extensions not in ("[]", [], "None")

  - name: Workstation | Account Management | GNOME | Dash To Dock | Variables 3
    set_fact: 
      dash_to_dock_ext_name: "{{ dash_to_dock_ext_comma }}'dash-to-dock@micxgx.gmail.com']"
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  - name: Workstation | Account Management | GNOME | Dash To Dock | Variables 4
    set_fact:
      gnome_enabled_extensions: "[]"
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed and gnome_enabled_extensions == "None"

  - name: Workstation | Account Management | GNOME | Dash To Dock | Print Value To Append With
    debug:
      var: dash_to_dock_ext_name
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  - name: Workstation | Account Management | GNOME | Dash To Dock | Print Value To Append To
    debug:
      var: gnome_enabled_extensions
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  - name: Workstation | Account Management | GNOME | Dash To Dock | Print Combined Value
    debug:
      msg: "{{ gnome_enabled_extensions | replace(']', dash_to_dock_ext_name) }}"
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  - name: Workstation | Account Management | GNOME | Dash To Dock | Enable
    dconf: 
      key: /org/gnome/shell/enabled-extensions
      value: "{{ gnome_enabled_extensions | replace(']', dash_to_dock_ext_name) }}"
      state: present
    become_user: "{{ user }}"
    when: ansible_distribution not in ("Ubuntu") and dash_to_dock_exists.failed

  # Settings #

  - name: Workstation | Account Management | GNOME | Dash To Dock | Dock Position
    dconf: 
      key: /org/gnome/shell/extensions/dash-to-dock/dock-position
      value: "'LEFT'"
      state: present
    become_user: "{{ user }}"

  - name: Workstation | Account Management | GNOME | Dash To Dock | Dock Fixed
    dconf: 
      key: /org/gnome/shell/extensions/dash-to-dock/dock-fixed
      value: "true"
      state: present
    become_user: "{{ user }}"

  - name: Workstation | Account Management | GNOME | Dash To Dock | Icon Size
    dconf: 
      key: /org/gnome/shell/extensions/dash-to-dock/dash-max-icon-size
      value: "32"
      state: present
    become_user: "{{ user }}"
    
  ignore_errors: yes

- name: Workstation | Account Management | GNOME | Favorites (Linux)
  dconf: 
    key: /org/gnome/shell/favorite-apps
    value: "['org.gnome.Terminal.desktop', 'gnome-system-monitor.desktop', 'org.gnome.Nautilus.desktop'
            ,'io.gitlab.librewolf-community.desktop', '{{ browser }}', 'org.gnome.Evolution.desktop'
            ,'chat.delta.desktop.desktop'
            ,'com.vscodium.codium.desktop', 'org.shotcut.Shotcut.desktop'
            ,'org.telegram.desktop.desktop', 'com.discordapp.Discord.desktop', 'im.riot.Riot.desktop'
            ,'io.lbry.lbry-app.desktop'
            ,'com.valvesoftware.Steam.desktop'
            ]"
    state: present
  become_user: "{{ user }}"
  when: ansible_system == "Linux"
  
- name: Workstation | Account Management | GNOME | Favorites (FreeBSD)
  dconf: 
    key: /org/gnome/shell/favorite-apps
    value: "['org.gnome.Terminal.desktop', 'org.gnome.Nautilus.desktop', 
             'firefox.desktop', 'org.gnome.Evolution.desktop', 'org.mozilla.Thunderbird.desktop', 
             'code-oss.desktop', 'org.telegram.desktop.desktop']"
    state: present
  become_user: "{{ user }}"
  when: ansible_system == "FreeBSD"


## Top Bar Settings ##
# (Battery Percentage, Clock Weekday+Seconds, Calendar Week Numbers)

- name: Workstation | Account Management | GNOME | Interface - Show Date
  dconf: 
    key: /org/gnome/desktop/interface/clock-show-date
    value: "true"
    state: present
  become_user: "{{ user }}"

- name: Workstation | Account Management | GNOME | Interface - 24h Format
  dconf: 
    key: /org/gnome/desktop/interface/clock-format
    value: "'24h'"
    state: present
  become_user: "{{ user }}"

- name: Workstation | Account Management | GNOME | Interface - Show Seconds
  dconf: 
    key: /org/gnome/desktop/interface/clock-show-seconds
    value: "true"
    state: present
  become_user: "{{ user }}"

- name: Workstation | Account Management | GNOME | Interface - Show Weekday
  dconf: 
    key: /org/gnome/desktop/interface/clock-show-weekday
    value: "true"
    state: present
  become_user: "{{ user }}"

- name: Workstation | Account Management | GNOME | Interface - 24h Format
  dconf: 
    key: /org/gnome/desktop/interface/show-battery-percentage
    value: "true"
    state: present
  become_user: "{{ user }}"

- name: Workstation | Account Management | GNOME | Interface - Show Week Date
  dconf: 
    key: /org/gnome/desktop/calendar/show-weekdate
    value: "true"
    state: present
  become_user: "{{ user }}"


# Never Prompt for Removal Media



# Dark theme?
#Pop-dark on Pop
#Adwaita-dark on everything else



# Window Titlebars (Titlebar Buttons Minimize)
- name: Workstation | Account Management | GNOME | Window Buttons
  dconf: 
    key: /org/gnome/desktop/wm/preferences/button-layout 
    value: "'appmenu:minimize,close'"
    state: present
  become_user: "{{ user }}"


# Security
- name: Workstation | Account Management | GNOME | Privacy - Camera
  dconf: 
    key: /org/gnome/desktop/privacy/disable-camera
    value: "true"
    state: present
  become_user: "{{ user }}"

- name: Workstation | Account Management | GNOME | Privacy - Microphone
  dconf: 
    key: /org/gnome/desktop/privacy/disable-microphone
    value: "true"
    state: present
  become_user: "{{ user }}"



# Schemas to try after looking at gsettings list-schemas | sort
# org.gnome.ControlCenter -- not very interesting
# org.gnome.desktop.default-applications -- nothing?? Where do we set Brave and Evolution?
# org.gnome.desktop.interface -- Good stuff in here.
# org.gnome.desktop.peripherals -- Nothing :(
# org.gnome.desktop.privacy -- Good stuff here too!! Cool!
# org.gnome.desktop.session
# org.gnome.desktop.wm.keybindings
# org.gnome.desktop.wm.preferences
# org.gnome.power-manager
# org.gnome.SessionManager
# org.gnome.shell
# org.gnome.shell.extensions.pop-shell
# org.gnome.shell.keybindings