Group/host variable refactor

This commit is contained in:
Sonny Bakker 2025-03-15 00:05:30 +01:00
parent eb308670cc
commit 4b8aaf3e95
78 changed files with 445 additions and 374 deletions

View file

@ -1,5 +1,6 @@
[defaults] [defaults]
roles_path = ./roles roles_path = ./roles
inventory = inventory.yml
ask_vault_pass = true ask_vault_pass = true
[privilege_escalation] [privilege_escalation]

View file

@ -1,7 +0,0 @@
$ANSIBLE_VAULT;1.1;AES256
62383364643761623739623632633261343735343465336235386336333234656631363432623535
6562623634363937356137616131396264633161363461340a343432363362346664646161656563
35623334326238326135646261666330666531633831656564396139666261623937626338386632
3233333039623039640a383931633539363238326164643365316236326435643537303866373835
66393465663364303134376566623736636664353031336537663036636462613766343739336331
6438643538326533313433616438386165626537373162393430

View file

@ -1 +0,0 @@
YDH5lZcxUHM4AU2ZxQrFqjDIV2Z7PSUQKMcYXLExV0E=

View file

@ -1,7 +0,0 @@
$ANSIBLE_VAULT;1.1;AES256
34303432393930626266313563613636343439623631633163656532363631313039386231623936
3336636666626237316532346230303961323263613161320a383436636634376162353863386161
36663064366461333335613633316630633335666335613464333863656536623230383262623733
3065363835666231630a616362333233643637613762313437626366363365313831363661313336
66373966656534646462653833343935623466613662333932666666366430663061366261396330
3064636536643933613738356461313135363033633366396130

View file

@ -1,7 +0,0 @@
$ANSIBLE_VAULT;1.1;AES256
64663539393065396333623165623833636539633932306437363365656532343565643866616532
6562373233633237623761376234336331373637393431380a386261306438393837633037383464
64623965376138313665393239346138383230383565626264393635303835396537663865313237
6431313635333030390a646466303961663932353830366235643762393039396531316465333837
61613264356263616332633334386532303761353536663033373639626634396164623335626566
3632373266313435646338343738656663356635623138623939

View file

@ -1 +0,0 @@
hI4rqlv2afs4RJkt5xR+dYxQODSd6lR0OqWJRlnQdjM=

View file

@ -1,7 +0,0 @@
$ANSIBLE_VAULT;1.1;AES256
63643763346434313734663761386539393032613366626230373862643431613963633664353264
6466616235653963643861643439633537656439363735330a366439356537386662353431643163
33363830646433336366353363623835373639383663633837313030393162643931353331633133
6534363438303261320a333364313534336465616336386337383935353631646361623866326232
64373139636633393236303335396138326638333635663839663734346463303739646431353437
3838653361383663633632363862306565643531353066623336

View file

@ -1,16 +1,8 @@
#!/bin/bash #!/bin/bash
MAIN="main" MAIN="main"
DEVELOPMENT="development"
tmux start-server tmux start-server
tmux new-session -ds $MAIN tmux new-session -ds $MAIN
tmux new-window tmux new-window
tmux new-window
tmux select-window -t 0
tmux new-session -ds $DEVELOPMENT
tmux new-window
tmux new-window
tmux new-window
tmux select-window -t 0 tmux select-window -t 0

View file

@ -1,21 +1,13 @@
xdg_config_dir: '{{ ansible_env.HOME }}/.config' ansible_become_method: community.general.run0
xdg_script_dir: '{{ ansible_env.HOME }}/.local/bin'
register_uefi_entries: false
packages: packages:
- firefox - firefox
- mpv
- youtube-dl
- keepassxc - keepassxc
- gimp - gimp
- nftables - nftables
- mpd
- nfs-utils
- okular - okular
- postgresql - postgresql
- plasma-meta - plasma-meta
- syncthing
- wezterm - wezterm
- tmux - tmux
- unrar - unrar
@ -26,13 +18,11 @@ packages:
- iproute2 - iproute2
- curl - curl
- reflector - reflector
- laptop-detect
- pipewire - pipewire
- pipewire-pulse - pipewire-pulse
- pipewire-alsa - pipewire-alsa
- merkuro - merkuro
- kmail - kmail
- wireguard-tools
- otf-monaspace-nerd - otf-monaspace-nerd
- systemd-ukify - systemd-ukify
- efibootmgr - efibootmgr
@ -40,14 +30,16 @@ packages:
- aspell-nl - aspell-nl
- aspell-en - aspell-en
platform_packages: [] xdg_config_dir: '{{ ansible_env.HOME }}/.config'
xdg_script_dir: '{{ ansible_env.HOME }}/.local/bin'
modprobe_templates: [] modprobe_templates: []
mkinitcpio_templates: [] mkinitcpio_templates: []
boot_configuration: boot_configuration:
vpn_config_dir: '/etc/wireguard'
server_domain: fudiggity.nl server_domain: fudiggity.nl
register_uefi_entries: false
wezterm_font_size: 12 wezterm_font_size: 12

View file

@ -0,0 +1,39 @@
packages:
- keepassxc
- gimp
- nftables
- okular
- postgresql
- plasma-meta
- wezterm
- tmux
- unrar
- vim
- git
- openssl
- kmail
- iproute2
- curl
- reflector
- pipewire
- pipewire-pulse
- pipewire-alsa
- merkuro
- kmail
- otf-monaspace-nerd
- systemd-ukify
- efibootmgr
- git-delta
- aspell-nl
- aspell-en
# custom packages
- firefox
- mpv
- youtube-dl
- nfs-utils
- syncthing
- mpd
- wireguard-tools
vpn_config_dir: '/etc/wireguard'

View file

@ -57,7 +57,6 @@
name: iwd name: iwd
state: restarted state: restarted
enabled: true enabled: true
when: platform == "laptop"
- name: stop mpd service - name: stop mpd service
systemd: systemd:

