{"id":15674819,"url":"https://github.com/griefed/docker-app-collection","last_synced_at":"2025-03-10T13:33:24.181Z","repository":{"id":53701123,"uuid":"307136844","full_name":"Griefed/docker-App-Collection","owner":"Griefed","description":"A bundle of apps. Previously available as separate containers, now bundled into one.","archived":false,"fork":false,"pushed_at":"2023-08-04T10:39:12.000Z","size":2120,"stargazers_count":14,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-10-04T15:51:23.449Z","etag":null,"topics":["composerize","dcc-web","docker","forks","hacktoberfest","linuxserver","lsiobase","nginx","nginxconfig","raspberry-pi","status","sui","texture-generation","tgen","triangulator"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Griefed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-25T16:05:38.000Z","updated_at":"2023-11-04T18:00:25.000Z","dependencies_parsed_at":"2023-02-03T03:46:12.321Z","dependency_job_id":null,"html_url":"https://github.com/Griefed/docker-App-Collection","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":"Griefed/docker-template-repo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Griefed%2Fdocker-App-Collection","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Griefed%2Fdocker-App-Collection/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Griefed%2Fdocker-App-Collection/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Griefed%2Fdocker-App-Collection/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Griefed","download_url":"https://codeload.github.com/Griefed/docker-App-Collection/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221176586,"owners_count":16770038,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["composerize","dcc-web","docker","forks","hacktoberfest","linuxserver","lsiobase","nginx","nginxconfig","raspberry-pi","status","sui","texture-generation","tgen","triangulator"],"created_at":"2024-10-03T15:51:16.542Z","updated_at":"2024-10-23T08:41:07.697Z","avatar_url":"https://github.com/Griefed.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![docker-App-Collection](https://i.griefed.de/images/2020/11/18/docker-App-Collection_header.png)](https://github.com/Griefed/docker-App-Collection)\n\n[![Homepage](https://img.shields.io/badge/Griefed.de-Homepage-c0ffee?style=for-the-badge\u0026labelColor=325358\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAACylBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v6OsnIvAAAA7XRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiQlJicoKSorLC0uLzAxMjU2Nzg5Ojs8Pj9AQUJERUZHSElLTE9QUVJTVFVWV1hZXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SGh4iJiouMjY6P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)](https://www.griefed.de)\n[![Blog](https://img.shields.io/badge/Griefed.de-Blog-c0ffee?style=for-the-badge\u0026labelColor=325358\u0026logo=wordpress)](https://blog.griefed.de)\n[![Fleet](https://img.shields.io/badge/Griefed.de-Fleet-c0ffee?style=for-the-badge\u0026labelColor=325358\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAABiVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8XJWL///8gNCTuAAAAgXRSTlMAAgMEBQYHCAkLDA4PEBESFhgZGh0eISIlKC8zNDU3OT0+P0BBQkhKS01QU1RVVltcXWJjZGlrbG1wcnN0eHl6e4CBhYyOkJWWmZ6foaKkqaqsrrKztLe8vsHExcbHy8zNz9DT1NXX2Nna293e3+Tm5+nq7O3u7/Hy9fb4+fr7/f4zgtRAAAABWklEQVR42mKgHhCFMbg0dHW1xNGlBcw5wTS7tkcJoNV5UJItBoMA3GPjcm3btm3btq1+8s1JxijuV0p+X5NzVcfNRoT4O26ClEZykdydI5ddCHDt+EfqthiwYoXfRH++yb9r8IZ+o/CpeB1hE/zMtXf0KYKkP9p8ZSaCfq1S2ddDU84zrsuXYXZjYy0VcBxQKYVmgQ9slS8HhUbxSP+kNAPB+kIyO1ggr5mn9GoX70wKydA4/RNQQSVPvGspZEHQ5ZKHK5lu8UymUi/enRQuxYjcN5LPH+RTQfcVlQ4AbfJ1n4JKRusG0ErpzCn3vjFMe8g9/eUU2himHEAilc+Vq6XJ4Zyx6eXTk3f6/IOww7i2oOliXNXQ/H5kHBcWSO2MowyKJc4VU/BLOGcMm04EJF3FyHsQImkvMj/tQBhrz0to+rwSUf70XvjT23VWxKLLaBkYGuqr+Y8f9Q3q0fzzGED8cgAAAABJRU5ErkJggg==)](https://fleet.griefed.de)\n[![GitHub](https://img.shields.io/badge/Griefed.de-Github-c0ffee?style=for-the-badge\u0026labelColor=325358\u0026logo=github)](https://github.com/Griefed)\n[![DockerHub](https://img.shields.io/badge/Griefed.de-DockerHub-c0ffee?style=for-the-badge\u0026labelColor=325358\u0026logo=docker\u0026logoColor=white)](https://hub.docker.com/u/griefed)\n[![Discord](https://img.shields.io/badge/Griefed.de-Discord-c0ffee?style=for-the-badge\u0026labelColor=325358\u0026logo=discord\u0026logoColor=white)](https://discord.griefed.de)\n\n---\n\n# Sources, GitHub, GitLab and Mirroring and all that good stuff\n\nRepositories on GitHub are now for issues only. I've set up my own installation of GitLab and moved all my repositories over to [Git.Griefed.de](https://git.griefed.de/users/Griefed/projects). Make sure to check there first for the latest code before opening an issue on GitHub.\n\nFor questions, you can always join my [Discord server](https://discord.griefed.de) and talk to me there.\n\n---\n# docker-App-Collection\n\n[![Docker Pulls](https://img.shields.io/docker/pulls/griefed/app-collection?style=for-the-badge\u0026logo=Docker\u0026labelColor=325358\u0026color=c0ffee\u0026logoColor=white)](https://hub.docker.com/repository/docker/griefed/app-collection)\n[![Docker Cloud Automated build](https://img.shields.io/docker/cloud/automated/griefed/app-collection?label=Docker%20build\u0026style=for-the-badge\u0026logo=Docker\u0026labelColor=325358\u0026color=c0ffee\u0026logoColor=white)](https://hub.docker.com/repository/docker/griefed/app-collection)\n[![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/griefed/app-collection?label=Docker%20build\u0026style=for-the-badge\u0026logo=Docker\u0026labelColor=325358\u0026color=c0ffee\u0026logoColor=white)](https://hub.docker.com/repository/docker/griefed/app-collection)\n[![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/griefed/app-collection?label=Image%20size\u0026sort=date\u0026style=for-the-badge\u0026logo=Docker\u0026labelColor=325358\u0026color=c0ffee\u0026logoColor=white)](https://hub.docker.com/repository/docker/griefed/app-collection)\n[![GitHub Repo stars](https://img.shields.io/github/stars/Griefed/docker-App-Collection?label=GitHub%20Stars\u0026style=for-the-badge\u0026logo=Github\u0026labelColor=325358\u0026color=c0ffee)](https://github.com/Griefed/docker-App-Collection)\n[![GitHub forks](https://img.shields.io/github/forks/Griefed/docker-App-Collection?label=GitHub%20Forks\u0026style=for-the-badge\u0026logo=Github\u0026labelColor=325358\u0026color=c0ffee)](https://github.com/Griefed/docker-App-Collection)\n\nApp-Collection is, as the name implies, a collection of various apps which I have previously released in separate Docker Containers and am now moving/collecting into one single container.\u003cbr/\u003e\u003cbr/\u003ePlease keep in mind that the first start of the container may take a while.\u003cbr/\u003eThat is due to the apps and how they are installed on first run as they are not part of the image itself.\u003cbr/\u003eEspecially Composerize can take a couple of minutes to finish.\n\nCurrent applications:\n\nCreator | Repository\n--------|------------\n[lukaszmn](https://github.com/lukaszmn) | [active-forks](https://github.com/lukaszmn/active-forks), a fork of [techgaun's](https://github.com/techgaun) [active-forks](https://github.com/techgaun/active-forks)\n[magicmark](https://github.com/magicmark) | [composerize](https://github.com/magicmark/composerize)\n[bucherfa](https://github.com/bucherfa) | [Griefed's](https://github.com/Griefed) [dcc-web](https://github.com/Griefed/dcc-web), a fork of [bucherfa's](https://github.com/bucherfa) [dcc-web](https://github.com/bucherfa/dcc-web)\n[digitalocean](https://github.com/digitalocean) | [nginxconfig.io](https://github.com/digitalocean/nginxconfig.io)\n[ThreadR-r](https://github.com/ThreadR-r) | [sui-dashboard-status](https://github.com/ThreadR-r/sui-dashboard-status), a fork of [jeroenpardon's](https://github.com/jeroenpardon) [sui](https://github.com/jeroenpardon/sui)\n[maeglin89273](https://github.com/maeglin89273) | [triangulator](https://github.com/maeglin89273/triangulator)\n[schalkt](https://github.com/schalkt) | [tgen](https://github.com/schalkt/tgen)\n[RundesBalli](https://github.com/RundesBalli) | [Griefed's](https://github.com/Griefed) [php-noise.com](https://github.com/Griefed/php-noise.com), a fork of [RundesBalli's](https://github.com/RundesBalli) [php-noise.com](https://github.com/RundesBalli/php-noise.com)\n[RundesBalli](https://github.com/RundesBalli) | [php-noise](https://github.com/RundesBalli/php-noise)\n\nApp-Collection | Screenshots\n------|------\n[![active-forks](https://i.griefed.de/images/2020/11/19/docker-App-Collection_forks_screenshot.png)](https://github.com/lukaszmn/active-forks) | [![composerize](https://i.griefed.de/images/2020/11/19/docker-App-Collection_composerizescreenshot.png)](https://github.com/magicmark/composerize)\n[![dcc-web](https://i.griefed.de/images/2020/11/19/docker-App-Collection_dcc_screenshot.png)](https://github.com/bucherfa/dcc-web) | [![nginxconfig.io](https://i.griefed.de/images/2020/11/19/docker-App-Collection_nginxconfig.io_screenshot.png)](https://github.com/digitalocean/nginxconfig.io)\n[![sui-dashboard-status](https://i.griefed.de/images/2020/11/19/docker-App-Collection_screenshot.png)](https://github.com/ThreadR-r/sui-dashboard-status) | [![triangulator](https://i.griefed.de/images/2020/11/19/docker-App-Collection_triangulator_screenshot.png)](https://github.com/maeglin89273/triangulator)\n[![tgen](https://i.griefed.de/images/2020/11/28/docker-App-Collection_tgen_screenshot.png)](https://github.com/schalkt/tgen) | [![php-noise](https://i.griefed.de/images/2021/01/22/docker-App-Collection_noise_screenshot.png)](https://github.com/RundesBalli/php-noise.com)\n\n[[_TOC_]]\n\n---\n\nCreates a Container which runs [Griefed's](https://github.com/Griefed) [docker-App-Collection](https://github.com/Griefed/docker-App-Collection), with [lsiobase/nginx](https://hub.docker.com/r/lsiobase/lsiobase/nginx) as the base image, similar to https://apps.griefed.de.\n\nThe [lsiobase/nginx](https://hub.docker.com/r/lsiobase/nginx) image is a custom base image built with [Alpine linux](https://alpinelinux.org/) and [S6 overlay](https://github.com/just-containers/s6-overlay).\nUsing this image allows us to use the same user/group ids in the container as on the host, making file transfers much easier\n\n# Deployment\n\nTags | Description\n-----|------------\n`latest` | Using the `latest` tag will pull the latest image for linux/amd64,linux/arm/v7,linux/arm64.\n`develop` | The latest image of, if existent, the in-dev version of this container. Use at your own risk!\n\nUsing GitHub Workflows, images for this container are multi-arch. Simply pulling `:latest` should retrieve the correct image for your architecture.\nImages are available for linux/amd64,linux/arm/v7,linux/arm64.\n\n## Pre-built images\n\nusing docker-compose:\n\n```docker-compose.yml\nversion: \"2\"\nservices:\n  app-collection:\n    image: griefed/app-collection:latest\n    container_name: app-collection\n    restart: unless-stopped\n    environment:\n      - TZ=Europe/Berlin # Timezone\n      - PUID=1000 # User ID\n      - PROTOCOL=https # The protocol used to access this container. Either HTTP or HTTPS.\n      - PGID=1000 # Group ID\n      - INSTALL_TRIANGULATOR=true # Whether to install triangulator. Either true or false.\n      - INSTALL_TGEN=true # Whether to install tgen. Either true or false.\n      - INSTALL_NGINXCONFIG_IO=true # Whether to install NGINXConfig.io. Either true or false.\n      - INSTALL_DCC=true # Whether to install dcc. Either true or false.\n      - INSTALL_COMPOSERIZE=true # Whether to install composerize. Either true or false.\n      - INSTALL_ACTIVE_GITHUB_FORKS=true # Whether to install Active GitHub Forks. Either true or false.\n      - INSTALL_PHP_NOISE=true # Whether to install php-noise. Either true or false.\n      - DOMAIN=www.example.com # The address of the device this container is running on. Can be an IP or sub.domain.tld.\n    volumes:\n      - /host/path/to/config:/config # Contains all application data and base-image config files\n    ports:\n      - 443:443 # https\n      - 80:80 # http\n```\n\nUsing CLI:\n\n```bash\ndocker create \\\n  --name=app-collection \\\n  -e TZ=Europe/Berlin \\\n  -e PUID=1000 \\\n  -e PROTOCOL=https \\\n  -e PGID=1000 \\\n  -e INSTALL_TRIANGULATOR=true \\\n  -e INSTALL_TGEN=true \\\n  -e INSTALL_NGINXCONFIG_IO=true \\\n  -e INSTALL_DCC=true \\\n  -e INSTALL_COMPOSERIZE=true \\\n  -e INSTALL_ACTIVE_GITHUB_FORKS=true \\\n  -e INSTALL_PHP_NOISE=true \\\n  -e DOMAIN=www.example.com \\\n  -v /host/path/to/config:/config \\\n  -p 443:443 \\\n  -p 80:80 \\\n  --restart unless-stopped \\\n  griefed/app-collection:latest\n```\n\n# Configuration\n\nConfiguration | Explanation\n------------ | -------------\n[Restart policy](https://docs.docker.com/compose/compose-file/#restart) | \"no\", always, on-failure, unless-stopped\nconfig volume | Contains config files and logs.\nTZ | Timezone\nPUID | for UserID\nPGID | for GroupID\nDOMAIN | The address of the device this container is running on. Can be an IP or sub.domain.tld.\nPROTOCOL | The protocol used to access this container. Either HTTP or HTTPS.\nINSTALL_DCC | Either `true` or `false`.\nINSTALL_COMPOSERIZE | Either `true` or `false`.\nINSTALL_NGINXCONFIG_IO | Either `true` or `false`.\nINSTALL_TGEN | Either `true` or `false`.\nINSTALL_TRIANGULATOR | Either `true` or `false`.\nINSTALL_ACTIVE_GITHUB_FORKS | Either `true` or `false`.\nINSTALL_PHP_NOISE | Either `true` or `false`.\nports | The port where the service will be available at.\n\n## INSTALL and .lock files\n\nIf `INSTALL_`-variable is set to `false`, App-Collection will not install that app during boot. If set to `true`, App-Collection will install the corresponding app and place a `appname.lock` file in the `/config/www/` folder.\nIf at any point you wish to reinstall one of the apps, make sure the corresponding `appname.lock` file is deleted.\nIf at any point you wish to uninstall one of the apps:\n1. Stop the container with `docker stop app-collection`\n1. Set the `INSTALL_`-variable for the app you do not want to install to `false`\n1. Edit your apps.json and remove entries no longer available.\n    1. Optionally, if you didn't edit your apps.json, delete the folder you specified in `volumes:` so App-Collection will generate a fresh one.\n1. Run `docker-compose up -d app-collection`\n\n\n## User / Group Identifiers\n\nWhen using volumes, permissions issues can arise between the host OS and the container. [Linuxserver.io](https://www.linuxserver.io/) avoids this issue by allowing you to specify the user `PUID` and group `PGID`.\n\nEnsure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.\n\nIn this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:\n\n```\n  $ id username\n    uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)\n```\n\n# Building the image yourself\n\nUse the [Dockerfile](https://github.com/Griefed/docker-App-Collection/Dockerfile) to build the image yourself, in case you want to make any changes to it\n\ndocker-compose.yml\n\n```docker-compose.yml\nversion: '3.6'\nservices:\n  app-collection:\n    build: ./docker-App-Collection/\n    container_name: app-collection\n    restart: unless-stopped\n    environment:\n      - TZ=Europe/Berlin # Timezone\n      - PUID=1000 # User ID\n      - PROTOCOL=https # The protocol used to access this container. Either HTTP or HTTPS.\n      - PGID=1000 # Group ID\n      - INSTALL_TRIANGULATOR=true # Whether to install triangulator. Either true or false.\n      - INSTALL_TGEN=true # Whether to install tgen. Either true or false.\n      - INSTALL_NGINXCONFIG_IO=true # Whether to install NGINXConfig.io. Either true or false.\n      - INSTALL_DCC=true # Whether to install dcc. Either true or false.\n      - INSTALL_COMPOSERIZE=true # Whether to install composerize. Either true or false.\n      - INSTALL_ACTIVE_GITHUB_FORKS=true # Whether to install Active GitHub Forks. Either true or false.\n      - INSTALL_PHP_NOISE=true # Whether to install php-noise. Either true or false.\n      - DOMAIN=www.example.com # The address of the device this container is running on. Can be an IP or sub.domain.tld.\n    volumes:\n      - /host/path/to/config:/config # Contains all application data and base-image config files\n    ports:\n      - 443:443 # https\n      - 80:80 # http\n```\n\n1. Clone the repository: `git clone https://github.com/Griefed/docker-App-Collection.git ./docker-App-Collection`\n1. Prepare docker-compose.yml file as seen above\n1. `docker-compose up -d --build app-collection`\n1. Visit IP.ADDRESS.OF.HOST:8080\n1. ???\n1. Profit!\n\n# App Information\n\n## Active GitHub Forks\n\n* works after providing a **personal GitHub token**. It is used only to increase the limits to query to API. The token is stored in Local Storage only, not sent anywhere except for the GitHub API.\n* include the **original repository** in the list, marked in bold\n* after expanding **Options**, it is possible to increase the **maximum amount of forks** to retrieve and to utilize some kind of caching\n* retrieve **commits of each fork** and show the differences\n* click on box in the **Diff** column to see the commits\n\n**Optimizations**\n\nBecause this version retrieves commits from every fork which is slow and uses your quota (it resets every hour, don't worry), I added two options for caching results:\n* **Same size** - if a fork has the same size as a fork that has already been read, it is assumed to be the same and contain the same commits.\n* **Same Push Date** - same but looks at the Last Push date.\nIf both are selected, both conditions have to be satisfied at the same time.\nIf the condition is satisfied, commits for the second fork are not retrieved but assumed to be the same as in the first fork.\n\n## Composerize\n\n**IMPORTANT:** Composerize has ads built into it. These are implemented by the creator of Composerize and in no way affiliated with me, Griefed. Neither I nor you or anyone hosting Composerize will earn money from these placements, other than the creator of Composerize themselves.\nIf you want to get rid of the ads, you'll need to edit /config/www/composerize/static/js/runtime-main.c7d51d1a.js at around line 162.\nIf you want to get rid of Google Analytics, you will need to edit /config/www/composerize/index.html.\n\n## dcc Web\n\nI've changed the index.html and .css under [/gh-pages](https://github.com/Griefed/dcc-web/tree/gh-pages) in order for the website to be deployed with regular apache's, for example a httpd:alpine docker container. \n\n## NGINXConfig\n\nA lot of features with corresponding configuration directives.\nYou can deep dive into the [NGINX documentation](http://nginx.org/en/docs/) right now OR you can use this tool to check\nhow NGINX works, observe how your inputs are affecting the output, **generate the best config for your specific\nuse-case** (and in parallel you can still use the docs).\n\n## SUI Dashboard Status\n\n**Changing color themes**\n - Click the options button on the left bottom\n\n**Apps**\n\nAdd your apps by editing apps.json:\n\n    {\n\t    \"apps\" : [\n\t\t    {\"name\":\"Name of app 1\",\"hostname\":\"sub1.example.com\",\"port\":80,\"href\":\"https://sub1.example.com\" ,\"icon\":\"icon-name\"},\n\t\t    {\"name\":\"Name of app 2\",\"hostname\":\"sub2.example.com\"\"port\":8080,\"href\":\"https://sub1.example.com\" ,\"icon\":\"icon-name\"}\n\t    ]\n    }\n\nPlease note:\n\n - No `,` at the end of the last app's line\n - Find the names  of icons to use at [Material Design Icons](https://materialdesignicons.com/)\n\n**Bookmarks**\n\nAdd your bookmarks by editing links.json:\n\n```\n{  \n   \"bookmarks\":[  \n      {  \n         \"category\":\"Category1\",\n         \"links\":[  \n            {  \n               \"name\":\"Link1\",\n               \"url\":\"http://example.com\"\n            },\n            {  \n               \"name\":\"Link2\",\n               \"url\":\"http://example.com\"\n            }\n         ]\n      },\n      {  \n         \"category\":\"Category2\",\n         \"links\":[  \n            {  \n               \"name\":\"Link1\",\n               \"url\":\"http://example.com\"\n            },\n            {  \n               \"name\":\"Link2\",\n               \"url\":\"http://example.com\"\n            }\n         ]\n      }\n   ]\n}\n```\nAdd names for the categories you wish to define and add the bookmarks for each category.\n\nPlease note:\n\n - No `,` at the end of the last bookmark in a category and at the end of the last category\n\n\n**Color themes**\n\nThese can be added or customized in the themer.js file. When changing the name of a theme or adding one, make sure to edit this section in index.html accordingly:\n\n```\n    \u003csection  class=\"themes\"\u003e\n```\n\n## tgen\n\n**Quick usage and examples**\n\n```javascript\n    // initialize the generator\n    var generator = tgen.init(256, 256);\n\n\n    // --- texture 1 --------------------------------------------------------------\n\n    var canvas1 = generator\n            .do('waves')\n            .toCanvas();\n\n    // set img src, and width height\n    $('#img1').attr('src', canvas1.toDataURL(\"image/png\")).css({width: canvas1.width, height: canvas1.height});\n\n\n    // --- texture 2 --------------------------------------------------------------\n\n    var canvas2 = generator\n            .do('fill')\n            .do('waves', {blend: 'difference'})\n            .do('waves', {blend: 'difference'})\n            .do('contrast', {\"adjust\": 50})\n            .toCanvas();\n\n    // set img src, and width height\n    $('#img2').attr('src', canvas2.toDataURL(\"image/png\")).css({width: canvas2.width, height: canvas2.height});\n\n\n    // --- texture 3 --------------------------------------------------------------\n\n    var texture3 = generator\n            .clear() // remove previous layers\n            .do('fill')\n            .do('clouds', {blend: 'difference'})\n            .do('spheres', {blend: 'lineardodge', 'dynamic': true})\n            .do('vibrance', {\"adjust\": 50});\n\n    var canvas3 = texture3.toCanvas();\n\n    // set img src, and width height\n    $('#img3').attr('src', canvas3.toDataURL(\"image/png\")).css({width: canvas3.width, height: canvas3.height});\n\n\n    // --- texture 4 --------------------------------------------------------------\n\n    // get the generated params of texture3\n    var params = texture3.params();\n\n    // get number of layers\n    var layers = params.items.length;\n\n    // change the color of clouds\n    params.items[layers - 3][2].rgba = [255, 50, 10, 0.85];\n\n    // change the blending method\n    params.items[layers - 2][2].blend = 'overlay';\n\n    // generate new texture with modified params of texture3\n    var canvas4 = generator.render(params).toCanvas();\n\n    // set img src, and width height\n    $('#img4').attr('src', canvas4.toDataURL(\"image/png\")).css({width: canvas4.width, height: canvas4.height});\n\n\n    // --- texture 5 --------------------------------------------------------------\n\n    var params = {\n        \"width\":  256, // texture width in pixel\n        \"height\": 256, // texture height in pixel\n        \"debug\": true, // render info to console log, default value: false\n        \"items\":  [\n            [0, \"lines2\", { // layer number and effect name\n                \"blend\": \"opacity\", // layer blend mode\n                \"count\": 21, // square count\n                \"size\":  [5, 15], // random size between 5-15%\n                \"rgba\":  [\n                    255, // fixed red channel\n                    [128, 192], // random green channel between 128 and 192\n                    [200, 255], // random blue channel between 200 and 255\n                    [0.2, 0.6] // random opacity between 0.2 and 0.6\n                ]\n            }],\n            [1, \"spheres\", { // second layer\n                \"blend\":   \"lighten\",\n                \"origin\":  \"random\",\n                \"dynamic\": true, //\n                \"count\":   21,\n                \"size\":    [20, 100],\n                \"rgba\":    [200, 200, 200, 0.7]\n            }],\n            [2, \"copy\", 0], // copy layer 0 to layer 1\n            [2, \"merge\", { // merge layer 1 in to 2\n                \"layer\": 1,\n                \"blend\": \"lighten\"\n            }],\n            [2, \"brightness\", {\"adjust\": -10, \"legacy\": true}], // set brightness\n            [2, \"vibrance\", {\"adjust\": 50}], // set vibrance\n            [2, \"contrast\", {\"adjust\": 50}] // set contrast\n        ]\n    };\n\n    // generate\n    var canvas5 = generator.render(params).toCanvas();\n\n    // set img src, and width height\n    $('#img5').attr('src', canvas5.toDataURL(\"image/png\")).css({width: canvas5.width, height: canvas5.height});\n\n\n    // --- texture 6 --------------------------------------------------------------\n\n    // change layer of texture 5 merge blend method\n    params.items[3] = [2, \"merge\", {\n        \"layer\": 1,\n        \"blend\": \"difference\"\n    }];\n\n    // render and add new effects\n    var canvas6 = generator\n            .render(params)\n            .do('sharpen')\n            .do('noise')\n            .toCanvas();\n\n    // set img src, and width height\n    $('#img6').attr('src', canvas6.toDataURL(\"image/png\")).css({width: canvas6.width, height: canvas6.height});\n\n\n    // --- available effects -------------------------------------------------------\n\n    // dump all effects and default config parameters\n    for (key in tgen.defaults) {\n\n        var params = tgen.defaults[key];\n        var item = $('\u003cspan\u003e\u003ch2\u003e' + key + '\u003c/h2\u003e' + JSON.stringify(params) + '\u003c/span\u003e');\n        $('.defaults').append(item);\n\n    }\n```\n\n**Available other options**\n\n* map (cool effect)\n* merge (copy layer with blend)\n* copy (copy layer without blend)\n* history (store last x generated texture params in localStorage)\n\n**Available events**\n\n* beforeRender\n* afterRender\n* beforeEffect\n* afterEffect\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgriefed%2Fdocker-app-collection","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgriefed%2Fdocker-app-collection","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgriefed%2Fdocker-app-collection/lists"}