From ea4409c58b478c12e4eadb3176ff0f7da2a539a7 Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Fri, 8 Aug 2025 14:59:55 +0300 Subject: [PATCH 1/5] add shellcheck --- roles/installs/tasks/cli.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/roles/installs/tasks/cli.yml b/roles/installs/tasks/cli.yml index 8c9724d..f5dcb8c 100644 --- a/roles/installs/tasks/cli.yml +++ b/roles/installs/tasks/cli.yml @@ -5,8 +5,11 @@ - bash - fish - trash-cli + + # dev utils - just - jsonnet + - shellcheck # edit utils - helix From 58966f9e4a7c12a0a11c9583966c9081eb316c3a Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Fri, 8 Aug 2025 15:14:04 +0300 Subject: [PATCH 2/5] add nano --- roles/installs/tasks/cli.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/installs/tasks/cli.yml b/roles/installs/tasks/cli.yml index f5dcb8c..0284113 100644 --- a/roles/installs/tasks/cli.yml +++ b/roles/installs/tasks/cli.yml @@ -14,6 +14,7 @@ # edit utils - helix - micro + - nano - tmux - tmate - ripgrep From f7a6f59fc6a49472d6004b420f1d6d74f98755a1 Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Fri, 8 Aug 2025 21:41:02 +0300 Subject: [PATCH 3/5] separate install and dev roles, box basic playbook --- playbooks/box.yml | 27 ++++++++++++++++++- roles/{installs => dev}/tasks/build.yml | 0 roles/{installs => dev}/tasks/cpp.yml | 0 .../tasks/main.yml => dev/tasks/haskell.yml} | 0 .../tasks/javascript.yml => dev/tasks/js.yml} | 0 roles/dev/tasks/main.yml | 18 +++++++++++++ .../tasks/main.yml => dev/tasks/txt.yml} | 0 roles/installs/tasks/main.yml | 12 --------- roles/truffle/tasks/main.yml | 1 - 9 files changed, 44 insertions(+), 14 deletions(-) rename roles/{installs => dev}/tasks/build.yml (100%) rename roles/{installs => dev}/tasks/cpp.yml (100%) rename roles/{haskell/tasks/main.yml => dev/tasks/haskell.yml} (100%) rename roles/{installs/tasks/javascript.yml => dev/tasks/js.yml} (100%) create mode 100644 roles/dev/tasks/main.yml rename roles/{writing/tasks/main.yml => dev/tasks/txt.yml} (100%) delete mode 100644 roles/truffle/tasks/main.yml diff --git a/playbooks/box.yml b/playbooks/box.yml index 8b13789..13a9df5 100644 --- a/playbooks/box.yml +++ b/playbooks/box.yml @@ -1 +1,26 @@ - +- name: Install all required tools into the distrobox dev container + hosts: localhost + connection: local + vars: + configue: + - bash + - cli + - git + - ssh + - scripts + apps: + - cli + # tools: + # - cpp + # - javascript + vars_prompt: + - name: tools_in + prompt: "Specify comma separated list of required tool packages (cpp, js, haskell, txt, lang)" + pre_tasks: + - ansible.builtin.set_fact: + tools: "{{ tools_in.split(',') }}" + roles: + - role: dotfiles + - role: installs + - role: dev + # 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/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" diff --git a/roles/truffle/tasks/main.yml b/roles/truffle/tasks/main.yml deleted file mode 100644 index 8b13789..0000000 --- a/roles/truffle/tasks/main.yml +++ /dev/null @@ -1 +0,0 @@ - From 0605fda37e9eb8b5739e3db2cd19f6c01b52814c Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Fri, 8 Aug 2025 22:26:14 +0300 Subject: [PATCH 4/5] distrobox container host setup playbook --- defaults.yml | 15 +++++++++++++ playbooks/box.yml | 34 ++++++++++++++++------------- playbooks/host.yml | 37 ++++++++++++++++++++++++++++++++ roles/dev_host/defaults/main.yml | 3 +++ roles/dev_host/tasks/main.yml | 37 ++++++++++++++++++++++++++++++++ 5 files changed, 111 insertions(+), 15 deletions(-) create mode 100644 defaults.yml create mode 100644 roles/dev_host/defaults/main.yml create mode 100644 roles/dev_host/tasks/main.yml 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 13a9df5..da77359 100644 --- a/playbooks/box.yml +++ b/playbooks/box.yml @@ -1,26 +1,30 @@ -- name: Install all required tools into the distrobox dev container +- name: Configure distrobox dev container hosts: localhost connection: local vars: - configue: - - bash - - cli - - git - - ssh - - scripts - apps: - - cli - # tools: - # - cpp - # - javascript vars_prompt: - name: tools_in prompt: "Specify comma separated list of required tool packages (cpp, js, haskell, txt, lang)" - pre_tasks: - - ansible.builtin.set_fact: - tools: "{{ tools_in.split(',') }}" 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/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/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 (?) From 94111b0a4b52d80863875a43bb61f02483a9a69e Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Fri, 8 Aug 2025 22:27:09 +0300 Subject: [PATCH 5/5] init distro (host) setup playbook --- playbooks/distro.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 playbooks/distro.yml diff --git a/playbooks/distro.yml b/playbooks/distro.yml new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/playbooks/distro.yml @@ -0,0 +1 @@ +