View file

@ -1,17 +1,15 @@
platform_packages: []
modprobe_templates: modprobe_templates:
- src: 'templates/desktop/modprobe/99-amdgpu.conf.j2' - src: 'templates/personal/desktop/modprobe/99-amdgpu.conf.j2'
dest: '/etc/modprobe.d/99-amdgpu.conf' dest: '/etc/modprobe.d/99-amdgpu.conf'
mkinitcpio_templates: mkinitcpio_templates:
- src: 'templates/desktop/mkinitcpio/1-modules.conf.j2' - src: 'templates/personal/desktop/mkinitcpio/1-modules.conf.j2'
dest: '/etc/mkinitcpio.conf.d/1-amdgpu.conf' dest: '/etc/mkinitcpio.conf.d/1-amdgpu.conf'
- src: 'templates/desktop/mkinitcpio/linux.preset.j2' - src: 'templates/personal/desktop/mkinitcpio/linux.preset.j2'
dest: '/etc/mkinitcpio.d/linux.preset' dest: '/etc/mkinitcpio.d/linux.preset'
- src: 'templates/desktop/mkinitcpio/linux-lts.preset.j2' - src: 'templates/personal/desktop/mkinitcpio/linux-lts.preset.j2'
dest: '/etc/mkinitcpio.d/linux-lts.preset' dest: '/etc/mkinitcpio.d/linux-lts.preset'
boot_configuration: boot_configuration:

View file

@ -24,7 +24,7 @@ vpn_default:
endpoint: '{{ server_domain }}:51902' endpoint: '{{ server_domain }}:51902'
public_key: 'CeybSMpJiicXmndIuhe89Bay3z3PEdYNyAwIFsacBEo=' public_key: 'CeybSMpJiicXmndIuhe89Bay3z3PEdYNyAwIFsacBEo='
preshared_key_path: '{{ vpn_config_dir }}/keys/private/default/preshared-zeus.psk' preshared_key_path: '{{ vpn_config_dir }}/keys/private/default/preshared-zeus.psk'
preshared_key_source_path: 'files/desktop/wireguard/default/preshared.psk' preshared_key_source_path: 'files/personal/desktop/wireguard/default/preshared.psk'
vpn_media: vpn_media:
ip: '10.0.1.3' ip: '10.0.1.3'
@ -36,7 +36,7 @@ vpn_media:
public_key_path: '{{ vpn_config_dir }}/keys/public/media/desktop.pub' public_key_path: '{{ vpn_config_dir }}/keys/public/media/desktop.pub'
private_key_path: '{{ vpn_config_dir }}/keys/private/media/desktop.key' private_key_path: '{{ vpn_config_dir }}/keys/private/media/desktop.key'
private_key_source_path: 'files/desktop/wireguard/media/desktop.key' private_key_source_path: 'files/personal/desktop/wireguard/media/desktop.key'
peers: peers:
- name: 'zeus-media' - name: 'zeus-media'
@ -46,4 +46,4 @@ vpn_media:
endpoint: '{{ server_domain }}.nl:51903' endpoint: '{{ server_domain }}.nl:51903'
public_key: 'EugKeo63C5N5kz9ShMHtYswO9Qh6mE00MtfLSFmqqjg=' public_key: 'EugKeo63C5N5kz9ShMHtYswO9Qh6mE00MtfLSFmqqjg='
preshared_key_path: '{{ vpn_config_dir }}/keys/private/media/preshared-zeus.psk' preshared_key_path: '{{ vpn_config_dir }}/keys/private/media/preshared-zeus.psk'
preshared_key_source_path: 'files/desktop/wireguard/media/preshared.psk' preshared_key_source_path: 'files/personal/desktop/wireguard/media/preshared.psk'

61
host_vars/xps/system.yml Normal file
View file

@ -0,0 +1,61 @@
packages:
- keepassxc
- gimp
- nftables
- okular
- postgresql
- plasma-meta
- wezterm
- tmux
- unrar
- vim
- git
- openssl
- kmail
- iproute2
- curl
- reflector
- pipewire
- pipewire-pulse
- pipewire-alsa
- merkuro
- kmail
- otf-monaspace-nerd
- systemd-ukify
- efibootmgr
- git-delta
- aspell-nl
- aspell-en
# custom packages
- firefox
- mpv
- youtube-dl
- nfs-utils
- syncthing
- mpd
- wireguard-tools
# custom host packages
- iwd
- nvidia
- nvidia-prime
- nvidia-utils
- lib32-nvidia-utils
boot_configuration:
disk: /dev/nvme0n1
partition: 1
mkinitcpio_templates:
- src: 'templates/personal/xps/mkinitcpio/1-modules.conf.j2'
dest: '/etc/mkinitcpio.conf.d/1-modules.conf'
- src: 'templates/personal/xps/mkinitcpio/2-hooks.conf.j2'
dest: '/etc/mkinitcpio.conf.d/2-hooks.conf'
- src: 'templates/personal/xps/mkinitcpio/linux.preset.j2'
dest: '/etc/mkinitcpio.d/linux.preset'
- src: 'templates/personal/xps/mkinitcpio/linux-lts.preset.j2'
dest: '/etc/mkinitcpio.d/linux-lts.preset'

View file

