💾 Archived View for scrollprotocol.us.to › software › profectus captured on 2024-08-31 at 11:30:31. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-05-26)

-=-=-=-=-=-=-

Publish Date: 2024-04-11T07:48:59Z

Modification Date: 2024-05-19T01:40:00Z

Profectus

Overview

Current Version: Beta 1.1

Copyright: 2024 Christian Lee Seibold

License: MIT

Repository

What is Profectus?

Profectus is a new GUI client for the scroll, gemini, nex, and spartan protocols that is intended to rival Lagrange in performance, visual design, features, and cross-platform compatibility. It is written in Golang using SDL and a custom GUI. Font rendering is currently done with SDL-TTF, but will be moved to Harfbuzz eventually.

Download the Linux and Windows precompiled zip files here:

Download precompiled binaries

Recent Updates

Installation

Linux

You will need to install the following dependencies:

For Debian-based distributions, you can run the following:

sudo apt install libsdl2 libsdl2-image libsdl2-gfx libsdl2-ttf libjxl

For Fedora-based distributions, run the following:

sudo dnf install SDL2 SDL2_image SDL2_gfx SDL2_ttf libjxl

Unzip the zip, and double click `profectus` to run the program. It runs in portable mode for now.

Windows

You should not need to download any dependencies, unless you want to be able to pipe streaming videos into a video player (mpv, vlc, or ffplay); you can download mpv, vlc, or ffmpeg through winget, choco, or some other method. Make sure they are added to your PATH.

Unzip the zip, and double click `profectus.exe` to run the program. It runs in portable mode for now.

macOS

There is now an experimental precompiled binary for macOS on the Precompiled Binaries page:

Precompiled Binaries

Profectus has not been tested with macOS, but you can try to manually build it for macOS by visiting the repository. You will need the development packages for SDL2, SDL2-image, SDL2-ttf, SDL2-gfx, jpeg-xl, and libavif installed.

Profectus Repository

Getting Updates

You can get updates on the Scroll Protocol's software downloads page:

Scroll Protocol

Upcoming Features

About the Name "Profectus"

Profectus in Latin means progress, or advancement. It is an intentional contrast to lack of change, or staying put, but it is not a dichotomy; progress requires both stability and change.

Staying the same, at the same points, in the same ranges, using the same tools, embracing the same limits, and keeping to the same sources of knowledge, means we do not learn from failures, we do not branch out, we do not explore and discover. Staying in constant motion, always advancing, chasing the next achievement, the next shiny object, the next best tech, means we do not have the chance to reflect on our choices and our past.

Scroll finds a balance between reflecting on the successes and failures of Gemini and Gopher, and advancing the idea of a reader-focused protocol. It offers stability and change. The stability is largely in the protocol that can be more widely utilized toward the specific goal of reading and media, and the change is in both the extended markup and the potential for media and other document formats. This change reflects on real-world usage of documents that are meant to be read. This advancement through stability and reflection perfectly encapsulates literature and media in general.

UI Navigation

Mouse Shortcuts

Keyboard Shortcuts

Theming Documentation

You can toggle themes with `Alt+T` and `Alt+Shift+T`. Profectus will toggle through the files in the themes folder. You can create your own themes and place them in the themes folder, and Profectus will be able to toggle through them as well.

Intro

Theme Files are organized into Sections and Elements. Sections refer to which part of the UI one is customizing: the Topbar, the Tabbar, the Sidebar, or the Page. The Topbar and Tabbar are distinct panes that usually sit next to each other. The Topbar contains the address and navigation buttons, whereas the Tabbar contains the tabs. Elements refer to UI elements that can appear inside of each of those sections, and includes buttons, textboxes, and list items.

Every Section also has a panel element which controls the characteristics of the section's panel. For example, the sidebar's panel element controls the sidebar's background, border, etc. rather than the elements inside of it.

Special Section Properties

The Tabbar, Sidebar, and Page sections have their own properties unique to themselves.

The Tabbar has a position property that controls whether it will be displayed "above" or "below" the topbar. The Firefox and Kristall themes place the tabbar above, whereas the Lagrange, Castor, and Default Dark themes place it below.

The Tabbar also has an add_button_position property to control the position of the add tab button. The value may be one of the following:

The Sidebar has max_width and min_width that controls the sizing of the sidebar. The sidebar also contains a "dock" value which may be one of the following:

Note that these are properties inside the section object, not any element.

Page has max_width, max_image_width, center, and nex_char_width properties that control the width and positioning of the page. These properties are inside the section object and not inside any element.

The Page section also contains Elements for each Document Linetype in the "document" object. Each element is labelled based on the linetype: heading1, heading2, heading3, heading4, body, blockquote, preformat, link, link_nex, and list_item. These control how a document is colored and spaced.

Element Properties

Lastly, Elements consist of padding, spacing, radius, and indent_size, as well as a list of backgrounds, borders, and text colors based on a selector. The selector is much like a CSS selector. It can be "default", "hover", "active", "focused", "placeholder" (for textbox placeholders), or "disabled" (for disabled buttons/elements). Note that not all elements utilize all selectors. Use the bundled themes as a guide.

Colors (backgrounds and text colors) are hexadecimal strings prefixed with "#". Three and six characters are interpreted as rgb, whereas four and eight are interpreted as rgba.

Borders include a uint16 thickness and a color. Note that a thickness of greater than 1 isn't supported yet. Also note that a thickness of 0 will remove the border.

Padding is an object of point size values for left, right, top, and bottom.

Spacing is an array of two float32 values, X and Y respectively, that controls the spacing between elements within a section.

Radius is an int32 that controls the radius of the rounded corners. A radius of <= 1 means the element will not be rounded. Currently, tabbar buttons will not be rounded unless they are in a detached state, meaning there is bottom padding on the tabbar itself. See the Firefox themes for an example of this.

Indent_size controls indenting for blockquotes and the outline list element within the sidebar.

Special Elements

Button is a special element in that it has a unique property, called outset. When outset is set to true, a button will have a highlight on the top and left, and a shadow on the bottom and right, like a bevelled button. You cannot currently use outset with a radius.

Points vs. Pixels

All border thicknesses are in pixels. The page section's nex_char_width is in characters. All other size values, including radius, are in float32 points which are then scaled by the user's UI Scale (and/or DPI) automatically to convert into pixels.

Defaults

When an entire section is omitted, Profectus will use the default section's properties for that section. If the default section is omitted, then it will use the Default Dark theme's default section.

If a document element is omitted, then Profectus will use the default document theming from the Default Dark theme. This is useful if you want to change the UI but not the document styling, or if you only want to change some linetype stylings but not all of them.

A page max_width (or max_image_width) of 0 will result in a page that goes to the edge of the window. A nex_char_width of 0 will result in a width of 80 characters for nex documents.

When an entire element is omitted, the corresponding element from the default section is used.

If a selector within an element's background, border, or textcolor arrays is omitted, it will default to the default selector. If the default selector is also omitted, then it will default to the default selector of the corresponding element in the default section.

If an element's padding or spacing values are omitted, then it will default to the padding and spacing of the corresponding element in the default section.

If an element's indentSize is omitted, the default is 0 (no indent).

Special Theme-Level Properties

There are two more properties that are special and they are in the upmost level, within the theme object:

When omitted, both will default to their zero values.

Note that themes are likely to have some changes in the future. I plan on adding text sizes and a few more positionings. Since this is alpha, the structure of theme files is likely to change. However, each new version will always make sure the bundled themes are updated for any changes.