{ config, pkgs, lib, ... }: with lib; { options.hardware.genode.framebuffer = { enable = lib.mkEnableOption "framebuffer driver"; driver = mkOption { type = types.enum [ "boot" "vesa" ]; default = "vesa"; }; }; config = { genode.core.children.fb_drv = mkIf config.hardware.genode.framebuffer.enable { inputs = with pkgs.genodePackages; { "boot" = [ boot_fb_drv ]; "vesa" = [ vesa_drv ]; }.${config.hardware.genode.framebuffer.driver}; configFile = let binary = with pkgs.genodePackages; { "boot" = "boot_fb_drv"; "vesa" = "vesa_fb_drv"; }.${config.hardware.genode.framebuffer.driver}; in builtins.toFile "fb_drv.dhall" '' let Genode = env:DHALL_GENODE let XML = Genode.Prelude.XML let Init = Genode.Init in Init.Child.flat Init.Child.Attributes::{ , binary = "${binary}" , resources = Init.Resources::{ caps = 256, ram = Genode.units.MiB 32 } , routes = [ Init.ServiceRoute.parent "IO_MEM" , Init.ServiceRoute.parent "IO_PORT" ] } ''; }; }; }