diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml new file mode 100644 index 000000000..416a983ad --- /dev/null +++ b/.github/workflows/static.yml @@ -0,0 +1,59 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build-and-deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Build App Files + run: | + [ ! -x ./simple2json ] && chmod a+x ./simple2json + ./simple2json 2>&1 | tee build-log.txt + + echo "json conversion done" | tee -a build-log.txt + + [ ! -x ./am2pla-site ] && chmod a+x ./am2pla-site + ./am2pla-site 2>&1 | tee -a build-log.txt + + - name: Upload Build Log + uses: actions/upload-artifact@v6 + with: + name: build-log + path: build-log.txt + + - name: Setup Pages + uses: actions/configure-pages@v6 + - name: Upload artifact + uses: actions/upload-pages-artifact@v5 + with: + # Upload entire repository + path: '.' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v5 diff --git a/.github/workflows/sync-with-AM.yml b/.github/workflows/sync-with-AM.yml index 81eb92f9c..957367490 100644 --- a/.github/workflows/sync-with-AM.yml +++ b/.github/workflows/sync-with-AM.yml @@ -21,35 +21,19 @@ jobs: - name: "Checkout source repository" uses: actions/checkout@v7 - - name: "Update lists" - run: | - AM2PLA_SCRIPT=$(curl -Ls https://raw.githubusercontent.com/ivan-hc/AM/main/tools/am2pla-site) - [ -n "$AM2PLA_SCRIPT" ] && echo "$AM2PLA_SCRIPT" | grep -q "^AMREPO=" && echo "◆ Update am2pla-site script..." && echo "$AM2PLA_SCRIPT" > ./am2pla-site - sed -i 's/^cd "$(xdg-user-dir DESKTOP)"/#cd "$(xdg-user-dir DESKTOP)"/g' ./am2pla-site - [ ! -x ./am2pla-site ] && chmod a+x ./am2pla-site - ./am2pla-site - - name: "Remove unneeded pages/icons" run: | AMD64_LIST=$(curl -Ls https://raw.githubusercontent.com/ivan-hc/AM/main/programs/x86_64-apps) if [ -n "$AMD64_LIST" ] && echo "$AMD64_LIST" 2>/dev/null | grep -q "^◆ "; then - - MDS=$(ls apps/* | sed 's:.*/::; s/.md$//g') - for m in $MDS; do - if ! echo "$AMD64_LIST" 2>/dev/null | grep -q "◆ $m :"; then - rm -f "apps/$m.md" - echo "Removed apps/$m.md" + rm -f apps/*.json apps/*.md + for f in apps/*; do + name=$(echo "$f" | sed 's:.*/::; s/\.\(md\|json\)$//') + if ! echo "$AMD64_LIST" 2>/dev/null | grep -q "◆ $name :"; then + rm -f "apps/$name" + echo "Removed apps/$name" fi done - #PNGS=$(ls icons/* | sed 's:.*/::; s/.png$//g') - #for p in $PNGS; do - # if ! echo "$AMD64_LIST" 2>/dev/null | grep -q "◆ $p :"; then - # rm -f "icons/$p.png" - # echo "Removed icons/$p.png" - # fi - #done - fi - name: "Create dumb pages/icons if missing" @@ -59,10 +43,9 @@ jobs: APPS=$(echo "$AMD64_LIST" 2>/dev/null | awk '{print $2}' | xargs) for a in $APPS; do - if ! test -f apps/"$a".md; then + if ! test -f apps/"$a"; then INSTALLATION_SCRIPT=$(curl -Ls https://raw.githubusercontent.com/ivan-hc/AM/main/programs/x86_64/"$a") if [ -n "$INSTALLATION_SCRIPT" ] && echo "$INSTALLATION_SCRIPT" 2>/dev/null | grep -q "^APP=$a"; then - APP=$(echo "$a" | tr '[:lower:]' '[:upper:]') DESCRIPTION=$(echo "$AMD64_LIST" 2>/dev/null | grep "^◆ $a :" | sed "s/^◆ $a ://g") if echo "$INSTALLATION_SCRIPT" 2>/dev/null | grep -q "^SITE="; then @@ -83,36 +66,26 @@ jobs: else SITE="https://$(echo "$INSTALLATION_SCRIPT" 2>/dev/null | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | head -1 | awk -F[/:] '{print $4}')" fi - - printf "# $APP\n\n" > apps/"$a".md - echo "$DESCRIPTION" >> apps/"$a".md - printf "\n SITE: $SITE\n\n" >> apps/"$a".md - printf " | [Applications](https://portable-linux-apps.github.io/apps.html) | [Home](https://portable-linux-apps.github.io)\n | --- | --- |" >> apps/"$a".md - echo "Adding apps/$a.md" + ESC_DESC=$(echo "$DESCRIPTION" | sed 's/"/\\"/g') + printf '# %s\n%s\n# SCREENSHOTS: %s\n# SITES: %s\n' \ + "$a" "$ESC_DESC" "/contribute_ss.png /contribute_ss.png" "$SITE" > apps/"$a" + + echo "Adding apps/$a" fi fi done - MDS=$(ls apps/* | sed 's:.*/::; s/.md$//g') - for m in $MDS; do - if ! test -f icons/"$m".png; then - cp -r no-icon.png "icons/$m.png" - echo "Adding icons/$m.png" - fi - done - rm -f icons/*.md - fi - name: "Push to Source" run: | git config --global user.name "Portable-Linux-Apps" git config --global user.email "noreply@github.com" - git add *.md *.json am2pla-site apps icons - if git diff-index --quiet HEAD; then - echo "No changes to commit." >> $GITHUB_STEP_SUMMARY - else + git add 'apps/' 'icons/*.png' + if ! git diff-index --cached --quiet HEAD; then git commit -m "Sync files from source repository" - git push && echo "Sync to Source succeeded" >> $GITHUB_STEP_SUMMARY + git push origin + else + echo "No changes to commit." fi diff --git a/.gitignore b/.gitignore index e1c1b28a2..c9148f53c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,11 @@ -# Jekyll -_site/ -.jekyll-cache/ -.jekyll-metadata/ -.sass-cache/ - -# Gemfile dependencies -Gemfile.lock - -# Bundler files -.bundle/ - # System files .DS_Store # macOS Thumbs.db # Windows + +# Python cache +__pycache__ + +# Kate backup +*~ + +test diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2edc3a4ac..ba481f1d7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,13 +7,13 @@ This catalog is updated every half hour and is based entirely on this list: http If an app is added to this list, it means that an installation script has also been added here: https://github.com/ivan-hc/AM/tree/main/programs/x86_64 ## If an app is **added** to AM - - All lists will be automatically updated via https://github.com/ivan-hc/AM/blob/main/tools/am2pla-site - - A new .md page will be created. It will use the description in that list and the URL specified in the installation script ("SITE" variable). + - All lists will be automatically updated via https://github.com/Portable-Linux-Apps/Portable-Linux-Apps.github.io/blob/main/tools/am2pla-site + - A new .json file will be created. It will use the description in that list and the URL specified in the installation script ("SITE" variable). - A new generic icon will be created using https://github.com/Portable-Linux-Apps/Portable-Linux-Apps.github.io/blob/main/no-icon.png ## If an app is **removed** from AM - All references to it in the lists will be removed - - The .md page will be removed + - The .json file will be removed - The icon will be retained in case the application is added again in the future ## This project is powered by github actions, so... @@ -32,9 +32,7 @@ This catalog is for everyone, so anyone can make a [pull request](https://github - Icons must be 128x128 or smaller ## Update app's pages - - Write whatever you want, but leave the header (first line, the one starting with #) as is. - - You can add buttons to the ones at the bottom, including a donation link. - - You can add screenshots or GIFs. +See FAQ #5 on the website ------------------------------------ diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 22bf31a13..000000000 --- a/Gemfile +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -source "https://rubygems.org" - -# gem "rails" -gem "github-pages", group: :jekyll_plugins - -# Needed for `jekyll serve` on Ruby 3.0+ (webrick was removed from the stdlib). -# GitHub Pages production doesn't use this. -gem "webrick", "~> 1.8", group: :development diff --git a/PortableLinuxApps.html b/PortableLinuxApps.html deleted file mode 100644 index c619c2ffe..000000000 --- a/PortableLinuxApps.html +++ /dev/null @@ -1,12102 +0,0 @@ - - - - - -
- - - - - - - - - - - - - - -
](https://github.com/ivan-hc/AM) |
-
-### Testing
-
-Most pages on this site are auto-generated by `tools/am2pla-site` in
-the [`ivan-hc/AM`](https://github.com/ivan-hc/AM) repository — a
-GitHub Actions workflow runs that script every 30 minutes and pushes
-the output back to `main`. Hand-edits to generated files (`index.md`,
-`apps.md`, `appimages.md`, the 24 category pages, `apps.json`, the
-`am2pla-site` copy in this repo) are overwritten on the next sync.
-Durable changes live in `_layouts/`, `assets/css/`, `assets/js/`,
-`_config.yml`, `Gemfile`, this README, and `.github/workflows/`.
-
-To test changes to the website before pushing or while working on a
-pull request, pick one of the three options below. Docker is
-recommended because the container matches the GitHub Pages build
-environment and works on any host Ruby version.
-
-
](https://github.com/ivan-hc/AM) |
-
-
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) |
-| - | - | - |
-| *sandbox AppImages* | *list available apps* | *info about the apps* |
-| [
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) |
-| *install applications* | *query lists using keywords* | *show the installed apps* |
-| [
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) |
-| *create and restore snapshots* | *update everything* | *get rid of libfuse2* |
-
-
|
-| - |
-
-*Type "1" to install "AM", "2" to install "[AppMan](#what-is-appman)". Any other key will abort the installation.*
-
-**Installation is complete!**
-
-*Run `am -h` or jump to "**[Usage](#usage)**" to see all the available options.*
-
-------------------------------------------------------------------------
-
-### What is AppMan?
-
-*AppMan is a portable version of "AM", limited to installing and managing apps only locally and without root privileges.*
-
-*The command name changes, from `am` to `appman`, but the script is the same.*
-
-*"AM" on the contrary, provides a "fixed" installation, but can install and manage apps both locally and at the system level.*
-
-*I recommend "AM" to privileged users who want to install and manage apps at multiple levels, and "AppMan" to non-privileged users who do not have large needs.*
-
-------------------------------------------------------------------------
-
-### AM installation structure
-
-*The classic "AM" installation has the following structure:*
-```
-/opt/am/APP-MANAGER ==> /usr/local/bin/am
-/opt/am/modules
-/opt/am/remove
-```
-*Where the command `/usr/local/bin/am` is just a symbolic link to `/opt/am/APP-MANAGER`. The directory `/opt/am/modules` contains the modules "not vital" for "AM" but necessary for managing the apps. The script `/opt/am/remove` is instead necessary for removing "AM".*
-
-------------------------------------------------------------------------
-
-### How are apps installed
-
-*The system-wide AppImage integration has the following structure:*
-```
-/opt/$PROGRAM/
-/opt/$PROGRAM/$PROGRAM
-/opt/$PROGRAM/AM-updater
-/opt/$PROGRAM/remove
-/opt/$PROGRAM/icons/$ICON-NAME
-/usr/local/bin/$PROGRAM
-/usr/local/share/applications/$PROGRAM-AM.desktop
-```
-*Locally installed apps can have a directory of your choice, depending on what you decided when you first started `am -i --user {PROGRAM}` or when you started `appman` (if you chose [AppMan](#what-is-appman)) or by using the `am --user` command.*
-
-*In fact, the `--user` command can be used as a "flag" for application installation options, allowing you to integrate them locally and without root permissions, as AppMan does.*
-
-*For example, let's say you want to create and use the `/home/USER/Applications` directory, here is the structure of a locally embedded AppImage:*
-```
-~/Applicazioni/$PROGRAM/
-~/Applicazioni/$PROGRAM/$PROGRAM
-~/Applicazioni/$PROGRAM/AM-updater
-~/Applicazioni/$PROGRAM/remove
-~/Applicazioni/$PROGRAM/icons/$ICON-NAME
-~/.local/bin/$PROGRAM
-~/.local/share/applications/$PROGRAM-AM.desktop
-```
-
-------------------------------------------------------------------------
-
-| [Install "AM"/"AppMan"](#installation) | [Back to "Main Index"](#main-index) |
-| - | - |
-
-------------------------------------------------------------------------
-
-# What programs can be installed
-
-*"AM" installs, removes, updates and manages only standalone programs, ie those programs that can be run from a single directory in which they are contained.*
-
-*1. **PORTABLE PROGRAMS** from official sources (see NodeJS, Platform Tools...), extracted from official .deb/tar/zip packages.*
-
-*2. **APPIMAGES**, from both official and unofficial sources (I also create unofficial AppImages), or compiled on-the-fly with [pkg2appimage](https://github.com/AppImage/pkg2appimage) and [appimagetool](https://github.com/AppImage/AppImageKit), like an AUR helper, from official archives.*
-
-*3. **THIRD-PARTY LIBRARIES** if they are missing in your repositories.*
-
-*The database aims to be a reference point where you can download all the AppImage packages scattered around the web, otherwise unobtainable, as you would expect from any package manager, through specific installation scripts for each application, as happens with the AUR PKGBUILDs, on Arch Linux. You can see all of them [here](https://github.com/ivan-hc/AM/tree/main/programs), divided by architecture.*
-
-*You can view basic information, site links and sources using the related command `am -a {PROGRAM}`, or visit [**portable-linux-apps.github.io/apps**](https://portable-linux-apps.github.io/apps).*
-
-------------------------------------------------------------------------
-
-| [Back to "Main Index"](#main-index) |
-| - |
-
-------------------------------------------------------------------------
-
-# How to update all programs, for real
-
-*Most of the apps managed by "AM" have a script called `AM-updater`. It tells how updates are checked when running the `am -u` command.*
-
-*In most cases, the "version comparison" is used between the installed one (file `version`) and an online source (official or not, depending on how hard or easy it is to find a download URL or just a number, using the terminal). In other cases, AppImages can rely on "`appimageupdatetool`" if they support "delta updates" (install it with the command `am -i appimageupdatetool`). However, there are some programs that update themselves (and among these the most famous is certainly Firefox, all official development builds).*
-
-### How to update all installed apps
-
-*Option `-u` or `update` updates all the installed apps and keeps "AM"/"AppMan" in sync with the latest version and all latest bug fixes.*
-
-*1. To update only the programs, use `am -u --apps` / `appman -u --apps`*
-
-*2. To update just one program, use `am -u $PROGRAM` / `appman -u $PROGRAM`*
-
-*3. To update all the programs and "AM"/"AppMan" itself, just run the command`am -u` / `appman -u`*
-
-*4. To update only "AM"/"AppMan" and the modules use the option `-s` instead, `am -s` / `appman -s`*
-
-### How to update everything using Topgrade
-
-*Keeping your system up to date usually involves invoking multiple package managers. This results in big, non-portable shell one-liners saved in your shell. To remedy this, Topgrade detects which tools you use and runs the appropriate commands to update them.*
-
-*Install the "`topgrade`" package using the command*
-```
-am -i topgrade
-```
-*or*
-```
-am -i --user topgrade
-```
-*Visit [github.com/topgrade-rs/topgrade](https://github.com/topgrade-rs/topgrade) to learn more.*
-
-------------------------------------------------------------------------
-
-| [Back to "Main Index"](#main-index) |
-| - |
-
-------------------------------------------------------------------------
-### External links index
-------------------------------------------------------------------------
-*All the guides listed here are available at [***github.com/ivan-hc/AM***](https://github.com/ivan-hc/AM)*
-
-- [Install applications](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/install.md)
-- [Install only AppImages](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/install-appimage.md)
- - [Install and sandbox AppImages in one go](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/install-appimage.md#install-and-sandbox-appimages-in-one-go)
-- [Install AppImages not listed in this database but available in other github repos](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/extra.md)
-- [List the installed applications](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/files.md)
-- [List and query all the applications available on the database](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/list-and-query.md)
-- [Update all](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/update.md)
-- [Backup and restore installed apps using snapshots](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/backup-and-overwrite.md)
-- [Remove one or more applications](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/remove.md)
-- [Clone a set of programs installed from other AM and AppMan configurations](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/clone.md)
-- [Change the destination path of installed programs](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/relocate.md)
-- [Convert Type2 AppImages requiring libfuse2 to New Generation AppImages](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/nolibfuse.md)
-- [Integrate local AppImages into the menu by dragging and dropping them](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/launcher.md)
- - [How to create a launcher for a local AppImage](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/launcher.md#how-to-create-a-launcher-for-a-local-appimage)
- - [How to remove the orphan launchers](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/launcher.md#how-to-remove-the-orphan-launchers)
- - [AppImages from external media](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/launcher.md#appimages-from-external-media)
- - [Update scattered AppImages](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/launcher.md#update-scattered-appimages)
-- [Sandbox an AppImage](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/sandbox.md)
- - [How to enable a sandbox](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/sandbox.md#how-to-enable-a-sandbox)
- - [How to disable a sandbox](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/sandbox.md#how-to-disable-a-sandbox)
- - [Sandboxing example](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/sandbox.md#sandboxing-example)
- - [About Aisap sandboxing](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/sandbox.md#about-aisap-sandboxing)
-- [How to update or remove apps manually](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/remove.md#how-to-update-or-remove-apps-manually)
-- [Downgrade an installed app to a previous version](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/downgrade.md)
-- [How to use multiple versions of the same application](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/backup-and-overwrite.md#how-to-use-multiple-versions-of-the-same-application)
-- [Create and test your own installation script](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md)
- - [Option Zero: "AppImages"](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#option-zero-appimages)
- - [Option One: "build AppImages on-the-fly"](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#option-one-build-appimages-on-the-fly)
- - [Option Two: "Archives and other programs"](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#option-two-archives-and-other-programs)
- - [How an installation script works](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#how-an-installation-script-works)
- - [How to test an installation script](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#how-to-test-an-installation-script)
- - [How to submit a Pull Request](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#how-to-submit-a-pull-request)
-- [Third-party databases for applications (NeoDB)](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/newrepo.md)
-- [BSD, freeBSD and derivative systems: configuration and troubleshooting](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/bsd.md)
-
-[Instructions for Linux Distro Maintainers](https://github.com/ivan-hc/AM#instructions-for-linux-distro-maintainers)
-
-[Troubleshooting](https://github.com/ivan-hc/AM#troubleshooting)
-- [An application does not work, is old and unsupported](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#an-application-does-not-work-is-old-and-unsupported)
-- [Cannot download or update an application](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#cannot-download-or-update-an-application)
-- [Cannot mount and run AppImages](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#cannot-mount-and-run-appimages)
-- [Checksum does not match or missing verified status](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#checksum-does-not-match-or-missing-verified-status)
-- [Failed to open squashfs image](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#failed-to-open-squashfs-image)
-- [Spyware, malware and dangerous software](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#spyware-malware-and-dangerous-software)
-- [Stop AppImage prompt to create its own launcher, desktop integration and doubled launchers](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#stop-appimage-prompt-to-create-its-own-launcher-desktop-integration-and-doubled-launchers)
-- [The script points to "releases" instead of downloading the latest stable](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#the-script-points-to-releases-instead-of-downloading-the-latest-stable)
-- [Ubuntu mess](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#ubuntu-mess)
-- [Wrong download link](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#wrong-download-link)
-
-------------------------------------------------------------------------
-
-| [Back to "Main Index"](#main-index) |
-| - |
-
-------------------------------------------------------------------------
-# Related projects
-#### Side Projects
-- *[amcheck](https://github.com/ivan-hc/amcheck), checks the validity of scripts in this database and monitors the availability of AppImages*
-- *[am-extras](https://github.com/ivan-hc/am-extras), lists applications from third-party databases*
-- *[am-gui](https://github.com/Shikakiben/AM-GUI), a graphical Front for AM, by @Shikakiben*
-- *[vappman](https://github.com/joedefen/vappman), a visual (curses) TUI interface to AppMan, by @joedefen*
-
-#### My other projects
-- *[AppImaGen](https://github.com/ivan-hc/AppImaGen), easily create AppImages from Ubuntu PPAs or Debian using pkg2appimage and appimagetool*
-- *[ArchImage](https://github.com/ivan-hc/ArchImage), create AppImages for all distributions using Arch Linux packages. Powered by JuNest*
-- *[Firefox for Linux scripts](https://github.com/ivan-hc/Firefox-for-Linux-scripts), easily install the official releases of Firefox for Linux*
-- *[My AppImage packages](https://github.com/ivan-hc#my-appimage-packages) the complete list of packages managed by me and available in this database*
-- *[portable2appimage](https://github.com/ivan-hc/portable2appimage), convert standalone, self-contained portable apps into AppImage packages*
-- *[Snap2AppImage](https://github.com/ivan-hc/Snap2AppImage), try to convert Snap packages to AppImages*
-
-------------------------------------------------------------------------
-
-###### *You can support me and my work on [**ko-fi.com**](https://ko-fi.com/IvanAlexHC) and [**PayPal.me**](https://paypal.me/IvanAlexHC). Thank you!*
-
---------
-
-*© 2020-present Ivan Alessandro Sala aka 'Ivan-HC'* - I'm here just for fun!
-
-------------------------------------------------------------------------
-
-| [**ko-fi.com**](https://ko-fi.com/IvanAlexHC) | [**PayPal.me**](https://paypal.me/IvanAlexHC) | [Install "AM"/"AppMan"](#installation) | ["Main Index"](#main-index) |
-| - | - | - | - |
-
-------------------------------------------------------------------------
-
-
-EOF
-}
-
-ST_APPS_NUMBER=$((APPS_NUMBER_ORIGIN - APPIMAGES_NUMBER))
-rm -f ./index.md
-INDEX_HEAD
-echo "#### *This site lists **$APPS_NUMBER_ORIGIN** unique apps (**$APPIMAGES_NUMBER** Appimage packages and **$ST_APPS_NUMBER** standalone/portable programs), plus **$ITEMS_NUMBER_ORIGIN** items.*" >> ./index.md
-INDEX_HEAD_TWO
-category_page=""
-_categories_buttons >> ./index.md
-INDEX_BODY_FULL
-
-rm ./"$arch"-apps ./stats-appimages ./stats-portable ./body.txt*
-rm -f ./aarch64-apps ./i686-apps
+def match_by_pattern(cat, pat, exclude):
+ matched = []
+ for name, desc in apps_info.items():
+ line = f"◆ {name} : {desc}"
+ if pat.search(line):
+ if exclude and exclude.search(line):
+ continue
+ matched.append({"name": name, "description": desc})
+ matched.sort(key=lambda x: x["name"].lower())
+ return matched
+
+def write_json(cat, matched):
+ with open(f"categories/{cat}.json", "w") as f:
+ f.write("[\n")
+ for i, app in enumerate(matched):
+ if i > 0:
+ f.write(",\n")
+ json.dump(app, f, indent=None, separators=(",", ":"), ensure_ascii=False)
+ f.write("\n]\n")
+ print(f"categories/{cat}.json ({len(matched)} apps)")
+
+os.makedirs("categories", exist_ok=True)
+
+# --- AI (case-sensitive "AI" match + space-delimited meta, matching upstream) ---
+ai_set = set()
+for name, desc in apps_info.items():
+ line = f"◆ {name} : {desc}"
+ # case-sensitive "AI"
+ if re.search(r"AI", line):
+ ai_set.add(name)
+ continue
+ # case-insensitive for all other terms, with " meta " (space-delimited)
+ if re.search(
+ r"chatgpt|openai|gemini|claude|copilot|perplexity| meta |grok|"
+ r"anthropic|huggingface|mistral|cohere|together|replicate|cursor|"
+ r"codeium|tabnine|replit|windsurf|midjourney|firefly|canva|runway|"
+ r"leonardo|synthesia|elevenlabs|heygen|zapier|z\.ai|clickup|grammarly|"
+ r"ollama|lmstudio|openwebui|salesforce|watsonx",
+ line,
+ re.IGNORECASE,
+ ):
+ ai_set.add(name)
+
+ai_matched = [{"name": n, "description": apps_info[n]} for n in sorted(ai_set, key=str.lower)]
+write_json("ai", ai_matched)
+
+# --- Pattern-based categories ---
+for cat in sorted(CATEGORY_PATTERNS.keys()):
+ pat = CATEGORY_PATTERNS[cat]
+ if pat is None:
+ continue
+ exclude = CATEGORY_EXCLUDE.get(cat)
+ matched = match_by_pattern(cat, pat, exclude)
+ write_json(cat, matched)
+
+# --- metapackages ---
+meta_matched = []
+for name in METAPACKAGE_NAMES:
+ if name in apps_info:
+ meta_matched.append({"name": name, "description": apps_info[name]})
+# Also include apps whose description references "kdegames", "kdeutils", "node", "platform-tools"
+for name, desc in apps_info.items():
+ if name in METAPACKAGE_NAMES:
+ continue
+ line = f"◆ {name} : {desc}"
+ if re.search(r'"kdegames"|"kdeutils"|"node"|"platform-tools"', line, re.IGNORECASE):
+ meta_matched.append({"name": name, "description": desc})
+meta_matched.sort(key=lambda x: x["name"].lower())
+write_json("metapackages", meta_matched)
+
+# --- portable (from stats-portable minus #itsappimageonthefly, looked up in apps_info) ---
+portable_matched = []
+for n in sorted(portable_no_iotf, key=str.lower):
+ if n in apps_info:
+ portable_matched.append({"name": n, "description": apps_info[n]})
+ else:
+ portable_matched.append({"name": n, "description": lookup(n)})
+write_json("portable", portable_matched)
+
+# --- portable-cli (from stats-portable with #itscliapp) ---
+pcli_matched = []
+for n in sorted(portable_cli, key=str.lower):
+ if n in apps_info:
+ pcli_matched.append({"name": n, "description": apps_info[n]})
+ else:
+ pcli_matched.append({"name": n, "description": lookup(n)})
+write_json("portable-cli", pcli_matched)
+
+# --- portable-desktop (from stats-portable with #itsdesktopapp) ---
+pdesk_matched = []
+for n in sorted(portable_desktop, key=str.lower):
+ if n in apps_info:
+ pdesk_matched.append({"name": n, "description": apps_info[n]})
+ else:
+ pdesk_matched.append({"name": n, "description": lookup(n)})
+write_json("portable-desktop", pdesk_matched)
+
+# --- appimage-on-the-fly (from stats-portable with #itsappimageonthefly) ---
+iotf_matched = []
+for n in sorted(portable_iotf, key=str.lower):
+ if n in apps_info:
+ iotf_matched.append({"name": n, "description": apps_info[n]})
+ else:
+ iotf_matched.append({"name": n, "description": lookup(n)})
+write_json("appimage-on-the-fly", iotf_matched)
+
+# --- appimages (from stats-appimages, looked up in apps_info) ---
+ai_apps = []
+for n in sorted(appimage_names, key=str.lower):
+ if n in apps_info:
+ ai_apps.append({"name": n, "description": apps_info[n]})
+ else:
+ ai_apps.append({"name": n, "description": lookup(n)})
+write_json("appimages", ai_apps)
+
+# --- category pages ---
+
+CAT_PAGE_TEMPLATE = """
+
+
+
+
+ Use ?name=appname in the URL.
Could not load data for ' + escapeHtml(name) + '.
' + escapeHtml(app.description) + '
'; + html += 'Failed to load apps.
'; + }); +}); diff --git a/assets/js/search.js b/assets/js/search.js deleted file mode 100644 index 0568a8c5c..000000000 --- a/assets/js/search.js +++ /dev/null @@ -1,178 +0,0 @@ -(function () { - 'use strict'; - - function escapeHtml(s) { - return String(s).replace(/[&<>"']/g, function (c) { - return ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c]; - }); - } - - // Filters the rows of the big apps table in-place. - function initTableFilter() { - var input = document.getElementById('app-search-input'); - var counter = document.getElementById('app-search-count'); - var archSel = document.getElementById('app-search-arch'); - if (!input) return; - - // Locate the apps table by its header cells; the search box may be at the - // top of the page (via the `category` layout) or inline near the table. - var table = null; - var tables = document.getElementsByTagName('table'); - for (var t = 0; t < tables.length && !table; t++) { - var headerRow = tables[t].rows[0]; - if (!headerRow) continue; - for (var c = 0; c < headerRow.cells.length; c++) { - if (/package\s*name/i.test(headerRow.cells[c].textContent || '')) { - table = tables[t]; - break; - } - } - } - if (!table) return; - - var rows = Array.prototype.slice.call(table.tBodies[0] ? table.tBodies[0].rows : table.rows); - if (rows.length && rows[0].cells[0] && rows[0].cells[0].tagName === 'TH') rows.shift(); - - var haystacks = rows.map(function (row) { - return (row.textContent || '').toLowerCase(); - }); - // Per-row architecture list from the hidden .arch-data marker emitted by - // am2pla-site. Rows without it (pages generated before the arch filter) - // default to x86_64, which every listed app supports. - var rowArchs = rows.map(function (row) { - var el = row.querySelector('.arch-data'); - return el ? (el.getAttribute('data-arch') || 'x86_64') : 'x86_64'; - }); - var total = rows.length; - - function update() { - var q = input.value.trim().toLowerCase(); - // Whitespace-separated terms, ANDed. Empty query matches every row. - var terms = q.split(/\s+/).filter(Boolean); - var arch = archSel ? archSel.value : ''; - var visible = 0; - for (var i = 0; i < rows.length; i++) { - var hay = haystacks[i]; - var match = terms.every(function (t) { return hay.indexOf(t) !== -1; }) - && (!arch || rowArchs[i].split(/\s+/).indexOf(arch) !== -1); - rows[i].style.display = match ? '' : 'none'; - if (match) visible++; - } - counter.textContent = (q === '' && !arch) - ? '(' + total + ' apps)' - : '(' + visible + ' of ' + total + ' shown)'; - } - - input.addEventListener('input', update); - if (archSel) archSel.addEventListener('change', update); - - var params = new URLSearchParams(window.location.search); - var initialQ = params.get('q'); - if (initialQ) { - input.value = initialQ; - input.focus(); - } - var initialArch = params.get('arch'); - if (initialArch && archSel) archSel.value = initialArch; - update(); - } - - // Fetches apps.json and renders a short list of matches with links. - function initJsonSearch() { - var MAX_RESULTS = 20; - var APPS_URL = 'apps.json'; - var APPS_PAGE = 'apps.html'; - - var input = document.getElementById('home-search-input'); - var status = document.getElementById('home-search-status'); - var results = document.getElementById('home-search-results'); - var more = document.getElementById('home-search-more'); - var archSel = document.getElementById('home-search-arch'); - if (!input) return; - - var apps = null; - var pending = null; - - function load() { - if (apps || pending) return pending; - pending = fetch(APPS_URL).then(function (r) { return r.json(); }).then(function (data) { - apps = data; - status.textContent = apps.length + ' apps in the database.'; - if (input.value.trim()) render(input.value.trim()); - }).catch(function () { - status.textContent = 'Could not load the app database. Try again later.'; - }); - return pending; - } - - function render(q) { - results.innerHTML = ''; - more.innerHTML = ''; - if (!apps) return; - var arch = archSel ? archSel.value : ''; - if (!q) { - status.textContent = apps.length + ' apps in the database.'; - return; - } - // Whitespace-separated terms, ANDed against name + description. - var terms = q.toLowerCase().split(/\s+/).filter(Boolean); - var matches = []; - for (var i = 0; i < apps.length; i++) { - var a = apps[i]; - var hay = (a.packageName + ' ' + (a.description || '')).toLowerCase(); - var archOk = !arch || (a.arch || ['x86_64']).indexOf(arch) !== -1; - if (archOk && terms.every(function (t) { return hay.indexOf(t) !== -1; })) matches.push(a); - } - if (!matches.length) { - status.textContent = 'No apps match "' + q + '".'; - return; - } - status.textContent = matches.length + ' match' + (matches.length === 1 ? '' : 'es') - + (matches.length > MAX_RESULTS ? ' (showing first ' + MAX_RESULTS + ')' : '') + ':'; - var shown = matches.slice(0, MAX_RESULTS); - var html = ''; - for (var j = 0; j < shown.length; j++) { - var m = shown[j]; - var safeName = escapeHtml(m.packageName); - var safeDesc = escapeHtml((m.description || '').replace(/\.\.\.$/, '')); - var safeIcon = escapeHtml(m.icon || ''); - html += 'The "Install" button on each app page uses the pla-install:// protocol. You need a helper application to handle it.
Install AM-GUI or AppGallery to register the protocol handler and enable one-click installation. (Under Development)
Alternatively, install apps manually via AM on the command line.
+Portable Linux Apps are standalone applications for GNU/Linux that can (theoretically) run everywhere, also on a USB stick. These applications can be AppImage packages (see appimage.org) or standalone archives (for example Firefox, Thunderbird...).
+This catalog aims to survey and list all the AppImages and autonomous programs, and aims to provide a centralized point where you can document yourself on individual apps and where you can easily reach the URLs to the sources, both through the pages dedicated to each app and by reading the "installation scripts".
+Yeah, each app has its own installation script, PKGBUILD style, but with an alternative package manager named "AM", which works like the more classic APT, PacMan/YAY, DNF... and which can therefore place them in specific paths of the filesystem , like any program, and allows updates via a system of scripts called "AM-updater". If an app can't update itself, the dedicated "AM-updater" script will use an application-specific method to always update your favorite apps to the latest version. FOR REAL!
+This catalog is open source. You can edit its pages, update them and see the sources clearly, as a "wiki".
+ +While I recognize the role they have had so far in supporting the diffusion of AppImage as a packaging format, through the years, as a former user, I would like to underline what led me to open an alternative catalogue:
+Furthermore, none of them track updates consistently.
+From the aforementioned defects I understood what a catalog of portable applications should NOT do to be reliable.
+All app data is stored as JSON files sourced from the AM application list. Each app has a corresponding file in the apps/ folder with its description, sites, sources and screenshots, generated by the am2pla-site script.
icons/ folder, named after the app;For any suggestions, open an issue at https://github.com/ivan-hc/AM or a pull request at https://github.com/Portable-Linux-Apps/Portable-Linux-Apps.github.io
+If you want to improve an app's page in this catalogue (i.e. add more detailed description, screenshots, sites, etc.), read on.
+The app files in apps folder are in a simple markdown-ish format.
+# some app +description of your app. +only use **bold**, *italic*, ++underline++, lists markdown here +- do not add links or images here +- use SOURCES field if you package someone else's app + +# SCREENSHOTS: https://coyoteclan.github.io/Portable-Linux-Apps.github.io/contribute_ss.png https://coyoteclan.github.io/Portable-Linux-Apps.github.io/contribute_ss.png +# SITES: https://someapp.io +# SOURCES: https://github.com/name/someapp-appimage +# BUTTONS: Label_of_Button::https://discord.gg Donation_Link::https://someapp.io/donate ++
Explanation of the fields:
+SCREENSHOTS: a space separated list of image URLsSITES: space separated site URLs that provide the AppImageSOURCES: if you are packaging someone's else's app, link the git repo(s) hereBUTTONS: space separated button definitions in the form of Button_Title::URLicons folder.Depends on what you mean by "centralized package repository", if you mean a repository that stores them all like Debian-based distributions do with DEB packages, no, there are thousands of packages, and they are usually distributed to remote sites and difficult to find.
+If instead you mean an AUR-style repo with scripts that easily find all AppImages, you're in the right place!
+This catalog and its CLI, "AM", make it easy for you to find, install, integrate and update all AppImage packages!
+This catalog is just the frontend for an ever growing database that aims to extend not only to x86_64 architecture apps listed here, but also to all others, from the modern ARM64/aarch64 to oldest i686, as an universal solution for all AppImages and portable programs for GNU/Linux!
+Welcome to the most complete database of all AppImage packages and portable applications for GNU/Linux.
+the first AUR-inspired AppImage Software Center!
+Portable Linux Apps are standalone applications for GNU/Linux that can run everywhere, also on a USB stick. These can be AppImage packages or standalone archives. Each app has its own installation script, PKGBUILD style, managed by the AM package manager.
+This catalog is open source. You can contribute by editing the pages, adding missing information, or improving the database.
+ +
](https://github.com/ivan-hc/AM) |
-
-
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) |
-| - | - | - |
-| *sandbox AppImages* | *list available apps* | *info about the apps* |
-| [
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) |
-| *install applications* | *query lists using keywords* | *show the installed apps* |
-| [
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) | [
](https://github.com/ivan-hc/AM) |
-| *create and restore snapshots* | *update everything* | *get rid of libfuse2* |
-
-
|
-| - |
-
-*Type "1" to install "AM", "2" to install "[AppMan](#what-is-appman)". Any other key will abort the installation.*
-
-**Installation is complete!**
-
-*Run `am -h` or jump to "**[Usage](#usage)**" to see all the available options.*
-
-------------------------------------------------------------------------
-
-### What is AppMan?
-
-*AppMan is a portable version of "AM", limited to installing and managing apps only locally and without root privileges.*
-
-*The command name changes, from `am` to `appman`, but the script is the same.*
-
-*"AM" on the contrary, provides a "fixed" installation, but can install and manage apps both locally and at the system level.*
-
-*I recommend "AM" to privileged users who want to install and manage apps at multiple levels, and "AppMan" to non-privileged users who do not have large needs.*
-
-------------------------------------------------------------------------
-
-### AM installation structure
-
-*The classic "AM" installation has the following structure:*
-```
-/opt/am/APP-MANAGER ==> /usr/local/bin/am
-/opt/am/modules
-/opt/am/remove
-```
-*Where the command `/usr/local/bin/am` is just a symbolic link to `/opt/am/APP-MANAGER`. The directory `/opt/am/modules` contains the modules "not vital" for "AM" but necessary for managing the apps. The script `/opt/am/remove` is instead necessary for removing "AM".*
-
-------------------------------------------------------------------------
-
-### How are apps installed
-
-*The system-wide AppImage integration has the following structure:*
-```
-/opt/$PROGRAM/
-/opt/$PROGRAM/$PROGRAM
-/opt/$PROGRAM/AM-updater
-/opt/$PROGRAM/remove
-/opt/$PROGRAM/icons/$ICON-NAME
-/usr/local/bin/$PROGRAM
-/usr/local/share/applications/$PROGRAM-AM.desktop
-```
-*Locally installed apps can have a directory of your choice, depending on what you decided when you first started `am -i --user {PROGRAM}` or when you started `appman` (if you chose [AppMan](#what-is-appman)) or by using the `am --user` command.*
-
-*In fact, the `--user` command can be used as a "flag" for application installation options, allowing you to integrate them locally and without root permissions, as AppMan does.*
-
-*For example, let's say you want to create and use the `/home/USER/Applications` directory, here is the structure of a locally embedded AppImage:*
-```
-~/Applicazioni/$PROGRAM/
-~/Applicazioni/$PROGRAM/$PROGRAM
-~/Applicazioni/$PROGRAM/AM-updater
-~/Applicazioni/$PROGRAM/remove
-~/Applicazioni/$PROGRAM/icons/$ICON-NAME
-~/.local/bin/$PROGRAM
-~/.local/share/applications/$PROGRAM-AM.desktop
-```
-
-------------------------------------------------------------------------
-
-| [Install "AM"/"AppMan"](#installation) | [Back to "Main Index"](#main-index) |
-| - | - |
-
-------------------------------------------------------------------------
-
-# What programs can be installed
-
-*"AM" installs, removes, updates and manages only standalone programs, ie those programs that can be run from a single directory in which they are contained.*
-
-*1. **PORTABLE PROGRAMS** from official sources (see NodeJS, Platform Tools...), extracted from official .deb/tar/zip packages.*
-
-*2. **APPIMAGES**, from both official and unofficial sources (I also create unofficial AppImages), or compiled on-the-fly with [pkg2appimage](https://github.com/AppImage/pkg2appimage) and [appimagetool](https://github.com/AppImage/AppImageKit), like an AUR helper, from official archives.*
-
-*3. **THIRD-PARTY LIBRARIES** if they are missing in your repositories.*
-
-*The database aims to be a reference point where you can download all the AppImage packages scattered around the web, otherwise unobtainable, as you would expect from any package manager, through specific installation scripts for each application, as happens with the AUR PKGBUILDs, on Arch Linux. You can see all of them [here](https://github.com/ivan-hc/AM/tree/main/programs), divided by architecture.*
-
-*You can view basic information, site links and sources using the related command `am -a {PROGRAM}`, or visit [**portable-linux-apps.github.io/apps**](https://portable-linux-apps.github.io/apps).*
-
-------------------------------------------------------------------------
-
-| [Back to "Main Index"](#main-index) |
-| - |
-
-------------------------------------------------------------------------
-
-# How to update all programs, for real
-
-*Most of the apps managed by "AM" have a script called `AM-updater`. It tells how updates are checked when running the `am -u` command.*
-
-*In most cases, the "version comparison" is used between the installed one (file `version`) and an online source (official or not, depending on how hard or easy it is to find a download URL or just a number, using the terminal). In other cases, AppImages can rely on "`appimageupdatetool`" if they support "delta updates" (install it with the command `am -i appimageupdatetool`). However, there are some programs that update themselves (and among these the most famous is certainly Firefox, all official development builds).*
-
-### How to update all installed apps
-
-*Option `-u` or `update` updates all the installed apps and keeps "AM"/"AppMan" in sync with the latest version and all latest bug fixes.*
-
-*1. To update only the programs, use `am -u --apps` / `appman -u --apps`*
-
-*2. To update just one program, use `am -u $PROGRAM` / `appman -u $PROGRAM`*
-
-*3. To update all the programs and "AM"/"AppMan" itself, just run the command`am -u` / `appman -u`*
-
-*4. To update only "AM"/"AppMan" and the modules use the option `-s` instead, `am -s` / `appman -s`*
-
-### How to update everything using Topgrade
-
-*Keeping your system up to date usually involves invoking multiple package managers. This results in big, non-portable shell one-liners saved in your shell. To remedy this, Topgrade detects which tools you use and runs the appropriate commands to update them.*
-
-*Install the "`topgrade`" package using the command*
-```
-am -i topgrade
-```
-*or*
-```
-am -i --user topgrade
-```
-*Visit [github.com/topgrade-rs/topgrade](https://github.com/topgrade-rs/topgrade) to learn more.*
-
-------------------------------------------------------------------------
-
-| [Back to "Main Index"](#main-index) |
-| - |
-
-------------------------------------------------------------------------
-### External links index
-------------------------------------------------------------------------
-*All the guides listed here are available at [***github.com/ivan-hc/AM***](https://github.com/ivan-hc/AM)*
-
-- [Install applications](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/install.md)
-- [Install only AppImages](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/install-appimage.md)
- - [Install and sandbox AppImages in one go](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/install-appimage.md#install-and-sandbox-appimages-in-one-go)
-- [Install AppImages not listed in this database but available in other github repos](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/extra.md)
-- [List the installed applications](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/files.md)
-- [List and query all the applications available on the database](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/list-and-query.md)
-- [Update all](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/update.md)
-- [Backup and restore installed apps using snapshots](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/backup-and-overwrite.md)
-- [Remove one or more applications](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/remove.md)
-- [Clone a set of programs installed from other AM and AppMan configurations](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/clone.md)
-- [Change the destination path of installed programs](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/relocate.md)
-- [Convert Type2 AppImages requiring libfuse2 to New Generation AppImages](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/nolibfuse.md)
-- [Integrate local AppImages into the menu by dragging and dropping them](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/launcher.md)
- - [How to create a launcher for a local AppImage](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/launcher.md#how-to-create-a-launcher-for-a-local-appimage)
- - [How to remove the orphan launchers](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/launcher.md#how-to-remove-the-orphan-launchers)
- - [AppImages from external media](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/launcher.md#appimages-from-external-media)
- - [Update scattered AppImages](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/launcher.md#update-scattered-appimages)
-- [Sandbox an AppImage](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/sandbox.md)
- - [How to enable a sandbox](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/sandbox.md#how-to-enable-a-sandbox)
- - [How to disable a sandbox](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/sandbox.md#how-to-disable-a-sandbox)
- - [Sandboxing example](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/sandbox.md#sandboxing-example)
- - [About Aisap sandboxing](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/sandbox.md#about-aisap-sandboxing)
-- [How to update or remove apps manually](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/remove.md#how-to-update-or-remove-apps-manually)
-- [Downgrade an installed app to a previous version](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/downgrade.md)
-- [How to use multiple versions of the same application](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/backup-and-overwrite.md#how-to-use-multiple-versions-of-the-same-application)
-- [Create and test your own installation script](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md)
- - [Option Zero: "AppImages"](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#option-zero-appimages)
- - [Option One: "build AppImages on-the-fly"](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#option-one-build-appimages-on-the-fly)
- - [Option Two: "Archives and other programs"](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#option-two-archives-and-other-programs)
- - [How an installation script works](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#how-an-installation-script-works)
- - [How to test an installation script](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#how-to-test-an-installation-script)
- - [How to submit a Pull Request](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/template.md#how-to-submit-a-pull-request)
-- [Third-party databases for applications (NeoDB)](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/newrepo.md)
-- [BSD, freeBSD and derivative systems: configuration and troubleshooting](https://github.com/ivan-hc/AM/blob/main/docs/guides-and-tutorials/bsd.md)
-
-[Instructions for Linux Distro Maintainers](https://github.com/ivan-hc/AM#instructions-for-linux-distro-maintainers)
-
-[Troubleshooting](https://github.com/ivan-hc/AM#troubleshooting)
-- [An application does not work, is old and unsupported](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#an-application-does-not-work-is-old-and-unsupported)
-- [Cannot download or update an application](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#cannot-download-or-update-an-application)
-- [Cannot mount and run AppImages](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#cannot-mount-and-run-appimages)
-- [Checksum does not match or missing verified status](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#checksum-does-not-match-or-missing-verified-status)
-- [Failed to open squashfs image](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#failed-to-open-squashfs-image)
-- [Spyware, malware and dangerous software](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#spyware-malware-and-dangerous-software)
-- [Stop AppImage prompt to create its own launcher, desktop integration and doubled launchers](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#stop-appimage-prompt-to-create-its-own-launcher-desktop-integration-and-doubled-launchers)
-- [The script points to "releases" instead of downloading the latest stable](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#the-script-points-to-releases-instead-of-downloading-the-latest-stable)
-- [Ubuntu mess](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#ubuntu-mess)
-- [Wrong download link](https://github.com/ivan-hc/AM/blob/main/docs/troubleshooting.md#wrong-download-link)
-
-------------------------------------------------------------------------
-
-| [Back to "Main Index"](#main-index) |
-| - |
-
-------------------------------------------------------------------------
-# Related projects
-#### Side Projects
-- *[amcheck](https://github.com/ivan-hc/amcheck), checks the validity of scripts in this database and monitors the availability of AppImages*
-- *[am-extras](https://github.com/ivan-hc/am-extras), lists applications from third-party databases*
-- *[am-gui](https://github.com/Shikakiben/AM-GUI), a graphical Front for AM, by @Shikakiben*
-- *[vappman](https://github.com/joedefen/vappman), a visual (curses) TUI interface to AppMan, by @joedefen*
-
-#### My other projects
-- *[AppImaGen](https://github.com/ivan-hc/AppImaGen), easily create AppImages from Ubuntu PPAs or Debian using pkg2appimage and appimagetool*
-- *[ArchImage](https://github.com/ivan-hc/ArchImage), create AppImages for all distributions using Arch Linux packages. Powered by JuNest*
-- *[Firefox for Linux scripts](https://github.com/ivan-hc/Firefox-for-Linux-scripts), easily install the official releases of Firefox for Linux*
-- *[My AppImage packages](https://github.com/ivan-hc#my-appimage-packages) the complete list of packages managed by me and available in this database*
-- *[portable2appimage](https://github.com/ivan-hc/portable2appimage), convert standalone, self-contained portable apps into AppImage packages*
-- *[Snap2AppImage](https://github.com/ivan-hc/Snap2AppImage), try to convert Snap packages to AppImages*
-
-------------------------------------------------------------------------
-
-###### *You can support me and my work on [**ko-fi.com**](https://ko-fi.com/IvanAlexHC) and [**PayPal.me**](https://paypal.me/IvanAlexHC). Thank you!*
-
---------
-
-*© 2020-present Ivan Alessandro Sala aka 'Ivan-HC'* - I'm here just for fun!
-
-------------------------------------------------------------------------
-
-| [**ko-fi.com**](https://ko-fi.com/IvanAlexHC) | [**PayPal.me**](https://paypal.me/IvanAlexHC) | [Install "AM"/"AppMan"](#installation) | ["Main Index"](#main-index) |
-| - | - | - | - |
-
-------------------------------------------------------------------------
-
-
diff --git a/internet.md b/internet.md
deleted file mode 100644
index 8ad1e7835..000000000
--- a/internet.md
+++ /dev/null
@@ -1,169 +0,0 @@
-# INTERNET
-
-| [Back to Home](index.md) | [Back to Applications](apps.md)
-| --- | --- |
-
-#### Here are listed **41** programs for this category.
-
-
-All the guides listed here are available at github.com/ivan-hc/AM
+ +Instructions for Linux Distro Maintainers
+ +