{ config, lib, pkgs, namespace, ... }: { programs.ccache = { enable = true; packageNames = [ "cachyos-lto" "cachyos-lto-x86_64-unknown-linux-gnu-6.18.0" "cachyos-lto-x86_64-unknown-linux-gnu" "cachyos-lto-znver4" "cachyos-server-lto" "cachyos-server-lto-znver4" "cachyos-rc-lto" "cachyos-rc-lto-znver4" # "chromium" "dolphin-emu" "electron" # "ffmpeg" "ffmpeg_7" "ffmpeg_6" "ffmpeg-full" "gamescope" "gjs" "gst-plugins-bad" "gst-plugins-rs" "gtk4" "jemalloc" "jupiter-fan-control" "libcamera-rpi" "libraspberrypi" "libsecret" "linux" "linuxPackages_cachyos" "linuxPackages_cachyos-lto" "linuxPackages_rpi4" "linuxPackages_rpi5" "mesa" "mesa-radeonsi-jupiter" "mgba" "onnxruntime" "opencv" "pipewire" "qemu" "qemu_kvm" "qemu_full" "qt3d" "qtdeclarative" "qtmultimedia" "raspberrypi-utils" "ryubing" "sdl" "sdl2" "sdl3" "torch" "uv" "webkitgtk" ]; cacheDir = "/var/cache/ccache"; # default location }; nixpkgs.overlays = [ (self: super: { "linux_rpi-bcm2711" = super."linux_rpi-bcm2711".override { stdenv = super.ccacheStdenv; }; }) (self: super: { "mesa" = super."mesa".override { buildPackages.stdenv = super.ccacheStdenv; }; }) (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: { pcsx2 = super.pcsx2.override { llvmPackages = super.llvmPackages // { stdenv = super.ccacheStdenv; }; }; }) (self: super: { driversi686Linux = super.driversi686Linux // { mesa = super.driversi686Linux.mesa.override { stdenv = super.ccacheStdenv; buildPackages.stdenv = super.ccacheStdenv; }; }; }) (self: super: { kdePackages = super.kdePackages // { qt3d = super.kdePackages.qt3d.override { qtbase = super.kdePackages.qtbase.override { stdenv = super.ccacheStdenv; }; }; # qtbase = super.kdePackages.qtbase.override { stdenv = super.ccacheStdenv; }; qtwebengine = super.kdePackages.qtwebengine.override { stdenv = super.ccacheStdenv; }; }; }) (self: super: { linuxAndFirmware = super.linuxAndFirmware // { linuxPackages_rpi4 = super.linuxAndFirmware.linuxPackages_rpi4.override { stdenv = super.ccacheStdenv; }; }; }) ]; 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; }; }; }