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:
- Follow the standard procedure to install a fresh Budgie-based Solus installation.
- Reboot and enter the terminal, adding the Theca repository as suggested above.
- Update repositories indexes:
eopkg ur
- Install the desired DE (e.g., Pantheon Desktop):
eopkg it -y -c desktop.pantheon
- Purge the systems from Budgie related packages:
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
- Reboot and log-on choosing Pantheon Desktop from the DE menu.
- Enter the terminal and only then remove final Budgie leftovers:
eopkg rm -y budgie-desktop
Infrastructure
Source code
The source code repository is including two kind of entities:
- packages templates: these ones represent the instructions needed to the
eopkg
build tool to generate the corresponding installable package; - 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
Name | Version |
---|---|
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 |