@ -23,7 +23,7 @@ vpn_default:
endpoint: '{{ server_domain }}:51902' endpoint: '{{ server_domain }}:51902'
public_key: 'CeybSMpJiicXmndIuhe89Bay3z3PEdYNyAwIFsacBEo=' public_key: 'CeybSMpJiicXmndIuhe89Bay3z3PEdYNyAwIFsacBEo='
preshared_key_path: '{{ vpn_config_dir }}/keys/private/default/preshared-zeus.psk' preshared_key_path: '{{ vpn_config_dir }}/keys/private/default/preshared-zeus.psk'
preshared_key_source_path: 'files/laptop/wireguard/default/preshared.psk' preshared_key_source_path: 'files/personal/xps/wireguard/default/preshared.psk'
vpn_media: vpn_media:
ip: '10.0.1.2' ip: '10.0.1.2'
@ -44,4 +44,4 @@ vpn_media:
endpoint: '{{ server_domain }}:51903' endpoint: '{{ server_domain }}:51903'
public_key: 'EugKeo63C5N5kz9ShMHtYswO9Qh6mE00MtfLSFmqqjg=' public_key: 'EugKeo63C5N5kz9ShMHtYswO9Qh6mE00MtfLSFmqqjg='
preshared_key_path: '{{ vpn_config_dir }}/keys/private/media/preshared-zeus.psk' preshared_key_path: '{{ vpn_config_dir }}/keys/private/media/preshared-zeus.psk'
preshared_key_source_path: 'files/laptop/wireguard/media/preshared.psk' preshared_key_source_path: 'files/personal/xps/wireguard/media/preshared.psk'

6
inventory.yml Normal file
View file

@ -0,0 +1,6 @@
personal:
hosts:
xps:
ansible_connection: local
desktop:
ansible_connection: local

View file

@ -1,61 +1,21 @@
- name: Arch Linux provisioning - name: Arch Linux provisioning
hosts: localhost hosts:
pre_tasks: - xps
- name: Install shared packages - desktop
become: true gather_facts: true
community.general.pacman:
name: '{{ packages }}'
- name: Platform vars
tags: platform_vars
block:
- name: Detect platform
ansible.builtin.command: laptop-detect
register: is_laptop
failed_when: is_laptop.rc == 2
- name: Set platform (desktop)
ansible.builtin.set_fact:
platform: desktop
when: is_laptop.rc == 1
- name: Set platform (laptop)
ansible.builtin.set_fact:
platform: laptop
when: is_laptop.rc == 0
- name: Load desktop specific vars
ansible.builtin.include_vars:
dir: vars/desktop
when: platform == 'desktop'
- name: Load laptop specific vars
ansible.builtin.include_vars:
dir: vars/laptop
when: platform == 'laptop'
- name: Install platform specific packages
become: true
community.general.pacman:
name: '{{ platform_packages }}'
when: platform_packages | length > 0
roles: roles:
- common - common
tasks: tasks:
- name: Verifying that a limit is set
ansible.builtin.fail:
msg: 'This playbook cannot be run with no limit'
run_once: true
when: ansible_limit is not defined
- name: Generic provisioning - name: Generic provisioning
ansible.builtin.import_tasks: 'tasks/setup.yml' ansible.builtin.import_tasks: 'tasks/setup.yml'
tags: setup tags: setup
- name: Desktop provisioning
ansible.builtin.import_tasks: 'tasks/setup-desktop.yml'
when: platform == 'desktop'
tags: laptop
- name: Laptop provisioning
ansible.builtin.import_tasks: 'tasks/setup-laptop.yml'
when: platform == 'laptop'
tags: laptop
- name: Network provisioning - name: Network provisioning
ansible.builtin.import_tasks: 'tasks/network.yml' ansible.builtin.import_tasks: 'tasks/network.yml'
tags: network tags: network
@ -64,33 +24,46 @@
ansible.builtin.import_tasks: 'tasks/systemd.yml' ansible.builtin.import_tasks: 'tasks/systemd.yml'
tags: systemd tags: systemd
# TODO: move to development playbook
- name: Git provisioning - name: Git provisioning
ansible.builtin.import_tasks: 'tasks/git.yml' ansible.builtin.import_tasks: 'tasks/git.yml'
tags: git tags: git
- name: MPV provisioning
ansible.builtin.import_tasks: 'tasks/mpv.yml'
tags: mpv
- name: MPD provisioning
ansible.builtin.import_tasks: 'tasks/mpd.yml'
tags: mpd
- name: Syncthing provisioning
ansible.builtin.import_tasks: 'tasks/syncthing.yml'
tags: syncthing
- name: Systemd timer provisioning - name: Systemd timer provisioning
ansible.builtin.import_tasks: 'tasks/timer.yml' ansible.builtin.import_tasks: 'tasks/timer.yml'
tags: timers tags: timers
- name: Personal provisiong
when: "'personal' in group_names"
block:
- name: Wireguard provisioning
ansible.builtin.import_tasks: 'tasks/personal/wireguard.yml'
tags: wireguard
- name: MPV provisioning
ansible.builtin.import_tasks: 'tasks/personal/mpv.yml'
tags: mpv
- name: MPD provisioning
ansible.builtin.import_tasks: 'tasks/personal/mpd.yml'
tags: mpd
- name: Syncthing provisioning
ansible.builtin.import_tasks: 'tasks/personal/syncthing.yml'
tags: syncthing
- name: Desktop provisioning
ansible.builtin.import_tasks: 'tasks/personal/desktop.yml'
when: ansible_hostname == 'desktop'
tags: desktop
- name: XPS provisioning
ansible.builtin.import_tasks: 'tasks/personal/xps.yml'
when: ansible_hostname == 'xps'
tags: xps
handlers: handlers:
- name: Import default handlers - name: Import default handlers
ansible.builtin.import_tasks: 'handlers.yml' ansible.builtin.import_tasks: 'handlers.yml'
- name: Import common role handlers - name: Import common role handlers
ansible.builtin.import_tasks: 'roles/common/handlers/user.yml' ansible.builtin.import_tasks: 'roles/common/handlers/user.yml'
vars_files:
- 'vars/main.yml'
- 'vars/gpg.yml'
- 'vars/mpd.yml'

View file

