diff --git a/tasks/archive/nerdfonts.yml b/tasks/archive/nerdfonts.yml new file mode 100644 index 0000000..3607dc1 --- /dev/null +++ b/tasks/archive/nerdfonts.yml @@ -0,0 +1,29 @@ +# vim: set filetype=yaml.ansible : +--- +- name: Linux installation + when: ansible_system == 'Linux' + block: + - name: Create nerdfonts directories + become: "{{ ext_become }}" + loop: "{{ nerdfonts.fonts }}" + loop_control: + loop_var: font + register: nerdfont_result + ansible.builtin.file: + path: "{{ nerdfonts.install_path }}/{{ font }}" + state: directory + mode: '0755' + + - name: Download and extract nerdfonts + when: + - nerdfont_result is changed or + nerdfonts.force_install + become: "{{ ext_become }}" + loop: "{{ nerdfonts.fonts }}" + loop_control: + loop_var: font + ansible.builtin.unarchive: + creates: "{{ nerdfonts.install_path }}/{{ font }}/README.md" + src: "{{ nerdfonts.base_url }}/{{ font }}.tar.xz" + dest: "{{ nerdfonts.install_path }}/{{ font }}" + remote_src: true diff --git a/tasks/config/bitwarden.yml b/tasks/config/bitwarden.yml index fc69046..1dbfbf7 100644 --- a/tasks/config/bitwarden.yml +++ b/tasks/config/bitwarden.yml @@ -1,7 +1,12 @@ # vim: set filetype=yaml.ansible : --- -install_prefix: "{{ default_install_prefix }}" -install_method: flatpak -dobecome: true -owner: root -group: root +- name: Set bitwarden install method + ansible.builtin.set_fact: + bw: + method: "{{ pkgconfig.bitwarden.method[ansible_distribution] | default('appimage') }}" + +- name: Set bitwarden config + ansible.builtin.set_fact: + bw: + pkg: "{{ pkgconfig.bitwarden[bw.method] }}" + method: "{{ bw.method }}" diff --git a/tasks/config/nerdfonts.yml b/tasks/config/nerdfonts.yml index 44c44fe..d7155f0 100644 --- a/tasks/config/nerdfonts.yml +++ b/tasks/config/nerdfonts.yml @@ -1,10 +1,15 @@ # vim: set filetype=yaml.ansible : --- -install: - - CascadiaCode - - FiraCode - - Hasklig - - Lilex - - Monoid - - NerdFontsSymbolsOnly -system_install: false +- name: Set facts for nerdfonts + ansible.builtin.set_fact: + nerdfonts: + fonts: + - CascadiaCode + - FiraCode + - Hasklig + - Lilex + - Monoid + - NerdFontsSymbolsOnly + install_path: "{{ path_prefix }}/{{ pkgconfig.nerdfonts.path }}" + base_url: "{{ pkgconfig.nerdfonts.base_url }}" + force_install: "{{ pkgconfig.force_install_nerdfonts | default(false) }}" diff --git a/tasks/config/zfs.yml b/tasks/config/zfs.yml new file mode 100644 index 0000000..8fab6e4 --- /dev/null +++ b/tasks/config/zfs.yml @@ -0,0 +1,24 @@ +--- +- name: Set zfs facts for RedHat based distros + when: + - ansible_os_family == 'RedHat' + block: + - name: Set distro name + ansible.builtin.set_fact: + rhname: "{%if ansible_distribution == 'Fedora' %}fedora{% else %}epel{% endif %}" + + - name: Get rpm_dist for RedHat + changed_when: false + register: rpm_dist + ansible.builtin.command: # is there a better way to get this? + cmd: rpm --eval "%{dist}" + +- name: Set ZFS config + ansible.builtin.set_fact: + zfs: + repo_pkg: "{{ pkgconfig.zfs.repo_base }}/{{ rhname }}/zfs-release-{{ pkgconfig.zfs[rhname].release }}{{ rpm_dist.stdout }}.noarch.rpm" + deps: "{{ pkgconfig.zfs.build_deps[ansible_os_family] }}" + pkgs: "{{ pkgconfig.zfs.pkgs[ansible_os_family] }}" + release: "{{ ansible_distribution_release }}" + gpg_key: "{{ pkgconfig.zfs.gpg_key }}" + gpg_fp: "{{ pkgconfig.zfs.gpg_key_fingerprint }}" diff --git a/tasks/facts.yml b/tasks/facts.yml index b748b90..ea9f02b 100644 --- a/tasks/facts.yml +++ b/tasks/facts.yml @@ -2,31 +2,31 @@ --- - name: Set facts for installation ansible.builtin.set_fact: - ext_become: "{{ not use_local }}" # if use_local is true, don't use sudo for external packages - path_prefix: "{% if use_local %}{{ lookup(ansible.builtin.env, 'HOME') }}{% else %}{{ defaults.path.prefix }}{% endif %}" + ext_become: "{{ not use_local }}" + path_prefix: "{% if use_local %}{{ lookup('ansible.builtin.env', 'HOME') }}/.local{% else %}{{ defaults.path.prefix }}{% endif %}" - name: Set Linux specific facts when: - ansible_system == 'Linux' ansible.builtin.set_fact: - app_images: [] # app_images to install - flatpak_method: "{% if use_local %}user{% else %}system{% endif %}" - flatpak_remotes: # flatpak remotes, includes flathub by default + flatpak_remote: # flatpak remotes, includes flathub by default - name: flathub url: https://dl.flathub.org/repo/flathub.flatpakrepo - flatpaks: [] # flatpak packages to install - snap_pkgs: [] # snpacraft.io packages + flatpak_method: "{% if use_local %}user{% else %}system{% endif %}" + pkg_appimage: [] # app_images to install + pkg_flatpak: [] # flatpak packages to install + pkg_snap: [] # snpacraft.io packages sys_pkg_become: true # Linux package managers require sudo access - name: Set macOS specific facts when: - ansible_distribution == 'MacOSX' ansible.builtin.set_fact: - brew_taps: [] # homebrew taps to add - cask_pkgs: [] # homebrew casks + brewtap: [] # homebrew taps to add pipx_exec: "/opt/homebrew/bin/pipx" + pkg_cask: [] # homebrew casks + pkg_tap: [] # homebrew tap packages sys_pkg_become: false # homebrew doesn't require sudo access - tap_pkgs: [] # homebrew tap packages - name: Set paths ansible.builtin.set_fact: @@ -40,10 +40,10 @@ - name: Set OS independant facts ansible.builtin.set_fact: - archive_pkgs: [] # packages installed via prebuilt archive - cargo_pkgs: [] # rust packages from cargo - go_pkgs: [] # go applications - npm_pkgs: [] # npm commands - pipx_pkgs: [] # pipx packages - src_pkgs: [] # packages built from source - sys_pkgs: [] # system package manager packages, homebrew on macOS, dnf for RedHat based, apt for Debian Based + pkg_archive: [] # packages installed via prebuilt archive + pkg_cargo: [] # rust packages from cargo + pkg_go: [] # go applications + pkg_npm: [] # npm commands + pkg_pipx: [] # pipx packages + pkg_src: [] # packages built from source + pkg_sys: [] # system package manager packages, homebrew on macOS, dnf for RedHat based, apt for Debian Based diff --git a/tasks/macos.yml b/tasks/macos.yml index adc94d2..c5836ab 100644 --- a/tasks/macos.yml +++ b/tasks/macos.yml @@ -16,3 +16,4 @@ - name: Workaround to install homebrew taps ansible.builtin.command: cmd: "brew install {{ (tap_pkgs | unique) | join(' ') }}" + changed_when: true diff --git a/tasks/main.yml b/tasks/main.yml index 95cb8d1..a9d097f 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -83,11 +83,6 @@ file: go.yml - name: Install local npm packages - become: "{% if ansible_system == 'Linux' %}true{% else %}false{% endif %}" - community.general.npm: - global: true - name: "{{ npmpkg }}" - state: latest loop: "{{ npmpkgs | unique }}" loop_control: loop_var: pkg diff --git a/tasks/pkgs/bitwarden.yml b/tasks/pkgs/bitwarden.yml index ee91dd8..8bd22b7 100644 --- a/tasks/pkgs/bitwarden.yml +++ b/tasks/pkgs/bitwarden.yml @@ -1,48 +1,19 @@ # vim: set filetype=yaml.ansible : --- -- name: Read bitwarden configuration - ansible.builtin.include_vars: - file: bitwarden.yml - name: _bitwarden - -- name: Set bitwarden configuration - ansible.builtin.set_fact: - pkgconfig_bitwarden: "{{ _bitwarden | ansible.builtin.combine(pkgconfig.bitwarden) }}" - -- name: Set bitwarden facts - ansible.builtin.set_fact: - bw: - appimg: "{{ pkgconfig_bitwarden.appimage }}" - become: "{{ pkgconfig_bitwarden.dobecome }}" - flatpak: "{{ pkgconfig_bitwarden.flatpak }}" - group: "{{ pkgconfig_bitwarden.group }}" - instdir: "{{ pkgconfig_bitwarden.install_dir }}" - instmtd: "{{ pkgconfig_bitwarden.install_method }}" - bindir: "{{ pkgconfig_bitwarden.install_prefix }}/bin" - owner: "{{ pkgconfig_bitwarden.owner }}" - - name: Append to flatpkgs when: - - ansible_os_family != 'Darwin' - - bw.instmtd == 'flatpak' - block: - - name: Ensure flatpak runtime activated - ansible.builtin.include_tasks: - file: pkgs/flatpak.yml - when: flatpak is undefined - - - name: Append to flatpkgs - ansible.builtin.set_fact: - flatpkgs: "{{ flatpkgs + [bw.flatpak] }}" + - bw.method == 'flatpak' + ansible.builtin.set_fact: + pkg_flatpak: "{{ pkg_flatpak + [bw.pkg] }}" - name: Append to srcpkgs when: - - ansible_os_family != 'Darwin' - - bw.instmtd == 'appimage' + - bw.method == 'appimage' ansible.builtin.set_fact: - syspkgs: "{{ appimages + ['bitwarden'] }}" + pkg_appimage: "{{ pkg_appimage + [bw.pkg] }}" - name: Append to caskpkgs - when: ansible_os_family == 'Darwin' + when: + - bw.method == 'brew' ansible.builtin.set_fact: - caskpkgs: "{{ caskpkgs + ['bitwarden'] }}" + pkg_cask: "{{ pkg_cask + [bw.pkg.name] }}" diff --git a/tasks/pkgs/fd.yml b/tasks/pkgs/fd.yml index 799f842..bc0e22b 100644 --- a/tasks/pkgs/fd.yml +++ b/tasks/pkgs/fd.yml @@ -1,5 +1,5 @@ # vim: set filetype=yaml.ansible : --- -- name: append to syspkgs +- name: Append to pkg_sys ansible.builtin.set_fact: - syspkgs: "{{ syspkgs + pkgconfig.fd.pkg[ansible_os_family] }}" + pkg_sys: "{{ pkg_sys + pkgconfig.fd.pkg[ansible_os_family] }}" diff --git a/tasks/pkgs/hyperfine.yml b/tasks/pkgs/hyperfine.yml index 640aba3..1a393d5 100644 --- a/tasks/pkgs/hyperfine.yml +++ b/tasks/pkgs/hyperfine.yml @@ -1,5 +1,5 @@ # vim: set filetype=yaml.ansible : --- -- name: append to syspkgs +- name: Append to pkg_sys ansible.builtin.set_fact: - syspkgs: "{{ syspkgs + [ 'hyperfine' ] }}" + pkg_sys: "{{ pkg_sys + ['hyperfine'] }}" diff --git a/tasks/pkgs/nerdfonts.yml b/tasks/pkgs/nerdfonts.yml index 287fe39..cfc9d2e 100644 --- a/tasks/pkgs/nerdfonts.yml +++ b/tasks/pkgs/nerdfonts.yml @@ -1,20 +1,14 @@ # vim: set filetype=yaml.ansible : --- -- ansible.builtin.include_vars: - file: nerdfonts.yml - name: _nerdfonts -- ansible.builtin.set_fact: - pkgconfig_nerdfonts: "{{ _nerdfonts | ansible.builtin.combine(pkgconfig.nerdfonts) }}" - -- name: append to srcpkgs +- name: Append to srcpkgs ansible.builtin.set_fact: - srcpkgs: "{{ srcpkgs + [ 'nerdfonts' ] }}" + pkg_archive: "{{ pkg_archive + ['nerdfonts'] }}" when: ansible_system == 'Linux' -- name: append to caskpkgs +- name: Append to caskpkgs ansible.builtin.set_fact: - caskpkgs: "{{ caskpkgs + [ pkgconfig_nerdfonts.fonts[font].brew ] }}" - loop: "{{ pkgconfig_nerdfonts.install }}" + pkg_cask: "{{ pkg_cask + [nerdfonts.fonts[font].brew] }}" + loop: "{{ nerdfonts.fonts }}" loop_control: loop_var: font when: ansible_system == 'Darwin' diff --git a/tasks/pkgs/stow.yml b/tasks/pkgs/stow.yml index 556cbe6..7792eca 100644 --- a/tasks/pkgs/stow.yml +++ b/tasks/pkgs/stow.yml @@ -1,5 +1,5 @@ # vim: set filetype=yaml.ansible : --- -- name: append to pkgs +- name: Append to pkgs ansible.builtin.set_fact: - syspkgs: "{{ syspkgs + [ 'stow' ] }}" + pkg_sys: "{{ pkg_sys + [ 'stow' ] }}" diff --git a/tasks/pkgs/zfs.yml b/tasks/pkgs/zfs.yml index 83cd170..cae72cd 100644 --- a/tasks/pkgs/zfs.yml +++ b/tasks/pkgs/zfs.yml @@ -1,68 +1,55 @@ # vim: set filetype=yaml.ansible : --- - name: Linux based installation + when: + - ansible_os_family != 'Darwin' block: - name: RedHat based configuration + when: + - ansible_os_family == 'RedHat' block: - - ansible.builtin.set_fact: - rhname: "{%if ansible_distribution == 'Fedora' %}fedora{% else %}epel{% endif %}" - - ansible.builtin.command: - cmd: rpm --eval "%{dist}" - register: rpm_dist - - - name: add openzfs gpg_key + - name: Add openzfs gpg_key + become: "{{ sys_pkg_become }}" ansible.builtin.rpm_key: - key: "{{ pkgconfig.zfs.gpg_key }}" - fingerprint: "{{ pkgconfig.zfs.gpg_key_fingerprint }}" + key: "{{ zfs.gpg_key }}" + fingerprint: "{{ zfs.gpg_fp }}" state: present - become: true - - name: enable openzfs repository + - name: Enable openzfs repository + become: "{{ sys_pkg_become }}" ansible.builtin.dnf: - name: "{{ pkgconfig.zfs.repo_base }}{{ rhname }}/zfs-release-{{ pkgconfig.zfs[rhname].release }}{{ rpm_dist.stdout }}.noarch.rpm" - state: "{{ install_state }}" - become: true - - - name: install zfs deps - ansible.builtin.set_fact: - syspkgs: "{{ pkgconfig.zfs.deps[ansible_os_family] }}" - when: ansible_os_family == 'RedHat' + name: "{{ zfs.repo_pkg }}" + state: present - name: Debian configuration when: ansible_os_family == 'Debian' block: - - name: enable openzfs repository + - name: Enable openzfs repository + become: "{{ sys_pkg_become }}" ansible.builtin.apt_repository: repo: | - deb http://deb.debian.org/debian {{ ansible_distribution_release }}-backports main contrib - deb-src http://deb.debian.org/debian {{ ansible_distribution_release }}-backports main contrib - filename: "{{ ansible_distribution_release }}-backports" + deb http://deb.debian.org/debian {{ zfs.release }}-backports main contrib + deb-src http://deb.debian.org/debian {{ zfs.release }}-backports main contrib + filename: "{{ zfs.release }}-backports" state: present update_cache: false - become: true - - name: pin zfs package to backports + - name: Pin zfs package to backports + become: "{{ sys_pkg_become }}" ansible.builtin.file: content: | Package: src:zfs-linux - Pin: release n={{ ansible_distribution_release }}-backports + Pin: release n={{ zfs.release }}-backports Pin-Priority: 990 dest: /etc/apt/preferences.d/90_zfs state: present - become: true + mode: '0644' - - name: install zfs deps - ansible.builtin.set_fact: - syspkgs: "{{ pkgconfig.zfs.deps[ansible_os_family] }}" - become: true - - - name: append to pkgs + - name: Append to pkgs ansible.builtin.set_fact: - syspkgs: "{{ syspkgs + pkgconfig.zfs.pkgs[ansible_os_family] }}" - become: true - when: ansible_os_family != 'Darwin' + pkg_sys: "{{ pkg_sys + zfs.deps + zfs.pkgs }}" -- name: append to caskpkgs - ansible.builtin.set_fact: - caskpkgs: "{{ caskpkgs + [ 'openzfs' ] }}" +- name: Append to caskpkgs when: ansible_os_family == 'Darwin' + ansible.builtin.set_fact: + pkg_cask: "{{ pkg_cask + ['openzfs'] }}" diff --git a/tasks/pkgs/zsh.yml b/tasks/pkgs/zsh.yml index 7e9ff21..ca93dcd 100644 --- a/tasks/pkgs/zsh.yml +++ b/tasks/pkgs/zsh.yml @@ -1,10 +1,5 @@ # vim: set filetype=yaml.ansible : --- -- name: append to pkgs +- name: Append to pkgs ansible.builtin.set_fact: - syspkgs: "{{ syspkgs + [ 'zsh' ] }}" - when: ansible_os_family != 'Darwin' - -- debug: - msg: "macOS already has zsh, skipping" - when: ansible_os_family == 'Darwin' + pkg_sys: "{{ pkg_sys + ['zsh'] }}" diff --git a/tasks/src/nerdfonts.yml b/tasks/src/nerdfonts.yml deleted file mode 100644 index 546c88d..0000000 --- a/tasks/src/nerdfonts.yml +++ /dev/null @@ -1,37 +0,0 @@ -# vim: set filetype=yaml.ansible : -# Install nerdfonts for each platform ---- -- name: linux installation - when: ansible_system == 'Linux' - block: - - name: set install path for non-system installs - ansible.builtin.set_fact: - nerdfonts_install_path: "{{ lookup('ansible.builtin.env', 'HOME') }}/.local/share/fonts" - when: not pkgconfig_nerdfonts.system_install - - - name: set install path for system wide installs - ansible.builtin.set_fact: - nerdfonts_install_path: "/usr/local/share/fonts" - when: pkgconfig_nerdfonts.system_install - - - name: create nerdfonts directories - ansible.builtin.file: - path: "{{ nerdfonts_install_path }}/{{ font }}" - state: directory - become: "{{ pkgconfig_nerdfonts.system_install }}" - loop: "{{ pkgconfig_nerdfonts.install }}" - loop_control: - loop_var: font - register: nerdfont_result - - - name: Download and extract nerdfonts - ansible.builtin.unarchive: - creates: "{{ nerdfonts_install_path }}/{{ font }}/README.md" - src: "{{ pkgconfig_nerdfonts.base_url }}/{{ font }}.tar.xz" - dest: "{{ nerdfonts_install_path }}/{{ font }}" - remote_src: true - when: nerdfont_result is changed - become: "{{ pkgconfig_nerdfonts.system_install }}" - loop: "{{ pkgconfig_nerdfonts.install }}" - loop_control: - loop_var: font diff --git a/vars/pkgs/bitwarden.yml b/vars/pkgs/bitwarden.yml index 7c2f823..d846a47 100644 --- a/vars/pkgs/bitwarden.yml +++ b/vars/pkgs/bitwarden.yml @@ -5,3 +5,13 @@ bitwarden: appimage: name: bitwarden.appimage url: https://vault.bitwarden.com/download/?app=desktop&platform=linux&variant=appimage + snap: + name: bitwarden + brew: + name: bitwarden + method: + RedHat: appimage + Debian: appimage + Fedora: flatpak + Ubuntu: snap + MacOSX: brew diff --git a/vars/pkgs/nerdfonts.yml b/vars/pkgs/nerdfonts.yml index 6b658ac..abcb1a1 100644 --- a/vars/pkgs/nerdfonts.yml +++ b/vars/pkgs/nerdfonts.yml @@ -137,3 +137,4 @@ nerdfonts: ZedMono: brew: font-zed-mono-nerd-font base_url: https://github.com/ryanoasis/nerd-fonts/releases/latest/download + path: share/fonts