retui-launcher ~/RETUI/launcher/modules mode: small tools, clear boundaries
Launcher / Modulesmodule -ls
Teal / Launcher

I wanted the launcher to hold small tools, not become every tool.

A timer, the current song, a few notes, or the state of a server can belong beside the prompt. A whole Linux environment does not. Modules work because RETUI keeps that difference visible.

A module is a place, not a plugin loophole

Modules are terminal panels owned and rendered by RETUI. They show useful state, offer a few focused actions, and stay close to the command line. They do not load somebody else's Java or Kotlin into the launcher.

That limit is deliberate. Extensibility is useful, but turning the launcher into an unbounded plugin host would make permissions, crashes, and visual behaviour much harder to reason about. Modules get a defined surface instead.

module -ls
module -show timer
module -show notes
module -close

The built-ins are ordinary on purpose

The current launcher includes modules for music, notifications, timer, calendar, reminder, notes, RSS, and weather. None of those ideas are exotic. Their value is that they can remain visible without making you leave the launcher for every small check or action.

music

See playback state and keep previous, play, next, info, and stop close to the prompt.

notifications

Move through notifications, open one, reply where Android allows it, and reach access or filter controls.

timer

Add time, start a 25-minute session, stop it, or check its state.

calendar / reminder

Keep upcoming events visible and run a native add, edit, or remove conversation for local reminders.

notes / rss / weather

Bring small local notes, feed updates, and weather state into the same surface.

When a module has actions, those actions get their own compact strip. The normal suggestion row still belongs to apps, aliases, shortcuts, guide steps, and commands. Opening a panel should not quietly break the rest of the launcher.

The dock is a choice, not a permanent fixture

A new install starts with music, notifications, timer, calendar, and reminder in the dock. Add notes, RSS, weather, or a custom module if you want them there. Remove everything and the dock stays empty; RETUI does not "helpfully" restore the defaults behind your back.

module -dock add notes weather
module -dock remove music
module -dock -toggle

Hiding a built-in does not delete it. A hidden or undocked module remains available through `module -show`. You can also disable the row from Behaviour settings or with `config -set show_module_dock false`.

Lua is for the launcher-native path

Sometimes a panel needs state, buttons, suggestion chips, a small form, or a reactive layout. Lua modules provide that inside RETUI without asking someone to manage a Termux project first.

module -new lua counter
module -edit counter
module -check counter
module -show counter

The script lives in local RETUI storage and travels with personal backup and restore. It can keep module-local preferences and files, render native text and controls, and respond to actions. The older `widget` command remains as a compatibility alias, but these scripts share the same module dock as everything else.

Capability is not automatic. A script that wants network, clipboard, vibration, local files, active ticks, notifications, apps, intents, or shortcuts has to declare that need. `module -approve <id>` records consent for that script and permission set. Change the script or add a capability, and approval is required again.

Termux is for work that belongs to a shell

RETUI can ask a Termux script to run, read its output, and place the result in a module panel. Termux still owns the shell, its packages, the script file, and network execution. RETUI owns the panel.

module -add server termux:/data/data/com.termux/files/home/retui/server-health.sh
module -refresh server
module -show server

Plain stdout becomes the body. When alignment matters, a script can mark a block with `::pre`, `::ascii`, or `::code`, then close it with `::end`. Structured lines can set a title, add body text, or provide command suggestions.

::title Server
::body prod-api ONLINE
::pre CPU  [####....] 50%
::suggest refresh | command | module -refresh server

Removing the module only removes RETUI's registry entry. It does not delete the Termux script. That boundary should stay boring and predictable.

Some tools need more room

A module is glanceable. It is not the right surface for Midnight Commander, htop, SSH, a REPL, or a long-running terminal program. Those belong in the optional tmux workspace, where Termux owns a persistent session and RETUI provides the phone-friendly frame around it.

Likewise, a Lua script that needs a larger focused surface can be a Lua app instead of a dock module. The point is not to force every idea into the same rectangle. The point is to choose the smallest RETUI surface that can hold the job honestly.

The short command map

You do not need the entire scripting API to use modules. These commands cover the normal lifecycle.

module -ls

List built-in, registered script, and local Lua modules, plus the current dock.

module -show <name>

Open a module without requiring it to live in the dock.

module -refresh <name>

Explicitly rerun or rerender a module. Tapping an active module title also forces a refresh.

module -hide <name>

Remove a built-in from the dock without pretending it has been deleted.

module -rm <name>

Remove a registered custom module. Built-ins cannot be removed.

module -prompt reminder add

Start the reminder module's native guided input session.

Run `help module` on the installed build when you need the complete current syntax.

I like modules because they make RETUI more capable without pretending the launcher should own everything. Small tools stay close. Bigger tools keep the environment they deserve.