@ -1,24 +1,28 @@
- name: copy git configuration - name: Copy git configuration
template: ansible.builtin.template:
src: 'templates/gitconfig.j2' src: 'templates/gitconfig.j2'
dest: '{{ ansible_env.HOME }}/.gitconfig' dest: '{{ ansible_env.HOME }}/.gitconfig'
mode: '0755'
- name: copy keys - name: Copy keys
copy: ansible.builtin.copy:
src: '{{ item.src }}' src: '{{ item.src }}'
dest: '{{ item.dest }}' dest: '{{ item.dest }}'
mode: '0755'
loop: loop:
- { src: 'files/gpg_key', dest: '{{ ansible_env.HOME }}/gpg.key' } - src: 'files/personal/gpg/gpg_key'
- { src: 'files/gpg_pub', dest: '{{ ansible_env.HOME }}/gpg.pub' } dest: '{{ ansible_env.HOME }}/gpg.key'
- src: 'files/personal/gpg/gpg_pub'
dest: '{{ ansible_env.HOME }}/gpg.pub'
- name: import secret key - name: Import secret key
command: 'gpg --passphrase {{ gpg_passphrase }} --import ~/gpg.key' ansible.builtin.command: 'gpg --passphrase {{ gpg_passphrase }} --import ~/gpg.key'
- name: import public key - name: Import public key
command: 'gpg --import ~/gpg.pub' ansible.builtin.command: 'gpg --import ~/gpg.pub'
- name: remove temp keys - name: Remove temp keys
file: ansible.builtin.file:
path: '{{ item }}' path: '{{ item }}'
state: absent state: absent
loop: loop:

View file

@ -1,20 +0,0 @@
- name: create configuration directory
file:
path: '{{ ansible_env.HOME }}/.config/mpv'
state: directory
mode: '0700'
- name: copy configuration files
template:
src: '{{ item.src }}'
dest: '{{ item.dest }}'
mode: '0644'
loop:
- {
src: 'templates/mpv/input.j2',
dest: '{{ ansible_env.HOME }}/.config/mpv/input.conf',
}
- {
src: 'templates/mpv/config.j2',
dest: '{{ ansible_env.HOME }}/.config/mpv/mpv.conf',
}

View file

@ -3,67 +3,25 @@
# using `wg set wg0 peer izHzmRwh2yzICps6pFI2Bg3TnmTD66/8uH4loJpkuD4= endpoint <NEW-IP>:<PORT>` # using `wg set wg0 peer izHzmRwh2yzICps6pFI2Bg3TnmTD66/8uH4loJpkuD4= endpoint <NEW-IP>:<PORT>`
# for example. # for example.
- name: Create Wireguard directories - name: Copy firewall template
become: true become: true
ansible.builtin.file: ansible.builtin.template:
path: '{{ item }}' src: "{{ lookup('ansible.builtin.first_found', paths) }}"
dest: '/etc/nftables.conf'
owner: root owner: root
group: systemd-network group: root
mode: '0750' mode: '0600'
state: directory vars:
recurse: true paths:
loop: - 'templates/{{ ansible_hostname }}/nftables.j2'
- '{{ vpn_config_dir }}' - 'templates/{{ group_names[0] }}/{{ ansible_hostname }}/nftables.j2'
- '{{ vpn_default.private_key_path | dirname }}' notify: restart nftables
- '{{ vpn_default.public_key_path | dirname }}'
- '{{ vpn_media.private_key_path | dirname }}'
- '{{ vpn_media.public_key_path | dirname }}'
notify:
- restart systemd-networkd
- restart systemd-resolved
- name: Copy Wireguard credentials
become: true
ansible.builtin.copy:
src: '{{ item.src }}'
dest: '{{ item.dest }}'
owner: root
group: systemd-network
mode: '0640'
loop:
- dest: '{{ vpn_default.public_key_path }}'
src: 'files/{{ platform }}/wireguard/default/{{ platform }}.pub'
- dest: '{{ vpn_default.private_key_path }}'
src: 'files/{{ platform }}/wireguard/default/{{ platform }}.key'
- dest: '{{ vpn_media.public_key_path }}'
src: 'files/{{ platform }}/wireguard/media/{{ platform }}.pub'
- dest: '{{ vpn_media.private_key_path }}'
src: 'files/{{ platform }}/wireguard/media/{{ platform }}.key'
notify:
- restart systemd-networkd
- restart systemd-resolved
- name: Copy Wireguard preshared keys
become: true
ansible.builtin.copy:
src: '{{ item.preshared_key_source_path }}'
dest: '{{ item.preshared_key_path }}'
owner: root
group: systemd-network
mode: '0640'
loop: '{{ vpn_default.peers + vpn_media.peers }}'
notify:
- restart systemd-networkd
- restart systemd-resolved
- name: Desktop configuration - name: Desktop configuration
notify: notify:
- restart systemd-networkd - restart systemd-networkd
- restart systemd-resolved - restart systemd-resolved
when: platform == "desktop" when: ansible_hostname == 'desktop'
block: block:
- name: Setup network configuration - name: Setup network configuration
become: true become: true
@ -74,21 +32,9 @@
group: systemd-network group: systemd-network
mode: '0640' mode: '0640'
loop: loop:
- src: 'templates/desktop/network/enp.network.j2' - src: 'templates/personal/desktop/network/enp.network.j2'
dest: '/etc/systemd/network/20-wired.network' dest: '/etc/systemd/network/20-wired.network'
- src: 'templates/desktop/network/wg0.network.j2'
dest: '/etc/systemd/network/40-wg0.network'
- src: 'templates/desktop/network/wg0.netdev.j2'
dest: '/etc/systemd/network/40-wg0.netdev'
- src: 'templates/desktop/network/wg1.network.j2'
dest: '/etc/systemd/network/40-wg1.network'
- src: 'templates/desktop/network/wg1.netdev.j2'
dest: '/etc/systemd/network/40-wg1.netdev'
- name: Remove leftover configuration files - name: Remove leftover configuration files
become: true become: true
ansible.builtin.file: ansible.builtin.file:
@ -98,12 +44,12 @@
- '/etc/systemd/network/30-vmbr0.network' - '/etc/systemd/network/30-vmbr0.network'
- '/etc/systemd/network/30-vmbr0.netdev' - '/etc/systemd/network/30-vmbr0.netdev'
- name: Laptop configuration - name: XPS configuration
notify: notify:
- restart systemd-networkd - restart systemd-networkd
- restart systemd-resolved - restart systemd-resolved
- restart iwd - restart iwd
when: platform == "laptop" when: ansible_hostname == 'xps'
block: block:
- name: Setup network configuration - name: Setup network configuration
become: true become: true
@ -114,21 +60,9 @@
group: systemd-network group: systemd-network
mode: '0640' mode: '0640'
loop: loop:
- src: 'templates/laptop/network/wireless.network.j2' - src: 'templates/personal/xps/network/wireless.network.j2'
dest: '/etc/systemd/network/20-wireless.network' dest: '/etc/systemd/network/20-wireless.network'
- src: 'templates/laptop/network/wg0.network.j2'
dest: '/etc/systemd/network/40-wg0.network'
- src: 'templates/laptop/network/wg0.netdev.j2'
dest: '/etc/systemd/network/40-wg0.netdev'
- src: 'templates/laptop/network/wg1.network.j2'
dest: '/etc/systemd/network/40-wg1.network'
- src: 'templates/laptop/network/wg1.netdev.j2'
dest: '/etc/systemd/network/40-wg1.netdev'
- name: Remove leftover configuration files - name: Remove leftover configuration files
become: true become: true
ansible.builtin.file: ansible.builtin.file:
@ -137,13 +71,3 @@
loop: loop:
- '/etc/systemd/network/30-vmbr0.network' - '/etc/systemd/network/30-vmbr0.network'
- '/etc/systemd/network/30-vmbr0.netdev' - '/etc/systemd/network/30-vmbr0.netdev'
- name: Copy firewall template
become: true
ansible.builtin.template:
src: 'templates/{{ platform }}/nftables.j2'
dest: '/etc/nftables.conf'
owner: root
group: root
mode: '0600'
notify: restart nftables

