Advertisement
Navatusein

Test installer

Jan 23rd, 2025
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.10 KB | None | 0 0
  1. local shell = require("shell")
  2. local term = require("term")
  3. local filesystem = require("filesystem")
  4. local internet = require("internet")
  5.  
  6. local programListUrl = "https://raw.githubusercontent.com/Navatusein/GTNH-OC-Installer/main/programs.lua"
  7.  
  8. ---@class ProgramDescription
  9. ---@field name string
  10. ---@field description string
  11. ---@field url string
  12. local program = {}
  13.  
  14. ---Download and install tar utility
  15. local function downloadTarUtility()
  16.   if filesystem.exists("/bin/tar.lua") then
  17.     return
  18.   end
  19.  
  20.   local tarManUrl = "https://raw.githubusercontent.com/mpmxyz/ocprograms/master/usr/man/tar.man"
  21.   local tarBinUrl = "https://raw.githubusercontent.com/mpmxyz/ocprograms/master/home/bin/tar.lua"
  22.  
  23.   term.write("Try download tar utility\n")
  24.  
  25.   shell.setWorkingDirectory("/usr/man")
  26.   shell.execute("wget -fq "..tarManUrl)
  27.   shell.setWorkingDirectory("/bin")
  28.   shell.execute("wget -fq "..tarBinUrl)
  29.  
  30.   term.write("Downloading tar utility success\n")
  31. end
  32.  
  33. ---Download and install program
  34. ---@param program ProgramDescription
  35. local function downloadProgram(program)
  36.   term.write("Installing "..program.name.."\n")
  37.  
  38.   shell.execute("wget -fq "..program.url.." program.tar")
  39.   shell.execute("tar -xf program.tar")
  40.   shell.execute("rm program.tar")
  41.  
  42.   term.write("Installation complete\n")
  43. end
  44.  
  45. ---Get program list from url
  46. ---@param programListUrl string
  47. ---@return ProgramDescription[]
  48. local function getProgramList(programListUrl)
  49.   term.write("Try get program list\n")
  50.  
  51.   local request = internet.request(programListUrl)
  52.   local result = ""
  53.  
  54.   for chunk in request do
  55.     result = result..chunk
  56.   end
  57.  
  58.   term.write("Getting program list success\n")
  59.  
  60.   return load(result)()
  61. end
  62.  
  63. ---Choose program
  64. ---@param programList ProgramDescription[]
  65. ---@return ProgramDescription
  66. local function chooseProgram(programList)
  67.   for key, value in pairs(programList) do
  68.     term.write("["..key.."] "..value.name.."\n")
  69.     term.write("    "..value.description.."\n\n")
  70.   end
  71.  
  72.   term.write("\nSelect program to install [1-"..tostring(#programList).."]\n")
  73.  
  74.   local _, startRow = term.getCursor()
  75.  
  76.   while true do
  77.     term.write("===>")
  78.  
  79.     local userInput = tonumber(io.read())
  80.  
  81.     if userInput and userInput >= 1 and userInput <= #programList then
  82.       return programList[userInput]
  83.     end
  84.  
  85.     term.setCursor(1, startRow)
  86.     term.clearLine()
  87.   end
  88. end
  89.  
  90. ---Make auto run
  91. local function makeAutoRun()
  92.   term.write("\nCreate auto run [y/n]\n")
  93.   term.write("===>")
  94.  
  95.   local userInput = io.read()
  96.  
  97.   term.clear()
  98.  
  99.   if string.lower(userInput) == "y" then
  100.     local file = assert(io.open("/home/.shrc", "w"))
  101.     file:write("main")
  102.     file:close()
  103.  
  104.     term.write("Auto run created\n")
  105.   else
  106.     term.write("Auto run ignored\n")
  107.   end
  108. end
  109.  
  110. ---Main
  111. local function main()
  112.   term.clear()
  113.   term.write("Welcome to Navatusein's programs installer\n\n")
  114.  
  115.   downloadTarUtility()
  116.   local programList = getProgramList(programListUrl)
  117.   local programUrl = chooseProgram(programList)
  118.  
  119.   shell.setWorkingDirectory("/home")
  120.  
  121.   makeAutoRun()
  122.   downloadProgram(programUrl)
  123. end
  124.  
  125. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement