- Nix 83.3%
- Python 9.8%
- Shell 6.9%
Flake lock file updates:
• Updated input 'nixpkgs':
'github:NixOS/nixpkgs/c0b0e0f' (2025-12-28)
→ 'github:NixOS/nixpkgs/dd9b079' (2026-02-27)
|
||
|---|---|---|
| .github/workflows | ||
| modules | ||
| pkgs | ||
| tests | ||
| .gitignore | ||
| default.nix | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE | ||
| overlay.nix | ||
| README.md | ||
| release.nix | ||
musnix
Real-time audio in NixOS
About
musnix provides a set of simple, high-level configuration options for doing real-time audio work in NixOS, including optimizing the kernel, applying the CONFIG_PREEMPT_RT patch to it, and adjusting various low-level system settings.
Basic Usage
Clone this project.
Add the following to your configuration.nix:
{
imports =
[ # ...
/path/to/musnix/clone
];
musnix.enable = true;
users.users.johndoe.extraGroups = [ "audio" ];
}
To update musnix, run git pull.
Later sections of this document contain information about the various configuration options.
Using musnix as a channel
As an alternative to the above approach, you can instead add musnix as a channel:
sudo -i nix-channel --add https://github.com/musnix/musnix/archive/master.tar.gz musnix
sudo -i nix-channel --update musnix
Add <musnix> to imports in your configuration.nix:
{
imports =
[ # ...
<musnix>
];
musnix.enable = true;
users.users.johndoe.extraGroups = [ "audio" ];
}
To update musnix, run:
sudo -i nix-channel --update musnix
Using musnix as a flake
As an alternative to the above approaches, you can also add musnix as a flake:
{
inputs = {
nixpkgs = { url = "github:NixOS/nixpkgs/nixos-unstable"; };
musnix = { url = "github:musnix/musnix"; };
};
outputs = inputs: rec {
nixosConfigurations = {
example-config = inputs.nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules =
[ # ...
inputs.musnix.nixosModules.musnix
./configuration.nix
];
specialArgs = { inherit inputs; };
};
};
};
# ...
Base Options
musnix.enable
-
Description: Enable musnix, a module for real-time audio.
-
Type:
boolean -
Default value:
false -
NOTE: This option must be set to
trueto use other musnix base options. -
Details: If enabled, this option will do the following:
-
Activate the
performanceCPU frequency scaling governor. -
Set
vm.swappinessto 10. -
Set the following udev rules:
KERNEL=="rtc0", GROUP="audio" KERNEL=="hpet", GROUP="audio" DEVPATH=="/devices/virtual/misc/cpu_dma_latency", OWNER="root", GROUP="audio", MODE="0660" -
Set the following PAM limits:
@audio - memlock unlimited @audio - rtprio 99 @audio soft nofile 99999 @audio hard nofile 99999 -
Set the following environment variables to default install locations in NixOS:
VST_PATHVST3_PATHLXVST_PATHLADSPA_PATHLV2_PATHDSSI_PATH
-
Allow users to install plugins in the following directories:
~/.vst~/.vst3~/.lxvst~/.ladspa~/.lv2~/.dssi
-
musnix.alsaSeq.enable
- Description: If enabled, load ALSA Sequencer kernel modules. Currently, this only loads the
snd_seqandsnd_rawmidimodules. - Type:
boolean - Default value:
true
musnix.ffado.enable
- Description: If enabled, use the Free FireWire Audio Drivers (FFADO).
- Type:
boolean - Default value:
false
musnix.rtcqs.enable
- Description: If enabled, install the rtcqs command-line utulity, which analyzes the system and makes suggestions about what to change to make it more audio-friendly.
- Type:
boolean - Default value:
false
musnix.soundcardPciId
-
Description: The PCI ID of the primary soundcard. Used to set the PCI latency timer.
To find the PCI ID of your soundcard:
lspci | grep -i audio -
Type:
string -
Default value:
"" -
Example value:
"00:1b.0" -
NOTE: If you have a USB sound card, this option is not useful.
Kernel Options
NOTE: The following kernel options can be used without setting musnix.enable = true;
musnix.kernel.realtime
- NOTE: Enabling this option will rebuild your kernel.
- Description: If enabled, this option will enable
CONFIG_PREEMPT_RTon the kernel.- For kernels 6.12 and later,
PREEMPT_RTis available natively in the mainline kernel — no external patch is required. Setmusnix.kernel.packagesto any mainline kernel >= 6.12 and musnix will automatically apply the required configuration. - For kernels older than 6.12, set
musnix.kernel.packagesto one of the RT-patched packages provided by the musnix overlay (see below).
- For kernels 6.12 and later,
- Type:
boolean - Default value:
false
musnix.kernel.packages
-
Description: This option allows you to select the kernel used by musnix.
-
Type:
package -
Default value:
pkgs.linuxPackagesMainline kernels 6.12+ (recommended) — musnix will automatically enable
PREEMPT_RTvia kernel configuration overrides; no patched package is needed:musnix.kernel.packages = pkgs.linuxPackages; # default NixOS kernel (if >= 6.12) musnix.kernel.packages = pkgs.linuxPackages_6_12; # specific LTS version musnix.kernel.packages = pkgs.linuxPackages_latest; # latest mainlinePre-6.12 kernels — use an RT-patched package from the musnix overlay:
pkgs.linuxPackages_6_1_rtpkgs.linuxPackages_6_6_rtpkgs.linuxPackages_6_8_rtpkgs.linuxPackages_6_9_rtpkgs.linuxPackages_6_11_rt
or the convenience aliases:
pkgs.linuxPackages_rt(currentlypkgs.linuxPackages_6_6_rt)pkgs.linuxPackages_latest_rt(currentlypkgs.linuxPackages_6_11_rt)
Note: When a mainline kernel >= 6.12 is selected, musnix overrides it with
EXPERT=y,PREEMPT_RT=y, and unsets options that are mutually exclusive with RT (PREEMPT_VOLUNTARY,PREEMPT_FULL,RT_GROUP_SCHED).ignoreConfigErrors = trueis set so that version-specific disappearing symbols (e.g. i915 GVT, Rust assertions) do not break the build.
rtirq Options
NOTES:
- The following rtirq options can be used without setting
musnix.enable = true; musnix.kernel.realtimemust be set totrueto use these options.
musnix can also install and run the rtirq script as a systemd service.
To see a list of options for using this feature, use the following command:
nixos-option musnix.rtirq
To see a description of one of the listed options (in this case enable):
nixos-option musnix.rtirq.enable
Other Options
musnix.das_watchdog.enable
- Description: If enabled, start the das_watchdog service. This service will ensure that a realtime process won't hang the machine.
- Type:
boolean - Default value:
trueifmusnix.kernel.realtime = true, otherwisefalse
Communication
- IRC:
#musnixon libera.chat