# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1

image:
  repository: sickcodes/docker-osx-vnc
  tag: latest
  pullPolicy: IfNotPresent
  userName: ubuntu

# Please note, this must be a directory name within `/system_image` mounted at the bottom in extraVolumeMounts
serverName: server

macos:
  # add kexts to EFI/OC/kexts and update config.plist
  #  make sure your kexts are in kexts.path
  kexts:
    add: false
    path: /system_image/kexts
    kextsToAdd: {}
    # - name: BrcmBluetoothInjector.kext
    #   executablePath: Contents/MacOS/BrcmBluetoothInjector
    #   plistPath: Contents/Info.plist
    # - name: BrcmFirmwareData.kext
    #   executablePath: Contents/MacOS/BrcmFirmwareData
    #   plistPath: Contents/Info.plist
    # - name: BrcmPatchRAM3.kext
    #   executablePath: Contents/MacOS/BrcmPatchRAM3
    #   plistPath: Contents/Info.plist
  # SMBIOS settings
  configPlist:
    SystemProductName: iMacPro1,1
    MLB: D25338500GUF8YLJA
    SystemSerialNumber: D25LF7ZEF8JC
    SystemUUID: 139C94D6-A533-47D2-874F-D365BFD8B047
    bootArgs: '-v keepsyms=1 tlbto_us=0 vti=9 -wegoff agdpmod=pikera'
  openCore:
    # Rebuild OpenCore.qcow2: this can be disabled if none of the above parameters in kexts, configPlist changes, and changing the
    #  resolution are not desired, utilizing gpu passthrough and a few other things. Disabling is not recommended
    rebuild: true
    boot:
      # set to zero to have OpenCore stay at boot menu
      timeout: 0
  installerSettings:
    # if using more than one deployment, a write lock will be put on the system installer dmg, so this will need to be disabled
    #  for other pods
    version: 10.15.7
    path: /system_image/installers

# This section defines QEMU and virtlo parameters
#
# Note:
#  *) Increase downloadDelay if the pod gets killed for readiness/liveliness check. The first time the pod is started,
#       it will download the BaseSystem image and create a data partition to install the OS. If this value is really long,
#       the pod will take very long to allow VNC connections if it is rebooted/killed.
#  *) Big Sur (11.X) is currently broken, as it seems Apple reworked the packaging so that will have to be something fixed in
#       https://github.com/kholia/OSX-KVM/blob/master/fetch-macOS-v2.py
#  *) VNC and IOMMU GPU passthrough do not play together well. Disable one if using the other. This is a limitation of QEMU
#       unfortunately, so this means VNC from macOS will have to be used to view the VM when not using a physical GPU.
#  *) If using GPU passthrough, it is recommended to configure it first, as the installer will take way longer (several hours)
#       to install macOS with a software GPU configured.
#
qemu:
  cpu: Penryn,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+xsave,+xsaveopt,check
  softwareGpu: vmware
  hardwareGpu:
    # when enabled, qemu.softwareGpu will be disabled automatically. disabling this will rely on softwareGpu instead
    enabled: false
    hardwareId: 09:00
    # slot can be found with `lspci -v -s <hardware-id>`
    slot: 05
    # vfioGroup can be found with lsgroup.sh:
    #  https://github.com/kholia/OSX-KVM/blob/master/scripts/lsgroup.sh
    vfioGroup: 50
    # leave romfile blank if not using one to disable
    romfile: /system_image/vbios/Sapphire.RX480.8192.160603.rom
  systemInstaller:
    # if using more than one deployment, a write lock will be put on the system installer dmg, so this will need to be disabled
    #  for other pods
    enabled: false
    downloadDelay: 15
    # can be `writethrough`, `writeback`, or `none`
    cache: none
    # can be `native` or `threads`
    io: threads
  systemDisk:
    size: 128G
    # can be `writethrough`, `writeback`, or `none`
    cache: writeback
    # can be `native` or `threads`
    io: threads
  audio:
    # this enables onboard audio, hdmi audio is handled with qemu.hardwareGpu
    enabled: false
    driver: alsa
  netdev:
    extraPortForwarding: hostfwd=tcp::5901-:5900
  # for usb, pass host adapters like such:
  # usb:
  #   - vendorId: 0a5c
  #     productId: 21e8
  #
  # please use lsgroup.sh to find your host ids:
  #  https://github.com/kholia/OSX-KVM/blob/master/scripts/lsgroup.sh
  #
  # for usb, may need to fix permissions:
  #   sudo chmod 666 /dev/bus/usb/<bus>/<device>
  #
  # if need to add a usb controller via vfio-pci, use qemu.extraArgs
  #
  usb: {}
  # use the following formatting
  # extraArgs:
  # - -parallel none
  # - -boot order=dc
  extraArgs: {}

# Password for accessing vm over vnc
vnc:
  enabled: true
  resolution: 1920x1080
  password: a5aeQbaPd4$jR80Q43

nameOverride: ""
fullnameOverride: ""

service:
  type: LoadBalancer
  ip: 192.168.1.10
  targetPort: 50922
  port: 10022
  extraPorts:
  - port: 5901
    targetPort: 5901
    protocol: TCP
    name: os-level-vnc

ingress:
  enabled: false
  annotations: {}
    # kubernetes.io/ingress.class: nginx
  # kubernetes.io/tls-acme: "true"
  paths:
  - /
  hosts:
  - docker-osx.local
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

# Note: Resources can vary dramatically depending on disk caching and software GPU rendering. With disk
#  caching and software rendering up to x5 the cpu and x9 memory can be consumed. With disk cache off
#  and GPU passthrough enabled up to x3 the cpu and x1.5 memory can be consumed. Therefore, these settings
#  really depend on hardware and configuration choices. Note, these values used a 1080p video resolution
#  as well. 
#
#  Warning: do not perform unit conversion on cpu and memory requests, as these units
#   are tied qemu and virtio settings. Also, only use intergers for cpu requests.
resources:
  limits:
   cpu: 15
   memory: 32768Mi
  requests:
   cpu: 4
   memory: 16384Mi

nodeSelector: {}

tolerations: []

affinity: {}

persistence:
  data:
    enabled: false
    ## configuration data Persistent Volume Storage Class
    ## If defined, storageClassName: <storageClass>
    ## If set to "-", storageClassName: "", which disables dynamic provisioning
    ## If undefined (the default) or set to null, no storageClassName spec is
    ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
    ##   GKE, AWS & OpenStack)
    ##
    # storageClass: "-"
    ##
    ## If you want to reuse an existing claim, you can pass the name of the PVC using
    ## the existingClaim variable
    existingClaim: docker-osx
    accessMode: ReadWriteOnce
    size: 5Gi

# Any extra volumes to define for the pod
extraVolumes:
  - name: data
    hostPath:
      path: /mnt/data/default/docker_osx/
      type: DirectoryOrCreate

# Any extra volume mounts to define for the containers
extraVolumeMounts:
  - name: data
    mountPath: /system_image
