diff --git a/ansible/environments/laptop/host_vars/odofreebsd b/ansible/environments/laptop/host_vars/odofreebsd index 8e2c236..4779fac 100644 --- a/ansible/environments/laptop/host_vars/odofreebsd +++ b/ansible/environments/laptop/host_vars/odofreebsd @@ -10,6 +10,7 @@ pflog_conf: network_rc: "odofreebsd_network.conf" rc_conf: "odofreebsd_rc.conf" loader_conf: "odofreebsd_loader.conf" +graphics_driver: "intel" cputype: "intel" cpu_opt: tigerlake hwpstate: true diff --git a/ansible/environments/laptop/host_vars/odolinux b/ansible/environments/laptop/host_vars/odolinux index 8ee08e9..43ec843 100644 --- a/ansible/environments/laptop/host_vars/odolinux +++ b/ansible/environments/laptop/host_vars/odolinux @@ -17,3 +17,4 @@ users: zfs_snapshot_datasets: - zroot/linux/archmain/home - zroot/linux/archmain/be +graphics_driver: "intel" diff --git a/ansible/playbook.yaml b/ansible/playbook.yaml index a9ad595..8ed36af 100644 --- a/ansible/playbook.yaml +++ b/ansible/playbook.yaml @@ -13,3 +13,4 @@ - cpu - ntp - build + - graphics diff --git a/ansible/roles/graphics/files/intel_kld_rc.conf b/ansible/roles/graphics/files/intel_kld_rc.conf new file mode 100644 index 0000000..2160150 --- /dev/null +++ b/ansible/roles/graphics/files/intel_kld_rc.conf @@ -0,0 +1 @@ +kld_list="/boot/modules/i915kms.ko" diff --git a/ansible/roles/graphics/files/intel_power_loader.conf b/ansible/roles/graphics/files/intel_power_loader.conf new file mode 100644 index 0000000..2d27b22 --- /dev/null +++ b/ansible/roles/graphics/files/intel_power_loader.conf @@ -0,0 +1,10 @@ +# Enable power-saving display c-states (0=disable; 1=up to DC5; 2=up to DC6) +compat.linuxkpi.i915_enable_dc=2 +# Enable frame buffer compression which allegedly saves power +compat.linuxkpi.i915_enable_fbc=1 +# Skip extra modesets during boot +compat.linuxkpi.i915_fastboot=1 +# Disable display power wells (0=power wells always on, 1=power wells disabled when possible) +compat.linuxkpi.i915_disable_power_well=1 +# Reduce interrupt rate to make it more likely that a C3 sleep state can be hit. Should make the CPU wake up less often. +kern.hz=100 diff --git a/ansible/roles/graphics/files/vdpau.sh b/ansible/roles/graphics/files/vdpau.sh new file mode 100644 index 0000000..7114bcd --- /dev/null +++ b/ansible/roles/graphics/files/vdpau.sh @@ -0,0 +1 @@ +export VDPAU_DRIVER=va_gl diff --git a/ansible/roles/graphics/tasks/common.yaml b/ansible/roles/graphics/tasks/common.yaml new file mode 100644 index 0000000..d7c1735 --- /dev/null +++ b/ansible/roles/graphics/tasks/common.yaml @@ -0,0 +1,14 @@ +- import_tasks: tasks/freebsd.yaml + when: 'os_flavor == "freebsd"' + +- import_tasks: tasks/linux.yaml + when: 'os_flavor == "linux"' + +- include_tasks: + file: tasks/peruser.yaml + apply: + become: yes + become_user: "{{ initialize_user }}" + loop: "{{ users | dict2items | community.general.json_query('[?value.initialize==`true`].key') }}" + loop_control: + loop_var: initialize_user diff --git a/ansible/roles/graphics/tasks/freebsd.yaml b/ansible/roles/graphics/tasks/freebsd.yaml new file mode 100644 index 0000000..4529a5d --- /dev/null +++ b/ansible/roles/graphics/tasks/freebsd.yaml @@ -0,0 +1 @@ +- include_tasks: "tasks/freebsd_{{graphics_driver}}.yaml" diff --git a/ansible/roles/graphics/tasks/freebsd_intel.yaml b/ansible/roles/graphics/tasks/freebsd_intel.yaml new file mode 100644 index 0000000..dc7c747 --- /dev/null +++ b/ansible/roles/graphics/tasks/freebsd_intel.yaml @@ -0,0 +1,39 @@ +- name: Install packages + package: + name: + - drm-kmod + - libva-intel-media-driver # va-api support for broadwell (2014) and newer. + - libva-intel-driver # va-api support until after coffeelake (2017). + - vulkan-loader + - libva-utils # for vainfo + - vdpauinfo # for vdpauinfo + - libvdpau-va-gl # vdpau support + state: present + +# - name: Configure vdpau to use va-api driver +# copy: +# src: vdpau.sh +# dest: /etc/profile.d/vdpau.sh +# mode: 0644 +# owner: root +# group: root + +- name: Install loader.conf + copy: + src: "files/{{ item }}_loader.conf" + dest: "/boot/loader.conf.d/{{ item }}.conf" + mode: 0644 + owner: root + group: wheel + loop: + - intel_power + +- name: Install service configuration + copy: + src: "files/intel_{{ item }}_rc.conf" + dest: "/etc/rc.conf.d/{{ item }}" + mode: 0644 + owner: root + group: wheel + loop: + - kld diff --git a/ansible/roles/graphics/tasks/linux.yaml b/ansible/roles/graphics/tasks/linux.yaml new file mode 100644 index 0000000..b5895d0 --- /dev/null +++ b/ansible/roles/graphics/tasks/linux.yaml @@ -0,0 +1 @@ +- include_tasks: "tasks/linux_{{graphics_driver}}.yaml" diff --git a/ansible/roles/graphics/tasks/linux_intel.yaml b/ansible/roles/graphics/tasks/linux_intel.yaml new file mode 100644 index 0000000..2991886 --- /dev/null +++ b/ansible/roles/graphics/tasks/linux_intel.yaml @@ -0,0 +1,26 @@ +- name: Install packages + package: + name: + - linux-firmware # Arch wiki claims this is needed for hardware video acceleration in skylake or later + - xf86-video-intel + - mesa + - lib32-mesa + - vulkan-intel + - intel-media-driver # va-api support for broadwell (2014) and newer. + - lib32-vulkan-intel + - vulkan-icd-loader + - lib32-vulkan-icd-loader + - libva-utils # for vainfo + - vdpauinfo # for vdpauinfo + - libvdpau-va-gl # vdpau support + - intel-gpu-tools # optional for intel_gpu_top + - vulkan-tools # For vulkaninfo + state: present + +- name: Configure vdpau to use va-api driver + copy: + src: vdpau.sh + dest: /etc/profile.d/vdpau.sh + mode: 0644 + owner: root + group: root diff --git a/ansible/roles/graphics/tasks/main.yaml b/ansible/roles/graphics/tasks/main.yaml new file mode 100644 index 0000000..dc9939d --- /dev/null +++ b/ansible/roles/graphics/tasks/main.yaml @@ -0,0 +1,2 @@ +- import_tasks: tasks/common.yaml + when: graphics_driver is defined diff --git a/ansible/roles/graphics/tasks/peruser.yaml b/ansible/roles/graphics/tasks/peruser.yaml new file mode 100644 index 0000000..111e886 --- /dev/null +++ b/ansible/roles/graphics/tasks/peruser.yaml @@ -0,0 +1,29 @@ +- include_role: + name: per_user + +# - name: Create directories +# file: +# name: "{{ account_homedir.stdout }}/{{ item }}" +# state: directory +# mode: 0700 +# owner: "{{ account_name.stdout }}" +# group: "{{ group_name.stdout }}" +# loop: +# - ".config/foo" + +# - name: Copy files +# copy: +# src: "files/{{ item.src }}" +# dest: "{{ account_homedir.stdout }}/{{ item.dest }}" +# mode: 0600 +# owner: "{{ account_name.stdout }}" +# group: "{{ group_name.stdout }}" +# loop: +# - src: foo.conf +# dest: .config/foo/foo.conf + +- import_tasks: tasks/peruser_freebsd.yaml + when: 'os_flavor == "freebsd"' + +- import_tasks: tasks/peruser_linux.yaml + when: 'os_flavor == "linux"' diff --git a/ansible/roles/graphics/tasks/peruser_freebsd.yaml b/ansible/roles/graphics/tasks/peruser_freebsd.yaml new file mode 100644 index 0000000..e69de29 diff --git a/ansible/roles/graphics/tasks/peruser_linux.yaml b/ansible/roles/graphics/tasks/peruser_linux.yaml new file mode 100644 index 0000000..e69de29