View file

@ -1,10 +1,12 @@
- name: Create xdg-desktop-portal.service.d directory - name: Create xdg-desktop-portal.service.d directory
file: ansible.builtin.file:
path: '{{ xdg_config_dir }}/systemd/user/xdg-desktop-portal.service.d' path: '{{ xdg_config_dir }}/systemd/user/xdg-desktop-portal.service.d'
state: directory state: directory
mode: '0755'
- name: Copy xdg-desktop-portal.service drop-in - name: Copy xdg-desktop-portal.service drop-in
template: ansible.builtin.template:
src: templates/desktop/xdg-desktop-portal.service.j2 src: templates/personal/desktop/xdg-desktop-portal.service.j2
dest: '{{ xdg_config_dir }}/systemd/user/xdg-desktop-portal.service.d/override.conf' dest: '{{ xdg_config_dir }}/systemd/user/xdg-desktop-portal.service.d/override.conf'
mode: '0755'
notify: user daemon-reload notify: user daemon-reload

View file

@ -4,10 +4,10 @@
dest: '{{ item.dest }}' dest: '{{ item.dest }}'
mode: '0644' mode: '0644'
loop: loop:
- src: 'templates/mpd/service.j2' - src: 'templates/personal/mpd/service.j2'
dest: '{{ xdg_config_dir }}/systemd/user/mpd.service' dest: '{{ xdg_config_dir }}/systemd/user/mpd.service'
- src: 'templates/mpd/socket.j2' - src: 'templates/personal/mpd/socket.j2'
dest: '{{ xdg_config_dir }}/systemd/user/mpd.socket' dest: '{{ xdg_config_dir }}/systemd/user/mpd.socket'
notify: notify:
- stop mpd service - stop mpd service
@ -34,6 +34,7 @@
ansible.builtin.file: ansible.builtin.file:
path: '{{ item.path }}' path: '{{ item.path }}'
state: '{{ item.state }}' state: '{{ item.state }}'
mode: '0755'
loop: loop:
- path: '{{ mpd_configuration_dir }}/log' - path: '{{ mpd_configuration_dir }}/log'
state: 'absent' state: 'absent'
@ -50,11 +51,11 @@
dest: '{{ item.dest }}' dest: '{{ item.dest }}'
mode: '0755' mode: '0755'
loop: loop:
- src: 'templates/mpd/mpd.conf.j2' - src: 'templates/personal/mpd/mpd.conf.j2'
dest: '{{ mpd_configuration_dir }}/mpd.conf' dest: '{{ mpd_configuration_dir }}/mpd.conf'
- src: 'templates/mpd/ncmpcpp/config.j2' - src: 'templates/personal/mpd/ncmpcpp/config.j2'
dest: '{{ ncmpcpp_configuration_dir }}/config' dest: '{{ ncmpcpp_configuration_dir }}/config'
- src: 'templates/mpd/ncmpcpp/bindings.j2' - src: 'templates/personal/mpd/ncmpcpp/bindings.j2'
dest: '{{ ncmpcpp_configuration_dir }}/bindings' dest: '{{ ncmpcpp_configuration_dir }}/bindings'
notify: notify:
- stop mpd service - stop mpd service

16
tasks/personal/mpv.yml Normal file
View file

@ -0,0 +1,16 @@
- name: Create configuration directory
ansible.builtin.file:
path: '{{ ansible_env.HOME }}/.config/mpv'
state: directory
mode: '0700'
- name: Copy configuration files
ansible.builtin.template:
src: '{{ item.src }}'
dest: '{{ item.dest }}'
mode: '0644'
loop:
- src: 'templates/personal/mpv/input.j2'
dest: '{{ ansible_env.HOME }}/.config/mpv/input.conf'
- src: 'templates/personal/mpv/config.j2'
dest: '{{ ansible_env.HOME }}/.config/mpv/mpv.conf'

View file

@ -0,0 +1,112 @@
# Note: Only compatible with personal group
- name: Create Wireguard directories
become: true
ansible.builtin.file:
path: '{{ item }}'
owner: root
group: systemd-network
mode: '0750'
state: directory
recurse: true
loop:
- '{{ vpn_config_dir }}'
- '{{ vpn_default.private_key_path | dirname }}'
- '{{ vpn_default.public_key_path | dirname }}'
- '{{ vpn_media.private_key_path | dirname }}'
- '{{ vpn_media.public_key_path | dirname }}'
notify:
- restart systemd-networkd
- restart systemd-resolved
- name: Copy Wireguard credentials
become: true
ansible.builtin.copy:
src: '{{ item.src }}'
dest: '{{ item.dest }}'
owner: root
group: systemd-network
mode: '0640'
loop:
- dest: '{{ vpn_default.public_key_path }}'
src: 'files/personal/{{ ansible_hostname }}/wireguard/default/{{ ansible_hostname }}.pub'
- dest: '{{ vpn_default.private_key_path }}'
src: 'files/personal/{{ ansible_hostname }}/wireguard/default/{{ ansible_hostname }}.key'
- dest: '{{ vpn_media.public_key_path }}'
src: 'files/personal/{{ ansible_hostname }}/wireguard/media/{{ ansible_hostname }}.pub'
- dest: '{{ vpn_media.private_key_path }}'
src: 'files/personal/{{ ansible_hostname }}/wireguard/media/{{ ansible_hostname }}.key'
notify:
- restart systemd-networkd
- restart systemd-resolved
- name: Copy Wireguard preshared keys
become: true
ansible.builtin.copy:
src: '{{ item.preshared_key_source_path }}'
dest: '{{ item.preshared_key_path }}'
owner: root
group: systemd-network
mode: '0640'
loop: '{{ vpn_default.peers + vpn_media.peers }}'
notify:
- restart systemd-networkd
- restart systemd-resolved
- name: Desktop configuration
notify:
- restart systemd-networkd
- restart systemd-resolved
when: ansible_hostname == 'desktop'
block:
- name: Setup network configuration
become: true
ansible.builtin.template:
src: '{{ item.src }}'
dest: '{{ item.dest }}'
owner: root
group: systemd-network
mode: '0640'
loop:
- src: 'templates/personal/desktop/network/wg0.network.j2'
dest: '/etc/systemd/network/40-wg0.network'
- src: 'templates/personal/desktop/network/wg0.netdev.j2'
dest: '/etc/systemd/network/40-wg0.netdev'
- src: 'templates/personal/desktop/network/wg1.network.j2'
dest: '/etc/systemd/network/40-wg1.network'
- src: 'templates/personal/desktop/network/wg1.netdev.j2'
dest: '/etc/systemd/network/40-wg1.netdev'
- name: XPS configuration
notify:
- restart systemd-networkd
- restart systemd-resolved
- restart iwd
when: ansible_hostname == 'xps'
block:
- name: Setup network configuration
become: true
ansible.builtin.template:
src: '{{ item.src }}'
dest: '{{ item.dest }}'
owner: root
group: systemd-network
mode: '0640'
loop:
- src: 'templates/personal/xps/network/wg0.network.j2'
dest: '/etc/systemd/network/40-wg0.network'
- src: 'templates/personal/xps/network/wg0.netdev.j2'
dest: '/etc/systemd/network/40-wg0.netdev'
- src: 'templates/personal/xps/network/wg1.network.j2'
dest: '/etc/systemd/network/40-wg1.network'
- src: 'templates/personal/xps/network/wg1.netdev.j2'
dest: '/etc/systemd/network/40-wg1.netdev'

View file

@ -1,7 +1,7 @@
- name: Provision powertop systemd service - name: Provision powertop systemd service
become: true become: true
ansible.builtin.template: ansible.builtin.template:
src: 'templates/laptop/powertop.service.j2' src: 'templates/personal/xps/powertop.service.j2'
dest: '/etc/systemd/system/powertop.service' dest: '/etc/systemd/system/powertop.service'
owner: root owner: root
group: root group: root

View file

