diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..bb1eda8
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,66 @@
+name: Test install scripts
+
+on:
+ push:
+ branches: [develop]
+ paths:
+ - 'content/programs/**'
+ - 'content/distros/**'
+ - 'content/dependencies/**'
+ - 'tests/**'
+ - '.github/workflows/test.yml'
+ pull_request:
+ paths:
+ - 'content/programs/**'
+ - 'content/distros/**'
+ - 'content/dependencies/**'
+ - 'tests/**'
+ - '.github/workflows/test.yml'
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ test:
+ strategy:
+ matrix:
+ distro: [alpine, arch, debian, fedora, opensuse, ubuntu, void]
+ fail-fast: false
+ runs-on: ubuntu-latest
+ timeout-minutes: 120
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Build Docker image
+ run: docker build -t lsg-test:${{ matrix.distro }} -f tests/docker/Dockerfile.${{ matrix.distro }} .
+
+ - name: Run tests
+ run: python3 tests/runner.py --distro ${{ matrix.distro }}
+
+ - name: Generate HTML report
+ if: always()
+ run: |
+ if [ -f report.json ]; then
+ python3 tests/report.py report.json --html -o report-${{ matrix.distro }}.html
+ else
+ echo "⚠️ No report.json — Docker build or test runner failed"
+ fi
+
+ - name: Generate Markdown summary
+ if: always()
+ run: |
+ if [ -f report.json ]; then
+ python3 tests/report.py report.json --markdown >> $GITHUB_STEP_SUMMARY
+ else
+ echo "## ⚠️ ${{ matrix.distro }} — build or runner failed, no report generated" >> $GITHUB_STEP_SUMMARY
+ fi
+
+ - name: Upload report (JSON)
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: report-${{ matrix.distro }}
+ path: |
+ report.json
+ report-${{ matrix.distro }}.html
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 929a21e..4f1a3dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,7 @@ public/
# macOS
.DS_Store
+__pycache__/
+test_script.sh
+report.json
+report-*.html
diff --git a/content/programs/alacritty/logo.png b/content/programs/alacritty/logo.png
new file mode 100644
index 0000000..bb80516
--- /dev/null
+++ b/content/programs/alacritty/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/amfora/logo.png b/content/programs/amfora/logo.png
new file mode 100644
index 0000000..8c3b233
Binary files /dev/null and b/content/programs/amfora/logo.png differ
diff --git a/content/programs/amfora/program.json b/content/programs/amfora/program.json
index a1851bf..262d975 100644
--- a/content/programs/amfora/program.json
+++ b/content/programs/amfora/program.json
@@ -13,7 +13,13 @@
],
"package_names": {
"default": "CUSTOM_INSTALL",
- "arch": "amfora"
+ "arch": "amfora",
+ "alpine": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL"
},
"logo": "/programs/amfora/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/ansiweather/logo.png b/content/programs/ansiweather/logo.png
new file mode 100644
index 0000000..c3482fc
--- /dev/null
+++ b/content/programs/ansiweather/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/ansiweather/program.json b/content/programs/ansiweather/program.json
index 9fa5e5a..a8c398c 100644
--- a/content/programs/ansiweather/program.json
+++ b/content/programs/ansiweather/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/fcambus/ansiweather",
"git_repo": "https://github.com/fcambus/ansiweather",
"license": "BSD-2-Clause",
- "categories": ["terminal", "internet"],
+ "categories": [
+ "terminal",
+ "internet"
+ ],
"dependencies": [],
"package_names": {
"default": "ansiweather",
@@ -16,5 +19,6 @@
"opensuse": "ansiweather",
"void": "ansiweather",
"alpine": "ansiweather"
- }
+ },
+ "logo": "/programs/ansiweather/logo.png"
}
diff --git a/content/programs/appimagelauncher/custom_install/install.sh b/content/programs/appimagelauncher/custom_install/install.sh
new file mode 100755
index 0000000..206b6f3
--- /dev/null
+++ b/content/programs/appimagelauncher/custom_install/install.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -e
+echo "Installing AppImageLauncher..."
+LATEST_DEB=$(curl -s https://api.github.com/repos/TheAssassin/AppImageLauncher/releases/latest 2>/dev/null | grep browser_download_url | grep bionic_amd64.deb | cut -d '"' -f4)
+if [ -n "$LATEST_DEB" ]; then
+ curl -L -o /tmp/appimagelauncher.deb "$LATEST_DEB"
+ sudo dpkg -i /tmp/appimagelauncher.deb 2>/dev/null || sudo apt install -y /tmp/appimagelauncher.deb
+ rm /tmp/appimagelauncher.deb
+else
+ echo "Could not download AppImageLauncher."
+ exit 1
+fi
diff --git a/content/programs/appimagelauncher/program.json b/content/programs/appimagelauncher/program.json
new file mode 100644
index 0000000..328fe44
--- /dev/null
+++ b/content/programs/appimagelauncher/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "AppImageLauncher",
+ "slug": "appimagelauncher",
+ "description": "Integrate AppImages into your application launcher.",
+ "website": "https://github.com/TheAssassin/AppImageLauncher",
+ "git_repo": "https://github.com/TheAssassin/AppImageLauncher",
+ "license": "MIT",
+ "categories": [
+ "system",
+ "package-manager"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "CUSTOM_INSTALL",
+ "arch": "appimagelauncher",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/appimagelauncher/logo.png"
+}
diff --git a/content/programs/ardour/logo.png b/content/programs/ardour/logo.png
new file mode 100644
index 0000000..d9a7473
--- /dev/null
+++ b/content/programs/ardour/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/aria2/program.json b/content/programs/aria2/program.json
index 1fa7542..7f02f98 100644
--- a/content/programs/aria2/program.json
+++ b/content/programs/aria2/program.json
@@ -5,7 +5,10 @@
"website": "https://aria2.github.io/",
"git_repo": "https://github.com/aria2/aria2",
"license": "GPL-2.0",
- "categories": ["internet", "terminal"],
+ "categories": [
+ "internet",
+ "terminal"
+ ],
"package_names": {
"default": "aria2",
"arch": "aria2",
@@ -15,5 +18,6 @@
"opensuse": "aria2",
"void": "aria2",
"alpine": "aria2"
- }
+ },
+ "logo": "/programs/aria2/logo.png"
}
diff --git a/content/programs/asciinema/logo.png b/content/programs/asciinema/logo.png
new file mode 100644
index 0000000..514b8ee
--- /dev/null
+++ b/content/programs/asciinema/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/atop/logo.png b/content/programs/atop/logo.png
new file mode 100644
index 0000000..f1a5e73
--- /dev/null
+++ b/content/programs/atop/logo.png
@@ -0,0 +1,264 @@
+
+
+
+404 Not Found
+
+Not Found
+The requested URL /atop_logo.png was not found on this server.
+
+www.atoptool.nl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/content/programs/atop/program.json b/content/programs/atop/program.json
index 2a56297..bfa146e 100644
--- a/content/programs/atop/program.json
+++ b/content/programs/atop/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/Atoptool/atop",
"git_repo": "https://github.com/Atoptool/atop",
"license": "GPL-2.0",
- "categories": ["system-monitor", "terminal"],
+ "categories": [
+ "system-monitor",
+ "terminal"
+ ],
"dependencies": [],
"package_names": {
"default": "atop",
@@ -16,5 +19,6 @@
"opensuse": "atop",
"void": "atop",
"alpine": "atop"
- }
+ },
+ "logo": "/programs/atop/logo.png"
}
diff --git a/content/programs/audacious/logo.png b/content/programs/audacious/logo.png
new file mode 100644
index 0000000..ac756c6
--- /dev/null
+++ b/content/programs/audacious/logo.png
@@ -0,0 +1,7 @@
+
diff --git a/content/programs/audacious/program.json b/content/programs/audacious/program.json
index 1a0c184..172db72 100644
--- a/content/programs/audacious/program.json
+++ b/content/programs/audacious/program.json
@@ -5,7 +5,10 @@
"website": "https://audacious-media-player.org/",
"git_repo": "https://github.com/audacious-media-player/audacious",
"license": "BSD-2-Clause",
- "categories": ["audio", "media-player"],
+ "categories": [
+ "audio",
+ "media-player"
+ ],
"package_names": {
"default": "audacious",
"arch": "audacious",
@@ -15,5 +18,6 @@
"opensuse": "audacious",
"void": "audacious",
"alpine": "audacious"
- }
+ },
+ "logo": "/programs/audacious/logo.png"
}
diff --git a/content/programs/audacity/logo.png b/content/programs/audacity/logo.png
new file mode 100644
index 0000000..5513689
--- /dev/null
+++ b/content/programs/audacity/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/autojump/logo.png b/content/programs/autojump/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/autojump/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/autojump/program.json b/content/programs/autojump/program.json
index 633fd0f..6d46a57 100644
--- a/content/programs/autojump/program.json
+++ b/content/programs/autojump/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"pip"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/autojump/logo.png"
+}
diff --git a/content/programs/azote/logo.png b/content/programs/azote/logo.png
new file mode 100644
index 0000000..b512be6
--- /dev/null
+++ b/content/programs/azote/logo.png
@@ -0,0 +1,11 @@
+
diff --git a/content/programs/azote/program.json b/content/programs/azote/program.json
index fc32c41..9f8eafc 100644
--- a/content/programs/azote/program.json
+++ b/content/programs/azote/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/nwg-piotr/azote",
"git_repo": "https://github.com/nwg-piotr/azote",
"license": "GPL-3.0",
- "categories": ["display", "theming"],
- "dependencies": ["pip"],
+ "categories": [
+ "display",
+ "theming"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "azote",
"arch": "azote",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/azote/logo.png"
}
diff --git a/content/programs/backintime/logo.png b/content/programs/backintime/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/backintime/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/backintime/program.json b/content/programs/backintime/program.json
index 022cda1..d831d0b 100644
--- a/content/programs/backintime/program.json
+++ b/content/programs/backintime/program.json
@@ -5,8 +5,12 @@
"website": "https://backintime.readthedocs.io/",
"git_repo": "https://github.com/bit-team/backintime",
"license": "GPL-2.0",
- "categories": ["system"],
- "dependencies": ["git"],
+ "categories": [
+ "system"
+ ],
+ "dependencies": [
+ "git"
+ ],
"package_names": {
"default": "backintime",
"arch": "backintime",
@@ -16,5 +20,6 @@
"opensuse": "backintime",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/backintime/logo.png"
}
diff --git a/content/programs/bandwhich/logo.png b/content/programs/bandwhich/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/bandwhich/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/bandwhich/program.json b/content/programs/bandwhich/program.json
index f7e2420..fe8f27b 100644
--- a/content/programs/bandwhich/program.json
+++ b/content/programs/bandwhich/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/bandwhich/logo.png"
+}
diff --git a/content/programs/bat/logo.png b/content/programs/bat/logo.png
new file mode 100644
index 0000000..af383f9
--- /dev/null
+++ b/content/programs/bat/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/bat/program.json b/content/programs/bat/program.json
index 51cad53..2178af4 100644
--- a/content/programs/bat/program.json
+++ b/content/programs/bat/program.json
@@ -4,7 +4,9 @@
"description": "A cat clone with syntax highlighting and Git integration.",
"git_repo": "https://github.com/sharkdp/bat",
"license": "MIT/Apache-2.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "bat",
"arch": "bat",
@@ -14,5 +16,6 @@
"opensuse": "bat",
"void": "bat",
"alpine": "bat"
- }
+ },
+ "logo": "/programs/bat/logo.png"
}
diff --git a/content/programs/beets/program.json b/content/programs/beets/program.json
index e80ad21..fadfc4d 100644
--- a/content/programs/beets/program.json
+++ b/content/programs/beets/program.json
@@ -5,7 +5,10 @@
"website": "https://beets.io/",
"git_repo": "https://github.com/beetbox/beets",
"license": "MIT",
- "categories": ["audio", "terminal"],
+ "categories": [
+ "audio",
+ "terminal"
+ ],
"package_names": {
"default": "beets",
"arch": "beets",
@@ -15,5 +18,6 @@
"opensuse": "beets",
"void": "beets",
"alpine": "beets"
- }
+ },
+ "logo": "/programs/beets/logo.png"
}
diff --git a/content/programs/berry/logo.png b/content/programs/berry/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/berry/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/berry/program.json b/content/programs/berry/program.json
index e577c57..e6ddf29 100644
--- a/content/programs/berry/program.json
+++ b/content/programs/berry/program.json
@@ -5,8 +5,12 @@
"website": "https://berrywm.org/",
"git_repo": "https://github.com/JLErvin/berry",
"license": "MIT",
- "categories": ["window-manager"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "window-manager"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "berry",
"arch": "berry",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/berry/logo.png"
}
diff --git a/content/programs/bitwarden/custom_install/install.sh b/content/programs/bitwarden/custom_install/install.sh
new file mode 100755
index 0000000..44318ab
--- /dev/null
+++ b/content/programs/bitwarden/custom_install/install.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+set -e
+echo "Installing Bitwarden..."
+if command -v flatpak &>/dev/null; then
+ flatpak install -y flathub com.bitwarden.desktop
+elif command -v snap &>/dev/null; then
+ sudo snap install bitwarden
+else
+ echo "Install flatpak or snap first."
+ exit 1
+fi
diff --git a/content/programs/bitwarden/logo.png b/content/programs/bitwarden/logo.png
new file mode 100644
index 0000000..edfde64
--- /dev/null
+++ b/content/programs/bitwarden/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/bitwarden/program.json b/content/programs/bitwarden/program.json
new file mode 100644
index 0000000..f23e5e5
--- /dev/null
+++ b/content/programs/bitwarden/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "Bitwarden",
+ "slug": "bitwarden",
+ "description": "Open source password management solution.",
+ "website": "https://bitwarden.com/",
+ "git_repo": "https://github.com/bitwarden/clients",
+ "license": "GPL-3.0/AGPL-3.0",
+ "categories": [
+ "security"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "bitwarden",
+ "arch": "bitwarden",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/bitwarden/logo.png"
+}
diff --git a/content/programs/bleachbit/program.json b/content/programs/bleachbit/program.json
new file mode 100644
index 0000000..ec9f12d
--- /dev/null
+++ b/content/programs/bleachbit/program.json
@@ -0,0 +1,25 @@
+{
+ "name": "BleachBit",
+ "slug": "bleachbit",
+ "description": "Free system cleaner and privacy manager.",
+ "website": "https://www.bleachbit.org/",
+ "git_repo": "https://github.com/bleachbit/bleachbit",
+ "license": "GPL-3.0",
+ "categories": [
+ "system"
+ ],
+ "dependencies": [
+ "python3"
+ ],
+ "package_names": {
+ "default": "bleachbit",
+ "arch": "bleachbit",
+ "ubuntu": "bleachbit",
+ "debian": "bleachbit",
+ "fedora": "bleachbit",
+ "opensuse": "bleachbit",
+ "void": "bleachbit",
+ "alpine": "bleachbit"
+ },
+ "logo": "/programs/bleachbit/logo.png"
+}
diff --git a/content/programs/blender/logo.png b/content/programs/blender/logo.png
new file mode 100644
index 0000000..24fdeea
--- /dev/null
+++ b/content/programs/blender/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/blender/program.json b/content/programs/blender/program.json
new file mode 100644
index 0000000..5184b25
--- /dev/null
+++ b/content/programs/blender/program.json
@@ -0,0 +1,25 @@
+{
+ "name": "Blender",
+ "slug": "blender",
+ "description": "Free and open source 3D creation suite.",
+ "website": "https://www.blender.org/",
+ "git_repo": "https://projects.blender.org/blender/blender",
+ "license": "GPL-3.0",
+ "categories": [
+ "media",
+ "media-processing",
+ "development"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "blender",
+ "arch": "blender",
+ "ubuntu": "blender",
+ "debian": "blender",
+ "fedora": "blender",
+ "opensuse": "blender",
+ "void": "blender",
+ "alpine": "blender"
+ },
+ "logo": "/programs/blender/logo.png"
+}
diff --git a/content/programs/bluefish/logo.png b/content/programs/bluefish/logo.png
new file mode 100644
index 0000000..33b5a91
--- /dev/null
+++ b/content/programs/bluefish/logo.png
@@ -0,0 +1,7 @@
+
diff --git a/content/programs/bluefish/program.json b/content/programs/bluefish/program.json
index ed69676..bed4f2c 100644
--- a/content/programs/bluefish/program.json
+++ b/content/programs/bluefish/program.json
@@ -4,7 +4,9 @@
"description": "Powerful text editor for web developers and programmers.",
"website": "http://bluefish.openoffice.nl/",
"license": "GPL-3.0",
- "categories": ["editor"],
+ "categories": [
+ "editor"
+ ],
"package_names": {
"default": "bluefish",
"arch": "bluefish",
@@ -14,5 +16,6 @@
"opensuse": "bluefish",
"void": "bluefish",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/bluefish/logo.png"
}
diff --git a/content/programs/bottom/logo.png b/content/programs/bottom/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/bottom/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/bottom/program.json b/content/programs/bottom/program.json
index c478894..2105411 100644
--- a/content/programs/bottom/program.json
+++ b/content/programs/bottom/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/bottom/logo.png"
+}
diff --git a/content/programs/bpytop/logo.png b/content/programs/bpytop/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/bpytop/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/bpytop/program.json b/content/programs/bpytop/program.json
index ba9f353..9c57232 100644
--- a/content/programs/bpytop/program.json
+++ b/content/programs/bpytop/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/aristocratos/bpytop",
"git_repo": "https://github.com/aristocratos/bpytop",
"license": "Apache-2.0",
- "categories": ["system-monitor", "terminal"],
- "dependencies": ["pip"],
+ "categories": [
+ "system-monitor",
+ "terminal"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "bpytop",
"arch": "bpytop",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "bpytop",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/bpytop/logo.png"
}
diff --git a/content/programs/brave/logo.png b/content/programs/brave/logo.png
new file mode 100644
index 0000000..3c7f468
--- /dev/null
+++ b/content/programs/brave/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/broot/logo.png b/content/programs/broot/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/broot/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/broot/program.json b/content/programs/broot/program.json
index 4da5a37..c3ca3d6 100644
--- a/content/programs/broot/program.json
+++ b/content/programs/broot/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/broot/logo.png"
+}
diff --git a/content/programs/bspwm/logo.png b/content/programs/bspwm/logo.png
new file mode 100644
index 0000000..96e586e
--- /dev/null
+++ b/content/programs/bspwm/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/btop/logo.png b/content/programs/btop/logo.png
new file mode 100644
index 0000000..7e9cb7b
Binary files /dev/null and b/content/programs/btop/logo.png differ
diff --git a/content/programs/btop/program.json b/content/programs/btop/program.json
index fb3a197..ecd90d3 100644
--- a/content/programs/btop/program.json
+++ b/content/programs/btop/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/aristocratos/btop",
"git_repo": "https://github.com/aristocratos/btop",
"license": "Apache-2.0",
- "categories": ["system", "terminal"],
+ "categories": [
+ "system",
+ "terminal"
+ ],
"package_names": {
"default": "btop",
"arch": "btop",
@@ -15,5 +18,6 @@
"opensuse": "btop",
"void": "btop",
"alpine": "btop"
- }
+ },
+ "logo": "/programs/btop/logo.png"
}
diff --git a/content/programs/bumblebee-status/logo.png b/content/programs/bumblebee-status/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/bumblebee-status/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/bumblebee-status/program.json b/content/programs/bumblebee-status/program.json
index 238bc09..791a517 100644
--- a/content/programs/bumblebee-status/program.json
+++ b/content/programs/bumblebee-status/program.json
@@ -5,8 +5,12 @@
"website": "https://github.com/tobi-wan-kenobi/bumblebee-status",
"git_repo": "https://github.com/tobi-wan-kenobi/bumblebee-status",
"license": "MIT",
- "categories": ["status-bar"],
- "dependencies": ["pip"],
+ "categories": [
+ "status-bar"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "bumblebee-status",
"arch": "bumblebee-status",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/bumblebee-status/logo.png"
}
diff --git a/content/programs/bup/logo.png b/content/programs/bup/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/bup/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/bup/program.json b/content/programs/bup/program.json
index 65d5651..6ae1445 100644
--- a/content/programs/bup/program.json
+++ b/content/programs/bup/program.json
@@ -5,7 +5,9 @@
"website": "https://github.com/bup/bup",
"git_repo": "https://github.com/bup/bup",
"license": "LGPL-2.0",
- "categories": ["system"],
+ "categories": [
+ "system"
+ ],
"package_names": {
"default": "bup",
"arch": "bup",
@@ -15,5 +17,6 @@
"opensuse": "bup",
"void": "bup",
"alpine": "bup"
- }
+ },
+ "logo": "/programs/bup/logo.png"
}
diff --git a/content/programs/calcurse/logo.png b/content/programs/calcurse/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/calcurse/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/calcurse/program.json b/content/programs/calcurse/program.json
index b506ed7..211ed3f 100644
--- a/content/programs/calcurse/program.json
+++ b/content/programs/calcurse/program.json
@@ -5,7 +5,10 @@
"website": "https://calcurse.org/",
"git_repo": "https://github.com/lfos/calcurse",
"license": "BSD-2-Clause",
- "categories": ["productivity", "terminal"],
+ "categories": [
+ "productivity",
+ "terminal"
+ ],
"package_names": {
"default": "calcurse",
"arch": "calcurse",
@@ -15,5 +18,6 @@
"opensuse": "calcurse",
"void": "calcurse",
"alpine": "calcurse"
- }
+ },
+ "logo": "/programs/calcurse/logo.png"
}
diff --git a/content/programs/cargo/logo.png b/content/programs/cargo/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/cargo/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/cava/logo.png b/content/programs/cava/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/cava/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/cava/program.json b/content/programs/cava/program.json
index 1f03e1d..00b085e 100644
--- a/content/programs/cava/program.json
+++ b/content/programs/cava/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/karlstav/cava",
"git_repo": "https://github.com/karlstav/cava",
"license": "MIT",
- "categories": ["audio", "terminal"],
+ "categories": [
+ "audio",
+ "terminal"
+ ],
"package_names": {
"default": "cava",
"arch": "cava",
@@ -15,5 +18,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "cava",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/cava/logo.png"
}
diff --git a/content/programs/cbonsai/logo.png b/content/programs/cbonsai/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/cbonsai/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/cbonsai/program.json b/content/programs/cbonsai/program.json
index 3c097b9..bae4beb 100644
--- a/content/programs/cbonsai/program.json
+++ b/content/programs/cbonsai/program.json
@@ -5,8 +5,13 @@
"website": "https://gitlab.com/jallbrit/cbonsai",
"git_repo": "https://gitlab.com/jallbrit/cbonsai",
"license": "GPL-3.0",
- "categories": ["fun", "terminal"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "fun",
+ "terminal"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "cbonsai",
"arch": "cbonsai",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/cbonsai/logo.png"
}
diff --git a/content/programs/ccls/program.json b/content/programs/ccls/program.json
index 009832c..abddbf7 100644
--- a/content/programs/ccls/program.json
+++ b/content/programs/ccls/program.json
@@ -4,7 +4,10 @@
"description": "A C/C++/Objective-C language server with clang backend.",
"git_repo": "https://github.com/MaskRay/ccls",
"license": "Apache-2.0",
- "categories": ["development", "lsp"],
+ "categories": [
+ "development",
+ "lsp"
+ ],
"package_names": {
"default": "ccls",
"arch": "ccls",
@@ -14,5 +17,6 @@
"opensuse": "ccls",
"void": "ccls",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/ccls/logo.png"
}
diff --git a/content/programs/clementine/program.json b/content/programs/clementine/program.json
index c1a147b..a6fa174 100644
--- a/content/programs/clementine/program.json
+++ b/content/programs/clementine/program.json
@@ -5,7 +5,10 @@
"website": "https://www.clementine-player.org/",
"git_repo": "https://github.com/clementine-player/Clementine",
"license": "GPL-3.0",
- "categories": ["audio", "music"],
+ "categories": [
+ "audio",
+ "music"
+ ],
"package_names": {
"default": "clementine",
"arch": "clementine",
@@ -15,5 +18,6 @@
"opensuse": "clementine",
"void": "clementine",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/clementine/logo.png"
}
diff --git a/content/programs/cli-visualizer/logo.png b/content/programs/cli-visualizer/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/cli-visualizer/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/cli-visualizer/program.json b/content/programs/cli-visualizer/program.json
index 074ae1b..ddf2f01 100644
--- a/content/programs/cli-visualizer/program.json
+++ b/content/programs/cli-visualizer/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/dpayne/cli-visualizer",
"git_repo": "https://github.com/dpayne/cli-visualizer",
"license": "MIT",
- "categories": ["audio", "terminal"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "audio",
+ "terminal"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "cli-visualizer",
"arch": "cli-visualizer",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/cli-visualizer/logo.png"
}
diff --git a/content/programs/clifm/logo.png b/content/programs/clifm/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/clifm/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/clifm/program.json b/content/programs/clifm/program.json
index a753429..74f21a3 100644
--- a/content/programs/clifm/program.json
+++ b/content/programs/clifm/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/leo-arch/clifm",
"git_repo": "https://github.com/leo-arch/clifm",
"license": "GPL-2.0",
- "categories": ["file-manager", "terminal"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "file-manager",
+ "terminal"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "clifm",
"arch": "clifm",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/clifm/logo.png"
}
diff --git a/content/programs/clipmenu/logo.png b/content/programs/clipmenu/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/clipmenu/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/clipmenu/program.json b/content/programs/clipmenu/program.json
index 612efd4..d230e65 100644
--- a/content/programs/clipmenu/program.json
+++ b/content/programs/clipmenu/program.json
@@ -20,5 +20,6 @@
},
"dependencies": [
"git"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/clipmenu/logo.png"
+}
diff --git a/content/programs/clipmenud/logo.png b/content/programs/clipmenud/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/clipmenud/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/clipmenud/program.json b/content/programs/clipmenud/program.json
index c311fa1..091bf66 100644
--- a/content/programs/clipmenud/program.json
+++ b/content/programs/clipmenud/program.json
@@ -20,5 +20,6 @@
},
"dependencies": [
"git"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/clipmenud/logo.png"
+}
diff --git a/content/programs/cmatrix/logo.png b/content/programs/cmatrix/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/cmatrix/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/cmatrix/program.json b/content/programs/cmatrix/program.json
index f98e6cb..e48edf6 100644
--- a/content/programs/cmatrix/program.json
+++ b/content/programs/cmatrix/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/abishekvashok/cmatrix",
"git_repo": "https://github.com/abishekvashok/cmatrix",
"license": "GPL-2.0",
- "categories": ["fun", "terminal"],
+ "categories": [
+ "fun",
+ "terminal"
+ ],
"package_names": {
"default": "cmatrix",
"arch": "cmatrix",
@@ -15,5 +18,6 @@
"opensuse": "cmatrix",
"void": "cmatrix",
"alpine": "cmatrix"
- }
+ },
+ "logo": "/programs/cmatrix/logo.png"
}
diff --git a/content/programs/cmus/program.json b/content/programs/cmus/program.json
index 1afd05f..d18fd19 100644
--- a/content/programs/cmus/program.json
+++ b/content/programs/cmus/program.json
@@ -5,7 +5,10 @@
"website": "https://cmus.github.io/",
"git_repo": "https://github.com/cmus/cmus",
"license": "GPL-2.0",
- "categories": ["audio", "terminal"],
+ "categories": [
+ "audio",
+ "terminal"
+ ],
"package_names": {
"default": "cmus",
"arch": "cmus",
@@ -15,5 +18,6 @@
"opensuse": "cmus",
"void": "cmus",
"alpine": "cmus"
- }
+ },
+ "logo": "/programs/cmus/logo.png"
}
diff --git a/content/programs/code/program.json b/content/programs/code/program.json
index 3951f04..b60224f 100644
--- a/content/programs/code/program.json
+++ b/content/programs/code/program.json
@@ -5,8 +5,13 @@
"website": "https://code.visualstudio.com/",
"git_repo": "https://github.com/microsoft/vscode",
"license": "MIT",
- "categories": ["editor", "development"],
- "dependencies": ["curl"],
+ "categories": [
+ "editor",
+ "development"
+ ],
+ "dependencies": [
+ "curl"
+ ],
"package_names": {
"default": "code",
"arch": "code",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/code/logo.png"
}
diff --git a/content/programs/conda/logo.png b/content/programs/conda/logo.png
new file mode 100644
index 0000000..45f7bd1
--- /dev/null
+++ b/content/programs/conda/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/conda/program.json b/content/programs/conda/program.json
index b4c81cf..dc0a0a9 100644
--- a/content/programs/conda/program.json
+++ b/content/programs/conda/program.json
@@ -12,7 +12,13 @@
],
"package_names": {
"default": "CUSTOM_INSTALL",
- "arch": "conda"
+ "arch": "conda",
+ "alpine": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL"
},
"logo": "/programs/conda/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/conky/logo.png b/content/programs/conky/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/conky/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/conky/program.json b/content/programs/conky/program.json
index 992ea04..cad654b 100644
--- a/content/programs/conky/program.json
+++ b/content/programs/conky/program.json
@@ -4,7 +4,10 @@
"description": "A lightweight, highly configurable system monitor.",
"git_repo": "https://github.com/brndnmtthws/conky",
"license": "GPL-3.0",
- "categories": ["system", "x11"],
+ "categories": [
+ "system",
+ "x11"
+ ],
"package_names": {
"default": "conky",
"arch": "conky",
@@ -14,5 +17,6 @@
"opensuse": "conky",
"void": "conky",
"alpine": "conky"
- }
+ },
+ "logo": "/programs/conky/logo.png"
}
diff --git a/content/programs/cool-retro-term/custom_install/install.sh b/content/programs/cool-retro-term/custom_install/install.sh
new file mode 100644
index 0000000..f77d860
--- /dev/null
+++ b/content/programs/cool-retro-term/custom_install/install.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+set -e
+# cool-retro-term requires Qt5
+# On Void: xbps-install -S qt5-devel qt5-declarative-devel
+# On Alpine: apk add qt5-qtbase-dev qt5-qtdeclarative-dev qt5-qtquickcontrols2-dev
+git clone --depth=1 https://github.com/Swordfish90/cool-retro-term /tmp/cool-retro-term
+cd /tmp/cool-retro-term
+qmake
+make -j$(nproc)
+make install
+rm -rf /tmp/cool-retro-term
diff --git a/content/programs/cool-retro-term/logo.png b/content/programs/cool-retro-term/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/cool-retro-term/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/cool-retro-term/program.json b/content/programs/cool-retro-term/program.json
index 519d532..1d046f8 100644
--- a/content/programs/cool-retro-term/program.json
+++ b/content/programs/cool-retro-term/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/Swordfish90/cool-retro-term",
"git_repo": "https://github.com/Swordfish90/cool-retro-term",
"license": "GPL-3.0",
- "categories": ["terminal", "fun"],
+ "categories": [
+ "terminal",
+ "fun"
+ ],
"dependencies": [],
"package_names": {
"default": "cool-retro-term",
@@ -16,5 +19,6 @@
"opensuse": "cool-retro-term",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/cool-retro-term/logo.png"
}
diff --git a/content/programs/cowsay/logo.png b/content/programs/cowsay/logo.png
new file mode 100644
index 0000000..254e862
--- /dev/null
+++ b/content/programs/cowsay/logo.png
@@ -0,0 +1,41 @@
+
+
+
+Wikimedia Error
+
+
+
+
+
+
+
Error
+
+
Use thumbnail sizes listed on https://w.wiki/GHai
+
+
+
+
diff --git a/content/programs/cowsay/program.json b/content/programs/cowsay/program.json
index 4a9900e..bfe70d1 100644
--- a/content/programs/cowsay/program.json
+++ b/content/programs/cowsay/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/piuccio/cowsay",
"git_repo": "https://github.com/piuccio/cowsay",
"license": "GPL-3.0",
- "categories": ["fun", "terminal"],
+ "categories": [
+ "fun",
+ "terminal"
+ ],
"package_names": {
"default": "cowsay",
"arch": "cowsay",
@@ -15,5 +18,6 @@
"opensuse": "cowsay",
"void": "cowsay",
"alpine": "cowsay"
- }
+ },
+ "logo": "/programs/cowsay/logo.png"
}
diff --git a/content/programs/cpu-x/custom_install/install.sh b/content/programs/cpu-x/custom_install/install.sh
new file mode 100755
index 0000000..1267992
--- /dev/null
+++ b/content/programs/cpu-x/custom_install/install.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+set -e
+echo "Installing CPU-X via Flatpak..."
+if command -v flatpak &>/dev/null; then
+ flatpak install -y flathub io.github.thetumultuousunicornofdarkness.cpu-x
+else
+ echo "Install flatpak first."
+ exit 1
+fi
diff --git a/content/programs/cpu-x/program.json b/content/programs/cpu-x/program.json
new file mode 100644
index 0000000..2ab039c
--- /dev/null
+++ b/content/programs/cpu-x/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "CPU-X",
+ "slug": "cpu-x",
+ "description": "Free software for gathering detailed CPU and system information.",
+ "website": "https://thetumultuousunicornofdarkness.github.io/CPU-X/",
+ "git_repo": "https://github.com/TheTumultuousUnicornOfDarkness/CPU-X",
+ "license": "GPL-3.0",
+ "categories": [
+ "system",
+ "system-monitor"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "cpu-x",
+ "arch": "cpu-x",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/cpu-x/logo.png"
+}
diff --git a/content/programs/ctop/logo.png b/content/programs/ctop/logo.png
new file mode 100644
index 0000000..e68a661
--- /dev/null
+++ b/content/programs/ctop/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/ctop/program.json b/content/programs/ctop/program.json
index e0f7e74..cd08ddb 100644
--- a/content/programs/ctop/program.json
+++ b/content/programs/ctop/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"golang"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/ctop/logo.png"
+}
diff --git a/content/programs/curl/logo.png b/content/programs/curl/logo.png
new file mode 100644
index 0000000..5788acc
--- /dev/null
+++ b/content/programs/curl/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/darktable/program.json b/content/programs/darktable/program.json
new file mode 100644
index 0000000..f4c6c6c
--- /dev/null
+++ b/content/programs/darktable/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "darktable",
+ "slug": "darktable",
+ "description": "Open source photography workflow and RAW developer.",
+ "website": "https://www.darktable.org/",
+ "git_repo": "https://github.com/darktable-org/darktable",
+ "license": "GPL-3.0+",
+ "categories": [
+ "media",
+ "image-processing"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "darktable",
+ "arch": "darktable",
+ "ubuntu": "darktable",
+ "debian": "darktable",
+ "fedora": "darktable",
+ "opensuse": "darktable",
+ "void": "darktable",
+ "alpine": "darktable"
+ },
+ "logo": "/programs/darktable/logo.png"
+}
diff --git a/content/programs/dbeaver/logo.png b/content/programs/dbeaver/logo.png
new file mode 100644
index 0000000..03f175b
--- /dev/null
+++ b/content/programs/dbeaver/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/dbus/logo.png b/content/programs/dbus/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/dbus/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/dbus/program.json b/content/programs/dbus/program.json
index 87d472f..f8cf415 100644
--- a/content/programs/dbus/program.json
+++ b/content/programs/dbus/program.json
@@ -4,7 +4,9 @@
"description": "A message bus system for inter-process communication.",
"website": "https://www.freedesktop.org/wiki/Software/dbus/",
"license": "GPL-2.0",
- "categories": ["system"],
+ "categories": [
+ "system"
+ ],
"package_names": {
"default": "dbus",
"arch": "dbus",
@@ -14,5 +16,6 @@
"opensuse": "dbus-1",
"void": "dbus",
"alpine": "dbus"
- }
+ },
+ "logo": "/programs/dbus/logo.png"
}
diff --git a/content/programs/delta/logo.png b/content/programs/delta/logo.png
new file mode 100644
index 0000000..20aecad
--- /dev/null
+++ b/content/programs/delta/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/delta/program.json b/content/programs/delta/program.json
index fc794f9..e2292cd 100644
--- a/content/programs/delta/program.json
+++ b/content/programs/delta/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/delta/logo.png"
+}
diff --git a/content/programs/digikam/logo.png b/content/programs/digikam/logo.png
new file mode 100644
index 0000000..91a46b8
--- /dev/null
+++ b/content/programs/digikam/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/digikam/program.json b/content/programs/digikam/program.json
index 282c681..b38e495 100644
--- a/content/programs/digikam/program.json
+++ b/content/programs/digikam/program.json
@@ -4,7 +4,9 @@
"description": "Free and open source digital photo management application.",
"website": "https://www.digikam.org/",
"license": "GPL-2.0",
- "categories": ["image-processing"],
+ "categories": [
+ "image-processing"
+ ],
"package_names": {
"default": "digikam",
"arch": "digikam",
@@ -14,5 +16,6 @@
"opensuse": "digikam",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/digikam/logo.png"
}
diff --git a/content/programs/direnv/program.json b/content/programs/direnv/program.json
index 1bba93a..58eeedf 100644
--- a/content/programs/direnv/program.json
+++ b/content/programs/direnv/program.json
@@ -5,7 +5,10 @@
"website": "https://direnv.net/",
"git_repo": "https://github.com/direnv/direnv",
"license": "MIT",
- "categories": ["terminal", "system"],
+ "categories": [
+ "terminal",
+ "system"
+ ],
"package_names": {
"default": "direnv",
"arch": "direnv",
@@ -15,5 +18,6 @@
"opensuse": "direnv",
"void": "direnv",
"alpine": "direnv"
- }
+ },
+ "logo": "/programs/direnv/logo.png"
}
diff --git a/content/programs/discord/logo.png b/content/programs/discord/logo.png
new file mode 100644
index 0000000..ef25142
--- /dev/null
+++ b/content/programs/discord/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/distrobox/logo.png b/content/programs/distrobox/logo.png
new file mode 100644
index 0000000..5721634
--- /dev/null
+++ b/content/programs/distrobox/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/distrobox/program.json b/content/programs/distrobox/program.json
new file mode 100644
index 0000000..1f27776
--- /dev/null
+++ b/content/programs/distrobox/program.json
@@ -0,0 +1,26 @@
+{
+ "name": "Distrobox",
+ "slug": "distrobox",
+ "description": "Use any Linux distribution inside your terminal.",
+ "website": "https://distrobox.it/",
+ "git_repo": "https://github.com/89luca89/distrobox",
+ "license": "GPL-3.0",
+ "categories": [
+ "devops",
+ "development"
+ ],
+ "dependencies": [
+ "podman"
+ ],
+ "package_names": {
+ "default": "distrobox",
+ "arch": "distrobox",
+ "ubuntu": "distrobox",
+ "debian": "distrobox",
+ "fedora": "distrobox",
+ "opensuse": "distrobox",
+ "void": "distrobox",
+ "alpine": "distrobox"
+ },
+ "logo": "/programs/distrobox/logo.png"
+}
diff --git a/content/programs/dmenu/logo.png b/content/programs/dmenu/logo.png
new file mode 100644
index 0000000..d6f1dc9
--- /dev/null
+++ b/content/programs/dmenu/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/dmenu/program.json b/content/programs/dmenu/program.json
index ef5a22c..d4a3009 100644
--- a/content/programs/dmenu/program.json
+++ b/content/programs/dmenu/program.json
@@ -4,7 +4,10 @@
"description": "A fast and lightweight dynamic menu for X.",
"website": "https://tools.suckless.org/dmenu/",
"license": "MIT",
- "categories": ["launcher", "x11"],
+ "categories": [
+ "launcher",
+ "x11"
+ ],
"package_names": {
"default": "dmenu",
"arch": "dmenu",
@@ -14,5 +17,6 @@
"opensuse": "dmenu",
"void": "dmenu",
"alpine": "dmenu"
- }
+ },
+ "logo": "/programs/dmenu/logo.png"
}
diff --git a/content/programs/doas/logo.png b/content/programs/doas/logo.png
new file mode 100644
index 0000000..01ebf31
--- /dev/null
+++ b/content/programs/doas/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/doas/program.json b/content/programs/doas/program.json
index 13bf796..5531563 100644
--- a/content/programs/doas/program.json
+++ b/content/programs/doas/program.json
@@ -4,7 +4,10 @@
"description": "A minimal alternative to sudo from OpenBSD.",
"git_repo": "https://github.com/Duncaen/OpenDoas",
"license": "ISC",
- "categories": ["system", "security"],
+ "categories": [
+ "system",
+ "security"
+ ],
"package_names": {
"default": "opendoas",
"arch": "opendoas",
@@ -14,5 +17,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "opendoas",
"alpine": "doas"
- }
+ },
+ "logo": "/programs/doas/logo.png"
}
diff --git a/content/programs/docker/logo.png b/content/programs/docker/logo.png
new file mode 100644
index 0000000..e68a661
--- /dev/null
+++ b/content/programs/docker/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/dolphin/logo.png b/content/programs/dolphin/logo.png
new file mode 100644
index 0000000..3ac68f0
--- /dev/null
+++ b/content/programs/dolphin/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/dolphin/program.json b/content/programs/dolphin/program.json
new file mode 100644
index 0000000..64b8716
--- /dev/null
+++ b/content/programs/dolphin/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "Dolphin",
+ "slug": "dolphin",
+ "description": "KDE's powerful and user-friendly file manager.",
+ "website": "https://apps.kde.org/dolphin/",
+ "git_repo": "https://invent.kde.org/system/dolphin",
+ "license": "GPL-2.0+",
+ "categories": [
+ "file-manager"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "dolphin",
+ "arch": "dolphin",
+ "ubuntu": "dolphin",
+ "debian": "dolphin",
+ "fedora": "dolphin",
+ "opensuse": "dolphin",
+ "void": "dolphin",
+ "alpine": "dolphin"
+ },
+ "logo": "/programs/dolphin/logo.png"
+}
diff --git a/content/programs/doom-emacs/program.json b/content/programs/doom-emacs/program.json
index f697aa5..47cc741 100644
--- a/content/programs/doom-emacs/program.json
+++ b/content/programs/doom-emacs/program.json
@@ -14,7 +14,14 @@
"fd"
],
"package_names": {
- "default": "CUSTOM_INSTALL"
+ "default": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL",
+ "arch": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL"
},
"logo": "/programs/doom-emacs/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/dropbox/logo.png b/content/programs/dropbox/logo.png
new file mode 100644
index 0000000..2fc2686
--- /dev/null
+++ b/content/programs/dropbox/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/duf/logo.png b/content/programs/duf/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/duf/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/duf/program.json b/content/programs/duf/program.json
index 295f4c0..336e26a 100644
--- a/content/programs/duf/program.json
+++ b/content/programs/duf/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/muesli/duf",
"git_repo": "https://github.com/muesli/duf",
"license": "MIT",
- "categories": ["system", "terminal"],
+ "categories": [
+ "system",
+ "terminal"
+ ],
"package_names": {
"default": "duf",
"arch": "duf",
@@ -15,5 +18,6 @@
"opensuse": "duf",
"void": "duf",
"alpine": "duf"
- }
+ },
+ "logo": "/programs/duf/logo.png"
}
diff --git a/content/programs/dunst/logo.png b/content/programs/dunst/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/dunst/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/dunst/program.json b/content/programs/dunst/program.json
index 9443690..cac819c 100644
--- a/content/programs/dunst/program.json
+++ b/content/programs/dunst/program.json
@@ -5,7 +5,10 @@
"website": "https://dunst-project.org/",
"git_repo": "https://github.com/dunst-project/dunst",
"license": "BSD-3-Clause",
- "categories": ["x11", "system"],
+ "categories": [
+ "x11",
+ "system"
+ ],
"package_names": {
"default": "dunst",
"arch": "dunst",
@@ -15,5 +18,6 @@
"opensuse": "dunst",
"void": "dunst",
"alpine": "dunst"
- }
+ },
+ "logo": "/programs/dunst/logo.png"
}
diff --git a/content/programs/duplicity/logo.png b/content/programs/duplicity/logo.png
new file mode 100644
index 0000000..e8664b6
--- /dev/null
+++ b/content/programs/duplicity/logo.png
@@ -0,0 +1,88 @@
+
+
+
+
+Not Found
+
+
+
+
+
+
+
+
+
+

