og:image

Source code Theca

Private package repository
This project is no more under active development.
This may affect its usage in unpredictable and unguaranteed ways.
#

About

Theca is a custom eopkg repository. eopkg is the packaging format conceived and adopted by Solus Project, a Linux desktop distribution built from scratch.

This private repository was born by the need of having a place where to put custom packages which were not included by default on official repository (such as the Pantheon Desktop stack, left out from Solus-Project repository due to legitimate reasons).

Installation

The enablement is done using the eopkg toolset:

eopkg add-repo Theca https://solus.davidepucci.it/eopkg-index.xml.xz

Use unstable version

eopkg add-repo Unstable https://unstable.solus.davidepucci.it/eopkg-index.xml.xz

Install Desktops components

As switching between different Desktop Environments very easily leads to lot of log-on and graphical issues, often permanent, here is a quick instructions set to have a functional clean Solus installation along with a custom DE:

eopkg ur
eopkg it -y -c desktop.pantheon
eopkg rm -y baobab budgie-desktop-branding eog \
    gnome-calculator gnome-calendar gnome-disk-utility \
    gnome-doc-utils gnome-mpv gnome-photos gnome-screenshot \
    gnome-system-monitor gnome-terminal gnome-themes-extra \
    gnome-user-docs nautilus nautilus-extension \
    nautilus-python rhythmbox rhythmbox-alternative-toolbar
eopkg rm -y budgie-desktop

Infrastructure

Source code

The source code repository is including two kind of entities:

  1. packages templates: these ones represent the instructions needed to the eopkg build tool to generate the corresponding installable package;
  2. build automation scripts: these are basically a collection of Bash/Python based snippets used to do concurrent and incremental build of packages as well to wrap them up to make them fit into a legal eopkg repository.

On the other hand, what is being generated by the combination of the ones above, the effective eopkg files are released relying on GitHub Releases functionality, in a perfectly eopkg compliant structure.

Building

The repository offers a Makefile configuration, used to batch do things, such as running a common repository full build or a check for packages pending updates.

The build order is dictated by the src/series file: this is needed as several packages have build dependencies inside the repository itself. Hence, the series file splits all the packages in several subsequent iteration groups, which assure that a specific package-x gets built and indexed on the local (in-build) repository before the depending package-y package.

Also, in order to make the whole process work, solbuild (the tool used to build the package starting from a package.yml template) needs to be configured to treat the local build directory as a local repository. This can be done by creating the /etc/solbuild/theca-x86_64.profile settings and adding the following lines:

image = "main-x86_64"

add_repos = ["Theca-Local", "Theca-Upstream", "Solus"]

[repo.Theca-Local]
uri = "/path/to/theca/build"
local = true
autoindex = true

[repo.Theca-Upstream]
uri = "https://unstable.solus.davidepucci.it/eopkg-index.xml.xz"

[repo.Solus]
uri = "https://mirrors.rit.edu/solus/packages/shannon/eopkg-index.xml.xz"

Hosting

The whole repository is hosted on GitHub: the packages templates and build instructions in the Git repository itself, while the built eopkg files and the indexes are kept in dedicated repository releases.

Furtermore, iin order to deal with the growth of the packages supported by the repository and be able to test them in a simpler and more flawless way, an unstable variant of the repository has been introduced.

From the hosting point of view, nothing really changes: instead of a single release, the projects relies on two different ones, each for a different variant of the repository.

To proxy requests from davidepucci.it subdomain to the corresponding GitHub release, the following PHP engine is used:

<?php

if (strlen($_SERVER['REQUEST_URI']) == 0
        || strcmp($_SERVER['REQUEST_URI'], '/') == 0) {
    header("location: https://davidepucci.it/doc/theca");
} elseif (substr($_SERVER['SERVER_NAME'], 0, 8) === "unstable") {
    header("location: https://github.com/streambinder/theca/releases/download/unstable".$_SERVER['REQUEST_URI']);
} else {
    header("location: https://github.com/streambinder/theca/releases/download/stable".$_SERVER['REQUEST_URI']);
}

This way, the solus.davidepucci.it host behaves as a poor and rough proxy, redirecting dynamically the requests without taking charge of the traffic generated by repository indexes and packages downloads.

Also, this .htaccess is used to forward all the files GET requests to the PHP snippet above:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]

Traho

Traho (originally Solbump) is a tool to automatically upgrade eopkg YAML-formatted source files to latest releases.

Based on the amount of defined (and pluggable) providers, it tries to recognize the format of the tarballs or archives defined as source files from the YAML file and find a matching provider. Then it's able to query for a more updated release and, if so, it fetches the asset, calculates the hashsum and update the original package.yml coherently.

