167 lines
6 KiB
Nix
167 lines
6 KiB
Nix
{
|
|
inputs = {
|
|
self.submodules = true;
|
|
# nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
# https://github.com/NixOS/nixpkgs/pull/444133
|
|
nixpkgs.url = "git+https://github.com/valpackett/nixpkgs?shallow=1&submodules=1&ref=val/tsvwswkqrrsr";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
virtwl.url = "git+https://github.com/valpackett/wayland-proxy-virtwl?shallow=1&submodules=1&ref=wip";
|
|
virtwl.inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
outputs = {self, nixpkgs, flake-utils, virtwl, ...}:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
};
|
|
in {
|
|
|
|
packages.libkrunfw = pkgs.libkrunfw;
|
|
# packages.libkrunfw = (pkgs.libkrunfw.overrideAttrs {
|
|
# version = "4.10.0";
|
|
# src = pkgs.fetchFromGitHub {
|
|
# owner = "containers";
|
|
# repo = "libkrunfw";
|
|
# tag = "v4.10.0";
|
|
# hash = "sha256-mq2gw0+xL6qUZE/fk0vLT3PEpzPV8p+iwRFJHXVOMnk=";
|
|
# };
|
|
# kernelSrc = pkgs.fetchurl {
|
|
# url = "mirror://kernel/linux/kernel/v6.x/linux-6.12.34.tar.xz";
|
|
# hash = "sha256-p/P+OB9n7KQXLptj77YaFL1/nhJ44DYD0P9ak/Jwwk0=";
|
|
# };
|
|
# cargoHash = "";
|
|
# });
|
|
|
|
packages.libkrun = (pkgs.libkrun.override {
|
|
withBlk = true;
|
|
withGpu = true;
|
|
withSound = true;
|
|
withNet = true;
|
|
libkrunfw = self.packages.${system}.libkrunfw;
|
|
}).overrideAttrs (old: {
|
|
src = ./libkrun;
|
|
cargoDeps = pkgs.rustPlatform.importCargoLock {
|
|
lockFile = ./libkrun/Cargo.lock;
|
|
};
|
|
# mesonFlags = [ (pkgs.lib.mesonOption "decoders" "gles,vulkan,composer") ]; # no magma(?)
|
|
});
|
|
|
|
packages.muvm = (pkgs.muvm.override {
|
|
libkrun = self.packages.${system}.libkrun;
|
|
}).overrideAttrs (old: {
|
|
postPatch = ""; # no more sysctl; udevd now takes the var anyway; XXX: fex
|
|
MUVM_UDEVD_PATH = "${pkgs.systemd}/lib/systemd/systemd-udevd";
|
|
src = ./muvm;
|
|
cargoDeps = pkgs.rustPlatform.importCargoLock {
|
|
lockFile = ./muvm/Cargo.lock;
|
|
};
|
|
});
|
|
|
|
packages.munix = let
|
|
munixScript = (pkgs.writeScriptBin "munix" (builtins.readFile ./munix)).overrideAttrs(old: {
|
|
buildCommand = "${old.buildCommand}\n patchShebangs $out";
|
|
});
|
|
munixInitRootHook = (pkgs.writeScriptBin "munix-init-root" (builtins.readFile ./munix-init-root)).overrideAttrs(old: {
|
|
buildCommand = "${old.buildCommand}\n patchShebangs $out";
|
|
});
|
|
munixInitUserHook = (pkgs.writeScriptBin "munix-init-user" (builtins.readFile ./munix-init-user)).overrideAttrs(old: {
|
|
buildCommand = "${old.buildCommand}\n patchShebangs $out";
|
|
});
|
|
in pkgs.symlinkJoin {
|
|
name = "munix";
|
|
paths = [ munixScript munixInitRootHook munixInitUserHook self.packages.${system}.muvm pkgs.passt pkgs.bubblewrap ];
|
|
buildInputs = [ pkgs.makeWrapper ];
|
|
postBuild = ''
|
|
wrapProgram $out/bin/munix --prefix PATH : $out/bin
|
|
'';
|
|
};
|
|
|
|
devShells.default = let
|
|
projects = with self.packages.${system}; [ libkrun muvm ];
|
|
in pkgs.mkShell {
|
|
MUVM_UDEVD_PATH = "${pkgs.systemd}/lib/systemd/systemd-udevd";
|
|
nativeBuildInputs = pkgs.lib.concatMap (pkg: pkg.nativeBuildInputs) projects;
|
|
buildInputs = (pkgs.lib.concatMap (pkg: pkg.buildInputs) projects) ++ (with self.packages.${system}; [
|
|
# virglrenderer
|
|
]) ++ (with pkgs; [
|
|
cargo
|
|
rust-analyzer
|
|
rustfmt
|
|
passt
|
|
bubblewrap
|
|
]);
|
|
};
|
|
|
|
packages.mesa = (pkgs.mesa.override {
|
|
vulkanDrivers = [
|
|
"amd"
|
|
"intel"
|
|
"microsoft-experimental" # removing this breaks the build
|
|
"nouveau"
|
|
"swrast"
|
|
"virtio"
|
|
"gfxstream" # probably not going to use this though
|
|
];
|
|
}).overrideAttrs (new: old: {
|
|
mesonFlags = old.mesonFlags ++ [ (pkgs.lib.mesonBool "amdgpu-virtio" true) ];
|
|
patches = old.patches ++ [ ./radvmmio.patch ]; # already merged to git
|
|
});
|
|
|
|
nixosConfigurations.testvm = nixpkgs.lib.nixosSystem {
|
|
inherit system;
|
|
modules = [
|
|
{
|
|
system.stateVersion = "25.11";
|
|
fileSystems."/".device = pkgs.lib.mkDefault "/dev/sda";
|
|
boot.isContainer = true;
|
|
|
|
users.mutableUsers = false;
|
|
users.users.appvm = {
|
|
uid = 1337;
|
|
isNormalUser = true;
|
|
home = "/home/appvm";
|
|
description = "microVM User";
|
|
extraGroups = [ "wheel" "video" "input" ];
|
|
};
|
|
users.groups.appvm.gid = 1337;
|
|
users.allowNoPasswordLogin = true;
|
|
|
|
hardware.graphics.enable = true;
|
|
hardware.graphics.package = self.packages.${system}.mesa;
|
|
system.replaceDependencies.replacements = [
|
|
{
|
|
original = pkgs.mesa;
|
|
replacement = self.packages.${system}.mesa;
|
|
}
|
|
];
|
|
environment.systemPackages = [
|
|
pkgs.fastfetch
|
|
pkgs.htop
|
|
pkgs.radeontop
|
|
virtwl.packages.x86_64-linux.proxy
|
|
pkgs.wayland-utils
|
|
pkgs.weston
|
|
pkgs.waycheck
|
|
pkgs.vulkan-tools
|
|
pkgs.glxinfo
|
|
pkgs.glmark2
|
|
pkgs.mesa-demos
|
|
pkgs.xorg.xeyes
|
|
pkgs.xterm
|
|
pkgs.vkquake
|
|
pkgs.kdePackages.kate
|
|
pkgs.adwaita-fonts
|
|
pkgs.adwaita-icon-theme
|
|
pkgs.gnome-text-editor
|
|
pkgs.firefox
|
|
pkgs.ffmpeg-full
|
|
pkgs.mpv
|
|
pkgs.libva-utils
|
|
];
|
|
}
|
|
];
|
|
};
|
|
|
|
});
|
|
}
|