com.harryaskham.nodterm · Kotlin · Java · C

NOD Term

A terminal for the Nix-on-Droid shell on an Android phone. It connects to nod-exec, a small command server inside Nix-on-Droid, rather than running its own shell, and shows terminals docked in the app, in floating windows over other apps, or as live output in a home-screen widget.

Connections

How NOD Term reaches a shell NOD Term's connections. Inside Nix-on-Droid, nod-exec serves two local ports. Interactive terminals, docked in the app or floating over other apps, open a pseudo-terminal on port 18358. The home-screen widget runs a one-shot command on port 18357 and draws its output as an image. Share to Shell turns something shared from another app into a shell command that you review before it runs. The Wear OS companion is separate: it connects with SSH through Wear Tailnet's tunnel and does not need the phone. terminalsdocked · floating home-screen widgetoutput as an image Share to Shellreviewed command :18358pseudo-terminal :18357one-shot pipe nod-execinside Nix-on-Droidyour shell, tmux … Wear OS companionSSH via Wear Tailnet an SSH host ON THE PHONE, LOCAL PORTS

The terminal itself is the terminal-emulator and terminal-view libraries, which started from Termux's and add the kitty graphics protocol and stylus input. Colours default to Nord and can be read from Nix-on-Droid's ~/.termux/colors.properties; the font is Fira Code with Nerd Font symbols.

Other apps and automation tools open terminals through two links: nodterm://run?cmd=… for a docked tab and nodterm://float?cmd=… for a floating one, which also work as pinned shortcuts. A tmux session is just a command, for example tmux new-session -A -s work.

Share to Shell

NOD Term appears in Android's Share menu. Shared text, a link, or one document up to 96 KiB becomes a named recipe with the exact shell command shown, single-quoted, and nothing runs until you tap Run in terminal or Run in floating terminal. Text can go to your pager or ~/shared-inbox, and links can be downloaded with curl.

Floating terminals

Floating terminals use the suite's floating-overlay windows: dragged by the title bar, resized from a corner, minimised to a pill, with configurable corners, borders, opacity and blur. They can be managed by Flotilla or Sandbox's Overlay WM, or by NOD Term alone.

With the Omni floating keyboard, a terminal can attach to the keyboard in one of five slots. The attachment is only about placement: typing still goes through Android's normal input connection, and no terminal text passes between the two apps. Each slot can also start a terminal with its own command whenever the keyboard appears.

Five places a terminal can sit on the keyboard Keyboard attachment. The Omni keyboard floats in the middle; a terminal can be attached above it, below it, to its left or right, or centred over it, one terminal per slot. Attachment only decides where the terminal is placed: typing still goes through Android's normal input connection, the keyboard is never moved, and each slot can start its own terminal with a configured command when the keyboard appears. Top the default Bottom Left Right Center: terminal behind, keyboard on top Omni keyboard (never moved)
A test terminal with the 'Attach to keyboard' dialog open: Top is selected, and Bottom, Left, Right and Center are marked as in use.
Choosing a slot.
Five terminal floats attached around a small floating keyboard: above, below, left, right and centred.
All five slots in use.
NOD Term's Floats settings: window manager choice, shared floating-window host, corner rounding, border width, padding, keyboard mount gap and alignment, and the five keyboard startup terminals, all off.
Float settings.

On the watch

The same Play listing includes a Wear OS app: a standalone SSH terminal for the watch. It reaches hosts through Wear Tailnet's tunnel, without a VPN of its own, and keeps the session in a foreground service so the screen can come and go. The phone app designs its layouts (a terminal area plus strips of buttons such as Up, Down, Enter and push-to-talk, 75 % and 25 % by default) and its SSH presets, then syncs them to the watch when you ask. A paired Bluetooth keyboard types straight into it.

Limits