updated
This commit is contained in:
127
kernel.lua
127
kernel.lua
@@ -1,55 +1,86 @@
|
||||
local BASE_URL = "https://git.astrocore.space/root/nova-corp/raw/branch/main/"
|
||||
|
||||
-- Download <url> to <destFile>, replacing any existing file.
|
||||
local function download(url, destFile)
|
||||
if fs.exists(destFile) then
|
||||
shell.execute("rm", destFile)
|
||||
end
|
||||
shell.execute("wget", url, destFile)
|
||||
sleep(1)
|
||||
end
|
||||
|
||||
local function addDriver(fileName)
|
||||
local extension = ".lua"
|
||||
local fullFile = fileName .. extension
|
||||
shell.execute("rm", fullFile)
|
||||
local baseRoute = "https://git.astrocore.space/root/nova-corp/raw/branch/main/"
|
||||
shell.execute("wget", baseRoute .. fullFile)
|
||||
sleep(2)
|
||||
local fullFile = fileName .. ".lua"
|
||||
download(BASE_URL .. fullFile, fullFile)
|
||||
return require(fileName)
|
||||
end
|
||||
|
||||
local function addFolderDriver(folder, fileName)
|
||||
local extension = ".lua"
|
||||
local fullFile = fileName .. extension
|
||||
shell.execute("rm", fullFile)
|
||||
local baseRoute = "https://git.astrocore.space/root/nova-corp/raw/branch/main/"
|
||||
shell.execute("wget", baseRoute .. folder .. "/" .. fullFile)
|
||||
sleep(2)
|
||||
local fullFile = fileName .. ".lua"
|
||||
download(BASE_URL .. folder .. "/" .. fullFile, fullFile)
|
||||
return require(fileName)
|
||||
end
|
||||
|
||||
local function addProgram(fileName)
|
||||
local extension = ".lua"
|
||||
local fullFile = fileName .. extension
|
||||
shell.execute("rm", fullFile)
|
||||
local baseRoute = "https://git.astrocore.space/root/nova-corp/raw/branch/main/"
|
||||
shell.execute("wget", baseRoute .. "programs" .. "/" .. fullFile)
|
||||
sleep(2)
|
||||
local fullFile = fileName .. ".lua"
|
||||
download(BASE_URL .. "programs/" .. fullFile, fullFile)
|
||||
return require(fileName)
|
||||
end
|
||||
|
||||
local function addSound(fileName)
|
||||
local extension = ".dfpwm"
|
||||
local fullFile = fileName .. extension
|
||||
shell.execute("rm", fullFile)
|
||||
local baseRoute = "https://git.astrocore.space/root/nova-corp/raw/branch/main/"
|
||||
shell.execute("wget", baseRoute .. "sounds" .. "/" .. fullFile)
|
||||
sleep(2)
|
||||
return
|
||||
local fullFile = fileName .. ".dfpwm"
|
||||
download(BASE_URL .. "sounds/" .. fullFile, fullFile)
|
||||
end
|
||||
|
||||
local function addServerHandler(fileName)
|
||||
local extension = ".lua"
|
||||
local fullFile = fileName .. extension
|
||||
shell.execute("rm", fullFile)
|
||||
local baseRoute = "https://git.astrocore.space/root/nova-corp/raw/branch/main/"
|
||||
shell.execute("wget", baseRoute .. "server" .. "/" .. fullFile)
|
||||
sleep(2)
|
||||
local fullFile = fileName .. ".lua"
|
||||
download(BASE_URL .. "server/" .. fullFile, fullFile)
|
||||
return require(fileName)
|
||||
end
|
||||
|
||||
-- installInit downloads programs/init.lua and writes it as startup.lua
|
||||
-- so that on next boot the user is prompted for which program to install.
|
||||
local function installInit()
|
||||
download(BASE_URL .. "programs/init.lua", "startup.lua")
|
||||
print("init installed as startup.lua. Reboot to choose a program.")
|
||||
end
|
||||
|
||||
-- addStartup("roulette") downloads programs/roulette.lua AND writes a
|
||||
-- startup.lua that re-pulls the kernel + program on every boot and runs it.
|
||||
local function addStartup(programName)
|
||||
-- Pull the program once now so it's runnable immediately.
|
||||
addProgram(programName)
|
||||
|
||||
local startupSrc = ([[-- Auto-generated by kernel.addStartup("%s")
|
||||
local BASE_URL = "%s"
|
||||
|
||||
local function fetch(path, dest)
|
||||
if fs.exists(dest) then shell.execute("rm", dest) end
|
||||
shell.execute("wget", BASE_URL .. path, dest)
|
||||
sleep(1)
|
||||
end
|
||||
|
||||
-- Refresh kernel and program on every boot so updates flow through.
|
||||
fetch("kernel.lua", "kernel.lua")
|
||||
local kernel = require("kernel")
|
||||
local program = kernel.addProgram("%s")
|
||||
|
||||
if program and program.start then program.start() end
|
||||
if program and program.main then
|
||||
program.main()
|
||||
else
|
||||
print("Program '%s' has no main() function.")
|
||||
end
|
||||
]]):format(programName, BASE_URL, programName, programName)
|
||||
|
||||
if fs.exists("startup.lua") then shell.execute("rm", "startup.lua") end
|
||||
local f = fs.open("startup.lua", "w")
|
||||
f.write(startupSrc)
|
||||
f.close()
|
||||
|
||||
print("Startup installed for '" .. programName .. "'. Reboot to launch.")
|
||||
end
|
||||
|
||||
|
||||
addDriver("task-manager")
|
||||
addDriver("monitor-driver")
|
||||
@@ -57,5 +88,37 @@ addDriver("disk-driver")
|
||||
addDriver("speaker-driver")
|
||||
addSound("notification")
|
||||
|
||||
-- Always (re)install init as startup.lua when the kernel is freshly fetched.
|
||||
-- The init program will overwrite startup.lua with the chosen program's
|
||||
-- launcher the first time the user picks one.
|
||||
--
|
||||
-- Gate: only run when executed directly from the shell (e.g. right after
|
||||
-- `wget kernel.lua` then `kernel`). When required from a startup script
|
||||
-- (`require("kernel")`) we skip this so we don't clobber the program's
|
||||
-- startup.lua on every boot.
|
||||
if not _G.__KERNEL_LOADED then
|
||||
_G.__KERNEL_LOADED = true
|
||||
if shell and shell.getRunningProgram and shell.getRunningProgram() == "kernel.lua" then
|
||||
installInit()
|
||||
end
|
||||
end
|
||||
|
||||
return { addDriver = addDriver, addFolderDriver = addFolderDriver, addProgram = addProgram, addSound = addSound, addServerHandler = addServerHandler }
|
||||
|
||||
local kernel = {
|
||||
addDriver = addDriver,
|
||||
addFolderDriver = addFolderDriver,
|
||||
addProgram = addProgram,
|
||||
addSound = addSound,
|
||||
addServerHandler = addServerHandler,
|
||||
addStartup = addStartup,
|
||||
installInit = installInit,
|
||||
}
|
||||
|
||||
-- Expose helpers as globals so they can be called directly from the shell:
|
||||
-- > addStartup("roulette")
|
||||
_G.addStartup = addStartup
|
||||
_G.addProgram = addProgram
|
||||
_G.addDriver = addDriver
|
||||
_G.kernel = kernel
|
||||
|
||||
return kernel
|
||||
|
||||
Reference in New Issue
Block a user