installer.lua
- local owner = "Zonk1987"
- local repo = "CC-Tweaked"
- local apiUrl = "api.github.com .. owner .. "/" .. repo .. "/contents/"
- local function clear()
- term.clear()
- term.setCursorPos(1, 1)
- end
- clear()
- if term.isColor() then term.setTextColor(colors.cyan) end
- print("=======================================")
- print(" Zonk's CC-Tweaked Installer ")
- print("=======================================")
- if term.isColor() then term.setTextColor(colors.white) end
- print("Fetching projects from GitHub...\n")
- -- Fetch root contents
- local response = http.get(apiUrl)
- if not response then
- if term.isColor() then term.setTextColor(colors.red) end
- print("Error: Could not connect to GitHub API.")
- print("Check your internet connection or HTTP API settings in CC.")
- return
- end
- local responseData = response.readAll()
- response.close()
- local data = textutils.unserializeJSON(responseData)
- if not data then
- if term.isColor() then term.setTextColor(colors.red) end
- print("Error parsing GitHub response.")
- return
- end
- if term.isColor() then term.setTextColor(colors.red) end
- print("GitHub API Rate Limit exceeded!")
- print("Please try again later.")
- return
- end
- local projects = {}
- for i, item in ipairs(data) do
- -- Only include directories, ignore hidden folders (.git) and the installer folder itself
- if item.type == "dir" and item.name ~= "installer" and not string.match(item.name, "^%.") then
- table.insert(projects, item)
- end
- end
- if #projects == 0 then
- print("No projects found in the repository.")
- return
- end
- while true do
- clear()
- if term.isColor() then term.setTextColor(colors.cyan) end
- print("=======================================")
- print(" Zonk's CC-Tweaked Installer ")
- print("=======================================")
- if term.isColor() then term.setTextColor(colors.white) end
- print("Select a project to install:\n")
- for i, proj in ipairs(projects) do
- if term.isColor() then term.setTextColor(colors.yellow) end
- term.write("[" .. i .. "] ")
- if term.isColor() then term.setTextColor(colors.white) end
- print(proj.name)
- end
- if term.isColor() then term.setTextColor(colors.red) end
- print("\n[0] Exit")
- if term.isColor() then term.setTextColor(colors.white) end
- term.write("\nChoice: ")
- local choice = tonumber(read())
- if choice == 0 then
- print("Exiting...")
- return
- elseif choice and choice > 0 and choice <= #projects then
- local selected = projects[choice]
- print("\nFetching files for " .. selected.name .. "...")
- -- URL encode spaces in the path for the API call just in case
- local safePath = string.gsub(selected.path, " ", "%%20")
- local projRes = http.get(apiUrl .. safePath)
- if not projRes then
- if term.isColor() then term.setTextColor(colors.red) end
- print("Failed to get project contents.")
- os.sleep(2)
- else
- local projDataRaw = projRes.readAll()
- projRes.close()
- local projData = textutils.unserializeJSON(projDataRaw)
- if projData then
- local filesDownloaded = 0
- for _, fileItem in ipairs(projData) do
- if fileItem.type == "file" then
- print("Downloading " .. fileItem.name .. "...")
- local fileRes = http.get(fileItem.download_url)
- if fileRes then
- local fileContent = fileRes.readAll()
- fileRes.close()
- local f = fs.open(fileItem.name, "w")
- f.write(fileContent)
- f.close()
- filesDownloaded = filesDownloaded + 1
- else
- if term.isColor() then term.setTextColor(colors.red) end
- print("Failed to download " .. fileItem.name)
- if term.isColor() then term.setTextColor(colors.white) end
- end
- end
- end
- if term.isColor() then term.setTextColor(colors.green) end
- print("\nSuccessfully downloaded " .. filesDownloaded .. " files!")
- if term.isColor() then term.setTextColor(colors.yellow) end
- print("Rebooting computer in 3 seconds to apply startup.lua...")
- os.sleep(3)
- os.reboot()
- return
- else
- if term.isColor() then term.setTextColor(colors.red) end
- print("Failed to parse project data.")
- os.sleep(2)
- end
- end
- else
- if term.isColor() then term.setTextColor(colors.red) end
- print("Invalid choice!")
- if term.isColor() then term.setTextColor(colors.white) end
- os.sleep(1)
- end
- end
Pasted 2026-05-10 02:50:55
Short link:
Short link: