Skip to content

Instantly share code, notes, and snippets.

@igor-ramazanov
Last active April 16, 2026 12:48
Show Gist options
  • Select an option

  • Save igor-ramazanov/26dd5e90f7099b4e3eadffbc8c9d04c7 to your computer and use it in GitHub Desktop.

Select an option

Save igor-ramazanov/26dd5e90f7099b4e3eadffbc8c9d04c7 to your computer and use it in GitHub Desktop.
nixos-avf: attempt to set up sway with hardware acceleration
{ pkgs, lib, ... }:
{
avf.enableGraphics = false;
boot.kernelModules = [ "virtio_gpu" ];
environment = {
variables = {
LD_LIBRARY_PATH = "/run/opengl-driver/lib";
LIBGL_DRIVERS_PATH = "${pkgs.mesa.drivers}/lib/dri";
MESA_LOADER_DRIVER_OVERRIDE = "";
MESA_VK_WSI_DEBUG = "sw,linear";
VK_ICD_FILENAMES = "${pkgs.mesa}/share/vulkan/icd.d/gfxstream_vk_icd.${pkgs.stdenv.hostPlatform.uname.processor}.json";
};
systemPackages = [
pkgs.firefox
pkgs.foot
pkgs.mesa
pkgs.libdrm
];
};
hardware.graphics = {
enable = true;
package = (pkgs.mesa.override { galliumDrivers = [ "i915" ]; }).drivers;
};
programs = {
sway = {
enable = true;
extraPackages = lib.mkForce [
pkgs.wmenu
pkgs.wl-clipboard
];
xwayland.enable = false;
wrapperFeatures = {
base = true;
gtk = true;
};
extraOptions = [
"--debug"
"--verbose"
];
};
};
services.seatd.enable = true;
systemd.user = {
tmpfiles.users.igor.rules = [
"L+ /home/igor/.config/sway/config 0400 - - - /home/igor/personal/dotfiles/hosts/michelangelo/sway.config"
"L+ /home/igor/.config/foot/foot.ini 0400 - - - /home/igor/personal/dotfiles/hosts/michelangelo/foot.ini"
];
};
users.users.igor.extraGroups = [
"video"
"render"
"seat"
];
}
@igor-ramazanov

igor-ramazanov commented Apr 16, 2026

Copy link
Copy Markdown
Author

Fails when running with Vulkan:

WLR_BACKENDS=drm \
WLR_DRM_DEVICES=/dev/dri/card0 \
WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 \
WLR_RENDERER=vulkan \
  sway
00:00:00.025 [wlr] [backend/backend.c:248] Found 1 GPUs
00:00:00.026 [wlr] [backend/drm/backend.c:225] Initializing DRM backend for /dev/dri/card0 (virtio_gpu)
00:00:00.026 [wlr] [backend/drm/drm.c:110] Using atomic DRM interface
00:00:00.026 [wlr] [backend/drm/drm.c:131] ADDFB2 modifiers unsupported
00:00:00.026 [wlr] [backend/drm/drm.c:310] Found 16 DRM CRTCs
00:00:00.027 [wlr] [backend/drm/drm.c:268] Found 32 DRM planes
00:00:00.031 [wlr] [util/env.c:25] Loading WLR_RENDERER option: vulkan
00:00:00.031 [wlr] [render/wlr_renderer.c:157] Opening DRM render node '/dev/dri/renderD128' from WLR_RENDER_DRM_DEVICE
00:00:00.031 [wlr] [render/vulkan/renderer.c:2502] The vulkan renderer is only experimental and not expected to be ready for daily use
00:00:00.031 [wlr] [render/vulkan/renderer.c:2504] Run with VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation to enable the validation layer
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_KHR_external_fence_capabilities v1
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_KHR_external_memory_capabilities v1
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_KHR_external_semaphore_capabilities v1
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_KHR_get_physical_device_properties2 v2
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_KHR_surface v25
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_KHR_wayland_surface v6
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_KHR_xcb_surface v6
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_EXT_debug_utils v2
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_EXT_debug_report v10
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_KHR_portability_enumeration v1
00:00:00.048 [wlr] [render/vulkan/vulkan.c:117] Vulkan instance extension VK_LUNARG_direct_driver_loading v1
00:00:00.060 [wlr] [render/vulkan/vulkan.c:253] Vulkan device: 'PowerVR D-Series DXT-48-1536 MC1'
00:00:00.060 [wlr] [render/vulkan/vulkan.c:254]   Device type: 'integrated'
00:00:00.060 [wlr] [render/vulkan/vulkan.c:255]   Supported API version: 1.3.0
00:00:00.060 [wlr] [render/vulkan/vulkan.c:256]   Driver version: 1.634.2906
00:00:00.060 [wlr] [render/vulkan/vulkan.c:344]   Driver name: PowerVR D-Series Vulkan Driver (25.1@6794074)
00:00:00.060 [wlr] [render/vulkan/vulkan.c:350]   Ignoring physical device "PowerVR D-Series DXT-48-1536 MC1": VK_EXT_physical_device_drm not supported
00:00:00.060 [wlr] [render/vulkan/renderer.c:2516] Could not match drm and vulkan device
00:00:00.061 [wlr] [render/wlr_renderer.c:199] Failed to create a Vulkan renderer
00:00:00.061 [wlr] [render/wlr_renderer.c:279] Could not initialize renderer
00:00:00.061 [sway/server.c:255] Failed to create renderer

@igor-ramazanov

Copy link
Copy Markdown
Author

Fails when running with OpenGL irrelevantly from whether MESA_LOADER_DRIVER_OVERRIDE="" or MESA_LOADER_DRIVER_OVERRIDE=zinc:

WLR_BACKENDS=drm \
WLR_DRM_DEVICES=/dev/dri/card0 \
WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 \
WLR_RENDERER=gles2 \
  sway
00:00:00.030 [wlr] [backend/backend.c:248] Found 1 GPUs
00:00:00.032 [wlr] [backend/drm/backend.c:225] Initializing DRM backend for /dev/dri/card0 (virtio_gpu)
00:00:00.032 [wlr] [backend/drm/drm.c:110] Using atomic DRM interface
00:00:00.032 [wlr] [backend/drm/drm.c:131] ADDFB2 modifiers unsupported
00:00:00.033 [wlr] [backend/drm/drm.c:310] Found 16 DRM CRTCs
00:00:00.033 [wlr] [backend/drm/drm.c:268] Found 32 DRM planes
00:00:00.037 [wlr] [util/env.c:25] Loading WLR_RENDERER option: gles2
00:00:00.037 [wlr] [render/wlr_renderer.c:157] Opening DRM render node '/dev/dri/renderD128' from WLR_RENDER_DRM_DEVICE
00:00:00.083 [wlr] [render/egl.c:205] Supported EGL client extensions: EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_device EGL_EXT_explicit_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_EXT_platform_x11 EGL_KHR_platform_x11 EGL_EXT_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless
00:00:00.085 [wlr] [render/egl.c:523] Using EGL device /dev/dri/card0
libEGL warning: egl: failed to create dri2 screen
00:00:00.086 [wlr] [EGL] command: eglInitialize, error: EGL_NOT_INITIALIZED (0x3001), message: "DRI2: failed to create screen"
libEGL warning: egl: failed to create dri2 screen
00:00:00.088 [wlr] [EGL] command: eglInitialize, error: EGL_NOT_INITIALIZED (0x3001), message: "DRI2: failed to create screen"
00:00:00.088 [wlr] [EGL] command: eglInitialize, error: EGL_NOT_INITIALIZED (0x3001), message: "DRI2: failed to load driver"
00:00:00.088 [wlr] [EGL] command: eglInitialize, error: EGL_NOT_INITIALIZED (0x3001), message: "eglInitialize"
00:00:00.088 [wlr] [render/egl.c:269] Failed to initialize EGL
00:00:00.088 [wlr] [render/egl.c:611] Failed to initialize EGL context
00:00:00.088 [wlr] [render/gles2/renderer.c:499] Could not initialize EGL
00:00:00.088 [wlr] [render/wlr_renderer.c:199] Failed to create a GLES2 renderer
00:00:00.088 [wlr] [render/wlr_renderer.c:279] Could not initialize renderer
00:00:00.088 [sway/server.c:255] Failed to create renderer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment