# Copyright 2022 The Fuchsia Authors.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Common workstation product configuration. This configuration is shared by the _eng,
# _userdebug, and _user build types.

import("//products/core.gni")
core_realm_package_name = "core-workstation"

core_realm_shards += [
  "//src/developer/build_info:build_info_core_shard",
  "//src/developer/memory/monitor:memory_monitor_core_shard",
  "//src/identity/bin/account:account-core-shard",
  "//src/intl/intl_services:intl_services_shard",
  "//src/media/audio/drivers/configurator:configurator_provider_shard",
  "//src/power/battery-manager:battery-manager-core-shard",
  "//src/session/bin/session_manager:workstation_core_shard",
  "//src/ui:ui_core_shard",
]

legacy_base_package_labels += [
  "//src/developer/memory/buckets:workstation_memory_monitor_config",
  "//src/fonts",
  "//src/fonts:open-fonts-collection",
  "//src/graphics/bin/vulkan_loader",
  "//src/identity/bin:minimal_auth",

  # TODO(fxbug.dev/90430): Complete CFv2 migration and remove.
  "//src/intl/intl_services/config:sysmgr",
  "//src/intl/intl_services:pkg",
  "//src/media/audio/bundles:services",
  "//src/media/audio/drivers/configurator:package",
  "//src/power:battery",
  "//src/sys/activity",
  "//src/ui:runtime_with_scene_manager",
  "//src/ui/bin/brightness_manager",
  "//src/ui/bin/screensaver",
  "//src/ui/bin/text:text_manager",
  "//src/ui/bin/shortcut",
  "//third_party/openssh-portable:openssh-tools",
]
legacy_base_package_labels -= [
  # TODO(fxbug.dev/90430): Complete CFv2 migration and remove.
  "//src/intl/intl_services/config:sysmgr_small",
]
core_realm_shards -= [ "//src/intl/intl_services:intl_services_small_shard" ]

# Add Linux runner
legacy_base_package_labels += [
  "//src/ui/wayland/bin/bridge",
  "//src/virtualization/bin/vmm",
  "//src/virtualization/bin/guest_manager:termina_guest_manager",
  "//src/virtualization/bin/linux_runner",
  "//src/virtualization/packages/termina_guest",
  "//src/virtualization/bin/guest",
]
core_realm_shards += [ "//src/ui/wayland/bin/bridge:core_shard" ]

# Add Bluetooth packages
core_realm_shards +=
    [ "//src/connectivity/bluetooth/profiles/bt-a2dp:eager_core_shard" ]

# To use the eager shard, cache the packages so they are available before network.
legacy_cache_package_labels += [
  "//src/connectivity/bluetooth/profiles/bt-a2dp:source-only",
  "//src/connectivity/bluetooth/profiles/bt-avrcp-target",
  "//src/connectivity/bluetooth/profiles/bt-avrcp",

  # TODO(fxbug.dev/79542): Demote to universe when sysui handles pairing+connecting
  "//src/connectivity/bluetooth/tools/bt-cli",
  "//src/connectivity/bluetooth/tools/bt-pairing-tool",

  "//src/chromium:chrome_browser",
]

# Explicitly prefer wired networking on workstation
legacy_base_package_labels -=
    [ "//src/connectivity/network/netcfg:config-default" ]
legacy_base_package_labels +=
    [ "//src/connectivity/network/netcfg:config-prefer-wired" ]

# This package is only used for tests, so it must stay out of non-eng workstation products.
legacy_base_package_labels -=
    [ "//src/connectivity/network:network-legacy-deprecated" ]

legacy_base_package_labels += [
  "//src/experiences/bin/settings/license:license_settings",
  "//src/experiences/session_shells/ermine",
  "//src/media/playback/bundles:services",
  "//src/media/playback/bundles:audio_consumer_config",
  "//src/session",
  "//src/ui/bin/terminal",
  "//src/ui/scenic",
  "//examples/fortune:fortune_teller",

  # Starnix
  "//src/proc/bundles:starnix",
]

product_bootfs_labels += [
  # hide the virtual console on boot
  "//products/kernel_cmdline:virtcon.hide-on-boot",

  # enable boot animation
  "//products/kernel_cmdline:virtcon.boot-animation--true",

  # enable DPI based scale factors, 1.25x above 160 DPI, 2x above 240, etc.
  "//products/kernel_cmdline:virtcon.dpi--160-240-360-480",

  # enable double buffered output
  "//products/kernel_cmdline:virtcon.buffer-count--2",
]

# Add bold and italic Virtcon fonts.
virtcon_bold_font_path =
    "//prebuilt/third_party/fonts/robotomono/RobotoMono-Bold.ttf"
virtcon_italic_font_path =
    "//prebuilt/third_party/fonts/robotomono/RobotoMono-Italic.ttf"
virtcon_bold_italic_font_path =
    "//prebuilt/third_party/fonts/robotomono/RobotoMono-BoldItalic.ttf"

# Include Fxfs in the build so that it's available for enablement at runtime.
product_bootfs_labels += [
  "//src/storage/fxfs",
  "//src/storage/fxfs-crypt",
]

# USB peripheral drivers are not necessary for workstation.
product_bootfs_labels += [ "//bundles/drivers:usb-peripheral-stack" ]
product_bootfs_labels -= [ "//bundles/drivers:usb-peripheral-stack" ]

# Shards for media.
core_realm_shards += [
  "//src/media/codec:codec_factory_shard",
  "//src/media/audio/audio_core:core_shard",
]

# Enable input injection for testing through `fuchsia.input.injection.InputDeviceRegistry`.
use_modern_input_injection = true

# Create an additional (initially empty) account partition in FVM to enable
# user data protection.
include_account_in_fvm = true

# Use Flatland as the default graphics protocol in Scenic.
use_flatland_by_default = true

data_filesystem_format = "fxfs"
