Remove ubuntu support

This commit is contained in:
2024-04-10 15:57:38 +02:00
parent 206015074a
commit 9cf05ac5fe
6 changed files with 97 additions and 901 deletions

View File

@@ -50,13 +50,7 @@ sudowrap() {
cache_updated=0 cache_updated=0
_install() { _install() {
_package="$1" ; shift _package="$1" ; shift
if [[ $NAME == "Ubuntu" ]] ; then if [[ $NAME == "Arch Linux" ]] ; then
if ! (( cache_updated )) ; then
sudowrap apt-get update
cache_updated=1
fi
sudowrap apt-get install --assume-yes "${_package}"
elif [[ $NAME == "Arch Linux" ]] ; then
sudowrap pacman -S --noconfirm "${_package}" sudowrap pacman -S --noconfirm "${_package}"
else else
2>&1 printf "Unsupported distro $NAME, exiting" 2>&1 printf "Unsupported distro $NAME, exiting"
@@ -81,9 +75,4 @@ if [[ $NAME == "Arch Linux" ]] ; then
_install "ansible" _install "ansible"
fi fi
if [[ $NAME == "Ubuntu" ]] ; then
_install "ansible"
_install "python3-jmespath"
fi
cd "$DOTDIR" && make cd "$DOTDIR" && make

View File

@@ -1,10 +1,6 @@
packages: packages:
list: list:
build-essentials: build-essentials:
ubuntu:
- build-essential
- exuberant-ctags
- cmake
archlinux: archlinux:
- gcc - gcc
- ctags - ctags
@@ -12,22 +8,16 @@ packages:
- maven - maven
- base-devel - base-devel
make: make:
ubuntu: ["make"]
archlinux: ["make"] archlinux: ["make"]
gdb: gdb:
ubuntu: ["gdb"]
archlinux: ["gdb"] archlinux: ["gdb"]
strace: strace:
ubuntu: ["strace"]
archlinux: ["strace"] archlinux: ["strace"]
sudo: sudo:
ubuntu: ["sudo"]
archlinux: ["sudo"] archlinux: ["sudo"]
apt: apt:
ubuntu: ["apt-file"]
archlinux: [""] archlinux: [""]
xorg: xorg:
ubuntu: []
archlinux: archlinux:
- xorg-server - xorg-server
- xorg-xrandr - xorg-xrandr
@@ -38,393 +28,258 @@ packages:
- xorg-xset - xorg-xset
- xorg-xinit - xorg-xinit
dmenu: dmenu:
ubuntu: ["dmenu"]
archlinux: ["dmenu"] archlinux: ["dmenu"]
ansible: ansible:
ubuntu: ["ansible"]
archlinux: ["ansible"] archlinux: ["ansible"]
xdotool: xdotool:
ubuntu: ["xdotool"]
archlinux: ["xdotool"] archlinux: ["xdotool"]
arandr: arandr:
ubuntu: ["arandr"]
archlinux: ["arandr"] archlinux: ["arandr"]
borgbackup: borgbackup:
ubuntu: ["borgbackup"]
archlinux: ["borgbackup"] archlinux: ["borgbackup"]
docker: docker:
ubuntu: ["docker.io", "containerd", "docker-compose"]
archlinux: ["docker", "docker-compose"] archlinux: ["docker", "docker-compose"]
font-awesome: font-awesome:
ubuntu: ["fonts-font-awesome"]
archlinux: ["ttf-font-awesome"] archlinux: ["ttf-font-awesome"]
font-inconsolata: font-inconsolata:
ubuntu: ["fonts-inconsolata"]
archlinux: ["ttf-inconsolata"] archlinux: ["ttf-inconsolata"]
font-dejavu: font-dejavu:
ubuntu: ["fonts-dejavu"]
archlinux: ["ttf-dejavu"] archlinux: ["ttf-dejavu"]
font-libertine: font-libertine:
ubuntu: ["fonts-linuxlibertine"]
archlinux: ["ttf-linux-libertine"] archlinux: ["ttf-linux-libertine"]
font-emoji: font-emoji:
ubuntu: []
archlinux: ["noto-fonts-emoji"] archlinux: ["noto-fonts-emoji"]
git: git:
ubuntu: ["git", "git-extras", "gitk", "git-email"]
# tk required for gitk # tk required for gitk
archlinux: ["git", "tk"] archlinux: ["git", "tk"]
htop: htop:
ubuntu: ["htop"]
archlinux: ["htop"] archlinux: ["htop"]
feh: feh:
ubuntu: ["feh"]
archlinux: ["feh"] archlinux: ["feh"]
i3: i3:
ubuntu: ["i3"]
archlinux: ["i3-wm"] archlinux: ["i3-wm"]
i3lock: i3lock:
ubuntu: ["i3lock"]
archlinux: ["i3lock"] archlinux: ["i3lock"]
pluma: pluma:
ubuntu: ["pluma"]
archlinux: ["pluma"] archlinux: ["pluma"]
neovim: neovim:
ubuntu: ["neovim"]
archlinux: ["neovim", "python-pynvim"] archlinux: ["neovim", "python-pynvim"]
network-manager-applet: network-manager-applet:
ubuntu: []
archlinux: ["network-manager-applet"] archlinux: ["network-manager-applet"]
pasystray: pasystray:
ubuntu: ["pasystray"]
archlinux: ["pasystray"] archlinux: ["pasystray"]
redshift: redshift:
ubuntu: ["redshift-gtk"]
archlinux: ["redshift"] archlinux: ["redshift"]
pavucontrol: pavucontrol:
ubuntu: ["pavucontrol"]
archlinux: ["pavucontrol-qt"] archlinux: ["pavucontrol-qt"]
pinentry-qt: pinentry-qt:
ubuntu: ["pinentry-curses", "pinentry-qt"]
archlinux: ["pinentry"] archlinux: ["pinentry"]
pinta: pinta:
ubuntu: ["pinta"]
archlinux: ["pinta"] archlinux: ["pinta"]
py3status: py3status:
ubuntu: ["py3status", "python3-arrow", "python3-tzlocal", "python3-pydbus"]
archlinux: ["py3status", "python-pytz", "python-tzlocal", "python-dbus", "python-pydbus"] archlinux: ["py3status", "python-pytz", "python-tzlocal", "python-dbus", "python-pydbus"]
pass: pass:
ubuntu: ["pass"]
archlinux: ["pass", "passff-host"] archlinux: ["pass", "passff-host"]
keepassx: keepassx:
ubuntu: ["keepassx"]
archlinux: [] archlinux: []
urxvt: urxvt:
ubuntu: ["rxvt-unicode-256color"]
archlinux: ["rxvt-unicode"] archlinux: ["rxvt-unicode"]
alacritty: alacritty:
ubuntu: []
archlinux: ["alacritty"] archlinux: ["alacritty"]
tmux: tmux:
ubuntu: ["tmux"]
archlinux: ["tmux"] archlinux: ["tmux"]
screen: screen:
ubuntu: ["screen"]
archlinux: ["screen"] archlinux: ["screen"]
zsh: zsh:
ubuntu: ["zsh", "zsh-syntax-highlighting"]
archlinux: ["zsh", "zsh-syntax-highlighting", "zsh-autosuggestions", "zsh-completions"] archlinux: ["zsh", "zsh-syntax-highlighting", "zsh-autosuggestions", "zsh-completions"]
zathura: zathura:
ubuntu: ["zathura", "zathura-pdf-poppler"]
archlinux: ["zathura", "zathura-pdf-poppler"] archlinux: ["zathura", "zathura-pdf-poppler"]
pdf: pdf:
ubuntu: ["ghostscript", "enscript"]
archlinux: ["ghostscript", "enscript"] archlinux: ["ghostscript", "enscript"]
pandoc: pandoc:
ubuntu:
- pandoc
- texlive
- python3-sphinxcontrib.svg2pdfconverter # for html to pdf conversions
- texlive-latex-extra
archlinux: ["pandoc", "texlive-core", "texlive-fontsextra", "texlive-latexextra"] archlinux: ["pandoc", "texlive-core", "texlive-fontsextra", "texlive-latexextra"]
libvirt: libvirt:
ubuntu: ["virt-manager", "libvirt-daemon"]
archlinux: ["virt-manager", "libvirt", "dnsmasq", "ebtables", "dmidecode"] archlinux: ["virt-manager", "libvirt", "dnsmasq", "ebtables", "dmidecode"]
firefox: firefox:
ubuntu: ["firefox"]
archlinux: ["firefox"] archlinux: ["firefox"]
ranger: ranger:
ubuntu: ["ranger"]
archlinux: ["ranger"] archlinux: ["ranger"]
thunar: thunar:
ubuntu: ["thunar"]
archlinux: ["thunar"] archlinux: ["thunar"]
unclutter: unclutter:
ubuntu: ["unclutter"]
archlinux: ["unclutter"] archlinux: ["unclutter"]
libreoffice: libreoffice:
ubuntu: ["libreoffice"]
archlinux: ["libreoffice-fresh", "libreoffice-fresh-de"] archlinux: ["libreoffice-fresh", "libreoffice-fresh-de"]
qt-theming: qt-theming:
ubuntu: ["breeze-cursor-theme", "breeze-icon-theme", "breeze", "qt5ct"]
archlinux: ["breeze", "breeze-icons", "breeze-grub", "qt5ct"] archlinux: ["breeze", "breeze-icons", "breeze-grub", "qt5ct"]
gtk-theming: gtk-theming:
ubuntu: ["gtk3-engines-breeze", "lxappearance"]
archlinux: ["breeze-gtk", "lxappearance"] archlinux: ["breeze-gtk", "lxappearance"]
xcompmgr: xcompmgr:
ubuntu: ["xcompmgr"]
archlinux: ["xcompmgr"] archlinux: ["xcompmgr"]
python: python:
ubuntu: ["python3", "python3-pip", "python3-venv", "virtualenv", "pylint3"]
archlinux: ["python3"] archlinux: ["python3"]
python-modules: python-modules:
ubuntu: []
archlinux: archlinux:
- python-ruamel-yaml - python-ruamel-yaml
- python-gitpython - python-gitpython
- python-semver - python-semver
black: black:
ubuntu: ["black"]
archlinux: ["python-black"] archlinux: ["python-black"]
xbacklight: xbacklight:
ubuntu: ["xbacklight"]
archlinux: ["xorg-xbacklight"] archlinux: ["xorg-xbacklight"]
wireshark: wireshark:
ubuntu: ["wireshark", "wireshark-qt"]
archlinux: ["wireshark-cli", "wireshark-qt"] archlinux: ["wireshark-cli", "wireshark-qt"]
nmap: nmap:
ubuntu: ["nmap"]
archlinux: ["nmap"] archlinux: ["nmap"]
openvpn: openvpn:
ubuntu: ["openvpn"]
archlinux: ["openvpn"] archlinux: ["openvpn"]
curl: curl:
ubuntu: ["curl"]
archlinux: ["curl"] archlinux: ["curl"]
wget: wget:
ubuntu: ["wget"]
archlinux: ["wget"] archlinux: ["wget"]
tree: tree:
ubuntu: ["tree"]
archlinux: ["tree"] archlinux: ["tree"]
which: which:
ubuntu: []
archlinux: ["which"] archlinux: ["which"]
zip: zip:
ubuntu: ["zip", "unzip"]
archlinux: ["zip", "unzip"] archlinux: ["zip", "unzip"]
traceroute: traceroute:
ubuntu: ["traceroute"]
archlinux: ["traceroute"] archlinux: ["traceroute"]
tcpdump: tcpdump:
ubuntu: ["tcpdump"]
archlinux: ["tcpdump"] archlinux: ["tcpdump"]
tar: tar:
ubuntu: ["tar"]
archlinux: ["tar"] archlinux: ["tar"]
rsync: rsync:
ubuntu: ["rsync"]
archlinux: ["rsync"] archlinux: ["rsync"]
net-tools: net-tools:
ubuntu: ["net-tools"]
archlinux: ["net-tools"] archlinux: ["net-tools"]
ntfs: ntfs:
ubuntu: ["ntfs-3g"]
archlinux: ["ntfs-3g"] archlinux: ["ntfs-3g"]
lsof: lsof:
ubuntu: ["lsof"]
archlinux: ["lsof"] archlinux: ["lsof"]
iptables: iptables:
ubuntu: ["iptables"]
archlinux: ["iptables-nft"] archlinux: ["iptables-nft"]
pwgen: pwgen:
ubuntu: ["pwgen"]
archlinux: ["pwgen"] archlinux: ["pwgen"]
gpg: gpg:
ubuntu: ["gnupg2", "pcscd", "scdaemon"]
archlinux: ["gnupg", "paperkey", "yubikey-manager", "yubikey-touch-detector"] archlinux: ["gnupg", "paperkey", "yubikey-manager", "yubikey-touch-detector"]
networkmanager: networkmanager:
ubuntu: ["network-manager", "network-manager-openvpn", "network-manager-openconnect", "network-manager-openconnect-gnome"]
archlinux: ["networkmanager"] archlinux: ["networkmanager"]
pulseaudio: pulseaudio:
ubuntu: ["pulseaudio", "pulseaudio-utils"]
archlinux: ["pulseaudio", "pulseaudio-alsa", "lib32-libpulse"] archlinux: ["pulseaudio", "pulseaudio-alsa", "lib32-libpulse"]
iw: iw:
ubuntu: ["iw"]
archlinux: ["iw"] archlinux: ["iw"]
cowsay: cowsay:
ubuntu: ["cowsay"]
archlinux: ["cowsay"] archlinux: ["cowsay"]
ruby: ruby:
ubuntu: ["ruby", "ruby-dev", "ruby-bundler"]
archlinux: ["ruby"] archlinux: ["ruby"]
lxc: lxc:
ubuntu: ["lxc"]
archlinux: ["lxc"] archlinux: ["lxc"]
acpi: acpi:
ubuntu: ["acpid"]
archlinux: ["acpi", "acpid"] archlinux: ["acpi", "acpid"]
nodejs: nodejs:
ubuntu: ["nodejs"]
archlinux: ["nodejs", "npm"] archlinux: ["nodejs", "npm"]
xdg: xdg:
ubuntu: ["xdg-utils"]
archlinux: ["xdg-utils"] archlinux: ["xdg-utils"]
compton: compton:
ubuntu: ["compton"]
archlinux: [] archlinux: []
dunst: dunst:
ubuntu: ["dunst"]
archlinux: ["dunst"] archlinux: ["dunst"]
cloc: cloc:
ubuntu: ["cloc"]
archlinux: ["cloc"] archlinux: ["cloc"]
bluetooth: bluetooth:
ubuntu: ["blueman"]
archlinux: ["bluez", "bluez-tools", "blueman"] archlinux: ["bluez", "bluez-tools", "blueman"]
autorandr: autorandr:
ubuntu: ["autorandr"]
archlinux: ["autorandr"] archlinux: ["autorandr"]
bwm-ng: bwm-ng:
ubuntu: ["bwm-ng"]
archlinux: ["bwm-ng"] archlinux: ["bwm-ng"]
virtualbox: virtualbox:
ubuntu: ["virtualbox"]
archlinux: ["virtualbox"] archlinux: ["virtualbox"]
ssh: ssh:
ubuntu: ["ssh"]
archlinux: ["openssh"] archlinux: ["openssh"]
sshfs: sshfs:
ubuntu: ["sshfs"]
archlinux: ["sshfs"] archlinux: ["sshfs"]
expect: expect:
ubuntu: ["expect"]
archlinux: ["expect"] archlinux: ["expect"]
inotify: inotify:
ubuntu: ["inotify-tools"]
archlinux: ["inotify-tools"] archlinux: ["inotify-tools"]
rclone: rclone:
ubuntu: ["rclone"]
archlinux: ["rclone"] archlinux: ["rclone"]
dnf: dnf:
ubuntu: []
archlinux: [] archlinux: []
rustup: rustup:
ubuntu: []
archlinux: ["rustup"] archlinux: ["rustup"]
musescore: musescore:
ubuntu: ["musescore3"]
archlinux: ["musescore"] archlinux: ["musescore"]
sipcalc: sipcalc:
ubuntu: ["sipcalc"]
archlinux: ["sipcalc"] archlinux: ["sipcalc"]
rofi: rofi:
ubuntu: ["rofi"]
archlinux: ["rofi"] archlinux: ["rofi"]
imv: imv:
ubuntu: ["imv"]
archlinux: ["imv"] archlinux: ["imv"]
pacman: pacman:
ubuntu: []
archlinux: ["pacman", "pacman-contrib"] archlinux: ["pacman", "pacman-contrib"]
steam: steam:
ubuntu: []
archlinux: ["steam"] archlinux: ["steam"]
man: man:
ubuntu: ["man-db", "manpages"]
archlinux: ["man-db", "man-pages"] archlinux: ["man-db", "man-pages"]
nextcloud: nextcloud:
ubuntu: ["nextcloud-desktop"]
archlinux: ["nextcloud-client"] archlinux: ["nextcloud-client"]
kwallet: kwallet:
ubuntu: []
archlinux: ["kwallet", "kwalletmanager"] archlinux: ["kwallet", "kwalletmanager"]
pv: pv:
ubuntu: ["pv"]
archlinux: ["pv"] archlinux: ["pv"]
stress: stress:
ubuntu: ["stress"]
archlinux: ["stress"] archlinux: ["stress"]
mpris: mpris:
ubuntu: ["playerctl"]
archlinux: ["playerctl"] archlinux: ["playerctl"]
imagemagick: imagemagick:
ubuntu: ["imagemagick"]
archlinux: ["imagemagick"] archlinux: ["imagemagick"]
mpv: mpv:
ubuntu: ["mpv"]
archlinux: ["mpv"] archlinux: ["mpv"]
gnome-keyring: gnome-keyring:
ubuntu: ["gnome-keyring"]
archlinux: ["gnome-keyring"] archlinux: ["gnome-keyring"]
element: element:
ubuntu: []
archlinux: ["element-desktop"] archlinux: ["element-desktop"]
maim: maim:
ubuntu: ["maim"]
archlinux: ["maim"] archlinux: ["maim"]
mkinitcpio: mkinitcpio:
ubuntu: []
archlinux: ["mkinitcpio"] archlinux: ["mkinitcpio"]
terraform: terraform:
ubuntu: []
archlinux: ["terraform"] archlinux: ["terraform"]
synclient: synclient:
ubuntu: ["xserver-xorg-input-synaptics"]
archlinux: ["xf86-input-synaptics"] archlinux: ["xf86-input-synaptics"]
ncdu: ncdu:
ubuntu: ["ncdu"]
archlinux: ["ncdu"] archlinux: ["ncdu"]
font-utils: font-utils:
ubuntu: ["woff-tools", "woff2"]
archlinux: ["woff2"] archlinux: ["woff2"]
jq: jq:
ubuntu: ["jq"]
archlinux: ["jq"] archlinux: ["jq"]
musl: musl:
ubuntu: ["musl", "musl-tools"]
archlinux: ["musl"] archlinux: ["musl"]
kdeconnect: kdeconnect:
ubuntu: ["kdeconnect"]
archlinux: ["kdeconnect"] archlinux: ["kdeconnect"]
restic: restic:
ubuntu: ["restic"]
archlinux: ["restic"] archlinux: ["restic"]
discord: discord:
ubuntu: []
archlinux: ["discord"] archlinux: ["discord"]
kubectl: kubectl:
ubuntu: []
archlinux: ["kubectl"] archlinux: ["kubectl"]
bind: bind:
ubuntu: []
archlinux: ["bind"] archlinux: ["bind"]
fzf: fzf:
ubuntu: []
archlinux: ["fzf"] archlinux: ["fzf"]
chromium: chromium:
ubuntu: []
archlinux: ["chromium"] archlinux: ["chromium"]
signal:
archlinux: ["signal-desktop"]
go:
archlinux: ["go", "gopls"]
remove: remove:
mousepad: mousepad:
ubuntu: ["mousepad"]
archlinux: ["mousepad"] archlinux: ["mousepad"]
chrome:
ubuntu: ["google-chrome-stable"]
archlinux: []
snap:
ubuntu: ["snapd"]
archlinux: []
golang:
ubuntu: ["golang-go"]
archlinux: ["go"]
signal:
ubuntu: []
archlinux: ["signal-desktop"]
vim: vim:
ubuntu: ["vim"]
archlinux: ["gvim"] archlinux: ["gvim"]
rust: rust:
ubuntu: ["rustc", "cargo"]
archlinux: ["rust"] archlinux: ["rust"]

View File

@@ -23,114 +23,90 @@
- name: check for valid distro - name: check for valid distro
assert: assert:
that: distro in ('ubuntu', 'archlinux') that: distro in ('archlinux')
- block: - block:
- block: - name: upgrade system
- name: update apt cache pacman:
apt: upgrade: true
update_cache: true update_cache: true
become: true become: true
changed_when: false changed_when: false
- name: upgrade system
apt:
upgrade: dist
become: true
- name: remove unused packages
apt:
autoremove: true
become: true
- name: clean apt cache
apt:
autoclean: true
become: true
when: distro == 'ubuntu'
- block:
- name: install ansible requirements
package:
name: "{{ packages[distro] }}"
state: present
become: true
vars:
packages:
archlinux:
- python-jmespath
ubuntu:
- python3-jmespath
- block:
- name: enable multilib repository
blockinfile:
path: /etc/pacman.conf
block: |
[multilib]
Include = /etc/pacman.d/mirrorlist
marker: "# {mark} ANSIBLE MANAGED multilib"
become: true
- name: enable parallel download
blockinfile:
path: /etc/pacman.conf
insertafter: '\[options\]'
block: |
ParallelDownloads = 5
marker: "# {mark} ANSIBLE MANAGED parallel_download"
become: true
- name: upgrade system
pacman:
upgrade: true
update_cache: true
become: true
changed_when: false
- name: install pacman-contrib for paccache
package:
name: pacman-contrib
state: present
become: true
- block:
- name: install pacman cache clean service
copy:
dest: /etc/systemd/system/pacman-cache-cleanup.service
owner: root
group: root
mode: '0644'
content: |
[Service]
Type=oneshot
ExecStart=/bin/sh -c '/usr/bin/paccache -rk1 && /usr/bin/paccache -ruk0'
RemainAfterExit=true
become: true
- name: install pacman cache clean timer
copy:
dest: /etc/systemd/system/pacman-cache-cleanup.timer
owner: root
group: root
mode: '0644'
content: |
[Timer]
OnCalendar=daily
become: true
- name: enable pacman cache clean timer
systemd:
name: pacman-cache-cleanup.timer
enabled: true
state: started
daemon_reload: true
become: true
tags: [pacman_cache_cleanup]
when: distro == 'archlinux'
tags: [system-update] tags: [system-update]
- block:
- name: install ansible requirements
package:
name: "{{ packages[distro] }}"
state: present
become: true
vars:
packages:
archlinux:
- python-jmespath
- block:
- name: enable multilib repository
blockinfile:
path: /etc/pacman.conf
block: |
[multilib]
Include = /etc/pacman.d/mirrorlist
marker: "# {mark} ANSIBLE MANAGED multilib"
become: true
- name: enable parallel download
blockinfile:
path: /etc/pacman.conf
insertafter: '\[options\]'
block: |
ParallelDownloads = 5
marker: "# {mark} ANSIBLE MANAGED parallel_download"
become: true
- name: install pacman-contrib for paccache
package:
name: pacman-contrib
state: present
become: true
- block:
- name: install pacman cache clean service
copy:
dest: /etc/systemd/system/pacman-cache-cleanup.service
owner: root
group: root
mode: '0644'
content: |
[Service]
Type=oneshot
ExecStart=/bin/sh -c '/usr/bin/paccache -rk1 && /usr/bin/paccache -ruk0'
RemainAfterExit=true
become: true
- name: install pacman cache clean timer
copy:
dest: /etc/systemd/system/pacman-cache-cleanup.timer
owner: root
group: root
mode: '0644'
content: |
[Timer]
OnCalendar=daily
become: true
- name: enable pacman cache clean timer
systemd:
name: pacman-cache-cleanup.timer
enabled: true
state: started
daemon_reload: true
become: true
tags: [pacman_cache_cleanup]
when: distro == 'archlinux'
- block: - block:
- name: create dotfiles group - name: create dotfiles group
group: group:
@@ -310,7 +286,6 @@
become: true become: true
vars: vars:
query: "{{ 'remove.*.%s[]'|format(distro) }}" query: "{{ 'remove.*.%s[]'|format(distro) }}"
when: distro != 'ubuntu'
- name: install packages - name: install packages
package: package:
@@ -320,16 +295,6 @@
vars: vars:
query: "{{ 'list.*.%s[]'|format(distro) }}" query: "{{ 'list.*.%s[]'|format(distro) }}"
- name: remove packages
apt:
name: "{{ packages|json_query(query) }}"
state: absent
purge: true
become: true
vars:
query: "{{ 'remove.*.%s[]'|format(distro) }}"
when: distro == 'ubuntu'
- name: install machine-specific packages - name: install machine-specific packages
package: package:
name: "{{ machine.packages }}" name: "{{ machine.packages }}"
@@ -368,11 +333,6 @@
- rebuild initrd - rebuild initrd
when: distro == 'archlinux' when: distro == 'archlinux'
- set_fact:
disable_services:
- ssh
when: distro == 'ubuntu'
- set_fact: - set_fact:
disable_services: disable_services:
- sshd - sshd
@@ -387,13 +347,6 @@
become: true become: true
when: manage_services|default(true)|bool when: manage_services|default(true)|bool
- set_fact:
enable_services:
- NetworkManager
- docker
- libvirtd
when: distro == 'ubuntu'
- set_fact: - set_fact:
enable_services: enable_services:
- NetworkManager - NetworkManager
@@ -401,7 +354,6 @@
- libvirtd - libvirtd
- systemd-timesyncd - systemd-timesyncd
- pcscd - pcscd
when: distro == 'archlinux'
- name: enable services - name: enable services
service: service:
@@ -440,23 +392,20 @@
line: 'HandlePowerKey=suspend' line: 'HandlePowerKey=suspend'
become: true become: true
- block: - name: create sudonopw group
- name: create sudonopw group group:
group: name: sudonopw
name: sudonopw system: true
system: true
- name: configure passwordless sudo - name: configure passwordless sudo
copy: copy:
owner: root owner: root
group: root group: root
mode: "0600" mode: "0600"
dest: /etc/sudoers.d/sudonopw dest: /etc/sudoers.d/sudonopw
content: | content: |
%sudonopw ALL=(ALL) NOPASSWD: ALL %sudonopw ALL=(ALL) NOPASSWD: ALL
become: true become: true
when: distro == 'archlinux'
- block: - block:
- name: install AMDGPU packages - name: install AMDGPU packages
@@ -494,411 +443,6 @@
- machine.gpu is defined and machine.gpu == 'amd' - machine.gpu is defined and machine.gpu == 'amd'
- block: - block:
- name: create rust build user
user:
name: rust_build
home: /var/lib/rust_build
create_home: true
shell: /bin/bash
system: true
become: true
- set_fact:
cargo_env: . ~/.cargo/env
when: distro == 'ubuntu'
- set_fact:
# Do NOT just use `"true"`. Due to some YAML fuckery, it will be
# capitalized and the commands will fail.
cargo_env: "/bin/true"
when: distro == 'archlinux'
- name: install rustup on ubuntu
shell: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal
args:
creates: /var/lib/rust_build/.cargo/bin/rustup
become: true
become_user: rust_build
when: distro == 'ubuntu'
- name: add rustup stable toolchain
shell: "{{ cargo_env }} && rustup toolchain install stable && rustup default stable"
become: true
become_user: rust_build
changed_when: false
- name: add rustup nightly toolchain
shell: "{{ cargo_env }} && rustup toolchain install nightly"
become: true
become_user: rust_build
changed_when: false
- name: add rustup additional toolchains
shell: "{{ cargo_env }} && rustup toolchain install {{ item }}"
become: true
become_user: rust_build
changed_when: false
loop: "{{ cargo_crate_list|selectattr('toolchain', 'defined')|map(attribute='toolchain')|reject('in', ['none', 'stable', 'nightly'])|list }}"
- name: add additional targets
shell: "{{ cargo_env }} && rustup +{{ item.toolchain|default('stable') }} target add {{ item.target }}"
become: true
become_user: rust_build
changed_when: false
when:
- '"target" in item'
loop: "{{ cargo_crate_list }}"
- name: assert that nofeatures is not actually a flag
assert:
that: '"nofeatures" not in item.features|default([])'
msg: Wow, "nofeatures" is actually a feature. Update the playbook!
loop: "{{ cargo_crate_list }}"
- name: assert that only proper sources are defined
assert:
that: item.source|default("crates.io") in ("crates.io", "git")
msg: "Invalid source: {{ item.source|default('x') }}"
loop: "{{ cargo_crate_list }}"
- name: install required packages
package:
state: present
name: "{{ item.required_packages|map(attribute=distro)|list }}"
when: item.required_packages is defined
become: true
loop: "{{ cargo_crate_list }}"
- name: check if binary already exists for crates.io
stat:
path: /usr/local/lib/binaries/{{ binary_id_cratesio }}
register: rust_binary_cratesio
loop: "{{ cargo_crate_list }}"
loop_control:
label: "{{ item.binary }}"
when: item.source|default('crates.io') == 'crates.io'
check_mode: false
- name: check if binary already exists for git
stat:
path: /usr/local/lib/binaries/{{ binary_id_git }}
register: rust_binary_git
loop: "{{ cargo_crate_list }}"
loop_control:
label: "{{ item.binary }}"
when: item.source|default('crates.io') == 'git'
check_mode: false
- name: build rust crates from crates.io
shell: |
set -o errexit
{{ cargo_env }}
rustup run {{ item.toolchain|default('stable') }} cargo install --features "{{ item.features|default([])|join(' ') }}" {{ "--target " ~ item.target if item.target is defined else '' }} --version {{ item.version }} {{ item.crate }}
mv /var/lib/rust_build/.cargo/bin/{{ item.binary }} /var/lib/rust_build/.cargo/bin/{{ binary_id_cratesio }}
args:
creates: /var/lib/rust_build/.cargo/bin/{{ binary_id_cratesio }}
become: true # do not build as root!
become_user: rust_build
loop: "{{ cargo_crate_list }}"
when:
- item.source|default('crates.io') == 'crates.io'
- not ((rust_binary_cratesio.results | selectattr("item.binary", "match", item.binary)) | list) [0].stat.exists
- name: build rust crates from git
shell: |
set -o errexit
{{ cargo_env }}
rustup run {{ item.toolchain|default('stable') }} cargo install --features "{{ item.features|default([])|join(' ') }}" {{ "--target " ~ item.target if item.target is defined else '' }} --git {{ item.url }} --branch {{ item.branch }} {{ item.package|default("") }}
mv /var/lib/rust_build/.cargo/bin/{{ item.binary }} /var/lib/rust_build/.cargo/bin/{{ binary_id_git }}
args:
creates: /var/lib/rust_build/.cargo/bin/{{ binary_id_git }}
become: true # do not build as root!
become_user: rust_build
loop: "{{ cargo_crate_list }}"
when:
- item.source|default('crates.io') == 'git'
- not ((rust_binary_git.results | selectattr("item.binary", "match", item.binary)) | list)[0].stat.exists
- name: create target directory
file:
state: directory
path: /usr/local/lib/binaries/
owner: root
group: root
mode: '0775'
become: true
- name: move binaries for crates.io
shell: |
mv /var/lib/rust_build/.cargo/bin/{{ binary_id_cratesio }} /usr/local/lib/binaries/{{ binary_id_cratesio }}
args:
creates: /usr/local/lib/binaries/{{ binary_id_cratesio }}
become: true
loop: "{{ cargo_crate_list }}"
when:
- item.source|default('crates.io') == 'crates.io'
- not ((rust_binary_cratesio.results | selectattr("item.binary", "match", item.binary)) | list)[0].stat.exists
- name: move binaries for git
shell: |
mv /var/lib/rust_build/.cargo/bin/{{ binary_id_git }} /usr/local/lib/binaries/{{ binary_id_git }}
args:
creates: /usr/local/lib/binaries/{{ binary_id_git }}
become: true
loop: "{{ cargo_crate_list }}"
when:
- item.source|default('crates.io') == 'git'
- not ((rust_binary_git.results | selectattr("item.binary", "match", item.binary)) | list)[0].stat.exists
- name: link binaries for crates.io
file:
src: /usr/local/lib/binaries/{{ binary_id_cratesio }}
dest: /usr/local/bin/{{ item.binary }}
owner: root
group: root
state: link
force: true
become: true
loop: "{{ cargo_crate_list }}"
when: item.source|default('crates.io') == 'crates.io'
- name: link binaries for git
file:
src: /usr/local/lib/binaries/{{ binary_id_git }}
dest: /usr/local/bin/{{ item.binary }}
owner: root
group: root
state: link
force: true
become: true
loop: "{{ cargo_crate_list }}"
when: item.source|default('crates.io') == 'git'
# Important: clean up the symlinks BEFORE the binaries they point to.
# Otherwise, ansible will skip them because `ansible.builtin.fileglob`
# does not match broken symlinks for some reason.
- name: clean up old binaries for creates.io in /var/lib/rust_build
command: rm -- {{ binaries | join (" ") }}
vars:
binaries: "{{ lookup('ansible.builtin.fileglob', '/var/lib/rust_build/.cargo/bin/' ~ item.binary ~ '.*', wantlist=True) | reject('eq', '/var/lib/rust_build/.cargo/bin/' ~ binary_id_cratesio) | list }}"
changed_when: binaries | length > 0
loop: "{{ cargo_crate_list }}"
become: true
when:
- item.source|default('crates.io') == 'crates.io'
- binaries | length > 0
- name: clean up old binaries for creates.io in /usr/local/lib
command: rm -- {{ binaries | join (" ") }}
vars:
binaries: "{{ lookup('ansible.builtin.fileglob', '/usr/local/lib/binaries/' ~ item.binary ~ '.*', wantlist=True) | reject('eq', '/usr/local/lib/binaries/' ~ binary_id_cratesio) | list }}"
changed_when: binaries | length > 0
loop: "{{ cargo_crate_list }}"
become: true
when:
- item.source|default('crates.io') == 'crates.io'
- binaries | length > 0
- name: clean up old binaries for git in /var/lib/rust_build
command: rm -- {{ binaries | join (" ") }}
vars:
binaries: "{{ lookup('ansible.builtin.fileglob', '/var/lib/rust_build/.cargo/bin/' ~ item.binary ~ '.*', wantlist=True) | reject('eq', '/var/lib/rust_build/.cargo/bin/' ~ binary_id_git) | list }}"
changed_when: binaries | length > 0
loop: "{{ cargo_crate_list }}"
become: true
when:
- item.source|default('crates.io') == 'git'
- binaries | length > 0
- name: clean up old binaries for git in /usr/local/lib
command: rm -- {{ binaries | join (" ") }}
vars:
binaries: "{{ lookup('ansible.builtin.fileglob', '/usr/local/lib/binaries/' ~ item.binary ~ '.*', wantlist=True) | reject('eq', '/usr/local/lib/binaries/' ~ binary_id_git) | list }}"
changed_when: binaries | length > 0
loop: "{{ cargo_crate_list }}"
become: true
when:
- item.source|default('crates.io') == 'git'
- binaries | length > 0
vars:
binary_id_cratesio: "{{ item.binary }}.{{ item.toolchain|default('stable') }}.{{ item.features|default(['nofeatures'])|join('_') }}.{{ item.version }}"
binary_id_git: "{{ item.binary }}.{{ item.toolchain|default('stable') }}.{{ item.features|default(['nofeatures'])|join('_') }}.{{ item.branch }}"
tags:
- rust_binaries
- block:
- name: stat go target directory
stat:
path: /usr/local/go-v{{ go_version }}
register: go_target_stat
- block:
- name: create temporary directory for go download
tempfile:
state: directory
register: go_download
- name: download go
get_url:
url: https://golang.org/dl/go{{ go_version }}.linux-amd64.tar.gz
dest: "{{ go_download.path }}/go{{ go_version }}.linux-amd64.tar.gz"
force: false
- name: unpack go
unarchive:
src: "{{ go_download.path }}/go{{ go_version }}.linux-amd64.tar.gz"
owner: root
group: root
mode: '0755'
dest: "{{ go_download.path }}"
remote_src: true
become: true
- name: install new go version
command: mv "{{ go_download.path }}/go/" /usr/local/go-v{{ go_version }}
become: true
- name: clean up go download directory
file:
path: "{{ go_download.path }}"
state: absent
when: not go_target_stat.stat.exists and not ansible_check_mode
- name: link to the current go version
file:
src: /usr/local/go-v{{ go_version }}
dest: /usr/local/go
owner: root
group: root
state: link
force: true
become: true
- name: add go directory to PATH and set GOROOT
copy:
dest: /etc/profile.d/go.sh
content: |
export PATH=/usr/local/go/bin:$PATH
export GOROOT=/usr/local/go
owner: root
group: root
mode: '0644'
become: true
tags: [go]
- block:
- name: install alacritty build dependencies
package:
state: present
# https://github.com/alacritty/alacritty/blob/master/INSTALL.md#debianubuntu
name:
- cmake
- pkg-config
- libfreetype6-dev
- libfontconfig1-dev
- libxcb-xfixes0-dev
- libxkbcommon-dev
- python3
become: true
- name: stat alacritty binary
stat:
path: /usr/local/bin/alacritty
register: alacritty_binary
- name: create temporary directory for alacritty build
tempfile:
state: directory
register: alacritty_build_tempdir
become: true
become_user: rust_build
when: not alacritty_binary.stat.exists
- name: build alacritty
shell: . ~/.cargo/env && rustup run stable cargo install alacritty --root ./out
args:
chdir: "{{ alacritty_build_tempdir.path }}"
become: true
become_user: rust_build
when: not alacritty_binary.stat.exists
- name: install alacritty
command: mv "{{ alacritty_build_tempdir.path }}/out/bin/alacritty" /usr/local/bin/alacritty
become: true
when: not alacritty_binary.stat.exists
- name: clean up build directory
file:
path: "{{ alacritty_build_tempdir.path }}"
state: absent
become: true
become_user: rust_build
when: not alacritty_binary.stat.exists
when: distro == 'ubuntu'
tags: [alacritty]
- block:
- name: stat yubikey-touch-detector binary
stat:
path: /usr/local/bin/yubikey-touch-detector
register: yubikey_touch_detector_binary
- name: create temporary directory for yubikey-touch-detector build
tempfile:
state: directory
register: yubikey_touch_detector_build_tempdir
when: not yubikey_touch_detector_binary.stat.exists
- name: build yubikey-touch-detector
shell: sh -c 'PATH=/usr/local/go/bin:$PATH env GOROOT=/usr/local/go GOPATH=$(pwd) go install github.com/maximbaz/yubikey-touch-detector@main'
args:
chdir: "{{ yubikey_touch_detector_build_tempdir.path }}"
when: not yubikey_touch_detector_binary.stat.exists
- name: install yubikey-touch-detector
command: >
mv
"{{ yubikey_touch_detector_build_tempdir.path }}/bin/yubikey-touch-detector"
/usr/local/bin/yubikey-touch-detector
become: true
when: not yubikey_touch_detector_binary.stat.exists
- name: clean up build directory
file:
path: "{{ yubikey_touch_detector_build_tempdir.path }}"
state: absent
become: true
when: not yubikey_touch_detector_binary.stat.exists
when: distro == 'ubuntu'
tags: [yubikey-touch-detector]
- block:
- block:
- name: add spotify apt key
apt_key:
url: "https://download.spotify.com/debian/pubkey_5E3C45D7B312C643.gpg"
id: "5E3C45D7B312C643"
become: true
- name: add spotify repository
apt_repository:
repo: "deb http://repository.spotify.com stable non-free"
filename: spotify
become: true
- name: install spotify
apt:
name: spotify-client
update_cache: true
become: true
when: distro == 'ubuntu'
- block: - block:
- name: install spotify from AUR via paru - name: install spotify from AUR via paru
shell: | shell: |
@@ -908,7 +452,6 @@
become_user: paru become_user: paru
args: args:
creates: /usr/bin/spotify creates: /usr/bin/spotify
when: distro == 'archlinux'
tags: [spotify] tags: [spotify]

147
user.yml
View File

@@ -13,18 +13,6 @@
become: true become: true
become_user: root become_user: root
- set_fact:
user_groups:
- adm
- cdrom
- sudo
- dip
- plugdev
- docker
- libvirt
when: distro == 'ubuntu'
tags: [always]
- set_fact: - set_fact:
user_groups: user_groups:
- libvirt - libvirt
@@ -35,7 +23,6 @@
- sudonopw - sudonopw
- games - games
- kvm - kvm
when: distro == 'archlinux'
tags: [always] tags: [always]
- set_fact: - set_fact:
@@ -323,14 +310,6 @@
tags: [user-update] tags: [user-update]
tags: [vim-plugins] tags: [vim-plugins]
- block:
- name: install rustup on ubuntu
shell: curl https://sh.rustup.rs -sSf | sh -s -- -y --no-modify-path
args:
creates: ~/.cargo/bin/rustup
when: distro == 'ubuntu'
tags: [rust]
- block: - block:
- name: create firefox directories - name: create firefox directories
firefox_profile: firefox_profile:
@@ -523,135 +502,9 @@
group: "{{ user_group_name }}" group: "{{ user_group_name }}"
state: link state: link
force: true force: true
tags: tags:
- portfolio-performance - portfolio-performance
- block:
- name: get current stable version
uri:
url: https://storage.googleapis.com/kubernetes-release/release/stable.txt
return_content: true
register: kubectl_stable_version_api
check_mode: false
- set_fact:
kubectl_stable_version: "{{ kubectl_stable_version_api.content|trim }}"
- set_fact:
kubectl_outdated: "{{ kubectl_version != kubectl_stable_version }}"
- name: warn if not on stable version
fail:
msg: "installing kubectl {{ kubectl_version }}, stable version would be {{ kubectl_stable_version }}"
when: kubectl_outdated is sameas true
ignore_errors: True
- name: get kubectl
get_url:
url: https://storage.googleapis.com/kubernetes-release/release/{{ kubectl_version }}/bin/linux/amd64/kubectl
dest: /home/{{ user.name }}/.opt/kubectl-{{ kubectl_version }}
owner: "{{ user.name }}"
group: "{{ user_group_name }}"
mode: '0755'
force: false
- name: make kubectl executable
file:
path: /home/{{ user.name }}/.opt/kubectl-{{ kubectl_version }}
mode: '0755'
when: not ansible_check_mode
- name: link kubectl
file:
src: /home/{{ user.name }}/.opt/kubectl-{{ kubectl_version }}
dest: /home/{{ user.name }}/.optbin/kubectl
state: link
when: not ansible_check_mode
tags:
- kubectl
- block:
- set_fact:
tf_version: "{{ user.overrides.terraform_version|default(terraform_version) }}"
tf_check_updates: "{{ user.overrides.terraform_check_updates|default(terraform_check_updates)|default(true) }}"
- name: stat current terraform binary
stat:
path: "/home/{{ user.name }}/.opt/terraform-v{{ tf_version }}"
register: terraform_binary
check_mode: false
- name: create temporary download directory for terraform
tempfile:
state: directory
register: terraform_download_dir
when:
- not ansible_check_mode
- not terraform_binary.stat.exists
- name: get terraform
get_url:
url: "https://releases.hashicorp.com/terraform/{{ tf_version }}/terraform_{{ tf_version }}_linux_amd64.zip"
dest: "{{ terraform_download_dir.path }}/terraform.zip"
force: false
when:
- not ansible_check_mode
- not terraform_binary.stat.exists
- name: unpack terraform zip
unarchive:
src: "{{ terraform_download_dir.path }}/terraform.zip"
dest: "{{ terraform_download_dir.path }}/"
remote_src: true
when:
- not ansible_check_mode
- not terraform_binary.stat.exists
- name: install terraform
command: mv "{{ terraform_download_dir.path }}/terraform" /home/{{ user.name }}/.opt/terraform-v{{ tf_version }}
when:
- not ansible_check_mode
- not terraform_binary.stat.exists
- name: clean up download directory
file:
path: "{{ terraform_download_dir.path }}"
state: absent
when:
- not ansible_check_mode
- not terraform_binary.stat.exists
- name: link terraform
file:
src: /home/{{ user.name }}/.opt/terraform-v{{ tf_version }}
dest: /home/{{ user.name }}/.optbin/terraform
state: link
when: not ansible_check_mode
- block:
- name: get terraform version info
command: /home/{{ user.name }}/.optbin/terraform version -json
register: terraform_version_output
check_mode: false
changed_when: false
- name: parse terraform version output
set_fact:
terraform_outdated: "{{ (terraform_version_output.stdout | from_json()).terraform_outdated }}"
changed_when: false
- name: warn if terraform is outdated
fail:
msg: "current terraform v{{ tf_version }} is out of date"
when: terraform_outdated is sameas true
ignore_errors: True
when: tf_check_updates
tags:
- terraform
- name: handle autostart units - name: handle autostart units
block: block:
- name: create systemd user directory - name: create systemd user directory

View File

@@ -1,41 +1 @@
terraform_version: 1.3.6
kubectl_version: v1.26.0
go_version: "1.19.4"
portfolio_performace_version: "0.57.2" portfolio_performace_version: "0.57.2"
cargo_crate_list:
- crate: just
binary: just
version: 1.9.0
- crate: ripgrep
binary: rg
version: 13.0.0
features:
- pcre2
required_packages:
- ubuntu: libpcre2-dev
archlinux: pcre2
- crate: fd-find
binary: fd
version: 8.6.0
- crate: bat
binary: bat
version: 0.22.1
- crate: exa
binary: exa
version: 0.10.1
- crate: mdbook
binary: mdbook
version: 0.4.24
- url: https://github.com/hakoerber/git-repo-manager
binary: grm
branch: develop
source: git
toolchain: nightly
features:
- static-build
target: x86_64-unknown-linux-musl
- url: https://github.com/greshake/i3status-rust
binary: i3status-rs
branch: master
source: git
package: i3status-rs

View File

@@ -27,7 +27,3 @@ if [[ ! "$SSH_AUTH_SOCK" ]]; then
source "$XDG_RUNTIME_DIR/ssh-agent.env" >/dev/null source "$XDG_RUNTIME_DIR/ssh-agent.env" >/dev/null
fi fi
{% endif %} {% endif %}
{% if distro == 'ubuntu' %}
alias imv=imv-x11
{% endif %}