# Nix packages for CachyOS Kernel [![built with garnix](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fgarnix.io%2Fapi%2Fbadges%2Fxddxdd%2Fnix-cachyos-kernel)](https://garnix.io/repo/xddxdd/nix-cachyos-kernel) This repo contains Linux kernels with both [CachyOS patches](https://github.com/CachyOS/kernel-patches) and [CachyOS tunings](https://github.com/CachyOS/linux-cachyos), as well as [CachyOS-patched ZFS module](https://github.com/CachyOS/zfs). ## Which kernel versions are provided? This repo provides the latest kernel version and the latest LTS kernel version: ```bash └───packages ├───aarch64-linux ├───linux-cachyos-latest ├───linux-cachyos-latest-lto ├───linux-cachyos-lts └───linux-cachyos-lts-lto └───x86_64-linux ├───linux-cachyos-latest ├───linux-cachyos-latest-lto ├───linux-cachyos-lts └───linux-cachyos-lts-lto ``` The kernel versions are automatically kept in sync with Nixpkgs, so once the latest/LTS kernel is updated in Nixpkgs, CachyOS kernels in this repo will automatically catch up. Use `nix flake show github:xddxdd/nix-cachyos-kernel` to see the current effective versions. The kernels ending in `-lto` has Clang+ThinLTO enabled. For each linux kernel entry under `packages`, we have a corresponding `linuxPackages` entry under `legacyPackages` for easier use in your NixOS configuration, e.g.: - `linux-cachyos-latest` -> `inputs.nix-cachyos-kernel.legacyPackages.x86_64-linux.linuxPackages-cachyos-latest` - `linux-cachyos-lts-lto` -> `inputs.nix-cachyos-kernel.legacyPackages.x86_64-linux.linuxPackages-cachyos-lts-lto` ## How to use kernels Add this repo to the inputs section of your `flake.nix`: ```nix { inputs = { nix-cachyos-kernel.url = "github:xddxdd/nix-cachyos-kernel"; } } ``` Add the repo's overlay in your NixOS configuration, this will expose the packages in this flake as `pkgs.cachyosKernels.*`. Then specify `pkgs.cachyosKernels.linuxPackages-cachyos-latest` (or other variants you'd like) in your `boot.kernelPackages` option. ### Example configuration ```nix { nixosConfigurations.example = inputs.nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ( { pkgs, ... }: { nixpkgs.overlays = [ self.overlay ]; boot.kernelPackages = pkgs.cachyosKernels.linuxPackages-cachyos-latest; # ... your other configs } ) ]; }; } ``` ## How to use ZFS modules > Note: CachyOS-patched ZFS module may fail to compile from time to time. Most compilation failures are caused by incompatibilities between kernel and ZFS. Please check [ZFS upstream issues](https://github.com/openzfs/zfs/issues) for any compatibility reports, and try switching between `zfs_2_3`, `zfs_unstable` and `zfs_cachyos`. To use ZFS module with `linuxPackages-cachyos-*` provided by this flake, point `boot.zfs.package` to `config.boot.kernelPackages.zfs_cachyos`. ```nix { nixosConfigurations.example = inputs.nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ( { pkgs, ... }: { nixpkgs.overlays = [ self.overlay ]; boot.kernelPackages = pkgs.cachyosKernels.linuxPackages-cachyos-latest; # ZFS config boot.supportedFilesystems.zfs = true; boot.zfs.package = config.boot.kernelPackages.zfs_cachyos; # ... your other configs } ) ]; }; } ``` If you want to construct your own `linuxPackages` attrset with `linuxKernel.packagesFor (path to your kernel)`, you can directly reference the `zfs-cachyos` attribute in this flake's `packages` / `legayPackages` output, or the `cachyosKernels` overlay: ```nix { nixosConfigurations.example = inputs.nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ( { pkgs, ... }: { nixpkgs.overlays = [ self.overlay ]; boot.kernelPackages = pkgs.linuxKernel.packagesFor pkgs.cachyosKernels.linux-cachyos-latest; # ZFS config boot.supportedFilesystems.zfs = true; boot.zfs.package = pkgs.cachyosKernels.zfs-cachyos.override { kernel = config.boot.kernelPackages.kernel; }; # ... your other configs } ) ]; }; } ``` ## How to apply CachyOS patches on your own kernel The kernels provided in this flake can be overridden to use your own kernel source. This is helpful if you want to use a kernel version not available in Nixpkgs. ```nix { kernel = pkgs.cachyosKernels.linux-cachyos-latest.override { pname = "linux-cachyos-with-custom-source"; version = "6.12.34"; src = pkgs.fetchurl { # ... }; # Additional args are available. See kernel-cachyos/mkCachyKernel.nix }; # For non-LTO kernels kernelPackages = pkgs.linuxKernel.packagesFor kernel; # helpers.nix provides a few utilities for building kernel with LTO. # I haven't figured out a clean way to expose it in flakes. helpers = pkgs.callPackage "${inputs.nix-cachyos-kernel.outPath}/helpers.nix" {}; # For LTO kernels, helpers.kernelModuleLLVMOverride fixes compilation for some # out-of-tree modules in nixpkgs. kernelPackagesWithLTOFix = helpers.kernelModuleLLVMOverride (pkgs.linuxKernel.packagesFor kernel); } ```