{ pkgs, lib, options, ... }: lib.mkMerge [ { # assumes common-gpu-amd from nixos-hardware is also added # TODO: should we move it from flake.nix to here? # https://github.com/NixOS/nixos-hardware/blob/master/common/gpu/amd/default.nix hardware.opengl.enable = true; hardware.opengl.driSupport = true; hardware.opengl.driSupport32Bit = true; nixpkgs.config.openglSupport = true; # why is this not set by hardware.opengl.enable ? nixpkgs.config.rocmSupport = true; nixpkgs.config.vdpauSupport = true; nixpkgs.config.vaapiSupport = true; services.ollama.acceleration = lib.mkDefault "rocm"; } (lib.mkIf (lib.versionAtLeast (lib.versions.majorMinor lib.version) "24.05") { hardware.amdgpu.opencl.enable = lib.mkDefault true; #hardware.amdgpu.amdvlk.enable = lib.mkDefault true; #hardware.amdgpu.amdvlk.support32Bit.enable = lib.mkDefault true; }) #(lib.mkIf (lib.versionOlder (lib.versions.majorMinor lib.version) "24.05") { # # nixos-hardware common-amd options # # https://github.com/NixOS/nixos-hardware/blob/master/common/gpu/amd/default.nix # hardware.amdgpu.opencl = lib.mkDefault true; # #hardware.amdgpu.amdvlk = lib.mkDefault true; #}) { # https://libreddit.noximilien.pbsds.net/r/archlinux/comments/nih9c9/amdgpu_vs_modesetting_in_current_510_kernels_xorg/ services.xserver.videoDrivers = [ "amdgpu" ]; # use gpu, adaptive sync and and hardware page flipping #services.xserver.videoDrivers = [ "modesetting" ]; # integrated (non-accelerated) framebuffer, KMS (default in nixos-hardware) # https://wiki.nixos.org/wiki/AMD_GPU#HIP systemd.tmpfiles.rules = let rocmEnv = pkgs.symlinkJoin { name = "rocm-combined"; paths = with pkgs.rocmPackages; [ rocblas hipblas clr ]; }; in [ "L+ /opt/rocm - - - - ${rocmEnv}" ]; nixpkgs.overlays = [ (prev: final: { blender = prev.blender-hip; }) ]; # enable opencl on polaris, (rx580) environment.variables.ROC_ENABLE_PRE_VEGA = "1"; environment.systemPackages = [ (pkgs.nvtopPackages.amd or pkgs.nvtop-amd) pkgs.lact ]; # lact - amdgpu GUI tool systemd.packages = [ pkgs.lact ]; systemd.services.lactd.enable = true; systemd.services.lactd.wantedBy = [ "multi-user.target" ]; # add this if you want the unit to auto start at boot time } ]