Merge remote-tracking branch 'origin'

This commit is contained in:
Geoffrey Frogeye 2023-11-17 19:58:09 +01:00
commit dc6af1cb63
45 changed files with 429 additions and 638 deletions

View file

@ -4,6 +4,7 @@ dev_stuffs:
- ansible - ansible
- docker - docker
- network - network
- nix
- perl - perl
- php - php
- python - python

View file

@ -1,3 +1,4 @@
---
- name: Default - name: Default
hosts: all hosts: all
roles: roles:

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 }}"

View file

@ -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

View file

@ -1 +1,2 @@
---
gnupghome: "{{ ansible_user_dir }}/.config/gnupg" gnupghome: "{{ ansible_user_dir }}/.config/gnupg"

View file

@ -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

View file

@ -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

View file

@ -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 #}

View file

@ -0,0 +1,3 @@
nix
rnix-lsp

View file

@ -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 %}

View file

@ -1 +1 @@
sqls sql-language-server

View file

@ -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

View file

@ -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,

View file

@ -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={

View file

@ -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

View file

@ -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"

View file

@ -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

View file

@ -1 +0,0 @@
base16_scheme: solarized-dark

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -20,7 +20,6 @@ require'nvim-treesitter.configs'.setup {
"gitattributes", "gitattributes",
"gitignore", "gitignore",
"go", "go",
"help",
"html", "html",
"http", "http",
"java", "java",

View file

@ -1,7 +0,0 @@
#!/usr/bin/env bash
while true
do
ashuffle
sleep 1
done

View file

@ -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

View file

@ -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'] }}

View file

@ -1,2 +0,0 @@
#!/bin/sh
dmenu -fn 'DejaVu Sans Mono-10' -nb '#48483e' -nf '#f1ebeb' -sb '#8fc029' -sf '#272822' -i -l 8 -f "$@"

View file

@ -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"} &

View file

@ -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

View file

@ -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()

View file

@ -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

View file

@ -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

View file

@ -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
View 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

View file

@ -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

View file

@ -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:

View file

@ -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()
@ -198,9 +207,9 @@ Input arguments:
+ password.encode() + password.encode()
).decode() ).decode()
send(f"AUTH PLAIN {encoded}") send(f"AUTH PLAIN {encoded}")
send(f"MAIL FROM: <{args.sender}>" + (" SMTPUTF8" if args.smtputf8 else "")) send(f"MAIL FROM:<{args.sender}>" + (" SMTPUTF8" if args.smtputf8 else ""))
for receiver in args.receiver: for receiver in args.receiver:
send(f"RCPT TO: <{receiver}>") send(f"RCPT TO:<{receiver}>")
if not args.callout: if not args.callout:
send("DATA") send("DATA")
send(text) send(text)

View file

@ -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: