diff --git a/defaults.yml b/defaults.yml new file mode 100644 index 0000000..184975d --- /dev/null +++ b/defaults.yml @@ -0,0 +1,15 @@ +# containers during host setup +container_names: + - dev + - txt + - haskell + +# containers tool groups +container_tools: + dev: + - cpp + - js + txt: + - txt + haskell: + - haskell diff --git a/playbooks/box.yml b/playbooks/box.yml index 8b13789..da77359 100644 --- a/playbooks/box.yml +++ b/playbooks/box.yml @@ -1 +1,30 @@ +- name: Configure distrobox dev container + hosts: localhost + connection: local + vars: + vars_prompt: + - name: tools_in + prompt: "Specify comma separated list of required tool packages (cpp, js, haskell, txt, lang)" + roles: + # link and copy dotfiles + - role: dotfiles + vars: + configue: + - bash + - cli + - git + - ssh + - scripts + # install apps + - role: installs + vars: + apps: + - cli + + # install and setup dev tools + - role: dev + vars: + tools: "{{ tools_in.split(',') }}" + + # TODO: repositories diff --git a/roles/truffle/tasks/main.yml b/playbooks/distro.yml similarity index 100% rename from roles/truffle/tasks/main.yml rename to playbooks/distro.yml diff --git a/playbooks/host.yml b/playbooks/host.yml index 8b13789..bc3599a 100644 --- a/playbooks/host.yml +++ b/playbooks/host.yml @@ -1 +1,38 @@ +- name: Create distrobox containers on host + hosts: localhost + connection: local + vars: + tasks: + - name: Create containers + include_role: + name: dev_host + vars: + container_name: '{{ item }}' + loop: '{{ container_names }}' +- name: Setup containers + hosts: containers + roles: + # link and copy dotfiles + - role: dotfiles + vars: + configue: + - bash + - cli + - git + - ssh + - scripts + + # install apps + - role: installs + vars: + apps: + - cli + + # install and setup dev tools + - role: dev + vars: + tools: "{{ container_tools['{{item}}'] }}" + + # TODO: repositories + diff --git a/roles/installs/tasks/build.yml b/roles/dev/tasks/build.yml similarity index 100% rename from roles/installs/tasks/build.yml rename to roles/dev/tasks/build.yml diff --git a/roles/installs/tasks/cpp.yml b/roles/dev/tasks/cpp.yml similarity index 100% rename from roles/installs/tasks/cpp.yml rename to roles/dev/tasks/cpp.yml diff --git a/roles/haskell/tasks/main.yml b/roles/dev/tasks/haskell.yml similarity index 100% rename from roles/haskell/tasks/main.yml rename to roles/dev/tasks/haskell.yml diff --git a/roles/installs/tasks/javascript.yml b/roles/dev/tasks/js.yml similarity index 100% rename from roles/installs/tasks/javascript.yml rename to roles/dev/tasks/js.yml diff --git a/roles/dev/tasks/main.yml b/roles/dev/tasks/main.yml new file mode 100644 index 0000000..7014df5 --- /dev/null +++ b/roles/dev/tasks/main.yml @@ -0,0 +1,18 @@ +- ansible.builtin.import_tasks: build.yml + +- ansible.builtin.import_tasks: cpp.yml + when: "'cpp' in tools" + +- ansible.builtin.import_tasks: js.yml + when: "'js' in tools" + +- ansible.builtin.import_tasks: haskell.yml + when: "'haskell' in tools" + +- ansible.builtin.import_tasks: txt.yml + when: "'txt' in tools" + +- ansible.builtin.import_tasks: lang.yml + when: "'lang' in tools" + +# TODO: ocaml, truffle, ... diff --git a/roles/writing/tasks/main.yml b/roles/dev/tasks/txt.yml similarity index 100% rename from roles/writing/tasks/main.yml rename to roles/dev/tasks/txt.yml diff --git a/roles/dev_host/defaults/main.yml b/roles/dev_host/defaults/main.yml new file mode 100644 index 0000000..e7acdef --- /dev/null +++ b/roles/dev_host/defaults/main.yml @@ -0,0 +1,3 @@ +container_name: dev +container_image: quay.io/fedora/fedora-toolbox +container_image_tag: latest diff --git a/roles/dev_host/tasks/main.yml b/roles/dev_host/tasks/main.yml new file mode 100644 index 0000000..382884e --- /dev/null +++ b/roles/dev_host/tasks/main.yml @@ -0,0 +1,37 @@ +# os based on https://github.com/sandorex/config/blob/master/playbooks/container-dev.yml + +- name: Check if container already exists + containers.podman.podman_container_info: + name: '{{ container_name }}' + register: container_info + +- name: Create container using distrobox + ansible.builtin.command: + # requires distrobox version 1.7 + # add python3 to allow ansible to work + # add ansible to run local roles without host (?) + cmd: >- + distrobox create --yes --no-entry --pull + --image '{{ container_image }}:{{ container_image_tag }}' + --name '{{ container_name }}' + --hostname '{{ ansible_hostname }}' + --additional-packages 'python3 ansible' + when: container_info.containers | length == 0 + +- name: Start the container + ansible.builtin.command: + cmd: 'distrobox enter --name {{ container_name }} -- sh -c ''exit''' + # start if not running or if not defined + when: not (container_info.containers[0].State.Running | default(false)) + +- name: Add container to host + changed_when: no + ansible.builtin.add_host: + name: '{{ container_name }}' # ?? + groups: containers + ansible_connection: distrobox + ansible_host: '{{ container_name }}' + ansible_user: '{{ ansible_user_id }}' + fedora_version: '{{ container_image_tag }}' # ?? + +# container setup is done outside (?) diff --git a/roles/installs/tasks/cli.yml b/roles/installs/tasks/cli.yml index 8c9724d..0284113 100644 --- a/roles/installs/tasks/cli.yml +++ b/roles/installs/tasks/cli.yml @@ -5,12 +5,16 @@ - bash - fish - trash-cli + + # dev utils - just - jsonnet + - shellcheck # edit utils - helix - micro + - nano - tmux - tmate - ripgrep diff --git a/roles/installs/tasks/main.yml b/roles/installs/tasks/main.yml index 33454d5..9526228 100644 --- a/roles/installs/tasks/main.yml +++ b/roles/installs/tasks/main.yml @@ -1,18 +1,6 @@ -- ansible.builtin.import_tasks: build.yml - when: "'build' in apps" - - ansible.builtin.import_tasks: cli.yml when: "'cli' in apps" -- ansible.builtin.import_tasks: cpp.yml - when: "'cpp' in apps" - -- ansible.builtin.import_tasks: lang.yml - when: "'lang' in apps" - -- ansible.builtin.import_tasks: javascript.yml - when: "'javascript' in apps" - - ansible.builtin.import_tasks: gui.yml when: "'gui' in apps"