A personal APT repository for Debian and Ubuntu (amd64) that tracks a curated
set of applications and packages the latest upstream releases — either native .deb
release assets or AppImages repackaged as .deb. The repository is regenerated,
signed and published hourly by GitHub Actions, and served via GitHub Pages.
Add the repository and its signing key:
sudo curl -SsL -o /etc/apt/sources.list.d/tmiland.list https://deb.tmiland.com/debian/tmiland.list
curl -SsL https://deb.tmiland.com/debian/KEY.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/tmiland-archive-keyring.gpg >/dev/null
sudo apt update
Install any package from the list below, e.g.:
sudo apt install screencloud
Updates arrive through the normal apt upgrade; remove a package with
sudo apt remove <package-name>.
The software below can be installed, updated and removed using this repository:
| Source | Package Name | Description |
|---|---|---|
AppFlowy |
An Open Source Alternative to Notion | |
balena-etcher |
Flash OS images to SD cards and USB drives, safely and easily. | |
bat |
cat(1) clone with wings. | |
bitwarden |
A secure and free password manager for all of your devices. | |
bruno |
Opensource API Client for Exploring and Testing APIs | |
discord |
Chat for Communities and Friends | |
dpkg |
Debian package management system | |
dpkg-repack |
Debian package archiving tool | |
draw.io |
draw.io desktop | |
duf |
Disk Usage/Free Utility | |
fzf |
Command-line fuzzy finder | |
github-desktop |
GitHub Desktop fork with advanced functionality and improvements. | |
goose |
Goose App | |
hugo |
A fast and flexible Static Site Generator written in Go. | |
hyper |
A terminal built on web technologies | |
ImHex |
ImHex Hex Editor | |
joplin |
Joplin for Desktop | |
libterm-spinner-color-perl |
A terminal spinner/progress bar with Unicode, color, and no non-core dependencies. | |
logitune |
Logitech device configurator for Linux | |
marktext |
A simple and elegant open-source markdown editor that focused on speed and usability. | |
nextcloud-desktop |
Nextcloud desktop synchronization client (repackaged from upstream nextcloud/desktop AppImage) | |
opencode |
The open source coding agent. | |
pandoc |
general markup converter | |
protonmail-bridge |
Proton Mail Bridge is a desktop application that runs in the background, encrypting and decrypting messages as they enter and leave your computer. | |
rustdesk |
A remote control software. | |
screencloud |
Easy to use screenshot sharing tool (repackaged from upstream olav-st/screencloud AppImage) | |
shield-optimizer |
Debloat and tune Android TV devices via ADB. | |
siyuan |
From thought to insight, with agents | |
snapweb |
Web client for Snapcast | |
spotube |
Open source extensible music streaming platform and app, based on BYOMM (Bring your own music metadata) concept | |
sshpilot |
modern, lightweight SSH connection manager | |
stirling-pdf |
Stirling-PDF Desktop Application | |
tabby-terminal |
A terminal for a modern age | |
teamspeak3-client |
VoIP chat for online gaming |
Legend
Packages whose payload exceeds 25 MB are published as small install-stubs:
apt installfetches a tiny control-only package whosepostinstdownloads and installs the real.debfrom the release at install time. This keeps the Git repository within GitHub Pages size limits.
Each tracked package is a declarative config in packages/<name>.pkg (a TOML subset):
repo = 'owner/name' # GitHub repo that publishes releases
asset = 'pkg_.*_all\.deb' # regex matching the .deb release asset
name = 'apt-name' # optional: apt package name (defaults to the file name)
package = 'apt-name' # optional: override apt package name (stub repacks)
keep_versions = 2 # optional: keep only the newest N debs
summary = '...' # optional: description injected into stubs with an empty upstream control
hide = 'app.desktop' # optional: desktop file(s) to hide after install (keep a single launcher)
source = 'url' # optional: track a direct-download URL instead of GitHub releases
To add an app: drop a new .pkg in packages/ and commit — the
update workflow picks it up on the next run
(hourly, or manually via Actions → Update apt repo → Run workflow).
The workflow checks every package, downloads new versions, regenerates and signs the
repo metadata, smoke-tests it with apt, and pushes to master (served via GitHub
Pages). Use --force <name> or --force all to rebuild a package (or every package)
even when it is already up to date, e.g. after a change to the stub postinst.
One package is special:
icecat — currently unavailable: the package was an installer-stub that
downloads binaries from icecatbrowser.org at install time, and that site is down
(and GNU’s own releases stopped in 2019). The icecat debs are therefore removed
from the repo until a working upstream source exists. update-icecat.sh remains
in place to re-publish it when that happens.
As a free, actively maintained alternative in the same spirit (libre, privacy- hardened, no telemetry), use LibreWolf’s official signed apt repository instead:
sudo apt update && sudo apt install extrepo -y
sudo extrepo enable librewolf
sudo apt update && sudo apt install librewolf -y
Full write-up on the blog: https://tmiland.com/deb-tmiland-com/