diff --git a/roles/cleanup/tasks/main.yml b/roles/cleanup/tasks/main.yml new file mode 100644 index 0000000..9d904ac --- /dev/null +++ b/roles/cleanup/tasks/main.yml @@ -0,0 +1,6 @@ +- name: Remove temporary directory + tags: always + file: + path: "{{ temp_install_dir.path }}" + state: absent + when: temp_install_dir.path is defined diff --git a/roles/go/tasks/main.yml b/roles/go/tasks/main.yml new file mode 100644 index 0000000..8356628 --- /dev/null +++ b/roles/go/tasks/main.yml @@ -0,0 +1,10 @@ +- name: Install and configure GO + tags: go + become: true + # become_user: "{{ default_user }}" + block: + - name: Install and configure GO + include_role: + name: fubarhouse.golang + vars: + GOPATH: "{{ default_user_home }}/go" diff --git a/roles/python/tasks/main.yml b/roles/python/tasks/main.yml new file mode 100644 index 0000000..2e683e7 --- /dev/null +++ b/roles/python/tasks/main.yml @@ -0,0 +1,40 @@ +- name: Install and configure Python + tools + tags: python + become: true + become_user: "{{ default_user }}" + block: + - name: Install Pyenv + shell: curl https://pyenv.run | zsh + args: + creates: "{{ default_user_home }}/.pyenv/bin/pyenv" + environment: + PYENV_ROOT: "{{ default_user_home }}/.pyenv" + + - name: Install Pyenv version of Python + shell: "{{ default_user_home }}/.pyenv/bin/pyenv install {{ pyenv_python_version }}" + args: + creates: "{{ default_user_home }}/.pyenv/versions/{{ pyenv_python_version }}/bin/python" + + - name: Install pipx + command: python3 -m pip install pipx --user + args: + creates: "{{ default_user_home }}/.local/bin/pipx" + + - name: Install pipx packages + shell: "{{ default_user_home }}/.local/bin/pipx install {{ item }}" + loop: "{{ pipx_packages }}" + + - name: Install Poetry + shell: curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 + args: + creates: "{{ default_user_home }}/.poetry/bin/poetry" + + - name: Install Poetry plugin for oh-my-zsh + shell: | + mkdir {{ default_user_home }}/.oh-my-zsh/custom/plugins/poetry + {{ default_user_home }}/.poetry/bin/poetry completions zsh > {{ default_user_home }}/.oh-my-zsh/custom/plugins/poetry/_poetry + args: + creates: "{{ default_user_home }}/.oh-my-zsh/custom/plugins/poetry" + + - name: Configure Poetry + command: "{{ default_user_home }}/.poetry/bin/poetry config virtualenvs.in-project true" diff --git a/roles/rust/tasks/main.yml b/roles/rust/tasks/main.yml new file mode 100644 index 0000000..690522a --- /dev/null +++ b/roles/rust/tasks/main.yml @@ -0,0 +1,17 @@ +- name: Install and configure Rust + tags: rust + become: true + become_user: "{{ default_user }}" + block: + - name: Install Rust toolchain + shell: curl https://sh.rustup.rs -sSf | sh -s -- -y + args: + creates: "{{ default_user_home }}/.cargo/bin/rustup" + environment: + RUSTUP_HOME: "{{ default_user_home }}/.rustup" + CARGO_HOME: "{{ default_user_home }}/.cargo" + + - name: Install base rust programs + shell: "{{ default_user_home }}/.cargo/bin/cargo install {{ item }}" + loop: "{{ cargo_packages }}" + when: install_cargo_packages diff --git a/roles/setup/tasks/main.yml b/roles/setup/tasks/main.yml new file mode 100644 index 0000000..a1fbe1e --- /dev/null +++ b/roles/setup/tasks/main.yml @@ -0,0 +1,32 @@ +- name: Initial server setup + tags: setup + block: + - name: Create default user + user: + name: "{{ default_user }}" + password: "{{ default_user_password | password_hash('sha512') }}" + groups: sudo + create_home: yes + shell: /bin/zsh + generate_ssh_key: yes + ssh_key_bits: 2048 + ssh_key_file: .ssh/id_rsa + update_password: always + state: present + + - name: Ensure sudo group has passwordless sudo privileges + lineinfile: + dest: /etc/sudoers + state: present + regexp: "^%sudo" + line: "%sudo ALL=(ALL) NOPASSWD:ALL" + validate: "/usr/sbin/visudo -cf %s" + + - name: Upgrade apt packages + apt: + update_cache: yes + upgrade: full + + - name: Install apt packages + apt: + name: "{{ packages_to_install }}" diff --git a/roles/shell/tasks/main.yml b/roles/shell/tasks/main.yml index 9d8d110..c93b64f 100644 --- a/roles/shell/tasks/main.yml +++ b/roles/shell/tasks/main.yml @@ -1,175 +1,91 @@ --- -- name: Create default user - user: - name: "{{ default_user }}" - password: "{{ default_user_password | password_hash('sha512') }}" - groups: sudo - create_home: yes - shell: /bin/zsh - generate_ssh_key: yes - ssh_key_bits: 2048 - ssh_key_file: .ssh/id_rsa - update_password: always - state: present - -- name: Ensure sudo group has passwordless sudo privileges - lineinfile: - dest: /etc/sudoers - state: present - regexp: "^%sudo" - line: "%sudo ALL=(ALL) NOPASSWD:ALL" - validate: "/usr/sbin/visudo -cf %s" - -- name: Upgrade apt packages - apt: - update_cache: yes - upgrade: full - -- name: Install apt packages - apt: - name: "{{ packages_to_install }}" - -- name: Get default user home - getent: - database: passwd - key: "{{ default_user }}" - split: ":" - -- name: Set default user home - set_fact: - default_user_home: "{{ getent_passwd[default_user][4] }}" - -- name: Install .tmux.conf to default user - copy: - src: .tmux.conf - dest: "{{ default_user_home }}/.tmux.conf" - owner: "{{ default_user }}" - group: "{{default_user}}" - force: yes - mode: 0644 - -- name: Create temporary install directory - tempfile: - path: "/home/{{ default_user }}" - state: directory - suffix: .tmp - register: temp_install_dir - changed_when: false +- name: Configure shell for default user + tags: shell become: true become_user: "{{ default_user }}" + block: + - name: Get default user home + getent: + database: passwd + key: "{{ default_user }}" + split: ":" + tags: always -- name: Download oh-my-zsh - get_url: - url: https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh - dest: "{{ temp_install_dir.path }}" - mode: 0777 - become: true - become_user: "{{ default_user }}" + - name: Set default user home + set_fact: + default_user_home: "{{ getent_passwd[default_user][4] }}" + tags: always -- name: Install oh-my-zsh - shell: "sh {{ temp_install_dir.path }}/install.sh --unattended" - args: - creates: "{{ default_user_home }}/.oh-my-zsh" - become: true - become_user: "{{ default_user }}" + - name: Install and configure default user environment + become: true + become_user: "{{ default_user }}" + block: + - name: Install .tmux.conf to default user + copy: + src: .tmux.conf + dest: "{{ default_user_home }}/.tmux.conf" + owner: "{{ default_user }}" + group: "{{default_user}}" + force: yes + mode: 0644 -- name: Install powerlevel10k theme - git: - repo: "https://gitee.com/romkatv/powerlevel10k.git" - version: master - dest: "{{ default_user_home }}/.oh-my-zsh/custom/themes/powerlevel10k" - depth: 1 + - name: Create temporary install directory + tempfile: + path: "/home/{{ default_user }}" + state: directory + suffix: .tmp + register: temp_install_dir + changed_when: false + tags: always -- name: Install zsh-syntax-highlighting - git: - repo: "https://github.com/zsh-users/zsh-syntax-highlighting.git" - version: master - dest: "{{ default_user_home }}/.zsh/zsh-syntax-highlighting" - clone: yes - update: yes + - name: Download oh-my-zsh + get_url: + url: https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh + dest: "{{ temp_install_dir.path }}" + mode: 0777 -- name: Install zsh-autosuggestions - git: - repo: https://github.com/zsh-users/zsh-autosuggestions - version: master - dest: "{{ default_user_home }}/.zsh/zsh-autosuggestions" - clone: yes - update: yes + - name: Install oh-my-zsh + shell: "sh {{ temp_install_dir.path }}/install.sh --unattended" + args: + creates: "{{ default_user_home }}/.oh-my-zsh" -- name: Install .zshrc to default user - template: - src: .zshrc.j2 - dest: "{{ default_user_home }}/.zshrc" - owner: "{{ default_user }}" - group: "{{ default_user }}" - force: yes - mode: 0644 + - name: Install powerlevel10k theme + git: + repo: "https://gitee.com/romkatv/powerlevel10k.git" + version: master + dest: "{{ default_user_home }}/.oh-my-zsh/custom/themes/powerlevel10k" + depth: 1 -- name: Install .p10k.zsh to default user - copy: - src: .p10k.zsh - dest: "{{ default_user_home }}/.p10k.zsh" - owner: "{{ default_user }}" - group: "{{default_user}}" - force: yes - mode: 0644 + - name: Install zsh-syntax-highlighting + git: + repo: "https://github.com/zsh-users/zsh-syntax-highlighting.git" + version: master + dest: "{{ default_user_home }}/.zsh/zsh-syntax-highlighting" + clone: yes + update: yes -- name: Install Rustup - shell: curl https://sh.rustup.rs -sSf | sh -s -- -y - args: - creates: "{{ default_user_home }}/.cargo/bin/rustup" - environment: - RUSTUP_HOME: "{{ default_user_home }}/.rustup" - CARGO_HOME: "{{ default_user_home }}/.cargo" - become: true - become_user: "{{ default_user }}" + - name: Install zsh-autosuggestions + git: + repo: https://github.com/zsh-users/zsh-autosuggestions + version: master + dest: "{{ default_user_home }}/.zsh/zsh-autosuggestions" + clone: yes + update: yes -- name: Install pyenv - shell: curl https://pyenv.run | zsh - args: - creates: "{{ default_user_home }}/.pyenv/bin/pyenv" - environment: - PYENV_ROOT: "{{ default_user_home }}/.pyenv" - become: true - become_user: "{{ default_user }}" + - name: Install .zshrc to default user + template: + src: .zshrc.j2 + dest: "{{ default_user_home }}/.zshrc" + owner: "{{ default_user }}" + group: "{{ default_user }}" + force: yes + mode: 0644 -- name: Install pyenv version of python - shell: "{{ default_user_home }}/.pyenv/bin/pyenv install {{ pyenv_python_version }}" - args: - creates: "{{ default_user_home }}/.pyenv/versions/{{ pyenv_python_version }}/bin/python" - become: true - become_user: "{{ default_user }}" - -- name: Install pipx - command: python3 -m pip install pipx --user - args: - creates: "{{ default_user_home }}/.local/bin/pipx" - become: true - become_user: "{{ default_user }}" - -- name: Install poetry - shell: curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - args: - creates: "{{ default_user_home }}/.poetry/bin/poetry" - become: true - become_user: "{{ default_user }}" - -- name: Install poetry plugin for oh-my-zsh - shell: | - mkdir {{ default_user_home }}/.oh-my-zsh/custom/plugins/poetry - {{ default_user_home }}/.poetry/bin/poetry completions zsh > {{ default_user_home }}/.oh-my-zsh/custom/plugins/poetry/_poetry - args: - creates: "{{ default_user_home }}/.oh-my-zsh/custom/plugins/poetry" - become: true - become_user: "{{ default_user }}" - -- name: Configure poetry - command: "{{ default_user_home }}/.poetry/bin/poetry config virtualenvs.in-project true" - become: true - become_user: "{{ default_user }}" - -- name: Install base rust programs - shell: "{{ default_user_home }}/.cargo/bin/cargo install {{ item }}" - loop: "{{ cargo_packages }}" - become: true - become_user: "{{ default_user }}" + - name: Install .p10k.zsh to default user + copy: + src: .p10k.zsh + dest: "{{ default_user_home }}/.p10k.zsh" + owner: "{{ default_user }}" + group: "{{default_user}}" + force: yes + mode: 0644 diff --git a/roles/shell/templates/.zshrc.j2 b/roles/shell/templates/.zshrc.j2 index 9e0f8d3..e11ea2d 100644 --- a/roles/shell/templates/.zshrc.j2 +++ b/roles/shell/templates/.zshrc.j2 @@ -191,11 +191,17 @@ export PATH="$HOME/.poetry/bin:$PATH" ################################################################ source "$HOME/.cargo/env" +################################################################ +# GO # +################################################################ +export GOBIN="$HOME/go/bin" +export PATH="/usr/local/go/bin:$HOME/go/bin:$PATH" + ################################################################ # APPS # ################################################################ # AWS -# complete -C "$HOME/.local/bin/aws_completer" aws +complete -C "$HOME/.local/bin/aws_completer" aws # TFEnv export PATH="$PATH:$HOME/.tfenv/bin" diff --git a/roles/terraform/tasks/main.yml b/roles/terraform/tasks/main.yml new file mode 100644 index 0000000..8d7ca41 --- /dev/null +++ b/roles/terraform/tasks/main.yml @@ -0,0 +1,19 @@ +- name: Install and configure Terraform + tags: terraform + become: true + become_user: "{{ default_user }}" + block: + - name: Install tfenv + git: + repo: https://github.com/tfutils/tfenv.git + version: master + dest: "{{ default_user_home }}/.tfenv" + depth: 1 + + - name: Install latest version of Terraform + shell: "{{ default_user_home }}/.tfenv/bin/tfenv install latest" + args: + creates: "{{ default_user_home }}/.tfenv/version" + + - name: Use latest version of Terraform + shell: "{{ default_user_home }}/.tfenv/bin/tfenv use latest"