{ title = "Inventory Manager", description = "Automated inventory management system for CC:Tweaked. Tracks items across networked storage, crafting turtles, furnaces, and alerts. Includes web dashboard via bridge computer.", repository = "gitea://git.spatulaa.com/MayaTheShy/Inventory-Manager-CC/main/", exclude = { "^web/", "^__tests__/", "^startup/", "%.md$", "%.json$", "^%.git", "^LICENSE$", "^node_modules/", "%.bak$", "^listDevicesByType%.lua$", }, install = [[ local cfgDir = "usr/config/inventory-manager" if not fs.isDir(cfgDir) then fs.makeDir(cfgDir) end local function ask(prompt, default) if default and #default > 0 then write(prompt .. " [" .. default .. "]: ") else write(prompt .. ": ") end local val = read() if not val or #val == 0 then return default end return val end print("") print("-- Inventory Manager Setup --") print("") print("Which role(s) will this computer run?") print(" 1) Inventory Manager (main controller)") print(" 2) Inventory Client (display-only)") print(" 3) Web Bridge (HTTP forwarder)") print(" 4) Skip setup") print("") write("Choice (1/2/3/4): ") local choice = read() if choice == "1" then print("") print("-- Manager Configuration --") local monitorSide = ask("Monitor side", "left") local smelterMonitorSide = ask("Smelter monitor side", "top") local dropperName = ask("Dropper peripheral name", "minecraft:dropper_9") local barrelName = ask("Barrel peripheral name", "minecraft:barrel_0") local serverUrl = ask("Web server URL (blank to skip)", "") local cfg = { monitorSide = monitorSide, smelterMonitorSide = smelterMonitorSide, dropperName = dropperName, barrelName = barrelName, } local f = fs.open(fs.combine(cfgDir, ".manager_config"), "w") f.write(textutils.serialiseJSON(cfg)) f.close() print("Saved manager config.") if serverUrl and #serverUrl > 0 then local bcfg = { serverUrl = serverUrl } local bf = fs.open(fs.combine(cfgDir, ".webbridge_config"), "w") bf.write(textutils.serialiseJSON(bcfg)) bf.close() print("Saved web bridge config.") end elseif choice == "2" then print("") print("-- Client Configuration --") local monitorSide = ask("Monitor side", "left") local smelterMonitorSide = ask("Smelter monitor side", "top") local dropperName = ask("Dropper peripheral name (blank if none)", "") local barrelName = ask("Barrel peripheral name (blank if none)", "") local cfg = { monitorSide = monitorSide, smelterMonitorSide = smelterMonitorSide, } if dropperName and #dropperName > 0 then cfg.dropperName = dropperName end if barrelName and #barrelName > 0 then cfg.barrelName = barrelName end local f = fs.open(fs.combine(cfgDir, ".client_config"), "w") f.write(textutils.serialiseJSON(cfg)) f.close() print("Saved client config.") elseif choice == "3" then print("") print("-- Web Bridge Configuration --") local serverUrl = ask("Web server URL", "http://localhost") local cfg = { serverUrl = serverUrl } local f = fs.open(fs.combine(cfgDir, ".webbridge_config"), "w") f.write(textutils.serialiseJSON(cfg)) f.close() print("Saved web bridge config.") else print("Skipped — edit config files manually later.") end ]], }