{ lib, config, modulesPath, ... }: let cfg = config.bagel.hardware.oracle-vm; inherit (lib) mkEnableOption mkIf mkOption types; in { options.bagel.hardware.oracle-vm = { enable = mkEnableOption "Oracle's VM hardware defaults"; system = mkOption { # Only the free Oracle VMs are supported. type = types.enum [ "aarch64-linux" ]; }; }; # Imports a bunch of virtio modules. imports = [ "${modulesPath}/profiles/qemu-guest.nix" ]; config = mkIf cfg.enable { boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; boot.initrd.systemd.enable = true; boot.initrd.availableKernelModules = [ "xhci_pci" "virtio_pci" "usbhid" "sr_mod" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ ]; boot.extraModulePackages = [ ]; nixpkgs.hostPlatform = cfg.system; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking # (the default) this is the recommended approach. When using systemd-networkd it's # still possible to use this option, but it's recommended to use it in conjunction # with explicit per-interface declarations with `networking.interfaces..useDHCP`. networking.useDHCP = lib.mkDefault false; # Examples: # 2: enp0s3: mtu 1500 qdisc mq state UP group default qlen 1000 # link/ether 02:00:17:00:91:6e brd ff:ff:ff:ff:ff:ff # inet 10.0.0.94/24 brd 10.0.0.255 scope global dynamic noprefixroute enp0s3 # valid_lft 44162sec preferred_lft 33362sec # inet6 fe80::17ff:fe00:916e/64 scope link # valid_lft forever preferred_lft forever # [root@build02-aarch64-lahfa:~]# ip r # default via 10.0.0.1 dev enp0s3 proto dhcp src 10.0.0.94 metric 1002 mtu 9000 networking.interfaces.enp0s3.useDHCP = lib.mkDefault true; }; }