def show_category(i):
    system.serialWarning()
    global category
    slug = categories[i]["slug"]
    name = categories[i]["name"]
    showMessage("Loading " + slug + "...")
    try:
        try:
            category = woezel.get_category(slug)
        except:
            showMessage("Failed to open category " + slug + "!", True)
            time.sleep(1)
            show_categories()
        gc.collect()
        opt = []
        for package in category:
            opt.append("%s rev. %s" % (package["name"], package["revision"]))
        opt.append("< Back to categories")
        sel = term.menu("Installer - " + name, opt)
        if sel == len(category):
            show_categories()
        install_app(sel, i)
    except BaseException as e:
        sys.print_exception(e)
        showMessage(e, True)
        time.sleep(1)
        show_categories()
    print("Updating cache failed.")
    wifi.disconnect()
    gc.collect()
    uinterface.connect_wifi()
    retry -= 1
    if retry == 0:
        print("This is not ok, rebooting")
        system.reboot()

categories = woezel.get_categories()
active_categories = [cat for cat in categories if cat['eggs'] > 0]

if len(active_categories) == 0:
    rgb.clear()
    rgb.framerate(20)
    uinterface.skippabletext('Error loading')
    system.start("appstore")

while True:
    chosen_index = uinterface.menu([app['name'] for app in active_categories])
    if chosen_index is None:
        system.reboot()
    category = active_categories[chosen_index]

    apps = woezel.get_category(category['slug'])
    chosen_index = uinterface.menu([app['name'] for app in apps])
    if chosen_index is None:
        continue
    app = apps[chosen_index]

    uinstaller.install(app['slug'])