Usage

Before starting using the tool, further actions need to be taken, in order to access all its capabilities. In fact, few providers could be in the need of API tokens or specific configurations. So create the configuration file at ~/.config/traho and, depending on your needs, fill it with data you own:

# To obtain the token, go to:
# https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line#creating-a-token
# Traho does not require any scope to be enabled.
github:
    api: habmfnlzrwmxuopmjganlqfpmccouxieijlouxcl

# To obtain the token, go to:
# https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html
# Traho requires only the API access scope enablement.
gitlab:
    api: hmlhnbzndrogcifs-akb
    domains:
        - name: gitlab.xfce.org
          api: zzDkdnNCq9JaX5UfZJZC

Using the tool is pretty straightforward:

traho package1.yml package2/package.yml

Installation

Package manager

Installation from repositories is only available for Solus Project users which have enabled Theca repository:

eopkg it -y traho

GO toolset

go get github.com/streambinder/traho

Index

NameVersion
bcc
Tools for BPF-based Linux IO analysis, networking, monitoring, and more
0.19.0
blackbox
An X11 Window manager
0.70.1
cerbere
A simple service to ensure uptime of essential processes
2.5.1
conky-manager2
Conky Manager 2 - a newer conky config manager
2.72
contractor
A desktop-wide extension service
0.3.4
cronie
Cronie cron daemon project
1.5.7
discindo
Share all-sizes files using reconstructable manifests
4
dwm
dwm is a dynamic window manager for X
6.2
figlet
FIGlet - display large characters made up of ordinary screen characters
2.2.5
fondo
Wallpaper app for Gnome
1.5.2
font-open-sans-ttf
Google's sans-serif family Open Sans font
20200720
font-roboto-mono-ttf
Google's signature family of fonts
20200720
gsasl
GNU SASL command line utility
1.8.0
gsignond
SignOn Daemon (GLib)
1.2.0
hardinfo
System profiler and benchmark tool for Linux systems
0.6
hydra
A very fast network logon cracker which support many different services
9.2
komorebi
A beautiful and customizable wallpapers manager for Linux
2.2.1
libgsignon-glib
gSSO client library
2.4.1
libhandy
A library full of GTK+ widgets for mobile phones
1.0.3
libsignon-glib
GLib library to interface with the Signon Daemon
2.1
light-locker
A simple session-locker for LightDM
1.8.0
lua-lgi
Dynamic Lua binding to GObject libraries using GObject-Introspection
0.9.2
megacmd
Command-line interactive and scriptable application to access MEGA
1.4.0
melody
A music player for listening to local music files, online radios and audio CDs
2.2.1
minify
Go minifiers for web formats
2.9.16
numlockx
Turns on the numlock key in X11
1.2
nuntius
IMAP email checker and GTK notifier
7
pantheon-agent-geoclue2
Pantheon Location Services Agent
1.0.4
pantheon-agent-polkit
Pantheon Polkit Agent
1.0.3
pantheon-calculator
Pantheon calculator app
1.6.0
pantheon-calendar
Pantheon calendar app
5.1.1
pantheon-capnet-assist
Pantheon Captive Portal Assistant
2.2.5
pantheon-code
Pantheon code editor app
3.4.1
pantheon-dock
Pantheon dock
0.0.1
pantheon-default-settings
Pantheon default settings
5.1.2
pantheon-dpms-helper
DPMS settings found in org.pantheon.dpms
1.0
pantheon-fm
The simple, powerful, and sexy file manager from elementary
4.5.0
pantheon-icons
Named, vector icons for elementary OS
5.3.1
pantheon-music
Pantheon music app
5.0.5
pantheon-onboarding
Pantheon onboarding app
1.2.1
pantheon-photos
Pantheon photos app
2.7.0
pantheon-print
Contractor Print support plug
0.1.3
pantheon-screenshot
Pantheon screenshot tool
1.7.1
pantheon-session-settings
Pantheon session settings
5.0.3
pantheon-shortcut-overlay
A native and OS-wide shortcut overlay
1.1.2
pantheon-sound-theme
A bespoke sound for Pantheon theme
1.0
pantheon-stylesheet
The Gtk+ Stylesheet for elementary OS
5.4.2
pantheon-term
A super lightweight, beautiful, and simple terminal
5.5.2
pantheon-videos
Pantheon video player app
2.7.2
pantheon-wallpapers
Pantheon wallpapers
5.5.0
pocillo-gtk-theme
Material Design GTK Theme
0.7
procs
A modern replacement for ps written in Rust
0.11.4
pytest-isort
py.test plugin to check import ordering using isort
1.3.0
python-pam
Python PAM module
1.8.4
python-svgwrite
Python Package to write SVG files
1.4.1
python-tinycss
CSS parser for Python
0.4
python2-twodict
Simple two way ordered dictionary for Python
1.2
sleuthkit
The Sleuth Kit (TSK) is a library and collection of command line digital forensics tools that allow you to investigate volume and file system data.
4.10.2
spotitube
Synchronize your Spotify collections downloading from external providers
31
stemmer
Snowball stemming algorithms, development kit
2.1.0
subnetcalc
IP address calculator
2.4.18
switchboard
Pantheon extensible System Settings app designed
2.4.0
timeshift
System restore tool for Linux.
20.11.1
traho
Automatic eopkg package files updating system
9
uget-integrator
Integrate uGet Download Manager with web browsers
1.0.0
variety-slideshow
A pan-and-zoom image slideshow in Python, using Clutter
0.1.1
vscodium
Visual Studio Code without MS branding, telemetry and licensing
1.55.2
wmctrl
wmctrl is a UNIX/Linux command line tool to interact with an EWMH/NetWM compatible X Window Manager
1.07
appstream
Infrastructure for distro-agnostic software-centers and universal software component metadata
0.14.3
awesomewm
Awesome window manager
4.3
binwalk
Firmware Analysis Tool
2.3.1
gala
Pantheon window and compositing manager
3.3.2
gsignond-plugin-lastfm
LastFM plugin for gSSO
0.2.0
gsignond-plugin-oauth
OAuth plugin for gSSO
1
gsignond-plugin-sasl
SASL plugin for gSSO
1
pantheon-camera
Pantheon camera app
1.0.6
pantheon-tweaks
Pantheon customization tool
0.0.1
python-cairocffi
CFFI-based cairo bindings for Python
1.2.0
python-tinycss2
Low-level CSS parser for Python
1.1.0
youtube-dlg
youtube-dlg (or youtube-dl-gui), is a GUI of the popular youtube-dl.
0.4
python-cssselect2
CSS selectors for Python ElementTree
0.4.1
switchboard-plug-a11y
Switchboard Universal Access plug
2.2.0
switchboard-plug-about
Switchboard about plug
2.6.3
switchboard-plug-applications
Switchboard applications plug
2.1.7
switchboard-plug-bluetooth
Switchboard bluetooth plug
2.3.5
switchboard-plug-datetime
Switchboard date and time plug
2.1.9
switchboard-plug-display
Switchboard display plug
2.2.2
switchboard-plug-keyboard
Switchboard keyboard plug
2.4.1
switchboard-plug-locale
Switchboard locale plug
2.5.3
switchboard-plug-mouse-touchpad
Switchboard mouse and touchpad plug
2.4.2
switchboard-plug-network
Switchboard network plug
2.3.3
switchboard-plug-notifications
Switchboard notifications plug
2.1.7
switchboard-plug-onlineaccounts
Switchboard online accounts plug
2.0.1
switchboard-plug-pantheon-shell
Switchboard desktop plug
2.8.4
switchboard-plug-parental-controls
Switchboard parental controls plug
3.0.1
switchboard-plug-power
Switchboard power plug
2.4.2
switchboard-plug-printers
Switchboard printers plug
2.1.9
switchboard-plug-security-privacy
Switchboard security and privacy plug
2.2.4
switchboard-plug-sharing
Switchboard sharing plug
2.1.4
switchboard-plug-sound
Switchboard sound plug
2.2.6
switchboard-plug-useraccounts
Switchboard user accounts plug
2.3.2
ubuntu-budgie-extras
Shared component of budgie-extras applets
1.2.0
wingpanel
Stylish top panel that holds indicators and spawns the application launcher
2.3.2
pantheon-applications-menu
Pantheon applications menu
2.7.1
pantheon-greeter
LightDM Greeter for Pantheon
5.0.4
python-cairosvg
CairoSVG is a SVG converter based on Cairo
2.5.2
wingpanel-indicator-a11y
Wingpanel universal access indicator
1
wingpanel-indicator-bluetooth
Wingpanel bluetooth indicator
2.1.6
wingpanel-indicator-datetime
Wingpanel date and time indicator
2.2.5
wingpanel-indicator-keyboard
Wingpanel keyboard indicator
2.3.0
wingpanel-indicator-network
Wingpanel network indicator
2.2.4
wingpanel-indicator-nightlight
Wingpanel nightlight indicator
2.0.4
wingpanel-indicator-notifications
Wingpanel notifications indicator
2.1.4
wingpanel-indicator-power
Wingpanel power indicator
2.2.0
wingpanel-indicator-session
Wingpanel session indicator
2.2.8
wingpanel-indicator-sound
Wingpanel sound indicator
2.1.8