---
# Create users for all machines.

## Variables ##

- name: General | Account Management | Users | Use BASH (Default)
  set_fact:
    ling_shell: "{{ bash_exec.stdout }}"

- name: General | Account Management | Users | Use ZSH (Arch+Manjaro)
  set_fact:
    ling_shell: "{{ zsh_exec.stdout }}"
  when: ansible_distribution == "Archlinux"


## Root ##

- name: General | Account Management | Users | Root
  user:
    name: root
    shell: "{{ bash_exec.stdout }}"
    create_home: yes
    generate_ssh_key: yes
  register: user_root


## Scheduler ##

- name: General | Account Management | Users | Ansible
  user:
    name: ansible
    comment: Ansible
    system: yes
  register: user_ansible


## Superuser ##

- name: General | Account Management | Users | Hyperling
  user:
    name: ling
    comment: Hyperling
    groups: 
      - sudo
      - video
      - render
    append: yes
    shell: "{{ ling_shell }}"
    create_home: yes
    generate_ssh_key: yes
  register: user_ling

- name: General | Account Management | Users | Hyperling | Test Logging In
  shell: "echo SUCCESS"
  args:
    executable: "{{ ling_shell }}"
  become_user: ling


## Folders ##

- name: General | Account Management | Users | Folders | Root | Create bin, Downloads, TRASH
  file: 
    path: "{{ item }}"
    state: directory
    mode: '0755'
  loop:
    - "{{ user_root.home }}/bin"
    - "{{ user_root.home }}/Downloads"
    - "{{ user_root.home }}/TRASH"
  when: user_root.home != ""

- name: General | Account Management | Users | Folders | Hyperling | Create bin, LBRY, TRASH
  file: 
    path: "{{ item }}"
    state: directory
    mode: '0755'
  loop:
    - "{{ user_ling.home }}/bin"
    - "{{ user_ling.home }}/LBRY"
    - "{{ user_ling.home }}/TRASH"
  become_user: ling
  when: user_ling.home != ""

- name: General | Account Management | Users | Folders | Home Directories 700
  shell: "chmod 700 {{ user_ling.home }}/../*"


## Files ##

- name: General | Account Management | Users | Files | RC Variables
  set_fact:
    alias_cp: alias cp='cp -v'
    alias_mv: alias mv='mv -v'
    alias_rm: alias rm='echo "Use mv ~/TRASH/ instead!"'
    path_additions: export PATH="~/bin:$PATH"
    function_wttr: |
      function weather() {
        # 20210301 - Someone showed me an awesome weather API! Had to implement it!
        if [[ "$1" == "-"* || $2 != "" ]]; then
          echo 'USAGE: weather [location]
        Any "-" paramaters call the usage since this function does not take any options.
        Location is optional since the API can determine your connection'"'"'s location.
        Useful location types:
          $zip_code              | Ex: 12345
          $city,$state           | Ex: Austin,Texas
          @$domain_dot_extension | Ex: @github.com
          ~$special_location     | Ex: ~Manitou Incline
        Full documentation: https://github.com/chubin/wttr.in'
          return 1
        fi
        curl "https://wttr.in/${1//\ /+}"
      }

- name: General | Account Management | Users | Files | Common Variable
  set_fact:
    rc_common: |
      {{ path_additions }}
      {{ alias_cp }}
      {{ alias_mv }}
      {{ alias_rm }}
      {{ function_wttr }}

- name: General | Account Management | Users | Files | .bashrc
  blockinfile:
    path: "{{ item }}/.bashrc"
    block: |
      {{ rc_common }}
      [[ $(whoami) != "root" ]] && echo "`date` - Ansible .bashrc preferences loaded successfully!"
    marker: '# {mark} MANAGED BY ANSIBLE | Aliases'
    state: present
    create: yes
    backup: yes
  loop:
    - "{{ user_root.home }}"
    - "{{ user_ling.home }}"
  ignore_errors: yes
  when: user_root.home != "" and user_ling.home != ""

- name: General | Account Management | Users | Files | .zshrc
  blockinfile:
    path: "{{ item }}/.zshrc"
    block: |
      {{ rc_common }}
      [[ $(whoami) != "root" ]] && echo "`date` - Ansible .zshrc preferences loaded successfully!"
    marker: '# {mark} MANAGED BY ANSIBLE | Aliases'
    state: present
    create: yes
    backup: yes
  loop:
    - "{{ user_root.home }}"
    - "{{ user_ling.home }}"
  ignore_errors: yes
  when: user_root.home != "" and user_ling.home != ""