State of the Art
Agama, the future (open)SUSE installer, can be controlled with two user interfaces:
- A CLI (command-line interface) written in Rust.
- A web interface offering a more graphical and user-friendly way of doing things.
Of course, to connect to the latter a browser is needed. That's actually a pretty good solution for controlling the installation from a remote machine (even a mobile phone).
But for pure-local installation, that implies we need a graphical environment (Xorg or Wayland) and a browser running in the machine being installed. Currently Agama-Live (the demo image for Agama) uses a full-screen Firefox as main UI. We are not sure if that will be the solution in the definitive installation-media for future (open)SUSE distributions, but it obviously has its drawbacks:
The CLI can also be used for local installation, but it's not exactly a newbie-friendly UI... it's a CLI after all.
Project description
I would like the explore the possibility of creating a TUI that offers a more user-friendly experience than the current CLI, without the need of a graphical environment. Something similar (but MUCH, MUCH simpler) to the ncurses interface of YaST.
Since the CLI is written in Rust and it already contains all the infrastructure to interact with Agama, it makes sense to take it as starting point. There are plenty of TUI libraries for Rust.
Unfortunately, I have zero experience with Rust... but I have to start sooner or later.
Goal for this Hackweek
The real goal is to learn enough Rust to compile the current Agama pieces and do some changes.
Going beyond the learning itself, a possible objective would be to create a simple application that offers some kind of text-based interactive user interface to configure the storage settings of Agama. It should:
- Display the disk in which the system is going to be installed with some nice widget to change that
- Allow to enable or disable encryption
- List the file systems ("volumes" in Agama jargon) to be created
- List the resulting actions
Of course, changes in the configuration (disk or encryption) should result in the immediate update of the whole interface.
Resources
Some TUI libraries that look promising:
- https://github.com/veeso/tui-realm
- https://github.com/ratatui-org/ratatui
- https://github.com/gyscos/Cursive
- https://github.com/ivanceras/titik
- https://github.com/jeaye/ncurses-rs
There are many more listed at awesome Rust and other online directories. Many more (check awesome Rust)
Looking for hackers with the skills:
Nothing? Add some keywords!
This project is part of:
Hack Week 23
Activity
Comments
-
about 1 year ago by jreidinger | Reply
One important aspect regarding TUI and its libraries is support for "strange" consoles like ones on ppc or on s390. As it can have different capabilities and it cause some troubles in past.
-
about 1 year ago by ancorgs | Reply
Some (pretty unimpressive) results. https://github.com/ancorgs/agama/pull/1
I wanted the UI to be much better connected to Agama (reacting to changes in the D-Bus interface and so on), but I spent too much time finding my way through Rust and tui-realm.
I guess I fulfilled the main goal of getting familiar with Rust in the process... to some extent (I'm still far from being able to develop something meaningful).
-
about 1 year ago by lmanfredi | Reply
These are the results of my 1 week of Rust learning path: https://github.com/manfredi/agama-terminal-ui/
I started from a template adding/modify some widget and logic.
This has helped me to understand better how a real Rust app is built. The main goal was to get familiar with Rust... as well for me!
Similar Projects
This project is one of its kind!