+
+404: Page not found
+
+
+Make sure the address is correct and the page has not moved.
+Please contact your GitLab administrator if you think this is a mistake.
+
+
+
+
+
+
+
+
+
diff --git a/content/programs/duplicity/program.json b/content/programs/duplicity/program.json
index 957d2b0..9ad814d 100644
--- a/content/programs/duplicity/program.json
+++ b/content/programs/duplicity/program.json
@@ -5,7 +5,9 @@
"website": "http://duplicity.nongnu.org/",
"git_repo": "https://gitlab.com/duplicity/duplicity",
"license": "GPL-2.0",
- "categories": ["system"],
+ "categories": [
+ "system"
+ ],
"package_names": {
"default": "duplicity",
"arch": "duplicity",
@@ -15,5 +17,6 @@
"opensuse": "duplicity",
"void": "duplicity",
"alpine": "duplicity"
- }
+ },
+ "logo": "/programs/duplicity/logo.png"
}
diff --git a/content/programs/dust/logo.png b/content/programs/dust/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/dust/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/dust/program.json b/content/programs/dust/program.json
index 376dd15..a573033 100644
--- a/content/programs/dust/program.json
+++ b/content/programs/dust/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/dust/logo.png"
+}
diff --git a/content/programs/dwm/logo.png b/content/programs/dwm/logo.png
new file mode 100644
index 0000000..f77d1a8
--- /dev/null
+++ b/content/programs/dwm/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/dwm/program.json b/content/programs/dwm/program.json
index fd9d0f2..9fba9cc 100644
--- a/content/programs/dwm/program.json
+++ b/content/programs/dwm/program.json
@@ -4,8 +4,12 @@
"description": "Dynamic window manager for X, extremely small and fast.",
"website": "https://dwm.suckless.org/",
"license": "MIT",
- "categories": ["window-manager"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "window-manager"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "dwm",
"arch": "dwm",
@@ -15,5 +19,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "dwm",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/dwm/logo.png"
}
diff --git a/content/programs/eclipse/logo.png b/content/programs/eclipse/logo.png
new file mode 100644
index 0000000..f4bfb81
--- /dev/null
+++ b/content/programs/eclipse/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/eclipse/program.json b/content/programs/eclipse/program.json
index 2685203..1a6fe17 100644
--- a/content/programs/eclipse/program.json
+++ b/content/programs/eclipse/program.json
@@ -14,7 +14,7 @@
],
"package_names": {
"default": "eclipse-java",
- "arch": "eclipse-java",
+ "arch": "CUSTOM_INSTALL",
"ubuntu": "CUSTOM_INSTALL",
"debian": "CUSTOM_INSTALL",
"fedora": "eclipse",
@@ -23,4 +23,4 @@
"alpine": "CUSTOM_INSTALL"
},
"logo": "/programs/eclipse/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/elfeed/program.json b/content/programs/elfeed/program.json
index 6a727ff..f5735d7 100644
--- a/content/programs/elfeed/program.json
+++ b/content/programs/elfeed/program.json
@@ -11,7 +11,14 @@
"emacs"
],
"package_names": {
- "default": "CUSTOM_INSTALL"
+ "default": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL",
+ "arch": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL"
},
"logo": "/programs/elfeed/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/elinks/program.json b/content/programs/elinks/program.json
index 77fd68e..6754b1c 100644
--- a/content/programs/elinks/program.json
+++ b/content/programs/elinks/program.json
@@ -4,7 +4,10 @@
"description": "An advanced text-mode web browser.",
"git_repo": "https://github.com/rkd77/elinks",
"license": "GPL-2.0",
- "categories": ["browser", "terminal"],
+ "categories": [
+ "browser",
+ "terminal"
+ ],
"package_names": {
"default": "elinks",
"arch": "elinks",
@@ -14,5 +17,6 @@
"opensuse": "elinks",
"void": "elinks",
"alpine": "elinks"
- }
+ },
+ "logo": "/programs/elinks/logo.png"
}
diff --git a/content/programs/entr/logo.png b/content/programs/entr/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/entr/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/entr/program.json b/content/programs/entr/program.json
index 575e0e1..f7808f7 100644
--- a/content/programs/entr/program.json
+++ b/content/programs/entr/program.json
@@ -5,7 +5,10 @@
"website": "https://eradman.com/entrproject/",
"git_repo": "https://github.com/eradman/entr",
"license": "ISC",
- "categories": ["terminal", "system"],
+ "categories": [
+ "terminal",
+ "system"
+ ],
"package_names": {
"default": "entr",
"arch": "entr",
@@ -15,5 +18,6 @@
"opensuse": "entr",
"void": "entr",
"alpine": "entr"
- }
+ },
+ "logo": "/programs/entr/logo.png"
}
diff --git a/content/programs/etcher/custom_install/install.sh b/content/programs/etcher/custom_install/install.sh
new file mode 100755
index 0000000..b67a044
--- /dev/null
+++ b/content/programs/etcher/custom_install/install.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -e
+echo "Installing balenaEtcher via AppImage..."
+LATEST_URL=$(curl -s https://api.github.com/repos/balena-io/etcher/releases/latest 2>/dev/null | grep browser_download_url | grep AppImage | grep x64 | cut -d '"' -f4 | head -1)
+if [ -z "$LATEST_URL" ]; then
+ echo "Could not find latest AppImage. Install via flatpak: flatpak install flathub io.balena.etcher"
+ exit 1
+fi
+mkdir -p ~/Applications
+curl -L -o ~/Applications/balenaEtcher.AppImage "$LATEST_URL"
+chmod +x ~/Applications/balenaEtcher.AppImage
+echo "balenaEtcher installed to ~/Applications/"
diff --git a/content/programs/etcher/logo.png b/content/programs/etcher/logo.png
new file mode 100644
index 0000000..7d0e612
Binary files /dev/null and b/content/programs/etcher/logo.png differ
diff --git a/content/programs/etcher/program.json b/content/programs/etcher/program.json
new file mode 100644
index 0000000..285b8a8
--- /dev/null
+++ b/content/programs/etcher/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "balenaEtcher",
+ "slug": "etcher",
+ "description": "Flash OS images to SD cards & USB drives, safely.",
+ "website": "https://etcher.balena.io/",
+ "git_repo": "https://github.com/balena-io/etcher",
+ "license": "Apache-2.0",
+ "categories": [
+ "devops",
+ "system"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "etcher",
+ "arch": "etcher-bin",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/etcher/logo.png"
+}
diff --git a/content/programs/evince/program.json b/content/programs/evince/program.json
new file mode 100644
index 0000000..93d54a4
--- /dev/null
+++ b/content/programs/evince/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Evince",
+ "slug": "evince",
+ "description": "GNOME document viewer for PDF, PostScript, and more.",
+ "website": "https://wiki.gnome.org/Apps/Evince",
+ "git_repo": "https://gitlab.gnome.org/GNOME/evince",
+ "license": "GPL-2.0+",
+ "categories": [
+ "document-viewer",
+ "office"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "evince",
+ "arch": "evince",
+ "ubuntu": "evince",
+ "debian": "evince",
+ "fedora": "evince",
+ "opensuse": "evince",
+ "void": "evince",
+ "alpine": "evince"
+ },
+ "logo": "/programs/evince/logo.png"
+}
diff --git a/content/programs/eww/logo.png b/content/programs/eww/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/eww/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/eww/program.json b/content/programs/eww/program.json
index 18101cf..94b0552 100644
--- a/content/programs/eww/program.json
+++ b/content/programs/eww/program.json
@@ -1,12 +1,16 @@
{
"name": "eww",
"slug": "eww",
- "description": "ElKowar's wacky widgets — desktop widget system.",
+ "description": "ElKowar's wacky widgets \u2014 desktop widget system.",
"website": "https://elkowar.github.io/eww/",
"git_repo": "https://github.com/elkowar/eww",
"license": "MIT",
- "categories": ["status-bar"],
- "dependencies": ["cargo"],
+ "categories": [
+ "status-bar"
+ ],
+ "dependencies": [
+ "cargo"
+ ],
"package_names": {
"default": "eww",
"arch": "eww",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/eww/logo.png"
}
diff --git a/content/programs/exa/program.json b/content/programs/exa/program.json
index 39f58ba..7b4e0e7 100644
--- a/content/programs/exa/program.json
+++ b/content/programs/exa/program.json
@@ -4,7 +4,9 @@
"description": "A modern replacement for ls with colors and extra features.",
"git_repo": "https://github.com/ogham/exa",
"license": "MIT",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "exa",
"arch": "exa",
@@ -14,5 +16,6 @@
"opensuse": "exa",
"void": "exa",
"alpine": "exa"
- }
+ },
+ "logo": "/programs/exa/logo.png"
}
diff --git a/content/programs/eza/program.json b/content/programs/eza/program.json
new file mode 100644
index 0000000..af0ee70
--- /dev/null
+++ b/content/programs/eza/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "eza",
+ "slug": "eza",
+ "description": "Modern replacement for ls, written in Rust (exa successor).",
+ "website": "https://eza.rocks/",
+ "git_repo": "https://github.com/eza-community/eza",
+ "license": "MIT",
+ "categories": [
+ "cli",
+ "file-management"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "eza",
+ "arch": "eza",
+ "ubuntu": "eza",
+ "debian": "eza",
+ "fedora": "eza",
+ "opensuse": "eza",
+ "void": "eza",
+ "alpine": "eza"
+ },
+ "logo": "/programs/eza/logo.png"
+}
diff --git a/content/programs/fastfetch/logo.png b/content/programs/fastfetch/logo.png
new file mode 100644
index 0000000..1becba2
--- /dev/null
+++ b/content/programs/fastfetch/logo.png
@@ -0,0 +1 @@
+404: Not Found
\ No newline at end of file
diff --git a/content/programs/fastfetch/program.json b/content/programs/fastfetch/program.json
index a3a3bed..7a0c34a 100644
--- a/content/programs/fastfetch/program.json
+++ b/content/programs/fastfetch/program.json
@@ -22,5 +22,6 @@
"dependencies": [
"git-dep",
"cmake"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/fastfetch/logo.png"
+}
diff --git a/content/programs/fd/program.json b/content/programs/fd/program.json
index d6c6d83..c23020d 100644
--- a/content/programs/fd/program.json
+++ b/content/programs/fd/program.json
@@ -4,7 +4,9 @@
"description": "A simple, fast and user-friendly alternative to find.",
"git_repo": "https://github.com/sharkdp/fd",
"license": "MIT/Apache-2.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "fd-find",
"arch": "fd",
@@ -14,5 +16,6 @@
"opensuse": "fd",
"void": "fd",
"alpine": "fd"
- }
+ },
+ "logo": "/programs/fd/logo.png"
}
diff --git a/content/programs/feh/logo.png b/content/programs/feh/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/feh/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/feh/program.json b/content/programs/feh/program.json
index 073920f..2229c5e 100644
--- a/content/programs/feh/program.json
+++ b/content/programs/feh/program.json
@@ -4,7 +4,10 @@
"description": "A fast, lightweight image viewer for the terminal and X.",
"git_repo": "https://github.com/derf/feh",
"license": "MIT",
- "categories": ["viewer", "x11"],
+ "categories": [
+ "viewer",
+ "x11"
+ ],
"package_names": {
"default": "feh",
"arch": "feh",
@@ -14,5 +17,6 @@
"opensuse": "feh",
"void": "feh",
"alpine": "feh"
- }
+ },
+ "logo": "/programs/feh/logo.png"
}
diff --git a/content/programs/fff/logo.png b/content/programs/fff/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/fff/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/fff/program.json b/content/programs/fff/program.json
index b506cd9..fd0b0e2 100644
--- a/content/programs/fff/program.json
+++ b/content/programs/fff/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/dylanaraps/fff",
"git_repo": "https://github.com/dylanaraps/fff",
"license": "MIT",
- "categories": ["file-manager", "terminal"],
- "dependencies": ["curl"],
+ "categories": [
+ "file-manager",
+ "terminal"
+ ],
+ "dependencies": [
+ "curl"
+ ],
"package_names": {
"default": "fff",
"arch": "fff",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/fff/logo.png"
}
diff --git a/content/programs/ffmpeg/logo.png b/content/programs/ffmpeg/logo.png
new file mode 100644
index 0000000..01392ce
--- /dev/null
+++ b/content/programs/ffmpeg/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/figlet/logo.png b/content/programs/figlet/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/figlet/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/figlet/program.json b/content/programs/figlet/program.json
index 6f8a7be..b9944d8 100644
--- a/content/programs/figlet/program.json
+++ b/content/programs/figlet/program.json
@@ -4,7 +4,10 @@
"description": "Program for making large letters out of ordinary text.",
"website": "http://www.figlet.org/",
"license": "Artistic",
- "categories": ["fun", "terminal"],
+ "categories": [
+ "fun",
+ "terminal"
+ ],
"package_names": {
"default": "figlet",
"arch": "figlet",
@@ -14,5 +17,6 @@
"opensuse": "figlet",
"void": "figlet",
"alpine": "figlet"
- }
+ },
+ "logo": "/programs/figlet/logo.png"
}
diff --git a/content/programs/firefox/logo.png b/content/programs/firefox/logo.png
new file mode 100644
index 0000000..b32c6a4
--- /dev/null
+++ b/content/programs/firefox/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/fish/logo.png b/content/programs/fish/logo.png
new file mode 100644
index 0000000..5de4d52
--- /dev/null
+++ b/content/programs/fish/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/flameshot/program.json b/content/programs/flameshot/program.json
new file mode 100644
index 0000000..0abc1c1
--- /dev/null
+++ b/content/programs/flameshot/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "Flameshot",
+ "slug": "flameshot",
+ "description": "Powerful yet simple to use screenshot software.",
+ "website": "https://flameshot.org/",
+ "git_repo": "https://github.com/flameshot-org/flameshot",
+ "license": "GPL-3.0",
+ "categories": [
+ "screenshot"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "flameshot",
+ "arch": "flameshot",
+ "ubuntu": "flameshot",
+ "debian": "flameshot",
+ "fedora": "flameshot",
+ "opensuse": "flameshot",
+ "void": "flameshot",
+ "alpine": "flameshot"
+ },
+ "logo": "/programs/flameshot/logo.png"
+}
diff --git a/content/programs/flatpak/logo.png b/content/programs/flatpak/logo.png
new file mode 100644
index 0000000..a73cba0
--- /dev/null
+++ b/content/programs/flatpak/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/flatpak/program.json b/content/programs/flatpak/program.json
new file mode 100644
index 0000000..ac2c73b
--- /dev/null
+++ b/content/programs/flatpak/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "Flatpak",
+ "slug": "flatpak",
+ "description": "Next-generation app distribution and sandboxing for Linux.",
+ "website": "https://flatpak.org/",
+ "git_repo": "https://github.com/flatpak/flatpak",
+ "license": "LGPL-2.1+",
+ "categories": [
+ "package-manager"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "flatpak",
+ "arch": "flatpak",
+ "ubuntu": "flatpak",
+ "debian": "flatpak",
+ "fedora": "flatpak",
+ "opensuse": "flatpak",
+ "void": "flatpak",
+ "alpine": "flatpak"
+ },
+ "logo": "/programs/flatpak/logo.png"
+}
diff --git a/content/programs/fluxbox/logo.png b/content/programs/fluxbox/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/fluxbox/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/fluxbox/program.json b/content/programs/fluxbox/program.json
index f8eec34..c2ff5c6 100644
--- a/content/programs/fluxbox/program.json
+++ b/content/programs/fluxbox/program.json
@@ -5,7 +5,9 @@
"website": "http://fluxbox.org/",
"git_repo": "https://github.com/fluxbox/fluxbox",
"license": "MIT",
- "categories": ["window-manager"],
+ "categories": [
+ "window-manager"
+ ],
"dependencies": [],
"package_names": {
"default": "fluxbox",
@@ -16,5 +18,6 @@
"opensuse": "fluxbox",
"void": "fluxbox",
"alpine": "fluxbox"
- }
+ },
+ "logo": "/programs/fluxbox/logo.png"
}
diff --git a/content/programs/font-manager/logo.png b/content/programs/font-manager/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/font-manager/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/font-manager/program.json b/content/programs/font-manager/program.json
new file mode 100644
index 0000000..b61c348
--- /dev/null
+++ b/content/programs/font-manager/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "Font Manager",
+ "slug": "font-manager",
+ "description": "Simple font management application for GTK desktop environments.",
+ "website": "https://fontmanager.github.io/",
+ "git_repo": "https://github.com/FontManager/font-manager",
+ "license": "GPL-3.0",
+ "categories": [
+ "system"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "font-manager",
+ "arch": "font-manager",
+ "ubuntu": "font-manager",
+ "debian": "font-manager",
+ "fedora": "font-manager",
+ "opensuse": "font-manager",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/font-manager/logo.png"
+}
diff --git a/content/programs/foot/logo.png b/content/programs/foot/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/foot/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/foot/program.json b/content/programs/foot/program.json
new file mode 100644
index 0000000..a515043
--- /dev/null
+++ b/content/programs/foot/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "foot",
+ "slug": "foot",
+ "description": "Fast, lightweight Wayland terminal emulator.",
+ "website": "https://codeberg.org/dnkl/foot",
+ "git_repo": "https://codeberg.org/dnkl/foot",
+ "license": "MIT",
+ "categories": [
+ "terminal"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "foot",
+ "arch": "foot",
+ "ubuntu": "foot",
+ "debian": "foot",
+ "fedora": "foot",
+ "opensuse": "foot",
+ "void": "foot",
+ "alpine": "foot"
+ },
+ "logo": "/programs/foot/logo.png"
+}
diff --git a/content/programs/fortune/logo.png b/content/programs/fortune/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/fortune/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/fortune/program.json b/content/programs/fortune/program.json
index 02fd08c..f9d27ac 100644
--- a/content/programs/fortune/program.json
+++ b/content/programs/fortune/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/shlomif/fortune-mod",
"git_repo": "https://github.com/shlomif/fortune-mod",
"license": "MIT",
- "categories": ["fun", "terminal"],
+ "categories": [
+ "fun",
+ "terminal"
+ ],
"package_names": {
"default": "fortune",
"arch": "fortune-mod",
@@ -15,5 +18,6 @@
"opensuse": "fortune",
"void": "fortune-mod",
"alpine": "fortune"
- }
+ },
+ "logo": "/programs/fortune/logo.png"
}
diff --git a/content/programs/fsearch/custom_install/install.sh b/content/programs/fsearch/custom_install/install.sh
new file mode 100755
index 0000000..1e624ae
--- /dev/null
+++ b/content/programs/fsearch/custom_install/install.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+set -e
+echo "Installing FSearch via Flatpak..."
+if command -v flatpak &>/dev/null; then
+ flatpak install -y flathub io.github.cboxdoerfer.FSearch
+else
+ echo "Flatpak not found. Install flatpak first."
+ exit 1
+fi
diff --git a/content/programs/fsearch/logo.png b/content/programs/fsearch/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/fsearch/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/fsearch/program.json b/content/programs/fsearch/program.json
new file mode 100644
index 0000000..c74544f
--- /dev/null
+++ b/content/programs/fsearch/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "FSearch",
+ "slug": "fsearch",
+ "description": "Fast file search utility for Unix-like systems, inspired by Everything.",
+ "website": "https://github.com/cboxdoerfer/fsearch",
+ "git_repo": "https://github.com/cboxdoerfer/fsearch",
+ "license": "GPL-2.0+",
+ "categories": [
+ "search",
+ "file-management"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "fsearch",
+ "arch": "fsearch",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/fsearch/logo.png"
+}
diff --git a/content/programs/fzf/program.json b/content/programs/fzf/program.json
index e12cbbd..039179e 100644
--- a/content/programs/fzf/program.json
+++ b/content/programs/fzf/program.json
@@ -4,7 +4,9 @@
"description": "A command-line fuzzy finder for files, history, and more.",
"git_repo": "https://github.com/junegunn/fzf",
"license": "MIT",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "fzf",
"arch": "fzf",
@@ -14,5 +16,6 @@
"opensuse": "fzf",
"void": "fzf",
"alpine": "fzf"
- }
+ },
+ "logo": "/programs/fzf/logo.png"
}
diff --git a/content/programs/gamemode/logo.png b/content/programs/gamemode/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/gamemode/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/gamemode/program.json b/content/programs/gamemode/program.json
new file mode 100644
index 0000000..a63c034
--- /dev/null
+++ b/content/programs/gamemode/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "GameMode",
+ "slug": "gamemode",
+ "description": "Daemon/lib combo to optimize Linux system performance for gaming.",
+ "website": "https://github.com/FeralInteractive/gamemode",
+ "git_repo": "https://github.com/FeralInteractive/gamemode",
+ "license": "BSD-3-Clause",
+ "categories": [
+ "game",
+ "system"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "gamemode",
+ "arch": "gamemode",
+ "ubuntu": "gamemode",
+ "debian": "gamemode",
+ "fedora": "gamemode",
+ "opensuse": "gamemode",
+ "void": "gamemode",
+ "alpine": "gamemode"
+ },
+ "logo": "/programs/gamemode/logo.png"
+}
diff --git a/content/programs/gcc/logo.png b/content/programs/gcc/logo.png
new file mode 100644
index 0000000..edfb29b
--- /dev/null
+++ b/content/programs/gcc/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/genact/logo.png b/content/programs/genact/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/genact/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/genact/program.json b/content/programs/genact/program.json
index 40d473e..0a3e111 100644
--- a/content/programs/genact/program.json
+++ b/content/programs/genact/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/svenstaro/genact",
"git_repo": "https://github.com/svenstaro/genact",
"license": "MIT",
- "categories": ["fun", "terminal"],
- "dependencies": ["cargo"],
+ "categories": [
+ "fun",
+ "terminal"
+ ],
+ "dependencies": [
+ "cargo"
+ ],
"package_names": {
"default": "genact",
"arch": "genact",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/genact/logo.png"
}
diff --git a/content/programs/gh/logo.png b/content/programs/gh/logo.png
new file mode 100644
index 0000000..81920ca
--- /dev/null
+++ b/content/programs/gh/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/gh/program.json b/content/programs/gh/program.json
index 5625448..5fee4d1 100644
--- a/content/programs/gh/program.json
+++ b/content/programs/gh/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"golang"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/gh/logo.png"
+}
diff --git a/content/programs/ghostwriter/program.json b/content/programs/ghostwriter/program.json
index 0281698..e1172cc 100644
--- a/content/programs/ghostwriter/program.json
+++ b/content/programs/ghostwriter/program.json
@@ -5,7 +5,10 @@
"website": "https://ghostwriter.kde.org/",
"git_repo": "https://github.com/KDE/ghostwriter",
"license": "GPL-3.0",
- "categories": ["editor", "markdown"],
+ "categories": [
+ "editor",
+ "markdown"
+ ],
"package_names": {
"default": "ghostwriter",
"arch": "ghostwriter",
@@ -15,5 +18,6 @@
"opensuse": "ghostwriter",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/ghostwriter/logo.png"
}
diff --git a/content/programs/gimp/logo.png b/content/programs/gimp/logo.png
new file mode 100644
index 0000000..784c8fd
--- /dev/null
+++ b/content/programs/gimp/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/git-cola/logo.png b/content/programs/git-cola/logo.png
new file mode 100644
index 0000000..5f19a87
--- /dev/null
+++ b/content/programs/git-cola/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/git-cola/program.json b/content/programs/git-cola/program.json
index 2b321d2..9ce3ce3 100644
--- a/content/programs/git-cola/program.json
+++ b/content/programs/git-cola/program.json
@@ -5,8 +5,13 @@
"website": "https://git-cola.github.io/",
"git_repo": "https://github.com/git-cola/git-cola",
"license": "GPL-2.0",
- "categories": ["development", "version-control"],
- "dependencies": ["pip"],
+ "categories": [
+ "development",
+ "version-control"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "git-cola",
"arch": "git-cola",
@@ -16,5 +21,6 @@
"opensuse": "git-cola",
"void": "git-cola",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/git-cola/logo.png"
}
diff --git a/content/programs/git/logo.png b/content/programs/git/logo.png
new file mode 100644
index 0000000..5f19a87
--- /dev/null
+++ b/content/programs/git/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/gitkraken/logo.png b/content/programs/gitkraken/logo.png
new file mode 100644
index 0000000..709189c
--- /dev/null
+++ b/content/programs/gitkraken/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/gitui/logo.png b/content/programs/gitui/logo.png
new file mode 100644
index 0000000..5f19a87
--- /dev/null
+++ b/content/programs/gitui/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/gitui/program.json b/content/programs/gitui/program.json
index 92ff727..151c98e 100644
--- a/content/programs/gitui/program.json
+++ b/content/programs/gitui/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/gitui/logo.png"
+}
diff --git a/content/programs/glances/logo.png b/content/programs/glances/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/glances/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/glances/program.json b/content/programs/glances/program.json
index 7f80427..10e7568 100644
--- a/content/programs/glances/program.json
+++ b/content/programs/glances/program.json
@@ -5,7 +5,10 @@
"website": "https://nicolargo.github.io/glances/",
"git_repo": "https://github.com/nicolargo/glances",
"license": "LGPL-3.0",
- "categories": ["system", "terminal"],
+ "categories": [
+ "system",
+ "terminal"
+ ],
"package_names": {
"default": "glances",
"arch": "glances",
@@ -15,5 +18,6 @@
"opensuse": "glances",
"void": "glances",
"alpine": "glances"
- }
+ },
+ "logo": "/programs/glances/logo.png"
}
diff --git a/content/programs/glava/logo.png b/content/programs/glava/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/glava/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/glava/program.json b/content/programs/glava/program.json
index 1c7b547..75438d8 100644
--- a/content/programs/glava/program.json
+++ b/content/programs/glava/program.json
@@ -5,8 +5,12 @@
"website": "https://github.com/jarcode-foss/glava",
"git_repo": "https://github.com/jarcode-foss/glava",
"license": "GPL-3.0",
- "categories": ["audio"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "audio"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "glava",
"arch": "glava",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/glava/logo.png"
}
diff --git a/content/programs/glow/program.json b/content/programs/glow/program.json
index 65aa4e7..f68c386 100644
--- a/content/programs/glow/program.json
+++ b/content/programs/glow/program.json
@@ -14,7 +14,11 @@
"default": "CUSTOM_INSTALL",
"arch": "glow",
"ubuntu": "glow",
- "void": "glow"
+ "void": "glow",
+ "alpine": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL"
},
"logo": "/programs/glow/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/gnome-boxes/logo.png b/content/programs/gnome-boxes/logo.png
new file mode 100644
index 0000000..4d9150f
--- /dev/null
+++ b/content/programs/gnome-boxes/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/gnome-boxes/program.json b/content/programs/gnome-boxes/program.json
index 2e55a37..e05445c 100644
--- a/content/programs/gnome-boxes/program.json
+++ b/content/programs/gnome-boxes/program.json
@@ -5,7 +5,9 @@
"website": "https://apps.gnome.org/Boxes/",
"git_repo": "https://gitlab.gnome.org/GNOME/gnome-boxes",
"license": "GPL-2.0",
- "categories": ["system"],
+ "categories": [
+ "system"
+ ],
"package_names": {
"default": "gnome-boxes",
"arch": "gnome-boxes",
@@ -15,5 +17,6 @@
"opensuse": "gnome-boxes",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/gnome-boxes/logo.png"
}
diff --git a/content/programs/go/logo.png b/content/programs/go/logo.png
new file mode 100644
index 0000000..51990bd
--- /dev/null
+++ b/content/programs/go/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/go/program.json b/content/programs/go/program.json
new file mode 100644
index 0000000..1f4a248
--- /dev/null
+++ b/content/programs/go/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Go",
+ "slug": "go",
+ "description": "Open source programming language by Google.",
+ "website": "https://go.dev/",
+ "git_repo": "https://github.com/golang/go",
+ "license": "BSD-3-Clause",
+ "categories": [
+ "language",
+ "development"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "golang",
+ "arch": "go",
+ "ubuntu": "golang-go",
+ "debian": "golang-go",
+ "fedora": "golang",
+ "opensuse": "go",
+ "void": "go",
+ "alpine": "go"
+ },
+ "logo": "/programs/go/logo.png"
+}
diff --git a/content/programs/gopass/program.json b/content/programs/gopass/program.json
index 905bbaa..11ed8db 100644
--- a/content/programs/gopass/program.json
+++ b/content/programs/gopass/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"golang"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/gopass/logo.png"
+}
diff --git a/content/programs/gotop/logo.png b/content/programs/gotop/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/gotop/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/gotop/program.json b/content/programs/gotop/program.json
index 9c826c6..b93eebf 100644
--- a/content/programs/gotop/program.json
+++ b/content/programs/gotop/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/cjbassi/gotop",
"git_repo": "https://github.com/cjbassi/gotop",
"license": "MIT",
- "categories": ["system-monitor", "terminal"],
- "dependencies": ["golang"],
+ "categories": [
+ "system-monitor",
+ "terminal"
+ ],
+ "dependencies": [
+ "golang"
+ ],
"package_names": {
"default": "gotop",
"arch": "gotop",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/gotop/logo.png"
}
diff --git a/content/programs/gparted/logo.png b/content/programs/gparted/logo.png
new file mode 100644
index 0000000..4d9150f
--- /dev/null
+++ b/content/programs/gparted/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/gparted/program.json b/content/programs/gparted/program.json
new file mode 100644
index 0000000..5132707
--- /dev/null
+++ b/content/programs/gparted/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "GParted",
+ "slug": "gparted",
+ "description": "GNOME Partition Editor for managing disk partitions.",
+ "website": "https://gparted.org/",
+ "git_repo": "https://gitlab.gnome.org/GNOME/gparted",
+ "license": "GPL-2.0+",
+ "categories": [
+ "system"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "gparted",
+ "arch": "gparted",
+ "ubuntu": "gparted",
+ "debian": "gparted",
+ "fedora": "gparted",
+ "opensuse": "gparted",
+ "void": "gparted",
+ "alpine": "gparted"
+ },
+ "logo": "/programs/gparted/logo.png"
+}
diff --git a/content/programs/gpick/logo.png b/content/programs/gpick/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/gpick/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/gpick/program.json b/content/programs/gpick/program.json
new file mode 100644
index 0000000..9a58da4
--- /dev/null
+++ b/content/programs/gpick/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Gpick",
+ "slug": "gpick",
+ "description": "Advanced color picker and palette editor.",
+ "website": "http://www.gpick.org/",
+ "git_repo": "https://github.com/thezbyg/gpick",
+ "license": "BSD-3-Clause",
+ "categories": [
+ "image-processing",
+ "development"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "gpick",
+ "arch": "gpick",
+ "ubuntu": "gpick",
+ "debian": "gpick",
+ "fedora": "gpick",
+ "opensuse": "gpick",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/gpick/logo.png"
+}
diff --git a/content/programs/gping/logo.png b/content/programs/gping/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/gping/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/gping/program.json b/content/programs/gping/program.json
index dbb801f..1016618 100644
--- a/content/programs/gping/program.json
+++ b/content/programs/gping/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/gping/logo.png"
+}
diff --git a/content/programs/guake/logo.png b/content/programs/guake/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/guake/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/guake/program.json b/content/programs/guake/program.json
index d891d5f..749aaec 100644
--- a/content/programs/guake/program.json
+++ b/content/programs/guake/program.json
@@ -5,8 +5,12 @@
"website": "http://guake-project.org/",
"git_repo": "https://github.com/Guake/guake",
"license": "GPL-2.0",
- "categories": ["terminal"],
- "dependencies": ["pip"],
+ "categories": [
+ "terminal"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "guake",
"arch": "guake",
@@ -16,5 +20,6 @@
"opensuse": "guake",
"void": "guake",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/guake/logo.png"
}
diff --git a/content/programs/handbrake/program.json b/content/programs/handbrake/program.json
new file mode 100644
index 0000000..614e4a0
--- /dev/null
+++ b/content/programs/handbrake/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "HandBrake",
+ "slug": "handbrake",
+ "description": "Open-source video transcoder.",
+ "website": "https://handbrake.fr/",
+ "git_repo": "https://github.com/HandBrake/HandBrake",
+ "license": "GPL-2.0",
+ "categories": [
+ "media",
+ "media-processing"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "handbrake",
+ "arch": "handbrake",
+ "ubuntu": "handbrake",
+ "debian": "handbrake",
+ "fedora": "handbrake",
+ "opensuse": "handbrake",
+ "void": "handbrake",
+ "alpine": "handbrake"
+ },
+ "logo": "/programs/handbrake/logo.png"
+}
diff --git a/content/programs/helix/logo.png b/content/programs/helix/logo.png
new file mode 100644
index 0000000..059667e
--- /dev/null
+++ b/content/programs/helix/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/herbstluftwm/logo.png b/content/programs/herbstluftwm/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/herbstluftwm/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/herbstluftwm/program.json b/content/programs/herbstluftwm/program.json
index c5e3723..16fa186 100644
--- a/content/programs/herbstluftwm/program.json
+++ b/content/programs/herbstluftwm/program.json
@@ -5,7 +5,9 @@
"website": "https://herbstluftwm.org/",
"git_repo": "https://github.com/herbstluftwm/herbstluftwm",
"license": "BSD-2-Clause",
- "categories": ["window-manager"],
+ "categories": [
+ "window-manager"
+ ],
"dependencies": [],
"package_names": {
"default": "herbstluftwm",
@@ -16,5 +18,6 @@
"opensuse": "herbstluftwm",
"void": "herbstluftwm",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/herbstluftwm/logo.png"
}
diff --git a/content/programs/heroic-games-launcher/custom_install/install.sh b/content/programs/heroic-games-launcher/custom_install/install.sh
new file mode 100755
index 0000000..a4506d9
--- /dev/null
+++ b/content/programs/heroic-games-launcher/custom_install/install.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+set -e
+echo "Installing Heroic Games Launcher via Flatpak..."
+if command -v flatpak &>/dev/null; then
+ flatpak install -y flathub com.heroicgameslauncher.hgl
+else
+ echo "Flatpak not found. Install flatpak first."
+ exit 1
+fi
diff --git a/content/programs/heroic-games-launcher/logo.png b/content/programs/heroic-games-launcher/logo.png
new file mode 100644
index 0000000..079d315
--- /dev/null
+++ b/content/programs/heroic-games-launcher/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/heroic-games-launcher/program.json b/content/programs/heroic-games-launcher/program.json
new file mode 100644
index 0000000..68b8a3e
--- /dev/null
+++ b/content/programs/heroic-games-launcher/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "Heroic Games Launcher",
+ "slug": "heroic-games-launcher",
+ "description": "Open-source Epic Games and GOG launcher.",
+ "website": "https://heroicgameslauncher.com/",
+ "git_repo": "https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher",
+ "license": "GPL-3.0",
+ "categories": [
+ "game"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "heroic-games-launcher",
+ "arch": "heroic-games-launcher-bin",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/heroic-games-launcher/logo.png"
+}
diff --git a/content/programs/hexyl/logo.png b/content/programs/hexyl/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/hexyl/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/hexyl/program.json b/content/programs/hexyl/program.json
index b537729..c94f9ec 100644
--- a/content/programs/hexyl/program.json
+++ b/content/programs/hexyl/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/hexyl/logo.png"
+}
diff --git a/content/programs/htop/logo.png b/content/programs/htop/logo.png
new file mode 100644
index 0000000..60baf85
--- /dev/null
+++ b/content/programs/htop/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/httpie/logo.png b/content/programs/httpie/logo.png
new file mode 100644
index 0000000..ac38a64
--- /dev/null
+++ b/content/programs/httpie/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/httpie/program.json b/content/programs/httpie/program.json
index 9ef6b9f..2ed19fe 100644
--- a/content/programs/httpie/program.json
+++ b/content/programs/httpie/program.json
@@ -11,7 +11,7 @@
],
"package_names": {
"default": "httpie",
- "arch": "python-httpie",
+ "arch": "httpie",
"ubuntu": "httpie",
"debian": "httpie",
"fedora": "httpie",
@@ -23,4 +23,4 @@
"pip"
],
"logo": "/programs/httpie/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/hyper/logo.png b/content/programs/hyper/logo.png
new file mode 100644
index 0000000..d939f0b
--- /dev/null
+++ b/content/programs/hyper/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/hyper/program.json b/content/programs/hyper/program.json
index 3bb6f1f..e596117 100644
--- a/content/programs/hyper/program.json
+++ b/content/programs/hyper/program.json
@@ -5,8 +5,12 @@
"website": "https://hyper.is/",
"git_repo": "https://github.com/vercel/hyper",
"license": "MIT",
- "categories": ["terminal"],
- "dependencies": ["curl"],
+ "categories": [
+ "terminal"
+ ],
+ "dependencies": [
+ "curl"
+ ],
"package_names": {
"default": "hyper",
"arch": "hyper",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/hyper/logo.png"
}
diff --git a/content/programs/hyperfine/logo.png b/content/programs/hyperfine/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/hyperfine/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/hyperfine/program.json b/content/programs/hyperfine/program.json
index d88a556..96727b5 100644
--- a/content/programs/hyperfine/program.json
+++ b/content/programs/hyperfine/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/hyperfine/logo.png"
+}
diff --git a/content/programs/hyprland/logo.png b/content/programs/hyprland/logo.png
new file mode 100644
index 0000000..89c1656
--- /dev/null
+++ b/content/programs/hyprland/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/i3-gaps/logo.png b/content/programs/i3-gaps/logo.png
new file mode 100644
index 0000000..63efb6b
--- /dev/null
+++ b/content/programs/i3-gaps/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/i3-gaps/program.json b/content/programs/i3-gaps/program.json
index 3b4fec3..58f668f 100644
--- a/content/programs/i3-gaps/program.json
+++ b/content/programs/i3-gaps/program.json
@@ -4,15 +4,19 @@
"description": "A fork of i3 with gaps between windows (gap support merged into i3 4.22+).",
"git_repo": "https://github.com/Airblader/i3",
"license": "BSD-3-Clause",
- "categories": ["wm", "x11"],
+ "categories": [
+ "wm",
+ "x11"
+ ],
"package_names": {
"default": "i3",
- "arch": "i3-gaps",
+ "arch": "i3-wm",
"ubuntu": "i3-gaps",
"debian": "i3",
"fedora": "i3",
"opensuse": "i3",
"void": "i3-gaps",
"alpine": "i3wm"
- }
+ },
+ "logo": "/programs/i3-gaps/logo.png"
}
diff --git a/content/programs/i3/logo.png b/content/programs/i3/logo.png
new file mode 100644
index 0000000..63efb6b
--- /dev/null
+++ b/content/programs/i3/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/i3/program.json b/content/programs/i3/program.json
index 9f63dd9..9c14da4 100644
--- a/content/programs/i3/program.json
+++ b/content/programs/i3/program.json
@@ -5,7 +5,10 @@
"website": "https://i3wm.org/",
"git_repo": "https://github.com/i3/i3",
"license": "BSD-3-Clause",
- "categories": ["wm", "x11"],
+ "categories": [
+ "wm",
+ "x11"
+ ],
"package_names": {
"default": "i3",
"arch": "i3-wm",
@@ -15,5 +18,6 @@
"opensuse": "i3",
"void": "i3",
"alpine": "i3wm"
- }
+ },
+ "logo": "/programs/i3/logo.png"
}
diff --git a/content/programs/i3bar/logo.png b/content/programs/i3bar/logo.png
new file mode 100644
index 0000000..63efb6b
--- /dev/null
+++ b/content/programs/i3bar/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/i3bar/program.json b/content/programs/i3bar/program.json
index 39e0367..50159da 100644
--- a/content/programs/i3bar/program.json
+++ b/content/programs/i3bar/program.json
@@ -4,7 +4,10 @@
"description": "The status bar included with the i3 window manager.",
"website": "https://i3wm.org/",
"license": "BSD-3-Clause",
- "categories": ["x11", "desktop"],
+ "categories": [
+ "x11",
+ "desktop"
+ ],
"package_names": {
"default": "i3",
"arch": "i3-wm",
@@ -14,5 +17,6 @@
"opensuse": "i3",
"void": "i3",
"alpine": "i3wm"
- }
+ },
+ "logo": "/programs/i3bar/logo.png"
}
diff --git a/content/programs/i3blocks/logo.png b/content/programs/i3blocks/logo.png
new file mode 100644
index 0000000..63efb6b
--- /dev/null
+++ b/content/programs/i3blocks/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/i3blocks/program.json b/content/programs/i3blocks/program.json
index 20c3bae..c057884 100644
--- a/content/programs/i3blocks/program.json
+++ b/content/programs/i3blocks/program.json
@@ -4,7 +4,10 @@
"description": "A feed generator for the i3bar status bar.",
"git_repo": "https://github.com/vivien/i3blocks",
"license": "GPL-3.0",
- "categories": ["x11", "desktop"],
+ "categories": [
+ "x11",
+ "desktop"
+ ],
"package_names": {
"default": "i3blocks",
"arch": "i3blocks",
@@ -14,5 +17,6 @@
"opensuse": "i3blocks",
"void": "i3blocks",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/i3blocks/logo.png"
}
diff --git a/content/programs/i3lock/logo.png b/content/programs/i3lock/logo.png
new file mode 100644
index 0000000..63efb6b
--- /dev/null
+++ b/content/programs/i3lock/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/i3lock/program.json b/content/programs/i3lock/program.json
index 9a2ad95..3ace7da 100644
--- a/content/programs/i3lock/program.json
+++ b/content/programs/i3lock/program.json
@@ -4,7 +4,10 @@
"description": "A simple screen locker for X.",
"git_repo": "https://github.com/i3/i3lock",
"license": "BSD-3-Clause",
- "categories": ["x11", "security"],
+ "categories": [
+ "x11",
+ "security"
+ ],
"package_names": {
"default": "i3lock",
"arch": "i3lock",
@@ -14,5 +17,6 @@
"opensuse": "i3lock",
"void": "i3lock",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/i3lock/logo.png"
}
diff --git a/content/programs/i3status-rust/logo.png b/content/programs/i3status-rust/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/i3status-rust/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/i3status-rust/program.json b/content/programs/i3status-rust/program.json
index 3f542cd..8cd0ff3 100644
--- a/content/programs/i3status-rust/program.json
+++ b/content/programs/i3status-rust/program.json
@@ -5,8 +5,12 @@
"website": "https://github.com/greshake/i3status-rust",
"git_repo": "https://github.com/greshake/i3status-rust",
"license": "GPL-3.0",
- "categories": ["status-bar"],
- "dependencies": ["cargo"],
+ "categories": [
+ "status-bar"
+ ],
+ "dependencies": [
+ "cargo"
+ ],
"package_names": {
"default": "i3status-rust",
"arch": "i3status-rust",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/i3status-rust/logo.png"
}
diff --git a/content/programs/i3status/logo.png b/content/programs/i3status/logo.png
new file mode 100644
index 0000000..63efb6b
--- /dev/null
+++ b/content/programs/i3status/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/i3status/program.json b/content/programs/i3status/program.json
index 0b66200..2a16772 100644
--- a/content/programs/i3status/program.json
+++ b/content/programs/i3status/program.json
@@ -4,7 +4,10 @@
"description": "A small program for generating a status bar for i3bar.",
"git_repo": "https://github.com/i3/i3status",
"license": "BSD-3-Clause",
- "categories": ["x11", "desktop"],
+ "categories": [
+ "x11",
+ "desktop"
+ ],
"package_names": {
"default": "i3status",
"arch": "i3status",
@@ -14,5 +17,6 @@
"opensuse": "i3status",
"void": "i3status",
"alpine": "i3status"
- }
+ },
+ "logo": "/programs/i3status/logo.png"
}
diff --git a/content/programs/icewm/logo.png b/content/programs/icewm/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/icewm/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/icewm/program.json b/content/programs/icewm/program.json
index 294b069..39c6adb 100644
--- a/content/programs/icewm/program.json
+++ b/content/programs/icewm/program.json
@@ -5,7 +5,9 @@
"website": "https://ice-wm.org/",
"git_repo": "https://github.com/bbidulock/icewm",
"license": "LGPL-2.0",
- "categories": ["window-manager"],
+ "categories": [
+ "window-manager"
+ ],
"dependencies": [],
"package_names": {
"default": "icewm",
@@ -16,5 +18,6 @@
"opensuse": "icewm",
"void": "icewm",
"alpine": "icewm"
- }
+ },
+ "logo": "/programs/icewm/logo.png"
}
diff --git a/content/programs/imagemagick/logo.png b/content/programs/imagemagick/logo.png
new file mode 100644
index 0000000..f1514d7
Binary files /dev/null and b/content/programs/imagemagick/logo.png differ
diff --git a/content/programs/imagemagick/program.json b/content/programs/imagemagick/program.json
index fe6c44c..9de87dc 100644
--- a/content/programs/imagemagick/program.json
+++ b/content/programs/imagemagick/program.json
@@ -5,7 +5,10 @@
"website": "https://imagemagick.org/",
"git_repo": "https://github.com/ImageMagick/ImageMagick",
"license": "ImageMagick",
- "categories": ["utility", "multimedia"],
+ "categories": [
+ "utility",
+ "multimedia"
+ ],
"package_names": {
"default": "imagemagick",
"arch": "imagemagick",
@@ -15,5 +18,6 @@
"opensuse": "ImageMagick",
"void": "ImageMagick",
"alpine": "imagemagick"
- }
+ },
+ "logo": "/programs/imagemagick/logo.png"
}
diff --git a/content/programs/inkscape/logo.png b/content/programs/inkscape/logo.png
new file mode 100644
index 0000000..12d38c2
--- /dev/null
+++ b/content/programs/inkscape/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/intellij-idea/logo.png b/content/programs/intellij-idea/logo.png
new file mode 100644
index 0000000..d6ed4af
--- /dev/null
+++ b/content/programs/intellij-idea/logo.png
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/programs/irssi/logo.png b/content/programs/irssi/logo.png
new file mode 100644
index 0000000..9f602b3
--- /dev/null
+++ b/content/programs/irssi/logo.png
@@ -0,0 +1,456 @@
+
+
+
+
+
+
+
+
+ <no title> - Irssi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Back to top
+
+
+
+
+
+
+
+
+
+
+
Error
+
This page could not be found.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/content/programs/irssi/program.json b/content/programs/irssi/program.json
index 8c90fa8..720a5bb 100644
--- a/content/programs/irssi/program.json
+++ b/content/programs/irssi/program.json
@@ -5,7 +5,10 @@
"website": "https://irssi.org/",
"git_repo": "https://github.com/irssi/irssi",
"license": "GPL-2.0",
- "categories": ["communication", "terminal"],
+ "categories": [
+ "communication",
+ "terminal"
+ ],
"package_names": {
"default": "irssi",
"arch": "irssi",
@@ -15,5 +18,6 @@
"opensuse": "irssi",
"void": "irssi",
"alpine": "irssi"
- }
+ },
+ "logo": "/programs/irssi/logo.png"
}
diff --git a/content/programs/java/logo.png b/content/programs/java/logo.png
new file mode 100644
index 0000000..d946516
--- /dev/null
+++ b/content/programs/java/logo.png
@@ -0,0 +1 @@
+OpenJDK
\ No newline at end of file
diff --git a/content/programs/joplin/custom_install/install.sh b/content/programs/joplin/custom_install/install.sh
new file mode 100755
index 0000000..4399f5e
--- /dev/null
+++ b/content/programs/joplin/custom_install/install.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+set -e
+echo "Installing Joplin..."
+if command -v flatpak &>/dev/null; then
+ flatpak install -y flathub net.cozic.joplin_desktop
+elif command -v snap &>/dev/null; then
+ sudo snap install joplin-desktop
+else
+ wget -O - https://raw.githubusercontent.com/laurent22/joplin/dev/Joplin_install_and_update.sh | bash
+fi
diff --git a/content/programs/joplin/logo.png b/content/programs/joplin/logo.png
new file mode 100644
index 0000000..e1f27f3
--- /dev/null
+++ b/content/programs/joplin/logo.png
@@ -0,0 +1 @@
+Joplin
\ No newline at end of file
diff --git a/content/programs/joplin/program.json b/content/programs/joplin/program.json
new file mode 100644
index 0000000..0ec42e8
--- /dev/null
+++ b/content/programs/joplin/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Joplin",
+ "slug": "joplin",
+ "description": "Open-source note taking and to-do app with sync.",
+ "website": "https://joplinapp.org/",
+ "git_repo": "https://github.com/laurent22/joplin",
+ "license": "AGPL-3.0",
+ "categories": [
+ "productivity",
+ "markdown"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "joplin",
+ "arch": "joplin",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/joplin/logo.png"
+}
diff --git a/content/programs/joshuto/logo.png b/content/programs/joshuto/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/joshuto/logo.png
@@ -0,0 +1 @@
+Rust
\ No newline at end of file
diff --git a/content/programs/joshuto/program.json b/content/programs/joshuto/program.json
index e7eb5d1..b0295ff 100644
--- a/content/programs/joshuto/program.json
+++ b/content/programs/joshuto/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/kamiyaa/joshuto",
"git_repo": "https://github.com/kamiyaa/joshuto",
"license": "MIT",
- "categories": ["file-manager", "terminal"],
- "dependencies": ["cargo"],
+ "categories": [
+ "file-manager",
+ "terminal"
+ ],
+ "dependencies": [
+ "cargo"
+ ],
"package_names": {
"default": "joshuto",
"arch": "joshuto",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "joshuto",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/joshuto/logo.png"
}
diff --git a/content/programs/jq/program.json b/content/programs/jq/program.json
index d15edca..f6386b1 100644
--- a/content/programs/jq/program.json
+++ b/content/programs/jq/program.json
@@ -5,7 +5,10 @@
"website": "https://jqlang.github.io/jq/",
"git_repo": "https://github.com/jqlang/jq",
"license": "MIT",
- "categories": ["terminal", "system"],
+ "categories": [
+ "terminal",
+ "system"
+ ],
"package_names": {
"default": "jq",
"arch": "jq",
@@ -15,5 +18,6 @@
"opensuse": "jq",
"void": "jq",
"alpine": "jq"
- }
+ },
+ "logo": "/programs/jq/logo.png"
}
diff --git a/content/programs/just/logo.png b/content/programs/just/logo.png
new file mode 100644
index 0000000..7dc0672
--- /dev/null
+++ b/content/programs/just/logo.png
@@ -0,0 +1 @@
+Just
\ No newline at end of file
diff --git a/content/programs/jwm/logo.png b/content/programs/jwm/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/jwm/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/jwm/program.json b/content/programs/jwm/program.json
index faf97e9..7862e36 100644
--- a/content/programs/jwm/program.json
+++ b/content/programs/jwm/program.json
@@ -5,8 +5,12 @@
"website": "https://joewing.net/projects/jwm/",
"git_repo": "https://github.com/joewing/jwm",
"license": "GPL-2.0",
- "categories": ["window-manager"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "window-manager"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "jwm",
"arch": "jwm",
@@ -16,5 +20,6 @@
"opensuse": "jwm",
"void": "jwm",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/jwm/logo.png"
}
diff --git a/content/programs/k9s/logo.png b/content/programs/k9s/logo.png
new file mode 100644
index 0000000..b2dded3
--- /dev/null
+++ b/content/programs/k9s/logo.png
@@ -0,0 +1 @@
+Kubernetes
\ No newline at end of file
diff --git a/content/programs/k9s/program.json b/content/programs/k9s/program.json
index 189e66b..b9ba962 100644
--- a/content/programs/k9s/program.json
+++ b/content/programs/k9s/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"golang"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/k9s/logo.png"
+}
diff --git a/content/programs/kakoune/program.json b/content/programs/kakoune/program.json
index 056b597..af7e06a 100644
--- a/content/programs/kakoune/program.json
+++ b/content/programs/kakoune/program.json
@@ -5,7 +5,10 @@
"website": "https://kakoune.org/",
"git_repo": "https://github.com/mawww/kakoune",
"license": "Unlicense",
- "categories": ["editor", "terminal"],
+ "categories": [
+ "editor",
+ "terminal"
+ ],
"package_names": {
"default": "kakoune",
"arch": "kakoune",
@@ -15,5 +18,6 @@
"opensuse": "kakoune",
"void": "kakoune",
"alpine": "kakoune"
- }
+ },
+ "logo": "/programs/kakoune/logo.png"
}
diff --git a/content/programs/kde-plasma/custom_install/install.sh b/content/programs/kde-plasma/custom_install/install.sh
new file mode 100755
index 0000000..f0ff369
--- /dev/null
+++ b/content/programs/kde-plasma/custom_install/install.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+set -e
+echo "Installing KDE Plasma..."
+if [ -f /etc/os-release ]; then
+ . /etc/os-release
+ case "$ID" in
+ opensuse*|suse*) sudo zypper install -y -t pattern kde kde_plasma ;;
+ alpine) echo "Alpine: KDE Plasma is available via 'setup-desktop plasma'" && exit 0 ;;
+ *) echo "Unknown distro for KDE Plasma. Try your package manager." && exit 1 ;;
+ esac
+fi
diff --git a/content/programs/kde-plasma/logo.png b/content/programs/kde-plasma/logo.png
new file mode 100644
index 0000000..91a46b8
--- /dev/null
+++ b/content/programs/kde-plasma/logo.png
@@ -0,0 +1 @@
+KDE
\ No newline at end of file
diff --git a/content/programs/kde-plasma/program.json b/content/programs/kde-plasma/program.json
new file mode 100644
index 0000000..47fbc01
--- /dev/null
+++ b/content/programs/kde-plasma/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "KDE Plasma",
+ "slug": "kde-plasma",
+ "description": "Full-featured, modern desktop environment by KDE.",
+ "website": "https://kde.org/plasma-desktop/",
+ "git_repo": "https://invent.kde.org/plasma",
+ "license": "GPL-2.0+",
+ "categories": [
+ "window-manager",
+ "compositor"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "plasma-desktop",
+ "arch": "plasma-meta",
+ "ubuntu": "kde-plasma-desktop",
+ "debian": "kde-plasma-desktop",
+ "fedora": "@kde-desktop",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "kde5",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/kde-plasma/logo.png"
+}
diff --git a/content/programs/kdenlive/logo.png b/content/programs/kdenlive/logo.png
new file mode 100644
index 0000000..5fd84b2
--- /dev/null
+++ b/content/programs/kdenlive/logo.png
@@ -0,0 +1 @@
+Kdenlive
\ No newline at end of file
diff --git a/content/programs/kdenlive/program.json b/content/programs/kdenlive/program.json
new file mode 100644
index 0000000..e2f7451
--- /dev/null
+++ b/content/programs/kdenlive/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Kdenlive",
+ "slug": "kdenlive",
+ "description": "Professional open-source video editor by KDE.",
+ "website": "https://kdenlive.org/",
+ "git_repo": "https://invent.kde.org/multimedia/kdenlive",
+ "license": "GPL-2.0+",
+ "categories": [
+ "media",
+ "media-processing"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "kdenlive",
+ "arch": "kdenlive",
+ "ubuntu": "kdenlive",
+ "debian": "kdenlive",
+ "fedora": "kdenlive",
+ "opensuse": "kdenlive",
+ "void": "kdenlive",
+ "alpine": "kdenlive"
+ },
+ "logo": "/programs/kdenlive/logo.png"
+}
diff --git a/content/programs/keepassxc/logo.png b/content/programs/keepassxc/logo.png
new file mode 100644
index 0000000..b4a59eb
--- /dev/null
+++ b/content/programs/keepassxc/logo.png
@@ -0,0 +1 @@
+KeePassXC
\ No newline at end of file
diff --git a/content/programs/keepassxc/program.json b/content/programs/keepassxc/program.json
new file mode 100644
index 0000000..e0f5f23
--- /dev/null
+++ b/content/programs/keepassxc/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "KeePassXC",
+ "slug": "keepassxc",
+ "description": "Cross-platform password manager with strong encryption.",
+ "website": "https://keepassxc.org/",
+ "git_repo": "https://github.com/keepassxreboot/keepassxc",
+ "license": "GPL-2.0/3.0",
+ "categories": [
+ "security"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "keepassxc",
+ "arch": "keepassxc",
+ "ubuntu": "keepassxc",
+ "debian": "keepassxc",
+ "fedora": "keepassxc",
+ "opensuse": "keepassxc",
+ "void": "keepassxc",
+ "alpine": "keepassxc"
+ },
+ "logo": "/programs/keepassxc/logo.png"
+}
diff --git a/content/programs/kitty/program.json b/content/programs/kitty/program.json
index 8d9d922..9b368d8 100644
--- a/content/programs/kitty/program.json
+++ b/content/programs/kitty/program.json
@@ -5,7 +5,9 @@
"website": "https://sw.kovidgoyal.net/kitty/",
"git_repo": "https://github.com/kovidgoyal/kitty",
"license": "GPL-3.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "kitty",
"arch": "kitty",
@@ -15,5 +17,6 @@
"opensuse": "kitty",
"void": "kitty",
"alpine": "kitty"
- }
+ },
+ "logo": "/programs/kitty/logo.png"
}
diff --git a/content/programs/kodi/logo.png b/content/programs/kodi/logo.png
new file mode 100644
index 0000000..74d03d2
--- /dev/null
+++ b/content/programs/kodi/logo.png
@@ -0,0 +1 @@
+Kodi
\ No newline at end of file
diff --git a/content/programs/konsole/logo.png b/content/programs/konsole/logo.png
new file mode 100644
index 0000000..91a46b8
--- /dev/null
+++ b/content/programs/konsole/logo.png
@@ -0,0 +1 @@
+KDE
\ No newline at end of file
diff --git a/content/programs/konsole/program.json b/content/programs/konsole/program.json
index 07597c1..5cbdc97 100644
--- a/content/programs/konsole/program.json
+++ b/content/programs/konsole/program.json
@@ -5,7 +5,9 @@
"website": "https://konsole.kde.org/",
"git_repo": "https://github.com/KDE/konsole",
"license": "GPL-2.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "konsole",
"arch": "konsole",
@@ -15,5 +17,6 @@
"opensuse": "konsole",
"void": "konsole",
"alpine": "konsole"
- }
+ },
+ "logo": "/programs/konsole/logo.png"
}
diff --git a/content/programs/krita/logo.png b/content/programs/krita/logo.png
new file mode 100644
index 0000000..6f9f500
--- /dev/null
+++ b/content/programs/krita/logo.png
@@ -0,0 +1 @@
+Krita
\ No newline at end of file
diff --git a/content/programs/lapce/custom_install/install.sh b/content/programs/lapce/custom_install/install.sh
new file mode 100755
index 0000000..c5132dd
--- /dev/null
+++ b/content/programs/lapce/custom_install/install.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+set -e
+echo "Installing Lapce..."
+if command -v cargo &>/dev/null && command -v cargo-binstall &>/dev/null; then
+ cargo binstall lapce -y
+elif command -v flatpak &>/dev/null; then
+ flatpak install -y flathub dev.lapce.lapce
+else
+ echo "Install cargo-binstall or flatpak first."
+ exit 1
+fi
diff --git a/content/programs/lapce/logo.png b/content/programs/lapce/logo.png
new file mode 100644
index 0000000..3ce20e5
--- /dev/null
+++ b/content/programs/lapce/logo.png
@@ -0,0 +1 @@
+Lapce
\ No newline at end of file
diff --git a/content/programs/lapce/program.json b/content/programs/lapce/program.json
new file mode 100644
index 0000000..15755b7
--- /dev/null
+++ b/content/programs/lapce/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Lapce",
+ "slug": "lapce",
+ "description": "Lightning-fast and powerful code editor written in Rust.",
+ "website": "https://lapce.dev/",
+ "git_repo": "https://github.com/lapce/lapce",
+ "license": "Apache-2.0",
+ "categories": [
+ "editor",
+ "development"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "lapce",
+ "arch": "lapce",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/lapce/logo.png"
+}
diff --git a/content/programs/lazydocker/logo.png b/content/programs/lazydocker/logo.png
new file mode 100644
index 0000000..e68a661
--- /dev/null
+++ b/content/programs/lazydocker/logo.png
@@ -0,0 +1 @@
+Docker
\ No newline at end of file
diff --git a/content/programs/lazydocker/program.json b/content/programs/lazydocker/program.json
index ef9d416..f46607a 100644
--- a/content/programs/lazydocker/program.json
+++ b/content/programs/lazydocker/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"golang"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/lazydocker/logo.png"
+}
diff --git a/content/programs/lazygit/logo.png b/content/programs/lazygit/logo.png
new file mode 100644
index 0000000..5f19a87
--- /dev/null
+++ b/content/programs/lazygit/logo.png
@@ -0,0 +1 @@
+Git
\ No newline at end of file
diff --git a/content/programs/lazygit/program.json b/content/programs/lazygit/program.json
index 1fda062..5d5e05f 100644
--- a/content/programs/lazygit/program.json
+++ b/content/programs/lazygit/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"golang"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/lazygit/logo.png"
+}
diff --git a/content/programs/ledger/program.json b/content/programs/ledger/program.json
index 640fb89..613355d 100644
--- a/content/programs/ledger/program.json
+++ b/content/programs/ledger/program.json
@@ -5,7 +5,10 @@
"website": "https://ledger-cli.org/",
"git_repo": "https://github.com/ledger/ledger",
"license": "BSD-3-Clause",
- "categories": ["productivity", "terminal"],
+ "categories": [
+ "productivity",
+ "terminal"
+ ],
"package_names": {
"default": "ledger",
"arch": "ledger",
@@ -15,5 +18,6 @@
"opensuse": "ledger",
"void": "ledger",
"alpine": "ledger"
- }
+ },
+ "logo": "/programs/ledger/logo.png"
}
diff --git a/content/programs/leftwm/logo.png b/content/programs/leftwm/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/leftwm/logo.png
@@ -0,0 +1 @@
+Rust
\ No newline at end of file
diff --git a/content/programs/leftwm/program.json b/content/programs/leftwm/program.json
index b41667b..6dc8d20 100644
--- a/content/programs/leftwm/program.json
+++ b/content/programs/leftwm/program.json
@@ -5,8 +5,12 @@
"website": "https://leftwm.org/",
"git_repo": "https://github.com/leftwm/leftwm",
"license": "MIT",
- "categories": ["window-manager"],
- "dependencies": ["cargo"],
+ "categories": [
+ "window-manager"
+ ],
+ "dependencies": [
+ "cargo"
+ ],
"package_names": {
"default": "leftwm",
"arch": "leftwm",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/leftwm/logo.png"
}
diff --git a/content/programs/lemonbar/logo.png b/content/programs/lemonbar/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/lemonbar/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/lemonbar/program.json b/content/programs/lemonbar/program.json
index 837e53d..40d2923 100644
--- a/content/programs/lemonbar/program.json
+++ b/content/programs/lemonbar/program.json
@@ -5,8 +5,12 @@
"website": "https://github.com/LemonBoy/bar",
"git_repo": "https://github.com/LemonBoy/bar",
"license": "MIT",
- "categories": ["status-bar"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "status-bar"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "lemonbar",
"arch": "lemonbar",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "lemonbar",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/lemonbar/logo.png"
}
diff --git a/content/programs/less/logo.png b/content/programs/less/logo.png
new file mode 100644
index 0000000..4d5ccba
--- /dev/null
+++ b/content/programs/less/logo.png
@@ -0,0 +1 @@
+Less
\ No newline at end of file
diff --git a/content/programs/less/program.json b/content/programs/less/program.json
index b77269b..f4c1c1e 100644
--- a/content/programs/less/program.json
+++ b/content/programs/less/program.json
@@ -3,7 +3,9 @@
"slug": "less",
"description": "A terminal pager that allows backward movement in a file.",
"license": "GPL-3.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "less",
"arch": "less",
@@ -13,5 +15,6 @@
"opensuse": "less",
"void": "less",
"alpine": "less"
- }
+ },
+ "logo": "/programs/less/logo.png"
}
diff --git a/content/programs/lf/logo.png b/content/programs/lf/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/lf/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/lf/program.json b/content/programs/lf/program.json
index c04576d..37ee263 100644
--- a/content/programs/lf/program.json
+++ b/content/programs/lf/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"golang"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/lf/logo.png"
+}
diff --git a/content/programs/libreoffice/logo.png b/content/programs/libreoffice/logo.png
new file mode 100644
index 0000000..71688d5
--- /dev/null
+++ b/content/programs/libreoffice/logo.png
@@ -0,0 +1 @@
+LibreOffice
\ No newline at end of file
diff --git a/content/programs/liquidprompt/logo.png b/content/programs/liquidprompt/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/liquidprompt/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/liquidprompt/program.json b/content/programs/liquidprompt/program.json
index bd19fa0..401864e 100644
--- a/content/programs/liquidprompt/program.json
+++ b/content/programs/liquidprompt/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/nojhan/liquidprompt",
"git_repo": "https://github.com/nojhan/liquidprompt",
"license": "AGPL-3.0",
- "categories": ["shell", "terminal"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "shell",
+ "terminal"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "liquidprompt",
"arch": "liquidprompt",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/liquidprompt/logo.png"
}
diff --git a/content/programs/lmms/logo.png b/content/programs/lmms/logo.png
new file mode 100644
index 0000000..ddce78b
--- /dev/null
+++ b/content/programs/lmms/logo.png
@@ -0,0 +1 @@
+LMMS
\ No newline at end of file
diff --git a/content/programs/localsend/custom_install/install.sh b/content/programs/localsend/custom_install/install.sh
new file mode 100755
index 0000000..5075f77
--- /dev/null
+++ b/content/programs/localsend/custom_install/install.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+set -e
+echo "Installing LocalSend via Flatpak..."
+if command -v flatpak &>/dev/null; then
+ flatpak install -y flathub org.localsend.localsend_app
+else
+ echo "Flatpak not found. Install flatpak first."
+ exit 1
+fi
diff --git a/content/programs/localsend/logo.png b/content/programs/localsend/logo.png
new file mode 100644
index 0000000..d9dbacb
--- /dev/null
+++ b/content/programs/localsend/logo.png
@@ -0,0 +1 @@
+LocalSend
\ No newline at end of file
diff --git a/content/programs/localsend/program.json b/content/programs/localsend/program.json
new file mode 100644
index 0000000..b34d8d3
--- /dev/null
+++ b/content/programs/localsend/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "LocalSend",
+ "slug": "localsend",
+ "description": "Open-source AirDrop alternative for cross-platform file sharing.",
+ "website": "https://localsend.org/",
+ "git_repo": "https://github.com/localsend/localsend",
+ "license": "MIT",
+ "categories": [
+ "network",
+ "file-management"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "CUSTOM_INSTALL",
+ "arch": "localsend",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/localsend/logo.png"
+}
diff --git a/content/programs/logseq/logo.png b/content/programs/logseq/logo.png
new file mode 100644
index 0000000..a9649ac
--- /dev/null
+++ b/content/programs/logseq/logo.png
@@ -0,0 +1 @@
+Logseq
\ No newline at end of file
diff --git a/content/programs/lolcat/logo.png b/content/programs/lolcat/logo.png
new file mode 100644
index 0000000..6acadc0
--- /dev/null
+++ b/content/programs/lolcat/logo.png
@@ -0,0 +1 @@
+Ruby
\ No newline at end of file
diff --git a/content/programs/lolcat/program.json b/content/programs/lolcat/program.json
index cea966c..23dfe13 100644
--- a/content/programs/lolcat/program.json
+++ b/content/programs/lolcat/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/busyloop/lolcat",
"git_repo": "https://github.com/busyloop/lolcat",
"license": "WTFPL",
- "categories": ["fun", "terminal"],
+ "categories": [
+ "fun",
+ "terminal"
+ ],
"package_names": {
"default": "lolcat",
"arch": "lolcat",
@@ -15,5 +18,6 @@
"opensuse": "lolcat",
"void": "lolcat",
"alpine": "lolcat"
- }
+ },
+ "logo": "/programs/lolcat/logo.png"
}
diff --git a/content/programs/lollypop/logo.png b/content/programs/lollypop/logo.png
new file mode 100644
index 0000000..4d9150f
--- /dev/null
+++ b/content/programs/lollypop/logo.png
@@ -0,0 +1 @@
+GNOME
\ No newline at end of file
diff --git a/content/programs/lollypop/program.json b/content/programs/lollypop/program.json
index 9b68c77..a785076 100644
--- a/content/programs/lollypop/program.json
+++ b/content/programs/lollypop/program.json
@@ -5,7 +5,10 @@
"website": "https://wiki.gnome.org/Apps/Lollypop",
"git_repo": "https://gitlab.gnome.org/World/lollypop",
"license": "GPL-3.0",
- "categories": ["audio", "music"],
+ "categories": [
+ "audio",
+ "music"
+ ],
"package_names": {
"default": "lollypop",
"arch": "lollypop",
@@ -15,5 +18,6 @@
"opensuse": "lollypop",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/lollypop/logo.png"
}
diff --git a/content/programs/lsp-java/program.json b/content/programs/lsp-java/program.json
index 58d9a9a..982af1e 100644
--- a/content/programs/lsp-java/program.json
+++ b/content/programs/lsp-java/program.json
@@ -13,7 +13,14 @@
"curl"
],
"package_names": {
- "default": "CUSTOM_INSTALL"
+ "default": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL",
+ "arch": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL"
},
"logo": "/programs/lsp-java/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/lua/logo.png b/content/programs/lua/logo.png
new file mode 100644
index 0000000..5f4c652
--- /dev/null
+++ b/content/programs/lua/logo.png
@@ -0,0 +1 @@
+Lua
\ No newline at end of file
diff --git a/content/programs/lua/program.json b/content/programs/lua/program.json
new file mode 100644
index 0000000..278229c
--- /dev/null
+++ b/content/programs/lua/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Lua",
+ "slug": "lua",
+ "description": "Lightweight embeddable scripting language.",
+ "website": "https://www.lua.org/",
+ "git_repo": "https://github.com/lua/lua",
+ "license": "MIT",
+ "categories": [
+ "language",
+ "development"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "lua",
+ "arch": "lua",
+ "ubuntu": "lua5.4",
+ "debian": "lua5.4",
+ "fedora": "lua",
+ "opensuse": "lua",
+ "void": "lua54",
+ "alpine": "lua5.4"
+ },
+ "logo": "/programs/lua/logo.png"
+}
diff --git a/content/programs/lutris/logo.png b/content/programs/lutris/logo.png
new file mode 100644
index 0000000..322e405
--- /dev/null
+++ b/content/programs/lutris/logo.png
@@ -0,0 +1 @@
+Lutris
\ No newline at end of file
diff --git a/content/programs/lynx/logo.png b/content/programs/lynx/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/lynx/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/lynx/program.json b/content/programs/lynx/program.json
index 4d3ecaa..a3ce250 100644
--- a/content/programs/lynx/program.json
+++ b/content/programs/lynx/program.json
@@ -3,7 +3,10 @@
"slug": "lynx",
"description": "A classic text-based web browser.",
"license": "GPL-2.0",
- "categories": ["browser", "terminal"],
+ "categories": [
+ "browser",
+ "terminal"
+ ],
"package_names": {
"default": "lynx",
"arch": "lynx",
@@ -13,5 +16,6 @@
"opensuse": "lynx",
"void": "lynx",
"alpine": "lynx"
- }
+ },
+ "logo": "/programs/lynx/logo.png"
}
diff --git a/content/programs/magic-wormhole/logo.png b/content/programs/magic-wormhole/logo.png
new file mode 100644
index 0000000..e1b14ec
--- /dev/null
+++ b/content/programs/magic-wormhole/logo.png
@@ -0,0 +1 @@
+Python
\ No newline at end of file
diff --git a/content/programs/magic-wormhole/program.json b/content/programs/magic-wormhole/program.json
index 8e5fa5e..749cdb9 100644
--- a/content/programs/magic-wormhole/program.json
+++ b/content/programs/magic-wormhole/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"pip"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/magic-wormhole/logo.png"
+}
diff --git a/content/programs/mailspring/program.json b/content/programs/mailspring/program.json
index 6836d8d..20374a9 100644
--- a/content/programs/mailspring/program.json
+++ b/content/programs/mailspring/program.json
@@ -5,8 +5,12 @@
"website": "https://getmailspring.com/",
"git_repo": "https://github.com/Foundry376/Mailspring",
"license": "GPL-3.0",
- "categories": ["email"],
- "dependencies": ["curl"],
+ "categories": [
+ "email"
+ ],
+ "dependencies": [
+ "curl"
+ ],
"package_names": {
"default": "mailspring",
"arch": "mailspring",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/mailspring/logo.png"
}
diff --git a/content/programs/maim/logo.png b/content/programs/maim/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/maim/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/maim/program.json b/content/programs/maim/program.json
index eaf7dd3..9c8c061 100644
--- a/content/programs/maim/program.json
+++ b/content/programs/maim/program.json
@@ -4,7 +4,10 @@
"description": "A simple screenshot utility for X.",
"git_repo": "https://github.com/naelstrof/maim",
"license": "GPL-3.0",
- "categories": ["x11", "utility"],
+ "categories": [
+ "x11",
+ "utility"
+ ],
"package_names": {
"default": "maim",
"arch": "maim",
@@ -14,5 +17,6 @@
"opensuse": "maim",
"void": "maim",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/maim/logo.png"
}
diff --git a/content/programs/make/logo.png b/content/programs/make/logo.png
new file mode 100644
index 0000000..1bc46c5
--- /dev/null
+++ b/content/programs/make/logo.png
@@ -0,0 +1 @@
+Make
\ No newline at end of file
diff --git a/content/programs/mangohud/logo.png b/content/programs/mangohud/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/mangohud/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/mangohud/program.json b/content/programs/mangohud/program.json
new file mode 100644
index 0000000..a431821
--- /dev/null
+++ b/content/programs/mangohud/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "MangoHud",
+ "slug": "mangohud",
+ "description": "Vulkan/OpenGL overlay for monitoring FPS, temperatures, and more.",
+ "website": "https://github.com/flightlessmango/MangoHud",
+ "git_repo": "https://github.com/flightlessmango/MangoHud",
+ "license": "MIT",
+ "categories": [
+ "game",
+ "system-monitor"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "mangohud",
+ "arch": "mangohud",
+ "ubuntu": "mangohud",
+ "debian": "mangohud",
+ "fedora": "mangohud",
+ "opensuse": "mangohud",
+ "void": "mangohud",
+ "alpine": "mangohud"
+ },
+ "logo": "/programs/mangohud/logo.png"
+}
diff --git a/content/programs/marktext/logo.png b/content/programs/marktext/logo.png
new file mode 100644
index 0000000..74c121d
--- /dev/null
+++ b/content/programs/marktext/logo.png
@@ -0,0 +1 @@
+Markdown
\ No newline at end of file
diff --git a/content/programs/marktext/program.json b/content/programs/marktext/program.json
index 4af398d..de77d30 100644
--- a/content/programs/marktext/program.json
+++ b/content/programs/marktext/program.json
@@ -5,8 +5,13 @@
"website": "https://www.marktext.cc/",
"git_repo": "https://github.com/marktext/marktext",
"license": "MIT",
- "categories": ["editor", "markdown"],
- "dependencies": ["curl"],
+ "categories": [
+ "editor",
+ "markdown"
+ ],
+ "dependencies": [
+ "curl"
+ ],
"package_names": {
"default": "marktext",
"arch": "marktext",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/marktext/logo.png"
}
diff --git a/content/programs/mc/logo.png b/content/programs/mc/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/mc/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/mc/program.json b/content/programs/mc/program.json
index 752daf2..a500fd8 100644
--- a/content/programs/mc/program.json
+++ b/content/programs/mc/program.json
@@ -5,7 +5,10 @@
"website": "https://midnight-commander.org/",
"git_repo": "https://github.com/MidnightCommander/mc",
"license": "GPL-3.0",
- "categories": ["file-manager", "terminal"],
+ "categories": [
+ "file-manager",
+ "terminal"
+ ],
"dependencies": [],
"package_names": {
"default": "mc",
@@ -16,5 +19,6 @@
"opensuse": "mc",
"void": "mc",
"alpine": "mc"
- }
+ },
+ "logo": "/programs/mc/logo.png"
}
diff --git a/content/programs/micro/logo.png b/content/programs/micro/logo.png
new file mode 100644
index 0000000..2cf3531
--- /dev/null
+++ b/content/programs/micro/logo.png
@@ -0,0 +1 @@
+Micro Editor
\ No newline at end of file
diff --git a/content/programs/micro/program.json b/content/programs/micro/program.json
index ee3f930..2fb372d 100644
--- a/content/programs/micro/program.json
+++ b/content/programs/micro/program.json
@@ -5,7 +5,10 @@
"website": "https://micro-editor.github.io/",
"git_repo": "https://github.com/zyedidia/micro",
"license": "MIT",
- "categories": ["editor", "terminal"],
+ "categories": [
+ "editor",
+ "terminal"
+ ],
"package_names": {
"default": "micro",
"arch": "micro",
@@ -15,5 +18,6 @@
"opensuse": "micro",
"void": "micro",
"alpine": "micro"
- }
+ },
+ "logo": "/programs/micro/logo.png"
}
diff --git a/content/programs/midori/program.json b/content/programs/midori/program.json
index 5952afe..40398d9 100644
--- a/content/programs/midori/program.json
+++ b/content/programs/midori/program.json
@@ -4,7 +4,9 @@
"description": "Lightweight, fast and free web browser.",
"website": "https://www.midori-browser.org/",
"license": "LGPL-2.1",
- "categories": ["browser"],
+ "categories": [
+ "browser"
+ ],
"package_names": {
"default": "midori",
"arch": "midori",
@@ -14,5 +16,6 @@
"opensuse": "midori",
"void": "midori",
"alpine": "midori"
- }
+ },
+ "logo": "/programs/midori/logo.png"
}
diff --git a/content/programs/mosh/program.json b/content/programs/mosh/program.json
index 9ba2cb5..fed83a5 100644
--- a/content/programs/mosh/program.json
+++ b/content/programs/mosh/program.json
@@ -5,7 +5,10 @@
"website": "https://mosh.org/",
"git_repo": "https://github.com/mobile-shell/mosh",
"license": "GPL-3.0",
- "categories": ["network", "terminal"],
+ "categories": [
+ "network",
+ "terminal"
+ ],
"package_names": {
"default": "mosh",
"arch": "mosh",
@@ -15,5 +18,6 @@
"opensuse": "mosh",
"void": "mosh",
"alpine": "mosh"
- }
+ },
+ "logo": "/programs/mosh/logo.png"
}
diff --git a/content/programs/mpc/logo.png b/content/programs/mpc/logo.png
new file mode 100644
index 0000000..bd9118b
--- /dev/null
+++ b/content/programs/mpc/logo.png
@@ -0,0 +1 @@
+MusicBrainz
\ No newline at end of file
diff --git a/content/programs/mpc/program.json b/content/programs/mpc/program.json
index f50ba40..dfc1239 100644
--- a/content/programs/mpc/program.json
+++ b/content/programs/mpc/program.json
@@ -4,7 +4,10 @@
"description": "A command-line client for the Music Player Daemon.",
"website": "https://www.musicpd.org/clients/mpc/",
"license": "GPL-2.0",
- "categories": ["audio", "terminal"],
+ "categories": [
+ "audio",
+ "terminal"
+ ],
"package_names": {
"default": "mpc",
"arch": "mpc",
@@ -14,5 +17,6 @@
"opensuse": "mpc",
"void": "mpc",
"alpine": "mpc"
- }
+ },
+ "logo": "/programs/mpc/logo.png"
}
diff --git a/content/programs/mpd/logo.png b/content/programs/mpd/logo.png
new file mode 100644
index 0000000..bd9118b
--- /dev/null
+++ b/content/programs/mpd/logo.png
@@ -0,0 +1 @@
+MusicBrainz
\ No newline at end of file
diff --git a/content/programs/mpd/program.json b/content/programs/mpd/program.json
index 316f1a4..62fc0b5 100644
--- a/content/programs/mpd/program.json
+++ b/content/programs/mpd/program.json
@@ -1,11 +1,13 @@
{
"name": "MPD",
"slug": "mpd",
- "description": "Music Player Daemon — a flexible server-side music player.",
+ "description": "Music Player Daemon \u2014 a flexible server-side music player.",
"website": "https://www.musicpd.org/",
"git_repo": "https://github.com/MusicPlayerDaemon/MPD",
"license": "GPL-2.0",
- "categories": ["audio"],
+ "categories": [
+ "audio"
+ ],
"package_names": {
"default": "mpd",
"arch": "mpd",
@@ -15,5 +17,6 @@
"opensuse": "mpd",
"void": "mpd",
"alpine": "mpd"
- }
+ },
+ "logo": "/programs/mpd/logo.png"
}
diff --git a/content/programs/mpv/logo.png b/content/programs/mpv/logo.png
new file mode 100644
index 0000000..55708a0
--- /dev/null
+++ b/content/programs/mpv/logo.png
@@ -0,0 +1 @@
+mpv
\ No newline at end of file
diff --git a/content/programs/mtr/logo.png b/content/programs/mtr/logo.png
new file mode 100644
index 0000000..da5cc6d
--- /dev/null
+++ b/content/programs/mtr/logo.png
@@ -0,0 +1 @@
+MTR
\ No newline at end of file
diff --git a/content/programs/mtr/program.json b/content/programs/mtr/program.json
index f1bd24d..0593fcd 100644
--- a/content/programs/mtr/program.json
+++ b/content/programs/mtr/program.json
@@ -5,7 +5,10 @@
"website": "https://www.bitwizard.nl/mtr/",
"git_repo": "https://github.com/traviscross/mtr",
"license": "GPL-2.0",
- "categories": ["network", "terminal"],
+ "categories": [
+ "network",
+ "terminal"
+ ],
"package_names": {
"default": "mtr",
"arch": "mtr",
@@ -15,5 +18,6 @@
"opensuse": "mtr",
"void": "mtr",
"alpine": "mtr"
- }
+ },
+ "logo": "/programs/mtr/logo.png"
}
diff --git a/content/programs/mu4e/custom_install/install.sh b/content/programs/mu4e/custom_install/install.sh
new file mode 100644
index 0000000..ddf7794
--- /dev/null
+++ b/content/programs/mu4e/custom_install/install.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+set -e
+# mu/mu4e — build from source (Arch AUR fallback)
+git clone --depth=1 https://github.com/djcb/mu /tmp/mu
+cd /tmp/mu
+meson setup build && ninja -C build
+ninja -C build install
+rm -rf /tmp/mu
diff --git a/content/programs/mu4e/program.json b/content/programs/mu4e/program.json
index 4f4e9a0..64975dd 100644
--- a/content/programs/mu4e/program.json
+++ b/content/programs/mu4e/program.json
@@ -10,7 +10,7 @@
],
"package_names": {
"default": "mu",
- "arch": "mu",
+ "arch": "CUSTOM_INSTALL",
"ubuntu": "maildir-utils",
"debian": "maildir-utils",
"fedora": "maildir-utils",
@@ -18,5 +18,10 @@
"void": "mu",
"alpine": "mu"
},
- "logo": "/programs/mu4e/logo.png"
-}
\ No newline at end of file
+ "logo": "/programs/mu4e/logo.png",
+ "dependencies": [
+ "git-dep",
+ "cmake",
+ "emacs"
+ ]
+}
diff --git a/content/programs/musikcube/logo.png b/content/programs/musikcube/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/musikcube/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/musikcube/program.json b/content/programs/musikcube/program.json
index 5684b14..bdf84d3 100644
--- a/content/programs/musikcube/program.json
+++ b/content/programs/musikcube/program.json
@@ -5,8 +5,14 @@
"website": "https://musikcube.com/",
"git_repo": "https://github.com/clangen/musikcube",
"license": "BSD-3-Clause",
- "categories": ["audio", "terminal"],
- "dependencies": ["git-dep", "cmake"],
+ "categories": [
+ "audio",
+ "terminal"
+ ],
+ "dependencies": [
+ "git-dep",
+ "cmake"
+ ],
"package_names": {
"default": "musikcube",
"arch": "musikcube",
@@ -16,5 +22,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "musikcube",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/musikcube/logo.png"
}
diff --git a/content/programs/mypaint/program.json b/content/programs/mypaint/program.json
index a362151..f0bf39c 100644
--- a/content/programs/mypaint/program.json
+++ b/content/programs/mypaint/program.json
@@ -5,7 +5,9 @@
"website": "http://mypaint.org/",
"git_repo": "https://github.com/mypaint/mypaint",
"license": "GPL-2.0",
- "categories": ["image-processing"],
+ "categories": [
+ "image-processing"
+ ],
"package_names": {
"default": "mypaint",
"arch": "mypaint",
@@ -15,5 +17,6 @@
"opensuse": "mypaint",
"void": "mypaint",
"alpine": "mypaint"
- }
+ },
+ "logo": "/programs/mypaint/logo.png"
}
diff --git a/content/programs/nautilus/logo.png b/content/programs/nautilus/logo.png
new file mode 100644
index 0000000..4d9150f
--- /dev/null
+++ b/content/programs/nautilus/logo.png
@@ -0,0 +1 @@
+GNOME
\ No newline at end of file
diff --git a/content/programs/nautilus/program.json b/content/programs/nautilus/program.json
new file mode 100644
index 0000000..a5befb3
--- /dev/null
+++ b/content/programs/nautilus/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "Nautilus (Files)",
+ "slug": "nautilus",
+ "description": "GNOME's file manager, simple and integrated.",
+ "website": "https://apps.gnome.org/Nautilus/",
+ "git_repo": "https://gitlab.gnome.org/GNOME/nautilus",
+ "license": "GPL-3.0+",
+ "categories": [
+ "file-manager"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "nautilus",
+ "arch": "nautilus",
+ "ubuntu": "nautilus",
+ "debian": "nautilus",
+ "fedora": "nautilus",
+ "opensuse": "nautilus",
+ "void": "nautilus",
+ "alpine": "nautilus"
+ },
+ "logo": "/programs/nautilus/logo.png"
+}
diff --git a/content/programs/navi/logo.png b/content/programs/navi/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/navi/logo.png
@@ -0,0 +1 @@
+Rust
\ No newline at end of file
diff --git a/content/programs/navi/program.json b/content/programs/navi/program.json
index 77f5f6e..bd38864 100644
--- a/content/programs/navi/program.json
+++ b/content/programs/navi/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/navi/logo.png"
+}
diff --git a/content/programs/nb/logo.png b/content/programs/nb/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/nb/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/nb/program.json b/content/programs/nb/program.json
index a0f0048..bcc5c0f 100644
--- a/content/programs/nb/program.json
+++ b/content/programs/nb/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"curl"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/nb/logo.png"
+}
diff --git a/content/programs/ncdu/logo.png b/content/programs/ncdu/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/ncdu/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/ncdu/program.json b/content/programs/ncdu/program.json
index 7a1c859..bf0ae7e 100644
--- a/content/programs/ncdu/program.json
+++ b/content/programs/ncdu/program.json
@@ -5,7 +5,10 @@
"website": "https://dev.yorhel.nl/ncdu",
"git_repo": "https://code.blicky.net/yorhel/ncdu",
"license": "MIT",
- "categories": ["system", "terminal"],
+ "categories": [
+ "system",
+ "terminal"
+ ],
"package_names": {
"default": "ncdu",
"arch": "ncdu",
@@ -15,5 +18,6 @@
"opensuse": "ncdu",
"void": "ncdu",
"alpine": "ncdu"
- }
+ },
+ "logo": "/programs/ncdu/logo.png"
}
diff --git a/content/programs/ncmpcpp/logo.png b/content/programs/ncmpcpp/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/ncmpcpp/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/ncmpcpp/program.json b/content/programs/ncmpcpp/program.json
index 3ff1c6b..cb8375b 100644
--- a/content/programs/ncmpcpp/program.json
+++ b/content/programs/ncmpcpp/program.json
@@ -4,7 +4,10 @@
"description": "A fully featured ncurses-based MPD client.",
"git_repo": "https://github.com/ncmpcpp/ncmpcpp",
"license": "GPL-2.0",
- "categories": ["audio", "terminal"],
+ "categories": [
+ "audio",
+ "terminal"
+ ],
"package_names": {
"default": "ncmpcpp",
"arch": "ncmpcpp",
@@ -14,5 +17,6 @@
"opensuse": "ncmpcpp",
"void": "ncmpcpp",
"alpine": "ncmpcpp"
- }
+ },
+ "logo": "/programs/ncmpcpp/logo.png"
}
diff --git a/content/programs/neofetch/logo.png b/content/programs/neofetch/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/neofetch/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/neofetch/program.json b/content/programs/neofetch/program.json
index d18fab9..b53982b 100644
--- a/content/programs/neofetch/program.json
+++ b/content/programs/neofetch/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/dylanaraps/neofetch",
"git_repo": "https://github.com/dylanaraps/neofetch",
"license": "MIT",
- "categories": ["system", "terminal"],
+ "categories": [
+ "system",
+ "terminal"
+ ],
"package_names": {
"default": "neofetch",
"arch": "neofetch",
@@ -15,5 +18,6 @@
"opensuse": "neofetch",
"void": "neofetch",
"alpine": "neofetch"
- }
+ },
+ "logo": "/programs/neofetch/logo.png"
}
diff --git a/content/programs/neomutt/program.json b/content/programs/neomutt/program.json
index d44b335..c702d51 100644
--- a/content/programs/neomutt/program.json
+++ b/content/programs/neomutt/program.json
@@ -5,7 +5,10 @@
"website": "https://neomutt.org/",
"git_repo": "https://github.com/neomutt/neomutt",
"license": "GPL-2.0",
- "categories": ["communication", "terminal"],
+ "categories": [
+ "communication",
+ "terminal"
+ ],
"package_names": {
"default": "neomutt",
"arch": "neomutt",
@@ -15,5 +18,6 @@
"opensuse": "neomutt",
"void": "neomutt",
"alpine": "neomutt"
- }
+ },
+ "logo": "/programs/neomutt/logo.png"
}
diff --git a/content/programs/neovim/logo.png b/content/programs/neovim/logo.png
new file mode 100644
index 0000000..8ca60a2
--- /dev/null
+++ b/content/programs/neovim/logo.png
@@ -0,0 +1 @@
+Neovim
\ No newline at end of file
diff --git a/content/programs/nerd-fonts/custom_install/install.sh b/content/programs/nerd-fonts/custom_install/install.sh
new file mode 100755
index 0000000..4557a85
--- /dev/null
+++ b/content/programs/nerd-fonts/custom_install/install.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+set -e
+echo "Installing Nerd Fonts (FiraCode)..."
+mkdir -p ~/.local/share/fonts
+cd /tmp
+FONT="FiraCode"
+curl -L -o "${FONT}.zip" "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/${FONT}.zip"
+unzip -o "${FONT}.zip" -d ~/.local/share/fonts/
+rm "${FONT}.zip"
+fc-cache -fv
+echo "FiraCode Nerd Font installed!"
diff --git a/content/programs/nerd-fonts/logo.png b/content/programs/nerd-fonts/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/nerd-fonts/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/nerd-fonts/program.json b/content/programs/nerd-fonts/program.json
new file mode 100644
index 0000000..e66675a
--- /dev/null
+++ b/content/programs/nerd-fonts/program.json
@@ -0,0 +1,26 @@
+{
+ "name": "Nerd Fonts",
+ "slug": "nerd-fonts",
+ "description": "Patched fonts with extra glyphs/icons for development.",
+ "website": "https://www.nerdfonts.com/",
+ "git_repo": "https://github.com/ryanoasis/nerd-fonts",
+ "license": "MIT",
+ "categories": [
+ "system",
+ "development"
+ ],
+ "dependencies": [
+ "curl"
+ ],
+ "package_names": {
+ "default": "CUSTOM_INSTALL",
+ "arch": "nerd-fonts-complete",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/nerd-fonts/logo.png"
+}
diff --git a/content/programs/netbeans/logo.png b/content/programs/netbeans/logo.png
new file mode 100644
index 0000000..074b4bb
--- /dev/null
+++ b/content/programs/netbeans/logo.png
@@ -0,0 +1 @@
+Apache Maven
\ No newline at end of file
diff --git a/content/programs/netbeans/program.json b/content/programs/netbeans/program.json
index 0948f89..7b9c06e 100644
--- a/content/programs/netbeans/program.json
+++ b/content/programs/netbeans/program.json
@@ -4,8 +4,14 @@
"description": "Free, open source IDE for Java, HTML5, PHP and C/C++ development.",
"website": "https://netbeans.apache.org/",
"license": "Apache-2.0",
- "categories": ["ide", "development"],
- "dependencies": ["curl", "java"],
+ "categories": [
+ "ide",
+ "development"
+ ],
+ "dependencies": [
+ "curl",
+ "java"
+ ],
"package_names": {
"default": "netbeans",
"arch": "netbeans",
@@ -15,5 +21,6 @@
"opensuse": "netbeans",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/netbeans/logo.png"
}
diff --git a/content/programs/networkmanager/logo.png b/content/programs/networkmanager/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/networkmanager/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/networkmanager/program.json b/content/programs/networkmanager/program.json
index b70bf96..874c678 100644
--- a/content/programs/networkmanager/program.json
+++ b/content/programs/networkmanager/program.json
@@ -4,7 +4,10 @@
"description": "A network management tool that makes network configuration automatic.",
"website": "https://networkmanager.dev/",
"license": "GPL-2.0",
- "categories": ["network", "system"],
+ "categories": [
+ "network",
+ "system"
+ ],
"package_names": {
"default": "networkmanager",
"arch": "networkmanager",
@@ -14,5 +17,6 @@
"opensuse": "NetworkManager",
"void": "NetworkManager",
"alpine": "networkmanager"
- }
+ },
+ "logo": "/programs/networkmanager/logo.png"
}
diff --git a/content/programs/newsboat/logo.png b/content/programs/newsboat/logo.png
new file mode 100644
index 0000000..6c21250
--- /dev/null
+++ b/content/programs/newsboat/logo.png
@@ -0,0 +1,7 @@
+
+404 Not Found
+
+404 Not Found
+
nginx/1.24.0 (Ubuntu)
+
+
diff --git a/content/programs/newsboat/program.json b/content/programs/newsboat/program.json
index a3c4c0d..bfbaff7 100644
--- a/content/programs/newsboat/program.json
+++ b/content/programs/newsboat/program.json
@@ -5,7 +5,10 @@
"website": "https://newsboat.org/",
"git_repo": "https://github.com/newsboat/newsboat",
"license": "MIT",
- "categories": ["rss", "terminal"],
+ "categories": [
+ "rss",
+ "terminal"
+ ],
"package_names": {
"default": "newsboat",
"arch": "newsboat",
@@ -15,5 +18,6 @@
"opensuse": "newsboat",
"void": "newsboat",
"alpine": "newsboat"
- }
+ },
+ "logo": "/programs/newsboat/logo.png"
}
diff --git a/content/programs/nextcloud/logo.png b/content/programs/nextcloud/logo.png
new file mode 100644
index 0000000..52463bf
--- /dev/null
+++ b/content/programs/nextcloud/logo.png
@@ -0,0 +1 @@
+Nextcloud
\ No newline at end of file
diff --git a/content/programs/nitrogen/logo.png b/content/programs/nitrogen/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/nitrogen/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/nitrogen/program.json b/content/programs/nitrogen/program.json
index 9ae8165..8d3dd0b 100644
--- a/content/programs/nitrogen/program.json
+++ b/content/programs/nitrogen/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/l3ib/nitrogen",
"git_repo": "https://github.com/l3ib/nitrogen",
"license": "GPL-2.0",
- "categories": ["display", "theming"],
+ "categories": [
+ "display",
+ "theming"
+ ],
"dependencies": [],
"package_names": {
"default": "nitrogen",
@@ -16,5 +19,6 @@
"opensuse": "nitrogen",
"void": "nitrogen",
"alpine": "nitrogen"
- }
+ },
+ "logo": "/programs/nitrogen/logo.png"
}
diff --git a/content/programs/nix/custom_install/install.sh b/content/programs/nix/custom_install/install.sh
new file mode 100755
index 0000000..0d02fd7
--- /dev/null
+++ b/content/programs/nix/custom_install/install.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+set -e
+echo "Installing Nix package manager..."
+curl -L https://nixos.org/nix/install | sh
+echo "Nix installed. Restart your shell or run: . ~/.nix-profile/etc/profile.d/nix.sh"
diff --git a/content/programs/nix/logo.png b/content/programs/nix/logo.png
new file mode 100644
index 0000000..e5b6c39
--- /dev/null
+++ b/content/programs/nix/logo.png
@@ -0,0 +1 @@
+NixOS
\ No newline at end of file
diff --git a/content/programs/nix/program.json b/content/programs/nix/program.json
new file mode 100644
index 0000000..94a6ef1
--- /dev/null
+++ b/content/programs/nix/program.json
@@ -0,0 +1,26 @@
+{
+ "name": "Nix",
+ "slug": "nix",
+ "description": "Purely functional package manager and build system.",
+ "website": "https://nixos.org/",
+ "git_repo": "https://github.com/NixOS/nix",
+ "license": "LGPL-2.1",
+ "categories": [
+ "package-manager",
+ "development"
+ ],
+ "dependencies": [
+ "curl"
+ ],
+ "package_names": {
+ "default": "CUSTOM_INSTALL",
+ "arch": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/nix/logo.png"
+}
diff --git a/content/programs/nmap/program.json b/content/programs/nmap/program.json
index 31430c6..4c96d25 100644
--- a/content/programs/nmap/program.json
+++ b/content/programs/nmap/program.json
@@ -5,7 +5,10 @@
"website": "https://nmap.org/",
"git_repo": "https://github.com/nmap/nmap",
"license": "GPL-2.0+",
- "categories": ["network", "security"],
+ "categories": [
+ "network",
+ "security"
+ ],
"package_names": {
"default": "nmap",
"arch": "nmap",
@@ -15,5 +18,6 @@
"opensuse": "nmap",
"void": "nmap",
"alpine": "nmap"
- }
+ },
+ "logo": "/programs/nmap/logo.png"
}
diff --git a/content/programs/nnn/logo.png b/content/programs/nnn/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/nnn/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/nnn/program.json b/content/programs/nnn/program.json
index 8c3b3d5..afaa74b 100644
--- a/content/programs/nnn/program.json
+++ b/content/programs/nnn/program.json
@@ -4,7 +4,10 @@
"description": "A full-featured terminal file manager.",
"git_repo": "https://github.com/jarun/nnn",
"license": "BSD-2-Clause",
- "categories": ["file-manager", "terminal"],
+ "categories": [
+ "file-manager",
+ "terminal"
+ ],
"package_names": {
"default": "nnn",
"arch": "nnn",
@@ -14,5 +17,6 @@
"opensuse": "nnn",
"void": "nnn",
"alpine": "nnn"
- }
+ },
+ "logo": "/programs/nnn/logo.png"
}
diff --git a/content/programs/no-more-secrets/logo.png b/content/programs/no-more-secrets/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/no-more-secrets/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/no-more-secrets/program.json b/content/programs/no-more-secrets/program.json
index ea71181..ffe7f08 100644
--- a/content/programs/no-more-secrets/program.json
+++ b/content/programs/no-more-secrets/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/bartobri/no-more-secrets",
"git_repo": "https://github.com/bartobri/no-more-secrets",
"license": "MIT",
- "categories": ["fun", "terminal"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "fun",
+ "terminal"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "no-more-secrets",
"arch": "no-more-secrets",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/no-more-secrets/logo.png"
}
diff --git a/content/programs/notify-send/logo.png b/content/programs/notify-send/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/notify-send/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/notify-send/program.json b/content/programs/notify-send/program.json
index 83bcfa0..2b2e766 100644
--- a/content/programs/notify-send/program.json
+++ b/content/programs/notify-send/program.json
@@ -3,7 +3,10 @@
"slug": "notify-send",
"description": "A command-line tool to send desktop notifications.",
"license": "LGPL-2.1",
- "categories": ["utility", "x11"],
+ "categories": [
+ "utility",
+ "x11"
+ ],
"package_names": {
"default": "libnotify",
"arch": "libnotify",
@@ -13,5 +16,6 @@
"opensuse": "libnotify-tools",
"void": "libnotify",
"alpine": "libnotify"
- }
+ },
+ "logo": "/programs/notify-send/logo.png"
}
diff --git a/content/programs/npm/logo.png b/content/programs/npm/logo.png
new file mode 100644
index 0000000..2bc7cfc
--- /dev/null
+++ b/content/programs/npm/logo.png
@@ -0,0 +1 @@
+npm
\ No newline at end of file
diff --git a/content/programs/nushell/logo.png b/content/programs/nushell/logo.png
new file mode 100644
index 0000000..232ea91
--- /dev/null
+++ b/content/programs/nushell/logo.png
@@ -0,0 +1 @@
+Nushell
\ No newline at end of file
diff --git a/content/programs/nvtop/logo.png b/content/programs/nvtop/logo.png
new file mode 100644
index 0000000..e427e2c
--- /dev/null
+++ b/content/programs/nvtop/logo.png
@@ -0,0 +1 @@
+NVIDIA
\ No newline at end of file
diff --git a/content/programs/nvtop/program.json b/content/programs/nvtop/program.json
index 284fb25..cded1bf 100644
--- a/content/programs/nvtop/program.json
+++ b/content/programs/nvtop/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/Syllo/nvtop",
"git_repo": "https://github.com/Syllo/nvtop",
"license": "GPL-3.0",
- "categories": ["system-monitor", "terminal"],
+ "categories": [
+ "system-monitor",
+ "terminal"
+ ],
"dependencies": [],
"package_names": {
"default": "nvtop",
@@ -16,5 +19,6 @@
"opensuse": "nvtop",
"void": "nvtop",
"alpine": "nvtop"
- }
+ },
+ "logo": "/programs/nvtop/logo.png"
}
diff --git a/content/programs/obs-studio/logo.png b/content/programs/obs-studio/logo.png
new file mode 100644
index 0000000..090e856
--- /dev/null
+++ b/content/programs/obs-studio/logo.png
@@ -0,0 +1 @@
+OBS Studio
\ No newline at end of file
diff --git a/content/programs/obsidian/logo.png b/content/programs/obsidian/logo.png
new file mode 100644
index 0000000..8b30067
--- /dev/null
+++ b/content/programs/obsidian/logo.png
@@ -0,0 +1 @@
+Obsidian
\ No newline at end of file
diff --git a/content/programs/onlyoffice/custom_install/install.sh b/content/programs/onlyoffice/custom_install/install.sh
new file mode 100755
index 0000000..ad3312c
--- /dev/null
+++ b/content/programs/onlyoffice/custom_install/install.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+set -e
+echo "Installing OnlyOffice via Flatpak..."
+if command -v flatpak &>/dev/null; then
+ flatpak install -y flathub org.onlyoffice.desktopeditors
+else
+ echo "Flatpak not found. Install flatpak first."
+ exit 1
+fi
diff --git a/content/programs/onlyoffice/logo.png b/content/programs/onlyoffice/logo.png
new file mode 100644
index 0000000..4cea618
--- /dev/null
+++ b/content/programs/onlyoffice/logo.png
@@ -0,0 +1 @@
+ONLYOFFICE
\ No newline at end of file
diff --git a/content/programs/onlyoffice/program.json b/content/programs/onlyoffice/program.json
new file mode 100644
index 0000000..eab3213
--- /dev/null
+++ b/content/programs/onlyoffice/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "OnlyOffice",
+ "slug": "onlyoffice",
+ "description": "Powerful online and offline office suite.",
+ "website": "https://www.onlyoffice.com/",
+ "git_repo": "https://github.com/ONLYOFFICE/DesktopEditors",
+ "license": "AGPL-3.0",
+ "categories": [
+ "office",
+ "productivity"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "CUSTOM_INSTALL",
+ "arch": "onlyoffice-bin",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/onlyoffice/logo.png"
+}
diff --git a/content/programs/oomox/logo.png b/content/programs/oomox/logo.png
new file mode 100644
index 0000000..4d9150f
--- /dev/null
+++ b/content/programs/oomox/logo.png
@@ -0,0 +1 @@
+GNOME
\ No newline at end of file
diff --git a/content/programs/oomox/program.json b/content/programs/oomox/program.json
index f55f64b..1e0e8a7 100644
--- a/content/programs/oomox/program.json
+++ b/content/programs/oomox/program.json
@@ -5,8 +5,12 @@
"website": "https://github.com/themix-project/oomox",
"git_repo": "https://github.com/themix-project/oomox",
"license": "GPL-3.0",
- "categories": ["theming"],
- "dependencies": ["pip"],
+ "categories": [
+ "theming"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "oomox",
"arch": "oomox",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/oomox/logo.png"
}
diff --git a/content/programs/openbox/logo.png b/content/programs/openbox/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/openbox/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/openbox/program.json b/content/programs/openbox/program.json
index aab308b..deca3bc 100644
--- a/content/programs/openbox/program.json
+++ b/content/programs/openbox/program.json
@@ -5,7 +5,9 @@
"website": "http://openbox.org/",
"git_repo": "https://github.com/danakj/openbox",
"license": "GPL-2.0",
- "categories": ["window-manager"],
+ "categories": [
+ "window-manager"
+ ],
"dependencies": [],
"package_names": {
"default": "openbox",
@@ -16,5 +18,6 @@
"opensuse": "openbox",
"void": "openbox",
"alpine": "openbox"
- }
+ },
+ "logo": "/programs/openbox/logo.png"
}
diff --git a/content/programs/opera/logo.png b/content/programs/opera/logo.png
new file mode 100644
index 0000000..3549b1c
--- /dev/null
+++ b/content/programs/opera/logo.png
@@ -0,0 +1 @@
+Opera
\ No newline at end of file
diff --git a/content/programs/pacman/logo.png b/content/programs/pacman/logo.png
new file mode 100644
index 0000000..763843e
--- /dev/null
+++ b/content/programs/pacman/logo.png
@@ -0,0 +1 @@
+Arch Linux
\ No newline at end of file
diff --git a/content/programs/pactl/logo.png b/content/programs/pactl/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/pactl/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/pactl/program.json b/content/programs/pactl/program.json
index bc670b9..0a963c2 100644
--- a/content/programs/pactl/program.json
+++ b/content/programs/pactl/program.json
@@ -3,7 +3,10 @@
"slug": "pactl",
"description": "Command-line control for PulseAudio sound server.",
"license": "LGPL-2.1",
- "categories": ["audio", "terminal"],
+ "categories": [
+ "audio",
+ "terminal"
+ ],
"package_names": {
"default": "pulseaudio-utils",
"arch": "libpulse",
@@ -13,5 +16,6 @@
"opensuse": "pulseaudio-utils",
"void": "pulseaudio-utils",
"alpine": "pulseaudio-utils"
- }
+ },
+ "logo": "/programs/pactl/logo.png"
}
diff --git a/content/programs/pass/logo.png b/content/programs/pass/logo.png
new file mode 100644
index 0000000..edfb29b
--- /dev/null
+++ b/content/programs/pass/logo.png
@@ -0,0 +1 @@
+GNU
\ No newline at end of file
diff --git a/content/programs/pass/program.json b/content/programs/pass/program.json
index 507915b..4c8f87a 100644
--- a/content/programs/pass/program.json
+++ b/content/programs/pass/program.json
@@ -5,7 +5,10 @@
"website": "https://www.passwordstore.org/",
"git_repo": "https://git.zx2c4.com/password-store/",
"license": "GPL-2.0",
- "categories": ["security", "terminal"],
+ "categories": [
+ "security",
+ "terminal"
+ ],
"package_names": {
"default": "pass",
"arch": "pass",
@@ -15,5 +18,6 @@
"opensuse": "password-store",
"void": "pass",
"alpine": "pass"
- }
+ },
+ "logo": "/programs/pass/logo.png"
}
diff --git a/content/programs/pavucontrol/logo.png b/content/programs/pavucontrol/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/pavucontrol/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/pavucontrol/program.json b/content/programs/pavucontrol/program.json
new file mode 100644
index 0000000..20b15e8
--- /dev/null
+++ b/content/programs/pavucontrol/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Pavucontrol",
+ "slug": "pavucontrol",
+ "description": "PulseAudio Volume Control \u2014 simple GTK mixer.",
+ "website": "https://freedesktop.org/software/pulseaudio/pavucontrol/",
+ "git_repo": "https://gitlab.freedesktop.org/pulseaudio/pavucontrol",
+ "license": "GPL-2.0+",
+ "categories": [
+ "audio",
+ "system"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "pavucontrol",
+ "arch": "pavucontrol",
+ "ubuntu": "pavucontrol",
+ "debian": "pavucontrol",
+ "fedora": "pavucontrol",
+ "opensuse": "pavucontrol",
+ "void": "pavucontrol",
+ "alpine": "pavucontrol"
+ },
+ "logo": "/programs/pavucontrol/logo.png"
+}
diff --git a/content/programs/pcmanfm/logo.png b/content/programs/pcmanfm/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/pcmanfm/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/pcmanfm/program.json b/content/programs/pcmanfm/program.json
index 55ac3a1..3277936 100644
--- a/content/programs/pcmanfm/program.json
+++ b/content/programs/pcmanfm/program.json
@@ -4,7 +4,9 @@
"description": "A fast and lightweight file manager.",
"git_repo": "https://github.com/lxde/pcmanfm",
"license": "GPL-2.0",
- "categories": ["file-manager"],
+ "categories": [
+ "file-manager"
+ ],
"package_names": {
"default": "pcmanfm",
"arch": "pcmanfm",
@@ -14,5 +16,6 @@
"opensuse": "pcmanfm",
"void": "pcmanfm",
"alpine": "pcmanfm"
- }
+ },
+ "logo": "/programs/pcmanfm/logo.png"
}
diff --git a/content/programs/pdftoppm/logo.png b/content/programs/pdftoppm/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/pdftoppm/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/pdftoppm/program.json b/content/programs/pdftoppm/program.json
index bffb48c..103369f 100644
--- a/content/programs/pdftoppm/program.json
+++ b/content/programs/pdftoppm/program.json
@@ -1,10 +1,12 @@
{
"name": "pdftoppm",
"slug": "pdftoppm",
- "description": "Converts PDF pages to images — part of the poppler utilities.",
+ "description": "Converts PDF pages to images \u2014 part of the poppler utilities.",
"website": "https://poppler.freedesktop.org/",
"license": "GPL-2.0",
- "categories": ["utility"],
+ "categories": [
+ "utility"
+ ],
"package_names": {
"default": "poppler-utils",
"arch": "poppler",
@@ -14,5 +16,6 @@
"opensuse": "poppler-tools",
"void": "poppler-utils",
"alpine": "poppler-utils"
- }
+ },
+ "logo": "/programs/pdftoppm/logo.png"
}
diff --git a/content/programs/peek/logo.png b/content/programs/peek/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/peek/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/peek/program.json b/content/programs/peek/program.json
new file mode 100644
index 0000000..26d8d44
--- /dev/null
+++ b/content/programs/peek/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Peek",
+ "slug": "peek",
+ "description": "Simple animated GIF screen recorder with an easy to use interface.",
+ "website": "https://github.com/phw/peek",
+ "git_repo": "https://github.com/phw/peek",
+ "license": "GPL-3.0+",
+ "categories": [
+ "screenshot",
+ "media"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "peek",
+ "arch": "peek",
+ "ubuntu": "peek",
+ "debian": "peek",
+ "fedora": "peek",
+ "opensuse": "peek",
+ "void": "peek",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/peek/logo.png"
+}
diff --git a/content/programs/picom/logo.png b/content/programs/picom/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/picom/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/picom/program.json b/content/programs/picom/program.json
index 025923e..787bbf5 100644
--- a/content/programs/picom/program.json
+++ b/content/programs/picom/program.json
@@ -1,10 +1,13 @@
{
"name": "picom",
"slug": "picom",
- "description": "A compositor for X11 — adds transparency, shadows, and smooth transitions.",
+ "description": "A compositor for X11 \u2014 adds transparency, shadows, and smooth transitions.",
"git_repo": "https://github.com/yshui/picom",
"license": "MIT",
- "categories": ["x11", "desktop"],
+ "categories": [
+ "x11",
+ "desktop"
+ ],
"package_names": {
"default": "picom",
"arch": "picom",
@@ -14,5 +17,6 @@
"opensuse": "picom",
"void": "picom",
"alpine": "picom"
- }
+ },
+ "logo": "/programs/picom/logo.png"
}
diff --git a/content/programs/pidgin/program.json b/content/programs/pidgin/program.json
index 6749c39..e8bbc03 100644
--- a/content/programs/pidgin/program.json
+++ b/content/programs/pidgin/program.json
@@ -4,7 +4,9 @@
"description": "Chat program that lets you log into multiple chat networks simultaneously.",
"website": "https://www.pidgin.im/",
"license": "GPL-2.0",
- "categories": ["communication"],
+ "categories": [
+ "communication"
+ ],
"package_names": {
"default": "pidgin",
"arch": "pidgin",
@@ -14,5 +16,6 @@
"opensuse": "pidgin",
"void": "pidgin",
"alpine": "pidgin"
- }
+ },
+ "logo": "/programs/pidgin/logo.png"
}
diff --git a/content/programs/pinta/logo.png b/content/programs/pinta/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/pinta/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/pinta/program.json b/content/programs/pinta/program.json
index c8065d1..4e615df 100644
--- a/content/programs/pinta/program.json
+++ b/content/programs/pinta/program.json
@@ -5,7 +5,9 @@
"website": "https://www.pinta-project.com/",
"git_repo": "https://github.com/PintaProject/Pinta",
"license": "MIT",
- "categories": ["image-processing"],
+ "categories": [
+ "image-processing"
+ ],
"package_names": {
"default": "pinta",
"arch": "pinta",
@@ -15,5 +17,6 @@
"opensuse": "pinta",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/pinta/logo.png"
}
diff --git a/content/programs/pip/logo.png b/content/programs/pip/logo.png
new file mode 100644
index 0000000..ac69a89
--- /dev/null
+++ b/content/programs/pip/logo.png
@@ -0,0 +1 @@
+PyPI
\ No newline at end of file
diff --git a/content/programs/pipes-sh/logo.png b/content/programs/pipes-sh/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/pipes-sh/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/pipes-sh/program.json b/content/programs/pipes-sh/program.json
index af9befb..89f7566 100644
--- a/content/programs/pipes-sh/program.json
+++ b/content/programs/pipes-sh/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/pipeseroni/pipes.sh",
"git_repo": "https://github.com/pipeseroni/pipes.sh",
"license": "MIT",
- "categories": ["fun", "terminal"],
- "dependencies": ["curl"],
+ "categories": [
+ "fun",
+ "terminal"
+ ],
+ "dependencies": [
+ "curl"
+ ],
"package_names": {
"default": "pipes.sh",
"arch": "pipes.sh",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/pipes-sh/logo.png"
}
diff --git a/content/programs/playonlinux/logo.png b/content/programs/playonlinux/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/playonlinux/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/playonlinux/program.json b/content/programs/playonlinux/program.json
index 8f2620f..8e8fe04 100644
--- a/content/programs/playonlinux/program.json
+++ b/content/programs/playonlinux/program.json
@@ -4,7 +4,9 @@
"description": "Frontend for Wine that simplifies installing Windows applications on Linux.",
"website": "https://www.playonlinux.com/",
"license": "GPL-3.0",
- "categories": ["game"],
+ "categories": [
+ "game"
+ ],
"package_names": {
"default": "playonlinux",
"arch": "playonlinux",
@@ -14,5 +16,6 @@
"opensuse": "playonlinux",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/playonlinux/logo.png"
}
diff --git a/content/programs/podman/logo.png b/content/programs/podman/logo.png
new file mode 100644
index 0000000..9bf7593
--- /dev/null
+++ b/content/programs/podman/logo.png
@@ -0,0 +1 @@
+Podman
\ No newline at end of file
diff --git a/content/programs/podman/program.json b/content/programs/podman/program.json
new file mode 100644
index 0000000..21409ee
--- /dev/null
+++ b/content/programs/podman/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Podman",
+ "slug": "podman",
+ "description": "Daemonless container engine for developing, managing, and running OCI containers.",
+ "website": "https://podman.io/",
+ "git_repo": "https://github.com/containers/podman",
+ "license": "Apache-2.0",
+ "categories": [
+ "devops",
+ "development"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "podman",
+ "arch": "podman",
+ "ubuntu": "podman",
+ "debian": "podman",
+ "fedora": "podman",
+ "opensuse": "podman",
+ "void": "podman",
+ "alpine": "podman"
+ },
+ "logo": "/programs/podman/logo.png"
+}
diff --git a/content/programs/polybar/program.json b/content/programs/polybar/program.json
index 423367b..8d0b43b 100644
--- a/content/programs/polybar/program.json
+++ b/content/programs/polybar/program.json
@@ -5,8 +5,13 @@
"website": "https://polybar.github.io/",
"git_repo": "https://github.com/polybar/polybar",
"license": "MIT",
- "categories": ["status-bar"],
- "dependencies": ["git-dep", "cmake"],
+ "categories": [
+ "status-bar"
+ ],
+ "dependencies": [
+ "git-dep",
+ "cmake"
+ ],
"package_names": {
"default": "polybar",
"arch": "polybar",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "polybar",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/polybar/logo.png"
}
diff --git a/content/programs/powerlevel10k/logo.png b/content/programs/powerlevel10k/logo.png
new file mode 100644
index 0000000..1398048
--- /dev/null
+++ b/content/programs/powerlevel10k/logo.png
@@ -0,0 +1 @@
+Zsh
\ No newline at end of file
diff --git a/content/programs/powerlevel10k/program.json b/content/programs/powerlevel10k/program.json
index 29de8ef..8aa2814 100644
--- a/content/programs/powerlevel10k/program.json
+++ b/content/programs/powerlevel10k/program.json
@@ -5,8 +5,14 @@
"website": "https://github.com/romkatv/powerlevel10k",
"git_repo": "https://github.com/romkatv/powerlevel10k",
"license": "MIT",
- "categories": ["shell", "terminal"],
- "dependencies": ["git-dep", "zsh"],
+ "categories": [
+ "shell",
+ "terminal"
+ ],
+ "dependencies": [
+ "git-dep",
+ "zsh"
+ ],
"package_names": {
"default": "zsh-theme-powerlevel10k",
"arch": "zsh-theme-powerlevel10k",
@@ -16,5 +22,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/powerlevel10k/logo.png"
}
diff --git a/content/programs/procs/logo.png b/content/programs/procs/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/procs/logo.png
@@ -0,0 +1 @@
+Rust
\ No newline at end of file
diff --git a/content/programs/procs/program.json b/content/programs/procs/program.json
index 6bf439c..ad98c04 100644
--- a/content/programs/procs/program.json
+++ b/content/programs/procs/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/procs/logo.png"
+}
diff --git a/content/programs/pulsemixer/logo.png b/content/programs/pulsemixer/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/pulsemixer/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/pulsemixer/program.json b/content/programs/pulsemixer/program.json
index a4f69e4..c9f8873 100644
--- a/content/programs/pulsemixer/program.json
+++ b/content/programs/pulsemixer/program.json
@@ -4,7 +4,10 @@
"description": "A CLI and curses mixer for PulseAudio.",
"git_repo": "https://github.com/GeorgeFilipkin/pulsemixer",
"license": "MIT",
- "categories": ["audio", "terminal"],
+ "categories": [
+ "audio",
+ "terminal"
+ ],
"package_names": {
"default": "pulsemixer",
"arch": "pulsemixer",
@@ -14,5 +17,6 @@
"opensuse": "pulsemixer",
"void": "pulsemixer",
"alpine": "pulsemixer"
- }
+ },
+ "logo": "/programs/pulsemixer/logo.png"
}
diff --git a/content/programs/pyright/logo.png b/content/programs/pyright/logo.png
new file mode 100644
index 0000000..e1b14ec
--- /dev/null
+++ b/content/programs/pyright/logo.png
@@ -0,0 +1 @@
+Python
\ No newline at end of file
diff --git a/content/programs/pyright/program.json b/content/programs/pyright/program.json
index 8d797be..55e24ed 100644
--- a/content/programs/pyright/program.json
+++ b/content/programs/pyright/program.json
@@ -15,7 +15,11 @@
"default": "CUSTOM_INSTALL",
"arch": "pyright",
"ubuntu": "pyright",
- "void": "pyright"
+ "void": "pyright",
+ "alpine": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL"
},
"logo": "/programs/pyright/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/pywal/logo.png b/content/programs/pywal/logo.png
new file mode 100644
index 0000000..e1b14ec
--- /dev/null
+++ b/content/programs/pywal/logo.png
@@ -0,0 +1 @@
+Python
\ No newline at end of file
diff --git a/content/programs/pywal/program.json b/content/programs/pywal/program.json
index 97ba1e0..0e3fa67 100644
--- a/content/programs/pywal/program.json
+++ b/content/programs/pywal/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/dylanaraps/pywal",
"git_repo": "https://github.com/dylanaraps/pywal",
"license": "MIT",
- "categories": ["theming", "terminal"],
- "dependencies": ["pip"],
+ "categories": [
+ "theming",
+ "terminal"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "python-pywal",
"arch": "python-pywal",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/pywal/logo.png"
}
diff --git a/content/programs/qemu/logo.png b/content/programs/qemu/logo.png
new file mode 100644
index 0000000..ea0df42
--- /dev/null
+++ b/content/programs/qemu/logo.png
@@ -0,0 +1 @@
+QEMU
\ No newline at end of file
diff --git a/content/programs/qterminal/logo.png b/content/programs/qterminal/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/qterminal/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/qterminal/program.json b/content/programs/qterminal/program.json
index 5bd5414..1777695 100644
--- a/content/programs/qterminal/program.json
+++ b/content/programs/qterminal/program.json
@@ -5,7 +5,9 @@
"website": "https://github.com/lxqt/qterminal",
"git_repo": "https://github.com/lxqt/qterminal",
"license": "GPL-2.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"dependencies": [],
"package_names": {
"default": "qterminal",
@@ -16,5 +18,6 @@
"opensuse": "qterminal",
"void": "qterminal",
"alpine": "qterminal"
- }
+ },
+ "logo": "/programs/qterminal/logo.png"
}
diff --git a/content/programs/qtile/logo.png b/content/programs/qtile/logo.png
new file mode 100644
index 0000000..e1b14ec
--- /dev/null
+++ b/content/programs/qtile/logo.png
@@ -0,0 +1 @@
+Python
\ No newline at end of file
diff --git a/content/programs/qtile/program.json b/content/programs/qtile/program.json
index e3a55cd..c49843e 100644
--- a/content/programs/qtile/program.json
+++ b/content/programs/qtile/program.json
@@ -5,8 +5,12 @@
"website": "http://www.qtile.org/",
"git_repo": "https://github.com/qtile/qtile",
"license": "MIT",
- "categories": ["window-manager"],
- "dependencies": ["pip"],
+ "categories": [
+ "window-manager"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "qtile",
"arch": "qtile",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/qtile/logo.png"
}
diff --git a/content/programs/ranger/logo.png b/content/programs/ranger/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/ranger/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/ranger/program.json b/content/programs/ranger/program.json
index 061218e..86f91ab 100644
--- a/content/programs/ranger/program.json
+++ b/content/programs/ranger/program.json
@@ -5,7 +5,10 @@
"website": "https://ranger.github.io/",
"git_repo": "https://github.com/ranger/ranger",
"license": "GPL-3.0",
- "categories": ["file-manager", "terminal"],
+ "categories": [
+ "file-manager",
+ "terminal"
+ ],
"package_names": {
"default": "ranger",
"arch": "ranger",
@@ -15,5 +18,6 @@
"opensuse": "ranger",
"void": "ranger",
"alpine": "ranger"
- }
+ },
+ "logo": "/programs/ranger/logo.png"
}
diff --git a/content/programs/rawtherapee/logo.png b/content/programs/rawtherapee/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/rawtherapee/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/rawtherapee/program.json b/content/programs/rawtherapee/program.json
new file mode 100644
index 0000000..12f7f10
--- /dev/null
+++ b/content/programs/rawtherapee/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "RawTherapee",
+ "slug": "rawtherapee",
+ "description": "Powerful cross-platform RAW photo processing software.",
+ "website": "https://rawtherapee.com/",
+ "git_repo": "https://github.com/Beep6581/RawTherapee",
+ "license": "GPL-3.0+",
+ "categories": [
+ "media",
+ "image-processing"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "rawtherapee",
+ "arch": "rawtherapee",
+ "ubuntu": "rawtherapee",
+ "debian": "rawtherapee",
+ "fedora": "rawtherapee",
+ "opensuse": "rawtherapee",
+ "void": "rawtherapee",
+ "alpine": "rawtherapee"
+ },
+ "logo": "/programs/rawtherapee/logo.png"
+}
diff --git a/content/programs/rclone/logo.png b/content/programs/rclone/logo.png
new file mode 100644
index 0000000..e35f1d5
--- /dev/null
+++ b/content/programs/rclone/logo.png
@@ -0,0 +1 @@
+Rclone
\ No newline at end of file
diff --git a/content/programs/redshift/program.json b/content/programs/redshift/program.json
index 936c4ce..ba0585e 100644
--- a/content/programs/redshift/program.json
+++ b/content/programs/redshift/program.json
@@ -5,7 +5,10 @@
"website": "http://jonls.dk/redshift/",
"git_repo": "https://github.com/jonls/redshift",
"license": "GPL-3.0",
- "categories": ["x11", "utility"],
+ "categories": [
+ "x11",
+ "utility"
+ ],
"package_names": {
"default": "redshift",
"arch": "redshift",
@@ -15,5 +18,6 @@
"opensuse": "redshift",
"void": "redshift",
"alpine": "redshift"
- }
+ },
+ "logo": "/programs/redshift/logo.png"
}
diff --git a/content/programs/restic/program.json b/content/programs/restic/program.json
index c3dbe84..9ce1761 100644
--- a/content/programs/restic/program.json
+++ b/content/programs/restic/program.json
@@ -5,7 +5,9 @@
"website": "https://restic.net/",
"git_repo": "https://github.com/restic/restic",
"license": "BSD-2-Clause",
- "categories": ["system"],
+ "categories": [
+ "system"
+ ],
"package_names": {
"default": "restic",
"arch": "restic",
@@ -15,5 +17,6 @@
"opensuse": "restic",
"void": "restic",
"alpine": "restic"
- }
+ },
+ "logo": "/programs/restic/logo.png"
}
diff --git a/content/programs/retext/logo.png b/content/programs/retext/logo.png
new file mode 100644
index 0000000..74c121d
--- /dev/null
+++ b/content/programs/retext/logo.png
@@ -0,0 +1 @@
+Markdown
\ No newline at end of file
diff --git a/content/programs/retext/program.json b/content/programs/retext/program.json
index ed82566..35075c4 100644
--- a/content/programs/retext/program.json
+++ b/content/programs/retext/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/retext-project/retext",
"git_repo": "https://github.com/retext-project/retext",
"license": "GPL-3.0",
- "categories": ["editor", "markdown"],
- "dependencies": ["pip"],
+ "categories": [
+ "editor",
+ "markdown"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "retext",
"arch": "retext",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/retext/logo.png"
}
diff --git a/content/programs/rhythmbox/logo.png b/content/programs/rhythmbox/logo.png
new file mode 100644
index 0000000..4d9150f
--- /dev/null
+++ b/content/programs/rhythmbox/logo.png
@@ -0,0 +1 @@
+GNOME
\ No newline at end of file
diff --git a/content/programs/rhythmbox/program.json b/content/programs/rhythmbox/program.json
index 6b184fd..8c05d61 100644
--- a/content/programs/rhythmbox/program.json
+++ b/content/programs/rhythmbox/program.json
@@ -5,7 +5,10 @@
"website": "https://wiki.gnome.org/Apps/Rhythmbox",
"git_repo": "https://github.com/GNOME/rhythmbox",
"license": "GPL-2.0",
- "categories": ["audio", "music"],
+ "categories": [
+ "audio",
+ "music"
+ ],
"package_names": {
"default": "rhythmbox",
"arch": "rhythmbox",
@@ -15,5 +18,6 @@
"opensuse": "rhythmbox",
"void": "rhythmbox",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/rhythmbox/logo.png"
}
diff --git a/content/programs/ripgrep/program.json b/content/programs/ripgrep/program.json
index f4c7c86..1aa9299 100644
--- a/content/programs/ripgrep/program.json
+++ b/content/programs/ripgrep/program.json
@@ -4,7 +4,9 @@
"description": "A line-oriented search tool that recursively searches directories.",
"git_repo": "https://github.com/BurntSushi/ripgrep",
"license": "MIT/Unlicense",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "ripgrep",
"arch": "ripgrep",
@@ -14,5 +16,6 @@
"opensuse": "ripgrep",
"void": "ripgrep",
"alpine": "ripgrep"
- }
+ },
+ "logo": "/programs/ripgrep/logo.png"
}
diff --git a/content/programs/river/logo.png b/content/programs/river/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/river/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/river/program.json b/content/programs/river/program.json
index 2a47fa7..03f630b 100644
--- a/content/programs/river/program.json
+++ b/content/programs/river/program.json
@@ -5,7 +5,9 @@
"website": "https://github.com/riverwm/river",
"git_repo": "https://github.com/riverwm/river",
"license": "GPL-3.0",
- "categories": ["window-manager"],
+ "categories": [
+ "window-manager"
+ ],
"dependencies": [],
"package_names": {
"default": "river",
@@ -16,5 +18,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "river",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/river/logo.png"
}
diff --git a/content/programs/rofi/logo.png b/content/programs/rofi/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/rofi/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/rofi/program.json b/content/programs/rofi/program.json
new file mode 100644
index 0000000..c895fc1
--- /dev/null
+++ b/content/programs/rofi/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Rofi",
+ "slug": "rofi",
+ "description": "Window switcher, application launcher, and dmenu replacement.",
+ "website": "https://github.com/davatorium/rofi",
+ "git_repo": "https://github.com/davatorium/rofi",
+ "license": "MIT",
+ "categories": [
+ "launcher",
+ "cli"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "rofi",
+ "arch": "rofi",
+ "ubuntu": "rofi",
+ "debian": "rofi",
+ "fedora": "rofi",
+ "opensuse": "rofi",
+ "void": "rofi",
+ "alpine": "rofi"
+ },
+ "logo": "/programs/rofi/logo.png"
+}
diff --git a/content/programs/rust/custom_install/install.sh b/content/programs/rust/custom_install/install.sh
new file mode 100755
index 0000000..21de6cc
--- /dev/null
+++ b/content/programs/rust/custom_install/install.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+set -e
+echo "Installing Rust via rustup..."
+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
+echo "Rust installed. Restart your shell or run: source ~/.cargo/env"
diff --git a/content/programs/rust/logo.png b/content/programs/rust/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/rust/logo.png
@@ -0,0 +1 @@
+Rust
\ No newline at end of file
diff --git a/content/programs/rust/program.json b/content/programs/rust/program.json
new file mode 100644
index 0000000..ece6235
--- /dev/null
+++ b/content/programs/rust/program.json
@@ -0,0 +1,26 @@
+{
+ "name": "Rust",
+ "slug": "rust",
+ "description": "Systems programming language focused on safety and performance.",
+ "website": "https://www.rust-lang.org/",
+ "git_repo": "https://github.com/rust-lang/rust",
+ "license": "MIT/Apache-2.0",
+ "categories": [
+ "language",
+ "development"
+ ],
+ "dependencies": [
+ "curl"
+ ],
+ "package_names": {
+ "default": "CUSTOM_INSTALL",
+ "arch": "rust",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "rust",
+ "opensuse": "rust",
+ "void": "rust",
+ "alpine": "rust"
+ },
+ "logo": "/programs/rust/logo.png"
+}
diff --git a/content/programs/rxvt-unicode/logo.png b/content/programs/rxvt-unicode/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/rxvt-unicode/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/rxvt-unicode/program.json b/content/programs/rxvt-unicode/program.json
index 3fc73f5..7591d06 100644
--- a/content/programs/rxvt-unicode/program.json
+++ b/content/programs/rxvt-unicode/program.json
@@ -4,7 +4,9 @@
"description": "Fork of rxvt terminal emulator with Unicode support.",
"website": "http://software.schmorp.de/pkg/rxvt-unicode.html",
"license": "GPL-2.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"dependencies": [],
"package_names": {
"default": "rxvt-unicode",
@@ -15,5 +17,6 @@
"opensuse": "rxvt-unicode",
"void": "rxvt-unicode",
"alpine": "rxvt-unicode"
- }
+ },
+ "logo": "/programs/rxvt-unicode/logo.png"
}
diff --git a/content/programs/s-tui/logo.png b/content/programs/s-tui/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/s-tui/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/s-tui/program.json b/content/programs/s-tui/program.json
index 0c04eab..e981146 100644
--- a/content/programs/s-tui/program.json
+++ b/content/programs/s-tui/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/amanusk/s-tui",
"git_repo": "https://github.com/amanusk/s-tui",
"license": "GPL-2.0",
- "categories": ["system-monitor", "terminal"],
- "dependencies": ["pip"],
+ "categories": [
+ "system-monitor",
+ "terminal"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "s-tui",
"arch": "s-tui",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/s-tui/logo.png"
}
diff --git a/content/programs/sampler/logo.png b/content/programs/sampler/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/sampler/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/sampler/program.json b/content/programs/sampler/program.json
index 5f3cdfd..8e5f70e 100644
--- a/content/programs/sampler/program.json
+++ b/content/programs/sampler/program.json
@@ -5,8 +5,13 @@
"website": "https://sampler.dev/",
"git_repo": "https://github.com/sqshq/sampler",
"license": "Apache-2.0",
- "categories": ["system-monitor", "terminal"],
- "dependencies": ["golang"],
+ "categories": [
+ "system-monitor",
+ "terminal"
+ ],
+ "dependencies": [
+ "golang"
+ ],
"package_names": {
"default": "sampler",
"arch": "sampler",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/sampler/logo.png"
}
diff --git a/content/programs/shotcut/program.json b/content/programs/shotcut/program.json
index d9e8433..de5cf24 100644
--- a/content/programs/shotcut/program.json
+++ b/content/programs/shotcut/program.json
@@ -5,7 +5,9 @@
"website": "https://www.shotcut.org/",
"git_repo": "https://github.com/mltframework/shotcut",
"license": "GPL-3.0",
- "categories": ["media-processing"],
+ "categories": [
+ "media-processing"
+ ],
"package_names": {
"default": "shotcut",
"arch": "shotcut",
@@ -15,5 +17,6 @@
"opensuse": "shotcut",
"void": "shotcut",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/shotcut/logo.png"
}
diff --git a/content/programs/signal-desktop/logo.png b/content/programs/signal-desktop/logo.png
new file mode 100644
index 0000000..81bc449
--- /dev/null
+++ b/content/programs/signal-desktop/logo.png
@@ -0,0 +1 @@
+Signal
\ No newline at end of file
diff --git a/content/programs/simplenote/logo.png b/content/programs/simplenote/logo.png
new file mode 100644
index 0000000..dfa6bfe
--- /dev/null
+++ b/content/programs/simplenote/logo.png
@@ -0,0 +1 @@
+Simplenote
\ No newline at end of file
diff --git a/content/programs/simplescreenrecorder/logo.png b/content/programs/simplescreenrecorder/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/simplescreenrecorder/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/simplescreenrecorder/program.json b/content/programs/simplescreenrecorder/program.json
index 5fad624..c0d6dd5 100644
--- a/content/programs/simplescreenrecorder/program.json
+++ b/content/programs/simplescreenrecorder/program.json
@@ -5,8 +5,13 @@
"website": "https://www.maartenbaert.be/simplescreenrecorder/",
"git_repo": "https://github.com/MaartenBaert/ssr",
"license": "GPL-3.0",
- "categories": ["screenshot", "media-processing"],
- "dependencies": ["git"],
+ "categories": [
+ "screenshot",
+ "media-processing"
+ ],
+ "dependencies": [
+ "git"
+ ],
"package_names": {
"default": "simplescreenrecorder",
"arch": "simplescreenrecorder",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/simplescreenrecorder/logo.png"
}
diff --git a/content/programs/skim/logo.png b/content/programs/skim/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/skim/logo.png
@@ -0,0 +1 @@
+Rust
\ No newline at end of file
diff --git a/content/programs/skim/program.json b/content/programs/skim/program.json
index 5963023..28d073c 100644
--- a/content/programs/skim/program.json
+++ b/content/programs/skim/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/skim/logo.png"
+}
diff --git a/content/programs/slack/custom_install/install.sh b/content/programs/slack/custom_install/install.sh
new file mode 100755
index 0000000..527e296
--- /dev/null
+++ b/content/programs/slack/custom_install/install.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+set -e
+echo "Installing Slack via Snap..."
+if command -v snap &>/dev/null; then
+ sudo snap install slack --classic
+elif command -v flatpak &>/dev/null; then
+ flatpak install -y flathub com.slack.Slack
+else
+ echo "No snap or flatpak found. Install one first."
+ exit 1
+fi
diff --git a/content/programs/slack/program.json b/content/programs/slack/program.json
new file mode 100644
index 0000000..8de42fa
--- /dev/null
+++ b/content/programs/slack/program.json
@@ -0,0 +1,26 @@
+{
+ "name": "Slack",
+ "slug": "slack",
+ "description": "Team collaboration and communication platform.",
+ "website": "https://slack.com/",
+ "git_repo": "https://github.com/slackapi",
+ "license": "Proprietary",
+ "categories": [
+ "communication",
+ "messaging"
+ ],
+ "dependencies": [
+ "curl"
+ ],
+ "package_names": {
+ "default": "CUSTOM_INSTALL",
+ "arch": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/slack/logo.png"
+}
diff --git a/content/programs/smplayer/logo.png b/content/programs/smplayer/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/smplayer/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/smplayer/program.json b/content/programs/smplayer/program.json
index ed09ca5..17e60e4 100644
--- a/content/programs/smplayer/program.json
+++ b/content/programs/smplayer/program.json
@@ -5,7 +5,9 @@
"website": "https://www.smplayer.info/",
"git_repo": "https://github.com/smplayer-dev/smplayer",
"license": "GPL-2.0",
- "categories": ["media-player"],
+ "categories": [
+ "media-player"
+ ],
"package_names": {
"default": "smplayer",
"arch": "smplayer",
@@ -15,5 +17,6 @@
"opensuse": "smplayer",
"void": "smplayer",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/smplayer/logo.png"
}
diff --git a/content/programs/snapd/custom_install/install.sh b/content/programs/snapd/custom_install/install.sh
new file mode 100755
index 0000000..4053cbe
--- /dev/null
+++ b/content/programs/snapd/custom_install/install.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+set -e
+echo "Snapd is not available via package manager on this distribution."
+echo "Consider using Flatpak as an alternative: flatpak install flatpak"
+exit 0
diff --git a/content/programs/snapd/logo.png b/content/programs/snapd/logo.png
new file mode 100644
index 0000000..cb5536e
--- /dev/null
+++ b/content/programs/snapd/logo.png
@@ -0,0 +1 @@
+Snapcraft
\ No newline at end of file
diff --git a/content/programs/snapd/program.json b/content/programs/snapd/program.json
new file mode 100644
index 0000000..5601def
--- /dev/null
+++ b/content/programs/snapd/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "Snapd",
+ "slug": "snapd",
+ "description": "Snap package manager daemon by Canonical.",
+ "website": "https://snapcraft.io/",
+ "git_repo": "https://github.com/snapcore/snapd",
+ "license": "GPL-3.0",
+ "categories": [
+ "package-manager"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "snapd",
+ "arch": "snapd",
+ "ubuntu": "snapd",
+ "debian": "snapd",
+ "fedora": "snapd",
+ "opensuse": "snapd",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/snapd/logo.png"
+}
diff --git a/content/programs/spaceship-prompt/logo.png b/content/programs/spaceship-prompt/logo.png
new file mode 100644
index 0000000..1398048
--- /dev/null
+++ b/content/programs/spaceship-prompt/logo.png
@@ -0,0 +1 @@
+Zsh
\ No newline at end of file
diff --git a/content/programs/spaceship-prompt/program.json b/content/programs/spaceship-prompt/program.json
index 0ecdd54..70971e1 100644
--- a/content/programs/spaceship-prompt/program.json
+++ b/content/programs/spaceship-prompt/program.json
@@ -5,8 +5,13 @@
"website": "https://spaceship-prompt.sh/",
"git_repo": "https://github.com/spaceship-prompt/spaceship-prompt",
"license": "MIT",
- "categories": ["shell", "terminal"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "shell",
+ "terminal"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "spaceship-prompt",
"arch": "spaceship-prompt",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/spaceship-prompt/logo.png"
}
diff --git a/content/programs/spectrwm/logo.png b/content/programs/spectrwm/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/spectrwm/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/spectrwm/program.json b/content/programs/spectrwm/program.json
index e161138..d927ee6 100644
--- a/content/programs/spectrwm/program.json
+++ b/content/programs/spectrwm/program.json
@@ -5,8 +5,12 @@
"website": "https://github.com/conformal/spectrwm",
"git_repo": "https://github.com/conformal/spectrwm",
"license": "ISC",
- "categories": ["window-manager"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "window-manager"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "spectrwm",
"arch": "spectrwm",
@@ -16,5 +20,6 @@
"opensuse": "spectrwm",
"void": "spectrwm",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/spectrwm/logo.png"
}
diff --git a/content/programs/sqlitebrowser/logo.png b/content/programs/sqlitebrowser/logo.png
new file mode 100644
index 0000000..3bfccb8
--- /dev/null
+++ b/content/programs/sqlitebrowser/logo.png
@@ -0,0 +1 @@
+SQLite
\ No newline at end of file
diff --git a/content/programs/sqlitebrowser/program.json b/content/programs/sqlitebrowser/program.json
index 55c48ab..719d396 100644
--- a/content/programs/sqlitebrowser/program.json
+++ b/content/programs/sqlitebrowser/program.json
@@ -5,7 +5,9 @@
"website": "https://sqlitebrowser.org/",
"git_repo": "https://github.com/sqlitebrowser/sqlitebrowser",
"license": "GPL-3.0",
- "categories": ["development"],
+ "categories": [
+ "development"
+ ],
"package_names": {
"default": "sqlitebrowser",
"arch": "sqlitebrowser",
@@ -15,5 +17,6 @@
"opensuse": "sqlitebrowser",
"void": "sqlitebrowser",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/sqlitebrowser/logo.png"
}
diff --git a/content/programs/st/logo.png b/content/programs/st/logo.png
new file mode 100644
index 0000000..d6f1dc9
--- /dev/null
+++ b/content/programs/st/logo.png
@@ -0,0 +1 @@
+suckless
\ No newline at end of file
diff --git a/content/programs/st/program.json b/content/programs/st/program.json
index 5b79cad..c90634b 100644
--- a/content/programs/st/program.json
+++ b/content/programs/st/program.json
@@ -21,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "st",
"alpine": "CUSTOM_INSTALL"
- }
-}
\ No newline at end of file
+ },
+ "logo": "/programs/st/logo.png"
+}
diff --git a/content/programs/stacer/custom_install/install.sh b/content/programs/stacer/custom_install/install.sh
new file mode 100755
index 0000000..e653fbe
--- /dev/null
+++ b/content/programs/stacer/custom_install/install.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -e
+echo "Installing Stacer..."
+LATEST_DEB=$(curl -s https://api.github.com/repos/oguzhaninan/Stacer/releases/latest 2>/dev/null | grep browser_download_url | grep amd64.deb | cut -d '"' -f4)
+if [ -n "$LATEST_DEB" ]; then
+ curl -L -o /tmp/stacer.deb "$LATEST_DEB"
+ sudo apt install -y /tmp/stacer.deb 2>/dev/null || sudo dpkg -i /tmp/stacer.deb
+ rm /tmp/stacer.deb
+else
+ echo "Could not download Stacer. Try AppImage instead."
+ exit 1
+fi
diff --git a/content/programs/stacer/logo.png b/content/programs/stacer/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/stacer/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/stacer/program.json b/content/programs/stacer/program.json
new file mode 100644
index 0000000..092e5bb
--- /dev/null
+++ b/content/programs/stacer/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Stacer",
+ "slug": "stacer",
+ "description": "Linux system optimizer and application monitor.",
+ "website": "https://oguzhaninan.github.io/Stacer-Web/",
+ "git_repo": "https://github.com/oguzhaninan/Stacer",
+ "license": "GPL-3.0",
+ "categories": [
+ "system",
+ "system-monitor"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "stacer",
+ "arch": "stacer",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/stacer/logo.png"
+}
diff --git a/content/programs/starship/logo.png b/content/programs/starship/logo.png
new file mode 100644
index 0000000..3fe38e6
--- /dev/null
+++ b/content/programs/starship/logo.png
@@ -0,0 +1 @@
+Starship
\ No newline at end of file
diff --git a/content/programs/steam/logo.png b/content/programs/steam/logo.png
new file mode 100644
index 0000000..94ca3ff
--- /dev/null
+++ b/content/programs/steam/logo.png
@@ -0,0 +1 @@
+Steam
\ No newline at end of file
diff --git a/content/programs/streamlink/logo.png b/content/programs/streamlink/logo.png
new file mode 100644
index 0000000..4520135
--- /dev/null
+++ b/content/programs/streamlink/logo.png
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/content/programs/streamlink/program.json b/content/programs/streamlink/program.json
index 13b8d04..33b70f0 100644
--- a/content/programs/streamlink/program.json
+++ b/content/programs/streamlink/program.json
@@ -5,7 +5,10 @@
"website": "https://streamlink.github.io/",
"git_repo": "https://github.com/streamlink/streamlink",
"license": "BSD-2-Clause",
- "categories": ["media", "terminal"],
+ "categories": [
+ "media",
+ "terminal"
+ ],
"package_names": {
"default": "streamlink",
"arch": "streamlink",
@@ -15,5 +18,6 @@
"opensuse": "streamlink",
"void": "streamlink",
"alpine": "streamlink"
- }
+ },
+ "logo": "/programs/streamlink/logo.png"
}
diff --git a/content/programs/surf/logo.png b/content/programs/surf/logo.png
new file mode 100644
index 0000000..d6f1dc9
--- /dev/null
+++ b/content/programs/surf/logo.png
@@ -0,0 +1 @@
+suckless
\ No newline at end of file
diff --git a/content/programs/surf/program.json b/content/programs/surf/program.json
index 5ce23e5..ee8feb5 100644
--- a/content/programs/surf/program.json
+++ b/content/programs/surf/program.json
@@ -21,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "surf",
"alpine": "CUSTOM_INSTALL"
- }
-}
\ No newline at end of file
+ },
+ "logo": "/programs/surf/logo.png"
+}
diff --git a/content/programs/sway/logo.png b/content/programs/sway/logo.png
new file mode 100644
index 0000000..0fd4ff5
--- /dev/null
+++ b/content/programs/sway/logo.png
@@ -0,0 +1 @@
+Sway
\ No newline at end of file
diff --git a/content/programs/sxhkd/logo.png b/content/programs/sxhkd/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/sxhkd/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/sxhkd/program.json b/content/programs/sxhkd/program.json
index 9b611c6..a7456cc 100644
--- a/content/programs/sxhkd/program.json
+++ b/content/programs/sxhkd/program.json
@@ -20,5 +20,6 @@
},
"dependencies": [
"git"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/sxhkd/logo.png"
+}
diff --git a/content/programs/syncthing/logo.png b/content/programs/syncthing/logo.png
new file mode 100644
index 0000000..e9059e6
--- /dev/null
+++ b/content/programs/syncthing/logo.png
@@ -0,0 +1 @@
+Syncthing
\ No newline at end of file
diff --git a/content/programs/syncthing/program.json b/content/programs/syncthing/program.json
new file mode 100644
index 0000000..2a29050
--- /dev/null
+++ b/content/programs/syncthing/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Syncthing",
+ "slug": "syncthing",
+ "description": "Continuous, decentralized file synchronization.",
+ "website": "https://syncthing.net/",
+ "git_repo": "https://github.com/syncthing/syncthing",
+ "license": "MPL-2.0",
+ "categories": [
+ "backup",
+ "network"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "syncthing",
+ "arch": "syncthing",
+ "ubuntu": "syncthing",
+ "debian": "syncthing",
+ "fedora": "syncthing",
+ "opensuse": "syncthing",
+ "void": "syncthing",
+ "alpine": "syncthing"
+ },
+ "logo": "/programs/syncthing/logo.png"
+}
diff --git a/content/programs/systemctl/program.json b/content/programs/systemctl/program.json
index af7cca3..003013c 100644
--- a/content/programs/systemctl/program.json
+++ b/content/programs/systemctl/program.json
@@ -1,10 +1,12 @@
{
"name": "systemctl",
"slug": "systemctl",
- "description": "The systemd service manager — controls system services.",
+ "description": "The systemd service manager \u2014 controls system services.",
"website": "https://systemd.io/",
"license": "LGPL-2.1",
- "categories": ["system"],
+ "categories": [
+ "system"
+ ],
"package_names": {
"default": "systemd",
"arch": "systemd",
@@ -14,5 +16,6 @@
"opensuse": "systemd",
"void": null,
"alpine": null
- }
+ },
+ "logo": "/programs/systemctl/logo.png"
}
diff --git a/content/programs/tabby/program.json b/content/programs/tabby/program.json
index ba3498b..79b5b56 100644
--- a/content/programs/tabby/program.json
+++ b/content/programs/tabby/program.json
@@ -5,8 +5,12 @@
"website": "https://tabby.sh/",
"git_repo": "https://github.com/Eugeny/tabby",
"license": "MIT",
- "categories": ["terminal"],
- "dependencies": ["curl"],
+ "categories": [
+ "terminal"
+ ],
+ "dependencies": [
+ "curl"
+ ],
"package_names": {
"default": "tabby",
"arch": "tabby",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/tabby/logo.png"
}
diff --git a/content/programs/taskwarrior/program.json b/content/programs/taskwarrior/program.json
index fcbacb6..48a48a4 100644
--- a/content/programs/taskwarrior/program.json
+++ b/content/programs/taskwarrior/program.json
@@ -5,7 +5,10 @@
"website": "https://taskwarrior.org/",
"git_repo": "https://github.com/GothenburgBitFactory/taskwarrior",
"license": "MIT",
- "categories": ["productivity", "terminal"],
+ "categories": [
+ "productivity",
+ "terminal"
+ ],
"package_names": {
"default": "task",
"arch": "task",
@@ -15,5 +18,6 @@
"opensuse": "taskwarrior",
"void": "task",
"alpine": "task"
- }
+ },
+ "logo": "/programs/taskwarrior/logo.png"
}
diff --git a/content/programs/tdrop/logo.png b/content/programs/tdrop/logo.png
new file mode 100644
index 0000000..63efb6b
--- /dev/null
+++ b/content/programs/tdrop/logo.png
@@ -0,0 +1 @@
+i3
\ No newline at end of file
diff --git a/content/programs/tdrop/program.json b/content/programs/tdrop/program.json
index 73ca381..3c4badf 100644
--- a/content/programs/tdrop/program.json
+++ b/content/programs/tdrop/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/noctuid/tdrop",
"git_repo": "https://github.com/noctuid/tdrop",
"license": "GPL-3.0",
- "categories": ["terminal", "window-management"],
- "dependencies": ["curl"],
+ "categories": [
+ "terminal",
+ "window-management"
+ ],
+ "dependencies": [
+ "curl"
+ ],
"package_names": {
"default": "tdrop",
"arch": "tdrop",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/tdrop/logo.png"
}
diff --git a/content/programs/telega/program.json b/content/programs/telega/program.json
index 1058ac2..f7c7d51 100644
--- a/content/programs/telega/program.json
+++ b/content/programs/telega/program.json
@@ -12,7 +12,13 @@
],
"package_names": {
"default": "CUSTOM_INSTALL",
- "arch": "emacs-telega"
+ "arch": "emacs-telega",
+ "alpine": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL"
},
"logo": "/programs/telega/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/telegram-desktop/logo.png b/content/programs/telegram-desktop/logo.png
new file mode 100644
index 0000000..b637cb5
--- /dev/null
+++ b/content/programs/telegram-desktop/logo.png
@@ -0,0 +1 @@
+Telegram
\ No newline at end of file
diff --git a/content/programs/terminator/logo.png b/content/programs/terminator/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/terminator/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/terminator/program.json b/content/programs/terminator/program.json
index 13e964e..d610e32 100644
--- a/content/programs/terminator/program.json
+++ b/content/programs/terminator/program.json
@@ -5,7 +5,9 @@
"website": "https://gnome-terminator.org/",
"git_repo": "https://github.com/gnome-terminator/terminator",
"license": "GPL-2.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "terminator",
"arch": "terminator",
@@ -15,5 +17,6 @@
"opensuse": "terminator",
"void": "terminator",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/terminator/logo.png"
}
diff --git a/content/programs/thefuck/logo.png b/content/programs/thefuck/logo.png
new file mode 100644
index 0000000..e1b14ec
--- /dev/null
+++ b/content/programs/thefuck/logo.png
@@ -0,0 +1 @@
+Python
\ No newline at end of file
diff --git a/content/programs/thefuck/program.json b/content/programs/thefuck/program.json
index 8678092..12b0091 100644
--- a/content/programs/thefuck/program.json
+++ b/content/programs/thefuck/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"pip"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/thefuck/logo.png"
+}
diff --git a/content/programs/thunar/logo.png b/content/programs/thunar/logo.png
new file mode 100644
index 0000000..b11d40e
--- /dev/null
+++ b/content/programs/thunar/logo.png
@@ -0,0 +1 @@
+XFCE
\ No newline at end of file
diff --git a/content/programs/thunar/program.json b/content/programs/thunar/program.json
new file mode 100644
index 0000000..1bf6124
--- /dev/null
+++ b/content/programs/thunar/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "Thunar",
+ "slug": "thunar",
+ "description": "Fast and lightweight file manager for Xfce.",
+ "website": "https://docs.xfce.org/xfce/thunar/start",
+ "git_repo": "https://gitlab.xfce.org/xfce/thunar",
+ "license": "GPL-2.0+",
+ "categories": [
+ "file-manager"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "thunar",
+ "arch": "thunar",
+ "ubuntu": "thunar",
+ "debian": "thunar",
+ "fedora": "thunar",
+ "opensuse": "thunar",
+ "void": "thunar",
+ "alpine": "thunar"
+ },
+ "logo": "/programs/thunar/logo.png"
+}
diff --git a/content/programs/thunderbird/logo.png b/content/programs/thunderbird/logo.png
new file mode 100644
index 0000000..1aa8bcf
--- /dev/null
+++ b/content/programs/thunderbird/logo.png
@@ -0,0 +1 @@
+Thunderbird
\ No newline at end of file
diff --git a/content/programs/tig/logo.png b/content/programs/tig/logo.png
new file mode 100644
index 0000000..5f19a87
--- /dev/null
+++ b/content/programs/tig/logo.png
@@ -0,0 +1 @@
+Git
\ No newline at end of file
diff --git a/content/programs/tig/program.json b/content/programs/tig/program.json
index 97c0132..021f1e9 100644
--- a/content/programs/tig/program.json
+++ b/content/programs/tig/program.json
@@ -5,7 +5,10 @@
"website": "https://jonas.github.io/tig/",
"git_repo": "https://github.com/jonas/tig",
"license": "GPL-2.0",
- "categories": ["development", "terminal"],
+ "categories": [
+ "development",
+ "terminal"
+ ],
"package_names": {
"default": "tig",
"arch": "tig",
@@ -15,5 +18,6 @@
"opensuse": "tig",
"void": "tig",
"alpine": "tig"
- }
+ },
+ "logo": "/programs/tig/logo.png"
}
diff --git a/content/programs/tilix/logo.png b/content/programs/tilix/logo.png
new file mode 100644
index 0000000..641dc42
--- /dev/null
+++ b/content/programs/tilix/logo.png
@@ -0,0 +1,161 @@
+
+
diff --git a/content/programs/tilix/program.json b/content/programs/tilix/program.json
index 8439eb5..3645346 100644
--- a/content/programs/tilix/program.json
+++ b/content/programs/tilix/program.json
@@ -5,7 +5,9 @@
"website": "https://gnunn1.github.io/tilix-web/",
"git_repo": "https://github.com/gnunn1/tilix",
"license": "MPL-2.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "tilix",
"arch": "tilix",
@@ -15,5 +17,6 @@
"opensuse": "tilix",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/tilix/logo.png"
}
diff --git a/content/programs/timeshift/logo.png b/content/programs/timeshift/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/timeshift/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/timeshift/program.json b/content/programs/timeshift/program.json
index da0740b..b36d348 100644
--- a/content/programs/timeshift/program.json
+++ b/content/programs/timeshift/program.json
@@ -5,8 +5,12 @@
"website": "https://github.com/linuxmint/timeshift",
"git_repo": "https://github.com/linuxmint/timeshift",
"license": "GPL-3.0",
- "categories": ["system"],
- "dependencies": ["git"],
+ "categories": [
+ "system"
+ ],
+ "dependencies": [
+ "git"
+ ],
"package_names": {
"default": "timeshift",
"arch": "timeshift",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/timeshift/logo.png"
}
diff --git a/content/programs/tint2/logo.png b/content/programs/tint2/logo.png
new file mode 100644
index 0000000..b8cfedc
--- /dev/null
+++ b/content/programs/tint2/logo.png
@@ -0,0 +1,88 @@
+
+
+
+
+Not Found
+
+
+
+
+
+
+
+
+
+

