{ config, lib, pkgs, namespace, ... }: let gpuTargets = [ "gfx1102" ]; # todo update when support is added gfx1150 in { programs.ccache = { enable = true; packageNames = [ "dolphin-emu" # "ffmpeg" "ffmpeg_8" "ffmpeg_7" "ffmpeg_6" "ffmpeg-full" "gamescope" "gjs" "gst-plugins-bad" "gst-plugins-rs" "gtk4" "hipblaslt" "jemalloc" "jupiter-fan-control" "libcamera-rpi" "libsecret" "linux" "linux-rpi" "linuxPackages_cachyos" "linuxPackages_cachyos-lto" "linuxPackages_cachyos-lto-znver4" "linuxPackages_cachyos-server" "linuxPackages_cachyos-server-lto" "linuxPackages_cachyos-server-lto-znver4" "linuxPackages_cachyos-rc" "linuxPackages_cachyos-rc-lto" "linuxPackages_cachyos-rc-lto-znver4" "linuxPackages_cachyos-hardened" "linuxPackages_cachyos-hardened-lto" "linuxPackages_cachyos-hardened-lto-znver4" "mesa" "mesa_i686" "mesa-radeonsi-jupiter" "mesa-radv-jupiter" "mgba" "orca-slicer" # "onnxruntime" "opencv" "opencv4" "opencv4WithoutCuda" "pipewire" "qemu" "qemu_kvm" "qemu_full" "qt3d" "qtdeclarative" "qtmultimedia" "ryubing" "sdl" "sdl2" "sdl3" "uv" "webkitgtk" ]; cacheDir = "/var/cache/ccache"; # default location }; nixpkgs.overlays = [ (_self: super: { ${namespace} = super.${namespace} // { linux-rpi = super.${namespace}.linux-rpi.override { stdenv = super.ccacheStdenv; }; linuxPackages_rpi4 = super.linuxPackagesFor (super.${namespace}.linux-rpi.override { stdenv = super.ccacheStdenv; rpiVersion = 4; }); linuxPackages_rpi5 = super.linuxPackagesFor (super.${namespace}.linux-rpi.override { stdenv = super.ccacheStdenv; }); libraspberrypi = super.${namespace}.libraspberrypi.override { stdenv = super.ccacheStdenv; }; raspberrypi-utils = super.${namespace}.raspberrypi-utils.override { stdenv = super.ccacheStdenv; }; }; }) (_self: super: { "raspberrypi-utils" = super.${namespace}."raspberrypi-utils"; "raspberrypi-udev-rules" = super.${namespace}."udev-rules"; }) (_self: super: { "mesa" = super."mesa".override { buildPackages.stdenv = super.ccacheStdenv; }; }) (_self: super: { "raspberrypi-utils" = super.${namespace}."raspberrypi-utils"; }) (_self: super: { electron = super.stable.electron-bin; electron_36 = super.stable.electron_36-bin; electron_37 = super.stable.electron_37-bin; }) # (_self: super: { # "webkitgtk_4_1" = super.stable."webkitgtk_4_1".override { clangStdenv = super.ccacheStdenv; }; # }) # (_self: super: { # "webkitgtk_6_0" = super."webkitgtk_6_0".override { clangStdenv = super.ccacheStdenv; }; # }) (_self: super: { "jellyfin-ffmpeg" = super."jellyfin-ffmpeg".override { ffmpeg_7-full = super.ffmpeg_7-full.override { stdenv = super.ccacheStdenv; }; }; }) # (self: super: { # "ffmpeg-headless-rpi" = super."ffmpeg-headless-rpi".override { ffmpeg = super.ffmpeg_7.override { stdenv = super.ccacheStdenv; }; }; # }) # todo: make these work (_self: super: { rocmPackages = super.stable.rocmPackages; piper-tts = super.stable.piper-tts; python3Packages = super.python3Packages // { torch = super.stable.python3Packages.torch; }; }) # (_self: super: { # rocmPackages = super.rocmPackages // { # hipblaslt = super.rocmPackages.hipblaslt.override { # stdenv = super.ccacheStdenv; # inherit gpuTargets; # }; # rocblas = super.rocmPackages.rocblas.override { # # stdenv = super.ccacheStdenv; # inherit gpuTargets; # }; # rocsolver = super.rocmPackages.rocsolver.override { # # stdenv = super.ccacheStdenv; # inherit gpuTargets; # }; # }; # }) (_self: super: { pcsx2 = super.pcsx2.override { llvmPackages = super.llvmPackages // { stdenv = super.ccacheStdenv; }; }; }) (_self: super: { driversi686Linux = super.driversi686Linux // { mesa = super.driversi686Linux.mesa.override { stdenv = super.ccacheStdenv; buildPackages = super.driversi686Linux.mesa.buildPackages // { stdenv = super.ccacheStdenv; }; }; }; }) (_self: super: { kdePackages = super.kdePackages // { qt3d = super.kdePackages.qt3d.override { qtbase = super.kdePackages.qtbase.override { stdenv = super.ccacheStdenv; }; }; qtwebengine = super.stable.kdePackages.qtwebengine; #.override { stdenv = super.ccacheStdenv; }; }; }) # (_self: super: { # python3Packages = super.python3Packages // { # torch = super.python3Packages.torch.override { # stdenv = super.ccacheStdenv; # inherit gpuTargets; # }; # }; # }) # (_self: super: { # piper-tts = super.piper-tts.overridePythonAttrs (oldAttrs: { # pythonCatchConflictsPhase = null; # }); # }) ]; nix = { settings = { extra-sandbox-paths = [ config.programs.ccache.cacheDir ]; substituters = [ "https://cache.mjallen.dev/nas-cache" "https://nixos-raspberrypi.cachix.org" "https://nix-community.cachix.org" "https://cache.nixos.org/" ]; trusted-public-keys = [ "nas-cache:Y7PR+XTLr1bLIL85PKb9Tk9/BnE5HndTKvZYWVP1/48=" "nixos-raspberrypi.cachix.org-1:4iMO9LXa8BqhU+Rpg6LQKiGa2lsNh/j2oiYLNOQ5sPI=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ]; warn-dirty = lib.mkForce false; experimental-features = lib.mkForce [ "nix-command" "flakes" ]; trusted-users = [ "@wheel" ]; }; # Garbage collect automatically every week gc.automatic = lib.mkDefault true; gc.options = lib.mkDefault "--delete-older-than 30d"; optimise.automatic = lib.mkDefault true; }; nixpkgs = { config = { cudaSupport = lib.mkDefault config.${namespace}.hardware.nvidia.enable; rocmSupport = lib.mkDefault config.${namespace}.hardware.amd.enable; allowUnsupportedSystem = true; }; }; }