Source code Theca

Private package repository
#

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

If getting a specific repository release is desired instead:

tag="https://github.com/streambinder/theca/releases/download/v1"
eopkg add-repo Theca "${tag}/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 it -y -c desktop.pantheon
eopkg rm -y baobab budgie-desktop-branding eog gedit \
    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 zeus 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]

Solbump

Solbump is a tool to automatically upgrade eopkg YAML-formatted source files to latest releases. Hence, the naming similarity with solbuild, the tool made from Solus Project core team to build eopkg packages.

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/solbump 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
# Solbump 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
# Solbump requires only the API access scope enablement.
gitlab:
    api: hmlhnbzndrogcifs-akb

Using the tool is pretty straightforward:

solbump 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 solbump

GO toolset

go get github.com/streambinder/solbump

Index

NameVersion
at-libxfce4util
Xfce4 utility library
4.14.0
bcc
Tools for BPF-based Linux IO analysis, networking, monitoring, and more
0.15.0
blackbox
An X11 Window manager
0.70.1
cerbere
A simple service to ensure uptime of essential processes
2.5.1
cinnamon-applet-qredshift
Redshift applet for Linux Cinnamon
20190829
cinnamon-applet-redshift
Redshift applet for Linux Cinnamon
20200404
cinnamon-desktop
The cinnamon-desktop library and common settings schemas for the cinnamon desktop
4.6.0
cinnamon-menus
The cinnamon-menu library
4.6.0
cinnamon-translations
Cinnamon Translations
4.6.0
conky-manager2
Conky Manager 2 - a newer conky config manager
2.7
contractor
A desktop-wide extension service
0.3.4
cronie
Cronie cron daemon project
1.5.5
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.3.9
font-open-sans-ttf
Google's sans-serif family Open Sans font
20200115
font-roboto-mono-ttf
Google's signature family of fonts
20200115
gsasl
GNU SASL command line utility
1.8.0
gsignond
SignOn Daemon (GLib)
1.2.0
hydra
A very fast network logon cracker which support many different services
9.0
iceauth
ICE authority file utility
1.0.8
libfm-extra
A glib/gio-based lib used to develop file managers
1.3.1
libgsignon-glib
gSSO client library
2.4.1
libhandy
A library full of GTK+ widgets for mobile phones
0.0.13
libsignon-glib
GLib library to interface with the Signon Daemon
2.1
libstatgrab
A cross platform library for accessing system statistics
0.92
light-locker
A simple session-locker for LightDM
1.8.0
lightrss
A simple qt based rss feed reader.
0.4
lua-lgi
Dynamic Lua binding to GObject libraries using GObject-Introspection
0.9.2
lxqt-build-tools
Various packaging tools and scripts for LXQt applications
0.7.0
megacmd
Command-line interactive and scriptable application to access MEGA
1.1.0
melody
A music player for listening to local music files, online radios and audio CDs
2.2.1
midori
Midori Web Browser - a lightweight, fast and free web browser using WebKit and GTK+
9.0
minify
Go minifiers for web formats
2.7.6
mozjs52
JS is Mozilla's JavaScript engine written in C/C++
52.9.0
nload
Monitors network traffic and bandwidth usage.
0.7.4
notejot
Notesjot Sticky Notes
1.6.3
numlockx
Turns on the numlock key in X11
1.2
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.5.5
pantheon-calendar
Pantheon calendar app
5.0.6
pantheon-camera
Pantheon camera app
1.0.6
pantheon-capnet-assist
Pantheon Captive Portal Assistant
2.2.5
pantheon-code
Pantheon code editor app
3.4.1
pantheon-default-settings
Pantheon default settings
5.1.2
pantheon-dpms-helper
DPMS settings found in org.pantheon.dpms
1.0
pantheon-files
The simple, powerful, and sexy file manager from elementary
4.4.4
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-terminal
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
paperboy
IMAP email checker and GTK notifier
4
pocillo-gtk-theme
Material Design GTK Theme
0.6
pytest-isort
py.test plugin to check import ordering using isort
1.0.0
python-pam
Python PAM module
1.8.4
python-svgwrite
Python Package to write SVG files
1.4
python-tinycss
CSS parser for Python
0.4
qview
qView Image Viewer
3.0
sideload
Sideload - Flatpak Installer
1.1.1
skippy-xd
Skippy-XD
1
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.9.0
solbump
Automatic eopkg package files updating system
3
spotitube
Shell application to incrementally download from Spotify into local folder
27
stemmer
Snowball stemming algorithms, development kit
2.0.0
subnetcalc
IP address calculator
2.4.16
switchboard
Pantheon extensible System Settings app designed
2.4.0
timeshift
System restore tool for Linux.
20.03
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.46.1
webpin
A simple app to pin websites on the desktop
1.0.4
wmctrl
wmctrl is a UNIX/Linux command line tool to interact with an EWMH/NetWM compatible X Window Manager
1.07
xapps
Cross-desktop libraries and common resources
1.8.2
xfce4-dev-tools
Xfce Developer Tools
4.14.0
youtube-dlg
youtube-dlg (or youtube-dl-gui), is a GUI of the popular youtube-dl.
0.4
appstream
Infrastructure for distro-agnostic software-centers and universal software component metadata
0.12.11
awesomewm
Awesome window manager
4.3
binwalk
Firmware Analysis Tool
2.2.0
cinnamon-screensaver
Cinnamon screensaver
4.6.0
cinnamon-session
Cinnamon session
4.6.0
cinnamon-settings-daemon
The settings daemon for the Cinnamon desktop
4.6.0
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
libqtxdg
Qt implementation of freedesktop.org xdg specs
3.5.0
lxqt-themes
Themes, graphics and icons for LXQt
0.15.0
menu-cache
Library used to read freedesktop.org menus
1.1.0
muffin
Cinnamon window manager based on Mutter
4.6.0
nemo
File browser for Cinnamon
4.6.0
pantheon-tweaks
Pantheon customization tool
0.0.1
python-cairocffi
CFFI-based cairo bindings for Python
1.1.0
python-tinycss2
Low-level CSS parser for Python
1.0.2
qtermwidget
The terminal widget for QTerminal
0.15.0
xfconf
Xfce configuration storage system
4.14.3
cinnamon-control-center
A collection of configuration plugins used in cinnamon-settings
4.6.0
cjs
The Cinnamon Javascript interpreter
4.6.0
libfm-qt
Core library of PCManFM-Qt (Qt binding for libfm)
0.15.1
liblxqt
Core utility library for all LXQt components
0.15.0
libxfce4ui
Widgets library for the Xfce desktop environment
4.14.1
lxqt-qtplugin
LXQt Qt platform integration plugin
0.15.0
python-cssselect2
CSS selectors for Python ElementTree
0.3.0
qterminal
A lightweight Qt-based terminal emulator
0.15.0
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.2
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.3.6
switchboard-plug-locale
Switchboard locale plug
2.5.2
switchboard-plug-mouse-touchpad
Switchboard mouse and touchpad plug
2.4.2
switchboard-plug-network
Switchboard network plug
2.3.1
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.4
switchboard-plug-useraccounts
Switchboard user accounts plug
2.3.1
ubuntu-budgie-extras
Shared component of budgie-extras applets
1.0.2
wingpanel
Stylish top panel that holds indicators and spawns the application launcher
2.3.2
cinnamon
A Linux desktop featuring a traditional layout, built from modern technology and introducing brand new innovative features
4.6.0
exo
Application library for the Xfce desktop environment
0.12.11
garcon
Xfce freedesktop.org compliant menu library
0.7.0
libsysstat
Library used to query system info and statistics
0.4.3
lxqt-about
Dialogue window providing information about LXQt and the system it's running on
0.15.0
lxqt-admin
LXQt system administration tool
0.15.0
lxqt-config
Tools to configure LXQt and the underlying operating system
0.15.0
lxqt-globalkeys
Daemon used to register global keyboard shortcuts
0.15.0
lxqt-notificationd
The LXQt notification daemon
0.15.0
lxqt-policykit
The LXQt PolicyKit agent
0.15.0
lxqt-powermanagement
Power management module for LXQt
0.15.0
lxqt-session
The LXQt session manager
0.15.0
pantheon-applications-menu
Pantheon applications menu
2.7.1
pantheon-greeter
LightDM Greeter for Pantheon
5.0.4
pcmanfm-qt
File manager and desktop icon manager (Qt port of PCManFM and libfm)
0.15.1
python-cairosvg
CairoSVG is a SVG converter based on Cairo
2.4.2
thunar
Thunar File Manager
1.8.15
wingpanel-indicator-a11y
Wingpanel universal access indicator
1
wingpanel-indicator-bluetooth
Wingpanel bluetooth indicator
2.1.5
wingpanel-indicator-datetime
Wingpanel date and time indicator
2.2.5
wingpanel-indicator-keyboard
Wingpanel keyboard indicator
2.2.1
wingpanel-indicator-network
Wingpanel network indicator
2.2.4
wingpanel-indicator-nightlight
Wingpanel nightlight indicator
2.0.3
wingpanel-indicator-notifications
Wingpanel notifications indicator
2.1.4
wingpanel-indicator-power
Wingpanel power indicator
2.1.5
wingpanel-indicator-privacy
Wingpanel privacy indicator
1
wingpanel-indicator-session
Wingpanel session indicator
2.2.8
wingpanel-indicator-sound
Wingpanel sound indicator
2.1.5
xfce4-power-manager
Xfce Power Manager
1.6.6
xfce4-session
Xfce Session Manager
4.14.2
xfce4-terminal
Xfce4 Terminal
0.8.9.2
xfwm4
Xfce's window manager
4.14.2
lxqt-panel
LXQt Panel
0.15.0
lxqt-runner
Tool used to launch programs quickly by typing their names
0.15.0
xfce4-appfinder
Xfce aplication launcher and finder
4.14.0
xfce4-panel
Xfce's panel
4.14.4
xfce4-settings
Xfce Settings
4.14.3
xfdesktop
Xfce's desktop manager
4.14.2
xfce4-whiskermenu-plugin
Alternate Xfce menu
2.4.4
xfce-default-settings
XFCE Default Settings
1
xfce4-notifyd
XFCE4 Notification Daemon
0.6.1
xfce4-pulseaudio-plugin
XFCE Pulseaudio Plugin
0.4.3
arc-theme
Arc GTK Theme
20200513
compton-conf
Compton Configuration GUI
0.15.0
featherpad
FeatherPad is a lightweight Qt5 plain-text editor.
0.14.2
screengrab
Crossplatform tool for fast making screenshots.
2.0.1