+
+404: Page not found
+
+
+Make sure the address is correct and the page has not moved.
+Please contact your GitLab administrator if you think this is a mistake.
+
+
+
+
+
+
+
+
+
diff --git a/content/programs/tint2/program.json b/content/programs/tint2/program.json
index 728c3d3..3305fc7 100644
--- a/content/programs/tint2/program.json
+++ b/content/programs/tint2/program.json
@@ -5,7 +5,9 @@
"website": "https://gitlab.com/o9000/tint2",
"git_repo": "https://gitlab.com/o9000/tint2",
"license": "GPL-2.0",
- "categories": ["status-bar"],
+ "categories": [
+ "status-bar"
+ ],
"dependencies": [],
"package_names": {
"default": "tint2",
@@ -16,5 +18,6 @@
"opensuse": "tint2",
"void": "tint2",
"alpine": "tint2"
- }
+ },
+ "logo": "/programs/tint2/logo.png"
}
diff --git a/content/programs/tldr/program.json b/content/programs/tldr/program.json
index 1bf1543..4123c55 100644
--- a/content/programs/tldr/program.json
+++ b/content/programs/tldr/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"pip"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/tldr/logo.png"
+}
diff --git a/content/programs/tlp/logo.png b/content/programs/tlp/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/tlp/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/tlp/program.json b/content/programs/tlp/program.json
new file mode 100644
index 0000000..e7eaf50
--- /dev/null
+++ b/content/programs/tlp/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "TLP",
+ "slug": "tlp",
+ "description": "Advanced power management for Linux \u2014 save battery life.",
+ "website": "https://linrunner.de/tlp/",
+ "git_repo": "https://github.com/linrunner/TLP",
+ "license": "GPL-2.0+",
+ "categories": [
+ "system"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "tlp",
+ "arch": "tlp",
+ "ubuntu": "tlp",
+ "debian": "tlp",
+ "fedora": "tlp",
+ "opensuse": "tlp",
+ "void": "tlp",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/tlp/logo.png"
+}
diff --git a/content/programs/tmux/logo.png b/content/programs/tmux/logo.png
new file mode 100644
index 0000000..a7e200f
--- /dev/null
+++ b/content/programs/tmux/logo.png
@@ -0,0 +1 @@
+tmux
\ No newline at end of file
diff --git a/content/programs/tor-browser/logo.png b/content/programs/tor-browser/logo.png
new file mode 100644
index 0000000..e99c349
--- /dev/null
+++ b/content/programs/tor-browser/logo.png
@@ -0,0 +1 @@
+Tor Project
\ No newline at end of file
diff --git a/content/programs/tpm/logo.png b/content/programs/tpm/logo.png
new file mode 100644
index 0000000..a7e200f
--- /dev/null
+++ b/content/programs/tpm/logo.png
@@ -0,0 +1 @@
+tmux
\ No newline at end of file
diff --git a/content/programs/tpm/program.json b/content/programs/tpm/program.json
index f1cb7df..39a1617 100644
--- a/content/programs/tpm/program.json
+++ b/content/programs/tpm/program.json
@@ -1,12 +1,25 @@
{
"name": "tpm",
"slug": "tpm",
- "description": "Tmux Plugin Manager — installs and manages tmux plugins.",
+ "description": "Tmux Plugin Manager \u2014 installs and manages tmux plugins.",
"git_repo": "https://github.com/tmux-plugins/tpm",
"license": "MIT",
- "categories": ["terminal"],
- "dependencies": ["git", "tmux"],
+ "categories": [
+ "terminal"
+ ],
+ "dependencies": [
+ "git",
+ "tmux"
+ ],
"package_names": {
- "default": "CUSTOM_INSTALL"
- }
+ "default": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL",
+ "arch": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/tpm/logo.png"
}
diff --git a/content/programs/trash-cli/logo.png b/content/programs/trash-cli/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/trash-cli/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/trash-cli/program.json b/content/programs/trash-cli/program.json
index 7a98f3d..4d002d6 100644
--- a/content/programs/trash-cli/program.json
+++ b/content/programs/trash-cli/program.json
@@ -4,7 +4,10 @@
"description": "A command-line interface to the FreeDesktop.org trash can.",
"git_repo": "https://github.com/andreafrancia/trash-cli",
"license": "GPL-2.0",
- "categories": ["terminal", "system"],
+ "categories": [
+ "terminal",
+ "system"
+ ],
"package_names": {
"default": "trash-cli",
"arch": "trash-cli",
@@ -14,5 +17,6 @@
"opensuse": "python3-trash-cli",
"void": "trash-cli",
"alpine": "trash-cli"
- }
+ },
+ "logo": "/programs/trash-cli/logo.png"
}
diff --git a/content/programs/tree/logo.png b/content/programs/tree/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/tree/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/tree/program.json b/content/programs/tree/program.json
index fd4fe43..09ed3fd 100644
--- a/content/programs/tree/program.json
+++ b/content/programs/tree/program.json
@@ -3,7 +3,9 @@
"slug": "tree",
"description": "Recursively displays directory contents as a tree structure.",
"license": "GPL-2.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"package_names": {
"default": "tree",
"arch": "tree",
@@ -13,5 +15,6 @@
"opensuse": "tree",
"void": "tree",
"alpine": "tree"
- }
+ },
+ "logo": "/programs/tree/logo.png"
}
diff --git a/content/programs/tsserver/logo.png b/content/programs/tsserver/logo.png
new file mode 100644
index 0000000..688ddcc
--- /dev/null
+++ b/content/programs/tsserver/logo.png
@@ -0,0 +1 @@
+TypeScript
\ No newline at end of file
diff --git a/content/programs/tty-clock/logo.png b/content/programs/tty-clock/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/tty-clock/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/tty-clock/program.json b/content/programs/tty-clock/program.json
index 2675927..ee6f23e 100644
--- a/content/programs/tty-clock/program.json
+++ b/content/programs/tty-clock/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/xorg62/tty-clock",
"git_repo": "https://github.com/xorg62/tty-clock",
"license": "BSD-2-Clause",
- "categories": ["fun", "terminal"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "fun",
+ "terminal"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "tty-clock",
"arch": "tty-clock",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/tty-clock/logo.png"
}
diff --git a/content/programs/typora/logo.png b/content/programs/typora/logo.png
new file mode 100644
index 0000000..9d2f517
Binary files /dev/null and b/content/programs/typora/logo.png differ
diff --git a/content/programs/typora/program.json b/content/programs/typora/program.json
index ee969df..5462d05 100644
--- a/content/programs/typora/program.json
+++ b/content/programs/typora/program.json
@@ -4,8 +4,13 @@
"description": "Minimal Markdown editor with seamless live preview.",
"website": "https://typora.io/",
"license": "proprietary",
- "categories": ["editor", "markdown"],
- "dependencies": ["curl"],
+ "categories": [
+ "editor",
+ "markdown"
+ ],
+ "dependencies": [
+ "curl"
+ ],
"package_names": {
"default": "typora",
"arch": "typora",
@@ -15,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/typora/logo.png"
}
diff --git a/content/programs/ulauncher/custom_install/install.sh b/content/programs/ulauncher/custom_install/install.sh
new file mode 100755
index 0000000..019d2f8
--- /dev/null
+++ b/content/programs/ulauncher/custom_install/install.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+set -e
+echo "Installing Ulauncher..."
+LATEST_DEB=$(curl -s https://api.github.com/repos/Ulauncher/Ulauncher/releases/latest 2>/dev/null | grep browser_download_url | grep .deb | head -1 | cut -d '"' -f4)
+if [ -n "$LATEST_DEB" ]; then
+ curl -L -o /tmp/ulauncher.deb "$LATEST_DEB"
+ sudo dpkg -i /tmp/ulauncher.deb 2>/dev/null || sudo apt install -y /tmp/ulauncher.deb
+ rm /tmp/ulauncher.deb
+else
+ echo "Could not download Ulauncher."
+ exit 1
+fi
diff --git a/content/programs/ulauncher/program.json b/content/programs/ulauncher/program.json
new file mode 100644
index 0000000..47aed66
--- /dev/null
+++ b/content/programs/ulauncher/program.json
@@ -0,0 +1,26 @@
+{
+ "name": "Ulauncher",
+ "slug": "ulauncher",
+ "description": "Fast application launcher for Linux, inspired by Spotlight.",
+ "website": "https://ulauncher.io/",
+ "git_repo": "https://github.com/Ulauncher/Ulauncher",
+ "license": "MIT",
+ "categories": [
+ "launcher"
+ ],
+ "dependencies": [
+ "python3",
+ "pip"
+ ],
+ "package_names": {
+ "default": "ulauncher",
+ "arch": "ulauncher",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/ulauncher/logo.png"
+}
diff --git a/content/programs/ungit/logo.png b/content/programs/ungit/logo.png
new file mode 100644
index 0000000..5f19a87
--- /dev/null
+++ b/content/programs/ungit/logo.png
@@ -0,0 +1 @@
+Git
\ No newline at end of file
diff --git a/content/programs/ungit/program.json b/content/programs/ungit/program.json
index e1ffa3e..6fbde20 100644
--- a/content/programs/ungit/program.json
+++ b/content/programs/ungit/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/FredrikNoren/ungit",
"git_repo": "https://github.com/FredrikNoren/ungit",
"license": "MIT",
- "categories": ["development", "version-control"],
- "dependencies": ["npm"],
+ "categories": [
+ "development",
+ "version-control"
+ ],
+ "dependencies": [
+ "npm"
+ ],
"package_names": {
"default": "CUSTOM_INSTALL",
"arch": "CUSTOM_INSTALL",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/ungit/logo.png"
}
diff --git a/content/programs/vagrant/logo.png b/content/programs/vagrant/logo.png
new file mode 100644
index 0000000..0598ca5
--- /dev/null
+++ b/content/programs/vagrant/logo.png
@@ -0,0 +1 @@
+Vagrant
\ No newline at end of file
diff --git a/content/programs/ventoy/custom_install/install.sh b/content/programs/ventoy/custom_install/install.sh
new file mode 100755
index 0000000..cf3d025
--- /dev/null
+++ b/content/programs/ventoy/custom_install/install.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+set -e
+echo "Installing Ventoy..."
+LATEST=$(curl -s https://api.github.com/repos/ventoy/Ventoy/releases/latest 2>/dev/null | grep tag_name | cut -d '"' -f4)
+VERSION=${LATEST:-v1.0.99}
+TARBALL="ventoy-${VERSION}-linux.tar.gz"
+URL="https://github.com/ventoy/Ventoy/releases/download/${VERSION}/${TARBALL}"
+
+cd /tmp
+curl -L -o "$TARBALL" "$URL"
+tar xzf "$TARBALL"
+echo "Ventoy extracted to /tmp/ventoy-${VERSION}/"
+echo "Run: cd /tmp/ventoy-${VERSION} && sudo ./Ventoy2Disk.sh -i /dev/sdX"
diff --git a/content/programs/ventoy/logo.png b/content/programs/ventoy/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/ventoy/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/ventoy/program.json b/content/programs/ventoy/program.json
new file mode 100644
index 0000000..109cd9a
--- /dev/null
+++ b/content/programs/ventoy/program.json
@@ -0,0 +1,26 @@
+{
+ "name": "Ventoy",
+ "slug": "ventoy",
+ "description": "Multiboot USB creator \u2014 just copy ISO files and boot.",
+ "website": "https://www.ventoy.net/",
+ "git_repo": "https://github.com/ventoy/Ventoy",
+ "license": "GPL-3.0",
+ "categories": [
+ "devops",
+ "system"
+ ],
+ "dependencies": [
+ "curl"
+ ],
+ "package_names": {
+ "default": "CUSTOM_INSTALL",
+ "arch": "ventoy-bin",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/ventoy/logo.png"
+}
diff --git a/content/programs/vifm/logo.png b/content/programs/vifm/logo.png
new file mode 100644
index 0000000..63d1512
--- /dev/null
+++ b/content/programs/vifm/logo.png
@@ -0,0 +1 @@
+Vim
\ No newline at end of file
diff --git a/content/programs/vifm/program.json b/content/programs/vifm/program.json
index ddf314e..2325658 100644
--- a/content/programs/vifm/program.json
+++ b/content/programs/vifm/program.json
@@ -5,7 +5,10 @@
"website": "https://vifm.info/",
"git_repo": "https://github.com/vifm/vifm",
"license": "GPL-2.0",
- "categories": ["file-manager", "terminal"],
+ "categories": [
+ "file-manager",
+ "terminal"
+ ],
"dependencies": [],
"package_names": {
"default": "vifm",
@@ -16,5 +19,6 @@
"opensuse": "vifm",
"void": "vifm",
"alpine": "vifm"
- }
+ },
+ "logo": "/programs/vifm/logo.png"
}
diff --git a/content/programs/vim/logo.png b/content/programs/vim/logo.png
new file mode 100644
index 0000000..63d1512
--- /dev/null
+++ b/content/programs/vim/logo.png
@@ -0,0 +1 @@
+Vim
\ No newline at end of file
diff --git a/content/programs/virt-manager/logo.png b/content/programs/virt-manager/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/virt-manager/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/virt-manager/program.json b/content/programs/virt-manager/program.json
index 614b9f3..b0bc7aa 100644
--- a/content/programs/virt-manager/program.json
+++ b/content/programs/virt-manager/program.json
@@ -5,7 +5,9 @@
"website": "https://virt-manager.org/",
"git_repo": "https://github.com/virt-manager/virt-manager",
"license": "GPL-2.0",
- "categories": ["system"],
+ "categories": [
+ "system"
+ ],
"package_names": {
"default": "virt-manager",
"arch": "virt-manager",
@@ -15,5 +17,6 @@
"opensuse": "virt-manager",
"void": "virt-manager",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/virt-manager/logo.png"
}
diff --git a/content/programs/virtualbox/logo.png b/content/programs/virtualbox/logo.png
new file mode 100644
index 0000000..a2f1ac7
--- /dev/null
+++ b/content/programs/virtualbox/logo.png
@@ -0,0 +1 @@
+VirtualBox
\ No newline at end of file
diff --git a/content/programs/virtualenv/logo.png b/content/programs/virtualenv/logo.png
new file mode 100644
index 0000000..e1b14ec
--- /dev/null
+++ b/content/programs/virtualenv/logo.png
@@ -0,0 +1 @@
+Python
\ No newline at end of file
diff --git a/content/programs/visidata/logo.png b/content/programs/visidata/logo.png
new file mode 100644
index 0000000..e1b14ec
--- /dev/null
+++ b/content/programs/visidata/logo.png
@@ -0,0 +1 @@
+Python
\ No newline at end of file
diff --git a/content/programs/visidata/program.json b/content/programs/visidata/program.json
index b02bd76..dd9b467 100644
--- a/content/programs/visidata/program.json
+++ b/content/programs/visidata/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"pip"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/visidata/logo.png"
+}
diff --git a/content/programs/vivaldi/logo.png b/content/programs/vivaldi/logo.png
new file mode 100644
index 0000000..bda0cbf
--- /dev/null
+++ b/content/programs/vivaldi/logo.png
@@ -0,0 +1 @@
+Vivaldi
\ No newline at end of file
diff --git a/content/programs/w3m/logo.png b/content/programs/w3m/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/w3m/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/w3m/program.json b/content/programs/w3m/program.json
index 31e3a85..88e91fe 100644
--- a/content/programs/w3m/program.json
+++ b/content/programs/w3m/program.json
@@ -3,7 +3,10 @@
"slug": "w3m",
"description": "A text-based web browser and pager.",
"license": "MIT",
- "categories": ["browser", "terminal"],
+ "categories": [
+ "browser",
+ "terminal"
+ ],
"package_names": {
"default": "w3m",
"arch": "w3m",
@@ -13,5 +16,6 @@
"opensuse": "w3m",
"void": "w3m",
"alpine": "w3m"
- }
+ },
+ "logo": "/programs/w3m/logo.png"
}
diff --git a/content/programs/waybar/logo.png b/content/programs/waybar/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/waybar/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/waybar/program.json b/content/programs/waybar/program.json
index 053b044..c9c9ff4 100644
--- a/content/programs/waybar/program.json
+++ b/content/programs/waybar/program.json
@@ -5,8 +5,12 @@
"website": "https://github.com/Alexays/Waybar",
"git_repo": "https://github.com/Alexays/Waybar",
"license": "MIT",
- "categories": ["status-bar"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "status-bar"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "waybar",
"arch": "waybar",
@@ -16,5 +20,6 @@
"opensuse": "waybar",
"void": "waybar",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/waybar/logo.png"
}
diff --git a/content/programs/weechat/program.json b/content/programs/weechat/program.json
index 73748c9..86edb83 100644
--- a/content/programs/weechat/program.json
+++ b/content/programs/weechat/program.json
@@ -5,7 +5,10 @@
"website": "https://weechat.org/",
"git_repo": "https://github.com/weechat/weechat",
"license": "GPL-3.0",
- "categories": ["communication", "terminal"],
+ "categories": [
+ "communication",
+ "terminal"
+ ],
"package_names": {
"default": "weechat",
"arch": "weechat",
@@ -15,5 +18,6 @@
"opensuse": "weechat",
"void": "weechat",
"alpine": "weechat"
- }
+ },
+ "logo": "/programs/weechat/logo.png"
}
diff --git a/content/programs/wego/logo.png b/content/programs/wego/logo.png
new file mode 100644
index 0000000..51990bd
--- /dev/null
+++ b/content/programs/wego/logo.png
@@ -0,0 +1 @@
+Go
\ No newline at end of file
diff --git a/content/programs/wego/program.json b/content/programs/wego/program.json
index 93fb51e..57c6a50 100644
--- a/content/programs/wego/program.json
+++ b/content/programs/wego/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/schachmat/wego",
"git_repo": "https://github.com/schachmat/wego",
"license": "MIT",
- "categories": ["terminal", "internet"],
- "dependencies": ["golang"],
+ "categories": [
+ "terminal",
+ "internet"
+ ],
+ "dependencies": [
+ "golang"
+ ],
"package_names": {
"default": "wego",
"arch": "wego",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/wego/logo.png"
}
diff --git a/content/programs/wezterm/logo.png b/content/programs/wezterm/logo.png
new file mode 100644
index 0000000..fd38d40
--- /dev/null
+++ b/content/programs/wezterm/logo.png
@@ -0,0 +1 @@
+WezTerm
\ No newline at end of file
diff --git a/content/programs/wget/logo.png b/content/programs/wget/logo.png
new file mode 100644
index 0000000..edfb29b
--- /dev/null
+++ b/content/programs/wget/logo.png
@@ -0,0 +1 @@
+GNU
\ No newline at end of file
diff --git a/content/programs/wget/program.json b/content/programs/wget/program.json
index 2e9f165..fd4e5c1 100644
--- a/content/programs/wget/program.json
+++ b/content/programs/wget/program.json
@@ -4,7 +4,10 @@
"description": "Non-interactive download tool.",
"website": "https://www.gnu.org/software/wget/",
"license": "GPL-3.0",
- "categories": ["internet", "terminal"],
+ "categories": [
+ "internet",
+ "terminal"
+ ],
"package_names": {
"default": "wget",
"arch": "wget",
@@ -14,5 +17,6 @@
"opensuse": "wget",
"void": "wget",
"alpine": "wget"
- }
+ },
+ "logo": "/programs/wget/logo.png"
}
diff --git a/content/programs/wireshark/logo.png b/content/programs/wireshark/logo.png
new file mode 100644
index 0000000..938a962
--- /dev/null
+++ b/content/programs/wireshark/logo.png
@@ -0,0 +1 @@
+Wireshark
\ No newline at end of file
diff --git a/content/programs/wireshark/program.json b/content/programs/wireshark/program.json
new file mode 100644
index 0000000..5c17259
--- /dev/null
+++ b/content/programs/wireshark/program.json
@@ -0,0 +1,24 @@
+{
+ "name": "Wireshark",
+ "slug": "wireshark",
+ "description": "World's foremost network protocol analyzer.",
+ "website": "https://www.wireshark.org/",
+ "git_repo": "https://gitlab.com/wireshark/wireshark",
+ "license": "GPL-2.0",
+ "categories": [
+ "network",
+ "security"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "wireshark",
+ "arch": "wireshark-qt",
+ "ubuntu": "wireshark",
+ "debian": "wireshark",
+ "fedora": "wireshark",
+ "opensuse": "wireshark",
+ "void": "wireshark",
+ "alpine": "wireshark"
+ },
+ "logo": "/programs/wireshark/logo.png"
+}
diff --git a/content/programs/wmctrl/logo.png b/content/programs/wmctrl/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/wmctrl/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/wmctrl/program.json b/content/programs/wmctrl/program.json
index 216d9fc..01d2aad 100644
--- a/content/programs/wmctrl/program.json
+++ b/content/programs/wmctrl/program.json
@@ -3,7 +3,10 @@
"slug": "wmctrl",
"description": "A command-line tool to interact with an EWMH/NetWM compatible X Window Manager.",
"license": "GPL-2.0",
- "categories": ["x11", "terminal"],
+ "categories": [
+ "x11",
+ "terminal"
+ ],
"package_names": {
"default": "wmctrl",
"arch": "wmctrl",
@@ -13,5 +16,6 @@
"opensuse": "wmctrl",
"void": "wmctrl",
"alpine": "wmctrl"
- }
+ },
+ "logo": "/programs/wmctrl/logo.png"
}
diff --git a/content/programs/wofi/logo.png b/content/programs/wofi/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/wofi/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/wofi/program.json b/content/programs/wofi/program.json
new file mode 100644
index 0000000..17a8407
--- /dev/null
+++ b/content/programs/wofi/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "Wofi",
+ "slug": "wofi",
+ "description": "Native Wayland launcher, inspired by rofi.",
+ "website": "https://hg.sr.ht/~scoopta/wofi",
+ "git_repo": "https://hg.sr.ht/~scoopta/wofi",
+ "license": "GPL-3.0+",
+ "categories": [
+ "launcher"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "wofi",
+ "arch": "wofi",
+ "ubuntu": "wofi",
+ "debian": "wofi",
+ "fedora": "wofi",
+ "opensuse": "wofi",
+ "void": "wofi",
+ "alpine": "wofi"
+ },
+ "logo": "/programs/wofi/logo.png"
+}
diff --git a/content/programs/wpgtk/logo.png b/content/programs/wpgtk/logo.png
new file mode 100644
index 0000000..e1b14ec
--- /dev/null
+++ b/content/programs/wpgtk/logo.png
@@ -0,0 +1 @@
+Python
\ No newline at end of file
diff --git a/content/programs/wpgtk/program.json b/content/programs/wpgtk/program.json
index 621a0ce..fa4c510 100644
--- a/content/programs/wpgtk/program.json
+++ b/content/programs/wpgtk/program.json
@@ -5,8 +5,12 @@
"website": "https://github.com/deviantfero/wpgtk",
"git_repo": "https://github.com/deviantfero/wpgtk",
"license": "GPL-3.0",
- "categories": ["theming"],
- "dependencies": ["pip"],
+ "categories": [
+ "theming"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "python-wpgtk",
"arch": "python-wpgtk",
@@ -16,5 +20,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/wpgtk/logo.png"
}
diff --git a/content/programs/xfce4-terminal/logo.png b/content/programs/xfce4-terminal/logo.png
new file mode 100644
index 0000000..b11d40e
--- /dev/null
+++ b/content/programs/xfce4-terminal/logo.png
@@ -0,0 +1 @@
+XFCE
\ No newline at end of file
diff --git a/content/programs/xfce4-terminal/program.json b/content/programs/xfce4-terminal/program.json
index 15e4508..69ce817 100644
--- a/content/programs/xfce4-terminal/program.json
+++ b/content/programs/xfce4-terminal/program.json
@@ -5,7 +5,9 @@
"website": "https://docs.xfce.org/apps/xfce4-terminal/start",
"git_repo": "https://github.com/xfce-mirror/xfce4-terminal",
"license": "GPL-2.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"dependencies": [],
"package_names": {
"default": "xfce4-terminal",
@@ -16,5 +18,6 @@
"opensuse": "xfce4-terminal",
"void": "xfce4-terminal",
"alpine": "xfce4-terminal"
- }
+ },
+ "logo": "/programs/xfce4-terminal/logo.png"
}
diff --git a/content/programs/xmobar/logo.png b/content/programs/xmobar/logo.png
new file mode 100644
index 0000000..8bd8e24
--- /dev/null
+++ b/content/programs/xmobar/logo.png
@@ -0,0 +1 @@
+Haskell
\ No newline at end of file
diff --git a/content/programs/xmobar/program.json b/content/programs/xmobar/program.json
index 18d83df..bd31b44 100644
--- a/content/programs/xmobar/program.json
+++ b/content/programs/xmobar/program.json
@@ -5,7 +5,9 @@
"website": "https://xmobar.org/",
"git_repo": "https://codeberg.org/xmobar/xmobar",
"license": "BSD-3-Clause",
- "categories": ["status-bar"],
+ "categories": [
+ "status-bar"
+ ],
"dependencies": [],
"package_names": {
"default": "xmobar",
@@ -16,5 +18,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "xmobar",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/xmobar/logo.png"
}
diff --git a/content/programs/xmonad/logo.png b/content/programs/xmonad/logo.png
new file mode 100644
index 0000000..8bd8e24
--- /dev/null
+++ b/content/programs/xmonad/logo.png
@@ -0,0 +1 @@
+Haskell
\ No newline at end of file
diff --git a/content/programs/xmonad/program.json b/content/programs/xmonad/program.json
index 82aefeb..b109d4a 100644
--- a/content/programs/xmonad/program.json
+++ b/content/programs/xmonad/program.json
@@ -5,7 +5,9 @@
"website": "https://xmonad.org/",
"git_repo": "https://github.com/xmonad/xmonad",
"license": "BSD-3-Clause",
- "categories": ["window-manager"],
+ "categories": [
+ "window-manager"
+ ],
"dependencies": [],
"package_names": {
"default": "xmonad",
@@ -16,5 +18,6 @@
"opensuse": "xmonad",
"void": "xmonad",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/xmonad/logo.png"
}
diff --git a/content/programs/xonsh/logo.png b/content/programs/xonsh/logo.png
new file mode 100644
index 0000000..e1b14ec
--- /dev/null
+++ b/content/programs/xonsh/logo.png
@@ -0,0 +1 @@
+Python
\ No newline at end of file
diff --git a/content/programs/xonsh/program.json b/content/programs/xonsh/program.json
index 53acbfe..601ecec 100644
--- a/content/programs/xonsh/program.json
+++ b/content/programs/xonsh/program.json
@@ -5,8 +5,13 @@
"website": "https://xon.sh/",
"git_repo": "https://github.com/xonsh/xonsh",
"license": "BSD-2-Clause",
- "categories": ["shell", "terminal"],
- "dependencies": ["pip"],
+ "categories": [
+ "shell",
+ "terminal"
+ ],
+ "dependencies": [
+ "pip"
+ ],
"package_names": {
"default": "xonsh",
"arch": "xonsh",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/xonsh/logo.png"
}
diff --git a/content/programs/xorg/logo.png b/content/programs/xorg/logo.png
new file mode 100644
index 0000000..45531e7
--- /dev/null
+++ b/content/programs/xorg/logo.png
@@ -0,0 +1 @@
+X.Org
\ No newline at end of file
diff --git a/content/programs/xorg/program.json b/content/programs/xorg/program.json
index 8cdb9a3..64eeef6 100644
--- a/content/programs/xorg/program.json
+++ b/content/programs/xorg/program.json
@@ -4,7 +4,10 @@
"description": "The X Window System display server.",
"website": "https://www.x.org/",
"license": "MIT",
- "categories": ["x11", "system"],
+ "categories": [
+ "x11",
+ "system"
+ ],
"package_names": {
"default": "xorg",
"arch": "xorg",
@@ -14,5 +17,6 @@
"opensuse": "xorg-x11-server",
"void": "xorg",
"alpine": "xorg-server"
- }
+ },
+ "logo": "/programs/xorg/logo.png"
}
diff --git a/content/programs/xplr/logo.png b/content/programs/xplr/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/xplr/logo.png
@@ -0,0 +1 @@
+Rust
\ No newline at end of file
diff --git a/content/programs/xplr/program.json b/content/programs/xplr/program.json
index 323b4d3..7c802cc 100644
--- a/content/programs/xplr/program.json
+++ b/content/programs/xplr/program.json
@@ -5,8 +5,13 @@
"website": "https://xplr.dev/",
"git_repo": "https://github.com/sayanarijit/xplr",
"license": "MIT",
- "categories": ["file-manager", "terminal"],
- "dependencies": ["cargo"],
+ "categories": [
+ "file-manager",
+ "terminal"
+ ],
+ "dependencies": [
+ "cargo"
+ ],
"package_names": {
"default": "xplr",
"arch": "xplr",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "xplr",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/xplr/logo.png"
}
diff --git a/content/programs/xwallpaper/logo.png b/content/programs/xwallpaper/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/xwallpaper/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/xwallpaper/program.json b/content/programs/xwallpaper/program.json
index b74860a..3e912eb 100644
--- a/content/programs/xwallpaper/program.json
+++ b/content/programs/xwallpaper/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/stoeckmann/xwallpaper",
"git_repo": "https://github.com/stoeckmann/xwallpaper",
"license": "ISC",
- "categories": ["display", "theming"],
- "dependencies": ["git-dep"],
+ "categories": [
+ "display",
+ "theming"
+ ],
+ "dependencies": [
+ "git-dep"
+ ],
"package_names": {
"default": "xwallpaper",
"arch": "xwallpaper",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "xwallpaper",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/xwallpaper/logo.png"
}
diff --git a/content/programs/yakuake/custom_install/install.sh b/content/programs/yakuake/custom_install/install.sh
new file mode 100644
index 0000000..1f7432d
--- /dev/null
+++ b/content/programs/yakuake/custom_install/install.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+set -e
+# Yakuake is available on most distros via package manager
+# Alpine: needs KDE frameworks
+apk add yakuake 2>/dev/null || {
+ echo "Yakuake not in Alpine repos — installing from source"
+ apk add extra-cmake-modules qt5-qtbase-dev kconfig-dev karchive-dev
+ git clone --depth=1 https://invent.kde.org/system/yakuake /tmp/yakuake
+ cd /tmp/yakuake
+ cmake -B build -DCMAKE_INSTALL_PREFIX=/usr
+ cmake --build build -j$(nproc)
+ cmake --install build
+ rm -rf /tmp/yakuake
+}
diff --git a/content/programs/yakuake/logo.png b/content/programs/yakuake/logo.png
new file mode 100644
index 0000000..91a46b8
--- /dev/null
+++ b/content/programs/yakuake/logo.png
@@ -0,0 +1 @@
+KDE
\ No newline at end of file
diff --git a/content/programs/yakuake/program.json b/content/programs/yakuake/program.json
index bb98b90..82c840c 100644
--- a/content/programs/yakuake/program.json
+++ b/content/programs/yakuake/program.json
@@ -4,7 +4,9 @@
"description": "Drop-down terminal emulator based on KDE Konsole technology.",
"website": "https://apps.kde.org/yakuake/",
"license": "GPL-2.0",
- "categories": ["terminal"],
+ "categories": [
+ "terminal"
+ ],
"dependencies": [],
"package_names": {
"default": "yakuake",
@@ -15,5 +17,6 @@
"opensuse": "yakuake",
"void": "yakuake",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/yakuake/logo.png"
}
diff --git a/content/programs/yazi/logo.png b/content/programs/yazi/logo.png
new file mode 100644
index 0000000..09875ae
Binary files /dev/null and b/content/programs/yazi/logo.png differ
diff --git a/content/programs/yazi/program.json b/content/programs/yazi/program.json
index 7b73681..bb01b1b 100644
--- a/content/programs/yazi/program.json
+++ b/content/programs/yazi/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/yazi/logo.png"
+}
diff --git a/content/programs/youtube-dl/logo.png b/content/programs/youtube-dl/logo.png
new file mode 100644
index 0000000..9306b8e
--- /dev/null
+++ b/content/programs/youtube-dl/logo.png
@@ -0,0 +1 @@
+YouTube
\ No newline at end of file
diff --git a/content/programs/yq/logo.png b/content/programs/yq/logo.png
new file mode 100644
index 0000000..38afc19
--- /dev/null
+++ b/content/programs/yq/logo.png
@@ -0,0 +1 @@
+YAML
\ No newline at end of file
diff --git a/content/programs/yq/program.json b/content/programs/yq/program.json
index 01ab9df..63778b7 100644
--- a/content/programs/yq/program.json
+++ b/content/programs/yq/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"golang"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/yq/logo.png"
+}
diff --git a/content/programs/yt-dlp/logo.png b/content/programs/yt-dlp/logo.png
new file mode 100644
index 0000000..9306b8e
--- /dev/null
+++ b/content/programs/yt-dlp/logo.png
@@ -0,0 +1 @@
+YouTube
\ No newline at end of file
diff --git a/content/programs/yt-dlp/program.json b/content/programs/yt-dlp/program.json
index a1904a7..1080cbe 100644
--- a/content/programs/yt-dlp/program.json
+++ b/content/programs/yt-dlp/program.json
@@ -5,7 +5,10 @@
"website": "https://github.com/yt-dlp/yt-dlp",
"git_repo": "https://github.com/yt-dlp/yt-dlp",
"license": "Unlicense",
- "categories": ["media", "terminal"],
+ "categories": [
+ "media",
+ "terminal"
+ ],
"package_names": {
"default": "yt-dlp",
"arch": "yt-dlp",
@@ -15,5 +18,6 @@
"opensuse": "yt-dlp",
"void": "yt-dlp",
"alpine": "yt-dlp"
- }
+ },
+ "logo": "/programs/yt-dlp/logo.png"
}
diff --git a/content/programs/ytfzf/logo.png b/content/programs/ytfzf/logo.png
new file mode 100644
index 0000000..9306b8e
--- /dev/null
+++ b/content/programs/ytfzf/logo.png
@@ -0,0 +1 @@
+YouTube
\ No newline at end of file
diff --git a/content/programs/ytfzf/program.json b/content/programs/ytfzf/program.json
index 39fd734..595bf09 100644
--- a/content/programs/ytfzf/program.json
+++ b/content/programs/ytfzf/program.json
@@ -16,7 +16,13 @@
],
"package_names": {
"default": "CUSTOM_INSTALL",
- "arch": "ytfzf"
+ "arch": "ytfzf",
+ "alpine": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL"
},
"logo": "/programs/ytfzf/logo.png"
-}
\ No newline at end of file
+}
diff --git a/content/programs/zathura/logo.png b/content/programs/zathura/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/zathura/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/zathura/program.json b/content/programs/zathura/program.json
index be3a4ad..01e1ae5 100644
--- a/content/programs/zathura/program.json
+++ b/content/programs/zathura/program.json
@@ -5,7 +5,9 @@
"website": "https://pwmt.org/projects/zathura/",
"git_repo": "https://github.com/pwmt/zathura",
"license": "Zlib",
- "categories": ["viewer"],
+ "categories": [
+ "viewer"
+ ],
"package_names": {
"default": "zathura",
"arch": "zathura",
@@ -15,5 +17,6 @@
"opensuse": "zathura",
"void": "zathura",
"alpine": "zathura"
- }
+ },
+ "logo": "/programs/zathura/logo.png"
}
diff --git a/content/programs/zellij/logo.png b/content/programs/zellij/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/zellij/logo.png
@@ -0,0 +1 @@
+Rust
\ No newline at end of file
diff --git a/content/programs/zellij/program.json b/content/programs/zellij/program.json
index d1b2dd8..64808c2 100644
--- a/content/programs/zellij/program.json
+++ b/content/programs/zellij/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/zellij/logo.png"
+}
diff --git a/content/programs/zenith/logo.png b/content/programs/zenith/logo.png
new file mode 100644
index 0000000..247d47d
Binary files /dev/null and b/content/programs/zenith/logo.png differ
diff --git a/content/programs/zenith/program.json b/content/programs/zenith/program.json
index f4e4dec..c6f68b4 100644
--- a/content/programs/zenith/program.json
+++ b/content/programs/zenith/program.json
@@ -5,8 +5,13 @@
"website": "https://github.com/bvaisvil/zenith",
"git_repo": "https://github.com/bvaisvil/zenith",
"license": "MIT",
- "categories": ["system-monitor", "terminal"],
- "dependencies": ["cargo"],
+ "categories": [
+ "system-monitor",
+ "terminal"
+ ],
+ "dependencies": [
+ "cargo"
+ ],
"package_names": {
"default": "zenith",
"arch": "zenith",
@@ -16,5 +21,6 @@
"opensuse": "CUSTOM_INSTALL",
"void": "CUSTOM_INSTALL",
"alpine": "CUSTOM_INSTALL"
- }
+ },
+ "logo": "/programs/zenith/logo.png"
}
diff --git a/content/programs/zettlr/custom_install/install.sh b/content/programs/zettlr/custom_install/install.sh
new file mode 100755
index 0000000..c0be58e
--- /dev/null
+++ b/content/programs/zettlr/custom_install/install.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+set -e
+echo "Installing Zettlr via Flatpak..."
+if command -v flatpak &>/dev/null; then
+ flatpak install -y flathub com.zettlr.Zettlr
+else
+ echo "Flatpak not found. Install flatpak first."
+ exit 1
+fi
diff --git a/content/programs/zettlr/logo.png b/content/programs/zettlr/logo.png
new file mode 100644
index 0000000..a55dd80
--- /dev/null
+++ b/content/programs/zettlr/logo.png
@@ -0,0 +1 @@
+Zettlr
\ No newline at end of file
diff --git a/content/programs/zettlr/program.json b/content/programs/zettlr/program.json
new file mode 100644
index 0000000..860fc77
--- /dev/null
+++ b/content/programs/zettlr/program.json
@@ -0,0 +1,25 @@
+{
+ "name": "Zettlr",
+ "slug": "zettlr",
+ "description": "Markdown editor for the 21st century, aimed at academic writing.",
+ "website": "https://www.zettlr.com/",
+ "git_repo": "https://github.com/Zettlr/Zettlr",
+ "license": "GPL-3.0",
+ "categories": [
+ "editor",
+ "markdown",
+ "productivity"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "zettlr",
+ "arch": "zettlr",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/zettlr/logo.png"
+}
diff --git a/content/programs/zoom/custom_install/install.sh b/content/programs/zoom/custom_install/install.sh
new file mode 100755
index 0000000..76d3d99
--- /dev/null
+++ b/content/programs/zoom/custom_install/install.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+set -e
+echo "Installing Zoom via Flatpak..."
+if command -v flatpak &>/dev/null; then
+ flatpak install -y flathub us.zoom.Zoom
+else
+ echo "Flatpak not found. Install flatpak first."
+ exit 1
+fi
diff --git a/content/programs/zoom/logo.png b/content/programs/zoom/logo.png
new file mode 100644
index 0000000..28828a3
--- /dev/null
+++ b/content/programs/zoom/logo.png
@@ -0,0 +1 @@
+Zoom
\ No newline at end of file
diff --git a/content/programs/zoom/program.json b/content/programs/zoom/program.json
new file mode 100644
index 0000000..1528879
--- /dev/null
+++ b/content/programs/zoom/program.json
@@ -0,0 +1,26 @@
+{
+ "name": "Zoom",
+ "slug": "zoom",
+ "description": "Video conferencing and online meetings.",
+ "website": "https://zoom.us/",
+ "git_repo": "https://github.com/zoom",
+ "license": "Proprietary",
+ "categories": [
+ "communication",
+ "messaging"
+ ],
+ "dependencies": [
+ "curl"
+ ],
+ "package_names": {
+ "default": "CUSTOM_INSTALL",
+ "arch": "CUSTOM_INSTALL",
+ "ubuntu": "CUSTOM_INSTALL",
+ "debian": "CUSTOM_INSTALL",
+ "fedora": "CUSTOM_INSTALL",
+ "opensuse": "CUSTOM_INSTALL",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/zoom/logo.png"
+}
diff --git a/content/programs/zoxide/logo.png b/content/programs/zoxide/logo.png
new file mode 100644
index 0000000..faa8c3a
--- /dev/null
+++ b/content/programs/zoxide/logo.png
@@ -0,0 +1 @@
+Rust
\ No newline at end of file
diff --git a/content/programs/zoxide/program.json b/content/programs/zoxide/program.json
index d1ee9dc..a9dcef4 100644
--- a/content/programs/zoxide/program.json
+++ b/content/programs/zoxide/program.json
@@ -21,5 +21,6 @@
},
"dependencies": [
"cargo"
- ]
-}
\ No newline at end of file
+ ],
+ "logo": "/programs/zoxide/logo.png"
+}
diff --git a/content/programs/zram-generator/logo.png b/content/programs/zram-generator/logo.png
new file mode 100644
index 0000000..58be2b6
--- /dev/null
+++ b/content/programs/zram-generator/logo.png
@@ -0,0 +1 @@
+Linux
\ No newline at end of file
diff --git a/content/programs/zram-generator/program.json b/content/programs/zram-generator/program.json
new file mode 100644
index 0000000..472a376
--- /dev/null
+++ b/content/programs/zram-generator/program.json
@@ -0,0 +1,23 @@
+{
+ "name": "zram-generator",
+ "slug": "zram-generator",
+ "description": "Systemd generator to set up zram swap devices.",
+ "website": "https://github.com/systemd/zram-generator",
+ "git_repo": "https://github.com/systemd/zram-generator",
+ "license": "MIT",
+ "categories": [
+ "system"
+ ],
+ "dependencies": [],
+ "package_names": {
+ "default": "zram-generator",
+ "arch": "zram-generator",
+ "ubuntu": "zram-generator",
+ "debian": "zram-generator",
+ "fedora": "zram-generator",
+ "opensuse": "zram-generator",
+ "void": "CUSTOM_INSTALL",
+ "alpine": "CUSTOM_INSTALL"
+ },
+ "logo": "/programs/zram-generator/logo.png"
+}
diff --git a/content/programs/zsh/logo.png b/content/programs/zsh/logo.png
new file mode 100644
index 0000000..1398048
--- /dev/null
+++ b/content/programs/zsh/logo.png
@@ -0,0 +1 @@
+Zsh
\ No newline at end of file
diff --git a/docs/testing-spec.md b/docs/testing-spec.md
new file mode 100644
index 0000000..118b0ce
--- /dev/null
+++ b/docs/testing-spec.md
@@ -0,0 +1,332 @@
+# Testing Spec — Linux Setup Generator
+
+Test automatisé de tous les scripts d'installation sur toutes les distributions, via conteneurs Docker isolés.
+
+## Objectif
+
+Valider que chaque `program.json` + `custom_install/install.sh` produit un script fonctionnel sur chaque distribution. Un programme est considéré **valide** si son installation réussit dans un conteneur Docker frais de la distribution cible.
+
+## Architecture
+
+```
+┌─────────────────────────────────────────────────┐
+│ test.yml (CI) │
+│ matrix: [alpine, arch, debian, fedora, │
+│ opensuse, ubuntu, void] │
+│ │
+│ Pour chaque distro (7 jobs parallèles) : │
+│ 1. docker build -f Dockerfile. │
+│ 2. python runner.py --distro │
+│ 3. Upload rapport JSON → artifacts │
+└─────────────────────────────────────────────────┘
+```
+
+## Fichiers
+
+```
+tests/
+├── docker/
+│ ├── Dockerfile.alpine # FROM alpine:latest
+│ ├── Dockerfile.arch # FROM archlinux:latest
+│ ├── Dockerfile.debian # FROM debian:stable
+│ ├── Dockerfile.fedora # FROM fedora:latest
+│ ├── Dockerfile.opensuse # FROM opensuse/leap:latest
+│ ├── Dockerfile.ubuntu # FROM ubuntu:latest
+│ └── Dockerfile.void # FROM voidlinux/voidlinux:latest
+├── script_generator.py # Port Python du ScriptGenerator JS
+├── runner.py # Orchestrateur de test
+└── report.py # Formattage du rapport
+```
+
+## `script_generator.py`
+
+Port Python de [`static/js/script-generator.js`](../static/js/script-generator.js). Même algorithme, même comportement. Pourquoi Python plutôt que Node.js ? Pas de dépendance supplémentaire, et le reste de l'infra de test est en Python.
+
+### Classe `ScriptGenerator`
+
+```python
+class ScriptGenerator:
+ def __init__(self, distro: dict, programs: list, dependencies: list):
+ self.distro = distro
+ self.programs = programs
+ self.dependencies = dependencies
+ self.privilege_escalation = "" # root dans Docker → pas de sudo
+
+ def _find_item(self, slug: str) -> dict | None:
+ """Cherche un slug dans programs puis dependencies."""
+
+ def _retrieve_package_names(self) -> tuple[list, list]:
+ """Retourne (package_names, custom_slugs)."""
+
+ def _build_package_install_cmd(self, package_names: list) -> str:
+ """sudo pacman -S pkg1 pkg2 pkg3"""
+
+ def _resolve_dependencies(self, slug: str, visited: set, result: dict):
+ """DFS récursif post-order. Remplit result.order et result.packages."""
+
+ def _get_custom_install(self, slug: str, visited: set) -> str:
+ """Résout dépendances + lit install.sh depuis le filesystem."""
+
+ def _custom_installs(self, custom_slugs: list) -> str:
+ """Itère sur tous les CUSTOM_INSTALL avec visited partagé."""
+
+ def _script_header(self) -> str:
+ """Shebang + commentaire distro."""
+
+ def build_script(self) -> str:
+ """Assemble le script final."""
+```
+
+### Différences avec la version JS
+
+| JS (navigateur) | Python (test) |
+|---|---|
+| `fetch(/programs//custom_install/install.sh)` | `open(content/programs//custom_install/install.sh).read()` |
+| `sudo` prefixé aux commandes | Pas de `sudo` (root dans Docker) |
+| Script retourné comme string | Script sauvegardé dans `/tmp/test_script.sh` |
+
+## `runner.py`
+
+### Flux
+
+```
+1. Charger la distro (content/distros/.json)
+2. Charger tous les programmes (content/programs/*/program.json)
+3. Charger toutes les dépendances (content/dependencies/*/program.json)
+4. Instancier ScriptGenerator(distro, all_programs, all_deps)
+5. Générer le script → test_script.sh
+6. docker build -t lsg-test: -f Dockerfile. .
+7. docker run --rm -v $(pwd)/test_script.sh:/test_script.sh:ro lsg-test: bash /test_script.sh 2>&1 | tee test_output.txt
+8. Parser test_output.txt pour identifier les échecs
+9. Générer report.json
+```
+
+### Parsing des erreurs
+
+Le script bash doit être généré avec un wrapper qui loggue chaque programme :
+
+```bash
+#!/bin/bash
+# Wrapper qui teste chaque programme individuellement
+
+install_program() {
+ local name="$1"
+ shift
+ echo "▶️ [$name] Starting..."
+ if "$@" 2>&1; then
+ echo "✅ [$name] PASSED"
+ else
+ echo "❌ [$name] FAILED (exit code: $?)"
+ return 1
+ fi
+}
+```
+
+Le runner parse les lignes `❌ [nom] FAILED` pour construire le rapport.
+
+### Mode batch
+
+Pour éviter des runs de 8 heures, le runner supporte un mode batch :
+
+```bash
+# Teste les programmes par lot de 50
+python runner.py --distro void --batch 1/6 # programmes 1-50
+python runner.py --distro void --batch 2/6 # programmes 51-100
+...
+```
+
+## `Dockerfile.` — spécifications par distro
+
+Chaque Dockerfile doit :
+1. Partir de l'image officielle minimale
+2. Installer les outils de build de base
+3. Être root (pas de sudo)
+4. Désactiver les prompts interactifs
+
+### Dockerfile.alpine
+```dockerfile
+FROM alpine:latest
+RUN apk add --no-cache bash curl git build-base cmake nodejs npm python3 cargo rust
+```
+
+### Dockerfile.arch
+```dockerfile
+FROM archlinux:latest
+RUN pacman -Syu --noconfirm && pacman -S --noconfirm base-devel git curl nodejs npm python cargo
+```
+
+### Dockerfile.debian
+```dockerfile
+FROM debian:stable
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ build-essential curl git cmake nodejs npm python3 python3-pip cargo bash
+```
+
+### Dockerfile.fedora
+```dockerfile
+FROM fedora:latest
+RUN dnf install -y make automake gcc gcc-c++ kernel-devel curl git cmake nodejs npm python3 cargo
+```
+
+### Dockerfile.opensuse
+```dockerfile
+FROM opensuse/leap:latest
+RUN zypper install -y -t pattern devel_basis && zypper install -y curl git cmake nodejs npm python3 cargo
+```
+
+### Dockerfile.ubuntu
+```dockerfile
+FROM ubuntu:latest
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ build-essential curl git cmake nodejs npm python3 python3-pip cargo
+```
+
+### Dockerfile.void
+```dockerfile
+FROM voidlinux/voidlinux:latest
+RUN xbps-install -Syu && xbps-install -y base-devel curl git cmake nodejs npm python3 cargo
+```
+
+## Rapport de test
+
+### Format (`report.json`)
+
+```json
+{
+ "distro": "void",
+ "distro_slug": "void",
+ "timestamp": "2026-06-10T12:00:00Z",
+ "total": 291,
+ "passed": 273,
+ "failed": 18,
+ "skipped": 0,
+ "duration_seconds": 1847,
+ "failures": [
+ {
+ "slug": "virtualbox",
+ "name": "VirtualBox",
+ "error_message": "package 'virtualbox' not found in repository",
+ "exit_code": 1,
+ "install_method": "native",
+ "attempted_command": "xbps-install -S virtualbox",
+ "suggestion": "Pas dans les repos Void. Utiliser CUSTOM_INSTALL avec curl vers le .run Oracle."
+ }
+ ]
+}
+```
+
+### Génération du rapport HTML (optionnel)
+
+```bash
+python report.py report.json --html → report.html
+```
+
+## CI/CD Integration (`.github/workflows/test.yml`)
+
+```yaml
+name: Test install scripts
+on:
+ push:
+ branches: [develop]
+ paths:
+ - 'content/programs/**'
+ - 'content/distros/**'
+ - 'tests/**'
+ pull_request:
+ paths:
+ - 'content/programs/**'
+ - 'content/distros/**'
+ workflow_dispatch:
+
+jobs:
+ test:
+ strategy:
+ matrix:
+ distro: [alpine, arch, debian, fedora, opensuse, ubuntu, void]
+ fail-fast: false # un échec sur Alpine n'arrête pas Arch
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Build Docker image
+ run: docker build -t lsg-test:${{ matrix.distro }} -f tests/docker/Dockerfile.${{ matrix.distro }} .
+ - name: Run tests
+ run: python3 tests/runner.py --distro ${{ matrix.distro }}
+ - name: Upload report
+ uses: actions/upload-artifact@v4
+ with:
+ name: report-${{ matrix.distro }}
+ path: report.json
+```
+
+## Workflow humain
+
+```
+1. PR modifie ou ajoute un program.json / install.sh
+ │
+2. CI déclenchée → 7 jobs Docker parallèles
+ │
+3. Chaque job génère un rapport
+ │
+4. Reviewer regarde les ❌ dans le rapport
+ │
+5. Corrige le program.json / install.sh
+ │
+6. Repush → CI relancée → ✅
+```
+
+## Règles de priorité d'installation
+
+Rappel : ces règles guident le choix de la méthode d'installation quand on corrige un échec.
+
+| Priorité | Méthode | Exemple | Quand l'utiliser |
+|---|---|---|---|
+| **1** | Package manager natif | `xbps-install -S firefox` | Le package existe dans les repos officiels |
+| **2** | Dépôt tiers (apt repo, copr, AUR) | `add-apt-repository ... && apt install` | Package non-officiel mais packagé pour la distro |
+| **3** | curl/wget binaire | `curl -L url | bash` ou téléchargement d'un .deb/.rpm | Binary release officielle dispo |
+| **4** | Flatpak / Snap / AppImage | `flatpak install flathub org.app.Nom` | Package isolé, dispo cross-distro |
+| **5** | Gestionnaire de langage (pip, cargo, npm, gem) | `cargo install starship` | Outil écrit dans un langage spécifique, pas packagé |
+| **6** | Compilation from source | `git clone && make && make install` | Dernier recours — dépendances de build doivent être installées AVANT |
+
+### Règle compile : dépendances d'abord
+
+Quand on compile, le `custom_install/install.sh` doit **toujours** installer les dépendances de build avant la compilation :
+
+```bash
+#!/bin/bash
+# Exemple : installation de dwm depuis les sources
+set -e
+
+# 1. Dépendances de build
+sudo apt-get install -y build-essential libx11-dev libxft-dev libxinerama-dev
+
+# 2. Clone + compile
+git clone https://git.suckless.org/dwm /tmp/dwm
+cd /tmp/dwm
+make
+sudo make install
+```
+
+Les dépendances de build doivent être déclarées dans `dependencies` du `program.json` pour que le `ScriptGenerator` les résolve automatiquement.
+
+## Notes d'implémentation
+
+### Pourquoi Docker plutôt que des VMs ?
+
+- **Vitesse** : un conteneur se lance en < 1s, une VM en 30s+
+- **CI-native** : GitHub Actions a Docker préinstallé
+- **Reproductible** : le Dockerfile est la spec exacte de l'environnement
+- **Isolation** : chaque distro dans son conteneur, pas de conflits
+
+### Pourquoi `script_generator.py` plutôt que réutiliser le JS ?
+
+- La CI n'a pas de navigateur
+- Node.js serait une dépendance supplémentaire pour 136 lignes de logique
+- Python est déjà présent dans l'environnement de CI
+- La logique est suffisamment simple pour un port fidèle
+
+### Gestion du temps
+
+291 programmes × ~10s par installation (moyenne) = ~50 minutes par distro en série.
+Avec 7 runners parallèles : ~50 minutes total.
+
+Les compilations from source (dwm, st, etc.) prennent plus longtemps mais sont rares.
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..7002460
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1 @@
+# Test package — Linux Setup Generator
diff --git a/tests/docker/Dockerfile.alpine b/tests/docker/Dockerfile.alpine
new file mode 100644
index 0000000..0bd6f97
--- /dev/null
+++ b/tests/docker/Dockerfile.alpine
@@ -0,0 +1,3 @@
+FROM alpine:latest
+RUN apk add --no-cache bash curl git build-base cmake nodejs npm python3 py3-pip cargo rust cargo
+CMD ["/bin/bash"]
diff --git a/tests/docker/Dockerfile.arch b/tests/docker/Dockerfile.arch
new file mode 100644
index 0000000..08d6712
--- /dev/null
+++ b/tests/docker/Dockerfile.arch
@@ -0,0 +1,3 @@
+FROM archlinux:latest
+RUN pacman -Syu --noconfirm && pacman -S --noconfirm base-devel git curl nodejs npm python python-pip cargo rust
+CMD ["/bin/bash"]
diff --git a/tests/docker/Dockerfile.debian b/tests/docker/Dockerfile.debian
new file mode 100644
index 0000000..e3e2502
--- /dev/null
+++ b/tests/docker/Dockerfile.debian
@@ -0,0 +1,5 @@
+FROM debian:stable
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ build-essential curl git cmake nodejs npm python3 python3-pip cargo rustc bash \
+ && rm -rf /var/lib/apt/lists/*
+CMD ["/bin/bash"]
diff --git a/tests/docker/Dockerfile.fedora b/tests/docker/Dockerfile.fedora
new file mode 100644
index 0000000..ae73ddd
--- /dev/null
+++ b/tests/docker/Dockerfile.fedora
@@ -0,0 +1,4 @@
+FROM fedora:latest
+RUN dnf install -y make automake gcc gcc-c++ kernel-devel curl git cmake nodejs npm python3 python3-pip cargo rust bash \
+ && dnf clean all
+CMD ["/bin/bash"]
diff --git a/tests/docker/Dockerfile.opensuse b/tests/docker/Dockerfile.opensuse
new file mode 100644
index 0000000..2d136cf
--- /dev/null
+++ b/tests/docker/Dockerfile.opensuse
@@ -0,0 +1,6 @@
+FROM opensuse/leap:latest
+# devel_basis pattern is broken on Leap 15.6 — install packages individually
+# Only install what's needed to run the test runner (python3 + build essentials)
+RUN zypper --non-interactive install gcc gcc-c++ make automake curl git cmake python3 python3-pip bash \
+ && zypper clean
+CMD ["/bin/bash"]
diff --git a/tests/docker/Dockerfile.ubuntu b/tests/docker/Dockerfile.ubuntu
new file mode 100644
index 0000000..88c605d
--- /dev/null
+++ b/tests/docker/Dockerfile.ubuntu
@@ -0,0 +1,5 @@
+FROM ubuntu:latest
+RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
+ build-essential curl git cmake nodejs npm python3 python3-pip cargo rustc bash \
+ && rm -rf /var/lib/apt/lists/*
+CMD ["/bin/bash"]
diff --git a/tests/docker/Dockerfile.void b/tests/docker/Dockerfile.void
new file mode 100644
index 0000000..f977b8c
--- /dev/null
+++ b/tests/docker/Dockerfile.void
@@ -0,0 +1,13 @@
+FROM voidlinux/voidlinux:latest
+
+# GitHub Actions: image's xbps may be outdated vs the repo.
+# Update xbps first, then install build deps.
+RUN rm -rf /usr/share/xbps.d \
+ && mkdir -p /usr/share/xbps.d \
+ && echo 'repository=https://repo-default.voidlinux.org/current' > /usr/share/xbps.d/00-repository-main.conf \
+ && xbps-install -S \
+ && xbps-install -yu xbps \
+ && xbps-install -y base-devel curl git cmake nodejs python3 cargo bash \
+ && rm -rf /var/cache/xbps/*
+
+CMD ["/bin/bash"]
\ No newline at end of file
diff --git a/tests/report.py b/tests/report.py
new file mode 100644
index 0000000..9f636e9
--- /dev/null
+++ b/tests/report.py
@@ -0,0 +1,175 @@
+"""
+Formate un rapport de test JSON en sortie lisible.
+
+Usage:
+ python report.py report.json # Résumé texte
+ python report.py report.json --html # Génère report.html
+ python report.py report.json --markdown # Format markdown (pour PR comments)
+"""
+
+import argparse
+import json
+import sys
+from pathlib import Path
+
+
+def load_report(path):
+ with open(path) as f:
+ return json.load(f)
+
+
+def format_text(report):
+ """Format texte coloré pour le terminal."""
+ lines = []
+ lines.append("=" * 60)
+ lines.append(f"📊 Test Report — {report['distro']} ({report['distro_slug']})")
+ lines.append(f" Date: {report['timestamp']}")
+ lines.append(f" Total: {report['total']}")
+ lines.append(f" Passed: {report['passed']} ✅")
+ lines.append(f" Failed: {report['failed']} ❌")
+ lines.append(f" Skipped: {report['skipped']}")
+ lines.append(f" Duration: {report['duration_seconds']}s")
+
+ if report["failures"]:
+ lines.append(f"\n❌ Failures ({len(report['failures'])}):")
+ for f in report["failures"]:
+ lines.append(f" [{f['install_method']}] {f['name']}")
+ lines.append(f" Error: {f['error_message']}")
+ if f.get("attempted_command"):
+ lines.append(f" Cmd: {f['attempted_command']}")
+ else:
+ lines.append("\n✅ All programs passed!")
+
+ return "\n".join(lines)
+
+
+def format_markdown(report):
+ """Format markdown pour commentaires GitHub PR."""
+ lines = []
+ lines.append(f"## 🧪 Test Results — {report['distro']} (`{report['distro_slug']}`)")
+ lines.append("")
+ lines.append(f"| Metric | Value |")
+ lines.append(f"|--------|-------|")
+ lines.append(f"| Total | {report['total']} |")
+ lines.append(f"| Passed | {report['passed']} ✅ |")
+ lines.append(f"| Failed | {report['failed']} ❌ |")
+ lines.append(f"| Skipped | {report['skipped']} |")
+ lines.append(f"| Duration | {report['duration_seconds']}s |")
+
+ if report["failures"]:
+ lines.append("")
+ lines.append("### ❌ Failures")
+ lines.append("")
+ lines.append("| Program | Method | Error | Suggested Command |")
+ lines.append("|---------|--------|-------|-------------------|")
+ for f in report["failures"]:
+ error = f["error_message"].replace("|", "\\|")[:80]
+ cmd = f.get("attempted_command", "").replace("|", "\\|")[:60]
+ lines.append(
+ f"| {f['name']} | {f['install_method']} | {error} | `{cmd}` |"
+ )
+ else:
+ lines.append("")
+ lines.append("✅ **All programs passed!**")
+
+ lines.append("")
+ lines.append(f"_Report generated at {report['timestamp']}_")
+ return "\n".join(lines)
+
+
+def format_html(report):
+ """Génère une page HTML autonome avec le rapport."""
+ passed_pct = (
+ round(report["passed"] / report["total"] * 100, 1) if report["total"] else 0
+ )
+ bar_color = "#22c55e" if passed_pct > 90 else "#f59e0b" if passed_pct > 70 else "#ef4444"
+
+ failures_html = ""
+ if report["failures"]:
+ rows = []
+ for f in report["failures"]:
+ rows.append(
+ f""
+ f"| {f['name']} | "
+ f"{f['install_method']} | "
+ f"{f['error_message'][:100]} | "
+ f"{f.get('attempted_command', '')[:80]} | "
+ f"
"
+ )
+ failures_html = f"""
+ ❌ Failures ({len(report['failures'])})
+
+ | Program | Method | Error | Command |
+ {"".join(rows)}
+
+ """
+
+ return f"""
+
+
+
+ Test Report — {report['distro']}
+
+
+
+ 🧪 Test Report — {report['distro']}
+ {report['timestamp']} · {report['distro_slug']} · {report['duration_seconds']}s
+
+
+
+
{report['passed']}
Passed ✅
+
{report['failed']}
Failed ❌
+
{passed_pct}%
Success rate
+
+
+
+
+ {failures_html}
+
+"""
+
+
+def main():
+ parser = argparse.ArgumentParser(description="Formate un rapport de test")
+ parser.add_argument("report", help="Fichier report.json")
+ parser.add_argument("--html", action="store_true", help="Génère un fichier HTML")
+ parser.add_argument("--markdown", action="store_true", help="Format markdown")
+ parser.add_argument("--output", "-o", help="Fichier de sortie (défaut: stdout)")
+ args = parser.parse_args()
+
+ report = load_report(args.report)
+
+ if args.markdown:
+ output = format_markdown(report)
+ elif args.html:
+ output = format_html(report)
+ out_path = args.output or args.report.replace(".json", ".html")
+ Path(out_path).write_text(output)
+ print(f"HTML report written to {out_path}")
+ return
+ else:
+ output = format_text(report)
+
+ if args.output:
+ Path(args.output).write_text(output)
+ else:
+ print(output)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tests/runner.py b/tests/runner.py
new file mode 100644
index 0000000..21e0488
--- /dev/null
+++ b/tests/runner.py
@@ -0,0 +1,316 @@
+"""
+Test runner — orchestre le test d'installation pour une distribution.
+
+Usage:
+ python runner.py --distro void # Tous les programmes
+ python runner.py --distro arch --batch 1/5 # 1er lot sur 5
+ python runner.py --distro ubuntu --slug neovim,tmux # Programmes spécifiques
+
+Flow:
+ 1. Charge la distro + tous les programmes + dépendances
+ 2. Génère le script via ScriptGenerator
+ 3. Build l'image Docker
+ 4. Exécute le script dans le conteneur
+ 5. Parse la sortie → rapport JSON
+"""
+
+import argparse
+import json
+import subprocess
+import sys
+import time
+from pathlib import Path
+
+from script_generator import ScriptGenerator
+
+
+# Racine du projet (où se trouve content/)
+PROJECT_ROOT = Path(__file__).resolve().parent.parent
+
+
+def load_json(path):
+ """Charge un fichier JSON, retourne un dict."""
+ with open(path) as f:
+ return json.load(f)
+
+
+def load_distro(slug):
+ """Charge la définition d'une distribution."""
+ path = PROJECT_ROOT / "content" / "distros" / f"{slug}.json"
+ if not path.exists():
+ raise FileNotFoundError(f"Distro not found: {path}")
+ return load_json(path)
+
+
+def load_all_programs():
+ """Charge tous les programs.json du catalogue."""
+ programs = []
+ programs_dir = PROJECT_ROOT / "content" / "programs"
+ for folder in sorted(programs_dir.iterdir()):
+ if folder.is_dir():
+ program_json = folder / "program.json"
+ if program_json.exists():
+ programs.append(load_json(program_json))
+ return programs
+
+
+def load_all_dependencies():
+ """Charge toutes les dépendances build-time."""
+ deps = []
+ deps_dir = PROJECT_ROOT / "content" / "dependencies"
+ if deps_dir.exists():
+ for folder in sorted(deps_dir.iterdir()):
+ if folder.is_dir():
+ dep_json = folder / "program.json"
+ if dep_json.exists():
+ deps.append(load_json(dep_json))
+ return deps
+
+
+def filter_programs(all_programs, slugs=None, batch=None):
+ """
+ Filtre les programmes par slugs ou par batch.
+
+ Args:
+ all_programs: Liste complète des programmes
+ slugs: Liste de slugs spécifiques (optionnel)
+ batch: Tuple (numéro, total) pour le mode batch (optionnel)
+
+ Returns:
+ Liste filtrée de programmes
+ """
+ if slugs:
+ slug_set = set(slugs.split(","))
+ return [p for p in all_programs if p["slug"] in slug_set]
+
+ if batch:
+ batch_num, total = batch
+ batch_size = len(all_programs) // total + 1
+ start = (batch_num - 1) * batch_size
+ end = start + batch_size
+ return all_programs[start:end]
+
+ return all_programs
+
+
+def build_docker_image(distro_slug):
+ """Build l'image Docker pour la distro."""
+ dockerfile = PROJECT_ROOT / "tests" / "docker" / f"Dockerfile.{distro_slug}"
+ tag = f"lsg-test:{distro_slug}"
+
+ print(f"🔨 Building Docker image: {tag}")
+ result = subprocess.run(
+ ["docker", "build", "-t", tag, "-f", str(dockerfile), "."],
+ cwd=PROJECT_ROOT,
+ capture_output=True,
+ text=True,
+ )
+ if result.returncode != 0:
+ print(f"❌ Docker build failed:\n{result.stderr}")
+ sys.exit(1)
+ print(f"✅ Image built: {tag}")
+ return tag
+
+
+def run_test_script(image_tag, script_path):
+ """Exécute le script de test dans le conteneur Docker."""
+ print(f"🚀 Running test in {image_tag}...")
+
+ result = subprocess.run(
+ [
+ "docker", "run", "--rm",
+ "-v", f"{script_path}:/test_script.sh:ro",
+ image_tag,
+ "bash", "/test_script.sh",
+ ],
+ cwd=PROJECT_ROOT,
+ capture_output=True,
+ text=True,
+ )
+
+ return result.stdout + result.stderr, result.returncode
+
+
+def parse_output(output):
+ """
+ Parse la sortie du script pour extraire les succès et échecs.
+
+ Format attendu (généré par le wrapper dans script_generator.py):
+ ▶️ [nom] Installing...
+ ✅ [nom] PASSED
+ ❌ [nom] FAILED (exit code: N)
+ Command: ...
+ """
+ failures = []
+ passed = []
+ current_program = None
+ current_install_type = None
+
+ for line in output.split("\n"):
+ # Détecter le début d'une installation
+ if "▶️ " in line and "Installing..." in line:
+ # Extraire le nom entre crochets
+ if "[" in line and "]" in line:
+ current_program = line[line.index("[") + 1 : line.index("]")]
+ current_install_type = (
+ "custom" if "(custom)" in line else "native"
+ )
+
+ # Détecter un succès
+ elif "✅" in line and "PASSED" in line and current_program:
+ if "[" in line and "]" in line:
+ name = line[line.index("[") + 1 : line.index("]")]
+ passed.append(name)
+ current_program = None
+
+ # Détecter un échec
+ elif "❌" in line and "FAILED" in line and current_program:
+ exit_code = "1"
+ if "exit code:" in line:
+ exit_code = line.split("exit code:")[1].split(")")[0].strip()
+
+ failure = {
+ "slug": current_program.lower().replace(" ", "-"),
+ "name": current_program,
+ "exit_code": int(exit_code),
+ "install_method": current_install_type or "unknown",
+ "error_message": line.strip(),
+ "attempted_command": "",
+ }
+ current_program = None
+
+ # Récupérer la commande qui a échoué (ligne suivante)
+ elif "Command:" in line and failures:
+ failures[-1]["attempted_command"] = line.split("Command:")[1].strip()
+
+ return passed, failures
+
+
+def generate_report(distro, all_programs, passed, failures, duration, output_file):
+ """Génère le rapport JSON."""
+ report = {
+ "distro": distro["name"],
+ "distro_slug": distro["slug"],
+ "timestamp": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()),
+ "total": len(all_programs),
+ "passed": len(passed),
+ "failed": len(failures),
+ "skipped": len(all_programs) - len(passed) - len(failures),
+ "duration_seconds": round(duration, 1),
+ "failures": failures,
+ }
+
+ with open(output_file, "w") as f:
+ json.dump(report, f, indent=2)
+
+ return report
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description="Test d'installation pour une distribution Linux"
+ )
+ parser.add_argument(
+ "--distro", required=True,
+ choices=["alpine", "arch", "debian", "fedora", "opensuse", "ubuntu", "void"],
+ help="Distribution à tester"
+ )
+ parser.add_argument(
+ "--batch",
+ help="Mode batch: 'N/TOTAL' (ex: '1/5' pour le 1er lot sur 5)"
+ )
+ parser.add_argument(
+ "--slugs",
+ help="Slugs spécifiques à tester, séparés par des virgules"
+ )
+ parser.add_argument(
+ "--output", default="report.json",
+ help="Fichier de sortie du rapport (défaut: report.json)"
+ )
+ parser.add_argument(
+ "--no-docker", action="store_true",
+ help="Génère le script sans l'exécuter dans Docker"
+ )
+ args = parser.parse_args()
+
+ # 1. Charger les données
+ print(f"📦 Loading distro: {args.distro}")
+ distro = load_distro(args.distro)
+
+ print("📦 Loading programs...")
+ all_programs = load_all_programs()
+ print(f" → {len(all_programs)} programs loaded")
+
+ print("📦 Loading dependencies...")
+ dependencies = load_all_dependencies()
+ print(f" → {len(dependencies)} dependencies loaded")
+
+ # 2. Filtrer les programmes
+ batch = None
+ if args.batch:
+ try:
+ num, total = args.batch.split("/")
+ batch = (int(num), int(total))
+ except ValueError:
+ print("❌ Invalid batch format. Use 'N/TOTAL' (ex: '1/5')")
+ sys.exit(1)
+
+ programs = filter_programs(all_programs, args.slugs, batch)
+ print(f"🎯 Testing {len(programs)} programs")
+
+ # 3. Générer le script
+ print("📝 Generating install script...")
+ gen = ScriptGenerator(
+ distro,
+ programs,
+ dependencies,
+ content_root=str(PROJECT_ROOT / "content"),
+ )
+ script = gen.build_script()
+
+ script_path = PROJECT_ROOT / "test_script.sh"
+ script_path.write_text(script)
+ script_path.chmod(0o755)
+ print(f" → Script written to {script_path} ({len(script)} bytes)")
+
+ if args.no_docker:
+ print("⏭️ Skipping Docker execution (--no-docker)")
+ print(f" Script: {script_path}")
+ return
+
+ # 4. Build Docker
+ image_tag = build_docker_image(args.distro)
+
+ # 5. Run
+ start_time = time.time()
+ raw_output, exit_code = run_test_script(str(image_tag), str(script_path))
+ duration = time.time() - start_time
+
+ # 6. Parse
+ passed, failures = parse_output(raw_output)
+
+ # 7. Report
+ report = generate_report(
+ distro, programs, passed, failures, duration, args.output
+ )
+
+ # 8. Résumé
+ print(f"\n{'='*60}")
+ print(f"📊 Results for {distro['name']} ({distro['slug']})")
+ print(f" Total: {report['total']}")
+ print(f" Passed: {report['passed']} ✅")
+ print(f" Failed: {report['failed']} ❌")
+ print(f" Skipped: {report['skipped']}")
+ print(f" Duration: {report['duration_seconds']}s")
+ print(f" Report: {args.output}")
+
+ if failures:
+ print(f"\n❌ Failures ({len(failures)}):")
+ for f in failures:
+ print(f" - {f['name']} ({f['install_method']}): {f['error_message'][:80]}")
+
+ sys.exit(1 if failures else 0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tests/script_generator.py b/tests/script_generator.py
new file mode 100644
index 0000000..5e55e24
--- /dev/null
+++ b/tests/script_generator.py
@@ -0,0 +1,243 @@
+"""
+Port Python du ScriptGenerator JavaScript (static/js/script-generator.js).
+
+Même algorithme, même comportement. Utilisé par le test runner pour générer
+des scripts d'installation sans passer par le navigateur.
+
+Usage:
+ from script_generator import ScriptGenerator
+
+ gen = ScriptGenerator(distro, programs, dependencies)
+ script = gen.build_script()
+"""
+
+import json
+from pathlib import Path
+
+
+class ScriptGenerator:
+ """
+ Génère un script bash d'installation pour une distribution donnée.
+
+ Attributs:
+ distro (dict): Distribution cible (slug, name, install_package_command)
+ programs (list): Liste des programmes sélectionnés (format program.json)
+ dependencies (list): Liste des dépendances build-time (format program.json)
+ content_root (Path): Racine du dossier content/ pour lire les install.sh
+ """
+
+ def __init__(self, distro, programs, dependencies, content_root="content"):
+ self.distro = distro
+ self.programs = programs
+ self.dependencies = dependencies
+ self.content_root = Path(content_root)
+ # Pas de sudo dans Docker (root)
+ self.privilege_escalation = ""
+
+ def _find_item(self, slug):
+ """
+ Cherche un slug dans programs puis dans dependencies.
+ Retourne (item, folder) ou None.
+ """
+ for prog in self.programs:
+ if prog.get("slug") == slug:
+ return prog, "programs"
+ for dep in self.dependencies:
+ if dep.get("slug") == slug:
+ return dep, "dependencies"
+ return None
+
+ def _retrieve_package_names(self):
+ """
+ Sépare les programmes en deux catégories :
+ - package_names : installations via package manager natif
+ - custom_slugs : installations via CUSTOM_INSTALL
+ """
+ package_names = []
+ custom_slugs = []
+
+ for program in self.programs:
+ names = program.get("package_names", {})
+ pkg_name = names.get(self.distro["slug"], names.get("default"))
+ if pkg_name == "CUSTOM_INSTALL":
+ custom_slugs.append(program["slug"])
+ elif pkg_name:
+ package_names.append(pkg_name)
+
+ return package_names, custom_slugs
+
+ def _build_package_install_cmd(self, package_names):
+ """Construit la commande d'installation groupée pour les packages natifs."""
+ if not package_names:
+ return ""
+ cmd = f"{self.distro['install_package_command']} {' '.join(package_names)}"
+ if self.privilege_escalation:
+ cmd = f"{self.privilege_escalation} {cmd}"
+ return cmd
+
+ def _resolve_dependencies(self, slug, visited, result):
+ """
+ DFS récursif post-order (topological sort).
+
+ Args:
+ slug: Slug du programme à résoudre
+ visited: Set partagé des slugs déjà traités
+ result: dict avec 'order' (list) et 'packages' (list)
+ """
+ if slug in visited:
+ return
+ visited.add(slug)
+
+ found = self._find_item(slug)
+ deps = found[0].get("dependencies", []) if found else []
+
+ for dep in deps:
+ dep_found = self._find_item(dep)
+
+ if not dep_found:
+ # Pas un slug connu → nom de paquet raw
+ if dep not in result["packages"]:
+ result["packages"].append(dep)
+ continue
+
+ pkg_name = (
+ dep_found[0].get("package_names", {}).get(self.distro["slug"])
+ or dep_found[0].get("package_names", {}).get("default")
+ )
+
+ if pkg_name == "CUSTOM_INSTALL":
+ # Récurse dans la dépendance avant de continuer (post-order)
+ self._resolve_dependencies(dep, visited, result)
+ elif pkg_name and pkg_name not in result["packages"]:
+ result["packages"].append(pkg_name)
+
+ # Post-order : ajouter le slug APRÈS ses dépendances
+ result["order"].append({
+ "slug": slug,
+ "folder": found[1] if found else "programs",
+ })
+
+ def _get_custom_install(self, slug, visited):
+ """
+ Résout les dépendances d'un CUSTOM_INSTALL puis lit son install.sh
+ depuis le filesystem. Le visited set est partagé entre tous les
+ CUSTOM_INSTALL pour éviter les doublons.
+ """
+ result = {"order": [], "packages": []}
+ self._resolve_dependencies(slug, visited, result)
+
+ parts = []
+
+ if result["packages"]:
+ for pkg in result["packages"]:
+ cmd = f"{self.distro['install_package_command']} {pkg}"
+ if self.privilege_escalation:
+ cmd = f"{self.privilege_escalation} {cmd}"
+ parts.append(f'install_native "{pkg}" {cmd}')
+
+ for entry in result["order"]:
+ s = entry["slug"]
+ folder = entry["folder"]
+ install_path = (
+ self.content_root / folder / s / "custom_install" / "install.sh"
+ )
+ if install_path.exists():
+ content = install_path.read_text()
+ # Strip shebang and set -e (already in header)
+ lines = content.strip().split("\n")
+ clean_lines = [
+ l for l in lines
+ if not l.startswith("#!") and l.strip() != "set -e"
+ ]
+ parts.append("\n".join(clean_lines))
+
+ return "\n".join(p for p in parts if p)
+
+ def _custom_installs(self, custom_slugs):
+ """
+ Itère sur tous les slugs CUSTOM_INSTALL avec un visited set partagé.
+ Chaque programme est wrappé dans une fonction de logging pour le runner.
+ """
+ visited = set()
+ parts = []
+
+ for slug in custom_slugs:
+ # Trouver le nom du programme pour le log
+ prog = next((p for p in self.programs if p.get("slug") == slug), None)
+ name = prog["name"] if prog else slug
+
+ script = self._get_custom_install(slug, visited)
+ if script:
+ parts.append(f'echo "▶️ [{name}] Installing..."')
+ parts.append(script)
+ parts.append(f'echo "✅ [{name}] PASSED"')
+
+ return "\n".join(parts)
+
+ def _script_header(self):
+ """Génère le shebang et les helpers de logging."""
+ return """#!/bin/bash
+# Run all programs, collect all failures (don't stop on first error)
+set +e
+
+# Wrapper de logging pour les packages natifs
+install_native() {
+ local name="$1"
+ shift
+ echo "▶️ [$name] Installing..."
+ if "$@" 2>&1; then
+ echo "✅ [$name] PASSED"
+ else
+ local rc=$?
+ echo "❌ [$name] FAILED (exit code: $rc)"
+ echo " Command: $*"
+ return $rc
+ fi
+}
+
+# Wrapper de logging pour les scripts custom
+install_custom() {
+ local name="$1"
+ shift
+ echo "▶️ [$name] Installing (custom)..."
+ if bash -c "$*" 2>&1; then
+ echo "✅ [$name] PASSED"
+ else
+ local rc=$?
+ echo "❌ [$name] FAILED (exit code: $rc)"
+ return $rc
+ fi
+}
+"""
+
+ def build_script(self):
+ """
+ Assemble le script final : header + packages natifs + customs.
+
+ Returns:
+ str: Le script bash complet
+ """
+ package_names, custom_slugs = self._retrieve_package_names()
+
+ # Packages natifs — installés en groupe, mais loggés individuellement
+ native_section = ""
+ if package_names:
+ # On génère une commande d'install par package pour le logging individuel
+ native_cmds = []
+ for pkg in package_names:
+ cmd = f"{self.distro['install_package_command']} {pkg}"
+ if self.privilege_escalation:
+ cmd = f"{self.privilege_escalation} {cmd}"
+ native_cmds.append(f'install_native "{pkg}" {cmd}')
+ native_section = "\n".join(native_cmds)
+
+ # Customs — chaque CUSTOM_INSTALL est déjà wrappé dans _custom_installs()
+ custom_section = self._custom_installs(custom_slugs) if custom_slugs else ""
+
+ parts = [self._script_header()]
+ if native_section:
+ parts.append(f"# === Native packages ({len(package_names)}) ===\n{native_section}")
+ if custom_section:
+ parts.append(f"\n# === Custom installs ({len(custom_slugs)}) ===\n{custom_section}")
+
+ return "\n".join(parts) + "\n"