# This file defines the content of the minimum Haiku image.

SYSTEM_BIN = [ FFilterByBuildFeatures
	addattr alert arp autologin
	beep bfsinfo
	catattr checkfs checkitout chop clear collectcatkeys copyattr
	desklink df diskimage draggers
	driveinfo dstcheck dumpcatalog
	eject error
	fdinfo ffm filepanel finddir findpaths fortune fstrim
	ftpd
	getarch groupadd groupdel groupmod
	hd hey
	ifconfig iroster isvolume
	kernel_debugger keymap keystore
	launch_roster linkcatkeys listarea listattr listimage listdev listfont
	listport listres listsem listusb locale logger login lsindex
	makebootable message mimeset mkfs mkindex
	modifiers mount mountvolume
	netstat notify
	open
	package package_repo passwd pc ping ping6 pkgman prio profile ps
	query quit
	ramdisk rc reindex release renice resattr resizefs rmattr rmindex roster
	route
	safemode screen_blanker screeninfo screenmode setarch setmime settype
	setversion setvolume shutdown
	strace su sysinfo system_time
	tcptester telnet telnetd top
	traceroute trash
	unchop unmount
	urlwrapper useradd userdel
	version vmstat
	waitfor watch writembr@x86,x86_64 xres
] ;

SYSTEM_APPS = [ FFilterByBuildFeatures
	AboutSystem
	BootManager@x86,x86_64
	CharacterMap
	Debugger@libedit DeskCalc Devices DiskProbe DiskUsage DriveSetup
	Expander Installer
	NetworkStatus
	ProcessController
	ShowImage StyledEdit
	Terminal TextSearch
	Workspaces
] ;

DESKBAR_APPLICATIONS =
	CharacterMap
	DeskCalc Devices DiskProbe DiskUsage DriveSetup
	Expander Installer
	StyledEdit
	Terminal
;

DESKBAR_DESKTOP_APPLETS =
	NetworkStatus
	ProcessController
	Workspaces
;

SYSTEM_PREFERENCES = [ FFilterByBuildFeatures
	Appearance
	Backgrounds
	<preference>Deskbar
	FileTypes
	Input
	Keymap
	Locale
	Network Notifications
	Screen Shortcuts
	Time <preference>Tracker
	VirtualMemory
] ;

SYSTEM_DEMOS = ;


rule HaikuImageGetSystemLibs
{
	return
		# libs with special grist
		[ MultiArchDefaultGristFiles libroot.so : revisioned ]
		[ Libstdc++ForImage ]
		# libs with standard grist
		[ MultiArchDefaultGristFiles [ FFilterByBuildFeatures
			libbe.so libbsd.so libbnetapi.so
			libdebug.so
			libdebugger.so@primary
			libdevice.so
			libgnu.so
			libnetwork.so
			libpackage.so
			libtextencoding.so libtracker.so libtranslation.so
		] ]
		;
}


rule HaikuImageGetPrivateSystemLibs
{
	return [ MultiArchDefaultGristFiles [ FFilterByBuildFeatures
		libalm.so
		libpackage-add-on-libsolv.so
		libroot-addon-icu.so
	] ] ;
}


SYSTEM_SERVERS = [ FFilterByBuildFeatures
	app_server
	debug_server dns_resolver_server
	input_server
	keystore_server
	launch_daemon
	mount_server
	net_server notification_server
	package_daemon power_daemon
	registrar
	syslog_daemon
] ;

SYSTEM_NETWORK_DEVICES =
	ethernet
	loopback
	tunnel
;

SYSTEM_NETWORK_DATALINK_PROTOCOLS =
	<module>arp
	ethernet_frame
	ipv6_datagram
	loopback_frame
;

#SYSTEM_NETWORK_PPP = ipcp modem pap pppoe KPPPManager ;

SYSTEM_NETWORK_PROTOCOLS =
	icmp icmp6 ipv4 ipv6
	tcp
	udp unix
;

SYSTEM_ADD_ONS_ACCELERANTS = [ FFilterByBuildFeatures
	framebuffer.accelerant
	x86,x86_64 @{
		vesa.accelerant
	}@ # x86,x86_64
	riscv64 @{
		# ati for qemu, radeon_hd for unmatched
		ati.accelerant
		radeon_hd.accelerant
	}@ # riscv64
] ;

SYSTEM_ADD_ONS_TRANSLATORS =
	STXTTranslator
;

SYSTEM_ADD_ONS_LOCALE_CATALOGS =
	<catalog-addon>plaintext
;

SYSTEM_ADD_ONS_MEDIA = ;

SYSTEM_ADD_ONS_MEDIA_PLUGINS =  ;

SYSTEM_ADD_ONS_PRINT = ;

SYSTEM_ADD_ONS_PRINT_TRANSPORT = ;

SYSTEM_ADD_ONS_SCREENSAVERS = ;

