diff --git a/defaults.yml b/defaults.yml index 835e3e2..184975d 100644 --- a/defaults.yml +++ b/defaults.yml @@ -3,6 +3,7 @@ container_names: - dev - txt - haskell + # containers tool groups container_tools: dev: diff --git a/playbooks/box.yml b/playbooks/box.yml index 5f5a3b2..da77359 100644 --- a/playbooks/box.yml +++ b/playbooks/box.yml @@ -2,25 +2,29 @@ hosts: localhost connection: local vars: - configue: - - bash - - cli - - git - - ssh - - scripts - apps: - - cli vars_prompt: - name: tools_in prompt: "Specify comma separated list of required tool packages (cpp, js, haskell, txt, lang)" - pre_tasks: - - name: Get tools list - 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 393dfaf..bc3599a 100644 --- a/playbooks/host.yml +++ b/playbooks/host.yml @@ -1,32 +1,38 @@ - name: Create distrobox containers on host hosts: localhost connection: local + vars: tasks: - name: Create containers - ansible.builtin.include_role: - name: container + include_role: + name: dev_host vars: container_name: '{{ item }}' loop: '{{ container_names }}' + - name: Setup containers hosts: containers - vars: - configue: - - bash - - cli - - git - - ssh - - scripts - apps: - - cli - pre_tasks: - - name: Get tools list - 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: "{{ container_tools['{{item}}'] }}" + + # TODO: repositories + diff --git a/roles/dev/tasks/build.yml b/roles/dev/tasks/build.yml index 7e16532..a9d2d19 100644 --- a/roles/dev/tasks/build.yml +++ b/roles/dev/tasks/build.yml @@ -6,3 +6,4 @@ - ninja-build - git state: latest + diff --git a/roles/dev/tasks/cpp.yml b/roles/dev/tasks/cpp.yml index f6f22b0..7be2dfe 100644 --- a/roles/dev/tasks/cpp.yml +++ b/roles/dev/tasks/cpp.yml @@ -1,6 +1,4 @@ -# is done at the main -# - name: Install build comon deps -# ansible.builtin.import_tasks: build.yml +- ansible.builtin.import_tasks: build.yml - name: Install tools for cpp dev ansible.builtin.dnf5: @@ -8,7 +6,7 @@ - make - cmake - xmake - + - clang - clang-tools - clang-tools-extra @@ -16,7 +14,7 @@ - clang-tools-devel - clang-tools-extra-devel - clang-libs - + - doxygen state: latest diff --git a/roles/dev/tasks/haskell.yml b/roles/dev/tasks/haskell.yml index 27b1fa6..3c0991d 100644 --- a/roles/dev/tasks/haskell.yml +++ b/roles/dev/tasks/haskell.yml @@ -1,25 +1,19 @@ - name: Download ghcup bootstrap script ansible.builtin.uri: - url: https://get-ghcup.haskell.org - return_content: true + url: + return_content: yes register: ghcup_bootstrap -- name: Check if .ghcup present - ansible.builtin.stat: - path: '{{ ansible_env.HOME }}/.ghcup' - register: ghcup_dir - -# TODO: detect fish install ?? - name: Install ghcup, stack, lsp server - ansible.builtin.shell: | - SHELL='/usr/bin/fish' - BOOTSTRAP_HASKELL_NONINTERACTIVE=1 - BOOTSTRAP_HASKELL_GHC_VERSION=latest - BOOTSTRAP_HASKELL_CABAL_VERSION=latest - BOOTSTRAP_HASKELL_INSTALL_STACK=1 - BOOTSTRAP_HASKELL_INSTALL_HLS=1 - BOOTSTRAP_HASKELL_ADJUST_BASHRC=P - {{ ghcup_bootstrap.content }} - args: - executable: /bin/sh - changed_when: not ghcup_dir.stat.exists + ansible.builtin.shell: + cmd: sh + stdin: {{ ghcup_bootstrap.content }} + environment: + SHELL: /usr/bin/fish # TODO: detect fish install ?? + BOOTSTRAP_HASKELL_NONINTERACTIVE: 1 + BOOTSTRAP_HASKELL_GHC_VERSION: latest + BOOTSTRAP_HASKELL_CABAL_VERSION: latest + BOOTSTRAP_HASKELL_INSTALL_STACK: 1 + BOOTSTRAP_HASKELL_INSTALL_HLS: 1 + BOOTSTRAP_HASKELL_ADJUST_BASHRC: P + diff --git a/roles/dev/tasks/js.yml b/roles/dev/tasks/js.yml index 145cfce..f889a37 100644 --- a/roles/dev/tasks/js.yml +++ b/roles/dev/tasks/js.yml @@ -11,18 +11,15 @@ - curl state: latest -# TODO: use curl script ?? - name: Install bun - ansible.builtin.command: - cmd: npm install -g bun - changed_when: true # change is checked inside npm + ansible.builtin.shell: + cmd: npm install -g bun - name: Get programs list to check fish presence ansible.builtin.package_facts: manager: auto -- name: Update fish path for bun - ansible.builtin.shell: fish_add_path {{ ansible_env.HOME }}/.bun/bin - args: - executable: /usr/bin/fish - changed_when: true # change is checked inside fish_add_path +- name: Update fish path + ansible.builtin.shell: + cmd: echo 'fish_add_path {{ ansible_env.HOME }}/.bun/bin' + when: "'fish' in ansible_facts.packages" diff --git a/roles/dev/tasks/main.yml b/roles/dev/tasks/main.yml index f0fed15..7014df5 100644 --- a/roles/dev/tasks/main.yml +++ b/roles/dev/tasks/main.yml @@ -1,24 +1,18 @@ -- name: Common build utils - ansible.builtin.import_tasks: build.yml +- ansible.builtin.import_tasks: build.yml -- name: C++ dev environment - ansible.builtin.import_tasks: cpp.yml +- ansible.builtin.import_tasks: cpp.yml when: "'cpp' in tools" -- name: JavaScript dev envronment - ansible.builtin.import_tasks: js.yml +- ansible.builtin.import_tasks: js.yml when: "'js' in tools" -- name: Haskell dev environment - ansible.builtin.import_tasks: haskell.yml +- ansible.builtin.import_tasks: haskell.yml when: "'haskell' in tools" -- name: Text writing (typst) environment - ansible.builtin.import_tasks: txt.yml +- ansible.builtin.import_tasks: txt.yml when: "'txt' in tools" -- name: Language development environment - ansible.builtin.import_tasks: lang.yml +- ansible.builtin.import_tasks: lang.yml when: "'lang' in tools" -# TODO: ocaml, truffle, coq ... +# TODO: ocaml, truffle, ... diff --git a/roles/dev/tasks/txt.yml b/roles/dev/tasks/txt.yml index e225b44..cbcdde5 100644 --- a/roles/dev/tasks/txt.yml +++ b/roles/dev/tasks/txt.yml @@ -3,16 +3,16 @@ user: typst repo: typst action: latest_release - register: typst_version + register: typst_version - name: "Installing typst {{ typst_version.tag }}" become: true ansible.builtin.unarchive: - remote_src: true + remote_src: yes # TODO: insert v before version ?? src: "https://github.com/typst/typst/releases/download/{{ typst_version.tag }}/typst-x86_64-unknown-linux-musl.tar.xz" dest: "/usr/bin/" - keep_newer: true + keep_newer: yes mode: a+x extra_opts: - --strip=1 @@ -24,17 +24,17 @@ user: Myriad-Dreamin repo: tinymist action: latest_release - register: tinymist_version + register: tinymist_version - name: "Installing tinymist (typst lsp) {{ tinymist_version.tag }}" become: true ansible.builtin.unarchive: - remote_src: true + remote_src: yes # TODO: insert v before version ??, rc ?? src: "https://github.com/Myriad-Dreamin/tinymist/releases/download/{{ tinymist_version.tag }}/tinymist-x86_64-unknown-linux-gnu.tar.gz" dest: "/usr/bin/" mode: a+x - keep_newer: true + keep_newer: yes extra_opts: - --strip=1 - --no-anchored @@ -45,17 +45,17 @@ user: blopker repo: codebook action: latest_release - register: codebook_version + register: codebook_version - name: "Installing codebook (spellcheck lsp) {{ codebook_version.tag }}" become: true ansible.builtin.unarchive: - remote_src: true + remote_src: yes # TODO: insert v before version ?? src: "https://github.com/blopker/codebook/releases/download/{{ codebook_version.tag }}/codebook-lsp-x86_64-unknown-linux-musl.tar.gz" dest: "/usr/bin/" mode: a+x - keep_newer: true + keep_newer: yes extra_opts: - --strip=1 - --no-anchored diff --git a/roles/container/defaults/main.yml b/roles/dev_host/defaults/main.yml similarity index 100% rename from roles/container/defaults/main.yml rename to roles/dev_host/defaults/main.yml diff --git a/roles/container/tasks/main.yml b/roles/dev_host/tasks/main.yml similarity index 93% rename from roles/container/tasks/main.yml rename to roles/dev_host/tasks/main.yml index d08e094..382884e 100644 --- a/roles/container/tasks/main.yml +++ b/roles/dev_host/tasks/main.yml @@ -3,7 +3,7 @@ - name: Check if container already exists containers.podman.podman_container_info: name: '{{ container_name }}' - register: container_info + register: container_info - name: Create container using distrobox ansible.builtin.command: @@ -23,9 +23,9 @@ 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)) - changed_when: true # ?? - name: Add container to host + changed_when: no ansible.builtin.add_host: name: '{{ container_name }}' # ?? groups: containers @@ -33,4 +33,5 @@ ansible_host: '{{ container_name }}' ansible_user: '{{ ansible_user_id }}' fedora_version: '{{ container_image_tag }}' # ?? - changed_when: false # ?? + +# container setup is done outside (?) diff --git a/roles/dotfiles/tasks/cli.yml b/roles/dotfiles/tasks/cli.yml index bcb571c..8cd4f79 100644 --- a/roles/dotfiles/tasks/cli.yml +++ b/roles/dotfiles/tasks/cli.yml @@ -1,6 +1,6 @@ + # shell -- name: Import bash config - ansible.builtin.import_tasks: bash.yml +- ansible.builtin.import_tasks: bash.yml # copy to modify during install ?? - name: Link fish configuration directory @@ -39,7 +39,6 @@ manager: auto - name: Update fish path to include scripts folder - ansible.builtin.shell: fish_add_path {{ ansible_env.HOME }}/.bin - args: - executable: /usr/bin/fish - changed_when: true # change is checked inside fish_add_path + ansible.builtin.shell: + cmd: echo 'fish_add_path {{ ansible_env.HOME }}/.bin' + when: "'fish' in ansible_facts.packages" diff --git a/roles/dotfiles/tasks/gui.yml b/roles/dotfiles/tasks/gui.yml index 6f7f6cc..7720b05 100644 --- a/roles/dotfiles/tasks/gui.yml +++ b/roles/dotfiles/tasks/gui.yml @@ -11,7 +11,7 @@ dest: '{{ ansible_env.HOME }}/.alacritty.toml' state: link force: true - + - name: Link alacritty configuration directory ansible.builtin.file: src: '{{ role_path }}/files/.config/alacritty' diff --git a/roles/dotfiles/tasks/main.yml b/roles/dotfiles/tasks/main.yml index 8f91929..1ea6cdd 100644 --- a/roles/dotfiles/tasks/main.yml +++ b/roles/dotfiles/tasks/main.yml @@ -1,27 +1,21 @@ -- name: Bash config - ansible.builtin.import_tasks: bash.yml +- ansible.builtin.import_tasks: bash.yml when: "'bash' in configure" -- name: Common cli tools config - ansible.builtin.import_tasks: cli.yml +- ansible.builtin.import_tasks: cli.yml when: "'cli' in configure" -- name: Git config - ansible.builtin.import_tasks: git.yml +- ansible.builtin.import_tasks: git.yml when: "'git' in configure" -- name: Ssh config - ansible.builtin.import_tasks: ssh.yml +- ansible.builtin.import_tasks: ssh.yml when: "'ssh' in configure" -- name: GUI programs config - ansible.builtin.import_tasks: gui.yml +- ansible.builtin.import_tasks: gui.yml when: "'gui' in configure" -- name: Script dirs config - ansible.builtin.import_tasks: scripts.yml +- ansible.builtin.import_tasks: scripts.yml when: "'scripts' in configure" -- name: Desctop envionment config - ansible.builtin.import_tasks: de.yml +- ansible.builtin.import_tasks: de.yml when: "'de' in configure" + diff --git a/roles/installs/tasks/cli.yml b/roles/installs/tasks/cli.yml index a3b10bd..0284113 100644 --- a/roles/installs/tasks/cli.yml +++ b/roles/installs/tasks/cli.yml @@ -26,12 +26,10 @@ # other - ansible - - ansible-lint state: latest - name: Clear trash automatically every 30 days - ansible.builtin.cron: - name: "empty trash" - special_time: "daily" - job: "$(which trash-empty) 30" + ansible.builtin.shell: + cmd: sh + stdin: '(crontab -l ; echo "@daily $(which trash-empty) 30")' diff --git a/roles/installs/tasks/gui.yml b/roles/installs/tasks/gui.yml index 13acd1e..a82bd51 100644 --- a/roles/installs/tasks/gui.yml +++ b/roles/installs/tasks/gui.yml @@ -6,7 +6,7 @@ - kitty - kitty-fish-integration - alacritty - + - kate - okular - gwenview @@ -15,3 +15,4 @@ - qt5-qtvirtualkeyboard - hunspell-ru state: latest + diff --git a/roles/installs/tasks/host.yml b/roles/installs/tasks/host.yml index 61f35ad..81916b3 100644 --- a/roles/installs/tasks/host.yml +++ b/roles/installs/tasks/host.yml @@ -7,3 +7,4 @@ - powertop - ansible state: latest + diff --git a/roles/dev/tasks/lang.yml b/roles/installs/tasks/lang.yml similarity index 69% rename from roles/dev/tasks/lang.yml rename to roles/installs/tasks/lang.yml index 388f1fa..2aee739 100644 --- a/roles/dev/tasks/lang.yml +++ b/roles/installs/tasks/lang.yml @@ -1,5 +1,4 @@ -- name: Install c++ build tools - ansible.builtin.import_tasks: cpp.yml +- ansible.builtin.import_tasks: cpp.yml - name: Install tools for lang dev ansible.builtin.dnf5: diff --git a/roles/installs/tasks/main.yml b/roles/installs/tasks/main.yml index 9a1645c..9526228 100644 --- a/roles/installs/tasks/main.yml +++ b/roles/installs/tasks/main.yml @@ -1,15 +1,11 @@ -- name: Install common cli apps - ansible.builtin.import_tasks: cli.yml +- ansible.builtin.import_tasks: cli.yml when: "'cli' in apps" -- name: Install common gui apps - ansible.builtin.import_tasks: gui.yml +- ansible.builtin.import_tasks: gui.yml when: "'gui' in apps" -- name: Install pps for host - ansible.builtin.import_tasks: host.yml +- ansible.builtin.import_tasks: host.yml when: "'host' in apps" -- name: Install proxies - ansible.builtin.import_tasks: proxy.yml +- ansible.builtin.import_tasks: proxy.yml when: "'proxy' in apps" diff --git a/roles/installs/tasks/proxy.yml b/roles/installs/tasks/proxy.yml index d5d2e76..738527d 100644 --- a/roles/installs/tasks/proxy.yml +++ b/roles/installs/tasks/proxy.yml @@ -3,11 +3,12 @@ user: Snawoot repo: hola-proxy action: latest_release - register: hola_version + register: hola_version - name: "Installing hola-proxy {{ hola_version.tag }}" become: true ansible.builtin.get_url: + remote_src: yes # TODO: insert v before version ?? url: "https://github.com/Snawoot/hola-proxy/releases/download/{{ hola_version.tag }}/hola-proxy.linux-amd64" dest: "/usr/bin/hola-proxy" @@ -19,11 +20,12 @@ user: Snawoot repo: opera-proxy action: latest_release - register: opera_version + register: opera_version - name: "Installing opera-proxy {{ opera_version.tag }}" become: true ansible.builtin.get_url: + remote_src: yes # TODO: insert v before version ?? url: "https://github.com/Snawoot/opera-proxy/releases/download/{{ opera_version.tag }}/hola-proxy.linux-amd64" dest: "/usr/bin/hola-proxy"