* Render blog headers using a patched `ratatui-image` to export internal
`Picker` fields which we use to construct our own picker based on
guesses for what capabilities a terminal might have based on
`$TERM_PROGRAM` values
* Move truncate implementation into `content` module and have other
modules import it
* Add `terminal` module under `tui` for classifying different terminals
and storing information regarding them
* Update trait `Component::init` to supply a `TerminalInfo`, to help
components adapt themselves to terminal emulator capabilities
* Move rust toolchain back to stable, now version 1.87
* Increase rustfmt max width and chain width to 95
Includes a blog system which fetches whitewind blog posts stored on an
ATProto PDS:
* Optional feature to enable the blog system
* Updated build script to generate client from lexicons
* Fetching system along with in-memory caching and data validation
Finally implemented the actual portfolio design! This includes a tab
mechanism for various aspects of the portfolio and the complete content
for the about tab.
Also fixes the TUI not being correctly scaled due to crossterm using the
dimensions of the server console tty instead of the client pty by
defining a custom `Backend` for ratatui.
It is now possible to specify the host and port the SSH server listens
to using CLI arguments. Also improved host key naming and some inline
strings within the CLI version menu.
* Made constructed `App` instances use CLI args for `frame_rate` and
`tick_rate`
* Moved lazy constants from `LazyLock` to `lazy_static!`
* Slightly restructure SSH config initialization
* Also apply rustfmt formatting to some files
Makes controls usable by taking SSH keystroke data (encoded in the xterm
format) and converting them to crossterm `KeyCode`s / `KeyEvent`s and
sending them to the `Tui`.
Also adds support for suspension of the `Tui` over the SSH connection.
Some minor refactoring was also done.