diff --git a/Dockerfile b/Dockerfile index c385187..33ae5c1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,9 @@ FROM fedora -WORKDIR /app -RUN yum update -y && yum install -y \ +RUN dnf update -y && dnf install -y \ ansible -COPY . /app -RUN ansible-playbook /app/playbooks/image.yml +RUN useradd -m -s /bin/bash -d /home/alice alice +COPY . /opt/setup +RUN ansible-playbook /opt/setup/playbooks/image.yml +RUN mkdir /workspace && chown alice:alice /workspace +USER dev +WORKDIR /workspace diff --git a/playbooks/image.yml b/playbooks/image.yml index dea4e3d..cf27ab2 100644 --- a/playbooks/image.yml +++ b/playbooks/image.yml @@ -1,6 +1,8 @@ --- - name: Setup host hosts: localhost + vars: + contexts: [] roles: - role: env_terminal - role: env_develop diff --git a/playbooks/roles/base_contexts/files/.shellrc/rc.d/01-env.sh b/playbooks/roles/base_contexts/files/.shellrc/rc.d/01-env.sh new file mode 100644 index 0000000..ce72312 --- /dev/null +++ b/playbooks/roles/base_contexts/files/.shellrc/rc.d/01-env.sh @@ -0,0 +1,9 @@ +export TMPDIR="${TMPDIR:-/tmp}" +export PATH="$PATH:$HOME/.local/bin" + +alias ls=eza +alias cat=bat +alias grep=rg +alias diff=delta +alias less=bat +alias gr='if [ "`git rev-parse --show-cdup`" != "" ]; then cd `git rev-parse --show-cdup`; fi' diff --git a/playbooks/roles/base_contexts/meta/main.yml b/playbooks/roles/base_contexts/meta/main.yml new file mode 100644 index 0000000..ee75b16 --- /dev/null +++ b/playbooks/roles/base_contexts/meta/main.yml @@ -0,0 +1,3 @@ +--- +dependencies: + - role: base_info diff --git a/playbooks/roles/base_contexts/tasks/config.yml b/playbooks/roles/base_contexts/tasks/config.yml new file mode 100644 index 0000000..309b2d5 --- /dev/null +++ b/playbooks/roles/base_contexts/tasks/config.yml @@ -0,0 +1,39 @@ +--- +- name: Copy config {{ context }} + tags: + - config + ansible.builtin.file: + mode: "{{ item.mode }}" + path: "{{ home }}/{{ item.path }}" + state: directory + with_community.general.filetree: + - ../files/{{ context }} + loop_control: + label: "{{ item.path }}" + when: item.state == 'directory' + +- name: "Copy templates : {{ context }}" + tags: + - config + ansible.builtin.template: + src: "{{ item.src }}" + dest: "{{ home }}/{{ item.path | regex_replace('\\.j2$', '') }}" + mode: "{{ item.mode }}" + with_community.general.filetree: + - ../templates/{{ context }} + loop_control: + label: "{{ item.path }}" + when: item.state == 'file' + +- name: Copy config {{ context }} + tags: + - config + ansible.builtin.copy: + src: "{{ item.src }}" + dest: "{{ home }}/{{ item.path }}" + mode: "{{ item.mode }}" + with_community.general.filetree: + - ../files/{{ context }} + loop_control: + label: "{{ item.path }}" + when: item.state == 'file' diff --git a/playbooks/roles/base_contexts/tasks/install.yml b/playbooks/roles/base_contexts/tasks/install.yml new file mode 100644 index 0000000..5c88446 --- /dev/null +++ b/playbooks/roles/base_contexts/tasks/install.yml @@ -0,0 +1,34 @@ +--- +- name: "Unload vars : {{ context }}" + ansible.builtin.include_vars: ../vars/empty.yml + tags: + - install + +- name: "Load vars : {{ context }}" + ansible.builtin.include_vars: "{{ item }}" + tags: + - install + with_first_found: + - files: + - "{{ ansible_distribution }}-{{ ansible_distribution_release }}.yml" + - "{{ ansible_distribution }}.yml" + - "{{ ansible_os_family }}.yml" + - default.yml + paths: ../vars/{{ context }} + skip: true + +- name: "Install dependencies : {{ context }}" + tags: + - install + when: terminal_pkgs + become: "{{ install_with_root }}" + ansible.builtin.package: + name: "{{ terminal_pkgs }}" + +- name: "Install casks : {{ context }}" + tags: + - install + when: terminal_casks + community.general.homebrew_cask: + name: "{{ terminal_casks }}" + state: installed diff --git a/playbooks/roles/base_contexts/tasks/main.yml b/playbooks/roles/base_contexts/tasks/main.yml new file mode 100644 index 0000000..5719976 --- /dev/null +++ b/playbooks/roles/base_contexts/tasks/main.yml @@ -0,0 +1,16 @@ +--- +- name: Install context dependencies + ansible.builtin.include_tasks: install.yml + loop: "{{ contexts }}" + loop_control: + loop_var: context + tags: + - config + +- name: Configure contexts + ansible.builtin.include_tasks: config.yml + loop: "{{ contexts }}" + loop_control: + loop_var: context + tags: + - config diff --git a/playbooks/roles/base_terminal/vars/default/default.yml b/playbooks/roles/base_contexts/vars/default/default.yml similarity index 100% rename from playbooks/roles/base_terminal/vars/default/default.yml rename to playbooks/roles/base_contexts/vars/default/default.yml diff --git a/playbooks/roles/base_terminal/vars/empty.yml b/playbooks/roles/base_contexts/vars/empty.yml similarity index 100% rename from playbooks/roles/base_terminal/vars/empty.yml rename to playbooks/roles/base_contexts/vars/empty.yml diff --git a/playbooks/roles/base_terminal/vars/zeronorth/default.yml b/playbooks/roles/base_contexts/vars/zeronorth/default.yml similarity index 100% rename from playbooks/roles/base_terminal/vars/zeronorth/default.yml rename to playbooks/roles/base_contexts/vars/zeronorth/default.yml diff --git a/playbooks/roles/base_info/tasks/main.yml b/playbooks/roles/base_info/tasks/main.yml index cf22bc8..eed4128 100644 --- a/playbooks/roles/base_info/tasks/main.yml +++ b/playbooks/roles/base_info/tasks/main.yml @@ -1,12 +1,3 @@ -- name: Show info - debug: - msg: - user: "{{ ansible_user }}" - home: "{{ ansible_env.HOME }}" - distribution: "{{ ansible_distribution }}" - family: "{{ ansible_os_family}}" - arch: "{{ ansible_architecture }}" - - name: Setting host facts tags: always ansible.builtin.set_fact: diff --git a/playbooks/roles/base_terminal/defaults/main.yml b/playbooks/roles/base_terminal/defaults/main.yml new file mode 100644 index 0000000..28e2a41 --- /dev/null +++ b/playbooks/roles/base_terminal/defaults/main.yml @@ -0,0 +1,3 @@ +install_with_root: true +terminal_casks: [] +pkgs: [] diff --git a/playbooks/roles/base_terminal/tasks/install.yml b/playbooks/roles/base_terminal/tasks/install.yml index db1b7d0..6a9fe1d 100644 --- a/playbooks/roles/base_terminal/tasks/install.yml +++ b/playbooks/roles/base_terminal/tasks/install.yml @@ -1,10 +1,5 @@ --- -- name: "Unload vars : {{ context }}" - ansible.builtin.include_vars: ../vars/empty.yml - tags: - - install - -- name: "Load vars : {{ context }}" +- name: "Load vars" ansible.builtin.include_vars: "{{ item }}" tags: - install @@ -14,13 +9,14 @@ - "{{ ansible_distribution }}.yml" - "{{ ansible_os_family }}.yml" - default.yml - paths: ../vars/{{ context }} + paths: ../vars skip: true -- name: "Install dependencies : {{ context }}" +- name: "Install dependencies" tags: - install when: terminal_pkgs + become: "{{ install_with_root }}" ansible.builtin.package: name: "{{ terminal_pkgs }}" diff --git a/playbooks/roles/base_terminal/vars/default.yml b/playbooks/roles/base_terminal/vars/default.yml new file mode 100644 index 0000000..c7caaf8 --- /dev/null +++ b/playbooks/roles/base_terminal/vars/default.yml @@ -0,0 +1,14 @@ +--- +terminal_pkgs: + - bat + - eza + - direnv + - fzf + - gnupg + - jq + - ripgrep + - neovim + - gh + - tmux + - zoxide + - sshpass diff --git a/playbooks/roles/software_atuin/defaults/main.yml b/playbooks/roles/software_atuin/defaults/main.yml index 0ed1f12..32d70ba 100644 --- a/playbooks/roles/software_atuin/defaults/main.yml +++ b/playbooks/roles/software_atuin/defaults/main.yml @@ -4,6 +4,7 @@ software_atuin_version: v18.3.0 software_atuin_arch_map: arm64: aarch64 aarch64: aarch64 + x86_64: x86_64 software_atuin_system_map: Darwin: apple-darwin Linux: unknown-linux-gnu diff --git a/playbooks/roles/software_git/defaults/main.yml b/playbooks/roles/software_git/defaults/main.yml new file mode 100644 index 0000000..f00d445 --- /dev/null +++ b/playbooks/roles/software_git/defaults/main.yml @@ -0,0 +1 @@ +install_with_root: true diff --git a/playbooks/roles/software_git/tasks/main.yml b/playbooks/roles/software_git/tasks/main.yml index 2bacd4d..1a21c2a 100644 --- a/playbooks/roles/software_git/tasks/main.yml +++ b/playbooks/roles/software_git/tasks/main.yml @@ -2,6 +2,7 @@ - name: Install dependencies tags: - install + become: "{{ install_with_root }}" ansible.builtin.package: name: - git diff --git a/playbooks/roles/software_starship/defaults/main.yml b/playbooks/roles/software_starship/defaults/main.yml index ac499c9..e72f663 100644 --- a/playbooks/roles/software_starship/defaults/main.yml +++ b/playbooks/roles/software_starship/defaults/main.yml @@ -4,6 +4,7 @@ software_starship_version: v1.20.1 software_starship_arch_map: arm64: aarch64 aarch64: aarch64 + x86_64: x86_64 software_starship_system_map: Darwin: apple-darwin Linux: unknown-linux-musl