---
# Cross-platform package management.

- name: General | Software | Packages | Fix Parrot OS (zypper)
# They have zypper higher in the path, but it's really apt renamed.
# Probably for "security", but package module does not use the ansible_pkg_mgr variable
#   so resetting the value to apt doesn't work. Just going to move it.
  shell: "mv `which zypper` `which zypper`.zz.`date +%Y%m%d`"
  register: parrotos_zypper_removed
  ignore_errors: yes
  when: ansible_distribution == "Parrot OS"

- name: General | Software | Packages | Fix Parrot OS (zypper), Exit Incoming
  debug:
    msg: "A silly zypper file was renamed successfully. Please try running Ansible again."
  when: ansible_distribution == "Parrot OS" and parrotos_zypper_removed is defined and not parrotos_zypper_removed.failed

- name: General | Software | Packages | Fix Parrot OS (zypper), Exiting
  shell: exit 1
  when: ansible_distribution == "Parrot OS" and parrotos_zypper_removed is defined and not parrotos_zypper_removed.failed

# More Parrot OS junk. They have a command called update in /usr/bin. Doesn't
# have sudo or anything in it. Hide it in preference for .bashrc update function.
- name: General | Software | Packages | Fix Parrot OS 2 (update)
  shell: "mv `which update` `which update`.zz.`date +%Y%m%d`"
  ignore_errors: yes
  when: ansible_distribution == "Parrot OS"


- name: General | Software | Packages | Cache Refresh (Apt and Pacman)
  package:
    update_cache: yes
    name: htop
  when: ansible_pkg_mgr in ["apt", "pacman"]

- name: General | Software | Packages | Cache Refresh (FreeBSD)
  shell: pkg update
  when: ansible_system == "FreeBSD"

- name: General | Software | Packages | Install Software
  package:
    name:
    - bash
    - sudo
    - nmap
    - neofetch
    - "{{ sshfs }}"
    - "{{ locate }}"
    - zsh
    - "{{ opensshd }}"
    - "{{ tar }}"
    - curl
    - at
    - gcc
    - vim
    - "{{ cron }}"
    - "{{ encfs }}"
    - rsync
    state: present

- name: General | Software | Packages | Install Software (DEV)
  package:
    name:
    - "{{ microcode_amd }}"
    - "{{ microcode_intel }}"
    state: present
  when: branch == "dev"
  ignore_errors: yes

- name: General | Software | Packages | Add Generic Kernel + Tools (Ubuntu)
  package:
    name:
    - linux-image-generic
    - linux-headers-generic
    - linux-tools-generic
    - linux-tools-common
    state: present
  when: ansible_distribution == "Ubuntu"
  ignore_errors: yes

- name: General | Software | Services | Install killall (Looking at you, Debian)
  package:
    name: psmisc
    state: present
  when: ansible_distribution == "Debian"

- name: General | Software | Services | Install "Bloat" (Looking at you, Arch Base)
  package:
    name:
    - which
    - "{{ cron }}"
    state: present
  when: ansible_distribution == "Archlinux"

- name: General | Software | Services | Install Fix (Looking at you, openSUSE)
  package:
    name:
      # openSUSE Tumbleweed comes without gnome-control-center being able to open
      #  properly. Hopefully just a one-time accident but I wanted bleeding edge so I
      #  guess I got it! Luckily was easy to figure out based on CLI error on launch.
      - libvulkan1
      # Provides c99 used to compile ST for DWM.
      - posix_cc
    state: present
  when: ansible_pkg_mgr in ("zypper")

- name: General | Software | Packages | Update Software (Disabled)
  package:
    name:
    - ansible
    - git
    state: latest
  when: 1 == 0

- name: General | Software | Packages | Remove Software
  package:
    name:
    - cowsay # Sorry ;)
    - chromium
    - chromium-browser
    state: absent

# Ubuntu still uses snap for critical components like GNOME, must keep.
- name: General | Software | Services | Disable Snap Daemon
  service:
    name: snapd
    pattern: snapd
    state: stopped
    enabled: no
  when: ansible_distribution != "Ubuntu"
  ignore_errors: yes

- name: General | Software | Packages | Remove Snap (Besides Ubuntu)
  package:
    name:
    - snapd
    state: absent
  when: ansible_distribution != "Ubuntu"
  ignore_errors: yes