Real-time audio in NixOS
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.
Add the following to your configuration.nix:
imports =
[ <existing imports>
/path/to/musnix
];
musnix.enable = true;
user.extraUsers.<username>.extraGroups = [ "audio" ];
The following sections contain information about the various configuration 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" -
Set the
max_user_freqof/sys/class/rtc/rtc0to 2048. -
Set the
max-user-freqof/proc/sys/dev/hpetto 2048. -
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_PATHLVST_PATHLADSPA_PATHLV2_PATHDSSI_PATH
-
Allow users to install plugins in the following directories:
~/.vst~/.lvst~/.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.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: The following kernel options can be used without setting musnix.enable = true;
musnix.kernel.optimize
- NOTE: Enabling this option will rebuild your kernel.
- Description: If enabled, this option will configure the kernel to be preemptible, to use the deadline I/O scheduler, and to use the High Precision Event Timer (HPET).
- Type:
boolean - Default value:
false
musnix.kernel.realtime
- NOTE: Enabling this option will rebuild your kernel.
- Description: If enabled, this option will apply the
CONFIG_PREEMPT_RTpatch to the kernel. - Type:
boolean - Default value:
false
musnix.kernel.packages
-
Description: This option allows you to select the real-time kernel used by musnix.
-
Type:
package -
Default value:
pkgs.linuxPackages_3_18_rt -
Available packages:
pkgs.linuxPackages_3_14_rtpkgs.linuxPackages_3_18_rtpkgs.linuxPackages_4_1_rtpkgs.linuxPackages_4_4_rtpkgs.linuxPackages_4_6_rt
or:
pkgs.linuxPackages_latest_rt(currentlypkgs.linuxPackages_4_6_rt)
musnix.kernel.latencytop
- NOTE: Enabling this option will rebuild your kernel.
- NOTE: This option is only intended to be used for diagnostic purposes, and may cause other issues.
- Description: If enabled, this option will configure the kernel to use a latency tracking infrastructure that is used by the "latencytop" userspace tool.
- Type:
boolean - Default value:
false
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
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.enable = true, otherwisefalse
- IRC:
#musnixon freenode