sigil/nixos-modules/hardware/framebuffer.nix

62 lines
1.7 KiB
Nix

{ 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;
};
}