@ -1,166 +1,183 @@
- name: copy reflector configuration - name: Provision pollkit administrator configuration
become: true become: true
template: ansible.builtin.template:
src: 'templates/polkit.j2'
dest: '/etc/polkit-1/rules.d/49-nopasswd_global.rules'
mode: '0755'
- name: Install shared packages
become: true
community.general.pacman:
name: '{{ packages }}'
- name: Copy reflector configuration
become: true
ansible.builtin.template:
src: 'templates/reflector.j2' src: 'templates/reflector.j2'
dest: '/etc/xdg/reflector/reflector.conf' dest: '/etc/xdg/reflector/reflector.conf'
owner: root
group: root
mode: '0600' mode: '0600'
# started by weekly timer # started by weekly timer
- name: disable reflector - name: Disable reflector
become: true become: true
systemd: ansible.builtin.systemd:
name: reflector name: reflector
state: stopped state: stopped
enabled: false enabled: false
- name: copy pacman configuration - name: Copy pacman configuration
become: true become: true
template: ansible.builtin.template:
src: 'templates/pacman.j2' src: 'templates/pacman.j2'
dest: '/etc/pacman.conf' dest: '/etc/pacman.conf'
owner: root owner: root
group: root group: root
mode: '0644' mode: '0644'
- name: create extra conf - name: Create extra conf
become: true become: true
file: ansible.builtin.file:
path: '/etc/pacman.d/extra.conf' path: '/etc/pacman.d/extra.conf'
owner: root owner: root
group: root group: root
state: touch state: touch
mode: '0644' mode: '0644'
- name: create wezterm configuration dir - name: Create wezterm configuration dir
file: ansible.builtin.file:
path: '{{ xdg_config_dir }}/wezterm/includes' path: '{{ xdg_config_dir }}/wezterm/includes'
state: directory state: directory
mode: '0755'
- name: copy wezterm configuration files - name: Copy wezterm configuration files
template: ansible.builtin.template:
src: '{{ item.src }}' src: '{{ item.src }}'
dest: '{{ item.dest }}' dest: '{{ item.dest }}'
mode: '0755'
loop: loop:
- { - src: 'templates/wezterm/wezterm.lua.j2'
src: 'templates/wezterm/wezterm.lua.j2', dest: '{{ xdg_config_dir }}/wezterm/wezterm.lua'
dest: '{{ xdg_config_dir }}/wezterm/wezterm.lua'
}
- {
src: 'templates/wezterm/includes/colors.lua.j2',
dest: '{{ xdg_config_dir }}/wezterm/includes/colors.lua'
}
- {
src: 'templates/wezterm/includes/fonts.lua.j2',
dest: '{{ xdg_config_dir }}/wezterm/includes/fonts.lua'
}
- {
src: 'templates/wezterm/includes/window.lua.j2',
dest: '{{ xdg_config_dir }}/wezterm/includes/window.lua'
}
- name: enable fstrim timer - src: 'templates/wezterm/includes/colors.lua.j2'
dest: '{{ xdg_config_dir }}/wezterm/includes/colors.lua'
- src: 'templates/wezterm/includes/fonts.lua.j2'
dest: '{{ xdg_config_dir }}/wezterm/includes/fonts.lua'
- src: 'templates/wezterm/includes/window.lua.j2'
dest: '{{ xdg_config_dir }}/wezterm/includes/window.lua'
- name: Enable fstrim timer
become: true become: true
systemd: ansible.builtin.systemd:
name: fstrim.timer name: fstrim.timer
enabled: true enabled: true
- name: remove the sysctl.d directory - name: Remove the sysctl.d directory
become: true become: true
file: ansible.builtin.file:
path: /etc/sysctl.d path: /etc/sysctl.d
state: absent state: absent
- name: recreate the sysctl.d directory - name: Recreate the sysctl.d directory
become: true become: true
file: ansible.builtin.file:
path: /etc/sysctl.d path: /etc/sysctl.d
state: directory state: directory
mode: 755 mode: '0755'
- name: copy sysctl files - name: Copy sysctl files
become: true become: true
template: when: "'personal' not in group_names"
ansible.builtin.template:
src: '{{ item.src }}' src: '{{ item.src }}'
dest: '{{ item.dest }}' dest: '{{ item.dest }}'
mode: '0755'
loop: loop:
- { - src: 'templates/sysctl/99-sysrq.conf.j2'
src: 'templates/{{ platform }}/sysctl/99-sysrq.conf.j2', dest: '/etc/sysctl.d/99-sysrq.conf'
dest: '/etc/sysctl.d/99-sysrq.conf' - src: 'templates/sysctl/98-forward.conf.j2'
} dest: '/etc/sysctl.d/98-foward.conf'
- {
src: 'templates/{{ platform }}/sysctl/98-forward.conf.j2',
dest: '/etc/sysctl.d/98-foward.conf'
}
notify: reload sysctl configuration notify: reload sysctl configuration
- name: remove the modprobe.d directory - name: Remove the modprobe.d directory
become: true become: true
file: ansible.builtin.file:
path: /etc/modprobe.d path: /etc/modprobe.d
state: absent state: absent
- name: recreate the modprobe.d directory - name: Recreate the modprobe.d directory
become: true become: true
file: ansible.builtin.file:
path: /etc/modprobe.d path: /etc/modprobe.d
state: directory state: directory
mode: 755 mode: '0755'
- name: copy modprobe configuration files - name: Copy modprobe configuration files
become: true become: true
template: ansible.builtin.template:
src: '{{ item.src }}' src: '{{ item.src }}'
dest: '{{ item.dest }}' dest: '{{ item.dest }}'
mode: '0755'
loop: '{{ modprobe_templates }}' loop: '{{ modprobe_templates }}'
when: modprobe_templates when: modprobe_templates
- name: copy kernel parameters template - name: Copy kernel parameters template
become: true become: true
template: when: "'personal' not in group_names"
src: 'templates/{{ platform }}/cmdline.j2' ansible.builtin.template:
src: 'templates/{{ ansible_hostname }}/cmdline.j2'
dest: '/etc/kernel/cmdline' dest: '/etc/kernel/cmdline'
mode: '0755'
- name: remove the mkinitcpio directories - name: Copy kernel parameters template for personal group
become: true become: true
file: when: "'personal' in group_names"
ansible.builtin.template:
src: 'templates/personal/{{ ansible_hostname }}/cmdline.j2'
dest: '/etc/kernel/cmdline'
mode: '0755'
- name: Remove the mkinitcpio directories
become: true
ansible.builtin.file:
path: '{{ item }}' path: '{{ item }}'
state: absent state: absent
loop: loop:
- /etc/mkinitcpio.conf.d - /etc/mkinitcpio.conf.d
- /etc/mkinitcpio.d - /etc/mkinitcpio.d
- name: recreate the mkinitcpio directories - name: Recreate the mkinitcpio directories
become: true become: true
file: ansible.builtin.file:
path: '{{ item }}' path: '{{ item }}'
state: directory state: directory
mode: 755 mode: '0755'
loop: loop:
- /etc/mkinitcpio.conf.d - /etc/mkinitcpio.conf.d
- /etc/mkinitcpio.d - /etc/mkinitcpio.d
- name: copy mkinitcpio configuration files - name: Copy mkinitcpio configuration files
become: true become: true
template: ansible.builtin.template:
src: '{{ item.src }}' src: '{{ item.src }}'
dest: '{{ item.dest }}' dest: '{{ item.dest }}'
mode: '0755'
loop: '{{ mkinitcpio_templates }}' loop: '{{ mkinitcpio_templates }}'
when: mkinitcpio_templates when: mkinitcpio_templates
- name: regenerate initramfs images - name: Regenerate initramfs images
become: true become: true
command: 'mkinitcpio --allpresets' ansible.builtin.command: 'mkinitcpio --allpresets'
register: mkinitcpio_stats register: mkinitcpio_stats
- name: log mkinitcpio stdout - name: Log mkinitcpio stdout
debug: ansible.builtin.debug:
var: mkinitcpio_stats.stdout_lines var: mkinitcpio_stats.stdout_lines
- name: create a Linux UEFI boot entry - name: Create a Linux UEFI boot entry
become: true become: true
command: efibootmgr \ ansible.builtin.command: efibootmgr \
--create \ --create \
--disk '{{ boot_configuration.disk }}' \ --disk '{{ boot_configuration.disk }}' \
--part '{{ boot_configuration.partition }}' \ --part '{{ boot_configuration.partition }}' \
@ -171,14 +188,14 @@
register: efi_linux_stats register: efi_linux_stats
when: register_uefi_entries when: register_uefi_entries
- name: log efibootmgr stdout - name: Log efibootmgr stdout
debug: ansible.builtin.debug:
var: efi_linux_stats.stdout_lines var: efi_linux_stats.stdout_lines
when: register_uefi_entries when: register_uefi_entries
- name: create a Linux LTS UEFI boot entry - name: Create a Linux LTS UEFI boot entry
become: true become: true
command: efibootmgr \ ansible.builtin.command: efibootmgr \
--create \ --create \
--disk '{{ boot_configuration.disk }}' \ --disk '{{ boot_configuration.disk }}' \
--part '{{ boot_configuration.partition }}' \ --part '{{ boot_configuration.partition }}' \
@ -189,7 +206,7 @@
register: efi_linux_lts_stats register: efi_linux_lts_stats
when: register_uefi_entries when: register_uefi_entries
- name: log efibootmgr LTS stdout - name: Log efibootmgr LTS stdout
debug: ansible.builtin.debug:
var: efi_linux_lts_stats.stdout_lines var: efi_linux_lts_stats.stdout_lines
when: register_uefi_entries when: register_uefi_entries

