diff --git a/Dockerfile b/Dockerfile index 128c426..a1c1ec1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,9 @@ FROM fedora RUN dnf update -y && dnf install -y \ ansible +WORKDIR /opt/setuo +COPY ./requirements.yml /opt/setup +RUN ansible-galaxy collection install -r requirements.yml. COPY . /opt/setup RUN ansible-playbook /opt/setup/playbooks/image.yml RUN mkdir /workspace && chown alice:alice /workspace diff --git a/Vagrantfile b/Vagrantfile index 1903660..f492ee9 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -1,9 +1,20 @@ # -*- mode: ruby -*- # vi: set ft=ruby : + +$script = <<-SCRIPT +pacman -Syu --noconfirm python +SCRIPT + + Vagrant.configure("2") do |config| - config.vm.provider "virtualbox" - config.vm.box = "generic/fedora39" + config.vm.provider :libvirt do |libvirt| + libvirt.cpus = 2 + libvirt.memory = 2048 + end + config.vm.box = "archlinux/archlinux" + config.vm.synced_folder "./", "/vagrant", type: "rsync" + config.vm.provision "shell", inline: $script config.vm.provision "ansible" do |ansible| - ansible.playbook = "playbooks/setup.yml" + ansible.playbook = "playbooks/desktop.yml" end end diff --git a/playbooks/desktop.yml b/playbooks/desktop.yml new file mode 100644 index 0000000..87850a8 --- /dev/null +++ b/playbooks/desktop.yml @@ -0,0 +1,8 @@ +--- +- name: Setup host + hosts: all + tasks: + roles: + - env_terminal + - env_develop + - desktop_hyprland diff --git a/playbooks/library/yay/README.md b/playbooks/library/yay/README.md new file mode 100644 index 0000000..0ff881f --- /dev/null +++ b/playbooks/library/yay/README.md @@ -0,0 +1,56 @@ +# ansible-yay + +An Ansible module for installing [AUR](https://aur.archlinux.org/) packages via +the [yay][yay] AUR helper. + +This assumes your target node already has yay and its dependecies installed. + +## Dependencies (Managed Node) + +- [Arch Linux](https://www.archlinux.org/) (Obviously) +- [yay][yay] + +## Installation + +1. Clone this repo +2. Copy or link the `yay` file into your global Ansible library (usually + `/usr/share/ansible`) or into the `./library` folder alongside your + top-level playbook + +## Usage + +Pretty much identical to the [pacman module][pacman-mod]. Note that package +status, removal, the corresponding `pacman` commands are used (`-Q`, `-R`, +respectively). + +### Options + +| parameter | required | default | choices | description | +| ------------ | -------- | ------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| name | no | | | Name of the AUR package to install. | +| recurse | no | no | yes/no | Whether to recursively remove packages. See [pacman module docs][pacman-mod]. | +| state | no | no | absent/present/latest | Whether the package needs to be installed or updated. | +| update_cache | no | no | yes/no | Whether or not to refresh the master package lists. This can be run as part of a package installation or as a separate step. | +| upgrade | no | no | yes/no | Whether or not to upgrade the whole systemd. | + +### Examples + +```yaml +# Install package foo +- yay: name=foo state=present + +# Ensure package fuzz is installed and up-to-date +- yay: name=fuzz state=latest + +# Remove packages foo and bar +- yay: name=foo,bar state=absent + +# Recursively remove package baz +- yay: name=baz state=absent recurse=yes + +# Effectively run yay -Syu +- yay: update_cache=yes upgrade=yes +``` + +[yay]: https://github.com/Jguer/yay +[pacman-mod]: http://docs.ansible.com/pacman_module.html diff --git a/playbooks/library/yay/yay b/playbooks/library/yay/yay new file mode 100644 index 0000000..397903f --- /dev/null +++ b/playbooks/library/yay/yay @@ -0,0 +1,272 @@ +#!/usr/local/bin/python + +# The MIT License (MIT) +# +# Copyright (c) 2014 Austin Hyde +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +def yay_in_path(module): + rc, _, _ = module.run_command('which yay', check_rc=False) + return rc == 0 + + +def pacman_in_path(module): + rc, _, _ = module.run_command('which pacman', check_rc=False) + return rc == 0 + +def get_version(yay_output): + '''Take yay -Qi or yay -Si output and get the Version''' + lines = yay_output.split('\n') + for line in lines: + if 'Version' in line: + return line.split(':')[1].strip() + return None + +def query_package(module, pkg, state): + ''' + Query the package status in both the local system and the repository. + Returns three booleans to indicate: + * If the package is installed + * If the package is up-to-date + * Whether online information was available + ''' + local_check_cmd = 'yay -Qi %s' % pkg + local_check_rc, local_check_stdout, _ = module.run_command(local_check_cmd, check_rc=False) + if local_check_rc != 0: + return False, False, False + + # No need to check for the repo version in some situations + # Indicate the package is out-of-date, because we chose not to check + if state == 'present' or state == 'absent': + return True, False, False + + local_version = get_version(local_check_stdout) + + repo_check_cmd = 'yay -Si %s' % pkg + repo_check_rc, repo_check_stdout, repo_check_stderr = module.run_command(repo_check_cmd, check_rc=False) + repo_version = get_version(repo_check_stdout) + + if repo_check_rc == 0 and repo_check_stderr == '': + return True, (local_version == repo_version), False + else: + # Indicate package is up-to-date, but just because we hit an error contacting the repo + return True, True, True + +def update_package_db(module): + rc, _, stderr = module.run_command('yay -Sy', check_rc=False) + + if rc == 0 and stderr == '': + return False, 'Package DB up-to-date' + elif rc == 1 and stderr == '': + return True, 'Updated the package DB' + else: + module.fail_json(msg='could not update package db: %s' % stderr) + +def upgrade(module): + check_rc, check_stdout, check_stderr = module.run_command('yay -Qqu', check_rc=False) + + if check_rc == 0 and check_stderr == '' and module.check_mode: + return True, '%s package(s) would be upgraded' % (len(check_stdout.split('\n')) - 1) + elif check_rc == 0 and check_stderr == '' and not module.check_mode: + upgrade_rc, _, upgrade_stderr = module.run_command( + 'yay -Su --noconfirm', + check_rc=False, + ) + + if upgrade_rc == 0: + return True, 'System upgraded' + else: + module.fail_json(msg='unable to upgrade: %s' % upgrade_stderr) + elif check_rc == 1 and check_stderr == '': + return False, 'Nothing to upgrade' + else: + module.fail_json(msg='unable to check for upgrade: %s' % check_stderr) + +def get_sudo_user(module): + # ansible sets the SUDO_USER environment variable. Default to using this, + # checking USER and then `logname` as backups. + user = os.environ.get('SUDO_USER') + + # If ansible is run as root with become_user set, use the specified user + # instead of root. + if not user or user == 'root': + user = os.environ.get('USER') + + if not user: + rc, stdout, _ = module.run_command('logname', check_rc=True) + user = stdout + + return user + +def check_packages(module, pkgs, state): + would_be_changed = [] + + for pkg in pkgs: + installed, updated, _ = query_package(module, pkg, state) + if ((state in ['present', 'latest'] and not installed) or + (state == 'latest' and not updated) or + (state == 'absent' and installed)): + would_be_changed.append(pkg) + + word = 'installed' + if state == 'absent': + word = 'removed' + + if would_be_changed: + return True, '%s package(s) would be %s' % (len(would_be_changed), word) + else: + return False, 'All packages are already %s' % word + +def install_packages(module, pkgs, state): + num_installed = 0 + package_err = [] + message = '' + + sudo_user = get_sudo_user(module) + cmd = 'sudo -u %s yay --noconfirm -S %s' + + for pkg in pkgs: + installed, updated, latest_error = query_package(module, pkg, state) + if latest_error and state == 'latest': + package_err.append(pkg) + + if installed and (state == 'present' or (state == 'latest' and updated)): + continue + + rc, _, stderr = module.run_command(cmd % (sudo_user, pkg), check_rc=False) + + if rc != 0: + module.fail_json(msg='Failed to install package %s, because: %s' % (pkg, stderr)) + + num_installed += 1 + + if state == 'latest' and len(package_err) > 0: + message = 'But could not ensure "latest" state for %s package(s) as remote version could not be fetched.' % package_err + + if num_installed > 0: + return True, 'Installed %s package(s). %s' % (num_installed, message) + else: + return False, 'All packages were already installed. %s' % message + +def remove_packages(module, pkgs, recurse, state): + num_removed = 0 + + arg = 'R' + word = 'remove' + if recurse: + arg = 'Rs' + word = 'recursively remove' + + cmd = 'pacman -%s --noconfirm %s' + + for pkg in pkgs: + installed, _, _ = query_package(module, pkg, state) + if not installed: + continue + + rc, _, stderr = module.run_command(cmd % (arg, pkg), check_rc=False) + + if rc != 0: + module.fail_json(msg='failed to %s package %s because: %s' % (word, pkg, stderr)) + + num_removed += 1 + + if num_removed > 0: + return True, 'Removed %s package(s)' % num_removed + else: + return False, 'All packages were already removed' + + +def main(): + module = AnsibleModule( + argument_spec = dict( + name = dict(type='list'), + state = dict( + default='present', + choices=['absent', 'present', 'latest'], + ), + recurse = dict(default='no', type='bool'), + upgrade = dict(default='no', type='bool'), + update_cache = dict( + default='no', + aliases=['update-cache'], + type='bool', + ), + ), + required_one_of = [['name', 'update_cache', 'upgrade']], + supports_check_mode = True + ) + + if not yay_in_path(module): + module.fail_json(msg="could not locate yay executable") + + if not pacman_in_path(module): + module.fail_json(msg="could not locate pacman executable") + + p = module.params + + changed = False + messages = [] + if p["update_cache"] and not module.check_mode: + updated, update_message = update_package_db(module) + changed = changed or updated + messages.append(update_message) + + if p['update_cache'] and module.check_mode: + changed = True + messages.append('Would have updated the package cache') + + if p['upgrade']: + upgraded, upgrade_message = upgrade(module) + changed = changed or upgraded + messages.append(upgrade_message) + + if p['name'] and module.check_mode: + packages_would_change, check_message = check_packages( + module, + p['name'], + p['state'], + ) + changed = changed or packages_would_change + messages.append(check_message) + elif p['name'] and not module.check_mode: + if p['name']: + if p['state'] in ['present', 'latest']: + packages_changed, package_message = install_packages( + module, + p['name'], + p['state'], + ) + elif p['state'] == 'absent': + packages_changed, package_message = remove_packages( + module, + p['name'], + p['recurse'], + p['state'], + ) + + changed = changed or packages_changed + messages.append(package_message) + + module.exit_json(changed=changed, msg='. '.join(messages)) + + +from ansible.module_utils.basic import * +main() diff --git a/playbooks/roles/base_info/tasks/main.yml b/playbooks/roles/base_info/tasks/main.yml index 4bff516..e77deba 100644 --- a/playbooks/roles/base_info/tasks/main.yml +++ b/playbooks/roles/base_info/tasks/main.yml @@ -1,3 +1,10 @@ +--- +- name: Info + debug: + msg: + ansible_os_family: "{{ ansible_os_family }}" + ansible_distribution: "{{ ansible_distribution }}" + - name: Setting generic facts tags: always ansible.builtin.set_fact: @@ -5,6 +12,7 @@ home: "/home/alice" use_become: true mac_os: "{{ ansible_distribution == 'MacOSX' }}" + archlinux: "{{ ansible_distribution == 'Archlinux' }}" - name: Setting macos facts tags: always diff --git a/playbooks/roles/base_system/meta/main.yml b/playbooks/roles/base_system/meta/main.yml index c0421e8..5d61fcc 100644 --- a/playbooks/roles/base_system/meta/main.yml +++ b/playbooks/roles/base_system/meta/main.yml @@ -1,2 +1,4 @@ dependencies: - role: base_info +collections: + - kewlfft.aur diff --git a/playbooks/roles/base_system/tasks/flatpak.yml b/playbooks/roles/base_system/tasks/flatpak.yml new file mode 100644 index 0000000..4e762e0 --- /dev/null +++ b/playbooks/roles/base_system/tasks/flatpak.yml @@ -0,0 +1,27 @@ +--- +- name: Install dependencies + tags: + - install + become: "{{ use_become }}" + ansible.builtin.package: + name: flatpak + +- name: Add the flathub flatpak repository remote to the user installation + become: "{{ use_become }}" + become_user: "{{ username }}" + tags: + - config + community.general.flatpak_remote: + name: flathub + state: present + flatpakrepo_url: https://dl.flathub.org/repo/flathub.flatpakrepo + method: user + +- name: Add the flathub flatpak repository remote + tags: + - config + become: "{{ use_become }}" + community.general.flatpak_remote: + name: flathub + state: present + flatpakrepo_url: https://dl.flathub.org/repo/flathub.flatpakrepo diff --git a/playbooks/roles/base_system/tasks/main.yml b/playbooks/roles/base_system/tasks/main.yml index 3a17f46..186354a 100644 --- a/playbooks/roles/base_system/tasks/main.yml +++ b/playbooks/roles/base_system/tasks/main.yml @@ -23,3 +23,15 @@ path: "{{ home }}" state: directory owner: "{{ username }}" + +- name: Install yay + tags: + - install + when: archlinux + include_tasks: yay.yml + +- name: Install flatpak + tags: + - install + when: archlinux + include_tasks: flatpak.yml diff --git a/playbooks/roles/base_system/tasks/yay.yml b/playbooks/roles/base_system/tasks/yay.yml new file mode 100644 index 0000000..2c60779 --- /dev/null +++ b/playbooks/roles/base_system/tasks/yay.yml @@ -0,0 +1,21 @@ +--- +- name: Create the `aur_builder` user + become: yes + ansible.builtin.user: + name: aur_builder + create_home: yes + group: wheel + +- name: Allow the `aur_builder` user to run `sudo pacman` without a password + become: yes + ansible.builtin.lineinfile: + path: /etc/sudoers.d/11-install-aur_builder + line: "aur_builder ALL=(ALL) NOPASSWD: /usr/bin/pacman" + create: yes + mode: 0644 + validate: "visudo -cf %s" + +- name: Yay + aur: name=yay use=makepkg state=present + become: yes + become_user: aur_builder diff --git a/playbooks/roles/base_system/vars/main.yml b/playbooks/roles/base_system/vars/main.yml new file mode 100644 index 0000000..1dd777d --- /dev/null +++ b/playbooks/roles/base_system/vars/main.yml @@ -0,0 +1,2 @@ +--- +srcdir: "{{ home }}/.src" diff --git a/playbooks/roles/base_terminal/defaults/main.yml b/playbooks/roles/base_terminal/defaults/main.yml index 3ae7c0e..6cc9284 100644 --- a/playbooks/roles/base_terminal/defaults/main.yml +++ b/playbooks/roles/base_terminal/defaults/main.yml @@ -1,4 +1,5 @@ install_with_root: true terminal_casks: [] -pkgs: [] +terminal_pkgs: [] +terminal_aur: [] contexts: {} diff --git a/playbooks/roles/base_terminal/meta/main.yml b/playbooks/roles/base_terminal/meta/main.yml index 8296646..393f0c6 100644 --- a/playbooks/roles/base_terminal/meta/main.yml +++ b/playbooks/roles/base_terminal/meta/main.yml @@ -2,3 +2,5 @@ dependencies: - role: base_info - role: base_system +collections: + - kewlfft.aur diff --git a/playbooks/roles/base_terminal/tasks/config.yml b/playbooks/roles/base_terminal/tasks/config.yml index c88ca14..fd45614 100644 --- a/playbooks/roles/base_terminal/tasks/config.yml +++ b/playbooks/roles/base_terminal/tasks/config.yml @@ -2,6 +2,7 @@ - name: Setup directories tags: - config + become: true ansible.builtin.file: mode: "{{ item.mode }}" path: "{{ home }}/{{ item.path }}" @@ -14,6 +15,7 @@ when: item.state == 'directory' - name: Copy config + become: true tags: - config ansible.builtin.copy: diff --git a/playbooks/roles/base_terminal/tasks/install.yml b/playbooks/roles/base_terminal/tasks/install.yml index fe92712..8cd28b0 100644 --- a/playbooks/roles/base_terminal/tasks/install.yml +++ b/playbooks/roles/base_terminal/tasks/install.yml @@ -27,3 +27,12 @@ community.general.homebrew_cask: name: "{{ terminal_casks }}" state: installed + +- name: "Install aur" + tags: + - install + when: terminal_aur + become: yes + become_user: aur_builder + aur: + name: "{{ terminal_aur }}" diff --git a/playbooks/roles/base_terminal/vars/Archlinux.yml b/playbooks/roles/base_terminal/vars/Archlinux.yml new file mode 100644 index 0000000..dad7129 --- /dev/null +++ b/playbooks/roles/base_terminal/vars/Archlinux.yml @@ -0,0 +1,15 @@ +--- +terminal_pkgs: + - bat + - eza + - direnv + - fzf + - gnupg + - jq + - ripgrep + - neovim + - tmux + - zoxide + - sshpass +terminal_aur: + - gh diff --git a/playbooks/roles/desktop_dunst/tasks/main.yml b/playbooks/roles/desktop_dunst/tasks/main.yml index 0de31dd..56c70f6 100644 --- a/playbooks/roles/desktop_dunst/tasks/main.yml +++ b/playbooks/roles/desktop_dunst/tasks/main.yml @@ -23,6 +23,7 @@ - name: "Ensure dir" tags: - config + become: "{{ use_become }}" ansible.builtin.file: path: "{{ home }}/.config/dunst" state: directory @@ -32,6 +33,7 @@ - name: "Copy templates" tags: - config + become: "{{ use_become }}" ansible.builtin.template: src: "{{ item.src }}" dest: "{{ home }}/.config/dunst/{{ item.path | regex_replace('\\.j2$', '') }}" diff --git a/playbooks/roles/desktop_hyprland/tasks/main.yml b/playbooks/roles/desktop_hyprland/tasks/main.yml index f1bd1dd..3aa0fd3 100644 --- a/playbooks/roles/desktop_hyprland/tasks/main.yml +++ b/playbooks/roles/desktop_hyprland/tasks/main.yml @@ -20,9 +20,18 @@ ansible.builtin.package: name: "{{ desktop_hyprland_pkgs }}" +- name: "Install flatpak" + tags: + - install + when: desktop_hyprland_flatpak + become: "{{ install_with_root }}" + community.general.flatpak: + name: "{{ desktop_hyprland_flatpak }}" + - name: "Ensure dir" tags: - config + become: "{{ use_become }}" ansible.builtin.file: path: "{{ home }}/.config/hypr" state: directory @@ -32,6 +41,7 @@ - name: "Copy templates" tags: - config + become: "{{ use_become }}" ansible.builtin.template: src: "{{ item.src }}" dest: "{{ home }}/.config/hypr/{{ item.path | regex_replace('\\.j2$', '') }}" diff --git a/playbooks/roles/desktop_hyprland/templates/keybind.conf.j2 b/playbooks/roles/desktop_hyprland/templates/keybind.conf.j2 index e4bdbde..1ed263a 100644 --- a/playbooks/roles/desktop_hyprland/templates/keybind.conf.j2 +++ b/playbooks/roles/desktop_hyprland/templates/keybind.conf.j2 @@ -4,8 +4,7 @@ $browser = firefox bind = SUPER, Return, exec, $term bind = SUPER SHIFT, Return, exec, $browser bind = SUPER, E, exec, $files -bind = SUPER, D, exec, killall rofi || rofi -show drun -theme ~/.config/rofi/config.rasi -bind = SUPER, period, exec, killall rofi || rofi -show emoji -emoji-format "{emoji}" -modi emoji -theme ~/.config/rofi/global/emoji +bind = SUPER, D, exec, killall wofi || wofi -show drun bind = SUPER SHIFT, B, exec, killall -SIGUSR2 waybar # Reload waybar bind = SUPER, B, exec, killall -SIGUSR1 waybar # Hide waybar @@ -86,4 +85,4 @@ bind = SUPER, mouse_up, workspace, e-1 binde = ,XF86MonBrightnessDown, exec, brightnessctl set 10%- binde = ,XF86MonBrightnessUp, exec, brightnessctl set 10%+ -bind = SUPER, L, exec, systemctl suspend +bind = SUPER CTRL, L, exec, systemctl suspend diff --git a/playbooks/roles/desktop_hyprland/vars/default.yml b/playbooks/roles/desktop_hyprland/vars/default.yml index 15f649a..60d20b6 100644 --- a/playbooks/roles/desktop_hyprland/vars/default.yml +++ b/playbooks/roles/desktop_hyprland/vars/default.yml @@ -3,3 +3,8 @@ desktop_hyprland_pkgs: - hyprland - hyprlock - swaybg + - wofi +desktop_hyprland_flatpak: + - org.mozilla.firefox + - com.spotify.Client + - com.github.iwalton3.jellyfin-media-player diff --git a/playbooks/roles/desktop_kitty/tasks/main.yml b/playbooks/roles/desktop_kitty/tasks/main.yml index 4814298..6c7742d 100644 --- a/playbooks/roles/desktop_kitty/tasks/main.yml +++ b/playbooks/roles/desktop_kitty/tasks/main.yml @@ -15,7 +15,7 @@ - name: "Install dependencies" tags: - install - when: desktop_kitty_pks + when: desktop_kitty_pkgs become: "{{ install_with_root }}" ansible.builtin.package: name: "{{ desktop_kitty_pkgs }}" @@ -23,8 +23,9 @@ - name: "Ensure dir" tags: - config + become: "{{ use_become }}" ansible.builtin.file: - path: "{{ home }}/.config/dunst" + path: "{{ home }}/.config/kitty" state: directory mode: "0700" owner: "{{ username }}" @@ -32,6 +33,7 @@ - name: "Copy templates" tags: - config + become: "{{ use_become }}" ansible.builtin.template: src: "{{ item.src }}" dest: "{{ home }}/.config/kitty/{{ item.path | regex_replace('\\.j2$', '') }}" diff --git a/playbooks/roles/env_terminal/tasks/main.yml b/playbooks/roles/env_terminal/tasks/_main.yml similarity index 100% rename from playbooks/roles/env_terminal/tasks/main.yml rename to playbooks/roles/env_terminal/tasks/_main.yml diff --git a/playbooks/roles/software_atuin/tasks/main.yml b/playbooks/roles/software_atuin/tasks/main.yml index f9a7dc7..2492af4 100644 --- a/playbooks/roles/software_atuin/tasks/main.yml +++ b/playbooks/roles/software_atuin/tasks/main.yml @@ -1,6 +1,7 @@ --- - name: Download atuin tags: always + become: "{{ use_become }}" ansible.builtin.get_url: url: "{{ software_atuin_download_url }}" dest: "{{ software_atuin_download_dir }}" @@ -8,6 +9,7 @@ - name: Create dir tags: always + become: "{{ use_become }}" ansible.builtin.file: path: "{{ software_atuin_unpack_dir }}" mode: "0755" @@ -15,12 +17,15 @@ - name: Unpacking atuin tags: always + become: "{{ use_become }}" ansible.builtin.unarchive: + remote_src: true src: "{{ software_atuin_download_dir }}" dest: "{{ software_atuin_unpack_dir }}" - name: Ensure dir tags: always + become: "{{ use_become }}" ansible.builtin.file: path: "{{ home }}/.local/bin" mode: "0755" @@ -29,6 +34,7 @@ - name: Move bin tags: always + become: "{{ use_become }}" ansible.builtin.copy: remote_src: true mode: "0755" @@ -37,6 +43,7 @@ - name: Cleanup tags: always + become: "{{ use_become }}" ansible.builtin.file: path: "{{ software_atuin_unpack_file }}" state: absent @@ -44,6 +51,7 @@ - name: Setup config dirctories tags: - config + become: "{{ use_become }}" ansible.builtin.file: mode: "{{ item.mode }}" path: "{{ home }}/{{ item.path }}" @@ -58,6 +66,7 @@ - name: Copy config {{ context }} tags: - config + become: "{{ use_become }}" ansible.builtin.copy: src: "{{ item.src }}" dest: "{{ home }}/{{ item.path }}" diff --git a/playbooks/roles/software_git/tasks/main.yml b/playbooks/roles/software_git/tasks/main.yml index b1dde99..9335732 100644 --- a/playbooks/roles/software_git/tasks/main.yml +++ b/playbooks/roles/software_git/tasks/main.yml @@ -13,6 +13,7 @@ tags: - git - config + become: "{{ use_become }}" ansible.builtin.file: mode: "{{ item.mode }}" path: "{{ home }}/{{ item.path }}" @@ -28,6 +29,7 @@ tags: - git - config + become: "{{ use_become }}" ansible.builtin.copy: src: "{{ item.src }}" dest: "{{ home }}/{{ item.path }}" @@ -43,6 +45,7 @@ tags: - git - config + become: "{{ use_become }}" ansible.builtin.template: src: "../templates/gitconfig.j2" dest: "{{ home }}/.gitconfig" diff --git a/playbooks/roles/software_git/tasks/setup-context.yml b/playbooks/roles/software_git/tasks/setup-context.yml index 16889f8..3ff2ae0 100644 --- a/playbooks/roles/software_git/tasks/setup-context.yml +++ b/playbooks/roles/software_git/tasks/setup-context.yml @@ -2,6 +2,7 @@ tags: - git - config + become: "{{ use_become }}" ansible.builtin.template: src: "../templates/gitconfig.context.j2" dest: "{{ context.path }}/.gitconfig" @@ -16,6 +17,7 @@ tags: - git - config + become: "{{ use_become }}" ansible.builtin.file: path: "{{ context.path }}" state: directory @@ -26,6 +28,7 @@ tags: - git - config + become: "{{ use_become }}" ansible.builtin.template: src: "../templates/sshconfig.context.j2" dest: "{{ home }}/.ssh/config.d/git-{{ name }}" @@ -39,6 +42,7 @@ tags: - git - config + become: "{{ use_become }}" ansible.builtin.file: path: "{{ home }}/.ssh/keys" state: directory @@ -49,6 +53,7 @@ tags: - git - config + become: "{{ use_become }}" ansible.builtin.copy: content: "{{ context.git.signing_key }}" dest: "{{ home }}/.ssh/keys/github-{{ name }}.pub" diff --git a/playbooks/roles/software_nvim/tasks/main.yml b/playbooks/roles/software_nvim/tasks/main.yml index 2300a52..643222c 100644 --- a/playbooks/roles/software_nvim/tasks/main.yml +++ b/playbooks/roles/software_nvim/tasks/main.yml @@ -12,6 +12,7 @@ tags: - nvim - config + become: "{{ use_become }}" ansible.builtin.file: mode: "{{ item.mode }}" path: "{{ home }}/{{ item.path }}" @@ -27,6 +28,7 @@ tags: - nvim - config + become: "{{ use_become }}" ansible.builtin.copy: src: "{{ item.src }}" dest: "{{ home }}/{{ item.path }}" @@ -56,6 +58,7 @@ tags: - config - nvim + become: "{{ use_become }}" ansible.builtin.file: path: "{{ home }}/.config" owner: "{{ username }}" @@ -66,6 +69,7 @@ tags: - config - nvim + become: "{{ use_become }}" ansible.builtin.file: src: "{{ home }}/Projects/private/nvim" dest: "{{ home }}/.config/nvim" diff --git a/playbooks/roles/software_nvm/tasks/main.yml b/playbooks/roles/software_nvm/tasks/main.yml index 59d8e79..b7ce71f 100644 --- a/playbooks/roles/software_nvm/tasks/main.yml +++ b/playbooks/roles/software_nvm/tasks/main.yml @@ -18,19 +18,20 @@ repo: https://github.com/nvm-sh/nvm dest: "{{ home }}/.nvm" -- name: Install node and set version - tags: - - config - become_user: "{{ username }}" - register: nodeinstall - ansible.builtin.shell: source {{ home }}/.nvm/nvm.sh && nvm install 22 - changed_when: "'is already installed' not in nodeinstall.stderr" - args: - executable: /bin/bash +# - name: Install node and set version +# tags: +# - config +# become_user: "{{ username }}" +# register: nodeinstall +# ansible.builtin.shell: source {{ home }}/.nvm/nvm.sh && nvm install 22 +# changed_when: "'is already installed' not in nodeinstall.stderr" +# args: +# executable: /bin/bash - name: Setup config dirctories tags: - config + become: "{{ use_become }}" ansible.builtin.file: mode: "{{ item.mode }}" path: "{{ home }}/{{ item.path }}" @@ -45,6 +46,7 @@ - name: Copy config {{ context }} tags: - config + become: "{{ use_become }}" ansible.builtin.copy: src: "{{ item.src }}" dest: "{{ home }}/{{ item.path }}" diff --git a/playbooks/roles/software_ssh/tasks/main.yml b/playbooks/roles/software_ssh/tasks/main.yml index 47c844a..1eb53bb 100644 --- a/playbooks/roles/software_ssh/tasks/main.yml +++ b/playbooks/roles/software_ssh/tasks/main.yml @@ -1,5 +1,6 @@ --- - name: Ensure dir + become: "{{ use_become }}" tags: - config ansible.builtin.file: @@ -9,6 +10,7 @@ state: directory - name: Setup config + become: "{{ use_become }}" tags: - config ansible.builtin.template: diff --git a/playbooks/roles/software_starship/tasks/main.yml b/playbooks/roles/software_starship/tasks/main.yml index 2ded769..8bd3cd0 100644 --- a/playbooks/roles/software_starship/tasks/main.yml +++ b/playbooks/roles/software_starship/tasks/main.yml @@ -1,5 +1,6 @@ - name: Download starship tags: always + become: "{{ use_become }}" ansible.builtin.get_url: mode: "0600" url: "{{ software_starship_download_url }}" @@ -7,6 +8,7 @@ - name: Create dir tags: always + become: "{{ use_become }}" ansible.builtin.file: mode: "0755" path: "{{ software_starship_unpack_dir }}" @@ -14,12 +16,15 @@ - name: Extract starship tags: always + become: "{{ use_become }}" ansible.builtin.unarchive: + remote_src: true src: "{{ software_starship_download_dir }}" dest: "{{ software_starship_unpack_dir }}" - name: Ensure dir tags: always + become: "{{ use_become }}" ansible.builtin.file: mode: "0755" path: "{{ home }}/.local/bin" @@ -28,6 +33,7 @@ - name: Move bin tags: always + become: "{{ use_become }}" ansible.builtin.copy: remote_src: true mode: "0755" diff --git a/playbooks/roles/software_tmux/tasks/main.yml b/playbooks/roles/software_tmux/tasks/main.yml index 1f08bca..d3eb122 100644 --- a/playbooks/roles/software_tmux/tasks/main.yml +++ b/playbooks/roles/software_tmux/tasks/main.yml @@ -2,6 +2,7 @@ - name: Copy config tags: - config + become: "{{ use_become }}" ansible.builtin.file: mode: "{{ item.mode }}" path: "{{ home }}/{{ item.path }}" @@ -16,6 +17,7 @@ - name: "Copy templates" tags: - config + become: "{{ use_become }}" ansible.builtin.template: src: "{{ item.src }}" dest: "{{ home }}/{{ item.path | regex_replace('\\.j2$', '') }}" @@ -30,6 +32,7 @@ - name: Copy config tags: - config + become: "{{ use_become }}" ansible.builtin.copy: src: "{{ item.src }}" dest: "{{ home }}/{{ item.path }}" diff --git a/playbooks/roles/software_zsh/tasks/main.yml b/playbooks/roles/software_zsh/tasks/main.yml index b861777..dcfe2eb 100644 --- a/playbooks/roles/software_zsh/tasks/main.yml +++ b/playbooks/roles/software_zsh/tasks/main.yml @@ -18,6 +18,7 @@ - name: Copy config tags: - config + become: "{{ use_become }}" ansible.builtin.file: mode: "{{ item.mode }}" path: "{{ home }}/{{ item.path }}" @@ -32,6 +33,7 @@ - name: "Copy templates" tags: - config + become: "{{ use_become }}" ansible.builtin.template: src: "{{ item.src }}" dest: "{{ home }}/{{ item.path | regex_replace('\\.j2$', '') }}" @@ -46,6 +48,7 @@ - name: Copy config tags: - config + become: "{{ use_become }}" ansible.builtin.copy: src: "{{ item.src }}" dest: "{{ home }}/{{ item.path }}" diff --git a/playbooks/test.yml b/playbooks/test.yml deleted file mode 100644 index 495ae69..0000000 --- a/playbooks/test.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- name: Setup host - hosts: localhost - roles: - - desktop_hyprland diff --git a/requirements.yml b/requirements.yml new file mode 100644 index 0000000..d1c800f --- /dev/null +++ b/requirements.yml @@ -0,0 +1,3 @@ +--- +collections: + - kewlfft.aur