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

  • about 1 year ago: jzerebecki liked this project.
  • about 1 year ago: digitaltomm liked this project.
  • about 1 year ago: lmanfredi joined this project.
  • about 1 year ago: mbrugger liked this project.
  • about 1 year ago: ancorgs joined this project.
  • about 1 year ago: teclator joined this project.
  • about 1 year ago: IGonzalezSosa started this project.
  • about 1 year ago: IGonzalezSosa liked this project.
  • about 1 year ago: ancorgs liked this project.
  • about 1 year ago: ancorgs originated this project.

  • Comments

    • jreidinger
      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.

    • ancorgs
      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).

    • lmanfredi
      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!

    • teclator
      about 1 year ago by teclator | Reply

      I was interested on @ancorgs idea about providing a TUI for interacting with Agama and as I was working on bonding support I just decided to work on some TUI for it.

      My results can be checked at: https://github.com/teclator/agama/pull/1

    Similar Projects

    This project is one of its kind!