From 40c81ea00382ac0ce962ef4a251dbf48fd915017 Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Sun, 22 Mar 2026 12:11:53 +0100 Subject: [PATCH] Add NVIDIA hybrid graphics configuration for nymph (PRIME offload, GRUB params, power management, prime-run wrapper) --- .../roles/profile_desktop_i3/tasks/main.yml | 55 +++++++++++++++++++ dotfiles/nymph/.local/bin/prime-run | 5 ++ 2 files changed, 60 insertions(+) create mode 100644 dotfiles/nymph/.local/bin/prime-run diff --git a/ansible/roles/profile_desktop_i3/tasks/main.yml b/ansible/roles/profile_desktop_i3/tasks/main.yml index bb76682..271a3ca 100644 --- a/ansible/roles/profile_desktop_i3/tasks/main.yml +++ b/ansible/roles/profile_desktop_i3/tasks/main.yml @@ -16,6 +16,53 @@ - "{{ user_home }}/.config/Thunar" - "{{ user_home }}/.config/rofi" +- name: Configure GRUB kernel parameters for NVIDIA hybrid graphics + tags: [packages, nvidia] + ansible.builtin.lineinfile: + path: /etc/default/grub + regexp: '^GRUB_CMDLINE_LINUX=' + line: 'GRUB_CMDLINE_LINUX="rd.luks.uuid=1e15d159-5d05-4a1f-9639-ac200dff9f9c rootflags=subvol=@ apparmor=1 security=apparmor nouveau.modeset=0 nvidia-drm.modeset=1"' + state: present + when: ansible_facts['hostname'] == 'nymph' + +- name: Regenerate GRUB configuration + tags: [packages, nvidia] + ansible.builtin.command: grub-mkconfig -o /boot/grub/grub.cfg + changed_when: true + when: ansible_facts['hostname'] == 'nymph' + +- name: Configure NVIDIA power management for hybrid graphics + tags: [packages, nvidia] + ansible.builtin.copy: + dest: /etc/modprobe.d/nvidia-power-management.conf + content: | + options nvidia "NVreg_DynamicPowerManagement=0x02" + owner: root + group: root + mode: "0644" + when: ansible_facts['hostname'] == 'nymph' + +- name: Ensure user local bin directory exists + tags: [nvidia, dotfiles, dotfiles:host] + ansible.builtin.file: + path: "{{ user_home }}/.local/bin" + state: directory + owner: "{{ username }}" + group: "{{ user_group }}" + mode: "0755" + when: ansible_facts['hostname'] == 'nymph' + +- name: Install prime-run wrapper script for NVIDIA PRIME offload + tags: [nvidia, dotfiles, dotfiles:host] + ansible.builtin.copy: + src: "{{ playbook_dir }}/../dotfiles/nymph/.local/bin/prime-run" + dest: "{{ user_home }}/.local/bin/prime-run" + owner: "{{ username }}" + group: "{{ user_group }}" + mode: "0755" + force: false + when: ansible_facts['hostname'] == 'nymph' + - name: Enable gnome-keyring PAM auth hook ansible.builtin.lineinfile: path: /etc/pam.d/login @@ -49,6 +96,14 @@ loop_control: label: "{{ item.dest }}" +- name: Wrap alacritty with prime-run for NVIDIA PRIME offload + tags: [nvidia, dotfiles, dotfiles:desktop, dotfiles:host] + ansible.builtin.lineinfile: + path: "{{ user_home }}/.config/i3/config" + regexp: '^bindsym \$mod\+Return exec --no-startup-id /usr/bin/alacritty' + line: 'bindsym $mod+Return exec --no-startup-id ~/.local/bin/prime-run /usr/bin/alacritty' + when: ansible_facts['hostname'] == 'nymph' + - name: Copy host-specific dotfiles tags: [dotfiles, dotfiles:desktop, dotfiles:host] ansible.builtin.copy: diff --git a/dotfiles/nymph/.local/bin/prime-run b/dotfiles/nymph/.local/bin/prime-run new file mode 100644 index 0000000..d88c22e --- /dev/null +++ b/dotfiles/nymph/.local/bin/prime-run @@ -0,0 +1,5 @@ +#!/bin/sh +# Wrapper to launch applications with NVIDIA PRIME offload +export __NV_PRIME_RENDER_OFFLOAD=1 +export __GLX_VENDOR_LIBRARY_NAME=nvidia +exec "$@"