{ config, pkgs, lib, ... }: with lib; { options.hardware.genode.framebuffer = { enable = lib.mkEnableOption "framebuffer driver"; driver = mkOption { type = types.enum [ "boot" "vesa" ]; default = "vesa"; }; }; config = { hardware.genode.platform.policies = lib.optional config.hardware.genode.framebuffer.enable (builtins.toFile ("framebuffer.platform-policy.dhall") '' let Sigil = env:DHALL_SIGIL in Sigil.Init.Config.Policy::{ , service = "Platform" , label = Sigil.Init.LabelSelector.prefix "fb_drv" , content = [ Sigil.Prelude.XML.leaf { name = "pci", attributes = toMap { class = "VGA" } } ] } ''); genode.core.children.fb_drv = mkIf config.hardware.genode.framebuffer.enable { package = with pkgs.genodePackages; { boot = boot_fb_drv; vesa = vesa_drv; }.${config.hardware.genode.framebuffer.driver}; configFile = builtins.toFile "fb_drv.dhall" '' let Sigil = env:DHALL_SIGIL let Init = Sigil.Init in λ(binary : Text) → Init.Child.flat Init.Child.Attributes::{ , binary , resources = Init.Resources::{ caps = 256, ram = Sigil.units.MiB 32 } , routes = [ Init.ServiceRoute.parent "IO_MEM" , Init.ServiceRoute.parent "IO_PORT" ] } ''; }; virtualisation.graphics = lib.mkDefault config.hardware.genode.framebuffer.enable; }; }