From 8957f4e7d350671265a2762eafa0a7a651d52839 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Tue, 12 May 2026 23:37:39 +0200 Subject: [PATCH] Clean up Arch profile: remove i3/Void-specific config and fix GNOME integration - Remove XFCE/i3-specific packages and dotfiles from Arch path (xarchiver, udiskie, Thunar, xfce-polkit, clipman, screenshooter) - Separate per-OS dotfiles: mimeapps, udiskie config, GTK theme script, udiskie-password, dbus-session and ssh-agent fragments moved to Void-only - Add mimeapps.arch.list with Nautilus/GNOME associations for nymph - Move dunst/rofi directory creation from common to profile_desktop_i3 - Add gnome-keyring PAM hooks for GDM (gdm-password) in profile_desktop_gnome - Remove ssh-agent.service from desktop_systemd_user_services on Arch; drop ssh-agent dependency and hardcoded socket from emacs.service - Add ttf-hack-nerd to Arch font packages - Fix rustup bootstrap: use rustup-init on Void, rustup toolchain install on Arch Co-Authored-By: Claude Sonnet 4.6 --- ansible/inventory/group_vars/arch.yml | 4 +- ansible/inventory/group_vars/desktop.yml | 32 +-- ansible/inventory/group_vars/void.yml | 28 ++ .../profile_desktop_common/tasks/main.yml | 20 +- .../profile_desktop_gnome/tasks/main.yml | 24 ++ .../roles/profile_desktop_i3/tasks/main.yml | 2 + dotfiles/desktop/.config/mimeapps.arch.list | 250 ++++++++++++++++++ .../.config/systemd/user/emacs.service | 3 - 8 files changed, 324 insertions(+), 39 deletions(-) create mode 100644 dotfiles/desktop/.config/mimeapps.arch.list diff --git a/ansible/inventory/group_vars/arch.yml b/ansible/inventory/group_vars/arch.yml index b47a1ad..6398534 100644 --- a/ansible/inventory/group_vars/arch.yml +++ b/ansible/inventory/group_vars/arch.yml @@ -64,7 +64,6 @@ arch_desktop_common_packages: - brightnessctl - dex - pinentry - - udiskie - xdg-desktop-portal - xdg-desktop-portal-gtk - xdg-user-dirs @@ -116,12 +115,12 @@ arch_profile_packages: - texlive-binextra - texlive-latex - texlive-latexextra + - ttf-hack-nerd - ttf-liberation - ttf-nerd-fonts-symbols - ctags - uv - virt-manager - - xarchiver - xournalpp - zstd @@ -135,7 +134,6 @@ enabled_services: - ufw desktop_systemd_user_services: - - ssh-agent.service - emacs.service - syncthing.service - rclone-pcloud.service diff --git a/ansible/inventory/group_vars/desktop.yml b/ansible/inventory/group_vars/desktop.yml index 8677c83..b16ca9b 100644 --- a/ansible/inventory/group_vars/desktop.yml +++ b/ansible/inventory/group_vars/desktop.yml @@ -50,14 +50,6 @@ desktop_common_dotfiles: src: .config/alacritty/ dest: .config/alacritty/ mode: preserve - - name: Thunar config - src: .config/Thunar/ - dest: .config/Thunar/ - mode: preserve - - name: MIME application defaults - src: .config/mimeapps.list - dest: .config/mimeapps.list - mode: "0644" - name: fastfetch config src: .config/fastfetch/ dest: .config/fastfetch/ @@ -78,10 +70,6 @@ desktop_common_dotfiles: src: .config/mpv/ dest: .config/mpv/ mode: preserve - - name: Udiskie config - src: .config/udiskie/ - dest: .config/udiskie/ - mode: preserve - name: Bash cargo env fragment src: .bashrc.d/08-cargo-env.sh dest: .bashrc.d/08-cargo-env.sh @@ -94,14 +82,6 @@ desktop_common_dotfiles: src: .bashrc.d/12-manpages.sh dest: .bashrc.d/12-manpages.sh mode: "0644" - - name: Bash DBus session fragment - src: .bashrc.d/14-dbus-session.sh - dest: .bashrc.d/14-dbus-session.sh - mode: "0644" - - name: Bash SSH agent socket fragment - src: .bashrc.d/16-ssh-agent-socket.sh - dest: .bashrc.d/16-ssh-agent-socket.sh - mode: "0644" - name: Bash editor fragment src: .bashrc.d/20-editor-desktop.sh dest: .bashrc.d/20-editor-desktop.sh @@ -138,14 +118,6 @@ desktop_common_dotfiles: src: .authinfo.gpg dest: .authinfo.gpg mode: "0600" - - name: GTK theme setup script - src: .local/bin/setup-gtk-theme - dest: .local/bin/setup-gtk-theme - mode: "0755" - - name: Udiskie password helper - src: .local/bin/udiskie-password - dest: .local/bin/udiskie-password - mode: "0755" - name: Calibre database Flatpak wrapper src: .local/bin/calibredb dest: .local/bin/calibredb @@ -160,6 +132,10 @@ desktop_arch_dotfiles: src: .config/systemd/user/ dest: .config/systemd/user/ mode: preserve + - name: MIME application defaults + src: .config/mimeapps.arch.list + dest: .config/mimeapps.list + mode: "0644" desktop_emacs_dotfiles: - name: Emacs config diff --git a/ansible/inventory/group_vars/void.yml b/ansible/inventory/group_vars/void.yml index 1a9e566..c8bfa4a 100644 --- a/ansible/inventory/group_vars/void.yml +++ b/ansible/inventory/group_vars/void.yml @@ -88,10 +88,38 @@ desktop_void_dotfiles: src: .config/service/ dest: .config/service/ mode: preserve + - name: Thunar config + src: .config/Thunar/ + dest: .config/Thunar/ + mode: preserve + - name: MIME application defaults + src: .config/mimeapps.list + dest: .config/mimeapps.list + mode: "0644" + - name: Bash DBus session fragment + src: .bashrc.d/14-dbus-session.sh + dest: .bashrc.d/14-dbus-session.sh + mode: "0644" + - name: Bash SSH agent socket fragment + src: .bashrc.d/16-ssh-agent-socket.sh + dest: .bashrc.d/16-ssh-agent-socket.sh + mode: "0644" - name: Bash runit desktop fragment src: .bashrc.d/15-runit-desktop.sh dest: .bashrc.d/15-runit-desktop.sh mode: "0644" + - name: GTK theme setup script + src: .local/bin/setup-gtk-theme + dest: .local/bin/setup-gtk-theme + mode: "0755" + - name: Udiskie password helper + src: .local/bin/udiskie-password + dest: .local/bin/udiskie-password + mode: "0755" + - name: Udiskie config + src: .config/udiskie/ + dest: .config/udiskie/ + mode: preserve - name: Turnstile environment update script src: .local/bin/update-turnstile-env dest: .local/bin/update-turnstile-env diff --git a/ansible/roles/profile_desktop_common/tasks/main.yml b/ansible/roles/profile_desktop_common/tasks/main.yml index 5108863..8e401b0 100644 --- a/ansible/roles/profile_desktop_common/tasks/main.yml +++ b/ansible/roles/profile_desktop_common/tasks/main.yml @@ -19,10 +19,7 @@ loop: - "{{ user_home }}/.config" - "{{ user_home }}/.config/autostart" - - "{{ user_home }}/.config/dunst" - "{{ user_home }}/.config/alacritty" - - "{{ user_home }}/.config/Thunar" - - "{{ user_home }}/.config/rofi" - "{{ user_home }}/.config/systemd" - "{{ user_home }}/.config/systemd/user" - "{{ user_home }}/.bashrc.d" @@ -504,14 +501,27 @@ path: "{{ user_home }}/.cargo/bin/rustc" register: rustup_initialized - - name: Run rustup-init with cargo env sourced + - name: Run rustup-init with cargo env sourced (Void) ansible.builtin.shell: cmd: . ~/.cargo/env && rustup-init -y --no-modify-path creates: "{{ user_home }}/.cargo/bin/rustc" become_user: "{{ username }}" environment: HOME: "{{ user_home }}" - when: not rustup_initialized.stat.exists + when: + - not rustup_initialized.stat.exists + - "'void' in group_names" + + - name: Install Rust stable toolchain via rustup (Arch) + ansible.builtin.command: + cmd: rustup toolchain install stable + creates: "{{ user_home }}/.cargo/bin/rustc" + become_user: "{{ username }}" + environment: + HOME: "{{ user_home }}" + when: + - not rustup_initialized.stat.exists + - "'arch' in group_names" - name: Ensure cargo env is sourced in shell profile ansible.builtin.lineinfile: diff --git a/ansible/roles/profile_desktop_gnome/tasks/main.yml b/ansible/roles/profile_desktop_gnome/tasks/main.yml index 0c5ef5a..1460f86 100644 --- a/ansible/roles/profile_desktop_gnome/tasks/main.yml +++ b/ansible/roles/profile_desktop_gnome/tasks/main.yml @@ -16,3 +16,27 @@ force: true owner: root group: root + +- name: Enable gnome-keyring PAM auth hook for GDM + tags: [gnome] + ansible.builtin.lineinfile: + path: /etc/pam.d/gdm-password + insertafter: '^auth\s+include\s+system-local-login$' + line: "auth optional pam_gnome_keyring.so" + state: present + +- name: Enable gnome-keyring PAM session hook for GDM + tags: [gnome] + ansible.builtin.lineinfile: + path: /etc/pam.d/gdm-password + insertafter: '^session\s+include\s+system-local-login$' + line: "session optional pam_gnome_keyring.so auto_start" + state: present + +- name: Enable gnome-keyring PAM password hook for GDM + tags: [gnome] + ansible.builtin.lineinfile: + path: /etc/pam.d/gdm-password + insertafter: '^password\s+include\s+system-local-login$' + line: "password optional pam_gnome_keyring.so use_authtok" + state: present diff --git a/ansible/roles/profile_desktop_i3/tasks/main.yml b/ansible/roles/profile_desktop_i3/tasks/main.yml index 16c53f6..b7ef6ad 100644 --- a/ansible/roles/profile_desktop_i3/tasks/main.yml +++ b/ansible/roles/profile_desktop_i3/tasks/main.yml @@ -8,8 +8,10 @@ group: "{{ user_group }}" mode: "0755" loop: + - "{{ user_home }}/.config/dunst" - "{{ user_home }}/.config/i3" - "{{ user_home }}/.config/i3blocks" + - "{{ user_home }}/.config/rofi" when: "'i3' in (desktop_sessions_enabled | default([]))" - name: Install allowed emptty X11 sessions diff --git a/dotfiles/desktop/.config/mimeapps.arch.list b/dotfiles/desktop/.config/mimeapps.arch.list new file mode 100644 index 0000000..ceb02b9 --- /dev/null +++ b/dotfiles/desktop/.config/mimeapps.arch.list @@ -0,0 +1,250 @@ +[Default Applications] +text/html=userapp-Firefox-91DVN3.desktop +x-scheme-handler/http=userapp-Firefox-91DVN3.desktop +x-scheme-handler/https=userapp-Firefox-91DVN3.desktop +x-scheme-handler/about=firefox.desktop +x-scheme-handler/unknown=firefox.desktop +application/pdf=com.github.xournalpp.xournalpp.desktop +application/json=emacs.desktop +application/json5=emacs.desktop +application/xml=emacs.desktop +application/xml-external-parsed-entity=emacs.desktop +application/x-shellscript=emacs.desktop +application/yaml=emacs.desktop +inode/directory=org.gnome.Nautilus.desktop +audio/aac=mpv.desktop +audio/flac=mpv.desktop +audio/m4a=mpv.desktop +audio/mp3=mpv.desktop +audio/mpeg=mpv.desktop +audio/mp4=mpv.desktop +audio/ogg=mpv.desktop +audio/opus=mpv.desktop +audio/vnd.wave=mpv.desktop +audio/wav=mpv.desktop +audio/webm=mpv.desktop +audio/x-aac=mpv.desktop +audio/x-m4a=mpv.desktop +audio/x-matroska=mpv.desktop +audio/x-mp3=mpv.desktop +audio/x-mpegurl=mpv.desktop +audio/x-ms-wma=mpv.desktop +audio/x-ogg=mpv.desktop +audio/x-pn-wav=mpv.desktop +audio/x-scpls=mpv.desktop +audio/x-wav=mpv.desktop +video/3gp=mpv.desktop +video/3gpp=mpv.desktop +video/3gpp2=mpv.desktop +video/avi=mpv.desktop +video/mp2t=mpv.desktop +video/mp4=mpv.desktop +video/mp4v-es=mpv.desktop +video/mpeg=mpv.desktop +video/ogg=mpv.desktop +video/quicktime=mpv.desktop +video/vnd.avi=mpv.desktop +video/webm=mpv.desktop +video/x-avi=mpv.desktop +video/x-flc=mpv.desktop +video/x-flic=mpv.desktop +video/x-flv=mpv.desktop +video/x-m4v=mpv.desktop +video/x-matroska=mpv.desktop +video/x-mpeg2=mpv.desktop +video/x-ms-asf=mpv.desktop +video/x-ms-wmv=mpv.desktop +video/x-msvideo=mpv.desktop +video/x-ogm+ogg=mpv.desktop +video/x-theora=mpv.desktop +video/x-theora+ogg=mpv.desktop +application/msword=libreoffice-writer.desktop +application/rtf=libreoffice-writer.desktop +application/vnd.ms-word=libreoffice-writer.desktop +application/vnd.ms-word.document.macroEnabled.12=libreoffice-writer.desktop +application/vnd.ms-word.template.macroEnabled.12=libreoffice-writer.desktop +application/vnd.oasis.opendocument.text=libreoffice-writer.desktop +application/vnd.oasis.opendocument.text-template=libreoffice-writer.desktop +application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop +application/vnd.openxmlformats-officedocument.wordprocessingml.template=libreoffice-writer.desktop +application/x-doc=libreoffice-writer.desktop +text/rtf=libreoffice-writer.desktop +application/csv=libreoffice-calc.desktop +application/excel=libreoffice-calc.desktop +application/msexcel=libreoffice-calc.desktop +application/tab-separated-values=libreoffice-calc.desktop +application/vnd.ms-excel=libreoffice-calc.desktop +application/vnd.ms-excel.sheet.binary.macroEnabled.12=libreoffice-calc.desktop +application/vnd.ms-excel.sheet.macroEnabled.12=libreoffice-calc.desktop +application/vnd.ms-excel.template.macroEnabled.12=libreoffice-calc.desktop +application/vnd.oasis.opendocument.spreadsheet=libreoffice-calc.desktop +application/vnd.oasis.opendocument.spreadsheet-template=libreoffice-calc.desktop +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=libreoffice-calc.desktop +application/vnd.openxmlformats-officedocument.spreadsheetml.template=libreoffice-calc.desktop +application/x-dos_ms_excel=libreoffice-calc.desktop +application/x-excel=libreoffice-calc.desktop +application/x-ms-excel=libreoffice-calc.desktop +application/x-msexcel=libreoffice-calc.desktop +text/comma-separated-values=libreoffice-calc.desktop +text/csv=libreoffice-calc.desktop +text/tab-separated-values=libreoffice-calc.desktop +text/x-comma-separated-values=libreoffice-calc.desktop +text/x-csv=libreoffice-calc.desktop +application/mspowerpoint=libreoffice-impress.desktop +application/vnd.ms-powerpoint=libreoffice-impress.desktop +application/vnd.ms-powerpoint.presentation.macroEnabled.12=libreoffice-impress.desktop +application/vnd.ms-powerpoint.slideshow.macroEnabled.12=libreoffice-impress.desktop +application/vnd.ms-powerpoint.template.macroEnabled.12=libreoffice-impress.desktop +application/vnd.oasis.opendocument.presentation=libreoffice-impress.desktop +application/vnd.oasis.opendocument.presentation-template=libreoffice-impress.desktop +application/vnd.openxmlformats-officedocument.presentationml.presentation=libreoffice-impress.desktop +application/vnd.openxmlformats-officedocument.presentationml.slide=libreoffice-impress.desktop +application/vnd.openxmlformats-officedocument.presentationml.slideshow=libreoffice-impress.desktop +application/vnd.openxmlformats-officedocument.presentationml.template=libreoffice-impress.desktop +text/markdown=emacs.desktop +text/org=emacs.desktop +text/plain=emacs.desktop +text/rust=emacs.desktop +text/x-c++hdr=emacs.desktop +text/x-c++src=emacs.desktop +text/x-chdr=emacs.desktop +text/x-csrc=emacs.desktop +text/x-emacs-lisp=emacs.desktop +text/x-go=emacs.desktop +text/x-java=emacs.desktop +text/x-makefile=emacs.desktop +text/x-patch=emacs.desktop +text/x-python=emacs.desktop +text/x-python3=emacs.desktop +text/x-readme=emacs.desktop +text/x-rst=emacs.desktop +text/x-tex=emacs.desktop +text/x-texinfo=emacs.desktop +x-scheme-handler/chrome=userapp-Firefox-91DVN3.desktop +application/x-extension-htm=userapp-Firefox-91DVN3.desktop +application/x-extension-html=userapp-Firefox-91DVN3.desktop +application/x-extension-shtml=userapp-Firefox-91DVN3.desktop +application/xhtml+xml=userapp-Firefox-91DVN3.desktop +application/x-extension-xhtml=userapp-Firefox-91DVN3.desktop +application/x-extension-xht=userapp-Firefox-91DVN3.desktop + +[Added Associations] +application/json=emacs.desktop; +application/json5=emacs.desktop; +application/pdf=com.github.xournalpp.xournalpp.desktop; +application/xml=emacs.desktop; +application/xml-external-parsed-entity=emacs.desktop; +application/x-shellscript=emacs.desktop; +application/yaml=emacs.desktop; +text/plain=emacs.desktop; +inode/directory=org.gnome.Nautilus.desktop; +audio/aac=mpv.desktop; +audio/flac=mpv.desktop; +audio/m4a=mpv.desktop; +audio/mp3=mpv.desktop; +audio/mpeg=mpv.desktop; +audio/mp4=mpv.desktop; +audio/ogg=mpv.desktop; +audio/opus=mpv.desktop; +audio/vnd.wave=mpv.desktop; +audio/wav=mpv.desktop; +audio/webm=mpv.desktop; +audio/x-aac=mpv.desktop; +audio/x-m4a=mpv.desktop; +audio/x-matroska=mpv.desktop; +audio/x-mp3=mpv.desktop; +audio/x-mpegurl=mpv.desktop; +audio/x-ms-wma=mpv.desktop; +audio/x-ogg=mpv.desktop; +audio/x-pn-wav=mpv.desktop; +audio/x-scpls=mpv.desktop; +audio/x-wav=mpv.desktop; +video/3gp=mpv.desktop; +video/3gpp=mpv.desktop; +video/3gpp2=mpv.desktop; +video/avi=mpv.desktop; +video/mp2t=mpv.desktop; +video/mp4=mpv.desktop; +video/mp4v-es=mpv.desktop; +video/mpeg=mpv.desktop; +video/ogg=mpv.desktop; +video/quicktime=mpv.desktop; +video/vnd.avi=mpv.desktop; +video/webm=mpv.desktop; +video/x-avi=mpv.desktop; +video/x-flc=mpv.desktop; +video/x-flic=mpv.desktop; +video/x-flv=mpv.desktop; +video/x-m4v=mpv.desktop; +video/x-matroska=mpv.desktop; +video/x-mpeg2=mpv.desktop; +video/x-ms-asf=mpv.desktop; +video/x-ms-wmv=mpv.desktop; +video/x-msvideo=mpv.desktop; +video/x-ogm+ogg=mpv.desktop; +video/x-theora=mpv.desktop; +video/x-theora+ogg=mpv.desktop; +application/msword=libreoffice-writer.desktop; +application/rtf=libreoffice-writer.desktop; +application/vnd.ms-word=libreoffice-writer.desktop; +application/vnd.ms-word.document.macroEnabled.12=libreoffice-writer.desktop; +application/vnd.ms-word.template.macroEnabled.12=libreoffice-writer.desktop; +application/vnd.oasis.opendocument.text=libreoffice-writer.desktop; +application/vnd.oasis.opendocument.text-template=libreoffice-writer.desktop; +application/vnd.openxmlformats-officedocument.wordprocessingml.document=libreoffice-writer.desktop; +application/vnd.openxmlformats-officedocument.wordprocessingml.template=libreoffice-writer.desktop; +application/x-doc=libreoffice-writer.desktop; +text/rtf=libreoffice-writer.desktop; +application/csv=libreoffice-calc.desktop; +application/excel=libreoffice-calc.desktop; +application/msexcel=libreoffice-calc.desktop; +application/tab-separated-values=libreoffice-calc.desktop; +application/vnd.ms-excel=libreoffice-calc.desktop; +application/vnd.ms-excel.sheet.binary.macroEnabled.12=libreoffice-calc.desktop; +application/vnd.ms-excel.sheet.macroEnabled.12=libreoffice-calc.desktop; +application/vnd.ms-excel.template.macroEnabled.12=libreoffice-calc.desktop; +application/vnd.oasis.opendocument.spreadsheet=libreoffice-calc.desktop; +application/vnd.oasis.opendocument.spreadsheet-template=libreoffice-calc.desktop; +application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=libreoffice-calc.desktop; +application/vnd.openxmlformats-officedocument.spreadsheetml.template=libreoffice-calc.desktop; +application/x-dos_ms_excel=libreoffice-calc.desktop; +application/x-excel=libreoffice-calc.desktop; +application/x-ms-excel=libreoffice-calc.desktop; +application/x-msexcel=libreoffice-calc.desktop; +text/comma-separated-values=libreoffice-calc.desktop; +text/csv=libreoffice-calc.desktop; +text/tab-separated-values=libreoffice-calc.desktop; +text/x-comma-separated-values=libreoffice-calc.desktop; +text/x-csv=libreoffice-calc.desktop; +application/mspowerpoint=libreoffice-impress.desktop; +application/vnd.ms-powerpoint=libreoffice-impress.desktop; +application/vnd.ms-powerpoint.presentation.macroEnabled.12=libreoffice-impress.desktop; +application/vnd.ms-powerpoint.slideshow.macroEnabled.12=libreoffice-impress.desktop; +application/vnd.ms-powerpoint.template.macroEnabled.12=libreoffice-impress.desktop; +application/vnd.oasis.opendocument.presentation=libreoffice-impress.desktop; +application/vnd.oasis.opendocument.presentation-template=libreoffice-impress.desktop; +application/vnd.openxmlformats-officedocument.presentationml.presentation=libreoffice-impress.desktop; +application/vnd.openxmlformats-officedocument.presentationml.slide=libreoffice-impress.desktop; +application/vnd.openxmlformats-officedocument.presentationml.slideshow=libreoffice-impress.desktop; +application/vnd.openxmlformats-officedocument.presentationml.template=libreoffice-impress.desktop; +text/markdown=emacs.desktop; +text/org=emacs.desktop; +text/rust=emacs.desktop; +text/x-c++hdr=emacs.desktop; +text/x-c++src=emacs.desktop; +text/x-chdr=emacs.desktop; +text/x-csrc=emacs.desktop; +text/x-emacs-lisp=emacs.desktop; +text/x-go=emacs.desktop; +text/x-java=emacs.desktop; +text/x-makefile=emacs.desktop; +text/x-patch=emacs.desktop; +text/x-python=emacs.desktop; +text/x-python3=emacs.desktop; +text/x-readme=emacs.desktop; +text/x-rst=emacs.desktop; +text/x-tex=emacs.desktop; +text/x-texinfo=emacs.desktop; +x-scheme-handler/http=userapp-Firefox-91DVN3.desktop; +x-scheme-handler/https=userapp-Firefox-91DVN3.desktop; +x-scheme-handler/chrome=userapp-Firefox-91DVN3.desktop; diff --git a/dotfiles/desktop/.config/systemd/user/emacs.service b/dotfiles/desktop/.config/systemd/user/emacs.service index d3bea5f..ed8983e 100644 --- a/dotfiles/desktop/.config/systemd/user/emacs.service +++ b/dotfiles/desktop/.config/systemd/user/emacs.service @@ -1,11 +1,8 @@ [Unit] Description=Emacs daemon -After=ssh-agent.service -Wants=ssh-agent.service [Service] Type=simple -Environment=SSH_AUTH_SOCK=%h/.local/state/ssh-agent/socket WorkingDirectory=%h ExecStart=/usr/bin/emacs --fg-daemon Restart=on-failure