Using MicroVM to deploy a minimal virtual machine of Jellyfin running on NixOS.
VM Specs:
- NixOS 24.05 Uakari
- 4 vcpu cores
- 4 GB memory
- 256 MB of disk
- Intel iGPU for Quick Sync
- Jellyfin stable
- Intro Skipper
Make sure IOMMU is enabled first.
lspci -nn | grep -Ei "3d|display|vga" to get the vendor_id
Use the vendor_id to match the appropriate PCI device_id
lspci -n | grep vendor_id which returned in my case 00:02.0 0300: 8086:9a49
devices = [ {
bus = "pci";
path = "00:02.0";
}]; microvm = {
hypervisor = "qemu";
socket = "control.socket";
mem = 4 * 1024;
vcpu = 4;
interfaces = [ {
type = "user";
id = "qemu";
mac = "02:00:00:01:01:01";
} ];
volumes = [{
mountPoint = "/";
image = "vm-jellyfin.img";
size = 256;
}];
shares = [{
proto = "9p";
tag = "ro-store";
source = "/nix/store";
mountPoint = "/nix/.ro-store";
} {
proto = "9p";
tag = "movies";
source = "/storage/media/movies";
mountPoint = "/mnt/media/movies";
} {
proto = "9p";
tag = "series";
source = "/storage/media/series";
mountPoint = "/mnt/media/series";
}];
# Intel iGPU for quick sync
# devices = [ {
# bus = "pci";
# path = "00:02.0";
# } ];
};You will need flakes enabled on the system then: nix run .#vm-jellyfin
This will build a 256 MB VM image that shares your hosts nix store in a r/o state which helps drastically reduce image size and build time and the MicroVM docs touch on it here.
There are no passwords set within the VM so your first task should be to login as root and run passwd. You can update the jellyfin user as well with passwd jellyfin
Plugins cannot modify contents of files in the nix store so in order to enable Intro Skipper we must modify jellyfin-web. NixOS Jellyfin wiki explains it here.
Login with admin account navigate to your Dashboard and go to Plugins
Add the repository
https://manifest.intro-skipper.org/manifest.json
Install Plugin
Catalog->Intro Skipper-> Install
You need to restart the Jellyfin service now systemctl restart jellyfin
