;;;;;;;;;;;
;; Repos ;;
;;;;;;;;;;;

;; This is the core repo that is used for core things like networking ;;
(use-repo core "https://repo.ablecorp.us/core")
;; Add a secondary repo ;;
;; (use-repo able "https://repo.ablecorp.us/able")

;; Set the default pkg-install to be binary ;;
(pkg-defaults binary:true)

;; Install compilers ;;
;; pkg-install <repo> <pkg-name>
;; pkg-name : A string or atom to search.
(pkg-install core hblang2)
;; Install the rust compiler ;;
(pkg-install core rustc)
(pkg-install core clang)

;;;;;;;;;;;;;;;
;; Compilers ;;
;;;;;;;;;;;;;;;

;; Set default compilers to use ;;
;; the dev tool pulls from this ;;
(compilers
	hblang: 'hblang2
	rust: 'rustc
	;; Clang is not supported :thumbsup:
	;; c: 'clang
)

;;;;;;;;;;;;;;;;;
;; Boot Loader ;;
;;;;;;;;;;;;;;;;;
(pkg-install core limine)

(def limine_res (resolution 1024 768 24))
(boot-loader
	default-entry:1
	timeout:0
	interface_resolution: 'limine_res)

(boot-loader-entry "ableos"
	comment: "Default AbleOS boot entry."
	protocol: "limine"
	kernel_path: "boot:///kernel_${ARCH}"
	kernel_cmdline: ""
	resolution: 'limine_res)

(boot-loader-entry "ableos-no-cluster"
	comment: "Default AbleOS boot entry."
	protocol: "limine"
	kernel_path: "boot:///kernel_${ARCH}"
	kernel_cmdline: "cluster=false"
	resolution: 'limine_res)

;;;;;;;;;;;;;;;;;;;;
;; Kernel Options ;;
;;;;;;;;;;;;;;;;;;;;

;; A kernel package is required
(pkg-install core kernel-rust)

;; Set the kernel to be used by ableOS ;;
;; Maybe set a default if this isn't set? ;;
;; Must be installed already ;;
(kernel 'kernel-rust)

;;;;;;;;;;;;
;; Config ;;
;;;;;;;;;;;;

;; Install packages ;;
(pkg-install core sunset)
(pkg-install core ps2-driver)

;; A list of programs to run on startup ;;
(start '())

;; A list of programs to add to the driver supervisor ;;
(start-driver '(ps2-driver))

;; Set the window system to be used by ableOS ;;
;; Must be installed already ;;
;; adds the window system to the driver supervisor ;;
;; (def window-system (fn (a) (start-driver a)))
(window-system 'sunset)

;;;;;;;;;;;;;;;;
;; Networking ;;
;;;;;;;;;;;;;;;;

(networking
	;; set the network hostname
	;; TODO Namespace this somehow ;;
	(hostname "ableOS")
	;; use dhcp to find an ip ;;
	(ipv4 dhcp)
	(ipv6 dhcp)
	;; Set the time server ;;
	(ntp "time.nist.gov")
	(dns 'router-dns-steal))

;;;;;;;;;;;;;;;;;;;;;;
;; Cluster Software ;;
;;;;;;;;;;;;;;;;;;;;;;

;; Install the cluster software ;;
(pkg-install core cluster)

;; Defaults to false ;;
(cluster enabled:false)