Merge remote-tracking branch 'origin'
This commit is contained in:
commit
dc6af1cb63
|
@ -4,6 +4,7 @@ dev_stuffs:
|
||||||
- ansible
|
- ansible
|
||||||
- docker
|
- docker
|
||||||
- network
|
- network
|
||||||
|
- nix
|
||||||
- perl
|
- perl
|
||||||
- php
|
- php
|
||||||
- python
|
- python
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
---
|
||||||
- name: Default
|
- name: Default
|
||||||
hosts: all
|
hosts: all
|
||||||
roles:
|
roles:
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
|
---
|
||||||
- name: Set variables
|
- name: Set variables
|
||||||
set_fact:
|
ansible.builtin.set_fact:
|
||||||
manjaro: "{{ ansible_lsb.id == 'Manjaro' or ansible_lsb.id == 'Manjaro-ARM' }}"
|
manjaro: "{{ ansible_lsb.id == 'Manjaro' or ansible_lsb.id == 'Manjaro-ARM' }}"
|
||||||
|
|
||||||
- name: Enable passwordless sudo access to wheel group (Others)
|
- name: Enable passwordless sudo access to wheel group (Others)
|
||||||
lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: /etc/sudoers
|
path: /etc/sudoers
|
||||||
line: "%wheel ALL=(ALL) NOPASSWD: ALL"
|
line: "%wheel ALL=(ALL) NOPASSWD: ALL"
|
||||||
regexp: "^#? *%wheel ALL=\\(ALL\\) NOPASSWD: ALL$"
|
regexp: "^#? *%wheel ALL=\\(ALL\\) NOPASSWD: ALL$"
|
||||||
become: yes
|
become: true
|
||||||
when: not manjaro
|
when: not manjaro
|
||||||
|
|
||||||
- name: Enable passwordless sudo access to wheel group (Manjaro)
|
- name: Enable passwordless sudo access to wheel group (Manjaro)
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
content: "%wheel ALL=(ALL) NOPASSWD: ALL"
|
content: "%wheel ALL=(ALL) NOPASSWD: ALL"
|
||||||
dest: /etc/sudoers.d/11-wheel-nopasswd
|
dest: /etc/sudoers.d/11-wheel-nopasswd
|
||||||
mode: "u=rwx,g=rx,o="
|
mode: u=rwx,g=rx,o=
|
||||||
when: manjaro
|
when: manjaro
|
||||||
become: yes
|
become: true
|
||||||
# /etc/sudoers.d/10-installer is the same thing,
|
# /etc/sudoers.d/10-installer is the same thing,
|
||||||
# but **with** a password, and it's overwritten
|
# but **with** a password, and it's overwritten
|
||||||
# with each upgrade of manjaro-system, hence this.
|
# with each upgrade of manjaro-system, hence this.
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
- name: xrdb-reload
|
---
|
||||||
command: "xrdb -I{{ ansible_env.HOME }} {{ ansible_env.HOME }}/.config/Xresources/main"
|
- name: Xrdb-reload
|
||||||
|
ansible.builtin.command: xrdb -I{{ ansible_env.HOME }} {{ ansible_env.HOME }}/.config/Xresources/main
|
||||||
- name: i3-reload
|
listen: xrdb-reload
|
||||||
command: i3-msg reload
|
- name: I3-reload
|
||||||
|
ansible.builtin.command: i3-msg reload
|
||||||
- name: shell-reload
|
listen: i3-reload
|
||||||
command: "{{ ansible_env.HOME }}/.local/bin/colorSchemeApply"
|
- name: Shell-reload
|
||||||
|
ansible.builtin.command: "{{ ansible_env.HOME }}/.local/bin/colorSchemeApply"
|
||||||
- name: fzf-reload
|
listen: shell-reload
|
||||||
shell: "source {{ ansible_env.HOME }}/.local/bin/colorSchemeApplyFzf"
|
- name: Fzf-reload
|
||||||
|
ansible.builtin.shell: source {{ ansible_env.HOME }}/.local/bin/colorSchemeApplyFzf
|
||||||
- name: qutebrowser-reload
|
listen: fzf-reload
|
||||||
shell: "! pgrep qutebrowser || qutebrowser :config-source"
|
- name: Qutebrowser-reload
|
||||||
|
ansible.builtin.shell: "! pgrep qutebrowser || qutebrowser :config-source"
|
||||||
|
listen: qutebrowser-reload
|
||||||
|
|
|
@ -1,22 +1,24 @@
|
||||||
|
---
|
||||||
- name: Ensure directories for desktop applications are present
|
- name: Ensure directories for desktop applications are present
|
||||||
file:
|
ansible.builtin.file:
|
||||||
state: directory
|
state: directory
|
||||||
path: "{{ ansible_user_dir }}/{{ item }}"
|
path: "{{ ansible_user_dir }}/{{ item }}"
|
||||||
mode: "u=rwx,g=rx,o=rx"
|
mode: u=rwx,g=rx,o=rx
|
||||||
with_items:
|
with_items:
|
||||||
- ".config/Xresources"
|
- .config/Xresources
|
||||||
- ".config/rofi"
|
- .config/rofi
|
||||||
- ".local/bin"
|
- .local/bin
|
||||||
- ".local/share/fonts"
|
- .local/share/fonts
|
||||||
- ".config/qutebrowser"
|
- .config/qutebrowser
|
||||||
- ".config/tridactyl/themes"
|
- .config/tridactyl/themes
|
||||||
|
|
||||||
# Download fonts
|
# Download fonts
|
||||||
- name: Download Nerd fonts
|
- name: Download Nerd fonts
|
||||||
get_url:
|
ansible.builtin.get_url:
|
||||||
url: "https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/patched-fonts/DejaVuSansMono/{{ item.folder }}/complete/{{ item.filename | urlencode }}"
|
url: https://raw.githubusercontent.com/ryanoasis/nerd-fonts/704336735f576781b2a57b12a0c723e3316cbdec/patched-fonts/DejaVuSansMono/{{ item.folder }}/complete/{{
|
||||||
|
item.filename | urlencode }}
|
||||||
dest: "{{ ansible_user_dir }}/.local/share/fonts/{{ item.filename }}"
|
dest: "{{ ansible_user_dir }}/.local/share/fonts/{{ item.filename }}"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
loop:
|
loop:
|
||||||
- filename: DejaVu Sans Mono Bold Nerd Font Complete Mono.ttf
|
- filename: DejaVu Sans Mono Bold Nerd Font Complete Mono.ttf
|
||||||
folder: Bold
|
folder: Bold
|
||||||
|
@ -28,15 +30,16 @@
|
||||||
folder: Italic
|
folder: Italic
|
||||||
|
|
||||||
- name: Download icon fonts
|
- name: Download icon fonts
|
||||||
get_url:
|
ansible.builtin.get_url:
|
||||||
url: "https://raw.githubusercontent.com/FortAwesome/Font-Awesome/a8386aae19e200ddb0f6845b5feeee5eb7013687/fonts/fontawesome-webfont.ttf"
|
url: https://raw.githubusercontent.com/FortAwesome/Font-Awesome/a8386aae19e200ddb0f6845b5feeee5eb7013687/fonts/fontawesome-webfont.ttf
|
||||||
dest: "{{ ansible_user_dir }}/.local/share/fonts/fontawesome-webfont.ttf"
|
dest: "{{ ansible_user_dir }}/.local/share/fonts/fontawesome-webfont.ttf"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
# TODO Either replace with ForkAwesome or Nerd Fonts
|
# TODO Either replace with ForkAwesome or Nerd Fonts
|
||||||
|
|
||||||
- name: Install python dependencies for lemonbar
|
- name: Install python dependencies for lemonbar
|
||||||
pip:
|
ansible.builtin.pip:
|
||||||
requirements: "{{ ansible_user_dir }}/.dotfiles/config/lemonbar/requirements.txt"
|
requirements: "{{ ansible_user_dir }}/.dotfiles/config/lemonbar/requirements.txt"
|
||||||
|
extra_args: --break-system-packages # It's fine, it's local anyways
|
||||||
|
|
||||||
# Build a single color scheme and template and assign it to a variable
|
# Build a single color scheme and template and assign it to a variable
|
||||||
- base16_builder:
|
- base16_builder:
|
||||||
|
@ -58,20 +61,20 @@
|
||||||
- i3
|
- i3
|
||||||
|
|
||||||
- name: Configure Alacritty
|
- name: Configure Alacritty
|
||||||
template:
|
ansible.builtin.template:
|
||||||
src: "{{ ansible_env.HOME }}/.config/alacritty/alacritty.yml.j2"
|
src: "{{ ansible_env.HOME }}/.config/alacritty/alacritty.yml.j2"
|
||||||
dest: "{{ ansible_env.HOME }}/.config/alacritty/alacritty.yml"
|
dest: "{{ ansible_env.HOME }}/.config/alacritty/alacritty.yml"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
# Alacritty has live config reload, so no command to execute
|
# Alacritty has live config reload, so no command to execute
|
||||||
# However, it doesn't work with yaml includes, hence the template
|
# However, it doesn't work with yaml includes, hence the template
|
||||||
tags:
|
tags:
|
||||||
- color
|
- color
|
||||||
|
|
||||||
- name: Set base16 theme for Xresources
|
- name: Set base16 theme for Xresources
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
content: "{{ base16_schemes['schemes'][base16_scheme]['xresources']['xresources']['base16-' + base16_scheme + '-256.Xresources'] }}"
|
content: "{{ base16_schemes['schemes'][base16_scheme]['xresources']['xresources']['base16-' + base16_scheme + '-256.Xresources'] }}"
|
||||||
dest: "{{ ansible_env.HOME }}/.config/Xresources/theme"
|
dest: "{{ ansible_env.HOME }}/.config/Xresources/theme"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
notify:
|
notify:
|
||||||
- xrdb-reload
|
- xrdb-reload
|
||||||
tags:
|
tags:
|
||||||
|
@ -79,30 +82,30 @@
|
||||||
when: display_server == 'x11'
|
when: display_server == 'x11'
|
||||||
|
|
||||||
- name: Download base16 theme for qutebrowser
|
- name: Download base16 theme for qutebrowser
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
content: "{{ base16_schemes['schemes'][base16_scheme]['qutebrowser']['themes/minimal']['base16-' + base16_scheme + '.config.py'] }}"
|
content: "{{ base16_schemes['schemes'][base16_scheme]['qutebrowser']['themes/minimal']['base16-' + base16_scheme + '.config.py'] }}"
|
||||||
dest: "{{ ansible_env.HOME }}/.config/qutebrowser/theme.py"
|
dest: "{{ ansible_env.HOME }}/.config/qutebrowser/theme.py"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
notify:
|
notify:
|
||||||
- qutebrowser-reload
|
- qutebrowser-reload
|
||||||
tags:
|
tags:
|
||||||
- color
|
- color
|
||||||
|
|
||||||
- name: Download base16 theme for Tridactyl
|
- name: Download base16 theme for Tridactyl
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
content: "{{ base16_schemes['schemes'][base16_scheme]['tridactyl']['base16-' + base16_scheme + '.config.py'] }}"
|
content: "{{ base16_schemes['schemes'][base16_scheme]['tridactyl']['base16-' + base16_scheme + '.config.py'] }}"
|
||||||
# url: "https://raw.githubusercontent.com/bezmi/base16-tridactyl/master/base16-{{ base16_scheme }}.css"
|
# url: "https://raw.githubusercontent.com/bezmi/base16-tridactyl/master/base16-{{ base16_scheme }}.css"
|
||||||
dest: "{{ ansible_env.HOME }}/.config/tridactyl/themes/theme.css"
|
dest: "{{ ansible_env.HOME }}/.config/tridactyl/themes/theme.css"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
when: False # Not currently used
|
when: false # Not currently used
|
||||||
tags:
|
tags:
|
||||||
- color
|
- color
|
||||||
|
|
||||||
- name: Configure i3
|
- name: Configure i3
|
||||||
template:
|
ansible.builtin.template:
|
||||||
src: "{{ ansible_env.HOME }}/.config/i3/config.j2"
|
src: "{{ ansible_env.HOME }}/.config/i3/config.j2"
|
||||||
dest: "{{ ansible_env.HOME }}/.config/i3/config"
|
dest: "{{ ansible_env.HOME }}/.config/i3/config"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
notify:
|
notify:
|
||||||
- i3-reload
|
- i3-reload
|
||||||
tags:
|
tags:
|
||||||
|
@ -111,10 +114,10 @@
|
||||||
when: display_server == 'x11'
|
when: display_server == 'x11'
|
||||||
|
|
||||||
- name: Set base16 theme for rofi
|
- name: Set base16 theme for rofi
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
content: "{{ base16_schemes['schemes'][base16_scheme]['rofi']['themes']['base16-' + base16_scheme + '.' + item] }}"
|
content: "{{ base16_schemes['schemes'][base16_scheme]['rofi']['themes']['base16-' + base16_scheme + '.' + item] }}"
|
||||||
dest: "{{ ansible_env.HOME }}/.config/rofi/theme.{{ item }}"
|
dest: "{{ ansible_env.HOME }}/.config/rofi/theme.{{ item }}"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
tags:
|
tags:
|
||||||
- color
|
- color
|
||||||
loop:
|
loop:
|
||||||
|
@ -122,49 +125,49 @@
|
||||||
- rasi
|
- rasi
|
||||||
|
|
||||||
- name: Configure Dunst
|
- name: Configure Dunst
|
||||||
template:
|
ansible.builtin.template:
|
||||||
src: "{{ ansible_env.HOME }}/.config/dunst/dunstrc.j2"
|
src: "{{ ansible_env.HOME }}/.config/dunst/dunstrc.j2"
|
||||||
dest: "{{ ansible_env.HOME }}/.config/dunst/dunstrc"
|
dest: "{{ ansible_env.HOME }}/.config/dunst/dunstrc"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
tags:
|
tags:
|
||||||
- color
|
- color
|
||||||
when: display_server == 'x11'
|
when: display_server == 'x11'
|
||||||
|
|
||||||
- name: Download base16 theme for fzf
|
- name: Download base16 theme for fzf
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
content: "{{ base16_schemes['schemes'][base16_scheme]['fzf']['bash']['base16-' + base16_scheme + '.config'] }}"
|
content: "{{ base16_schemes['schemes'][base16_scheme]['fzf']['bash']['base16-' + base16_scheme + '.config'] }}"
|
||||||
dest: "{{ ansible_env.HOME }}/.local/bin/colorSchemeApplyFzf"
|
dest: "{{ ansible_env.HOME }}/.local/bin/colorSchemeApplyFzf"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
notify:
|
notify:
|
||||||
- fzf-reload
|
- fzf-reload
|
||||||
tags:
|
tags:
|
||||||
- color
|
- color
|
||||||
|
|
||||||
- name: Download base16 theme for shell
|
- name: Download base16 theme for shell
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
content: "{{ base16_schemes['schemes'][base16_scheme]['shell']['script']['base16-' + base16_scheme + '.sh'] }}"
|
content: "{{ base16_schemes['schemes'][base16_scheme]['shell']['script']['base16-' + base16_scheme + '.sh'] }}"
|
||||||
dest: "{{ ansible_env.HOME }}/.local/bin/colorSchemeApply"
|
dest: "{{ ansible_env.HOME }}/.local/bin/colorSchemeApply"
|
||||||
mode: "u=rwx,g=rx,o=rx"
|
mode: u=rwx,g=rx,o=rx
|
||||||
notify:
|
notify:
|
||||||
- shell-reload
|
- shell-reload
|
||||||
when: False # Not currently used
|
when: false # Not currently used
|
||||||
tags:
|
tags:
|
||||||
- color
|
- color
|
||||||
|
|
||||||
- name: Set used base16 theme for vim
|
- name: Set used base16 theme for vim
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
path: "{{ ansible_env.HOME }}/.config/vim/colorscheme.vim"
|
path: "{{ ansible_env.HOME }}/.config/vim/colorscheme.vim"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
content: "colorscheme base16-{{ base16_scheme }}"
|
content: colorscheme base16-{{ base16_scheme }}
|
||||||
when: False # Not currently used
|
when: false # Not currently used
|
||||||
tags:
|
tags:
|
||||||
- color
|
- color
|
||||||
|
|
||||||
- name: Enable user services
|
- name: Enable user services
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
name: "{{ item }}"
|
name: "{{ item }}"
|
||||||
state: started
|
state: started
|
||||||
enabled: yes
|
enabled: true
|
||||||
scope: user
|
scope: user
|
||||||
loop:
|
loop:
|
||||||
- pulseaudio
|
- pulseaudio
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
- name: install dotfiles
|
---
|
||||||
command: "{{ ansible_user_dir }}/.dotfiles/config/scripts/dotfiles install"
|
- name: Install dotfiles
|
||||||
# TODO A python module to do that, so without an handler
|
ansible.builtin.command: "{{ ansible_user_dir }}/.dotfiles/config/scripts/dotfiles install"
|
||||||
|
|
|
@ -1,31 +1,32 @@
|
||||||
|
---
|
||||||
- name: Ensure directories for applications are present
|
- name: Ensure directories for applications are present
|
||||||
file:
|
ansible.builtin.file:
|
||||||
state: directory
|
state: directory
|
||||||
path: "{{ ansible_user_dir }}/{{ item }}"
|
path: "{{ ansible_user_dir }}/{{ item }}"
|
||||||
mode: "u=rwx,g=rx,o=rx"
|
mode: u=rwx,g=rx,o=rx
|
||||||
with_items:
|
with_items:
|
||||||
- ".cache/zsh"
|
- .cache/zsh
|
||||||
- ".cache/mpd"
|
- .cache/mpd
|
||||||
- ".ssh"
|
- .ssh
|
||||||
- ".local/bin"
|
- .local/bin
|
||||||
- ".ansible/collections/ansible_collections/geoffreyfrogeye"
|
- .ansible/collections/ansible_collections/geoffreyfrogeye
|
||||||
|
|
||||||
- name: Install dotfiles repository
|
- name: Install dotfiles repository
|
||||||
git:
|
ansible.builtin.git:
|
||||||
repo: "{% if has_forge_access %}git@git.frogeye.fr:{% else %}https://git.frogeye.fr/{% endif %}geoffrey/dotfiles.git"
|
repo: "{% if has_forge_access %}git@git.frogeye.fr:{% else %}https://git.frogeye.fr/{% endif %}geoffrey/dotfiles.git"
|
||||||
dest: "{{ ansible_user_dir }}/.dotfiles"
|
dest: "{{ ansible_user_dir }}/.dotfiles"
|
||||||
update: yes
|
update: true
|
||||||
notify: install dotfiles
|
notify: install dotfiles
|
||||||
tags: dotfiles_repo
|
tags: dotfiles_repo
|
||||||
# TODO Put actual dotfiles in a subdirectory of the repo, so we don't have to put everything in config
|
# TODO Put actual dotfiles in a subdirectory of the repo, so we don't have to put everything in config
|
||||||
|
|
||||||
- name: Register as Ansible collection
|
- name: Register as Ansible collection
|
||||||
file:
|
ansible.builtin.file:
|
||||||
state: link
|
state: link
|
||||||
src: "{{ ansible_user_dir }}/.dotfiles/config/automatrop"
|
src: "{{ ansible_user_dir }}/.dotfiles/config/automatrop"
|
||||||
path: "{{ ansible_user_dir }}/.ansible/collections/ansible_collections/geoffreyfrogeye/automatrop"
|
path: "{{ ansible_user_dir }}/.ansible/collections/ansible_collections/geoffreyfrogeye/automatrop"
|
||||||
|
|
||||||
- name: Install python dependencies for scripts
|
- name: Install python dependencies for scripts
|
||||||
pip:
|
ansible.builtin.pip:
|
||||||
requirements: "{{ ansible_user_dir }}/.dotfiles/config/scripts/requirements.txt"
|
requirements: "{{ ansible_user_dir }}/.dotfiles/config/scripts/requirements.txt"
|
||||||
|
extra_args: --break-system-packages # It's fine, it's local anyways
|
||||||
|
|
|
@ -1,34 +1,35 @@
|
||||||
|
---
|
||||||
- name: Setup pam_encryptfs auth
|
- name: Setup pam_encryptfs auth
|
||||||
blockinfile:
|
ansible.builtin.blockinfile:
|
||||||
path: /etc/pam.d/system-auth
|
path: /etc/pam.d/system-auth
|
||||||
block: |
|
block: |
|
||||||
auth [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
|
auth [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
|
||||||
auth required pam_ecryptfs.so unwrap
|
auth required pam_ecryptfs.so unwrap
|
||||||
insertafter: '^(auth\s+required\s+pam_unix.so|auth\s+\[default=die\]\s+pam_faillock.so\s+authfail)$'
|
insertafter: ^(auth\s+required\s+pam_unix.so|auth\s+\[default=die\]\s+pam_faillock.so\s+authfail)$
|
||||||
marker: "# {mark} AUTOMATROP ECRYPTFS_AUTOMOUNT AUTH"
|
marker: "# {mark} AUTOMATROP ECRYPTFS_AUTOMOUNT AUTH"
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
|
|
||||||
- name: Setup pam_encryptfs password
|
- name: Setup pam_encryptfs password
|
||||||
blockinfile:
|
ansible.builtin.blockinfile:
|
||||||
path: /etc/pam.d/system-auth
|
path: /etc/pam.d/system-auth
|
||||||
block: |
|
block: |
|
||||||
password optional pam_ecryptfs.so unwrap
|
password optional pam_ecryptfs.so unwrap
|
||||||
insertbefore: '^(password\s+required\s+pam_unix.so|-password\s+\[success=1\s+default=ignore\]\s+pam_systemd_home.so)$'
|
insertbefore: ^(password\s+required\s+pam_unix.so|-password\s+\[success=1\s+default=ignore\]\s+pam_systemd_home.so)$
|
||||||
marker: "# {mark} AUTOMATROP ECRYPTFS_AUTOMOUNT PASSWORD"
|
marker: "# {mark} AUTOMATROP ECRYPTFS_AUTOMOUNT PASSWORD"
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
|
|
||||||
- name: Setup pam_encryptfs session
|
- name: Setup pam_encryptfs session
|
||||||
blockinfile:
|
ansible.builtin.blockinfile:
|
||||||
path: /etc/pam.d/system-auth
|
path: /etc/pam.d/system-auth
|
||||||
block: |
|
block: |
|
||||||
session [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
|
session [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
|
||||||
session optional pam_ecryptfs.so unwrap
|
session optional pam_ecryptfs.so unwrap
|
||||||
insertafter: '^session\s+required\s+pam_unix.so$'
|
insertafter: ^session\s+required\s+pam_unix.so$
|
||||||
marker: "# {mark} AUTOMATROP ECRYPTFS_AUTOMOUNT SESSION"
|
marker: "# {mark} AUTOMATROP ECRYPTFS_AUTOMOUNT SESSION"
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
|
---
|
||||||
- name: Load extensions
|
- name: Load extensions
|
||||||
include_role:
|
ansible.builtin.include_role:
|
||||||
name: "geoffreyfrogeye.{{ extension }}automatrop.entry"
|
name: geoffreyfrogeye.{{ extension }}automatrop.entry
|
||||||
loop: "{{ extensions }}"
|
loop: "{{ extensions }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: extension
|
loop_var: extension
|
||||||
tags: always
|
tags: always
|
||||||
|
|
||||||
- name: Configure extensions rc sourcing
|
- name: Configure extensions rc sourcing
|
||||||
template:
|
ansible.builtin.template:
|
||||||
src: extrc.sh.j2
|
src: extrc.sh.j2
|
||||||
dest: "{{ ansible_user_dir }}/.config/shell/extrc"
|
dest: "{{ ansible_user_dir }}/.config/shell/extrc"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
---
|
||||||
- name: Set facts
|
- name: Set facts
|
||||||
set_fact:
|
ansible.builtin.set_fact:
|
||||||
arch_based: "{{ ansible_distribution == 'Archlinux' }}"
|
arch_based: "{{ ansible_distribution == 'Archlinux' }}"
|
||||||
arch: "{{ ansible_lsb.id == 'Arch' }}"
|
arch: "{{ ansible_lsb.id == 'Arch' }}"
|
||||||
manjaro: "{{ ansible_lsb.id == 'Manjaro' or ansible_lsb.id == 'Manjaro-ARM' }}"
|
manjaro: "{{ ansible_lsb.id == 'Manjaro' or ansible_lsb.id == 'Manjaro-ARM' }}"
|
||||||
|
@ -11,7 +12,7 @@
|
||||||
- always
|
- always
|
||||||
|
|
||||||
- name: Set composed facts
|
- name: Set composed facts
|
||||||
set_fact:
|
ansible.builtin.set_fact:
|
||||||
debian_based: "{{ debian or ubuntu }}"
|
debian_based: "{{ debian or ubuntu }}"
|
||||||
can_chown: "{{ not junest }}"
|
can_chown: "{{ not junest }}"
|
||||||
has_systemd: "{{ not junest }}"
|
has_systemd: "{{ not junest }}"
|
||||||
|
|
|
@ -1,22 +1,23 @@
|
||||||
|
---
|
||||||
- name: Create GnuPG directory
|
- name: Create GnuPG directory
|
||||||
file:
|
ansible.builtin.file:
|
||||||
path: "{{ gnupghome }}"
|
path: "{{ gnupghome }}"
|
||||||
state: directory
|
state: directory
|
||||||
mode: "u=rwx"
|
mode: u=rwx
|
||||||
|
|
||||||
- name: Create GnuPG configuration files
|
- name: Create GnuPG configuration files
|
||||||
file:
|
ansible.builtin.file:
|
||||||
path: "{{ gnupghome }}/{{ item }}"
|
path: "{{ gnupghome }}/{{ item }}"
|
||||||
state: file
|
state: file
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
loop:
|
loop:
|
||||||
- gpg-agent.conf
|
- gpg-agent.conf
|
||||||
- gpg.conf
|
- gpg.conf
|
||||||
|
|
||||||
- name: Configure GnuPG
|
- name: Configure GnuPG
|
||||||
lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: "{{ gnupghome }}/gpg.conf"
|
path: "{{ gnupghome }}/gpg.conf"
|
||||||
regex: "^#?\\s*{{ item.key }}\\s"
|
regex: ^#?\s*{{ item.key }}\s
|
||||||
line: "{{ item.key }}{% if item.value is defined %} {{ item.value }}{% endif %}"
|
line: "{{ item.key }}{% if item.value is defined %} {{ item.value }}{% endif %}"
|
||||||
loop:
|
loop:
|
||||||
# Remove fluff
|
# Remove fluff
|
||||||
|
@ -25,7 +26,7 @@
|
||||||
- key: no-comments
|
- key: no-comments
|
||||||
# Output format that I prefer
|
# Output format that I prefer
|
||||||
- key: keyid-format
|
- key: keyid-format
|
||||||
value: 0xlong
|
value: "0xlong"
|
||||||
# Show fingerprints
|
# Show fingerprints
|
||||||
- key: with-fingerprint
|
- key: with-fingerprint
|
||||||
# Make sure to show if key is invalid
|
# Make sure to show if key is invalid
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
|
---
|
||||||
gnupghome: "{{ ansible_user_dir }}/.config/gnupg"
|
gnupghome: "{{ ansible_user_dir }}/.config/gnupg"
|
||||||
|
|
|
@ -1,23 +1,24 @@
|
||||||
|
---
|
||||||
- name: Create and install meta package for Arch Linux
|
- name: Create and install meta package for Arch Linux
|
||||||
|
when: arch_based
|
||||||
|
|
||||||
block:
|
block:
|
||||||
- name: Generate meta package PKGBUILD
|
- name: Generate meta package PKGBUILD
|
||||||
template:
|
ansible.builtin.template:
|
||||||
src: PKGBUILD.j2
|
src: PKGBUILD.j2
|
||||||
dest: "{{ ansible_user_dir }}/.cache/automatrop/PKGBUILD"
|
dest: "{{ ansible_user_dir }}/.cache/automatrop/PKGBUILD"
|
||||||
listen: "software changed"
|
listen: software changed
|
||||||
|
|
||||||
- name: Install meta package
|
- name: Install meta package
|
||||||
aur:
|
aur:
|
||||||
name: "automatrop-packages-{{ inventory_hostname_short }}"
|
name: automatrop-packages-{{ inventory_hostname_short }}
|
||||||
local_pkgbuild: "{{ ansible_user_dir }}/.cache/automatrop"
|
local_pkgbuild: "{{ ansible_user_dir }}/.cache/automatrop"
|
||||||
use: makepkg
|
use: makepkg
|
||||||
state: latest
|
state: latest
|
||||||
listen: "software changed"
|
listen: software changed
|
||||||
when: root_access
|
when: root_access
|
||||||
when: arch_based
|
- name: Update pacman cache
|
||||||
|
community.general.pacman:
|
||||||
- name: update pacman cache
|
update_cache: true
|
||||||
pacman:
|
become: true
|
||||||
update_cache: yes
|
|
||||||
become: yes
|
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
|
@ -1,43 +1,43 @@
|
||||||
|
---
|
||||||
# TODO Install python if not done
|
# TODO Install python if not done
|
||||||
# Or maybe not, it requires a lot of automation for something that can be done
|
# Or maybe not, it requires a lot of automation for something that can be done
|
||||||
# very quickly manually and is usually already installed
|
# very quickly manually and is usually already installed
|
||||||
|
|
||||||
- name: Install python-apt dependency for Termux
|
- name: Install python-apt dependency for Termux
|
||||||
|
when: termux
|
||||||
|
vars:
|
||||||
|
version: 2.39
|
||||||
|
|
||||||
block:
|
block:
|
||||||
# TODO Check if the correct version
|
# TODO Check if the correct version
|
||||||
- name: Check for DistUtilsExtra (Termux)
|
- name: Check for DistUtilsExtra (Termux)
|
||||||
command: python -c 'import DistUtilsExtra'
|
ansible.builtin.command: python -c 'import DistUtilsExtra'
|
||||||
changed_when: False
|
changed_when: false
|
||||||
rescue:
|
rescue:
|
||||||
- name: Create temporarty folder for DistUtilsExtra (Termux)
|
- name: Create temporarty folder for DistUtilsExtra (Termux)
|
||||||
tempfile:
|
ansible.builtin.tempfile:
|
||||||
state: directory
|
state: directory
|
||||||
suffix: python-distutils-extra
|
suffix: python-distutils-extra
|
||||||
# path: /data/data/com.termux/files/usr/tmp/
|
# path: /data/data/com.termux/files/usr/tmp/
|
||||||
register: pde_tempdir
|
register: pde_tempdir
|
||||||
|
|
||||||
- name: Download DistUtilsExtra (Termux)
|
- name: Download DistUtilsExtra (Termux)
|
||||||
get_url:
|
ansible.builtin.get_url:
|
||||||
url: "https://launchpad.net/python-distutils-extra/trunk/{{ version }}/+download/python-distutils-extra-{{ version }}.tar.gz"
|
url: https://launchpad.net/python-distutils-extra/trunk/{{ version }}/+download/python-distutils-extra-{{ version }}.tar.gz
|
||||||
dest: "{{ pde_tempdir.path }}/python-distutils-extra.tar.gz"
|
dest: "{{ pde_tempdir.path }}/python-distutils-extra.tar.gz"
|
||||||
|
|
||||||
- name: Extract DistUtilsExtra (Termux)
|
- name: Extract DistUtilsExtra (Termux)
|
||||||
unarchive:
|
ansible.builtin.unarchive:
|
||||||
src: "{{ pde_tempdir.path }}/python-distutils-extra.tar.gz"
|
src: "{{ pde_tempdir.path }}/python-distutils-extra.tar.gz"
|
||||||
remote_src: yes
|
remote_src: true
|
||||||
dest: "{{ pde_tempdir.path }}"
|
dest: "{{ pde_tempdir.path }}"
|
||||||
|
|
||||||
- name: Install DistUtilsExtra (Termux)
|
- name: Install DistUtilsExtra (Termux)
|
||||||
command:
|
ansible.builtin.command:
|
||||||
cmd: python3 setup.py install
|
cmd: python3 setup.py install
|
||||||
chdir: "{{ pde_tempdir.path }}/python-distutils-extra-{{ version }}"
|
chdir: "{{ pde_tempdir.path }}/python-distutils-extra-{{ version }}"
|
||||||
when: termux
|
|
||||||
vars:
|
|
||||||
version: 2.39
|
|
||||||
|
|
||||||
- name: Install python-apt (Termux)
|
- name: Install python-apt (Termux)
|
||||||
pip:
|
ansible.builtin.pip:
|
||||||
name: python-apt
|
name: python-apt
|
||||||
when: termux
|
when: termux
|
||||||
|
|
||||||
|
@ -62,116 +62,110 @@
|
||||||
# TODO Patch sudo-fake so it allows using -u so `become` works
|
# TODO Patch sudo-fake so it allows using -u so `become` works
|
||||||
|
|
||||||
- name: Enable multilib repo
|
- name: Enable multilib repo
|
||||||
lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: /etc/pacman.conf
|
path: /etc/pacman.conf
|
||||||
regexp: '^#?\s*\[multilib\]$'
|
regexp: ^#?\s*\[multilib\]$
|
||||||
line: '[multilib]'
|
line: "[multilib]"
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based and ansible_architecture == "x86_64"
|
when: arch_based and ansible_architecture == "x86_64"
|
||||||
notify: udpate pacman cache
|
notify: udpate pacman cache
|
||||||
|
|
||||||
- name: Configure multilib repo
|
- name: Configure multilib repo
|
||||||
lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: /etc/pacman.conf
|
path: /etc/pacman.conf
|
||||||
regexp: '^#?\s*Include\s*=\s*/etc/pacman.d/mirrorlist'
|
regexp: ^#?\s*Include\s*=\s*/etc/pacman.d/mirrorlist
|
||||||
line: 'Include = /etc/pacman.d/mirrorlist'
|
line: Include = /etc/pacman.d/mirrorlist
|
||||||
insertafter: '^\[multilib\]$'
|
insertafter: ^\[multilib\]$
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based and ansible_architecture == "x86_64"
|
when: arch_based and ansible_architecture == "x86_64"
|
||||||
notify: udpate pacman cache
|
notify: udpate pacman cache
|
||||||
|
|
||||||
- name: Update cache if needed
|
- name: Update cache if needed
|
||||||
meta: flush_handlers
|
ansible.builtin.meta: flush_handlers
|
||||||
|
|
||||||
- name: Install ccache
|
- name: Install ccache
|
||||||
pacman:
|
community.general.pacman:
|
||||||
name: ccache
|
name: ccache
|
||||||
state: present
|
state: present
|
||||||
extra_args: "--asdeps"
|
extra_args: --asdeps
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
- name: Enable makepkg color
|
- name: Enable makepkg color
|
||||||
replace:
|
ansible.builtin.replace:
|
||||||
path: /etc/makepkg.conf
|
path: /etc/makepkg.conf
|
||||||
regexp: '^BUILDENV=(.+)!color(.+)$'
|
regexp: ^BUILDENV=(.+)!color(.+)$
|
||||||
replace: 'BUILDENV=\1color\2'
|
replace: BUILDENV=\1color\2
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
- name: Enable makepkg ccache
|
- name: Enable makepkg ccache
|
||||||
replace:
|
ansible.builtin.replace:
|
||||||
path: /etc/makepkg.conf
|
path: /etc/makepkg.conf
|
||||||
regexp: '^BUILDENV=(.+)!ccache(.+)$'
|
regexp: ^BUILDENV=(.+)!ccache(.+)$
|
||||||
replace: 'BUILDENV=\1ccache\2'
|
replace: BUILDENV=\1ccache\2
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
- name: Remove -mtune from makepkg CFLAGS
|
- name: Remove -mtune from makepkg CFLAGS
|
||||||
replace:
|
ansible.builtin.replace:
|
||||||
path: /etc/makepkg.conf
|
path: /etc/makepkg.conf
|
||||||
regexp: '^#? *CFLAGS=(.+)-mtune=\S+\s(.*)$'
|
regexp: ^#? *CFLAGS=(.+)-mtune=\S+\s(.*)$
|
||||||
replace: "CFLAGS=\\1\\2"
|
replace: CFLAGS=\1\2
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
- name: Change -march to native from makepkg CFLAGS
|
- name: Change -march to native from makepkg CFLAGS
|
||||||
replace:
|
ansible.builtin.replace:
|
||||||
path: /etc/makepkg.conf
|
path: /etc/makepkg.conf
|
||||||
regexp: '^#? *CFLAGS=(.+)-march=\S+(\s)(.*)$'
|
regexp: ^#? *CFLAGS=(.+)-march=\S+(\s)(.*)$
|
||||||
replace: "CFLAGS=\\1-march=native\\2\\3"
|
replace: CFLAGS=\1-march=native\2\3
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
- name: Set makepkg MAKEFLAGS
|
- name: Set makepkg MAKEFLAGS
|
||||||
replace:
|
ansible.builtin.replace:
|
||||||
path: /etc/makepkg.conf
|
path: /etc/makepkg.conf
|
||||||
regexp: '^#? *MAKEFLAGS=(.+)-j[0-9]+(.+)$'
|
regexp: ^#? *MAKEFLAGS=(.+)-j[0-9]+(.+)$
|
||||||
replace: "MAKEFLAGS=\\1-j{{ j }}\\2"
|
replace: MAKEFLAGS=\1-j{{ j }}\2
|
||||||
become: yes
|
become: true
|
||||||
vars:
|
vars:
|
||||||
j: "{{ [ansible_processor_nproc - 1, 1] | max | int }}"
|
j: "{{ [ansible_processor_nproc - 1, 1] | max | int }}"
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
- name: Enable pacman ParallelDownloads
|
- name: Enable pacman ParallelDownloads
|
||||||
lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: /etc/pacman.conf
|
path: /etc/pacman.conf
|
||||||
regexp: '^#?ParallelDownloads'
|
regexp: ^#?ParallelDownloads
|
||||||
line: 'ParallelDownloads = 5'
|
line: ParallelDownloads = 5
|
||||||
insertafter: '^\[options\]$'
|
insertafter: ^\[options\]$
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
- name: Enable pacman colors
|
- name: Enable pacman colors
|
||||||
lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: /etc/pacman.conf
|
path: /etc/pacman.conf
|
||||||
regexp: '^#?Color'
|
regexp: ^#?Color
|
||||||
line: 'Color'
|
line: Color
|
||||||
insertafter: '^\[options\]$'
|
insertafter: ^\[options\]$
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
- name: Enable pacman pac-man
|
- name: Enable pacman pac-man
|
||||||
lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: /etc/pacman.conf
|
path: /etc/pacman.conf
|
||||||
regexp: '^#?ILoveCandy'
|
regexp: ^#?ILoveCandy
|
||||||
line: 'ILoveCandy'
|
line: ILoveCandy
|
||||||
insertafter: '^#?Color'
|
insertafter: ^#?Color
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
|
|
||||||
# Install alternative package managers
|
# Install alternative package managers
|
||||||
- name: List packages from base-devel
|
|
||||||
command: pacman -Sqg base-devel
|
|
||||||
register: base_devel_packages
|
|
||||||
changed_when: no
|
|
||||||
check_mode: no
|
|
||||||
|
|
||||||
- name: Install dependencies for AUR helpers
|
- name: Install dependencies for AUR helpers
|
||||||
pacman:
|
community.general.pacman:
|
||||||
name: "{{ (base_devel_packages.stdout | split('\n') | reject('eq', 'sudo')) + ['fakeroot'] }}"
|
name:
|
||||||
become: yes
|
- base-devel
|
||||||
|
- fakeroot
|
||||||
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
# Do not install sudo because maybe sudo-fake is installed (otherwise it conflicts)
|
# Do not install sudo because maybe sudo-fake is installed (otherwise it conflicts)
|
||||||
# It should already be installed already anyway
|
# It should already be installed already anyway
|
||||||
|
@ -182,41 +176,41 @@
|
||||||
when: arch
|
when: arch
|
||||||
|
|
||||||
- name: Install AUR package manager (Manjaro)
|
- name: Install AUR package manager (Manjaro)
|
||||||
pacman:
|
community.general.pacman:
|
||||||
name: yay
|
name: yay
|
||||||
become: yes
|
become: true
|
||||||
when: manjaro
|
when: manjaro
|
||||||
# Not sure if regular Manjaro has yay in its community packages,
|
# Not sure if regular Manjaro has yay in its community packages,
|
||||||
# but Manjaro-ARM sure does
|
# but Manjaro-ARM sure does
|
||||||
|
|
||||||
- name: Create cache folder
|
- name: Create cache folder
|
||||||
file:
|
ansible.builtin.file:
|
||||||
state: directory
|
state: directory
|
||||||
mode: "u=rwx,g=rx,o=rx"
|
mode: u=rwx,g=rx,o=rx
|
||||||
path: "{{ ansible_user_dir }}/.cache/automatrop"
|
path: "{{ ansible_user_dir }}/.cache/automatrop"
|
||||||
|
|
||||||
- name: Generate list of packages for package manager
|
- name: Generate list of packages for package manager
|
||||||
set_fact:
|
ansible.builtin.set_fact:
|
||||||
packages: "{{ query('template', 'package_manager.j2')[0].split('\n')[:-1]|sort|unique }}"
|
packages: "{{ query('template', 'package_manager.j2')[0].split('\n')[:-1]|sort|unique }}"
|
||||||
tags: softwarelist
|
tags: softwarelist
|
||||||
|
|
||||||
- name: Install packages (Arch-based)
|
- name: Install packages (Arch-based)
|
||||||
aur:
|
aur:
|
||||||
name: "{{ packages }}"
|
name: "{{ packages }}"
|
||||||
extra_args: "--asdeps --needed"
|
extra_args: --asdeps --needed
|
||||||
# Nothing is set as installed manually so it can
|
# Nothing is set as installed manually so it can
|
||||||
# be removed by dependency check.
|
# be removed by dependency check.
|
||||||
# Current packages will be kept by the meta package
|
# Current packages will be kept by the meta package
|
||||||
use: yay
|
use: yay
|
||||||
notify: "software changed"
|
notify: software changed
|
||||||
tags: softwarelist
|
tags: softwarelist
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
- name: Check if list of packages changed
|
- name: Check if list of packages changed
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
content: "{% for package in packages %}{{ package }}\n{% endfor %}"
|
content: "{% for package in packages %}{{ package }}\n{% endfor %}"
|
||||||
dest: "{{ ansible_user_dir }}/.cache/automatrop/package_manager"
|
dest: "{{ ansible_user_dir }}/.cache/automatrop/package_manager"
|
||||||
notify: "software changed"
|
notify: software changed
|
||||||
tags: softwarelist
|
tags: softwarelist
|
||||||
|
|
||||||
# translate-shell
|
# translate-shell
|
||||||
|
|
|
@ -12,8 +12,7 @@ highlight
|
||||||
{# For nvim's :Telescope live_grep #}
|
{# For nvim's :Telescope live_grep #}
|
||||||
ripgrep
|
ripgrep
|
||||||
{# Offline documentation #}
|
{# Offline documentation #}
|
||||||
{% if arch_based and ansible_architecture == 'x86_64' %}
|
{# Relies on qt5-webkit which is a pain to compile
|
||||||
{# Pain to compile if binaries for qt5-webkit do not exist #}
|
|
||||||
zeal
|
zeal
|
||||||
{% endif %}
|
#}
|
||||||
{# EOF #}
|
{# EOF #}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
nix
|
||||||
|
rnix-lsp
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
{% if arch_based %}
|
{% if arch_based %}
|
||||||
|
{# TODO Disabled because it currently doesn't build
|
||||||
perl-perl-languageserver
|
perl-perl-languageserver
|
||||||
|
#}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
sqls
|
sql-language-server
|
||||||
|
|
|
@ -1,46 +1,47 @@
|
||||||
|
---
|
||||||
- name: Create a etckeeper commit
|
- name: Create a etckeeper commit
|
||||||
command: "etckeeper commit 'automatrop {{ ansible_date_time.iso8601 }}'"
|
ansible.builtin.command: etckeeper commit 'automatrop {{ ansible_date_time.iso8601 }}'
|
||||||
listen: "etc changed"
|
listen: etc changed
|
||||||
become: yes
|
become: true
|
||||||
register: etckeeper_commit
|
register: etckeeper_commit
|
||||||
failed_when: "etckeeper_commit.rc != 0 and 'nothing to commit' not in etckeeper_commit.stdout"
|
failed_when: etckeeper_commit.rc != 0 and 'nothing to commit' not in etckeeper_commit.stdout
|
||||||
changed_when: "'nothing to commit' not in etckeeper_commit.stdout"
|
changed_when: "'nothing to commit' not in etckeeper_commit.stdout"
|
||||||
|
|
||||||
- name: Restart chrony
|
- name: Restart chrony
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
name: chronyd
|
name: chronyd
|
||||||
state: restarted
|
state: restarted
|
||||||
listen: chrony reconfigured
|
listen: chrony reconfigured
|
||||||
become: yes
|
become: true
|
||||||
|
|
||||||
- name: Reload systemd daemon
|
- name: Reload systemd daemon
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
daemon_reload: yes
|
daemon_reload: true
|
||||||
listen: systemd changed
|
listen: systemd changed
|
||||||
become: yes
|
become: true
|
||||||
|
|
||||||
- name: Restart wpa_supplicant
|
- name: Restart wpa_supplicant
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
name: "wpa_supplicant@{{ item }}"
|
name: wpa_supplicant@{{ item }}
|
||||||
state: restarted
|
state: restarted
|
||||||
become: yes
|
become: true
|
||||||
loop: "{{ ansible_interfaces }}"
|
loop: "{{ ansible_interfaces }}"
|
||||||
when: "item.startswith('wl')"
|
when: item.startswith('wl')
|
||||||
listen: wpa_supplicant changed
|
listen: wpa_supplicant changed
|
||||||
# Could probably use something better like
|
# Could probably use something better like
|
||||||
# listing /sys/class/ieee80211/*/device/net/
|
# listing /sys/class/ieee80211/*/device/net/
|
||||||
|
|
||||||
- name: Warn about changed Wi-Fi setup
|
- name: Warn about changed Wi-Fi setup
|
||||||
debug:
|
ansible.builtin.debug:
|
||||||
msg: "The Wi-Fi configuration was changed, but not applied to let this playbook finish. A reboot is required."
|
msg: The Wi-Fi configuration was changed, but not applied to let this playbook finish. A reboot is required.
|
||||||
listen: wifi setup changed
|
listen: wifi setup changed
|
||||||
|
|
||||||
- name: Warn about changed Panfrost config
|
- name: Warn about changed Panfrost config
|
||||||
debug:
|
ansible.builtin.debug:
|
||||||
msg: "The Panfrost display driver configuration was changed, but needs a reboot to be applied."
|
msg: The Panfrost display driver configuration was changed, but needs a reboot to be applied.
|
||||||
listen: panfrost config changed
|
listen: panfrost config changed
|
||||||
|
|
||||||
- name: Reload systemd-logind
|
- name: Reload systemd-logind
|
||||||
command: systemctl kill -s HUP systemd-logind
|
ansible.builtin.command: systemctl kill -s HUP systemd-logind
|
||||||
become: yes
|
become: true
|
||||||
listen: systemd-logind config changed
|
listen: systemd-logind config changed
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
---
|
||||||
# TODO For other distributions
|
# TODO For other distributions
|
||||||
|
|
||||||
# Package are installed with --asdeps because they are needed
|
# Package are installed with --asdeps because they are needed
|
||||||
|
@ -5,97 +6,96 @@
|
||||||
# Etckeeper
|
# Etckeeper
|
||||||
|
|
||||||
- name: Check if etckeeper is initialized
|
- name: Check if etckeeper is initialized
|
||||||
stat:
|
ansible.builtin.stat:
|
||||||
path: /etc/.git
|
path: /etc/.git
|
||||||
register: etckeeper
|
register: etckeeper
|
||||||
become: yes
|
become: true
|
||||||
|
|
||||||
- name: Initialize etckeeper
|
- name: Initialize etckeeper
|
||||||
command: "etckeeper init"
|
ansible.builtin.command: etckeeper init
|
||||||
become: yes
|
become: true
|
||||||
when: not etckeeper.stat.exists
|
when: not etckeeper.stat.exists
|
||||||
changed_when: yes
|
changed_when: true
|
||||||
|
|
||||||
- name: Configure git user.name for etckeeper
|
- name: Configure git user.name for etckeeper
|
||||||
git_config:
|
community.general.git_config:
|
||||||
scope: local
|
scope: local
|
||||||
repo: /etc
|
repo: /etc
|
||||||
name: "{{ item.name }}"
|
name: "{{ item.name }}"
|
||||||
value: "{{ item.value }}"
|
value: "{{ item.value }}"
|
||||||
loop:
|
loop:
|
||||||
- name: "user.name"
|
- name: user.name
|
||||||
value: "etckeeper on {{ inventory_hostname_short }}"
|
value: etckeeper on {{ inventory_hostname_short }}
|
||||||
- name: "user.email"
|
- name: user.email
|
||||||
value: "etckeeper@{{ inventory_hostname }}"
|
value: etckeeper@{{ inventory_hostname }}
|
||||||
become: yes
|
become: true
|
||||||
|
|
||||||
# Manjaro configuration
|
# Manjaro configuration
|
||||||
|
|
||||||
- name: Remove Manjaro's pamac
|
- name: Remove Manjaro's pamac
|
||||||
pacman:
|
community.general.pacman:
|
||||||
name: pamac
|
name: pamac
|
||||||
state: absent
|
state: absent
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based and False # I'm trying to remember why I usually delete this thing
|
when: arch_based and False # I'm trying to remember why I usually delete this thing
|
||||||
|
|
||||||
# Verbose logging during boot
|
# Verbose logging during boot
|
||||||
|
|
||||||
- name: Check if using Uboot
|
- name: Check if using Uboot
|
||||||
stat:
|
ansible.builtin.stat:
|
||||||
path: /boot/extlinux/extlinux.conf
|
path: /boot/extlinux/extlinux.conf
|
||||||
register: extlinux
|
register: extlinux
|
||||||
# This (and the following) was made with the Pinebook in mind,
|
# This (and the following) was made with the Pinebook in mind,
|
||||||
# not sure about compatibility
|
# not sure about compatibility
|
||||||
|
|
||||||
- name: Remove non-tty1 console (Uboot)
|
- name: Remove non-tty1 console (Uboot)
|
||||||
replace:
|
ansible.builtin.replace:
|
||||||
path: /boot/extlinux/extlinux.conf
|
path: /boot/extlinux/extlinux.conf
|
||||||
regexp: '^APPEND(.*) console=(?!tty1)\S+(.*)$'
|
regexp: ^APPEND(.*) console=(?!tty1)\S+(.*)$
|
||||||
replace: 'APPEND\1\2'
|
replace: APPEND\1\2
|
||||||
become: yes
|
become: true
|
||||||
when: extlinux.stat.exists
|
when: extlinux.stat.exists
|
||||||
# Only one console= will be removed because regular expression are either hard
|
# Only one console= will be removed because regular expression are either hard
|
||||||
# or somewhat limited. It's just what I need anyway
|
# or somewhat limited. It's just what I need anyway
|
||||||
|
|
||||||
- name: Remove bootsplash.bootfile (Uboot)
|
- name: Remove bootsplash.bootfile (Uboot)
|
||||||
replace:
|
ansible.builtin.replace:
|
||||||
path: /boot/extlinux/extlinux.conf
|
path: /boot/extlinux/extlinux.conf
|
||||||
regexp: '^APPEND(.*) bootsplash.bootfile=\S+(.*)$'
|
regexp: ^APPEND(.*) bootsplash.bootfile=\S+(.*)$
|
||||||
replace: 'APPEND\1\2'
|
replace: APPEND\1\2
|
||||||
become: yes
|
become: true
|
||||||
when: extlinux.stat.exists
|
when: extlinux.stat.exists
|
||||||
|
|
||||||
- name: Remove bootsplash packages (Arch based)
|
- name: Remove bootsplash packages (Arch based)
|
||||||
pacman:
|
community.general.pacman:
|
||||||
name:
|
name:
|
||||||
- bootsplash-systemd
|
- bootsplash-systemd
|
||||||
- bootsplash-theme-manjaro
|
- bootsplash-theme-manjaro
|
||||||
state: absent
|
state: absent
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
|
|
||||||
# Display Manager
|
# Display Manager
|
||||||
|
|
||||||
- name: Remove display manager packages (Arch based)
|
- name: Remove display manager packages (Arch based)
|
||||||
pacman:
|
community.general.pacman:
|
||||||
name:
|
name:
|
||||||
- sddm
|
- sddm
|
||||||
- sddm-breath2-theme
|
- sddm-breath2-theme
|
||||||
state: absent
|
state: absent
|
||||||
become: yes
|
become: true
|
||||||
when: arch_based
|
when: arch_based
|
||||||
|
|
||||||
# Xorg configuration
|
# Xorg configuration
|
||||||
|
|
||||||
- name: Check if there is nvidia-xrun is installed
|
- name: Check if there is nvidia-xrun is installed
|
||||||
stat:
|
ansible.builtin.stat:
|
||||||
path: /etc/X11/nvidia-xorg.conf
|
path: /etc/X11/nvidia-xorg.conf
|
||||||
register: nvidia_xrun
|
register: nvidia_xrun
|
||||||
when: display_server == 'x11'
|
when: display_server == 'x11'
|
||||||
|
|
||||||
- name: Add nvidia-xrun xorg config directory
|
- name: Add nvidia-xrun xorg config directory
|
||||||
set_fact:
|
ansible.builtin.set_fact:
|
||||||
xorg_common_config_dirs: "{{ xorg_default_config_dirs + xorg_nvidia_config_dirs }}"
|
xorg_common_config_dirs: "{{ xorg_default_config_dirs + xorg_nvidia_config_dirs }}"
|
||||||
vars:
|
vars:
|
||||||
xorg_default_config_dirs:
|
xorg_default_config_dirs:
|
||||||
|
@ -104,78 +104,78 @@
|
||||||
when: display_server == 'x11'
|
when: display_server == 'x11'
|
||||||
|
|
||||||
- name: Configure Xorg keyboard layout
|
- name: Configure Xorg keyboard layout
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
src: xorg/keyboard.conf
|
src: xorg/keyboard.conf
|
||||||
dest: "{{ item }}/00-keyboard.conf"
|
dest: "{{ item }}/00-keyboard.conf"
|
||||||
become: yes
|
become: true
|
||||||
when: display_server == 'x11'
|
when: display_server == 'x11'
|
||||||
notify: etc changed
|
notify: etc changed
|
||||||
loop: "{{ xorg_common_config_dirs }}"
|
loop: "{{ xorg_common_config_dirs }}"
|
||||||
|
|
||||||
- name: Use Alt keys for numpad
|
- name: Use Alt keys for numpad
|
||||||
patch:
|
ansible.posix.patch:
|
||||||
src: us_qwert_alt_numpad.patch
|
src: us_qwert_alt_numpad.patch
|
||||||
dest: /usr/share/X11/xkb/symbols/us_qwerty-fr
|
dest: /usr/share/X11/xkb/symbols/us_qwerty-fr
|
||||||
become: yes
|
become: true
|
||||||
when: display_server == 'x11'
|
when: display_server == 'x11'
|
||||||
# This is not very nice but it's updated so infrequently that it's not worth
|
# This is not very nice but it's updated so infrequently that it's not worth
|
||||||
# the trouble
|
# the trouble
|
||||||
|
|
||||||
- name: Check if there is Intel backlight
|
- name: Check if there is Intel backlight
|
||||||
stat:
|
ansible.builtin.stat:
|
||||||
path: /sys/class/backlight/intel_backlight
|
path: /sys/class/backlight/intel_backlight
|
||||||
register: intel_backlight
|
register: intel_backlight
|
||||||
when: display_server == 'x11'
|
when: display_server == 'x11'
|
||||||
|
|
||||||
- name: Install Intel video drivers (Arch based)
|
- name: Install Intel video drivers (Arch based)
|
||||||
pacman:
|
community.general.pacman:
|
||||||
name: xf86-video-intel
|
name: xf86-video-intel
|
||||||
# state: "{{ intel_backlight.stat.exists }}"
|
# state: "{{ intel_backlight.stat.exists }}"
|
||||||
state: present
|
state: present
|
||||||
become: yes
|
become: true
|
||||||
when: display_server == 'x11' and intel_backlight.stat.exists and arch_based
|
when: display_server == 'x11' and intel_backlight.stat.exists and arch_based
|
||||||
# TODO With software role? Would permit other distributions
|
# TODO With software role? Would permit other distributions
|
||||||
|
|
||||||
- name: Configure Xorg Intel backlight
|
- name: Configure Xorg Intel backlight
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
src: xorg/intel_backlight.conf
|
src: xorg/intel_backlight.conf
|
||||||
dest: "{{ item }}/20-intel_backlight.conf"
|
dest: "{{ item }}/20-intel_backlight.conf"
|
||||||
become: yes
|
become: true
|
||||||
when: display_server == 'x11' and intel_backlight.stat.exists
|
when: display_server == 'x11' and intel_backlight.stat.exists
|
||||||
notify: etc changed
|
notify: etc changed
|
||||||
loop: "{{ xorg_common_config_dirs }}"
|
loop: "{{ xorg_common_config_dirs }}"
|
||||||
|
|
||||||
- name: Configure Xorg touchpad behaviour
|
- name: Configure Xorg touchpad behaviour
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
src: xorg/touchpad.conf
|
src: xorg/touchpad.conf
|
||||||
dest: "{{ item }}/30-touchpad.conf"
|
dest: "{{ item }}/30-touchpad.conf"
|
||||||
become: yes
|
become: true
|
||||||
when: display_server == 'x11'
|
when: display_server == 'x11'
|
||||||
notify: etc changed
|
notify: etc changed
|
||||||
loop: "{{ xorg_common_config_dirs }}"
|
loop: "{{ xorg_common_config_dirs }}"
|
||||||
|
|
||||||
- name: Configure Xorg joystick behaviour
|
- name: Configure Xorg joystick behaviour
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
src: xorg/joystick.conf
|
src: xorg/joystick.conf
|
||||||
dest: "{{ item }}/50-joystick.conf"
|
dest: "{{ item }}/50-joystick.conf"
|
||||||
become: yes
|
become: true
|
||||||
when: display_server == 'x11'
|
when: display_server == 'x11'
|
||||||
notify: etc changed
|
notify: etc changed
|
||||||
loop: "{{ xorg_common_config_dirs }}"
|
loop: "{{ xorg_common_config_dirs }}"
|
||||||
|
|
||||||
- name: List modules we're using
|
- name: List modules we're using
|
||||||
slurp:
|
ansible.builtin.slurp:
|
||||||
src: /proc/modules
|
src: /proc/modules
|
||||||
register: modules
|
register: modules
|
||||||
when: display_server
|
when: display_server
|
||||||
# Not sure the module will be loaded in early setup stages though
|
# Not sure the module will be loaded in early setup stages though
|
||||||
|
|
||||||
- name: Make panfrost use OpenGL 3.3
|
- name: Make panfrost use OpenGL 3.3
|
||||||
lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: /etc/environment
|
path: /etc/environment
|
||||||
line: 'PAN_MESA_DEBUG="gl3"'
|
line: PAN_MESA_DEBUG="gl3"
|
||||||
regexp: '^#? ?PAN_MESA_DEBUG='
|
regexp: ^#? ?PAN_MESA_DEBUG=
|
||||||
become: yes
|
become: true
|
||||||
when: display_server and using_panfrost
|
when: display_server and using_panfrost
|
||||||
vars:
|
vars:
|
||||||
using_panfrost: "{{ 'panfrost' in (modules.content | b64decode) }}"
|
using_panfrost: "{{ 'panfrost' in (modules.content | b64decode) }}"
|
||||||
|
@ -183,21 +183,21 @@
|
||||||
|
|
||||||
# Numlock on boot
|
# Numlock on boot
|
||||||
|
|
||||||
- name: set numlock on boot
|
- name: Set numlock on boot
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
src: getty.service
|
src: getty.service
|
||||||
dest: /etc/systemd/system/getty@.service.d/override.conf
|
dest: /etc/systemd/system/getty@.service.d/override.conf
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
- systemd changed
|
- systemd changed
|
||||||
when: auto_numlock
|
when: auto_numlock
|
||||||
|
|
||||||
- name: Unset numlock on boot
|
- name: Unset numlock on boot
|
||||||
file:
|
ansible.builtin.file:
|
||||||
path: /etc/systemd/system/getty@.service.d/override.conf
|
path: /etc/systemd/system/getty@.service.d/override.conf
|
||||||
state: absent
|
state: absent
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
- systemd changed
|
- systemd changed
|
||||||
|
@ -206,163 +206,163 @@
|
||||||
# TLP configuration
|
# TLP configuration
|
||||||
|
|
||||||
- name: Start/enable TLP
|
- name: Start/enable TLP
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
name: tlp
|
name: tlp
|
||||||
state: started
|
state: started
|
||||||
enabled: yes
|
enabled: true
|
||||||
become: yes
|
become: true
|
||||||
notify: etc changed
|
notify: etc changed
|
||||||
|
|
||||||
# Network configuration
|
# Network configuration
|
||||||
|
|
||||||
- name: Start/enable dhcpcd
|
- name: Start/enable dhcpcd
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
name: dhcpcd
|
name: dhcpcd
|
||||||
state: started
|
state: started
|
||||||
enabled: yes
|
enabled: true
|
||||||
become: yes
|
become: true
|
||||||
notify: etc changed
|
notify: etc changed
|
||||||
|
|
||||||
- name: Configure wpa_supplicant
|
- name: Configure wpa_supplicant
|
||||||
template:
|
ansible.builtin.template:
|
||||||
src: wpa_supplicant.conf.j2
|
src: wpa_supplicant.conf.j2
|
||||||
dest: /etc/wpa_supplicant/wpa_supplicant.conf
|
dest: /etc/wpa_supplicant/wpa_supplicant.conf
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
- wpa_supplicant changed
|
- wpa_supplicant changed
|
||||||
become: yes
|
become: true
|
||||||
tags:
|
tags:
|
||||||
- wificonf
|
- wificonf
|
||||||
|
|
||||||
- name: Prepare directory for wpa_supplicant service override
|
- name: Prepare directory for wpa_supplicant service override
|
||||||
file:
|
ansible.builtin.file:
|
||||||
path: /etc/systemd/system/wpa_supplicant@.service.d
|
path: /etc/systemd/system/wpa_supplicant@.service.d
|
||||||
state: directory
|
state: directory
|
||||||
mode: "u=rwx,g=rx,o=rx"
|
mode: u=rwx,g=rx,o=rx
|
||||||
become: yes
|
become: true
|
||||||
|
|
||||||
- name: Make wpa_supplicant use a common configuration file
|
- name: Make wpa_supplicant use a common configuration file
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
src: wpa_supplicant.service
|
src: wpa_supplicant.service
|
||||||
dest: /etc/systemd/system/wpa_supplicant@.service.d/override.conf
|
dest: /etc/systemd/system/wpa_supplicant@.service.d/override.conf
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
- systemd changed
|
- systemd changed
|
||||||
- wifi setup changed
|
- wifi setup changed
|
||||||
|
|
||||||
- name: Disable wpa_supplicant for networkmanager
|
- name: Disable wpa_supplicant for networkmanager
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
name: wpa_supplicant
|
name: wpa_supplicant
|
||||||
enabled: no
|
enabled: false
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
- wifi setup changed
|
- wifi setup changed
|
||||||
|
|
||||||
- name: Start/enable wpa_supplicant for interface
|
- name: Start/enable wpa_supplicant for interface
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
name: "wpa_supplicant@{{ item }}"
|
name: wpa_supplicant@{{ item }}
|
||||||
enabled: yes
|
enabled: true
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
- wifi setup changed
|
- wifi setup changed
|
||||||
loop: "{{ ansible_interfaces }}"
|
loop: "{{ ansible_interfaces }}"
|
||||||
when: "item.startswith('wl')"
|
when: item.startswith('wl')
|
||||||
# Could probably use something better like
|
# Could probably use something better like
|
||||||
# listing /sys/class/ieee80211/*/device/net/
|
# listing /sys/class/ieee80211/*/device/net/
|
||||||
|
|
||||||
- name: Uninstall networkmanager
|
- name: Uninstall networkmanager
|
||||||
pacman:
|
community.general.pacman:
|
||||||
name: networkmanager
|
name: networkmanager
|
||||||
state: absent
|
state: absent
|
||||||
extra_args: "--cascade --recursive"
|
extra_args: --cascade --recursive
|
||||||
when: arch_based
|
when: arch_based
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- wifi setup changed
|
- wifi setup changed
|
||||||
|
|
||||||
- name: Mask systemd-networkd
|
- name: Mask systemd-networkd
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
name: systemd-networkd
|
name: systemd-networkd
|
||||||
state: stopped
|
state: stopped
|
||||||
enabled: no
|
enabled: false
|
||||||
masked: yes
|
masked: true
|
||||||
become: yes
|
become: true
|
||||||
notify: etc changed
|
notify: etc changed
|
||||||
|
|
||||||
# Time synchronisation
|
# Time synchronisation
|
||||||
|
|
||||||
- name: Mask systemd-timesyncd
|
- name: Mask systemd-timesyncd
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
name: systemd-timesyncd
|
name: systemd-timesyncd
|
||||||
state: stopped
|
state: stopped
|
||||||
enabled: no
|
enabled: false
|
||||||
masked: yes
|
masked: true
|
||||||
become: yes
|
become: true
|
||||||
notify: etc changed
|
notify: etc changed
|
||||||
|
|
||||||
- name: Configure chrony
|
- name: Configure chrony
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
src: chrony.conf
|
src: chrony.conf
|
||||||
dest: /etc/chrony.conf
|
dest: /etc/chrony.conf
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
- chrony reconfigured
|
- chrony reconfigured
|
||||||
# TODO More configuration, RTC configuration
|
# TODO More configuration, RTC configuration
|
||||||
|
|
||||||
- name: Enable chronyd
|
- name: Enable chronyd
|
||||||
systemd:
|
ansible.builtin.systemd:
|
||||||
name: chronyd
|
name: chronyd
|
||||||
enabled: yes
|
enabled: true
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
- chrony reconfigured
|
- chrony reconfigured
|
||||||
|
|
||||||
- name: Configure dhcpcd chrony hook
|
- name: Configure dhcpcd chrony hook
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
src: dhcpcd.exit-hook
|
src: dhcpcd.exit-hook
|
||||||
dest: /etc/dhcpcd.exit-hook
|
dest: /etc/dhcpcd.exit-hook
|
||||||
become: yes
|
become: true
|
||||||
notify: etc changed
|
notify: etc changed
|
||||||
|
|
||||||
- name: Empty motd
|
- name: Empty motd
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
content: ""
|
content: ""
|
||||||
dest: /etc/motd
|
dest: /etc/motd
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
|
|
||||||
# VPN configuration
|
# VPN configuration
|
||||||
|
|
||||||
- name: Prepare directory for openvpn-client service override
|
- name: Prepare directory for openvpn-client service override
|
||||||
file:
|
ansible.builtin.file:
|
||||||
path: /etc/systemd/system/openvpn-client@.service.d
|
path: /etc/systemd/system/openvpn-client@.service.d
|
||||||
state: directory
|
state: directory
|
||||||
mode: "u=rwx,g=rx,o=rx"
|
mode: u=rwx,g=rx,o=rx
|
||||||
become: yes
|
become: true
|
||||||
|
|
||||||
- name: Make openvpn use hooks for resolvconf
|
- name: Make openvpn use hooks for resolvconf
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
src: openvpn-client.service
|
src: openvpn-client.service
|
||||||
dest: /etc/systemd/system/openvpn-client@.service.d/override.conf
|
dest: /etc/systemd/system/openvpn-client@.service.d/override.conf
|
||||||
become: yes
|
become: true
|
||||||
notify:
|
notify:
|
||||||
- etc changed
|
- etc changed
|
||||||
- systemd changed
|
- systemd changed
|
||||||
|
|
||||||
- name: Disable power button
|
- name: Disable power button
|
||||||
lineinfile:
|
ansible.builtin.lineinfile:
|
||||||
path: /etc/systemd/logind.conf
|
path: /etc/systemd/logind.conf
|
||||||
line: 'HandlePowerKey=ignore'
|
line: HandlePowerKey=ignore
|
||||||
regexp: '^#? *HandlePowerKey='
|
regexp: ^#? *HandlePowerKey=
|
||||||
insertafter: '^\[Login\]$'
|
insertafter: ^\[Login\]$
|
||||||
become: yes
|
become: true
|
||||||
notify: systemd-logind config changed
|
notify: systemd-logind config changed
|
||||||
# Reason: I sometimes press it accidentally
|
# Reason: I sometimes press it accidentally
|
||||||
# (hoping to start it when it's already started,
|
# (hoping to start it when it's already started,
|
||||||
|
|
|
@ -17,14 +17,10 @@ country=NL
|
||||||
community.general.passwordstore doesn't support path with spaces in it,
|
community.general.passwordstore doesn't support path with spaces in it,
|
||||||
so we're using a `ssid` attribute, which default to the names for SSIDs without space.
|
so we're using a `ssid` attribute, which default to the names for SSIDs without space.
|
||||||
#}
|
#}
|
||||||
|
{% set pass = lookup('community.general.passwordstore', 'wifi/' + name) %}
|
||||||
{% set suffixes = lookup('community.general.passwordstore', 'wifi/' + name + ' subkey=suffixes') or [''] %}
|
{% set suffixes = lookup('community.general.passwordstore', 'wifi/' + name + ' subkey=suffixes') or [''] %}
|
||||||
{% set ssid = lookup('community.general.passwordstore', 'wifi/' + name + ' subkey=ssid') or name %}
|
{% set ssid = lookup('community.general.passwordstore', 'wifi/' + name + ' subkey=ssid') or name %}
|
||||||
{% set type = lookup('community.general.passwordstore', 'wifi/' + name + ' subkey=type') or 'wpa' %}
|
{% set type = lookup('community.general.passwordstore', 'wifi/' + name + ' subkey=type') or ('wpa' if pass else 'open') %}
|
||||||
{% if type in ('wpa', 'wep', 'wpa-eap') %}
|
|
||||||
{% set pass = lookup('community.general.passwordstore', 'wifi/' + name) %}
|
|
||||||
{% else %}
|
|
||||||
{% set pass = 'Error, no pass for type ' + type %}
|
|
||||||
{% endif %}
|
|
||||||
# {{ name }}
|
# {{ name }}
|
||||||
{% for suffix in suffixes %}
|
{% for suffix in suffixes %}
|
||||||
network={
|
network={
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
|
---
|
||||||
- name: Create Termux directory
|
- name: Create Termux directory
|
||||||
file:
|
ansible.builtin.file:
|
||||||
state: directory
|
state: directory
|
||||||
path: "{{ ansible_user_dir }}/.termux"
|
path: "{{ ansible_user_dir }}/.termux"
|
||||||
mode: "u=rwx,g=rx,o=rx"
|
mode: u=rwx,g=rx,o=rx
|
||||||
# TODO This is a dotfiles directory.
|
# TODO This is a dotfiles directory.
|
||||||
# Make it not install unless it's Termux
|
# Make it not install unless it's Termux
|
||||||
|
|
||||||
- name: Silence Termux login message
|
- name: Silence Termux login message
|
||||||
file:
|
ansible.builtin.file:
|
||||||
state: file
|
state: file
|
||||||
path: "{{ ansible_user_dir }}/.hushlogin"
|
path: "{{ ansible_user_dir }}/.hushlogin"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
|
|
||||||
# Build a single color scheme and template and assign it to a variable
|
# Build a single color scheme and template and assign it to a variable
|
||||||
- base16_builder:
|
- base16_builder:
|
||||||
|
@ -22,10 +23,10 @@
|
||||||
- color
|
- color
|
||||||
|
|
||||||
- name: Download base16 theme for Termux
|
- name: Download base16 theme for Termux
|
||||||
copy:
|
ansible.builtin.copy:
|
||||||
content: "{{ base16_schemes['schemes'][base16_scheme]['termux']['colors']['base16-' + base16_scheme + '.properties'] }}"
|
content: "{{ base16_schemes['schemes'][base16_scheme]['termux']['colors']['base16-' + base16_scheme + '.properties'] }}"
|
||||||
dest: "{{ ansible_env.HOME }}/.termux/colors.properties"
|
dest: "{{ ansible_env.HOME }}/.termux/colors.properties"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
tags:
|
tags:
|
||||||
- color
|
- color
|
||||||
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
- name: xrdb-reload
|
|
||||||
command: "xrdb -I{{ ansible_env.HOME }} {{ ansible_env.HOME }}/.config/Xresources/main"
|
|
||||||
|
|
||||||
- name: i3-reload
|
|
||||||
command: i3-msg reload
|
|
||||||
|
|
||||||
- name: shell-reload
|
|
||||||
command: "{{ ansible_env.HOME }}/.local/bin/colorSchemeApply"
|
|
||||||
|
|
||||||
- name: fzf-reload
|
|
||||||
shell: "source {{ ansible_env.HOME }}/.local/bin/colorSchemeApplyFzf"
|
|
||||||
|
|
||||||
- name: qutebrowser-reload
|
|
||||||
shell: "! pgrep qutebrowser || qutebrowser :config-source"
|
|
|
@ -1,119 +0,0 @@
|
||||||
# - name: Find Dav configuration folders in password store
|
|
||||||
|
|
||||||
# - name: Ensure directories for theme are present
|
|
||||||
# file:
|
|
||||||
# state: directory
|
|
||||||
# path: "{{ ansible_env.HOME }}/{{ item }}"
|
|
||||||
# with_items:
|
|
||||||
# - ".config/Xresources"
|
|
||||||
# - ".config/rofi"
|
|
||||||
# - ".local/bin"
|
|
||||||
# - ".config/qutebrowser"
|
|
||||||
# - ".config/tridactyl/themes"
|
|
||||||
#
|
|
||||||
# # Build a single color scheme and template and assign it to a variable
|
|
||||||
# - base16_builder:
|
|
||||||
# scheme: "{{ base16_scheme }}"
|
|
||||||
# template: # This requires https://github.com/mnussbaum/base16-builder-ansible/pull/6
|
|
||||||
# - i3
|
|
||||||
# - xresources
|
|
||||||
# - rofi
|
|
||||||
# - termux
|
|
||||||
# - alacritty
|
|
||||||
# - shell
|
|
||||||
# - fzf
|
|
||||||
# - vim
|
|
||||||
# - qutebrowser
|
|
||||||
# - tridactyl
|
|
||||||
# - dunst
|
|
||||||
# register: base16_schemes
|
|
||||||
#
|
|
||||||
# - name: Configure Alacritty
|
|
||||||
# template:
|
|
||||||
# src: "{{ ansible_env.HOME }}/.config/alacritty/alacritty.yml.j2"
|
|
||||||
# dest: "{{ ansible_env.HOME }}/.config/alacritty/alacritty.yml"
|
|
||||||
# mode: "u+rw,g=r,o=r"
|
|
||||||
# # Alacritty has live config reload, so no command to execute
|
|
||||||
# # However, it doesn't work with yaml includes, hence the template
|
|
||||||
#
|
|
||||||
# - name: Set base16 theme for Xresources
|
|
||||||
# copy:
|
|
||||||
# content: "{{ base16_schemes['schemes'][base16_scheme]['xresources']['xresources']['base16-' + base16_scheme + '-256.Xresources'] }}"
|
|
||||||
# dest: "{{ ansible_env.HOME }}/.config/Xresources/theme"
|
|
||||||
# mode: "u+rw,g=r,o=r"
|
|
||||||
# notify:
|
|
||||||
# - xrdb-reload
|
|
||||||
#
|
|
||||||
# - name: Download base16 theme for qutebrowser
|
|
||||||
# copy:
|
|
||||||
# content: "{{ base16_schemes['schemes'][base16_scheme]['qutebrowser']['themes/minimal']['base16-' + base16_scheme + '.config.py'] }}"
|
|
||||||
# dest: "{{ ansible_env.HOME }}/.config/qutebrowser/theme.py"
|
|
||||||
# mode: "u+rw,g=r,o=r"
|
|
||||||
# notify:
|
|
||||||
# - qutebrowser-reload
|
|
||||||
#
|
|
||||||
# - name: Download base16 theme for Tridactyl
|
|
||||||
# copy:
|
|
||||||
# content: "{{ base16_schemes['schemes'][base16_scheme]['tridactyl']['base16-' + base16_scheme + '.config.py'] }}"
|
|
||||||
# # url: "https://raw.githubusercontent.com/bezmi/base16-tridactyl/master/base16-{{ base16_scheme }}.css"
|
|
||||||
# dest: "{{ ansible_env.HOME }}/.config/tridactyl/themes/theme.css"
|
|
||||||
# mode: "u+rw,g=r,o=r"
|
|
||||||
# when: False # Not currently used
|
|
||||||
#
|
|
||||||
# - name: Configure i3
|
|
||||||
# template:
|
|
||||||
# src: "{{ ansible_env.HOME }}/.config/i3/config.j2"
|
|
||||||
# dest: "{{ ansible_env.HOME }}/.config/i3/config"
|
|
||||||
# mode: "u+rw,g=r,o=r"
|
|
||||||
# notify:
|
|
||||||
# - i3-reload
|
|
||||||
#
|
|
||||||
# - name: Set base16 theme for rofi
|
|
||||||
# copy:
|
|
||||||
# content: "{{ base16_schemes['schemes'][base16_scheme]['rofi']['themes']['base16-' + base16_scheme + '.' + item] }}"
|
|
||||||
# dest: "{{ ansible_env.HOME }}/.config/rofi/theme.{{ item }}"
|
|
||||||
# mode: "u+rw,g=r,o=r"
|
|
||||||
# with_items:
|
|
||||||
# - rasi
|
|
||||||
# - config
|
|
||||||
#
|
|
||||||
# - name: Configure Dunst
|
|
||||||
# template:
|
|
||||||
# src: "{{ ansible_env.HOME }}/.config/dunst/dunstrc.j2"
|
|
||||||
# dest: "{{ ansible_env.HOME }}/.config/dunst/dunstrc"
|
|
||||||
# mode: "u+rw,g=r,o=r"
|
|
||||||
#
|
|
||||||
# - name: Download base16 theme for fzf
|
|
||||||
# copy:
|
|
||||||
# content: "{{ base16_schemes['schemes'][base16_scheme]['fzf']['bash']['base16-' + base16_scheme + '.config'] }}"
|
|
||||||
# dest: "{{ ansible_env.HOME }}/.local/bin/colorSchemeApplyFzf"
|
|
||||||
# mode: "u+rw,g=r,o=r"
|
|
||||||
# notify:
|
|
||||||
# - fzf-reload
|
|
||||||
#
|
|
||||||
# - name: Download base16 theme for Termux
|
|
||||||
# copy:
|
|
||||||
# content: "{{ base16_schemes['schemes'][base16_scheme]['termux']['colors']['base16-' + base16_scheme + '.properties'] }}"
|
|
||||||
# dest: "{{ ansible_env.HOME }}/.termux/colors.properties"
|
|
||||||
# mode: "u+rw,g=r,o=r"
|
|
||||||
# # TODO Only on Termux
|
|
||||||
#
|
|
||||||
# - name: Download base16 theme for shell
|
|
||||||
# copy:
|
|
||||||
# content: "{{ base16_schemes['schemes'][base16_scheme]['shell']['script']['base16-' + base16_scheme + '.sh'] }}"
|
|
||||||
# dest: "{{ ansible_env.HOME }}/.local/bin/colorSchemeApply"
|
|
||||||
# mode: "u+rwx,g=rx,o=rx"
|
|
||||||
# notify:
|
|
||||||
# - shell-reload
|
|
||||||
# when: False # Not currently used
|
|
||||||
#
|
|
||||||
# - name: Set used base16 theme for vim
|
|
||||||
# copy:
|
|
||||||
# path: "{{ ansible_env.HOME }}/.config/vim/colorscheme.vim"
|
|
||||||
# mode: "u+rw,g=r,o=r"
|
|
||||||
# content: "colorscheme base16-{{ base16_scheme }}"
|
|
||||||
# when: False # Not currently used
|
|
||||||
#
|
|
||||||
# # TODO bar (might change bar in the future, so...)
|
|
||||||
# # TODO highlight (there IS a template but the colors look different from vim and mostly the same from when there's no config)
|
|
||||||
# # TODO https://github.com/makuto/auto-base16-theme ? :P
|
|
|
@ -1 +0,0 @@
|
||||||
base16_scheme: solarized-dark
|
|
|
@ -1,11 +1,12 @@
|
||||||
|
---
|
||||||
- name: Upgrade Neovim plugins
|
- name: Upgrade Neovim plugins
|
||||||
command: "nvim +PlugUpgrade +PlugUpdate +PlugInstall +qall!"
|
ansible.builtin.command: nvim +PlugUpgrade +PlugUpdate +PlugInstall +qall!
|
||||||
listen: nvim plugins changed
|
listen: nvim plugins changed
|
||||||
environment:
|
environment:
|
||||||
VIMINIT: "source {{ ansible_user_dir }}/.config/nvim/plugininstall.vim"
|
VIMINIT: source {{ ansible_user_dir }}/.config/nvim/plugininstall.vim
|
||||||
|
|
||||||
- name: Upgrade Vim plugins
|
- name: Upgrade Vim plugins
|
||||||
command: "vim +PlugUpgrade +PlugUpdate +PlugInstall +qall!"
|
ansible.builtin.command: vim +PlugUpgrade +PlugUpdate +PlugInstall +qall!
|
||||||
listen: vim plugins changed
|
listen: vim plugins changed
|
||||||
environment:
|
environment:
|
||||||
VIMINIT: "source {{ ansible_user_dir }}/.config/vim/plugininstall.vim"
|
VIMINIT: source {{ ansible_user_dir }}/.config/vim/plugininstall.vim
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
---
|
||||||
- name: Set vim variants to use
|
- name: Set vim variants to use
|
||||||
set_fact:
|
ansible.builtin.set_fact:
|
||||||
vim_variants:
|
vim_variants:
|
||||||
- vim
|
- vim
|
||||||
- nvim
|
- nvim
|
||||||
|
@ -7,37 +8,37 @@
|
||||||
# TODO Select those in a clever way
|
# TODO Select those in a clever way
|
||||||
|
|
||||||
- name: Create vim configuration directory
|
- name: Create vim configuration directory
|
||||||
file:
|
ansible.builtin.file:
|
||||||
state: directory
|
state: directory
|
||||||
path: "{{ ansible_user_dir }}/.config/{{ item }}"
|
path: "{{ ansible_user_dir }}/.config/{{ item }}"
|
||||||
mode: "u=rwx,g=rx,o=rx"
|
mode: u=rwx,g=rx,o=rx
|
||||||
loop: "{{ vim_variants }}"
|
loop: "{{ vim_variants }}"
|
||||||
|
|
||||||
- name: Install vim-plug
|
- name: Install vim-plug
|
||||||
get_url:
|
ansible.builtin.get_url:
|
||||||
url: https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
url: https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
||||||
dest: "{{ ansible_user_dir }}/.config/vim/plug.vim"
|
dest: "{{ ansible_user_dir }}/.config/vim/plug.vim"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
|
|
||||||
- name: Install loader
|
- name: Install loader
|
||||||
template:
|
ansible.builtin.template:
|
||||||
src: loader.j2
|
src: loader.j2
|
||||||
dest: "{{ ansible_user_dir }}/.config/vim/loader.vim"
|
dest: "{{ ansible_user_dir }}/.config/vim/loader.vim"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
|
|
||||||
- name: Install theme
|
- name: Install theme
|
||||||
template:
|
ansible.builtin.template:
|
||||||
src: theme.j2
|
src: theme.j2
|
||||||
dest: "{{ ansible_user_dir }}/.config/vim/theme.vim"
|
dest: "{{ ansible_user_dir }}/.config/vim/theme.vim"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
tags:
|
tags:
|
||||||
- color
|
- color
|
||||||
|
|
||||||
- name: Configure vim plugin list
|
- name: Configure vim plugin list
|
||||||
template:
|
ansible.builtin.template:
|
||||||
src: plugininstall.j2
|
src: plugininstall.j2
|
||||||
dest: "{{ ansible_user_dir }}/.config/{{ variant }}/plugininstall.vim"
|
dest: "{{ ansible_user_dir }}/.config/{{ variant }}/plugininstall.vim"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
notify:
|
notify:
|
||||||
- "{{ variant }} plugins changed"
|
- "{{ variant }} plugins changed"
|
||||||
loop: "{{ vim_variants }}"
|
loop: "{{ vim_variants }}"
|
||||||
|
@ -45,10 +46,10 @@
|
||||||
loop_var: variant
|
loop_var: variant
|
||||||
|
|
||||||
- name: Configure vim
|
- name: Configure vim
|
||||||
template:
|
ansible.builtin.template:
|
||||||
src: init.vim.j2
|
src: init.vim.j2
|
||||||
dest: "{{ ansible_user_dir }}/.config/{{ variant }}/init.vim"
|
dest: "{{ ansible_user_dir }}/.config/{{ variant }}/init.vim"
|
||||||
mode: "u=rw,g=r,o=r"
|
mode: u=rw,g=r,o=r
|
||||||
loop: "{{ vim_variants }}"
|
loop: "{{ vim_variants }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: variant
|
loop_var: variant
|
||||||
|
|
|
@ -43,6 +43,9 @@ local servers = {
|
||||||
{% if 'ansible' in dev_stuffs %}
|
{% if 'ansible' in dev_stuffs %}
|
||||||
"ansiblels",
|
"ansiblels",
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if 'nix' in dev_stuffs %}
|
||||||
|
"rnix",
|
||||||
|
{% endif %}
|
||||||
{% if 'perl' in dev_stuffs %}
|
{% if 'perl' in dev_stuffs %}
|
||||||
"perlls",
|
"perlls",
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -53,7 +56,7 @@ local servers = {
|
||||||
"phpactor", -- Install this one manually https://phpactor.readthedocs.io/en/master/usage/standalone.html#global-installation
|
"phpactor", -- Install this one manually https://phpactor.readthedocs.io/en/master/usage/standalone.html#global-installation
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if 'sql' in dev_stuffs %}
|
{% if 'sql' in dev_stuffs %}
|
||||||
"sqls",
|
"sqlls",
|
||||||
{% endif %}
|
{% endif %}
|
||||||
}
|
}
|
||||||
for _, lsp in ipairs(servers) do
|
for _, lsp in ipairs(servers) do
|
||||||
|
|
|
@ -20,7 +20,6 @@ require'nvim-treesitter.configs'.setup {
|
||||||
"gitattributes",
|
"gitattributes",
|
||||||
"gitignore",
|
"gitignore",
|
||||||
"go",
|
"go",
|
||||||
"help",
|
|
||||||
"html",
|
"html",
|
||||||
"http",
|
"http",
|
||||||
"java",
|
"java",
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
ashuffle
|
|
||||||
sleep 1
|
|
||||||
done
|
|
|
@ -1,16 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# TODO Make a good service out of this
|
|
||||||
|
|
||||||
cd /opt/activitywatch # Put your ActivityWatch install folder here
|
|
||||||
|
|
||||||
killall aw-server
|
|
||||||
killall aw-watcher-afk
|
|
||||||
killall aw-watcher-window
|
|
||||||
|
|
||||||
./aw-server/aw-server &
|
|
||||||
./aw-watcher-afk/aw-watcher-afk &
|
|
||||||
./aw-watcher-window/aw-watcher-window & # you can add --exclude-title here to exclude window title tracking for this session only
|
|
||||||
|
|
||||||
notify-send "ActivityWatch started" # Optional, sends a notification when ActivityWatch is started
|
|
||||||
|
|
|
@ -374,12 +374,10 @@ exec --no-startup-id unclutter -root # Hide mouse cursor after some time
|
||||||
#exec --no-startup-id dunst # Notifications (handled by systemd)
|
#exec --no-startup-id dunst # Notifications (handled by systemd)
|
||||||
exec --no-startup-id keynav # Keyboard cursor controller
|
exec --no-startup-id keynav # Keyboard cursor controller
|
||||||
#exec --no-startup-id mpd # Music Player Daemon (handled by systemd)
|
#exec --no-startup-id mpd # Music Player Daemon (handled by systemd)
|
||||||
# exec --no-startup-id ~/.config/i3/ashuffle # MPD Auto-refill
|
|
||||||
exec --no-startup-id autorandr --change --force # Screen configuration and everything that depends on it
|
exec --no-startup-id autorandr --change --force # Screen configuration and everything that depends on it
|
||||||
{% if has_battery %}
|
{% if has_battery %}
|
||||||
exec --no-startup-id ~/.config/i3/batteryNotify -d # Battery state notification
|
exec --no-startup-id ~/.config/i3/batteryNotify -d # Battery state notification
|
||||||
{% endif %}
|
{% endif %}
|
||||||
# exec --no-startup-id ~/.config/i3/aw_start # Activity tracker
|
|
||||||
|
|
||||||
|
|
||||||
{{ base16_schemes['schemes'][base16_scheme]['i3']['colors']['base16-' + base16_scheme + '.config'] }}
|
{{ base16_schemes['schemes'][base16_scheme]['i3']['colors']['base16-' + base16_scheme + '.config'] }}
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
dmenu -fn 'DejaVu Sans Mono-10' -nb '#48483e' -nf '#f1ebeb' -sb '#8fc029' -sf '#272822' -i -l 8 -f "$@"
|
|
|
@ -1,15 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
cachedir=${XDG_CACHE_HOME:-"$HOME/.cache"}
|
|
||||||
if [ -d "$cachedir" ]; then
|
|
||||||
cache=$cachedir/dmenu_run
|
|
||||||
else
|
|
||||||
cache=$HOME/.dmenu_cache # if no xdg dir, fall back to dotfile in ~
|
|
||||||
fi
|
|
||||||
(
|
|
||||||
IFS=:
|
|
||||||
if stest -dqr -n "$cache" $PATH; then
|
|
||||||
stest -flx $PATH | sort -u | tee "$cache" | $HOME/.config/i3/dmenu_cmd -p 'Run' "$@"
|
|
||||||
else
|
|
||||||
$HOME/.config/i3/dmenu_cmd -p 'Run' "$@" < "$cache"
|
|
||||||
fi
|
|
||||||
) | ${SHELL:-"/bin/sh"} &
|
|
|
@ -1,26 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Send a key event to the current multimedia application or to MPD
|
|
||||||
|
|
||||||
# Currently since I did not found a way to test if a keystroke
|
|
||||||
# is grabbed by a windows or not, we test if MPD is playing
|
|
||||||
|
|
||||||
echo 8 "$1" "$2" "$(xdotool getactivewindow)" >> /tmp/dbg
|
|
||||||
|
|
||||||
if [ $# != 2 ]; then
|
|
||||||
echo "Usage: $0 KEY MPC_COMMAND"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $(mpc status | wc -l) -ne 1 ]; then
|
|
||||||
# If mpd is running
|
|
||||||
mpc $2
|
|
||||||
else
|
|
||||||
# If mpd is not running
|
|
||||||
# echo "$1" "$2" "$(xdotool getactivewindow)" >> /tmp/dbg
|
|
||||||
xdotool key --window $(xdotool getactivewindow) $1
|
|
||||||
echo xdotool key --window $(xdotool getactivewindow) $1 >> /tmp/dbg
|
|
||||||
fi
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 67 B |
|
@ -1,67 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
"""
|
|
||||||
Logs what window is in focus
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
import datetime
|
|
||||||
import os
|
|
||||||
import typing
|
|
||||||
|
|
||||||
import i3ipc
|
|
||||||
|
|
||||||
|
|
||||||
class ScreenTime:
|
|
||||||
FIELDS = ["date", "type", "class", "role", "instance", "title"]
|
|
||||||
|
|
||||||
def write(self, line: typing.Dict) -> None:
|
|
||||||
now = datetime.datetime.now()
|
|
||||||
line["date"] = now.timestamp()
|
|
||||||
|
|
||||||
print("WROTE", line)
|
|
||||||
with open(self.csv_path, "a") as typedfd:
|
|
||||||
writer = csv.DictWriter(typedfd, fieldnames=self.FIELDS)
|
|
||||||
writer.writerow(line)
|
|
||||||
|
|
||||||
def on_window_event(
|
|
||||||
self, _: i3ipc.connection.Connection, e: i3ipc.events.WindowEvent
|
|
||||||
) -> None:
|
|
||||||
focused = self.i3.get_tree().find_focused()
|
|
||||||
self.write(
|
|
||||||
{
|
|
||||||
"type": "window_" + e.change,
|
|
||||||
"class": focused.window_class,
|
|
||||||
"role": focused.window_role,
|
|
||||||
"title": focused.window_title,
|
|
||||||
"instance": focused.window_instance,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
def on_mode_event(
|
|
||||||
self, _: i3ipc.connection.Connection, e: i3ipc.events.ModeEvent
|
|
||||||
) -> None:
|
|
||||||
self.write({"type": "mode", "title": e.change})
|
|
||||||
|
|
||||||
def __init__(self) -> None:
|
|
||||||
self.i3 = i3ipc.Connection()
|
|
||||||
self.i3.on(i3ipc.Event.WINDOW, self.on_window_event)
|
|
||||||
self.i3.on(i3ipc.Event.MODE, self.on_mode_event)
|
|
||||||
|
|
||||||
self.csv_path = os.path.join(
|
|
||||||
os.path.expanduser(os.getenv("XDG_CACHE_PATH", "~/.cache/")),
|
|
||||||
"screentime.csv",
|
|
||||||
)
|
|
||||||
if not os.path.isfile(self.csv_path):
|
|
||||||
with open(self.csv_path, "w") as typedfd:
|
|
||||||
writer = csv.DictWriter(typedfd, fieldnames=self.FIELDS)
|
|
||||||
writer.writeheader()
|
|
||||||
self.write({"type": "start"})
|
|
||||||
|
|
||||||
def main(self) -> None:
|
|
||||||
self.i3.main()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
ST = ScreenTime()
|
|
||||||
ST.main()
|
|
|
@ -5,7 +5,7 @@ i3ipc==1.6.0
|
||||||
ifaddr==0.1.4
|
ifaddr==0.1.4
|
||||||
ipaddress==1.0.22
|
ipaddress==1.0.22
|
||||||
psutil==5.4.7
|
psutil==5.4.7
|
||||||
pulsectl==18.8.0
|
pulsectl>=23.5.2<24
|
||||||
pyinotify==0.9.6
|
pyinotify==0.9.6
|
||||||
python-mpd2>=3.0.0<4
|
python-mpd2>=3.0.0<4
|
||||||
python-uinput==0.11.2
|
python-uinput==0.11.2
|
||||||
|
|
|
@ -9,7 +9,7 @@ cache_directory=/tmp/my_mpv_thumbnails
|
||||||
|
|
||||||
# Whether to generate thumbnails automatically on video load, without a keypress
|
# Whether to generate thumbnails automatically on video load, without a keypress
|
||||||
# Defaults to yes
|
# Defaults to yes
|
||||||
autogenerate=yes
|
autogenerate=no
|
||||||
|
|
||||||
# Only automatically thumbnail videos shorter than this (in seconds)
|
# Only automatically thumbnail videos shorter than this (in seconds)
|
||||||
# You will have to press T (or your own keybind) to enable the thumbnail previews
|
# You will have to press T (or your own keybind) to enable the thumbnail previews
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
no-audio-display
|
no-audio-display
|
||||||
|
save-position-on-quit
|
||||||
# Required by thumbnails script
|
# Required by thumbnails script
|
||||||
osc=no
|
osc=no
|
||||||
|
|
30
config/scripts/lip
Executable file
30
config/scripts/lip
Executable file
|
@ -0,0 +1,30 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
url="https://ip.frogeye.fr/json"
|
||||||
|
cachedir="$HOME/.cache/lip"
|
||||||
|
|
||||||
|
ip="${1:-}"
|
||||||
|
jq_sel="del(.user_agent)"
|
||||||
|
|
||||||
|
if [ $# -gt 1 ]
|
||||||
|
then
|
||||||
|
shift
|
||||||
|
jq_sel="$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ -n "$ip" ]
|
||||||
|
then
|
||||||
|
cachefile="$cachedir/$ip"
|
||||||
|
if ! find "$cachefile" -mtime -7 &> /dev/null
|
||||||
|
then
|
||||||
|
mkdir -p "$cachedir"
|
||||||
|
curl --silent "$url?ip=$ip" > "$cachefile"
|
||||||
|
fi
|
||||||
|
cat "$cachefile" | jq $jq_sel
|
||||||
|
else
|
||||||
|
curl --silent "$url" | jq $jq_sel
|
||||||
|
fi
|
||||||
|
|
|
@ -2,3 +2,6 @@ coloredlogs>=10.0<11
|
||||||
progressbar2>=3.47.0<4
|
progressbar2>=3.47.0<4
|
||||||
yt-dlp>=2021.10.22
|
yt-dlp>=2021.10.22
|
||||||
ConfigArgParse>=1.5<2
|
ConfigArgParse>=1.5<2
|
||||||
|
asyncinotify
|
||||||
|
ffmpeg
|
||||||
|
r128gain
|
||||||
|
|
|
@ -209,7 +209,7 @@ class RVElement:
|
||||||
def duration(self) -> int:
|
def duration(self) -> int:
|
||||||
assert self.is_video
|
assert self.is_video
|
||||||
assert self.ytdl_infos
|
assert self.ytdl_infos
|
||||||
return self.ytdl_infos["duration"]
|
return int(self.ytdl_infos["duration"])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_video(self) -> bool:
|
def is_video(self) -> bool:
|
||||||
|
|
|
@ -9,7 +9,6 @@ import io
|
||||||
import pprint
|
import pprint
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import uuid
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
@ -34,6 +33,7 @@ if __name__ == "__main__":
|
||||||
)
|
)
|
||||||
|
|
||||||
parser.add_argument("-l", "--helo", env_var="HELO")
|
parser.add_argument("-l", "--helo", env_var="HELO")
|
||||||
|
parser.add_argument("-L", "--helo-verb", env_var="HELO_VERB", default="EHLO")
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-s", "--sender", env_var="SENDER", default="geoffrey@frogeye.fr"
|
"-s", "--sender", env_var="SENDER", default="geoffrey@frogeye.fr"
|
||||||
)
|
)
|
||||||
|
@ -63,6 +63,9 @@ if __name__ == "__main__":
|
||||||
parser.add_argument("-b", "--body", env_var="BODY", default="")
|
parser.add_argument("-b", "--body", env_var="BODY", default="")
|
||||||
parser.add_argument("-g", "--gtube", env_var="GTUBE", action="store_true")
|
parser.add_argument("-g", "--gtube", env_var="GTUBE", action="store_true")
|
||||||
parser.add_argument("-m", "--me", env_var="ME", default="Geoffrey")
|
parser.add_argument("-m", "--me", env_var="ME", default="Geoffrey")
|
||||||
|
parser.add_argument(
|
||||||
|
"-H", "--headers", default=[], action="append", env_var="HEADER"
|
||||||
|
)
|
||||||
|
|
||||||
parser.add_argument("-y", "--dryrun", env_var="DRYRUN", action="store_true")
|
parser.add_argument("-y", "--dryrun", env_var="DRYRUN", action="store_true")
|
||||||
parser.add_argument("-q", "--quiet", env_var="QUIET", action="store_true")
|
parser.add_argument("-q", "--quiet", env_var="QUIET", action="store_true")
|
||||||
|
@ -79,14 +82,18 @@ if __name__ == "__main__":
|
||||||
if args.to is None:
|
if args.to is None:
|
||||||
args.to = args.receiver[0]
|
args.to = args.receiver[0]
|
||||||
if args.reply_to is None:
|
if args.reply_to is None:
|
||||||
args.reply_to = args.to
|
args.reply_to = getattr(args, "from")
|
||||||
if args.password:
|
if args.password:
|
||||||
password = args.password
|
password = args.password
|
||||||
args.password = "********"
|
args.password = "********"
|
||||||
mid = f"{uuid.uuid1()}@{args.helo}"
|
mid = email.utils.make_msgid(domain=args.helo)
|
||||||
|
|
||||||
# Transmission content
|
# Transmission content
|
||||||
|
|
||||||
|
headers = ""
|
||||||
|
if args.headers:
|
||||||
|
headers = "\n" + "\n".join(args.headers)
|
||||||
|
|
||||||
gtube = ""
|
gtube = ""
|
||||||
if args.gtube:
|
if args.gtube:
|
||||||
gtube = """
|
gtube = """
|
||||||
|
@ -102,7 +109,7 @@ From: {args.me} <{getattr(args, 'from')}>
|
||||||
Subject: {args.subject}
|
Subject: {args.subject}
|
||||||
To: {args.to}
|
To: {args.to}
|
||||||
Reply-To: {args.reply_to}
|
Reply-To: {args.reply_to}
|
||||||
Message-ID: {mid}
|
Message-ID: {mid}{headers}
|
||||||
|
|
||||||
Hello there,
|
Hello there,
|
||||||
|
|
||||||
|
@ -170,7 +177,7 @@ Input arguments:
|
||||||
send("QUIT") # TODO Can loop if QUIT fails
|
send("QUIT") # TODO Can loop if QUIT fails
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
def send(command: str) -> None:
|
def _send(command: str) -> None:
|
||||||
if not args.quiet:
|
if not args.quiet:
|
||||||
print(colorama.Fore.BLUE + f"> {command}" + colorama.Fore.RESET)
|
print(colorama.Fore.BLUE + f"> {command}" + colorama.Fore.RESET)
|
||||||
|
|
||||||
|
@ -182,13 +189,15 @@ Input arguments:
|
||||||
p.stdin.write(cmd)
|
p.stdin.write(cmd)
|
||||||
p.stdin.flush()
|
p.stdin.flush()
|
||||||
|
|
||||||
|
def send(command: str) -> None:
|
||||||
|
_send(command)
|
||||||
recv()
|
recv()
|
||||||
|
|
||||||
# Transmission
|
# Transmission
|
||||||
|
|
||||||
if args.security != "starttls":
|
if args.security != "starttls":
|
||||||
recv()
|
recv()
|
||||||
send(f"EHLO {args.helo}")
|
send(f"{args.helo_verb} {args.helo}")
|
||||||
if args.user:
|
if args.user:
|
||||||
encoded = base64.b64encode(
|
encoded = base64.b64encode(
|
||||||
args.user.encode()
|
args.user.encode()
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# Compress a video to make it fit under a certain size.
|
||||||
|
# Usage: videoQuota SIZE SRC DST
|
||||||
|
# SIZE: destination video size in bytes
|
||||||
|
# SRC: source video file
|
||||||
|
# DST: destination video file
|
||||||
|
# Example: videoQuota 20971520 source.mov dest.mp4
|
||||||
|
# To make a ~20 MiB MP4 of a MOV video
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
import logging
|
|
||||||
|
|
||||||
import coloredlogs
|
|
||||||
|
|
||||||
coloredlogs.install(level="DEBUG", fmt="%(levelname)s %(message)s")
|
|
||||||
log = logging.getLogger()
|
|
||||||
|
|
||||||
|
|
||||||
def duration_file(path: str) -> float:
|
def duration_file(path: str) -> float:
|
||||||
|
|
Loading…
Reference in a new issue