View file

@ -1,18 +1,18 @@
- name: setup systemd user service folder - name: Setup systemd user service folder
file: ansible.builtin.file:
path: '{{ xdg_config_dir }}/systemd/user' path: '{{ xdg_config_dir }}/systemd/user'
state: directory state: directory
mode: '0755' mode: '0755'
- name: add ssh-agent service - name: Add ssh-agent service
template: ansible.builtin.template:
src: 'templates/ssh-agent.j2' src: 'templates/ssh-agent.j2'
dest: '{{ xdg_config_dir }}/systemd/user/ssh-agent.service' dest: '{{ xdg_config_dir }}/systemd/user/ssh-agent.service'
mode: '0644' mode: '0644'
notify: restart user ssh-agent notify: restart user ssh-agent
- name: copy tmux service - name: Copy tmux service
template: ansible.builtin.template:
src: 'templates/tmux.j2' src: 'templates/tmux.j2'
dest: '{{ xdg_config_dir }}/systemd/user/tmux.service' dest: '{{ xdg_config_dir }}/systemd/user/tmux.service'
mode: '0644' mode: '0644'
@ -20,8 +20,8 @@
- user daemon-reload - user daemon-reload
- restart tmux service - restart tmux service
- name: copy tmux startup script - name: Copy tmux startup script
copy: ansible.builtin.copy:
src: 'files/tmux_start' src: 'files/tmux_start'
dest: '{{ ansible_env.HOME }}/.local/bin/tmux_start' dest: '{{ ansible_env.HOME }}/.local/bin/tmux_start'
mode: '0740' mode: '0740'

View file

@ -1,2 +0,0 @@
# {{ ansible_managed }}
net.ipv4.ip_forward = 1

View file

@ -1,2 +0,0 @@
# {{ ansible_managed }}
kernel.sysrq = 1

11
templates/polkit.j2 Normal file
View file

@ -0,0 +1,11 @@
/* {{ ansible_managed }}
*
* Allow members of the wheel group to execute any actions
* without password authentication, similar to "sudo NOPASSWD:"
* without password authentication, similar to "sudo NOPASSWD:"
*/
polkit.addRule(function(action, subject) {
if (subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
});

View file

@ -1,23 +0,0 @@
platform_packages:
- iwd
- nvidia
- nvidia-prime
- nvidia-utils
- lib32-nvidia-utils
boot_configuration:
disk: /dev/nvme0n1
partition: 1
mkinitcpio_templates:
- src: 'templates/laptop/mkinitcpio/1-modules.conf.j2'
dest: '/etc/mkinitcpio.conf.d/1-modules.conf'
- src: 'templates/laptop/mkinitcpio/2-hooks.conf.j2'
dest: '/etc/mkinitcpio.conf.d/2-hooks.conf'
- src: 'templates/laptop/mkinitcpio/linux.preset.j2'
dest: '/etc/mkinitcpio.d/linux.preset'
- src: 'templates/laptop/mkinitcpio/linux-lts.preset.j2'
dest: '/etc/mkinitcpio.d/linux-lts.preset'