---
# Harmonize my systems rather than doing everything manually. :)

# Setup of any device connected to this repo.
- name: Main | Default Setup
  hosts: localhost
  connection: local
  become: true  

  tasks:
    - include: facts/general/system.yml
    - include: facts/general/package.yml
    - include: facts/general/service.yml
    - include: facts/general/user.yml

    - include: tasks/general/start.yml

    - include: tasks/general/software/packages.yml
    - include: tasks/general/software/services.yml
      ignore_errors: yes

    - include: facts/general/gather.yml

    - include: tasks/general/acct_mgmt/groups.yml
    - include: tasks/general/acct_mgmt/users.yml
    - include: tasks/general/acct_mgmt/sudo.yml
    - include: tasks/general/acct_mgmt/keys.yml
    - include: tasks/general/acct_mgmt/mounts.yml

    - include: tasks/general/scripts/root.yml

    - include: tasks/general/cron/ansible.yml
    
    # TODO Need to refactor. Maybe tasks/general/cron/freebsd.yml
    - include: tasks/workstation/freebsd/cron/ansible.yml
      when: ansible_system == "FreeBSD"



# Additional setup for systems with GUI.
- name: Main | Workstation UI Setup
  hosts: workstation
  connection: local
  become: true

  tasks:
    - include: facts/general/system.yml
    - include: facts/workstation/package.yml

    # Set up any systems that do not come with Desktop Environments
    # TODO Need to refactor. Maybe tasks/workstation/setup_gui/freebsd.yml
    - include: tasks/workstation/freebsd/software/gui.yml
      when: ansible_system == "FreeBSD"

    # Additional tasks to configure systems with Desktop Environments
    - include: tasks/workstation/linux/software/flatpaks.yml
      when: ansible_system == "Linux" and flatpak_distro

    - include: tasks/workstation/linux/software/debs.yml
      when: ansible_pkg_mgr == "apt"

    - include: tasks/workstation/linux/software/brave.yml
      when: ansible_pkg_mgr == "apt"

    - include: tasks/workstation/linux/cron/ansible.yml
      when: ansible_system == "Linux"

    - include: tasks/workstation/linux/software/gnome.yml
      when: ansible_system == "Linux"

    - include: tasks/workstation/settings/gnome.yml

    - include: tasks/workstation/settings/nfs.yml
  


# Additional setup for miners!
- name: Main | Miner Setup
  hosts: miner
  connection: local
  become: true

  tasks:
    ##### Setup #####
    - include: tasks/miner/debug.yml
    
    - include: facts/miner/gather.yml

    - include: tasks/miner/acct_mgmt/users.yml

    - include: facts/miner/system.yml
    - include: facts/miner/config.yml
    - include: facts/miner/pool.yml

    ##### Installations #####
    ### CPU SECTION ###
    # Monero #
    - include: tasks/miner/software/xmr-stak-cpu.yml
      when: xmr_stak_cpu is defined

    ### GPU Section ###
    ## Drivers ##
    - include: tasks/miner/drivers/amdgpu.yml
      when: ansible_distribution == "Ubuntu" and amdgpu is defined

    # Ethereum #
    - include: tasks/miner/software/ethminer.yml
      when: ethminer is defined

    - include: tasks/miner/software/nanominer.yml
      when: nanominer is defined

    ##### Scheduling #####
    - include: tasks/miner/cron/ansible.yml
    - include: tasks/miner/cron/mfn.yml



# Easy to deploy server configurations.
- name: Main | Server Setup
  hosts: server
  connection: local
  become: true

  tasks:
    - include: tasks/server/software/onlyoffice.yml
      when: onlyoffice is defined and ansible_pkg_mgr == "apt"

    - include: tasks/server/software/influxdb1.yml
      when: influxdb1 is defined and ansible_pkg_mgr == "apt"

    - include: tasks/server/software/influxdb2.yml
      when: influxdb2 is defined and ansible_pkg_mgr == "apt"

    - include: tasks/server/software/grafana.yml
      when: grafana is defined and ansible_pkg_mgr == "apt"

    - include: tasks/server/software/certbot.yml
      when: certbot is defined
    - include: tasks/server/cron/certbot.yml
      when: certbot is defined



# Provide information for analysis.
- name: Main | Reporting
  hosts: localhost
  connection: local
  become: true

  tasks:
    - include: tasks/general/software/telegraf.yml

    - include: tasks/general/tests/nmap.yml
    - include: tasks/general/tests/lynis.yml

    - include: tasks/general/finish.yml