## Raspberry Pi App Store for Open Source Projects
There are many open-source, community-developed software projects for Raspberry Pi, yet very few people know about them. Pi-Apps aims to improve this, functioning as a software catalog and standardizing installation.
Pi-Apps is 100% free & open source.
## What do others say about Pi-Apps?
> It's an awesome Raspberry Pi app store and it works really well and there's lots of great stuff in here and it's super easy to install.
> I want to give the devs of Pi-Apps a big shout-out. - [ETA Prime](https://www.youtube.com/watch?v=oqNWJ52DLes)
> Awesome. Thanks for doing this. - Novaspirit Tech
> I just discovered the nice project and I am impressed by the list of apps proposed especially Zoom or Visual Studio Code. - [olaxe](https://github.com/Botspot/pi-apps/issues/113#issue-752871771)
> Love this project. Keep up the awesome work and keep growing! Impressive. - [necro-nemesis](https://github.com/Botspot/pi-apps/issues/114#issue-753056982)
> It definitely looks really cool.
> Thanks so much to Botspot for creating this; it's a great program. - [leepspvideo](https://www.youtube.com/watch?v=zxyWQ3FV98I)
> Thanks for all your great work! Every time I see your work, I appreciate it even more. - Itai
> I need to find the time to try your app store. Thank you for all the work - [Puffergas](https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=291240&p=1761535#p1761401)
### To install Pi Apps
## To install Pi Apps
```
git clone https://github.com/Botspot/pi-apps
~/pi-apps/install
```
The install script ensures YAD is installed, creates two menu buttons, and an autostarted updater. Nothing is modified outside your home directory.
### To run Pi Apps
## To run Pi Apps
Menu -> Accessories -> Pi Apps, or type `./pi-apps/gui`.
It helps you select an icon, create & debug install/uninstall scripts, write a description, and more.
### To-do
## To-do
- [X] Make app creation system. (completed with the `createapp` script)
- [X] Add Pi-Apps to Twister OS. (completed on 11/2/2020 via the Twister 1.8.5 patch.)
- [X] Make 32-bit and 64-bit install scripts.
- [X] Allow multiple apps to be selected from the app list and be installed simultaneously.
- [X] Add a search function to the app list. It's still experimental: to enable it, switch to **xlunch** in **Pi-Apps Settings** -> **App List Style**.
### How it works
## How it works
- Each 'App' is simply a small `install` script, `uninstall` script, two icon sizes, and two text files containing the description and a website URL.
- Each App is stored in its own separate directory. `~/pi-apps/apps/` holds all these app directories. The Zoom app, for example, would be located at `~/pi-apps/apps/Zoom/`.
- Because of the contained nature of each app folder, it's really easy to 'package' your own apps: just put the folder in a ZIP file and send it to friends. (or upload it as a [new issue](https://github.com/Botspot/pi-apps/issues/new) so your app can be added to Pi-Apps)
- When you click Install, the selected App's `install` script is executed.
- When you click Install, the selected App's `install` script is executed. (Or, in some cases, the `install-32` or `install-64` script is executed.)
- When you click Uninstall, the selected App's `uninstall` script is executed.
### Terminal usage
- The `manage` script is similar to `apt-get` - it handles installing apps, uninstalling them, keeping them updated, and more. `Manage` does not include a GUI, though in some cases a dialog will appear to ask you a question.
## Terminal usage
- The `manage` script is similar to `apt-get` - it handles installing apps, uninstalling them, keeping them updated, and more. `Manage` does not include a GUI, though in some cases, a dialog may appear to ask you a question.
- To **install** an app, run this:
`~/pi-apps/manage install Zoom`
- To **uninstall** an app:
@ -62,10 +77,13 @@ Note that if an app is up-to-date, no files will be moved around.
This command will return a list of updatable apps, separated by the `|` character.
- To **update all** apps:
`~/pi-apps/manage update-all`
Please note that this will not update the Pi-Apps main scripts! It only updates your apps and that's an important distinction.
- To update everything:
`~/pi-apps/updater`
- To **list** all apps:
`ls ~/pi-apps/apps`
Note that this will also list the `template` app, which contains the default install & uninstall scripts.
### App folder:
Note that this will also list the `template` app, which is usually hidden.
## App folder:
Each app folder contains some of these files:
- `credits` Contains credits for the app. This file may mention who created the app originally, who compiled it, who submitted it to Pi-Apps, etc. Few apps use this file.
- `description` This stores the app's description. If you hover your mouse over an app in the app list, it will display a tooltip derived from the first line of this file.
@ -75,7 +93,7 @@ Each app folder contains some of these files:
- `install-32` This script installs an app on 32bit OS'es, and is 32bit-specific.
- `install-64` This script installs an app on 64bit OS'es, and is 64bit-specific.
Sidenote: if an app only has an `install-32` script, then Pi-Apps will assume it's for 32bit OS'es only and will hide that app on 64bit installations.
- `uninstall` This script uninstalls the app. It must undo all changes made during install, but with one exception: **It must not permanently delete any user-generated confg!** [We don't want people's Minecraft worlds being deleted during an update.](https://github.com/Botspot/pi-apps/issues/44)
- `uninstall` This script uninstalls the app. It must undo all changes made during install, but with one exception: **It must not permanently delete any user-generated config!** [We don't want people's Minecraft worlds being deleted during an update.](https://github.com/Botspot/pi-apps/issues/44)
### Directory tree
- `~/pi-apps/` This is the main folder that holds everything. In all scripts, it is represented as the `${DIRECTORY}` variable.
@ -117,7 +135,7 @@ Sidenote: if an app only has an `install-32` script, then Pi-Apps will assume it
- `hidelist` This file contains app names that should be hidden from the app list. `template` should always be there. If your Pi runs TwisterOS, then `hidelist` will contain several more app names, like balenaEtcher, for example.
- `last-update-check` This contains a date in numeric form. (Jan. 1 would be `1`, Dec. 31 would be `365`.) The `updater` script uses this file to keep track of when updates were last checked.
- `etc/` This folder is basically an extension of the main `pi-apps/` folder. Its contents don't need to clutter up the main directory, but they can't go in `data/` because these files should be kept up-to-date.
- `setting-params/` This stores the GUI entries for the Settings window. For example, if I wanted to add a new setting called "Auto donate" with 'Yes' and 'No' parameters, I'd create a new file called `setting-params/Auto donate` and it would contain this:
- `setting-params/` This stores the GUI entries for the Settings window. For example, if I wanted to add a new setting called "Auto donate", with 'Yes' and 'No' parameters, with Yes being the default setting, I'd create a new file called `setting-params/Auto donate` and it would contain this:
```
#Donate automatically to Botspot every time Pi-Apps is launched
Yes
@ -125,14 +143,14 @@ Sidenote: if an app only has an `install-32` script, then Pi-Apps will assume it
```
Now, the next time Settings is opened, you will see:
What's the point? Basically, it allows for a more elegant way to add new settings. With this approach, it's a lot harder to screw up than with manually editing a bash script.
With this file-based approach, adding new settings (and/or parameters) is much easier to do and in a standardized way. (As opposed to adding new settings by editing a bash script)
- `git_url` This simple file stores this link: https://github.com/Botspot/pi-apps
If you fork this repository and make changes, you will want Pi-Apps checking for updates from your repository, not this main one. Simply change the URL in this file to switch to your repository.
- `icons/` This stores all the icons that are embedded into various dialogs.
- `screenshots/` Stores screenshots of various dialogs, mainly used as an image hosting service, though I suppose they could come in handy if an offline help dialog was made.
- `update/` This folder holds the latest version of the entire Pi-Apps repository. It's contents is re-downloaded every time you check for updates. It is used to compare file hashes, detect when an app or file can be updated, and is used to copy new file versions into the main `pi-apps/` directory during an update.
### Badge
If your application is on Pi-Apps, please consider adding this pretty badge to your README:
- `update/` This folder holds the latest version of the entire Pi-Apps repository. It's contents is re-downloaded every time the `updater` script checks for updates. It is used to compare file hashes, detect when an app or file can be updated, and is used to copy new file versions into the main `pi-apps/` directory during an update.
## Badge
If your application is on Pi-Apps, please consider adding this pretty badge/hyperlink to your README:
> The repositories don't host them, and they usually aren't advertised very well, so how will people find them?
> Most people never find them.
> One day I realized: Why not make my own app store that specializes in all the community RPi software projects out there? It will help more users find the software, and at the same time it would provide a super simple way to install them.
> (Which would you rather do - click a shiny Install button, or manually type 11 commands?)
> (Which would you rather do - click a shiny Install button, or copy-n-paste a bunch of commands from a sketchy blog tutorial?)
- How long did it take to program this?
> About two weeks of nearly non-stop coding. It was fun, but excruciating at the same time.
> About two weeks of nearly non-stop coding to make Pi-Apps from the ground-up. And since then, I've regularly fixed bugs, solved problems, adding new features, and handled new app submissions.