XRSH Manual =========== . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ____ _____________ ________. ._. ._. . . . . . . . . . . _\ \/ /\______ \/ _____// | \. . . . . . . . . . _ \ / | _/\_____ \/ ~ \ . . . . . . . _ _ / \ | | \/ \ Y / _ _ _ _ _ _ _ . . /___/\ \ |____|_ /_______ /\___|_ /. . . . . . . . . . . . . .\_/. . . . \/ . . . .\/ . . _ \/ . . . . . . . . ▬▬▬▬ https://xrsh.isvery.ninja ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬ Open, local-first, polyglot, unix hackable & selfcontained XR apps. Using worlds first WebXR linux distro. credits: NLnet | @nlnet@nlnet.nl https://nlnet.nl/project all FOSS devs | copy.sh (v86) aframe.io (AFRAME) Leon van Kammen | @lvk@mastodon.online Fabien Benetou | @utopiah@mastodon.pirateparty.be # Getting started Please hook up your (bluetooth) keyboard to use xrsh. > tip use ctrl+a+0/1/2/3/.. to switch (GNU) screen terminals (and ctrl+a+c to create new ones) | usecase | command | |-----------------------|--------------------------------------------------------| | require | adds javascript or CSS url to DOM | | js run | js 'alert("hello")' | | js console.log: | console document.baseURI | | js inspect: | js "return document.baseURI" | # Polyglot environment Currently the following languages are supported: * shellscript (busybox sh) * awk (busybox awk v1.33.0) * python (micropython) * javascript (via your browser) * lua (5.3.6) > TIP: type `ls -la ~/hook.d/alert/*` for examples # Editors * vi (busybox vi) * nano (busybox nano) * mg (microemacs) # Boot sequence The following files are loaded during boot (via `/etc/profile`) | file | info | |-----------------------|---------------------------------------------------| | /etc/profile.xrsh | sets up xrsh environment | | /etc/profile.sh | global shellscript functions | | /etc/profile.js | global javascript functions | | /mnt/profile.browser | environment vars set by browser (`echo $HOSTNAME`)| | /root/.profile | user shellscript functions/settings | | /root/.profile.js | user javascript functions | | /root/.screenrc | GNU screen initialisations | | https://.../#ls | URI fragment is executed as command in own screen | > TIP: to keep things portable with future versions of XRSH: modify files in `/root/*` # Calling terminal from javascript ```javascript const term = document.querySelector('[isoterminal]').components.isoterminal.isoterminal term.exec("ls -la") ``` # Calling javascript from terminal Various options: 1. Just add the `#!/bin/js` shebang to the top of a javascript file (+ chmod +x) 2. Run `js "alert('hello')"` in the shell 3. Run `jsh alert hello` in the shell 4. Run `jsh` to start an interactive shell # Hybrid Terminal/Browser Events Events are automatically triggering scripts in `/root/hook.d/{eventname}/*` > They can be triggered by the following ways 1. from shellscript: `hook myevent` (will trigger **executable** files in /root/hook.d/myevent) 2. from javascript: `isoterminal.exec("hook myevent")` (idem) 3. via jsh: `jsh alert hello` (will trigger **executable** files in /root/hook.d/alert) These are various ways to enable hybrid eventing between browser and terminal (languages). # Multiple terminals [GNU screen] ## From the cmdline ``` xrsh # screen –DR # list of detached screen xrsh # screen –r PID # attach detached screen ses­sion xrsh # screen –dmS Myses # start a detached screen ses­sion xrsh # screen –r MySes #attach screen ses­sion with name MySession ``` ## Basics ``` ctrl a c -> create new window ctrl a A -> set win­dow name ctrl a w -> show all win­dow ctrl a 1|2|3|… -> switch to win­dow n ctrl a " -> choose win­dow ctrl a ctrl a -> switch between win­dow ctrl a d -> detach win­dow ctrl a ? -> help ctrl a [ -> start copy, move cur­sor to the copy loca­tion, press ENTER, select the chars, press ENTER to copy the selected char­ac­ters to the buffer ctrl a ] -> paste from buffer ``` ## Advanced ``` ctrl a S -> cre­ate split screen ctrl a TAB -> switch between split screens ctrl a Q -> Kill all regions but the cur­rent one. ctrl a X -> remove active win­dow from split screen ctrl a O -> logout active win­dow (dis­able out­put) ctrl a I -> login active win­dow (enable output) ```