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
eopkgbuild 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
eopkgrepository.
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 |
|---|---|
bccTools for BPF-based Linux IO analysis, networking, monitoring, and more | 0.19.0 |
blackboxAn X11 Window manager | 0.70.1 |
cerbereA simple service to ensure uptime of essential processes | 2.5.1 |
conky-manager2Conky Manager 2 - a newer conky config manager | 2.72 |
contractorA desktop-wide extension service | 0.3.4 |
cronieCronie cron daemon project | 1.5.7 |
discindoShare all-sizes files using reconstructable manifests | 4 |
dwmdwm is a dynamic window manager for X | 6.2 |
figletFIGlet - display large characters made up of ordinary screen characters | 2.2.5 |
fondoWallpaper app for Gnome | 1.5.2 |
font-open-sans-ttfGoogle's sans-serif family Open Sans font | 20200720 |
font-roboto-mono-ttfGoogle's signature family of fonts | 20200720 |
gsaslGNU SASL command line utility | 1.8.0 |
gsignondSignOn Daemon (GLib) | 1.2.0 |
hardinfoSystem profiler and benchmark tool for Linux systems | 0.6 |
hydraA very fast network logon cracker which support many different services | 9.2 |
komorebiA beautiful and customizable wallpapers manager for Linux | 2.2.1 |
libgsignon-glibgSSO client library | 2.4.1 |
libhandyA library full of GTK+ widgets for mobile phones | 1.0.3 |
libsignon-glibGLib library to interface with the Signon Daemon | 2.1 |
light-lockerA simple session-locker for LightDM | 1.8.0 |
lua-lgiDynamic Lua binding to GObject libraries using GObject-Introspection | 0.9.2 |
megacmdCommand-line interactive and scriptable application to access MEGA | 1.4.0 |
melodyA music player for listening to local music files, online radios and audio CDs | 2.2.1 |
minifyGo minifiers for web formats | 2.9.16 |
numlockxTurns on the numlock key in X11 | 1.2 |
nuntiusIMAP email checker and GTK notifier | 7 |
pantheon-agent-geoclue2Pantheon Location Services Agent | 1.0.4 |
pantheon-agent-polkitPantheon Polkit Agent | 1.0.3 |
pantheon-calculatorPantheon calculator app | 1.6.0 |
pantheon-calendarPantheon calendar app | 5.1.1 |
pantheon-capnet-assistPantheon Captive Portal Assistant | 2.2.5 |
pantheon-codePantheon code editor app | 3.4.1 |
pantheon-dockPantheon dock | 0.0.1 |
pantheon-default-settingsPantheon default settings | 5.1.2 |
pantheon-dpms-helperDPMS settings found in org.pantheon.dpms | 1.0 |
pantheon-fmThe simple, powerful, and sexy file manager from elementary | 4.5.0 |
pantheon-iconsNamed, vector icons for elementary OS | 5.3.1 |
pantheon-musicPantheon music app | 5.0.5 |
pantheon-onboardingPantheon onboarding app | 1.2.1 |
pantheon-photosPantheon photos app | 2.7.0 |
pantheon-printContractor Print support plug | 0.1.3 |
pantheon-screenshotPantheon screenshot tool | 1.7.1 |
pantheon-session-settingsPantheon session settings | 5.0.3 |
pantheon-shortcut-overlayA native and OS-wide shortcut overlay | 1.1.2 |
pantheon-sound-themeA bespoke sound for Pantheon theme | 1.0 |
pantheon-stylesheetThe Gtk+ Stylesheet for elementary OS | 5.4.2 |
pantheon-termA super lightweight, beautiful, and simple terminal | 5.5.2 |
pantheon-videosPantheon video player app | 2.7.2 |
pantheon-wallpapersPantheon wallpapers | 5.5.0 |
pocillo-gtk-themeMaterial Design GTK Theme | 0.7 |
procsA modern replacement for ps written in Rust | 0.11.4 |
pytest-isortpy.test plugin to check import ordering using isort | 1.3.0 |
python-pamPython PAM module | 1.8.4 |
python-svgwritePython Package to write SVG files | 1.4.1 |
python-tinycssCSS parser for Python | 0.4 |
python2-twodictSimple two way ordered dictionary for Python | 1.2 |
sleuthkitThe 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 |
spotitubeSynchronize your Spotify collections downloading from external providers | 31 |
stemmerSnowball stemming algorithms, development kit | 2.1.0 |
subnetcalcIP address calculator | 2.4.18 |
switchboardPantheon extensible System Settings app designed | 2.4.0 |
timeshiftSystem restore tool for Linux. | 20.11.1 |
trahoAutomatic eopkg package files updating system | 9 |
uget-integratorIntegrate uGet Download Manager with web browsers | 1.0.0 |
variety-slideshowA pan-and-zoom image slideshow in Python, using Clutter | 0.1.1 |
vscodiumVisual Studio Code without MS branding, telemetry and licensing | 1.55.2 |
wmctrlwmctrl is a UNIX/Linux command line tool to interact with an EWMH/NetWM compatible X Window Manager | 1.07 |
appstreamInfrastructure for distro-agnostic software-centers and universal software component metadata | 0.14.3 |
awesomewmAwesome window manager | 4.3 |
binwalkFirmware Analysis Tool | 2.3.1 |
galaPantheon window and compositing manager | 3.3.2 |
gsignond-plugin-lastfmLastFM plugin for gSSO | 0.2.0 |
gsignond-plugin-oauthOAuth plugin for gSSO | 1 |
gsignond-plugin-saslSASL plugin for gSSO | 1 |
pantheon-cameraPantheon camera app | 1.0.6 |
pantheon-tweaksPantheon customization tool | 0.0.1 |
python-cairocffiCFFI-based cairo bindings for Python | 1.2.0 |
python-tinycss2Low-level CSS parser for Python | 1.1.0 |
youtube-dlgyoutube-dlg (or youtube-dl-gui), is a GUI of the popular youtube-dl. | 0.4 |
python-cssselect2CSS selectors for Python ElementTree | 0.4.1 |
switchboard-plug-a11ySwitchboard Universal Access plug | 2.2.0 |
switchboard-plug-aboutSwitchboard about plug | 2.6.3 |
switchboard-plug-applicationsSwitchboard applications plug | 2.1.7 |
switchboard-plug-bluetoothSwitchboard bluetooth plug | 2.3.5 |
switchboard-plug-datetimeSwitchboard date and time plug | 2.1.9 |
switchboard-plug-displaySwitchboard display plug | 2.2.2 |
switchboard-plug-keyboardSwitchboard keyboard plug | 2.4.1 |
switchboard-plug-localeSwitchboard locale plug | 2.5.3 |
switchboard-plug-mouse-touchpadSwitchboard mouse and touchpad plug | 2.4.2 |
switchboard-plug-networkSwitchboard network plug | 2.3.3 |
switchboard-plug-notificationsSwitchboard notifications plug | 2.1.7 |
switchboard-plug-onlineaccountsSwitchboard online accounts plug | 2.0.1 |
switchboard-plug-pantheon-shellSwitchboard desktop plug | 2.8.4 |
switchboard-plug-parental-controlsSwitchboard parental controls plug | 3.0.1 |
switchboard-plug-powerSwitchboard power plug | 2.4.2 |
switchboard-plug-printersSwitchboard printers plug | 2.1.9 |
switchboard-plug-security-privacySwitchboard security and privacy plug | 2.2.4 |
switchboard-plug-sharingSwitchboard sharing plug | 2.1.4 |
switchboard-plug-soundSwitchboard sound plug | 2.2.6 |
switchboard-plug-useraccountsSwitchboard user accounts plug | 2.3.2 |
ubuntu-budgie-extrasShared component of budgie-extras applets | 1.2.0 |
wingpanelStylish top panel that holds indicators and spawns the application launcher | 2.3.2 |
pantheon-applications-menuPantheon applications menu | 2.7.1 |
pantheon-greeterLightDM Greeter for Pantheon | 5.0.4 |
python-cairosvgCairoSVG is a SVG converter based on Cairo | 2.5.2 |
wingpanel-indicator-a11yWingpanel universal access indicator | 1 |
wingpanel-indicator-bluetoothWingpanel bluetooth indicator | 2.1.6 |
wingpanel-indicator-datetimeWingpanel date and time indicator | 2.2.5 |
wingpanel-indicator-keyboardWingpanel keyboard indicator | 2.3.0 |
wingpanel-indicator-networkWingpanel network indicator | 2.2.4 |
wingpanel-indicator-nightlightWingpanel nightlight indicator | 2.0.4 |
wingpanel-indicator-notificationsWingpanel notifications indicator | 2.1.4 |
wingpanel-indicator-powerWingpanel power indicator | 2.2.0 |
wingpanel-indicator-sessionWingpanel session indicator | 2.2.8 |
wingpanel-indicator-soundWingpanel sound indicator | 2.1.8 |