SYSTEM_ADD_ONS_DRIVERS_AUDIO = ;

SYSTEM_ADD_ONS_DRIVERS_AUDIO_OLD = ;

SYSTEM_ADD_ONS_DRIVERS_GRAPHICS = [ FFilterByBuildFeatures
	framebuffer
	x86,x86_64 @{
		vesa
	}@ # x86,x86_64
	riscv64 @{
		# ati for qemu, radeon_hd for unmatched
		ati
		radeon_hd
	}@ # riscv64
] ;

SYSTEM_ADD_ONS_DRIVERS_MIDI = ;

SYSTEM_ADD_ONS_DRIVERS_NET = [ FFilterByBuildFeatures
	x86,x86_64,riscv64 @{
		3com
		atheros813x atheros81xx attansic_l1 attansic_l2
		broadcom440x broadcom570x
		dec21xxx
		ipro100 ipro1000
		intel22x
		jmicron2x0
		marvell_yukon
		nforce
		pcnet
		rtl8125 rtl8139 rtl81xx
		sis19x sis900 syskonnect
		via_rhine vt612x
	}@ # x86,x86_64,riscv64

	etherpci
	pegasus
	usb_asix usb_davicom usb_rndis
	wb840
] ;

SYSTEM_ADD_ONS_DRIVERS_POWER = [ FFilterByBuildFeatures
	acpi_button@x86,x86_64
] ;

SYSTEM_ADD_ONS_DRIVERS_SENSOR = [ FFilterByBuildFeatures
	acpi_als@x86,x86_64
] ;


SYSTEM_ADD_ONS_BUS_MANAGERS = [ FFilterByBuildFeatures
	acpi@x86,x86_64,arm64 agp_gart@x86,x86_64 ata
	i2c@x86,x86_64 isa@x86,x86_64
	mmc
	scsi
	pci ps2@x86,x86_64
	fdt@riscv64,arm,arm64
	random
	usb
	virtio
] ;

SYSTEM_ADD_ONS_FILE_SYSTEMS =
	attribute_overlay
	bfs bindfs btrfs
	exfat ext2
	fat
	iso9660
	log_overlay
	ntfs
	packagefs
	ramfs
	reiserfs
	udf
	write_overlay
;

# symlink to home on desktop
AddSymlinkToHaikuImage home Desktop : /boot/home : Home ;

# global settings when a package is installed in ~/config
AddDirectoryToHaikuImage home config settings global ;

# user scripts and data files
local userBootScripts = UserBootscript UserSetupEnvironment.sample ;
SEARCH on $(userBootScripts) = [ FDirName $(HAIKU_TOP) data config boot ] ;
AddFilesToHaikuImage home config settings boot : $(userBootScripts) ;

SEARCH on <user-first-login>first_login
	= [ FDirName $(HAIKU_TOP) data settings ] ;
AddFilesToHaikuImage home config settings : <user-first-login>first_login ;

local etcDir = [ FDirName $(HAIKU_TOP) data etc ] ;
local etcFiles = inputrc profile ;
etcFiles = $(etcFiles:G=etc) ;
SEARCH on $(etcFiles) = $(etcDir) ;
AddFilesToHaikuImage system settings etc : $(etcFiles) ;

local profileFiles = [ Glob $(etcDir)/profile.d : *.sh ] ;
profileFiles = $(profileFiles:G=profile-d) ;
AddDirectoryToHaikuImage system settings etc profile.d ;
AddFilesToHaikuImage system settings etc profile.d : $(profileFiles) ;

local driverSettingsFiles = <driver-settings>kernel ;
SEARCH on $(driverSettingsFiles)
	= [ FDirName $(HAIKU_TOP) data settings kernel drivers ] ;
AddFilesToHaikuImage home config settings kernel drivers
	: $(driverSettingsFiles) ;

local networkSettingsFiles = <network-settings>services
	<network-settings>hosts ;

SEARCH on $(networkSettingsFiles)
	= [ FDirName $(HAIKU_TOP) data settings network ] ;
AddFilesToHaikuImage system settings network : $(networkSettingsFiles) ;

# repository config and cache files
local repository ;
for repository in $(HAIKU_REPOSITORIES) {
	local config = [ on $(repository) return $(HAIKU_REPOSITORY_CONFIG_FILE) ] ;
	local cache = [ on $(repository) return $(HAIKU_REPOSITORY_CACHE_FILE) ] ;
	if $(HAIKU_UPDATE_ALL_PACKAGES) {
		HAIKU_INCLUDE_IN_IMAGE on $(config) $(cache) = 1 ;
	}
	AddFilesToHaikuImage system settings package-repositories
		: $(config) : $(repository:G=) ;
	AddFilesToHaikuImage system cache package-repositories
		: $(cache) : $(repository:G=) ;
}
