- name: Set nightly as the default toolchain
  command: "rustup default nightly-{{ rust_date }}"
  args:
    creates: "{{ account_homedir.stdout }}/.rustup/toolchains/nightly-{{ rust_date }}-x86_64-unknown-linux-gnu"

- name: Install targets
  command: rustup target add "{{ item }}"
  args:
    creates: "{{ account_homedir.stdout }}/.rustup/toolchains/nightly-{{ rust_date }}-x86_64-unknown-linux-gnu/lib/rustlib/{{ item }}"
  loop:
    - x86_64-unknown-linux-musl
    - wasm32-unknown-unknown

# Needed by rust-analyzer (rust-analyzer will attempt to install via rustup on its own, but this will install it manually).
- name: Install the nightly rust-src
  command: rustup component add rust-src
  args:
    creates: "{{ account_homedir.stdout }}/.rustup/toolchains/nightly-{{ rust_date }}-x86_64-unknown-linux-gnu/lib/rustlib/manifest-rust-src"

- name: Install clippy
  command: rustup component add clippy
  args:
    creates: "{{ account_homedir.stdout }}/.rustup/toolchains/nightly-{{ rust_date }}-x86_64-unknown-linux-gnu/bin/cargo-clippy"

- name: Install cranelift
  command: rustup component add rustc-codegen-cranelift
  args:
    creates: "{{ account_homedir.stdout }}/.rustup/toolchains/nightly-{{ rust_date }}-x86_64-unknown-linux-gnu/lib/rustlib/manifest-rustc-codegen-cranelift-preview-x86_64-unknown-linux-gnu"

- name: Create directories
  file:
    name: "{{ account_homedir.stdout }}/{{ item }}"
    state: directory
    mode: 0755
    owner: "{{ account_name.stdout }}"
    group: "{{ group_name.stdout }}"
  loop:
    - .cargo

- name: Copy files
  no_log: true
  copy:
    src: "files/{{ item.src }}"
    dest: "{{ account_homedir.stdout }}/{{ item.dest }}"
    mode: 0600
    owner: "{{ account_name.stdout }}"
    group: "{{ group_name.stdout }}"
  loop:
    - src: cargo_credentials.toml
      dest: .cargo/credentials.toml
    - src: cargo_config.toml
      dest: .cargo/config.toml