Userland is an integrated dataflow environment for end-users. It allows users to interact with modules that implement functionality for different domains from a single user interface and combine these modules in creative ways.
The UI works as a series of cells. Each cell can be set to a different mode, and each mode implemented as a separate module. There are currently three different modules:
- spreadsheet - basic spreadsheet-like behavior, activated by typing formulas
starting with an equals sign (e.g.
=1+1
,=A1 * (3/2)
) - shell - Unix shell mode, where each cell represents one command and its output,
activated by typing
shell
. As the cell switches to shell-mode, it displays its current directory and allows commands to be entered. - synth - synthesizer mode, activated by typing commands starting with a
tilde (e.g
~triangle 220
). Pressing Enter when a synth cell is focused will start/stop the audio wave.
Pressing Ctrl-Backspace clears the cell mode back to ?
.
This video demonstrates the integration of "spreadsheet" and "shell" modules inside Userland.
At LIVE 2019 I also gave a live demo combining the "shell", "spreadsheet" and "synth" modules.
The project is in its early days, so be aware there are lots of rough edges! The current implementation can be considered a prototype/proof-of-concept/MVP which I'm using to do rapid experimentation and evolve and stabilize the fundamentals of the concept -- though I do want to get this implementation to a point where it can be usable as my primary shell for daily use! (At that point I'll be able to call the concept proven!)
First, make sure you have the following installed:
You can install Rust support in LuaRocks with:
$ luarocks install luarocks-build-rust
Install the Lua dependencies for Userland:
$ luarocks --lua-version 5.1 --local make
Finally, run userland
:
$ ./userland
Have a look at the driver, if your system needs something different from xf86_video_intel you may need to edit the Dockerfile.
$ docker build -t userland .
You may need to change the user id from 1000 to the one which has access to X11.
$ docker run \
-u 1000 \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /dev:/dev \
userland