Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
7a3c366
REWRITE [PART1]
coyoteclan Jul 20, 2026
8d63e5d
fix: restore local am2pla-site and JSON-based workflow after rebase
coyoteclan Jul 20, 2026
ac005d6
push to auto-sync branch instead of main for testing
coyoteclan Jul 20, 2026
bcaaf89
minify all apps/*.json to single-line; regenerate apps.json and categ…
coyoteclan Jul 20, 2026
fea0af8
extract screenshots into separate array; add gallery carousel to app.…
coyoteclan Jul 20, 2026
90366cc
add empty screenshots array to new app JSON in workflow
coyoteclan Jul 20, 2026
82a2771
fix category pages: use app.name + '.png' for icon src instead of und…
coyoteclan Jul 20, 2026
fd53e4c
REWRITE [PART2]
coyoteclan Jul 20, 2026
bd09f67
remove md files
coyoteclan Jul 20, 2026
779506c
fix: dynamic app count on category pages, add search bar, clean up or…
coyoteclan Jul 20, 2026
0dbd076
remove jekyll cfg and add seo info
coyoteclan Jul 20, 2026
e54e4c4
remove renovate.json and fix workflow
coyoteclan Jul 20, 2026
d3283c5
improve accessibility and performance
coyoteclan Jul 20, 2026
b81ce36
sync changes to main branch instead of temp
coyoteclan Jul 20, 2026
0552f8f
Sync files from source repository
web-flow Jul 20, 2026
e5900a6
fix stats calculation
coyoteclan Jul 20, 2026
962e561
remove useless files
coyoteclan Jul 20, 2026
14225a4
workflow fix and various small additions
coyoteclan Jul 20, 2026
ac478b8
update faq entry
coyoteclan Jul 20, 2026
7fa27c3
add contributing file and update faq #5
coyoteclan Jul 20, 2026
08793f4
add missing sources for some apps and buttons support
coyoteclan Jul 20, 2026
b399e1a
re-add screenshots for virtualbox and improve screenshot switching
coyoteclan Jul 20, 2026
e59ce5a
Sync files from source repository
web-flow Jul 20, 2026
7d2ad42
Sync files from source repository
web-flow Jul 21, 2026
25ea4dc
Create deploy_pages.yml
coyoteclan Jul 21, 2026
ba4b5c1
Create static.yml
coyoteclan Jul 21, 2026
5104c57
Update static.yml
coyoteclan Jul 21, 2026
f0bdb24
rework site generation
coyoteclan Jul 21, 2026
4a849f4
Merge branch 'main' of https://github.com/coyoteclan/Portable-Linux-A…
coyoteclan Jul 21, 2026
af40d3a
fix workflow
coyoteclan Jul 21, 2026
04418ac
fix simple2json.py script
coyoteclan Jul 21, 2026
952d526
fix simple2json.py (again)
coyoteclan Jul 21, 2026
36807f6
add debugging to app file generation
coyoteclan Jul 21, 2026
e91ff25
remove debugging
coyoteclan Jul 21, 2026
8abf736
add testapp to apps.json for testing
coyoteclan Jul 21, 2026
1f20ca0
fix parsing in simple2json.py
coyoteclan Jul 21, 2026
4b17567
fix simple2json.py and testapp page
coyoteclan Jul 21, 2026
aeba8c7
update testapp
coyoteclan Jul 21, 2026
df4ab0e
try to fix the markdown list conversion
coyoteclan Jul 21, 2026
d560bbe
update faq for improving app info
coyoteclan Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
53 changes: 53 additions & 0 deletions .github/workflows/static.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 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: |
python3 simple2json.py 2>&1 | tee build-log.txt

- name: Upload Build Log
uses: actions/upload-artifact@v4
with:
name: build-log
path: build-log.txt

- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
# Upload entire repository
path: '.'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5
54 changes: 16 additions & 38 deletions .github/workflows/sync-with-AM.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,6 @@ jobs:

- 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

Expand All @@ -34,22 +31,14 @@ jobs:
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"
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.md" "apps/$name.json" "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"
Expand All @@ -59,10 +48,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".json; 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
Expand All @@ -83,36 +71,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".json

echo "Adding apps/$a.json"
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/*.json' categories/ 'icons/*.png' '*.json' am2pla-site
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
20 changes: 8 additions & 12 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -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
10 changes: 4 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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...
Expand All @@ -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

------------------------------------

Expand Down
10 changes: 0 additions & 10 deletions Gemfile

This file was deleted.

130 changes: 2 additions & 128 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,128 +1,2 @@
<div align="center">

###### *Welcome to the most complete database of all AppImage packages and portable applications for GNU/Linux.*

# PORTABLE LINUX APPS

### *the first AUR-inspired AppImage Software Center!*

--------

# Main page "[Portable-Linux-Apps.github.io](https://portable-linux-apps.github.io)"

--------

| *[Go to the applications list](https://portable-linux-apps.github.io/apps.html)* | *[Install "AM", the package manager](https://github.com/ivan-hc/AM)* |
| - | - |
| [<img loading="lazy" src="https://github.com/user-attachments/assets/f55d4242-bd5f-4195-946c-e01c6fe5e264" width="512" height="256">](https://portable-linux-apps.github.io/apps.html) | [<img loading="lazy" src="https://raw.githubusercontent.com/ivan-hc/AM/main/sample/sample.png" width="512" height="256">](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.

</div>

#### Option 1: Docker (recommended, no local Ruby needed)

Uses the official `ruby:3.3` image, which matches the Ruby version GitHub
Pages itself builds with. The first run takes a few minutes while
`bundle install` compiles native gems; the named `jekyll-bundle` volume
caches them so later runs start quickly.

```sh
# delete any host-generated lockfile so the container can regenerate one
rm -f Gemfile.lock

docker run --rm -it -p 4000:4000 \
-v "$PWD:/srv/jekyll" -w /srv/jekyll \
-v jekyll-bundle:/usr/local/bundle \
ruby:3.3 \
bash -c "bundle install && bundle exec jekyll serve --host 0.0.0.0"
```

#### Option 2: Local Jekyll

* [Install Jekyll](https://jekyllrb.com/docs/installation/)
* In a terminal, change to the repository root directory
* run `bundle install` (only needed the first time, or after `Gemfile`
changes)
* run `bundle exec jekyll serve`

Requires **Ruby 3.0 - 3.3**. The `github-pages` gem currently pins an old
version of `jekyll-github-metadata` (2.16.1) that crashes on Ruby 3.4+
with an `instance_variable_defined?` `NameError`. If your distribution
ships Ruby 3.4 or newer, use Docker (Option 1) or install Ruby 3.3 via a
version manager such as [`rbenv`](https://github.com/rbenv/rbenv) or
[`asdf`](https://asdf-vm.com/). The `Gemfile` declares `webrick` in the
`:development` group so `jekyll serve` works on Ruby 3.0+ (GitHub Pages
production does not use `webrick`).

#### Option 3: Testing changes to the site generation script

If you are changing `tools/am2pla-site` in the `ivan-hc/AM` repository
(the script that produces the catalog pages on every sync), run it
against a detached worktree of this site so the output doesn't pollute
your main checkout. The `sed` mirrors what the sync workflow does — it
neutralises the script's `cd "$(xdg-user-dir DESKTOP)"` so output lands
in the worktree instead of your Desktop directory.

```sh
# Adjust to wherever you have ivan-hc/AM cloned
AM_REPO=~/src/AM

# Detached worktree of this repo's main branch
git worktree add -d ../pla-site-test main

# Run the patched script inside the worktree
sed 's|^cd "$(xdg-user-dir|#&|' "$AM_REPO/tools/am2pla-site" > /tmp/am2pla-site-test
cd ../pla-site-test && bash /tmp/am2pla-site-test

# Preview with the Docker command from Option 1 (or use Option 2)
docker run --rm -it -p 4000:4000 \
-v "$PWD:/srv/jekyll" -w /srv/jekyll \
-v jekyll-bundle:/usr/local/bundle \
ruby:3.3 \
bash -c "bundle install && bundle exec jekyll serve --host 0.0.0.0"

# Clean up when done
cd - && git worktree remove --force ../pla-site-test
```

When the Docker container runs as root it leaves a root-owned
`_site/` and `Gemfile.lock` inside the worktree; `git worktree remove
--force` will fail to delete those, so finish with
`sudo rm -rf ../pla-site-test` if the remove complains.

#### Viewing the site

You will see messages that confirm that site has generated and the server is
running. Then in your browser, navigate to http://127.0.0.1:4000 to confirm
the changes you made are what you expected. Error messages will appear in the
terminal window from where you ran Jekyll. When you change a file, the site
will rebuild automatically (it will take a few moments and you'll be informed
in the terminal when it's done). However, if you change '_config.yml', you
must kill Jekyll with ctrl-c and run it again to test the change.

--------

*© 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) |
| - | - |

------------------------------------------------------------------------

# Portable Linux Apps
[Goto Website](https://portable-linux-apps.github.io/)
41 changes: 0 additions & 41 deletions _config.yml

This file was deleted.

1 change: 0 additions & 1 deletion _includes/head-custom.html

This file was deleted.

Loading