From c5dd265a0cdbb78bce7a228f1918ad5d925f8b03 Mon Sep 17 00:00:00 2001 From: <> Date: Fri, 2 Dec 2022 02:18:29 +0000 Subject: [PATCH] Deployed 61bb67c0 with MkDocs version: 1.4.2 --- 404.html | 2 +- FAQ/index.html | 4 ++-- ...d6c3db9e.min.js => bundle.5a2dcb6a.min.js} | 4 ++-- ....min.js.map => bundle.5a2dcb6a.min.js.map} | 2 +- .../javascripts/extra/bundle.5f09fbc3.min.js | 18 ++++++++++++++++++ .../extra/bundle.5f09fbc3.min.js.map | 8 ++++++++ assets/stylesheets/extra.0d2c79a8.min.css | 1 + assets/stylesheets/extra.0d2c79a8.min.css.map | 1 + assets/stylesheets/main.472b142f.min.css | 1 - assets/stylesheets/main.472b142f.min.css.map | 1 - assets/stylesheets/main.975780f9.min.css | 1 + assets/stylesheets/main.975780f9.min.css.map | 1 + assets/stylesheets/palette.08040f6c.min.css | 1 - .../stylesheets/palette.08040f6c.min.css.map | 1 - assets/stylesheets/palette.2505c338.min.css | 1 + .../stylesheets/palette.2505c338.min.css.map | 1 + general/awesome-lsio/index.html | 2 +- general/container-customization/index.html | 4 ++-- general/container-execution/index.html | 4 ++-- general/containers-101/index.html | 4 ++-- general/docker-compose/index.html | 4 ++-- general/fleet/index.html | 4 ++-- general/running-our-containers/index.html | 4 ++-- general/swag/index.html | 4 ++-- .../understanding-puid-and-pgid/index.html | 4 ++-- general/updating-our-containers/index.html | 4 ++-- general/volumes/index.html | 4 ++-- images/docker-adguardhome-sync/index.html | 4 ++-- images/docker-airsonic-advanced/index.html | 4 ++-- images/docker-airsonic/index.html | 4 ++-- images/docker-apprise-api/index.html | 4 ++-- images/docker-audacity/index.html | 4 ++-- images/docker-babybuddy/index.html | 4 ++-- images/docker-base-alpine-example/index.html | 2 +- images/docker-base-ubuntu-example/index.html | 2 +- .../docker-baseimage-alpine-nginx/index.html | 2 +- .../docker-baseimage-alpine-python/index.html | 2 +- images/docker-baseimage-alpine/index.html | 2 +- images/docker-baseimage-arch/index.html | 2 +- images/docker-baseimage-cloud9/index.html | 2 +- images/docker-baseimage-fedora/index.html | 2 +- images/docker-baseimage-guacgui/index.html | 4 ++-- images/docker-baseimage-gui/index.html | 4 ++-- images/docker-baseimage-mono/index.html | 2 +- .../docker-baseimage-rdesktop-web/index.html | 2 +- images/docker-baseimage-rdesktop/index.html | 2 +- images/docker-bazarr/index.html | 4 ++-- images/docker-beets/index.html | 4 ++-- images/docker-blender/index.html | 4 ++-- images/docker-boinc/index.html | 4 ++-- images/docker-booksonic-air/index.html | 4 ++-- images/docker-booksonic/index.html | 4 ++-- images/docker-bookstack/index.html | 4 ++-- images/docker-budge/index.html | 4 ++-- images/docker-calibre-web/index.html | 4 ++-- images/docker-calibre/index.html | 4 ++-- images/docker-cardigann/index.html | 4 ++-- images/docker-changedetection.io/index.html | 4 ++-- images/docker-chevereto/index.html | 4 ++-- images/docker-ci/index.html | 4 ++-- images/docker-clarkson/index.html | 4 ++-- images/docker-cloud9/index.html | 4 ++-- images/docker-code-server/index.html | 4 ++-- images/docker-codiad/index.html | 4 ++-- images/docker-codimd/index.html | 4 ++-- images/docker-cops/index.html | 4 ++-- images/docker-couchpotato/index.html | 4 ++-- images/docker-daapd/index.html | 4 ++-- images/docker-darktable/index.html | 4 ++-- images/docker-davos/index.html | 4 ++-- images/docker-ddclient/index.html | 4 ++-- images/docker-deluge/index.html | 4 ++-- images/docker-digikam/index.html | 4 ++-- images/docker-dillinger/index.html | 4 ++-- images/docker-diskover/index.html | 4 ++-- images/docker-doc-builder/index.html | 4 ++-- images/docker-docker-compose/index.html | 4 ++-- images/docker-dokuwiki/index.html | 4 ++-- images/docker-domoticz/index.html | 4 ++-- images/docker-doplarr/index.html | 4 ++-- images/docker-doublecommander/index.html | 4 ++-- images/docker-duckdns/index.html | 4 ++-- images/docker-duplicati/index.html | 4 ++-- images/docker-emby/index.html | 4 ++-- images/docker-embystat/index.html | 4 ++-- images/docker-emulatorjs/index.html | 4 ++-- images/docker-endlessh/index.html | 4 ++-- images/docker-fail2ban/index.html | 4 ++-- images/docker-feed2toot/index.html | 4 ++-- images/docker-ffmpeg/index.html | 4 ++-- images/docker-filezilla/index.html | 4 ++-- images/docker-firefox/index.html | 4 ++-- images/docker-fleet/index.html | 4 ++-- images/docker-foldingathome/index.html | 4 ++-- images/docker-freshrss/index.html | 4 ++-- images/docker-gazee/index.html | 4 ++-- images/docker-gmail-order-bot/index.html | 4 ++-- images/docker-grav/index.html | 4 ++-- images/docker-grocy/index.html | 4 ++-- images/docker-guacd/index.html | 4 ++-- images/docker-habridge/index.html | 4 ++-- images/docker-headphones/index.html | 4 ++-- images/docker-healthchecks/index.html | 4 ++-- images/docker-hedgedoc/index.html | 4 ++-- images/docker-heimdall/index.html | 4 ++-- images/docker-homeassistant/index.html | 4 ++-- images/docker-htpcmanager/index.html | 4 ++-- images/docker-hydra/index.html | 4 ++-- images/docker-hydra2/index.html | 4 ++-- images/docker-ipfs/index.html | 4 ++-- images/docker-jackett/index.html | 4 ++-- images/docker-jellyfin/index.html | 4 ++-- images/docker-jenkins-builder/index.html | 4 ++-- images/docker-kanzi/index.html | 4 ++-- images/docker-kasm/index.html | 4 ++-- images/docker-kdenlive/index.html | 4 ++-- images/docker-lazylibrarian/index.html | 4 ++-- images/docker-ldap-auth/index.html | 4 ++-- images/docker-letsencrypt/index.html | 4 ++-- images/docker-libreoffice/index.html | 4 ++-- images/docker-libresonic/index.html | 4 ++-- images/docker-librespeed/index.html | 4 ++-- images/docker-lidarr/index.html | 4 ++-- images/docker-limnoria/index.html | 4 ++-- images/docker-lychee/index.html | 4 ++-- images/docker-mariadb/index.html | 4 ++-- images/docker-mastodon/index.html | 4 ++-- images/docker-medusa/index.html | 4 ++-- images/docker-minetest/index.html | 4 ++-- images/docker-minisatip/index.html | 4 ++-- images/docker-mstream/index.html | 4 ++-- images/docker-musicbrainz/index.html | 4 ++-- images/docker-muximux/index.html | 4 ++-- images/docker-mylar/index.html | 4 ++-- images/docker-mylar3/index.html | 4 ++-- images/docker-mysql-workbench/index.html | 4 ++-- images/docker-nano-discord-bot/index.html | 4 ++-- images/docker-nano-wallet/index.html | 4 ++-- images/docker-nano/index.html | 4 ++-- images/docker-netbootxyz/index.html | 4 ++-- images/docker-netbox/index.html | 4 ++-- images/docker-nextcloud/index.html | 4 ++-- images/docker-nginx/index.html | 4 ++-- images/docker-ngircd/index.html | 4 ++-- images/docker-nntp2nntp/index.html | 4 ++-- images/docker-nzbget/index.html | 4 ++-- images/docker-nzbhydra2/index.html | 4 ++-- images/docker-ombi/index.html | 4 ++-- images/docker-openssh-server/index.html | 4 ++-- images/docker-openvpn-as/index.html | 4 ++-- images/docker-openvscode-server/index.html | 4 ++-- images/docker-organizr/index.html | 4 ++-- images/docker-oscam/index.html | 4 ++-- images/docker-overseerr/index.html | 4 ++-- images/docker-paperless-ng/index.html | 4 ++-- images/docker-paperless-ngx/index.html | 4 ++-- images/docker-papermerge/index.html | 4 ++-- images/docker-photoshow/index.html | 4 ++-- images/docker-phpmyadmin/index.html | 4 ++-- images/docker-pidgin/index.html | 4 ++-- images/docker-piwigo/index.html | 4 ++-- images/docker-pixapop/index.html | 4 ++-- images/docker-plex-meta-manager/index.html | 4 ++-- images/docker-plex/index.html | 4 ++-- images/docker-projectsend/index.html | 4 ++-- images/docker-prowlarr/index.html | 4 ++-- images/docker-pwndrop/index.html | 4 ++-- images/docker-pydio-cells/index.html | 4 ++-- images/docker-pydio/index.html | 4 ++-- images/docker-pyload-ng/index.html | 4 ++-- images/docker-pyload/index.html | 4 ++-- images/docker-pylon/index.html | 4 ++-- images/docker-qbittorrent/index.html | 4 ++-- images/docker-qdirstat/index.html | 4 ++-- images/docker-quassel-core/index.html | 4 ++-- images/docker-quassel-web/index.html | 4 ++-- images/docker-radarr/index.html | 4 ++-- images/docker-raneto/index.html | 4 ++-- images/docker-rdesktop/index.html | 4 ++-- images/docker-readarr/index.html | 4 ++-- images/docker-readme-sync/index.html | 4 ++-- images/docker-remmina/index.html | 4 ++-- images/docker-requestrr/index.html | 4 ++-- images/docker-resilio-sync/index.html | 4 ++-- images/docker-rsnapshot/index.html | 4 ++-- images/docker-rutorrent/index.html | 4 ++-- images/docker-sabnzbd/index.html | 4 ++-- images/docker-scrutiny/index.html | 4 ++-- images/docker-shout-irc/index.html | 4 ++-- images/docker-sickchill/index.html | 4 ++-- images/docker-sickgear/index.html | 4 ++-- images/docker-sickrage/index.html | 4 ++-- images/docker-smokeping/index.html | 4 ++-- images/docker-snapdrop/index.html | 4 ++-- images/docker-snipe-it/index.html | 4 ++-- images/docker-sonarr/index.html | 4 ++-- images/docker-sqlitebrowser/index.html | 4 ++-- images/docker-swag/index.html | 4 ++-- images/docker-synclounge/index.html | 4 ++-- images/docker-syncthing/index.html | 4 ++-- images/docker-syslog-ng/index.html | 4 ++-- images/docker-taisun/index.html | 4 ++-- images/docker-tautulli/index.html | 4 ++-- images/docker-tester/index.html | 4 ++-- images/docker-thelounge/index.html | 4 ++-- images/docker-transmission/index.html | 4 ++-- images/docker-tvheadend/index.html | 4 ++-- images/docker-ubooquity/index.html | 4 ++-- images/docker-unifi-controller/index.html | 4 ++-- images/docker-webgrabplus/index.html | 4 ++-- images/docker-webtop/index.html | 4 ++-- images/docker-wikijs/index.html | 4 ++-- images/docker-wireguard/index.html | 4 ++-- images/docker-wireshark/index.html | 4 ++-- images/docker-xbackbone/index.html | 4 ++-- images/docker-yq/index.html | 4 ++-- images/docker-znc/index.html | 4 ++-- images/index.html | 2 +- index.html | 2 +- misc/finances/index.html | 2 +- requirements.txt | 2 +- sitemap.xml.gz | Bin 1548 -> 1548 bytes 222 files changed, 432 insertions(+), 404 deletions(-) rename assets/javascripts/{bundle.d6c3db9e.min.js => bundle.5a2dcb6a.min.js} (74%) rename assets/javascripts/{bundle.d6c3db9e.min.js.map => bundle.5a2dcb6a.min.js.map} (99%) create mode 100644 assets/javascripts/extra/bundle.5f09fbc3.min.js create mode 100644 assets/javascripts/extra/bundle.5f09fbc3.min.js.map create mode 100644 assets/stylesheets/extra.0d2c79a8.min.css create mode 100644 assets/stylesheets/extra.0d2c79a8.min.css.map delete mode 100644 assets/stylesheets/main.472b142f.min.css delete mode 100644 assets/stylesheets/main.472b142f.min.css.map create mode 100644 assets/stylesheets/main.975780f9.min.css create mode 100644 assets/stylesheets/main.975780f9.min.css.map delete mode 100644 assets/stylesheets/palette.08040f6c.min.css delete mode 100644 assets/stylesheets/palette.08040f6c.min.css.map create mode 100644 assets/stylesheets/palette.2505c338.min.css create mode 100644 assets/stylesheets/palette.2505c338.min.css.map diff --git a/404.html b/404.html index 377d35bcf6..5d2a111be6 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ - LinuxServer.io

404 - Not found

\ No newline at end of file + LinuxServer.io

404 - Not found

\ No newline at end of file diff --git a/FAQ/index.html b/FAQ/index.html index 1b72b97d7d..477d639b68 100644 --- a/FAQ/index.html +++ b/FAQ/index.html @@ -1,4 +1,4 @@ - FAQ - LinuxServer.io
Skip to content

FAQ

Here will some Frequently Asked Questions reside

My host is incompatible with images based on Ubuntu Jammy {#jammy}

Some x86_64 hosts running older versions of the Docker engine are not compatible with some images based on Ubuntu Jammy.

Symptoms

If your host is affected you may see errors in your containers such as:

ERROR - Unable to determine java version; make sure Java is installed and callable
+ FAQ - LinuxServer.io       

FAQ

Here will some Frequently Asked Questions reside

My host is incompatible with images based on Ubuntu Jammy {#jammy}

Some x86_64 hosts running older versions of the Docker engine are not compatible with some images based on Ubuntu Jammy.

Symptoms

If your host is affected you may see errors in your containers such as:

ERROR - Unable to determine java version; make sure Java is installed and callable
 

Or

Failed to create CoreCLR, HRESULT: 0x80070008
 

Or

WARNING :: MAIN : webStart.py:initialize:249 : can't start new thread
 

Resolution

Option 1 (Long-Term Fix)

Upgrade your Docker engine install to at least version 20.10.10. Refer to the official Docker docs for installation/update details.

Option 2 (Short-Term Fix)

For Docker CLI, run your container with:

--security-opt seccomp=unconfined

For Docker Compose, run your container with:

    security_opt:
@@ -18,4 +18,4 @@ sudo apt install -t buster-backports libseccomp2
             insecureSkipVerify: true
 

Then on our foo service we tell it to use this rule, as well as telling Traefik the backend is running on https.

    - traefik.http.services.foo.loadbalancer.serverstransport=ignorecert
     - traefik.http.services.foo.loadbalancer.server.scheme=https
-
\ No newline at end of file +
\ No newline at end of file diff --git a/assets/javascripts/bundle.d6c3db9e.min.js b/assets/javascripts/bundle.5a2dcb6a.min.js similarity index 74% rename from assets/javascripts/bundle.d6c3db9e.min.js rename to assets/javascripts/bundle.5a2dcb6a.min.js index a2ce00edbf..6f9720b673 100644 --- a/assets/javascripts/bundle.d6c3db9e.min.js +++ b/assets/javascripts/bundle.5a2dcb6a.min.js @@ -24,6 +24,6 @@ PERFORMANCE OF THIS SOFTWARE. * MIT Licensed */var Ms=/["'&<>]/;Si.exports=Ls;function Ls(e){var t=""+e,r=Ms.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Tr:(this.currentObservers=null,a.push(r),new $e(function(){n.currentObservers=null,Ue(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new Qn(r,n)},t}(F);var Qn=function(e){ne(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Tr},t}(E);var wt={now:function(){return(wt.delegate||Date).now()},delegate:void 0};var Et=function(e){ne(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=wt);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,c=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=at.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(at.cancelAnimationFrame(n),r._scheduled=void 0)},t}(zt);var Gn=function(e){ne(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Nt);var xe=new Gn(Bn);var R=new F(function(e){return e.complete()});function qt(e){return e&&L(e.schedule)}function Hr(e){return e[e.length-1]}function Ve(e){return L(Hr(e))?e.pop():void 0}function Ee(e){return qt(Hr(e))?e.pop():void 0}function Kt(e,t){return typeof Hr(e)=="number"?e.pop():t}var st=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Qt(e){return L(e==null?void 0:e.then)}function Yt(e){return L(e[it])}function Bt(e){return Symbol.asyncIterator&&L(e==null?void 0:e[Symbol.asyncIterator])}function Gt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function ya(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Jt=ya();function Xt(e){return L(e==null?void 0:e[Jt])}function Zt(e){return jn(this,arguments,function(){var r,n,o,i;return It(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,jt(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,jt(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,jt(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function er(e){return L(e==null?void 0:e.getReader)}function z(e){if(e instanceof F)return e;if(e!=null){if(Yt(e))return xa(e);if(st(e))return wa(e);if(Qt(e))return Ea(e);if(Bt(e))return Jn(e);if(Xt(e))return Sa(e);if(er(e))return Oa(e)}throw Gt(e)}function xa(e){return new F(function(t){var r=e[it]();if(L(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function wa(e){return new F(function(t){for(var r=0;r=2,!0))}function ie(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new E}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(f){var u,p,l,d=0,h=!1,b=!1,U=function(){p==null||p.unsubscribe(),p=void 0},G=function(){U(),u=l=void 0,h=b=!1},W=function(){var _=u;G(),_==null||_.unsubscribe()};return g(function(_,We){d++,!b&&!h&&U();var Fe=l=l!=null?l:r();We.add(function(){d--,d===0&&!b&&!h&&(p=Dr(W,c))}),Fe.subscribe(We),!u&&d>0&&(u=new Ge({next:function(Pe){return Fe.next(Pe)},error:function(Pe){b=!0,U(),p=Dr(G,o,Pe),Fe.error(Pe)},complete:function(){h=!0,U(),p=Dr(G,s),Fe.complete()}}),z(_).subscribe(u))})(f)}}function Dr(e,t){for(var r=[],n=2;ne.next(document)),e}function Q(e,t=document){return Array.from(t.querySelectorAll(e))}function K(e,t=document){let r=pe(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function pe(e,t=document){return t.querySelector(e)||void 0}function Ie(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function nr(e){return A(v(document.body,"focusin"),v(document.body,"focusout")).pipe(Re(1),m(()=>{let t=Ie();return typeof t!="undefined"?e.contains(t):!1}),N(e===Ie()),B())}function qe(e){return{x:e.offsetLeft,y:e.offsetTop}}function yo(e){return A(v(window,"load"),v(window,"resize")).pipe(Ae(0,xe),m(()=>qe(e)),N(qe(e)))}function or(e){return{x:e.scrollLeft,y:e.scrollTop}}function pt(e){return A(v(e,"scroll"),v(window,"resize")).pipe(Ae(0,xe),m(()=>or(e)),N(or(e)))}var wo=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!qr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Ka?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!qr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=qa.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Eo=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Oo=typeof WeakMap!="undefined"?new WeakMap:new wo,_o=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Qa.getInstance(),n=new ns(t,r,this);Oo.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){_o.prototype[e]=function(){var t;return(t=Oo.get(this))[e].apply(t,arguments)}});var os=function(){return typeof ir.ResizeObserver!="undefined"?ir.ResizeObserver:_o}(),To=os;var Mo=new E,is=P(()=>I(new To(e=>{for(let t of e)Mo.next(t)}))).pipe(S(e=>A(Se,I(e)).pipe(C(()=>e.disconnect()))),X(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ve(e){return is.pipe(w(t=>t.observe(e)),S(t=>Mo.pipe(x(({target:r})=>r===e),C(()=>t.unobserve(e)),m(()=>he(e)))),N(he(e)))}function mt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function cr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var Lo=new E,as=P(()=>I(new IntersectionObserver(e=>{for(let t of e)Lo.next(t)},{threshold:0}))).pipe(S(e=>A(Se,I(e)).pipe(C(()=>e.disconnect()))),X(1));function fr(e){return as.pipe(w(t=>t.observe(e)),S(t=>Lo.pipe(x(({target:r})=>r===e),C(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function Ao(e,t=16){return pt(e).pipe(m(({y:r})=>{let n=he(e),o=mt(e);return r>=o.height-n.height-t}),B())}var ur={drawer:K("[data-md-toggle=drawer]"),search:K("[data-md-toggle=search]")};function Co(e){return ur[e].checked}function Ke(e,t){ur[e].checked!==t&&ur[e].click()}function dt(e){let t=ur[e];return v(t,"change").pipe(m(()=>t.checked),N(t.checked))}function ss(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ro(){return v(window,"keydown").pipe(x(e=>!(e.metaKey||e.ctrlKey)),m(e=>({mode:Co("search")?"search":"global",type:e.key,claim(){e.preventDefault(),e.stopPropagation()}})),x(({mode:e,type:t})=>{if(e==="global"){let r=Ie();if(typeof r!="undefined")return!ss(r,t)}return!0}),ie())}function Oe(){return new URL(location.href)}function pr(e){location.href=e.href}function ko(){return new E}function Ho(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Ho(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)Ho(n,o);return n}function Po(e,t){let r=t;if(e.length>r){for(;e[r]!==" "&&--r>0;);return`${e.substring(0,r)}...`}return e}function lr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function $o(){return location.hash.substring(1)}function Io(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function cs(){return v(window,"hashchange").pipe(m($o),N($o()),x(e=>e.length>0),X(1))}function jo(){return cs().pipe(m(e=>pe(`[id="${e}"]`)),x(e=>typeof e!="undefined"))}function Kr(e){let t=matchMedia(e);return rr(r=>t.addListener(()=>r(t.matches))).pipe(N(t.matches))}function Fo(){let e=matchMedia("print");return A(v(window,"beforeprint").pipe(m(()=>!0)),v(window,"afterprint").pipe(m(()=>!1))).pipe(N(e.matches))}function Qr(e,t){return e.pipe(S(r=>r?t():R))}function mr(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(ce(()=>R),S(r=>r.status!==200?Ot(()=>new Error(r.statusText)):I(r)))}function je(e,t){return mr(e,t).pipe(S(r=>r.json()),X(1))}function Uo(e,t){let r=new DOMParser;return mr(e,t).pipe(S(n=>n.text()),m(n=>r.parseFromString(n,"text/xml")),X(1))}function Do(e){let t=M("script",{src:e});return P(()=>(document.head.appendChild(t),A(v(t,"load"),v(t,"error").pipe(S(()=>Ot(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),C(()=>document.head.removeChild(t)),oe(1))))}function Wo(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function Vo(){return A(v(window,"scroll",{passive:!0}),v(window,"resize",{passive:!0})).pipe(m(Wo),N(Wo()))}function zo(){return{width:innerWidth,height:innerHeight}}function No(){return v(window,"resize",{passive:!0}).pipe(m(zo),N(zo()))}function qo(){return Y([Vo(),No()]).pipe(m(([e,t])=>({offset:e,size:t})),X(1))}function dr(e,{viewport$:t,header$:r}){let n=t.pipe(J("size")),o=Y([n,r]).pipe(m(()=>qe(e)));return Y([r,t,o]).pipe(m(([{height:i},{offset:s,size:a},{x:c,y:f}])=>({offset:{x:s.x-c,y:s.y-f+i},size:a})))}function Ko(e,{tx$:t}){let r=v(e,"message").pipe(m(({data:n})=>n));return t.pipe(Lt(()=>r,{leading:!0,trailing:!0}),w(n=>e.postMessage(n)),S(()=>r),ie())}var fs=K("#__config"),ht=JSON.parse(fs.textContent);ht.base=`${new URL(ht.base,Oe())}`;function le(){return ht}function Z(e){return ht.features.includes(e)}function re(e,t){return typeof t!="undefined"?ht.translations[e].replace("#",t.toString()):ht.translations[e]}function _e(e,t=document){return K(`[data-md-component=${e}]`,t)}function te(e,t=document){return Q(`[data-md-component=${e}]`,t)}function us(e){let t=K(".md-typeset > :first-child",e);return v(t,"click",{once:!0}).pipe(m(()=>K(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function Qo(e){return!Z("announce.dismiss")||!e.childElementCount?R:P(()=>{let t=new E;return t.pipe(N({hash:__md_get("__announce")})).subscribe(({hash:r})=>{var n;r&&r===((n=__md_get("__announce"))!=null?n:r)&&(e.hidden=!0,__md_set("__announce",r))}),us(e).pipe(w(r=>t.next(r)),C(()=>t.complete()),m(r=>H({ref:e},r)))})}function ps(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function Yo(e,t){let r=new E;return r.subscribe(({hidden:n})=>{e.hidden=n}),ps(e,t).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))}var ii=Ye(Br());function Gr(e){return M("div",{class:"md-tooltip",id:e},M("div",{class:"md-tooltip__inner md-typeset"}))}function Bo(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return M("aside",{class:"md-annotation",tabIndex:0},Gr(t),M("a",{href:r,class:"md-annotation__index",tabIndex:-1},M("span",{"data-md-annotation-id":e})))}else return M("aside",{class:"md-annotation",tabIndex:0},Gr(t),M("span",{class:"md-annotation__index",tabIndex:-1},M("span",{"data-md-annotation-id":e})))}function Go(e){return M("button",{class:"md-clipboard md-icon",title:re("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}function Jr(e,t){let r=t&2,n=t&1,o=Object.keys(e.terms).filter(a=>!e.terms[a]).reduce((a,c)=>[...a,M("del",null,c)," "],[]).slice(0,-1),i=new URL(e.location);Z("search.highlight")&&i.searchParams.set("h",Object.entries(e.terms).filter(([,a])=>a).reduce((a,[c])=>`${a} ${c}`.trim(),""));let{tags:s}=le();return M("a",{href:`${i}`,class:"md-search-result__link",tabIndex:-1},M("article",{class:["md-search-result__article",...r?["md-search-result__article--document"]:[]].join(" "),"data-md-score":e.score.toFixed(2)},r>0&&M("div",{class:"md-search-result__icon md-icon"}),M("h1",{class:"md-search-result__title"},e.title),n>0&&e.text.length>0&&M("p",{class:"md-search-result__teaser"},Po(e.text,320)),e.tags&&M("div",{class:"md-typeset"},e.tags.map(a=>{let c=a.replace(/<[^>]+>/g,""),f=s?c in s?`md-tag-icon md-tag-icon--${s[c]}`:"md-tag-icon":"";return M("span",{class:`md-tag ${f}`},a)})),n>0&&o.length>0&&M("p",{class:"md-search-result__terms"},re("search.result.term.missing"),": ",...o)))}function Jo(e){let t=e[0].score,r=[...e],n=r.findIndex(f=>!f.location.includes("#")),[o]=r.splice(n,1),i=r.findIndex(f=>f.scoreJr(f,1)),...a.length?[M("details",{class:"md-search-result__more"},M("summary",{tabIndex:-1},a.length>0&&a.length===1?re("search.result.more.one"):re("search.result.more.other",a.length)),...a.map(f=>Jr(f,1)))]:[]];return M("li",{class:"md-search-result__item"},c)}function Xo(e){return M("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>M("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?lr(r):r)))}function Xr(e){let t=`tabbed-control tabbed-control--${e}`;return M("div",{class:t,hidden:!0},M("button",{class:"tabbed-button",tabIndex:-1}))}function Zo(e){return M("div",{class:"md-typeset__scrollwrap"},M("div",{class:"md-typeset__table"},e))}function ls(e){let t=le(),r=new URL(`../${e.version}/`,t.base);return M("li",{class:"md-version__item"},M("a",{href:`${r}`,class:"md-version__link"},e.title))}function ei(e,t){return M("div",{class:"md-version"},M("button",{class:"md-version__current","aria-label":re("select.version.title")},t.title),M("ul",{class:"md-version__list"},e.map(ls)))}function ms(e,t){let r=P(()=>Y([yo(e),pt(t)])).pipe(m(([{x:n,y:o},i])=>{let{width:s,height:a}=he(e);return{x:n-i.x+s/2,y:o-i.y+a/2}}));return nr(e).pipe(S(n=>r.pipe(m(o=>({active:n,offset:o})),oe(+!n||1/0))))}function ti(e,t,{target$:r}){let[n,o]=Array.from(e.children);return P(()=>{let i=new E,s=i.pipe(de(1));return i.subscribe({next({offset:a}){e.style.setProperty("--md-tooltip-x",`${a.x}px`),e.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),fr(e).pipe(ee(s)).subscribe(a=>{e.toggleAttribute("data-md-visible",a)}),A(i.pipe(x(({active:a})=>a)),i.pipe(Re(250),x(({active:a})=>!a))).subscribe({next({active:a}){a?e.prepend(n):n.remove()},complete(){e.prepend(n)}}),i.pipe(Ae(16,xe)).subscribe(({active:a})=>{n.classList.toggle("md-tooltip--active",a)}),i.pipe(zr(125,xe),x(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?e.style.setProperty("--md-tooltip-0",`${-a}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),v(o,"click").pipe(ee(s),x(a=>!(a.metaKey||a.ctrlKey))).subscribe(a=>a.preventDefault()),v(o,"mousedown").pipe(ee(s),ae(i)).subscribe(([a,{active:c}])=>{var f;if(a.button!==0||a.metaKey||a.ctrlKey)a.preventDefault();else if(c){a.preventDefault();let u=e.parentElement.closest(".md-annotation");u instanceof HTMLElement?u.focus():(f=Ie())==null||f.blur()}}),r.pipe(ee(s),x(a=>a===n),ke(125)).subscribe(()=>e.focus()),ms(e,t).pipe(w(a=>i.next(a)),C(()=>i.complete()),m(a=>H({ref:e},a)))})}function ds(e){let t=[];for(let r of Q(".c, .c1, .cm",e)){let n=[],o=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=o.nextNode();i;i=o.nextNode())n.push(i);for(let i of n){let s;for(;s=/(\(\d+\))(!)?/.exec(i.textContent);){let[,a,c]=s;if(typeof c=="undefined"){let f=i.splitText(s.index);i=f.splitText(a.length),t.push(f)}else{i.textContent=a,t.push(i);break}}}}return t}function ri(e,t){t.append(...Array.from(e.childNodes))}function ni(e,t,{target$:r,print$:n}){let o=t.closest("[id]"),i=o==null?void 0:o.id,s=new Map;for(let a of ds(t)){let[,c]=a.textContent.match(/\((\d+)\)/);pe(`li:nth-child(${c})`,e)&&(s.set(c,Bo(c,i)),a.replaceWith(s.get(c)))}return s.size===0?R:P(()=>{let a=new E,c=[];for(let[f,u]of s)c.push([K(".md-typeset",u),K(`li:nth-child(${f})`,e)]);return n.pipe(ee(a.pipe(de(1)))).subscribe(f=>{e.hidden=!f;for(let[u,p]of c)f?ri(u,p):ri(p,u)}),A(...[...s].map(([,f])=>ti(f,t,{target$:r}))).pipe(C(()=>a.complete()),ie())})}var hs=0;function ai(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return ai(t)}}function oi(e){return ve(e).pipe(m(({width:t})=>({scrollable:mt(e).width>t})),J("scrollable"))}function si(e,t){let{matches:r}=matchMedia("(hover)"),n=P(()=>{let o=new E;if(o.subscribe(({scrollable:s})=>{s&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")}),ii.default.isSupported()){let s=e.closest("pre");s.id=`__code_${++hs}`,s.insertBefore(Go(s.id),e)}let i=e.closest(".highlight");if(i instanceof HTMLElement){let s=ai(i);if(typeof s!="undefined"&&(i.classList.contains("annotate")||Z("content.code.annotate"))){let a=ni(s,e,t);return oi(e).pipe(w(c=>o.next(c)),C(()=>o.complete()),m(c=>H({ref:e},c)),et(ve(i).pipe(m(({width:c,height:f})=>c&&f),B(),S(c=>c?a:R))))}}return oi(e).pipe(w(s=>o.next(s)),C(()=>o.complete()),m(s=>H({ref:e},s)))});return Z("content.lazy")?fr(e).pipe(x(o=>o),oe(1),S(()=>n)):n}var ci=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:transparent}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel rect,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel rect{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color)}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}defs #flowchart-circleEnd,defs #flowchart-circleStart,defs #flowchart-crossEnd,defs #flowchart-crossStart,defs #flowchart-pointEnd,defs #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}.actor,defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{stroke:var(--md-mermaid-node-fg-color)}text.actor>tspan{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-default-fg-color--lighter)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-edge-color)}.loopText>tspan,.messageText,.noteText>tspan{fill:var(--md-mermaid-edge-color);stroke:none;font-family:var(--md-mermaid-font-family)!important}.noteText>tspan{fill:#000}#arrowhead path{fill:var(--md-mermaid-edge-color);stroke:none}.loopLine{stroke:var(--md-mermaid-node-fg-color)}.labelBox,.loopLine{fill:var(--md-mermaid-node-bg-color)}.labelBox{stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-node-fg-color);font-family:var(--md-mermaid-font-family)}";var Zr,vs=0;function gs(){return typeof mermaid=="undefined"||mermaid instanceof Element?Do("https://unpkg.com/mermaid@9.1.7/dist/mermaid.min.js"):I(void 0)}function fi(e){return e.classList.remove("mermaid"),Zr||(Zr=gs().pipe(w(()=>mermaid.initialize({startOnLoad:!1,themeCSS:ci,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),X(1))),Zr.subscribe(()=>{e.classList.add("mermaid");let t=`__mermaid_${vs++}`,r=M("div",{class:"mermaid"});mermaid.mermaidAPI.render(t,e.textContent,n=>{let o=r.attachShadow({mode:"closed"});o.innerHTML=n,e.replaceWith(r)})}),Zr.pipe(m(()=>({ref:e})))}function ys(e,{target$:t,print$:r}){let n=!0;return A(t.pipe(m(o=>o.closest("details:not([open])")),x(o=>e===o),m(()=>({action:"open",reveal:!0}))),r.pipe(x(o=>o||!n),w(()=>n=e.open),m(o=>({action:o?"open":"close"}))))}function ui(e,t){return P(()=>{let r=new E;return r.subscribe(({action:n,reveal:o})=>{e.toggleAttribute("open",n==="open"),o&&e.scrollIntoView()}),ys(e,t).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))})}var pi=M("table");function li(e){return e.replaceWith(pi),pi.replaceWith(Zo(e)),I({ref:e})}function xs(e){let t=Q(":scope > input",e),r=t.find(n=>n.checked)||t[0];return A(...t.map(n=>v(n,"change").pipe(m(()=>K(`label[for="${n.id}"]`))))).pipe(N(K(`label[for="${r.id}"]`)),m(n=>({active:n})))}function mi(e,{viewport$:t}){let r=Xr("prev");e.append(r);let n=Xr("next");e.append(n);let o=K(".tabbed-labels",e);return P(()=>{let i=new E,s=i.pipe(de(1));return Y([i,ve(e)]).pipe(Ae(1,xe),ee(s)).subscribe({next([{active:a},c]){let f=qe(a),{width:u}=he(a);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let p=or(o);(f.xp.x+c.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),Y([pt(o),ve(o)]).pipe(ee(s)).subscribe(([a,c])=>{let f=mt(o);r.hidden=a.x<16,n.hidden=a.x>f.width-c.width-16}),A(v(r,"click").pipe(m(()=>-1)),v(n,"click").pipe(m(()=>1))).pipe(ee(s)).subscribe(a=>{let{width:c}=he(o);o.scrollBy({left:c*a,behavior:"smooth"})}),Z("content.tabs.link")&&i.pipe(He(1),ae(t)).subscribe(([{active:a},{offset:c}])=>{let f=a.innerText.trim();if(a.hasAttribute("data-md-switching"))a.removeAttribute("data-md-switching");else{let u=e.offsetTop-c.y;for(let l of Q("[data-tabs]"))for(let d of Q(":scope > input",l)){let h=K(`label[for="${d.id}"]`);if(h!==a&&h.innerText.trim()===f){h.setAttribute("data-md-switching",""),d.click();break}}window.scrollTo({top:e.offsetTop-u});let p=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...p])])}}),xs(e).pipe(w(a=>i.next(a)),C(()=>i.complete()),m(a=>H({ref:e},a)))}).pipe(Je(fe))}function di(e,{viewport$:t,target$:r,print$:n}){return A(...Q("pre:not(.mermaid) > code",e).map(o=>si(o,{target$:r,print$:n})),...Q("pre.mermaid",e).map(o=>fi(o)),...Q("table:not([class])",e).map(o=>li(o)),...Q("details",e).map(o=>ui(o,{target$:r,print$:n})),...Q("[data-tabs]",e).map(o=>mi(o,{viewport$:t})))}function ws(e,{alert$:t}){return t.pipe(S(r=>A(I(!0),I(!1).pipe(ke(2e3))).pipe(m(n=>({message:r,active:n})))))}function hi(e,t){let r=K(".md-typeset",e);return P(()=>{let n=new E;return n.subscribe(({message:o,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=o}),ws(e,t).pipe(w(o=>n.next(o)),C(()=>n.complete()),m(o=>H({ref:e},o)))})}function Es({viewport$:e}){if(!Z("header.autohide"))return I(!1);let t=e.pipe(m(({offset:{y:o}})=>o),Ce(2,1),m(([o,i])=>[oMath.abs(i-o.y)>100),m(([,[o]])=>o),B()),n=dt("search");return Y([e,n]).pipe(m(([{offset:o},i])=>o.y>400&&!i),B(),S(o=>o?r:I(!1)),N(!1))}function bi(e,t){return P(()=>Y([ve(e),Es(t)])).pipe(m(([{height:r},n])=>({height:r,hidden:n})),B((r,n)=>r.height===n.height&&r.hidden===n.hidden),X(1))}function vi(e,{header$:t,main$:r}){return P(()=>{let n=new E,o=n.pipe(de(1));return n.pipe(J("active"),Ze(t)).subscribe(([{active:i},{hidden:s}])=>{e.classList.toggle("md-header--shadow",i&&!s),e.hidden=s}),r.subscribe(n),t.pipe(ee(o),m(i=>H({ref:e},i)))})}function Ss(e,{viewport$:t,header$:r}){return dr(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:n}})=>{let{height:o}=he(e);return{active:n>=o}}),J("active"))}function gi(e,t){return P(()=>{let r=new E;r.subscribe(({active:o})=>{e.classList.toggle("md-header__title--active",o)});let n=pe("article h1");return typeof n=="undefined"?R:Ss(n,t).pipe(w(o=>r.next(o)),C(()=>r.complete()),m(o=>H({ref:e},o)))})}function yi(e,{viewport$:t,header$:r}){let n=r.pipe(m(({height:i})=>i),B()),o=n.pipe(S(()=>ve(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),J("bottom"))));return Y([n,o,t]).pipe(m(([i,{top:s,bottom:a},{offset:{y:c},size:{height:f}}])=>(f=Math.max(0,f-Math.max(0,s-c,i)-Math.max(0,f+c-a)),{offset:s-i,height:f,active:s-i<=c})),B((i,s)=>i.offset===s.offset&&i.height===s.height&&i.active===s.active))}function Os(e){let t=__md_get("__palette")||{index:e.findIndex(r=>matchMedia(r.getAttribute("data-md-color-media")).matches)};return I(...e).pipe(se(r=>v(r,"change").pipe(m(()=>r))),N(e[Math.max(0,t.index)]),m(r=>({index:e.indexOf(r),color:{scheme:r.getAttribute("data-md-color-scheme"),primary:r.getAttribute("data-md-color-primary"),accent:r.getAttribute("data-md-color-accent")}})),X(1))}function xi(e){return P(()=>{let t=new E;t.subscribe(n=>{document.body.setAttribute("data-md-color-switching","");for(let[o,i]of Object.entries(n.color))document.body.setAttribute(`data-md-color-${o}`,i);for(let o=0;o{document.body.removeAttribute("data-md-color-switching")});let r=Q("input",e);return Os(r).pipe(w(n=>t.next(n)),C(()=>t.complete()),m(n=>H({ref:e},n)))})}var en=Ye(Br());function _s(e){e.setAttribute("data-md-copying","");let t=e.innerText;return e.removeAttribute("data-md-copying"),t}function wi({alert$:e}){en.default.isSupported()&&new F(t=>{new en.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||_s(K(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(w(t=>{t.trigger.focus()}),m(()=>re("clipboard.copied"))).subscribe(e)}function Ts(e){if(e.length<2)return[""];let[t,r]=[...e].sort((o,i)=>o.length-i.length).map(o=>o.replace(/[^/]+$/,"")),n=0;if(t===r)n=t.length;else for(;t.charCodeAt(n)===r.charCodeAt(n);)n++;return e.map(o=>o.replace(t.slice(0,n),""))}function hr(e){let t=__md_get("__sitemap",sessionStorage,e);if(t)return I(t);{let r=le();return Uo(new URL("sitemap.xml",e||r.base)).pipe(m(n=>Ts(Q("loc",n).map(o=>o.textContent))),ce(()=>R),De([]),w(n=>__md_set("__sitemap",n,sessionStorage,e)))}}function Ei({document$:e,location$:t,viewport$:r}){let n=le();if(location.protocol==="file:")return;"scrollRestoration"in history&&(history.scrollRestoration="manual",v(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}));let o=pe("link[rel=icon]");typeof o!="undefined"&&(o.href=o.href);let i=hr().pipe(m(f=>f.map(u=>`${new URL(u,n.base)}`)),S(f=>v(document.body,"click").pipe(x(u=>!u.metaKey&&!u.ctrlKey),S(u=>{if(u.target instanceof Element){let p=u.target.closest("a");if(p&&!p.target){let l=new URL(p.href);if(l.search="",l.hash="",l.pathname!==location.pathname&&f.includes(l.toString()))return u.preventDefault(),I({url:new URL(p.href)})}}return Se}))),ie()),s=v(window,"popstate").pipe(x(f=>f.state!==null),m(f=>({url:new URL(location.href),offset:f.state})),ie());A(i,s).pipe(B((f,u)=>f.url.href===u.url.href),m(({url:f})=>f)).subscribe(t);let a=t.pipe(J("pathname"),S(f=>mr(f.href).pipe(ce(()=>(pr(f),Se)))),ie());i.pipe(ut(a)).subscribe(({url:f})=>{history.pushState({},"",`${f}`)});let c=new DOMParser;a.pipe(S(f=>f.text()),m(f=>c.parseFromString(f,"text/html"))).subscribe(e),e.pipe(He(1)).subscribe(f=>{for(let u of["title","link[rel=canonical]","meta[name=author]","meta[name=description]","[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...Z("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let p=pe(u),l=pe(u,f);typeof p!="undefined"&&typeof l!="undefined"&&p.replaceWith(l)}}),e.pipe(He(1),m(()=>_e("container")),S(f=>Q("script",f)),Ir(f=>{let u=M("script");if(f.src){for(let p of f.getAttributeNames())u.setAttribute(p,f.getAttribute(p));return f.replaceWith(u),new F(p=>{u.onload=()=>p.complete()})}else return u.textContent=f.textContent,f.replaceWith(u),R})).subscribe(),A(i,s).pipe(ut(e)).subscribe(({url:f,offset:u})=>{f.hash&&!u?Io(f.hash):window.scrollTo(0,(u==null?void 0:u.y)||0)}),r.pipe(Mt(i),Re(250),J("offset")).subscribe(({offset:f})=>{history.replaceState(f,"")}),A(i,s).pipe(Ce(2,1),x(([f,u])=>f.url.pathname===u.url.pathname),m(([,f])=>f)).subscribe(({offset:f})=>{window.scrollTo(0,(f==null?void 0:f.y)||0)})}var As=Ye(tn());var Oi=Ye(tn());function rn(e,t){let r=new RegExp(e.separator,"img"),n=(o,i,s)=>`${i}${s}`;return o=>{o=o.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator})(${o.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return s=>(t?(0,Oi.default)(s):s).replace(i,n).replace(/<\/mark>(\s+)]*>/img,"$1")}}function _i(e){return e.split(/"([^"]+)"/g).map((t,r)=>r&1?t.replace(/^\b|^(?![^\x00-\x7F]|$)|\s+/g," +"):t).join("").replace(/"|(?:^|\s+)[*+\-:^~]+(?=\s+|$)/g,"").trim()}function bt(e){return e.type===1}function Ti(e){return e.type===2}function vt(e){return e.type===3}function Rs({config:e,docs:t}){e.lang.length===1&&e.lang[0]==="en"&&(e.lang=[re("search.config.lang")]),e.separator==="[\\s\\-]+"&&(e.separator=re("search.config.separator"));let n={pipeline:re("search.config.pipeline").split(/\s*,\s*/).filter(Boolean),suggestions:Z("search.suggest")};return{config:e,docs:t,options:n}}function Mi(e,t){let r=le(),n=new Worker(e),o=new E,i=Ko(n,{tx$:o}).pipe(m(s=>{if(vt(s))for(let a of s.data.items)for(let c of a)c.location=`${new URL(c.location,r.base)}`;return s}),ie());return ue(t).pipe(m(s=>({type:0,data:Rs(s)}))).subscribe(o.next.bind(o)),{tx$:o,rx$:i}}function Li({document$:e}){let t=le(),r=je(new URL("../versions.json",t.base)).pipe(ce(()=>R)),n=r.pipe(m(o=>{let[,i]=t.base.match(/([^/]+)\/?$/);return o.find(({version:s,aliases:a})=>s===i||a.includes(i))||o[0]}));r.pipe(m(o=>new Map(o.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),S(o=>v(document.body,"click").pipe(x(i=>!i.metaKey&&!i.ctrlKey),ae(n),S(([i,s])=>{if(i.target instanceof Element){let a=i.target.closest("a");if(a&&!a.target&&o.has(a.href)){let c=a.href;return!i.target.closest(".md-version")&&o.get(c)===s?R:(i.preventDefault(),I(c))}}return R}),S(i=>{let{version:s}=o.get(i);return hr(new URL(i)).pipe(m(a=>{let f=Oe().href.replace(t.base,"");return a.includes(f.split("#")[0])?new URL(`../${s}/${f}`,t.base):new URL(i)}))})))).subscribe(o=>pr(o)),Y([r,n]).subscribe(([o,i])=>{K(".md-header__topic").appendChild(ei(o,i))}),e.pipe(S(()=>n)).subscribe(o=>{var s;let i=__md_get("__outdated",sessionStorage);if(i===null){let a=((s=t.version)==null?void 0:s.default)||"latest";i=!o.aliases.includes(a),__md_set("__outdated",i,sessionStorage)}if(i)for(let a of te("outdated"))a.hidden=!1})}function ks(e,{rx$:t}){let r=(__search==null?void 0:__search.transform)||_i,{searchParams:n}=Oe();n.has("q")&&Ke("search",!0);let o=t.pipe(x(bt),oe(1),m(()=>n.get("q")||""));dt("search").pipe(x(a=>!a),oe(1)).subscribe(()=>{let a=new URL(location.href);a.searchParams.delete("q"),history.replaceState({},"",`${a}`)}),o.subscribe(a=>{a&&(e.value=a,e.focus())});let i=nr(e),s=A(v(e,"keyup"),v(e,"focus").pipe(ke(1)),o).pipe(m(()=>r(e.value)),N(""),B());return Y([s,i]).pipe(m(([a,c])=>({value:a,focus:c})),X(1))}function Ai(e,{tx$:t,rx$:r}){let n=new E,o=n.pipe(de(1));return n.pipe(J("value"),m(({value:i})=>({type:2,data:i}))).subscribe(t.next.bind(t)),n.pipe(J("focus")).subscribe(({focus:i})=>{i?(Ke("search",i),e.placeholder=""):e.placeholder=re("search.placeholder")}),v(e.form,"reset").pipe(ee(o)).subscribe(()=>e.focus()),ks(e,{tx$:t,rx$:r}).pipe(w(i=>n.next(i)),C(()=>n.complete()),m(i=>H({ref:e},i)),ie())}function Ci(e,{rx$:t},{query$:r}){let n=new E,o=Ao(e.parentElement).pipe(x(Boolean)),i=K(":scope > :first-child",e),s=K(":scope > :last-child",e),a=t.pipe(x(bt),oe(1));return n.pipe(ae(r),Mt(a)).subscribe(([{items:f},{value:u}])=>{if(u)switch(f.length){case 0:i.textContent=re("search.result.none");break;case 1:i.textContent=re("search.result.one");break;default:i.textContent=re("search.result.other",lr(f.length))}else i.textContent=re("search.result.placeholder")}),n.pipe(w(()=>s.innerHTML=""),S(({items:f})=>A(I(...f.slice(0,10)),I(...f.slice(10)).pipe(Ce(4),Nr(o),S(([u])=>u))))).subscribe(f=>s.appendChild(Jo(f))),t.pipe(x(vt),m(({data:f})=>f)).pipe(w(f=>n.next(f)),C(()=>n.complete()),m(f=>H({ref:e},f)))}function Hs(e,{query$:t}){return t.pipe(m(({value:r})=>{let n=Oe();return n.hash="",n.searchParams.delete("h"),n.searchParams.set("q",r),{url:n}}))}function Ri(e,t){let r=new E;return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),v(e,"click").subscribe(n=>n.preventDefault()),Hs(e,t).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))}function ki(e,{rx$:t},{keyboard$:r}){let n=new E,o=_e("search-query"),i=A(v(o,"keydown"),v(o,"focus")).pipe(Le(fe),m(()=>o.value),B());return n.pipe(Ze(i),m(([{suggestions:a},c])=>{let f=c.split(/([\s-]+)/);if((a==null?void 0:a.length)&&f[f.length-1]){let u=a[a.length-1];u.startsWith(f[f.length-1])&&(f[f.length-1]=u)}else f.length=0;return f})).subscribe(a=>e.innerHTML=a.join("").replace(/\s/g," ")),r.pipe(x(({mode:a})=>a==="search")).subscribe(a=>{switch(a.type){case"ArrowRight":e.innerText.length&&o.selectionStart===o.value.length&&(o.value=e.innerText);break}}),t.pipe(x(vt),m(({data:a})=>a)).pipe(w(a=>n.next(a)),C(()=>n.complete()),m(()=>({ref:e})))}function Hi(e,{index$:t,keyboard$:r}){let n=le();try{let o=(__search==null?void 0:__search.worker)||n.search,i=Mi(o,t),s=_e("search-query",e),a=_e("search-result",e),{tx$:c,rx$:f}=i;c.pipe(x(Ti),ut(f.pipe(x(bt))),oe(1)).subscribe(c.next.bind(c)),r.pipe(x(({mode:l})=>l==="search")).subscribe(l=>{let d=Ie();switch(l.type){case"Enter":if(d===s){let h=new Map;for(let b of Q(":first-child [href]",a)){let U=b.firstElementChild;h.set(b,parseFloat(U.getAttribute("data-md-score")))}if(h.size){let[[b]]=[...h].sort(([,U],[,G])=>G-U);b.click()}l.claim()}break;case"Escape":case"Tab":Ke("search",!1),s.blur();break;case"ArrowUp":case"ArrowDown":if(typeof d=="undefined")s.focus();else{let h=[s,...Q(":not(details) > [href], summary, details[open] [href]",a)],b=Math.max(0,(Math.max(0,h.indexOf(d))+h.length+(l.type==="ArrowUp"?-1:1))%h.length);h[b].focus()}l.claim();break;default:s!==Ie()&&s.focus()}}),r.pipe(x(({mode:l})=>l==="global")).subscribe(l=>{switch(l.type){case"f":case"s":case"/":s.focus(),s.select(),l.claim();break}});let u=Ai(s,i),p=Ci(a,i,{query$:u});return A(u,p).pipe(et(...te("search-share",e).map(l=>Ri(l,{query$:u})),...te("search-suggest",e).map(l=>ki(l,i,{keyboard$:r}))))}catch(o){return e.hidden=!0,Se}}function Pi(e,{index$:t,location$:r}){return Y([t,r.pipe(N(Oe()),x(n=>!!n.searchParams.get("h")))]).pipe(m(([n,o])=>rn(n.config,!0)(o.searchParams.get("h"))),m(n=>{var s;let o=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let a=i.nextNode();a;a=i.nextNode())if((s=a.parentElement)!=null&&s.offsetHeight){let c=a.textContent,f=n(c);f.length>c.length&&o.set(a,f)}for(let[a,c]of o){let{childNodes:f}=M("span",null,c);a.replaceWith(...Array.from(f))}return{ref:e,nodes:o}}))}function Ps(e,{viewport$:t,main$:r}){let n=e.parentElement,o=n.offsetTop-n.parentElement.offsetTop;return Y([r,t]).pipe(m(([{offset:i,height:s},{offset:{y:a}}])=>(s=s+Math.min(o,Math.max(0,a-i))-o,{height:s,locked:a>=i+o})),B((i,s)=>i.height===s.height&&i.locked===s.locked))}function nn(e,n){var o=n,{header$:t}=o,r=un(o,["header$"]);let i=K(".md-sidebar__scrollwrap",e),{y:s}=qe(i);return P(()=>{let a=new E;return a.pipe(Ae(0,xe),ae(t)).subscribe({next([{height:c},{height:f}]){i.style.height=`${c-2*s}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),a.pipe(Le(xe),oe(1)).subscribe(()=>{for(let c of Q(".md-nav__link--active[href]",e)){let f=cr(c);if(typeof f!="undefined"){let u=c.offsetTop-f.offsetTop,{height:p}=he(f);f.scrollTo({top:u-p/2})}}}),Ps(e,r).pipe(w(c=>a.next(c)),C(()=>a.complete()),m(c=>H({ref:e},c)))})}function $i(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return _t(je(`${r}/releases/latest`).pipe(ce(()=>R),m(n=>({version:n.tag_name})),De({})),je(r).pipe(ce(()=>R),m(n=>({stars:n.stargazers_count,forks:n.forks_count})),De({}))).pipe(m(([n,o])=>H(H({},n),o)))}else{let r=`https://api.github.com/users/${e}`;return je(r).pipe(m(n=>({repositories:n.public_repos})),De({}))}}function Ii(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return je(r).pipe(ce(()=>R),m(({star_count:n,forks_count:o})=>({stars:n,forks:o})),De({}))}function ji(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,n]=t;return $i(r,n)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,n]=t;return Ii(r,n)}return R}var $s;function Is(e){return $s||($s=P(()=>{let t=__md_get("__source",sessionStorage);if(t)return I(t);if(te("consent").length){let n=__md_get("__consent");if(!(n&&n.github))return R}return ji(e.href).pipe(w(n=>__md_set("__source",n,sessionStorage)))}).pipe(ce(()=>R),x(t=>Object.keys(t).length>0),m(t=>({facts:t})),X(1)))}function Fi(e){let t=K(":scope > :last-child",e);return P(()=>{let r=new E;return r.subscribe(({facts:n})=>{t.appendChild(Xo(n)),t.classList.add("md-source__repository--active")}),Is(e).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))})}function js(e,{viewport$:t,header$:r}){return ve(document.body).pipe(S(()=>dr(e,{header$:r,viewport$:t})),m(({offset:{y:n}})=>({hidden:n>=10})),J("hidden"))}function Ui(e,t){return P(()=>{let r=new E;return r.subscribe({next({hidden:n}){e.hidden=n},complete(){e.hidden=!1}}),(Z("navigation.tabs.sticky")?I({hidden:!1}):js(e,t)).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))})}function Fs(e,{viewport$:t,header$:r}){let n=new Map,o=Q("[href^=\\#]",e);for(let a of o){let c=decodeURIComponent(a.hash.substring(1)),f=pe(`[id="${c}"]`);typeof f!="undefined"&&n.set(a,f)}let i=r.pipe(J("height"),m(({height:a})=>{let c=_e("main"),f=K(":scope > :first-child",c);return a+.8*(f.offsetTop-c.offsetTop)}),ie());return ve(document.body).pipe(J("height"),S(a=>P(()=>{let c=[];return I([...n].reduce((f,[u,p])=>{for(;c.length&&n.get(c[c.length-1]).tagName>=p.tagName;)c.pop();let l=p.offsetTop;for(;!l&&p.parentElement;)p=p.parentElement,l=p.offsetTop;return f.set([...c=[...c,u]].reverse(),l)},new Map))}).pipe(m(c=>new Map([...c].sort(([,f],[,u])=>f-u))),Ze(i),S(([c,f])=>t.pipe(Ur(([u,p],{offset:{y:l},size:d})=>{let h=l+d.height>=Math.floor(a.height);for(;p.length;){let[,b]=p[0];if(b-f=l&&!h)p=[u.pop(),...p];else break}return[u,p]},[[],[...c]]),B((u,p)=>u[0]===p[0]&&u[1]===p[1])))))).pipe(m(([a,c])=>({prev:a.map(([f])=>f),next:c.map(([f])=>f)})),N({prev:[],next:[]}),Ce(2,1),m(([a,c])=>a.prev.length{let o=new E,i=o.pipe(de(1));if(o.subscribe(({prev:s,next:a})=>{for(let[c]of a)c.classList.remove("md-nav__link--passed"),c.classList.remove("md-nav__link--active");for(let[c,[f]]of s.entries())f.classList.add("md-nav__link--passed"),f.classList.toggle("md-nav__link--active",c===s.length-1)}),Z("toc.follow")){let s=A(t.pipe(Re(1),m(()=>{})),t.pipe(Re(250),m(()=>"smooth")));o.pipe(x(({prev:a})=>a.length>0),ae(s)).subscribe(([{prev:a},c])=>{let[f]=a[a.length-1];if(f.offsetHeight){let u=cr(f);if(typeof u!="undefined"){let p=f.offsetTop-u.offsetTop,{height:l}=he(u);u.scrollTo({top:p-l/2,behavior:c})}}})}return Z("navigation.tracking")&&t.pipe(ee(i),J("offset"),Re(250),He(1),ee(n.pipe(He(1))),Tt({delay:250}),ae(o)).subscribe(([,{prev:s}])=>{let a=Oe(),c=s[s.length-1];if(c&&c.length){let[f]=c,{hash:u}=new URL(f.href);a.hash!==u&&(a.hash=u,history.replaceState({},"",`${a}`))}else a.hash="",history.replaceState({},"",`${a}`)}),Fs(e,{viewport$:t,header$:r}).pipe(w(s=>o.next(s)),C(()=>o.complete()),m(s=>H({ref:e},s)))})}function Us(e,{viewport$:t,main$:r,target$:n}){let o=t.pipe(m(({offset:{y:s}})=>s),Ce(2,1),m(([s,a])=>s>a&&a>0),B()),i=r.pipe(m(({active:s})=>s));return Y([i,o]).pipe(m(([s,a])=>!(s&&a)),B(),ee(n.pipe(He(1))),Fr(!0),Tt({delay:250}),m(s=>({hidden:s})))}function Wi(e,{viewport$:t,header$:r,main$:n,target$:o}){let i=new E,s=i.pipe(de(1));return i.subscribe({next({hidden:a}){e.hidden=a,a?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(ee(s),J("height")).subscribe(({height:a})=>{e.style.top=`${a+16}px`}),Us(e,{viewport$:t,main$:n,target$:o}).pipe(w(a=>i.next(a)),C(()=>i.complete()),m(a=>H({ref:e},a)))}function Vi({document$:e,tablet$:t}){e.pipe(S(()=>Q(".md-toggle--indeterminate, [data-md-state=indeterminate]")),w(r=>{r.indeterminate=!0,r.checked=!1}),se(r=>v(r,"change").pipe(Wr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),ae(t)).subscribe(([r,n])=>{r.classList.remove("md-toggle--indeterminate"),n&&(r.checked=!1)})}function Ds(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function zi({document$:e}){e.pipe(S(()=>Q("[data-md-scrollfix]")),w(t=>t.removeAttribute("data-md-scrollfix")),x(Ds),se(t=>v(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Ni({viewport$:e,tablet$:t}){Y([dt("search"),t]).pipe(m(([r,n])=>r&&!n),S(r=>I(r).pipe(ke(r?400:100))),ae(e)).subscribe(([r,{offset:{y:n}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${n}px`;else{let o=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",o&&window.scrollTo(0,o)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let n=e[r];typeof n=="string"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?t.insertBefore(this.previousSibling,n):t.replaceChild(n,this)}}}));document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var tt=go(),vr=ko(),gt=jo(),on=Ro(),we=qo(),gr=Kr("(min-width: 960px)"),Ki=Kr("(min-width: 1220px)"),Qi=Fo(),Yi=le(),Bi=document.forms.namedItem("search")?(__search==null?void 0:__search.index)||je(new URL("search/search_index.json",Yi.base)):Se,an=new E;wi({alert$:an});Z("navigation.instant")&&Ei({document$:tt,location$:vr,viewport$:we});var qi;((qi=Yi.version)==null?void 0:qi.provider)==="mike"&&Li({document$:tt});A(vr,gt).pipe(ke(125)).subscribe(()=>{Ke("drawer",!1),Ke("search",!1)});on.pipe(x(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=pe("[href][rel=prev]");typeof t!="undefined"&&t.click();break;case"n":case".":let r=pe("[href][rel=next]");typeof r!="undefined"&&r.click();break}});Vi({document$:tt,tablet$:gr});zi({document$:tt});Ni({viewport$:we,tablet$:gr});var Qe=bi(_e("header"),{viewport$:we}),br=tt.pipe(m(()=>_e("main")),S(e=>yi(e,{viewport$:we,header$:Qe})),X(1)),Ws=A(...te("consent").map(e=>Yo(e,{target$:gt})),...te("dialog").map(e=>hi(e,{alert$:an})),...te("header").map(e=>vi(e,{viewport$:we,header$:Qe,main$:br})),...te("palette").map(e=>xi(e)),...te("search").map(e=>Hi(e,{index$:Bi,keyboard$:on})),...te("source").map(e=>Fi(e))),Vs=P(()=>A(...te("announce").map(e=>Qo(e)),...te("content").map(e=>di(e,{viewport$:we,target$:gt,print$:Qi})),...te("content").map(e=>Z("search.highlight")?Pi(e,{index$:Bi,location$:vr}):R),...te("header-title").map(e=>gi(e,{viewport$:we,header$:Qe})),...te("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Qr(Ki,()=>nn(e,{viewport$:we,header$:Qe,main$:br})):Qr(gr,()=>nn(e,{viewport$:we,header$:Qe,main$:br}))),...te("tabs").map(e=>Ui(e,{viewport$:we,header$:Qe})),...te("toc").map(e=>Di(e,{viewport$:we,header$:Qe,target$:gt})),...te("top").map(e=>Wi(e,{viewport$:we,header$:Qe,main$:br,target$:gt})))),Gi=tt.pipe(S(()=>Vs),et(Ws),X(1));Gi.subscribe();window.document$=tt;window.location$=vr;window.target$=gt;window.keyboard$=on;window.viewport$=we;window.tablet$=gr;window.screen$=Ki;window.print$=Qi;window.alert$=an;window.component$=Gi;})(); -//# sourceMappingURL=bundle.d6c3db9e.min.js.map + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ue(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var $e=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=ge(s),c=a.next();!c.done;c=a.next()){var f=c.value;f.remove(this)}}catch(b){t={error:b}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(L(u))try{u()}catch(b){i=b instanceof Ut?b.errors:[b]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var l=ge(p),d=l.next();!d.done;d=l.next()){var h=d.value;try{Un(h)}catch(b){i=i!=null?i:[],b instanceof Ut?i=V(V([],D(i)),D(b.errors)):i.push(b)}}}catch(b){n={error:b}}finally{try{d&&!d.done&&(o=l.return)&&o.call(l)}finally{if(n)throw n.error}}}if(i)throw new Ut(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)Un(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ue(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ue(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Tr=$e.EMPTY;function Dt(e){return e instanceof $e||e&&"closed"in e&&L(e.remove)&&L(e.add)&&L(e.unsubscribe)}function Un(e){L(e)?e():e.unsubscribe()}var Me={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var nt={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Tr:(this.currentObservers=null,a.push(r),new $e(function(){n.currentObservers=null,Ue(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new Qn(r,n)},t}(F);var Qn=function(e){ne(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Tr},t}(E);var wt={now:function(){return(wt.delegate||Date).now()},delegate:void 0};var Et=function(e){ne(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=wt);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,c=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=at.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(at.cancelAnimationFrame(n),r._scheduled=void 0)},t}(zt);var Gn=function(e){ne(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Nt);var xe=new Gn(Bn);var R=new F(function(e){return e.complete()});function qt(e){return e&&L(e.schedule)}function Hr(e){return e[e.length-1]}function Ve(e){return L(Hr(e))?e.pop():void 0}function Ee(e){return qt(Hr(e))?e.pop():void 0}function Kt(e,t){return typeof Hr(e)=="number"?e.pop():t}var st=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Qt(e){return L(e==null?void 0:e.then)}function Yt(e){return L(e[it])}function Bt(e){return Symbol.asyncIterator&&L(e==null?void 0:e[Symbol.asyncIterator])}function Gt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function ya(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Jt=ya();function Xt(e){return L(e==null?void 0:e[Jt])}function Zt(e){return jn(this,arguments,function(){var r,n,o,i;return It(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,jt(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,jt(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,jt(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function er(e){return L(e==null?void 0:e.getReader)}function z(e){if(e instanceof F)return e;if(e!=null){if(Yt(e))return xa(e);if(st(e))return wa(e);if(Qt(e))return Ea(e);if(Bt(e))return Jn(e);if(Xt(e))return Sa(e);if(er(e))return Oa(e)}throw Gt(e)}function xa(e){return new F(function(t){var r=e[it]();if(L(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function wa(e){return new F(function(t){for(var r=0;r=2,!0))}function ie(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new E}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(f){var u,p,l,d=0,h=!1,b=!1,U=function(){p==null||p.unsubscribe(),p=void 0},G=function(){U(),u=l=void 0,h=b=!1},W=function(){var _=u;G(),_==null||_.unsubscribe()};return g(function(_,We){d++,!b&&!h&&U();var Fe=l=l!=null?l:r();We.add(function(){d--,d===0&&!b&&!h&&(p=Dr(W,c))}),Fe.subscribe(We),!u&&d>0&&(u=new Ge({next:function(Pe){return Fe.next(Pe)},error:function(Pe){b=!0,U(),p=Dr(G,o,Pe),Fe.error(Pe)},complete:function(){h=!0,U(),p=Dr(G,s),Fe.complete()}}),z(_).subscribe(u))})(f)}}function Dr(e,t){for(var r=[],n=2;ne.next(document)),e}function Q(e,t=document){return Array.from(t.querySelectorAll(e))}function K(e,t=document){let r=pe(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function pe(e,t=document){return t.querySelector(e)||void 0}function Ie(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function nr(e){return A(v(document.body,"focusin"),v(document.body,"focusout")).pipe(Re(1),m(()=>{let t=Ie();return typeof t!="undefined"?e.contains(t):!1}),N(e===Ie()),B())}function qe(e){return{x:e.offsetLeft,y:e.offsetTop}}function yo(e){return A(v(window,"load"),v(window,"resize")).pipe(Ae(0,xe),m(()=>qe(e)),N(qe(e)))}function or(e){return{x:e.scrollLeft,y:e.scrollTop}}function pt(e){return A(v(e,"scroll"),v(window,"resize")).pipe(Ae(0,xe),m(()=>or(e)),N(or(e)))}var wo=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!qr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Ka?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!qr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=qa.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Eo=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Oo=typeof WeakMap!="undefined"?new WeakMap:new wo,_o=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Qa.getInstance(),n=new ns(t,r,this);Oo.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){_o.prototype[e]=function(){var t;return(t=Oo.get(this))[e].apply(t,arguments)}});var os=function(){return typeof ir.ResizeObserver!="undefined"?ir.ResizeObserver:_o}(),To=os;var Mo=new E,is=P(()=>I(new To(e=>{for(let t of e)Mo.next(t)}))).pipe(S(e=>A(Se,I(e)).pipe(C(()=>e.disconnect()))),X(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ve(e){return is.pipe(w(t=>t.observe(e)),S(t=>Mo.pipe(x(({target:r})=>r===e),C(()=>t.unobserve(e)),m(()=>he(e)))),N(he(e)))}function mt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function cr(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var Lo=new E,as=P(()=>I(new IntersectionObserver(e=>{for(let t of e)Lo.next(t)},{threshold:0}))).pipe(S(e=>A(Se,I(e)).pipe(C(()=>e.disconnect()))),X(1));function fr(e){return as.pipe(w(t=>t.observe(e)),S(t=>Lo.pipe(x(({target:r})=>r===e),C(()=>t.unobserve(e)),m(({isIntersecting:r})=>r))))}function Ao(e,t=16){return pt(e).pipe(m(({y:r})=>{let n=he(e),o=mt(e);return r>=o.height-n.height-t}),B())}var ur={drawer:K("[data-md-toggle=drawer]"),search:K("[data-md-toggle=search]")};function Co(e){return ur[e].checked}function Ke(e,t){ur[e].checked!==t&&ur[e].click()}function dt(e){let t=ur[e];return v(t,"change").pipe(m(()=>t.checked),N(t.checked))}function ss(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ro(){return v(window,"keydown").pipe(x(e=>!(e.metaKey||e.ctrlKey)),m(e=>({mode:Co("search")?"search":"global",type:e.key,claim(){e.preventDefault(),e.stopPropagation()}})),x(({mode:e,type:t})=>{if(e==="global"){let r=Ie();if(typeof r!="undefined")return!ss(r,t)}return!0}),ie())}function Oe(){return new URL(location.href)}function pr(e){location.href=e.href}function ko(){return new E}function Ho(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Ho(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)Ho(n,o);return n}function Po(e,t){let r=t;if(e.length>r){for(;e[r]!==" "&&--r>0;);return`${e.substring(0,r)}...`}return e}function lr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function $o(){return location.hash.substring(1)}function Io(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function cs(){return v(window,"hashchange").pipe(m($o),N($o()),x(e=>e.length>0),X(1))}function jo(){return cs().pipe(m(e=>pe(`[id="${e}"]`)),x(e=>typeof e!="undefined"))}function Kr(e){let t=matchMedia(e);return rr(r=>t.addListener(()=>r(t.matches))).pipe(N(t.matches))}function Fo(){let e=matchMedia("print");return A(v(window,"beforeprint").pipe(m(()=>!0)),v(window,"afterprint").pipe(m(()=>!1))).pipe(N(e.matches))}function Qr(e,t){return e.pipe(S(r=>r?t():R))}function mr(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(ce(()=>R),S(r=>r.status!==200?Ot(()=>new Error(r.statusText)):I(r)))}function je(e,t){return mr(e,t).pipe(S(r=>r.json()),X(1))}function Uo(e,t){let r=new DOMParser;return mr(e,t).pipe(S(n=>n.text()),m(n=>r.parseFromString(n,"text/xml")),X(1))}function Do(e){let t=M("script",{src:e});return P(()=>(document.head.appendChild(t),A(v(t,"load"),v(t,"error").pipe(S(()=>Ot(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(m(()=>{}),C(()=>document.head.removeChild(t)),oe(1))))}function Wo(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function Vo(){return A(v(window,"scroll",{passive:!0}),v(window,"resize",{passive:!0})).pipe(m(Wo),N(Wo()))}function zo(){return{width:innerWidth,height:innerHeight}}function No(){return v(window,"resize",{passive:!0}).pipe(m(zo),N(zo()))}function qo(){return Y([Vo(),No()]).pipe(m(([e,t])=>({offset:e,size:t})),X(1))}function dr(e,{viewport$:t,header$:r}){let n=t.pipe(J("size")),o=Y([n,r]).pipe(m(()=>qe(e)));return Y([r,t,o]).pipe(m(([{height:i},{offset:s,size:a},{x:c,y:f}])=>({offset:{x:s.x-c,y:s.y-f+i},size:a})))}function Ko(e,{tx$:t}){let r=v(e,"message").pipe(m(({data:n})=>n));return t.pipe(Lt(()=>r,{leading:!0,trailing:!0}),w(n=>e.postMessage(n)),S(()=>r),ie())}var fs=K("#__config"),ht=JSON.parse(fs.textContent);ht.base=`${new URL(ht.base,Oe())}`;function le(){return ht}function Z(e){return ht.features.includes(e)}function re(e,t){return typeof t!="undefined"?ht.translations[e].replace("#",t.toString()):ht.translations[e]}function _e(e,t=document){return K(`[data-md-component=${e}]`,t)}function te(e,t=document){return Q(`[data-md-component=${e}]`,t)}function us(e){let t=K(".md-typeset > :first-child",e);return v(t,"click",{once:!0}).pipe(m(()=>K(".md-typeset",e)),m(r=>({hash:__md_hash(r.innerHTML)})))}function Qo(e){return!Z("announce.dismiss")||!e.childElementCount?R:P(()=>{let t=new E;return t.pipe(N({hash:__md_get("__announce")})).subscribe(({hash:r})=>{var n;r&&r===((n=__md_get("__announce"))!=null?n:r)&&(e.hidden=!0,__md_set("__announce",r))}),us(e).pipe(w(r=>t.next(r)),C(()=>t.complete()),m(r=>H({ref:e},r)))})}function ps(e,{target$:t}){return t.pipe(m(r=>({hidden:r!==e})))}function Yo(e,t){let r=new E;return r.subscribe(({hidden:n})=>{e.hidden=n}),ps(e,t).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))}var ii=Ye(Br());function Gr(e){return M("div",{class:"md-tooltip",id:e},M("div",{class:"md-tooltip__inner md-typeset"}))}function Bo(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return M("aside",{class:"md-annotation",tabIndex:0},Gr(t),M("a",{href:r,class:"md-annotation__index",tabIndex:-1},M("span",{"data-md-annotation-id":e})))}else return M("aside",{class:"md-annotation",tabIndex:0},Gr(t),M("span",{class:"md-annotation__index",tabIndex:-1},M("span",{"data-md-annotation-id":e})))}function Go(e){return M("button",{class:"md-clipboard md-icon",title:re("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}function Jr(e,t){let r=t&2,n=t&1,o=Object.keys(e.terms).filter(a=>!e.terms[a]).reduce((a,c)=>[...a,M("del",null,c)," "],[]).slice(0,-1),i=new URL(e.location);Z("search.highlight")&&i.searchParams.set("h",Object.entries(e.terms).filter(([,a])=>a).reduce((a,[c])=>`${a} ${c}`.trim(),""));let{tags:s}=le();return M("a",{href:`${i}`,class:"md-search-result__link",tabIndex:-1},M("article",{class:["md-search-result__article",...r?["md-search-result__article--document"]:[]].join(" "),"data-md-score":e.score.toFixed(2)},r>0&&M("div",{class:"md-search-result__icon md-icon"}),M("h1",{class:"md-search-result__title"},e.title),n>0&&e.text.length>0&&M("p",{class:"md-search-result__teaser"},Po(e.text,320)),e.tags&&M("div",{class:"md-typeset"},e.tags.map(a=>{let c=a.replace(/<[^>]+>/g,""),f=s?c in s?`md-tag-icon md-tag-icon--${s[c]}`:"md-tag-icon":"";return M("span",{class:`md-tag ${f}`},a)})),n>0&&o.length>0&&M("p",{class:"md-search-result__terms"},re("search.result.term.missing"),": ",...o)))}function Jo(e){let t=e[0].score,r=[...e],n=r.findIndex(f=>!f.location.includes("#")),[o]=r.splice(n,1),i=r.findIndex(f=>f.scoreJr(f,1)),...a.length?[M("details",{class:"md-search-result__more"},M("summary",{tabIndex:-1},a.length>0&&a.length===1?re("search.result.more.one"):re("search.result.more.other",a.length)),...a.map(f=>Jr(f,1)))]:[]];return M("li",{class:"md-search-result__item"},c)}function Xo(e){return M("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>M("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?lr(r):r)))}function Xr(e){let t=`tabbed-control tabbed-control--${e}`;return M("div",{class:t,hidden:!0},M("button",{class:"tabbed-button",tabIndex:-1}))}function Zo(e){return M("div",{class:"md-typeset__scrollwrap"},M("div",{class:"md-typeset__table"},e))}function ls(e){let t=le(),r=new URL(`../${e.version}/`,t.base);return M("li",{class:"md-version__item"},M("a",{href:`${r}`,class:"md-version__link"},e.title))}function ei(e,t){return M("div",{class:"md-version"},M("button",{class:"md-version__current","aria-label":re("select.version.title")},t.title),M("ul",{class:"md-version__list"},e.map(ls)))}function ms(e,t){let r=P(()=>Y([yo(e),pt(t)])).pipe(m(([{x:n,y:o},i])=>{let{width:s,height:a}=he(e);return{x:n-i.x+s/2,y:o-i.y+a/2}}));return nr(e).pipe(S(n=>r.pipe(m(o=>({active:n,offset:o})),oe(+!n||1/0))))}function ti(e,t,{target$:r}){let[n,o]=Array.from(e.children);return P(()=>{let i=new E,s=i.pipe(de(1));return i.subscribe({next({offset:a}){e.style.setProperty("--md-tooltip-x",`${a.x}px`),e.style.setProperty("--md-tooltip-y",`${a.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),fr(e).pipe(ee(s)).subscribe(a=>{e.toggleAttribute("data-md-visible",a)}),A(i.pipe(x(({active:a})=>a)),i.pipe(Re(250),x(({active:a})=>!a))).subscribe({next({active:a}){a?e.prepend(n):n.remove()},complete(){e.prepend(n)}}),i.pipe(Ae(16,xe)).subscribe(({active:a})=>{n.classList.toggle("md-tooltip--active",a)}),i.pipe(zr(125,xe),x(()=>!!e.offsetParent),m(()=>e.offsetParent.getBoundingClientRect()),m(({x:a})=>a)).subscribe({next(a){a?e.style.setProperty("--md-tooltip-0",`${-a}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),v(o,"click").pipe(ee(s),x(a=>!(a.metaKey||a.ctrlKey))).subscribe(a=>a.preventDefault()),v(o,"mousedown").pipe(ee(s),ae(i)).subscribe(([a,{active:c}])=>{var f;if(a.button!==0||a.metaKey||a.ctrlKey)a.preventDefault();else if(c){a.preventDefault();let u=e.parentElement.closest(".md-annotation");u instanceof HTMLElement?u.focus():(f=Ie())==null||f.blur()}}),r.pipe(ee(s),x(a=>a===n),ke(125)).subscribe(()=>e.focus()),ms(e,t).pipe(w(a=>i.next(a)),C(()=>i.complete()),m(a=>H({ref:e},a)))})}function ds(e){let t=[];for(let r of Q(".c, .c1, .cm",e)){let n=[],o=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=o.nextNode();i;i=o.nextNode())n.push(i);for(let i of n){let s;for(;s=/(\(\d+\))(!)?/.exec(i.textContent);){let[,a,c]=s;if(typeof c=="undefined"){let f=i.splitText(s.index);i=f.splitText(a.length),t.push(f)}else{i.textContent=a,t.push(i);break}}}}return t}function ri(e,t){t.append(...Array.from(e.childNodes))}function ni(e,t,{target$:r,print$:n}){let o=t.closest("[id]"),i=o==null?void 0:o.id,s=new Map;for(let a of ds(t)){let[,c]=a.textContent.match(/\((\d+)\)/);pe(`li:nth-child(${c})`,e)&&(s.set(c,Bo(c,i)),a.replaceWith(s.get(c)))}return s.size===0?R:P(()=>{let a=new E,c=[];for(let[f,u]of s)c.push([K(".md-typeset",u),K(`li:nth-child(${f})`,e)]);return n.pipe(ee(a.pipe(de(1)))).subscribe(f=>{e.hidden=!f;for(let[u,p]of c)f?ri(u,p):ri(p,u)}),A(...[...s].map(([,f])=>ti(f,t,{target$:r}))).pipe(C(()=>a.complete()),ie())})}var hs=0;function ai(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return ai(t)}}function oi(e){return ve(e).pipe(m(({width:t})=>({scrollable:mt(e).width>t})),J("scrollable"))}function si(e,t){let{matches:r}=matchMedia("(hover)"),n=P(()=>{let o=new E;if(o.subscribe(({scrollable:s})=>{s&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")}),ii.default.isSupported()){let s=e.closest("pre");s.id=`__code_${++hs}`,s.insertBefore(Go(s.id),e)}let i=e.closest(".highlight");if(i instanceof HTMLElement){let s=ai(i);if(typeof s!="undefined"&&(i.classList.contains("annotate")||Z("content.code.annotate"))){let a=ni(s,e,t);return oi(e).pipe(w(c=>o.next(c)),C(()=>o.complete()),m(c=>H({ref:e},c)),et(ve(i).pipe(m(({width:c,height:f})=>c&&f),B(),S(c=>c?a:R))))}}return oi(e).pipe(w(s=>o.next(s)),C(()=>o.complete()),m(s=>H({ref:e},s)))});return Z("content.lazy")?fr(e).pipe(x(o=>o),oe(1),S(()=>n)):n}var ci=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:#0000}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel rect,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel rect{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color)}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}defs #flowchart-circleEnd,defs #flowchart-circleStart,defs #flowchart-crossEnd,defs #flowchart-crossStart,defs #flowchart-pointEnd,defs #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}.actor,defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{stroke:var(--md-mermaid-node-fg-color)}text.actor>tspan{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-default-fg-color--lighter)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-edge-color)}.loopText>tspan,.messageText,.noteText>tspan{fill:var(--md-mermaid-edge-color);stroke:none;font-family:var(--md-mermaid-font-family)!important}.noteText>tspan{fill:#000}#arrowhead path{fill:var(--md-mermaid-edge-color);stroke:none}.loopLine{stroke:var(--md-mermaid-node-fg-color)}.labelBox,.loopLine{fill:var(--md-mermaid-node-bg-color)}.labelBox{stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-node-fg-color);font-family:var(--md-mermaid-font-family)}";var Zr,vs=0;function gs(){return typeof mermaid=="undefined"||mermaid instanceof Element?Do("https://unpkg.com/mermaid@9.1.7/dist/mermaid.min.js"):I(void 0)}function fi(e){return e.classList.remove("mermaid"),Zr||(Zr=gs().pipe(w(()=>mermaid.initialize({startOnLoad:!1,themeCSS:ci,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),m(()=>{}),X(1))),Zr.subscribe(()=>{e.classList.add("mermaid");let t=`__mermaid_${vs++}`,r=M("div",{class:"mermaid"});mermaid.mermaidAPI.render(t,e.textContent,n=>{let o=r.attachShadow({mode:"closed"});o.innerHTML=n,e.replaceWith(r)})}),Zr.pipe(m(()=>({ref:e})))}function ys(e,{target$:t,print$:r}){let n=!0;return A(t.pipe(m(o=>o.closest("details:not([open])")),x(o=>e===o),m(()=>({action:"open",reveal:!0}))),r.pipe(x(o=>o||!n),w(()=>n=e.open),m(o=>({action:o?"open":"close"}))))}function ui(e,t){return P(()=>{let r=new E;return r.subscribe(({action:n,reveal:o})=>{e.toggleAttribute("open",n==="open"),o&&e.scrollIntoView()}),ys(e,t).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))})}var pi=M("table");function li(e){return e.replaceWith(pi),pi.replaceWith(Zo(e)),I({ref:e})}function xs(e){let t=Q(":scope > input",e),r=t.find(n=>n.checked)||t[0];return A(...t.map(n=>v(n,"change").pipe(m(()=>K(`label[for="${n.id}"]`))))).pipe(N(K(`label[for="${r.id}"]`)),m(n=>({active:n})))}function mi(e,{viewport$:t}){let r=Xr("prev");e.append(r);let n=Xr("next");e.append(n);let o=K(".tabbed-labels",e);return P(()=>{let i=new E,s=i.pipe(de(1));return Y([i,ve(e)]).pipe(Ae(1,xe),ee(s)).subscribe({next([{active:a},c]){let f=qe(a),{width:u}=he(a);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let p=or(o);(f.xp.x+c.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),Y([pt(o),ve(o)]).pipe(ee(s)).subscribe(([a,c])=>{let f=mt(o);r.hidden=a.x<16,n.hidden=a.x>f.width-c.width-16}),A(v(r,"click").pipe(m(()=>-1)),v(n,"click").pipe(m(()=>1))).pipe(ee(s)).subscribe(a=>{let{width:c}=he(o);o.scrollBy({left:c*a,behavior:"smooth"})}),Z("content.tabs.link")&&i.pipe(He(1),ae(t)).subscribe(([{active:a},{offset:c}])=>{let f=a.innerText.trim();if(a.hasAttribute("data-md-switching"))a.removeAttribute("data-md-switching");else{let u=e.offsetTop-c.y;for(let l of Q("[data-tabs]"))for(let d of Q(":scope > input",l)){let h=K(`label[for="${d.id}"]`);if(h!==a&&h.innerText.trim()===f){h.setAttribute("data-md-switching",""),d.click();break}}window.scrollTo({top:e.offsetTop-u});let p=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...p])])}}),xs(e).pipe(w(a=>i.next(a)),C(()=>i.complete()),m(a=>H({ref:e},a)))}).pipe(Je(fe))}function di(e,{viewport$:t,target$:r,print$:n}){return A(...Q("pre:not(.mermaid) > code",e).map(o=>si(o,{target$:r,print$:n})),...Q("pre.mermaid",e).map(o=>fi(o)),...Q("table:not([class])",e).map(o=>li(o)),...Q("details",e).map(o=>ui(o,{target$:r,print$:n})),...Q("[data-tabs]",e).map(o=>mi(o,{viewport$:t})))}function ws(e,{alert$:t}){return t.pipe(S(r=>A(I(!0),I(!1).pipe(ke(2e3))).pipe(m(n=>({message:r,active:n})))))}function hi(e,t){let r=K(".md-typeset",e);return P(()=>{let n=new E;return n.subscribe(({message:o,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=o}),ws(e,t).pipe(w(o=>n.next(o)),C(()=>n.complete()),m(o=>H({ref:e},o)))})}function Es({viewport$:e}){if(!Z("header.autohide"))return I(!1);let t=e.pipe(m(({offset:{y:o}})=>o),Ce(2,1),m(([o,i])=>[oMath.abs(i-o.y)>100),m(([,[o]])=>o),B()),n=dt("search");return Y([e,n]).pipe(m(([{offset:o},i])=>o.y>400&&!i),B(),S(o=>o?r:I(!1)),N(!1))}function bi(e,t){return P(()=>Y([ve(e),Es(t)])).pipe(m(([{height:r},n])=>({height:r,hidden:n})),B((r,n)=>r.height===n.height&&r.hidden===n.hidden),X(1))}function vi(e,{header$:t,main$:r}){return P(()=>{let n=new E,o=n.pipe(de(1));return n.pipe(J("active"),Ze(t)).subscribe(([{active:i},{hidden:s}])=>{e.classList.toggle("md-header--shadow",i&&!s),e.hidden=s}),r.subscribe(n),t.pipe(ee(o),m(i=>H({ref:e},i)))})}function Ss(e,{viewport$:t,header$:r}){return dr(e,{viewport$:t,header$:r}).pipe(m(({offset:{y:n}})=>{let{height:o}=he(e);return{active:n>=o}}),J("active"))}function gi(e,t){return P(()=>{let r=new E;r.subscribe(({active:o})=>{e.classList.toggle("md-header__title--active",o)});let n=pe("article h1");return typeof n=="undefined"?R:Ss(n,t).pipe(w(o=>r.next(o)),C(()=>r.complete()),m(o=>H({ref:e},o)))})}function yi(e,{viewport$:t,header$:r}){let n=r.pipe(m(({height:i})=>i),B()),o=n.pipe(S(()=>ve(e).pipe(m(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),J("bottom"))));return Y([n,o,t]).pipe(m(([i,{top:s,bottom:a},{offset:{y:c},size:{height:f}}])=>(f=Math.max(0,f-Math.max(0,s-c,i)-Math.max(0,f+c-a)),{offset:s-i,height:f,active:s-i<=c})),B((i,s)=>i.offset===s.offset&&i.height===s.height&&i.active===s.active))}function Os(e){let t=__md_get("__palette")||{index:e.findIndex(r=>matchMedia(r.getAttribute("data-md-color-media")).matches)};return I(...e).pipe(se(r=>v(r,"change").pipe(m(()=>r))),N(e[Math.max(0,t.index)]),m(r=>({index:e.indexOf(r),color:{scheme:r.getAttribute("data-md-color-scheme"),primary:r.getAttribute("data-md-color-primary"),accent:r.getAttribute("data-md-color-accent")}})),X(1))}function xi(e){return P(()=>{let t=new E;t.subscribe(n=>{document.body.setAttribute("data-md-color-switching","");for(let[o,i]of Object.entries(n.color))document.body.setAttribute(`data-md-color-${o}`,i);for(let o=0;o{document.body.removeAttribute("data-md-color-switching")});let r=Q("input",e);return Os(r).pipe(w(n=>t.next(n)),C(()=>t.complete()),m(n=>H({ref:e},n)))})}var en=Ye(Br());function _s(e){e.setAttribute("data-md-copying","");let t=e.innerText;return e.removeAttribute("data-md-copying"),t}function wi({alert$:e}){en.default.isSupported()&&new F(t=>{new en.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||_s(K(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(w(t=>{t.trigger.focus()}),m(()=>re("clipboard.copied"))).subscribe(e)}function Ts(e){if(e.length<2)return[""];let[t,r]=[...e].sort((o,i)=>o.length-i.length).map(o=>o.replace(/[^/]+$/,"")),n=0;if(t===r)n=t.length;else for(;t.charCodeAt(n)===r.charCodeAt(n);)n++;return e.map(o=>o.replace(t.slice(0,n),""))}function hr(e){let t=__md_get("__sitemap",sessionStorage,e);if(t)return I(t);{let r=le();return Uo(new URL("sitemap.xml",e||r.base)).pipe(m(n=>Ts(Q("loc",n).map(o=>o.textContent))),ce(()=>R),De([]),w(n=>__md_set("__sitemap",n,sessionStorage,e)))}}function Ei({document$:e,location$:t,viewport$:r}){let n=le();if(location.protocol==="file:")return;"scrollRestoration"in history&&(history.scrollRestoration="manual",v(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}));let o=pe("link[rel=icon]");typeof o!="undefined"&&(o.href=o.href);let i=hr().pipe(m(f=>f.map(u=>`${new URL(u,n.base)}`)),S(f=>v(document.body,"click").pipe(x(u=>!u.metaKey&&!u.ctrlKey),S(u=>{if(u.target instanceof Element){let p=u.target.closest("a");if(p&&!p.target){let l=new URL(p.href);if(l.search="",l.hash="",l.pathname!==location.pathname&&f.includes(l.toString()))return u.preventDefault(),I({url:new URL(p.href)})}}return Se}))),ie()),s=v(window,"popstate").pipe(x(f=>f.state!==null),m(f=>({url:new URL(location.href),offset:f.state})),ie());A(i,s).pipe(B((f,u)=>f.url.href===u.url.href),m(({url:f})=>f)).subscribe(t);let a=t.pipe(J("pathname"),S(f=>mr(f.href).pipe(ce(()=>(pr(f),Se)))),ie());i.pipe(ut(a)).subscribe(({url:f})=>{history.pushState({},"",`${f}`)});let c=new DOMParser;a.pipe(S(f=>f.text()),m(f=>c.parseFromString(f,"text/html"))).subscribe(e),e.pipe(He(1)).subscribe(f=>{for(let u of["title","link[rel=canonical]","meta[name=author]","meta[name=description]","[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...Z("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let p=pe(u),l=pe(u,f);typeof p!="undefined"&&typeof l!="undefined"&&p.replaceWith(l)}}),e.pipe(He(1),m(()=>_e("container")),S(f=>Q("script",f)),Ir(f=>{let u=M("script");if(f.src){for(let p of f.getAttributeNames())u.setAttribute(p,f.getAttribute(p));return f.replaceWith(u),new F(p=>{u.onload=()=>p.complete()})}else return u.textContent=f.textContent,f.replaceWith(u),R})).subscribe(),A(i,s).pipe(ut(e)).subscribe(({url:f,offset:u})=>{f.hash&&!u?Io(f.hash):window.scrollTo(0,(u==null?void 0:u.y)||0)}),r.pipe(Mt(i),Re(250),J("offset")).subscribe(({offset:f})=>{history.replaceState(f,"")}),A(i,s).pipe(Ce(2,1),x(([f,u])=>f.url.pathname===u.url.pathname),m(([,f])=>f)).subscribe(({offset:f})=>{window.scrollTo(0,(f==null?void 0:f.y)||0)})}var As=Ye(tn());var Oi=Ye(tn());function rn(e,t){let r=new RegExp(e.separator,"img"),n=(o,i,s)=>`${i}${s}`;return o=>{o=o.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator})(${o.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return s=>(t?(0,Oi.default)(s):s).replace(i,n).replace(/<\/mark>(\s+)]*>/img,"$1")}}function _i(e){return e.split(/"([^"]+)"/g).map((t,r)=>r&1?t.replace(/^\b|^(?![^\x00-\x7F]|$)|\s+/g," +"):t).join("").replace(/"|(?:^|\s+)[*+\-:^~]+(?=\s+|$)/g,"").trim()}function bt(e){return e.type===1}function Ti(e){return e.type===2}function vt(e){return e.type===3}function Rs({config:e,docs:t}){e.lang.length===1&&e.lang[0]==="en"&&(e.lang=[re("search.config.lang")]),e.separator==="[\\s\\-]+"&&(e.separator=re("search.config.separator"));let n={pipeline:re("search.config.pipeline").split(/\s*,\s*/).filter(Boolean),suggestions:Z("search.suggest")};return{config:e,docs:t,options:n}}function Mi(e,t){let r=le(),n=new Worker(e),o=new E,i=Ko(n,{tx$:o}).pipe(m(s=>{if(vt(s))for(let a of s.data.items)for(let c of a)c.location=`${new URL(c.location,r.base)}`;return s}),ie());return ue(t).pipe(m(s=>({type:0,data:Rs(s)}))).subscribe(o.next.bind(o)),{tx$:o,rx$:i}}function Li({document$:e}){let t=le(),r=je(new URL("../versions.json",t.base)).pipe(ce(()=>R)),n=r.pipe(m(o=>{let[,i]=t.base.match(/([^/]+)\/?$/);return o.find(({version:s,aliases:a})=>s===i||a.includes(i))||o[0]}));r.pipe(m(o=>new Map(o.map(i=>[`${new URL(`../${i.version}/`,t.base)}`,i]))),S(o=>v(document.body,"click").pipe(x(i=>!i.metaKey&&!i.ctrlKey),ae(n),S(([i,s])=>{if(i.target instanceof Element){let a=i.target.closest("a");if(a&&!a.target&&o.has(a.href)){let c=a.href;return!i.target.closest(".md-version")&&o.get(c)===s?R:(i.preventDefault(),I(c))}}return R}),S(i=>{let{version:s}=o.get(i);return hr(new URL(i)).pipe(m(a=>{let f=Oe().href.replace(t.base,"");return a.includes(f.split("#")[0])?new URL(`../${s}/${f}`,t.base):new URL(i)}))})))).subscribe(o=>pr(o)),Y([r,n]).subscribe(([o,i])=>{K(".md-header__topic").appendChild(ei(o,i))}),e.pipe(S(()=>n)).subscribe(o=>{var s;let i=__md_get("__outdated",sessionStorage);if(i===null){let a=((s=t.version)==null?void 0:s.default)||"latest";i=!o.aliases.includes(a),__md_set("__outdated",i,sessionStorage)}if(i)for(let a of te("outdated"))a.hidden=!1})}function ks(e,{rx$:t}){let r=(__search==null?void 0:__search.transform)||_i,{searchParams:n}=Oe();n.has("q")&&Ke("search",!0);let o=t.pipe(x(bt),oe(1),m(()=>n.get("q")||""));dt("search").pipe(x(a=>!a),oe(1)).subscribe(()=>{let a=new URL(location.href);a.searchParams.delete("q"),history.replaceState({},"",`${a}`)}),o.subscribe(a=>{a&&(e.value=a,e.focus())});let i=nr(e),s=A(v(e,"keyup"),v(e,"focus").pipe(ke(1)),o).pipe(m(()=>r(e.value)),N(""),B());return Y([s,i]).pipe(m(([a,c])=>({value:a,focus:c})),X(1))}function Ai(e,{tx$:t,rx$:r}){let n=new E,o=n.pipe(de(1));return n.pipe(J("value"),m(({value:i})=>({type:2,data:i}))).subscribe(t.next.bind(t)),n.pipe(J("focus")).subscribe(({focus:i})=>{i?(Ke("search",i),e.placeholder=""):e.placeholder=re("search.placeholder")}),v(e.form,"reset").pipe(ee(o)).subscribe(()=>e.focus()),ks(e,{tx$:t,rx$:r}).pipe(w(i=>n.next(i)),C(()=>n.complete()),m(i=>H({ref:e},i)),ie())}function Ci(e,{rx$:t},{query$:r}){let n=new E,o=Ao(e.parentElement).pipe(x(Boolean)),i=K(":scope > :first-child",e),s=K(":scope > :last-child",e),a=t.pipe(x(bt),oe(1));return n.pipe(ae(r),Mt(a)).subscribe(([{items:f},{value:u}])=>{if(u)switch(f.length){case 0:i.textContent=re("search.result.none");break;case 1:i.textContent=re("search.result.one");break;default:i.textContent=re("search.result.other",lr(f.length))}else i.textContent=re("search.result.placeholder")}),n.pipe(w(()=>s.innerHTML=""),S(({items:f})=>A(I(...f.slice(0,10)),I(...f.slice(10)).pipe(Ce(4),Nr(o),S(([u])=>u))))).subscribe(f=>s.appendChild(Jo(f))),t.pipe(x(vt),m(({data:f})=>f)).pipe(w(f=>n.next(f)),C(()=>n.complete()),m(f=>H({ref:e},f)))}function Hs(e,{query$:t}){return t.pipe(m(({value:r})=>{let n=Oe();return n.hash="",n.searchParams.delete("h"),n.searchParams.set("q",r),{url:n}}))}function Ri(e,t){let r=new E;return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),v(e,"click").subscribe(n=>n.preventDefault()),Hs(e,t).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))}function ki(e,{rx$:t},{keyboard$:r}){let n=new E,o=_e("search-query"),i=A(v(o,"keydown"),v(o,"focus")).pipe(Le(fe),m(()=>o.value),B());return n.pipe(Ze(i),m(([{suggestions:a},c])=>{let f=c.split(/([\s-]+)/);if((a==null?void 0:a.length)&&f[f.length-1]){let u=a[a.length-1];u.startsWith(f[f.length-1])&&(f[f.length-1]=u)}else f.length=0;return f})).subscribe(a=>e.innerHTML=a.join("").replace(/\s/g," ")),r.pipe(x(({mode:a})=>a==="search")).subscribe(a=>{switch(a.type){case"ArrowRight":e.innerText.length&&o.selectionStart===o.value.length&&(o.value=e.innerText);break}}),t.pipe(x(vt),m(({data:a})=>a)).pipe(w(a=>n.next(a)),C(()=>n.complete()),m(()=>({ref:e})))}function Hi(e,{index$:t,keyboard$:r}){let n=le();try{let o=(__search==null?void 0:__search.worker)||n.search,i=Mi(o,t),s=_e("search-query",e),a=_e("search-result",e),{tx$:c,rx$:f}=i;c.pipe(x(Ti),ut(f.pipe(x(bt))),oe(1)).subscribe(c.next.bind(c)),r.pipe(x(({mode:l})=>l==="search")).subscribe(l=>{let d=Ie();switch(l.type){case"Enter":if(d===s){let h=new Map;for(let b of Q(":first-child [href]",a)){let U=b.firstElementChild;h.set(b,parseFloat(U.getAttribute("data-md-score")))}if(h.size){let[[b]]=[...h].sort(([,U],[,G])=>G-U);b.click()}l.claim()}break;case"Escape":case"Tab":Ke("search",!1),s.blur();break;case"ArrowUp":case"ArrowDown":if(typeof d=="undefined")s.focus();else{let h=[s,...Q(":not(details) > [href], summary, details[open] [href]",a)],b=Math.max(0,(Math.max(0,h.indexOf(d))+h.length+(l.type==="ArrowUp"?-1:1))%h.length);h[b].focus()}l.claim();break;default:s!==Ie()&&s.focus()}}),r.pipe(x(({mode:l})=>l==="global")).subscribe(l=>{switch(l.type){case"f":case"s":case"/":s.focus(),s.select(),l.claim();break}});let u=Ai(s,i),p=Ci(a,i,{query$:u});return A(u,p).pipe(et(...te("search-share",e).map(l=>Ri(l,{query$:u})),...te("search-suggest",e).map(l=>ki(l,i,{keyboard$:r}))))}catch(o){return e.hidden=!0,Se}}function Pi(e,{index$:t,location$:r}){return Y([t,r.pipe(N(Oe()),x(n=>!!n.searchParams.get("h")))]).pipe(m(([n,o])=>rn(n.config,!0)(o.searchParams.get("h"))),m(n=>{var s;let o=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let a=i.nextNode();a;a=i.nextNode())if((s=a.parentElement)!=null&&s.offsetHeight){let c=a.textContent,f=n(c);f.length>c.length&&o.set(a,f)}for(let[a,c]of o){let{childNodes:f}=M("span",null,c);a.replaceWith(...Array.from(f))}return{ref:e,nodes:o}}))}function Ps(e,{viewport$:t,main$:r}){let n=e.parentElement,o=n.offsetTop-n.parentElement.offsetTop;return Y([r,t]).pipe(m(([{offset:i,height:s},{offset:{y:a}}])=>(s=s+Math.min(o,Math.max(0,a-i))-o,{height:s,locked:a>=i+o})),B((i,s)=>i.height===s.height&&i.locked===s.locked))}function nn(e,n){var o=n,{header$:t}=o,r=un(o,["header$"]);let i=K(".md-sidebar__scrollwrap",e),{y:s}=qe(i);return P(()=>{let a=new E;return a.pipe(Ae(0,xe),ae(t)).subscribe({next([{height:c},{height:f}]){i.style.height=`${c-2*s}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),a.pipe(Le(xe),oe(1)).subscribe(()=>{for(let c of Q(".md-nav__link--active[href]",e)){let f=cr(c);if(typeof f!="undefined"){let u=c.offsetTop-f.offsetTop,{height:p}=he(f);f.scrollTo({top:u-p/2})}}}),Ps(e,r).pipe(w(c=>a.next(c)),C(()=>a.complete()),m(c=>H({ref:e},c)))})}function $i(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return _t(je(`${r}/releases/latest`).pipe(ce(()=>R),m(n=>({version:n.tag_name})),De({})),je(r).pipe(ce(()=>R),m(n=>({stars:n.stargazers_count,forks:n.forks_count})),De({}))).pipe(m(([n,o])=>H(H({},n),o)))}else{let r=`https://api.github.com/users/${e}`;return je(r).pipe(m(n=>({repositories:n.public_repos})),De({}))}}function Ii(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return je(r).pipe(ce(()=>R),m(({star_count:n,forks_count:o})=>({stars:n,forks:o})),De({}))}function ji(e){let t=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);if(t){let[,r,n]=t;return $i(r,n)}if(t=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i),t){let[,r,n]=t;return Ii(r,n)}return R}var $s;function Is(e){return $s||($s=P(()=>{let t=__md_get("__source",sessionStorage);if(t)return I(t);if(te("consent").length){let n=__md_get("__consent");if(!(n&&n.github))return R}return ji(e.href).pipe(w(n=>__md_set("__source",n,sessionStorage)))}).pipe(ce(()=>R),x(t=>Object.keys(t).length>0),m(t=>({facts:t})),X(1)))}function Fi(e){let t=K(":scope > :last-child",e);return P(()=>{let r=new E;return r.subscribe(({facts:n})=>{t.appendChild(Xo(n)),t.classList.add("md-source__repository--active")}),Is(e).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))})}function js(e,{viewport$:t,header$:r}){return ve(document.body).pipe(S(()=>dr(e,{header$:r,viewport$:t})),m(({offset:{y:n}})=>({hidden:n>=10})),J("hidden"))}function Ui(e,t){return P(()=>{let r=new E;return r.subscribe({next({hidden:n}){e.hidden=n},complete(){e.hidden=!1}}),(Z("navigation.tabs.sticky")?I({hidden:!1}):js(e,t)).pipe(w(n=>r.next(n)),C(()=>r.complete()),m(n=>H({ref:e},n)))})}function Fs(e,{viewport$:t,header$:r}){let n=new Map,o=Q("[href^=\\#]",e);for(let a of o){let c=decodeURIComponent(a.hash.substring(1)),f=pe(`[id="${c}"]`);typeof f!="undefined"&&n.set(a,f)}let i=r.pipe(J("height"),m(({height:a})=>{let c=_e("main"),f=K(":scope > :first-child",c);return a+.8*(f.offsetTop-c.offsetTop)}),ie());return ve(document.body).pipe(J("height"),S(a=>P(()=>{let c=[];return I([...n].reduce((f,[u,p])=>{for(;c.length&&n.get(c[c.length-1]).tagName>=p.tagName;)c.pop();let l=p.offsetTop;for(;!l&&p.parentElement;)p=p.parentElement,l=p.offsetTop;return f.set([...c=[...c,u]].reverse(),l)},new Map))}).pipe(m(c=>new Map([...c].sort(([,f],[,u])=>f-u))),Ze(i),S(([c,f])=>t.pipe(Ur(([u,p],{offset:{y:l},size:d})=>{let h=l+d.height>=Math.floor(a.height);for(;p.length;){let[,b]=p[0];if(b-f=l&&!h)p=[u.pop(),...p];else break}return[u,p]},[[],[...c]]),B((u,p)=>u[0]===p[0]&&u[1]===p[1])))))).pipe(m(([a,c])=>({prev:a.map(([f])=>f),next:c.map(([f])=>f)})),N({prev:[],next:[]}),Ce(2,1),m(([a,c])=>a.prev.length{let o=new E,i=o.pipe(de(1));if(o.subscribe(({prev:s,next:a})=>{for(let[c]of a)c.classList.remove("md-nav__link--passed"),c.classList.remove("md-nav__link--active");for(let[c,[f]]of s.entries())f.classList.add("md-nav__link--passed"),f.classList.toggle("md-nav__link--active",c===s.length-1)}),Z("toc.follow")){let s=A(t.pipe(Re(1),m(()=>{})),t.pipe(Re(250),m(()=>"smooth")));o.pipe(x(({prev:a})=>a.length>0),ae(s)).subscribe(([{prev:a},c])=>{let[f]=a[a.length-1];if(f.offsetHeight){let u=cr(f);if(typeof u!="undefined"){let p=f.offsetTop-u.offsetTop,{height:l}=he(u);u.scrollTo({top:p-l/2,behavior:c})}}})}return Z("navigation.tracking")&&t.pipe(ee(i),J("offset"),Re(250),He(1),ee(n.pipe(He(1))),Tt({delay:250}),ae(o)).subscribe(([,{prev:s}])=>{let a=Oe(),c=s[s.length-1];if(c&&c.length){let[f]=c,{hash:u}=new URL(f.href);a.hash!==u&&(a.hash=u,history.replaceState({},"",`${a}`))}else a.hash="",history.replaceState({},"",`${a}`)}),Fs(e,{viewport$:t,header$:r}).pipe(w(s=>o.next(s)),C(()=>o.complete()),m(s=>H({ref:e},s)))})}function Us(e,{viewport$:t,main$:r,target$:n}){let o=t.pipe(m(({offset:{y:s}})=>s),Ce(2,1),m(([s,a])=>s>a&&a>0),B()),i=r.pipe(m(({active:s})=>s));return Y([i,o]).pipe(m(([s,a])=>!(s&&a)),B(),ee(n.pipe(He(1))),Fr(!0),Tt({delay:250}),m(s=>({hidden:s})))}function Wi(e,{viewport$:t,header$:r,main$:n,target$:o}){let i=new E,s=i.pipe(de(1));return i.subscribe({next({hidden:a}){e.hidden=a,a?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(ee(s),J("height")).subscribe(({height:a})=>{e.style.top=`${a+16}px`}),Us(e,{viewport$:t,main$:n,target$:o}).pipe(w(a=>i.next(a)),C(()=>i.complete()),m(a=>H({ref:e},a)))}function Vi({document$:e,tablet$:t}){e.pipe(S(()=>Q(".md-toggle--indeterminate, [data-md-state=indeterminate]")),w(r=>{r.indeterminate=!0,r.checked=!1}),se(r=>v(r,"change").pipe(Wr(()=>r.classList.contains("md-toggle--indeterminate")),m(()=>r))),ae(t)).subscribe(([r,n])=>{r.classList.remove("md-toggle--indeterminate"),n&&(r.checked=!1)})}function Ds(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function zi({document$:e}){e.pipe(S(()=>Q("[data-md-scrollfix]")),w(t=>t.removeAttribute("data-md-scrollfix")),x(Ds),se(t=>v(t,"touchstart").pipe(m(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Ni({viewport$:e,tablet$:t}){Y([dt("search"),t]).pipe(m(([r,n])=>r&&!n),S(r=>I(r).pipe(ke(r?400:100))),ae(e)).subscribe(([r,{offset:{y:n}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${n}px`;else{let o=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",o&&window.scrollTo(0,o)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let n=e[r];typeof n=="string"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?t.insertBefore(this.previousSibling,n):t.replaceChild(n,this)}}}));document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var tt=go(),vr=ko(),gt=jo(),on=Ro(),we=qo(),gr=Kr("(min-width: 960px)"),Ki=Kr("(min-width: 1220px)"),Qi=Fo(),Yi=le(),Bi=document.forms.namedItem("search")?(__search==null?void 0:__search.index)||je(new URL("search/search_index.json",Yi.base)):Se,an=new E;wi({alert$:an});Z("navigation.instant")&&Ei({document$:tt,location$:vr,viewport$:we});var qi;((qi=Yi.version)==null?void 0:qi.provider)==="mike"&&Li({document$:tt});A(vr,gt).pipe(ke(125)).subscribe(()=>{Ke("drawer",!1),Ke("search",!1)});on.pipe(x(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=pe("[href][rel=prev]");typeof t!="undefined"&&t.click();break;case"n":case".":let r=pe("[href][rel=next]");typeof r!="undefined"&&r.click();break}});Vi({document$:tt,tablet$:gr});zi({document$:tt});Ni({viewport$:we,tablet$:gr});var Qe=bi(_e("header"),{viewport$:we}),br=tt.pipe(m(()=>_e("main")),S(e=>yi(e,{viewport$:we,header$:Qe})),X(1)),Ws=A(...te("consent").map(e=>Yo(e,{target$:gt})),...te("dialog").map(e=>hi(e,{alert$:an})),...te("header").map(e=>vi(e,{viewport$:we,header$:Qe,main$:br})),...te("palette").map(e=>xi(e)),...te("search").map(e=>Hi(e,{index$:Bi,keyboard$:on})),...te("source").map(e=>Fi(e))),Vs=P(()=>A(...te("announce").map(e=>Qo(e)),...te("content").map(e=>di(e,{viewport$:we,target$:gt,print$:Qi})),...te("content").map(e=>Z("search.highlight")?Pi(e,{index$:Bi,location$:vr}):R),...te("header-title").map(e=>gi(e,{viewport$:we,header$:Qe})),...te("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Qr(Ki,()=>nn(e,{viewport$:we,header$:Qe,main$:br})):Qr(gr,()=>nn(e,{viewport$:we,header$:Qe,main$:br}))),...te("tabs").map(e=>Ui(e,{viewport$:we,header$:Qe})),...te("toc").map(e=>Di(e,{viewport$:we,header$:Qe,target$:gt})),...te("top").map(e=>Wi(e,{viewport$:we,header$:Qe,main$:br,target$:gt})))),Gi=tt.pipe(S(()=>Vs),et(Ws),X(1));Gi.subscribe();window.document$=tt;window.location$=vr;window.target$=gt;window.keyboard$=on;window.viewport$=we;window.tablet$=gr;window.screen$=Ki;window.print$=Qi;window.alert$=an;window.component$=Gi;})(); +//# sourceMappingURL=bundle.5a2dcb6a.min.js.map diff --git a/assets/javascripts/bundle.d6c3db9e.min.js.map b/assets/javascripts/bundle.5a2dcb6a.min.js.map similarity index 99% rename from assets/javascripts/bundle.d6c3db9e.min.js.map rename to assets/javascripts/bundle.5a2dcb6a.min.js.map index d7449516ce..34e26a3ad3 100644 --- a/assets/javascripts/bundle.d6c3db9e.min.js.map +++ b/assets/javascripts/bundle.5a2dcb6a.min.js.map @@ -3,6 +3,6 @@ "sources": ["node_modules/focus-visible/dist/focus-visible.js", "node_modules/url-polyfill/url-polyfill.js", "node_modules/rxjs/node_modules/tslib/tslib.js", "node_modules/clipboard/dist/clipboard.js", "node_modules/escape-html/index.js", "node_modules/array-flat-polyfill/index.mjs", "src/assets/javascripts/bundle.ts", "node_modules/unfetch/polyfill/index.js", "node_modules/rxjs/node_modules/tslib/modules/index.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/fromEventPattern.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/catchError.ts", "node_modules/rxjs/src/internal/operators/scanInternals.ts", "node_modules/rxjs/src/internal/operators/combineLatest.ts", "node_modules/rxjs/src/internal/operators/combineLatestWith.ts", "node_modules/rxjs/src/internal/operators/concatMap.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/endWith.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/takeLast.ts", "node_modules/rxjs/src/internal/operators/merge.ts", "node_modules/rxjs/src/internal/operators/mergeWith.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/sample.ts", "node_modules/rxjs/src/internal/operators/scan.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/skip.ts", "node_modules/rxjs/src/internal/operators/skipUntil.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/takeWhile.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/throttle.ts", "node_modules/rxjs/src/internal/operators/throttleTime.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "node_modules/rxjs/src/internal/operators/zip.ts", "node_modules/rxjs/src/internal/operators/zipWith.ts", "src/assets/javascripts/browser/document/index.ts", "src/assets/javascripts/browser/element/_/index.ts", "src/assets/javascripts/browser/element/focus/index.ts", "src/assets/javascripts/browser/element/offset/_/index.ts", "src/assets/javascripts/browser/element/offset/content/index.ts", "node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js", "src/assets/javascripts/browser/element/size/_/index.ts", "src/assets/javascripts/browser/element/size/content/index.ts", "src/assets/javascripts/browser/element/visibility/index.ts", "src/assets/javascripts/browser/toggle/index.ts", "src/assets/javascripts/browser/keyboard/index.ts", "src/assets/javascripts/browser/location/_/index.ts", "src/assets/javascripts/utilities/h/index.ts", "src/assets/javascripts/utilities/string/index.ts", "src/assets/javascripts/browser/location/hash/index.ts", "src/assets/javascripts/browser/media/index.ts", "src/assets/javascripts/browser/request/index.ts", "src/assets/javascripts/browser/script/index.ts", "src/assets/javascripts/browser/viewport/offset/index.ts", "src/assets/javascripts/browser/viewport/size/index.ts", "src/assets/javascripts/browser/viewport/_/index.ts", "src/assets/javascripts/browser/viewport/at/index.ts", "src/assets/javascripts/browser/worker/index.ts", "src/assets/javascripts/_/index.ts", "src/assets/javascripts/components/_/index.ts", "src/assets/javascripts/components/announce/index.ts", "src/assets/javascripts/components/consent/index.ts", "src/assets/javascripts/components/content/code/_/index.ts", "src/assets/javascripts/templates/tooltip/index.tsx", "src/assets/javascripts/templates/annotation/index.tsx", "src/assets/javascripts/templates/clipboard/index.tsx", "src/assets/javascripts/templates/search/index.tsx", "src/assets/javascripts/templates/source/index.tsx", "src/assets/javascripts/templates/tabbed/index.tsx", "src/assets/javascripts/templates/table/index.tsx", "src/assets/javascripts/templates/version/index.tsx", "src/assets/javascripts/components/content/annotation/_/index.ts", "src/assets/javascripts/components/content/annotation/list/index.ts", "src/assets/javascripts/components/content/code/mermaid/index.ts", "src/assets/javascripts/components/content/details/index.ts", "src/assets/javascripts/components/content/table/index.ts", "src/assets/javascripts/components/content/tabs/index.ts", "src/assets/javascripts/components/content/_/index.ts", "src/assets/javascripts/components/dialog/index.ts", "src/assets/javascripts/components/header/_/index.ts", "src/assets/javascripts/components/header/title/index.ts", "src/assets/javascripts/components/main/index.ts", "src/assets/javascripts/components/palette/index.ts", "src/assets/javascripts/integrations/clipboard/index.ts", "src/assets/javascripts/integrations/sitemap/index.ts", "src/assets/javascripts/integrations/instant/index.ts", "src/assets/javascripts/integrations/search/document/index.ts", "src/assets/javascripts/integrations/search/highlighter/index.ts", "src/assets/javascripts/integrations/search/query/transform/index.ts", "src/assets/javascripts/integrations/search/worker/message/index.ts", "src/assets/javascripts/integrations/search/worker/_/index.ts", "src/assets/javascripts/integrations/version/index.ts", "src/assets/javascripts/components/search/query/index.ts", "src/assets/javascripts/components/search/result/index.ts", "src/assets/javascripts/components/search/share/index.ts", "src/assets/javascripts/components/search/suggest/index.ts", "src/assets/javascripts/components/search/_/index.ts", "src/assets/javascripts/components/search/highlight/index.ts", "src/assets/javascripts/components/sidebar/index.ts", "src/assets/javascripts/components/source/facts/github/index.ts", "src/assets/javascripts/components/source/facts/gitlab/index.ts", "src/assets/javascripts/components/source/facts/_/index.ts", "src/assets/javascripts/components/source/_/index.ts", "src/assets/javascripts/components/tabs/index.ts", "src/assets/javascripts/components/toc/index.ts", "src/assets/javascripts/components/top/index.ts", "src/assets/javascripts/patches/indeterminate/index.ts", "src/assets/javascripts/patches/scrollfix/index.ts", "src/assets/javascripts/patches/scrolllock/index.ts", "src/assets/javascripts/polyfills/index.ts"], "sourceRoot": "../../../..", "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n", "(function(global) {\r\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\r\n\r\n var checkIfIteratorIsSupported = function() {\r\n try {\r\n return !!Symbol.iterator;\r\n } catch (error) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n var createIterator = function(items) {\r\n var iterator = {\r\n next: function() {\r\n var value = items.shift();\r\n return { done: value === void 0, value: value };\r\n }\r\n };\r\n\r\n if (iteratorSupported) {\r\n iterator[Symbol.iterator] = function() {\r\n return iterator;\r\n };\r\n }\r\n\r\n return iterator;\r\n };\r\n\r\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\r\n var serializeParam = function(value) {\r\n return encodeURIComponent(value).replace(/%20/g, '+');\r\n };\r\n\r\n var deserializeParam = function(value) {\r\n return decodeURIComponent(String(value).replace(/\\+/g, ' '));\r\n };\r\n\r\n var polyfillURLSearchParams = function() {\r\n\r\n var URLSearchParams = function(searchString) {\r\n Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n var typeofSearchString = typeof searchString;\r\n\r\n if (typeofSearchString === 'undefined') {\r\n // do nothing\r\n } else if (typeofSearchString === 'string') {\r\n if (searchString !== '') {\r\n this._fromString(searchString);\r\n }\r\n } else if (searchString instanceof URLSearchParams) {\r\n var _this = this;\r\n searchString.forEach(function(value, name) {\r\n _this.append(name, value);\r\n });\r\n } else if ((searchString !== null) && (typeofSearchString === 'object')) {\r\n if (Object.prototype.toString.call(searchString) === '[object Array]') {\r\n for (var i = 0; i < searchString.length; i++) {\r\n var entry = searchString[i];\r\n if ((Object.prototype.toString.call(entry) === '[object Array]') || (entry.length !== 2)) {\r\n this.append(entry[0], entry[1]);\r\n } else {\r\n throw new TypeError('Expected [string, any] as entry at index ' + i + ' of URLSearchParams\\'s input');\r\n }\r\n }\r\n } else {\r\n for (var key in searchString) {\r\n if (searchString.hasOwnProperty(key)) {\r\n this.append(key, searchString[key]);\r\n }\r\n }\r\n }\r\n } else {\r\n throw new TypeError('Unsupported input\\'s type for URLSearchParams');\r\n }\r\n };\r\n\r\n var proto = URLSearchParams.prototype;\r\n\r\n proto.append = function(name, value) {\r\n if (name in this._entries) {\r\n this._entries[name].push(String(value));\r\n } else {\r\n this._entries[name] = [String(value)];\r\n }\r\n };\r\n\r\n proto.delete = function(name) {\r\n delete this._entries[name];\r\n };\r\n\r\n proto.get = function(name) {\r\n return (name in this._entries) ? this._entries[name][0] : null;\r\n };\r\n\r\n proto.getAll = function(name) {\r\n return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n };\r\n\r\n proto.has = function(name) {\r\n return (name in this._entries);\r\n };\r\n\r\n proto.set = function(name, value) {\r\n this._entries[name] = [String(value)];\r\n };\r\n\r\n proto.forEach = function(callback, thisArg) {\r\n var entries;\r\n for (var name in this._entries) {\r\n if (this._entries.hasOwnProperty(name)) {\r\n entries = this._entries[name];\r\n for (var i = 0; i < entries.length; i++) {\r\n callback.call(thisArg, entries[i], name, this);\r\n }\r\n }\r\n }\r\n };\r\n\r\n proto.keys = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push(name);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.values = function() {\r\n var items = [];\r\n this.forEach(function(value) {\r\n items.push(value);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n proto.entries = function() {\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n });\r\n return createIterator(items);\r\n };\r\n\r\n if (iteratorSupported) {\r\n proto[Symbol.iterator] = proto.entries;\r\n }\r\n\r\n proto.toString = function() {\r\n var searchArray = [];\r\n this.forEach(function(value, name) {\r\n searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n });\r\n return searchArray.join('&');\r\n };\r\n\r\n\r\n global.URLSearchParams = URLSearchParams;\r\n };\r\n\r\n var checkIfURLSearchParamsSupported = function() {\r\n try {\r\n var URLSearchParams = global.URLSearchParams;\r\n\r\n return (\r\n (new URLSearchParams('?a=1').toString() === 'a=1') &&\r\n (typeof URLSearchParams.prototype.set === 'function') &&\r\n (typeof URLSearchParams.prototype.entries === 'function')\r\n );\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n if (!checkIfURLSearchParamsSupported()) {\r\n polyfillURLSearchParams();\r\n }\r\n\r\n var proto = global.URLSearchParams.prototype;\r\n\r\n if (typeof proto.sort !== 'function') {\r\n proto.sort = function() {\r\n var _this = this;\r\n var items = [];\r\n this.forEach(function(value, name) {\r\n items.push([name, value]);\r\n if (!_this._entries) {\r\n _this.delete(name);\r\n }\r\n });\r\n items.sort(function(a, b) {\r\n if (a[0] < b[0]) {\r\n return -1;\r\n } else if (a[0] > b[0]) {\r\n return +1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n if (_this._entries) { // force reset because IE keeps keys index\r\n _this._entries = {};\r\n }\r\n for (var i = 0; i < items.length; i++) {\r\n this.append(items[i][0], items[i][1]);\r\n }\r\n };\r\n }\r\n\r\n if (typeof proto._fromString !== 'function') {\r\n Object.defineProperty(proto, '_fromString', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function(searchString) {\r\n if (this._entries) {\r\n this._entries = {};\r\n } else {\r\n var keys = [];\r\n this.forEach(function(value, name) {\r\n keys.push(name);\r\n });\r\n for (var i = 0; i < keys.length; i++) {\r\n this.delete(keys[i]);\r\n }\r\n }\r\n\r\n searchString = searchString.replace(/^\\?/, '');\r\n var attributes = searchString.split('&');\r\n var attribute;\r\n for (var i = 0; i < attributes.length; i++) {\r\n attribute = attributes[i].split('=');\r\n this.append(\r\n deserializeParam(attribute[0]),\r\n (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n );\r\n }\r\n }\r\n });\r\n }\r\n\r\n // HTMLAnchorElement\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\r\n\r\n var checkIfURLIsSupported = function() {\r\n try {\r\n var u = new global.URL('b', 'http://a');\r\n u.pathname = 'c d';\r\n return (u.href === 'http://a/c%20d') && u.searchParams;\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n\r\n\r\n var polyfillURL = function() {\r\n var _URL = global.URL;\r\n\r\n var URL = function(url, base) {\r\n if (typeof url !== 'string') url = String(url);\r\n if (base && typeof base !== 'string') base = String(base);\r\n\r\n // Only create another document if the base is different from current location.\r\n var doc = document, baseElement;\r\n if (base && (global.location === void 0 || base !== global.location.href)) {\r\n base = base.toLowerCase();\r\n doc = document.implementation.createHTMLDocument('');\r\n baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n try {\r\n if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n } catch (err) {\r\n throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n }\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n if (baseElement) {\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\r\n }\r\n\r\n var inputElement = doc.createElement('input');\r\n inputElement.type = 'url';\r\n inputElement.value = url;\r\n\r\n if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href) || (!inputElement.checkValidity() && !base)) {\r\n throw new TypeError('Invalid URL');\r\n }\r\n\r\n Object.defineProperty(this, '_anchorElement', {\r\n value: anchorElement\r\n });\r\n\r\n\r\n // create a linked searchParams which reflect its changes on URL\r\n var searchParams = new global.URLSearchParams(this.search);\r\n var enableSearchUpdate = true;\r\n var enableSearchParamsUpdate = true;\r\n var _this = this;\r\n ['append', 'delete', 'set'].forEach(function(methodName) {\r\n var method = searchParams[methodName];\r\n searchParams[methodName] = function() {\r\n method.apply(searchParams, arguments);\r\n if (enableSearchUpdate) {\r\n enableSearchParamsUpdate = false;\r\n _this.search = searchParams.toString();\r\n enableSearchParamsUpdate = true;\r\n }\r\n };\r\n });\r\n\r\n Object.defineProperty(this, 'searchParams', {\r\n value: searchParams,\r\n enumerable: true\r\n });\r\n\r\n var search = void 0;\r\n Object.defineProperty(this, '_updateSearchParams', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: function() {\r\n if (this.search !== search) {\r\n search = this.search;\r\n if (enableSearchParamsUpdate) {\r\n enableSearchUpdate = false;\r\n this.searchParams._fromString(this.search);\r\n enableSearchUpdate = true;\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n var proto = URL.prototype;\r\n\r\n var linkURLWithAnchorAttribute = function(attributeName) {\r\n Object.defineProperty(proto, attributeName, {\r\n get: function() {\r\n return this._anchorElement[attributeName];\r\n },\r\n set: function(value) {\r\n this._anchorElement[attributeName] = value;\r\n },\r\n enumerable: true\r\n });\r\n };\r\n\r\n ['hash', 'host', 'hostname', 'port', 'protocol']\r\n .forEach(function(attributeName) {\r\n linkURLWithAnchorAttribute(attributeName);\r\n });\r\n\r\n Object.defineProperty(proto, 'search', {\r\n get: function() {\r\n return this._anchorElement['search'];\r\n },\r\n set: function(value) {\r\n this._anchorElement['search'] = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n });\r\n\r\n Object.defineProperties(proto, {\r\n\r\n 'toString': {\r\n get: function() {\r\n var _this = this;\r\n return function() {\r\n return _this.href;\r\n };\r\n }\r\n },\r\n\r\n 'href': {\r\n get: function() {\r\n return this._anchorElement.href.replace(/\\?$/, '');\r\n },\r\n set: function(value) {\r\n this._anchorElement.href = value;\r\n this._updateSearchParams();\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'pathname': {\r\n get: function() {\r\n return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n },\r\n set: function(value) {\r\n this._anchorElement.pathname = value;\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'origin': {\r\n get: function() {\r\n // get expected port from protocol\r\n var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n // add port to origin if, expected port is different than actual port\r\n // and it is not empty f.e http://foo:8080\r\n // 8080 != 80 && 8080 != ''\r\n var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n this._anchorElement.port !== '';\r\n\r\n return this._anchorElement.protocol +\r\n '//' +\r\n this._anchorElement.hostname +\r\n (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'password': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n\r\n 'username': { // TODO\r\n get: function() {\r\n return '';\r\n },\r\n set: function(value) {\r\n },\r\n enumerable: true\r\n },\r\n });\r\n\r\n URL.createObjectURL = function(blob) {\r\n return _URL.createObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n URL.revokeObjectURL = function(url) {\r\n return _URL.revokeObjectURL.apply(_URL, arguments);\r\n };\r\n\r\n global.URL = URL;\r\n\r\n };\r\n\r\n if (!checkIfURLIsSupported()) {\r\n polyfillURL();\r\n }\r\n\r\n if ((global.location !== void 0) && !('origin' in global.location)) {\r\n var getOrigin = function() {\r\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n };\r\n\r\n try {\r\n Object.defineProperty(global.location, 'origin', {\r\n get: getOrigin,\r\n enumerable: true\r\n });\r\n } catch (e) {\r\n setInterval(function() {\r\n global.location.origin = getOrigin();\r\n }, 100);\r\n }\r\n }\r\n\r\n})(\r\n (typeof global !== 'undefined') ? global\r\n : ((typeof window !== 'undefined') ? window\r\n : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __createBinding;\r\n(function (factory) {\r\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n if (typeof define === \"function\" && define.amd) {\r\n define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n }\r\n else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n factory(createExporter(root, createExporter(module.exports)));\r\n }\r\n else {\r\n factory(createExporter(root));\r\n }\r\n function createExporter(exports, previous) {\r\n if (exports !== root) {\r\n if (typeof Object.create === \"function\") {\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n }\r\n else {\r\n exports.__esModule = true;\r\n }\r\n }\r\n return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n }\r\n})\r\n(function (exporter) {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n __extends = function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n\r\n __assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n\r\n __rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n };\r\n\r\n __decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n };\r\n\r\n __param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n };\r\n\r\n __metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n };\r\n\r\n __awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n };\r\n\r\n __generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n };\r\n\r\n __exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n };\r\n\r\n __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n }) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n });\r\n\r\n __values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n };\r\n\r\n __read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n };\r\n\r\n __spreadArray = function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n };\r\n\r\n __await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n };\r\n\r\n __asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n };\r\n\r\n __asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n };\r\n\r\n __asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n };\r\n\r\n __makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n };\r\n\r\n var __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n }) : function(o, v) {\r\n o[\"default\"] = v;\r\n };\r\n\r\n __importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n\r\n __importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n };\r\n\r\n __classPrivateFieldGet = function (receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n };\r\n\r\n __classPrivateFieldSet = function (receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n };\r\n\r\n exporter(\"__extends\", __extends);\r\n exporter(\"__assign\", __assign);\r\n exporter(\"__rest\", __rest);\r\n exporter(\"__decorate\", __decorate);\r\n exporter(\"__param\", __param);\r\n exporter(\"__metadata\", __metadata);\r\n exporter(\"__awaiter\", __awaiter);\r\n exporter(\"__generator\", __generator);\r\n exporter(\"__exportStar\", __exportStar);\r\n exporter(\"__createBinding\", __createBinding);\r\n exporter(\"__values\", __values);\r\n exporter(\"__read\", __read);\r\n exporter(\"__spread\", __spread);\r\n exporter(\"__spreadArrays\", __spreadArrays);\r\n exporter(\"__spreadArray\", __spreadArray);\r\n exporter(\"__await\", __await);\r\n exporter(\"__asyncGenerator\", __asyncGenerator);\r\n exporter(\"__asyncDelegator\", __asyncDelegator);\r\n exporter(\"__asyncValues\", __asyncValues);\r\n exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n exporter(\"__importStar\", __importStar);\r\n exporter(\"__importDefault\", __importDefault);\r\n exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n});\r\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00A9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", "Array.prototype.flat||Object.defineProperty(Array.prototype,\"flat\",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,\"flatMap\",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"array-flat-polyfill\"\nimport \"focus-visible\"\nimport \"unfetch/polyfill\"\nimport \"url-polyfill\"\n\nimport {\n EMPTY,\n NEVER,\n Subject,\n defer,\n delay,\n filter,\n map,\n merge,\n mergeWith,\n shareReplay,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"./_\"\nimport {\n at,\n getOptionalElement,\n requestJSON,\n setToggle,\n watchDocument,\n watchKeyboard,\n watchLocation,\n watchLocationTarget,\n watchMedia,\n watchPrint,\n watchViewport\n} from \"./browser\"\nimport {\n getComponentElement,\n getComponentElements,\n mountAnnounce,\n mountBackToTop,\n mountConsent,\n mountContent,\n mountDialog,\n mountHeader,\n mountHeaderTitle,\n mountPalette,\n mountSearch,\n mountSearchHiglight,\n mountSidebar,\n mountSource,\n mountTableOfContents,\n mountTabs,\n watchHeader,\n watchMain\n} from \"./components\"\nimport {\n SearchIndex,\n setupClipboardJS,\n setupInstantLoading,\n setupVersionSelector\n} from \"./integrations\"\nimport {\n patchIndeterminate,\n patchScrollfix,\n patchScrolllock\n} from \"./patches\"\nimport \"./polyfills\"\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Yay, JavaScript is available */\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Set up navigation observables and subjects */\nconst document$ = watchDocument()\nconst location$ = watchLocation()\nconst target$ = watchLocationTarget()\nconst keyboard$ = watchKeyboard()\n\n/* Set up media observables */\nconst viewport$ = watchViewport()\nconst tablet$ = watchMedia(\"(min-width: 960px)\")\nconst screen$ = watchMedia(\"(min-width: 1220px)\")\nconst print$ = watchPrint()\n\n/* Retrieve search index, if search is enabled */\nconst config = configuration()\nconst index$ = document.forms.namedItem(\"search\")\n ? __search?.index || requestJSON(\n new URL(\"search/search_index.json\", config.base)\n )\n : NEVER\n\n/* Set up Clipboard.js integration */\nconst alert$ = new Subject()\nsetupClipboardJS({ alert$ })\n\n/* Set up instant loading, if enabled */\nif (feature(\"navigation.instant\"))\n setupInstantLoading({ document$, location$, viewport$ })\n\n/* Set up version selector */\nif (config.version?.provider === \"mike\")\n setupVersionSelector({ document$ })\n\n/* Always close drawer and search on navigation */\nmerge(location$, target$)\n .pipe(\n delay(125)\n )\n .subscribe(() => {\n setToggle(\"drawer\", false)\n setToggle(\"search\", false)\n })\n\n/* Set up global keyboard handlers */\nkeyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Go to previous page */\n case \"p\":\n case \",\":\n const prev = getOptionalElement(\"[href][rel=prev]\")\n if (typeof prev !== \"undefined\")\n prev.click()\n break\n\n /* Go to next page */\n case \"n\":\n case \".\":\n const next = getOptionalElement(\"[href][rel=next]\")\n if (typeof next !== \"undefined\")\n next.click()\n break\n }\n })\n\n/* Set up patches */\npatchIndeterminate({ document$, tablet$ })\npatchScrollfix({ document$ })\npatchScrolllock({ viewport$, tablet$ })\n\n/* Set up header and main area observable */\nconst header$ = watchHeader(getComponentElement(\"header\"), { viewport$ })\nconst main$ = document$\n .pipe(\n map(() => getComponentElement(\"main\")),\n switchMap(el => watchMain(el, { viewport$, header$ })),\n shareReplay(1)\n )\n\n/* Set up control component observables */\nconst control$ = merge(\n\n /* Consent */\n ...getComponentElements(\"consent\")\n .map(el => mountConsent(el, { target$ })),\n\n /* Dialog */\n ...getComponentElements(\"dialog\")\n .map(el => mountDialog(el, { alert$ })),\n\n /* Header */\n ...getComponentElements(\"header\")\n .map(el => mountHeader(el, { viewport$, header$, main$ })),\n\n /* Color palette */\n ...getComponentElements(\"palette\")\n .map(el => mountPalette(el)),\n\n /* Search */\n ...getComponentElements(\"search\")\n .map(el => mountSearch(el, { index$, keyboard$ })),\n\n /* Repository information */\n ...getComponentElements(\"source\")\n .map(el => mountSource(el))\n)\n\n/* Set up content component observables */\nconst content$ = defer(() => merge(\n\n /* Announcement bar */\n ...getComponentElements(\"announce\")\n .map(el => mountAnnounce(el)),\n\n /* Content */\n ...getComponentElements(\"content\")\n .map(el => mountContent(el, { viewport$, target$, print$ })),\n\n /* Search highlighting */\n ...getComponentElements(\"content\")\n .map(el => feature(\"search.highlight\")\n ? mountSearchHiglight(el, { index$, location$ })\n : EMPTY\n ),\n\n /* Header title */\n ...getComponentElements(\"header-title\")\n .map(el => mountHeaderTitle(el, { viewport$, header$ })),\n\n /* Sidebar */\n ...getComponentElements(\"sidebar\")\n .map(el => el.getAttribute(\"data-md-type\") === \"navigation\"\n ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))\n : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))\n ),\n\n /* Navigation tabs */\n ...getComponentElements(\"tabs\")\n .map(el => mountTabs(el, { viewport$, header$ })),\n\n /* Table of contents */\n ...getComponentElements(\"toc\")\n .map(el => mountTableOfContents(el, { viewport$, header$, target$ })),\n\n /* Back-to-top button */\n ...getComponentElements(\"top\")\n .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))\n))\n\n/* Set up component observables */\nconst component$ = document$\n .pipe(\n switchMap(() => content$),\n mergeWith(control$),\n shareReplay(1)\n )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n\n/* ----------------------------------------------------------------------------\n * Exports\n * ------------------------------------------------------------------------- */\n\nwindow.document$ = document$ /* Document observable */\nwindow.location$ = location$ /* Location subject */\nwindow.target$ = target$ /* Location target observable */\nwindow.keyboard$ = keyboard$ /* Keyboard observable */\nwindow.viewport$ = viewport$ /* Viewport observable */\nwindow.tablet$ = tablet$ /* Media tablet observable */\nwindow.screen$ = screen$ /* Media screen observable */\nwindow.print$ = print$ /* Media print observable */\nwindow.alert$ = alert$ /* Alert subject */\nwindow.component$ = component$ /* Component observable */\n", "self.fetch||(self.fetch=function(e,n){return n=n||{},new Promise(function(t,s){var r=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(r.status/100|0),statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){return Promise.resolve(r.responseText)},json:function(){return Promise.resolve(r.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([r.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var c in r.open(n.method||\"get\",e,!0),r.onload=function(){r.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},r.onerror=s,r.withCredentials=\"include\"==n.credentials,n.headers)r.setRequestHeader(c,n.headers[c]);r.send(n.body||null)})});\n", "import tslib from '../tslib.js';\r\nconst {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __exportStar,\r\n __createBinding,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n} = tslib;\r\nexport {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __exportStar,\r\n __createBinding,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n};\r\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ReplaySubject,\n Subject,\n fromEvent\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * Documents are implemented as subjects, so all downstream observables are\n * automatically updated when a new document is emitted.\n *\n * @returns Document subject\n */\nexport function watchDocument(): Subject {\n const document$ = new ReplaySubject(1)\n fromEvent(document, \"DOMContentLoaded\", { once: true })\n .subscribe(() => document$.next(document))\n\n /* Return document */\n return document$\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getElements(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T][]\n\nexport function getElements(\n selector: string, node?: ParentNode\n): T[]\n\nexport function getElements(\n selector: string, node: ParentNode = document\n): T[] {\n return Array.from(node.querySelectorAll(selector))\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * Note that this function assumes that the element is present. If unsure if an\n * element is existent, use the `getOptionalElement` function instead.\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getElement(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T]\n\nexport function getElement(\n selector: string, node?: ParentNode\n): T\n\nexport function getElement(\n selector: string, node: ParentNode = document\n): T {\n const el = getOptionalElement(selector, node)\n if (typeof el === \"undefined\")\n throw new ReferenceError(\n `Missing element: expected \"${selector}\" to be present`\n )\n\n /* Return element */\n return el\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an optional element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element or nothing\n */\nexport function getOptionalElement(\n selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T] | undefined\n\nexport function getOptionalElement(\n selector: string, node?: ParentNode\n): T | undefined\n\nexport function getOptionalElement(\n selector: string, node: ParentNode = document\n): T | undefined {\n return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve the currently active element\n *\n * @returns Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement || undefined\n : undefined\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n debounceTime,\n distinctUntilChanged,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * Previously, this function used `focus` and `blur` events to determine whether\n * an element is focused, but this doesn't work if there are focusable elements\n * within the elements itself. A better solutions are `focusin` and `focusout`\n * events, which bubble up the tree and allow for more fine-grained control.\n *\n * `debounceTime` is necessary, because when a focus change happens inside an\n * element, the observable would first emit `false` and then `true` again.\n *\n * @param el - Element\n *\n * @returns Element focus observable\n */\nexport function watchElementFocus(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(document.body, \"focusin\"),\n fromEvent(document.body, \"focusout\")\n )\n .pipe(\n debounceTime(1),\n map(() => {\n const active = getActiveElement()\n return typeof active !== \"undefined\"\n ? el.contains(active)\n : false\n }),\n startWith(el === getActiveElement()),\n distinctUntilChanged()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n animationFrameScheduler,\n auditTime,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @returns Element offset\n */\nexport function getElementOffset(\n el: HTMLElement\n): ElementOffset {\n return {\n x: el.offsetLeft,\n y: el.offsetTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @returns Element offset observable\n */\nexport function watchElementOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(window, \"load\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n auditTime(0, animationFrameScheduler),\n map(() => getElementOffset(el)),\n startWith(getElementOffset(el))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n animationFrameScheduler,\n auditTime,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\nimport { ElementOffset } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content offset (= scroll offset)\n *\n * @param el - Element\n *\n * @returns Element content offset\n */\nexport function getElementContentOffset(\n el: HTMLElement\n): ElementOffset {\n return {\n x: el.scrollLeft,\n y: el.scrollTop\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element content offset\n *\n * @param el - Element\n *\n * @returns Element content offset observable\n */\nexport function watchElementContentOffset(\n el: HTMLElement\n): Observable {\n return merge(\n fromEvent(el, \"scroll\"),\n fromEvent(window, \"resize\")\n )\n .pipe(\n auditTime(0, animationFrameScheduler),\n map(() => getElementContentOffset(el)),\n startWith(getElementContentOffset(el))\n )\n}\n", "/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ResizeObserver from \"resize-observer-polyfill\"\nimport {\n NEVER,\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n of,\n shareReplay,\n startWith,\n switchMap,\n tap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementSize {\n width: number /* Element width */\n height: number /* Element height */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Resize observer entry subject\n */\nconst entry$ = new Subject()\n\n/**\n * Resize observer observable\n *\n * This observable will create a `ResizeObserver` on the first subscription\n * and will automatically terminate it when there are no more subscribers.\n * It's quite important to centralize observation in a single `ResizeObserver`,\n * as the performance difference can be quite dramatic, as the link shows.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n new ResizeObserver(entries => {\n for (const entry of entries)\n entry$.next(entry)\n })\n))\n .pipe(\n switchMap(observer => merge(NEVER, of(observer))\n .pipe(\n finalize(() => observer.disconnect())\n )\n ),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element size\n *\n * @param el - Element\n *\n * @returns Element size\n */\nexport function getElementSize(\n el: HTMLElement\n): ElementSize {\n return {\n width: el.offsetWidth,\n height: el.offsetHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element size\n *\n * This function returns an observable that subscribes to a single internal\n * instance of `ResizeObserver` upon subscription, and emit resize events until\n * termination. Note that this function should not be called with the same\n * element twice, as the first unsubscription will terminate observation.\n *\n * Sadly, we can't use the `DOMRect` objects returned by the observer, because\n * we need the emitted values to be consistent with `getElementSize`, which will\n * return the used values (rounded) and not actual values (unrounded). Thus, we\n * use the `offset*` properties. See the linked GitHub issue.\n *\n * @see https://bit.ly/3m0k3he - GitHub issue\n *\n * @param el - Element\n *\n * @returns Element size observable\n */\nexport function watchElementSize(\n el: HTMLElement\n): Observable {\n return observer$\n .pipe(\n tap(observer => observer.observe(el)),\n switchMap(observer => entry$\n .pipe(\n filter(({ target }) => target === el),\n finalize(() => observer.unobserve(el)),\n map(() => getElementSize(el))\n )\n ),\n startWith(getElementSize(el))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ElementSize } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content size (= scroll width and height)\n *\n * @param el - Element\n *\n * @returns Element content size\n */\nexport function getElementContentSize(\n el: HTMLElement\n): ElementSize {\n return {\n width: el.scrollWidth,\n height: el.scrollHeight\n }\n}\n\n/**\n * Retrieve the overflowing container of an element, if any\n *\n * @param el - Element\n *\n * @returns Overflowing container or nothing\n */\nexport function getElementContainer(\n el: HTMLElement\n): HTMLElement | undefined {\n let parent = el.parentElement\n while (parent)\n if (\n el.scrollWidth <= parent.scrollWidth &&\n el.scrollHeight <= parent.scrollHeight\n )\n parent = (el = parent).parentElement\n else\n break\n\n /* Return overflowing container */\n return parent ? el : undefined\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n Observable,\n Subject,\n defer,\n distinctUntilChanged,\n filter,\n finalize,\n map,\n merge,\n of,\n shareReplay,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport {\n getElementContentSize,\n getElementSize,\n watchElementContentOffset\n} from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Intersection observer entry subject\n */\nconst entry$ = new Subject()\n\n/**\n * Intersection observer observable\n *\n * This observable will create an `IntersectionObserver` on first subscription\n * and will automatically terminate it when there are no more subscribers.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n new IntersectionObserver(entries => {\n for (const entry of entries)\n entry$.next(entry)\n }, {\n threshold: 0\n })\n))\n .pipe(\n switchMap(observer => merge(NEVER, of(observer))\n .pipe(\n finalize(() => observer.disconnect())\n )\n ),\n shareReplay(1)\n )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element visibility\n *\n * @param el - Element\n *\n * @returns Element visibility observable\n */\nexport function watchElementVisibility(\n el: HTMLElement\n): Observable {\n return observer$\n .pipe(\n tap(observer => observer.observe(el)),\n switchMap(observer => entry$\n .pipe(\n filter(({ target }) => target === el),\n finalize(() => observer.unobserve(el)),\n map(({ isIntersecting }) => isIntersecting)\n )\n )\n )\n}\n\n/**\n * Watch element boundary\n *\n * This function returns an observable which emits whether the bottom content\n * boundary (= scroll offset) of an element is within a certain threshold.\n *\n * @param el - Element\n * @param threshold - Threshold\n *\n * @returns Element boundary observable\n */\nexport function watchElementBoundary(\n el: HTMLElement, threshold = 16\n): Observable {\n return watchElementContentOffset(el)\n .pipe(\n map(({ y }) => {\n const visible = getElementSize(el)\n const content = getElementContentSize(el)\n return y >= (\n content.height - visible.height - threshold\n )\n }),\n distinctUntilChanged()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n startWith\n} from \"rxjs\"\n\nimport { getElement } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n | \"drawer\" /* Toggle for drawer */\n | \"search\" /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n drawer: getElement(\"[data-md-toggle=drawer]\"),\n search: getElement(\"[data-md-toggle=search]\")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n if (toggles[name].checked !== value)\n toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n const el = toggles[name]\n return fromEvent(el, \"change\")\n .pipe(\n map(() => el.checked),\n startWith(el.checked)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n share\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../element\"\nimport { getToggle } from \"../toggle\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n | \"global\" /* Global */\n | \"search\" /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard {\n mode: KeyboardMode /* Keyboard mode */\n type: string /* Key type */\n claim(): void /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n * @param type - Key type\n *\n * @returns Test result\n */\nfunction isSusceptibleToKeyboard(\n el: HTMLElement, type: string\n): boolean {\n switch (el.constructor) {\n\n /* Input elements */\n case HTMLInputElement:\n /* @ts-expect-error - omit unnecessary type cast */\n if (el.type === \"radio\")\n return /^Arrow/.test(type)\n else\n return true\n\n /* Select element and textarea */\n case HTMLSelectElement:\n case HTMLTextAreaElement:\n return true\n\n /* Everything else */\n default:\n return el.isContentEditable\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @returns Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n return fromEvent(window, \"keydown\")\n .pipe(\n filter(ev => !(ev.metaKey || ev.ctrlKey)),\n map(ev => ({\n mode: getToggle(\"search\") ? \"search\" : \"global\",\n type: ev.key,\n claim() {\n ev.preventDefault()\n ev.stopPropagation()\n }\n } as Keyboard)),\n filter(({ mode, type }) => {\n if (mode === \"global\") {\n const active = getActiveElement()\n if (typeof active !== \"undefined\")\n return !isSusceptibleToKeyboard(active, type)\n }\n return true\n }),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function returns a `URL` object (and not `Location`) to normalize the\n * typings across the application. Furthermore, locations need to be tracked\n * without setting them and `Location` is a singleton which represents the\n * current location.\n *\n * @returns URL\n */\nexport function getLocation(): URL {\n return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @returns Location subject\n */\nexport function watchLocation(): Subject {\n return new Subject()\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { JSX as JSXInternal } from \"preact\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML attributes\n */\ntype Attributes =\n & JSXInternal.HTMLAttributes\n & JSXInternal.SVGAttributes\n & Record\n\n/**\n * Child element\n */\ntype Child =\n | HTMLElement\n | Text\n | string\n | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(el: HTMLElement, child: Child | Child[]): void {\n\n /* Handle primitive types (including raw HTML) */\n if (typeof child === \"string\" || typeof child === \"number\") {\n el.innerHTML += child.toString()\n\n /* Handle nodes */\n } else if (child instanceof Node) {\n el.appendChild(child)\n\n /* Handle nested children */\n } else if (Array.isArray(child)) {\n for (const node of child)\n appendChild(el, node)\n }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @template T - Element type\n *\n * @param tag - HTML tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @returns Element\n */\nexport function h(\n tag: T, attributes?: Attributes | null, ...children: Child[]\n): HTMLElementTagNameMap[T]\n\nexport function h(\n tag: string, attributes?: Attributes | null, ...children: Child[]\n): T\n\nexport function h(\n tag: string, attributes?: Attributes | null, ...children: Child[]\n): T {\n const el = document.createElement(tag)\n\n /* Set attributes, if any */\n if (attributes)\n for (const attr of Object.keys(attributes)) {\n if (typeof attributes[attr] === \"undefined\")\n continue\n\n /* Set default attribute or boolean */\n if (typeof attributes[attr] !== \"boolean\")\n el.setAttribute(attr, attributes[attr])\n else\n el.setAttribute(attr, \"\")\n }\n\n /* Append child nodes */\n for (const child of children)\n appendChild(el, child)\n\n /* Return element */\n return el as T\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n namespace JSX {\n type Element = HTMLElement\n type IntrinsicElements = JSXInternal.IntrinsicElements\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @returns Truncated value\n */\nexport function truncate(value: string, n: number): string {\n let i = n\n if (value.length > i) {\n while (value[i] !== \" \" && --i > 0) { /* keep eating */ }\n return `${value.substring(0, i)}...`\n }\n return value\n}\n\n/**\n * Round a number for display with repository facts\n *\n * This is a reverse-engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @returns Rounded value\n */\nexport function round(value: number): string {\n if (value > 999) {\n const digits = +((value - 950) % 1000 > 99)\n return `${((value + 0.000001) / 1000).toFixed(digits)}k`\n } else {\n return value.toString()\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n shareReplay,\n startWith\n} from \"rxjs\"\n\nimport { getOptionalElement } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @returns Location hash\n */\nexport function getLocationHash(): string {\n return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. When a new fragment identifier is set, we want\n * the browser to target the respective element at all times, which is why we\n * use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n const el = h(\"a\", { href: hash })\n el.addEventListener(\"click\", ev => ev.stopPropagation())\n el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @returns Location hash observable\n */\nexport function watchLocationHash(): Observable {\n return fromEvent(window, \"hashchange\")\n .pipe(\n map(getLocationHash),\n startWith(getLocationHash()),\n filter(hash => hash.length > 0),\n shareReplay(1)\n )\n}\n\n/**\n * Watch location target\n *\n * @returns Location target observable\n */\nexport function watchLocationTarget(): Observable {\n return watchLocationHash()\n .pipe(\n map(id => getOptionalElement(`[id=\"${id}\"]`)!),\n filter(el => typeof el !== \"undefined\")\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n fromEvent,\n fromEventPattern,\n map,\n merge,\n startWith,\n switchMap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * Note that although `MediaQueryList.addListener` is deprecated we have to\n * use it, because it's the only way to ensure proper downward compatibility.\n *\n * @see https://bit.ly/3dUBH2m - GitHub issue\n *\n * @param query - Media query\n *\n * @returns Media observable\n */\nexport function watchMedia(query: string): Observable {\n const media = matchMedia(query)\n return fromEventPattern(next => (\n media.addListener(() => next(media.matches))\n ))\n .pipe(\n startWith(media.matches)\n )\n}\n\n/**\n * Watch print mode\n *\n * @returns Print observable\n */\nexport function watchPrint(): Observable {\n const media = matchMedia(\"print\")\n return merge(\n fromEvent(window, \"beforeprint\").pipe(map(() => true)),\n fromEvent(window, \"afterprint\").pipe(map(() => false))\n )\n .pipe(\n startWith(media.matches)\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Toggle an observable with a media observable\n *\n * @template T - Data type\n *\n * @param query$ - Media observable\n * @param factory - Observable factory\n *\n * @returns Toggled observable\n */\nexport function at(\n query$: Observable, factory: () => Observable\n): Observable {\n return query$\n .pipe(\n switchMap(active => active ? factory() : EMPTY)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n catchError,\n from,\n map,\n of,\n shareReplay,\n switchMap,\n throwError\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch the given URL\n *\n * If the request fails (e.g. when dispatched from `file://` locations), the\n * observable will complete without emitting a value.\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Response observable\n */\nexport function request(\n url: URL | string, options: RequestInit = { credentials: \"same-origin\" }\n): Observable {\n return from(fetch(`${url}`, options))\n .pipe(\n catchError(() => EMPTY),\n switchMap(res => res.status !== 200\n ? throwError(() => new Error(res.statusText))\n : of(res)\n )\n )\n}\n\n/**\n * Fetch JSON from the given URL\n *\n * @template T - Data type\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestJSON(\n url: URL | string, options?: RequestInit\n): Observable {\n return request(url, options)\n .pipe(\n switchMap(res => res.json()),\n shareReplay(1)\n )\n}\n\n/**\n * Fetch XML from the given URL\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestXML(\n url: URL | string, options?: RequestInit\n): Observable {\n const dom = new DOMParser()\n return request(url, options)\n .pipe(\n switchMap(res => res.text()),\n map(res => dom.parseFromString(res, \"text/xml\")),\n shareReplay(1)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n switchMap,\n take,\n throwError\n} from \"rxjs\"\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create and load a `script` element\n *\n * This function returns an observable that will emit when the script was\n * successfully loaded, or throw an error if it didn't.\n *\n * @param src - Script URL\n *\n * @returns Script observable\n */\nexport function watchScript(src: string): Observable {\n const script = h(\"script\", { src })\n return defer(() => {\n document.head.appendChild(script)\n return merge(\n fromEvent(script, \"load\"),\n fromEvent(script, \"error\")\n .pipe(\n switchMap(() => (\n throwError(() => new ReferenceError(`Invalid script: ${src}`))\n ))\n )\n )\n .pipe(\n map(() => undefined),\n finalize(() => document.head.removeChild(script)),\n take(1)\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n merge,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n x: number /* Horizontal offset */\n y: number /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @returns Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n return {\n x: Math.max(0, scrollX),\n y: Math.max(0, scrollY)\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @returns Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n return merge(\n fromEvent(window, \"scroll\", { passive: true }),\n fromEvent(window, \"resize\", { passive: true })\n )\n .pipe(\n map(getViewportOffset),\n startWith(getViewportOffset())\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n width: number /* Viewport width */\n height: number /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @returns Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n return {\n width: innerWidth,\n height: innerHeight\n }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @returns Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n return fromEvent(window, \"resize\", { passive: true })\n .pipe(\n map(getViewportSize),\n startWith(getViewportSize())\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n map,\n shareReplay\n} from \"rxjs\"\n\nimport {\n ViewportOffset,\n watchViewportOffset\n} from \"../offset\"\nimport {\n ViewportSize,\n watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n offset: ViewportOffset /* Viewport offset */\n size: ViewportSize /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @returns Viewport observable\n */\nexport function watchViewport(): Observable {\n return combineLatest([\n watchViewportOffset(),\n watchViewportSize()\n ])\n .pipe(\n map(([offset, size]) => ({ offset, size })),\n shareReplay(1)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n distinctUntilKeyChanged,\n map\n} from \"rxjs\"\n\nimport { Header } from \"~/components\"\n\nimport { getElementOffset } from \"../../element\"\nimport { Viewport } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
/* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @returns Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n const size$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\")\n )\n\n /* Compute element offset */\n const offset$ = combineLatest([size$, header$])\n .pipe(\n map(() => getElementOffset(el))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n fromEvent,\n map,\n share,\n switchMap,\n tap,\n throttle\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Worker message\n */\nexport interface WorkerMessage {\n type: unknown /* Message type */\n data?: unknown /* Message data */\n}\n\n/**\n * Worker handler\n *\n * @template T - Message type\n */\nexport interface WorkerHandler<\n T extends WorkerMessage\n> {\n tx$: Subject /* Message transmission subject */\n rx$: Observable /* Message receive observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n *\n * @template T - Worker message type\n */\ninterface WatchOptions {\n tx$: Observable /* Message transmission observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch a web worker\n *\n * This function returns an observable that sends all values emitted by the\n * message observable to the web worker. Web worker communication is expected\n * to be bidirectional (request-response) and synchronous. Messages that are\n * emitted during a pending request are throttled, the last one is emitted.\n *\n * @param worker - Web worker\n * @param options - Options\n *\n * @returns Worker message observable\n */\nexport function watchWorker(\n worker: Worker, { tx$ }: WatchOptions\n): Observable {\n\n /* Intercept messages from worker-like objects */\n const rx$ = fromEvent(worker, \"message\")\n .pipe(\n map(({ data }) => data as T)\n )\n\n /* Send and receive messages, return hot observable */\n return tx$\n .pipe(\n throttle(() => rx$, { leading: true, trailing: true }),\n tap(message => worker.postMessage(message)),\n switchMap(() => rx$),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getLocation } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flag\n */\nexport type Flag =\n | \"announce.dismiss\" /* Dismissable announcement bar */\n | \"content.code.annotate\" /* Code annotations */\n | \"content.lazy\" /* Lazy content elements */\n | \"content.tabs.link\" /* Link content tabs */\n | \"header.autohide\" /* Hide header */\n | \"navigation.expand\" /* Automatic expansion */\n | \"navigation.indexes\" /* Section pages */\n | \"navigation.instant\" /* Instant loading */\n | \"navigation.sections\" /* Section navigation */\n | \"navigation.tabs\" /* Tabs navigation */\n | \"navigation.tabs.sticky\" /* Tabs navigation (sticky) */\n | \"navigation.top\" /* Back-to-top button */\n | \"navigation.tracking\" /* Anchor tracking */\n | \"search.highlight\" /* Search highlighting */\n | \"search.share\" /* Search sharing */\n | \"search.suggest\" /* Search suggestions */\n | \"toc.follow\" /* Following table of contents */\n | \"toc.integrate\" /* Integrated table of contents */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Translation\n */\nexport type Translation =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.placeholder\" /* Search */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n | \"search.result.more.one\" /* 1 more on this page */\n | \"search.result.more.other\" /* # more on this page */\n | \"search.result.term.missing\" /* Missing */\n | \"select.version.title\" /* Version selector */\n\n/**\n * Translations\n */\nexport type Translations = Record\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Versioning\n */\nexport interface Versioning {\n provider: \"mike\" /* Version provider */\n default?: string /* Default version */\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n base: string /* Base URL */\n features: Flag[] /* Feature flags */\n translations: Translations /* Translations */\n search: string /* Search worker URL */\n tags?: Record /* Tags mapping */\n version?: Versioning /* Versioning */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration and make base URL absolute\n */\nconst script = getElement(\"#__config\")\nconst config: Config = JSON.parse(script.textContent!)\nconfig.base = `${new URL(config.base, getLocation())}`\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration\n *\n * @returns Global configuration\n */\nexport function configuration(): Config {\n return config\n}\n\n/**\n * Check whether a feature flag is enabled\n *\n * @param flag - Feature flag\n *\n * @returns Test result\n */\nexport function feature(flag: Flag): boolean {\n return config.features.includes(flag)\n}\n\n/**\n * Retrieve the translation for the given key\n *\n * @param key - Key to be translated\n * @param value - Positional value, if any\n *\n * @returns Translation\n */\nexport function translation(\n key: Translation, value?: string | number\n): string {\n return typeof value !== \"undefined\"\n ? config.translations[key].replace(\"#\", value.toString())\n : config.translations[key]\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type\n */\nexport type ComponentType =\n | \"announce\" /* Announcement bar */\n | \"container\" /* Container */\n | \"consent\" /* Consent */\n | \"content\" /* Content */\n | \"dialog\" /* Dialog */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"header-topic\" /* Header topic */\n | \"main\" /* Main area */\n | \"outdated\" /* Version warning */\n | \"palette\" /* Color palette */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-result\" /* Search results */\n | \"search-share\" /* Search sharing */\n | \"search-suggest\" /* Search suggestions */\n | \"sidebar\" /* Sidebar */\n | \"skip\" /* Skip link */\n | \"source\" /* Repository information */\n | \"tabs\" /* Navigation tabs */\n | \"toc\" /* Table of contents */\n | \"top\" /* Back-to-top button */\n\n/**\n * Component\n *\n * @template T - Component type\n * @template U - Reference type\n */\nexport type Component<\n T extends {} = {},\n U extends HTMLElement = HTMLElement\n> =\n T & {\n ref: U /* Component reference */\n }\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type map\n */\ninterface ComponentTypeMap {\n \"announce\": HTMLElement /* Announcement bar */\n \"container\": HTMLElement /* Container */\n \"consent\": HTMLElement /* Consent */\n \"content\": HTMLElement /* Content */\n \"dialog\": HTMLElement /* Dialog */\n \"header\": HTMLElement /* Header */\n \"header-title\": HTMLElement /* Header title */\n \"header-topic\": HTMLElement /* Header topic */\n \"main\": HTMLElement /* Main area */\n \"outdated\": HTMLElement /* Version warning */\n \"palette\": HTMLElement /* Color palette */\n \"search\": HTMLElement /* Search */\n \"search-query\": HTMLInputElement /* Search input */\n \"search-result\": HTMLElement /* Search results */\n \"search-share\": HTMLAnchorElement /* Search sharing */\n \"search-suggest\": HTMLElement /* Search suggestions */\n \"sidebar\": HTMLElement /* Sidebar */\n \"skip\": HTMLAnchorElement /* Skip link */\n \"source\": HTMLAnchorElement /* Repository information */\n \"tabs\": HTMLElement /* Navigation tabs */\n \"toc\": HTMLElement /* Table of contents */\n \"top\": HTMLAnchorElement /* Back-to-top button */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the element for a given component or throw a reference error\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getComponentElement(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T] {\n return getElement(`[data-md-component=${type}]`, node)\n}\n\n/**\n * Retrieve all elements for a given component\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getComponentElements(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T][] {\n return getElements(`[data-md-component=${type}]`, node)\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n finalize,\n fromEvent,\n map,\n startWith,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport { getElement } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Announcement bar\n */\nexport interface Announce {\n hash: number /* Content hash */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch announcement bar\n *\n * @param el - Announcement bar element\n *\n * @returns Announcement bar observable\n */\nexport function watchAnnounce(\n el: HTMLElement\n): Observable {\n const button = getElement(\".md-typeset > :first-child\", el)\n return fromEvent(button, \"click\", { once: true })\n .pipe(\n map(() => getElement(\".md-typeset\", el)),\n map(content => ({ hash: __md_hash(content.innerHTML) }))\n )\n}\n\n/**\n * Mount announcement bar\n *\n * @param el - Announcement bar element\n *\n * @returns Announcement bar component observable\n */\nexport function mountAnnounce(\n el: HTMLElement\n): Observable> {\n if (!feature(\"announce.dismiss\") || !el.childElementCount)\n return EMPTY\n\n /* Mount component on subscription */\n return defer(() => {\n const push$ = new Subject()\n push$\n .pipe(\n startWith({ hash: __md_get(\"__announce\") })\n )\n .subscribe(({ hash }) => {\n if (hash && hash === (__md_get(\"__announce\") ?? hash)) {\n el.hidden = true\n\n /* Persist preference in local storage */\n __md_set(\"__announce\", hash)\n }\n })\n\n /* Create and return component */\n return watchAnnounce(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n finalize,\n map,\n tap\n} from \"rxjs\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Consent\n */\nexport interface Consent {\n hidden: boolean /* Consent is hidden */\n}\n\n/**\n * Consent defaults\n */\nexport interface ConsentDefaults {\n analytics?: boolean /* Consent for Analytics */\n github?: boolean /* Consent for GitHub */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n target$: Observable /* Target observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch consent\n *\n * @param el - Consent element\n * @param options - Options\n *\n * @returns Consent observable\n */\nexport function watchConsent(\n el: HTMLElement, { target$ }: WatchOptions\n): Observable {\n return target$\n .pipe(\n map(target => ({ hidden: target !== el }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount consent\n *\n * @param el - Consent element\n * @param options - Options\n *\n * @returns Consent component observable\n */\nexport function mountConsent(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const internal$ = new Subject()\n internal$.subscribe(({ hidden }) => {\n el.hidden = hidden\n })\n\n /* Create and return component */\n return watchConsent(el, options)\n .pipe(\n tap(state => internal$.next(state)),\n finalize(() => internal$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ClipboardJS from \"clipboard\"\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n map,\n mergeWith,\n switchMap,\n take,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n getElementContentSize,\n watchElementSize,\n watchElementVisibility\n} from \"~/browser\"\nimport { renderClipboardButton } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotationList\n} from \"../../annotation\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Code block\n */\nexport interface CodeBlock {\n scrollable: boolean /* Code block overflows */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Global sequence number for code blocks\n */\nlet sequence = 0\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find candidate list element directly following a code block\n *\n * @param el - Code block element\n *\n * @returns List element or nothing\n */\nfunction findCandidateList(el: HTMLElement): HTMLElement | undefined {\n if (el.nextElementSibling) {\n const sibling = el.nextElementSibling as HTMLElement\n if (sibling.tagName === \"OL\")\n return sibling\n\n /* Skip empty paragraphs - see https://bit.ly/3r4ZJ2O */\n else if (sibling.tagName === \"P\" && !sibling.children.length)\n return findCandidateList(sibling)\n }\n\n /* Everything else */\n return undefined\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch code block\n *\n * This function monitors size changes of the viewport, as well as switches of\n * content tabs with embedded code blocks, as both may trigger overflow.\n *\n * @param el - Code block element\n *\n * @returns Code block observable\n */\nexport function watchCodeBlock(\n el: HTMLElement\n): Observable {\n return watchElementSize(el)\n .pipe(\n map(({ width }) => {\n const content = getElementContentSize(el)\n return {\n scrollable: content.width > width\n }\n }),\n distinctUntilKeyChanged(\"scrollable\")\n )\n}\n\n/**\n * Mount code block\n *\n * This function ensures that an overflowing code block is focusable through\n * keyboard, so it can be scrolled without a mouse to improve on accessibility.\n * Furthermore, if code annotations are enabled, they are mounted if and only\n * if the code block is currently visible, e.g., not in a hidden content tab.\n *\n * Note that code blocks may be mounted eagerly or lazily. If they're mounted\n * lazily (on first visibility), code annotation anchor links will not work,\n * as they are evaluated on initial page load, and code annotations in general\n * might feel a little bumpier.\n *\n * @param el - Code block element\n * @param options - Options\n *\n * @returns Code block and annotation component observable\n */\nexport function mountCodeBlock(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const { matches: hover } = matchMedia(\"(hover)\")\n\n /* Defer mounting of code block - see https://bit.ly/3vHVoVD */\n const factory$ = defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ scrollable }) => {\n if (scrollable && hover)\n el.setAttribute(\"tabindex\", \"0\")\n else\n el.removeAttribute(\"tabindex\")\n })\n\n /* Render button for Clipboard.js integration */\n if (ClipboardJS.isSupported()) {\n const parent = el.closest(\"pre\")!\n parent.id = `__code_${++sequence}`\n parent.insertBefore(\n renderClipboardButton(parent.id),\n el\n )\n }\n\n /* Handle code annotations */\n const container = el.closest(\".highlight\")\n if (container instanceof HTMLElement) {\n const list = findCandidateList(container)\n\n /* Mount code annotations, if enabled */\n if (typeof list !== \"undefined\" && (\n container.classList.contains(\"annotate\") ||\n feature(\"content.code.annotate\")\n )) {\n const annotations$ = mountAnnotationList(list, el, options)\n\n /* Create and return component */\n return watchCodeBlock(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state })),\n mergeWith(\n watchElementSize(container)\n .pipe(\n map(({ width, height }) => width && height),\n distinctUntilChanged(),\n switchMap(active => active ? annotations$ : EMPTY)\n )\n )\n )\n }\n }\n\n /* Create and return component */\n return watchCodeBlock(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n\n /* Mount code block lazily */\n if (feature(\"content.lazy\"))\n return watchElementVisibility(el)\n .pipe(\n filter(visible => visible),\n take(1),\n switchMap(() => factory$)\n )\n\n /* Mount code block */\n return factory$\n}\n", "/*\n * Copyright (c) 2016-2021 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a tooltip\n *\n * @param id - Tooltip identifier\n *\n * @returns Element\n */\nexport function renderTooltip(id?: string): HTMLElement {\n return (\n
\n
\n
\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\nimport { renderTooltip } from \"../tooltip\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render an annotation\n *\n * @param id - Annotation identifier\n * @param prefix - Tooltip identifier prefix\n *\n * @returns Element\n */\nexport function renderAnnotation(\n id: string | number, prefix?: string\n): HTMLElement {\n prefix = prefix ? `${prefix}_annotation_${id}` : undefined\n\n /* Render tooltip with anchor, if given */\n if (prefix) {\n const anchor = prefix ? `#${prefix}` : undefined\n return (\n \n )\n } else {\n return (\n \n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @returns Element\n */\nexport function renderClipboardButton(id: string): HTMLElement {\n return (\n code`}\n >\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ComponentChild } from \"preact\"\n\nimport { configuration, feature, translation } from \"~/_\"\nimport {\n SearchDocument,\n SearchMetadata,\n SearchResultItem\n} from \"~/integrations/search\"\nimport { h, truncate } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Render flag\n */\nconst enum Flag {\n TEASER = 1, /* Render teaser */\n PARENT = 2 /* Render as parent */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper function\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search document\n *\n * @param document - Search document\n * @param flag - Render flags\n *\n * @returns Element\n */\nfunction renderSearchDocument(\n document: SearchDocument & SearchMetadata, flag: Flag\n): HTMLElement {\n const parent = flag & Flag.PARENT\n const teaser = flag & Flag.TEASER\n\n /* Render missing query terms */\n const missing = Object.keys(document.terms)\n .filter(key => !document.terms[key])\n .reduce((list, key) => [\n ...list, {key}, \" \"\n ], [])\n .slice(0, -1)\n\n /* Assemble query string for highlighting */\n const url = new URL(document.location)\n if (feature(\"search.highlight\"))\n url.searchParams.set(\"h\", Object.entries(document.terms)\n .filter(([, match]) => match)\n .reduce((highlight, [value]) => `${highlight} ${value}`.trim(), \"\")\n )\n\n /* Render article or section, depending on flags */\n const { tags } = configuration()\n return (\n \n \n {parent > 0 &&
}\n

{document.title}

\n {teaser > 0 && document.text.length > 0 &&\n

\n {truncate(document.text, 320)}\n

\n }\n {document.tags && (\n
\n {document.tags.map(tag => {\n const id = tag.replace(/<[^>]+>/g, \"\")\n const type = tags\n ? id in tags\n ? `md-tag-icon md-tag-icon--${tags[id]}`\n : \"md-tag-icon\"\n : \"\"\n return (\n {tag}\n )\n })}\n
\n )}\n {teaser > 0 && missing.length > 0 &&\n

\n {translation(\"search.result.term.missing\")}: {...missing}\n

\n }\n \n
\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @returns Element\n */\nexport function renderSearchResultItem(\n result: SearchResultItem\n): HTMLElement {\n const threshold = result[0].score\n const docs = [...result]\n\n /* Find and extract parent article */\n const parent = docs.findIndex(doc => !doc.location.includes(\"#\"))\n const [article] = docs.splice(parent, 1)\n\n /* Determine last index above threshold */\n let index = docs.findIndex(doc => doc.score < threshold)\n if (index === -1)\n index = docs.length\n\n /* Partition sections */\n const best = docs.slice(0, index)\n const more = docs.slice(index)\n\n /* Render children */\n const children = [\n renderSearchDocument(article, Flag.PARENT | +(!parent && index === 0)),\n ...best.map(section => renderSearchDocument(section, Flag.TEASER)),\n ...more.length ? [\n
\n \n {more.length > 0 && more.length === 1\n ? translation(\"search.result.more.one\")\n : translation(\"search.result.more.other\", more.length)\n }\n \n {...more.map(section => renderSearchDocument(section, Flag.TEASER))}\n
\n ] : []\n ]\n\n /* Render search result */\n return (\n
  • \n {children}\n
  • \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"~/components\"\nimport { h, round } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render repository facts\n *\n * @param facts - Repository facts\n *\n * @returns Element\n */\nexport function renderSourceFacts(facts: SourceFacts): HTMLElement {\n return (\n
      \n {Object.entries(facts).map(([key, value]) => (\n
    • \n {typeof value === \"number\" ? round(value) : value}\n
    • \n ))}\n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabbed control type\n */\ntype TabbedControlType =\n | \"prev\"\n | \"next\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render control for content tabs\n *\n * @param type - Control type\n *\n * @returns Element\n */\nexport function renderTabbedControl(\n type: TabbedControlType\n): HTMLElement {\n const classes = `tabbed-control tabbed-control--${type}`\n return (\n \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @returns Element\n */\nexport function renderTable(table: HTMLElement): HTMLElement {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { configuration, translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Version\n */\nexport interface Version {\n version: string /* Version identifier */\n title: string /* Version title */\n aliases: string[] /* Version aliases */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version\n *\n * @param version - Version\n *\n * @returns Element\n */\nfunction renderVersion(version: Version): HTMLElement {\n const config = configuration()\n\n /* Ensure trailing slash - see https://bit.ly/3rL5u3f */\n const url = new URL(`../${version.version}/`, config.base)\n return (\n
  • \n \n {version.title}\n \n
  • \n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version selector\n *\n * @param versions - Versions\n * @param active - Active version\n *\n * @returns Element\n */\nexport function renderVersionSelector(\n versions: Version[], active: Version\n): HTMLElement {\n return (\n
    \n \n {active.title}\n \n
      \n {versions.map(renderVersion)}\n
    \n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n auditTime,\n combineLatest,\n debounceTime,\n defer,\n delay,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n switchMap,\n take,\n takeLast,\n takeUntil,\n tap,\n throttleTime,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n ElementOffset,\n getActiveElement,\n getElementSize,\n watchElementContentOffset,\n watchElementFocus,\n watchElementOffset,\n watchElementVisibility\n} from \"~/browser\"\n\nimport { Component } from \"../../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Annotation\n */\nexport interface Annotation {\n active: boolean /* Annotation is active */\n offset: ElementOffset /* Annotation offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n *\n * @returns Annotation observable\n */\nexport function watchAnnotation(\n el: HTMLElement, container: HTMLElement\n): Observable {\n const offset$ = defer(() => combineLatest([\n watchElementOffset(el),\n watchElementContentOffset(container)\n ]))\n .pipe(\n map(([{ x, y }, scroll]): ElementOffset => {\n const { width, height } = getElementSize(el)\n return ({\n x: x - scroll.x + width / 2,\n y: y - scroll.y + height / 2\n })\n })\n )\n\n /* Actively watch annotation on focus */\n return watchElementFocus(el)\n .pipe(\n switchMap(active => offset$\n .pipe(\n map(offset => ({ active, offset })),\n take(+!active || Infinity)\n )\n )\n )\n}\n\n/**\n * Mount annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n * @param options - Options\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotation(\n el: HTMLElement, container: HTMLElement, { target$ }: MountOptions\n): Observable> {\n const [tooltip, index] = Array.from(el.children)\n\n /* Mount component on subscription */\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe({\n\n /* Handle emission */\n next({ offset }) {\n el.style.setProperty(\"--md-tooltip-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-tooltip-y\", `${offset.y}px`)\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-x\")\n el.style.removeProperty(\"--md-tooltip-y\")\n }\n })\n\n /* Start animation only when annotation is visible */\n watchElementVisibility(el)\n .pipe(\n takeUntil(done$)\n )\n .subscribe(visible => {\n el.toggleAttribute(\"data-md-visible\", visible)\n })\n\n /* Toggle tooltip presence to mitigate empty lines when copying */\n merge(\n push$.pipe(filter(({ active }) => active)),\n push$.pipe(debounceTime(250), filter(({ active }) => !active))\n )\n .subscribe({\n\n /* Handle emission */\n next({ active }) {\n if (active)\n el.prepend(tooltip)\n else\n tooltip.remove()\n },\n\n /* Handle complete */\n complete() {\n el.prepend(tooltip)\n }\n })\n\n /* Toggle tooltip visibility */\n push$\n .pipe(\n auditTime(16, animationFrameScheduler)\n )\n .subscribe(({ active }) => {\n tooltip.classList.toggle(\"md-tooltip--active\", active)\n })\n\n /* Track relative origin of tooltip */\n push$\n .pipe(\n throttleTime(125, animationFrameScheduler),\n filter(() => !!el.offsetParent),\n map(() => el.offsetParent!.getBoundingClientRect()),\n map(({ x }) => x)\n )\n .subscribe({\n\n /* Handle emission */\n next(origin) {\n if (origin)\n el.style.setProperty(\"--md-tooltip-0\", `${-origin}px`)\n else\n el.style.removeProperty(\"--md-tooltip-0\")\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-0\")\n }\n })\n\n /* Allow to copy link without scrolling to anchor */\n fromEvent(index, \"click\")\n .pipe(\n takeUntil(done$),\n filter(ev => !(ev.metaKey || ev.ctrlKey))\n )\n .subscribe(ev => ev.preventDefault())\n\n /* Allow to open link in new tab or blur on close */\n fromEvent(index, \"mousedown\")\n .pipe(\n takeUntil(done$),\n withLatestFrom(push$)\n )\n .subscribe(([ev, { active }]) => {\n\n /* Open in new tab */\n if (ev.button !== 0 || ev.metaKey || ev.ctrlKey) {\n ev.preventDefault()\n\n /* Close annotation */\n } else if (active) {\n ev.preventDefault()\n\n /* Focus parent annotation, if any */\n const parent = el.parentElement!.closest(\".md-annotation\")\n if (parent instanceof HTMLElement)\n parent.focus()\n else\n getActiveElement()?.blur()\n }\n })\n\n /* Open and focus annotation on location target */\n target$\n .pipe(\n takeUntil(done$),\n filter(target => target === tooltip),\n delay(125)\n )\n .subscribe(() => el.focus())\n\n /* Create and return component */\n return watchAnnotation(el, container)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n finalize,\n merge,\n share,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport {\n getElement,\n getElements,\n getOptionalElement\n} from \"~/browser\"\nimport { renderAnnotation } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotation\n} from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find all annotation markers in the given code block\n *\n * @param container - Containing element\n *\n * @returns Annotation markers\n */\nfunction findAnnotationMarkers(container: HTMLElement): Text[] {\n const markers: Text[] = []\n for (const el of getElements(\".c, .c1, .cm\", container)) {\n const nodes: Text[] = []\n\n /* Find all text nodes in current element */\n const it = document.createNodeIterator(el, NodeFilter.SHOW_TEXT)\n for (let node = it.nextNode(); node; node = it.nextNode())\n nodes.push(node as Text)\n\n /* Find all markers in each text node */\n for (let text of nodes) {\n let match: RegExpExecArray | null\n\n /* Split text at marker and add to list */\n while ((match = /(\\(\\d+\\))(!)?/.exec(text.textContent!))) {\n const [, id, force] = match\n if (typeof force === \"undefined\") {\n const marker = text.splitText(match.index)\n text = marker.splitText(id.length)\n markers.push(marker)\n\n /* Replace entire text with marker */\n } else {\n text.textContent = id\n markers.push(text)\n break\n }\n }\n }\n }\n return markers\n}\n\n/**\n * Swap the child nodes of two elements\n *\n * @param source - Source element\n * @param target - Target element\n */\nfunction swap(source: HTMLElement, target: HTMLElement): void {\n target.append(...Array.from(source.childNodes))\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount annotation list\n *\n * This function analyzes the containing code block and checks for markers\n * referring to elements in the given annotation list. If no markers are found,\n * the list is left untouched. Otherwise, list elements are rendered as\n * annotations inside the code block.\n *\n * @param el - Annotation list element\n * @param container - Containing element\n * @param options - Options\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotationList(\n el: HTMLElement, container: HTMLElement, { target$, print$ }: MountOptions\n): Observable> {\n\n /* Compute prefix for tooltip anchors */\n const parent = container.closest(\"[id]\")\n const prefix = parent?.id\n\n /* Find and replace all markers with empty annotations */\n const annotations = new Map()\n for (const marker of findAnnotationMarkers(container)) {\n const [, id] = marker.textContent!.match(/\\((\\d+)\\)/)!\n if (getOptionalElement(`li:nth-child(${id})`, el)) {\n annotations.set(id, renderAnnotation(id, prefix))\n marker.replaceWith(annotations.get(id)!)\n }\n }\n\n /* Keep list if there are no annotations to render */\n if (annotations.size === 0)\n return EMPTY\n\n /* Mount component on subscription */\n return defer(() => {\n const done$ = new Subject()\n\n /* Retrieve container pairs for swapping */\n const pairs: [HTMLElement, HTMLElement][] = []\n for (const [id, annotation] of annotations)\n pairs.push([\n getElement(\".md-typeset\", annotation),\n getElement(`li:nth-child(${id})`, el)\n ])\n\n /* Handle print mode - see https://bit.ly/3rgPdpt */\n print$\n .pipe(\n takeUntil(done$.pipe(takeLast(1)))\n )\n .subscribe(active => {\n el.hidden = !active\n\n /* Show annotations in code block or list (print) */\n for (const [inner, child] of pairs)\n if (!active)\n swap(child, inner)\n else\n swap(inner, child)\n })\n\n /* Create and return component */\n return merge(...[...annotations]\n .map(([, annotation]) => (\n mountAnnotation(annotation, container, { target$ })\n ))\n )\n .pipe(\n finalize(() => done$.complete()),\n share()\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n map,\n of,\n shareReplay,\n tap\n} from \"rxjs\"\n\nimport { watchScript } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../../_\"\n\nimport themeCSS from \"./index.css\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid diagram\n */\nexport interface Mermaid {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid instance observable\n */\nlet mermaid$: Observable\n\n/**\n * Global sequence number for diagrams\n */\nlet sequence = 0\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch Mermaid script\n *\n * @returns Mermaid scripts observable\n */\nfunction fetchScripts(): Observable {\n return typeof mermaid === \"undefined\" || mermaid instanceof Element\n ? watchScript(\"https://unpkg.com/mermaid@9.1.7/dist/mermaid.min.js\")\n : of(undefined)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount Mermaid diagram\n *\n * @param el - Code block element\n *\n * @returns Mermaid diagram component observable\n */\nexport function mountMermaid(\n el: HTMLElement\n): Observable> {\n el.classList.remove(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n mermaid$ ||= fetchScripts()\n .pipe(\n tap(() => mermaid.initialize({\n startOnLoad: false,\n themeCSS,\n sequence: {\n actorFontSize: \"16px\", // Hack: mitigate https://bit.ly/3y0NEi3\n messageFontSize: \"16px\",\n noteFontSize: \"16px\"\n }\n })),\n map(() => undefined),\n shareReplay(1)\n )\n\n /* Render diagram */\n mermaid$.subscribe(() => {\n el.classList.add(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n const id = `__mermaid_${sequence++}`\n const host = h(\"div\", { class: \"mermaid\" })\n mermaid.mermaidAPI.render(id, el.textContent, (svg: string) => {\n\n /* Create a shadow root and inject diagram */\n const shadow = host.attachShadow({ mode: \"closed\" })\n shadow.innerHTML = svg\n\n /* Replace code block with diagram */\n el.replaceWith(host)\n })\n })\n\n /* Create and return component */\n return mermaid$\n .pipe(\n map(() => ({ ref: el }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n tap\n} from \"rxjs\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Details\n */\nexport interface Details {\n action: \"open\" | \"close\" /* Details state */\n reveal?: boolean /* Details is revealed */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch details\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details observable\n */\nexport function watchDetails(\n el: HTMLDetailsElement, { target$, print$ }: WatchOptions\n): Observable
    {\n let open = true\n return merge(\n\n /* Open and focus details on location target */\n target$\n .pipe(\n map(target => target.closest(\"details:not([open])\")!),\n filter(details => el === details),\n map(() => ({\n action: \"open\", reveal: true\n }) as Details)\n ),\n\n /* Open details on print and close afterwards */\n print$\n .pipe(\n filter(active => active || !open),\n tap(() => open = el.open),\n map(active => ({\n action: active ? \"open\" : \"close\"\n }) as Details)\n )\n )\n}\n\n/**\n * Mount details\n *\n * This function ensures that `details` tags are opened on anchor jumps and\n * prior to printing, so the whole content of the page is visible.\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details component observable\n */\nexport function mountDetails(\n el: HTMLDetailsElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject
    ()\n push$.subscribe(({ action, reveal }) => {\n el.toggleAttribute(\"open\", action === \"open\")\n if (reveal)\n el.scrollIntoView()\n })\n\n /* Create and return component */\n return watchDetails(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, of } from \"rxjs\"\n\nimport { renderTable } from \"~/templates\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Data table\n */\nexport interface DataTable {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Sentinel for replacement\n */\nconst sentinel = h(\"table\")\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount data table\n *\n * This function wraps a data table in another scrollable container, so it can\n * be smoothly scrolled on smaller screen sizes and won't break the layout.\n *\n * @param el - Data table element\n *\n * @returns Data table component observable\n */\nexport function mountDataTable(\n el: HTMLElement\n): Observable> {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n\n /* Create and return component */\n return of({ ref: el })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n asyncScheduler,\n auditTime,\n combineLatest,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n skip,\n startWith,\n subscribeOn,\n takeLast,\n takeUntil,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n getElement,\n getElementContentOffset,\n getElementContentSize,\n getElementOffset,\n getElementSize,\n getElements,\n watchElementContentOffset,\n watchElementSize\n} from \"~/browser\"\nimport { renderTabbedControl } from \"~/templates\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content tabs\n */\nexport interface ContentTabs {\n active: HTMLLabelElement /* Active tab label */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch content tabs\n *\n * @param el - Content tabs element\n *\n * @returns Content tabs observable\n */\nexport function watchContentTabs(\n el: HTMLElement\n): Observable {\n const inputs = getElements(\":scope > input\", el)\n const initial = inputs.find(input => input.checked) || inputs[0]\n return merge(...inputs.map(input => fromEvent(input, \"change\")\n .pipe(\n map(() => getElement(`label[for=\"${input.id}\"]`))\n )\n ))\n .pipe(\n startWith(getElement(`label[for=\"${initial.id}\"]`)),\n map(active => ({ active }))\n )\n}\n\n/**\n * Mount content tabs\n *\n * This function scrolls the active tab into view. While this functionality is\n * provided by browsers as part of `scrollInfoView`, browsers will always also\n * scroll the vertical axis, which we do not want. Thus, we decided to provide\n * this functionality ourselves.\n *\n * @param el - Content tabs element\n * @param options - Options\n *\n * @returns Content tabs component observable\n */\nexport function mountContentTabs(\n el: HTMLElement, { viewport$ }: MountOptions\n): Observable> {\n\n /* Render content tab previous button for pagination */\n const prev = renderTabbedControl(\"prev\")\n el.append(prev)\n\n /* Render content tab next button for pagination */\n const next = renderTabbedControl(\"next\")\n el.append(next)\n\n /* Mount component on subscription */\n const container = getElement(\".tabbed-labels\", el)\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n combineLatest([push$, watchElementSize(el)])\n .pipe(\n auditTime(1, animationFrameScheduler),\n takeUntil(done$)\n )\n .subscribe({\n\n /* Handle emission */\n next([{ active }, size]) {\n const offset = getElementOffset(active)\n const { width } = getElementSize(active)\n\n /* Set tab indicator offset and width */\n el.style.setProperty(\"--md-indicator-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-indicator-width\", `${width}px`)\n\n /* Scroll container to active content tab */\n const content = getElementContentOffset(container)\n if (\n offset.x < content.x ||\n offset.x + width > content.x + size.width\n )\n container.scrollTo({\n left: Math.max(0, offset.x - 16),\n behavior: \"smooth\"\n })\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-indicator-x\")\n el.style.removeProperty(\"--md-indicator-width\")\n }\n })\n\n /* Hide content tab buttons on borders */\n combineLatest([\n watchElementContentOffset(container),\n watchElementSize(container)\n ])\n .pipe(\n takeUntil(done$)\n )\n .subscribe(([offset, size]) => {\n const content = getElementContentSize(container)\n prev.hidden = offset.x < 16\n next.hidden = offset.x > content.width - size.width - 16\n })\n\n /* Paginate content tab container on click */\n merge(\n fromEvent(prev, \"click\").pipe(map(() => -1)),\n fromEvent(next, \"click\").pipe(map(() => +1))\n )\n .pipe(\n takeUntil(done$)\n )\n .subscribe(direction => {\n const { width } = getElementSize(container)\n container.scrollBy({\n left: width * direction,\n behavior: \"smooth\"\n })\n })\n\n /* Set up linking of content tabs, if enabled */\n if (feature(\"content.tabs.link\"))\n push$.pipe(\n skip(1),\n withLatestFrom(viewport$)\n )\n .subscribe(([{ active }, { offset }]) => {\n const tab = active.innerText.trim()\n if (active.hasAttribute(\"data-md-switching\")) {\n active.removeAttribute(\"data-md-switching\")\n\n /* Determine viewport offset of active tab */\n } else {\n const y = el.offsetTop - offset.y\n\n /* Passively activate other tabs */\n for (const set of getElements(\"[data-tabs]\"))\n for (const input of getElements(\n \":scope > input\", set\n )) {\n const label = getElement(`label[for=\"${input.id}\"]`)\n if (\n label !== active &&\n label.innerText.trim() === tab\n ) {\n label.setAttribute(\"data-md-switching\", \"\")\n input.click()\n break\n }\n }\n\n /* Bring active tab into view */\n window.scrollTo({\n top: el.offsetTop - y\n })\n\n /* Persist active tabs in local storage */\n const tabs = __md_get(\"__tabs\") || []\n __md_set(\"__tabs\", [...new Set([tab, ...tabs])])\n }\n })\n\n /* Create and return component */\n return watchContentTabs(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n .pipe(\n subscribeOn(asyncScheduler)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, merge } from \"rxjs\"\n\nimport { Viewport, getElements } from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Annotation } from \"../annotation\"\nimport {\n CodeBlock,\n Mermaid,\n mountCodeBlock,\n mountMermaid\n} from \"../code\"\nimport {\n Details,\n mountDetails\n} from \"../details\"\nimport {\n DataTable,\n mountDataTable\n} from \"../table\"\nimport {\n ContentTabs,\n mountContentTabs\n} from \"../tabs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content\n */\nexport type Content =\n | Annotation\n | ContentTabs\n | CodeBlock\n | Mermaid\n | DataTable\n | Details\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount content\n *\n * This function mounts all components that are found in the content of the\n * actual article, including code blocks, data tables and details.\n *\n * @param el - Content element\n * @param options - Options\n *\n * @returns Content component observable\n */\nexport function mountContent(\n el: HTMLElement, { viewport$, target$, print$ }: MountOptions\n): Observable> {\n return merge(\n\n /* Code blocks */\n ...getElements(\"pre:not(.mermaid) > code\", el)\n .map(child => mountCodeBlock(child, { target$, print$ })),\n\n /* Mermaid diagrams */\n ...getElements(\"pre.mermaid\", el)\n .map(child => mountMermaid(child)),\n\n /* Data tables */\n ...getElements(\"table:not([class])\", el)\n .map(child => mountDataTable(child)),\n\n /* Details */\n ...getElements(\"details\", el)\n .map(child => mountDetails(child, { target$, print$ })),\n\n /* Content tabs */\n ...getElements(\"[data-tabs]\", el)\n .map(child => mountContentTabs(child, { viewport$ }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n delay,\n finalize,\n map,\n merge,\n of,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { getElement } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Dialog\n */\nexport interface Dialog {\n message: string /* Dialog message */\n active: boolean /* Dialog is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n alert$: Subject /* Alert subject */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n alert$: Subject /* Alert subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch dialog\n *\n * @param _el - Dialog element\n * @param options - Options\n *\n * @returns Dialog observable\n */\nexport function watchDialog(\n _el: HTMLElement, { alert$ }: WatchOptions\n): Observable {\n return alert$\n .pipe(\n switchMap(message => merge(\n of(true),\n of(false).pipe(delay(2000))\n )\n .pipe(\n map(active => ({ message, active }))\n )\n )\n )\n}\n\n/**\n * Mount dialog\n *\n * This function reveals the dialog in the right corner when a new alert is\n * emitted through the subject that is passed as part of the options.\n *\n * @param el - Dialog element\n * @param options - Options\n *\n * @returns Dialog component observable\n */\nexport function mountDialog(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const inner = getElement(\".md-typeset\", el)\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ message, active }) => {\n el.classList.toggle(\"md-dialog--active\", active)\n inner.textContent = message\n })\n\n /* Create and return component */\n return watchDialog(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatest,\n combineLatestWith,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n of,\n shareReplay,\n startWith,\n switchMap,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n watchElementSize,\n watchToggle\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Main } from \"../../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n height: number /* Header visible height */\n hidden: boolean /* Header is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Compute whether the header is hidden\n *\n * If the user scrolls past a certain threshold, the header can be hidden when\n * scrolling down, and shown when scrolling up.\n *\n * @param options - Options\n *\n * @returns Toggle observable\n */\nfunction isHidden({ viewport$ }: WatchOptions): Observable {\n if (!feature(\"header.autohide\"))\n return of(false)\n\n /* Compute direction and turning point */\n const direction$ = viewport$\n .pipe(\n map(({ offset: { y } }) => y),\n bufferCount(2, 1),\n map(([a, b]) => [a < b, b] as const),\n distinctUntilKeyChanged(0)\n )\n\n /* Compute whether header should be hidden */\n const hidden$ = combineLatest([viewport$, direction$])\n .pipe(\n filter(([{ offset }, [, y]]) => Math.abs(y - offset.y) > 100),\n map(([, [direction]]) => direction),\n distinctUntilChanged()\n )\n\n /* Compute threshold for hiding */\n const search$ = watchToggle(\"search\")\n return combineLatest([viewport$, search$])\n .pipe(\n map(([{ offset }, search]) => offset.y > 400 && !search),\n distinctUntilChanged(),\n switchMap(active => active ? hidden$ : of(false)),\n startWith(false)\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * @param el - Header element\n * @param options - Options\n *\n * @returns Header observable\n */\nexport function watchHeader(\n el: HTMLElement, options: WatchOptions\n): Observable
    {\n return defer(() => combineLatest([\n watchElementSize(el),\n isHidden(options)\n ]))\n .pipe(\n map(([{ height }, hidden]) => ({\n height,\n hidden\n })),\n distinctUntilChanged((a, b) => (\n a.height === b.height &&\n a.hidden === b.hidden\n )),\n shareReplay(1)\n )\n}\n\n/**\n * Mount header\n *\n * This function manages the different states of the header, i.e. whether it's\n * hidden or rendered with a shadow. This depends heavily on the main area.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @returns Header component observable\n */\nexport function mountHeader(\n el: HTMLElement, { header$, main$ }: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject
    ()\n const done$ = push$.pipe(takeLast(1))\n push$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n combineLatestWith(header$)\n )\n .subscribe(([{ active }, { hidden }]) => {\n el.classList.toggle(\"md-header--shadow\", active && !hidden)\n el.hidden = hidden\n })\n\n /* Link to main area */\n main$.subscribe(push$)\n\n /* Create and return component */\n return header$\n .pipe(\n takeUntil(done$),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n distinctUntilKeyChanged,\n finalize,\n map,\n tap\n} from \"rxjs\"\n\nimport {\n Viewport,\n getElementSize,\n getOptionalElement,\n watchViewportAt\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Header } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface HeaderTitle {\n active: boolean /* Header title is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header title\n *\n * @param el - Heading element\n * @param options - Options\n *\n * @returns Header title observable\n */\nexport function watchHeaderTitle(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n return watchViewportAt(el, { viewport$, header$ })\n .pipe(\n map(({ offset: { y } }) => {\n const { height } = getElementSize(el)\n return {\n active: y >= height\n }\n }),\n distinctUntilKeyChanged(\"active\")\n )\n}\n\n/**\n * Mount header title\n *\n * This function swaps the header title from the site title to the title of the\n * current page when the user scrolls past the first headline.\n *\n * @param el - Header title element\n * @param options - Options\n *\n * @returns Header title component observable\n */\nexport function mountHeaderTitle(\n el: HTMLElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ active }) => {\n el.classList.toggle(\"md-header__title--active\", active)\n })\n\n /* Obtain headline, if any */\n const heading = getOptionalElement(\"article h1\")\n if (typeof heading === \"undefined\")\n return EMPTY\n\n /* Create and return component */\n return watchHeaderTitle(heading, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs\"\n\nimport {\n Viewport,\n watchElementSize\n} from \"~/browser\"\n\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Main area is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @returns Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(({ height }) => height),\n distinctUntilChanged()\n )\n\n /* Compute the main area's top and bottom borders */\n const border$ = adjust$\n .pipe(\n switchMap(() => watchElementSize(el)\n .pipe(\n map(({ height }) => ({\n top: el.offsetTop,\n bottom: el.offsetTop + height\n })),\n distinctUntilKeyChanged(\"bottom\")\n )\n )\n )\n\n /* Compute the main area's offset, visible height and if we scrolled past */\n return combineLatest([adjust$, border$, viewport$])\n .pipe(\n map(([header, { top, bottom }, { offset: { y }, size: { height } }]) => {\n height = Math.max(0, height\n - Math.max(0, top - y, header)\n - Math.max(0, height + y - bottom)\n )\n return {\n offset: top - header,\n height,\n active: top - header <= y\n }\n }),\n distinctUntilChanged((a, b) => (\n a.offset === b.offset &&\n a.height === b.height &&\n a.active === b.active\n ))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n asyncScheduler,\n defer,\n finalize,\n fromEvent,\n map,\n mergeMap,\n observeOn,\n of,\n shareReplay,\n startWith,\n tap\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Palette colors\n */\nexport interface PaletteColor {\n scheme?: string /* Color scheme */\n primary?: string /* Primary color */\n accent?: string /* Accent color */\n}\n\n/**\n * Palette\n */\nexport interface Palette {\n index: number /* Palette index */\n color: PaletteColor /* Palette colors */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch color palette\n *\n * @param inputs - Color palette element\n *\n * @returns Color palette observable\n */\nexport function watchPalette(\n inputs: HTMLInputElement[]\n): Observable {\n const current = __md_get(\"__palette\") || {\n index: inputs.findIndex(input => matchMedia(\n input.getAttribute(\"data-md-color-media\")!\n ).matches)\n }\n\n /* Emit changes in color palette */\n return of(...inputs)\n .pipe(\n mergeMap(input => fromEvent(input, \"change\")\n .pipe(\n map(() => input)\n )\n ),\n startWith(inputs[Math.max(0, current.index)]),\n map(input => ({\n index: inputs.indexOf(input),\n color: {\n scheme: input.getAttribute(\"data-md-color-scheme\"),\n primary: input.getAttribute(\"data-md-color-primary\"),\n accent: input.getAttribute(\"data-md-color-accent\")\n }\n } as Palette)),\n shareReplay(1)\n )\n}\n\n/**\n * Mount color palette\n *\n * @param el - Color palette element\n *\n * @returns Color palette component observable\n */\nexport function mountPalette(\n el: HTMLElement\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(palette => {\n document.body.setAttribute(\"data-md-color-switching\", \"\")\n\n /* Set color palette */\n for (const [key, value] of Object.entries(palette.color))\n document.body.setAttribute(`data-md-color-${key}`, value)\n\n /* Toggle visibility */\n for (let index = 0; index < inputs.length; index++) {\n const label = inputs[index].nextElementSibling\n if (label instanceof HTMLElement)\n label.hidden = palette.index !== index\n }\n\n /* Persist preference in local storage */\n __md_set(\"__palette\", palette)\n })\n\n /* Revert transition durations after color switch */\n push$.pipe(observeOn(asyncScheduler))\n .subscribe(() => {\n document.body.removeAttribute(\"data-md-color-switching\")\n })\n\n /* Create and return component */\n const inputs = getElements(\"input\", el)\n return watchPalette(inputs)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ClipboardJS from \"clipboard\"\nimport {\n Observable,\n Subject,\n map,\n tap\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport { getElement } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n alert$: Subject /* Alert subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Extract text to copy\n *\n * @param el - HTML element\n *\n * @returns Extracted text\n */\nfunction extract(el: HTMLElement): string {\n el.setAttribute(\"data-md-copying\", \"\")\n const text = el.innerText\n el.removeAttribute(\"data-md-copying\")\n return text\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up Clipboard.js integration\n *\n * @param options - Options\n */\nexport function setupClipboardJS(\n { alert$ }: SetupOptions\n): void {\n if (ClipboardJS.isSupported()) {\n new Observable(subscriber => {\n new ClipboardJS(\"[data-clipboard-target], [data-clipboard-text]\", {\n text: el => (\n el.getAttribute(\"data-clipboard-text\")! ||\n extract(getElement(\n el.getAttribute(\"data-clipboard-target\")!\n ))\n )\n })\n .on(\"success\", ev => subscriber.next(ev))\n })\n .pipe(\n tap(ev => {\n const trigger = ev.trigger as HTMLElement\n trigger.focus()\n }),\n map(() => translation(\"clipboard.copied\"))\n )\n .subscribe(alert$)\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map,\n of,\n tap\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport { getElements, requestXML } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sitemap, i.e. a list of URLs\n */\nexport type Sitemap = string[]\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Preprocess a list of URLs\n *\n * This function replaces the `site_url` in the sitemap with the actual base\n * URL, to allow instant loading to work in occasions like Netlify previews.\n *\n * @param urls - URLs\n *\n * @returns URL path parts\n */\nfunction preprocess(urls: Sitemap): Sitemap {\n if (urls.length < 2)\n return [\"\"]\n\n /* Take the first two URLs and remove everything after the last slash */\n const [root, next] = [...urls]\n .sort((a, b) => a.length - b.length)\n .map(url => url.replace(/[^/]+$/, \"\"))\n\n /* Compute common prefix */\n let index = 0\n if (root === next)\n index = root.length\n else\n while (root.charCodeAt(index) === next.charCodeAt(index))\n index++\n\n /* Remove common prefix and return in original order */\n return urls.map(url => url.replace(root.slice(0, index), \"\"))\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch the sitemap for the given base URL\n *\n * @param base - Base URL\n *\n * @returns Sitemap observable\n */\nexport function fetchSitemap(base?: URL): Observable {\n const cached = __md_get(\"__sitemap\", sessionStorage, base)\n if (cached) {\n return of(cached)\n } else {\n const config = configuration()\n return requestXML(new URL(\"sitemap.xml\", base || config.base))\n .pipe(\n map(sitemap => preprocess(getElements(\"loc\", sitemap)\n .map(node => node.textContent!)\n )),\n catchError(() => EMPTY), // @todo refactor instant loading\n defaultIfEmpty([]),\n tap(sitemap => __md_set(\"__sitemap\", sitemap, sessionStorage, base))\n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n NEVER,\n Observable,\n Subject,\n bufferCount,\n catchError,\n concatMap,\n debounceTime,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n fromEvent,\n map,\n merge,\n of,\n sample,\n share,\n skip,\n skipUntil,\n switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"~/_\"\nimport {\n Viewport,\n ViewportOffset,\n getElements,\n getOptionalElement,\n request,\n setLocation,\n setLocationHash\n} from \"~/browser\"\nimport { getComponentElement } from \"~/components\"\nimport { h } from \"~/utilities\"\n\nimport { fetchSitemap } from \"../sitemap\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * History state\n */\nexport interface HistoryState {\n url: URL /* State URL */\n offset?: ViewportOffset /* State viewport offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Subject /* Document subject */\n location$: Subject /* Location subject */\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up instant loading\n *\n * When fetching, theoretically, we could use `responseType: \"document\"`, but\n * since all MkDocs links are relative, we need to make sure that the current\n * location matches the document we just loaded. Otherwise any relative links\n * in the document could use the old location.\n *\n * This is the reason why we need to synchronize history events and the process\n * of fetching the document for navigation changes (except `popstate` events):\n *\n * 1. Fetch document via `XMLHTTPRequest`\n * 2. Set new location via `history.pushState`\n * 3. Parse and emit fetched document\n *\n * For `popstate` events, we must not use `history.pushState`, or the forward\n * history will be irreversibly overwritten. In case the request fails, the\n * location change is dispatched regularly.\n *\n * @param options - Options\n */\nexport function setupInstantLoading(\n { document$, location$, viewport$ }: SetupOptions\n): void {\n const config = configuration()\n if (location.protocol === \"file:\")\n return\n\n /* Disable automatic scroll restoration */\n if (\"scrollRestoration\" in history) {\n history.scrollRestoration = \"manual\"\n\n /* Hack: ensure that reloads restore viewport offset */\n fromEvent(window, \"beforeunload\")\n .subscribe(() => {\n history.scrollRestoration = \"auto\"\n })\n }\n\n /* Hack: ensure absolute favicon link to omit 404s when switching */\n const favicon = getOptionalElement(\"link[rel=icon]\")\n if (typeof favicon !== \"undefined\")\n favicon.href = favicon.href\n\n /* Intercept internal navigation */\n const push$ = fetchSitemap()\n .pipe(\n map(paths => paths.map(path => `${new URL(path, config.base)}`)),\n switchMap(urls => fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !ev.metaKey && !ev.ctrlKey),\n switchMap(ev => {\n if (ev.target instanceof Element) {\n const el = ev.target.closest(\"a\")\n if (el && !el.target) {\n const url = new URL(el.href)\n\n /* Canonicalize URL */\n url.search = \"\"\n url.hash = \"\"\n\n /* Check if URL should be intercepted */\n if (\n url.pathname !== location.pathname &&\n urls.includes(url.toString())\n ) {\n ev.preventDefault()\n return of({\n url: new URL(el.href)\n })\n }\n }\n }\n return NEVER\n })\n )\n ),\n share()\n )\n\n /* Intercept history back and forward */\n const pop$ = fromEvent(window, \"popstate\")\n .pipe(\n filter(ev => ev.state !== null),\n map(ev => ({\n url: new URL(location.href),\n offset: ev.state\n })),\n share()\n )\n\n /* Emit location change */\n merge(push$, pop$)\n .pipe(\n distinctUntilChanged((a, b) => a.url.href === b.url.href),\n map(({ url }) => url)\n )\n .subscribe(location$)\n\n /* Fetch document via `XMLHTTPRequest` */\n const response$ = location$\n .pipe(\n distinctUntilKeyChanged(\"pathname\"),\n switchMap(url => request(url.href)\n .pipe(\n catchError(() => {\n setLocation(url)\n return NEVER\n })\n )\n ),\n share()\n )\n\n /* Set new location via `history.pushState` */\n push$\n .pipe(\n sample(response$)\n )\n .subscribe(({ url }) => {\n history.pushState({}, \"\", `${url}`)\n })\n\n /* Parse and emit fetched document */\n const dom = new DOMParser()\n response$\n .pipe(\n switchMap(res => res.text()),\n map(res => dom.parseFromString(res, \"text/html\"))\n )\n .subscribe(document$)\n\n /* Replace meta tags and components */\n document$\n .pipe(\n skip(1)\n )\n .subscribe(replacement => {\n for (const selector of [\n\n /* Meta tags */\n \"title\",\n \"link[rel=canonical]\",\n \"meta[name=author]\",\n \"meta[name=description]\",\n\n /* Components */\n \"[data-md-component=announce]\",\n \"[data-md-component=container]\",\n \"[data-md-component=header-topic]\",\n \"[data-md-component=outdated]\",\n \"[data-md-component=logo]\",\n \"[data-md-component=skip]\",\n ...feature(\"navigation.tabs.sticky\")\n ? [\"[data-md-component=tabs]\"]\n : []\n ]) {\n const source = getOptionalElement(selector)\n const target = getOptionalElement(selector, replacement)\n if (\n typeof source !== \"undefined\" &&\n typeof target !== \"undefined\"\n ) {\n source.replaceWith(target)\n }\n }\n })\n\n /* Re-evaluate scripts */\n document$\n .pipe(\n skip(1),\n map(() => getComponentElement(\"container\")),\n switchMap(el => getElements(\"script\", el)),\n concatMap(el => {\n const script = h(\"script\")\n if (el.src) {\n for (const name of el.getAttributeNames())\n script.setAttribute(name, el.getAttribute(name)!)\n el.replaceWith(script)\n\n /* Complete when script is loaded */\n return new Observable(observer => {\n script.onload = () => observer.complete()\n })\n\n /* Complete immediately */\n } else {\n script.textContent = el.textContent\n el.replaceWith(script)\n return EMPTY\n }\n })\n )\n .subscribe()\n\n /* Emit history state change */\n merge(push$, pop$)\n .pipe(\n sample(document$)\n )\n .subscribe(({ url, offset }) => {\n if (url.hash && !offset) {\n setLocationHash(url.hash)\n } else {\n window.scrollTo(0, offset?.y || 0)\n }\n })\n\n /* Debounce update of viewport offset */\n viewport$\n .pipe(\n skipUntil(push$),\n debounceTime(250),\n distinctUntilKeyChanged(\"offset\")\n )\n .subscribe(({ offset }) => {\n history.replaceState(offset, \"\")\n })\n\n /* Set viewport offset from history */\n merge(push$, pop$)\n .pipe(\n bufferCount(2, 1),\n filter(([a, b]) => a.url.pathname === b.url.pathname),\n map(([, state]) => state)\n )\n .subscribe(({ offset }) => {\n window.scrollTo(0, offset?.y || 0)\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexDocument } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search document\n */\nexport interface SearchDocument extends SearchIndexDocument {\n parent?: SearchIndexDocument /* Parent article */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Search document mapping\n */\nexport type SearchDocumentMap = Map\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search document mapping\n *\n * @param docs - Search index documents\n *\n * @returns Search document map\n */\nexport function setupSearchDocumentMap(\n docs: SearchIndexDocument[]\n): SearchDocumentMap {\n const documents = new Map()\n const parents = new Set()\n for (const doc of docs) {\n const [path, hash] = doc.location.split(\"#\")\n\n /* Extract location, title and tags */\n const location = doc.location\n const title = doc.title\n const tags = doc.tags\n\n /* Escape and cleanup text */\n const text = escapeHTML(doc.text)\n .replace(/\\s+(?=[,.:;!?])/g, \"\")\n .replace(/\\s+/g, \" \")\n\n /* Handle section */\n if (hash) {\n const parent = documents.get(path)!\n\n /* Ignore first section, override article */\n if (!parents.has(parent)) {\n parent.title = doc.title\n parent.text = text\n\n /* Remember that we processed the article */\n parents.add(parent)\n\n /* Add subsequent section */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n parent\n })\n }\n\n /* Add article */\n } else {\n documents.set(location, {\n location,\n title,\n text,\n ...tags && { tags }\n })\n }\n }\n return documents\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport escapeHTML from \"escape-html\"\n\nimport { SearchIndexConfig } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlight function\n *\n * @param value - Value\n *\n * @returns Highlighted value\n */\nexport type SearchHighlightFn = (value: string) => string\n\n/**\n * Search highlight factory function\n *\n * @param query - Query value\n *\n * @returns Search highlight function\n */\nexport type SearchHighlightFactoryFn = (query: string) => SearchHighlightFn\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create a search highlighter\n *\n * @param config - Search index configuration\n * @param escape - Whether to escape HTML\n *\n * @returns Search highlight factory function\n */\nexport function setupSearchHighlighter(\n config: SearchIndexConfig, escape: boolean\n): SearchHighlightFactoryFn {\n const separator = new RegExp(config.separator, \"img\")\n const highlight = (_: unknown, data: string, term: string) => {\n return `${data}${term}`\n }\n\n /* Return factory function */\n return (query: string) => {\n query = query\n .replace(/[\\s*+\\-:~^]+/g, \" \")\n .trim()\n\n /* Create search term match expression */\n const match = new RegExp(`(^|${config.separator})(${\n query\n .replace(/[|\\\\{}()[\\]^$+*?.-]/g, \"\\\\$&\")\n .replace(separator, \"|\")\n })`, \"img\")\n\n /* Highlight string value */\n return value => (\n escape\n ? escapeHTML(value)\n : value\n )\n .replace(match, highlight)\n .replace(/<\\/mark>(\\s+)]*>/img, \"$1\")\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search transformation function\n *\n * @param value - Query value\n *\n * @returns Transformed query value\n */\nexport type SearchTransformFn = (value: string) => string\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Default transformation function\n *\n * 1. Search for terms in quotation marks and prepend a `+` modifier to denote\n * that the resulting document must contain all terms, converting the query\n * to an `AND` query (as opposed to the default `OR` behavior). While users\n * may expect terms enclosed in quotation marks to map to span queries, i.e.\n * for which order is important, Lunr.js doesn't support them, so the best\n * we can do is to convert the terms to an `AND` query.\n *\n * 2. Replace control characters which are not located at the beginning of the\n * query or preceded by white space, or are not followed by a non-whitespace\n * character or are at the end of the query string. Furthermore, filter\n * unmatched quotation marks.\n *\n * 3. Trim excess whitespace from left and right.\n *\n * @param query - Query value\n *\n * @returns Transformed query value\n */\nexport function defaultTransform(query: string): string {\n return query\n .split(/\"([^\"]+)\"/g) /* => 1 */\n .map((terms, index) => index & 1\n ? terms.replace(/^\\b|^(?![^\\x00-\\x7F]|$)|\\s+/g, \" +\")\n : terms\n )\n .join(\"\")\n .replace(/\"|(?:^|\\s+)[*+\\-:^~]+(?=\\s+|$)/g, \"\") /* => 2 */\n .trim() /* => 3 */\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SearchIndex, SearchResult } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search message type\n */\nexport const enum SearchMessageType {\n SETUP, /* Search index setup */\n READY, /* Search index ready */\n QUERY, /* Search query */\n RESULT /* Search results */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Message containing the data necessary to setup the search index\n */\nexport interface SearchSetupMessage {\n type: SearchMessageType.SETUP /* Message type */\n data: SearchIndex /* Message data */\n}\n\n/**\n * Message indicating the search index is ready\n */\nexport interface SearchReadyMessage {\n type: SearchMessageType.READY /* Message type */\n}\n\n/**\n * Message containing a search query\n */\nexport interface SearchQueryMessage {\n type: SearchMessageType.QUERY /* Message type */\n data: string /* Message data */\n}\n\n/**\n * Message containing results for a search query\n */\nexport interface SearchResultMessage {\n type: SearchMessageType.RESULT /* Message type */\n data: SearchResult /* Message data */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Message exchanged with the search worker\n */\nexport type SearchMessage =\n | SearchSetupMessage\n | SearchReadyMessage\n | SearchQueryMessage\n | SearchResultMessage\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Type guard for search setup messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchSetupMessage(\n message: SearchMessage\n): message is SearchSetupMessage {\n return message.type === SearchMessageType.SETUP\n}\n\n/**\n * Type guard for search ready messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchReadyMessage(\n message: SearchMessage\n): message is SearchReadyMessage {\n return message.type === SearchMessageType.READY\n}\n\n/**\n * Type guard for search query messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchQueryMessage(\n message: SearchMessage\n): message is SearchQueryMessage {\n return message.type === SearchMessageType.QUERY\n}\n\n/**\n * Type guard for search result messages\n *\n * @param message - Search worker message\n *\n * @returns Test result\n */\nexport function isSearchResultMessage(\n message: SearchMessage\n): message is SearchResultMessage {\n return message.type === SearchMessageType.RESULT\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A RTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n ObservableInput,\n Subject,\n from,\n map,\n share\n} from \"rxjs\"\n\nimport { configuration, feature, translation } from \"~/_\"\nimport { WorkerHandler, watchWorker } from \"~/browser\"\n\nimport { SearchIndex } from \"../../_\"\nimport {\n SearchOptions,\n SearchPipeline\n} from \"../../options\"\nimport {\n SearchMessage,\n SearchMessageType,\n SearchSetupMessage,\n isSearchResultMessage\n} from \"../message\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search worker\n */\nexport type SearchWorker = WorkerHandler\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up search index\n *\n * @param data - Search index\n *\n * @returns Search index\n */\nfunction setupSearchIndex({ config, docs }: SearchIndex): SearchIndex {\n\n /* Override default language with value from translation */\n if (config.lang.length === 1 && config.lang[0] === \"en\")\n config.lang = [\n translation(\"search.config.lang\")\n ]\n\n /* Override default separator with value from translation */\n if (config.separator === \"[\\\\s\\\\-]+\")\n config.separator = translation(\"search.config.separator\")\n\n /* Set pipeline from translation */\n const pipeline = translation(\"search.config.pipeline\")\n .split(/\\s*,\\s*/)\n .filter(Boolean) as SearchPipeline\n\n /* Determine search options */\n const options: SearchOptions = {\n pipeline,\n suggestions: feature(\"search.suggest\")\n }\n\n /* Return search index after defaulting */\n return { config, docs, options }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up search worker\n *\n * This function creates a web worker to set up and query the search index,\n * which is done using Lunr.js. The index must be passed as an observable to\n * enable hacks like _localsearch_ via search index embedding as JSON.\n *\n * @param url - Worker URL\n * @param index - Search index observable input\n *\n * @returns Search worker\n */\nexport function setupSearchWorker(\n url: string, index: ObservableInput\n): SearchWorker {\n const config = configuration()\n const worker = new Worker(url)\n\n /* Create communication channels and resolve relative links */\n const tx$ = new Subject()\n const rx$ = watchWorker(worker, { tx$ })\n .pipe(\n map(message => {\n if (isSearchResultMessage(message)) {\n for (const result of message.data.items)\n for (const document of result)\n document.location = `${new URL(document.location, config.base)}`\n }\n return message\n }),\n share()\n )\n\n /* Set up search index */\n from(index)\n .pipe(\n map(data => ({\n type: SearchMessageType.SETUP,\n data: setupSearchIndex(data)\n } as SearchSetupMessage))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Return search worker */\n return { tx$, rx$ }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Subject,\n catchError,\n combineLatest,\n filter,\n fromEvent,\n map,\n of,\n switchMap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport {\n getElement,\n getLocation,\n requestJSON,\n setLocation\n} from \"~/browser\"\nimport { getComponentElements } from \"~/components\"\nimport {\n Version,\n renderVersionSelector\n} from \"~/templates\"\n\nimport { fetchSitemap } from \"../sitemap\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Setup options\n */\ninterface SetupOptions {\n document$: Subject /* Document subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Set up version selector\n *\n * @param options - Options\n */\nexport function setupVersionSelector(\n { document$ }: SetupOptions\n): void {\n const config = configuration()\n const versions$ = requestJSON(\n new URL(\"../versions.json\", config.base)\n )\n .pipe(\n catchError(() => EMPTY) // @todo refactor instant loading\n )\n\n /* Determine current version */\n const current$ = versions$\n .pipe(\n map(versions => {\n const [, current] = config.base.match(/([^/]+)\\/?$/)!\n return versions.find(({ version, aliases }) => (\n version === current || aliases.includes(current)\n )) || versions[0]\n })\n )\n\n /* Intercept inter-version navigation */\n versions$\n .pipe(\n map(versions => new Map(versions.map(version => [\n `${new URL(`../${version.version}/`, config.base)}`,\n version\n ]))),\n switchMap(urls => fromEvent(document.body, \"click\")\n .pipe(\n filter(ev => !ev.metaKey && !ev.ctrlKey),\n withLatestFrom(current$),\n switchMap(([ev, current]) => {\n if (ev.target instanceof Element) {\n const el = ev.target.closest(\"a\")\n if (el && !el.target && urls.has(el.href)) {\n const url = el.href\n // This is a temporary hack to detect if a version inside the\n // version selector or on another part of the site was clicked.\n // If we're inside the version selector, we definitely want to\n // find the same page, as we might have different deployments\n // due to aliases. However, if we're outside the version\n // selector, we must abort here, because we might otherwise\n // interfere with instant loading. We need to refactor this\n // at some point together with instant loading.\n //\n // See https://github.com/squidfunk/mkdocs-material/issues/4012\n if (!ev.target.closest(\".md-version\")) {\n const version = urls.get(url)!\n if (version === current)\n return EMPTY\n }\n ev.preventDefault()\n return of(url)\n }\n }\n return EMPTY\n }),\n switchMap(url => {\n const { version } = urls.get(url)!\n return fetchSitemap(new URL(url))\n .pipe(\n map(sitemap => {\n const location = getLocation()\n const path = location.href.replace(config.base, \"\")\n return sitemap.includes(path.split(\"#\")[0])\n ? new URL(`../${version}/${path}`, config.base)\n : new URL(url)\n })\n )\n })\n )\n )\n )\n .subscribe(url => setLocation(url))\n\n /* Render version selector and warning */\n combineLatest([versions$, current$])\n .subscribe(([versions, current]) => {\n const topic = getElement(\".md-header__topic\")\n topic.appendChild(renderVersionSelector(versions, current))\n })\n\n /* Integrate outdated version banner with instant loading */\n document$.pipe(switchMap(() => current$))\n .subscribe(current => {\n\n /* Check if version state was already determined */\n let outdated = __md_get(\"__outdated\", sessionStorage)\n if (outdated === null) {\n const latest = config.version?.default || \"latest\"\n outdated = !current.aliases.includes(latest)\n\n /* Persist version state in session storage */\n __md_set(\"__outdated\", outdated, sessionStorage)\n }\n\n /* Unhide outdated version banner */\n if (outdated)\n for (const warning of getComponentElements(\"outdated\"))\n warning.hidden = false\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n combineLatest,\n delay,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n share,\n shareReplay,\n startWith,\n take,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport {\n getLocation,\n setToggle,\n watchElementFocus,\n watchToggle\n} from \"~/browser\"\nimport {\n SearchMessageType,\n SearchQueryMessage,\n SearchWorker,\n defaultTransform,\n isSearchReadyMessage\n} from \"~/integrations\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n * @param worker - Search worker\n *\n * @returns Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement, { rx$ }: SearchWorker\n): Observable {\n const fn = __search?.transform || defaultTransform\n\n /* Immediately show search dialog */\n const { searchParams } = getLocation()\n if (searchParams.has(\"q\"))\n setToggle(\"search\", true)\n\n /* Intercept query parameter (deep link) */\n const param$ = rx$\n .pipe(\n filter(isSearchReadyMessage),\n take(1),\n map(() => searchParams.get(\"q\") || \"\")\n )\n\n /* Remove query parameter when search is closed */\n watchToggle(\"search\")\n .pipe(\n filter(active => !active),\n take(1)\n )\n .subscribe(() => {\n const url = new URL(location.href)\n url.searchParams.delete(\"q\")\n history.replaceState({}, \"\", `${url}`)\n })\n\n /* Set query from parameter */\n param$.subscribe(value => { // TODO: not ideal - find a better way\n if (value) {\n el.value = value\n el.focus()\n }\n })\n\n /* Intercept focus and input events */\n const focus$ = watchElementFocus(el)\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1)),\n param$\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(\"\"),\n distinctUntilChanged(),\n )\n\n /* Combine into single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus })),\n shareReplay(1)\n )\n}\n\n/**\n * Mount search query\n *\n * @param el - Search query element\n * @param worker - Search worker\n *\n * @returns Search query component observable\n */\nexport function mountSearchQuery(\n el: HTMLInputElement, { tx$, rx$ }: SearchWorker\n): Observable> {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n\n /* Handle value changes */\n push$\n .pipe(\n distinctUntilKeyChanged(\"value\"),\n map(({ value }): SearchQueryMessage => ({\n type: SearchMessageType.QUERY,\n data: value\n }))\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Handle focus changes */\n push$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus) {\n setToggle(\"search\", focus)\n el.placeholder = \"\"\n } else {\n el.placeholder = translation(\"search.placeholder\")\n }\n })\n\n /* Handle reset */\n fromEvent(el.form!, \"reset\")\n .pipe(\n takeUntil(done$)\n )\n .subscribe(() => el.focus())\n\n /* Create and return component */\n return watchSearchQuery(el, { tx$, rx$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state })),\n share()\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n filter,\n finalize,\n map,\n merge,\n of,\n skipUntil,\n switchMap,\n take,\n tap,\n withLatestFrom,\n zipWith\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport {\n getElement,\n watchElementBoundary\n} from \"~/browser\"\nimport {\n SearchResult,\n SearchWorker,\n isSearchReadyMessage,\n isSearchResultMessage\n} from \"~/integrations\"\nimport { renderSearchResultItem } from \"~/templates\"\nimport { round } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search result list\n *\n * This function performs a lazy rendering of the search results, depending on\n * the vertical offset of the search result container.\n *\n * @param el - Search result list element\n * @param worker - Search worker\n * @param options - Options\n *\n * @returns Search result list component observable\n */\nexport function mountSearchResult(\n el: HTMLElement, { rx$ }: SearchWorker, { query$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n const boundary$ = watchElementBoundary(el.parentElement!)\n .pipe(\n filter(Boolean)\n )\n\n /* Retrieve nested components */\n const meta = getElement(\":scope > :first-child\", el)\n const list = getElement(\":scope > :last-child\", el)\n\n /* Wait until search is ready */\n const ready$ = rx$\n .pipe(\n filter(isSearchReadyMessage),\n take(1)\n )\n\n /* Update search result metadata */\n push$\n .pipe(\n withLatestFrom(query$),\n skipUntil(ready$)\n )\n .subscribe(([{ items }, { value }]) => {\n if (value) {\n switch (items.length) {\n\n /* No results */\n case 0:\n meta.textContent = translation(\"search.result.none\")\n break\n\n /* One result */\n case 1:\n meta.textContent = translation(\"search.result.one\")\n break\n\n /* Multiple result */\n default:\n meta.textContent = translation(\n \"search.result.other\",\n round(items.length)\n )\n }\n } else {\n meta.textContent = translation(\"search.result.placeholder\")\n }\n })\n\n /* Update search result list */\n push$\n .pipe(\n tap(() => list.innerHTML = \"\"),\n switchMap(({ items }) => merge(\n of(...items.slice(0, 10)),\n of(...items.slice(10))\n .pipe(\n bufferCount(4),\n zipWith(boundary$),\n switchMap(([chunk]) => chunk)\n )\n ))\n )\n .subscribe(result => list.appendChild(\n renderSearchResultItem(result)\n ))\n\n /* Filter search result message */\n const result$ = rx$\n .pipe(\n filter(isSearchResultMessage),\n map(({ data }) => data)\n )\n\n /* Create and return component */\n return result$\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n finalize,\n fromEvent,\n map,\n tap\n} from \"rxjs\"\n\nimport { getLocation } from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { SearchQuery } from \"../query\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search sharing\n */\nexport interface SearchShare {\n url: URL /* Deep link for sharing */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n query$: Observable /* Search query observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n query$: Observable /* Search query observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search sharing\n *\n * @param _el - Search sharing element\n * @param options - Options\n *\n * @returns Search sharing observable\n */\nexport function watchSearchShare(\n _el: HTMLElement, { query$ }: WatchOptions\n): Observable {\n return query$\n .pipe(\n map(({ value }) => {\n const url = getLocation()\n url.hash = \"\"\n url.searchParams.delete(\"h\")\n url.searchParams.set(\"q\", value)\n return { url }\n })\n )\n}\n\n/**\n * Mount search sharing\n *\n * @param el - Search sharing element\n * @param options - Options\n *\n * @returns Search sharing component observable\n */\nexport function mountSearchShare(\n el: HTMLAnchorElement, options: MountOptions\n): Observable> {\n const push$ = new Subject()\n push$.subscribe(({ url }) => {\n el.setAttribute(\"data-clipboard-text\", el.href)\n el.href = `${url}`\n })\n\n /* Prevent following of link */\n fromEvent(el, \"click\")\n .subscribe(ev => ev.preventDefault())\n\n /* Create and return component */\n return watchSearchShare(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n asyncScheduler,\n combineLatestWith,\n distinctUntilChanged,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n observeOn,\n tap\n} from \"rxjs\"\n\nimport { Keyboard } from \"~/browser\"\nimport {\n SearchResult,\n SearchWorker,\n isSearchResultMessage\n} from \"~/integrations\"\n\nimport { Component, getComponentElement } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search suggestions\n */\nexport interface SearchSuggest {}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n keyboard$: Observable /* Keyboard observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search suggestions\n *\n * This function will perform a lazy rendering of the search results, depending\n * on the vertical offset of the search result container.\n *\n * @param el - Search result list element\n * @param worker - Search worker\n * @param options - Options\n *\n * @returns Search result list component observable\n */\nexport function mountSearchSuggest(\n el: HTMLElement, { rx$ }: SearchWorker, { keyboard$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n\n /* Retrieve query component and track all changes */\n const query = getComponentElement(\"search-query\")\n const query$ = merge(\n fromEvent(query, \"keydown\"),\n fromEvent(query, \"focus\")\n )\n .pipe(\n observeOn(asyncScheduler),\n map(() => query.value),\n distinctUntilChanged(),\n )\n\n /* Update search suggestions */\n push$\n .pipe(\n combineLatestWith(query$),\n map(([{ suggestions }, value]) => {\n const words = value.split(/([\\s-]+)/)\n if (suggestions?.length && words[words.length - 1]) {\n const last = suggestions[suggestions.length - 1]\n if (last.startsWith(words[words.length - 1]))\n words[words.length - 1] = last\n } else {\n words.length = 0\n }\n return words\n })\n )\n .subscribe(words => el.innerHTML = words\n .join(\"\")\n .replace(/\\s/g, \" \")\n )\n\n /* Set up search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\")\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Right arrow: accept current suggestion */\n case \"ArrowRight\":\n if (\n el.innerText.length &&\n query.selectionStart === query.value.length\n )\n query.value = el.innerText\n break\n }\n })\n\n /* Filter search result message */\n const result$ = rx$\n .pipe(\n filter(isSearchResultMessage),\n map(({ data }) => data)\n )\n\n /* Create and return component */\n return result$\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(() => ({ ref: el }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n Observable,\n ObservableInput,\n filter,\n merge,\n mergeWith,\n sample,\n take\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport {\n Keyboard,\n getActiveElement,\n getElements,\n setToggle\n} from \"~/browser\"\nimport {\n SearchIndex,\n SearchResult,\n isSearchQueryMessage,\n isSearchReadyMessage,\n setupSearchWorker\n} from \"~/integrations\"\n\nimport {\n Component,\n getComponentElement,\n getComponentElements\n} from \"../../_\"\nimport {\n SearchQuery,\n mountSearchQuery\n} from \"../query\"\nimport { mountSearchResult } from \"../result\"\nimport {\n SearchShare,\n mountSearchShare\n} from \"../share\"\nimport {\n SearchSuggest,\n mountSearchSuggest\n} from \"../suggest\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search\n */\nexport type Search =\n | SearchQuery\n | SearchResult\n | SearchShare\n | SearchSuggest\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n index$: ObservableInput /* Search index observable */\n keyboard$: Observable /* Keyboard observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search\n *\n * This function sets up the search functionality, including the underlying\n * web worker and all keyboard bindings.\n *\n * @param el - Search element\n * @param options - Options\n *\n * @returns Search component observable\n */\nexport function mountSearch(\n el: HTMLElement, { index$, keyboard$ }: MountOptions\n): Observable> {\n const config = configuration()\n try {\n const url = __search?.worker || config.search\n const worker = setupSearchWorker(url, index$)\n\n /* Retrieve query and result components */\n const query = getComponentElement(\"search-query\", el)\n const result = getComponentElement(\"search-result\", el)\n\n /* Re-emit query when search is ready */\n const { tx$, rx$ } = worker\n tx$\n .pipe(\n filter(isSearchQueryMessage),\n sample(rx$.pipe(filter(isSearchReadyMessage))),\n take(1)\n )\n .subscribe(tx$.next.bind(tx$))\n\n /* Set up search keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"search\")\n )\n .subscribe(key => {\n const active = getActiveElement()\n switch (key.type) {\n\n /* Enter: go to first (best) result */\n case \"Enter\":\n if (active === query) {\n const anchors = new Map()\n for (const anchor of getElements(\n \":first-child [href]\", result\n )) {\n const article = anchor.firstElementChild!\n anchors.set(anchor, parseFloat(\n article.getAttribute(\"data-md-score\")!\n ))\n }\n\n /* Go to result with highest score, if any */\n if (anchors.size) {\n const [[best]] = [...anchors].sort(([, a], [, b]) => b - a)\n best.click()\n }\n\n /* Otherwise omit form submission */\n key.claim()\n }\n break\n\n /* Escape or Tab: close search */\n case \"Escape\":\n case \"Tab\":\n setToggle(\"search\", false)\n query.blur()\n break\n\n /* Vertical arrows: select previous or next search result */\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (typeof active === \"undefined\") {\n query.focus()\n } else {\n const els = [query, ...getElements(\n \":not(details) > [href], summary, details[open] [href]\",\n result\n )]\n const i = Math.max(0, (\n Math.max(0, els.indexOf(active)) + els.length + (\n key.type === \"ArrowUp\" ? -1 : +1\n )\n ) % els.length)\n els[i].focus()\n }\n\n /* Prevent scrolling of page */\n key.claim()\n break\n\n /* All other keys: hand to search query */\n default:\n if (query !== getActiveElement())\n query.focus()\n }\n })\n\n /* Set up global keyboard handlers */\n keyboard$\n .pipe(\n filter(({ mode }) => mode === \"global\"),\n )\n .subscribe(key => {\n switch (key.type) {\n\n /* Open search and select query */\n case \"f\":\n case \"s\":\n case \"/\":\n query.focus()\n query.select()\n\n /* Prevent scrolling of page */\n key.claim()\n break\n }\n })\n\n /* Create and return component */\n const query$ = mountSearchQuery(query, worker)\n const result$ = mountSearchResult(result, worker, { query$ })\n return merge(query$, result$)\n .pipe(\n mergeWith(\n\n /* Search sharing */\n ...getComponentElements(\"search-share\", el)\n .map(child => mountSearchShare(child, { query$ })),\n\n /* Search suggestions */\n ...getComponentElements(\"search-suggest\", el)\n .map(child => mountSearchSuggest(child, worker, { keyboard$ }))\n )\n )\n\n /* Gracefully handle broken search */\n } catch (err) {\n el.hidden = true\n return NEVER\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n ObservableInput,\n combineLatest,\n filter,\n map,\n startWith\n} from \"rxjs\"\n\nimport { getLocation } from \"~/browser\"\nimport {\n SearchIndex,\n setupSearchHighlighter\n} from \"~/integrations\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search highlighting\n */\nexport interface SearchHighlight {\n nodes: Map /* Map of replacements */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n index$: ObservableInput /* Search index observable */\n location$: Observable /* Location observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount search highlighting\n *\n * @param el - Content element\n * @param options - Options\n *\n * @returns Search highlighting component observable\n */\nexport function mountSearchHiglight(\n el: HTMLElement, { index$, location$ }: MountOptions\n): Observable> {\n return combineLatest([\n index$,\n location$\n .pipe(\n startWith(getLocation()),\n filter(url => !!url.searchParams.get(\"h\"))\n )\n ])\n .pipe(\n map(([index, url]) => setupSearchHighlighter(index.config, true)(\n url.searchParams.get(\"h\")!\n )),\n map(fn => {\n const nodes = new Map()\n\n /* Traverse text nodes and collect matches */\n const it = document.createNodeIterator(el, NodeFilter.SHOW_TEXT)\n for (let node = it.nextNode(); node; node = it.nextNode()) {\n if (node.parentElement?.offsetHeight) {\n const original = node.textContent!\n const replaced = fn(original)\n if (replaced.length > original.length)\n nodes.set(node as ChildNode, replaced)\n }\n }\n\n /* Replace original nodes with matches */\n for (const [node, text] of nodes) {\n const { childNodes } = h(\"span\", null, text)\n node.replaceWith(...Array.from(childNodes))\n }\n\n /* Return component */\n return { ref: el, nodes }\n })\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n auditTime,\n combineLatest,\n defer,\n distinctUntilChanged,\n finalize,\n map,\n observeOn,\n take,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n Viewport,\n getElement,\n getElementContainer,\n getElementOffset,\n getElementSize,\n getElements\n} from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\nimport { Main } from \"../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Sidebar\n */\nexport interface Sidebar {\n height: number /* Sidebar height */\n locked: boolean /* Sidebar is locked */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n main$: Observable
    /* Main area observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch sidebar\n *\n * This function returns an observable that computes the visual parameters of\n * the sidebar which depends on the vertical viewport offset, as well as the\n * height of the main area. When the page is scrolled beyond the header, the\n * sidebar is locked and fills the remaining space.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @returns Sidebar observable\n */\nexport function watchSidebar(\n el: HTMLElement, { viewport$, main$ }: WatchOptions\n): Observable {\n const parent = el.parentElement!\n const adjust =\n parent.offsetTop -\n parent.parentElement!.offsetTop\n\n /* Compute the sidebar's available height and if it should be locked */\n return combineLatest([main$, viewport$])\n .pipe(\n map(([{ offset, height }, { offset: { y } }]) => {\n height = height\n + Math.min(adjust, Math.max(0, y - offset))\n - adjust\n return {\n height,\n locked: y >= offset + adjust\n }\n }),\n distinctUntilChanged((a, b) => (\n a.height === b.height &&\n a.locked === b.locked\n ))\n )\n}\n\n/**\n * Mount sidebar\n *\n * This function doesn't set the height of the actual sidebar, but of its first\n * child \u2013 the `.md-sidebar__scrollwrap` element in order to mitigiate jittery\n * sidebars when the footer is scrolled into view. At some point we switched\n * from `absolute` / `fixed` positioning to `sticky` positioning, significantly\n * reducing jitter in some browsers (respectively Firefox and Safari) when\n * scrolling from the top. However, top-aligned sticky positioning means that\n * the sidebar snaps to the bottom when the end of the container is reached.\n * This is what leads to the mentioned jitter, as the sidebar's height may be\n * updated too slowly.\n *\n * This behaviour can be mitigiated by setting the height of the sidebar to `0`\n * while preserving the padding, and the height on its first element.\n *\n * @param el - Sidebar element\n * @param options - Options\n *\n * @returns Sidebar component observable\n */\nexport function mountSidebar(\n el: HTMLElement, { header$, ...options }: MountOptions\n): Observable> {\n const inner = getElement(\".md-sidebar__scrollwrap\", el)\n const { y } = getElementOffset(inner)\n return defer(() => {\n const push$ = new Subject()\n push$\n .pipe(\n auditTime(0, animationFrameScheduler),\n withLatestFrom(header$)\n )\n .subscribe({\n\n /* Handle emission */\n next([{ height }, { height: offset }]) {\n inner.style.height = `${height - 2 * y}px`\n el.style.top = `${offset}px`\n },\n\n /* Handle complete */\n complete() {\n inner.style.height = \"\"\n el.style.top = \"\"\n }\n })\n\n /* Bring active item into view on initial load */\n push$\n .pipe(\n observeOn(animationFrameScheduler),\n take(1)\n )\n .subscribe(() => {\n for (const item of getElements(\".md-nav__link--active[href]\", el)) {\n const container = getElementContainer(item)\n if (typeof container !== \"undefined\") {\n const offset = item.offsetTop - container.offsetTop\n const { height } = getElementSize(container)\n container.scrollTo({\n top: offset - height / 2\n })\n }\n }\n })\n\n /* Create and return component */\n return watchSidebar(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Repo, User } from \"github-types\"\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map,\n zip\n} from \"rxjs\"\n\nimport { requestJSON } from \"~/browser\"\n\nimport { SourceFacts } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * GitHub release (partial)\n */\ninterface Release {\n tag_name: string /* Tag name */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitHub repository facts\n *\n * @param user - GitHub user or organization\n * @param repo - GitHub repository\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFactsFromGitHub(\n user: string, repo?: string\n): Observable {\n if (typeof repo !== \"undefined\") {\n const url = `https://api.github.com/repos/${user}/${repo}`\n return zip(\n\n /* Fetch version */\n requestJSON(`${url}/releases/latest`)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(release => ({\n version: release.tag_name\n })),\n defaultIfEmpty({})\n ),\n\n /* Fetch stars and forks */\n requestJSON(url)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(info => ({\n stars: info.stargazers_count,\n forks: info.forks_count\n })),\n defaultIfEmpty({})\n )\n )\n .pipe(\n map(([release, info]) => ({ ...release, ...info }))\n )\n\n /* User or organization */\n } else {\n const url = `https://api.github.com/users/${user}`\n return requestJSON(url)\n .pipe(\n map(info => ({\n repositories: info.public_repos\n })),\n defaultIfEmpty({})\n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ProjectSchema } from \"gitlab\"\nimport {\n EMPTY,\n Observable,\n catchError,\n defaultIfEmpty,\n map\n} from \"rxjs\"\n\nimport { requestJSON } from \"~/browser\"\n\nimport { SourceFacts } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch GitLab repository facts\n *\n * @param base - GitLab base\n * @param project - GitLab project\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFactsFromGitLab(\n base: string, project: string\n): Observable {\n const url = `https://${base}/api/v4/projects/${encodeURIComponent(project)}`\n return requestJSON(url)\n .pipe(\n catchError(() => EMPTY), // @todo refactor instant loading\n map(({ star_count, forks_count }) => ({\n stars: star_count,\n forks: forks_count\n })),\n defaultIfEmpty({})\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { EMPTY, Observable } from \"rxjs\"\n\nimport { fetchSourceFactsFromGitHub } from \"../github\"\nimport { fetchSourceFactsFromGitLab } from \"../gitlab\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository facts for repositories\n */\nexport interface RepositoryFacts {\n stars?: number /* Number of stars */\n forks?: number /* Number of forks */\n version?: string /* Latest version */\n}\n\n/**\n * Repository facts for organizations\n */\nexport interface OrganizationFacts {\n repositories?: number /* Number of repositories */\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Repository facts\n */\nexport type SourceFacts =\n | RepositoryFacts\n | OrganizationFacts\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch repository facts\n *\n * @param url - Repository URL\n *\n * @returns Repository facts observable\n */\nexport function fetchSourceFacts(\n url: string\n): Observable {\n\n /* Try to match GitHub repository */\n let match = url.match(/^.+github\\.com\\/([^/]+)\\/?([^/]+)?/i)\n if (match) {\n const [, user, repo] = match\n return fetchSourceFactsFromGitHub(user, repo)\n }\n\n /* Try to match GitLab repository */\n match = url.match(/^.+?([^/]*gitlab[^/]+)\\/(.+?)\\/?$/i)\n if (match) {\n const [, base, slug] = match\n return fetchSourceFactsFromGitLab(base, slug)\n }\n\n /* Fallback */\n return EMPTY\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n catchError,\n defer,\n filter,\n finalize,\n map,\n of,\n shareReplay,\n tap\n} from \"rxjs\"\n\nimport { getElement } from \"~/browser\"\nimport { ConsentDefaults } from \"~/components/consent\"\nimport { renderSourceFacts } from \"~/templates\"\n\nimport {\n Component,\n getComponentElements\n} from \"../../_\"\nimport {\n SourceFacts,\n fetchSourceFacts\n} from \"../facts\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository information\n */\nexport interface Source {\n facts: SourceFacts /* Repository facts */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Repository information observable\n */\nlet fetch$: Observable\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch repository information\n *\n * This function tries to read the repository facts from session storage, and\n * if unsuccessful, fetches them from the underlying provider.\n *\n * @param el - Repository information element\n *\n * @returns Repository information observable\n */\nexport function watchSource(\n el: HTMLAnchorElement\n): Observable {\n return fetch$ ||= defer(() => {\n const cached = __md_get(\"__source\", sessionStorage)\n if (cached) {\n return of(cached)\n } else {\n\n /* Check if consent is configured and was given */\n const els = getComponentElements(\"consent\")\n if (els.length) {\n const consent = __md_get(\"__consent\")\n if (!(consent && consent.github))\n return EMPTY\n }\n\n /* Fetch repository facts */\n return fetchSourceFacts(el.href)\n .pipe(\n tap(facts => __md_set(\"__source\", facts, sessionStorage))\n )\n }\n })\n .pipe(\n catchError(() => EMPTY),\n filter(facts => Object.keys(facts).length > 0),\n map(facts => ({ facts })),\n shareReplay(1)\n )\n}\n\n/**\n * Mount repository information\n *\n * @param el - Repository information element\n *\n * @returns Repository information component observable\n */\nexport function mountSource(\n el: HTMLAnchorElement\n): Observable> {\n const inner = getElement(\":scope > :last-child\", el)\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ facts }) => {\n inner.appendChild(renderSourceFacts(facts))\n inner.classList.add(\"md-source__repository--active\")\n })\n\n /* Create and return component */\n return watchSource(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n distinctUntilKeyChanged,\n finalize,\n map,\n of,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n watchElementSize,\n watchViewportAt\n} from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Navigation tabs\n */\nexport interface Tabs {\n hidden: boolean /* Navigation tabs are hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch navigation tabs\n *\n * @param el - Navigation tabs element\n * @param options - Options\n *\n * @returns Navigation tabs observable\n */\nexport function watchTabs(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n return watchElementSize(document.body)\n .pipe(\n switchMap(() => watchViewportAt(el, { header$, viewport$ })),\n map(({ offset: { y } }) => {\n return {\n hidden: y >= 10\n }\n }),\n distinctUntilKeyChanged(\"hidden\")\n )\n}\n\n/**\n * Mount navigation tabs\n *\n * This function hides the navigation tabs when scrolling past the threshold\n * and makes them reappear in a nice CSS animation when scrolling back up.\n *\n * @param el - Navigation tabs element\n * @param options - Options\n *\n * @returns Navigation tabs component observable\n */\nexport function mountTabs(\n el: HTMLElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe({\n\n /* Handle emission */\n next({ hidden }) {\n el.hidden = hidden\n },\n\n /* Handle complete */\n complete() {\n el.hidden = false\n }\n })\n\n /* Create and return component */\n return (\n feature(\"navigation.tabs.sticky\")\n ? of({ hidden: false })\n : watchTabs(el, options)\n )\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatestWith,\n debounceTime,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n map,\n merge,\n of,\n repeat,\n scan,\n share,\n skip,\n startWith,\n switchMap,\n takeLast,\n takeUntil,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n getElement,\n getElementContainer,\n getElementSize,\n getElements,\n getLocation,\n getOptionalElement,\n watchElementSize\n} from \"~/browser\"\n\nimport {\n Component,\n getComponentElement\n} from \"../_\"\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Table of contents\n */\nexport interface TableOfContents {\n prev: HTMLAnchorElement[][] /* Anchors (previous) */\n next: HTMLAnchorElement[][] /* Anchors (next) */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch table of contents\n *\n * This is effectively a scroll spy implementation which will account for the\n * fixed header and automatically re-calculate anchor offsets when the viewport\n * is resized. The returned observable will only emit if the table of contents\n * needs to be repainted.\n *\n * This implementation tracks an anchor element's entire path starting from its\n * level up to the top-most anchor element, e.g. `[h3, h2, h1]`. Although the\n * Material theme currently doesn't make use of this information, it enables\n * the styling of the entire hierarchy through customization.\n *\n * Note that the current anchor is the last item of the `prev` anchor list.\n *\n * @param el - Table of contents element\n * @param options - Options\n *\n * @returns Table of contents observable\n */\nexport function watchTableOfContents(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n const table = new Map()\n\n /* Compute anchor-to-target mapping */\n const anchors = getElements(\"[href^=\\\\#]\", el)\n for (const anchor of anchors) {\n const id = decodeURIComponent(anchor.hash.substring(1))\n const target = getOptionalElement(`[id=\"${id}\"]`)\n if (typeof target !== \"undefined\")\n table.set(anchor, target)\n }\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n distinctUntilKeyChanged(\"height\"),\n map(({ height }) => {\n const main = getComponentElement(\"main\")\n const grid = getElement(\":scope > :first-child\", main)\n return height + 0.8 * (\n grid.offsetTop -\n main.offsetTop\n )\n }),\n share()\n )\n\n /* Compute partition of previous and next anchors */\n const partition$ = watchElementSize(document.body)\n .pipe(\n distinctUntilKeyChanged(\"height\"),\n\n /* Build index to map anchor paths to vertical offsets */\n switchMap(body => defer(() => {\n let path: HTMLAnchorElement[] = []\n return of([...table].reduce((index, [anchor, target]) => {\n while (path.length) {\n const last = table.get(path[path.length - 1])!\n if (last.tagName >= target.tagName) {\n path.pop()\n } else {\n break\n }\n }\n\n /* If the current anchor is hidden, continue with its parent */\n let offset = target.offsetTop\n while (!offset && target.parentElement) {\n target = target.parentElement\n offset = target.offsetTop\n }\n\n /* Map reversed anchor path to vertical offset */\n return index.set(\n [...path = [...path, anchor]].reverse(),\n offset\n )\n }, new Map()))\n })\n .pipe(\n\n /* Sort index by vertical offset (see https://bit.ly/30z6QSO) */\n map(index => new Map([...index].sort(([, a], [, b]) => a - b))),\n combineLatestWith(adjust$),\n\n /* Re-compute partition when viewport offset changes */\n switchMap(([index, adjust]) => viewport$\n .pipe(\n scan(([prev, next], { offset: { y }, size }) => {\n const last = y + size.height >= Math.floor(body.height)\n\n /* Look forward */\n while (next.length) {\n const [, offset] = next[0]\n if (offset - adjust < y || last) {\n prev = [...prev, next.shift()!]\n } else {\n break\n }\n }\n\n /* Look backward */\n while (prev.length) {\n const [, offset] = prev[prev.length - 1]\n if (offset - adjust >= y && !last) {\n next = [prev.pop()!, ...next]\n } else {\n break\n }\n }\n\n /* Return partition */\n return [prev, next]\n }, [[], [...index]]),\n distinctUntilChanged((a, b) => (\n a[0] === b[0] &&\n a[1] === b[1]\n ))\n )\n )\n )\n )\n )\n\n /* Compute and return anchor list migrations */\n return partition$\n .pipe(\n map(([prev, next]) => ({\n prev: prev.map(([path]) => path),\n next: next.map(([path]) => path)\n })),\n\n /* Extract anchor list migrations */\n startWith({ prev: [], next: [] }),\n bufferCount(2, 1),\n map(([a, b]) => {\n\n /* Moving down */\n if (a.prev.length < b.prev.length) {\n return {\n prev: b.prev.slice(Math.max(0, a.prev.length - 1), b.prev.length),\n next: []\n }\n\n /* Moving up */\n } else {\n return {\n prev: b.prev.slice(-1),\n next: b.next.slice(0, b.next.length - a.next.length)\n }\n }\n })\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount table of contents\n *\n * @param el - Table of contents element\n * @param options - Options\n *\n * @returns Table of contents component observable\n */\nexport function mountTableOfContents(\n el: HTMLElement, { viewport$, header$, target$ }: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe(({ prev, next }) => {\n\n /* Look forward */\n for (const [anchor] of next) {\n anchor.classList.remove(\"md-nav__link--passed\")\n anchor.classList.remove(\"md-nav__link--active\")\n }\n\n /* Look backward */\n for (const [index, [anchor]] of prev.entries()) {\n anchor.classList.add(\"md-nav__link--passed\")\n anchor.classList.toggle(\n \"md-nav__link--active\",\n index === prev.length - 1\n )\n }\n })\n\n /* Set up following, if enabled */\n if (feature(\"toc.follow\")) {\n\n /* Toggle smooth scrolling only for anchor clicks */\n const smooth$ = merge(\n viewport$.pipe(debounceTime(1), map(() => undefined)),\n viewport$.pipe(debounceTime(250), map(() => \"smooth\" as const))\n )\n\n /* Bring active anchor into view */\n push$\n .pipe(\n filter(({ prev }) => prev.length > 0),\n withLatestFrom(smooth$)\n )\n .subscribe(([{ prev }, behavior]) => {\n const [anchor] = prev[prev.length - 1]\n if (anchor.offsetHeight) {\n\n /* Retrieve overflowing container and scroll */\n const container = getElementContainer(anchor)\n if (typeof container !== \"undefined\") {\n const offset = anchor.offsetTop - container.offsetTop\n const { height } = getElementSize(container)\n container.scrollTo({\n top: offset - height / 2,\n behavior\n })\n }\n }\n })\n }\n\n /* Set up anchor tracking, if enabled */\n if (feature(\"navigation.tracking\"))\n viewport$\n .pipe(\n takeUntil(done$),\n distinctUntilKeyChanged(\"offset\"),\n debounceTime(250),\n skip(1),\n takeUntil(target$.pipe(skip(1))),\n repeat({ delay: 250 }),\n withLatestFrom(push$)\n )\n .subscribe(([, { prev }]) => {\n const url = getLocation()\n\n /* Set hash fragment to active anchor */\n const anchor = prev[prev.length - 1]\n if (anchor && anchor.length) {\n const [active] = anchor\n const { hash } = new URL(active.href)\n if (url.hash !== hash) {\n url.hash = hash\n history.replaceState({}, \"\", `${url}`)\n }\n\n /* Reset anchor when at the top */\n } else {\n url.hash = \"\"\n history.replaceState({}, \"\", `${url}`)\n }\n })\n\n /* Create and return component */\n return watchTableOfContents(el, { viewport$, header$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatest,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n endWith,\n finalize,\n map,\n repeat,\n skip,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { Viewport } from \"~/browser\"\n\nimport { Component } from \"../_\"\nimport { Header } from \"../header\"\nimport { Main } from \"../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Back-to-top button\n */\nexport interface BackToTop {\n hidden: boolean /* Back-to-top button is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n main$: Observable
    /* Main area observable */\n target$: Observable /* Location target observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch back-to-top\n *\n * @param _el - Back-to-top element\n * @param options - Options\n *\n * @returns Back-to-top observable\n */\nexport function watchBackToTop(\n _el: HTMLElement, { viewport$, main$, target$ }: WatchOptions\n): Observable {\n\n /* Compute direction */\n const direction$ = viewport$\n .pipe(\n map(({ offset: { y } }) => y),\n bufferCount(2, 1),\n map(([a, b]) => a > b && b > 0),\n distinctUntilChanged()\n )\n\n /* Compute whether main area is active */\n const active$ = main$\n .pipe(\n map(({ active }) => active)\n )\n\n /* Compute threshold for hiding */\n return combineLatest([active$, direction$])\n .pipe(\n map(([active, direction]) => !(active && direction)),\n distinctUntilChanged(),\n takeUntil(target$.pipe(skip(1))),\n endWith(true),\n repeat({ delay: 250 }),\n map(hidden => ({ hidden }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount back-to-top\n *\n * @param el - Back-to-top element\n * @param options - Options\n *\n * @returns Back-to-top component observable\n */\nexport function mountBackToTop(\n el: HTMLElement, { viewport$, header$, main$, target$ }: MountOptions\n): Observable> {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe({\n\n /* Handle emission */\n next({ hidden }) {\n el.hidden = hidden\n if (hidden) {\n el.setAttribute(\"tabindex\", \"-1\")\n el.blur()\n } else {\n el.removeAttribute(\"tabindex\")\n }\n },\n\n /* Handle complete */\n complete() {\n el.style.top = \"\"\n el.hidden = true\n el.removeAttribute(\"tabindex\")\n }\n })\n\n /* Watch header height */\n header$\n .pipe(\n takeUntil(done$),\n distinctUntilKeyChanged(\"height\")\n )\n .subscribe(({ height }) => {\n el.style.top = `${height + 16}px`\n })\n\n /* Create and return component */\n return watchBackToTop(el, { viewport$, main$, target$ })\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n fromEvent,\n map,\n mergeMap,\n switchMap,\n takeWhile,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n tablet$: Observable /* Media tablet observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch indeterminate checkboxes\n *\n * This function replaces the indeterminate \"pseudo state\" with the actual\n * indeterminate state, which is used to keep navigation always expanded.\n *\n * @param options - Options\n */\nexport function patchIndeterminate(\n { document$, tablet$ }: PatchOptions\n): void {\n document$\n .pipe(\n switchMap(() => getElements(\n // @todo `data-md-state` is deprecated and removed in v9\n \".md-toggle--indeterminate, [data-md-state=indeterminate]\"\n )),\n tap(el => {\n el.indeterminate = true\n el.checked = false\n }),\n mergeMap(el => fromEvent(el, \"change\")\n .pipe(\n takeWhile(() => el.classList.contains(\"md-toggle--indeterminate\")),\n map(() => el)\n )\n ),\n withLatestFrom(tablet$)\n )\n .subscribe(([el, tablet]) => {\n el.classList.remove(\"md-toggle--indeterminate\")\n if (tablet)\n el.checked = false\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n filter,\n fromEvent,\n map,\n mergeMap,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n document$: Observable /* Document observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether the given device is an Apple device\n *\n * @returns Test result\n */\nfunction isAppleDevice(): boolean {\n return /(iPad|iPhone|iPod)/.test(navigator.userAgent)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch all elements with `data-md-scrollfix` attributes\n *\n * This is a year-old patch which ensures that overflow scrolling works at the\n * top and bottom of containers on iOS by ensuring a `1px` scroll offset upon\n * the start of a touch event.\n *\n * @see https://bit.ly/2SCtAOO - Original source\n *\n * @param options - Options\n */\nexport function patchScrollfix(\n { document$ }: PatchOptions\n): void {\n document$\n .pipe(\n switchMap(() => getElements(\"[data-md-scrollfix]\")),\n tap(el => el.removeAttribute(\"data-md-scrollfix\")),\n filter(isAppleDevice),\n mergeMap(el => fromEvent(el, \"touchstart\")\n .pipe(\n map(() => el)\n )\n )\n )\n .subscribe(el => {\n const top = el.scrollTop\n\n /* We're at the top of the container */\n if (top === 0) {\n el.scrollTop = 1\n\n /* We're at the bottom of the container */\n } else if (top + el.offsetHeight === el.scrollHeight) {\n el.scrollTop = top - 1\n }\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n delay,\n map,\n of,\n switchMap,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n Viewport,\n watchToggle\n} from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch options\n */\ninterface PatchOptions {\n viewport$: Observable /* Viewport observable */\n tablet$: Observable /* Media tablet observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Patch the document body to lock when search is open\n *\n * For mobile and tablet viewports, the search is rendered full screen, which\n * leads to scroll leaking when at the top or bottom of the search result. This\n * function locks the body when the search is in full screen mode, and restores\n * the scroll position when leaving.\n *\n * @param options - Options\n */\nexport function patchScrolllock(\n { viewport$, tablet$ }: PatchOptions\n): void {\n combineLatest([watchToggle(\"search\"), tablet$])\n .pipe(\n map(([active, tablet]) => active && !tablet),\n switchMap(active => of(active)\n .pipe(\n delay(active ? 400 : 100)\n )\n ),\n withLatestFrom(viewport$)\n )\n .subscribe(([active, { offset: { y }}]) => {\n if (active) {\n document.body.setAttribute(\"data-md-scrolllock\", \"\")\n document.body.style.top = `-${y}px`\n } else {\n const value = -1 * parseInt(document.body.style.top, 10)\n document.body.removeAttribute(\"data-md-scrolllock\")\n document.body.style.top = \"\"\n if (value)\n window.scrollTo(0, value)\n }\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Polyfills\n * ------------------------------------------------------------------------- */\n\n/* Polyfill `Object.entries` */\nif (!Object.entries)\n Object.entries = function (obj: object) {\n const data: [string, string][] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push([key, obj[key]])\n\n /* Return entries */\n return data\n }\n\n/* Polyfill `Object.values` */\nif (!Object.values)\n Object.values = function (obj: object) {\n const data: string[] = []\n for (const key of Object.keys(obj))\n // @ts-expect-error - ignore property access warning\n data.push(obj[key])\n\n /* Return values */\n return data\n }\n\n/* ------------------------------------------------------------------------- */\n\n/* Polyfills for `Element` */\nif (typeof Element !== \"undefined\") {\n\n /* Polyfill `Element.scrollTo` */\n if (!Element.prototype.scrollTo)\n Element.prototype.scrollTo = function (\n x?: ScrollToOptions | number, y?: number\n ): void {\n if (typeof x === \"object\") {\n this.scrollLeft = x.left!\n this.scrollTop = x.top!\n } else {\n this.scrollLeft = x!\n this.scrollTop = y!\n }\n }\n\n /* Polyfill `Element.replaceWith` */\n if (!Element.prototype.replaceWith)\n Element.prototype.replaceWith = function (\n ...nodes: Array\n ): void {\n const parent = this.parentNode\n if (parent) {\n if (nodes.length === 0)\n parent.removeChild(this)\n\n /* Replace children and create text nodes */\n for (let i = nodes.length - 1; i >= 0; i--) {\n let node = nodes[i]\n if (typeof node === \"string\")\n node = document.createTextNode(node)\n else if (node.parentNode)\n node.parentNode.removeChild(node)\n\n /* Replace child or insert before previous sibling */\n if (!i)\n parent.replaceChild(node, this)\n else\n parent.insertBefore(this.previousSibling!, node)\n }\n }\n }\n}\n"], - "mappings": "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", + "mappings": "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", "names": ["require_focus_visible", "__commonJSMin", "exports", "module", "global", "factory", "applyFocusVisiblePolyfill", "scope", "hadKeyboardEvent", "hadFocusVisibleRecently", "hadFocusVisibleRecentlyTimeout", "inputTypesAllowlist", "isValidFocusTarget", "el", "focusTriggersKeyboardModality", "type", "tagName", "addFocusVisibleClass", "removeFocusVisibleClass", "onKeyDown", "e", "onPointerDown", "onFocus", "onBlur", "onVisibilityChange", "addInitialPointerMoveListeners", "onInitialPointerMove", "removeInitialPointerMoveListeners", "event", "error", "require_url_polyfill", "__commonJSMin", "exports", "global", "checkIfIteratorIsSupported", "error", "iteratorSupported", "createIterator", "items", "iterator", "value", "serializeParam", "deserializeParam", "polyfillURLSearchParams", "URLSearchParams", "searchString", "typeofSearchString", "_this", "name", "i", "entry", "key", "proto", "callback", "thisArg", "entries", "searchArray", "checkIfURLSearchParamsSupported", "e", "a", "b", "keys", "attributes", "attribute", "checkIfURLIsSupported", "u", "polyfillURL", "_URL", "URL", "url", "base", "doc", "baseElement", "err", "anchorElement", "inputElement", "searchParams", "enableSearchUpdate", "enableSearchParamsUpdate", "methodName", "method", "search", "linkURLWithAnchorAttribute", "attributeName", "expectedPort", "addPortToOrigin", "blob", "getOrigin", "require_tslib", "__commonJSMin", "exports", "module", "__extends", "__assign", "__rest", "__decorate", "__param", "__metadata", "__awaiter", "__generator", "__exportStar", "__values", "__read", "__spread", "__spreadArrays", "__spreadArray", "__await", "__asyncGenerator", "__asyncDelegator", "__asyncValues", "__makeTemplateObject", "__importStar", "__importDefault", "__classPrivateFieldGet", "__classPrivateFieldSet", "__createBinding", "factory", "root", "createExporter", "previous", "id", "v", "exporter", "extendStatics", "d", "b", "p", "__", "t", "s", "n", "e", "i", "decorators", "target", "key", "desc", "c", "r", "paramIndex", "decorator", "metadataKey", "metadataValue", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "rejected", "result", "body", "_", "f", "y", "g", "verb", "op", "m", "o", "k", "k2", "ar", "error", "il", "a", "j", "jl", "to", "from", "pack", "l", "q", "resume", "settle", "fulfill", "cooked", "raw", "__setModuleDefault", "mod", "receiver", "state", "kind", "require_clipboard", "__commonJSMin", "exports", "module", "root", "factory", "__webpack_modules__", "__unused_webpack_module", "__webpack_exports__", "__webpack_require__", "clipboard", "tiny_emitter", "tiny_emitter_default", "listen", "listen_default", "src_select", "select_default", "command", "type", "err", "ClipboardActionCut", "target", "selectedText", "actions_cut", "createFakeElement", "value", "isRTL", "fakeElement", "yPosition", "fakeCopyAction", "options", "ClipboardActionCopy", "actions_copy", "_typeof", "obj", "ClipboardActionDefault", "_options$action", "action", "container", "text", "actions_default", "clipboard_typeof", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "i", "descriptor", "_createClass", "protoProps", "staticProps", "_inherits", "subClass", "superClass", "_setPrototypeOf", "o", "p", "_createSuper", "Derived", "hasNativeReflectConstruct", "_isNativeReflectConstruct", "Super", "_getPrototypeOf", "result", "NewTarget", "_possibleConstructorReturn", "self", "call", "_assertThisInitialized", "e", "getAttributeValue", "suffix", "element", "attribute", "Clipboard", "_Emitter", "_super", "trigger", "_this", "_this2", "selector", "actions", "support", "DOCUMENT_NODE_TYPE", "proto", "closest", "__unused_webpack_exports", "_delegate", "callback", "useCapture", "listenerFn", "listener", "delegate", "elements", "is", "listenNode", "listenNodeList", "listenSelector", "node", "nodeList", "select", "isReadOnly", "selection", "range", "E", "name", "ctx", "data", "evtArr", "len", "evts", "liveEvents", "__webpack_module_cache__", "moduleId", "getter", "definition", "key", "prop", "require_escape_html", "__commonJSMin", "exports", "module", "matchHtmlRegExp", "escapeHtml", "string", "str", "match", "escape", "html", "index", "lastIndex", "r", "a", "e", "import_focus_visible", "n", "t", "s", "r", "o", "u", "i", "a", "e", "c", "import_url_polyfill", "import_tslib", "__extends", "__assign", "__rest", "__decorate", "__param", "__metadata", "__awaiter", "__generator", "__exportStar", "__createBinding", "__values", "__read", "__spread", "__spreadArrays", "__spreadArray", "__await", "__asyncGenerator", "__asyncDelegator", "__asyncValues", "__makeTemplateObject", "__importStar", "__importDefault", "__classPrivateFieldGet", "__classPrivateFieldSet", "tslib", "isFunction", "value", "createErrorClass", "createImpl", "_super", "instance", "ctorFunc", "UnsubscriptionError", "createErrorClass", "_super", "errors", "err", "i", "arrRemove", "arr", "item", "index", "Subscription", "initialTeardown", "errors", "_parentage", "_parentage_1", "__values", "_parentage_1_1", "parent_1", "initialFinalizer", "isFunction", "e", "UnsubscriptionError", "_finalizers", "_finalizers_1", "_finalizers_1_1", "finalizer", "execFinalizer", "err", "__spreadArray", "__read", "teardown", "_a", "parent", "arrRemove", "empty", "EMPTY_SUBSCRIPTION", "Subscription", "isSubscription", "value", "isFunction", "execFinalizer", "finalizer", "config", "timeoutProvider", "handler", "timeout", "args", "_i", "delegate", "__spreadArray", "__read", "handle", "reportUnhandledError", "err", "timeoutProvider", "onUnhandledError", "config", "noop", "COMPLETE_NOTIFICATION", "createNotification", "errorNotification", "error", "nextNotification", "value", "kind", "context", "errorContext", "cb", "config", "isRoot", "_a", "errorThrown", "error", "captureError", "err", "Subscriber", "_super", "__extends", "destination", "_this", "isSubscription", "EMPTY_OBSERVER", "next", "error", "complete", "SafeSubscriber", "value", "handleStoppedNotification", "nextNotification", "err", "errorNotification", "COMPLETE_NOTIFICATION", "Subscription", "_bind", "bind", "fn", "thisArg", "ConsumerObserver", "partialObserver", "value", "error", "handleUnhandledError", "err", "SafeSubscriber", "_super", "__extends", "observerOrNext", "complete", "_this", "isFunction", "context_1", "config", "Subscriber", "handleUnhandledError", "error", "config", "captureError", "reportUnhandledError", "defaultErrorHandler", "err", "handleStoppedNotification", "notification", "subscriber", "onStoppedNotification", "timeoutProvider", "EMPTY_OBSERVER", "noop", "observable", "identity", "x", "pipe", "fns", "_i", "pipeFromArray", "identity", "input", "prev", "fn", "Observable", "subscribe", "operator", "observable", "observerOrNext", "error", "complete", "_this", "subscriber", "isSubscriber", "SafeSubscriber", "errorContext", "_a", "source", "sink", "err", "next", "promiseCtor", "getPromiseCtor", "resolve", "reject", "value", "operations", "_i", "pipeFromArray", "x", "getPromiseCtor", "promiseCtor", "_a", "config", "isObserver", "value", "isFunction", "isSubscriber", "Subscriber", "isSubscription", "hasLift", "source", "isFunction", "operate", "init", "liftedSource", "err", "createOperatorSubscriber", "destination", "onNext", "onComplete", "onError", "onFinalize", "OperatorSubscriber", "_super", "__extends", "shouldUnsubscribe", "_this", "value", "err", "closed_1", "_a", "Subscriber", "animationFrameProvider", "callback", "request", "cancel", "delegate", "handle", "timestamp", "Subscription", "args", "_i", "__spreadArray", "__read", "ObjectUnsubscribedError", "createErrorClass", "_super", "Subject", "_super", "__extends", "_this", "operator", "subject", "AnonymousSubject", "ObjectUnsubscribedError", "value", "errorContext", "_b", "__values", "_c", "observer", "err", "observers", "_a", "subscriber", "hasError", "isStopped", "EMPTY_SUBSCRIPTION", "Subscription", "arrRemove", "thrownError", "observable", "Observable", "destination", "source", "AnonymousSubject", "_super", "__extends", "destination", "source", "_this", "value", "_b", "_a", "err", "subscriber", "EMPTY_SUBSCRIPTION", "Subject", "dateTimestampProvider", "ReplaySubject", "_super", "__extends", "_bufferSize", "_windowTime", "_timestampProvider", "dateTimestampProvider", "_this", "value", "_a", "isStopped", "_buffer", "_infiniteTimeWindow", "subscriber", "subscription", "copy", "i", "adjustedBufferSize", "now", "last", "Subject", "Action", "_super", "__extends", "scheduler", "work", "state", "delay", "Subscription", "intervalProvider", "handler", "timeout", "args", "_i", "delegate", "__spreadArray", "__read", "handle", "AsyncAction", "_super", "__extends", "scheduler", "work", "_this", "state", "delay", "id", "_a", "_id", "intervalProvider", "_scheduler", "error", "_delay", "errored", "errorValue", "e", "actions", "arrRemove", "Action", "Scheduler", "schedulerActionCtor", "now", "work", "delay", "state", "dateTimestampProvider", "AsyncScheduler", "_super", "__extends", "SchedulerAction", "now", "Scheduler", "_this", "action", "actions", "error", "asyncScheduler", "AsyncScheduler", "AsyncAction", "async", "AnimationFrameAction", "_super", "__extends", "scheduler", "work", "_this", "id", "delay", "animationFrameProvider", "actions", "_a", "AsyncAction", "AnimationFrameScheduler", "_super", "__extends", "action", "flushId", "actions", "error", "AsyncScheduler", "animationFrameScheduler", "AnimationFrameScheduler", "AnimationFrameAction", "EMPTY", "Observable", "subscriber", "isScheduler", "value", "isFunction", "last", "arr", "popResultSelector", "args", "isFunction", "popScheduler", "isScheduler", "popNumber", "defaultValue", "isArrayLike", "x", "isPromise", "value", "isFunction", "isInteropObservable", "input", "isFunction", "observable", "isAsyncIterable", "obj", "isFunction", "createInvalidObservableTypeError", "input", "getSymbolIterator", "iterator", "isIterable", "input", "isFunction", "iterator", "readableStreamLikeToAsyncGenerator", "readableStream", "reader", "__await", "_a", "_b", "value", "done", "isReadableStreamLike", "obj", "isFunction", "innerFrom", "input", "Observable", "isInteropObservable", "fromInteropObservable", "isArrayLike", "fromArrayLike", "isPromise", "fromPromise", "isAsyncIterable", "fromAsyncIterable", "isIterable", "fromIterable", "isReadableStreamLike", "fromReadableStreamLike", "createInvalidObservableTypeError", "obj", "subscriber", "obs", "observable", "isFunction", "array", "i", "promise", "value", "err", "reportUnhandledError", "iterable", "iterable_1", "__values", "iterable_1_1", "asyncIterable", "process", "readableStream", "readableStreamLikeToAsyncGenerator", "asyncIterable_1", "__asyncValues", "asyncIterable_1_1", "executeSchedule", "parentSubscription", "scheduler", "work", "delay", "repeat", "scheduleSubscription", "observeOn", "scheduler", "delay", "operate", "source", "subscriber", "createOperatorSubscriber", "value", "executeSchedule", "err", "subscribeOn", "scheduler", "delay", "operate", "source", "subscriber", "scheduleObservable", "input", "scheduler", "innerFrom", "subscribeOn", "observeOn", "schedulePromise", "input", "scheduler", "innerFrom", "subscribeOn", "observeOn", "scheduleArray", "input", "scheduler", "Observable", "subscriber", "i", "scheduleIterable", "input", "scheduler", "Observable", "subscriber", "iterator", "executeSchedule", "value", "done", "_a", "err", "isFunction", "scheduleAsyncIterable", "input", "scheduler", "Observable", "subscriber", "executeSchedule", "iterator", "result", "scheduleReadableStreamLike", "input", "scheduler", "scheduleAsyncIterable", "readableStreamLikeToAsyncGenerator", "scheduled", "input", "scheduler", "isInteropObservable", "scheduleObservable", "isArrayLike", "scheduleArray", "isPromise", "schedulePromise", "isAsyncIterable", "scheduleAsyncIterable", "isIterable", "scheduleIterable", "isReadableStreamLike", "scheduleReadableStreamLike", "createInvalidObservableTypeError", "from", "input", "scheduler", "scheduled", "innerFrom", "of", "args", "_i", "scheduler", "popScheduler", "from", "throwError", "errorOrErrorFactory", "scheduler", "errorFactory", "isFunction", "init", "subscriber", "Observable", "isValidDate", "value", "map", "project", "thisArg", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "isArray", "callOrApply", "fn", "args", "__spreadArray", "__read", "mapOneOrManyArgs", "map", "isArray", "getPrototypeOf", "objectProto", "getKeys", "argsArgArrayOrObject", "args", "first_1", "isPOJO", "keys", "key", "obj", "createObject", "keys", "values", "result", "key", "i", "combineLatest", "args", "_i", "scheduler", "popScheduler", "resultSelector", "popResultSelector", "_a", "argsArgArrayOrObject", "observables", "keys", "from", "result", "Observable", "combineLatestInit", "values", "createObject", "identity", "mapOneOrManyArgs", "valueTransform", "subscriber", "maybeSchedule", "length", "active", "remainingFirstValues", "i", "source", "hasFirstValue", "createOperatorSubscriber", "value", "execute", "subscription", "executeSchedule", "mergeInternals", "source", "subscriber", "project", "concurrent", "onBeforeNext", "expand", "innerSubScheduler", "additionalFinalizer", "buffer", "active", "index", "isComplete", "checkComplete", "outerNext", "value", "doInnerSub", "innerComplete", "innerFrom", "createOperatorSubscriber", "innerValue", "bufferedValue", "executeSchedule", "err", "mergeMap", "project", "resultSelector", "concurrent", "isFunction", "a", "i", "map", "b", "ii", "innerFrom", "operate", "source", "subscriber", "mergeInternals", "mergeAll", "concurrent", "mergeMap", "identity", "concatAll", "mergeAll", "concat", "args", "_i", "concatAll", "from", "popScheduler", "defer", "observableFactory", "Observable", "subscriber", "innerFrom", "nodeEventEmitterMethods", "eventTargetMethods", "jqueryMethods", "fromEvent", "target", "eventName", "options", "resultSelector", "isFunction", "mapOneOrManyArgs", "_a", "__read", "isEventTarget", "methodName", "handler", "isNodeStyleEventEmitter", "toCommonHandlerRegistry", "isJQueryStyleEventEmitter", "add", "remove", "isArrayLike", "mergeMap", "subTarget", "innerFrom", "Observable", "subscriber", "args", "_i", "fromEventPattern", "addHandler", "removeHandler", "resultSelector", "mapOneOrManyArgs", "Observable", "subscriber", "handler", "e", "_i", "retValue", "isFunction", "timer", "dueTime", "intervalOrScheduler", "scheduler", "async", "intervalDuration", "isScheduler", "Observable", "subscriber", "due", "isValidDate", "n", "merge", "args", "_i", "scheduler", "popScheduler", "concurrent", "popNumber", "sources", "innerFrom", "mergeAll", "from", "EMPTY", "NEVER", "Observable", "noop", "isArray", "argsOrArgArray", "args", "filter", "predicate", "thisArg", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "zip", "args", "_i", "resultSelector", "popResultSelector", "sources", "argsOrArgArray", "Observable", "subscriber", "buffers", "completed", "sourceIndex", "innerFrom", "createOperatorSubscriber", "value", "buffer", "result", "__spreadArray", "__read", "i", "EMPTY", "audit", "durationSelector", "operate", "source", "subscriber", "hasValue", "lastValue", "durationSubscriber", "isComplete", "endDuration", "value", "cleanupDuration", "createOperatorSubscriber", "innerFrom", "auditTime", "duration", "scheduler", "asyncScheduler", "audit", "timer", "bufferCount", "bufferSize", "startBufferEvery", "operate", "source", "subscriber", "buffers", "count", "createOperatorSubscriber", "value", "toEmit", "buffers_1", "__values", "buffers_1_1", "buffer", "toEmit_1", "toEmit_1_1", "arrRemove", "buffers_2", "buffers_2_1", "catchError", "selector", "operate", "source", "subscriber", "innerSub", "syncUnsub", "handledResult", "createOperatorSubscriber", "err", "innerFrom", "scanInternals", "accumulator", "seed", "hasSeed", "emitOnNext", "emitBeforeComplete", "source", "subscriber", "hasState", "state", "index", "createOperatorSubscriber", "value", "i", "combineLatest", "args", "_i", "resultSelector", "popResultSelector", "pipe", "__spreadArray", "__read", "mapOneOrManyArgs", "operate", "source", "subscriber", "combineLatestInit", "argsOrArgArray", "combineLatestWith", "otherSources", "_i", "combineLatest", "__spreadArray", "__read", "concatMap", "project", "resultSelector", "isFunction", "mergeMap", "debounceTime", "dueTime", "scheduler", "asyncScheduler", "operate", "source", "subscriber", "activeTask", "lastValue", "lastTime", "emit", "value", "emitWhenIdle", "targetTime", "now", "createOperatorSubscriber", "defaultIfEmpty", "defaultValue", "operate", "source", "subscriber", "hasValue", "createOperatorSubscriber", "value", "take", "count", "EMPTY", "operate", "source", "subscriber", "seen", "createOperatorSubscriber", "value", "ignoreElements", "operate", "source", "subscriber", "createOperatorSubscriber", "noop", "mapTo", "value", "map", "delayWhen", "delayDurationSelector", "subscriptionDelay", "source", "concat", "take", "ignoreElements", "mergeMap", "value", "index", "mapTo", "delay", "due", "scheduler", "asyncScheduler", "duration", "timer", "delayWhen", "distinctUntilChanged", "comparator", "keySelector", "identity", "defaultCompare", "operate", "source", "subscriber", "previousKey", "first", "createOperatorSubscriber", "value", "currentKey", "a", "b", "distinctUntilKeyChanged", "key", "compare", "distinctUntilChanged", "x", "y", "endWith", "values", "_i", "source", "concat", "of", "__spreadArray", "__read", "finalize", "callback", "operate", "source", "subscriber", "takeLast", "count", "EMPTY", "operate", "source", "subscriber", "buffer", "createOperatorSubscriber", "value", "buffer_1", "__values", "buffer_1_1", "merge", "args", "_i", "scheduler", "popScheduler", "concurrent", "popNumber", "argsOrArgArray", "operate", "source", "subscriber", "mergeAll", "from", "__spreadArray", "__read", "mergeWith", "otherSources", "_i", "merge", "__spreadArray", "__read", "repeat", "countOrConfig", "count", "delay", "_a", "EMPTY", "operate", "source", "subscriber", "soFar", "sourceSub", "resubscribe", "notifier", "timer", "innerFrom", "notifierSubscriber_1", "createOperatorSubscriber", "subscribeToSource", "syncUnsub", "sample", "notifier", "operate", "source", "subscriber", "hasValue", "lastValue", "createOperatorSubscriber", "value", "noop", "scan", "accumulator", "seed", "operate", "scanInternals", "share", "options", "_a", "connector", "Subject", "_b", "resetOnError", "_c", "resetOnComplete", "_d", "resetOnRefCountZero", "wrapperSource", "connection", "resetConnection", "subject", "refCount", "hasCompleted", "hasErrored", "cancelReset", "reset", "resetAndUnsubscribe", "conn", "operate", "source", "subscriber", "dest", "handleReset", "SafeSubscriber", "value", "err", "innerFrom", "on", "args", "_i", "onSubscriber", "__spreadArray", "__read", "shareReplay", "configOrBufferSize", "windowTime", "scheduler", "bufferSize", "refCount", "_a", "_b", "_c", "share", "ReplaySubject", "skip", "count", "filter", "_", "index", "skipUntil", "notifier", "operate", "source", "subscriber", "taking", "skipSubscriber", "createOperatorSubscriber", "noop", "innerFrom", "value", "startWith", "values", "_i", "scheduler", "popScheduler", "operate", "source", "subscriber", "concat", "switchMap", "project", "resultSelector", "operate", "source", "subscriber", "innerSubscriber", "index", "isComplete", "checkComplete", "createOperatorSubscriber", "value", "innerIndex", "outerIndex", "innerFrom", "innerValue", "takeUntil", "notifier", "operate", "source", "subscriber", "innerFrom", "createOperatorSubscriber", "noop", "takeWhile", "predicate", "inclusive", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "result", "tap", "observerOrNext", "error", "complete", "tapObserver", "isFunction", "operate", "source", "subscriber", "_a", "isUnsub", "createOperatorSubscriber", "value", "err", "_b", "identity", "defaultThrottleConfig", "throttle", "durationSelector", "config", "operate", "source", "subscriber", "leading", "trailing", "hasValue", "sendValue", "throttled", "isComplete", "endThrottling", "send", "cleanupThrottling", "startThrottle", "value", "innerFrom", "createOperatorSubscriber", "throttleTime", "duration", "scheduler", "config", "asyncScheduler", "defaultThrottleConfig", "duration$", "timer", "throttle", "withLatestFrom", "inputs", "_i", "project", "popResultSelector", "operate", "source", "subscriber", "len", "otherValues", "hasValue", "ready", "i", "innerFrom", "createOperatorSubscriber", "value", "identity", "noop", "values", "__spreadArray", "__read", "zip", "sources", "_i", "operate", "source", "subscriber", "__spreadArray", "__read", "zipWith", "otherInputs", "_i", "zip", "__spreadArray", "__read", "watchDocument", "document$", "ReplaySubject", "fromEvent", "getElements", "selector", "node", "getElement", "el", "getOptionalElement", "getActiveElement", "watchElementFocus", "el", "merge", "fromEvent", "debounceTime", "map", "active", "getActiveElement", "startWith", "distinctUntilChanged", "getElementOffset", "el", "watchElementOffset", "merge", "fromEvent", "auditTime", "animationFrameScheduler", "map", "startWith", "getElementContentOffset", "el", "watchElementContentOffset", "merge", "fromEvent", "auditTime", "animationFrameScheduler", "map", "startWith", "MapShim", "getIndex", "arr", "key", "result", "entry", "index", "class_1", "value", "entries", "callback", "ctx", "_i", "_a", "isBrowser", "global$1", "requestAnimationFrame$1", "trailingTimeout", "throttle", "delay", "leadingCall", "trailingCall", "lastCallTime", "resolvePending", "proxy", "timeoutCallback", "timeStamp", "REFRESH_DELAY", "transitionKeys", "mutationObserverSupported", "ResizeObserverController", "observer", "observers", "changesDetected", "activeObservers", "_b", "propertyName", "isReflowProperty", "defineConfigurable", "target", "props", "getWindowOf", "ownerGlobal", "emptyRect", "createRectInit", "toFloat", "getBordersSize", "styles", "positions", "size", "position", "getPaddings", "paddings", "positions_1", "getSVGContentRect", "bbox", "getHTMLElementContentRect", "clientWidth", "clientHeight", "horizPad", "vertPad", "width", "height", "isDocumentElement", "vertScrollbar", "horizScrollbar", "isSVGGraphicsElement", "getContentRect", "createReadOnlyRect", "x", "y", "Constr", "rect", "ResizeObservation", "ResizeObserverEntry", "rectInit", "contentRect", "ResizeObserverSPI", "controller", "callbackCtx", "observations", "_this", "observation", "ResizeObserver", "method", "ResizeObserver_es_default", "entry$", "Subject", "observer$", "defer", "of", "ResizeObserver_es_default", "entries", "entry", "switchMap", "observer", "merge", "NEVER", "finalize", "shareReplay", "getElementSize", "el", "watchElementSize", "tap", "filter", "target", "map", "startWith", "getElementContentSize", "el", "getElementContainer", "parent", "entry$", "Subject", "observer$", "defer", "of", "entries", "entry", "switchMap", "observer", "merge", "NEVER", "finalize", "shareReplay", "watchElementVisibility", "el", "tap", "filter", "target", "map", "isIntersecting", "watchElementBoundary", "threshold", "watchElementContentOffset", "y", "visible", "getElementSize", "content", "getElementContentSize", "distinctUntilChanged", "toggles", "getElement", "getToggle", "name", "setToggle", "value", "watchToggle", "el", "fromEvent", "map", "startWith", "isSusceptibleToKeyboard", "el", "type", "watchKeyboard", "fromEvent", "filter", "ev", "map", "getToggle", "mode", "active", "getActiveElement", "share", "getLocation", "setLocation", "url", "watchLocation", "Subject", "appendChild", "el", "child", "node", "h", "tag", "attributes", "children", "attr", "truncate", "value", "n", "i", "round", "digits", "getLocationHash", "setLocationHash", "hash", "el", "h", "ev", "watchLocationHash", "fromEvent", "map", "startWith", "filter", "shareReplay", "watchLocationTarget", "id", "getOptionalElement", "watchMedia", "query", "media", "fromEventPattern", "next", "startWith", "watchPrint", "merge", "fromEvent", "map", "at", "query$", "factory", "switchMap", "active", "EMPTY", "request", "url", "options", "from", "catchError", "EMPTY", "switchMap", "res", "throwError", "of", "requestJSON", "shareReplay", "requestXML", "dom", "map", "watchScript", "src", "script", "h", "defer", "merge", "fromEvent", "switchMap", "throwError", "map", "finalize", "take", "getViewportOffset", "watchViewportOffset", "merge", "fromEvent", "map", "startWith", "getViewportSize", "watchViewportSize", "fromEvent", "map", "startWith", "watchViewport", "combineLatest", "watchViewportOffset", "watchViewportSize", "map", "offset", "size", "shareReplay", "watchViewportAt", "el", "viewport$", "header$", "size$", "distinctUntilKeyChanged", "offset$", "combineLatest", "map", "getElementOffset", "height", "offset", "size", "x", "y", "watchWorker", "worker", "tx$", "rx$", "fromEvent", "map", "data", "throttle", "tap", "message", "switchMap", "share", "script", "getElement", "config", "getLocation", "configuration", "feature", "flag", "translation", "key", "value", "getComponentElement", "type", "node", "getElement", "getComponentElements", "getElements", "watchAnnounce", "el", "button", "getElement", "fromEvent", "map", "content", "mountAnnounce", "feature", "EMPTY", "defer", "push$", "Subject", "startWith", "hash", "_a", "tap", "state", "finalize", "__spreadValues", "watchConsent", "el", "target$", "map", "target", "mountConsent", "options", "internal$", "Subject", "hidden", "tap", "state", "finalize", "__spreadValues", "import_clipboard", "renderTooltip", "id", "h", "renderAnnotation", "id", "prefix", "anchor", "h", "renderTooltip", "renderClipboardButton", "id", "h", "translation", "renderSearchDocument", "document", "flag", "parent", "teaser", "missing", "key", "list", "h", "url", "feature", "match", "highlight", "value", "tags", "configuration", "truncate", "tag", "id", "type", "translation", "renderSearchResultItem", "result", "threshold", "docs", "doc", "article", "index", "best", "more", "children", "section", "renderSourceFacts", "facts", "h", "key", "value", "round", "renderTabbedControl", "type", "classes", "h", "renderTable", "table", "h", "renderVersion", "version", "config", "configuration", "url", "h", "renderVersionSelector", "versions", "active", "translation", "watchAnnotation", "el", "container", "offset$", "defer", "combineLatest", "watchElementOffset", "watchElementContentOffset", "map", "x", "y", "scroll", "width", "height", "getElementSize", "watchElementFocus", "switchMap", "active", "offset", "take", "mountAnnotation", "target$", "tooltip", "index", "push$", "Subject", "done$", "takeLast", "watchElementVisibility", "takeUntil", "visible", "merge", "filter", "debounceTime", "auditTime", "animationFrameScheduler", "throttleTime", "origin", "fromEvent", "ev", "withLatestFrom", "_a", "parent", "getActiveElement", "target", "delay", "tap", "state", "finalize", "__spreadValues", "findAnnotationMarkers", "container", "markers", "el", "getElements", "nodes", "it", "node", "text", "match", "id", "force", "marker", "swap", "source", "target", "mountAnnotationList", "target$", "print$", "parent", "prefix", "annotations", "getOptionalElement", "renderAnnotation", "EMPTY", "defer", "done$", "Subject", "pairs", "annotation", "getElement", "takeUntil", "takeLast", "active", "inner", "child", "merge", "mountAnnotation", "finalize", "share", "sequence", "findCandidateList", "el", "sibling", "watchCodeBlock", "watchElementSize", "map", "width", "getElementContentSize", "distinctUntilKeyChanged", "mountCodeBlock", "options", "hover", "factory$", "defer", "push$", "Subject", "scrollable", "ClipboardJS", "parent", "renderClipboardButton", "container", "list", "feature", "annotations$", "mountAnnotationList", "tap", "state", "finalize", "__spreadValues", "mergeWith", "height", "distinctUntilChanged", "switchMap", "active", "EMPTY", "watchElementVisibility", "filter", "visible", "take", "mermaid$", "sequence", "fetchScripts", "watchScript", "of", "mountMermaid", "el", "tap", "mermaid_default", "map", "shareReplay", "id", "host", "h", "svg", "shadow", "watchDetails", "el", "target$", "print$", "open", "merge", "map", "target", "filter", "details", "active", "tap", "mountDetails", "options", "defer", "push$", "Subject", "action", "reveal", "state", "finalize", "__spreadValues", "sentinel", "h", "mountDataTable", "el", "renderTable", "of", "watchContentTabs", "el", "inputs", "getElements", "initial", "input", "merge", "fromEvent", "map", "getElement", "startWith", "active", "mountContentTabs", "viewport$", "prev", "renderTabbedControl", "next", "container", "defer", "push$", "Subject", "done$", "takeLast", "combineLatest", "watchElementSize", "auditTime", "animationFrameScheduler", "takeUntil", "size", "offset", "getElementOffset", "width", "getElementSize", "content", "getElementContentOffset", "watchElementContentOffset", "getElementContentSize", "direction", "feature", "skip", "withLatestFrom", "tab", "y", "set", "label", "tabs", "tap", "state", "finalize", "__spreadValues", "subscribeOn", "asyncScheduler", "mountContent", "el", "viewport$", "target$", "print$", "merge", "getElements", "child", "mountCodeBlock", "mountMermaid", "mountDataTable", "mountDetails", "mountContentTabs", "watchDialog", "_el", "alert$", "switchMap", "message", "merge", "of", "delay", "map", "active", "mountDialog", "el", "options", "inner", "getElement", "defer", "push$", "Subject", "tap", "state", "finalize", "__spreadValues", "isHidden", "viewport$", "feature", "of", "direction$", "map", "y", "bufferCount", "a", "b", "distinctUntilKeyChanged", "hidden$", "combineLatest", "filter", "offset", "direction", "distinctUntilChanged", "search$", "watchToggle", "search", "switchMap", "active", "startWith", "watchHeader", "el", "options", "defer", "watchElementSize", "height", "hidden", "shareReplay", "mountHeader", "header$", "main$", "push$", "Subject", "done$", "takeLast", "combineLatestWith", "takeUntil", "state", "__spreadValues", "watchHeaderTitle", "el", "viewport$", "header$", "watchViewportAt", "map", "y", "height", "getElementSize", "distinctUntilKeyChanged", "mountHeaderTitle", "options", "defer", "push$", "Subject", "active", "heading", "getOptionalElement", "EMPTY", "tap", "state", "finalize", "__spreadValues", "watchMain", "el", "viewport$", "header$", "adjust$", "map", "height", "distinctUntilChanged", "border$", "switchMap", "watchElementSize", "distinctUntilKeyChanged", "combineLatest", "header", "top", "bottom", "y", "a", "b", "watchPalette", "inputs", "current", "input", "of", "mergeMap", "fromEvent", "map", "startWith", "shareReplay", "mountPalette", "el", "defer", "push$", "Subject", "palette", "key", "value", "index", "label", "observeOn", "asyncScheduler", "getElements", "tap", "state", "finalize", "__spreadValues", "import_clipboard", "extract", "el", "text", "setupClipboardJS", "alert$", "ClipboardJS", "Observable", "subscriber", "getElement", "ev", "tap", "map", "translation", "preprocess", "urls", "root", "next", "a", "b", "url", "index", "fetchSitemap", "base", "cached", "of", "config", "configuration", "requestXML", "map", "sitemap", "getElements", "node", "catchError", "EMPTY", "defaultIfEmpty", "tap", "setupInstantLoading", "document$", "location$", "viewport$", "config", "configuration", "fromEvent", "favicon", "getOptionalElement", "push$", "fetchSitemap", "map", "paths", "path", "switchMap", "urls", "filter", "ev", "el", "url", "of", "NEVER", "share", "pop$", "merge", "distinctUntilChanged", "a", "b", "response$", "distinctUntilKeyChanged", "request", "catchError", "setLocation", "sample", "dom", "res", "skip", "replacement", "selector", "feature", "source", "target", "getComponentElement", "getElements", "concatMap", "script", "h", "name", "Observable", "observer", "EMPTY", "offset", "setLocationHash", "skipUntil", "debounceTime", "bufferCount", "state", "import_escape_html", "import_escape_html", "setupSearchHighlighter", "config", "escape", "separator", "highlight", "_", "data", "term", "query", "match", "value", "escapeHTML", "defaultTransform", "query", "terms", "index", "isSearchReadyMessage", "message", "isSearchQueryMessage", "isSearchResultMessage", "setupSearchIndex", "config", "docs", "translation", "options", "feature", "setupSearchWorker", "url", "index", "configuration", "worker", "tx$", "Subject", "rx$", "watchWorker", "map", "message", "isSearchResultMessage", "result", "document", "share", "from", "data", "setupVersionSelector", "document$", "config", "configuration", "versions$", "requestJSON", "catchError", "EMPTY", "current$", "map", "versions", "current", "version", "aliases", "switchMap", "urls", "fromEvent", "filter", "ev", "withLatestFrom", "el", "url", "of", "fetchSitemap", "sitemap", "path", "getLocation", "setLocation", "combineLatest", "getElement", "renderVersionSelector", "_a", "outdated", "latest", "warning", "getComponentElements", "watchSearchQuery", "el", "rx$", "fn", "defaultTransform", "searchParams", "getLocation", "setToggle", "param$", "filter", "isSearchReadyMessage", "take", "map", "watchToggle", "active", "url", "value", "focus$", "watchElementFocus", "value$", "merge", "fromEvent", "delay", "startWith", "distinctUntilChanged", "combineLatest", "focus", "shareReplay", "mountSearchQuery", "tx$", "push$", "Subject", "done$", "takeLast", "distinctUntilKeyChanged", "translation", "takeUntil", "tap", "state", "finalize", "__spreadValues", "share", "mountSearchResult", "el", "rx$", "query$", "push$", "Subject", "boundary$", "watchElementBoundary", "filter", "meta", "getElement", "list", "ready$", "isSearchReadyMessage", "take", "withLatestFrom", "skipUntil", "items", "value", "translation", "round", "tap", "switchMap", "merge", "of", "bufferCount", "zipWith", "chunk", "result", "renderSearchResultItem", "isSearchResultMessage", "map", "data", "state", "finalize", "__spreadValues", "watchSearchShare", "_el", "query$", "map", "value", "url", "getLocation", "mountSearchShare", "el", "options", "push$", "Subject", "fromEvent", "ev", "tap", "state", "finalize", "__spreadValues", "mountSearchSuggest", "el", "rx$", "keyboard$", "push$", "Subject", "query", "getComponentElement", "query$", "merge", "fromEvent", "observeOn", "asyncScheduler", "map", "distinctUntilChanged", "combineLatestWith", "suggestions", "value", "words", "last", "filter", "mode", "key", "isSearchResultMessage", "data", "tap", "state", "finalize", "mountSearch", "el", "index$", "keyboard$", "config", "configuration", "url", "worker", "setupSearchWorker", "query", "getComponentElement", "result", "tx$", "rx$", "filter", "isSearchQueryMessage", "sample", "isSearchReadyMessage", "take", "mode", "key", "active", "getActiveElement", "anchors", "anchor", "getElements", "article", "best", "a", "b", "setToggle", "els", "i", "query$", "mountSearchQuery", "result$", "mountSearchResult", "merge", "mergeWith", "getComponentElements", "child", "mountSearchShare", "mountSearchSuggest", "err", "NEVER", "mountSearchHiglight", "el", "index$", "location$", "combineLatest", "startWith", "getLocation", "filter", "url", "map", "index", "setupSearchHighlighter", "fn", "_a", "nodes", "it", "node", "original", "replaced", "text", "childNodes", "h", "watchSidebar", "el", "viewport$", "main$", "parent", "adjust", "combineLatest", "map", "offset", "height", "y", "distinctUntilChanged", "a", "b", "mountSidebar", "_a", "_b", "header$", "options", "__objRest", "inner", "getElement", "getElementOffset", "defer", "push$", "Subject", "auditTime", "animationFrameScheduler", "withLatestFrom", "observeOn", "take", "item", "getElements", "container", "getElementContainer", "getElementSize", "tap", "state", "finalize", "__spreadValues", "fetchSourceFactsFromGitHub", "user", "repo", "url", "zip", "requestJSON", "catchError", "EMPTY", "map", "release", "defaultIfEmpty", "info", "__spreadValues", "fetchSourceFactsFromGitLab", "base", "project", "url", "requestJSON", "catchError", "EMPTY", "map", "star_count", "forks_count", "defaultIfEmpty", "fetchSourceFacts", "url", "match", "user", "repo", "fetchSourceFactsFromGitHub", "base", "slug", "fetchSourceFactsFromGitLab", "EMPTY", "fetch$", "watchSource", "el", "defer", "cached", "of", "getComponentElements", "consent", "EMPTY", "fetchSourceFacts", "tap", "facts", "catchError", "filter", "map", "shareReplay", "mountSource", "inner", "getElement", "push$", "Subject", "renderSourceFacts", "state", "finalize", "__spreadValues", "watchTabs", "el", "viewport$", "header$", "watchElementSize", "switchMap", "watchViewportAt", "map", "y", "distinctUntilKeyChanged", "mountTabs", "options", "defer", "push$", "Subject", "hidden", "feature", "of", "tap", "state", "finalize", "__spreadValues", "watchTableOfContents", "el", "viewport$", "header$", "table", "anchors", "getElements", "anchor", "id", "target", "getOptionalElement", "adjust$", "distinctUntilKeyChanged", "map", "height", "main", "getComponentElement", "grid", "getElement", "share", "watchElementSize", "switchMap", "body", "defer", "path", "of", "index", "offset", "a", "b", "combineLatestWith", "adjust", "scan", "prev", "next", "y", "size", "last", "distinctUntilChanged", "startWith", "bufferCount", "mountTableOfContents", "target$", "push$", "Subject", "done$", "takeLast", "feature", "smooth$", "merge", "debounceTime", "filter", "withLatestFrom", "behavior", "container", "getElementContainer", "getElementSize", "takeUntil", "skip", "repeat", "url", "getLocation", "active", "hash", "tap", "state", "finalize", "__spreadValues", "watchBackToTop", "_el", "viewport$", "main$", "target$", "direction$", "map", "y", "bufferCount", "a", "b", "distinctUntilChanged", "active$", "active", "combineLatest", "direction", "takeUntil", "skip", "endWith", "repeat", "hidden", "mountBackToTop", "el", "header$", "push$", "Subject", "done$", "takeLast", "distinctUntilKeyChanged", "height", "tap", "state", "finalize", "__spreadValues", "patchIndeterminate", "document$", "tablet$", "switchMap", "getElements", "tap", "el", "mergeMap", "fromEvent", "takeWhile", "map", "withLatestFrom", "tablet", "isAppleDevice", "patchScrollfix", "document$", "switchMap", "getElements", "tap", "el", "filter", "mergeMap", "fromEvent", "map", "top", "patchScrolllock", "viewport$", "tablet$", "combineLatest", "watchToggle", "map", "active", "tablet", "switchMap", "of", "delay", "withLatestFrom", "y", "value", "obj", "data", "key", "x", "y", "nodes", "parent", "i", "node", "document$", "watchDocument", "location$", "watchLocation", "target$", "watchLocationTarget", "keyboard$", "watchKeyboard", "viewport$", "watchViewport", "tablet$", "watchMedia", "screen$", "print$", "watchPrint", "config", "configuration", "index$", "requestJSON", "NEVER", "alert$", "Subject", "setupClipboardJS", "feature", "setupInstantLoading", "_a", "setupVersionSelector", "merge", "delay", "setToggle", "filter", "mode", "key", "prev", "getOptionalElement", "next", "patchIndeterminate", "patchScrollfix", "patchScrolllock", "header$", "watchHeader", "getComponentElement", "main$", "map", "switchMap", "el", "watchMain", "shareReplay", "control$", "getComponentElements", "mountConsent", "mountDialog", "mountHeader", "mountPalette", "mountSearch", "mountSource", "content$", "defer", "mountAnnounce", "mountContent", "mountSearchHiglight", "EMPTY", "mountHeaderTitle", "at", "mountSidebar", "mountTabs", "mountTableOfContents", "mountBackToTop", "component$", "mergeWith"] } diff --git a/assets/javascripts/extra/bundle.5f09fbc3.min.js b/assets/javascripts/extra/bundle.5f09fbc3.min.js new file mode 100644 index 0000000000..48b752cd03 --- /dev/null +++ b/assets/javascripts/extra/bundle.5f09fbc3.min.js @@ -0,0 +1,18 @@ +"use strict";(()=>{var Je=Object.create;var qr=Object.defineProperty;var $e=Object.getOwnPropertyDescriptor;var Qe=Object.getOwnPropertyNames;var Xe=Object.getPrototypeOf,Ze=Object.prototype.hasOwnProperty;var rt=(r,o)=>()=>(o||r((o={exports:{}}).exports,o),o.exports);var et=(r,o,t,e)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of Qe(o))!Ze.call(r,n)&&n!==t&&qr(r,n,{get:()=>o[n],enumerable:!(e=$e(o,n))||e.enumerable});return r};var tt=(r,o,t)=>(t=r!=null?Je(Xe(r)):{},et(o||!r||!r.__esModule?qr(t,"default",{value:r,enumerable:!0}):t,r));var me=rt((Tt,er)=>{/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */var Hr,Kr,Jr,$r,Qr,Xr,Zr,re,ee,Z,Ar,te,oe,ne,k,ie,fe,ae,ue,ce,se,pe,le,rr;(function(r){var o=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(e){r(t(o,t(e)))}):typeof er=="object"&&typeof er.exports=="object"?r(t(o,t(er.exports))):r(t(o));function t(e,n){return e!==o&&(typeof Object.create=="function"?Object.defineProperty(e,"__esModule",{value:!0}):e.__esModule=!0),function(i,f){return e[i]=n?n(i,f):f}}})(function(r){var o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])};Hr=function(e,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");o(e,n);function i(){this.constructor=e}e.prototype=n===null?Object.create(n):(i.prototype=n.prototype,new i)},Kr=Object.assign||function(e){for(var n,i=1,f=arguments.length;i=0;s--)(c=e[s])&&(a=(u<3?c(a):u>3?c(n,i,a):c(n,i))||a);return u>3&&a&&Object.defineProperty(n,i,a),a},Qr=function(e,n){return function(i,f){n(i,f,e)}},Xr=function(e,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,n)},Zr=function(e,n,i,f){function u(a){return a instanceof i?a:new i(function(c){c(a)})}return new(i||(i=Promise))(function(a,c){function s(y){try{p(f.next(y))}catch(g){c(g)}}function d(y){try{p(f.throw(y))}catch(g){c(g)}}function p(y){y.done?a(y.value):u(y.value).then(s,d)}p((f=f.apply(e,n||[])).next())})},re=function(e,n){var i={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},f,u,a,c;return c={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(c[Symbol.iterator]=function(){return this}),c;function s(p){return function(y){return d([p,y])}}function d(p){if(f)throw new TypeError("Generator is already executing.");for(;i;)try{if(f=1,u&&(a=p[0]&2?u.return:p[0]?u.throw||((a=u.return)&&a.call(u),0):u.next)&&!(a=a.call(u,p[1])).done)return a;switch(u=0,a&&(p=[p[0]&2,a.value]),p[0]){case 0:case 1:a=p;break;case 4:return i.label++,{value:p[1],done:!1};case 5:i.label++,u=p[1],p=[0];continue;case 7:p=i.ops.pop(),i.trys.pop();continue;default:if(a=i.trys,!(a=a.length>0&&a[a.length-1])&&(p[0]===6||p[0]===2)){i=0;continue}if(p[0]===3&&(!a||p[1]>a[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[f++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},Ar=function(e,n){var i=typeof Symbol=="function"&&e[Symbol.iterator];if(!i)return e;var f=i.call(e),u,a=[],c;try{for(;(n===void 0||n-- >0)&&!(u=f.next()).done;)a.push(u.value)}catch(s){c={error:s}}finally{try{u&&!u.done&&(i=f.return)&&i.call(f)}finally{if(c)throw c.error}}return a},te=function(){for(var e=[],n=0;n1||s(m,P)})})}function s(m,P){try{d(f[m](P))}catch(j){g(a[0][3],j)}}function d(m){m.value instanceof k?Promise.resolve(m.value.v).then(p,y):g(a[0][2],m)}function p(m){s("next",m)}function y(m){s("throw",m)}function g(m,P){m(P),a.shift(),a.length&&s(a[0][0],a[0][1])}},fe=function(e){var n,i;return n={},f("next"),f("throw",function(u){throw u}),f("return"),n[Symbol.iterator]=function(){return this},n;function f(u,a){n[u]=e[u]?function(c){return(i=!i)?{value:k(e[u](c)),done:u==="return"}:a?a(c):c}:a}},ae=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=e[Symbol.asyncIterator],i;return n?n.call(e):(e=typeof Z=="function"?Z(e):e[Symbol.iterator](),i={},f("next"),f("throw"),f("return"),i[Symbol.asyncIterator]=function(){return this},i);function f(a){i[a]=e[a]&&function(c){return new Promise(function(s,d){c=e[a](c),u(s,d,c.done,c.value)})}}function u(a,c,s,d){Promise.resolve(d).then(function(p){a({value:p,done:s})},c)}},ue=function(e,n){return Object.defineProperty?Object.defineProperty(e,"raw",{value:n}):e.raw=n,e};var t=Object.create?function(e,n){Object.defineProperty(e,"default",{enumerable:!0,value:n})}:function(e,n){e.default=n};ce=function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var i in e)i!=="default"&&Object.prototype.hasOwnProperty.call(e,i)&&rr(n,e,i);return t(n,e),n},se=function(e){return e&&e.__esModule?e:{default:e}},pe=function(e,n,i,f){if(i==="a"&&!f)throw new TypeError("Private accessor was defined without a getter");if(typeof n=="function"?e!==n||!f:!n.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?f:i==="a"?f.call(e):f?f.value:n.get(e)},le=function(e,n,i,f,u){if(f==="m")throw new TypeError("Private method is not writable");if(f==="a"&&!u)throw new TypeError("Private accessor was defined without a setter");if(typeof n=="function"?e!==n||!u:!n.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return f==="a"?u.call(e,i):u?u.value=i:n.set(e,i),i},r("__extends",Hr),r("__assign",Kr),r("__rest",Jr),r("__decorate",$r),r("__param",Qr),r("__metadata",Xr),r("__awaiter",Zr),r("__generator",re),r("__exportStar",ee),r("__createBinding",rr),r("__values",Z),r("__read",Ar),r("__spread",te),r("__spreadArrays",oe),r("__spreadArray",ne),r("__await",k),r("__asyncGenerator",ie),r("__asyncDelegator",fe),r("__asyncValues",ae),r("__makeTemplateObject",ue),r("__importStar",ce),r("__importDefault",se),r("__classPrivateFieldGet",pe),r("__classPrivateFieldSet",le)})});var de=tt(me(),1),{__extends:_,__assign:Pt,__rest:jt,__decorate:Ft,__param:Mt,__metadata:Ct,__awaiter:he,__generator:tr,__exportStar:Lt,__createBinding:Rt,__values:M,__read:w,__spread:kt,__spreadArrays:Ut,__spreadArray:S,__await:or,__asyncGenerator:ve,__asyncDelegator:Wt,__asyncValues:be,__makeTemplateObject:Dt,__importStar:Vt,__importDefault:Bt,__classPrivateFieldGet:Gt,__classPrivateFieldSet:Nt}=de.default;function l(r){return typeof r=="function"}function nr(r){var o=function(e){Error.call(e),e.stack=new Error().stack},t=r(o);return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var ir=nr(function(r){return function(t){r(this),this.message=t?t.length+` errors occurred during unsubscription: +`+t.map(function(e,n){return n+1+") "+e.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=t}});function C(r,o){if(r){var t=r.indexOf(o);0<=t&&r.splice(t,1)}}var F=function(){function r(o){this.initialTeardown=o,this.closed=!1,this._parentage=null,this._finalizers=null}return r.prototype.unsubscribe=function(){var o,t,e,n,i;if(!this.closed){this.closed=!0;var f=this._parentage;if(f)if(this._parentage=null,Array.isArray(f))try{for(var u=M(f),a=u.next();!a.done;a=u.next()){var c=a.value;c.remove(this)}}catch(m){o={error:m}}finally{try{a&&!a.done&&(t=u.return)&&t.call(u)}finally{if(o)throw o.error}}else f.remove(this);var s=this.initialTeardown;if(l(s))try{s()}catch(m){i=m instanceof ir?m.errors:[m]}var d=this._finalizers;if(d){this._finalizers=null;try{for(var p=M(d),y=p.next();!y.done;y=p.next()){var g=y.value;try{ye(g)}catch(m){i=i!=null?i:[],m instanceof ir?i=S(S([],w(i)),w(m.errors)):i.push(m)}}}catch(m){e={error:m}}finally{try{y&&!y.done&&(n=p.return)&&n.call(p)}finally{if(e)throw e.error}}}if(i)throw new ir(i)}},r.prototype.add=function(o){var t;if(o&&o!==this)if(this.closed)ye(o);else{if(o instanceof r){if(o.closed||o._hasParent(this))return;o._addParent(this)}(this._finalizers=(t=this._finalizers)!==null&&t!==void 0?t:[]).push(o)}},r.prototype._hasParent=function(o){var t=this._parentage;return t===o||Array.isArray(t)&&t.includes(o)},r.prototype._addParent=function(o){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(o),t):t?[t,o]:o},r.prototype._removeParent=function(o){var t=this._parentage;t===o?this._parentage=null:Array.isArray(t)&&C(t,o)},r.prototype.remove=function(o){var t=this._finalizers;t&&C(t,o),o instanceof r&&o._removeParent(this)},r.EMPTY=function(){var o=new r;return o.closed=!0,o}(),r}();var Ir=F.EMPTY;function fr(r){return r instanceof F||r&&"closed"in r&&l(r.remove)&&l(r.add)&&l(r.unsubscribe)}function ye(r){l(r)?r():r.unsubscribe()}var O={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var U={setTimeout:function(r,o){for(var t=[],e=2;e0},enumerable:!1,configurable:!0}),o.prototype._trySubscribe=function(t){return this._throwIfClosed(),r.prototype._trySubscribe.call(this,t)},o.prototype._subscribe=function(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)},o.prototype._innerSubscribe=function(t){var e=this,n=this,i=n.hasError,f=n.isStopped,u=n.observers;return i||f?Ir:(this.currentObservers=null,u.push(t),new F(function(){e.currentObservers=null,C(u,t)}))},o.prototype._checkFinalizedStatuses=function(t){var e=this,n=e.hasError,i=e.thrownError,f=e.isStopped;n?t.error(i):f&&t.complete()},o.prototype.asObservable=function(){var t=new b;return t.source=this,t},o.create=function(t,e){return new Ae(t,e)},o}(b);var Ae=function(r){_(o,r);function o(t,e){var n=r.call(this)||this;return n.destination=t,n.source=e,n}return o.prototype.next=function(t){var e,n;(n=(e=this.destination)===null||e===void 0?void 0:e.next)===null||n===void 0||n.call(e,t)},o.prototype.error=function(t){var e,n;(n=(e=this.destination)===null||e===void 0?void 0:e.error)===null||n===void 0||n.call(e,t)},o.prototype.complete=function(){var t,e;(e=(t=this.destination)===null||t===void 0?void 0:t.complete)===null||e===void 0||e.call(t)},o.prototype._subscribe=function(t){var e,n;return(n=(e=this.source)===null||e===void 0?void 0:e.subscribe(t))!==null&&n!==void 0?n:Ir},o}(Fr);var J={now:function(){return(J.delegate||Date).now()},delegate:void 0};var Mr=function(r){_(o,r);function o(t,e,n){t===void 0&&(t=1/0),e===void 0&&(e=1/0),n===void 0&&(n=J);var i=r.call(this)||this;return i._bufferSize=t,i._windowTime=e,i._timestampProvider=n,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=e===1/0,i._bufferSize=Math.max(1,t),i._windowTime=Math.max(1,e),i}return o.prototype.next=function(t){var e=this,n=e.isStopped,i=e._buffer,f=e._infiniteTimeWindow,u=e._timestampProvider,a=e._windowTime;n||(i.push(t),!f&&i.push(u.now()+a)),this._trimBuffer(),r.prototype.next.call(this,t)},o.prototype._subscribe=function(t){this._throwIfClosed(),this._trimBuffer();for(var e=this._innerSubscribe(t),n=this,i=n._infiniteTimeWindow,f=n._buffer,u=f.slice(),a=0;a{sessionStorage.setItem("\u1D34\u2092\u1D34\u2092\u1D34\u2092",`${t}`),r.hidden=!t}),o.next(JSON.parse(sessionStorage.getItem("\u1D34\u2092\u1D34\u2092\u1D34\u2092")||"true")),z(r,"click").pipe(zr(o)).subscribe(([,t])=>o.next(!t)),kr(250).pipe(gr(o.pipe(X(t=>!t))),H(75),Nr({delay:()=>o.pipe(X(t=>t))}),T(()=>{let t=document.createElement("div");return t.className="\u1D34\u2092\u1D34\u2092\u1D34\u2092",t.ariaHidden="true",Ke.appendChild(t),Ur(Wr,Rr(t)).pipe(Gr(()=>t.remove()),gr(o.pipe(X(e=>!e))),Yr(e=>z(e,"click").pipe(Er(()=>e.classList.add("\u1D34\u2092\u1D34\u2092\u1D34\u2092--\u1D4D\u2092\u1D57\uA700\u1D34\u2090")),Vr(1e3),Er(()=>e.classList.remove("\u1D34\u2092\u1D34\u2092\u1D34\u2092--\u1D4D\u2092\u1D57\uA700\u1D34\u2090")))))})).subscribe()}})(); +//# sourceMappingURL=bundle.5f09fbc3.min.js.map + diff --git a/assets/javascripts/extra/bundle.5f09fbc3.min.js.map b/assets/javascripts/extra/bundle.5f09fbc3.min.js.map new file mode 100644 index 0000000000..24f3674600 --- /dev/null +++ b/assets/javascripts/extra/bundle.5f09fbc3.min.js.map @@ -0,0 +1,8 @@ +{ + "version": 3, + "sources": ["node_modules/rxjs/node_modules/tslib/tslib.js", "node_modules/rxjs/node_modules/tslib/modules/index.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/interval.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "src/assets/javascripts/extra/bundle.ts"], + "sourceRoot": "../../../..", + "sourcesContent": ["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __createBinding;\r\n(function (factory) {\r\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n if (typeof define === \"function\" && define.amd) {\r\n define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n }\r\n else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n factory(createExporter(root, createExporter(module.exports)));\r\n }\r\n else {\r\n factory(createExporter(root));\r\n }\r\n function createExporter(exports, previous) {\r\n if (exports !== root) {\r\n if (typeof Object.create === \"function\") {\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n }\r\n else {\r\n exports.__esModule = true;\r\n }\r\n }\r\n return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n }\r\n})\r\n(function (exporter) {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n __extends = function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n\r\n __assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n\r\n __rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n };\r\n\r\n __decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n };\r\n\r\n __param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n };\r\n\r\n __metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n };\r\n\r\n __awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n };\r\n\r\n __generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n };\r\n\r\n __exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n };\r\n\r\n __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n }) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n });\r\n\r\n __values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n };\r\n\r\n __read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n };\r\n\r\n __spreadArray = function (to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n };\r\n\r\n __await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n };\r\n\r\n __asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n };\r\n\r\n __asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n };\r\n\r\n __asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n };\r\n\r\n __makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n };\r\n\r\n var __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n }) : function(o, v) {\r\n o[\"default\"] = v;\r\n };\r\n\r\n __importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n\r\n __importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n };\r\n\r\n __classPrivateFieldGet = function (receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n };\r\n\r\n __classPrivateFieldSet = function (receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n };\r\n\r\n exporter(\"__extends\", __extends);\r\n exporter(\"__assign\", __assign);\r\n exporter(\"__rest\", __rest);\r\n exporter(\"__decorate\", __decorate);\r\n exporter(\"__param\", __param);\r\n exporter(\"__metadata\", __metadata);\r\n exporter(\"__awaiter\", __awaiter);\r\n exporter(\"__generator\", __generator);\r\n exporter(\"__exportStar\", __exportStar);\r\n exporter(\"__createBinding\", __createBinding);\r\n exporter(\"__values\", __values);\r\n exporter(\"__read\", __read);\r\n exporter(\"__spread\", __spread);\r\n exporter(\"__spreadArrays\", __spreadArrays);\r\n exporter(\"__spreadArray\", __spreadArray);\r\n exporter(\"__await\", __await);\r\n exporter(\"__asyncGenerator\", __asyncGenerator);\r\n exporter(\"__asyncDelegator\", __asyncDelegator);\r\n exporter(\"__asyncValues\", __asyncValues);\r\n exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n exporter(\"__importStar\", __importStar);\r\n exporter(\"__importDefault\", __importDefault);\r\n exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n});\r\n", "import tslib from '../tslib.js';\r\nconst {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __exportStar,\r\n __createBinding,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n} = tslib;\r\nexport {\r\n __extends,\r\n __assign,\r\n __rest,\r\n __decorate,\r\n __param,\r\n __metadata,\r\n __awaiter,\r\n __generator,\r\n __exportStar,\r\n __createBinding,\r\n __values,\r\n __read,\r\n __spread,\r\n __spreadArrays,\r\n __spreadArray,\r\n __await,\r\n __asyncGenerator,\r\n __asyncDelegator,\r\n __asyncValues,\r\n __makeTemplateObject,\r\n __importStar,\r\n __importDefault,\r\n __classPrivateFieldGet,\r\n __classPrivateFieldSet,\r\n};\r\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n NEVER,\n ReplaySubject,\n delay,\n distinctUntilChanged,\n filter,\n finalize,\n fromEvent,\n interval,\n merge,\n mergeMap,\n of,\n repeat,\n switchMap,\n take,\n takeUntil,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Script\n * ------------------------------------------------------------------------- */\n\n/* Append container for instances */\nconst container = document.createElement(\"div\")\ndocument.body.appendChild(container)\n\n/* Append button next to palette toggle */\nconst header = document.querySelector(\".md-header__option\")\nif (header) {\n const button = document.createElement(\"button\")\n button.className = \"md-header__button md-icon \u1D34\u2092\u1D34\u2092\u1D34\u2092__button\"\n if (header.parentElement)\n header.parentElement.insertBefore(button, header)\n\n /* Toggle animation */\n const on$ = new ReplaySubject(1)\n on$\n .pipe(\n distinctUntilChanged()\n )\n .subscribe(on => {\n sessionStorage.setItem(\"\u1D34\u2092\u1D34\u2092\u1D34\u2092\", `${on}`)\n button.hidden = !on\n })\n\n /* Load state from session storage */\n on$.next(JSON.parse(sessionStorage.getItem(\"\u1D34\u2092\u1D34\u2092\u1D34\u2092\") || \"true\"))\n fromEvent(button, \"click\")\n .pipe(\n withLatestFrom(on$)\n )\n .subscribe(([, on]) => on$.next(!on))\n\n /* Generate instances */\n interval(250)\n .pipe(\n takeUntil(on$.pipe(filter(on => !on))),\n take(75),\n repeat({ delay: () => on$.pipe(filter(on => on)) }),\n mergeMap(() => {\n const instance = document.createElement(\"div\")\n instance.className = \"\u1D34\u2092\u1D34\u2092\u1D34\u2092\"\n instance.ariaHidden = \"true\"\n container.appendChild(instance)\n return merge(NEVER, of(instance))\n .pipe(\n finalize(() => instance.remove()),\n takeUntil(on$.pipe(filter(on => !on))),\n switchMap(el => fromEvent(el, \"click\")\n .pipe(\n tap(() => el.classList.add(\"\u1D34\u2092\u1D34\u2092\u1D34\u2092--\u1D4D\u2092\u1D57\uA700\u1D34\u2090\")),\n delay(1000),\n tap(() => el.classList.remove(\"\u1D34\u2092\u1D34\u2092\u1D34\u2092--\u1D4D\u2092\u1D57\uA700\u1D34\u2090\"))\n )\n )\n )\n })\n )\n .subscribe()\n}\n"], + "mappings": "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", + "names": ["require_tslib", "__commonJSMin", "exports", "module", "__extends", "__assign", "__rest", "__decorate", "__param", "__metadata", "__awaiter", "__generator", "__exportStar", "__values", "__read", "__spread", "__spreadArrays", "__spreadArray", "__await", "__asyncGenerator", "__asyncDelegator", "__asyncValues", "__makeTemplateObject", "__importStar", "__importDefault", "__classPrivateFieldGet", "__classPrivateFieldSet", "__createBinding", "factory", "root", "createExporter", "previous", "id", "v", "exporter", "extendStatics", "d", "b", "p", "__", "t", "s", "n", "e", "i", "decorators", "target", "key", "desc", "c", "r", "paramIndex", "decorator", "metadataKey", "metadataValue", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "rejected", "result", "body", "_", "y", "g", "verb", "op", "m", "o", "k", "k2", "ar", "error", "il", "j", "jl", "to", "from", "pack", "l", "q", "a", "resume", "settle", "fulfill", "f", "cooked", "raw", "__setModuleDefault", "mod", "receiver", "state", "kind", "import_tslib", "__extends", "__assign", "__rest", "__decorate", "__param", "__metadata", "__awaiter", "__generator", "__exportStar", "__createBinding", "__values", "__read", "__spread", "__spreadArrays", "__spreadArray", "__await", "__asyncGenerator", "__asyncDelegator", "__asyncValues", "__makeTemplateObject", "__importStar", "__importDefault", "__classPrivateFieldGet", "__classPrivateFieldSet", "tslib", "isFunction", "value", "createErrorClass", "createImpl", "_super", "instance", "ctorFunc", "UnsubscriptionError", "createErrorClass", "_super", "errors", "err", "i", "arrRemove", "arr", "item", "index", "Subscription", "initialTeardown", "errors", "_parentage", "_parentage_1", "__values", "_parentage_1_1", "parent_1", "initialFinalizer", "isFunction", "e", "UnsubscriptionError", "_finalizers", "_finalizers_1", "_finalizers_1_1", "finalizer", "execFinalizer", "err", "__spreadArray", "__read", "teardown", "_a", "parent", "arrRemove", "empty", "EMPTY_SUBSCRIPTION", "Subscription", "isSubscription", "value", "isFunction", "execFinalizer", "finalizer", "config", "timeoutProvider", "handler", "timeout", "args", "_i", "delegate", "__spreadArray", "__read", "handle", "reportUnhandledError", "err", "timeoutProvider", "onUnhandledError", "config", "noop", "COMPLETE_NOTIFICATION", "createNotification", "errorNotification", "error", "nextNotification", "value", "kind", "context", "errorContext", "cb", "config", "isRoot", "_a", "errorThrown", "error", "captureError", "err", "Subscriber", "_super", "__extends", "destination", "_this", "isSubscription", "EMPTY_OBSERVER", "next", "error", "complete", "SafeSubscriber", "value", "handleStoppedNotification", "nextNotification", "err", "errorNotification", "COMPLETE_NOTIFICATION", "Subscription", "_bind", "bind", "fn", "thisArg", "ConsumerObserver", "partialObserver", "value", "error", "handleUnhandledError", "err", "SafeSubscriber", "_super", "__extends", "observerOrNext", "complete", "_this", "isFunction", "context_1", "config", "Subscriber", "handleUnhandledError", "error", "config", "captureError", "reportUnhandledError", "defaultErrorHandler", "err", "handleStoppedNotification", "notification", "subscriber", "onStoppedNotification", "timeoutProvider", "EMPTY_OBSERVER", "noop", "observable", "identity", "x", "pipeFromArray", "fns", "identity", "input", "prev", "fn", "Observable", "subscribe", "operator", "observable", "observerOrNext", "error", "complete", "_this", "subscriber", "isSubscriber", "SafeSubscriber", "errorContext", "_a", "source", "sink", "err", "next", "promiseCtor", "getPromiseCtor", "resolve", "reject", "value", "operations", "_i", "pipeFromArray", "x", "getPromiseCtor", "promiseCtor", "_a", "config", "isObserver", "value", "isFunction", "isSubscriber", "Subscriber", "isSubscription", "hasLift", "source", "isFunction", "operate", "init", "liftedSource", "err", "createOperatorSubscriber", "destination", "onNext", "onComplete", "onError", "onFinalize", "OperatorSubscriber", "_super", "__extends", "shouldUnsubscribe", "_this", "value", "err", "closed_1", "_a", "Subscriber", "ObjectUnsubscribedError", "createErrorClass", "_super", "Subject", "_super", "__extends", "_this", "operator", "subject", "AnonymousSubject", "ObjectUnsubscribedError", "value", "errorContext", "_b", "__values", "_c", "observer", "err", "observers", "_a", "subscriber", "hasError", "isStopped", "EMPTY_SUBSCRIPTION", "Subscription", "arrRemove", "thrownError", "observable", "Observable", "destination", "source", "AnonymousSubject", "_super", "__extends", "destination", "source", "_this", "value", "_b", "_a", "err", "subscriber", "EMPTY_SUBSCRIPTION", "Subject", "dateTimestampProvider", "ReplaySubject", "_super", "__extends", "_bufferSize", "_windowTime", "_timestampProvider", "dateTimestampProvider", "_this", "value", "_a", "isStopped", "_buffer", "_infiniteTimeWindow", "subscriber", "subscription", "copy", "i", "adjustedBufferSize", "now", "last", "Subject", "Action", "_super", "__extends", "scheduler", "work", "state", "delay", "Subscription", "intervalProvider", "handler", "timeout", "args", "_i", "delegate", "__spreadArray", "__read", "handle", "AsyncAction", "_super", "__extends", "scheduler", "work", "_this", "state", "delay", "id", "_a", "_id", "intervalProvider", "_scheduler", "error", "_delay", "errored", "errorValue", "e", "actions", "arrRemove", "Action", "Scheduler", "schedulerActionCtor", "now", "work", "delay", "state", "dateTimestampProvider", "AsyncScheduler", "_super", "__extends", "SchedulerAction", "now", "Scheduler", "_this", "action", "actions", "error", "asyncScheduler", "AsyncScheduler", "AsyncAction", "async", "EMPTY", "Observable", "subscriber", "isScheduler", "value", "isFunction", "last", "arr", "popResultSelector", "args", "isFunction", "popScheduler", "isScheduler", "popNumber", "defaultValue", "isArrayLike", "x", "isPromise", "value", "isFunction", "isInteropObservable", "input", "isFunction", "observable", "isAsyncIterable", "obj", "isFunction", "createInvalidObservableTypeError", "input", "getSymbolIterator", "iterator", "isIterable", "input", "isFunction", "iterator", "readableStreamLikeToAsyncGenerator", "readableStream", "reader", "__await", "_a", "_b", "value", "done", "isReadableStreamLike", "obj", "isFunction", "innerFrom", "input", "Observable", "isInteropObservable", "fromInteropObservable", "isArrayLike", "fromArrayLike", "isPromise", "fromPromise", "isAsyncIterable", "fromAsyncIterable", "isIterable", "fromIterable", "isReadableStreamLike", "fromReadableStreamLike", "createInvalidObservableTypeError", "obj", "subscriber", "obs", "observable", "isFunction", "array", "i", "promise", "value", "err", "reportUnhandledError", "iterable", "iterable_1", "__values", "iterable_1_1", "asyncIterable", "process", "readableStream", "readableStreamLikeToAsyncGenerator", "asyncIterable_1", "__asyncValues", "asyncIterable_1_1", "executeSchedule", "parentSubscription", "scheduler", "work", "delay", "repeat", "scheduleSubscription", "observeOn", "scheduler", "delay", "operate", "source", "subscriber", "createOperatorSubscriber", "value", "executeSchedule", "err", "subscribeOn", "scheduler", "delay", "operate", "source", "subscriber", "scheduleObservable", "input", "scheduler", "innerFrom", "subscribeOn", "observeOn", "schedulePromise", "input", "scheduler", "innerFrom", "subscribeOn", "observeOn", "scheduleArray", "input", "scheduler", "Observable", "subscriber", "i", "scheduleIterable", "input", "scheduler", "Observable", "subscriber", "iterator", "executeSchedule", "value", "done", "_a", "err", "isFunction", "scheduleAsyncIterable", "input", "scheduler", "Observable", "subscriber", "executeSchedule", "iterator", "result", "scheduleReadableStreamLike", "input", "scheduler", "scheduleAsyncIterable", "readableStreamLikeToAsyncGenerator", "scheduled", "input", "scheduler", "isInteropObservable", "scheduleObservable", "isArrayLike", "scheduleArray", "isPromise", "schedulePromise", "isAsyncIterable", "scheduleAsyncIterable", "isIterable", "scheduleIterable", "isReadableStreamLike", "scheduleReadableStreamLike", "createInvalidObservableTypeError", "from", "input", "scheduler", "scheduled", "innerFrom", "of", "args", "_i", "scheduler", "popScheduler", "from", "isValidDate", "value", "map", "project", "thisArg", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "isArray", "callOrApply", "fn", "args", "__spreadArray", "__read", "mapOneOrManyArgs", "map", "mergeInternals", "source", "subscriber", "project", "concurrent", "onBeforeNext", "expand", "innerSubScheduler", "additionalFinalizer", "buffer", "active", "index", "isComplete", "checkComplete", "outerNext", "value", "doInnerSub", "innerComplete", "innerFrom", "createOperatorSubscriber", "innerValue", "bufferedValue", "executeSchedule", "err", "mergeMap", "project", "resultSelector", "concurrent", "isFunction", "a", "i", "map", "b", "ii", "innerFrom", "operate", "source", "subscriber", "mergeInternals", "mergeAll", "concurrent", "mergeMap", "identity", "concatAll", "mergeAll", "concat", "args", "_i", "concatAll", "from", "popScheduler", "nodeEventEmitterMethods", "eventTargetMethods", "jqueryMethods", "fromEvent", "target", "eventName", "options", "resultSelector", "isFunction", "mapOneOrManyArgs", "_a", "__read", "isEventTarget", "methodName", "handler", "isNodeStyleEventEmitter", "toCommonHandlerRegistry", "isJQueryStyleEventEmitter", "add", "remove", "isArrayLike", "mergeMap", "subTarget", "innerFrom", "Observable", "subscriber", "args", "_i", "timer", "dueTime", "intervalOrScheduler", "scheduler", "async", "intervalDuration", "isScheduler", "Observable", "subscriber", "due", "isValidDate", "n", "interval", "period", "scheduler", "asyncScheduler", "timer", "merge", "args", "_i", "scheduler", "popScheduler", "concurrent", "popNumber", "sources", "innerFrom", "mergeAll", "from", "EMPTY", "NEVER", "Observable", "noop", "filter", "predicate", "thisArg", "operate", "source", "subscriber", "index", "createOperatorSubscriber", "value", "take", "count", "EMPTY", "operate", "source", "subscriber", "seen", "createOperatorSubscriber", "value", "ignoreElements", "operate", "source", "subscriber", "createOperatorSubscriber", "noop", "mapTo", "value", "map", "delayWhen", "delayDurationSelector", "subscriptionDelay", "source", "concat", "take", "ignoreElements", "mergeMap", "value", "index", "mapTo", "delay", "due", "scheduler", "asyncScheduler", "duration", "timer", "delayWhen", "distinctUntilChanged", "comparator", "keySelector", "identity", "defaultCompare", "operate", "source", "subscriber", "previousKey", "first", "createOperatorSubscriber", "value", "currentKey", "a", "b", "finalize", "callback", "operate", "source", "subscriber", "repeat", "countOrConfig", "count", "delay", "_a", "EMPTY", "operate", "source", "subscriber", "soFar", "sourceSub", "resubscribe", "notifier", "timer", "innerFrom", "notifierSubscriber_1", "createOperatorSubscriber", "subscribeToSource", "syncUnsub", "switchMap", "project", "resultSelector", "operate", "source", "subscriber", "innerSubscriber", "index", "isComplete", "checkComplete", "createOperatorSubscriber", "value", "innerIndex", "outerIndex", "innerFrom", "innerValue", "takeUntil", "notifier", "operate", "source", "subscriber", "innerFrom", "createOperatorSubscriber", "noop", "tap", "observerOrNext", "error", "complete", "tapObserver", "isFunction", "operate", "source", "subscriber", "_a", "isUnsub", "createOperatorSubscriber", "value", "err", "_b", "identity", "withLatestFrom", "inputs", "_i", "project", "popResultSelector", "operate", "source", "subscriber", "len", "otherValues", "hasValue", "ready", "i", "innerFrom", "createOperatorSubscriber", "value", "identity", "noop", "values", "__spreadArray", "__read", "container", "header", "button", "on$", "ReplaySubject", "distinctUntilChanged", "on", "fromEvent", "withLatestFrom", "interval", "takeUntil", "filter", "take", "repeat", "mergeMap", "instance", "merge", "NEVER", "of", "finalize", "switchMap", "el", "tap", "delay"] +} diff --git a/assets/stylesheets/extra.0d2c79a8.min.css b/assets/stylesheets/extra.0d2c79a8.min.css new file mode 100644 index 0000000000..6e23ef17d0 --- /dev/null +++ b/assets/stylesheets/extra.0d2c79a8.min.css @@ -0,0 +1 @@ +@charset "UTF-8";@keyframes ᴴₒᴴₒᴴₒ{0%{transform:translate3d(var(--left-start),0,0)}to{transform:translate3d(var(--left-end),110vh,0)}}.ᴴₒᴴₒᴴₒ{--size:1vw;background:#fff;border:1px solid #ddd;border-radius:50%;cursor:pointer;height:var(--size);opacity:1;position:fixed;top:-5vh;transition:opacity 1s;width:var(--size);z-index:10}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):first-child{--size:0.4vw;--left-start:7vw;--left-end:-8vw;animation:ᴴₒᴴₒᴴₒ 12s linear infinite both;animation-delay:-4s;left:24vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(2){--size:0.4vw;--left-start:9vw;--left-end:0vw;animation:ᴴₒᴴₒᴴₒ 18s linear infinite both;animation-delay:-2s;left:68vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(3){--size:0.4vw;--left-start:1vw;--left-end:7vw;animation:ᴴₒᴴₒᴴₒ 11s linear infinite both;animation-delay:-6s;left:10vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(4){--size:0.5vw;--left-start:8vw;--left-end:10vw;animation:ᴴₒᴴₒᴴₒ 18s linear infinite both;animation-delay:-8s;left:63vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(5){--size:0.5vw;--left-start:5vw;--left-end:9vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-4s;left:58vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(6){--size:0.1vw;--left-start:3vw;--left-end:10vw;animation:ᴴₒᴴₒᴴₒ 14s linear infinite both;animation-delay:-1s;left:55vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(7){--size:0.2vw;--left-start:-2vw;--left-end:6vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-7s;left:50vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(8){--size:0.3vw;--left-start:7vw;--left-end:7vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-3s;left:65vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(9){--size:0.2vw;--left-start:4vw;--left-end:5vw;animation:ᴴₒᴴₒᴴₒ 13s linear infinite both;animation-delay:-2s;left:1vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(10){--size:0.3vw;--left-start:2vw;--left-end:-3vw;animation:ᴴₒᴴₒᴴₒ 12s linear infinite both;animation-delay:-10s;left:92vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(11){--size:0.2vw;--left-start:1vw;--left-end:8vw;animation:ᴴₒᴴₒᴴₒ 13s linear infinite both;animation-delay:-6s;left:5vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(12){--size:0.4vw;--left-start:9vw;--left-end:1vw;animation:ᴴₒᴴₒᴴₒ 18s linear infinite both;animation-delay:-3s;left:77vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(13){--size:0.1vw;--left-start:-3vw;--left-end:3vw;animation:ᴴₒᴴₒᴴₒ 18s linear infinite both;animation-delay:-7s;left:93vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(14){--size:0.5vw;--left-start:0vw;--left-end:-5vw;animation:ᴴₒᴴₒᴴₒ 12s linear infinite both;animation-delay:-4s;left:35vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(15){--size:0.1vw;--left-start:-9vw;--left-end:4vw;animation:ᴴₒᴴₒᴴₒ 20s linear infinite both;animation-delay:-6s;left:15vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(16){--size:0.1vw;--left-start:1vw;--left-end:9vw;animation:ᴴₒᴴₒᴴₒ 17s linear infinite both;animation-delay:-6s;left:100vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(17){--size:0.1vw;--left-start:1vw;--left-end:0vw;animation:ᴴₒᴴₒᴴₒ 17s linear infinite both;animation-delay:-1s;left:44vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(18){--size:0.4vw;--left-start:-9vw;--left-end:-9vw;animation:ᴴₒᴴₒᴴₒ 16s linear infinite both;animation-delay:-6s;left:69vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(19){--size:0.2vw;--left-start:3vw;--left-end:-8vw;animation:ᴴₒᴴₒᴴₒ 14s linear infinite both;animation-delay:-1s;left:32vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(20){--size:0.1vw;--left-start:-7vw;--left-end:8vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-8s;left:59vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(21){--size:0.2vw;--left-start:-1vw;--left-end:-8vw;animation:ᴴₒᴴₒᴴₒ 13s linear infinite both;animation-delay:-6s;left:96vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(22){--size:0.2vw;--left-start:9vw;--left-end:1vw;animation:ᴴₒᴴₒᴴₒ 11s linear infinite both;animation-delay:-7s;left:78vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(23){--size:0.4vw;--left-start:5vw;--left-end:-2vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-10s;left:29vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(24){--size:0.1vw;--left-start:-4vw;--left-end:1vw;animation:ᴴₒᴴₒᴴₒ 20s linear infinite both;animation-delay:-7s;left:83vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(25){--size:0.3vw;--left-start:-1vw;--left-end:2vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-8s;left:95vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(26){--size:0.5vw;--left-start:-3vw;--left-end:-6vw;animation:ᴴₒᴴₒᴴₒ 18s linear infinite both;animation-delay:-8s;left:74vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(27){--size:0.5vw;--left-start:9vw;--left-end:-9vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-2s;left:94vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(28){--size:0.1vw;--left-start:0vw;--left-end:-4vw;animation:ᴴₒᴴₒᴴₒ 15s linear infinite both;animation-delay:-4s;left:95vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(29){--size:0.5vw;--left-start:8vw;--left-end:4vw;animation:ᴴₒᴴₒᴴₒ 11s linear infinite both;animation-delay:-3s;left:42vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(30){--size:0.4vw;--left-start:-5vw;--left-end:0vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-10s;left:8vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(31){--size:0.4vw;--left-start:-7vw;--left-end:3vw;animation:ᴴₒᴴₒᴴₒ 11s linear infinite both;animation-delay:-4s;left:77vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(32){--size:0.4vw;--left-start:8vw;--left-end:-5vw;animation:ᴴₒᴴₒᴴₒ 15s linear infinite both;animation-delay:-3s;left:80vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(33){--size:0.2vw;--left-start:-3vw;--left-end:8vw;animation:ᴴₒᴴₒᴴₒ 20s linear infinite both;animation-delay:-6s;left:15vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(34){--size:0.5vw;--left-start:5vw;--left-end:1vw;animation:ᴴₒᴴₒᴴₒ 13s linear infinite both;animation-delay:-1s;left:91vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(35){--size:0.3vw;--left-start:-6vw;--left-end:-5vw;animation:ᴴₒᴴₒᴴₒ 11s linear infinite both;animation-delay:-5s;left:93vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(36){--size:0.1vw;--left-start:10vw;--left-end:10vw;animation:ᴴₒᴴₒᴴₒ 13s linear infinite both;animation-delay:-10s;left:59vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(37){--size:0.3vw;--left-start:4vw;--left-end:6vw;animation:ᴴₒᴴₒᴴₒ 14s linear infinite both;animation-delay:-8s;left:35vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(38){--size:0.5vw;--left-start:8vw;--left-end:-3vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-6s;left:6vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(39){--size:0.2vw;--left-start:-6vw;--left-end:-2vw;animation:ᴴₒᴴₒᴴₒ 14s linear infinite both;animation-delay:-7s;left:58vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(40){--size:0.4vw;--left-start:3vw;--left-end:-5vw;animation:ᴴₒᴴₒᴴₒ 13s linear infinite both;animation-delay:-4s;left:15vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(41){--size:0.1vw;--left-start:2vw;--left-end:-7vw;animation:ᴴₒᴴₒᴴₒ 17s linear infinite both;animation-delay:-7s;left:24vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(42){--size:0.3vw;--left-start:8vw;--left-end:3vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-9s;left:36vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(43){--size:0.2vw;--left-start:-9vw;--left-end:-3vw;animation:ᴴₒᴴₒᴴₒ 13s linear infinite both;animation-delay:-10s;left:23vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(44){--size:0.1vw;--left-start:4vw;--left-end:-6vw;animation:ᴴₒᴴₒᴴₒ 16s linear infinite both;animation-delay:-6s;left:9vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(45){--size:0.1vw;--left-start:-3vw;--left-end:-5vw;animation:ᴴₒᴴₒᴴₒ 19s linear infinite both;animation-delay:-5s;left:62vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(46){--size:0.3vw;--left-start:0vw;--left-end:2vw;animation:ᴴₒᴴₒᴴₒ 20s linear infinite both;animation-delay:-4s;left:1vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(47){--size:0.4vw;--left-start:8vw;--left-end:-4vw;animation:ᴴₒᴴₒᴴₒ 14s linear infinite both;animation-delay:-1s;left:76vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(48){--size:0.2vw;--left-start:5vw;--left-end:-3vw;animation:ᴴₒᴴₒᴴₒ 15s linear infinite both;animation-delay:-5s;left:19vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(49){--size:0.4vw;--left-start:1vw;--left-end:-1vw;animation:ᴴₒᴴₒᴴₒ 18s linear infinite both;animation-delay:-4s;left:72vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(50){--size:0.4vw;--left-start:8vw;--left-end:-6vw;animation:ᴴₒᴴₒᴴₒ 16s linear infinite both;animation-delay:-10s;left:25vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(51){--size:0.1vw;--left-start:-5vw;--left-end:-8vw;animation:ᴴₒᴴₒᴴₒ 17s linear infinite both;animation-delay:-9s;left:71vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(52){--size:0.4vw;--left-start:-4vw;--left-end:9vw;animation:ᴴₒᴴₒᴴₒ 15s linear infinite both;animation-delay:-7s;left:30vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(53){--size:0.5vw;--left-start:-1vw;--left-end:-8vw;animation:ᴴₒᴴₒᴴₒ 15s linear infinite both;animation-delay:-4s;left:37vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(54){--size:0.4vw;--left-start:-1vw;--left-end:-1vw;animation:ᴴₒᴴₒᴴₒ 12s linear infinite both;animation-delay:-9s;left:48vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(55){--size:0.5vw;--left-start:8vw;--left-end:6vw;animation:ᴴₒᴴₒᴴₒ 20s linear infinite both;animation-delay:-6s;left:65vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(56){--size:0.4vw;--left-start:9vw;--left-end:5vw;animation:ᴴₒᴴₒᴴₒ 18s linear infinite both;animation-delay:-6s;left:53vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(57){--size:0.4vw;--left-start:3vw;--left-end:-9vw;animation:ᴴₒᴴₒᴴₒ 12s linear infinite both;animation-delay:-1s;left:76vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(58){--size:0.2vw;--left-start:-7vw;--left-end:0vw;animation:ᴴₒᴴₒᴴₒ 16s linear infinite both;animation-delay:-9s;left:54vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(59){--size:0.1vw;--left-start:-9vw;--left-end:-2vw;animation:ᴴₒᴴₒᴴₒ 20s linear infinite both;animation-delay:-1s;left:66vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(60){--size:0.3vw;--left-start:-6vw;--left-end:2vw;animation:ᴴₒᴴₒᴴₒ 11s linear infinite both;animation-delay:-7s;left:91vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(61){--size:0.4vw;--left-start:6vw;--left-end:-8vw;animation:ᴴₒᴴₒᴴₒ 14s linear infinite both;animation-delay:-7s;left:35vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(62){--size:0.4vw;--left-start:-6vw;--left-end:2vw;animation:ᴴₒᴴₒᴴₒ 16s linear infinite both;animation-delay:-3s;left:86vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(63){--size:0.5vw;--left-start:-7vw;--left-end:7vw;animation:ᴴₒᴴₒᴴₒ 20s linear infinite both;animation-delay:-5s;left:86vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(64){--size:0.2vw;--left-start:-9vw;--left-end:1vw;animation:ᴴₒᴴₒᴴₒ 13s linear infinite both;animation-delay:-5s;left:53vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(65){--size:0.2vw;--left-start:-2vw;--left-end:3vw;animation:ᴴₒᴴₒᴴₒ 11s linear infinite both;animation-delay:-6s;left:56vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(66){--size:0.5vw;--left-start:1vw;--left-end:8vw;animation:ᴴₒᴴₒᴴₒ 17s linear infinite both;animation-delay:-5s;left:58vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(67){--size:0.5vw;--left-start:2vw;--left-end:9vw;animation:ᴴₒᴴₒᴴₒ 15s linear infinite both;animation-delay:-5s;left:14vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(68){--size:0.3vw;--left-start:-1vw;--left-end:6vw;animation:ᴴₒᴴₒᴴₒ 14s linear infinite both;animation-delay:-1s;left:100vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(69){--size:0.2vw;--left-start:9vw;--left-end:-2vw;animation:ᴴₒᴴₒᴴₒ 15s linear infinite both;animation-delay:-7s;left:8vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(70){--size:0.4vw;--left-start:-5vw;--left-end:8vw;animation:ᴴₒᴴₒᴴₒ 11s linear infinite both;animation-delay:-4s;left:82vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(71){--size:0.4vw;--left-start:3vw;--left-end:-7vw;animation:ᴴₒᴴₒᴴₒ 13s linear infinite both;animation-delay:-6s;left:26vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(72){--size:0.2vw;--left-start:-2vw;--left-end:-3vw;animation:ᴴₒᴴₒᴴₒ 15s linear infinite both;animation-delay:-3s;left:24vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(73){--size:0.3vw;--left-start:-7vw;--left-end:-8vw;animation:ᴴₒᴴₒᴴₒ 16s linear infinite both;animation-delay:-2s;left:2vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(74){--size:0.4vw;--left-start:-9vw;--left-end:-3vw;animation:ᴴₒᴴₒᴴₒ 14s linear infinite both;animation-delay:-10s;left:94vw}.ᴴₒᴴₒᴴₒ:not(.ᴴₒᴴₒᴴₒ--gotcha):nth-child(75){--size:0.3vw;--left-start:7vw;--left-end:2vw;animation:ᴴₒᴴₒᴴₒ 17s linear infinite both;animation-delay:-2s;left:26vw}.ᴴₒᴴₒᴴₒ:nth-child(5n){filter:blur(2px)}.ᴴₒᴴₒᴴₒ--ᵍₒᵗ꜀ᴴₐ{opacity:0}.ᴴₒᴴₒᴴₒ__button{display:block}.ᴴₒᴴₒᴴₒ__button:after{background-color:currentcolor;content:"";display:block;height:24px;margin:0 auto;-webkit-mask-image:url('data:image/svg+xml;charset=utf-8,');mask-image:url('data:image/svg+xml;charset=utf-8,');-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:24px}.ᴴₒᴴₒᴴₒ__button[hidden]:after{-webkit-mask-image:url('data:image/svg+xml;charset=utf-8,');mask-image:url('data:image/svg+xml;charset=utf-8,')} \ No newline at end of file diff --git a/assets/stylesheets/extra.0d2c79a8.min.css.map b/assets/stylesheets/extra.0d2c79a8.min.css.map new file mode 100644 index 0000000000..cd262c03a0 --- /dev/null +++ b/assets/stylesheets/extra.0d2c79a8.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/assets/stylesheets/extra.scss","../../../src/assets/stylesheets/extra.scss"],"names":[],"mappings":"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","file":"extra.css"} \ No newline at end of file diff --git a/assets/stylesheets/main.472b142f.min.css b/assets/stylesheets/main.472b142f.min.css deleted file mode 100644 index ef52c08527..0000000000 --- a/assets/stylesheets/main.472b142f.min.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:transparent;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}:root,[data-md-color-scheme=default]{--md-default-fg-color:rgba(0,0,0,.87);--md-default-fg-color--light:rgba(0,0,0,.54);--md-default-fg-color--lighter:rgba(0,0,0,.32);--md-default-fg-color--lightest:rgba(0,0,0,.07);--md-default-bg-color:#fff;--md-default-bg-color--light:hsla(0,0%,100%,.7);--md-default-bg-color--lighter:hsla(0,0%,100%,.3);--md-default-bg-color--lightest:hsla(0,0%,100%,.12);--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:rgba(255,255,0,.5);--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(255,255,0,.5);--md-typeset-del-color:rgba(245,80,61,.15);--md-typeset-ins-color:rgba(11,213,112,.15);--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-table-color:rgba(0,0,0,.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-fg-color:#fff;--md-footer-fg-color--light:hsla(0,0%,100%,.7);--md-footer-fg-color--lighter:hsla(0,0%,100%,.3);--md-footer-bg-color:rgba(0,0,0,.87);--md-footer-bg-color--dark:rgba(0,0,0,.32);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.05),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.1),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.35)}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}body,input{font-feature-settings:"kern","liga";font-family:var(--md-text-font-family)}body,code,input,kbd,pre{color:var(--md-typeset-color)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}@media (hover:none){.md-typeset abbr{position:relative}.md-typeset abbr[title]:-webkit-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-webkit-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}.md-typeset abbr[title]:-moz-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}[dir=ltr] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:is(:focus,:hover):after{left:0}[dir=rtl] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:is(:focus,:hover):after{right:0}.md-typeset abbr[title]:is(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li :-webkit-any(ul,ol),.md-typeset ul li :-webkit-any(ul,ol){margin-bottom:.5em;margin-top:.5em}.md-typeset ol li :-moz-any(ul,ol),.md-typeset ul li :-moz-any(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset ol li :-webkit-any(ul,ol),[dir=ltr] .md-typeset ul li :-webkit-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :-moz-any(ul,ol),[dir=ltr] .md-typeset ul li :-moz-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :is(ul,ol),[dir=ltr] .md-typeset ul li :is(ul,ol){margin-left:.625em}[dir=rtl] .md-typeset ol li :-webkit-any(ul,ol),[dir=rtl] .md-typeset ul li :-webkit-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :-moz-any(ul,ol),[dir=rtl] .md-typeset ul li :-moz-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :is(ul,ol),[dir=rtl] .md-typeset ul li :is(ul,ol){margin-right:.625em}.md-typeset ol li :is(ul,ol),.md-typeset ul li :is(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset img[src$="#gh-dark-mode-only"],.md-typeset img[src$="#only-dark"]{display:none}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) :-webkit-any(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :-moz-any(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :is(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :-webkit-any(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :-moz-any(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :is(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :-webkit-any(th,td):not([align]){text-align:left}.md-typeset table:not([class]) :-moz-any(th,td):not([align]){text-align:left}.md-typeset table:not([class]) :is(th,td):not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) :-webkit-any(th,td):not([align]){text-align:right}[dir=rtl] .md-typeset table:not([class]) :-moz-any(th,td):not([align]){text-align:right}[dir=rtl] .md-typeset table:not([class]) :is(th,td):not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.9375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background:var(--md-typeset-mark-color);color:var(--md-default-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.9375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:-webkit-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:-moz-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:is(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:rgba(0,0,0,.54);height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.9375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{align-content:baseline;display:flex;flex-wrap:wrap;justify-content:center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{display:flex;flex-grow:0.01;outline-color:var(--md-accent-fg-color);overflow:hidden;padding-bottom:.4rem;padding-top:1.4rem;transition:opacity .25s}.md-footer__link:-webkit-any(:focus,:hover){opacity:.7}.md-footer__link:-moz-any(:focus,:hover){opacity:.7}.md-footer__link:is(:focus,:hover){opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.9375em){.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;line-height:2.4rem;max-width:calc(100% - 2.4rem);padding:0 1rem;position:relative;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;left:0;margin-top:-1rem;opacity:.7;padding:0 1rem;position:absolute;right:0}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:-webkit-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:-moz-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:is(:focus,:hover){color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:is(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:-webkit-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:-moz-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:is(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem transparent,0 .2rem .4rem transparent;color:var(--md-primary-bg-color);display:block;left:0;position:-webkit-sticky;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.1875em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem}[dir=ltr] .md-header__title{margin-left:1rem}[dir=rtl] .md-header__title{margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__item{padding:0 .6rem}[dir=ltr] .md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-left:0}.md-nav__link{align-items:center;cursor:pointer;display:flex;justify-content:space-between;margin-top:.625em;overflow:hidden;scroll-snap-align:start;text-overflow:ellipsis;transition:color 125ms}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-typeset-a-color)}.md-nav__item .md-nav__link--index [href]{width:100%}.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link>*{cursor:pointer;display:flex}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.1875em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary :-webkit-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :-moz-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :is(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest);padding:0}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}}@media screen and (max-width:59.9375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}}@media screen and (min-width:76.25em){.md-nav{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon,.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:-webkit-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:-moz-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:is(:checked,:indeterminate)~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700;pointer-events:none}.md-nav__item--section>.md-nav__link--index [href]{pointer-events:auto}.md-nav__item--section>.md-nav__link .md-nav__icon{display:none}.md-nav__item--section>.md-nav{display:block}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s,transform .25s;width:.9rem}[dir=rtl] .md-nav__icon{transform:rotate(180deg)}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:-.1rem;width:100%}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon,.md-nav__item--nested .md-nav__toggle:indeterminate~.md-nav__link .md-nav__icon{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__list>.md-nav__item--nested,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);font-weight:700;margin-top:0;padding:0 .6rem;position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__link--index){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link .md-nav__icon{display:none}.md-nav--lifted .md-nav[data-md-level="1"]{display:block}[dir=ltr] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-right:.6rem}[dir=rtl] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:.6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested){padding:0 .6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested)>.md-nav__link{padding:0}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:rgba(0,0,0,.54);cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem transparent;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:rgba(0,0,0,.26);border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:hsla(0,0%,100%,.12)}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem rgba(0,0,0,.07);color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:transparent;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::-ms-input-placeholder{-ms-transition:color .25s;transition:color .25s}.md-search__input::placeholder{transition:color .25s}.md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.9375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::-ms-input-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>*{margin-left:.2rem}[dir=rtl] .md-search__options>*{margin-right:.2rem}.md-search__options>*{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>*{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.9375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more summary{color:var(--md-typeset-a-color);cursor:pointer;display:block;font-size:.64rem;outline:none;padding:.75em .8rem;scroll-snap-align:start;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more summary{padding-left:2.2rem}[dir=rtl] .md-search-result__more summary{padding-right:2.2rem}}.md-search-result__more summary:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary::marker{display:none}.md-search-result__more summary::-webkit-details-marker{display:none}.md-search-result__more summary~*>*{opacity:.65}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}.md-search-result__article--document .md-search-result__title{font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.9375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result__title{font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result__teaser{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--md-default-fg-color--light);display:-webkit-box;font-size:.64rem;line-height:1.6;margin:.5em 0;max-height:2rem;overflow:hidden;text-overflow:ellipsis}@media screen and (max-width:44.9375em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}.md-search-result__teaser mark{background-color:initial;text-decoration:underline}.md-search-result__terms{font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:initial;color:var(--md-accent-fg-color)}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:-webkit-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-webkit-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:-moz-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-moz-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:is(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid transparent;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid transparent;border-right:.2rem solid transparent;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:-webkit-sticky;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.1875em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;-ms-scroll-snap-type:none;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{scrollbar-gutter:stable;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.1875em){.md-overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.1875em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;list-style:none;margin:0;padding:0;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link--active,.md-tabs__link:-webkit-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:-moz-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:is(:focus,:hover){color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags{margin-bottom:.75em;margin-top:-.125em}[dir=ltr] .md-typeset .md-tag{margin-right:.5em}[dir=rtl] .md-typeset .md-tag{margin-left:.5em}.md-typeset .md-tag{background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-block;font-size:.64rem;font-weight:700;letter-spacing:normal;line-height:1.6;margin-bottom:.5em;padding:.3125em .9375em;vertical-align:middle}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;margin-right:.4em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon:-webkit-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:-moz-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:is(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--md-default-fg-color--lightest);transform:scale(.95)}75%{box-shadow:0 0 0 .625em transparent;transform:scale(1)}to{box-shadow:0 0 0 0 transparent;transform:scale(.95)}}:root{--md-tooltip-width:20rem}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}:-webkit-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:-moz-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:is(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-weight:400;outline:none;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}.md-annotation:not([hidden]){display:inline-block;line-height:1.325}.md-annotation__index{cursor:pointer;font-family:var(--md-code-font-family);font-size:.85em;margin:0 1ch;outline:none;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:0}.md-annotation .md-annotation__index{color:#fff;transition:z-index .25s}.md-annotation .md-annotation__index:-webkit-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:-moz-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:is(:focus,:hover){color:#fff}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);border-radius:2ch;content:"";height:2.2ch;left:-.125em;margin:0 -.4ch;padding:0 .4ch;position:absolute;top:0;transition:color .25s,background-color .25s;width:calc(100% + 1.2ch);width:max(2.2ch,100% + 1.2ch);z-index:-1}@media not all and (prefers-reduced-motion){[data-md-visible]>.md-annotation__index:after{animation:pulse 2s infinite}}.md-tooltip--active+.md-annotation__index:after{animation:none;transition:color .25s,background-color .25s}code .md-annotation__index{font-family:var(--md-code-font-family);font-size:inherit}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}.md-tooltip--active+.md-annotation__index{animation:none;transition:none;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block;line-height:90%}.md-annotation__index [data-md-annotation-id]:before{content:attr(data-md-annotation-id);display:inline-block;padding-bottom:.1em;transform:scale(1.15);transition:transform .4s cubic-bezier(.1,.7,.1,1);vertical-align:.065em}@media not print{.md-annotation__index [data-md-annotation-id]:before{content:"+"}:focus-within>.md-annotation__index [data-md-annotation-id]:before{transform:scale(1.25) rotate(45deg)}}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:is(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:-webkit-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-webkit-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:-moz-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-moz-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:is(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.05rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition :-webkit-any(.admonition,details),.md-typeset details :-webkit-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition :-moz-any(.admonition,details),.md-typeset details :-moz-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition :is(.admonition,details),.md-typeset details :is(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:rgba(68,138,255,.1);border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.note){border-color:#448aff}.md-typeset :-moz-any(.admonition,details):-moz-any(.note){border-color:#448aff}.md-typeset :is(.admonition,details):is(.note){border-color:#448aff}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :is(.note)>:is(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):before{background-color:#448aff;mask-image:var(--md-admonition-icon--note)}.md-typeset :is(.note)>:is(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):after{color:#448aff}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):after{color:#448aff}.md-typeset :is(.note)>:is(.admonition-title,summary):after{color:#448aff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-moz-any(.admonition,details):-moz-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :is(.admonition,details):is(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):before{background-color:#00b0ff;mask-image:var(--md-admonition-icon--abstract)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):after{color:#00b0ff}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):after{color:#00b0ff}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):after{color:#00b0ff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.info,.todo){border-color:#00b8d4}.md-typeset :-moz-any(.admonition,details):-moz-any(.info,.todo){border-color:#00b8d4}.md-typeset :is(.admonition,details):is(.info,.todo){border-color:#00b8d4}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):before{background-color:#00b8d4;mask-image:var(--md-admonition-icon--info)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):after{color:#00b8d4}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):after{color:#00b8d4}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):after{color:#00b8d4}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-moz-any(.admonition,details):-moz-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :is(.admonition,details):is(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):before{background-color:#00bfa5;mask-image:var(--md-admonition-icon--tip)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):after{color:#00bfa5}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):after{color:#00bfa5}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):after{color:#00bfa5}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.success,.check,.done){border-color:#00c853}.md-typeset :-moz-any(.admonition,details):-moz-any(.success,.check,.done){border-color:#00c853}.md-typeset :is(.admonition,details):is(.success,.check,.done){border-color:#00c853}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):before{background-color:#00c853;mask-image:var(--md-admonition-icon--success)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):after{color:#00c853}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):after{color:#00c853}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):after{color:#00c853}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :-moz-any(.admonition,details):-moz-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :is(.admonition,details):is(.question,.help,.faq){border-color:#64dd17}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):before{background-color:#64dd17;mask-image:var(--md-admonition-icon--question)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):after{color:#64dd17}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):after{color:#64dd17}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):after{color:#64dd17}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-moz-any(.admonition,details):-moz-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :is(.admonition,details):is(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):before{background-color:#ff9100;mask-image:var(--md-admonition-icon--warning)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):after{color:#ff9100}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):after{color:#ff9100}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):after{color:#ff9100}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-moz-any(.admonition,details):-moz-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :is(.admonition,details):is(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):before{background-color:#ff5252;mask-image:var(--md-admonition-icon--failure)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):after{color:#ff5252}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):after{color:#ff5252}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):after{color:#ff5252}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.danger,.error){border-color:#ff1744}.md-typeset :-moz-any(.admonition,details):-moz-any(.danger,.error){border-color:#ff1744}.md-typeset :is(.admonition,details):is(.danger,.error){border-color:#ff1744}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):before{background-color:#ff1744;mask-image:var(--md-admonition-icon--danger)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):after{color:#ff1744}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):after{color:#ff1744}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):after{color:#ff1744}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.bug){border-color:#f50057}.md-typeset :-moz-any(.admonition,details):-moz-any(.bug){border-color:#f50057}.md-typeset :is(.admonition,details):is(.bug){border-color:#f50057}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :is(.bug)>:is(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):before{background-color:#f50057;mask-image:var(--md-admonition-icon--bug)}.md-typeset :is(.bug)>:is(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):after{color:#f50057}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):after{color:#f50057}.md-typeset :is(.bug)>:is(.admonition-title,summary):after{color:#f50057}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.example){border-color:#7c4dff}.md-typeset :-moz-any(.admonition,details):-moz-any(.example){border-color:#7c4dff}.md-typeset :is(.admonition,details):is(.example){border-color:#7c4dff}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :is(.example)>:is(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):before{background-color:#7c4dff;mask-image:var(--md-admonition-icon--example)}.md-typeset :is(.example)>:is(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):after{color:#7c4dff}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):after{color:#7c4dff}.md-typeset :is(.example)>:is(.admonition-title,summary):after{color:#7c4dff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :-moz-any(.admonition,details):-moz-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :is(.admonition,details):is(.quote,.cite){border-color:#9e9e9e}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):before{background-color:#9e9e9e;mask-image:var(--md-admonition-icon--quote)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):after{color:#9e9e9e}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):after{color:#9e9e9e}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:-webkit-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:-moz-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:is(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :-webkit-any(:hover,:target)>.headerlink{opacity:1;-webkit-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :-moz-any(:hover,:target)>.headerlink{opacity:1;-moz-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :is(:hover,:target)>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:-webkit-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:-moz-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:is(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset :-webkit-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :-moz-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :is(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.9375em){.md-typeset div.arithmatex{margin:0 -.8rem}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto;width:-webkit-min-content;width:-moz-min-content;width:min-content}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset :-webkit-any(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset :-moz-any(del,ins,.comment).critic{box-decoration-break:clone}.md-typeset :is(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :is(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :is(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.highlight :-webkit-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :-moz-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :is(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight :-webkit-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-moz-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :is(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-webkit-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-moz-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :is(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-webkit-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-moz-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :is(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-webkit-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :is(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :-moz-any(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :is(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :-webkit-any(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-moz-any(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :is(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-webkit-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-moz-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :is(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-webkit-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :is(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-moz-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :is(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-webkit-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-moz-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :is(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-webkit-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-moz-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :is(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-webkit-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :-moz-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :is(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color);display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:-webkit-sticky;position:sticky;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable :-webkit-any(tbody,td){display:block;padding:0}.highlighttable :-moz-any(tbody,td){display:block;padding:0}.highlighttable :is(tbody,td){display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.9375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:-webkit-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:-moz-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:is(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-accent-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid transparent;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-accent-fg-color)}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,transparent);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,transparent);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.9375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-accent-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){background-color:var(--md-accent-fg-color--transparent)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color)}.mermaid{line-height:normal;margin:1em 0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/assets/stylesheets/main.472b142f.min.css.map b/assets/stylesheets/main.472b142f.min.css.map deleted file mode 100644 index ebe03d9c29..0000000000 --- a/assets/stylesheets/main.472b142f.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["src/assets/stylesheets/main/extensions/pymdownx/_keys.scss","../../../src/assets/stylesheets/main.scss","src/assets/stylesheets/main/_resets.scss","src/assets/stylesheets/main/_colors.scss","src/assets/stylesheets/main/_icons.scss","src/assets/stylesheets/main/_typeset.scss","src/assets/stylesheets/utilities/_break.scss","src/assets/stylesheets/main/layout/_banner.scss","src/assets/stylesheets/main/layout/_base.scss","src/assets/stylesheets/main/layout/_clipboard.scss","src/assets/stylesheets/main/layout/_consent.scss","src/assets/stylesheets/main/layout/_content.scss","src/assets/stylesheets/main/layout/_dialog.scss","src/assets/stylesheets/main/layout/_feedback.scss","src/assets/stylesheets/main/layout/_footer.scss","src/assets/stylesheets/main/layout/_form.scss","src/assets/stylesheets/main/layout/_header.scss","src/assets/stylesheets/main/layout/_nav.scss","src/assets/stylesheets/main/layout/_search.scss","src/assets/stylesheets/main/layout/_select.scss","src/assets/stylesheets/main/layout/_sidebar.scss","src/assets/stylesheets/main/layout/_source.scss","src/assets/stylesheets/main/layout/_tabs.scss","src/assets/stylesheets/main/layout/_tag.scss","src/assets/stylesheets/main/layout/_tooltip.scss","src/assets/stylesheets/main/layout/_top.scss","src/assets/stylesheets/main/layout/_version.scss","src/assets/stylesheets/main/extensions/markdown/_admonition.scss","node_modules/material-design-color/material-color.scss","src/assets/stylesheets/main/extensions/markdown/_footnotes.scss","src/assets/stylesheets/main/extensions/markdown/_toc.scss","src/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss","src/assets/stylesheets/main/extensions/pymdownx/_critic.scss","src/assets/stylesheets/main/extensions/pymdownx/_details.scss","src/assets/stylesheets/main/extensions/pymdownx/_emoji.scss","src/assets/stylesheets/main/extensions/pymdownx/_highlight.scss","src/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss","src/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss","src/assets/stylesheets/main/integrations/_mermaid.scss","src/assets/stylesheets/main/_modifiers.scss"],"names":[],"mappings":"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B40FJ,C0B70FE,iEACE,oB1B40FJ,C0B70FE,qDACE,oB1B40FJ,C0Bx0FE,8EACE,mC1B20FJ,C0B50FE,wEACE,mC1B20FJ,C0B50FE,4DACE,mC1B20FJ,C0Bx0FI,qFACE,wBAnBG,CAoBH,kDAAA,CAAA,0C1B00FN,C0B50FI,+EACE,wBAnBG,CAoBH,0C1B00FN,C0B50FI,mEACE,wBAnBG,CAoBH,kDAAA,CAAA,0C1B00FN,C0Bt0FI,oFACE,a1Bw0FN,C0Bz0FI,8EACE,a1Bw0FN,C0Bz0FI,kEACE,a1Bw0FN,C0Bx1FE,iFACE,oB1B21FJ,C0B51FE,2EACE,oB1B21FJ,C0B51FE,+DACE,oB1B21FJ,C0Bv1FE,wFACE,mC1B01FJ,C0B31FE,kFACE,mC1B01FJ,C0B31FE,sEACE,mC1B01FJ,C0Bv1FI,+FACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1By1FN,C0B31FI,yFACE,wBAnBG,CAoBH,yC1By1FN,C0B31FI,6EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1By1FN,C0Br1FI,8FACE,a1Bu1FN,C0Bx1FI,wFACE,a1Bu1FN,C0Bx1FI,4EACE,a1Bu1FN,C0Bv2FE,iFACE,oB1B02FJ,C0B32FE,2EACE,oB1B02FJ,C0B32FE,+DACE,oB1B02FJ,C0Bt2FE,wFACE,kC1By2FJ,C0B12FE,kFACE,kC1By2FJ,C0B12FE,sEACE,kC1By2FJ,C0Bt2FI,+FACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bw2FN,C0B12FI,yFACE,wBAnBG,CAoBH,6C1Bw2FN,C0B12FI,6EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bw2FN,C0Bp2FI,8FACE,a1Bs2FN,C0Bv2FI,wFACE,a1Bs2FN,C0Bv2FI,4EACE,a1Bs2FN,C0Bt3FE,gFACE,oB1By3FJ,C0B13FE,0EACE,oB1By3FJ,C0B13FE,8DACE,oB1By3FJ,C0Br3FE,uFACE,oC1Bw3FJ,C0Bz3FE,iFACE,oC1Bw3FJ,C0Bz3FE,qEACE,oC1Bw3FJ,C0Br3FI,8FACE,wBAnBG,CAoBH,sDAAA,CAAA,8C1Bu3FN,C0Bz3FI,wFACE,wBAnBG,CAoBH,8C1Bu3FN,C0Bz3FI,4EACE,wBAnBG,CAoBH,sDAAA,CAAA,8C1Bu3FN,C0Bn3FI,6FACE,a1Bq3FN,C0Bt3FI,uFACE,a1Bq3FN,C0Bt3FI,2EACE,a1Bq3FN,C0Br4FE,wFACE,oB1Bw4FJ,C0Bz4FE,kFACE,oB1Bw4FJ,C0Bz4FE,sEACE,oB1Bw4FJ,C0Bp4FE,+FACE,mC1Bu4FJ,C0Bx4FE,yFACE,mC1Bu4FJ,C0Bx4FE,6EACE,mC1Bu4FJ,C0Bp4FI,sGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bs4FN,C0Bx4FI,gGACE,wBAnBG,CAoBH,6C1Bs4FN,C0Bx4FI,oFACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bs4FN,C0Bl4FI,qGACE,a1Bo4FN,C0Br4FI,+FACE,a1Bo4FN,C0Br4FI,mFACE,a1Bo4FN,C0Bp5FE,mFACE,oB1Bu5FJ,C0Bx5FE,6EACE,oB1Bu5FJ,C0Bx5FE,iEACE,oB1Bu5FJ,C0Bn5FE,0FACE,mC1Bs5FJ,C0Bv5FE,oFACE,mC1Bs5FJ,C0Bv5FE,wEACE,mC1Bs5FJ,C0Bn5FI,iGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bq5FN,C0Bv5FI,2FACE,wBAnBG,CAoBH,6C1Bq5FN,C0Bv5FI,+EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bq5FN,C0Bj5FI,gGACE,a1Bm5FN,C0Bp5FI,0FACE,a1Bm5FN,C0Bp5FI,8EACE,a1Bm5FN,C0Bn6FE,0EACE,oB1Bs6FJ,C0Bv6FE,oEACE,oB1Bs6FJ,C0Bv6FE,wDACE,oB1Bs6FJ,C0Bl6FE,iFACE,mC1Bq6FJ,C0Bt6FE,2EACE,mC1Bq6FJ,C0Bt6FE,+DACE,mC1Bq6FJ,C0Bl6FI,wFACE,wBAnBG,CAoBH,oDAAA,CAAA,4C1Bo6FN,C0Bt6FI,kFACE,wBAnBG,CAoBH,4C1Bo6FN,C0Bt6FI,sEACE,wBAnBG,CAoBH,oDAAA,CAAA,4C1Bo6FN,C0Bh6FI,uFACE,a1Bk6FN,C0Bn6FI,iFACE,a1Bk6FN,C0Bn6FI,qEACE,a1Bk6FN,C0Bl7FE,gEACE,oB1Bq7FJ,C0Bt7FE,0DACE,oB1Bq7FJ,C0Bt7FE,8CACE,oB1Bq7FJ,C0Bj7FE,uEACE,kC1Bo7FJ,C0Br7FE,iEACE,kC1Bo7FJ,C0Br7FE,qDACE,kC1Bo7FJ,C0Bj7FI,8EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1Bm7FN,C0Br7FI,wEACE,wBAnBG,CAoBH,yC1Bm7FN,C0Br7FI,4DACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1Bm7FN,C0B/6FI,6EACE,a1Bi7FN,C0Bl7FI,uEACE,a1Bi7FN,C0Bl7FI,2DACE,a1Bi7FN,C0Bj8FE,oEACE,oB1Bo8FJ,C0Br8FE,8DACE,oB1Bo8FJ,C0Br8FE,kDACE,oB1Bo8FJ,C0Bh8FE,2EACE,oC1Bm8FJ,C0Bp8FE,qEACE,oC1Bm8FJ,C0Bp8FE,yDACE,oC1Bm8FJ,C0Bh8FI,kFACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bk8FN,C0Bp8FI,4EACE,wBAnBG,CAoBH,6C1Bk8FN,C0Bp8FI,gEACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bk8FN,C0B97FI,iFACE,a1Bg8FN,C0Bj8FI,2EACE,a1Bg8FN,C0Bj8FI,+DACE,a1Bg8FN,C0Bh9FE,wEACE,oB1Bm9FJ,C0Bp9FE,kEACE,oB1Bm9FJ,C0Bp9FE,sDACE,oB1Bm9FJ,C0B/8FE,+EACE,kC1Bk9FJ,C0Bn9FE,yEACE,kC1Bk9FJ,C0Bn9FE,6DACE,kC1Bk9FJ,C0B/8FI,sFACE,wBAnBG,CAoBH,mDAAA,CAAA,2C1Bi9FN,C0Bn9FI,gFACE,wBAnBG,CAoBH,2C1Bi9FN,C0Bn9FI,oEACE,wBAnBG,CAoBH,mDAAA,CAAA,2C1Bi9FN,C0B78FI,qFACE,a1B+8FN,C0Bh9FI,+EACE,a1B+8FN,C0Bh9FI,mEACE,a1B+8FN,C4BjnGA,MACE,wM5BonGF,C4B3mGE,sBACE,uCAAA,CACA,gB5B8mGJ,C4B3mGI,mCACE,a5B6mGN,C4B9mGI,mCACE,c5B6mGN,C4BzmGM,4BACE,sB5B2mGR,C4BxmGQ,mCACE,gC5B0mGV,C4BtmGQ,2DAEE,SAAA,CADA,uBAAA,CAEA,e5BwmGV,C4BpmGQ,0EAEE,SAAA,CADA,uB5BumGV,C4BxmGQ,uEAEE,SAAA,CADA,uB5BumGV,C4BxmGQ,iEAEE,SAAA,CAD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21GJ,CkC51GE,6BACE,sClC21GJ,CkC51GE,uBACE,sClC21GJ,CkCx1GE,cACE,yClC01GJ,CkC90GE,4DACE,oClCg1GJ,CkCj1GE,yDACE,oClCg1GJ,CkCj1GE,mDACE,oClCg1GJ,CkCx0GE,6CACE,qClC00GJ,CkC30GE,0CACE,qClC00GJ,CkC30GE,oCACE,qClC00GJ,CkCh0GE,oDACE,oClCk0GJ,CkCn0GE,iDACE,oClCk0GJ,CkCn0GE,2CACE,oClCk0GJ,CkCzzGE,gDACE,qClC2zGJ,CkC5zGE,6CACE,qClC2zGJ,CkC5zGE,uCACE,qClC2zGJ,CkCtzGE,gCACE,kClCwzGJ,CkCzzGE,6BACE,kClCwzGJ,CkCzzGE,uBACE,kClCwzGJ,CkClzGE,qCACE,sClCozGJ,CkCrzGE,kCACE,sClCozGJ,CkCrzGE,4BACE,sClCozGJ,CkC7yGE,yCACE,sClC+yGJ,CkChzGE,sCACE,sClC+yGJ,CkChzGE,gCACE,sClC+yGJ,CkCxyGE,yCACE,qClC0yGJ,CkC3yGE,sCACE,qClC0yGJ,CkC3yGE,gCACE,qClC0yGJ,CkCjyGE,gDACE,qClCmyGJ,CkCpyGE,6CACE,qClCmyGJ,CkCpyGE,uCACE,qClCmyGJ,CkC3xGE,6CACE,sClC6xGJ,CkC9xGE,0CACE,sClC6xGJ,CkC9xGE,oCACE,sClC6xGJ,CkClxGE,yDACE,qClCoxGJ,CkCrxGE,sDACE,qClCoxGJ,CkCrxGE,gDACE,qClCoxGJ,CkC/wGE,iCAGE,mBAAA,CAFA,gBAAA,CACA,gBlCkxGJ,CkCpxGE,8BAGE,mBAAA,CAFA,gBAAA,CACA,gBlCkxGJ,CkCpxGE,wBAGE,mBAAA,CAFA,gBAAA,CACA,gBlCkxGJ,CkC9wGE,eACE,4ClCgxGJ,CkC7wGE,eACE,4ClC+wGJ,CkC3wGE,gBAIE,wCAAA,CAHA,aAAA,CACA,wBAAA,CACA,wBlC8wGJ,CkCzwGE,yBAOE,wCAAA,CACA,+DAAA,CACA,4BAAA,CACA,6BAAA,CARA,iBAAA,CAIA,eAAA,CADA,eAAA,CAFA,cAAA,CACA,oCAAA,CAHA,iBlCoxGJ,CkCxwGI,6BACE,Y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","file":"main.css"} \ No newline at end of file diff --git a/assets/stylesheets/main.975780f9.min.css b/assets/stylesheets/main.975780f9.min.css new file mode 100644 index 0000000000..dac48ba77e --- /dev/null +++ b/assets/stylesheets/main.975780f9.min.css @@ -0,0 +1 @@ +@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}:root,[data-md-color-scheme=default]{--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008a;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#00000012;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:#ffff0080;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:#ffff0080;--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-table-color:#0000001f;--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-fg-color:#fff;--md-footer-fg-color--light:#ffffffb3;--md-footer-fg-color--lighter:#ffffff4d;--md-footer-bg-color:#000000de;--md-footer-bg-color--dark:#00000052;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}body,input{font-feature-settings:"kern","liga";font-family:var(--md-text-font-family)}body,code,input,kbd,pre{color:var(--md-typeset-color)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}@media (hover:none){.md-typeset abbr{position:relative}.md-typeset abbr[title]:-webkit-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-webkit-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}.md-typeset abbr[title]:-moz-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}[dir=ltr] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:is(:focus,:hover):after{left:0}[dir=rtl] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:is(:focus,:hover):after{right:0}.md-typeset abbr[title]:is(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li :-webkit-any(ul,ol),.md-typeset ul li :-webkit-any(ul,ol){margin-bottom:.5em;margin-top:.5em}.md-typeset ol li :-moz-any(ul,ol),.md-typeset ul li :-moz-any(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset ol li :-webkit-any(ul,ol),[dir=ltr] .md-typeset ul li :-webkit-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :-moz-any(ul,ol),[dir=ltr] .md-typeset ul li :-moz-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :is(ul,ol),[dir=ltr] .md-typeset ul li :is(ul,ol){margin-left:.625em}[dir=rtl] .md-typeset ol li :-webkit-any(ul,ol),[dir=rtl] .md-typeset ul li :-webkit-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :-moz-any(ul,ol),[dir=rtl] .md-typeset ul li :-moz-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :is(ul,ol),[dir=rtl] .md-typeset ul li :is(ul,ol){margin-right:.625em}.md-typeset ol li :is(ul,ol),.md-typeset ul li :is(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset img[src$="#gh-dark-mode-only"],.md-typeset img[src$="#only-dark"]{display:none}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) :-webkit-any(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :-moz-any(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :is(th,td)>:first-child{margin-top:0}.md-typeset table:not([class]) :-webkit-any(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :-moz-any(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :is(th,td)>:last-child{margin-bottom:0}.md-typeset table:not([class]) :-webkit-any(th,td):not([align]){text-align:left}.md-typeset table:not([class]) :-moz-any(th,td):not([align]){text-align:left}.md-typeset table:not([class]) :is(th,td):not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) :-webkit-any(th,td):not([align]){text-align:right}[dir=rtl] .md-typeset table:not([class]) :-moz-any(th,td):not([align]){text-align:right}[dir=rtl] .md-typeset table:not([class]) :is(th,td):not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.9375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background:var(--md-typeset-mark-color);color:var(--md-default-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.9375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:-webkit-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:-moz-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:is(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:#0000008a;height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.9375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{align-content:baseline;display:flex;flex-wrap:wrap;justify-content:center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{display:flex;flex-grow:0.01;outline-color:var(--md-accent-fg-color);overflow:hidden;padding-bottom:.4rem;padding-top:1.4rem;transition:opacity .25s}.md-footer__link:-webkit-any(:focus,:hover){opacity:.7}.md-footer__link:-moz-any(:focus,:hover){opacity:.7}.md-footer__link:is(:focus,:hover){opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.9375em){.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;line-height:2.4rem;max-width:calc(100% - 2.4rem);padding:0 1rem;position:relative;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;left:0;margin-top:-1rem;opacity:.7;padding:0 1rem;position:absolute;right:0}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:-webkit-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:-moz-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:is(:focus,:hover){color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:is(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:-webkit-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:-moz-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:is(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem #0000,0 .2rem .4rem #0000;color:var(--md-primary-bg-color);display:block;left:0;position:-webkit-sticky;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.1875em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem}[dir=ltr] .md-header__title{margin-left:1rem}[dir=rtl] .md-header__title{margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__item{padding:0 .6rem}[dir=ltr] .md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-left:0}.md-nav__link{align-items:center;cursor:pointer;display:flex;justify-content:space-between;margin-top:.625em;overflow:hidden;scroll-snap-align:start;text-overflow:ellipsis;transition:color 125ms}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-typeset-a-color)}.md-nav__item .md-nav__link--index [href]{width:100%}.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link>*{cursor:pointer;display:flex}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.1875em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary :-webkit-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :-moz-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :is(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest);padding:0}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}}@media screen and (max-width:59.9375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}}@media screen and (min-width:76.25em){.md-nav{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon,.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:-webkit-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:-moz-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:is(:checked,:indeterminate)~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700;pointer-events:none}.md-nav__item--section>.md-nav__link--index [href]{pointer-events:auto}.md-nav__item--section>.md-nav__link .md-nav__icon{display:none}.md-nav__item--section>.md-nav{display:block}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s,transform .25s;width:.9rem}[dir=rtl] .md-nav__icon{transform:rotate(180deg)}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:-.1rem;width:100%}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon,.md-nav__item--nested .md-nav__toggle:indeterminate~.md-nav__link .md-nav__icon{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__list>.md-nav__item--nested,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);font-weight:700;margin-top:0;padding:0 .6rem;position:-webkit-sticky;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__link--index){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link .md-nav__icon{display:none}.md-nav--lifted .md-nav[data-md-level="1"]{display:block}[dir=ltr] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-right:.6rem}[dir=rtl] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:.6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested){padding:0 .6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested)>.md-nav__link{padding:0}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:#0000008a;cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem #0000;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:#00000042;border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:#ffffff1f}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem #00000012;color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:#0000;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::placeholder{transition:color .25s}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.9375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>*{margin-left:.2rem}[dir=rtl] .md-search__options>*{margin-right:.2rem}.md-search__options>*{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>*{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.9375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more summary{color:var(--md-typeset-a-color);cursor:pointer;display:block;font-size:.64rem;outline:none;padding:.75em .8rem;scroll-snap-align:start;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more summary{padding-left:2.2rem}[dir=rtl] .md-search-result__more summary{padding-right:2.2rem}}.md-search-result__more summary:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary::marker{display:none}.md-search-result__more summary::-webkit-details-marker{display:none}.md-search-result__more summary~*>*{opacity:.65}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}.md-search-result__article--document .md-search-result__title{font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.9375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result__title{font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result__teaser{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--md-default-fg-color--light);display:-webkit-box;font-size:.64rem;line-height:1.6;margin:.5em 0;max-height:2rem;overflow:hidden;text-overflow:ellipsis}@media screen and (max-width:44.9375em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}.md-search-result__teaser mark{background-color:initial;text-decoration:underline}.md-search-result__terms{font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:initial;color:var(--md-accent-fg-color)}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:-webkit-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-webkit-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:-moz-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-moz-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:is(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:-webkit-sticky;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.1875em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{scrollbar-gutter:stable;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.1875em){.md-overlay{background-color:#0000008a;height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.1875em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;list-style:none;margin:0;padding:0;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link--active,.md-tabs__link:-webkit-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:-moz-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:is(:focus,:hover){color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags{margin-bottom:.75em;margin-top:-.125em}[dir=ltr] .md-typeset .md-tag{margin-right:.5em}[dir=rtl] .md-typeset .md-tag{margin-left:.5em}.md-typeset .md-tag{background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-block;font-size:.64rem;font-weight:700;letter-spacing:normal;line-height:1.6;margin-bottom:.5em;padding:.3125em .9375em;vertical-align:middle}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;margin-right:.4em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon:-webkit-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:-moz-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:is(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--md-default-fg-color--lightest);transform:scale(.95)}75%{box-shadow:0 0 0 .625em #0000;transform:scale(1)}to{box-shadow:0 0 0 0 #0000;transform:scale(.95)}}:root{--md-tooltip-width:20rem}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}:-webkit-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:-moz-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:is(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-weight:400;outline:none;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}.md-annotation:not([hidden]){display:inline-block;line-height:1.325}.md-annotation__index{cursor:pointer;font-family:var(--md-code-font-family);font-size:.85em;margin:0 1ch;outline:none;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:0}.md-annotation .md-annotation__index{color:#fff;transition:z-index .25s}.md-annotation .md-annotation__index:-webkit-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:-moz-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:is(:focus,:hover){color:#fff}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);border-radius:2ch;content:"";height:2.2ch;left:-.125em;margin:0 -.4ch;padding:0 .4ch;position:absolute;top:0;transition:color .25s,background-color .25s;width:calc(100% + 1.2ch);width:max(2.2ch,100% + 1.2ch);z-index:-1}@media not all and (prefers-reduced-motion){[data-md-visible]>.md-annotation__index:after{animation:pulse 2s infinite}}.md-tooltip--active+.md-annotation__index:after{animation:none;transition:color .25s,background-color .25s}code .md-annotation__index{font-family:var(--md-code-font-family);font-size:inherit}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}.md-tooltip--active+.md-annotation__index{animation:none;transition:none;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block;line-height:90%}.md-annotation__index [data-md-annotation-id]:before{content:attr(data-md-annotation-id);display:inline-block;padding-bottom:.1em;transform:scale(1.15);transition:transform .4s cubic-bezier(.1,.7,.1,1);vertical-align:.065em}@media not print{.md-annotation__index [data-md-annotation-id]:before{content:"+"}:focus-within>.md-annotation__index [data-md-annotation-id]:before{transform:scale(1.25) rotate(45deg)}}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:is(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:-webkit-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-webkit-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:-moz-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-moz-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:is(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.05rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition :-webkit-any(.admonition,details),.md-typeset details :-webkit-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition :-moz-any(.admonition,details),.md-typeset details :-moz-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition :is(.admonition,details),.md-typeset details :is(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:#448aff1a;border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.note){border-color:#448aff}.md-typeset :-moz-any(.admonition,details):-moz-any(.note){border-color:#448aff}.md-typeset :is(.admonition,details):is(.note){border-color:#448aff}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary){background-color:#448aff1a}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary){background-color:#448aff1a}.md-typeset :is(.note)>:is(.admonition-title,summary){background-color:#448aff1a}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):before{background-color:#448aff;mask-image:var(--md-admonition-icon--note)}.md-typeset :is(.note)>:is(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):after{color:#448aff}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):after{color:#448aff}.md-typeset :is(.note)>:is(.admonition-title,summary):after{color:#448aff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-moz-any(.admonition,details):-moz-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :is(.admonition,details):is(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary){background-color:#00b0ff1a}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary){background-color:#00b0ff1a}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary){background-color:#00b0ff1a}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):before{background-color:#00b0ff;mask-image:var(--md-admonition-icon--abstract)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):after{color:#00b0ff}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):after{color:#00b0ff}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):after{color:#00b0ff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.info,.todo){border-color:#00b8d4}.md-typeset :-moz-any(.admonition,details):-moz-any(.info,.todo){border-color:#00b8d4}.md-typeset :is(.admonition,details):is(.info,.todo){border-color:#00b8d4}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary){background-color:#00b8d41a}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary){background-color:#00b8d41a}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary){background-color:#00b8d41a}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):before{background-color:#00b8d4;mask-image:var(--md-admonition-icon--info)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):after{color:#00b8d4}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):after{color:#00b8d4}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):after{color:#00b8d4}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-moz-any(.admonition,details):-moz-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :is(.admonition,details):is(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary){background-color:#00bfa51a}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary){background-color:#00bfa51a}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary){background-color:#00bfa51a}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):before{background-color:#00bfa5;mask-image:var(--md-admonition-icon--tip)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):after{color:#00bfa5}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):after{color:#00bfa5}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):after{color:#00bfa5}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.success,.check,.done){border-color:#00c853}.md-typeset :-moz-any(.admonition,details):-moz-any(.success,.check,.done){border-color:#00c853}.md-typeset :is(.admonition,details):is(.success,.check,.done){border-color:#00c853}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary){background-color:#00c8531a}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary){background-color:#00c8531a}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary){background-color:#00c8531a}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):before{background-color:#00c853;mask-image:var(--md-admonition-icon--success)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):after{color:#00c853}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):after{color:#00c853}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):after{color:#00c853}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :-moz-any(.admonition,details):-moz-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :is(.admonition,details):is(.question,.help,.faq){border-color:#64dd17}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary){background-color:#64dd171a}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary){background-color:#64dd171a}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary){background-color:#64dd171a}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):before{background-color:#64dd17;mask-image:var(--md-admonition-icon--question)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):after{color:#64dd17}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):after{color:#64dd17}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):after{color:#64dd17}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-moz-any(.admonition,details):-moz-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :is(.admonition,details):is(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary){background-color:#ff91001a}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary){background-color:#ff91001a}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary){background-color:#ff91001a}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):before{background-color:#ff9100;mask-image:var(--md-admonition-icon--warning)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):after{color:#ff9100}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):after{color:#ff9100}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):after{color:#ff9100}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-moz-any(.admonition,details):-moz-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :is(.admonition,details):is(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary){background-color:#ff52521a}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary){background-color:#ff52521a}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary){background-color:#ff52521a}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):before{background-color:#ff5252;mask-image:var(--md-admonition-icon--failure)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):after{color:#ff5252}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):after{color:#ff5252}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):after{color:#ff5252}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.danger,.error){border-color:#ff1744}.md-typeset :-moz-any(.admonition,details):-moz-any(.danger,.error){border-color:#ff1744}.md-typeset :is(.admonition,details):is(.danger,.error){border-color:#ff1744}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary){background-color:#ff17441a}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary){background-color:#ff17441a}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary){background-color:#ff17441a}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):before{background-color:#ff1744;mask-image:var(--md-admonition-icon--danger)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):after{color:#ff1744}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):after{color:#ff1744}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):after{color:#ff1744}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.bug){border-color:#f50057}.md-typeset :-moz-any(.admonition,details):-moz-any(.bug){border-color:#f50057}.md-typeset :is(.admonition,details):is(.bug){border-color:#f50057}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary){background-color:#f500571a}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary){background-color:#f500571a}.md-typeset :is(.bug)>:is(.admonition-title,summary){background-color:#f500571a}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):before{background-color:#f50057;mask-image:var(--md-admonition-icon--bug)}.md-typeset :is(.bug)>:is(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):after{color:#f50057}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):after{color:#f50057}.md-typeset :is(.bug)>:is(.admonition-title,summary):after{color:#f50057}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.example){border-color:#7c4dff}.md-typeset :-moz-any(.admonition,details):-moz-any(.example){border-color:#7c4dff}.md-typeset :is(.admonition,details):is(.example){border-color:#7c4dff}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary){background-color:#7c4dff1a}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary){background-color:#7c4dff1a}.md-typeset :is(.example)>:is(.admonition-title,summary){background-color:#7c4dff1a}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):before{background-color:#7c4dff;mask-image:var(--md-admonition-icon--example)}.md-typeset :is(.example)>:is(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):after{color:#7c4dff}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):after{color:#7c4dff}.md-typeset :is(.example)>:is(.admonition-title,summary):after{color:#7c4dff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :-moz-any(.admonition,details):-moz-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :is(.admonition,details):is(.quote,.cite){border-color:#9e9e9e}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary){background-color:#9e9e9e1a}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary){background-color:#9e9e9e1a}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary){background-color:#9e9e9e1a}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):before{background-color:#9e9e9e;mask-image:var(--md-admonition-icon--quote)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):after{color:#9e9e9e}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):after{color:#9e9e9e}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:-webkit-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:-moz-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:is(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :-webkit-any(:hover,:target)>.headerlink{opacity:1;-webkit-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :-moz-any(:hover,:target)>.headerlink{opacity:1;-moz-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :is(:hover,:target)>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:-webkit-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:-moz-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:is(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset :-webkit-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :-moz-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :is(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.9375em){.md-typeset div.arithmatex{margin:0 -.8rem}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto;width:-webkit-min-content;width:-moz-min-content;width:min-content}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset :-webkit-any(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset :-moz-any(del,ins,.comment).critic{box-decoration-break:clone}.md-typeset :is(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :is(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :is(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.highlight :-webkit-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :-moz-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :is(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight :-webkit-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-moz-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :is(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-webkit-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-moz-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :is(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-webkit-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-moz-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :is(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-webkit-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :is(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :-moz-any(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :is(.kc,.n){color:var(--md-code-hl-name-color)}.highlight :-webkit-any(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-moz-any(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :is(.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-webkit-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-moz-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :is(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-webkit-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :is(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-moz-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :is(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-webkit-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-moz-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :is(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-webkit-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-moz-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :is(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-webkit-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :-moz-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :is(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color);display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:-webkit-sticky;position:sticky;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable :-webkit-any(tbody,td){display:block;padding:0}.highlighttable :-moz-any(tbody,td){display:block;padding:0}.highlighttable :is(tbody,td){display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.9375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:-webkit-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:-moz-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:is(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-accent-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-accent-fg-color)}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,#0000);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,#0000);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.9375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-accent-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){background-color:var(--md-accent-fg-color--transparent)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color)}.mermaid{line-height:normal;margin:1em 0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/assets/stylesheets/main.975780f9.min.css.map b/assets/stylesheets/main.975780f9.min.css.map new file mode 100644 index 0000000000..5e13ffb9cb --- /dev/null +++ b/assets/stylesheets/main.975780f9.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/assets/stylesheets/main/extensions/pymdownx/_keys.scss","../../../src/assets/stylesheets/main.scss","src/assets/stylesheets/main/_resets.scss","src/assets/stylesheets/main/_colors.scss","src/assets/stylesheets/main/_icons.scss","src/assets/stylesheets/main/_typeset.scss","src/assets/stylesheets/utilities/_break.scss","src/assets/stylesheets/main/layout/_banner.scss","src/assets/stylesheets/main/layout/_base.scss","src/assets/stylesheets/main/layout/_clipboard.scss","src/assets/stylesheets/main/layout/_consent.scss","src/assets/stylesheets/main/layout/_content.scss","src/assets/stylesheets/main/layout/_dialog.scss","src/assets/stylesheets/main/layout/_feedback.scss","src/assets/stylesheets/main/layout/_footer.scss","src/assets/stylesheets/main/layout/_form.scss","src/assets/stylesheets/main/layout/_header.scss","src/assets/stylesheets/main/layout/_nav.scss","src/assets/stylesheets/main/layout/_search.scss","src/assets/stylesheets/main/layout/_select.scss","src/assets/stylesheets/main/layout/_sidebar.scss","src/assets/stylesheets/main/layout/_source.scss","src/assets/stylesheets/main/layout/_tabs.scss","src/assets/stylesheets/main/layout/_tag.scss","src/assets/stylesheets/main/layout/_tooltip.scss","src/assets/stylesheets/main/layout/_top.scss","src/assets/stylesheets/main/layout/_version.scss","src/assets/stylesheets/main/extensions/markdown/_admonition.scss","node_modules/material-design-color/material-color.scss","src/assets/stylesheets/main/extensions/markdown/_footnotes.scss","src/assets/stylesheets/main/extensions/markdown/_toc.scss","src/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss","src/assets/stylesheets/main/extensions/pymdownx/_critic.scss","src/assets/stylesheets/main/extensions/pymdownx/_details.scss","src/assets/stylesheets/main/extensions/pymdownx/_emoji.scss","src/assets/stylesheets/main/extensions/pymdownx/_highlight.scss","src/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss","src/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss","src/assets/stylesheets/main/integrations/_mermaid.scss","src/assets/stylesheets/main/_modifiers.scss"],"names":[],"mappings":"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0B50FI,+EACE,wBAnBG,CAoBH,0C1B00FN,C0B50FI,mEACE,wBAnBG,CAoBH,kDAAA,CAAA,0C1B00FN,C0Bt0FI,oFACE,a1Bw0FN,C0Bz0FI,8EACE,a1Bw0FN,C0Bz0FI,kEACE,a1Bw0FN,C0Bx1FE,iFACE,oB1B21FJ,C0B51FE,2EACE,oB1B21FJ,C0B51FE,+DACE,oB1B21FJ,C0Bv1FE,wFACE,0B1B01FJ,C0B31FE,kFACE,0B1B01FJ,C0B31FE,sEACE,0B1B01FJ,C0Bv1FI,+FACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1By1FN,C0B31FI,yFACE,wBAnBG,CAoBH,yC1By1FN,C0B31FI,6EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1By1FN,C0Br1FI,8FACE,a1Bu1FN,C0Bx1FI,wFACE,a1Bu1FN,C0Bx1FI,4EACE,a1Bu1FN,C0Bv2FE,iFACE,oB1B02FJ,C0B32FE,2EACE,oB1B02FJ,C0B32FE,+DACE,oB1B02FJ,C0Bt2FE,wFACE,0B1By2FJ,C0B12FE,kFACE,0B1By2FJ,C0B12FE,sEACE,0B1By2FJ,C0Bt2FI,+FACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bw2FN,C0B12FI,yFACE,wBAnBG,CAoBH,6C1Bw2FN,C0B12FI,6EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bw2FN,C0Bp2FI,8FACE,a1Bs2FN,C0Bv2FI,wFACE,a1Bs2FN,C0Bv2FI,4EACE,a1Bs2FN,C0Bt3FE,gFACE,oB1By3FJ,C0B13FE,0EACE,oB1By3FJ,C0B13FE,8DACE,oB1By3FJ,C0Br3FE,uFACE,0B1Bw3FJ,C0Bz3FE,iFACE,0B1Bw3FJ,C0Bz3FE,qEACE,0B1Bw3FJ,C0Br3FI,8FACE,wBAnBG,CAoBH,sDAAA,CAAA,8C1Bu3FN,C0Bz3FI,wFACE,wBAnBG,CAoBH,8C1Bu3FN,C0Bz3FI,4EACE,wBAnBG,CAoBH,sDAAA,CAAA,8C1Bu3FN,C0Bn3FI,6FACE,a1Bq3FN,C0Bt3FI,uFACE,a1Bq3FN,C0Bt3FI,2EACE,a1Bq3FN,C0Br4FE,wFACE,oB1Bw4FJ,C0Bz4FE,kFACE,oB1Bw4FJ,C0Bz4FE,sEACE,oB1Bw4FJ,C0Bp4FE,+FACE,0B1Bu4FJ,C0Bx4FE,yFACE,0B1Bu4FJ,C0Bx4FE,6EACE,0B1Bu4FJ,C0Bp4FI,sGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bs4FN,C0Bx4FI,gGACE,wBAnBG,CAoBH,6C1Bs4FN,C0Bx4FI,oFACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bs4FN,C0Bl4FI,qGACE,a1Bo4FN,C0Br4FI,+FACE,a1Bo4FN,C0Br4FI,mFACE,a1Bo4FN,C0Bp5FE,mFACE,oB1Bu5FJ,C0Bx5FE,6EACE,oB1Bu5FJ,C0Bx5FE,iEACE,oB1Bu5FJ,C0Bn5FE,0FACE,0B1Bs5FJ,C0Bv5FE,oFACE,0B1Bs5FJ,C0Bv5FE,wEACE,0B1Bs5FJ,C0Bn5FI,iGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bq5FN,C0Bv5FI,2FACE,wBAnBG,CAoBH,6C1Bq5FN,C0Bv5FI,+EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C1Bq5FN,C0Bj5FI,gGACE,a1Bm5FN,C0Bp5FI,0FACE,a1Bm5FN,C0Bp5FI,8EACE,a1Bm5FN,C0Bn6FE,0EACE,oB1Bs6FJ,C0Bv6FE,oEACE,oB1Bs6FJ,C0Bv6FE,wDACE,oB1Bs6FJ,C0Bl6FE,iFACE,0B1Bq6FJ,C0Bt6FE,2EACE,0B1Bq6FJ,C0Bt6FE,+DACE,0B1Bq6FJ,C0Bl6FI,wFACE,wBAnBG,CAoBH,oDAAA,CAAA,4C1Bo6FN,C0Bt6FI,kFACE,wBAnBG,CAoBH,4C1Bo6FN,C0Bt6FI,sEACE,wBAnBG,CAoBH,oDAAA,CAAA,4C1Bo6FN,C0Bh6FI,uFACE,a1Bk6FN,C0Bn6FI,iFACE,a1Bk6FN,C0Bn6FI,qEACE,a1Bk6FN,C0Bl7FE,gEACE,oB1Bq7FJ,C0Bt7FE,0DACE,oB1Bq7FJ,C0Bt7FE,8CACE,oB1Bq7FJ,C0Bj7FE,uEACE,0B1Bo7FJ,C0Br7FE,iEACE,0B1Bo7FJ,C0Br7FE,qDACE,0B1Bo7FJ,C0Bj7FI,8EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC1Bm7FN,C0Br7FI,wEACE,wBAnBG,CAoBH,yC1Bm7FN,C0Br7FI,4DACE,wBAnBG,CAoBH,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","file":"main.css"} \ No newline at end of file diff --git a/assets/stylesheets/palette.08040f6c.min.css b/assets/stylesheets/palette.08040f6c.min.css deleted file mode 100644 index 9ba9032fd8..0000000000 --- a/assets/stylesheets/palette.08040f6c.min.css +++ /dev/null @@ -1 +0,0 @@ -@media screen{[data-md-color-scheme=slate]{--md-hue:232;--md-default-fg-color:hsla(var(--md-hue),75%,95%,1);--md-default-fg-color--light:hsla(var(--md-hue),75%,90%,0.62);--md-default-fg-color--lighter:hsla(var(--md-hue),75%,90%,0.32);--md-default-fg-color--lightest:hsla(var(--md-hue),75%,90%,0.12);--md-default-bg-color:hsla(var(--md-hue),15%,21%,1);--md-default-bg-color--light:hsla(var(--md-hue),15%,21%,0.54);--md-default-bg-color--lighter:hsla(var(--md-hue),15%,21%,0.26);--md-default-bg-color--lightest:hsla(var(--md-hue),15%,21%,0.07);--md-code-fg-color:hsla(var(--md-hue),18%,86%,1);--md-code-bg-color:hsla(var(--md-hue),15%,15%,1);--md-code-hl-color:rgba(66,135,255,.15);--md-code-hl-number-color:#e6695b;--md-code-hl-special-color:#f06090;--md-code-hl-function-color:#c973d9;--md-code-hl-constant-color:#9383e2;--md-code-hl-keyword-color:#6791e0;--md-code-hl-string-color:#2fb170;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(66,135,255,.3);--md-typeset-kbd-color:hsla(var(--md-hue),15%,94%,0.12);--md-typeset-kbd-accent-color:hsla(var(--md-hue),15%,94%,0.2);--md-typeset-kbd-border-color:hsla(var(--md-hue),15%,14%,1);--md-typeset-table-color:hsla(var(--md-hue),75%,95%,0.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-bg-color:hsla(var(--md-hue),15%,12%,0.87);--md-footer-bg-color--dark:hsla(var(--md-hue),15%,10%,1);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.3),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.4),0 0 0.05rem rgba(0,0,0,.35)}[data-md-color-scheme=slate] img[src$="#gh-light-mode-only"],[data-md-color-scheme=slate] img[src$="#only-light"]{display:none}[data-md-color-scheme=slate] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=slate] img[src$="#only-dark"]{display:initial}[data-md-color-scheme=slate][data-md-color-primary=pink]{--md-typeset-a-color:#ed5487}[data-md-color-scheme=slate][data-md-color-primary=purple]{--md-typeset-a-color:#bd78c9}[data-md-color-scheme=slate][data-md-color-primary=deep-purple]{--md-typeset-a-color:#a682e3}[data-md-color-scheme=slate][data-md-color-primary=indigo]{--md-typeset-a-color:#6c91d5}[data-md-color-scheme=slate][data-md-color-primary=teal]{--md-typeset-a-color:#00ccb8}[data-md-color-scheme=slate][data-md-color-primary=green]{--md-typeset-a-color:#71c174}[data-md-color-scheme=slate][data-md-color-primary=deep-orange]{--md-typeset-a-color:#ff9575}[data-md-color-scheme=slate][data-md-color-primary=brown]{--md-typeset-a-color:#c7846b}[data-md-color-scheme=slate][data-md-color-primary=black],[data-md-color-scheme=slate][data-md-color-primary=blue-grey],[data-md-color-scheme=slate][data-md-color-primary=grey],[data-md-color-scheme=slate][data-md-color-primary=white]{--md-typeset-a-color:#6c91d5}[data-md-color-switching] *,[data-md-color-switching] :after,[data-md-color-switching] :before{transition-duration:0ms!important}}[data-md-color-accent=red]{--md-accent-fg-color:#ff1947;--md-accent-fg-color--transparent:rgba(255,25,71,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=pink]{--md-accent-fg-color:#f50056;--md-accent-fg-color--transparent:rgba(245,0,86,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=purple]{--md-accent-fg-color:#df41fb;--md-accent-fg-color--transparent:rgba(223,65,251,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=deep-purple]{--md-accent-fg-color:#7c4dff;--md-accent-fg-color--transparent:rgba(124,77,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=indigo]{--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=blue]{--md-accent-fg-color:#4287ff;--md-accent-fg-color--transparent:rgba(66,135,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-blue]{--md-accent-fg-color:#0091eb;--md-accent-fg-color--transparent:rgba(0,145,235,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=cyan]{--md-accent-fg-color:#00bad6;--md-accent-fg-color--transparent:rgba(0,186,214,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=teal]{--md-accent-fg-color:#00bda4;--md-accent-fg-color--transparent:rgba(0,189,164,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=green]{--md-accent-fg-color:#00c753;--md-accent-fg-color--transparent:rgba(0,199,83,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-green]{--md-accent-fg-color:#63de17;--md-accent-fg-color--transparent:rgba(99,222,23,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=lime]{--md-accent-fg-color:#b0eb00;--md-accent-fg-color--transparent:rgba(176,235,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=yellow]{--md-accent-fg-color:#ffd500;--md-accent-fg-color--transparent:rgba(255,213,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=amber]{--md-accent-fg-color:#fa0;--md-accent-fg-color--transparent:rgba(255,170,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=orange]{--md-accent-fg-color:#ff9100;--md-accent-fg-color--transparent:rgba(255,145,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=deep-orange]{--md-accent-fg-color:#ff6e42;--md-accent-fg-color--transparent:rgba(255,110,66,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=red]{--md-primary-fg-color:#ef5552;--md-primary-fg-color--light:#e57171;--md-primary-fg-color--dark:#e53734;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=pink]{--md-primary-fg-color:#e92063;--md-primary-fg-color--light:#ec417a;--md-primary-fg-color--dark:#c3185d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=purple]{--md-primary-fg-color:#ab47bd;--md-primary-fg-color--light:#bb69c9;--md-primary-fg-color--dark:#8c24a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=deep-purple]{--md-primary-fg-color:#7e56c2;--md-primary-fg-color--light:#9574cd;--md-primary-fg-color--dark:#673ab6;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=indigo]{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=blue]{--md-primary-fg-color:#2094f3;--md-primary-fg-color--light:#42a5f5;--md-primary-fg-color--dark:#1975d2;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-blue]{--md-primary-fg-color:#02a6f2;--md-primary-fg-color--light:#28b5f6;--md-primary-fg-color--dark:#0287cf;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=cyan]{--md-primary-fg-color:#00bdd6;--md-primary-fg-color--light:#25c5da;--md-primary-fg-color--dark:#0097a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=teal]{--md-primary-fg-color:#009485;--md-primary-fg-color--light:#26a699;--md-primary-fg-color--dark:#007a6c;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=green]{--md-primary-fg-color:#4cae4f;--md-primary-fg-color--light:#68bb6c;--md-primary-fg-color--dark:#398e3d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-green]{--md-primary-fg-color:#8bc34b;--md-primary-fg-color--light:#9ccc66;--md-primary-fg-color--dark:#689f38;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=lime]{--md-primary-fg-color:#cbdc38;--md-primary-fg-color--light:#d3e156;--md-primary-fg-color--dark:#b0b52c;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=yellow]{--md-primary-fg-color:#ffec3d;--md-primary-fg-color--light:#ffee57;--md-primary-fg-color--dark:#fbc02d;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=amber]{--md-primary-fg-color:#ffc105;--md-primary-fg-color--light:#ffc929;--md-primary-fg-color--dark:#ffa200;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=orange]{--md-primary-fg-color:#ffa724;--md-primary-fg-color--light:#ffa724;--md-primary-fg-color--dark:#fa8900;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=deep-orange]{--md-primary-fg-color:#ff6e42;--md-primary-fg-color--light:#ff8a66;--md-primary-fg-color--dark:#f4511f;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=brown]{--md-primary-fg-color:#795649;--md-primary-fg-color--light:#8d6e62;--md-primary-fg-color--dark:#5d4037;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=grey]{--md-primary-fg-color:#757575;--md-primary-fg-color--light:#9e9e9e;--md-primary-fg-color--dark:#616161;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=blue-grey]{--md-primary-fg-color:#546d78;--md-primary-fg-color--light:#607c8a;--md-primary-fg-color--dark:#455a63;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=light-green]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#72ad2e}[data-md-color-primary=lime]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#8b990a}[data-md-color-primary=yellow]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#b8a500}[data-md-color-primary=amber]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#d19d00}[data-md-color-primary=orange]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#e68a00}[data-md-color-primary=white]{--md-primary-fg-color:#fff;--md-primary-fg-color--light:hsla(0,0%,100%,.7);--md-primary-fg-color--dark:rgba(0,0,0,.07);--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54);--md-typeset-a-color:#4051b5}[data-md-color-primary=white] .md-button{color:var(--md-typeset-a-color)}[data-md-color-primary=white] .md-button--primary{background-color:var(--md-typeset-a-color);border-color:var(--md-typeset-a-color);color:#fff}@media screen and (min-width:60em){[data-md-color-primary=white] .md-search__form{background-color:rgba(0,0,0,.07)}[data-md-color-primary=white] .md-search__form:hover{background-color:rgba(0,0,0,.32)}[data-md-color-primary=white] .md-search__input+.md-search__icon{color:rgba(0,0,0,.87)}}@media screen and (min-width:76.25em){[data-md-color-primary=white] .md-tabs{border-bottom:.05rem solid rgba(0,0,0,.07)}}[data-md-color-primary=black]{--md-primary-fg-color:#000;--md-primary-fg-color--light:rgba(0,0,0,.54);--md-primary-fg-color--dark:#000;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=black] .md-button{color:var(--md-typeset-a-color)}[data-md-color-primary=black] .md-button--primary{background-color:var(--md-typeset-a-color);border-color:var(--md-typeset-a-color);color:#fff}[data-md-color-primary=black] .md-header{background-color:#000}@media screen and (max-width:59.9375em){[data-md-color-primary=black] .md-nav__source{background-color:rgba(0,0,0,.87)}}@media screen and (min-width:60em){[data-md-color-primary=black] .md-search__form{background-color:hsla(0,0%,100%,.12)}[data-md-color-primary=black] .md-search__form:hover{background-color:hsla(0,0%,100%,.3)}}@media screen and (max-width:76.1875em){html [data-md-color-primary=black] .md-nav--primary .md-nav__title[for=__drawer]{background-color:#000}}@media screen and (min-width:76.25em){[data-md-color-primary=black] .md-tabs{background-color:#000}} \ No newline at end of file diff --git a/assets/stylesheets/palette.08040f6c.min.css.map b/assets/stylesheets/palette.08040f6c.min.css.map deleted file mode 100644 index 0fd5666241..0000000000 --- a/assets/stylesheets/palette.08040f6c.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["src/assets/stylesheets/palette/_scheme.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_accent.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"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","file":"palette.css"} \ No newline at end of file diff --git a/assets/stylesheets/palette.2505c338.min.css b/assets/stylesheets/palette.2505c338.min.css new file mode 100644 index 0000000000..3c005dd683 --- /dev/null +++ b/assets/stylesheets/palette.2505c338.min.css @@ -0,0 +1 @@ +@media screen{[data-md-color-scheme=slate]{--md-hue:232;--md-default-fg-color:hsla(var(--md-hue),75%,95%,1);--md-default-fg-color--light:hsla(var(--md-hue),75%,90%,0.62);--md-default-fg-color--lighter:hsla(var(--md-hue),75%,90%,0.32);--md-default-fg-color--lightest:hsla(var(--md-hue),75%,90%,0.12);--md-default-bg-color:hsla(var(--md-hue),15%,21%,1);--md-default-bg-color--light:hsla(var(--md-hue),15%,21%,0.54);--md-default-bg-color--lighter:hsla(var(--md-hue),15%,21%,0.26);--md-default-bg-color--lightest:hsla(var(--md-hue),15%,21%,0.07);--md-code-fg-color:hsla(var(--md-hue),18%,86%,1);--md-code-bg-color:hsla(var(--md-hue),15%,15%,1);--md-code-hl-color:#4287ff26;--md-code-hl-number-color:#e6695b;--md-code-hl-special-color:#f06090;--md-code-hl-function-color:#c973d9;--md-code-hl-constant-color:#9383e2;--md-code-hl-keyword-color:#6791e0;--md-code-hl-string-color:#2fb170;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:#4287ff4d;--md-typeset-kbd-color:hsla(var(--md-hue),15%,94%,0.12);--md-typeset-kbd-accent-color:hsla(var(--md-hue),15%,94%,0.2);--md-typeset-kbd-border-color:hsla(var(--md-hue),15%,14%,1);--md-typeset-table-color:hsla(var(--md-hue),75%,95%,0.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-bg-color:hsla(var(--md-hue),15%,12%,0.87);--md-footer-bg-color--dark:hsla(var(--md-hue),15%,10%,1);--md-shadow-z1:0 0.2rem 0.5rem #0003,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000004d,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0006,0 0 0.05rem #00000059}[data-md-color-scheme=slate] img[src$="#gh-light-mode-only"],[data-md-color-scheme=slate] img[src$="#only-light"]{display:none}[data-md-color-scheme=slate] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=slate] img[src$="#only-dark"]{display:initial}[data-md-color-scheme=slate][data-md-color-primary=pink]{--md-typeset-a-color:#ed5487}[data-md-color-scheme=slate][data-md-color-primary=purple]{--md-typeset-a-color:#bd78c9}[data-md-color-scheme=slate][data-md-color-primary=deep-purple]{--md-typeset-a-color:#a682e3}[data-md-color-scheme=slate][data-md-color-primary=indigo]{--md-typeset-a-color:#6c91d5}[data-md-color-scheme=slate][data-md-color-primary=teal]{--md-typeset-a-color:#00ccb8}[data-md-color-scheme=slate][data-md-color-primary=green]{--md-typeset-a-color:#71c174}[data-md-color-scheme=slate][data-md-color-primary=deep-orange]{--md-typeset-a-color:#ff9575}[data-md-color-scheme=slate][data-md-color-primary=brown]{--md-typeset-a-color:#c7846b}[data-md-color-scheme=slate][data-md-color-primary=black],[data-md-color-scheme=slate][data-md-color-primary=blue-grey],[data-md-color-scheme=slate][data-md-color-primary=grey],[data-md-color-scheme=slate][data-md-color-primary=white]{--md-typeset-a-color:#6c91d5}[data-md-color-switching] *,[data-md-color-switching] :after,[data-md-color-switching] :before{transition-duration:0ms!important}}[data-md-color-accent=red]{--md-accent-fg-color:#ff1947;--md-accent-fg-color--transparent:#ff19471a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=pink]{--md-accent-fg-color:#f50056;--md-accent-fg-color--transparent:#f500561a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=purple]{--md-accent-fg-color:#df41fb;--md-accent-fg-color--transparent:#df41fb1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=deep-purple]{--md-accent-fg-color:#7c4dff;--md-accent-fg-color--transparent:#7c4dff1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=indigo]{--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=blue]{--md-accent-fg-color:#4287ff;--md-accent-fg-color--transparent:#4287ff1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=light-blue]{--md-accent-fg-color:#0091eb;--md-accent-fg-color--transparent:#0091eb1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=cyan]{--md-accent-fg-color:#00bad6;--md-accent-fg-color--transparent:#00bad61a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=teal]{--md-accent-fg-color:#00bda4;--md-accent-fg-color--transparent:#00bda41a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=green]{--md-accent-fg-color:#00c753;--md-accent-fg-color--transparent:#00c7531a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=light-green]{--md-accent-fg-color:#63de17;--md-accent-fg-color--transparent:#63de171a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-accent=lime]{--md-accent-fg-color:#b0eb00;--md-accent-fg-color--transparent:#b0eb001a;--md-accent-bg-color:#000000de;--md-accent-bg-color--light:#0000008a}[data-md-color-accent=yellow]{--md-accent-fg-color:#ffd500;--md-accent-fg-color--transparent:#ffd5001a;--md-accent-bg-color:#000000de;--md-accent-bg-color--light:#0000008a}[data-md-color-accent=amber]{--md-accent-fg-color:#fa0;--md-accent-fg-color--transparent:#ffaa001a;--md-accent-bg-color:#000000de;--md-accent-bg-color--light:#0000008a}[data-md-color-accent=orange]{--md-accent-fg-color:#ff9100;--md-accent-fg-color--transparent:#ff91001a;--md-accent-bg-color:#000000de;--md-accent-bg-color--light:#0000008a}[data-md-color-accent=deep-orange]{--md-accent-fg-color:#ff6e42;--md-accent-fg-color--transparent:#ff6e421a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-primary=red]{--md-primary-fg-color:#ef5552;--md-primary-fg-color--light:#e57171;--md-primary-fg-color--dark:#e53734;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=pink]{--md-primary-fg-color:#e92063;--md-primary-fg-color--light:#ec417a;--md-primary-fg-color--dark:#c3185d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=purple]{--md-primary-fg-color:#ab47bd;--md-primary-fg-color--light:#bb69c9;--md-primary-fg-color--dark:#8c24a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=deep-purple]{--md-primary-fg-color:#7e56c2;--md-primary-fg-color--light:#9574cd;--md-primary-fg-color--dark:#673ab6;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=indigo]{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=blue]{--md-primary-fg-color:#2094f3;--md-primary-fg-color--light:#42a5f5;--md-primary-fg-color--dark:#1975d2;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=light-blue]{--md-primary-fg-color:#02a6f2;--md-primary-fg-color--light:#28b5f6;--md-primary-fg-color--dark:#0287cf;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=cyan]{--md-primary-fg-color:#00bdd6;--md-primary-fg-color--light:#25c5da;--md-primary-fg-color--dark:#0097a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=teal]{--md-primary-fg-color:#009485;--md-primary-fg-color--light:#26a699;--md-primary-fg-color--dark:#007a6c;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=green]{--md-primary-fg-color:#4cae4f;--md-primary-fg-color--light:#68bb6c;--md-primary-fg-color--dark:#398e3d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=light-green]{--md-primary-fg-color:#8bc34b;--md-primary-fg-color--light:#9ccc66;--md-primary-fg-color--dark:#689f38;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=lime]{--md-primary-fg-color:#cbdc38;--md-primary-fg-color--light:#d3e156;--md-primary-fg-color--dark:#b0b52c;--md-primary-bg-color:#000000de;--md-primary-bg-color--light:#0000008a}[data-md-color-primary=yellow]{--md-primary-fg-color:#ffec3d;--md-primary-fg-color--light:#ffee57;--md-primary-fg-color--dark:#fbc02d;--md-primary-bg-color:#000000de;--md-primary-bg-color--light:#0000008a}[data-md-color-primary=amber]{--md-primary-fg-color:#ffc105;--md-primary-fg-color--light:#ffc929;--md-primary-fg-color--dark:#ffa200;--md-primary-bg-color:#000000de;--md-primary-bg-color--light:#0000008a}[data-md-color-primary=orange]{--md-primary-fg-color:#ffa724;--md-primary-fg-color--light:#ffa724;--md-primary-fg-color--dark:#fa8900;--md-primary-bg-color:#000000de;--md-primary-bg-color--light:#0000008a}[data-md-color-primary=deep-orange]{--md-primary-fg-color:#ff6e42;--md-primary-fg-color--light:#ff8a66;--md-primary-fg-color--dark:#f4511f;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=brown]{--md-primary-fg-color:#795649;--md-primary-fg-color--light:#8d6e62;--md-primary-fg-color--dark:#5d4037;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3}[data-md-color-primary=grey]{--md-primary-fg-color:#757575;--md-primary-fg-color--light:#9e9e9e;--md-primary-fg-color--dark:#616161;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-typeset-a-color:#4051b5}[data-md-color-primary=blue-grey]{--md-primary-fg-color:#546d78;--md-primary-fg-color--light:#607c8a;--md-primary-fg-color--dark:#455a63;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-typeset-a-color:#4051b5}[data-md-color-primary=light-green]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#72ad2e}[data-md-color-primary=lime]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#8b990a}[data-md-color-primary=yellow]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#b8a500}[data-md-color-primary=amber]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#d19d00}[data-md-color-primary=orange]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#e68a00}[data-md-color-primary=white]{--md-primary-fg-color:#fff;--md-primary-fg-color--light:#ffffffb3;--md-primary-fg-color--dark:#00000012;--md-primary-bg-color:#000000de;--md-primary-bg-color--light:#0000008a;--md-typeset-a-color:#4051b5}[data-md-color-primary=white] .md-button{color:var(--md-typeset-a-color)}[data-md-color-primary=white] .md-button--primary{background-color:var(--md-typeset-a-color);border-color:var(--md-typeset-a-color);color:#fff}@media screen and (min-width:60em){[data-md-color-primary=white] .md-search__form{background-color:#00000012}[data-md-color-primary=white] .md-search__form:hover{background-color:#00000052}[data-md-color-primary=white] .md-search__input+.md-search__icon{color:#000000de}}@media screen and (min-width:76.25em){[data-md-color-primary=white] .md-tabs{border-bottom:.05rem solid #00000012}}[data-md-color-primary=black]{--md-primary-fg-color:#000;--md-primary-fg-color--light:#0000008a;--md-primary-fg-color--dark:#000;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-typeset-a-color:#4051b5}[data-md-color-primary=black] .md-button{color:var(--md-typeset-a-color)}[data-md-color-primary=black] .md-button--primary{background-color:var(--md-typeset-a-color);border-color:var(--md-typeset-a-color);color:#fff}[data-md-color-primary=black] .md-header{background-color:#000}@media screen and (max-width:59.9375em){[data-md-color-primary=black] .md-nav__source{background-color:#000000de}}@media screen and (min-width:60em){[data-md-color-primary=black] .md-search__form{background-color:#ffffff1f}[data-md-color-primary=black] .md-search__form:hover{background-color:#ffffff4d}}@media screen and (max-width:76.1875em){html [data-md-color-primary=black] .md-nav--primary .md-nav__title[for=__drawer]{background-color:#000}}@media screen and (min-width:76.25em){[data-md-color-primary=black] .md-tabs{background-color:#000}} \ No newline at end of file diff --git a/assets/stylesheets/palette.2505c338.min.css.map b/assets/stylesheets/palette.2505c338.min.css.map new file mode 100644 index 0000000000..3aec190345 --- /dev/null +++ b/assets/stylesheets/palette.2505c338.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/assets/stylesheets/palette/_scheme.scss","../../../src/assets/stylesheets/palette.scss","src/assets/stylesheets/palette/_accent.scss","src/assets/stylesheets/palette/_primary.scss","src/assets/stylesheets/utilities/_break.scss"],"names":[],"mappings":"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","file":"palette.css"} \ No newline at end of file diff --git a/general/awesome-lsio/index.html b/general/awesome-lsio/index.html index 3900f5bb8a..51df0ee137 100644 --- a/general/awesome-lsio/index.html +++ b/general/awesome-lsio/index.html @@ -1 +1 @@ - Awesome LSIO - LinuxServer.io

    Awesome LSIO

    Administration

    Container Description
    doublecommander Double Commander is a free cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas.
    endlessh endlessh is an SSH tarpit that very slowly sends an endless, random SSH banner. It keeps SSH clients locked up for hours or even days at a time. The purpose is to put your real SSH server on another port and then let the script kiddies get stuck in this tarpit instead of bothering a real server.
    ldap-auth ldap-auth software is for authenticating users who request protected resources from servers proxied by nginx. It includes a daemon (ldap-auth) that communicates with an authentication server, and a webserver daemon that generates an authentication cookie based on the user’s credentials. The daemons are written in Python for use with a Lightweight Directory Access Protocol (LDAP) authentication server (OpenLDAP or Microsoft Windows Active Directory 2003 and 2012).
    netbootxyz netbootxyz is a way to PXE boot various operating system installers or utilities from one place within the BIOS without the need of having to go retrieve the media to run the tool. iPXE is used to provide a user friendly menu from within the BIOS that lets you easily choose the operating system you want along with any specific types of versions or bootable flags.
    netbox netbox is an IP address management (IPAM) and data center infrastructure management (DCIM) tool. Initially conceived by the network engineering team at DigitalOcean, NetBox was developed specifically to address the needs of network and infrastructure engineers. It is intended to function as a domain-specific source of truth for network operations.
    openssh-server openssh-server is a sandboxed environment that allows ssh access without giving keys to the entire server.
    snipe-it snipe-it makes asset management easy. It was built by people solving real-world IT and asset management problems, and a solid UX has always been a top priority. Straightforward design and bulk actions mean getting things done faster.

    Audiobooks

    Container Description
    booksonic-air booksonic-air is a platform for accessing the audiobooks you own wherever you are. At the moment the platform consists of

    Automation

    Container Description
    domoticz domoticz is a Home Automation System that lets you monitor and configure various devices like: Lights, Switches, various sensors/meters like Temperature, Rain, Wind, UV, Electra, Gas, Water and much more. Notifications/Alerts can be sent to any mobile device.
    habridge habridge emulates Philips Hue API to other home automation gateways such as an Amazon Echo/Dot Gen 1 (gen 2 has issues discovering ha-bridge) or other systems that support Philips Hue. The Bridge handles basic commands such as "On", "Off" and "brightness" commands of the hue protocol. This bridge can control most devices that have a distinct API.
    homeassistant Home Assistant Core - Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.
    kanzi kanzi, formerly titled Kodi-Alexa, this custom skill is the ultimate voice remote control for navigating Kodi. It can do anything you can think of (100+ intents). This container also contains lexigram-cli to setup Kanzi with an Amazon Developer Account and automatically deploy it to Amazon.

    Backup

    Container Description
    duplicati duplicati works with standard protocols like FTP, SSH, WebDAV as well as popular services like Microsoft OneDrive, Amazon Cloud Drive & S3, Google Drive, box.com, Mega, hubiC and many others.
    resilio-sync resilio-sync (formerly BitTorrent Sync) uses the BitTorrent protocol to sync files and folders between all of your devices. There are both free and paid versions, this container supports both. There is an official sync image but we created this one as it supports user mapping to simplify permissions for volumes.
    rsnapshot rsnapshot is a filesystem snapshot utility based on rsync. rsnapshot makes it easy to make periodic snapshots of local machines, and remote machines over ssh. The code makes extensive use of hard links whenever possible, to greatly reduce the disk space required."
    syncthing syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it's transmitted over the Internet.

    Books

    Container Description
    calibre calibre is a powerful and easy to use e-book manager. Users say it’s outstanding and a must-have. It’ll allow you to do nearly everything and it takes things a step beyond normal e-book software. It’s also completely free and open source and great for both casual users and computer experts.
    calibre-web calibre-web is a web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database. It is also possible to integrate google drive and edit metadata and your calibre library through the app itself.
    cops cops by Sébastien Lucas, stands for Calibre OPDS (and HTML) Php Server.
    lazylibrarian lazylibrarian is a program to follow authors and grab metadata for all your digital reading needs. It uses a combination of Goodreads Librarything and optionally GoogleBooks as sources for author info and book info. This container is based on the DobyTang fork.
    mylar3 mylar3 is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL.
    readarr readarr - Book Manager and Automation (Sonarr for Ebooks)
    ubooquity ubooquity is a free, lightweight and easy-to-use home server for your comics and ebooks. Use it to access your files from anywhere, with a tablet, an e-reader, a phone or a computer.

    Cloud

    Container Description
    nextcloud nextcloud gives you access to all your files wherever you are.

    Crypto

    Container Description
    gmail-order-bot gmail-order-bot - A bot used to leverage a Gmail account as an order messaging service to consume email orders from Nano Checkout and process them using any custom logic you choose.
    nano nano is a digital payment protocol designed to be accessible and lightweight, with a focus on removing inefficiencies present in other cryptocurrencies. With ultrafast transactions and zero fees on a secure, green and decentralized network, this makes Nano ideal for everyday transactions.
    nano-discord-bot nano-discord-bot - A bot used to hook into a self hosted Nano RPC endpoint and discord server to Distribute funds from a faucet account.
    nano-wallet nano-wallet is a digital payment protocol designed to be accessible and lightweight, with a focus on removing inefficiencies present in other cryptocurrencies. With ultrafast transactions and zero fees on a secure, green and decentralized network, this makes Nano ideal for everyday transactions.

    DNS

    Container Description
    adguardhome-sync adguardhome-sync is a tool to synchronize AdGuardHome config to replica instances.
    ddclient ddclient is a Perl client used to update dynamic DNS entries for accounts on Dynamic DNS Network Service Provider. It was originally written by Paul Burry and is now mostly by wimpunk. It has the capability to update more than just dyndns and it can fetch your WAN-ipaddress in a few different ways.
    duckdns duckdns is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. The service is completely free, and doesn't require reactivation or forum posts to maintain its existence.

    Dashboard

    Container Description
    heimdall heimdall is a way to organise all those links to your most used web sites and web applications in a simple way.
    muximux muximux is a lightweight portal to view & manage your HTPC apps without having to run anything more than a PHP enabled webserver. With Muximux you don't need to keep multiple tabs open, or bookmark the URL to all of your apps.

    Databases

    Container Description
    mariadb mariadb is one of the most popular database servers. Made by the original developers of MySQL.
    mysql-workbench MySQL Workbench is a unified visual tool for database architects, developers, and DBAs. MySQL Workbench provides data modeling, SQL development, and comprehensive administration tools for server configuration, user administration, backup, and much more.
    phpmyadmin phpmyadmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB.
    sqlitebrowser DB Browser for SQLite is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite.

    Docker

    Container Description
    docker-compose No description
    fleet fleet provides an online web interface which displays a set of maintained images from one or more owned repositories.

    Documents

    Container Description
    libreoffice LibreOffice is a free and powerful office suite, and a successor to OpenOffice.org (commonly known as OpenOffice). Its clean interface and feature-rich tools help you unleash your creativity and enhance your productivity.
    paperless-ng paperless-ng is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents."
    paperless-ngx paperless-ngx is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents."
    papermerge papermerge is an open source document management system (DMS) primarily designed for archiving and retrieving your digital documents. Instead of having piles of paper documents all over your desk, office or drawers - you can quickly scan them and configure your scanner to directly upload to Papermerge DMS."

    Downloaders

    Container Description
    deluge deluge is a lightweight, Free Software, cross-platform BitTorrent client.
    nntp2nntp nntp2nntp proxy allow you to use your NNTP Account from multiple systems, each with own user name and password. It fully supports SSL and you can also limit the access to proxy with SSL certificates. nntp2nntp proxy is very simple and pretty fast.
    nzbget nzbget is a usenet downloader, written in C++ and designed with performance in mind to achieve maximum download speed by using very little system resources.
    pyload-ng pyLoad is a Free and Open Source download manager written in Python and designed to be extremely lightweight, easily extensible and fully manageable via web.
    qbittorrent The qbittorrent project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.
    sabnzbd sabnzbd makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction.
    transmission transmission is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, µTP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.

    FTP

    Container Description
    davos davos is an FTP automation tool that periodically scans given host locations for new files. It can be configured for various purposes, including listening for specific files to appear in the host location, ready for it to download and then move, if required. It also supports completion notifications as well as downstream API calls, to further the workflow.
    filezilla FIleZilla Client is a fast and reliable cross-platform FTP, FTPS and SFTP client with lots of useful features and an intuitive graphical user interface.

    Family

    Container Description
    babybuddy babybuddy is a buddy for babies! Helps caregivers track sleep, feedings, diaper changes, tummy time and more to learn about and predict baby's needs without (as much) guess work.

    File Sharing

    Container Description
    projectsend projectsend is a self-hosted application that lets you upload files and assign them to specific clients that you create yourself. Secure, private and easy. No more depending on external services or e-mail to send those files.
    pwndrop pwndrop is a self-deployable file hosting service for sending out red teaming payloads or securely sharing your private files over HTTP and WebDAV.
    pydio-cells pydio-cells is the nextgen file sharing platform for organizations. It is a full rewrite of the Pydio project using the Go language following a micro-service architecture.
    snapdrop snapdrop A local file sharing in your browser. Inspired by Apple's Airdrop.
    xbackbone xbackbone is a simple, self-hosted, lightweight PHP file manager that support the instant sharing tool ShareX and *NIX systems. It supports uploading and displaying images, GIF, video, code, formatted text, and file downloading and uploading. Also have a web UI with multi user management, past uploads history and search support.

    Finance

    Container Description
    budge budge is an open source 'budgeting with envelopes' personal finance app.

    Games

    Container Description
    emulatorjs emulatorjs - In browser web based emulation portable to nearly any device for many retro consoles. A mix of emulators is used between Libretro and EmulatorJS.
    minetest minetest (server) is a near-infinite-world block sandbox game and a game engine, inspired by InfiniMiner, Minecraft, and the like.

    Graphics

    Container Description
    blender Blender is a free and open-source 3D computer graphics software toolset used for creating animated films, visual effects, art, 3D printed models, motion graphics, interactive 3D applications, virtual reality, and computer games. This image does not support GPU rendering out of the box only accelerated workspace experience
    kdenlive Kdenlive is a powerful free and open source cross-platform video editing program made by the KDE community. Feature rich and production ready.

    IRC

    Container Description
    limnoria limnoria A robust, full-featured, and user/programmer-friendly Python IRC bot, with many existing plugins. Successor of the well-known Supybot.
    ngircd ngircd is a free, portable and lightweight Internet Relay Chat server for small or private networks, developed under the GNU General Public License (GPL). It is easy to configure, can cope with dynamic IP addresses, and supports IPv6, SSL-protected connections as well as PAM for authentication. It is written from scratch and not based on the original IRCd.
    pidgin Pidgin is a chat program which lets you log into accounts on multiple chat networks simultaneously. This means that you can be chatting with friends on XMPP and sitting in an IRC channel at the same time.
    quassel-core quassel-core is a modern, cross-platform, distributed IRC client, meaning that one (or multiple) client(s) can attach to and detach from a central core.
    quassel-web quassel-web is a web client for Quassel. Note that a Quassel-Core instance is required, we have a container available here.
    thelounge thelounge (a fork of shoutIRC) is a web IRC client that you host on your own server.
    znc znc is an IRC network bouncer or BNC. It can detach the client from the actual IRC server, and also from selected channels. Multiple clients from different locations can connect to a single ZNC account simultaneously and therefore appear under the same nickname on IRC.

    Indexers

    Container Description
    jackett jackett works as a proxy server: it translates queries from apps (Sonarr, SickRage, CouchPotato, Mylar, etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
    nzbhydra2 nzbhydra2 is a meta search application for NZB indexers, the "spiritual successor" to NZBmegasearcH, and an evolution of the original application NZBHydra.
    prowlarr prowlarr is a indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with your various PVR apps. Prowlarr supports both Torrent Trackers and Usenet Indexers. It integrates seamlessly with Sonarr, Radarr, Lidarr, and Readarr offering complete management of your indexers with no per app Indexer setup required (we do it all).

    Media Management

    Container Description
    bazarr bazarr is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.
    medusa medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.
    plex-meta-manager plex-meta-manager is a Python 3 script that can be continuously run using YAML configuration files to update on a schedule the metadata of the movies, shows, and collections in your libraries as well as automatically build collections based on various methods all detailed in the wiki.
    radarr radarr - A fork of Sonarr to work with movies à la Couchpotato.
    sickchill sickchill is an Automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.
    sickgear SickGear provides management of TV shows and/or Anime, it detects new episodes, links downloader apps, and more..
    sonarr sonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.

    Media Players

    Container Description
    emby emby organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.
    jellyfin jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.
    plex plex organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone Plex Media Server. has always been a top priority. Straightforward design and bulk actions mean getting things done faster.

    Media Requesters

    Container Description
    doplarr doplarr is an *arr request bot for Discord."
    ombi ombi allows you to host your own Plex Request and user management system.
    overseerr overseerr is a request management and media discovery tool built to work with your existing Plex ecosystem.

    Media Tools

    Container Description
    embystat embystat is a personal web server that can calculate all kinds of statistics from your (local) Emby server. Just install this on your server and let him calculate all kinds of fun stuff.
    ffmpeg No description
    htpcmanager htpcmanager is a front end for many htpc related applications.
    minisatip minisatip is a multi-threaded satip server version 1.2 that runs under Linux and it was tested with DVB-S, DVB-S2, DVB-T, DVB-T2, DVB-C, DVB-C2, ATSC and ISDB-T cards.
    oscam oscam is an Open Source Conditional Access Module software used for descrambling DVB transmissions using smart cards. It's both a server and a client.
    synclounge synclounge is a third party tool that allows you to watch Plex in sync with your friends/family, wherever you are.
    tautulli tautulli is a python based web application for monitoring, analytics and notifications for Plex Media Server.
    tvheadend tvheadend works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun as input sources.
    webgrabplus webgrabplus is a multi-site incremental xmltv epg grabber. It collects tv-program guide data from selected tvguide sites for your favourite channels.

    Monitor

    Container Description
    apprise-api apprise-api Takes advantage of Apprise through your network with a user-friendly API.
    healthchecks healthchecks is a watchdog for your cron jobs. It's a web server that listens for pings from your cron jobs, plus a web interface.
    librespeed librespeed is a very lightweight Speedtest implemented in Javascript, using XMLHttpRequest and Web Workers.
    smokeping smokeping keeps track of your network latency. For a full example of what this application is capable of visit UCDavis.
    syslog-ng syslog-ng allows you to flexibly collect, parse, classify, rewrite and correlate logs from across your infrastructure and store or route them to log analysis tools.

    Music

    Container Description
    airsonic-advanced airsonic-advanced is a free, web-based media streamer, providing ubiquitious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.
    audacity Audacity is an easy-to-use, multi-track audio editor and recorder. Developed by a group of volunteers as open source.
    beets beets is a music library manager and not, for the most part, a music player. It does include a simple player plugin and an experimental Web-based player, but it generally leaves actual sound-reproduction to specialized tools.
    daapd daapd (iTunes) media server with support for AirPlay devices, Apple Remote (and compatibles), Chromecast, MPD and internet radio.
    headphones headphones is an automated music downloader for NZB and Torrent, written in Python. It supports SABnzbd, NZBget, Transmission, µTorrent and Blackhole.
    lidarr lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
    mstream mstream is a personal music streaming server. You can use mStream to stream your music from your home computer to any device, anywhere. There are mobile apps available for both Android and iPhone.

    Network

    Container Description
    unifi-controller The unifi-controller software is a powerful, enterprise wireless software engine ideal for high-density client deployments requiring low latency and high uptime performance.
    wireshark Wireshark is the world’s foremost and widely-used network protocol analyzer. It lets you see what’s happening on your network at a microscopic level and is the de facto (and often de jure) standard across many commercial and non-profit enterprises, government agencies, and educational institutions. Wireshark development thrives thanks to the volunteer contributions of networking experts around the globe and is the continuation of a project started by Gerald Combs in 1998.

    Photos

    Container Description
    chevereto chevereto is an image hosting software that allows you to create a beautiful and full-featured image hosting website on your own server. It's your hosting and your rules, so say goodbye to closures and restrictions.
    darktable darktable is an open source photography workflow application and raw developer. A virtual lighttable and darkroom for photographers. It manages your digital negatives in a database, lets you view them through a zoomable lighttable and enables you to develop raw images and enhance them.
    digikam digiKam: Professional Photo Management with the Power of Open Source
    lychee lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely."
    photoshow photoshow is gallery software at its easiest, it doesn't even require a database.
    piwigo piwigo is a photo gallery software for the web that comes with powerful features to publish and manage your collection of pictures.
    pixapop pixapop is an open-source single page application to view your photos in the easiest way possible.

    Programming

    Container Description
    cloud9 cloud9 Cloud9 is a complete web based IDE with terminal access. This container is for running their core SDK locally and developing plugins.
    code-server code-server is VS Code running on a remote server, accessible through the browser.
    openvscode-server openvscode-server provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser.
    pylon pylon is a web based integrated development environment built with Node.js as a backend and with a supercharged JavaScript/HTML5 frontend, licensed under GPL version 3. This project originates from Cloud9 v2 project.

    RSS

    Container Description
    freshrss freshrss is a free, self-hostable aggregator for rss feeds.

    Recipes

    Container Description
    grocy grocy is an ERP system for your kitchen! Cut down on food waste, and manage your chores with this brilliant utility.

    Remote

    Container Description
    guacd guacd - Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH. This container is only the backend server component needed to use The official or 3rd party HTML5 frontends.
    rdesktop rdesktop - Containers containing full desktop environments in many popular flavors for Alpine, Ubuntu, Arch, and Fedora accessible via RDP.
    remmina Remmina is a remote desktop client written in GTK, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large or tiny screens. Remmina supports multiple network protocols, in an integrated and consistent user interface. Currently RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC are supported.
    webtop webtop - Alpine, Ubuntu, Fedora, and Arch based containers containing full desktop environments in officially supported flavors accessible via any modern web browser.

    Science

    Container Description
    boinc BOINC is a platform for high-throughput computing on a large scale (thousands or millions of computers). It can be used for volunteer computing (using consumer devices) or grid computing (using organizational resources). It supports virtualized, parallel, and GPU-based applications.
    foldingathome Folding@home is a distributed computing project for simulating protein dynamics, including the process of protein folding and the movements of proteins implicated in a variety of diseases. It brings together citizen scientists who volunteer to run simulations of protein dynamics on their personal computers. Insights from this data are helping scientists to better understand biology, and providing new opportunities for developing therapeutics.

    Storage

    Container Description
    diskover diskover is an open source file system indexer that uses Elasticsearch to index and manage data across heterogeneous storage systems.
    qdirstat QDirStat Qt-based directory statistics: KDirStat without any KDE -- from the author of the original KDirStat.
    scrutiny scrutiny WebUI for smartd S.M.A.R.T monitoring. Scrutiny is a Hard Drive Health Dashboard & Monitoring solution, merging manufacturer provided S.M.A.R.T metrics with real-world failure rates from Backblaze.

    Tools

    Container Description
    yq No description

    VPN

    Container Description
    wireguard WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. It is currently under heavy development, but already it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry.

    Web

    Container Description
    firefox Firefox Browser, also known as Mozilla Firefox or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. Firefox uses the Gecko layout engine to render web pages, which implements current and anticipated web standards.
    grav grav is a Fast, Simple, and Flexible, file-based Web-platform.
    nginx nginx is a simple webserver with php support. The config files reside in /config for easy user customization.
    swag SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention.

    Wiki

    Container Description
    bookstack bookstack is a free and open source Wiki designed for creating beautiful documentation. Featuring a simple, but powerful WYSIWYG editor it allows for teams to create detailed and useful documentation with ease.
    dillinger dillinger is a cloud-enabled, mobile-ready, offline-storage, AngularJS powered HTML5 Markdown editor.
    dokuwiki dokuwiki is a simple to use and highly versatile Open Source wiki software that doesn't require a database. It is loved by users for its clean and readable syntax. The ease of maintenance, backup and integration makes it an administrator's favorite. Built in access controls and authentication connectors make DokuWiki especially useful in the enterprise context and the large number of plugins contributed by its vibrant community allow for a broad range of use cases beyond a traditional wiki.
    hedgedoc HedgeDoc gives you access to all your files wherever you are.
    raneto raneto - is an open source Knowledgebase platform that uses static Markdown files to power your Knowledgebase.
    wikijs wikijs A modern, lightweight and powerful wiki app built on NodeJS.
    \ No newline at end of file + Awesome LSIO - LinuxServer.io

    Awesome LSIO

    Administration

    Container Description
    doublecommander Double Commander is a free cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas.
    endlessh endlessh is an SSH tarpit that very slowly sends an endless, random SSH banner. It keeps SSH clients locked up for hours or even days at a time. The purpose is to put your real SSH server on another port and then let the script kiddies get stuck in this tarpit instead of bothering a real server.
    ldap-auth ldap-auth software is for authenticating users who request protected resources from servers proxied by nginx. It includes a daemon (ldap-auth) that communicates with an authentication server, and a webserver daemon that generates an authentication cookie based on the user’s credentials. The daemons are written in Python for use with a Lightweight Directory Access Protocol (LDAP) authentication server (OpenLDAP or Microsoft Windows Active Directory 2003 and 2012).
    netbootxyz netbootxyz is a way to PXE boot various operating system installers or utilities from one place within the BIOS without the need of having to go retrieve the media to run the tool. iPXE is used to provide a user friendly menu from within the BIOS that lets you easily choose the operating system you want along with any specific types of versions or bootable flags.
    netbox netbox is an IP address management (IPAM) and data center infrastructure management (DCIM) tool. Initially conceived by the network engineering team at DigitalOcean, NetBox was developed specifically to address the needs of network and infrastructure engineers. It is intended to function as a domain-specific source of truth for network operations.
    openssh-server openssh-server is a sandboxed environment that allows ssh access without giving keys to the entire server.
    snipe-it snipe-it makes asset management easy. It was built by people solving real-world IT and asset management problems, and a solid UX has always been a top priority. Straightforward design and bulk actions mean getting things done faster.

    Audiobooks

    Container Description
    booksonic-air booksonic-air is a platform for accessing the audiobooks you own wherever you are. At the moment the platform consists of

    Automation

    Container Description
    domoticz domoticz is a Home Automation System that lets you monitor and configure various devices like: Lights, Switches, various sensors/meters like Temperature, Rain, Wind, UV, Electra, Gas, Water and much more. Notifications/Alerts can be sent to any mobile device.
    habridge habridge emulates Philips Hue API to other home automation gateways such as an Amazon Echo/Dot Gen 1 (gen 2 has issues discovering ha-bridge) or other systems that support Philips Hue. The Bridge handles basic commands such as "On", "Off" and "brightness" commands of the hue protocol. This bridge can control most devices that have a distinct API.
    homeassistant Home Assistant Core - Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.
    kanzi kanzi, formerly titled Kodi-Alexa, this custom skill is the ultimate voice remote control for navigating Kodi. It can do anything you can think of (100+ intents). This container also contains lexigram-cli to setup Kanzi with an Amazon Developer Account and automatically deploy it to Amazon.

    Backup

    Container Description
    duplicati duplicati works with standard protocols like FTP, SSH, WebDAV as well as popular services like Microsoft OneDrive, Amazon Cloud Drive & S3, Google Drive, box.com, Mega, hubiC and many others.
    resilio-sync resilio-sync (formerly BitTorrent Sync) uses the BitTorrent protocol to sync files and folders between all of your devices. There are both free and paid versions, this container supports both. There is an official sync image but we created this one as it supports user mapping to simplify permissions for volumes.
    rsnapshot rsnapshot is a filesystem snapshot utility based on rsync. rsnapshot makes it easy to make periodic snapshots of local machines, and remote machines over ssh. The code makes extensive use of hard links whenever possible, to greatly reduce the disk space required."
    syncthing syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it's transmitted over the Internet.

    Books

    Container Description
    calibre calibre is a powerful and easy to use e-book manager. Users say it’s outstanding and a must-have. It’ll allow you to do nearly everything and it takes things a step beyond normal e-book software. It’s also completely free and open source and great for both casual users and computer experts.
    calibre-web calibre-web is a web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database. It is also possible to integrate google drive and edit metadata and your calibre library through the app itself.
    cops cops by Sébastien Lucas, stands for Calibre OPDS (and HTML) Php Server.
    lazylibrarian lazylibrarian is a program to follow authors and grab metadata for all your digital reading needs. It uses a combination of Goodreads Librarything and optionally GoogleBooks as sources for author info and book info. This container is based on the DobyTang fork.
    mylar3 mylar3 is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL.
    readarr readarr - Book Manager and Automation (Sonarr for Ebooks)
    ubooquity ubooquity is a free, lightweight and easy-to-use home server for your comics and ebooks. Use it to access your files from anywhere, with a tablet, an e-reader, a phone or a computer.

    Cloud

    Container Description
    nextcloud nextcloud gives you access to all your files wherever you are.

    Crypto

    Container Description
    gmail-order-bot gmail-order-bot - A bot used to leverage a Gmail account as an order messaging service to consume email orders from Nano Checkout and process them using any custom logic you choose.
    nano nano is a digital payment protocol designed to be accessible and lightweight, with a focus on removing inefficiencies present in other cryptocurrencies. With ultrafast transactions and zero fees on a secure, green and decentralized network, this makes Nano ideal for everyday transactions.
    nano-discord-bot nano-discord-bot - A bot used to hook into a self hosted Nano RPC endpoint and discord server to Distribute funds from a faucet account.
    nano-wallet nano-wallet is a digital payment protocol designed to be accessible and lightweight, with a focus on removing inefficiencies present in other cryptocurrencies. With ultrafast transactions and zero fees on a secure, green and decentralized network, this makes Nano ideal for everyday transactions.

    DNS

    Container Description
    adguardhome-sync adguardhome-sync is a tool to synchronize AdGuardHome config to replica instances.
    ddclient ddclient is a Perl client used to update dynamic DNS entries for accounts on Dynamic DNS Network Service Provider. It was originally written by Paul Burry and is now mostly by wimpunk. It has the capability to update more than just dyndns and it can fetch your WAN-ipaddress in a few different ways.
    duckdns duckdns is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. The service is completely free, and doesn't require reactivation or forum posts to maintain its existence.

    Dashboard

    Container Description
    heimdall heimdall is a way to organise all those links to your most used web sites and web applications in a simple way.
    muximux muximux is a lightweight portal to view & manage your HTPC apps without having to run anything more than a PHP enabled webserver. With Muximux you don't need to keep multiple tabs open, or bookmark the URL to all of your apps.

    Databases

    Container Description
    mariadb mariadb is one of the most popular database servers. Made by the original developers of MySQL.
    mysql-workbench MySQL Workbench is a unified visual tool for database architects, developers, and DBAs. MySQL Workbench provides data modeling, SQL development, and comprehensive administration tools for server configuration, user administration, backup, and much more.
    phpmyadmin phpmyadmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB.
    sqlitebrowser DB Browser for SQLite is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite.

    Docker

    Container Description
    docker-compose No description
    fleet fleet provides an online web interface which displays a set of maintained images from one or more owned repositories.

    Documents

    Container Description
    libreoffice LibreOffice is a free and powerful office suite, and a successor to OpenOffice.org (commonly known as OpenOffice). Its clean interface and feature-rich tools help you unleash your creativity and enhance your productivity.
    paperless-ng paperless-ng is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents."
    paperless-ngx paperless-ngx is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents."
    papermerge papermerge is an open source document management system (DMS) primarily designed for archiving and retrieving your digital documents. Instead of having piles of paper documents all over your desk, office or drawers - you can quickly scan them and configure your scanner to directly upload to Papermerge DMS."

    Downloaders

    Container Description
    deluge deluge is a lightweight, Free Software, cross-platform BitTorrent client.
    nntp2nntp nntp2nntp proxy allow you to use your NNTP Account from multiple systems, each with own user name and password. It fully supports SSL and you can also limit the access to proxy with SSL certificates. nntp2nntp proxy is very simple and pretty fast.
    nzbget nzbget is a usenet downloader, written in C++ and designed with performance in mind to achieve maximum download speed by using very little system resources.
    pyload-ng pyLoad is a Free and Open Source download manager written in Python and designed to be extremely lightweight, easily extensible and fully manageable via web.
    qbittorrent The qbittorrent project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.
    sabnzbd sabnzbd makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction.
    transmission transmission is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, µTP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.

    FTP

    Container Description
    davos davos is an FTP automation tool that periodically scans given host locations for new files. It can be configured for various purposes, including listening for specific files to appear in the host location, ready for it to download and then move, if required. It also supports completion notifications as well as downstream API calls, to further the workflow.
    filezilla FIleZilla Client is a fast and reliable cross-platform FTP, FTPS and SFTP client with lots of useful features and an intuitive graphical user interface.

    Family

    Container Description
    babybuddy babybuddy is a buddy for babies! Helps caregivers track sleep, feedings, diaper changes, tummy time and more to learn about and predict baby's needs without (as much) guess work.

    File Sharing

    Container Description
    projectsend projectsend is a self-hosted application that lets you upload files and assign them to specific clients that you create yourself. Secure, private and easy. No more depending on external services or e-mail to send those files.
    pwndrop pwndrop is a self-deployable file hosting service for sending out red teaming payloads or securely sharing your private files over HTTP and WebDAV.
    pydio-cells pydio-cells is the nextgen file sharing platform for organizations. It is a full rewrite of the Pydio project using the Go language following a micro-service architecture.
    snapdrop snapdrop A local file sharing in your browser. Inspired by Apple's Airdrop.
    xbackbone xbackbone is a simple, self-hosted, lightweight PHP file manager that support the instant sharing tool ShareX and *NIX systems. It supports uploading and displaying images, GIF, video, code, formatted text, and file downloading and uploading. Also have a web UI with multi user management, past uploads history and search support.

    Finance

    Container Description
    budge budge is an open source 'budgeting with envelopes' personal finance app.

    Games

    Container Description
    emulatorjs emulatorjs - In browser web based emulation portable to nearly any device for many retro consoles. A mix of emulators is used between Libretro and EmulatorJS.
    minetest minetest (server) is a near-infinite-world block sandbox game and a game engine, inspired by InfiniMiner, Minecraft, and the like.

    Graphics

    Container Description
    blender Blender is a free and open-source 3D computer graphics software toolset used for creating animated films, visual effects, art, 3D printed models, motion graphics, interactive 3D applications, virtual reality, and computer games. This image does not support GPU rendering out of the box only accelerated workspace experience
    kdenlive Kdenlive is a powerful free and open source cross-platform video editing program made by the KDE community. Feature rich and production ready.

    IRC

    Container Description
    limnoria limnoria A robust, full-featured, and user/programmer-friendly Python IRC bot, with many existing plugins. Successor of the well-known Supybot.
    ngircd ngircd is a free, portable and lightweight Internet Relay Chat server for small or private networks, developed under the GNU General Public License (GPL). It is easy to configure, can cope with dynamic IP addresses, and supports IPv6, SSL-protected connections as well as PAM for authentication. It is written from scratch and not based on the original IRCd.
    pidgin Pidgin is a chat program which lets you log into accounts on multiple chat networks simultaneously. This means that you can be chatting with friends on XMPP and sitting in an IRC channel at the same time.
    quassel-core quassel-core is a modern, cross-platform, distributed IRC client, meaning that one (or multiple) client(s) can attach to and detach from a central core.
    quassel-web quassel-web is a web client for Quassel. Note that a Quassel-Core instance is required, we have a container available here.
    thelounge thelounge (a fork of shoutIRC) is a web IRC client that you host on your own server.
    znc znc is an IRC network bouncer or BNC. It can detach the client from the actual IRC server, and also from selected channels. Multiple clients from different locations can connect to a single ZNC account simultaneously and therefore appear under the same nickname on IRC.

    Indexers

    Container Description
    jackett jackett works as a proxy server: it translates queries from apps (Sonarr, SickRage, CouchPotato, Mylar, etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
    nzbhydra2 nzbhydra2 is a meta search application for NZB indexers, the "spiritual successor" to NZBmegasearcH, and an evolution of the original application NZBHydra.
    prowlarr prowlarr is a indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with your various PVR apps. Prowlarr supports both Torrent Trackers and Usenet Indexers. It integrates seamlessly with Sonarr, Radarr, Lidarr, and Readarr offering complete management of your indexers with no per app Indexer setup required (we do it all).

    Media Management

    Container Description
    bazarr bazarr is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.
    medusa medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.
    plex-meta-manager plex-meta-manager is a Python 3 script that can be continuously run using YAML configuration files to update on a schedule the metadata of the movies, shows, and collections in your libraries as well as automatically build collections based on various methods all detailed in the wiki.
    radarr radarr - A fork of Sonarr to work with movies à la Couchpotato.
    sickchill sickchill is an Automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.
    sickgear SickGear provides management of TV shows and/or Anime, it detects new episodes, links downloader apps, and more..
    sonarr sonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.

    Media Players

    Container Description
    emby emby organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.
    jellyfin jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.
    plex plex organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone Plex Media Server. has always been a top priority. Straightforward design and bulk actions mean getting things done faster.

    Media Requesters

    Container Description
    doplarr doplarr is an *arr request bot for Discord."
    ombi ombi allows you to host your own Plex Request and user management system.
    overseerr overseerr is a request management and media discovery tool built to work with your existing Plex ecosystem.

    Media Tools

    Container Description
    embystat embystat is a personal web server that can calculate all kinds of statistics from your (local) Emby server. Just install this on your server and let him calculate all kinds of fun stuff.
    ffmpeg No description
    htpcmanager htpcmanager is a front end for many htpc related applications.
    minisatip minisatip is a multi-threaded satip server version 1.2 that runs under Linux and it was tested with DVB-S, DVB-S2, DVB-T, DVB-T2, DVB-C, DVB-C2, ATSC and ISDB-T cards.
    oscam oscam is an Open Source Conditional Access Module software used for descrambling DVB transmissions using smart cards. It's both a server and a client.
    synclounge synclounge is a third party tool that allows you to watch Plex in sync with your friends/family, wherever you are.
    tautulli tautulli is a python based web application for monitoring, analytics and notifications for Plex Media Server.
    tvheadend tvheadend works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun as input sources.
    webgrabplus webgrabplus is a multi-site incremental xmltv epg grabber. It collects tv-program guide data from selected tvguide sites for your favourite channels.

    Monitor

    Container Description
    apprise-api apprise-api Takes advantage of Apprise through your network with a user-friendly API.
    healthchecks healthchecks is a watchdog for your cron jobs. It's a web server that listens for pings from your cron jobs, plus a web interface.
    librespeed librespeed is a very lightweight Speedtest implemented in Javascript, using XMLHttpRequest and Web Workers.
    smokeping smokeping keeps track of your network latency. For a full example of what this application is capable of visit UCDavis.
    syslog-ng syslog-ng allows you to flexibly collect, parse, classify, rewrite and correlate logs from across your infrastructure and store or route them to log analysis tools.

    Music

    Container Description
    airsonic-advanced airsonic-advanced is a free, web-based media streamer, providing ubiquitious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.
    audacity Audacity is an easy-to-use, multi-track audio editor and recorder. Developed by a group of volunteers as open source.
    beets beets is a music library manager and not, for the most part, a music player. It does include a simple player plugin and an experimental Web-based player, but it generally leaves actual sound-reproduction to specialized tools.
    daapd daapd (iTunes) media server with support for AirPlay devices, Apple Remote (and compatibles), Chromecast, MPD and internet radio.
    headphones headphones is an automated music downloader for NZB and Torrent, written in Python. It supports SABnzbd, NZBget, Transmission, µTorrent and Blackhole.
    lidarr lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
    mstream mstream is a personal music streaming server. You can use mStream to stream your music from your home computer to any device, anywhere. There are mobile apps available for both Android and iPhone.

    Network

    Container Description
    unifi-controller The unifi-controller software is a powerful, enterprise wireless software engine ideal for high-density client deployments requiring low latency and high uptime performance.
    wireshark Wireshark is the world’s foremost and widely-used network protocol analyzer. It lets you see what’s happening on your network at a microscopic level and is the de facto (and often de jure) standard across many commercial and non-profit enterprises, government agencies, and educational institutions. Wireshark development thrives thanks to the volunteer contributions of networking experts around the globe and is the continuation of a project started by Gerald Combs in 1998.

    Photos

    Container Description
    chevereto chevereto is an image hosting software that allows you to create a beautiful and full-featured image hosting website on your own server. It's your hosting and your rules, so say goodbye to closures and restrictions.
    darktable darktable is an open source photography workflow application and raw developer. A virtual lighttable and darkroom for photographers. It manages your digital negatives in a database, lets you view them through a zoomable lighttable and enables you to develop raw images and enhance them.
    digikam digiKam: Professional Photo Management with the Power of Open Source
    lychee lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely."
    photoshow photoshow is gallery software at its easiest, it doesn't even require a database.
    piwigo piwigo is a photo gallery software for the web that comes with powerful features to publish and manage your collection of pictures.
    pixapop pixapop is an open-source single page application to view your photos in the easiest way possible.

    Programming

    Container Description
    cloud9 cloud9 Cloud9 is a complete web based IDE with terminal access. This container is for running their core SDK locally and developing plugins.
    code-server code-server is VS Code running on a remote server, accessible through the browser.
    openvscode-server openvscode-server provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser.
    pylon pylon is a web based integrated development environment built with Node.js as a backend and with a supercharged JavaScript/HTML5 frontend, licensed under GPL version 3. This project originates from Cloud9 v2 project.

    RSS

    Container Description
    freshrss freshrss is a free, self-hostable aggregator for rss feeds.

    Recipes

    Container Description
    grocy grocy is an ERP system for your kitchen! Cut down on food waste, and manage your chores with this brilliant utility.

    Remote

    Container Description
    guacd guacd - Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH. This container is only the backend server component needed to use The official or 3rd party HTML5 frontends.
    rdesktop rdesktop - Containers containing full desktop environments in many popular flavors for Alpine, Ubuntu, Arch, and Fedora accessible via RDP.
    remmina Remmina is a remote desktop client written in GTK, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large or tiny screens. Remmina supports multiple network protocols, in an integrated and consistent user interface. Currently RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC are supported.
    webtop webtop - Alpine, Ubuntu, Fedora, and Arch based containers containing full desktop environments in officially supported flavors accessible via any modern web browser.

    Science

    Container Description
    boinc BOINC is a platform for high-throughput computing on a large scale (thousands or millions of computers). It can be used for volunteer computing (using consumer devices) or grid computing (using organizational resources). It supports virtualized, parallel, and GPU-based applications.
    foldingathome Folding@home is a distributed computing project for simulating protein dynamics, including the process of protein folding and the movements of proteins implicated in a variety of diseases. It brings together citizen scientists who volunteer to run simulations of protein dynamics on their personal computers. Insights from this data are helping scientists to better understand biology, and providing new opportunities for developing therapeutics.

    Storage

    Container Description
    diskover diskover is an open source file system indexer that uses Elasticsearch to index and manage data across heterogeneous storage systems.
    qdirstat QDirStat Qt-based directory statistics: KDirStat without any KDE -- from the author of the original KDirStat.
    scrutiny scrutiny WebUI for smartd S.M.A.R.T monitoring. Scrutiny is a Hard Drive Health Dashboard & Monitoring solution, merging manufacturer provided S.M.A.R.T metrics with real-world failure rates from Backblaze.

    Tools

    Container Description
    yq No description

    VPN

    Container Description
    wireguard WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. It is currently under heavy development, but already it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry.

    Web

    Container Description
    firefox Firefox Browser, also known as Mozilla Firefox or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. Firefox uses the Gecko layout engine to render web pages, which implements current and anticipated web standards.
    grav grav is a Fast, Simple, and Flexible, file-based Web-platform.
    nginx nginx is a simple webserver with php support. The config files reside in /config for easy user customization.
    swag SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention.

    Wiki

    Container Description
    bookstack bookstack is a free and open source Wiki designed for creating beautiful documentation. Featuring a simple, but powerful WYSIWYG editor it allows for teams to create detailed and useful documentation with ease.
    dillinger dillinger is a cloud-enabled, mobile-ready, offline-storage, AngularJS powered HTML5 Markdown editor.
    dokuwiki dokuwiki is a simple to use and highly versatile Open Source wiki software that doesn't require a database. It is loved by users for its clean and readable syntax. The ease of maintenance, backup and integration makes it an administrator's favorite. Built in access controls and authentication connectors make DokuWiki especially useful in the enterprise context and the large number of plugins contributed by its vibrant community allow for a broad range of use cases beyond a traditional wiki.
    hedgedoc HedgeDoc gives you access to all your files wherever you are.
    raneto raneto - is an open source Knowledgebase platform that uses static Markdown files to power your Knowledgebase.
    wikijs wikijs A modern, lightweight and powerful wiki app built on NodeJS.
    \ No newline at end of file diff --git a/general/container-customization/index.html b/general/container-customization/index.html index 1d973c8e93..f69f71b82d 100644 --- a/general/container-customization/index.html +++ b/general/container-customization/index.html @@ -1,4 +1,4 @@ - Customizing LinuxServer Containers - LinuxServer.io

    Customizing LinuxServer Containers

    One of the challenges we face as an organization is making everyone happy with the functionality we provide for the software we package in Docker containers. As the projects that we package and distribute grow, conventionally so do the use cases along with large communities of power users. As it has become very difficult for us to support Swiss Army Knife style images we are looking to the community of users to start customizing our base image layer themselves.

    Something we provide and pride ourselves on is keeping our containers up to date with not only the latest external software releases, but also with the latest distribution level packages. Conventionally when people needed some form of custom functionality they would fork our source and build something once that suited their needs leaving this dangling fork without updates or basic maintenance.

    Behind the scenes we have been working to provide the community with the ability to customize our images not only for themselves but also for other users. This comes in the form of 3 different tools:

    • Private Custom Scripts
    • Private Custom Services
    • Public Facing Docker Mods

    All of the functionality described in this post is live on every one of the containers we currently maintain:

    https://fleet.linuxserver.io

    NOTE: While the following support has been added to our containers, we will not give support to any custom scripts, services, or mods. If you are having an issue with one of our containers, be sure to disable all custom scripts/services/mods before seeking support.

    Custom Scripts

    The first part of this update is the support for a user's custom scripts to run at startup. In every container, simply create a new folder located at /custom-cont-init.d and add any scripts you want. These scripts can contain logic for installing packages, copying over custom files to other locations, or installing plugins.

    Because this location is outside of /config you will need to mount it like any other volume if you wish to make use of it. e.g. -v /home/foo/appdata/my-custom-files:/custom-cont-init.d if using the Docker CLI or

    services:
    + Customizing LinuxServer Containers - LinuxServer.io       

    Customizing LinuxServer Containers

    One of the challenges we face as an organization is making everyone happy with the functionality we provide for the software we package in Docker containers. As the projects that we package and distribute grow, conventionally so do the use cases along with large communities of power users. As it has become very difficult for us to support Swiss Army Knife style images we are looking to the community of users to start customizing our base image layer themselves.

    Something we provide and pride ourselves on is keeping our containers up to date with not only the latest external software releases, but also with the latest distribution level packages. Conventionally when people needed some form of custom functionality they would fork our source and build something once that suited their needs leaving this dangling fork without updates or basic maintenance.

    Behind the scenes we have been working to provide the community with the ability to customize our images not only for themselves but also for other users. This comes in the form of 3 different tools:

    • Private Custom Scripts
    • Private Custom Services
    • Public Facing Docker Mods

    All of the functionality described in this post is live on every one of the containers we currently maintain:

    https://fleet.linuxserver.io

    NOTE: While the following support has been added to our containers, we will not give support to any custom scripts, services, or mods. If you are having an issue with one of our containers, be sure to disable all custom scripts/services/mods before seeking support.

    Custom Scripts

    The first part of this update is the support for a user's custom scripts to run at startup. In every container, simply create a new folder located at /custom-cont-init.d and add any scripts you want. These scripts can contain logic for installing packages, copying over custom files to other locations, or installing plugins.

    Because this location is outside of /config you will need to mount it like any other volume if you wish to make use of it. e.g. -v /home/foo/appdata/my-custom-files:/custom-cont-init.d if using the Docker CLI or

    services:
       bar:
         volumes:
           - /home/foo/appdata/bar:/config
    @@ -33,4 +33,4 @@ apk add --no-cache ffmpeg
       -v path to watch folder:/watch \
       --restart unless-stopped \
       linuxserver/transmission
    -

    The source code for this mod can be found here.

    NOTE: When pulling in logic from external sources practice caution and trust the sources/community you get them from, as there are extreme security implications to consuming files from sources outside of our control.

    We are here to help

    If you are interested in writing custom logic and possibly sharing it with the community in the form of a Docker Mod we are always available to help you out.

    Our Discord server is best for quick direct contact and our Forum for a longer running project.

    There is zero barrier to entry for these levels of container customization and you are in complete control.

    We are looking forward to your next creation.

    \ No newline at end of file +

    The source code for this mod can be found here.

    NOTE: When pulling in logic from external sources practice caution and trust the sources/community you get them from, as there are extreme security implications to consuming files from sources outside of our control.

    We are here to help

    If you are interested in writing custom logic and possibly sharing it with the community in the form of a Docker Mod we are always available to help you out.

    Our Discord server is best for quick direct contact and our Forum for a longer running project.

    There is zero barrier to entry for these levels of container customization and you are in complete control.

    We are looking forward to your next creation.

    \ No newline at end of file diff --git a/general/container-execution/index.html b/general/container-execution/index.html index 42f83e881a..045bc74961 100644 --- a/general/container-execution/index.html +++ b/general/container-execution/index.html @@ -1,7 +1,7 @@ - Container Execution - LinuxServer.io

    Container Execution

    You may find at some point you need to view the internal data of a container.

    Shell Access

    Particularly useful when debugging the application - to shell in to one of our containers, run the following:

    docker exec -it <container_name> /bin/bash
    + Container Execution - LinuxServer.io       

    Container Execution

    You may find at some point you need to view the internal data of a container.

    Shell Access

    Particularly useful when debugging the application - to shell in to one of our containers, run the following:

    docker exec -it <container_name> /bin/bash
     

    Tailing the logs

    The vast majority of our images are configured to output the application logs to the console, which in Docker's terms means you can access them using the docker logs command:

    docker logs -f --tail=<number_of_lines_to_start_with> <container_name>
     

    The --tail argument is optional, but useful if the application has been running for a long time - the logs command by default will output all logs.

    To make life simpler for yourself here's a handy bash alias to do some of the leg work for you:

    # ~/.bash_aliases
     alias dtail='docker logs -tf --tail="50" "$@"'
     

    Execute it with dtail <container_name>.

    Checking the build version

    If you are experiencing issues with one of our containers, it helps us to know which version of the image your container is running from. The primary reason we ask for this is because you may be reporting an issue we are aware of and have subsequently fixed. However, if you are running on the latest version of our image, it could indeed be a newly found bug, which we'd want to know more about.

    To obtain the build version for the container:

    docker inspect -f '{{ index .Config.Labels "build_version" }}' <container_name>
     

    Or the image:

    docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/<image_name>
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/general/containers-101/index.html b/general/containers-101/index.html index 622b255347..64b30bf312 100644 --- a/general/containers-101/index.html +++ b/general/containers-101/index.html @@ -1,3 +1,3 @@ - Docker Containers: 101 - LinuxServer.io

    Docker Containers: 101

    A container bundles all the libraries required by an application to run, you no longer need to know which version of Java, Apache or whatever – the person who built the container for you took care of that. Containers don’t usually ship with configuration files baked in though. This is because the contents of a container are ‘stateless’ or ‘immutable’. In English, this means the state or filesystem of the container itself cannot be modified after it is created.

    What do I need to know?

    To get started, not much. You will need to know about some of the terminology or concepts when performing more advanced tasks or troubleshooting but getting started couldn't be much simpler.

    docker run hello-world
    + Docker Containers: 101 - LinuxServer.io       

    Docker Containers: 101

    A container bundles all the libraries required by an application to run, you no longer need to know which version of Java, Apache or whatever – the person who built the container for you took care of that. Containers don’t usually ship with configuration files baked in though. This is because the contents of a container are ‘stateless’ or ‘immutable’. In English, this means the state or filesystem of the container itself cannot be modified after it is created.

    What do I need to know?

    To get started, not much. You will need to know about some of the terminology or concepts when performing more advanced tasks or troubleshooting but getting started couldn't be much simpler.

    docker run hello-world
     

    That's it, your first docker container. It pre-supposes you have docker installed but that's all it takes to run a container. You didn't need to know anything about installed what that app needed to run - this is the key benefit. hello-world is a simple example but imagine you have a complex application with a large number of dependencies and it is tied to a specific version of Python or Java. Then imagine you have a second app again tied to a specific, but different, version of Java or Python. Now you have to try and ensure these two (often conflicting) versions sit on the same host and play nice. In the world of containers these two versions can operate in complete isolation from one another. Bliss.

    Key Terminology

    There are a few terms you might find useful to understand when working with containers:

    • docker - the first, and most popular, container runtime - it sits as an abstraction layer between the kernels features such as cgroups or namespaces and running applications
    • container - a sandboxed process isolated in memory and running instance of an image
    • image - a pre-built filesystem in a format ready to be understood by a container runtime (usually docker)
    • volume - use volumes to persist data outside of the containers sandboxed filesystem
    • environment - a way of configuring the sandboxed environment your container runs in

    Key Concepts

    Containers are completely sandboxed environments by the Linux kernel. It may help you to think of them somewhat like a small VM however in practice this is largely false. The Linux kernel controls access to various system resources utilising control groups (cgroups). We rely on docker to translate these complex concepts into simple ones that users can understand and consume.

    By default a running container has absolutely no context of the world around it. Out the box you cannot connect from the outside world to the running webservers on ports 80 and 443 below. To allow entry to the sandbox from the outside world we must explicitly allow entry using the -p flag.

    docker run -d --name=letsencrypt -p 80:80 -p 443:443 linuxserver/letsencrypt
    -

    Take this concept and multiply it across all aspects of a running application. Ports, volumes (i.e. the files you want to be available inside the container from outside the container), environment variables and so on. For us as developers this allows us to isolate your system from troubleshooting as the box the container is running in (the container) is identical to the next.

    Containers are an amazing way to run applications in a secure, sandboxed way.

    \ No newline at end of file +

    Take this concept and multiply it across all aspects of a running application. Ports, volumes (i.e. the files you want to be available inside the container from outside the container), environment variables and so on. For us as developers this allows us to isolate your system from troubleshooting as the box the container is running in (the container) is identical to the next.

    Containers are an amazing way to run applications in a secure, sandboxed way.

    \ No newline at end of file diff --git a/general/docker-compose/index.html b/general/docker-compose/index.html index 3fe307d894..69f198eca9 100644 --- a/general/docker-compose/index.html +++ b/general/docker-compose/index.html @@ -1,4 +1,4 @@ - Docker Compose - LinuxServer.io

    Docker Compose

    Intro

    Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.

    Note that when inputting data for variables, you must follow standard YAML rules. In the case of passwords with special characters this can mean escaping them properly ($ is the escape character) or properly quoting the variable. The best course of action if you do not know how to do this or are unwilling to research, is to stick to alphanumeric characters only.

    Installation

    Starting with version 2, Docker started publishing docker compose as a go based plugin for docker (rather than a python based standalone binary). And they also publish this plugin for various arches, including x86_64, armhf and aarch64 (as opposed to the x86_64 only binaries for v1.X). Therefore we updated our recommended install option to utilize the plugin.

    You can install docker compose via the following commands:

    ARCH=$(uname -m) && [[ "${ARCH}" == "armv7l" ]] && ARCH="armv7"
    + Docker Compose - LinuxServer.io       

    Docker Compose

    Intro

    Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.

    Note that when inputting data for variables, you must follow standard YAML rules. In the case of passwords with special characters this can mean escaping them properly ($ is the escape character) or properly quoting the variable. The best course of action if you do not know how to do this or are unwilling to research, is to stick to alphanumeric characters only.

    Installation

    Starting with version 2, Docker started publishing docker compose as a go based plugin for docker (rather than a python based standalone binary). And they also publish this plugin for various arches, including x86_64, armhf and aarch64 (as opposed to the x86_64 only binaries for v1.X). Therefore we updated our recommended install option to utilize the plugin.

    You can install docker compose via the following commands:

    ARCH=$(uname -m) && [[ "${ARCH}" == "armv7l" ]] && ARCH="armv7"
     sudo mkdir -p /usr/local/lib/docker/cli-plugins
     sudo curl -SL "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-${ARCH}" -o /usr/local/lib/docker/cli-plugins/docker-compose
     sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
    @@ -77,4 +77,4 @@ alias dtail='docker logs -tf --tail="50" "$@"'
     

    There are multiple ways to see the logs of your containers. In some instances, using docker logs is preferable to docker compose logs. By default docker logs will not run unless you define which service the logs are coming from. The docker compose logs will pull all of the logs for the services defined in the docker-compose.yml file.

    When asking for help, you should post your logs or be ready to provide logs if someone requests it. If you are running multiple containers in your docker-compose.yml file, it is not helpful to submit all of the logs. If you are experiencing issues with a single service, say Heimdall, then you would want to get your logs using docker logs heimdall or docker compose logs heimdall. The bash_alias for dclogs can be used if you define your service after you've typed the alias. Likewise, the bash_alias detail will not run without defining the service after it.

    Some distributions, like Ubuntu, already have the code snippet below in the ~/.bashrc file. If it is not included, you'll need to add the following to your ~/.bashrc file in order for the aliases file to be picked up:

    if [ -f ~/.bash_aliases ]; then
         . ~/.bash_aliases
     fi
    -

    Once configured, you can run source ~/.bashrc or log out and the log in again. Now you can type dcpull or dcup to manage your entire fleet of containers at once. It's like magic.

    \ No newline at end of file +

    Once configured, you can run source ~/.bashrc or log out and the log in again. Now you can type dcpull or dcup to manage your entire fleet of containers at once. It's like magic.

    \ No newline at end of file diff --git a/general/fleet/index.html b/general/fleet/index.html index b7879b56b9..edd840257c 100644 --- a/general/fleet/index.html +++ b/general/fleet/index.html @@ -1,4 +1,4 @@ - Fleet - LinuxServer.io

    Fleet

    How Fleet works

    Fleet stores a snapshot of Docker Images in its own database, consisting of metadata deemed most pertinent to both the users of the images, and the repository owner. It will synchronize with Docker Hub over a set interval in order to update its stored data.

    It then displays this snapshot data on its own status page as a useful list, containing links to each repository and image owned by the repository owner. Each image also contains a status which is managed by the repository owner, who can define images as either Stable or Unstable. This is designed to quickly help users know when an image is undergoing a state of instability which is known by the owner.

    Why a snapshot?

    In short, Docker Hub's API is very slow. It would not be a good long-term solution to just proxy the responses from Docker Hub and translate the data into something considered useful by downstream clients. By caching the image information in its own database, Fleet is able to more efficiently return the status data for each image and repository. In doing so, it is also able to provide more concise data, such as image versions, as part of the primary response, rather than requiring users to make a separate call.

    As an example comparison between obtaining all image name, pull and version information for all LinuxServer images from Docker Hub, and then obtaining that same data via Fleet's API:

    API Time (ms)
    Docker Hub (multiple calls) 52000ms
    Fleet 50ms

    Capabilities

    Fleet has the ability to display images with a particular state, which provides contextual information to visitors of the application's main page.

    Hidden

    If an image is hidden, it will not be displayed as part of the main list, nor will it be returned as part of any API calls. This also means that the pull count of a hidden image is not included.

    Unstable

    Marks an image as having issues known by the maintainer. A useful state to assign to an image if the latest build (or builds) are causing downstream breakages. This may also be useful if an upstream dependency or application is causing breakages in the image directly.

    Deprecated

    If the maintainer of the image, or upstream application no longer wishes to provide support, or if the image has reached its end-of-life (or has been superseded by another), marking an image as deprecated will ensure users are made aware that no further updates will be supplied, and should stop using it. Deprecation notices are also provided to give context.

    API

    Fleet exposes a single API endpoint which can be used to obtain image list and pull count information for all relevant images maintained by the repository

    {% api-method method="get" host="https://fleet.linuxserver.io" path="/api/v1/images" %} {% api-method-summary %} Get All Repositories and Images {% endapi-method-summary %}

    {% api-method-description %} Returns all synchronized images. {% endapi-method-description %}

    {% api-method-spec %} {% api-method-request %}

    {% api-method-response %} {% api-method-response-example httpCode=200 %} {% api-method-response-example-description %} All synchronized repositories and images returned. {% endapi-method-response-example-description %}

    {
    + Fleet - LinuxServer.io       

    Fleet

    How Fleet works

    Fleet stores a snapshot of Docker Images in its own database, consisting of metadata deemed most pertinent to both the users of the images, and the repository owner. It will synchronize with Docker Hub over a set interval in order to update its stored data.

    It then displays this snapshot data on its own status page as a useful list, containing links to each repository and image owned by the repository owner. Each image also contains a status which is managed by the repository owner, who can define images as either Stable or Unstable. This is designed to quickly help users know when an image is undergoing a state of instability which is known by the owner.

    Why a snapshot?

    In short, Docker Hub's API is very slow. It would not be a good long-term solution to just proxy the responses from Docker Hub and translate the data into something considered useful by downstream clients. By caching the image information in its own database, Fleet is able to more efficiently return the status data for each image and repository. In doing so, it is also able to provide more concise data, such as image versions, as part of the primary response, rather than requiring users to make a separate call.

    As an example comparison between obtaining all image name, pull and version information for all LinuxServer images from Docker Hub, and then obtaining that same data via Fleet's API:

    API Time (ms)
    Docker Hub (multiple calls) 52000ms
    Fleet 50ms

    Capabilities

    Fleet has the ability to display images with a particular state, which provides contextual information to visitors of the application's main page.

    Hidden

    If an image is hidden, it will not be displayed as part of the main list, nor will it be returned as part of any API calls. This also means that the pull count of a hidden image is not included.

    Unstable

    Marks an image as having issues known by the maintainer. A useful state to assign to an image if the latest build (or builds) are causing downstream breakages. This may also be useful if an upstream dependency or application is causing breakages in the image directly.

    Deprecated

    If the maintainer of the image, or upstream application no longer wishes to provide support, or if the image has reached its end-of-life (or has been superseded by another), marking an image as deprecated will ensure users are made aware that no further updates will be supplied, and should stop using it. Deprecation notices are also provided to give context.

    API

    Fleet exposes a single API endpoint which can be used to obtain image list and pull count information for all relevant images maintained by the repository

    {% api-method method="get" host="https://fleet.linuxserver.io" path="/api/v1/images" %} {% api-method-summary %} Get All Repositories and Images {% endapi-method-summary %}

    {% api-method-description %} Returns all synchronized images. {% endapi-method-description %}

    {% api-method-spec %} {% api-method-request %}

    {% api-method-response %} {% api-method-response-example httpCode=200 %} {% api-method-response-example-description %} All synchronized repositories and images returned. {% endapi-method-response-example-description %}

    {
         "status": "OK",
         "data" {
             "totalPullCount": 1862494227,
    @@ -51,4 +51,4 @@ fleet.database.password=<fleet_sql_password>
     
     # Password security
     fleet.admin.secret=<a_random_string>
    -

    All configuration can be loaded either via the config file, via JVM arguments, or via the system environment. Fleet will first look in the configuration file, then JVM runtime, and finally in the system environment. It will load the first value it finds, which can be useful when needing to override specific properties.

    {% hint style="info" %} If you place a property in the system environment, ensure that the property uses underscores rather than periods. This is due to a limitation in BASH environments where exported variables must not contain this character. E.g. fleet.app.port=8080 becomes export fleet_app_port=8080 {% endhint %}

    Property Name Purpose
    fleet.app.port The port which the application will be running under.
    fleet.admin.secret A string used as part of the password key derivation process. This secret is prepended to the raw password before its key is derived, providing further pseudo-randomness to hashed passwords. Once set, this must not be changed! It is vital to remain the same, as it will be used during the password verification step. If Fleet is restarted with this removed or set differently, the password verification process will fail because previously hashed passwords will have been derived with the old secret.
    fleet.database.driver The driver to use for connections to Fleet's database. This should be org.mariadb.jdbc.Driver
    fleet.database.url The full JDBC connection string to the database.
    fleet.database.username The username of the SQL user which will be managing the data in the Fleet database. This should have full GRANT access to the fleet database as it also manages any database migrations.
    fleet.database.password The password for the SQL user

    Runtime Arguments

    As well as the base configuration file, Fleet also supports some runtime arguments by means of the -D flag. These can be used to direct Fleet to behave in a specific way at runtime.

    {% hint style="info" %} Unlike the properties defined above, these properties are only accessed via the JVM arguments (-D). {% endhint %}

    Runtime Argument Purpose
    fleet.config.base The absolute path of the configuration file.
    fleet.show.passwords Tells fleet to show passwords in plain text in its logs. Not recommended.
    fleet.nuke.database Be very careful. This will tell Fleet to completely wipe and rebuild its database. This can be useful if the owner deems the database to be too far out of synchronisation with Docker Hub, or if images have since been removed but are still showing in Fleet.
    fleet.skip.sync.on.startup By default, Fleet will run a synchronisation process when it first starts up. Setting this flag will tell it to skip the first run. The next synchronisation will be at the set interval.

    Default User

    When starting Fleet for the first time it will create a default user in order for you to log in and manage the repositories/images synchronised by the application. The default username and password are:

    Username: admin

    Password: admin

    {% hint style="warning" %} You should change the default password for this user as soon as possible! This can be done via the Admin -> Users menu options. {% endhint %}

    \ No newline at end of file +

    All configuration can be loaded either via the config file, via JVM arguments, or via the system environment. Fleet will first look in the configuration file, then JVM runtime, and finally in the system environment. It will load the first value it finds, which can be useful when needing to override specific properties.

    {% hint style="info" %} If you place a property in the system environment, ensure that the property uses underscores rather than periods. This is due to a limitation in BASH environments where exported variables must not contain this character. E.g. fleet.app.port=8080 becomes export fleet_app_port=8080 {% endhint %}

    Property Name Purpose
    fleet.app.port The port which the application will be running under.
    fleet.admin.secret A string used as part of the password key derivation process. This secret is prepended to the raw password before its key is derived, providing further pseudo-randomness to hashed passwords. Once set, this must not be changed! It is vital to remain the same, as it will be used during the password verification step. If Fleet is restarted with this removed or set differently, the password verification process will fail because previously hashed passwords will have been derived with the old secret.
    fleet.database.driver The driver to use for connections to Fleet's database. This should be org.mariadb.jdbc.Driver
    fleet.database.url The full JDBC connection string to the database.
    fleet.database.username The username of the SQL user which will be managing the data in the Fleet database. This should have full GRANT access to the fleet database as it also manages any database migrations.
    fleet.database.password The password for the SQL user

    Runtime Arguments

    As well as the base configuration file, Fleet also supports some runtime arguments by means of the -D flag. These can be used to direct Fleet to behave in a specific way at runtime.

    {% hint style="info" %} Unlike the properties defined above, these properties are only accessed via the JVM arguments (-D). {% endhint %}

    Runtime Argument Purpose
    fleet.config.base The absolute path of the configuration file.
    fleet.show.passwords Tells fleet to show passwords in plain text in its logs. Not recommended.
    fleet.nuke.database Be very careful. This will tell Fleet to completely wipe and rebuild its database. This can be useful if the owner deems the database to be too far out of synchronisation with Docker Hub, or if images have since been removed but are still showing in Fleet.
    fleet.skip.sync.on.startup By default, Fleet will run a synchronisation process when it first starts up. Setting this flag will tell it to skip the first run. The next synchronisation will be at the set interval.

    Default User

    When starting Fleet for the first time it will create a default user in order for you to log in and manage the repositories/images synchronised by the application. The default username and password are:

    Username: admin

    Password: admin

    {% hint style="warning" %} You should change the default password for this user as soon as possible! This can be done via the Admin -> Users menu options. {% endhint %}

    \ No newline at end of file diff --git a/general/running-our-containers/index.html b/general/running-our-containers/index.html index 49219552a2..938474d9fd 100644 --- a/general/running-our-containers/index.html +++ b/general/running-our-containers/index.html @@ -1,8 +1,8 @@ - Running LinuxServer Containers - LinuxServer.io

    Running LinuxServer Containers

    Image Structure

    Base Images

    We have curated various base images which our main application images derive from. This is beneficial for two main reasons:

    • A common dependency base between multiple images, reducing the likelihood of variation between two or more applications that share the same dependencies.
    • Reduction in image footprint on your host machine by fully utilising Docker's image layering system. Multiple containers running locally that share the same base image will reuse that image and any of its ancestors.

    The /config volume

    To help reduce variation between our images, we have adopted a common structure pattern for application config and dependent directories. This means that each image has its own internal /config directory which holds all application-specific configuration. With the exception of a small number of images, all of our images expose this volume.

    We do this because we believe that it makes it easier to answer the common question of "where does the application data get persisted?" - the answer being "always in /config". If you don't map this directory when creating your containers, the config will only last as long as the lifespan of the container itself!

    Creating a Container

    To create a container from one of our images, you must use either docker create or docker run. Each image follows the same pattern in the command when creating a container:

    docker create \
    + Running LinuxServer Containers - LinuxServer.io       

    Running LinuxServer Containers

    Image Structure

    Base Images

    We have curated various base images which our main application images derive from. This is beneficial for two main reasons:

    • A common dependency base between multiple images, reducing the likelihood of variation between two or more applications that share the same dependencies.
    • Reduction in image footprint on your host machine by fully utilising Docker's image layering system. Multiple containers running locally that share the same base image will reuse that image and any of its ancestors.

    The /config volume

    To help reduce variation between our images, we have adopted a common structure pattern for application config and dependent directories. This means that each image has its own internal /config directory which holds all application-specific configuration. With the exception of a small number of images, all of our images expose this volume.

    We do this because we believe that it makes it easier to answer the common question of "where does the application data get persisted?" - the answer being "always in /config". If you don't map this directory when creating your containers, the config will only last as long as the lifespan of the container itself!

    Creating a Container

    To create a container from one of our images, you must use either docker create or docker run. Each image follows the same pattern in the command when creating a container:

    docker create \
         --name=<container_name> \
         -v <path_to_data>:/config \
         -e PUID=<uid> \
         -e PGID=<gid> \
         -p <host_port>:<app_port> \
         linuxserver/<image_name>
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/general/swag/index.html b/general/swag/index.html index 287155d866..2b18b859ba 100644 --- a/general/swag/index.html +++ b/general/swag/index.html @@ -1,4 +1,4 @@ - Swag - LinuxServer.io

    The goal of this guide is to give you ideas on what can be accomplished with the LinuxServer SWAG docker image and to get you started. We will explain some of the basic concepts and limitations, and then we'll provide you with common examples. If you have further questions, you can ask on our forum or join our Discord for conversations: https://discord.gg/YWrKVTn

    Table of Contents

    Introduction

    What are SSL certs?

    SSL certs allow users of a service to communicate via encrypted data transmitted up and down. Third party trusted certs also allow users to make sure that the remote service they are connecting to is really who they say they are and not someone else in the middle. When we run a web server for reasons like hosting websites or reverse proxying services on our own domain, we need to set it up with third party trusted ssl certs so client browsers trust it and communicate with it securely. When you connect to a website with a trusted cert, most browsers show a padlock icon next to the address bar to indicate that. Without a trusted cert (ie. with self signed cert) most browsers show warning pages or may block access to the website as the website identity cannot be confirmed via a trusted third party.

    What is Let's Encrypt (and/or ZeroSSL)?

    In the past, the common way to get a trusted ssl cert was to contact one of the providers, send them the relevant info to prove ownership of a domain and pay for the service. Nowadays, with Let's Encrypt and ZeroSSL, one can get free certs via automated means.

    The SWAG docker image, published and maintained by LinuxServer.io, makes setting up a full-fledged web server with auto generated and renewed ssl certs very easy. It is essentially an nginx webserver with php7, fail2ban (intrusion prevention) and Let's Encrypt cert validation built-in. It is just MySQL short of a LEMP stack and therefore is best paired with our MariaDB docker image.

    Creating a SWAG container

    Most of the initial settings for getting a webserver with ssl certs up are done through the docker run/create or compose yaml parameters. Here's a list of all the settings available including the optional ones. It is safe to remove unnecessary parameters for different scenarios.

    docker cli

    docker create \
    + Swag - LinuxServer.io       

    The goal of this guide is to give you ideas on what can be accomplished with the LinuxServer SWAG docker image and to get you started. We will explain some of the basic concepts and limitations, and then we'll provide you with common examples. If you have further questions, you can ask on our forum or join our Discord for conversations: https://discord.gg/YWrKVTn

    Table of Contents

    Introduction

    What are SSL certs?

    SSL certs allow users of a service to communicate via encrypted data transmitted up and down. Third party trusted certs also allow users to make sure that the remote service they are connecting to is really who they say they are and not someone else in the middle. When we run a web server for reasons like hosting websites or reverse proxying services on our own domain, we need to set it up with third party trusted ssl certs so client browsers trust it and communicate with it securely. When you connect to a website with a trusted cert, most browsers show a padlock icon next to the address bar to indicate that. Without a trusted cert (ie. with self signed cert) most browsers show warning pages or may block access to the website as the website identity cannot be confirmed via a trusted third party.

    What is Let's Encrypt (and/or ZeroSSL)?

    In the past, the common way to get a trusted ssl cert was to contact one of the providers, send them the relevant info to prove ownership of a domain and pay for the service. Nowadays, with Let's Encrypt and ZeroSSL, one can get free certs via automated means.

    The SWAG docker image, published and maintained by LinuxServer.io, makes setting up a full-fledged web server with auto generated and renewed ssl certs very easy. It is essentially an nginx webserver with php7, fail2ban (intrusion prevention) and Let's Encrypt cert validation built-in. It is just MySQL short of a LEMP stack and therefore is best paired with our MariaDB docker image.

    Creating a SWAG container

    Most of the initial settings for getting a webserver with ssl certs up are done through the docker run/create or compose yaml parameters. Here's a list of all the settings available including the optional ones. It is safe to remove unnecessary parameters for different scenarios.

    docker cli

    docker create \
       --name=swag \
       --cap-add=NET_ADMIN \
       -e PUID=1000 \
    @@ -631,4 +631,4 @@ services:
     

    That way, nginx will use the / location block from our heimdall proxy conf instead.

    After that, when we navigate to https://linuxserver-test.com, we'll see the Heimdall interface.

    If we want to password protect our new homepage, we can run the following on the host command line to create a new .htpasswd file: docker exec -it swag htpasswd -c /config/nginx/.htpasswd anyusername. After which, we can activate authentication by editing the heimdall.subfolder.conf file to uncomment the relevant lines so it reads:

        # enable the next two lines for http auth
         auth_basic "Restricted";
         auth_basic_user_file /config/nginx/.htpasswd;
    -

    Troubleshooting

    We wrote a blogpost for the deprecated letsencrypt image diving into troubleshooting issues regarding dns and port-forwards, which still is a very good resource: blog.linuxserver.io

    Common errors

    404

    This error simply means that the resource was not found. Commonly happening when you try to access a subfolder that is not enabled.

    502

    This error means that nginx can't talk to the application. There is a few common reasons for this:

    • The application and SWAG is not on the same custom docker network

      Further up we talk about how to set up Docker networking, however there are some other common traps

    • The container name does not match the application name.

      Covered in the section for Understanding the proxy conf structure

    • You manually changed the port.

      Also covered in the section for Understanding the proxy conf structure

    • The container originally ran with host networking, or the default bridge.

      In most cases the contents of /config/nginx/resolver.conf; should be ...resolver 127.0.0.11 valid=30s;, if this is not the case, you can:

      • Delete it, and restart the container to have it regenerate
      • Manually set the content(we wont override it)

    Final Thoughts

    This image can be used in many different scenarios as it is a full fledged web server with some bells and whistles added. The above examples should be enough to get you started. For more information, please refer to the official documentation on either Github or Docker Hub. If you have questions or issues, or want to discuss and share ideas, feel free to visit our discord: https://discord.gg/YWrKVTn

    How to Request Support

    As you can see in this article, there are many different configurations, therefore we need to understand your exact setup before we can provide support. If you encounter a bug and confirm that it's a bug, please report it on our github thread. If you need help with setting it up, join our discord and upload the following info to a service like pastebin and post the link:

    • Docker run/create or compose yml you used
    • Full docker log (docker logs swag)
    • Any relevant conf files (default, nginx.conf or specific proxy conf)
    \ No newline at end of file +

    Troubleshooting

    We wrote a blogpost for the deprecated letsencrypt image diving into troubleshooting issues regarding dns and port-forwards, which still is a very good resource: blog.linuxserver.io

    Common errors

    404

    This error simply means that the resource was not found. Commonly happening when you try to access a subfolder that is not enabled.

    502

    This error means that nginx can't talk to the application. There is a few common reasons for this:

    • The application and SWAG is not on the same custom docker network

      Further up we talk about how to set up Docker networking, however there are some other common traps

    • The container name does not match the application name.

      Covered in the section for Understanding the proxy conf structure

    • You manually changed the port.

      Also covered in the section for Understanding the proxy conf structure

    • The container originally ran with host networking, or the default bridge.

      In most cases the contents of /config/nginx/resolver.conf; should be ...resolver 127.0.0.11 valid=30s;, if this is not the case, you can:

      • Delete it, and restart the container to have it regenerate
      • Manually set the content(we wont override it)

    Final Thoughts

    This image can be used in many different scenarios as it is a full fledged web server with some bells and whistles added. The above examples should be enough to get you started. For more information, please refer to the official documentation on either Github or Docker Hub. If you have questions or issues, or want to discuss and share ideas, feel free to visit our discord: https://discord.gg/YWrKVTn

    How to Request Support

    As you can see in this article, there are many different configurations, therefore we need to understand your exact setup before we can provide support. If you encounter a bug and confirm that it's a bug, please report it on our github thread. If you need help with setting it up, join our discord and upload the following info to a service like pastebin and post the link:

    • Docker run/create or compose yml you used
    • Full docker log (docker logs swag)
    • Any relevant conf files (default, nginx.conf or specific proxy conf)
    \ No newline at end of file diff --git a/general/understanding-puid-and-pgid/index.html b/general/understanding-puid-and-pgid/index.html index 7dcf34d1ac..74b84ebee9 100644 --- a/general/understanding-puid-and-pgid/index.html +++ b/general/understanding-puid-and-pgid/index.html @@ -1,6 +1,6 @@ - Understanding PUID and PGID - LinuxServer.io

    Understanding PUID and PGID

    {% hint style="info" %} We are aware that recent versions of the Docker engine have introduced the --user flag. Our images are not yet compatible with this, so we recommend continuing usage of PUID and PGID. {% endhint %}

    Why use these?

    Docker runs all of its containers under the root user domain because it requires access to things like network configuration, process management, and your filesystem. This means that the processes running inside your containers also run as root. This kind of elevated access is not ideal for day-to-day use, and potentially gives applications the access to things they shouldn't (although, a strong understanding of volume and port mapping will help with this).

    Another issue is file management within the container's mapped volumes. If the process is running under root, all files and directories created during the container's lifespan will be owned by root, thus becoming inaccessible by you.

    Using the PUID and PGID allows our containers to map the container's internal user to a user on the host machine. All of our containers use this method of user mapping and should be applied accordingly.

    Using the variables

    When creating a container from one of our images, ensure you use the -e PUID and -e PGID options in your docker command:

    docker create --name=beets -e PUID=1000 -e PGID=1000 linuxserver/beets
    + Understanding PUID and PGID - LinuxServer.io       

    Understanding PUID and PGID

    {% hint style="info" %} We are aware that recent versions of the Docker engine have introduced the --user flag. Our images are not yet compatible with this, so we recommend continuing usage of PUID and PGID. {% endhint %}

    Why use these?

    Docker runs all of its containers under the root user domain because it requires access to things like network configuration, process management, and your filesystem. This means that the processes running inside your containers also run as root. This kind of elevated access is not ideal for day-to-day use, and potentially gives applications the access to things they shouldn't (although, a strong understanding of volume and port mapping will help with this).

    Another issue is file management within the container's mapped volumes. If the process is running under root, all files and directories created during the container's lifespan will be owned by root, thus becoming inaccessible by you.

    Using the PUID and PGID allows our containers to map the container's internal user to a user on the host machine. All of our containers use this method of user mapping and should be applied accordingly.

    Using the variables

    When creating a container from one of our images, ensure you use the -e PUID and -e PGID options in your docker command:

    docker create --name=beets -e PUID=1000 -e PGID=1000 linuxserver/beets
     

    Or, if you use docker-compose, add them to the environment: section:

    environment:
       - PUID=1000
       - PGID=1000
     

    It is most likely that you will use the id of yourself, which can be obtained by running the command below. The two values you will be interested in are the uid and gid.

    id $user
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/general/updating-our-containers/index.html b/general/updating-our-containers/index.html index 3f1ad29b23..97a4206acb 100644 --- a/general/updating-our-containers/index.html +++ b/general/updating-our-containers/index.html @@ -1,4 +1,4 @@ - Updating our containers - LinuxServer.io

    Updating our containers

    Our images are updated whenever the upstream application or dependencies get changed, so make sure you're always running the latest version, as they may contain important bug fixes and new features.

    Steps required to update

    Docker containers are, for the most part, immutable. This means that important configuration such as volume and port mappings can't be easily changed once the container has been created. The containers created from our images run a very specific version of the application they wrap, so in order to update the application, you must recreate the container.

    Stop the container

    Firstly, stop the container.

    docker stop <container_name>
    + Updating our containers - LinuxServer.io       

    Updating our containers

    Our images are updated whenever the upstream application or dependencies get changed, so make sure you're always running the latest version, as they may contain important bug fixes and new features.

    Steps required to update

    Docker containers are, for the most part, immutable. This means that important configuration such as volume and port mappings can't be easily changed once the container has been created. The containers created from our images run a very specific version of the application they wrap, so in order to update the application, you must recreate the container.

    Stop the container

    Firstly, stop the container.

    docker stop <container_name>
     

    Remove the container

    Once the container has been stopped, remove it.

    Important: Did you remember to persist the /config volume when you originally created the container? Bear in mind, you'll lose any configuration inside the container if this volume was not persisted. Read up on why this is important.

    docker rm <container_name>
     

    Pull the latest version

    Now you can pull the latest version of the application image from Docker Hub.

    docker pull linuxserver/<image_name>
     

    Recreate the container

    Finally, you can recreate the container. This is often cited as the most arduous task as it requires you to remember all of the mappings you set beforehand. You can help mitigate this step by using Docker Compose instead - this topic has been outlined in our documentation.

    docker create \
    @@ -13,4 +13,4 @@ docker-compose up -d <container_name>
     

    Or, to update all containers at once:

    docker-compose pull
     docker-compose up -d
     

    Removing old images

    Whenever a Docker image is updated, a fresh version of that image gets downloaded and stored on your host machine. Doing this, however, does not remove the old version of the image. Eventually you will end up with a lot of disk space used up by stale images. You can prune old images from your system, which will free up space:

    docker image prune
    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/general/volumes/index.html b/general/volumes/index.html index f9666596a8..be6753e7c7 100644 --- a/general/volumes/index.html +++ b/general/volumes/index.html @@ -1,4 +1,4 @@ - Volumes - LinuxServer.io

    Volumes

    In Docker terminology, a volume is a storage device that allows you to persist the data used and generated by each of your running containers. While a container remains alive (in either an active or inactive state), the data inside its user-space remains intact. However, if you decide to recreate a container, all data within that container is lost. Volumes are an intrinsic aspect of container management, so it is useful to know how to create them.

    There are two ways to map persistent storage to your containers; container volumes, and directory overlays. All of our images reference persistent data by means of directory overlays.

    Mapping a volume to your container

    Firstly, you must understand which directories from within your container you wish to persist. All of our images come with side-by-side documentation on which internal directories are used by the application. As mentioned in the Running our Containers documentation, the most common directory you will wish to persist is the /config directory.

    Before you create your container, first create a directory on the host machine that will act as the home for your persisted data. We recommend creating the directory /opt/appdata. Under this tree, you can create a single configuration directory for each of your containers.

    When creating the container itself, now is the time to make use of the -v flag, which will tell Docker to overlay your host directory over the container's directory:

    docker create --name my_container \
    + Volumes - LinuxServer.io       

    Volumes

    In Docker terminology, a volume is a storage device that allows you to persist the data used and generated by each of your running containers. While a container remains alive (in either an active or inactive state), the data inside its user-space remains intact. However, if you decide to recreate a container, all data within that container is lost. Volumes are an intrinsic aspect of container management, so it is useful to know how to create them.

    There are two ways to map persistent storage to your containers; container volumes, and directory overlays. All of our images reference persistent data by means of directory overlays.

    Mapping a volume to your container

    Firstly, you must understand which directories from within your container you wish to persist. All of our images come with side-by-side documentation on which internal directories are used by the application. As mentioned in the Running our Containers documentation, the most common directory you will wish to persist is the /config directory.

    Before you create your container, first create a directory on the host machine that will act as the home for your persisted data. We recommend creating the directory /opt/appdata. Under this tree, you can create a single configuration directory for each of your containers.

    When creating the container itself, now is the time to make use of the -v flag, which will tell Docker to overlay your host directory over the container's directory:

    docker create --name my_container \
         -v /opt/appdata/my_config:/config \
         linuxserver/<an_image>
    -

    The above example shows how the usage of -v has mapped the host machine's /opt/appdata/my_config directory over the container's internal /config directory.

    Remember: When dealing with mapping overlays, it always reads host:container

    You can do this for as many directories as required by either you or the container itself. Our rule-of-thumb is to always map the /config directory as this contains pertinent runtime configuration for the underlying application. For applications that require further data, such as media, our documentation will clearly indicate which internal directories need mapping.

    \ No newline at end of file +

    The above example shows how the usage of -v has mapped the host machine's /opt/appdata/my_config directory over the container's internal /config directory.

    Remember: When dealing with mapping overlays, it always reads host:container

    You can do this for as many directories as required by either you or the container itself. Our rule-of-thumb is to always map the /config directory as this contains pertinent runtime configuration for the underlying application. For applications that require further data, such as media, our documentation will clearly indicate which internal directories need mapping.

    \ No newline at end of file diff --git a/images/docker-adguardhome-sync/index.html b/images/docker-adguardhome-sync/index.html index e5c4ba78a4..ebcf1a3143 100644 --- a/images/docker-adguardhome-sync/index.html +++ b/images/docker-adguardhome-sync/index.html @@ -1,4 +1,4 @@ - adguardhome-sync - LinuxServer.io

    linuxserver/adguardhome-sync

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Adguardhome-sync is a tool to synchronize AdGuardHome config to replica instances.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/adguardhome-sync:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases from GitHub

    Application Setup

    Edit the adguardhome-sync.yaml with your AdGuardHome instance details, for more information check out AdGuardHome Sync.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + adguardhome-sync - LinuxServer.io       

    linuxserver/adguardhome-sync

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Adguardhome-sync is a tool to synchronize AdGuardHome config to replica instances.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/adguardhome-sync:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases from GitHub

    Application Setup

    Edit the adguardhome-sync.yaml with your AdGuardHome instance details, for more information check out AdGuardHome Sync.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       adguardhome-sync:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 Port for AdGuardHome Sync's web API.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York
    CONFIGFILE=/config/adguardhome-sync.yaml Set a custom config file.

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it adguardhome-sync /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f adguardhome-sync
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' adguardhome-sync
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/adguardhome-sync:latest

    Versions

    • 03.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 18.12.21: - Rebase to Alpine 3.15.
    • 09.08.21: - Rebase to Alpine 3.14.
    • 08.04.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it adguardhome-sync /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f adguardhome-sync
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' adguardhome-sync
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/adguardhome-sync:latest

    Versions

    • 03.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 18.12.21: - Rebase to Alpine 3.15.
    • 09.08.21: - Rebase to Alpine 3.14.
    • 08.04.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-airsonic-advanced/index.html b/images/docker-airsonic-advanced/index.html index 400c9ec583..6d779edc92 100644 --- a/images/docker-airsonic-advanced/index.html +++ b/images/docker-airsonic-advanced/index.html @@ -1,4 +1,4 @@ - airsonic-advanced - LinuxServer.io

    linuxserver/airsonic-advanced

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Airsonic-advanced is a free, web-based media streamer, providing ubiquitious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/airsonic-advanced:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Latest releases of Airsonic-Advanced

    Application Setup

    We don't formally support upgrading from Airsonic to Airsonic Advanced, it may or may not work for you and we'd recommend making backups before attempting this. Following the upgrade you may experience a forced rescan of your library so take this into account if you have a lot of files.

    Please see notes about upgrading from v10 to v11 here

    Access WebUI at <your-ip>:4040.

    Default user/pass is admin/admin

    Extra java options can be passed with the JAVA_OPTS environment variable, eg -e JAVA_OPTS="-Xmx256m -Xms256m". For some reverse proxies, you may need to pass JAVA_OPTS=-Dserver.use-forward-headers=true for airsonic to generate the proper URL schemes.

    Note that if you want to use Airsonic's Java jukebox player, then PGID will need to match the group of your sound device (e.g. /dev/snd).

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + airsonic-advanced - LinuxServer.io       

    linuxserver/airsonic-advanced

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Airsonic-advanced is a free, web-based media streamer, providing ubiquitious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/airsonic-advanced:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Latest releases of Airsonic-Advanced

    Application Setup

    We don't formally support upgrading from Airsonic to Airsonic Advanced, it may or may not work for you and we'd recommend making backups before attempting this. Following the upgrade you may experience a forced rescan of your library so take this into account if you have a lot of files.

    Please see notes about upgrading from v10 to v11 here

    Access WebUI at <your-ip>:4040.

    Default user/pass is admin/admin

    Extra java options can be passed with the JAVA_OPTS environment variable, eg -e JAVA_OPTS="-Xmx256m -Xms256m". For some reverse proxies, you may need to pass JAVA_OPTS=-Dserver.use-forward-headers=true for airsonic to generate the proper URL schemes.

    Note that if you want to use Airsonic's Java jukebox player, then PGID will need to match the group of your sound device (e.g. /dev/snd).

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       airsonic-advanced:
    @@ -40,4 +40,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    4040 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    CONTEXT_PATH=<URL_BASE> For setting url-base in reverse proxy setups.
    JAVA_OPTS=<options> For passing additional java options.

    Volume Mappings (-v)

    Volume Function
    /config Configuration file location.
    /music Location of music.
    /playlists Location for playlists to be saved to.
    /podcasts Location of podcasts.
    /media Location of other media.

    Device Mappings (--device)

    Parameter Function
    /dev/snd Only needed to pass your host sound device to Airsonic's Java jukebox player.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it airsonic-advanced /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f airsonic-advanced
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' airsonic-advanced
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/airsonic-advanced:latest

    Versions

    • 23.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 25.07.22: - Add vorbis-tools.
    • 02.01.22: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it airsonic-advanced /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f airsonic-advanced
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' airsonic-advanced
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/airsonic-advanced:latest

    Versions

    • 23.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 25.07.22: - Add vorbis-tools.
    • 02.01.22: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-airsonic/index.html b/images/docker-airsonic/index.html index 26e4a0520b..fc3b13b64b 100644 --- a/images/docker-airsonic/index.html +++ b/images/docker-airsonic/index.html @@ -1,4 +1,4 @@ - airsonic - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend our airsonic-advanced image instead: https://github.com/linuxserver/docker-airsonic-advanced

    linuxserver/airsonic

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Airsonic is a free, web-based media streamer, providing ubiquitious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/airsonic should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Application Setup

    Access WebUI at <your-ip>:4040.

    Default user/pass is admin/admin

    Extra java options can be passed with the JAVA_OPTS environment variable, eg -e JAVA_OPTS="-Xmx256m -Xms256m". For some reverse proxies, you may need to pass JAVA_OPTS=-Dserver.use-forward-headers=true for airsonic to generate the proper URL schemes.

    Note that if you want to use Airsonic's Java jukebox player, then PGID will need to match the group of your sound device (e.g. /dev/snd).

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + airsonic - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend our airsonic-advanced image instead: https://github.com/linuxserver/docker-airsonic-advanced

    linuxserver/airsonic

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Airsonic is a free, web-based media streamer, providing ubiquitious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/airsonic should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Application Setup

    Access WebUI at <your-ip>:4040.

    Default user/pass is admin/admin

    Extra java options can be passed with the JAVA_OPTS environment variable, eg -e JAVA_OPTS="-Xmx256m -Xms256m". For some reverse proxies, you may need to pass JAVA_OPTS=-Dserver.use-forward-headers=true for airsonic to generate the proper URL schemes.

    Note that if you want to use Airsonic's Java jukebox player, then PGID will need to match the group of your sound device (e.g. /dev/snd).

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       airsonic:
    @@ -40,4 +40,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    4040 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    CONTEXT_PATH=<URL_BASE> For setting url-base in reverse proxy setups.
    JAVA_OPTS=<options> For passing additional java options.

    Volume Mappings (-v)

    Volume Function
    /config Configuration file location.
    /music Location of music.
    /playlists Location for playlists to be saved to.
    /podcasts Location of podcasts.
    /media Location of other media.

    Device Mappings (--device)

    Parameter Function
    /dev/snd Only needed to pass your host sound device to Airsonic's Java jukebox player.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it airsonic /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f airsonic
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' airsonic
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/airsonic

    Versions

    • 13.01.22: - Deprecate in favor of airsonic-advanced.
    • 24.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 05.01.19: - Linting fixes.
    • 27.08.18: - Use new inhouse java baseimage for quicker builds.
    • 23.08.18: - Rebase to ubuntu bionic for increased performance across all arch's.
    • 22.04.18: - Add the forgotten JAVA_OPTS to the run command.
    • 29.12.17: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it airsonic /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f airsonic
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' airsonic
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/airsonic

    Versions

    • 13.01.22: - Deprecate in favor of airsonic-advanced.
    • 24.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 05.01.19: - Linting fixes.
    • 27.08.18: - Use new inhouse java baseimage for quicker builds.
    • 23.08.18: - Rebase to ubuntu bionic for increased performance across all arch's.
    • 22.04.18: - Add the forgotten JAVA_OPTS to the run command.
    • 29.12.17: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-apprise-api/index.html b/images/docker-apprise-api/index.html index 8879be4e00..42b22d5b4f 100644 --- a/images/docker-apprise-api/index.html +++ b/images/docker-apprise-api/index.html @@ -1,4 +1,4 @@ - apprise-api - LinuxServer.io

    linuxserver/apprise-api

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Apprise-api Takes advantage of Apprise through your network with a user-friendly API.

    • Send notifications to more then 65+ services.
    • An incredibly lightweight gateway to Apprise.
    • A production ready micro-service at your disposal.

    Apprise API was designed to easily fit into existing (and new) eco-systems that are looking for a simple notification solution.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/apprise-api:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + apprise-api - LinuxServer.io       

    linuxserver/apprise-api

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Apprise-api Takes advantage of Apprise through your network with a user-friendly API.

    • Send notifications to more then 65+ services.
    • An incredibly lightweight gateway to Apprise.
    • A production ready micro-service at your disposal.

    Apprise API was designed to easily fit into existing (and new) eco-systems that are looking for a simple notification solution.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/apprise-api:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       apprise-api:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 Port for apprise's interface and API.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where config is stored.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it apprise-api /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f apprise-api
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' apprise-api
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/apprise-api:latest

    Versions

    • 17.10.22: - Rebase to alpine 3.16, migrate to S6V3
    • 28.02.21: - Rebase to alpine 3.15.
    • 03.11.21: - Increase uWSGI buffer size to 32kb.
    • 16.05.21: - Add linuxserver wheel index.
    • 26.02.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it apprise-api /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f apprise-api
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' apprise-api
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/apprise-api:latest

    Versions

    • 17.10.22: - Rebase to alpine 3.16, migrate to S6V3
    • 28.02.21: - Rebase to alpine 3.15.
    • 03.11.21: - Increase uWSGI buffer size to 32kb.
    • 16.05.21: - Add linuxserver wheel index.
    • 26.02.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-audacity/index.html b/images/docker-audacity/index.html index 843b3380a9..32e989b959 100644 --- a/images/docker-audacity/index.html +++ b/images/docker-audacity/index.html @@ -1,4 +1,4 @@ - audacity - LinuxServer.io

    linuxserver/audacity

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Audacity is an easy-to-use, multi-track audio editor and recorder. Developed by a group of volunteers as open source.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/audacity:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64
    armhf

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + audacity - LinuxServer.io       

    linuxserver/audacity

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Audacity is an easy-to-use, multi-track audio editor and recorder. Developed by a group of volunteers as open source.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/audacity:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64
    armhf

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       audacity:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Audacity desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores program settings and images

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it audacity /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f audacity
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' audacity
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/audacity:latest

    Versions

    • 14.09.21: - Use the official appimage, switch to single arch (x86_64). Armhf and aarch64 users can remain on version 3.0.2 but there won't be further updates.
    • 07.04.21: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it audacity /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f audacity
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' audacity
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/audacity:latest

    Versions

    • 14.09.21: - Use the official appimage, switch to single arch (x86_64). Armhf and aarch64 users can remain on version 3.0.2 but there won't be further updates.
    • 07.04.21: - Initial release.
    \ No newline at end of file diff --git a/images/docker-babybuddy/index.html b/images/docker-babybuddy/index.html index 44a73a6530..d18f416cb3 100644 --- a/images/docker-babybuddy/index.html +++ b/images/docker-babybuddy/index.html @@ -1,4 +1,4 @@ - babybuddy - LinuxServer.io

    linuxserver/babybuddy

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Babybuddy is a buddy for babies! Helps caregivers track sleep, feedings, diaper changes, tummy time and more to learn about and predict baby's needs without (as much) guess work.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/babybuddy:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at <your-ip>:8000 (or whichever host port is mapped in docker arguments). The default user/pass are admin:admin.

    By default BabyBuddy uses sqlite3. To use an external database like postgresql or mysql/mariadb instead, you can use the environment variables listed in BabyBuddy docs.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + babybuddy - LinuxServer.io       

    linuxserver/babybuddy

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Babybuddy is a buddy for babies! Helps caregivers track sleep, feedings, diaper changes, tummy time and more to learn about and predict baby's needs without (as much) guess work.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/babybuddy:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at <your-ip>:8000 (or whichever host port is mapped in docker arguments). The default user/pass are admin:admin.

    By default BabyBuddy uses sqlite3. To use an external database like postgresql or mysql/mariadb instead, you can use the environment variables listed in BabyBuddy docs.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       babybuddy:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 the port for the web ui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    CSRF_TRUSTED_ORIGINS=http://127.0.0.1:8000,https://babybuddy.domain.com Add any address you'd like to access babybuddy at (comma separated, no spaces)

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration and data.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it babybuddy /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f babybuddy
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' babybuddy
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/babybuddy:latest

    Versions

    • 23.11.22: - Rebase to Alpine 3.16, migrate to s6v3. Restructure nginx configs (see changes announcement).
    • 28.05.22: - Add missing PUID/PGID vars to readme.
    • 03.04.22: - Rebase to alpine-nginx baseimage. Add CSRF_TRUSTED_ORIGINS env var.
    • 11.12.21: - Add py3-mysqlclient for mysql/mariadb.
    • 14.11.21: - Add lxml dependencies (temp fix for amd64 by force compiling lxml).
    • 25.07.21: - Add libpq for postgresql.
    • 08.07.21: - Fix pip install issue.
    • 05.07.21: - Update Gunicorn parameters to prevent WORKER_TIMEOUT issue.
    • 22.06.21: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it babybuddy /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f babybuddy
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' babybuddy
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/babybuddy:latest

    Versions

    • 23.11.22: - Rebase to Alpine 3.16, migrate to s6v3. Restructure nginx configs (see changes announcement).
    • 28.05.22: - Add missing PUID/PGID vars to readme.
    • 03.04.22: - Rebase to alpine-nginx baseimage. Add CSRF_TRUSTED_ORIGINS env var.
    • 11.12.21: - Add py3-mysqlclient for mysql/mariadb.
    • 14.11.21: - Add lxml dependencies (temp fix for amd64 by force compiling lxml).
    • 25.07.21: - Add libpq for postgresql.
    • 08.07.21: - Fix pip install issue.
    • 05.07.21: - Update Gunicorn parameters to prevent WORKER_TIMEOUT issue.
    • 22.06.21: - Initial release.
    \ No newline at end of file diff --git a/images/docker-base-alpine-example/index.html b/images/docker-base-alpine-example/index.html index fa00c0e533..bf202c1a3f 100644 --- a/images/docker-base-alpine-example/index.html +++ b/images/docker-base-alpine-example/index.html @@ -1 +1 @@ - Docker base alpine example - LinuxServer.io

    Docker base alpine example

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum Linuserver.io forum

       

    A custom base image built with Alpine linux and S6 overlay..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file + Docker base alpine example - LinuxServer.io

    Docker base alpine example

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum Linuserver.io forum

       

    A custom base image built with Alpine linux and S6 overlay..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-base-ubuntu-example/index.html b/images/docker-base-ubuntu-example/index.html index c403eb2bcb..879ce6978f 100644 --- a/images/docker-base-ubuntu-example/index.html +++ b/images/docker-base-ubuntu-example/index.html @@ -1 +1 @@ - Docker base ubuntu example - LinuxServer.io

    Docker base ubuntu example

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum Linuserver.io forum

       

    A custom base image built with Ubuntu cloud image and S6 overlay..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file + Docker base ubuntu example - LinuxServer.io

    Docker base ubuntu example

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum Linuserver.io forum

       

    A custom base image built with Ubuntu cloud image and S6 overlay..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-baseimage-alpine-nginx/index.html b/images/docker-baseimage-alpine-nginx/index.html index 93158197c2..4e1bf6ba85 100644 --- a/images/docker-baseimage-alpine-nginx/index.html +++ b/images/docker-baseimage-alpine-nginx/index.html @@ -1 +1 @@ - baseimage-alpine-nginx - LinuxServer.io

    baseimage-alpine-nginx

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Alpine linux, nginx and S6 overlay..

    Featuring :-

    • weekly updates
    • security updates

    The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }

    \ No newline at end of file + baseimage-alpine-nginx - LinuxServer.io

    baseimage-alpine-nginx

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Alpine linux, nginx and S6 overlay..

    Featuring :-

    • weekly updates
    • security updates

    The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }

    \ No newline at end of file diff --git a/images/docker-baseimage-alpine-python/index.html b/images/docker-baseimage-alpine-python/index.html index 66d234192d..3cabb7ad93 100644 --- a/images/docker-baseimage-alpine-python/index.html +++ b/images/docker-baseimage-alpine-python/index.html @@ -1 +1 @@ - baseimage-alpine-python - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend our standard alpine baseimage instead: https://github.com/linuxserver/docker-baseimage-alpine

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Alpine linux, python2 and S6 overlay..

    Featuring :-

    • weekly updates
    • security updates

    The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }

    \ No newline at end of file + baseimage-alpine-python - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend our standard alpine baseimage instead: https://github.com/linuxserver/docker-baseimage-alpine

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Alpine linux, python2 and S6 overlay..

    Featuring :-

    • weekly updates
    • security updates

    The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }

    \ No newline at end of file diff --git a/images/docker-baseimage-alpine/index.html b/images/docker-baseimage-alpine/index.html index 10c920e028..eb11553cf3 100644 --- a/images/docker-baseimage-alpine/index.html +++ b/images/docker-baseimage-alpine/index.html @@ -1 +1 @@ - baseimage-alpine - LinuxServer.io

    baseimage-alpine

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC libera at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Alpine linux and S6 overlay..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file + baseimage-alpine - LinuxServer.io

    baseimage-alpine

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC libera at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Alpine linux and S6 overlay..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-baseimage-arch/index.html b/images/docker-baseimage-arch/index.html index b861a0654d..231011546c 100644 --- a/images/docker-baseimage-arch/index.html +++ b/images/docker-baseimage-arch/index.html @@ -1 +1 @@ - baseimage-arch - LinuxServer.io

    baseimage-arch

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Alpine linux and S6 overlay..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file + baseimage-arch - LinuxServer.io

    baseimage-arch

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Alpine linux and S6 overlay..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-baseimage-cloud9/index.html b/images/docker-baseimage-cloud9/index.html index 1dbf3636d2..c29eda1103 100644 --- a/images/docker-baseimage-cloud9/index.html +++ b/images/docker-baseimage-cloud9/index.html @@ -1 +1 @@ - baseimage-cloud9 - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Ubuntu linux and Cloud9..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file + baseimage-cloud9 - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Ubuntu linux and Cloud9..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-baseimage-fedora/index.html b/images/docker-baseimage-fedora/index.html index 06cc99a01b..33aa8d5892 100644 --- a/images/docker-baseimage-fedora/index.html +++ b/images/docker-baseimage-fedora/index.html @@ -1 +1 @@ - baseimage-fedora - LinuxServer.io

    baseimage-fedora

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Alpine linux and S6 overlay..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file + baseimage-fedora - LinuxServer.io

    baseimage-fedora

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Alpine linux and S6 overlay..

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-baseimage-guacgui/index.html b/images/docker-baseimage-guacgui/index.html index 1780b58d41..2de98e6666 100644 --- a/images/docker-baseimage-guacgui/index.html +++ b/images/docker-baseimage-guacgui/index.html @@ -1,4 +1,4 @@ - baseimage-guacgui - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver.io

    Contact information:

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

     

    linuxserver/docker-baseimage-guacgui

    A custom graphical base image built with: * Ubuntu cloud image * S6 overlay * xrdp * xorgxrdp * openbox * guacamole

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/docker-baseimage-guacgui should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container.

    docker

    docker create \
    + baseimage-guacgui - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver.io

    Contact information:

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

     

    linuxserver/docker-baseimage-guacgui

    A custom graphical base image built with: * Ubuntu cloud image * S6 overlay * xrdp * xorgxrdp * openbox * guacamole

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/docker-baseimage-guacgui should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container.

    docker

    docker create \
       --name=docker-baseimage-guacgui \
       -e PUID=1000 \
       -e PGID=1000 \
    @@ -34,4 +34,4 @@ services:
         restart: unless-stopped
     

    Parameters

    Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Parameter Function
    -p 8080 Allows HTTP access to the internal X server.
    -p 3389 Allows RDP access to the internal X server.
    -e PUID=1000 for UserID - see below for explanation
    -e PGID=1000 for GroupID - see below for explanation
    -e TZ=Europe/London Specify a timezone to use EG Europe/London
    -e APPNAME=xclock Specify the graphical application name shown on RDP access.
    -e GUAC_USER=abc Specify the username for guacamole's web interface.
    -e GUAC_PASS=900150983cd24fb0d6963f7d28e17f72 Specify the password's md5 hash for guacamole's web interface.
    -e GUAC_KEYBOARD_LAYOUT=de-de-qwertz Specify the used keyboard layout for the RDP session used by the gucamole client. Possible values are "en-us-qwerty" (default), de-de-qwertz (German keyboard (qwertz)), fr-fr-azerty (French keyboard (azerty)), fr-ch-qwertz (Swiss French keyboard (qwertz)), it-it-qwerty (Italian keyboard), ja-jp-qwerty (Japanese keyboard) and sv-se-qwerty (Swedish keyboard).
    -v /config Contains X user's home directory contents.

     

    Application Setup

    This is a baseimage meant to be used as base for graphical applications. Please refer to the example folder for usage.  
    If GUAC_USER and GUAC_PASS are not set, there is no authentication. Passwords can be generated via the following:

    echo -n password | openssl md5
     
    printf '%s' password | md5sum
    -

    Please beware this image is not hardened for internet usage. Use a reverse ssl proxy to increase security.

    The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }

    \ No newline at end of file +

    Please beware this image is not hardened for internet usage. Use a reverse ssl proxy to increase security.

    The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }

    \ No newline at end of file diff --git a/images/docker-baseimage-gui/index.html b/images/docker-baseimage-gui/index.html index 7410cadef9..bd3f1ba7ae 100644 --- a/images/docker-baseimage-gui/index.html +++ b/images/docker-baseimage-gui/index.html @@ -1,4 +1,4 @@ - baseimage-gui - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver.io

    Contact information:

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

     

    linuxserver/docker-baseimage-gui

    A custom graphical base image built with: * Ubuntu cloud image * S6 overlay * xrdp * xorgxrdp * openbox

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lsiobase/nginx should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here is an example to help you get started creating a graphical container.

    Dockerfile

    #Firefox via RDP
    + baseimage-gui - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver.io

    Contact information:

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

     

    linuxserver/docker-baseimage-gui

    A custom graphical base image built with: * Ubuntu cloud image * S6 overlay * xrdp * xorgxrdp * openbox

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lsiobase/nginx should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here is an example to help you get started creating a graphical container.

    Dockerfile

    #Firefox via RDP
     FROM lsiobase/ubuntu-gui:amd64-latest
     
     #########################################
    @@ -36,4 +36,4 @@ s6-env DISPLAY=:1 HOME=/config
     
     # Execute Firefox
     /usr/bin/firefox
    -

    Access the Graphical Interface

    Use an RDP client such as: * Remmina * Microsoft Remote Deskotp Client

    The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }

    \ No newline at end of file +

    Access the Graphical Interface

    Use an RDP client such as: * Remmina * Microsoft Remote Deskotp Client

    The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }

    \ No newline at end of file diff --git a/images/docker-baseimage-mono/index.html b/images/docker-baseimage-mono/index.html index 0416876b61..a8f842417f 100644 --- a/images/docker-baseimage-mono/index.html +++ b/images/docker-baseimage-mono/index.html @@ -1 +1 @@ - baseimage-mono - LinuxServer.io

    baseimage-mono

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Ubuntu cloud image, mono and S6 overlay..

    Featuring :-

    • weekly updates
    • security updates

    The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }

    \ No newline at end of file + baseimage-mono - LinuxServer.io

    baseimage-mono

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Ubuntu cloud image, mono and S6 overlay..

    Featuring :-

    • weekly updates
    • security updates

    The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }

    \ No newline at end of file diff --git a/images/docker-baseimage-rdesktop-web/index.html b/images/docker-baseimage-rdesktop-web/index.html index ed026cda71..edd35f01fc 100644 --- a/images/docker-baseimage-rdesktop-web/index.html +++ b/images/docker-baseimage-rdesktop-web/index.html @@ -1 +1 @@ - baseimage-rdesktop-web - LinuxServer.io

    baseimage-rdesktop-web

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Ubuntu linux and xrdp

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file + baseimage-rdesktop-web - LinuxServer.io

    baseimage-rdesktop-web

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Ubuntu linux and xrdp

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-baseimage-rdesktop/index.html b/images/docker-baseimage-rdesktop/index.html index 042c4087ed..73fda2436c 100644 --- a/images/docker-baseimage-rdesktop/index.html +++ b/images/docker-baseimage-rdesktop/index.html @@ -1 +1 @@ - baseimage-rdesktop - LinuxServer.io

    baseimage-rdesktop

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Ubuntu linux and xrdp

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file + baseimage-rdesktop - LinuxServer.io

    baseimage-rdesktop

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    IRC freenode at #linuxserver.io more information at:- IRC
    Forum LinuxServer.io forum

       

    A custom base image built with Ubuntu linux and xrdp

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-bazarr/index.html b/images/docker-bazarr/index.html index 96690253b3..460fd62dcf 100644 --- a/images/docker-bazarr/index.html +++ b/images/docker-bazarr/index.html @@ -1,4 +1,4 @@ - bazarr - LinuxServer.io

    linuxserver/bazarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Bazarr is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/bazarr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases from Bazarr
    development Pre-releases from Bazarr

    Application Setup

    • Once running the URL will be http://<host-ip>:6767.
    • You must complete all the setup parameters in the webui before you can save the config.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + bazarr - LinuxServer.io       

    linuxserver/bazarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Bazarr is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/bazarr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases from Bazarr
    development Pre-releases from Bazarr

    Application Setup

    • Once running the URL will be http://<host-ip>:6767.
    • You must complete all the setup parameters in the webui before you can save the config.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       bazarr:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    6767 Allows HTTP access to the internal webserver.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Bazarr data
    /movies Location of your movies
    /tv Location of your TV Shows

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it bazarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f bazarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' bazarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/bazarr:latest

    Versions

    • 11.10.22: - Rebase master branch to Alpine 3.16, migrate to s6v3.
    • 15.15.21: - Temp fix for lxml, compile from scratch to avoid broken official wheel.
    • 25.10.21: - Rebase to alpine 3.14. Fix numpy wheel.
    • 22.10.21: - Added openblas package to prevent numpy error.
    • 16.05.21: - Use wheel index.
    • 19.04.21: - Install from release zip.
    • 07.04.21: - Move app to /app/bazarr/bin, add package_info.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 23.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 13.05.20: - Add donation links for Bazarr to Github sponsors button and container log.
    • 08.04.20: - Removed /movies and /tv volumes from Dockerfiles.
    • 28.12.19: - Upgrade to Python 3.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 13.06.19: - Add env variable for setting umask.
    • 12.06.19: - Swap to install deps using maintainers requirements.txt, add ffmpeg for ffprobe.
    • 17.04.19: - Add default UTC timezone if user does not set it.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.09.18: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it bazarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f bazarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' bazarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/bazarr:latest

    Versions

    • 11.10.22: - Rebase master branch to Alpine 3.16, migrate to s6v3.
    • 15.15.21: - Temp fix for lxml, compile from scratch to avoid broken official wheel.
    • 25.10.21: - Rebase to alpine 3.14. Fix numpy wheel.
    • 22.10.21: - Added openblas package to prevent numpy error.
    • 16.05.21: - Use wheel index.
    • 19.04.21: - Install from release zip.
    • 07.04.21: - Move app to /app/bazarr/bin, add package_info.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 23.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 13.05.20: - Add donation links for Bazarr to Github sponsors button and container log.
    • 08.04.20: - Removed /movies and /tv volumes from Dockerfiles.
    • 28.12.19: - Upgrade to Python 3.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 13.06.19: - Add env variable for setting umask.
    • 12.06.19: - Swap to install deps using maintainers requirements.txt, add ffmpeg for ffprobe.
    • 17.04.19: - Add default UTC timezone if user does not set it.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.09.18: - Initial release.
    \ No newline at end of file diff --git a/images/docker-beets/index.html b/images/docker-beets/index.html index 84c48cb0f4..bc2814bebe 100644 --- a/images/docker-beets/index.html +++ b/images/docker-beets/index.html @@ -1,4 +1,4 @@ - beets - LinuxServer.io

    linuxserver/beets

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Beets is a music library manager and not, for the most part, a music player. It does include a simple player plugin and an experimental Web-based player, but it generally leaves actual sound-reproduction to specialized tools.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/beets:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Beets Releases
    nightly Built against head of Beets git, generally considered unstable but a likely choice for power users of the application.

    Application Setup

    Edit the config file in /config

    To edit the config from within the container use beet config -e

    For a command prompt as user abc docker exec -it -u abc beets bash

    See Beets for more info.

    Contains beets-extrafiles plugin, configuration details

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + beets - LinuxServer.io       

    linuxserver/beets

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Beets is a music library manager and not, for the most part, a music player. It does include a simple player plugin and an experimental Web-based player, but it generally leaves actual sound-reproduction to specialized tools.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/beets:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Beets Releases
    nightly Built against head of Beets git, generally considered unstable but a likely choice for power users of the application.

    Application Setup

    Edit the config file in /config

    To edit the config from within the container use beet config -e

    For a command prompt as user abc docker exec -it -u abc beets bash

    See Beets for more info.

    Contains beets-extrafiles plugin, configuration details

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       beets:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8337 Application WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.
    /music Music library
    /downloads Non processed music

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it beets /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f beets
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' beets
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/beets:latest

    Versions

    • 15.01.22: - Rebasing to alpine 3.15.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 12.05.19: - Add flac and mp3val binaries required for badfiles plugin.
    • 12.04.19: - Rebase to Alpine 3.9.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.03.19: - Swap copyartifacts for extrafiles, update endpoints with nightly tag.
    • 01.03.19: - Switch to python3.
    • 07.02.19: - Add fftw-dev build dependency for chromaprint.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 15.08.18: - Rebase to alpine 3.8, use alpine repo version of pylast.
    • 12.08.18: - Add requests pip package.
    • 04.03.18: - Upgrade mp3gain to 1.6.1.
    • 02.01.18: - Deprecate cpu_core routine lack of scaling.
    • 27.12.17: - Add beautifulsoup4 pip package.
    • 06.12.17: - Rebase to alpine linux 3.7.
    • 25.05.17: - Rebase to alpine linux 3.6.
    • 06.02.17: - Rebase to alpine linux 3.5.
    • 16.01.17: - Add packages required for replaygain.
    • 24.12.16: - Add beets-copyartifacts plugin.
    • 07.12.16: - Edit cmake options for chromaprint, should now build and install fpcalc, add gstreamer lib
    • 14.10.16: - Add version layer information.
    • 01.10.16: - Add nano and editor variable to allow editing of the config from the container command line.
    • 30.09.16: - Fix umask.
    • 24.09.16: - Rebase to alpine linux.
    • 10.09.16: - Add layer badges to README.
    • 05.01.16: - Change ffpmeg repository, other version crashes container
    • 06.11.15: - Initial Release
    • 29.11.15: - Take out term setting, causing issues with key entry for some users
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it beets /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f beets
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' beets
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/beets:latest

    Versions

    • 15.01.22: - Rebasing to alpine 3.15.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 12.05.19: - Add flac and mp3val binaries required for badfiles plugin.
    • 12.04.19: - Rebase to Alpine 3.9.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.03.19: - Swap copyartifacts for extrafiles, update endpoints with nightly tag.
    • 01.03.19: - Switch to python3.
    • 07.02.19: - Add fftw-dev build dependency for chromaprint.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 15.08.18: - Rebase to alpine 3.8, use alpine repo version of pylast.
    • 12.08.18: - Add requests pip package.
    • 04.03.18: - Upgrade mp3gain to 1.6.1.
    • 02.01.18: - Deprecate cpu_core routine lack of scaling.
    • 27.12.17: - Add beautifulsoup4 pip package.
    • 06.12.17: - Rebase to alpine linux 3.7.
    • 25.05.17: - Rebase to alpine linux 3.6.
    • 06.02.17: - Rebase to alpine linux 3.5.
    • 16.01.17: - Add packages required for replaygain.
    • 24.12.16: - Add beets-copyartifacts plugin.
    • 07.12.16: - Edit cmake options for chromaprint, should now build and install fpcalc, add gstreamer lib
    • 14.10.16: - Add version layer information.
    • 01.10.16: - Add nano and editor variable to allow editing of the config from the container command line.
    • 30.09.16: - Fix umask.
    • 24.09.16: - Rebase to alpine linux.
    • 10.09.16: - Add layer badges to README.
    • 05.01.16: - Change ffpmeg repository, other version crashes container
    • 06.11.15: - Initial Release
    • 29.11.15: - Take out term setting, causing issues with key entry for some users
    \ No newline at end of file diff --git a/images/docker-blender/index.html b/images/docker-blender/index.html index 1a17c85f24..a12ddc2918 100644 --- a/images/docker-blender/index.html +++ b/images/docker-blender/index.html @@ -1,4 +1,4 @@ - blender - LinuxServer.io

    linuxserver/blender

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Blender is a free and open-source 3D computer graphics software toolset used for creating animated films, visual effects, art, 3D printed models, motion graphics, interactive 3D applications, virtual reality, and computer games. This image does not support GPU rendering out of the box only accelerated workspace experience

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/blender:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at: * http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    You can also force login on the '/' path without this parameter by passing the environment variable -e AUTO_LOGIN=false.

    Hardware Acceleration

    This only applies to your desktop experience, this container is capable of supporting accelerated rendering with /dev/dri mounted in, but the AMD HIP and Nvidia CUDA runtimes are massive which are not installed by default in this container.

    Intel/ATI/AMD

    To leverage hardware acceleration you will need to mount /dev/dri video device inside of the conainer.

    --device=/dev/dri:/dev/dri
    + blender - LinuxServer.io       

    linuxserver/blender

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Blender is a free and open-source 3D computer graphics software toolset used for creating animated films, visual effects, art, 3D printed models, motion graphics, interactive 3D applications, virtual reality, and computer games. This image does not support GPU rendering out of the box only accelerated workspace experience

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/blender:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at: * http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    You can also force login on the '/' path without this parameter by passing the environment variable -e AUTO_LOGIN=false.

    Hardware Acceleration

    This only applies to your desktop experience, this container is capable of supporting accelerated rendering with /dev/dri mounted in, but the AMD HIP and Nvidia CUDA runtimes are massive which are not installed by default in this container.

    Intel/ATI/AMD

    To leverage hardware acceleration you will need to mount /dev/dri video device inside of the conainer.

    --device=/dev/dri:/dev/dri
     

    We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here: https://github.com/NVIDIA/nvidia-docker

    We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the container.

    Arm Devices

    Arm devices can run this image, but generally should not mount in /dev/dri. The OpenGL ES version is not high enough to run Blender. The program can run on these platforms though, leveraging CPU LLVMPipe rendering.

    Due to lack of arm32/64 binaries from the upstream project, our arm32/64 images install the latest version from the ubuntu repo, which is usually behind and thus the version the image is tagged with does not match the version contained.

    Keyboard Layouts

    This should match the layout on the computer you are accessing the container from. The keyboard layouts available for use are: * da-dk-qwerty- Danish keyboard * de-ch-qwertz- Swiss German keyboard (qwertz) * de-de-qwertz- German keyboard (qwertz) - OSK available * en-gb-qwerty- English (UK) keyboard * en-us-qwerty- English (US) keyboard - OSK available DEFAULT * es-es-qwerty- Spanish keyboard - OSK available * fr-ch-qwertz- Swiss French keyboard (qwertz) * fr-fr-azerty- French keyboard (azerty) - OSK available * it-it-qwerty- Italian keyboard - OSK available * ja-jp-qwerty- Japanese keyboard * pt-br-qwerty- Portuguese Brazilian keyboard * sv-se-qwerty- Swedish keyboard * tr-tr-qwerty- Turkish-Q keyboard

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
    @@ -36,4 +36,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Blender desktop gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    SUBFOLDER=/ Specify a subfolder to use with reverse proxies, IE /subfolder/
    KEYBOARD=en-us-qwerty See the keyboard layouts section for more information and options.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores local files and settings

    Device Mappings (--device)

    Parameter Function
    /dev/dri Add this for hardware acceleration (Linux hosts only)

    Miscellaneous Options

    Parameter Function
    --security-opt seccomp=unconfined For Docker Engine only, this may be required depending on your Docker and storage configuration.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it blender /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f blender
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' blender
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/blender:latest

    Versions

    • 06.05.22: - Use the full semver version in image tags. Arm32/64 version tags are inaccurate due to installing from ubuntu repo, which is usually behind.
    • 12.03.22: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it blender /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f blender
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' blender
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/blender:latest

    Versions

    • 06.05.22: - Use the full semver version in image tags. Arm32/64 version tags are inaccurate due to installing from ubuntu repo, which is usually behind.
    • 12.03.22: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-boinc/index.html b/images/docker-boinc/index.html index e24c4a1dd6..74301903ac 100644 --- a/images/docker-boinc/index.html +++ b/images/docker-boinc/index.html @@ -1,4 +1,4 @@ - boinc - LinuxServer.io

    linuxserver/boinc

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    BOINC is a platform for high-throughput computing on a large scale (thousands or millions of computers). It can be used for volunteer computing (using consumer devices) or grid computing (using organizational resources). It supports virtualized, parallel, and GPU-based applications.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/boinc:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This image sets up the BOINC client and manager and makes its interface available via Guacamole server in the browser. The interface is available at http://your-ip:8080.

    By default, there is no password set for the main gui. Optional environment variable PASSWORD will allow setting a password for the user abc.

    You can access advanced features of the Guacamole remote desktop using ctrl+alt+shift enabling you to use remote copy/paste and different languages.

    It is recommended to switch to Advanced View in the top menu, because the Computing Preferences don't seem to be displayed in Simple View.

    Sometimes, the pop-up windows may open in a tiny box in the upper left corner of the screen. When that happens, you can find the corner and resize them.

    GPU Hardware Acceleration

    Intel

    Hardware acceleration users for Intel Quicksync will need to mount their /dev/dri video device inside of the container by passing the following command when running or creating the container: --device=/dev/dri:/dev/dri We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here: https://github.com/NVIDIA/nvidia-docker We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the BOINC docker container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + boinc - LinuxServer.io       

    linuxserver/boinc

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    BOINC is a platform for high-throughput computing on a large scale (thousands or millions of computers). It can be used for volunteer computing (using consumer devices) or grid computing (using organizational resources). It supports virtualized, parallel, and GPU-based applications.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/boinc:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This image sets up the BOINC client and manager and makes its interface available via Guacamole server in the browser. The interface is available at http://your-ip:8080.

    By default, there is no password set for the main gui. Optional environment variable PASSWORD will allow setting a password for the user abc.

    You can access advanced features of the Guacamole remote desktop using ctrl+alt+shift enabling you to use remote copy/paste and different languages.

    It is recommended to switch to Advanced View in the top menu, because the Computing Preferences don't seem to be displayed in Simple View.

    Sometimes, the pop-up windows may open in a tiny box in the upper left corner of the screen. When that happens, you can find the corner and resize them.

    GPU Hardware Acceleration

    Intel

    Hardware acceleration users for Intel Quicksync will need to mount their /dev/dri video device inside of the container by passing the following command when running or creating the container: --device=/dev/dri:/dev/dri We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here: https://github.com/NVIDIA/nvidia-docker We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the BOINC docker container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       boinc:
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 Boinc desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    PASSWORD= Optionally set a password for the gui.

    Volume Mappings (-v)

    Volume Function
    /config Where BOINC should store its database and config.

    Device Mappings (--device)

    Parameter Function
    /dev/dri Only needed if you want to use your Intel GPU (vaapi).

    Miscellaneous Options

    Parameter Function
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function as syscalls are unkown to Docker.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it boinc /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f boinc
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' boinc
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/boinc:latest

    Versions

    • 14.11.22: - Fix opencl driver.
    • 18.09.22: - Rebase to jammy.
    • 24.02.22: - Rebase to focal.
    • 31.01.22: - Improve device permissions setting verbosity.
    • 23.03.21: - Rebase to rdesktop-web baseimage. Deprecate GUAC_USER and GUAC_PASS env vars. Existing users can set the new var PASSWORD for the user abc.
    • 01.04.20: - Install boinc from ppa.
    • 17.03.20: - Add armhf and aarch64 builds and switch to multi-arch image.
    • 16.03.20: - Clean up old pid files.
    • 15.03.20: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it boinc /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f boinc
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' boinc
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/boinc:latest

    Versions

    • 14.11.22: - Fix opencl driver.
    • 18.09.22: - Rebase to jammy.
    • 24.02.22: - Rebase to focal.
    • 31.01.22: - Improve device permissions setting verbosity.
    • 23.03.21: - Rebase to rdesktop-web baseimage. Deprecate GUAC_USER and GUAC_PASS env vars. Existing users can set the new var PASSWORD for the user abc.
    • 01.04.20: - Install boinc from ppa.
    • 17.03.20: - Add armhf and aarch64 builds and switch to multi-arch image.
    • 16.03.20: - Clean up old pid files.
    • 15.03.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-booksonic-air/index.html b/images/docker-booksonic-air/index.html index 2d7456f00e..ab82befd8d 100644 --- a/images/docker-booksonic-air/index.html +++ b/images/docker-booksonic-air/index.html @@ -1,4 +1,4 @@ - booksonic-air - LinuxServer.io

    linuxserver/booksonic-air

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Booksonic-air is a platform for accessing the audiobooks you own wherever you are. At the moment the platform consists of: * Booksonic Air - A server for streaming your audiobooks, successor to the original Booksonic server and based on Airsonic. * Booksonic App - An DSub based Android app for connection to Booksonic-Air servers.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/booksonic-air:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable booksonic-air releases

    Application Setup

    Whilst this is a more up to date rebase of the original Booksonic server, upgrading in place is not supported and a fresh install has been recommended. Default user/pass is admin/admin

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + booksonic-air - LinuxServer.io       

    linuxserver/booksonic-air

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Booksonic-air is a platform for accessing the audiobooks you own wherever you are. At the moment the platform consists of: * Booksonic Air - A server for streaming your audiobooks, successor to the original Booksonic server and based on Airsonic. * Booksonic App - An DSub based Android app for connection to Booksonic-Air servers.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/booksonic-air:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable booksonic-air releases

    Application Setup

    Whilst this is a more up to date rebase of the original Booksonic server, upgrading in place is not supported and a fresh install has been recommended. Default user/pass is admin/admin

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       booksonic-air:
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    4040 Application WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    CONTEXT_PATH=url-base Base url for use with reverse proxies etc.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.
    /audiobooks Audiobooks.
    /podcasts Podcasts.
    /othermedia Other media.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it booksonic-air /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f booksonic-air
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' booksonic-air
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/booksonic-air:latest

    Versions

    • 18.04.22: - Rebase to Alpine 3.15.
    • 15.09.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it booksonic-air /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f booksonic-air
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' booksonic-air
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/booksonic-air:latest

    Versions

    • 18.04.22: - Rebase to Alpine 3.15.
    • 15.09.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-booksonic/index.html b/images/docker-booksonic/index.html index e3580cc923..bf81189bd6 100644 --- a/images/docker-booksonic/index.html +++ b/images/docker-booksonic/index.html @@ -1,4 +1,4 @@ - booksonic - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. Please migrate to https://github.com/linuxserver/docker-booksonic-air

    linuxserver/booksonic

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Booksonic is a server and an app for streaming your audiobooks to any pc or android phone. Most of the functionality is also availiable on other platforms that have apps for subsonic.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/booksonic should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Version Tags

    This image provides various versions that are available via tags. latest tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.

    Tag Description
    latest Stable Booksonic releases
    prerelease Booksonic Pre-releases

    Application Setup

    Default user/pass is admin/admin

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + booksonic - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. Please migrate to https://github.com/linuxserver/docker-booksonic-air

    linuxserver/booksonic

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Booksonic is a server and an app for streaming your audiobooks to any pc or android phone. Most of the functionality is also availiable on other platforms that have apps for subsonic.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/booksonic should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Version Tags

    This image provides various versions that are available via tags. latest tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.

    Tag Description
    latest Stable Booksonic releases
    prerelease Booksonic Pre-releases

    Application Setup

    Default user/pass is admin/admin

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       booksonic:
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    4040 Application WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    CONTEXT_PATH=url-base Base url for use with reverse proxies etc.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.
    /audiobooks Audiobooks.
    /podcasts Podcasts.
    /othermedia Other media.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it booksonic /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f booksonic
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' booksonic
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/booksonic

    Versions

    • 06.05.21: - This image is now deprecated. Please migrate to https://github.com/linuxserver/docker-booksonic-air
    • 11.08.20: - Changed upstream github repo location
    • 22.12.19: - Revert to pulling in external war, upgrade jetty.
    • 30.04.19: - Switching to build war from source, use stable booksonic releases.
    • 24.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 16.01.19: - Adding pipeline logic and multi arch.
    • 05.01.19: - Linting fixes.
    • 27.08.18: - Rebase to ubuntu bionic.
    • 06.12.17: - Rebase to alpine 3.7.
    • 11.07.17: - Rebase to alpine 3.6.
    • 07.02.17: - Rebase to alpine 3.5.
    • 13.12.16: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it booksonic /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f booksonic
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' booksonic
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/booksonic

    Versions

    • 06.05.21: - This image is now deprecated. Please migrate to https://github.com/linuxserver/docker-booksonic-air
    • 11.08.20: - Changed upstream github repo location
    • 22.12.19: - Revert to pulling in external war, upgrade jetty.
    • 30.04.19: - Switching to build war from source, use stable booksonic releases.
    • 24.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 16.01.19: - Adding pipeline logic and multi arch.
    • 05.01.19: - Linting fixes.
    • 27.08.18: - Rebase to ubuntu bionic.
    • 06.12.17: - Rebase to alpine 3.7.
    • 11.07.17: - Rebase to alpine 3.6.
    • 07.02.17: - Rebase to alpine 3.5.
    • 13.12.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-bookstack/index.html b/images/docker-bookstack/index.html index eff43f553f..b2b2473e24 100644 --- a/images/docker-bookstack/index.html +++ b/images/docker-bookstack/index.html @@ -1,4 +1,4 @@ - bookstack - LinuxServer.io

    linuxserver/bookstack

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Bookstack is a free and open source Wiki designed for creating beautiful documentation. Featuring a simple, but powerful WYSIWYG editor it allows for teams to create detailed and useful documentation with ease.

    Powered by SQL and including a Markdown editor for those who prefer it, BookStack is geared towards making documentation more of a pleasure than a chore.

    For more information on BookStack visit their website and check it out: https://www.bookstackapp.com

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/bookstack:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The default username is admin@admin.com with the password of password, access the container at http://dockerhost:6875.

    This application is dependent on a MySQL database be it one you already have or a new one. If you do not already have one, set up our MariaDB container here https://hub.docker.com/r/linuxserver/mariadb/.

    If you intend to use this application behind a subfolder reverse proxy, such as our SWAG container or Traefik you will need to make sure that the APP_URL environment variable is set to your external domain, or it will not work

    Documentation for BookStack can be found at https://www.bookstackapp.com/docs/

    Advanced Users (full control over the .env file)

    If you wish to use the extra functionality of BookStack such as email, Memcache, LDAP and so on you will need to make your own .env file with guidance from the BookStack documentation.

    When you create the container, do not set any arguments for any SQL settings. The container will copy an exemplary .env file to /config/www/.env on your host system for you to edit.

    PDF Rendering

    wkhtmltopdf is available to use as an alternative PDF rendering generator as described at https://www.bookstackapp.com/docs/admin/pdf-rendering/.

    The path to wkhtmltopdf in this image to include in your .env file is /usr/bin/wkhtmltopdf.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + bookstack - LinuxServer.io       

    linuxserver/bookstack

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Bookstack is a free and open source Wiki designed for creating beautiful documentation. Featuring a simple, but powerful WYSIWYG editor it allows for teams to create detailed and useful documentation with ease.

    Powered by SQL and including a Markdown editor for those who prefer it, BookStack is geared towards making documentation more of a pleasure than a chore.

    For more information on BookStack visit their website and check it out: https://www.bookstackapp.com

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/bookstack:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The default username is admin@admin.com with the password of password, access the container at http://dockerhost:6875.

    This application is dependent on a MySQL database be it one you already have or a new one. If you do not already have one, set up our MariaDB container here https://hub.docker.com/r/linuxserver/mariadb/.

    If you intend to use this application behind a subfolder reverse proxy, such as our SWAG container or Traefik you will need to make sure that the APP_URL environment variable is set to your external domain, or it will not work

    Documentation for BookStack can be found at https://www.bookstackapp.com/docs/

    Advanced Users (full control over the .env file)

    If you wish to use the extra functionality of BookStack such as email, Memcache, LDAP and so on you will need to make your own .env file with guidance from the BookStack documentation.

    When you create the container, do not set any arguments for any SQL settings. The container will copy an exemplary .env file to /config/www/.env on your host system for you to edit.

    PDF Rendering

    wkhtmltopdf is available to use as an alternative PDF rendering generator as described at https://www.bookstackapp.com/docs/admin/pdf-rendering/.

    The path to wkhtmltopdf in this image to include in your .env file is /usr/bin/wkhtmltopdf.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2"
     services:
       bookstack:
    @@ -50,4 +50,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 will map the container's port 80 to port 6875 on the host

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    APP_URL= for specifying the IP:port or URL your application will be accessed on (ie. http://192.168.1.1:6875 or https://bookstack.mydomain.com
    DB_HOST=<yourdbhost> for specifying the database host
    DB_USER=<yourdbuser> for specifying the database user
    DB_PASS=<yourdbpass> for specifying the database password
    DB_DATABASE=bookstackapp for specifying the database to be used (non-alphanumeric passwords must be properly escaped.)

    Volume Mappings (-v)

    Volume Function
    /config this will store any uploaded data on the docker host

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it bookstack /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f bookstack
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' bookstack
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/bookstack:latest

    Versions

    • 10.10.22: - Remove password escape logic which caused problems for a small subset of users.
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 14.03.22: - Add symlinks for theme support.
    • 11.07.21: - Rebase to Alpine 3.14.
    • 12.01.21: - Remove unused requirement, as of release 0.31.0.
    • 17.12.20: - Make APP_URL var required (upstream changes).
    • 17.09.20: - Rebase to alpine 3.12. Fix APP_URL setting. Bump php post max and upload max filesizes to 100MB by default.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 26.07.19: - Use old version of tidyhtml pending upstream fixes.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 14.06.19: - Add wkhtmltopdf to image for PDF rendering.
    • 20.04.19: - Rebase to Alpine 3.9, add MySQL init logic.
    • 22.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 20.01.19: - Added php7-curl
    • 04.11.18: - Added php7-ldap
    • 15.10.18: - Changed functionality for advanced users
    • 08.10.18: - Advanced mode, symlink changes, sed fixing, docs updated, added some composer files
    • 23.09.28: - Updates pre-release
    • 02.07.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it bookstack /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f bookstack
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' bookstack
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/bookstack:latest

    Versions

    • 10.10.22: - Remove password escape logic which caused problems for a small subset of users.
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 14.03.22: - Add symlinks for theme support.
    • 11.07.21: - Rebase to Alpine 3.14.
    • 12.01.21: - Remove unused requirement, as of release 0.31.0.
    • 17.12.20: - Make APP_URL var required (upstream changes).
    • 17.09.20: - Rebase to alpine 3.12. Fix APP_URL setting. Bump php post max and upload max filesizes to 100MB by default.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 26.07.19: - Use old version of tidyhtml pending upstream fixes.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 14.06.19: - Add wkhtmltopdf to image for PDF rendering.
    • 20.04.19: - Rebase to Alpine 3.9, add MySQL init logic.
    • 22.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 20.01.19: - Added php7-curl
    • 04.11.18: - Added php7-ldap
    • 15.10.18: - Changed functionality for advanced users
    • 08.10.18: - Advanced mode, symlink changes, sed fixing, docs updated, added some composer files
    • 23.09.28: - Updates pre-release
    • 02.07.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-budge/index.html b/images/docker-budge/index.html index 3699b68b97..f0da480baf 100644 --- a/images/docker-budge/index.html +++ b/images/docker-budge/index.html @@ -1,4 +1,4 @@ - budge - LinuxServer.io

    linuxserver/budge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    budge is an open source 'budgeting with envelopes' personal finance app.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/budge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the web gui at http://SERVERIP:PORT

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + budge - LinuxServer.io       

    linuxserver/budge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    budge is an open source 'budgeting with envelopes' personal finance app.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/budge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the web gui at http://SERVERIP:PORT

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       budge:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 http gui
    443 https gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York

    Volume Mappings (-v)

    Volume Function
    /config Persistent config files

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it budge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f budge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' budge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/budge:latest

    Versions

    • 04.15.22: - Added NPM command to run db migrations.
    • 02.05.22: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it budge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f budge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' budge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/budge:latest

    Versions

    • 04.15.22: - Added NPM command to run db migrations.
    • 02.05.22: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-calibre-web/index.html b/images/docker-calibre-web/index.html index de9a962e57..13ede7a5be 100644 --- a/images/docker-calibre-web/index.html +++ b/images/docker-calibre-web/index.html @@ -1,4 +1,4 @@ - calibre-web - LinuxServer.io

    linuxserver/calibre-web

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Calibre-web is a web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database. It is also possible to integrate google drive and edit metadata and your calibre library through the app itself.

    This software is a fork of library and licensed under the GPL v3 License.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/calibre-web:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Releases of Calibre-Web
    nightly Commits to the master branch of Calibre-Web

    Application Setup

    Webui can be found at http://your-ip:8083

    On the initial setup screen, enter /books as your calibre library location.

    Default admin login: Username: admin Password: admin123

    Unrar is included by default and needs to be set in the Calibre-Web admin page (Basic Configuration:External Binaries) with a path of /usr/bin/unrar

    x86-64 only We have implemented the optional ability to pull in the dependencies to enable ebook conversion utilising Calibre, this means if you don't require this feature the container isn't uneccessarily bloated but should you require it, it is easily available. This optional layer will be rebuilt automatically on our CI pipeline upon new Calibre releases so you can stay up to date. To use this option add the optional environmental variable as shown below to pull an addition docker layer to enable ebook conversion and then in the Calibre-Web admin page (Basic Configuration:External Binaries) set the Path to Calibre E-Book Converter to /usr/bin/ebook-convert

    This image contains the kepubify ebook conversion tool (MIT License) to convert epub to kepub. In the Calibre-Web admin page (Basic Configuration:External Binaries) set the Path to Kepubify E-Book Converter to /usr/bin/kepubify

    To reverse proxy with our Letsencrypt docker container we include a preconfigured reverse proxy config, for other instances of Nginx use the following location block:

            location /calibre-web {
    + calibre-web - LinuxServer.io       

    linuxserver/calibre-web

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Calibre-web is a web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database. It is also possible to integrate google drive and edit metadata and your calibre library through the app itself.

    This software is a fork of library and licensed under the GPL v3 License.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/calibre-web:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Releases of Calibre-Web
    nightly Commits to the master branch of Calibre-Web

    Application Setup

    Webui can be found at http://your-ip:8083

    On the initial setup screen, enter /books as your calibre library location.

    Default admin login: Username: admin Password: admin123

    Unrar is included by default and needs to be set in the Calibre-Web admin page (Basic Configuration:External Binaries) with a path of /usr/bin/unrar

    x86-64 only We have implemented the optional ability to pull in the dependencies to enable ebook conversion utilising Calibre, this means if you don't require this feature the container isn't uneccessarily bloated but should you require it, it is easily available. This optional layer will be rebuilt automatically on our CI pipeline upon new Calibre releases so you can stay up to date. To use this option add the optional environmental variable as shown below to pull an addition docker layer to enable ebook conversion and then in the Calibre-Web admin page (Basic Configuration:External Binaries) set the Path to Calibre E-Book Converter to /usr/bin/ebook-convert

    This image contains the kepubify ebook conversion tool (MIT License) to convert epub to kepub. In the Calibre-Web admin page (Basic Configuration:External Binaries) set the Path to Kepubify E-Book Converter to /usr/bin/kepubify

    To reverse proxy with our Letsencrypt docker container we include a preconfigured reverse proxy config, for other instances of Nginx use the following location block:

            location /calibre-web {
                     proxy_pass              http://<your-ip>:8083;
                     proxy_set_header        Host            $http_host;
                     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    @@ -38,4 +38,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8083 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    DOCKER_MODS=linuxserver/mods:universal-calibre #optional & x86-64 only Adds the ability to perform ebook conversion
    OAUTHLIB_RELAX_TOKEN_SCOPE=1 Optionally set this to allow Google OAUTH to work

    Volume Mappings (-v)

    Volume Function
    /config Where calibre-web stores the internal database and config.
    /books Where your preexisting calibre database is located.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it calibre-web /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f calibre-web
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' calibre-web
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/calibre-web:latest

    Versions

    • 19.10.22: - Rebase to jammy. Upgrade to s6v3. Clean up build dependencies.
    • 04.11.21: - Update pip arguments to ignore distro installed packages.
    • 24.06.21: - Add note on optional OAUTHLIB_RELAX_TOKEN_SCOPE for Google OAUTH support.
    • 17.05.21: - Add linuxserver wheel index.
    • 10.02.21: - Add libxrandr2
    • 25.01.21: - Add nightly tag
    • 19.01.21: - Add python3-pkg-resources
    • 13.01.21: - Rebase to Ubuntu Focal, see here for troubleshooting armhf.
    • 12.10.20: - Add libxi6
    • 12.07.20: - Add kepubify for arm64v8
    • 05.06.20: - Add kepubify for x86-64 and arm32v7
    • 06.05.20: - Add libxslt1.1 and update ImageMagick policy
    • 19.01.20: - Adding LDAP libs.
    • 13.10.19: - Migrate to Python3.
    • 01.08.19: - Add libxcomposite1.
    • 13.06.19: - Add docker mod to enable optional ebook conversion on x86-64. Add unrar.
    • 02.06.19: - Rebase to Ubuntu Bionic & add Gdrive support.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 23.02.19: - Rebase to alpine 3.9, use repo version of imagemagick.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 03.01.19: - Remove guest user from default app.db.
    • 16.08.18: - Rebase to alpine 3.8.
    • 03.07.18: - New build pushed, all versions below 67 have vulnerability.
    • 05.01.18: - Deprecate cpu_core routine lack of scaling.
    • 06.12.17: - Rebase to alpine 3.7.
    • 27.11.17: - Use cpu core counting routine to speed up build time.
    • 24.07.17: - Curl version for imagemagick.
    • 17.07.17: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it calibre-web /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f calibre-web
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' calibre-web
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/calibre-web:latest

    Versions

    • 19.10.22: - Rebase to jammy. Upgrade to s6v3. Clean up build dependencies.
    • 04.11.21: - Update pip arguments to ignore distro installed packages.
    • 24.06.21: - Add note on optional OAUTHLIB_RELAX_TOKEN_SCOPE for Google OAUTH support.
    • 17.05.21: - Add linuxserver wheel index.
    • 10.02.21: - Add libxrandr2
    • 25.01.21: - Add nightly tag
    • 19.01.21: - Add python3-pkg-resources
    • 13.01.21: - Rebase to Ubuntu Focal, see here for troubleshooting armhf.
    • 12.10.20: - Add libxi6
    • 12.07.20: - Add kepubify for arm64v8
    • 05.06.20: - Add kepubify for x86-64 and arm32v7
    • 06.05.20: - Add libxslt1.1 and update ImageMagick policy
    • 19.01.20: - Adding LDAP libs.
    • 13.10.19: - Migrate to Python3.
    • 01.08.19: - Add libxcomposite1.
    • 13.06.19: - Add docker mod to enable optional ebook conversion on x86-64. Add unrar.
    • 02.06.19: - Rebase to Ubuntu Bionic & add Gdrive support.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 23.02.19: - Rebase to alpine 3.9, use repo version of imagemagick.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 03.01.19: - Remove guest user from default app.db.
    • 16.08.18: - Rebase to alpine 3.8.
    • 03.07.18: - New build pushed, all versions below 67 have vulnerability.
    • 05.01.18: - Deprecate cpu_core routine lack of scaling.
    • 06.12.17: - Rebase to alpine 3.7.
    • 27.11.17: - Use cpu core counting routine to speed up build time.
    • 24.07.17: - Curl version for imagemagick.
    • 17.07.17: - Initial release.
    \ No newline at end of file diff --git a/images/docker-calibre/index.html b/images/docker-calibre/index.html index 161ec97cb7..c46ae3e9bb 100644 --- a/images/docker-calibre/index.html +++ b/images/docker-calibre/index.html @@ -1,4 +1,4 @@ - calibre - LinuxServer.io

    linuxserver/calibre

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Calibre is a powerful and easy to use e-book manager. Users say it’s outstanding and a must-have. It’ll allow you to do nearly everything and it takes things a step beyond normal e-book software. It’s also completely free and open source and great for both casual users and computer experts.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/calibre:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    This image sets up the calibre desktop app and makes its interface available via Guacamole server in the browser. The interface is available at http://your-ip:8080.

    By default, there is no password set for the main gui. Optional environment variable PASSWORD will allow setting a password for the user abc.

    Port 8081 is reserved for Calibre's built-in webserver, which can be enabled within the desktop app settings, and the internal port must be set to 8081 although it will then be available at the host mapped port for external access.

    You can access advanced features of the Guacamole remote desktop using ctrl+alt+shift enabling you to use remote copy/paste and different languages.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + calibre - LinuxServer.io       

    linuxserver/calibre

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Calibre is a powerful and easy to use e-book manager. Users say it’s outstanding and a must-have. It’ll allow you to do nearly everything and it takes things a step beyond normal e-book software. It’s also completely free and open source and great for both casual users and computer experts.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/calibre:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    This image sets up the calibre desktop app and makes its interface available via Guacamole server in the browser. The interface is available at http://your-ip:8080.

    By default, there is no password set for the main gui. Optional environment variable PASSWORD will allow setting a password for the user abc.

    Port 8081 is reserved for Calibre's built-in webserver, which can be enabled within the desktop app settings, and the internal port must be set to 8081 although it will then be available at the host mapped port for external access.

    You can access advanced features of the Guacamole remote desktop using ctrl+alt+shift enabling you to use remote copy/paste and different languages.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       calibre:
    @@ -34,4 +34,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 Calibre desktop gui.
    8081 Calibre webserver gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    PASSWORD= Optionally set a password for the gui.
    CLI_ARGS= Optionally pass cli start arguments to calibre.

    Volume Mappings (-v)

    Volume Function
    /config Where calibre should store its database and library.

    Miscellaneous Options

    Parameter Function
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function as syscalls are unkown to Docker.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it calibre /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f calibre
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' calibre
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/calibre:latest

    Versions

    • 19.10.22: - Set the window title to Calibre. Remove websocat as it is now handled properly in the baseimage.
    • 18.10.22: - Deprecate Arch branch.
    • 07.10.22: - Start calibre window maximized.
    • 16.09.22: - Rebase to jammy.
    • 24.07.22: - Add arm64 build for master branch.
    • 11.07.22: - Update dependencies for Calibre 6.
    • 28.05.22: - Rebase to focal.
    • 31.03.22: - Fix umask.
    • 28.02.22: - Add speech support to bionic image.
    • 05.01.22: - Add arch branch for arm platforms.
    • 20.04.21: - Fix the HOME folder.
    • 19.04.21: - Add libnss3 back in. Make sure Calibre can access environment variables.
    • 18.04.21: - Start calibre on container start rather than gui connect.
    • 15.04.21: - Rebase to rdesktop-web baseimage. Deprecate GUAC_USER and GUAC_PASS env vars. Existing users can set the new var PASSWORD for the user abc.
    • 25.09.20: - Switch to python3, add various new dependencies for calibre 5.0.
    • 10.05.19: - Add new env var CLI_ARGS to pass start arguments to calibre.
    • 18.03.19: - Let Calibre access environment variables, add optional umask setting.
    • 23.10.19: - Remove reccomended deps and zenity for character compatibility.
    • 18.10.19: - Add python-xdg.
    • 08.10.19: - Add fonts-wqy-microhei ttf-wqy-zenhei fcitx-rime dependency to resolve issue with Chinese encoding.
    • 04.10.19: - Add libxkbcommon-x11-0 dependency to resolve issue with Calibre 4.
    • 08.08.19: - Add zenity for international character support in dialog boxes.
    • 12.07.19: - Download binary from calibre website instead of github.
    • 29.04.19: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it calibre /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f calibre
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' calibre
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/calibre:latest

    Versions

    • 19.10.22: - Set the window title to Calibre. Remove websocat as it is now handled properly in the baseimage.
    • 18.10.22: - Deprecate Arch branch.
    • 07.10.22: - Start calibre window maximized.
    • 16.09.22: - Rebase to jammy.
    • 24.07.22: - Add arm64 build for master branch.
    • 11.07.22: - Update dependencies for Calibre 6.
    • 28.05.22: - Rebase to focal.
    • 31.03.22: - Fix umask.
    • 28.02.22: - Add speech support to bionic image.
    • 05.01.22: - Add arch branch for arm platforms.
    • 20.04.21: - Fix the HOME folder.
    • 19.04.21: - Add libnss3 back in. Make sure Calibre can access environment variables.
    • 18.04.21: - Start calibre on container start rather than gui connect.
    • 15.04.21: - Rebase to rdesktop-web baseimage. Deprecate GUAC_USER and GUAC_PASS env vars. Existing users can set the new var PASSWORD for the user abc.
    • 25.09.20: - Switch to python3, add various new dependencies for calibre 5.0.
    • 10.05.19: - Add new env var CLI_ARGS to pass start arguments to calibre.
    • 18.03.19: - Let Calibre access environment variables, add optional umask setting.
    • 23.10.19: - Remove reccomended deps and zenity for character compatibility.
    • 18.10.19: - Add python-xdg.
    • 08.10.19: - Add fonts-wqy-microhei ttf-wqy-zenhei fcitx-rime dependency to resolve issue with Chinese encoding.
    • 04.10.19: - Add libxkbcommon-x11-0 dependency to resolve issue with Calibre 4.
    • 08.08.19: - Add zenity for international character support in dialog boxes.
    • 12.07.19: - Download binary from calibre website instead of github.
    • 29.04.19: - Initial release.
    \ No newline at end of file diff --git a/images/docker-cardigann/index.html b/images/docker-cardigann/index.html index 5fc81ef410..75454ca810 100644 --- a/images/docker-cardigann/index.html +++ b/images/docker-cardigann/index.html @@ -1,4 +1,4 @@ - linuxserver/cardigann - LinuxServer.io

    linuxserver/cardigann

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io MicroBadger Layers Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED. We will no longer be making updates or rebuilding this image. The Dockerhub endpoint will stay online with the current tags for this software. We recommend current users switch to linuxserver/jackett. Cardigann a server for adding extra indexers to Sonarr, SickRage and CouchPotato via Torznab and TorrentPotato proxies. Behind the scenes Cardigann logs in and runs searches and then transforms the results into a compatible format.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/cardigann should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
    + linuxserver/cardigann - LinuxServer.io       

    linuxserver/cardigann

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io MicroBadger Layers Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED. We will no longer be making updates or rebuilding this image. The Dockerhub endpoint will stay online with the current tags for this software. We recommend current users switch to linuxserver/jackett. Cardigann a server for adding extra indexers to Sonarr, SickRage and CouchPotato via Torznab and TorrentPotato proxies. Behind the scenes Cardigann logs in and runs searches and then transforms the results into a compatible format.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/cardigann should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
       --name=cardigann \
       -e PUID=1000 \
       -e PGID=1000 \
    @@ -26,4 +26,4 @@ services:
         restart: unless-stopped
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    5060 The port for the Cardigann webinterface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    SOCKS_PROXY=IP:PORT for using a socks proxy (optional)
    HTTP_PROXY=IP:PORT for using a HTTP proxy (optional)

    Volume Mappings (-v)

    Volume Function
    /config Cardigann config

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    Access the webui at <your-ip>:5060, for more information check out Cardigann.

    By adding a variable to the run command, SOCKS_PROXY or HTTP_PROXY cardigann can be used with a proxy, eg -e SOCKS_PROXY=localhost:1080

    The folder /config/definitions can be used to add additional tracker definitions (for more info see Additional definitions ).

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it cardigann /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f cardigann
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' cardigann
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/cardigann

    Versions

    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 01.02.19: - Multi arch images and pipeline build logic
    • 14.01.19: - Add multi arch and pipeline logic
    • 22.08.18: - Rebase to alpine 3.8
    • 06.05.18: - Use buildstage in Dockerfile
    • 06.12.17: - Rebase to alpine 3.7
    • 12.08.17: - Add npm install to build stage
    • 25.05.17: - Rebase to alpine 3.6
    • 07.02.17: - Rebase to alpine 3.5
    • 03.11.16: - Compiled using sstamoulis' method
    • 01.11.16: - Initial Release
    \ No newline at end of file +

    Application Setup

    Access the webui at <your-ip>:5060, for more information check out Cardigann.

    By adding a variable to the run command, SOCKS_PROXY or HTTP_PROXY cardigann can be used with a proxy, eg -e SOCKS_PROXY=localhost:1080

    The folder /config/definitions can be used to add additional tracker definitions (for more info see Additional definitions ).

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it cardigann /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f cardigann
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' cardigann
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/cardigann

    Versions

    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 01.02.19: - Multi arch images and pipeline build logic
    • 14.01.19: - Add multi arch and pipeline logic
    • 22.08.18: - Rebase to alpine 3.8
    • 06.05.18: - Use buildstage in Dockerfile
    • 06.12.17: - Rebase to alpine 3.7
    • 12.08.17: - Add npm install to build stage
    • 25.05.17: - Rebase to alpine 3.6
    • 07.02.17: - Rebase to alpine 3.5
    • 03.11.16: - Compiled using sstamoulis' method
    • 01.11.16: - Initial Release
    \ No newline at end of file diff --git a/images/docker-changedetection.io/index.html b/images/docker-changedetection.io/index.html index c414bb160a..ff5c9ab851 100644 --- a/images/docker-changedetection.io/index.html +++ b/images/docker-changedetection.io/index.html @@ -1,4 +1,4 @@ - changedetection.io - LinuxServer.io

    linuxserver/changedetection.io

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Changedetection.io provides free, open-source web page monitoring, notification and change detection.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/changedetection.io:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Webui is accessible at http://SERVERIP:PORT

    Please note that this image does not contain the Playwright content fetcher due to a lack of support for muslc-based systems. If you require this feature please use Selenium or the official container

    For more info read the wiki.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + changedetection.io - LinuxServer.io       

    linuxserver/changedetection.io

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Changedetection.io provides free, open-source web page monitoring, notification and change detection.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/changedetection.io:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Webui is accessible at http://SERVERIP:PORT

    Please note that this image does not contain the Playwright content fetcher due to a lack of support for muslc-based systems. If you require this feature please use Selenium or the official container

    For more info read the wiki.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       changedetection:
    @@ -28,4 +28,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    5000 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    BASE_URL= Specify the full URL (including protocol) when running behind a reverse proxy

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it changedetection.io /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f changedetection.io
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' changedetection.io
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/changedetection.io:latest

    Versions

    • 23.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 09.10.22: - Add make as build dep to fix pip jq build on armhf.
    • 07.08.22: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it changedetection.io /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f changedetection.io
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' changedetection.io
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/changedetection.io:latest

    Versions

    • 23.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 09.10.22: - Add make as build dep to fix pip jq build on armhf.
    • 07.08.22: - Initial release.
    \ No newline at end of file diff --git a/images/docker-chevereto/index.html b/images/docker-chevereto/index.html index 0f2a00a9da..90658da583 100644 --- a/images/docker-chevereto/index.html +++ b/images/docker-chevereto/index.html @@ -1,4 +1,4 @@ - chevereto - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend alternative images such as: https://github.com/linuxserver/docker-pixapop/ https://github.com/linuxserver/docker-piwigo/ https://github.com/linuxserver/docker-photoshow/

    linuxserver/chevereto

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Chevereto is an image hosting software that allows you to create a beautiful and full-featured image hosting website on your own server. It's your hosting and your rules, so say goodbye to closures and restrictions.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/chevereto:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Chevereto-Free now has a maintainer!

    ~~Chevereto-Free will be EOL on 2021-12-31 and no new releases will be produced for it. Our container will continue to be updated until at least that date but we cannot make any assurances beyond it.~~

    Access the WebUI at :443. For more information, check out Chevereto Free.

    Chevereto requires a MariaDB database, we have an image available here if you require it.

    If you are putting Chevereto behind a reverse proxy and need the Real IP to be passed through, edit /config/nginx/site-confs/default, and set set_real_ip_from to match the IP address/address block of your proxy server(s).

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + chevereto - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend alternative images such as: https://github.com/linuxserver/docker-pixapop/ https://github.com/linuxserver/docker-piwigo/ https://github.com/linuxserver/docker-photoshow/

    linuxserver/chevereto

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Chevereto is an image hosting software that allows you to create a beautiful and full-featured image hosting website on your own server. It's your hosting and your rules, so say goodbye to closures and restrictions.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/chevereto:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Chevereto-Free now has a maintainer!

    ~~Chevereto-Free will be EOL on 2021-12-31 and no new releases will be produced for it. Our container will continue to be updated until at least that date but we cannot make any assurances beyond it.~~

    Access the WebUI at :443. For more information, check out Chevereto Free.

    Chevereto requires a MariaDB database, we have an image available here if you require it.

    If you are putting Chevereto behind a reverse proxy and need the Real IP to be passed through, edit /config/nginx/site-confs/default, and set set_real_ip_from to match the IP address/address block of your proxy server(s).

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2"
     services:
       chevereto:
    @@ -47,4 +47,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 http gui
    443 https gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=<TZ> Timezone (i.e., America/New_York)

    Volume Mappings (-v)

    Volume Function
    /config config directory volume mapping
    /data data directory volume mapping

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it chevereto /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f chevereto
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' chevereto
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/chevereto:latest

    Versions

    • 13.06.22: - Deprecate.
    • 13.11.21: - Add composer to fix missing dependencies.
    • 21.10.21: - Removed deprecation warning, change reposiory links.
    • 22.07.21: - Rebase to Alpine 3.14.
    • 28.08.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it chevereto /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f chevereto
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' chevereto
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/chevereto:latest

    Versions

    • 13.06.22: - Deprecate.
    • 13.11.21: - Add composer to fix missing dependencies.
    • 21.10.21: - Removed deprecation warning, change reposiory links.
    • 22.07.21: - Rebase to Alpine 3.14.
    • 28.08.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-ci/index.html b/images/docker-ci/index.html index bbe3ca9bed..91761a72ad 100644 --- a/images/docker-ci/index.html +++ b/images/docker-ci/index.html @@ -1,4 +1,4 @@ - ci - LinuxServer.io

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    Forum Linuserver.io forum
    IRC freenode at #linuxserver.io more information at:- IRC
    Podcast Covers everything to do with getting the most from your Linux Server plus a focus on all things Docker and containerisation! Linuxserver.io Podcast

    linuxserver/ci

    This container is not meant for public consumption as it is hard coded to LinuxServer endpoints for storage of resulting reports

    The purpose of this container is to accept environment variables from our build system linuxserver/pipeline-triggers to perform basic continuous integration on the software being built.

    Usage

    The container can be run locally, but it is meant to be integrated into the LinuxServer build process:

    sudo docker run --rm -i \
    + ci - LinuxServer.io       

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    Forum Linuserver.io forum
    IRC freenode at #linuxserver.io more information at:- IRC
    Podcast Covers everything to do with getting the most from your Linux Server plus a focus on all things Docker and containerisation! Linuxserver.io Podcast

    linuxserver/ci

    This container is not meant for public consumption as it is hard coded to LinuxServer endpoints for storage of resulting reports

    The purpose of this container is to accept environment variables from our build system linuxserver/pipeline-triggers to perform basic continuous integration on the software being built.

    Usage

    The container can be run locally, but it is meant to be integrated into the LinuxServer build process:

    sudo docker run --rm -i \
     -v /var/run/docker.sock:/var/run/docker.sock \
     -e IMAGE="linuxserver/<dockerimage>" \
     -e TAGS="<single tag or array seperated by |>" \
    @@ -19,4 +19,4 @@
     -e CI_S6_VERBOSITY=<optional, Updates the S6_VERBOSITY env. Defaults to '2'>
     -t lsiodev/ci:latest \
     python3 test_build.py
    -

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file +

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-clarkson/index.html b/images/docker-clarkson/index.html index 1182850b04..3be88fd255 100644 --- a/images/docker-clarkson/index.html +++ b/images/docker-clarkson/index.html @@ -1,4 +1,4 @@ - clarkson - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend looking at Hammond as a replacement: https://github.com/akhilrex/hammond

    linuxserver/clarkson

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Clarkson is a web-based dashboard application that gives you a neat and clean interface for logging your fuel fill-ups for all of your vehicles. The application has full multi-user support, as well as multiple vehicles per user. Whenever you fill-up your car or motorcycle, keep the receipt and record the data in Clarkson.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/clarkson should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Application Setup

    Clarkson requires v5.7.* of MySQL and please ensure MySQL is running before starting this container.

    It is preferred if you create the clarkson schema before initially running the container, then creating a user with granted permissions for the schema. Creating the schema before running the app is important as the "clarkson" user will not have permission to create the schema on your behalf. You can, of course, use the "root" user, which has the ability to create schemas automatically, but this is not recommended.

    CREATE SCHEMA `clarkson`;
    + clarkson - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend looking at Hammond as a replacement: https://github.com/akhilrex/hammond

    linuxserver/clarkson

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Clarkson is a web-based dashboard application that gives you a neat and clean interface for logging your fuel fill-ups for all of your vehicles. The application has full multi-user support, as well as multiple vehicles per user. Whenever you fill-up your car or motorcycle, keep the receipt and record the data in Clarkson.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/clarkson should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Application Setup

    Clarkson requires v5.7.* of MySQL and please ensure MySQL is running before starting this container.

    It is preferred if you create the clarkson schema before initially running the container, then creating a user with granted permissions for the schema. Creating the schema before running the app is important as the "clarkson" user will not have permission to create the schema on your behalf. You can, of course, use the "root" user, which has the ability to create schemas automatically, but this is not recommended.

    CREATE SCHEMA `clarkson`;
     CREATE USER 'clarkson_user' IDENTIFIED BY 'supersecretpassword';
     GRANT ALL ON `clarkson`.* TO 'clarkson_user';
     

    Once running, the container will run an initial MySQL migration, which populates the schema with all tables and procedures. The application will start immediately afterwards. You will need to register an initial user, of which will be the admin of the application. All subsequent users will be standard users. You can disable registrations after the fact by recreating the container with the ENABLE_REGISTRATIONS flag set to false. This will not hide the "Register" link, but will disable the functionality.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    MYSQL_HOST=<mysql_host> Points the backend to the MySQL database. This can be either a docker hostname or an IP.
    MYSQL_USERNAME=<mysql_username> The user with access to the clarkson schema.
    MYSQL_PASSWORD=<mysql_password> The password for the user.
    ENABLE_REGISTRATIONS=<true/false> Defaults to false. If set to true, allows new users to register.
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it clarkson /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f clarkson
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' clarkson
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/clarkson

    Versions

    • 19.01.22: - Deprecate.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 23.03.19: - Updating runtime dependancies for the JRE.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 22.08.18: - Rebase to alpine linux 3.8.
    • 19.02.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it clarkson /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f clarkson
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' clarkson
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/clarkson

    Versions

    • 19.01.22: - Deprecate.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 23.03.19: - Updating runtime dependancies for the JRE.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 22.08.18: - Rebase to alpine linux 3.8.
    • 19.02.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-cloud9/index.html b/images/docker-cloud9/index.html index 37fd08c982..77a4e499c1 100644 --- a/images/docker-cloud9/index.html +++ b/images/docker-cloud9/index.html @@ -1,4 +1,4 @@ - cloud9 - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend looking at our code-server and openvscode-server containers as potential replacements. https://github.com/linuxserver/docker-code-server https://github.com/linuxserver/docker-openvscode-server

    linuxserver/cloud9

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Cloud9 Cloud9 is a complete web based IDE with terminal access. This container is for running their core SDK locally and developing plugins.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/cloud9:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Docker and Compose environment pre-installed
    go Basic Golang environment pre-installed
    nodejs Current stable NodeJS/NPM environment pre-installed
    python Current Python3 environment pre-installed
    ruby Current Ruby environment pre-installed

    Application Setup

    Access the webui at http://your-ip:8000, for more information check out here.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + cloud9 - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend looking at our code-server and openvscode-server containers as potential replacements. https://github.com/linuxserver/docker-code-server https://github.com/linuxserver/docker-openvscode-server

    linuxserver/cloud9

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Cloud9 Cloud9 is a complete web based IDE with terminal access. This container is for running their core SDK locally and developing plugins.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/cloud9:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Docker and Compose environment pre-installed
    go Basic Golang environment pre-installed
    nodejs Current stable NodeJS/NPM environment pre-installed
    python Current Python3 environment pre-installed
    ruby Current Ruby environment pre-installed

    Application Setup

    Access the webui at http://your-ip:8000, for more information check out here.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       cloud9:
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 The port for the Cloud9 web interface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    GITURL=https://github.com/linuxserver/docker-cloud9.git Specify a git repo to checkout on first startup
    USERNAME= Optionally specify a username for http auth
    PASSWORD= Optionally specify a password for http auth (if USERNAME and PASSWORD are not set, there will be no http auth)

    Volume Mappings (-v)

    Volume Function
    /code Optionally if you want to mount up a local folder of code instead of checking out
    /var/run/docker.sock Needed if you plan to use Docker or compose commands

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it cloud9 /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f cloud9
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' cloud9
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/cloud9:latest

    Versions

    • 23.06.22: - Deprecate image.
    • 24.06.21: - Use prebuilt compose binaries for the linuxserver repo.
    • 07.02.20: - Add optional http auth.
    • 02.06.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it cloud9 /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f cloud9
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' cloud9
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/cloud9:latest

    Versions

    • 23.06.22: - Deprecate image.
    • 24.06.21: - Use prebuilt compose binaries for the linuxserver repo.
    • 07.02.20: - Add optional http auth.
    • 02.06.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-code-server/index.html b/images/docker-code-server/index.html index 0ad5486c04..1f707ba839 100644 --- a/images/docker-code-server/index.html +++ b/images/docker-code-server/index.html @@ -1,4 +1,4 @@ - code-server - LinuxServer.io

    linuxserver/code-server

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Code-server is VS Code running on a remote server, accessible through the browser. - Code on your Chromebook, tablet, and laptop with a consistent dev environment. - If you have a Windows or Mac workstation, more easily develop for Linux. - Take advantage of large cloud servers to speed up tests, compilations, downloads, and more. - Preserve battery life when you're on the go. - All intensive computation runs on your server. - You're no longer running excess instances of Chrome.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/code-server:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at http://<your-ip>:8443. For github integration, drop your ssh key in to /config/.ssh. Then open a terminal from the top menu and set your github username and email via the following commands

    git config --global user.name "username"
    + code-server - LinuxServer.io       

    linuxserver/code-server

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Code-server is VS Code running on a remote server, accessible through the browser. - Code on your Chromebook, tablet, and laptop with a consistent dev environment. - If you have a Windows or Mac workstation, more easily develop for Linux. - Take advantage of large cloud servers to speed up tests, compilations, downloads, and more. - Preserve battery life when you're on the go. - All intensive computation runs on your server. - You're no longer running excess instances of Chrome.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/code-server:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at http://<your-ip>:8443. For github integration, drop your ssh key in to /config/.ssh. Then open a terminal from the top menu and set your github username and email via the following commands

    git config --global user.name "username"
     git config --global user.email "email address"
     

    Hashed code-server password

    How to create the hashed password.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
    @@ -39,4 +39,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8443 web gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    PASSWORD=password Optional web gui password, if PASSWORD or HASHED_PASSWORD is not provided, there will be no auth.
    HASHED_PASSWORD= Optional web gui password, overrides PASSWORD, instructions on how to create it is below.
    SUDO_PASSWORD=password If this optional variable is set, user will have sudo access in the code-server terminal with the specified password.
    SUDO_PASSWORD_HASH= Optionally set sudo password via hash (takes priority over SUDO_PASSWORD var). Format is $type$salt$hashed.
    PROXY_DOMAIN=code-server.my.domain If this optional variable is set, this domain will be proxied for subdomain proxying. See Documentation
    DEFAULT_WORKSPACE=/config/workspace If this optional variable is set, code-server will open this directory by default

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it code-server /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f code-server
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' code-server
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/code-server:latest

    Versions

    • 05.10.22: - Install recommended deps to maintain parity with the older images.
    • 29.09.22: - Rebase to jammy, switch to s6v3. Fix chown logic to skip /config/workspace contents.
    • 20.02.22: - Install using the official tarballs.
    • 29.12.21: - Add install-extension as a helper for mods to install extensions.
    • 06.12.21: - Add DEFAULT_WORKSPACE env var.
    • 29.11.21: - Rebase to Ubuntu focal.
    • 16.09.21: - Fix slow chown on large workspace (contents of workspace folder no longer chowned).
    • 11.07.21: - Bump node to 14 to fix builds
    • 08.05.21: - Fix doc link
    • 04.02.20: - Allow setting gui password via hash using env var HASHED_PASSWORD.
    • 23.12.20: - Allow setting sudo password via hash using env var SUDO_PASSWORD_HASH.
    • 29.05.20: - Add --domain-proxy support.
    • 21.05.20: - Shrink images, install via yarn, fix arm32v7 build.
    • 18.05.20: - Switch to multi-arch images, install via npm.
    • 29.04.20: - Update start arguments.
    • 01.04.20: - Structural changes required for v3.
    • 17.01.20: - Fix artifact url retrieval from github.
    • 24.10.19: - Upgrade to v2 builds.
    • 28.09.19: - Update project logo.
    • 21.09.19: - Add development builds/tag.
    • 09.07.19: - Add optional sudo access.
    • 01.07.19: - Add nano.
    • 24.06.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it code-server /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f code-server
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' code-server
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/code-server:latest

    Versions

    • 05.10.22: - Install recommended deps to maintain parity with the older images.
    • 29.09.22: - Rebase to jammy, switch to s6v3. Fix chown logic to skip /config/workspace contents.
    • 20.02.22: - Install using the official tarballs.
    • 29.12.21: - Add install-extension as a helper for mods to install extensions.
    • 06.12.21: - Add DEFAULT_WORKSPACE env var.
    • 29.11.21: - Rebase to Ubuntu focal.
    • 16.09.21: - Fix slow chown on large workspace (contents of workspace folder no longer chowned).
    • 11.07.21: - Bump node to 14 to fix builds
    • 08.05.21: - Fix doc link
    • 04.02.20: - Allow setting gui password via hash using env var HASHED_PASSWORD.
    • 23.12.20: - Allow setting sudo password via hash using env var SUDO_PASSWORD_HASH.
    • 29.05.20: - Add --domain-proxy support.
    • 21.05.20: - Shrink images, install via yarn, fix arm32v7 build.
    • 18.05.20: - Switch to multi-arch images, install via npm.
    • 29.04.20: - Update start arguments.
    • 01.04.20: - Structural changes required for v3.
    • 17.01.20: - Fix artifact url retrieval from github.
    • 24.10.19: - Upgrade to v2 builds.
    • 28.09.19: - Update project logo.
    • 21.09.19: - Add development builds/tag.
    • 09.07.19: - Add optional sudo access.
    • 01.07.19: - Add nano.
    • 24.06.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-codiad/index.html b/images/docker-codiad/index.html index 654ab11457..71ee8334e8 100644 --- a/images/docker-codiad/index.html +++ b/images/docker-codiad/index.html @@ -1,4 +1,4 @@ - linuxserver/codiad - LinuxServer.io

    linuxserver/codiad

    Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED. PLEASE MIGRATE TO CLOUD9 IF POSSIBLE linuxserver/cloud9 Codiad is a web-based IDE framework with a small footprint and minimal requirements. We have added a few plugins. More can be added in the marketplace in the WebUI.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/codiad should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
    + linuxserver/codiad - LinuxServer.io       

    linuxserver/codiad

    Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED. PLEASE MIGRATE TO CLOUD9 IF POSSIBLE linuxserver/cloud9 Codiad is a web-based IDE framework with a small footprint and minimal requirements. We have added a few plugins. More can be added in the marketplace in the WebUI.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/codiad should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
       --name=codiad \
       -e PUID=1000 \
       -e PGID=1000 \
    @@ -24,4 +24,4 @@ services:
         restart: unless-stopped
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where Codiad stores data.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it codiad /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f codiad
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' codiad
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/codiad

    Versions

    • 10.06.19: - Deprecate Image.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9, adding ssh client.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 26.09.18: - Add sed to init file to configure projects folder correctly.
    • 04.09.18: - Rebase to alpine linux 3.8.
    • 09.01.18: - Rebase to alpine linux 3.7.
    • 25.05.17: - Rebase to alpine linux 3.6.
    • 18.02.17: - Rebase to alpine linux 3.5.
    • 14.10.16: - Add version layer information.
    • 10.09.16: - Add layer badges to README.
    • 06.11.15: - Initial Release.
    \ No newline at end of file +

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it codiad /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f codiad
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' codiad
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/codiad

    Versions

    • 10.06.19: - Deprecate Image.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9, adding ssh client.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 26.09.18: - Add sed to init file to configure projects folder correctly.
    • 04.09.18: - Rebase to alpine linux 3.8.
    • 09.01.18: - Rebase to alpine linux 3.7.
    • 25.05.17: - Rebase to alpine linux 3.6.
    • 18.02.17: - Rebase to alpine linux 3.5.
    • 14.10.16: - Add version layer information.
    • 10.09.16: - Add layer badges to README.
    • 06.11.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-codimd/index.html b/images/docker-codimd/index.html index 63acc13c0e..4a1d91bac6 100644 --- a/images/docker-codimd/index.html +++ b/images/docker-codimd/index.html @@ -1,4 +1,4 @@ - [linuxserver/codimd](https://github.com/linuxserver/docker-codimd) - LinuxServer.io

    linuxserver/codimd

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Codimd gives you access to all your files wherever you are.

    CodiMD is a real-time, multi-platform collaborative markdown note editor. This means that you can write notes with other people on your desktop, tablet or even on the phone. You can sign-in via multiple auth providers like Facebook, Twitter, GitHub and many more on the homepage.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/codimd should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    version: "3"
    + [linuxserver/codimd](https://github.com/linuxserver/docker-codimd) - LinuxServer.io       

    linuxserver/codimd

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Codimd gives you access to all your files wherever you are.

    CodiMD is a real-time, multi-platform collaborative markdown note editor. This means that you can write notes with other people on your desktop, tablet or even on the phone. You can sign-in via multiple auth providers like Facebook, Twitter, GitHub and many more on the homepage.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/codimd should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    version: "3"
     services:
       mariadb:
         image: linuxserver/mariadb:latest
    @@ -51,4 +51,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 If you wish to access this container from http://{IP}:${PORT}` this must be left unchanged.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    DB_HOST=<hostname or ip> Host address of mysql database
    DB_PORT=3306 Port to access mysql database default is 3306
    DB_USER=codimd Database user
    DB_PASS=<secret password> Database password
    DB_NAME=codimd Database name
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config CodiMD config and configurable files

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    THIS IMAGE IS DEPRECATED. CodiMD is rebranded as HedgeDoc and the new docker image is at linuxserver/hedgedoc.

    CodiMD web interface can be accessed http://${IP}:3000/, if you want to use a custom domain or anything besides port 3000 you will need to leverage their env settings for callbacks: (specifically for CMD_DOMAIN and CMD_URL_ADDPORT)

    Full list of CodiMD options

    For convience we provide a working example using Mysql as a backend in this document, if you do not wish to use our custom environment values or a Mysql database backend feel free to leverage any of the settings laid out in the link above.

    To run behind a reverse proxy we have a preconfigured config using docker networking included in our LetsEncrypt image and you can read how to use this in the Reverse Proxy Confs repository

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it codimd /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f codimd
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' codimd
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/codimd

    Versions

    • 22.12.20: - Deprecate image in favor of the new rebranded image at linuxserver/hedgedoc.
    • 23.05.19: - Initial release
    \ No newline at end of file +

    Application Setup

    THIS IMAGE IS DEPRECATED. CodiMD is rebranded as HedgeDoc and the new docker image is at linuxserver/hedgedoc.

    CodiMD web interface can be accessed http://${IP}:3000/, if you want to use a custom domain or anything besides port 3000 you will need to leverage their env settings for callbacks: (specifically for CMD_DOMAIN and CMD_URL_ADDPORT)

    Full list of CodiMD options

    For convience we provide a working example using Mysql as a backend in this document, if you do not wish to use our custom environment values or a Mysql database backend feel free to leverage any of the settings laid out in the link above.

    To run behind a reverse proxy we have a preconfigured config using docker networking included in our LetsEncrypt image and you can read how to use this in the Reverse Proxy Confs repository

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it codimd /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f codimd
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' codimd
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/codimd

    Versions

    • 22.12.20: - Deprecate image in favor of the new rebranded image at linuxserver/hedgedoc.
    • 23.05.19: - Initial release
    \ No newline at end of file diff --git a/images/docker-cops/index.html b/images/docker-cops/index.html index 149bc1f5a0..293393f152 100644 --- a/images/docker-cops/index.html +++ b/images/docker-cops/index.html @@ -1,4 +1,4 @@ - cops - LinuxServer.io

    linuxserver/cops

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Cops by Sébastien Lucas, stands for Calibre OPDS (and HTML) Php Server.

    COPS links to your Calibre library database and allows downloading and emailing of books directly from a web browser and provides a OPDS feed to connect to your devices.

    Changes in your Calibre library are reflected immediately in your COPS pages.

    See : COPS's home for more details.

    Don't forget to check the Wiki.

    Why? (taken from the author's site)

    In my opinion Calibre is a marvelous tool but is too big and has too much dependencies to be used for its content server.

    That's the main reason why I coded this OPDS server. I needed a simple tool to be installed on a small server (Seagate Dockstar in my case).

    I initially thought of Calibre2OPDS but as it generate static file no search was possible.

    Later I added an simple HTML catalog that should be usable on my Kobo.

    So COPS's main advantages are : * No need for many dependencies. * No need for a lot of CPU or RAM. * Not much code. * Search is available. * With Dropbox / owncloud it's very easy to have an up to date OPDS server. * It was fun to code.

    If you want to use the OPDS feed don't forget to specify feed.php at the end of your URL.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/cops:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Unlike other implementations of COPS in a docker container, the linuxserver version gives you access to config_local.php in /config to customise your install to suit your needs, including details of your email account etc to enable emailing of books, it also includes the dependencies required to directly view epub books in your browser.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + cops - LinuxServer.io       

    linuxserver/cops

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Cops by Sébastien Lucas, stands for Calibre OPDS (and HTML) Php Server.

    COPS links to your Calibre library database and allows downloading and emailing of books directly from a web browser and provides a OPDS feed to connect to your devices.

    Changes in your Calibre library are reflected immediately in your COPS pages.

    See : COPS's home for more details.

    Don't forget to check the Wiki.

    Why? (taken from the author's site)

    In my opinion Calibre is a marvelous tool but is too big and has too much dependencies to be used for its content server.

    That's the main reason why I coded this OPDS server. I needed a simple tool to be installed on a small server (Seagate Dockstar in my case).

    I initially thought of Calibre2OPDS but as it generate static file no search was possible.

    Later I added an simple HTML catalog that should be usable on my Kobo.

    So COPS's main advantages are : * No need for many dependencies. * No need for a lot of CPU or RAM. * Not much code. * Search is available. * With Dropbox / owncloud it's very easy to have an up to date OPDS server. * It was fun to code.

    If you want to use the OPDS feed don't forget to specify feed.php at the end of your URL.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/cops:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Unlike other implementations of COPS in a docker container, the linuxserver version gives you access to config_local.php in /config to customise your install to suit your needs, including details of your email account etc to enable emailing of books, it also includes the dependencies required to directly view epub books in your browser.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       cops:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config COPS Application Data.
    /books Calibre metadata.db location.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it cops /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f cops
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' cops
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/cops:latest

    Versions

    • 22.11.20: - Pin composer version to 1.10.17.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 27.02.19: - Upgrade packages during install to prevent mismatch with baseimage.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 14.01.19: - Add multiarch and pipeline logic.
    • 21.08.18: - Rebase to alpine 3.8.
    • 02.07.18: - Add php7-ctype dependency.
    • 08.01.18: - Rebase to alpine 3.7.
    • 25.05.17: - Rebase to alpine 3.6.
    • 03.04.17: - Add composer packages, reduce layers.
    • 02.04.17: - Updated to version 1.1.0.
    • 05.02.17: - Updated to Alpine 3.5 & PHP7.
    • 24.10.16: - Updated to implement user based config.
    • 24.10.16: - Updated to version 1.0.1.
    • 14.10.16: - Add version layer information.
    • 28.09.16: - Add php5-zlib.
    • 11.09.16: - Add layer badges to README.
    • 29.08.16: - Add php5-opcache.
    • 28.08.16: - Add badges to README.
    • 12.08.16: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it cops /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f cops
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' cops
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/cops:latest

    Versions

    • 22.11.20: - Pin composer version to 1.10.17.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 27.02.19: - Upgrade packages during install to prevent mismatch with baseimage.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 14.01.19: - Add multiarch and pipeline logic.
    • 21.08.18: - Rebase to alpine 3.8.
    • 02.07.18: - Add php7-ctype dependency.
    • 08.01.18: - Rebase to alpine 3.7.
    • 25.05.17: - Rebase to alpine 3.6.
    • 03.04.17: - Add composer packages, reduce layers.
    • 02.04.17: - Updated to version 1.1.0.
    • 05.02.17: - Updated to Alpine 3.5 & PHP7.
    • 24.10.16: - Updated to implement user based config.
    • 24.10.16: - Updated to version 1.0.1.
    • 14.10.16: - Add version layer information.
    • 28.09.16: - Add php5-zlib.
    • 11.09.16: - Add layer badges to README.
    • 29.08.16: - Add php5-opcache.
    • 28.08.16: - Add badges to README.
    • 12.08.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-couchpotato/index.html b/images/docker-couchpotato/index.html index 5a881387ec..67eecde4a9 100644 --- a/images/docker-couchpotato/index.html +++ b/images/docker-couchpotato/index.html @@ -1,4 +1,4 @@ - couchpotato - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. This project is no longer maintained upstream and we will no longer be updating this image. For an alternative try: https://github.com/linuxserver/docker-radarr

    linuxserver/couchpotato

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Couchpotato is an automatic NZB and torrent downloader. You can keep a movies I want list and it will search for NZBs/torrents of these movies every X hours. Once a movie is found, it will send it to SABnzbd or download the torrent to a specified directory.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/couchpotato should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Application Setup

    Access the webui at <your-ip>:5050, for more information check out CouchPotato.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + couchpotato - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. This project is no longer maintained upstream and we will no longer be updating this image. For an alternative try: https://github.com/linuxserver/docker-radarr

    linuxserver/couchpotato

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Couchpotato is an automatic NZB and torrent downloader. You can keep a movies I want list and it will search for NZBs/torrents of these movies every X hours. Once a movie is found, it will send it to SABnzbd or download the torrent to a specified directory.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/couchpotato should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Application Setup

    Access the webui at <your-ip>:5050, for more information check out CouchPotato.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       couchpotato:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    5050 http gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Couchpotato Application Data.
    /downloads Downloads Folder.
    /movies Movie Share.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it couchpotato /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f couchpotato
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' couchpotato
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/couchpotato

    Versions

    • 29.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 10.06.19: - Add back unrar & unzip that were accidentally left out during rebase.
    • 06.06.19: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 14.01.19: - Multi-arch builds.
    • 16.08.18: - Rebase to alpine 3.8.
    • 06.11.17: - Rebase to alpine 3.7.
    • 20.07.17: - Internal git pull instead of at runtime, add UMASK_SET variable.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push
    • 25.05.17: - Rebase to alpine 3.6
    • 07.02.17: - Rebase to alpine 3.5.
    • 11.11.16: - Stop cp logging to docker log (they are accessible in the webui and the config folder).
    • 30.09.16: - Fix umask.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 12.11.15: - Misc Code Cleanup.
    • 02.10.15: - Change to python baseimage.
    • 28.07.15: - Updated to latest baseimage (for testing), and a fix to autoupdate.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it couchpotato /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f couchpotato
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' couchpotato
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/couchpotato

    Versions

    • 29.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 10.06.19: - Add back unrar & unzip that were accidentally left out during rebase.
    • 06.06.19: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 14.01.19: - Multi-arch builds.
    • 16.08.18: - Rebase to alpine 3.8.
    • 06.11.17: - Rebase to alpine 3.7.
    • 20.07.17: - Internal git pull instead of at runtime, add UMASK_SET variable.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push
    • 25.05.17: - Rebase to alpine 3.6
    • 07.02.17: - Rebase to alpine 3.5.
    • 11.11.16: - Stop cp logging to docker log (they are accessible in the webui and the config folder).
    • 30.09.16: - Fix umask.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 12.11.15: - Misc Code Cleanup.
    • 02.10.15: - Change to python baseimage.
    • 28.07.15: - Updated to latest baseimage (for testing), and a fix to autoupdate.
    \ No newline at end of file diff --git a/images/docker-daapd/index.html b/images/docker-daapd/index.html index 28c50eafc1..60affa0bb2 100644 --- a/images/docker-daapd/index.html +++ b/images/docker-daapd/index.html @@ -1,4 +1,4 @@ - daapd - LinuxServer.io

    linuxserver/daapd

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Daapd (iTunes) media server with support for AirPlay devices, Apple Remote (and compatibles), Chromecast, MPD and internet radio.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/daapd:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Map your music folder, open up itunes on the same LAN to see your music there.

    The web interface is available at http://<your ip>:3689

    For further setup options of remotes etc, check out the daapd website, Owntone.

    Enable spotify connect server

    Enable the spotify connect server by creating a pipe named 'spotify' in the root of your mounted music folder (not possible on most network mounts):

    mkfifo <music_folder>/spotify
    + daapd - LinuxServer.io       

    linuxserver/daapd

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Daapd (iTunes) media server with support for AirPlay devices, Apple Remote (and compatibles), Chromecast, MPD and internet radio.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/daapd:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Map your music folder, open up itunes on the same LAN to see your music there.

    The web interface is available at http://<your ip>:3689

    For further setup options of remotes etc, check out the daapd website, Owntone.

    Enable spotify connect server

    Enable the spotify connect server by creating a pipe named 'spotify' in the root of your mounted music folder (not possible on most network mounts):

    mkfifo <music_folder>/spotify
     

    The spotify connect server should show up as the 'forked-daapd' device in your Spotify application.

    It is recommended to set the pipe_autostart option to true in your forked-daapd config.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Networking (--net)

    Parameter Function
    --net=host Shares host networking with container.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where daapd server stores its config and dbase files.
    /music Map to your music folder.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it daapd /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f daapd
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' daapd
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/daapd:latest

    Versions

    • 31.05.22: - Make sure the user has access to the audio device.
    • 31.05.22: - Add new deps, flex and bison.
    • 12.02.22: - Rebase to Alpine 3.15.
    • 14.09.21: - Enabled librespot. Disabled spotify on ARMv7
    • 10.07.21: - Change of paths to work with the new package name, OwnTone.
    • 02.04.21: - Update upstream repo, again.
    • 30.03.21: - Update upstream repo.
    • 06.10.20: - Enabled Spotify on Alpine 3.12 for X86_64 and ARMv7.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 16.01.20: - Rebase to alpine linux 3.11 and build antlr3c from source.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 14.01.19: - Add pipeline logic and multi arch.
    • 20.08.18: - Rebase to alpine linux 3.8.
    • 09.06.18: - Use buildstage and update dependencies.
    • 05.03.18: - Use updated configure ac and disable avcodecsend to hopefully mitigate crashes with V26.
    • 25.02.18: - Query version before pull and build latest release.
    • 03.01.18: - Deprecate cpu_core routine lack of scaling.
    • 07.12.17: - Rebase to alpine linux 3.7.
    • 03.12.17: - Bump to 25.0, cpu core counting routine for faster builds, linting fixes.
    • 26.05.17: - Rebase to alpine linux 3.6.
    • 06.02.17: - Rebase to alpine linux 3.5.
    • 10.01.17: - Bump to 24.2.
    • 14.10.16: - Add version layer information.
    • 17.09.16: - Rebase to alpine linux, remove redundant spotify support, move to main repository.
    • 28.02.16: - Add chromecast support, bump dependency versions.
    • 04.01.16: - Disable ipv6 by default because in v23.4 it doesn't work in unraid with it set.
    • 17.12.15: - Add in spotify support.
    • 25.11.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it daapd /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f daapd
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' daapd
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/daapd:latest

    Versions

    • 31.05.22: - Make sure the user has access to the audio device.
    • 31.05.22: - Add new deps, flex and bison.
    • 12.02.22: - Rebase to Alpine 3.15.
    • 14.09.21: - Enabled librespot. Disabled spotify on ARMv7
    • 10.07.21: - Change of paths to work with the new package name, OwnTone.
    • 02.04.21: - Update upstream repo, again.
    • 30.03.21: - Update upstream repo.
    • 06.10.20: - Enabled Spotify on Alpine 3.12 for X86_64 and ARMv7.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 16.01.20: - Rebase to alpine linux 3.11 and build antlr3c from source.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 14.01.19: - Add pipeline logic and multi arch.
    • 20.08.18: - Rebase to alpine linux 3.8.
    • 09.06.18: - Use buildstage and update dependencies.
    • 05.03.18: - Use updated configure ac and disable avcodecsend to hopefully mitigate crashes with V26.
    • 25.02.18: - Query version before pull and build latest release.
    • 03.01.18: - Deprecate cpu_core routine lack of scaling.
    • 07.12.17: - Rebase to alpine linux 3.7.
    • 03.12.17: - Bump to 25.0, cpu core counting routine for faster builds, linting fixes.
    • 26.05.17: - Rebase to alpine linux 3.6.
    • 06.02.17: - Rebase to alpine linux 3.5.
    • 10.01.17: - Bump to 24.2.
    • 14.10.16: - Add version layer information.
    • 17.09.16: - Rebase to alpine linux, remove redundant spotify support, move to main repository.
    • 28.02.16: - Add chromecast support, bump dependency versions.
    • 04.01.16: - Disable ipv6 by default because in v23.4 it doesn't work in unraid with it set.
    • 17.12.15: - Add in spotify support.
    • 25.11.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-darktable/index.html b/images/docker-darktable/index.html index e7c160fa33..c086a69871 100644 --- a/images/docker-darktable/index.html +++ b/images/docker-darktable/index.html @@ -1,4 +1,4 @@ - darktable - LinuxServer.io

    linuxserver/darktable

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    darktable is an open source photography workflow application and raw developer. A virtual lighttable and darkroom for photographers. It manages your digital negatives in a database, lets you view them through a zoomable lighttable and enables you to develop raw images and enhance them.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/darktable:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + darktable - LinuxServer.io       

    linuxserver/darktable

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    darktable is an open source photography workflow application and raw developer. A virtual lighttable and darkroom for photographers. It manages your digital negatives in a database, lets you view them through a zoomable lighttable and enables you to develop raw images and enhance them.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/darktable:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       darktable:
    @@ -28,4 +28,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Darktable desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores program settings and images

    Miscellaneous Options

    Parameter Function
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function on older hosts as syscalls are unknown to Docker.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it darktable /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f darktable
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' darktable
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/darktable:latest

    Versions

    • 23.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 31.12.21: - Rebase to Alpine 3.15.
    • 01.10.21: - Rebase to Alpine 3.14.
    • 07.04.21: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it darktable /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f darktable
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' darktable
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/darktable:latest

    Versions

    • 23.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 31.12.21: - Rebase to Alpine 3.15.
    • 01.10.21: - Rebase to Alpine 3.14.
    • 07.04.21: - Initial release.
    \ No newline at end of file diff --git a/images/docker-davos/index.html b/images/docker-davos/index.html index 03755da673..c8f1ca5cd2 100644 --- a/images/docker-davos/index.html +++ b/images/docker-davos/index.html @@ -1,4 +1,4 @@ - davos - LinuxServer.io

    linuxserver/davos

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Davos is an FTP automation tool that periodically scans given host locations for new files. It can be configured for various purposes, including listening for specific files to appear in the host location, ready for it to download and then move, if required. It also supports completion notifications as well as downstream API calls, to further the workflow.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/davos:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application does not require any set up other than starting the docker container. Further documentation can be found on the davos GitHub repository page.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + davos - LinuxServer.io       

    linuxserver/davos

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Davos is an FTP automation tool that periodically scans given host locations for new files. It can be configured for various purposes, including listening for specific files to appear in the host location, ready for it to download and then move, if required. It also supports completion notifications as well as downstream API calls, to further the workflow.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/davos:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application does not require any set up other than starting the docker container. Further documentation can be found on the davos GitHub repository page.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       davos:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 This is the default port that davos runs under

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation

    Volume Mappings (-v)

    Volume Function
    /config davos's config location. This is where it stores its database file and logs.
    /download davos's file download location

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it davos /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f davos
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' davos
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/davos:latest

    Versions

    • 15.01.22: - Rebasing to alpine 3.15.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.03.19: - Updating runtime deps due to change in OpenJRE.
    • 08.03.19: - Updating build environment to pass proper build flags and use gradle wrapper.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 18.11.16: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it davos /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f davos
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' davos
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/davos:latest

    Versions

    • 15.01.22: - Rebasing to alpine 3.15.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.03.19: - Updating runtime deps due to change in OpenJRE.
    • 08.03.19: - Updating build environment to pass proper build flags and use gradle wrapper.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 18.11.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-ddclient/index.html b/images/docker-ddclient/index.html index e0010c239d..bc414e41de 100644 --- a/images/docker-ddclient/index.html +++ b/images/docker-ddclient/index.html @@ -1,4 +1,4 @@ - ddclient - LinuxServer.io

    linuxserver/ddclient

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ddclient is a Perl client used to update dynamic DNS entries for accounts on Dynamic DNS Network Service Provider. It was originally written by Paul Burry and is now mostly by wimpunk. It has the capability to update more than just dyndns and it can fetch your WAN-ipaddress in a few different ways.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ddclient:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Edit the ddclient.conf file found in your /config volume (also see official ddclient documentation). This config file has many providers to choose from and you basically just have to uncomment your provider and add username/password where requested. If you modify ddclient.conf, ddclient will automaticcaly restart and read the config.

    Get dynamic IP from Fritz.Box

    If ddclient shall fetch the dynamic (public) IP-address from a fritz.box (AVM) add the following line to /config/ddclient.conf:

    use=cmd, cmd=/etc/ddclient/get-ip-from-fritzbox
    + ddclient - LinuxServer.io       

    linuxserver/ddclient

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ddclient is a Perl client used to update dynamic DNS entries for accounts on Dynamic DNS Network Service Provider. It was originally written by Paul Burry and is now mostly by wimpunk. It has the capability to update more than just dyndns and it can fetch your WAN-ipaddress in a few different ways.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ddclient:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Edit the ddclient.conf file found in your /config volume (also see official ddclient documentation). This config file has many providers to choose from and you basically just have to uncomment your provider and add username/password where requested. If you modify ddclient.conf, ddclient will automaticcaly restart and read the config.

    Get dynamic IP from Fritz.Box

    If ddclient shall fetch the dynamic (public) IP-address from a fritz.box (AVM) add the following line to /config/ddclient.conf:

    use=cmd, cmd=/etc/ddclient/get-ip-from-fritzbox
     

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
    @@ -23,4 +23,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where ddclient should store its config files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ddclient /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ddclient
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ddclient
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ddclient:latest

    Versions

    • 20.10.22: - Update build instructions for 3.10.0. Update default ddclient.conf.
    • 15.01.22: - Rebase to Alpine 3.15
    • 15.05.21: - Distribute script 'sample-get-ip-from-fritzbox' from ddclient repo
    • 08.03.21: - Added bind-tools to provide nsupdate
    • 01.06.20: - Rebasing to alpine 3.12.
    • 08.02.20: - Ingest from Github.
    • 06.02.19: - Fix permissions.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 10.03.19: - Add perl-io-socket-inet6 for ipv6 support.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 22.08.18: - Rebase to alpine 3.8.
    • 10.08.18: - Update to ddclient v3.9.0. For Cloudflare users, please ensure you remove the line server=www.cloudflare.com from your ddclient.conf.
    • 07.12.17: - Rebase to alpine 3.7.
    • 28.05.17: - Rebase to alpine 3.6.
    • 10.02.17: - Rebase to alpine 3.5.
    • 26.11.16: - Update README to new standard and add icon and other small details.
    • 29.08.16: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ddclient /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ddclient
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ddclient
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ddclient:latest

    Versions

    • 20.10.22: - Update build instructions for 3.10.0. Update default ddclient.conf.
    • 15.01.22: - Rebase to Alpine 3.15
    • 15.05.21: - Distribute script 'sample-get-ip-from-fritzbox' from ddclient repo
    • 08.03.21: - Added bind-tools to provide nsupdate
    • 01.06.20: - Rebasing to alpine 3.12.
    • 08.02.20: - Ingest from Github.
    • 06.02.19: - Fix permissions.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 10.03.19: - Add perl-io-socket-inet6 for ipv6 support.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 22.08.18: - Rebase to alpine 3.8.
    • 10.08.18: - Update to ddclient v3.9.0. For Cloudflare users, please ensure you remove the line server=www.cloudflare.com from your ddclient.conf.
    • 07.12.17: - Rebase to alpine 3.7.
    • 28.05.17: - Rebase to alpine 3.6.
    • 10.02.17: - Rebase to alpine 3.5.
    • 26.11.16: - Update README to new standard and add icon and other small details.
    • 29.08.16: - Initial release.
    \ No newline at end of file diff --git a/images/docker-deluge/index.html b/images/docker-deluge/index.html index 608c70f4b9..d8bb9c605d 100644 --- a/images/docker-deluge/index.html +++ b/images/docker-deluge/index.html @@ -1,4 +1,4 @@ - deluge - LinuxServer.io

    linuxserver/deluge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Deluge is a lightweight, Free Software, cross-platform BitTorrent client.

    • Full Encryption
    • WebUI
    • Plugin System
    • Much more...

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/deluge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The admin interface is available at http://SERVER-IP:8112 with a default user/password of admin/deluge.

    To change the password (recommended) log in to the web interface and go to Preferences->Interface->Password.

    Change the inbound port to 6881 (or whichever port you've mapped for the container) under Preferences->Network, otherwise random ports will be used.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + deluge - LinuxServer.io       

    linuxserver/deluge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Deluge is a lightweight, Free Software, cross-platform BitTorrent client.

    • Full Encryption
    • WebUI
    • Plugin System
    • Much more...

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/deluge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The admin interface is available at http://SERVER-IP:8112 with a default user/password of admin/deluge.

    To change the password (recommended) log in to the web interface and go to Preferences->Interface->Password.

    Change the inbound port to 6881 (or whichever port you've mapped for the container) under Preferences->Network, otherwise random ports will be used.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       deluge:
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8112 Port for webui
    6881 Inbound torrent traffic (See App Setup)
    6881/udp Inbound torrent traffic (See App Setup)

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use
    DELUGE_LOGLEVEL=error set the loglevel output when running Deluge, default is info for deluged and warning for delgued-web

    Volume Mappings (-v)

    Volume Function
    /config deluge configs
    /downloads torrent download directory

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it deluge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f deluge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' deluge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/deluge:latest

    Versions

    • 29.11.22: - Restore geoip using py3-geoip as an interim measure.
    • 24.11.22: - Remove GeoIP packages as geoip will not build under Py 3.11 and Deluge still doesn't support geoip2.
    • 22.11.22: - Update GeoIP URL for new IPFS domain.
    • 29.08.22: - Rebase to Alpine Edge again to follow latest releases.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 16.06.22: - Rebase to Alpine 3.16 from edge.
    • 22.02.22: - Rebase to Alpine, config on first startup, add GeoIP.
    • 15.01.22: - Rebase to Focal.
    • 07.06.21: - Remove host networking from readme examples
    • 23.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 09.05.19: - Add python3 requests and future modules.
    • 24.08.19: - Add ability to set LogLevel for Deluge.
    • 09.06.19: - Update to 2.x using deluge ppa.
    • 02.05.19: - Install full version of 7zip.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 15.11.18: - Add deluge-console.
    • 11.11.18: - Rebase to Ubuntu Bionic, add pipeline multiarch logic.
    • 09.04.18: - update to libressl2.7-libssl.
    • 29.03.18: - Rebase to alpine edge.
    • 07.12.17: - Rebase to alpine 3.7.
    • 20.11.17: - Change libressl2.6-libssl repo.
    • 01.07.17: - Add curl package.
    • 26.05.17: - Rebase to alpine 3.6.
    • 29.04.17: - Add variable for user defined umask.
    • 28.04.17: - update to libressl2.5-libssl.
    • 28.12.16: - Rebase to alpine 3.5 baseimage.
    • 17.11.16: - Rebase to edge baseimage.
    • 13.10.16: - Switch to libressl as openssl deprecated from alpine linux and deluge dependency no longer installs
    • 30.09.16: - Fix umask.
    • 09.09.16: - Add layer badges to README.
    • 30.08.16: - Use pip packages for some critical dependencies.
    • 28.08.16: - Add badges to README.
    • 15.08.16: - Rebase to alpine linux.
    • 09.11.15: - Add unrar and unzip
    • 15.10.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it deluge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f deluge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' deluge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/deluge:latest

    Versions

    • 29.11.22: - Restore geoip using py3-geoip as an interim measure.
    • 24.11.22: - Remove GeoIP packages as geoip will not build under Py 3.11 and Deluge still doesn't support geoip2.
    • 22.11.22: - Update GeoIP URL for new IPFS domain.
    • 29.08.22: - Rebase to Alpine Edge again to follow latest releases.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 16.06.22: - Rebase to Alpine 3.16 from edge.
    • 22.02.22: - Rebase to Alpine, config on first startup, add GeoIP.
    • 15.01.22: - Rebase to Focal.
    • 07.06.21: - Remove host networking from readme examples
    • 23.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 09.05.19: - Add python3 requests and future modules.
    • 24.08.19: - Add ability to set LogLevel for Deluge.
    • 09.06.19: - Update to 2.x using deluge ppa.
    • 02.05.19: - Install full version of 7zip.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 15.11.18: - Add deluge-console.
    • 11.11.18: - Rebase to Ubuntu Bionic, add pipeline multiarch logic.
    • 09.04.18: - update to libressl2.7-libssl.
    • 29.03.18: - Rebase to alpine edge.
    • 07.12.17: - Rebase to alpine 3.7.
    • 20.11.17: - Change libressl2.6-libssl repo.
    • 01.07.17: - Add curl package.
    • 26.05.17: - Rebase to alpine 3.6.
    • 29.04.17: - Add variable for user defined umask.
    • 28.04.17: - update to libressl2.5-libssl.
    • 28.12.16: - Rebase to alpine 3.5 baseimage.
    • 17.11.16: - Rebase to edge baseimage.
    • 13.10.16: - Switch to libressl as openssl deprecated from alpine linux and deluge dependency no longer installs
    • 30.09.16: - Fix umask.
    • 09.09.16: - Add layer badges to README.
    • 30.08.16: - Use pip packages for some critical dependencies.
    • 28.08.16: - Add badges to README.
    • 15.08.16: - Rebase to alpine linux.
    • 09.11.15: - Add unrar and unzip
    • 15.10.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-digikam/index.html b/images/docker-digikam/index.html index bf38c09b5c..539bdf1de2 100644 --- a/images/docker-digikam/index.html +++ b/images/docker-digikam/index.html @@ -1,4 +1,4 @@ - digikam - LinuxServer.io

    linuxserver/digikam

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    digiKam: Professional Photo Management with the Power of Open Source

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/digikam:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    You can also force login on the '/' path without this parameter by passing the environment variable -e AUTO_LOGIN=false.

    Mysql Internal

    When using mysql internal mode for the database you will need to click on "Find" Button for all the required binaries (mysql_install_db,mysqladmin,mysqld). Then select the binary file and press Open.

    Keyboard Layouts

    This should match the layout on the computer you are accessing the container from. The keyboard layouts available for use are: * da-dk-qwerty- Danish keyboard * de-ch-qwertz- Swiss German keyboard (qwertz) * de-de-qwertz- German keyboard (qwertz) - OSK available * en-gb-qwerty- English (UK) keyboard * en-us-qwerty- English (US) keyboard - OSK available DEFAULT * es-es-qwerty- Spanish keyboard - OSK available * fr-ch-qwertz- Swiss French keyboard (qwertz) * fr-fr-azerty- French keyboard (azerty) - OSK available * it-it-qwerty- Italian keyboard - OSK available * ja-jp-qwerty- Japanese keyboard * pt-br-qwerty- Portuguese Brazilian keyboard * sv-se-qwerty- Swedish keyboard * tr-tr-qwerty- Turkish-Q keyboard

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + digikam - LinuxServer.io       

    linuxserver/digikam

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    digiKam: Professional Photo Management with the Power of Open Source

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/digikam:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    You can also force login on the '/' path without this parameter by passing the environment variable -e AUTO_LOGIN=false.

    Mysql Internal

    When using mysql internal mode for the database you will need to click on "Find" Button for all the required binaries (mysql_install_db,mysqladmin,mysqld). Then select the binary file and press Open.

    Keyboard Layouts

    This should match the layout on the computer you are accessing the container from. The keyboard layouts available for use are: * da-dk-qwerty- Danish keyboard * de-ch-qwertz- Swiss German keyboard (qwertz) * de-de-qwertz- German keyboard (qwertz) - OSK available * en-gb-qwerty- English (UK) keyboard * en-us-qwerty- English (US) keyboard - OSK available DEFAULT * es-es-qwerty- Spanish keyboard - OSK available * fr-ch-qwertz- Swiss French keyboard (qwertz) * fr-fr-azerty- French keyboard (azerty) - OSK available * it-it-qwerty- Italian keyboard - OSK available * ja-jp-qwerty- Japanese keyboard * pt-br-qwerty- Portuguese Brazilian keyboard * sv-se-qwerty- Swedish keyboard * tr-tr-qwerty- Turkish-Q keyboard

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       digikam:
    @@ -31,4 +31,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 digiKam desktop gui

    Networking (--net)

    Parameter Function
    --net=host Use Host Networking

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York.
    SUBFOLDER=/ Specify a subfolder to use with reverse proxies, IE /subfolder/
    KEYBOARD=en-us-qwerty See the keyboard layouts section for more information and options.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores database.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it digikam /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f digikam
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' digikam
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/digikam:latest

    Versions

    • 21.11.22: - Trigger upon baseimage updates (arch being a rolling distro has too many dependency breaks otherwise). Release version will be the baseimage build date going forward.
    • 20.10.22: - Migrate to s6v3.
    • 07.03.22: - Add Exiftool and firefox for image exports.
    • 20.02.22: - Add MariaDB, expand documentation.
    • 15.02.22: - Rebase to Arch.
    • 27.12.21: - Rebase to focal to resolve dependency issues.
    • 27.03.21: - Download link fixed.
    • 20.05.20: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it digikam /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f digikam
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' digikam
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/digikam:latest

    Versions

    • 21.11.22: - Trigger upon baseimage updates (arch being a rolling distro has too many dependency breaks otherwise). Release version will be the baseimage build date going forward.
    • 20.10.22: - Migrate to s6v3.
    • 07.03.22: - Add Exiftool and firefox for image exports.
    • 20.02.22: - Add MariaDB, expand documentation.
    • 15.02.22: - Rebase to Arch.
    • 27.12.21: - Rebase to focal to resolve dependency issues.
    • 27.03.21: - Download link fixed.
    • 20.05.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-dillinger/index.html b/images/docker-dillinger/index.html index 174b078fb5..868315a6bc 100644 --- a/images/docker-dillinger/index.html +++ b/images/docker-dillinger/index.html @@ -1,4 +1,4 @@ - dillinger - LinuxServer.io

    linuxserver/dillinger

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Dillinger is a cloud-enabled, mobile-ready, offline-storage, AngularJS powered HTML5 Markdown editor.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/dillinger:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    Access the webui at http://your-ip:8080 , keep in mind that storage for this application is in your browser session not server side. Only plugin configurations will ever be stored server side.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + dillinger - LinuxServer.io       

    linuxserver/dillinger

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Dillinger is a cloud-enabled, mobile-ready, offline-storage, AngularJS powered HTML5 Markdown editor.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/dillinger:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    Access the webui at http://your-ip:8080 , keep in mind that storage for this application is in your browser session not server side. Only plugin configurations will ever be stored server side.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       dillinger:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 The port for the Dillinger web interface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Dillinger plugin config files

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it dillinger /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f dillinger
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' dillinger
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/dillinger:latest

    Versions

    • 19.04.22: - Rebase to Alpine.
    • 31.05.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it dillinger /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f dillinger
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' dillinger
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/dillinger:latest

    Versions

    • 19.04.22: - Rebase to Alpine.
    • 31.05.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-diskover/index.html b/images/docker-diskover/index.html index e053210572..53de570d6e 100644 --- a/images/docker-diskover/index.html +++ b/images/docker-diskover/index.html @@ -1,4 +1,4 @@ - diskover - LinuxServer.io

    linuxserver/diskover

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    diskover is an open source file system indexer that uses Elasticsearch to index and manage data across heterogeneous storage systems.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/diskover:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This application is dependent on an ElasticSearch instance. Please see the example compose file for additional information.

    The default username is diskover with the password of darkdata, access the container at http://<host-ip>/. The UI may be unusable until a valid index has been created.

    The default diskover-web Constants.php file located at /config/diskover-web.conf.d/Constants.php will need to be edited to allow diskover-web to communicate with the ElasticSearch container. The following entries will need to be edited: * const ES_HOST = elasticsearch * const ES_PORT = 9200

    The application doesn't start an index by default. A crontab is created inside of the /config directory and can be set up to run automated indexes of /data. Changes to this crontab file require a restart to apply. You can also manually run an index by executing /app/diskover/diskover.py either in interactive or detached mode:

    • docker exec -u abc -d diskover python3 /app/diskover/diskover.py -i diskover-my_index_name /data Will run an index in the background
    • docker exec -u abc -it diskover python3 /app/diskover/diskover.py -i diskover-my_index_name /data Will run an index in the foreground

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    version: '2'
    + diskover - LinuxServer.io       

    linuxserver/diskover

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    diskover is an open source file system indexer that uses Elasticsearch to index and manage data across heterogeneous storage systems.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/diskover:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This application is dependent on an ElasticSearch instance. Please see the example compose file for additional information.

    The default username is diskover with the password of darkdata, access the container at http://<host-ip>/. The UI may be unusable until a valid index has been created.

    The default diskover-web Constants.php file located at /config/diskover-web.conf.d/Constants.php will need to be edited to allow diskover-web to communicate with the ElasticSearch container. The following entries will need to be edited: * const ES_HOST = elasticsearch * const ES_PORT = 9200

    The application doesn't start an index by default. A crontab is created inside of the /config directory and can be set up to run automated indexes of /data. Changes to this crontab file require a restart to apply. You can also manually run an index by executing /app/diskover/diskover.py either in interactive or detached mode:

    • docker exec -u abc -d diskover python3 /app/diskover/diskover.py -i diskover-my_index_name /data Will run an index in the background
    • docker exec -u abc -it diskover python3 /app/diskover/diskover.py -i diskover-my_index_name /data Will run an index in the foreground

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    version: '2'
     services:
       diskover:
         image: lscr.io/linuxserver/diskover
    @@ -59,4 +59,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 diskover Web UI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York
    ES_HOST=elasticsearch ElasticSearch host (optional)
    ES_PORT=9200 ElasticSearch port (optional)
    ES_USER=elastic ElasticSearch username (optional)
    ES_PASS=changeme ElasticSearch password (optional)

    Volume Mappings (-v)

    Volume Function
    /config Persistent config files
    /data Default mount point to crawl

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it diskover /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f diskover
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' diskover
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/diskover:latest

    Versions

    • 25.02.22: - Add php7-sqlite3 to support rc4 release.
    • 03.11.21: - Added more support for potential config files.
    • 31.10.21: - Added xpack.security variable to ElasticSearch; added instructions to edit Constants.php in diskover; corrected command needed to manually generate an index in diskover
    • 11.10.21: - Updated to diskover-community v2.
    • 19.11.20: - Fix pip packages.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 12.04.19: - Rebase to Alpine 3.9.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 01.11.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it diskover /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f diskover
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' diskover
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/diskover:latest

    Versions

    • 25.02.22: - Add php7-sqlite3 to support rc4 release.
    • 03.11.21: - Added more support for potential config files.
    • 31.10.21: - Added xpack.security variable to ElasticSearch; added instructions to edit Constants.php in diskover; corrected command needed to manually generate an index in diskover
    • 11.10.21: - Updated to diskover-community v2.
    • 19.11.20: - Fix pip packages.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 12.04.19: - Rebase to Alpine 3.9.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 01.11.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-doc-builder/index.html b/images/docker-doc-builder/index.html index f9fd5fe7d2..6cf6447851 100644 --- a/images/docker-doc-builder/index.html +++ b/images/docker-doc-builder/index.html @@ -1,4 +1,4 @@ - linuxserver/doc-builder - LinuxServer.io

    linuxserver/doc-builder

    Expects to run as part of the LSIO CI process. Not for public consumption.

    Running against remote:

    docker run --rm \
    + linuxserver/doc-builder - LinuxServer.io       

    linuxserver/doc-builder

    Expects to run as part of the LSIO CI process. Not for public consumption.

    Running against remote:

    docker run --rm \
      -e CONTAINER_NAME=${CONTAINER_NAME} \
      -v ${TEMPDIR}:/ansible/readme \
      linuxserver/doc-builder:latest
    @@ -6,4 +6,4 @@
      -v $(pwd):/tmp \
      -e LOCAL=true \
      linuxserver/doc-builder:latest
    -

    The output will be in a GENERATED.md in your current working directory.

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file +

    The output will be in a GENERATED.md in your current working directory.

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-docker-compose/index.html b/images/docker-docker-compose/index.html index 2b1083ae7d..be0f0155b4 100644 --- a/images/docker-docker-compose/index.html +++ b/images/docker-docker-compose/index.html @@ -1,4 +1,4 @@ - docker-compose - LinuxServer.io

    linuxserver.io

    Blog Discord Discourse Fleet GitHub Open Collective

    The LinuxServer.io team brings you another container release featuring:

    • regular and timely application updates
    • easy user mappings (PGID, PUID)
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • regular security updates

    Find us at:

    • Blog - all the things you can do with our containers including How-To guides, opinions and much more!
    • Discord - realtime support / chat with the community and the team.
    • Discourse - post on our community forum.
    • Fleet - an online web interface which displays all of our maintained images.
    • GitHub - view the source for all of our repositories.
    • Open Collective - please consider helping us by either donating or contributing to our budget

    linuxserver/docker-compose

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    docker-compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application's services. Then, using a single command, you create and start all the services from your configuration.

    docker-compose

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/docker-compose:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest docker-compose v1 releases
    alpine docker-compose v1 releases with our alpine baseimage
    v2 docker compose v2 releases

    Usage

    Docker cli

    docker run --rm \
    + docker-compose - LinuxServer.io       

    linuxserver.io

    Blog Discord Discourse Fleet GitHub Open Collective

    The LinuxServer.io team brings you another container release featuring:

    • regular and timely application updates
    • easy user mappings (PGID, PUID)
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • regular security updates

    Find us at:

    • Blog - all the things you can do with our containers including How-To guides, opinions and much more!
    • Discord - realtime support / chat with the community and the team.
    • Discourse - post on our community forum.
    • Fleet - an online web interface which displays all of our maintained images.
    • GitHub - view the source for all of our repositories.
    • Open Collective - please consider helping us by either donating or contributing to our budget

    linuxserver/docker-compose

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    docker-compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application's services. Then, using a single command, you create and start all the services from your configuration.

    docker-compose

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/docker-compose:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest docker-compose v1 releases
    alpine docker-compose v1 releases with our alpine baseimage
    v2 docker compose v2 releases

    Usage

    Docker cli

    docker run --rm \
       -v /var/run/docker.sock:/var/run/docker.sock \
       -v "$PWD:$PWD" \
       -w="$PWD" \
    @@ -13,4 +13,4 @@ docker build \
       --pull \
       -t lscr.io/linuxserver/docker-compose:latest .
     

    The ARM variants can be built on x86_64 hardware using multiarch/qemu-user-static

    docker run --rm --privileged multiarch/qemu-user-static:register --reset
    -

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    • 15.03.22: - Add v2 branch. Change master to only fetch v1 releases. Change alpine to only fetch v1 releases. Rebase master to focal. Rebase alpine to 3.15.
    • 17.12.20: - Update run.sh with formatting changes.
    • 04.10.20: - Update run.sh with changes from upstream.
    • 31.08.20: - Update tox and virtualenv.
    • 31.07.20: - Add support for global env var DOCKER_COMPOSE_IMAGE_TAG in the run.sh script.
    • 06.07.20: - Publish docker-compose and docker-cli binaries in Github releases.
    • 01.07.20: - Release alpine based images at alpine tag.
    • 04.06.20: - Bump docker-cli to 19.03.8, auto-detect python3 version.
    • 19.05.20: - Initial Release.
    \ No newline at end of file +

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    • 15.03.22: - Add v2 branch. Change master to only fetch v1 releases. Change alpine to only fetch v1 releases. Rebase master to focal. Rebase alpine to 3.15.
    • 17.12.20: - Update run.sh with formatting changes.
    • 04.10.20: - Update run.sh with changes from upstream.
    • 31.08.20: - Update tox and virtualenv.
    • 31.07.20: - Add support for global env var DOCKER_COMPOSE_IMAGE_TAG in the run.sh script.
    • 06.07.20: - Publish docker-compose and docker-cli binaries in Github releases.
    • 01.07.20: - Release alpine based images at alpine tag.
    • 04.06.20: - Bump docker-cli to 19.03.8, auto-detect python3 version.
    • 19.05.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-dokuwiki/index.html b/images/docker-dokuwiki/index.html index df4fd84299..a52f00a628 100644 --- a/images/docker-dokuwiki/index.html +++ b/images/docker-dokuwiki/index.html @@ -1,4 +1,4 @@ - dokuwiki - LinuxServer.io

    linuxserver/dokuwiki

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Dokuwiki is a simple to use and highly versatile Open Source wiki software that doesn't require a database. It is loved by users for its clean and readable syntax. The ease of maintenance, backup and integration makes it an administrator's favorite. Built in access controls and authentication connectors make DokuWiki especially useful in the enterprise context and the large number of plugins contributed by its vibrant community allow for a broad range of use cases beyond a traditional wiki.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/dokuwiki:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Upon first install go to http://$IP:$PORT/install.php once you have completed the setup, restart the container, login as admin and set "Use nice URLs" in the admin/Configuration Settings panel to .htaccess and tick Use slash as namespace separator in URLs to enable nice URLs you will find the webui at http://$IP:$PORT/, for more info see Dokuwiki

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + dokuwiki - LinuxServer.io       

    linuxserver/dokuwiki

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Dokuwiki is a simple to use and highly versatile Open Source wiki software that doesn't require a database. It is loved by users for its clean and readable syntax. The ease of maintenance, backup and integration makes it an administrator's favorite. Built in access controls and authentication connectors make DokuWiki especially useful in the enterprise context and the large number of plugins contributed by its vibrant community allow for a broad range of use cases beyond a traditional wiki.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/dokuwiki:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Upon first install go to http://$IP:$PORT/install.php once you have completed the setup, restart the container, login as admin and set "Use nice URLs" in the admin/Configuration Settings panel to .htaccess and tick Use slash as namespace separator in URLs to enable nice URLs you will find the webui at http://$IP:$PORT/, for more info see Dokuwiki

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       dokuwiki:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 Application HTTP Port
    443 #optional Application HTTPS Port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it dokuwiki /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f dokuwiki
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' dokuwiki
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/dokuwiki:latest

    Versions

    • 11.13.22: - Move lib/images/smileys/local and lib/images/interwiki outside of the container for user defined smiley and interwiki icon support.
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 20.07.21: - Add php7-dom, fixes minor issues in sprintdoc template.
    • 15.04.21: - Add vendor folder to deny list.
    • 21.02.21: - Store search index outside of container, set absolute (default) path for savedir.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 28.09.20: - Add php7-pdo_sqlite and php7-sqlite3.
    • 23.09.20: - Fix php-local.ini bug introduced in the prior PR.
    • 14.09.20: - Rebase to alpine 3.12. Add php7-ctype, php7-curl, php7-pdo_mysql, php7-pdo_pgsql, php7-pecl-imagick and php7-iconv. Bump upload max filesize and post max size to 100MB. Remove deprecated APP_URL env var. Fix breaking addons.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 01.12.19: - Add php7-ldap package to support LDAP authentication.
    • 28.05.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it dokuwiki /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f dokuwiki
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' dokuwiki
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/dokuwiki:latest

    Versions

    • 11.13.22: - Move lib/images/smileys/local and lib/images/interwiki outside of the container for user defined smiley and interwiki icon support.
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 20.07.21: - Add php7-dom, fixes minor issues in sprintdoc template.
    • 15.04.21: - Add vendor folder to deny list.
    • 21.02.21: - Store search index outside of container, set absolute (default) path for savedir.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 28.09.20: - Add php7-pdo_sqlite and php7-sqlite3.
    • 23.09.20: - Fix php-local.ini bug introduced in the prior PR.
    • 14.09.20: - Rebase to alpine 3.12. Add php7-ctype, php7-curl, php7-pdo_mysql, php7-pdo_pgsql, php7-pecl-imagick and php7-iconv. Bump upload max filesize and post max size to 100MB. Remove deprecated APP_URL env var. Fix breaking addons.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 01.12.19: - Add php7-ldap package to support LDAP authentication.
    • 28.05.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-domoticz/index.html b/images/docker-domoticz/index.html index 353f95bd12..bb7e423257 100644 --- a/images/docker-domoticz/index.html +++ b/images/docker-domoticz/index.html @@ -1,4 +1,4 @@ - domoticz - LinuxServer.io

    linuxserver/domoticz

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Domoticz is a Home Automation System that lets you monitor and configure various devices like: Lights, Switches, various sensors/meters like Temperature, Rain, Wind, UV, Electra, Gas, Water and much more. Notifications/Alerts can be sent to any mobile device.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/domoticz:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    To configure Domoticz, go to the IP of your docker host on the port you configured (default 8080), and add your hardware in Setup > Hardware. The user manual is available at www.domoticz.com

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + domoticz - LinuxServer.io       

    linuxserver/domoticz

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Domoticz is a Home Automation System that lets you monitor and configure various devices like: Lights, Switches, various sensors/meters like Temperature, Rain, Wind, UV, Electra, Gas, Water and much more. Notifications/Alerts can be sent to any mobile device.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/domoticz:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    To configure Domoticz, go to the IP of your docker host on the port you configured (default 8080), and add your hardware in Setup > Hardware. The user manual is available at www.domoticz.com

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       domoticz:
    @@ -40,4 +40,4 @@ usb 1-1.2: FTDI USB Serial Device converter now attached to ttyUSB0
     

    As you can see above, the device node created is ttyUSB0. It does not say where, but it's almost always in /dev/. The correct tag for passing through this USB device is '--device /dev/ttyUSB0:/dev/ttyUSB0'

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 WebUI
    6144 Domoticz communication port.
    1443 Domoticz communication port.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    WEBROOT=domoticz Sets webroot to domoticz for usage with subfolder reverse proxy. Not needed unless reverse proxying.
    DBASE=<path to database> Sets path to database. Do not set unless you know what this does.

    Volume Mappings (-v)

    Volume Function
    /config Where Domoticz stores config files and data.

    Device Mappings (--device)

    Parameter Function
    path to device For passing through USB devices.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it domoticz /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f domoticz
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' domoticz
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/domoticz:latest

    Versions

    • 15.10.22: - Remove deprecated legacy stable branches.
    • 05.02.22: - Set default webroot to /. Add env. variable for setting custom databas path.
    • 26.12.20: - Rebase to Ubuntu Focal, see here for troubleshooting armhf.
    • 24.11.19: - Change to using domoticz builtin Lua and MQTT.
    • 03.11.19: - Set capabilities for domoticz binary and move cmake from edge repo.
    • 28.06.19: - Rebasing to alpine 3.10. Add iputils for ping. Fix typo in readme. Fix permissions for custom icons.
    • 12.05.19: - Add boost dependencies and turn off static boost build. Bump to Alpine 3.9.
    • 30.03.19: - Add env variable to set webroot.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 19.02.19: - Fix branch for version logic.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 02.07.18: - Add openssh package.
    • 01.07.18: - Fix backup/restore in webgui.
    • 03.04.18: - Add dependencies for BroadlinkRM2 plugin.
    • 20.01.18: - Move telldus core to repo to prevent build fail when source site goes down.
    • 18.01.18: - Remove logging to syslog in the run command to prevent double logging.
    • 04.01.18: - Deprecate cpu_core routine lack of scaling.
    • 08.12.17: - Rebase to alpine 3.7.
    • 26.11.17: - Use cpu core counting routine to speed up build time.
    • 28.05.17: - Rebase to alpine 3.6.
    • 26.02.17: - Add curl and replace openssl with libressl.
    • 11.02.17: - Update README.
    • 03.01.17: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it domoticz /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f domoticz
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' domoticz
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/domoticz:latest

    Versions

    • 15.10.22: - Remove deprecated legacy stable branches.
    • 05.02.22: - Set default webroot to /. Add env. variable for setting custom databas path.
    • 26.12.20: - Rebase to Ubuntu Focal, see here for troubleshooting armhf.
    • 24.11.19: - Change to using domoticz builtin Lua and MQTT.
    • 03.11.19: - Set capabilities for domoticz binary and move cmake from edge repo.
    • 28.06.19: - Rebasing to alpine 3.10. Add iputils for ping. Fix typo in readme. Fix permissions for custom icons.
    • 12.05.19: - Add boost dependencies and turn off static boost build. Bump to Alpine 3.9.
    • 30.03.19: - Add env variable to set webroot.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 19.02.19: - Fix branch for version logic.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 02.07.18: - Add openssh package.
    • 01.07.18: - Fix backup/restore in webgui.
    • 03.04.18: - Add dependencies for BroadlinkRM2 plugin.
    • 20.01.18: - Move telldus core to repo to prevent build fail when source site goes down.
    • 18.01.18: - Remove logging to syslog in the run command to prevent double logging.
    • 04.01.18: - Deprecate cpu_core routine lack of scaling.
    • 08.12.17: - Rebase to alpine 3.7.
    • 26.11.17: - Use cpu core counting routine to speed up build time.
    • 28.05.17: - Rebase to alpine 3.6.
    • 26.02.17: - Add curl and replace openssl with libressl.
    • 11.02.17: - Update README.
    • 03.01.17: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-doplarr/index.html b/images/docker-doplarr/index.html index d45f68ddb2..6c0db0c1b1 100644 --- a/images/docker-doplarr/index.html +++ b/images/docker-doplarr/index.html @@ -1,4 +1,4 @@ - doplarr - LinuxServer.io

    linuxserver/doplarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Doplarr is an *arr request bot for Discord."

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/doplarr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    Start by following the Discord setup instructions from Doplarr's readme.

    NOTE: The DISCORD__TOKEN environment variable is required to run the container!

    • If you are using Overseerr, fill in the Overseerr API and URL variables, and leave the Radarr/Sonarr variables blank.
    • If you are using Radarr/Sonarr (and not using Overseerr), fill in the Radarr/Sonarr API and URL variables, and leave the Overseerr variables blank.

    Extra java options can be passed with the JAVA_OPTS environment variable, eg -e JAVA_OPTS="-Xmx256m -Xms256m".

    Review and adjust any Optional Settings from Doplarr's readme.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + doplarr - LinuxServer.io       

    linuxserver/doplarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Doplarr is an *arr request bot for Discord."

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/doplarr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    Start by following the Discord setup instructions from Doplarr's readme.

    NOTE: The DISCORD__TOKEN environment variable is required to run the container!

    • If you are using Overseerr, fill in the Overseerr API and URL variables, and leave the Radarr/Sonarr variables blank.
    • If you are using Radarr/Sonarr (and not using Overseerr), fill in the Radarr/Sonarr API and URL variables, and leave the Overseerr variables blank.

    Extra java options can be passed with the JAVA_OPTS environment variable, eg -e JAVA_OPTS="-Xmx256m -Xms256m".

    Review and adjust any Optional Settings from Doplarr's readme.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       doplarr:
    @@ -58,4 +58,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York
    DISCORD__TOKEN= Specify your discord bot token.
    OVERSEERR__API= Specify your Overseerr API key. Leave blank if using Radarr/Sonarr.
    OVERSEERR__URL=http://localhost:5055 Specify your Overseerr URL. Leave blank if using Radarr/Sonarr.
    RADARR__API= Specify your Radarr API key. Leave blank if using Overseerr.
    RADARR__URL=http://localhost:7878 Specify your Radarr URL. Leave blank if using Overseerr.
    SONARR__API= Specify your Sonarr API key. Leave blank if using Overseerr.
    SONARR__URL=http://localhost:8989 Specify your Sonarr URL. Leave blank if using Overseerr.
    DISCORD__MAX_RESULTS=25 Sets the maximum size of the search results selection
    DISCORD__REQUESTED_MSG_STYLE=:plain Sets the style of the request alert message. One of :plain :embed :none
    SONARR__QUALITY_PROFILE= The name of the quality profile to use by default for Sonarr
    RADARR__QUALITY_PROFILE= The name of the quality profile to use by default for Radarr
    SONARR__ROOTFOLDER= The root folder to use by default for Sonarr
    RADARR__ROOTFOLDER= The root folder to use by default for Radarr
    SONARR__LANGUAGE_PROFILE= The name of the language profile to use by default for Sonarr
    OVERSEERR__DEFAULT_ID= The Overseerr user id to use by default if there is no associated discord account for the requester
    PARTIAL_SEASONS=true Sets whether users can request partial seasons.
    LOG_LEVEL=:info The log level for the logging backend. This can be changed for debugging purposes. One of trace :debug :info :warn :error :fatal :report
    JAVA_OPTS= For passing additional java options.

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it doplarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f doplarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' doplarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/doplarr:latest

    Versions

    • 01.05.22: - Remove DISCORD__ROLE_ID environment variable, see Permissions Configuration.
    • 30.01.22: - Variable adjustments.
    • 30.01.22: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it doplarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f doplarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' doplarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/doplarr:latest

    Versions

    • 01.05.22: - Remove DISCORD__ROLE_ID environment variable, see Permissions Configuration.
    • 30.01.22: - Variable adjustments.
    • 30.01.22: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-doublecommander/index.html b/images/docker-doublecommander/index.html index 4f218c3f01..62b096e5b7 100644 --- a/images/docker-doublecommander/index.html +++ b/images/docker-doublecommander/index.html @@ -1,4 +1,4 @@ - doublecommander - LinuxServer.io

    linuxserver/doublecommander

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Double Commander is a free cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/doublecommander:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + doublecommander - LinuxServer.io       

    linuxserver/doublecommander

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Double Commander is a free cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/doublecommander:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       doublecommander:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Double Commander desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores program settings.
    /data Host data directories, mount as many as needed.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it doublecommander /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f doublecommander
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' doublecommander
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/doublecommander:latest

    Versions

    • 16.09.22: - Migrate to s6v3.
    • 15.02.21: - Rebase to Ubuntu Jammy.
    • 14.12.21: - Rebase to Ubuntu focal.
    • 25.03.20: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it doublecommander /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f doublecommander
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' doublecommander
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/doublecommander:latest

    Versions

    • 16.09.22: - Migrate to s6v3.
    • 15.02.21: - Rebase to Ubuntu Jammy.
    • 14.12.21: - Rebase to Ubuntu focal.
    • 25.03.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-duckdns/index.html b/images/docker-duckdns/index.html index 28121a4938..2ae98bb01a 100644 --- a/images/docker-duckdns/index.html +++ b/images/docker-duckdns/index.html @@ -1,4 +1,4 @@ - duckdns - LinuxServer.io

    linuxserver/duckdns

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Duckdns is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. The service is completely free, and doesn't require reactivation or forum posts to maintain its existence.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/duckdns:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • Go to the duckdns website, register your subdomain(s) and retrieve your token
    • Create a container with your subdomain(s) and token
    • It will update your IP with the DuckDNS service every 5 minutes (with a random jitter)

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + duckdns - LinuxServer.io       

    linuxserver/duckdns

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Duckdns is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. The service is completely free, and doesn't require reactivation or forum posts to maintain its existence.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/duckdns:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • Go to the duckdns website, register your subdomain(s) and retrieve your token
    • Create a container with your subdomain(s) and token
    • It will update your IP with the DuckDNS service every 5 minutes (with a random jitter)

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       duckdns:
    @@ -28,4 +28,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    SUBDOMAINS=subdomain1,subdomain2 multiple subdomains allowed, comma separated, no spaces
    TOKEN=token DuckDNS token
    LOG_FILE=false Set to true to log to file (also need to map /config).

    Volume Mappings (-v)

    Volume Function
    /config Used in conjunction with logging to file.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it duckdns /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f duckdns
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' duckdns
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/duckdns:latest

    Versions

    • 23.09.22: - Rebase to alpine 3.16 and s6v3.
    • 19.09.22: - Rebase to alpine 3.15.
    • 17.05.22: - Don't allow insecure connections and add timeout.
    • 17.05.22: - Add random jitter to update time.
    • 23.02.22: - Append to log file instead of overwriting every time.
    • 03.05.21: - Re-adjust cron timings to prevent peak times, update code formatting.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 13.04.20: - Add donation links for DuckDNS.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 24.09.19: - Fix perms on github and remove chmod that can stall the container.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 08.02.19: - Update readme with optional parameters.
    • 10.12.18: - Fix docker compose example.
    • 15.10.18: - Multi-arch image.
    • 22.08.18: - Rebase to alpine 3.8.
    • 08.12.17: - Rebase to alpine 3.7.
    • 28.05.17: - Rebase to alpine 3.6.
    • 09.02.17: - Rebase to alpine 3.5.
    • 17.11.16: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it duckdns /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f duckdns
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' duckdns
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/duckdns:latest

    Versions

    • 23.09.22: - Rebase to alpine 3.16 and s6v3.
    • 19.09.22: - Rebase to alpine 3.15.
    • 17.05.22: - Don't allow insecure connections and add timeout.
    • 17.05.22: - Add random jitter to update time.
    • 23.02.22: - Append to log file instead of overwriting every time.
    • 03.05.21: - Re-adjust cron timings to prevent peak times, update code formatting.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 13.04.20: - Add donation links for DuckDNS.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 24.09.19: - Fix perms on github and remove chmod that can stall the container.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 08.02.19: - Update readme with optional parameters.
    • 10.12.18: - Fix docker compose example.
    • 15.10.18: - Multi-arch image.
    • 22.08.18: - Rebase to alpine 3.8.
    • 08.12.17: - Rebase to alpine 3.7.
    • 28.05.17: - Rebase to alpine 3.6.
    • 09.02.17: - Rebase to alpine 3.5.
    • 17.11.16: - Initial release.
    \ No newline at end of file diff --git a/images/docker-duplicati/index.html b/images/docker-duplicati/index.html index af425d8d47..20b8fe5840 100644 --- a/images/docker-duplicati/index.html +++ b/images/docker-duplicati/index.html @@ -1,4 +1,4 @@ - duplicati - LinuxServer.io

    linuxserver/duplicati

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Duplicati works with standard protocols like FTP, SSH, WebDAV as well as popular services like Microsoft OneDrive, Amazon Cloud Drive & S3, Google Drive, box.com, Mega, hubiC and many others.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/duplicati:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Beta releases of Duplicati
    development Canary releases of Duplicati

    Application Setup

    The webui is at <your ip>:8200 , create backup jobs etc via the webui, for local backups select /backups as the destination. For more information see Duplicati.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + duplicati - LinuxServer.io       

    linuxserver/duplicati

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Duplicati works with standard protocols like FTP, SSH, WebDAV as well as popular services like Microsoft OneDrive, Amazon Cloud Drive & S3, Google Drive, box.com, Mega, hubiC and many others.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/duplicati:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Beta releases of Duplicati
    development Canary releases of Duplicati

    Application Setup

    The webui is at <your ip>:8200 , create backup jobs etc via the webui, for local backups select /backups as the destination. For more information see Duplicati.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       duplicati:
    @@ -31,4 +31,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8200 http gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    CLI_ARGS= Optionally specify any CLI variables you want to launch the app with

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.
    /backups Path to store local backups.
    /source Path to source for files to backup.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it duplicati /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f duplicati
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' duplicati
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/duplicati:latest

    Versions

    • 03.08.22: - Deprecate armhf.
    • 25.04.22: - Rebase to mono:focal.
    • 01.08.19: - Rebase to Linuxserver LTS mono version.
    • 16.07.19: - Allow for additional command line arguments in an environment variable.
    • 28.06.19: - Rebase to bionic.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 28.02.19: - Allow access from all hostnames, clarify info on image tags.
    • 13.01.19: - Use jq instead of awk in dockerfiles.
    • 11.01.19: - Multi-arch image.
    • 09.12.17: - Fix continuation lines.
    • 31.08.17: - Build only beta or release versions (thanks deasmi).
    • 24.04.17: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it duplicati /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f duplicati
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' duplicati
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/duplicati:latest

    Versions

    • 03.08.22: - Deprecate armhf.
    • 25.04.22: - Rebase to mono:focal.
    • 01.08.19: - Rebase to Linuxserver LTS mono version.
    • 16.07.19: - Allow for additional command line arguments in an environment variable.
    • 28.06.19: - Rebase to bionic.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 28.02.19: - Allow access from all hostnames, clarify info on image tags.
    • 13.01.19: - Use jq instead of awk in dockerfiles.
    • 11.01.19: - Multi-arch image.
    • 09.12.17: - Fix continuation lines.
    • 31.08.17: - Build only beta or release versions (thanks deasmi).
    • 24.04.17: - Initial release.
    \ No newline at end of file diff --git a/images/docker-emby/index.html b/images/docker-emby/index.html index 48cf0c9409..c5afcfc98f 100644 --- a/images/docker-emby/index.html +++ b/images/docker-emby/index.html @@ -1,4 +1,4 @@ - emby - LinuxServer.io

    linuxserver/emby

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Emby organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/emby:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable emby releases
    beta Beta emby releases

    Application Setup

    Webui can be found at http://<your-ip>:8096

    Emby has very complete and verbose documentation located here .

    Hardware acceleration users for Intel Quicksync and AMD VAAPI will need to mount their /dev/dri video device inside of the container by passing the following command when running or creating the container:

    --device=/dev/dri:/dev/dri

    We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here:

    https://github.com/NVIDIA/nvidia-docker

    We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the emby docker.

    OpenMAX (Raspberry Pi)

    Hardware acceleration users for Raspberry Pi OpenMAX will need to mount their /dev/vchiq video device inside of the container and their system OpenMax libs by passing the following options when running or creating the container:

    --device=/dev/vchiq:/dev/vchiq
    + emby - LinuxServer.io       

    linuxserver/emby

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Emby organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/emby:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable emby releases
    beta Beta emby releases

    Application Setup

    Webui can be found at http://<your-ip>:8096

    Emby has very complete and verbose documentation located here .

    Hardware acceleration users for Intel Quicksync and AMD VAAPI will need to mount their /dev/dri video device inside of the container by passing the following command when running or creating the container:

    --device=/dev/dri:/dev/dri

    We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here:

    https://github.com/NVIDIA/nvidia-docker

    We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the emby docker.

    OpenMAX (Raspberry Pi)

    Hardware acceleration users for Raspberry Pi OpenMAX will need to mount their /dev/vchiq video device inside of the container and their system OpenMax libs by passing the following options when running or creating the container:

    --device=/dev/vchiq:/dev/vchiq
     -v /opt/vc/lib:/opt/vc/lib
     

    V4L2 (Raspberry Pi)

    Hardware acceleration users for Raspberry Pi V4L2 will need to mount their /dev/video1X devices inside of the container by passing the following options when running or creating the container:

    --device=/dev/video10:/dev/video10
     --device=/dev/video11:/dev/video11
    @@ -49,4 +49,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8096 Http webUI.
    8920 Https webUI (you need to setup your own certificate).

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Emby data storage location. This can grow very large, 50gb+ is likely for a large collection.
    /data/tvshows Media goes here. Add as many as needed e.g. /data/movies, /data/tv, etc.
    /data/movies Media goes here. Add as many as needed e.g. /data/movies, /data/tv, etc.
    /opt/vc/lib Path for Raspberry Pi OpenMAX libs optional.

    Device Mappings (--device)

    Parameter Function
    /dev/dri Only needed if you want to use your Intel or AMD GPU for hardware accelerated video encoding (vaapi).
    /dev/vchiq Only needed if you want to use your Raspberry Pi OpenMax video encoding (Bellagio).
    /dev/video10 Only needed if you want to use your Raspberry Pi V4L2 video encoding.
    /dev/video11 Only needed if you want to use your Raspberry Pi V4L2 video encoding.
    /dev/video12 Only needed if you want to use your Raspberry Pi V4L2 video encoding.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it emby /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f emby
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' emby
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/emby:latest

    Versions

    • 26.09.22: - Update chown behavior.
    • 18.09.22: - Migrate to s6v3, rebase to Ubuntu Jammy.
    • 19.05.21: - Structural changes upstream.
    • 17.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information. Remove no longer used mapping for /transcode.
    • 21.12.20: - Rebase to Focal, see here for troubleshooting armhf.
    • 03.11.20: - Fix issue with missing samba folder.
    • 13.11.20: - Fix issue with samba and ffmpeg.
    • 03.07.20: - Add support for amd vaapi hw transcode.
    • 29.02.20: - Add v4l2 support on Raspberry Pi.
    • 26.02.20: - Add openmax support on Raspberry Pi.
    • 15.02.20: - Allow restarting emby from the gui (also allows for auto restarts after addon updates).
    • 02.10.19: - Improve permission fixing for render and dvb devices.
    • 13.08.19: - Add umask environment variable.
    • 24.06.19: - Fix typos in readme.
    • 30.05.19: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it emby /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f emby
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' emby
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/emby:latest

    Versions

    • 26.09.22: - Update chown behavior.
    • 18.09.22: - Migrate to s6v3, rebase to Ubuntu Jammy.
    • 19.05.21: - Structural changes upstream.
    • 17.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information. Remove no longer used mapping for /transcode.
    • 21.12.20: - Rebase to Focal, see here for troubleshooting armhf.
    • 03.11.20: - Fix issue with missing samba folder.
    • 13.11.20: - Fix issue with samba and ffmpeg.
    • 03.07.20: - Add support for amd vaapi hw transcode.
    • 29.02.20: - Add v4l2 support on Raspberry Pi.
    • 26.02.20: - Add openmax support on Raspberry Pi.
    • 15.02.20: - Allow restarting emby from the gui (also allows for auto restarts after addon updates).
    • 02.10.19: - Improve permission fixing for render and dvb devices.
    • 13.08.19: - Add umask environment variable.
    • 24.06.19: - Fix typos in readme.
    • 30.05.19: - Initial release.
    \ No newline at end of file diff --git a/images/docker-embystat/index.html b/images/docker-embystat/index.html index 5753a661dd..02128f4f7f 100644 --- a/images/docker-embystat/index.html +++ b/images/docker-embystat/index.html @@ -1,4 +1,4 @@ - embystat - LinuxServer.io

    linuxserver/embystat

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Embystat is a personal web server that can calculate all kinds of statistics from your (local) Emby server. Just install this on your server and let him calculate all kinds of fun stuff.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/embystat:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at <your-ip>:6555. Follow the setup wizard on initial install. Then configure the required services.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + embystat - LinuxServer.io       

    linuxserver/embystat

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Embystat is a personal web server that can calculate all kinds of statistics from your (local) Emby server. Just install this on your server and let him calculate all kinds of fun stuff.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/embystat:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at <your-ip>:6555. Follow the setup wizard on initial install. Then configure the required services.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       embystat:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    6555 web gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it embystat /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f embystat
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' embystat
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/embystat:latest

    Versions

    • 11.06.22: - Rebase to focal, update disable updates flag.
    • 08.04.20: - Structural changes for beta18.
    • 04.12.19: - Disable in app updates.
    • 12.11.19: - Multi-arch builds.
    • 10.09.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it embystat /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f embystat
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' embystat
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/embystat:latest

    Versions

    • 11.06.22: - Rebase to focal, update disable updates flag.
    • 08.04.20: - Structural changes for beta18.
    • 04.12.19: - Disable in app updates.
    • 12.11.19: - Multi-arch builds.
    • 10.09.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-emulatorjs/index.html b/images/docker-emulatorjs/index.html index 7e715d1b5b..b4b8383873 100644 --- a/images/docker-emulatorjs/index.html +++ b/images/docker-emulatorjs/index.html @@ -1,4 +1,4 @@ - emulatorjs - LinuxServer.io

    linuxserver/emulatorjs

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Emulatorjs - In browser web based emulation portable to nearly any device for many retro consoles. A mix of emulators is used between Libretro and EmulatorJS.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/emulatorjs:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The Backend can be accessed at:

    • http://yourhost:3000/

    The first thing you will need to do is click to download the default art/configs from this interface, this will setup a skeleton directory in your /data mount. From there add roms to the respective roms directories and follow the on screen instructions to add them to your web frontend running on port 80.

    The frontend application has been initially optimized around being used with a standard gamepad (more specifically for modern Xbox consoles that have chromium based Edge browsers). The navigation revolves around the up/down/left/right keys to browse the menus and launch games. Mobile browsers will function, just keep in mind compatibility will be reduced especially for CD based games.

    It is important to note that some of the current emulators used for this frontend are obfuscated code, efforts are being made to reverse engineer it but you should know it can potentially reach out to third party services if you manually enable features like netplay (this should never happen in a stock setup). The point of this message is that on top of the de-obfuscation effort there is also effort to stop using binary blobs and shift to built from source libretro emscripten blobs, for now this web based emulation stack is the best for useability and compatibility. We are in the process to transitioning to libretro cores for emulators, currently 27/30 emulators have been replaced.

    For Xbox users please click the select button a couple times after launching a game to ensure the B button does not trigger a "back" action in the browser. (official name "view button" it is the two small squares) Exiting the controller mode and back to browser controls can be triggered by holding the start button for 3 seconds. (official name "menu button" the three lines) You will be unable to use features like save states and modify controller layouts on the emulatorjs based emulators currently as I have not determined a methodology of re-entering controller mode once you exit it. All normal game saves will function given you exit the game play screen cleanly using the B button for back this includes multi disc games for psx. Your game saves are stored in browser storage by hostname so if you make any changes to your local hosted setup (port or IP) the saves will not follow with it. For libretro based emulators you can use the button combination start+select+L+R to access the libretro menu and change settings/save or load/etc.

    We know about most of the oddities like crackling sound for some emulators, rendering issues, and games unreliably auto launching to fullscreen. In general full CD games on the Xbox web browser do not seem to work due to their size if you have a chd/pbp less than 450 megs it will run. Edge on Xbox has some kind of undocumented ram limitation of about a gigabyte. Until all emulators are transitioned to libretro cores the oddities of using self hosted EmulatorJS will not be something that can or should be solved using hacky workarounds interacting with obfuscated code. Just keep in mind these are full blown machine emulators running in Javascript in a browser, do not expect bare metal performance.

    Mounting in existing rom directories can be achieved by pointing to the default folder structure, IE lets say you would like to mount your NES library:

    -v /path/to/nes/roms:/data/nes/roms

    The folder names are: * 3do * arcade * atari2600 * atari7800 * colecovision * doom * gb * gba * gbc * jaguar * lynx * msx * n64 * nds * nes * ngp * odyssey2 * pce * psx * sega32x * segaCD * segaGG * segaMD * segaMS * segaSaturn * segaSG * snes * vb * vectrex * ws

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + emulatorjs - LinuxServer.io       

    linuxserver/emulatorjs

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Emulatorjs - In browser web based emulation portable to nearly any device for many retro consoles. A mix of emulators is used between Libretro and EmulatorJS.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/emulatorjs:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The Backend can be accessed at:

    • http://yourhost:3000/

    The first thing you will need to do is click to download the default art/configs from this interface, this will setup a skeleton directory in your /data mount. From there add roms to the respective roms directories and follow the on screen instructions to add them to your web frontend running on port 80.

    The frontend application has been initially optimized around being used with a standard gamepad (more specifically for modern Xbox consoles that have chromium based Edge browsers). The navigation revolves around the up/down/left/right keys to browse the menus and launch games. Mobile browsers will function, just keep in mind compatibility will be reduced especially for CD based games.

    It is important to note that some of the current emulators used for this frontend are obfuscated code, efforts are being made to reverse engineer it but you should know it can potentially reach out to third party services if you manually enable features like netplay (this should never happen in a stock setup). The point of this message is that on top of the de-obfuscation effort there is also effort to stop using binary blobs and shift to built from source libretro emscripten blobs, for now this web based emulation stack is the best for useability and compatibility. We are in the process to transitioning to libretro cores for emulators, currently 27/30 emulators have been replaced.

    For Xbox users please click the select button a couple times after launching a game to ensure the B button does not trigger a "back" action in the browser. (official name "view button" it is the two small squares) Exiting the controller mode and back to browser controls can be triggered by holding the start button for 3 seconds. (official name "menu button" the three lines) You will be unable to use features like save states and modify controller layouts on the emulatorjs based emulators currently as I have not determined a methodology of re-entering controller mode once you exit it. All normal game saves will function given you exit the game play screen cleanly using the B button for back this includes multi disc games for psx. Your game saves are stored in browser storage by hostname so if you make any changes to your local hosted setup (port or IP) the saves will not follow with it. For libretro based emulators you can use the button combination start+select+L+R to access the libretro menu and change settings/save or load/etc.

    We know about most of the oddities like crackling sound for some emulators, rendering issues, and games unreliably auto launching to fullscreen. In general full CD games on the Xbox web browser do not seem to work due to their size if you have a chd/pbp less than 450 megs it will run. Edge on Xbox has some kind of undocumented ram limitation of about a gigabyte. Until all emulators are transitioned to libretro cores the oddities of using self hosted EmulatorJS will not be something that can or should be solved using hacky workarounds interacting with obfuscated code. Just keep in mind these are full blown machine emulators running in Javascript in a browser, do not expect bare metal performance.

    Mounting in existing rom directories can be achieved by pointing to the default folder structure, IE lets say you would like to mount your NES library:

    -v /path/to/nes/roms:/data/nes/roms

    The folder names are: * 3do * arcade * atari2600 * atari7800 * colecovision * doom * gb * gba * gbc * jaguar * lynx * msx * n64 * nds * nes * ngp * odyssey2 * pce * psx * sega32x * segaCD * segaGG * segaMD * segaMS * segaSaturn * segaSG * snes * vb * vectrex * ws

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       emulatorjs:
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Rom/artwork management interface, used to generate/manage config files and download artwork
    80 Emulation frontend containing static web files used to browse and launch games
    4001 IPFS peering port, if you want to participate in the P2P network to distribute frontend artwork please forward this to the Internet

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    SUBFOLDER=/ Specify a subfolder for reverse proxies IE '/FOLDER/'

    Volume Mappings (-v)

    Volume Function
    /config Path to store user profiles
    /data Path to store roms/artwork

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it emulatorjs /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f emulatorjs
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' emulatorjs
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/emulatorjs:latest

    Versions

    • 24.11.22: - Update IPFS links for chdman.
    • 04.04.22: - Ingest pre-built chdman bins during build time.
    • 23.02.22: - Update ingestion point for emulatorjs bins.
    • 25.01.22: - Allow users to mount in existing rom directories.
    • 14.01.22: - Add profile paths and rebase to Alpine 3.15.
    • 04.01.22: - Add headers needed for Threaded emulators.
    • 29.11.21: - Add wasm mime type to NGINX.
    • 26.11.21: - Configure IPFS in a lower power mode, use homebuilt blobs for emu cores.
    • 19.11.21: - Pin retroarch version.
    • 14.11.21: - Update default cores to ingest.
    • 23.10.21: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it emulatorjs /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f emulatorjs
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' emulatorjs
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/emulatorjs:latest

    Versions

    • 24.11.22: - Update IPFS links for chdman.
    • 04.04.22: - Ingest pre-built chdman bins during build time.
    • 23.02.22: - Update ingestion point for emulatorjs bins.
    • 25.01.22: - Allow users to mount in existing rom directories.
    • 14.01.22: - Add profile paths and rebase to Alpine 3.15.
    • 04.01.22: - Add headers needed for Threaded emulators.
    • 29.11.21: - Add wasm mime type to NGINX.
    • 26.11.21: - Configure IPFS in a lower power mode, use homebuilt blobs for emu cores.
    • 19.11.21: - Pin retroarch version.
    • 14.11.21: - Update default cores to ingest.
    • 23.10.21: - Initial release.
    \ No newline at end of file diff --git a/images/docker-endlessh/index.html b/images/docker-endlessh/index.html index 1ce7003a58..77ab8a9d8a 100644 --- a/images/docker-endlessh/index.html +++ b/images/docker-endlessh/index.html @@ -1,4 +1,4 @@ - endlessh - LinuxServer.io

    linuxserver/endlessh

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Endlessh is an SSH tarpit that very slowly sends an endless, random SSH banner. It keeps SSH clients locked up for hours or even days at a time. The purpose is to put your real SSH server on another port and then let the script kiddies get stuck in this tarpit instead of bothering a real server.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/endlessh:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The app listens on the port mapped for ssh connections. To log to file, set the environment variable LOGFILE to true and map a volume for /config. The logs will be under /config/logs/endlessh.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + endlessh - LinuxServer.io       

    linuxserver/endlessh

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Endlessh is an SSH tarpit that very slowly sends an endless, random SSH banner. It keeps SSH clients locked up for hours or even days at a time. The purpose is to put your real SSH server on another port and then let the script kiddies get stuck in this tarpit instead of bothering a real server.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/endlessh:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The app listens on the port mapped for ssh connections. To log to file, set the environment variable LOGFILE to true and map a volume for /config. The logs will be under /config/logs/endlessh.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       endlessh:
    @@ -35,4 +35,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    2222 ssh port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    MSDELAY=10000 The endless banner is sent one line at a time. This is the delay in milliseconds between individual lines.
    MAXLINES=32 The length of each line is randomized. This controls the maximum length of each line. Shorter lines may keep clients on for longer if they give up after a certain number of bytes.
    MAXCLIENTS=4096 Maximum number of connections to accept at a time. Connections beyond this are not immediately rejected, but will wait in the queue.
    LOGFILE=false By default, the app logs to container log. If this is set to true, the log will be output to file under /config/logs/endlessh (/config needs to be mapped).
    BINDFAMILY= By default, the app binds to IPv4 and IPv6 addresses. Set it to 4 or 6 to bind to IPv4 only or IPv6 only, respectively. Leave blank to bind to both.

    Volume Mappings (-v)

    Volume Function
    /config Required if LOGFILE is set to true.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it endlessh /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f endlessh
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' endlessh
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/endlessh:latest

    Versions

    • 23.09.22: - Migrate to s6v3.
    • 20.07.22: - Rebase to Alpine 3.16.
    • 16.04.22: - Rebase to Alpine 3.15.
    • 07.10.21: - Fix typo on MAXLINES var.
    • 08.06.21: - Add BINDFAMILY option.
    • 16.04.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it endlessh /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f endlessh
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' endlessh
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/endlessh:latest

    Versions

    • 23.09.22: - Migrate to s6v3.
    • 20.07.22: - Rebase to Alpine 3.16.
    • 16.04.22: - Rebase to Alpine 3.15.
    • 07.10.21: - Fix typo on MAXLINES var.
    • 08.06.21: - Add BINDFAMILY option.
    • 16.04.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-fail2ban/index.html b/images/docker-fail2ban/index.html index 397404f3b9..948d34ea55 100644 --- a/images/docker-fail2ban/index.html +++ b/images/docker-fail2ban/index.html @@ -1,4 +1,4 @@ - fail2ban - LinuxServer.io

    linuxserver/fail2ban

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Fail2ban is a daemon to ban hosts that cause multiple authentication errors.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/fail2ban:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This container is designed to allow fail2ban to function at the host level, as well as at the docker container level. If you are running applications on the host, you will need to set the chain to INPUT in the jail for that application.

    Configuration Files

    On first run, the container will create a number of folders and files in /config. The default configurations for fail2ban are all disabled by default.

    Please refer to the Configuration README, which can be viewed in our repository, or in your config folder at /config/fail2ban/README.md.

    Remote Logs

    All jails require the ability to read the application log files. We recommend mounting each application's log folder as a volume to the container (illustrated by the optional volumes in our documentation). Mounting individual log files can cause issues and is not recommended.

    The /remotelogs path is designed to act as a parent for all log files you would like fail2ban to be able to use. Each log file should be mounted in a subfolder underneath /remotelogs, ex: - /remotelogs/nginx/ would mount a folder containing the nginx logs to the container

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + fail2ban - LinuxServer.io       

    linuxserver/fail2ban

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Fail2ban is a daemon to ban hosts that cause multiple authentication errors.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/fail2ban:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This container is designed to allow fail2ban to function at the host level, as well as at the docker container level. If you are running applications on the host, you will need to set the chain to INPUT in the jail for that application.

    Configuration Files

    On first run, the container will create a number of folders and files in /config. The default configurations for fail2ban are all disabled by default.

    Please refer to the Configuration README, which can be viewed in our repository, or in your config folder at /config/fail2ban/README.md.

    Remote Logs

    All jails require the ability to read the application log files. We recommend mounting each application's log folder as a volume to the container (illustrated by the optional volumes in our documentation). Mounting individual log files can cause issues and is not recommended.

    The /remotelogs path is designed to act as a parent for all log files you would like fail2ban to be able to use. Each log file should be mounted in a subfolder underneath /remotelogs, ex: - /remotelogs/nginx/ would mount a folder containing the nginx logs to the container

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       fail2ban:
    @@ -65,4 +65,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Networking (--net)

    Parameter Function
    --net=host Shares host networking with container.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.
    /var/log:ro Host logs. Mounted as Read Only.
    /remotelogs/airsonic:ro Optional path to airsonic log folder. Mounted as Read Only.
    /remotelogs/apache2:ro Optional path to apache2 log folder. Mounted as Read Only.
    /remotelogs/authelia:ro Optional path to authelia log folder. Mounted as Read Only.
    /remotelogs/emby:ro Optional path to emby log folder. Mounted as Read Only.
    /remotelogs/filebrowser:ro Optional path to filebrowser log folder. Mounted as Read Only.
    /remotelogs/homeassistant:ro Optional path to homeassistant log folder. Mounted as Read Only.
    /remotelogs/lighttpd:ro Optional path to lighttpd log folder. Mounted as Read Only.
    /remotelogs/nextcloud:ro Optional path to nextcloud log folder. Mounted as Read Only.
    /remotelogs/nginx:ro Optional path to nginx log folder. Mounted as Read Only.
    /remotelogs/nzbget:ro Optional path to nzbget log folder. Mounted as Read Only.
    /remotelogs/overseerr:ro Optional path to overseerr log folder. Mounted as Read Only.
    /remotelogs/prowlarr:ro Optional path to prowlarr log folder. Mounted as Read Only.
    /remotelogs/radarr:ro Optional path to radarr log folder. Mounted as Read Only.
    /remotelogs/sabnzbd:ro Optional path to sabnzbd log folder. Mounted as Read Only.
    /remotelogs/sonarr:ro Optional path to sonarr log folder. Mounted as Read Only.
    /remotelogs/unificontroller:ro Optional path to unificontroller log folder. Mounted as Read Only.
    /remotelogs/vaultwarden:ro Optional path to vaultwarden log folder. Mounted as Read Only.

    Miscellaneous Options

    Parameter Function

    Portainer notice

    {% hint style="warning" %} This image utilises cap_add or sysctl to work properly. This is not implemented properly in some versions of Portainer, thus this image may not work if deployed through Portainer. {% endhint %}

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it fail2ban /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f fail2ban
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' fail2ban
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/fail2ban:latest

    Versions

    • 25.08.22: - Update README to clarify remote log information.
    • 09.08.22: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it fail2ban /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f fail2ban
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' fail2ban
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/fail2ban:latest

    Versions

    • 25.08.22: - Update README to clarify remote log information.
    • 09.08.22: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-feed2toot/index.html b/images/docker-feed2toot/index.html index b146464e58..d1bb863dfe 100644 --- a/images/docker-feed2toot/index.html +++ b/images/docker-feed2toot/index.html @@ -1,4 +1,4 @@ - feed2toot - LinuxServer.io

    linuxserver/feed2toot

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    Feed2toot automatically parses rss feeds, identifies new posts and posts them on the Mastodon social network.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/feed2toot:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Run docker run --rm -it -w /config -v /path/to/data:/config -e PUID=1000 -e PGID=1000 lscr.io/linuxserver/feed2toot /usr/bin/register_feed2toot_app to generate credential files (be sure to set the correct volume path and PUID/PGID values).

    Edit the feed2toot.ini in /config to configure your instance name and RSS feeds.

    See the feed2toot docs for more information.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + feed2toot - LinuxServer.io       

    linuxserver/feed2toot

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    Feed2toot automatically parses rss feeds, identifies new posts and posts them on the Mastodon social network.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/feed2toot:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Run docker run --rm -it -w /config -v /path/to/data:/config -e PUID=1000 -e PGID=1000 lscr.io/linuxserver/feed2toot /usr/bin/register_feed2toot_app to generate credential files (be sure to set the correct volume path and PUID/PGID values).

    Edit the feed2toot.ini in /config to configure your instance name and RSS feeds.

    See the feed2toot docs for more information.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       feed2toot:
    @@ -24,4 +24,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    FEED_LIMIT=5 Limit number of RSS entries published at each execution.

    Volume Mappings (-v)

    Volume Function
    /config Local path for feed2toot config files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it feed2toot /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f feed2toot
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' feed2toot
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/feed2toot:latest

    Versions

    • 14.11.22: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it feed2toot /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f feed2toot
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' feed2toot
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/feed2toot:latest

    Versions

    • 14.11.22: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-ffmpeg/index.html b/images/docker-ffmpeg/index.html index 3b9e80c125..8c56bbec22 100644 --- a/images/docker-ffmpeg/index.html +++ b/images/docker-ffmpeg/index.html @@ -1,4 +1,4 @@ - ffmpeg - LinuxServer.io

    ffmpeg

    linuxserver.io

    Blog Discord Discourse Fleet GitHub Open Collective

    The LinuxServer.io team brings you another container release featuring :-

    • regular and timely application updates
    • easy user mappings (PGID, PUID)
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • regular security updates

    Find us at: * Blog - all the things you can do with our containers including How-To guides, opinions and much more! * Discord - realtime support / chat with the community and the team. * Discourse - post on our community forum. * Fleet - an online web interface which displays all of our maintained images. * Podcast - on hiatus. Coming back soon (late 2018). * Open Collective - please consider helping us by either donating or contributing to our budget

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    FFmpeg - A complete, cross-platform solution to record, convert and stream audio and video.

    ffmpeg

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ffmpeg:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Usage

    Unlike most of our container library this image is meant to be run ephemerally from the command line parsing user input for a custom FFmpeg command. You will need to understand some Docker basics to use this image and be familiar with how to construct an FFmpeg command. In the commands below we will be bind mounting our current working directory from the CLI to /config, the assumption is that input.mkv is in your current working directory.

    If an input file is detected we will run FFmpeg as that user/group so the output file will match it's permissions. The image supports Hardware acceleration on x86 pay close attention to the variables for the examples below.

    Basic Transcode

    docker run --rm -it \
    + ffmpeg - LinuxServer.io       

    ffmpeg

    linuxserver.io

    Blog Discord Discourse Fleet GitHub Open Collective

    The LinuxServer.io team brings you another container release featuring :-

    • regular and timely application updates
    • easy user mappings (PGID, PUID)
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • regular security updates

    Find us at: * Blog - all the things you can do with our containers including How-To guides, opinions and much more! * Discord - realtime support / chat with the community and the team. * Discourse - post on our community forum. * Fleet - an online web interface which displays all of our maintained images. * Podcast - on hiatus. Coming back soon (late 2018). * Open Collective - please consider helping us by either donating or contributing to our budget

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    FFmpeg - A complete, cross-platform solution to record, convert and stream audio and video.

    ffmpeg

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ffmpeg:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Usage

    Unlike most of our container library this image is meant to be run ephemerally from the command line parsing user input for a custom FFmpeg command. You will need to understand some Docker basics to use this image and be familiar with how to construct an FFmpeg command. In the commands below we will be bind mounting our current working directory from the CLI to /config, the assumption is that input.mkv is in your current working directory.

    If an input file is detected we will run FFmpeg as that user/group so the output file will match it's permissions. The image supports Hardware acceleration on x86 pay close attention to the variables for the examples below.

    Basic Transcode

    docker run --rm -it \
       -v $(pwd):/config \
       linuxserver/ffmpeg \
       -i /config/input.mkv \
    @@ -36,4 +36,4 @@ docker build \
       --pull \
       -t linuxserver/ffmpeg:latest .
     

    The ARM variants can be built on x86_64 hardware using multiarch/qemu-user-static

    docker run --rm --privileged multiarch/qemu-user-static:register --reset
    -

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    • 19.06.22: - Rebase to Focal.
    • 26.08.21: - Add support for libOpenCL.
    • 01.07.21: - Bump to 4.4.
    • 17.06.20: - Bump to 4.3.
    • 16.06.20: - Add support for libvmaf.
    • 01.08.19: - Initial release.
    \ No newline at end of file +

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    • 19.06.22: - Rebase to Focal.
    • 26.08.21: - Add support for libOpenCL.
    • 01.07.21: - Bump to 4.4.
    • 17.06.20: - Bump to 4.3.
    • 16.06.20: - Add support for libvmaf.
    • 01.08.19: - Initial release.
    \ No newline at end of file diff --git a/images/docker-filezilla/index.html b/images/docker-filezilla/index.html index 7974558830..fe7e86fa23 100644 --- a/images/docker-filezilla/index.html +++ b/images/docker-filezilla/index.html @@ -1,4 +1,4 @@ - filezilla - LinuxServer.io

    linuxserver/filezilla

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    FIleZilla Client is a fast and reliable cross-platform FTP, FTPS and SFTP client with lots of useful features and an intuitive graphical user interface.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/filezilla:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + filezilla - LinuxServer.io       

    linuxserver/filezilla

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    FIleZilla Client is a fast and reliable cross-platform FTP, FTPS and SFTP client with lots of useful features and an intuitive graphical user interface.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/filezilla:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       filezilla:
    @@ -28,4 +28,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 FileZilla desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores local files and settings

    Miscellaneous Options

    Parameter Function
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function on older hosts as syscalls are unknown to Docker.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it filezilla /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f filezilla
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' filezilla
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/filezilla:latest

    Versions

    • 21.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 23.12.21: - Rebase to Alpine 3.15.
    • 26.09.21: - Rebase to Alpine 3.14.
    • 18.04.21: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it filezilla /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f filezilla
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' filezilla
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/filezilla:latest

    Versions

    • 21.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 23.12.21: - Rebase to Alpine 3.15.
    • 26.09.21: - Rebase to Alpine 3.14.
    • 18.04.21: - Initial release.
    \ No newline at end of file diff --git a/images/docker-firefox/index.html b/images/docker-firefox/index.html index 9e59b47dec..a03c7d1122 100644 --- a/images/docker-firefox/index.html +++ b/images/docker-firefox/index.html @@ -1,4 +1,4 @@ - firefox - LinuxServer.io

    linuxserver/firefox

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Firefox Browser, also known as Mozilla Firefox or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. Firefox uses the Gecko layout engine to render web pages, which implements current and anticipated web standards.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/firefox:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + firefox - LinuxServer.io       

    linuxserver/firefox

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Firefox Browser, also known as Mozilla Firefox or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. Firefox uses the Gecko layout engine to render web pages, which implements current and anticipated web standards.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/firefox:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       firefox:
    @@ -30,4 +30,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Firefox desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores local files and settings

    Miscellaneous Options

    Parameter Function
    --shm-size= This is needed for any modern website to function like youtube.
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function on older hosts as syscalls are unknown to Docker.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it firefox /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f firefox
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' firefox
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/firefox:latest

    Versions

    • 21.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 23.12.21: - Rebase to Alpine 3.15, stop using ESR.
    • 26.09.21: - Rebase to Alpine 3.14.
    • 19.04.21: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it firefox /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f firefox
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' firefox
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/firefox:latest

    Versions

    • 21.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 23.12.21: - Rebase to Alpine 3.15, stop using ESR.
    • 26.09.21: - Rebase to Alpine 3.14.
    • 19.04.21: - Initial release.
    \ No newline at end of file diff --git a/images/docker-fleet/index.html b/images/docker-fleet/index.html index 5300e39ae5..a01b67530f 100644 --- a/images/docker-fleet/index.html +++ b/images/docker-fleet/index.html @@ -1,4 +1,4 @@ - fleet - LinuxServer.io

    linuxserver/fleet

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Fleet provides an online web interface which displays a set of maintained images from one or more owned repositories.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/fleet:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Navigate to http://your_ip_here:8080 to display the home page. If DATABASE is selected as the preferred authentication process, ensure that you set up an initial user via http://your_ip_here:8080/setup. Once done, that page will no longer be available. A restart is preferable as it will remove the page altogether. Once complete, you can log into the app via http://your_ip_here:8080/login to manage your repositories.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + fleet - LinuxServer.io       

    linuxserver/fleet

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Fleet provides an online web interface which displays a set of maintained images from one or more owned repositories.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/fleet:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Navigate to http://your_ip_here:8080 to display the home page. If DATABASE is selected as the preferred authentication process, ensure that you set up an initial user via http://your_ip_here:8080/setup. Once done, that page will no longer be available. A restart is preferable as it will remove the page altogether. Once complete, you can log into the app via http://your_ip_here:8080/login to manage your repositories.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       fleet:
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 Http port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    fleet_admin_authentication_type=DATABASE A switch to define how Fleet manages user logins. If set to DATABASE, see the related optional params. Can be set to either DATABASE or PROPERTIES.
    fleet_database_url=jdbc:mariadb://<url>:3306/fleet The full JDBC connection string to the Fleet database
    fleet_database_username=fleet_user The username with the relevant GRANT permissions for the database
    fleet_database_password=dbuserpassword The database user's password.
    fleet_admin_secret=randomstring A string used as part of the password key derivation process.

    Volume Mappings (-v)

    Volume Function
    /config The primary config file and rolling log files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it fleet /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f fleet
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' fleet
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/fleet:latest

    Versions

    • 02.05.22: - Rebase to Alpine 3.15.
    • 13.12.21: - Add mitigations for CVE-2021-44228
    • 26.04.20: - Updated to keep in line with v2.0.0 branch of Fleet
    • 19.12.19: - Rebasing to alpine 3.11.
    • 02.07.19: - Rebasing to alpine 3.10.
    • 02.07.19: - Stop container if fleet fails.
    • 19.05.19: - Use new base images for arm versions.
    • 01.04.19: - Initial Release
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it fleet /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f fleet
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' fleet
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/fleet:latest

    Versions

    • 02.05.22: - Rebase to Alpine 3.15.
    • 13.12.21: - Add mitigations for CVE-2021-44228
    • 26.04.20: - Updated to keep in line with v2.0.0 branch of Fleet
    • 19.12.19: - Rebasing to alpine 3.11.
    • 02.07.19: - Rebasing to alpine 3.10.
    • 02.07.19: - Stop container if fleet fails.
    • 19.05.19: - Use new base images for arm versions.
    • 01.04.19: - Initial Release
    \ No newline at end of file diff --git a/images/docker-foldingathome/index.html b/images/docker-foldingathome/index.html index 37f41f63cf..07407e43d5 100644 --- a/images/docker-foldingathome/index.html +++ b/images/docker-foldingathome/index.html @@ -1,4 +1,4 @@ - foldingathome - LinuxServer.io

    linuxserver/foldingathome

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Folding@home is a distributed computing project for simulating protein dynamics, including the process of protein folding and the movements of proteins implicated in a variety of diseases. It brings together citizen scientists who volunteer to run simulations of protein dynamics on their personal computers. Insights from this data are helping scientists to better understand biology, and providing new opportunities for developing therapeutics.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/foldingathome:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    This image sets up the Folding@home client. The interface is available at http://your-ip:7396.

    The built-in webserver provides very basic control (ie. GPUs are only active when set to Medium or higher). For more fine grained control of individual devices, you can use the FAHControl app on a different device and connect remotely via port 36330 (no password).

    There are a couple of minor issues with the webgui: - If you get an "ERR_EMPTY_RESPONSE" error when trying to access via IP, it's most likely due to a clash of cookies/cache. Try opening in an incgnito window. - If you're getting a constant refresh of the window but no display of info, try a force refresh via shft-F5 or ctrl-F5.

    GPU Hardware Acceleration

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here: https://github.com/NVIDIA/nvidia-docker We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the foldingathome docker container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + foldingathome - LinuxServer.io       

    linuxserver/foldingathome

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Folding@home is a distributed computing project for simulating protein dynamics, including the process of protein folding and the movements of proteins implicated in a variety of diseases. It brings together citizen scientists who volunteer to run simulations of protein dynamics on their personal computers. Insights from this data are helping scientists to better understand biology, and providing new opportunities for developing therapeutics.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/foldingathome:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    This image sets up the Folding@home client. The interface is available at http://your-ip:7396.

    The built-in webserver provides very basic control (ie. GPUs are only active when set to Medium or higher). For more fine grained control of individual devices, you can use the FAHControl app on a different device and connect remotely via port 36330 (no password).

    There are a couple of minor issues with the webgui: - If you get an "ERR_EMPTY_RESPONSE" error when trying to access via IP, it's most likely due to a clash of cookies/cache. Try opening in an incgnito window. - If you're getting a constant refresh of the window but no display of info, try a force refresh via shft-F5 or ctrl-F5.

    GPU Hardware Acceleration

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here: https://github.com/NVIDIA/nvidia-docker We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the foldingathome docker container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       foldingathome:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    7396 Folding@home web gui.
    36330 Optional port for connecting remotely via FAHControl app (no password).

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where Folding@home should store its database and config.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it foldingathome /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f foldingathome
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' foldingathome
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/foldingathome:latest

    Versions

    • 15.01.22: - Rebase to Ubuntu Focal. Add arm64v8 builds (cpu only). Increase verbosity about gpu driver permission settings.
    • 09.01.21: - Add nvidia.icd.
    • 14.04.20: - Add Folding@home donation links.
    • 20.03.20: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it foldingathome /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f foldingathome
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' foldingathome
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/foldingathome:latest

    Versions

    • 15.01.22: - Rebase to Ubuntu Focal. Add arm64v8 builds (cpu only). Increase verbosity about gpu driver permission settings.
    • 09.01.21: - Add nvidia.icd.
    • 14.04.20: - Add Folding@home donation links.
    • 20.03.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-freshrss/index.html b/images/docker-freshrss/index.html index ad2a5e0759..efbc6192fb 100644 --- a/images/docker-freshrss/index.html +++ b/images/docker-freshrss/index.html @@ -1,4 +1,4 @@ - freshrss - LinuxServer.io

    linuxserver/freshrss

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Freshrss is a free, self-hostable aggregator for rss feeds.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/freshrss:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui set up wizard at http://serverIP:port

    For external databases, create a user and database in your mysql/mariadb server (not root) and then follow the setup wizard in the webui. Use the IP address for "host" of your database server.

    Additional extensions can be dropped into /config/www/freshrss/extensions and will be active after container restart.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + freshrss - LinuxServer.io       

    linuxserver/freshrss

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Freshrss is a free, self-hostable aggregator for rss feeds.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/freshrss:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui set up wizard at http://serverIP:port

    For external databases, create a user and database in your mysql/mariadb server (not root) and then follow the setup wizard in the webui. Use the IP address for "host" of your database server.

    Additional extensions can be dropped into /config/www/freshrss/extensions and will be active after container restart.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       freshrss:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Local storage for freshrss site files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it freshrss /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f freshrss
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' freshrss
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/freshrss:latest

    Versions

    • 21.10.22: - Fix cron init to properly migrate existing installations to new app location.
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 31.03.20: - Internalize app and enable updates for existing users, allow user customized crontab.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 14.01.19: - Add multi arch and pipeline logic.
    • 05.09.18: - Rebase to alpine linux 3.8.
    • 17.03.18: - Update nginx config to resolve api not working.
    • 08.01.18: - Rebase to alpine linux 3.7.
    • 25.05.17: - Rebase to alpine linux 3.6.
    • 23.02.17: - Rebase to alpine linux 3.5 and nginx.
    • 14.10.16: - Add version layer information.
    • 08.10.16: - Add Sqlite support for standalone operation.
    • 27.09.16: - Fix for cron job.
    • 11.09.16: - Add layer badges to README.
    • 23.11.15: - Update dependencies to latest requirements.
    • 21.08.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it freshrss /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f freshrss
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' freshrss
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/freshrss:latest

    Versions

    • 21.10.22: - Fix cron init to properly migrate existing installations to new app location.
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 31.03.20: - Internalize app and enable updates for existing users, allow user customized crontab.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 14.01.19: - Add multi arch and pipeline logic.
    • 05.09.18: - Rebase to alpine linux 3.8.
    • 17.03.18: - Update nginx config to resolve api not working.
    • 08.01.18: - Rebase to alpine linux 3.7.
    • 25.05.17: - Rebase to alpine linux 3.6.
    • 23.02.17: - Rebase to alpine linux 3.5 and nginx.
    • 14.10.16: - Add version layer information.
    • 08.10.16: - Add Sqlite support for standalone operation.
    • 27.09.16: - Fix for cron job.
    • 11.09.16: - Add layer badges to README.
    • 23.11.15: - Update dependencies to latest requirements.
    • 21.08.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-gazee/index.html b/images/docker-gazee/index.html index dcad8755f6..6a65f18166 100644 --- a/images/docker-gazee/index.html +++ b/images/docker-gazee/index.html @@ -1,4 +1,4 @@ - linuxserver/gazee - LinuxServer.io

    linuxserver/gazee

    Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED, IT WILL NO LONGER RECEIVE UPDATES. Gazee is a WebApp Comic Reader for your favorite digital comics. Reach and read your comic library from any web connected device with a modern web browser.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/gazee should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v6-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
    + linuxserver/gazee - LinuxServer.io       

    linuxserver/gazee

    Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED, IT WILL NO LONGER RECEIVE UPDATES. Gazee is a WebApp Comic Reader for your favorite digital comics. Reach and read your comic library from any web connected device with a modern web browser.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/gazee should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v6-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
       --name=gazee \
       -e PUID=1000 \
       -e PGID=1000 \
    @@ -28,4 +28,4 @@ services:
         restart: unless-stopped
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    4242 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation

    Volume Mappings (-v)

    Volume Function
    /config Where Gazee should store config files.
    /comics Path to comics folder.
    /mylar Path to Mylar DB.
    /certs Where SSL certs should be stored.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    Webui can be found at your-ip:4242

    Default username and password for the web interface:

    • Username: admin
    • Password: gazee

    Click the gear icon to go to the settings page.

    Change the default admin password or add a new admin and remove the admin user altogether.

    Comic path should be set to /comics

    Optional Mylar DB path should be set to /mylar

    Optional path for certificates and keys should be set to /certs

    After you update the settings, Gazee will restart and begin an intial scan of your comic library.

    Happy Reading!

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it gazee /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f gazee
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' gazee
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/gazee

    Versions

    • 27.03.19: - Deprecate image and get in semi working state.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 17.08.18: - Rebase to alpine 3.8.
    • 30.12.17: - Ensure version 11 of cherrypy.
    • 07.12.17: - Initial Release.
    \ No newline at end of file +

    Application Setup

    Webui can be found at your-ip:4242

    Default username and password for the web interface:

    • Username: admin
    • Password: gazee

    Click the gear icon to go to the settings page.

    Change the default admin password or add a new admin and remove the admin user altogether.

    Comic path should be set to /comics

    Optional Mylar DB path should be set to /mylar

    Optional path for certificates and keys should be set to /certs

    After you update the settings, Gazee will restart and begin an intial scan of your comic library.

    Happy Reading!

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it gazee /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f gazee
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' gazee
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/gazee

    Versions

    • 27.03.19: - Deprecate image and get in semi working state.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 17.08.18: - Rebase to alpine 3.8.
    • 30.12.17: - Ensure version 11 of cherrypy.
    • 07.12.17: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-gmail-order-bot/index.html b/images/docker-gmail-order-bot/index.html index b95ff3b9d6..71187a9819 100644 --- a/images/docker-gmail-order-bot/index.html +++ b/images/docker-gmail-order-bot/index.html @@ -1,4 +1,4 @@ - gmail-order-bot - LinuxServer.io

    lsiodev/gmail-order-bot

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    Gmail-order-bot - A bot used to leverage a Gmail account as an order messaging service to consume email orders from Nano Checkout and process them using any custom logic you choose.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/lsiodev/gmail-order-bot:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This container is for developers only! We make pre-defined bots we use in our workflow, but you have to have an underlying understanding of javascript and some basic Docker skills to use it.

    The entire basis of this is to act as middleware between your email address receiving orders from https://checkout.linuxserver.io and send them to some external service. The bot will archive any messages that do not come from orders@nanocheckout.com with valid DKIM signatures, so definetly do not use this on a personal account.

    The concept behind this bot and using email as a destination for orders is to serve normal users that simply want an email for an order out of the box and provide a free messaging queue akin to something like RabbitMQ for people that want to automate order ingestion.

    By default we include bots we use that will be copied over on first container run, for example a simple discord ping when an order is received with the order details:

    const Discord = require('discord.js');
    + gmail-order-bot - LinuxServer.io       

    lsiodev/gmail-order-bot

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    Gmail-order-bot - A bot used to leverage a Gmail account as an order messaging service to consume email orders from Nano Checkout and process them using any custom logic you choose.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/lsiodev/gmail-order-bot:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This container is for developers only! We make pre-defined bots we use in our workflow, but you have to have an underlying understanding of javascript and some basic Docker skills to use it.

    The entire basis of this is to act as middleware between your email address receiving orders from https://checkout.linuxserver.io and send them to some external service. The bot will archive any messages that do not come from orders@nanocheckout.com with valid DKIM signatures, so definetly do not use this on a personal account.

    The concept behind this bot and using email as a destination for orders is to serve normal users that simply want an email for an order out of the box and provide a free messaging queue akin to something like RabbitMQ for people that want to automate order ingestion.

    By default we include bots we use that will be copied over on first container run, for example a simple discord ping when an order is received with the order details:

    const Discord = require('discord.js');
     const YAML = require('yaml');
     const discordtoken = process.env.DISCORD_TOKEN;
     const roomid = process.env.DISCORD_ROOM
    @@ -42,4 +42,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    BOT_NAME=discord On successful order receive send the order payload to this bot (default bots are located in root/defaults/bots)
    LOOP_TIME=60 Time in seconds to reach into gmail and get new messages to process

    Volume Mappings (-v)

    Volume Function
    /config Path to gmail tokens and custom/default bots

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it gmail-order-bot /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f gmail-order-bot
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' gmail-order-bot
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/lsiodev/gmail-order-bot:latest

    Versions

    • 06.07.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it gmail-order-bot /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f gmail-order-bot
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' gmail-order-bot
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/lsiodev/gmail-order-bot:latest

    Versions

    • 06.07.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-grav/index.html b/images/docker-grav/index.html index 1081675b1a..1cb937269b 100644 --- a/images/docker-grav/index.html +++ b/images/docker-grav/index.html @@ -1,4 +1,4 @@ - grav - LinuxServer.io

    linuxserver/grav

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Grav is a Fast, Simple, and Flexible, file-based Web-platform.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/grav:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    For more information check out the Grav documentation. Our image includes the grav-admin plugin.

    To use the CLI tools you need to pass the working directory as part of your exec command (or use an interactive shell), e.g. docker exec -it -w /app/grav-admin grav bin/gpm

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + grav - LinuxServer.io       

    linuxserver/grav

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Grav is a Fast, Simple, and Flexible, file-based Web-platform.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/grav:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    For more information check out the Grav documentation. Our image includes the grav-admin plugin.

    To use the CLI tools you need to pass the working directory as part of your exec command (or use an interactive shell), e.g. docker exec -it -w /app/grav-admin grav bin/gpm

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       grav:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 Port for web frontend

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it grav /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f grav
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' grav
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/grav:latest

    Versions

    • 05.09.22: - All php to read envs passed to container.
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 03.09.21: - Added support for Redis caching.
    • 01.07.21: - Rebase to Alpine 3.14.
    • 09.04.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it grav /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f grav
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' grav
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/grav:latest

    Versions

    • 05.09.22: - All php to read envs passed to container.
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 03.09.21: - Added support for Redis caching.
    • 01.07.21: - Rebase to Alpine 3.14.
    • 09.04.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-grocy/index.html b/images/docker-grocy/index.html index 49596060f2..741cf9c2ae 100644 --- a/images/docker-grocy/index.html +++ b/images/docker-grocy/index.html @@ -1,4 +1,4 @@ - grocy - LinuxServer.io

    linuxserver/grocy

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Grocy is an ERP system for your kitchen! Cut down on food waste, and manage your chores with this brilliant utility.

    Keep track of your purchases, how much food you are wasting, what chores need doing and what batteries need charging with this proudly Open Source tool

    For more information on grocy visit their website and check it out: https://grocy.info

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/grocy:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Grocy is simple to get running. Configure the container with instructions below, start it, and you can then access it by visiting http://your.ip:9283 - once the page loads, you can log in with the default username and password of admin / admin

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + grocy - LinuxServer.io       

    linuxserver/grocy

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Grocy is an ERP system for your kitchen! Cut down on food waste, and manage your chores with this brilliant utility.

    Keep track of your purchases, how much food you are wasting, what chores need doing and what batteries need charging with this proudly Open Source tool

    For more information on grocy visit their website and check it out: https://grocy.info

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/grocy:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Grocy is simple to get running. Configure the container with instructions below, start it, and you can then access it by visiting http://your.ip:9283 - once the page loads, you can log in with the default username and password of admin / admin

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       grocy:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 will map the container's port 80 to port 9283 on the host

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London for specifying your timezone

    Volume Mappings (-v)

    Volume Function
    /config this will store any uploaded data on the docker host

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it grocy /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f grocy
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' grocy
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/grocy:latest

    Versions

    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 22.08.21: - Rebase to Alpine 3.14 and PHP 8.
    • 25.07.21: - Add 'int','json' and 'zlib' PHP extensions.
    • 10.05.21: - Reduce image size.
    • 08.04.21: - Update docs to reflect jenkins builder changes.
    • 17.02.21: - Rebasing to alpine 3.13.
    • 26.01.21: - Add 'ldap' PHP extension.
    • 22.12.20: - Add 'ctype' PHP extension.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 22.09.19: - Add 'gd' PHP extension.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 27.12.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it grocy /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f grocy
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' grocy
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/grocy:latest

    Versions

    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 22.08.21: - Rebase to Alpine 3.14 and PHP 8.
    • 25.07.21: - Add 'int','json' and 'zlib' PHP extensions.
    • 10.05.21: - Reduce image size.
    • 08.04.21: - Update docs to reflect jenkins builder changes.
    • 17.02.21: - Rebasing to alpine 3.13.
    • 26.01.21: - Add 'ldap' PHP extension.
    • 22.12.20: - Add 'ctype' PHP extension.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 22.09.19: - Add 'gd' PHP extension.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 27.12.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-guacd/index.html b/images/docker-guacd/index.html index 102aeed131..c886a59e0a 100644 --- a/images/docker-guacd/index.html +++ b/images/docker-guacd/index.html @@ -1,4 +1,4 @@ - guacd - LinuxServer.io

    linuxserver/guacd

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Guacd - Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH. This container is only the backend server component needed to use The official or 3rd party HTML5 frontends.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/guacd:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This is a backend only service, to leverage Guacd server you need to use either the official Java frontend guacamole-client or an open source alternative like guacamole-lite.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + guacd - LinuxServer.io       

    linuxserver/guacd

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Guacd - Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH. This container is only the backend server component needed to use The official or 3rd party HTML5 frontends.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/guacd:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This is a backend only service, to leverage Guacd server you need to use either the official Java frontend guacamole-client or an open source alternative like guacamole-lite.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       guacd:
    @@ -13,4 +13,4 @@ services:
       --restart unless-stopped \
       lscr.io/linuxserver/guacd:latest
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    4822 Port Guacamole server listens on

    Environment Variables (-e)

    Env Function

    Volume Mappings (-v)

    Volume Function

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
    -

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it guacd /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f guacd
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' guacd
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/guacd:latest

    Versions

    • 11.03.22: - Bump to 1.4.0.
    • 15.05.21: - Add terminus font for SSH support.
    • 08.05.21: - Bump to 1.3.0, rebase to Alpine.
    • 27.07.20: - Bump to 1.2.0.
    • 17.04.20: - Bump back 1.1.0, rebase to focal
    • 08.02.20: - Bump to 1.1.0.
    • 25.05.19: - Initial Release.
    \ No newline at end of file +

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it guacd /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f guacd
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' guacd
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/guacd:latest

    Versions

    • 11.03.22: - Bump to 1.4.0.
    • 15.05.21: - Add terminus font for SSH support.
    • 08.05.21: - Bump to 1.3.0, rebase to Alpine.
    • 27.07.20: - Bump to 1.2.0.
    • 17.04.20: - Bump back 1.1.0, rebase to focal
    • 08.02.20: - Bump to 1.1.0.
    • 25.05.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-habridge/index.html b/images/docker-habridge/index.html index aaf6c4b6fd..f73f8b5241 100644 --- a/images/docker-habridge/index.html +++ b/images/docker-habridge/index.html @@ -1,4 +1,4 @@ - habridge - LinuxServer.io

    linuxserver/habridge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Habridge emulates Philips Hue API to other home automation gateways such as an Amazon Echo/Dot Gen 1 (gen 2 has issues discovering ha-bridge) or other systems that support Philips Hue. The Bridge handles basic commands such as "On", "Off" and "brightness" commands of the hue protocol. This bridge can control most devices that have a distinct API.

    In the cases of systems that require authorization and/or have APIs that cannot be handled in the current method, a module may need to be built. The Harmony Hub is such a module and so is the Nest module. The Bridge has helpers to build devices for the gateway for the Logitech Harmony Hub, Vera, Vera Lite or Vera Edge, Nest, Somfy Tahoma, Home Assistant, Domoticz, MQTT, HAL, Fibaro, HomeWizard, LIFX, OpenHAB, FHEM, Broadlink and the ability to proxy all of your real Hue bridges behind this bridge.

    This bridge was built to help put the Internet of Things together.

    For more information about how to use this software have a look at their Wiki https://github.com/bwssytems/ha-bridge/wiki

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/habridge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    To set up the ha-bridge simply go to http://localhost:8080. Once you are in the webui you can add devices and configure ha-bridge to your liking.

    For information on how to configure ha-bridge, go to their wiki at https://github.com/bwssytems/ha-bridge/wiki

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + habridge - LinuxServer.io       

    linuxserver/habridge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Habridge emulates Philips Hue API to other home automation gateways such as an Amazon Echo/Dot Gen 1 (gen 2 has issues discovering ha-bridge) or other systems that support Philips Hue. The Bridge handles basic commands such as "On", "Off" and "brightness" commands of the hue protocol. This bridge can control most devices that have a distinct API.

    In the cases of systems that require authorization and/or have APIs that cannot be handled in the current method, a module may need to be built. The Harmony Hub is such a module and so is the Nest module. The Bridge has helpers to build devices for the gateway for the Logitech Harmony Hub, Vera, Vera Lite or Vera Edge, Nest, Somfy Tahoma, Home Assistant, Domoticz, MQTT, HAL, Fibaro, HomeWizard, LIFX, OpenHAB, FHEM, Broadlink and the ability to proxy all of your real Hue bridges behind this bridge.

    This bridge was built to help put the Internet of Things together.

    For more information about how to use this software have a look at their Wiki https://github.com/bwssytems/ha-bridge/wiki

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/habridge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    To set up the ha-bridge simply go to http://localhost:8080. Once you are in the webui you can add devices and configure ha-bridge to your liking.

    For information on how to configure ha-bridge, go to their wiki at https://github.com/bwssytems/ha-bridge/wiki

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       habridge:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 WebUI
    50000 HABridge communication port.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    SEC_KEY=<Your Key To Encrypt Security Data> Key used to secure communication.
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where HABridge stores config files and data.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it habridge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f habridge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' habridge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/habridge:latest

    Versions

    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 28.08.18: - Rebase to alpine 3.8.
    • 12.04.18: - Add workaround to bind to port 80 if needed.
    • 08.04.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it habridge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f habridge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' habridge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/habridge:latest

    Versions

    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 28.08.18: - Rebase to alpine 3.8.
    • 12.04.18: - Add workaround to bind to port 80 if needed.
    • 08.04.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-headphones/index.html b/images/docker-headphones/index.html index 188c045c97..966b55afc2 100644 --- a/images/docker-headphones/index.html +++ b/images/docker-headphones/index.html @@ -1,4 +1,4 @@ - headphones - LinuxServer.io

    linuxserver/headphones

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Headphones is an automated music downloader for NZB and Torrent, written in Python. It supports SABnzbd, NZBget, Transmission, µTorrent and Blackhole.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/headphones:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + headphones - LinuxServer.io       

    linuxserver/headphones

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Headphones is an automated music downloader for NZB and Torrent, written in Python. It supports SABnzbd, NZBget, Transmission, µTorrent and Blackhole.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/headphones:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       headphones:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8181 Application WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.
    /downloads ISOs.
    /music Your music directory.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it headphones /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f headphones
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' headphones
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/headphones:latest

    Versions

    • 02.02.22: - Rebasing to alpine 3.15. Updating to Python 3.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 09.05.19: - Add default UTC timezone if user does not set it.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 18.08.18: - Rebase to alpine 3.8.
    • 03.04.18: - Remove forced port and update README.
    • 05.01.18: - Deprecate cpu_core routine lack of scaling.
    • 12.12.17: - Rebase to alpine 3.7.
    • 20.07.17: - Internal git pull instead of at runtime.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 28.05.17: - Add flac package to handle FLAC based .cue.
    • 25.05.17: - Rebase to alpine 3.6.
    • 03.05.17: - Reduce layer, replace broken source for shntool.
    • 07.02.17: - Rebase to alpine 3.5.
    • 23.12.16: - Fix capitalisation in README.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README, compile shntool.
    • 08.08.16: - Rebase to alpine linux.
    • 18.07.15: - Inital Release
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it headphones /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f headphones
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' headphones
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/headphones:latest

    Versions

    • 02.02.22: - Rebasing to alpine 3.15. Updating to Python 3.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 09.05.19: - Add default UTC timezone if user does not set it.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 18.08.18: - Rebase to alpine 3.8.
    • 03.04.18: - Remove forced port and update README.
    • 05.01.18: - Deprecate cpu_core routine lack of scaling.
    • 12.12.17: - Rebase to alpine 3.7.
    • 20.07.17: - Internal git pull instead of at runtime.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 28.05.17: - Add flac package to handle FLAC based .cue.
    • 25.05.17: - Rebase to alpine 3.6.
    • 03.05.17: - Reduce layer, replace broken source for shntool.
    • 07.02.17: - Rebase to alpine 3.5.
    • 23.12.16: - Fix capitalisation in README.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README, compile shntool.
    • 08.08.16: - Rebase to alpine linux.
    • 18.07.15: - Inital Release
    \ No newline at end of file diff --git a/images/docker-healthchecks/index.html b/images/docker-healthchecks/index.html index 1dc8c64bcf..5b6e9e08ca 100644 --- a/images/docker-healthchecks/index.html +++ b/images/docker-healthchecks/index.html @@ -1,4 +1,4 @@ - healthchecks - LinuxServer.io

    linuxserver/healthchecks

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Healthchecks is a watchdog for your cron jobs. It's a web server that listens for pings from your cron jobs, plus a web interface.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/healthchecks:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the WebUI at :8000. For more information, check out Healthchecks.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + healthchecks - LinuxServer.io       

    linuxserver/healthchecks

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Healthchecks is a watchdog for your cron jobs. It's a web server that listens for pings from your cron jobs, plus a web interface.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/healthchecks:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the WebUI at :8000. For more information, check out Healthchecks.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       healthchecks:
    @@ -55,4 +55,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 will map the container's port 8000 to port 8000 on the host

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    SITE_ROOT= The site's top-level URL and the port it listens to if differrent than 80 or 443 (e.g., https://healthchecks.example.com:8000)
    SITE_NAME= The site's name (e.g., "Example Corp HealthChecks")
    DEFAULT_FROM_EMAIL= From email for alerts
    EMAIL_HOST= SMTP host
    EMAIL_PORT= SMTP port
    EMAIL_HOST_USER= SMTP user
    EMAIL_HOST_PASSWORD= SMTP password
    EMAIL_USE_TLS= Use TLS for SMTP (True or False)
    SUPERUSER_EMAIL= Superuser email
    SUPERUSER_PASSWORD= Superuser password
    REGENERATE_SETTINGS= Defaults to False. Set to true to always override the local_settings.py file with values from environment variables. Do not set to True if you have made manual modifications to this file.
    SITE_LOGO_URL= Full URL to custom site logo
    ALLOWED_HOSTS= Array of valid hostnames for the server ["test.com","test2.com"] (default: ["*"])
    SECRET_KEY= A secret key used for cryptographic signing. Will generate a secure value if one is not supplied
    APPRISE_ENABLED= Defaults to False. A boolean that turns on/off the Apprise integration (https://github.com/caronc/apprise)
    DEBUG= Defaults to True. Debug mode relaxes CSRF protections and increases logging verbosity but should be disabled for production instances as it will impact performance and security.

    Volume Mappings (-v)

    Volume Function
    /config Database and healthchecks config directory

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it healthchecks /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f healthchecks
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' healthchecks
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/healthchecks:latest

    Versions

    • 18.10.22: - Add curl-dev to fix broken pip builds.
    • 11.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 27.09.22: - Fix sending of Email Reports
    • 08.01.22: - Fix CSRF setting for Django 4.0 (introduced in v1.25.0)
    • 11.11.21: - Add Apprise to Docker as in v1.24.0
    • 10.09.21: - Fix creation of superuser
    • 07.08.21: - Update custom logo handling to support changes in v1.22.0
    • 11.07.21: - Rebase to Alpine 3.14.
    • 18.05.21: - Add linuxserver wheel index.
    • 11.01.21: - Add libffi-dev to allow building of python cryptography lib.
    • 19.07.20: - Rebasing to alpine 3.12, fixed 'ALLOWED_HOSTS' bug, now defaults to wildcard
    • 19.12.19: - Rebasing to alpine 3.11.
    • 31.10.19: - Add postgres client and fix config for CSRF.
    • 23.10.19: - Allow to create superuser
    • 28.06.19: - Rebasing to alpine 3.10.
    • 12.04.19: - Rebase to Alpine 3.9.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 14.02.19: - Adding mysql libs needed for using a database.
    • 11.10.18: - adding pipeline logic and multi arching release
    • 15.11.17: - git pull is now in Dockerfile so each tagged container contains the same code version
    • 17.10.17: - Fixed local_settings.py output
    • 27.09.17: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it healthchecks /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f healthchecks
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' healthchecks
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/healthchecks:latest

    Versions

    • 18.10.22: - Add curl-dev to fix broken pip builds.
    • 11.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 27.09.22: - Fix sending of Email Reports
    • 08.01.22: - Fix CSRF setting for Django 4.0 (introduced in v1.25.0)
    • 11.11.21: - Add Apprise to Docker as in v1.24.0
    • 10.09.21: - Fix creation of superuser
    • 07.08.21: - Update custom logo handling to support changes in v1.22.0
    • 11.07.21: - Rebase to Alpine 3.14.
    • 18.05.21: - Add linuxserver wheel index.
    • 11.01.21: - Add libffi-dev to allow building of python cryptography lib.
    • 19.07.20: - Rebasing to alpine 3.12, fixed 'ALLOWED_HOSTS' bug, now defaults to wildcard
    • 19.12.19: - Rebasing to alpine 3.11.
    • 31.10.19: - Add postgres client and fix config for CSRF.
    • 23.10.19: - Allow to create superuser
    • 28.06.19: - Rebasing to alpine 3.10.
    • 12.04.19: - Rebase to Alpine 3.9.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 14.02.19: - Adding mysql libs needed for using a database.
    • 11.10.18: - adding pipeline logic and multi arching release
    • 15.11.17: - git pull is now in Dockerfile so each tagged container contains the same code version
    • 17.10.17: - Fixed local_settings.py output
    • 27.09.17: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-hedgedoc/index.html b/images/docker-hedgedoc/index.html index 6a0ee16888..f58af03944 100644 --- a/images/docker-hedgedoc/index.html +++ b/images/docker-hedgedoc/index.html @@ -1,4 +1,4 @@ - hedgedoc - LinuxServer.io

    linuxserver/hedgedoc

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    HedgeDoc gives you access to all your files wherever you are.

    HedgeDoc is a real-time, multi-platform collaborative markdown note editor. This means that you can write notes with other people on your desktop, tablet or even on the phone. You can sign-in via multiple auth providers like Facebook, Twitter, GitHub and many more on the homepage.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/hedgedoc:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    HedgeDoc web interface can be accessed http://${IP}:3000/, if you want to use a custom domain or anything besides port 3000 you will need to leverage their env settings for callbacks: (specifically for CMD_DOMAIN, CMD_PORT and CMD_URL_ADDPORT)

    Full list of HedgeDoc options

    For convience we provide a working example using Mysql as a backend in this document, if you do not wish to use our custom environment values or a Mysql database backend feel free to leverage any of the settings laid out in the link above.

    To run behind a reverse proxy we have a preconfigured config using docker networking included in our SWAG image and you can read how to use this in the Reverse Proxy Confs repository

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + hedgedoc - LinuxServer.io       

    linuxserver/hedgedoc

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    HedgeDoc gives you access to all your files wherever you are.

    HedgeDoc is a real-time, multi-platform collaborative markdown note editor. This means that you can write notes with other people on your desktop, tablet or even on the phone. You can sign-in via multiple auth providers like Facebook, Twitter, GitHub and many more on the homepage.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/hedgedoc:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    HedgeDoc web interface can be accessed http://${IP}:3000/, if you want to use a custom domain or anything besides port 3000 you will need to leverage their env settings for callbacks: (specifically for CMD_DOMAIN, CMD_PORT and CMD_URL_ADDPORT)

    Full list of HedgeDoc options

    For convience we provide a working example using Mysql as a backend in this document, if you do not wish to use our custom environment values or a Mysql database backend feel free to leverage any of the settings laid out in the link above.

    To run behind a reverse proxy we have a preconfigured config using docker networking included in our SWAG image and you can read how to use this in the Reverse Proxy Confs repository

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       hedgedoc:
    @@ -45,4 +45,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Web gui port (internal port also needs to be changed if accessing at port other than 80, 443 and 3000).

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    DB_HOST=<hostname or ip> Host address of mysql database
    DB_PORT=3306 Port to access mysql database default is 3306
    DB_USER=hedgedoc Database user
    DB_PASS=<secret password> Database password
    DB_NAME=hedgedoc Database name
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    CMD_DOMAIN=localhost The address the gui will be accessed at (ie. 192.168.1.1 or hedgedoc.domain.com).
    CMD_URL_ADDPORT=false Set to true if using a port other than 80 or 443.
    CMD_PROTOCOL_USESSL=false Set to true if accessing over https via reverse proxy.
    CMD_PORT=3000 If you wish to access hedgedoc at a port different than 80, 443 or 3000, you need to set this to that port (ie. CMD_PORT=5000) and change the port mapping accordingly (5000:5000).
    CMD_ALLOW_ORIGIN=['localhost'] Comma-separated list of allowed hostnames

    Volume Mappings (-v)

    Volume Function
    /config HedgeDoc config and configurable files

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it hedgedoc /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f hedgedoc
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' hedgedoc
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/hedgedoc:latest

    Versions

    • 02.11.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 10.04.22: - Use python3 to build node sqlite3.
    • 10.02.22: - Rebase to Alpine 3.15.
    • 09.02.22: - Add optional var CMD_PORT that is needed for accessing at port other than 80, 443 and 3000.
    • 09.12.21: - Add optional var CMD_PROTOCOL_USESSL that is needed for reverse proxy.
    • 07.12.21: - Rebase to ubuntu focal. Update to node 16. Make sure uploads are persistent.
    • 15.10.21: - Add required env var CMD_DOMAIN.
    • 05.05.21: - Remove symlinking some folders from config to /opt/hedgedoc/public.
    • 03.05.21: - Remove deprecated sequalizerc step.
    • 22.12.20: - Initial release
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it hedgedoc /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f hedgedoc
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' hedgedoc
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/hedgedoc:latest

    Versions

    • 02.11.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 10.04.22: - Use python3 to build node sqlite3.
    • 10.02.22: - Rebase to Alpine 3.15.
    • 09.02.22: - Add optional var CMD_PORT that is needed for accessing at port other than 80, 443 and 3000.
    • 09.12.21: - Add optional var CMD_PROTOCOL_USESSL that is needed for reverse proxy.
    • 07.12.21: - Rebase to ubuntu focal. Update to node 16. Make sure uploads are persistent.
    • 15.10.21: - Add required env var CMD_DOMAIN.
    • 05.05.21: - Remove symlinking some folders from config to /opt/hedgedoc/public.
    • 03.05.21: - Remove deprecated sequalizerc step.
    • 22.12.20: - Initial release
    \ No newline at end of file diff --git a/images/docker-heimdall/index.html b/images/docker-heimdall/index.html index e91c8dcf28..e57dc125ef 100644 --- a/images/docker-heimdall/index.html +++ b/images/docker-heimdall/index.html @@ -1,4 +1,4 @@ - heimdall - LinuxServer.io

    linuxserver/heimdall

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Heimdall is a way to organise all those links to your most used web sites and web applications in a simple way. Simplicity is the key to Heimdall. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/heimdall:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Heimdall releases.
    development Latest commit from the github 2.x branch.

    Application Setup

    Access the web gui at http://SERVERIP:PORT

    Adding password protection

    This image now supports password protection through htpasswd. Run the following command on your host to generate the htpasswd file docker exec -it heimdall htpasswd -c /config/nginx/.htpasswd <username>. Replace with a username of your choice and you will be asked to enter a password. Uncomment the basic auth lines in /config/nginx/site-confs/default.conf and restart the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + heimdall - LinuxServer.io       

    linuxserver/heimdall

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Heimdall is a way to organise all those links to your most used web sites and web applications in a simple way. Simplicity is the key to Heimdall. Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/heimdall:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Heimdall releases.
    development Latest commit from the github 2.x branch.

    Application Setup

    Access the web gui at http://SERVERIP:PORT

    Adding password protection

    This image now supports password protection through htpasswd. Run the following command on your host to generate the htpasswd file docker exec -it heimdall htpasswd -c /config/nginx/.htpasswd <username>. Replace with a username of your choice and you will be asked to enter a password. Uncomment the basic auth lines in /config/nginx/site-confs/default.conf and restart the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       heimdall:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 http gui
    443 https gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it heimdall /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f heimdall
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' heimdall
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/heimdall:latest

    Versions

    • 14.11.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 04.11.22: - Build commits to upstream branch 2.x for the development tag.
    • 13.03.21: - Make searchproviders.yaml user configurable.
    • 10.02.21: - Revert to alpine 3.12 as php 7.4 broke laravel.
    • 10.02.21: - Rebasing to alpine 3.13.
    • 17.08.20: - Add php7-curl.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 17.01.20: - Use nginx from baseimage.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 16.07.19: - Save laravel.log to /config/log/heimdall.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 01.04.19: - Fix permission detect logic.
    • 26.03.19: - Install Heimdall during container start to prevent delayed start due to overlayfs bug with recursive chown.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 15.03.19: - Clarify docker image tags in readme.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.18: - Generate random app key in .env for new installs.
    • 20.11.18: - Upgrade baseimage packages during build.
    • 04.11.18: - Add php7-zip.
    • 31.10.18: - Add queue service.
    • 17.10.18: - Symlink avatars folder.
    • 16.10.18: - Updated fastcgi_params for user login support.
    • 07.10.18: - Symlink .env rather than copy. It now resides under /config/www
    • 30.09.18: - Multi-arch image. Move .env to /config.
    • 05.09.18: - Rebase to alpine linux 3.8.
    • 06.03.18: - Use password protection if htpasswd is set. Existing users can delete their default site config at /config/nginx/site-confs/default.conf and restart the container, a new default site config with htpasswd support will be created in its place
    • 12.02.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it heimdall /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f heimdall
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' heimdall
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/heimdall:latest

    Versions

    • 14.11.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 04.11.22: - Build commits to upstream branch 2.x for the development tag.
    • 13.03.21: - Make searchproviders.yaml user configurable.
    • 10.02.21: - Revert to alpine 3.12 as php 7.4 broke laravel.
    • 10.02.21: - Rebasing to alpine 3.13.
    • 17.08.20: - Add php7-curl.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 17.01.20: - Use nginx from baseimage.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 16.07.19: - Save laravel.log to /config/log/heimdall.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 01.04.19: - Fix permission detect logic.
    • 26.03.19: - Install Heimdall during container start to prevent delayed start due to overlayfs bug with recursive chown.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 15.03.19: - Clarify docker image tags in readme.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.18: - Generate random app key in .env for new installs.
    • 20.11.18: - Upgrade baseimage packages during build.
    • 04.11.18: - Add php7-zip.
    • 31.10.18: - Add queue service.
    • 17.10.18: - Symlink avatars folder.
    • 16.10.18: - Updated fastcgi_params for user login support.
    • 07.10.18: - Symlink .env rather than copy. It now resides under /config/www
    • 30.09.18: - Multi-arch image. Move .env to /config.
    • 05.09.18: - Rebase to alpine linux 3.8.
    • 06.03.18: - Use password protection if htpasswd is set. Existing users can delete their default site config at /config/nginx/site-confs/default.conf and restart the container, a new default site config with htpasswd support will be created in its place
    • 12.02.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-homeassistant/index.html b/images/docker-homeassistant/index.html index 0a3abd994f..d650ff7094 100644 --- a/images/docker-homeassistant/index.html +++ b/images/docker-homeassistant/index.html @@ -1,4 +1,4 @@ - homeassistant - LinuxServer.io

    linuxserver/homeassistant

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Home Assistant Core - Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/homeassistant:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This image is based on Home Assistant Core.

    The Webui can be found at http://your-ip:8123. Follow the wizard to set up Home Assistant.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + homeassistant - LinuxServer.io       

    linuxserver/homeassistant

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Home Assistant Core - Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts. Perfect to run on a Raspberry Pi or a local server.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/homeassistant:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This image is based on Home Assistant Core.

    The Webui can be found at http://your-ip:8123. Follow the wizard to set up Home Assistant.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       homeassistant:
    @@ -30,4 +30,4 @@ services:
     

    Host vs. Bridge

    Home Assistant can discover and automatically configure zeroconf/mDNS and UPnP devices on your network. In order for this to work you must create the container with --net=host.

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8123 Application WebUI, only use this if you are not using host mode.

    Networking (--net)

    Parameter Function
    --net=host Shares host networking with container. Required for some devices to be discovered by Home Assistant.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify your TimeZone e.g. Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Home Assistant config storage path.

    Device Mappings (--device)

    Parameter Function
    /path/to/device For passing through USB, serial or gpio devices.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it homeassistant /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f homeassistant
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' homeassistant
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/homeassistant:latest

    Versions

    • 16.11.22: - Fix the dep conflict for google calendar.
    • 23.09.22: - Migrate to s6v3.
    • 29.07.22: - Improve usb device permission fix.
    • 07.07.22: - Rebase to alpine 3.16, switch to cp310 wheels.
    • 07.05.22: - Build matplotlib with the same Numpy version as HA req.
    • 31.03.22: - Install pycups.
    • 07.03.22: - Install PySwitchbot.
    • 02.03.22: - Update pip and use legacy resolver, clean up temp python files, reduce image size.
    • 04.02.22: - Always compile grpcio on arm32v7 due to pypi pushing a glibc only wheel.
    • 12.12.21: - Use the new build.yaml to determine HA base version.
    • 25.09.21: - Use the new lsio homeassistant wheel repo, instead of the HA wheels.
    • 13.09.21: - Build psycopg locally as the HA provided wheel does not seem to work properly.
    • 13.09.21: - Fix setcap in service. Build CISO8601 locally as the HA provided wheel does not seem to work properly.
    • 12.09.21: - Rebase to alpine 3.14. Build on native armhf.
    • 09.08.21: - Fixed broken build caused by missing dependency.
    • 01.07.21: - Remove HACS dependencies as it caused a crash in Home-assistant.
    • 25.02.21: - Add python dependencies from homeassistant base image.
    • 07.02.21: - Fix building from the wrong requirement file. Add ssh client & external DB libs.
    • 06.02.21: - Add iputils so ping works as non root user.
    • 30.01.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it homeassistant /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f homeassistant
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' homeassistant
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/homeassistant:latest

    Versions

    • 16.11.22: - Fix the dep conflict for google calendar.
    • 23.09.22: - Migrate to s6v3.
    • 29.07.22: - Improve usb device permission fix.
    • 07.07.22: - Rebase to alpine 3.16, switch to cp310 wheels.
    • 07.05.22: - Build matplotlib with the same Numpy version as HA req.
    • 31.03.22: - Install pycups.
    • 07.03.22: - Install PySwitchbot.
    • 02.03.22: - Update pip and use legacy resolver, clean up temp python files, reduce image size.
    • 04.02.22: - Always compile grpcio on arm32v7 due to pypi pushing a glibc only wheel.
    • 12.12.21: - Use the new build.yaml to determine HA base version.
    • 25.09.21: - Use the new lsio homeassistant wheel repo, instead of the HA wheels.
    • 13.09.21: - Build psycopg locally as the HA provided wheel does not seem to work properly.
    • 13.09.21: - Fix setcap in service. Build CISO8601 locally as the HA provided wheel does not seem to work properly.
    • 12.09.21: - Rebase to alpine 3.14. Build on native armhf.
    • 09.08.21: - Fixed broken build caused by missing dependency.
    • 01.07.21: - Remove HACS dependencies as it caused a crash in Home-assistant.
    • 25.02.21: - Add python dependencies from homeassistant base image.
    • 07.02.21: - Fix building from the wrong requirement file. Add ssh client & external DB libs.
    • 06.02.21: - Add iputils so ping works as non root user.
    • 30.01.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-htpcmanager/index.html b/images/docker-htpcmanager/index.html index 3420fdf7fe..ea86d56f2a 100644 --- a/images/docker-htpcmanager/index.html +++ b/images/docker-htpcmanager/index.html @@ -1,4 +1,4 @@ - htpcmanager - LinuxServer.io

    linuxserver/htpcmanager

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Htpcmanager is a front end for many htpc related applications.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/htpcmanager:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The webui is found at port 8085. Smartmontools and psutil have not been included, you can safely ignore the warning error in the log.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + htpcmanager - LinuxServer.io       

    linuxserver/htpcmanager

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Htpcmanager is a front end for many htpc related applications.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/htpcmanager:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The webui is found at port 8085. Smartmontools and psutil have not been included, you can safely ignore the warning error in the log.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       htpcmanager:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8085 Application WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it htpcmanager /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f htpcmanager
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' htpcmanager
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/htpcmanager:latest

    Versions

    • 24.08.22: - Rebase to alpine 3.15, use linuxserver.io wheel repo.
    • 08.04.21: - Fix build.
    • 10.02.21: - Rebasing to alpine 3.13.
    • 26.10.20: - Rebase to alpine 3.12, python3, change upstream project
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 17.08.18: - Rebase to alpine 3.8.
    • 12.12.17: - Rebase to alpine 3.7.
    • 20.07.17: - Internal git pull instead of at runtime.
    • 25.05.17: - Rebase to alpine 3.6.
    • 07.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 26.09.16: - Add back cherrypy after removal from baseimage.
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 14.01.15: - Remove hardcoded loglevel from the run command, set in webui
    • 19.09.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it htpcmanager /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f htpcmanager
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' htpcmanager
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/htpcmanager:latest

    Versions

    • 24.08.22: - Rebase to alpine 3.15, use linuxserver.io wheel repo.
    • 08.04.21: - Fix build.
    • 10.02.21: - Rebasing to alpine 3.13.
    • 26.10.20: - Rebase to alpine 3.12, python3, change upstream project
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 17.08.18: - Rebase to alpine 3.8.
    • 12.12.17: - Rebase to alpine 3.7.
    • 20.07.17: - Internal git pull instead of at runtime.
    • 25.05.17: - Rebase to alpine 3.6.
    • 07.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 26.09.16: - Add back cherrypy after removal from baseimage.
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 14.01.15: - Remove hardcoded loglevel from the run command, set in webui
    • 19.09.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-hydra/index.html b/images/docker-hydra/index.html index e7ed2fcf7e..af36401942 100644 --- a/images/docker-hydra/index.html +++ b/images/docker-hydra/index.html @@ -1,4 +1,4 @@ - [linuxserver/hydra](https://github.com/linuxserver/docker-hydra) - LinuxServer.io

    linuxserver/hydra

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Hydra is a meta search for NZB indexers and the "spiritual successor" to NZBmegasearcH. It provides easy access to a number of raw and newznab based indexers.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/hydra should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
    + [linuxserver/hydra](https://github.com/linuxserver/docker-hydra) - LinuxServer.io       

    linuxserver/hydra

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Hydra is a meta search for NZB indexers and the "spiritual successor" to NZBmegasearcH. It provides easy access to a number of raw and newznab based indexers.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/hydra should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
     version: "2.1"
     services:
       hydra:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    5075 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where hydra should store config files.
    /downloads NZB download folder.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    THIS IMAGE HAS BEEN DEPRECATED.

    Please use linuxserver/nzbhydra2 instead.

    The web interface is at <your ip>:5075 , to set up indexers and connections to your nzb download applications.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it hydra /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f hydra
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' hydra
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/hydra

    Versions

    • 04.11.19: - Deprecated. Please use linuxserver/nzbhydra2 instead.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 17.08.18: - Rebase to alpine 3.8.
    • 12.12.17: - Rebase to alpine 3.7.
    • 20.07.17: - Internal git pull instead of at runtime.
    • 25.05.17: - Rebase to alpine 3.6.
    • 07.11.16: - Move git clone internal to the container,point config, database and log to use same locations for existing users.
    • 14.10.16: - Add version layer information.
    • 09.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 25.01.16: - Initial Release.
    \ No newline at end of file +

    Application Setup

    THIS IMAGE HAS BEEN DEPRECATED.

    Please use linuxserver/nzbhydra2 instead.

    The web interface is at <your ip>:5075 , to set up indexers and connections to your nzb download applications.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it hydra /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f hydra
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' hydra
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/hydra

    Versions

    • 04.11.19: - Deprecated. Please use linuxserver/nzbhydra2 instead.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 17.08.18: - Rebase to alpine 3.8.
    • 12.12.17: - Rebase to alpine 3.7.
    • 20.07.17: - Internal git pull instead of at runtime.
    • 25.05.17: - Rebase to alpine 3.6.
    • 07.11.16: - Move git clone internal to the container,point config, database and log to use same locations for existing users.
    • 14.10.16: - Add version layer information.
    • 09.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 25.01.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-hydra2/index.html b/images/docker-hydra2/index.html index d5a8e0b8be..a787f06f89 100644 --- a/images/docker-hydra2/index.html +++ b/images/docker-hydra2/index.html @@ -1,4 +1,4 @@ - linuxserver/hydra2 - LinuxServer.io

    linuxserver/hydra2

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io MicroBadger Layers Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED. We will continue releases with a new image under the correct name: linuxserver/nzbhydra2.

    Hydra2 is a meta search application for NZB indexers, the "spiritual successor" to NZBmegasearcH, and an evolution of the original application NZBHydra.

    It provides easy access to a number of raw and newznab based indexers. The application NZBHydra 2 is replacing NZBHydra 1 and supports migrating from V1. Be wary that there may be some compatibility issues for those migrating from V1 to V2, so ensure you back up your old configuration before moving over to the new version. NOTE: The last version that supports migration is linuxserver/hydra2:v2.10.2-ls49

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/hydra2 should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Version Tags

    This image provides various versions that are available via tags. latest tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.

    Tag Description
    latest Stable releases
    dev Prereleases from their GitHub

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
    + linuxserver/hydra2 - LinuxServer.io       

    linuxserver/hydra2

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io MicroBadger Layers Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED. We will continue releases with a new image under the correct name: linuxserver/nzbhydra2.

    Hydra2 is a meta search application for NZB indexers, the "spiritual successor" to NZBmegasearcH, and an evolution of the original application NZBHydra.

    It provides easy access to a number of raw and newznab based indexers. The application NZBHydra 2 is replacing NZBHydra 1 and supports migrating from V1. Be wary that there may be some compatibility issues for those migrating from V1 to V2, so ensure you back up your old configuration before moving over to the new version. NOTE: The last version that supports migration is linuxserver/hydra2:v2.10.2-ls49

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/hydra2 should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Version Tags

    This image provides various versions that are available via tags. latest tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.

    Tag Description
    latest Stable releases
    dev Prereleases from their GitHub

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
       --name=hydra2 \
       -e PUID=1000 \
       -e PGID=1000 \
    @@ -26,4 +26,4 @@ services:
         restart: unless-stopped
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    5076 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where hydra2 should store config files.
    /downloads NZB download folder.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    The web interface is at <your ip>:5076 , to set up indexers and connections to your nzb download applications.

    Docker Mods

    Docker Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) can be accessed via the dynamic badge above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it hydra2 /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f hydra2
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' hydra2
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/hydra2

    Versions

    • 19.04.20: - Deprecated. New repo at linuxserver/docker-nzbhydra2.
    • 08.01.20: - Switch to python3.
    • 05.01.20: - Add dev tag for prereleases.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 18.08.18: - Bump java version to 10, (bionic currently refers to it as version 11).
    • 10.08.18: - Rebase to ubuntu bionic.
    • 15.04.18: - Change to port 5076 in the Dockerfile.
    • 11.01.18: - Initial Release.
    \ No newline at end of file +

    Application Setup

    The web interface is at <your ip>:5076 , to set up indexers and connections to your nzb download applications.

    Docker Mods

    Docker Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) can be accessed via the dynamic badge above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it hydra2 /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f hydra2
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' hydra2
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/hydra2

    Versions

    • 19.04.20: - Deprecated. New repo at linuxserver/docker-nzbhydra2.
    • 08.01.20: - Switch to python3.
    • 05.01.20: - Add dev tag for prereleases.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 18.08.18: - Bump java version to 10, (bionic currently refers to it as version 11).
    • 10.08.18: - Rebase to ubuntu bionic.
    • 15.04.18: - Change to port 5076 in the Dockerfile.
    • 11.01.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-ipfs/index.html b/images/docker-ipfs/index.html index b3fa5addf6..dbf465ebd8 100644 --- a/images/docker-ipfs/index.html +++ b/images/docker-ipfs/index.html @@ -1,4 +1,4 @@ - ipfs - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. Please use the official IPFS container here: https://hub.docker.com/r/ipfs/go-ipfs When this project started the web interface was not integrated well with the default IPFS server. Now it is great and well maintained, hosting it on a static webserver does not make much sense anymore.

    linuxserver/ipfs

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ipfs - A peer-to-peer hypermedia protocol designed to make the web faster, safer, and more open.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ipfs should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Application Setup

    In order to push files beyond your local gateway you have to make sure port 4001 is forwarded to the internet. This is required for IPFS peers to reach in and grab your files so public gateways can serve them.

    Access the webui at http://localhost , if not using localhost scroll to the bottom of the page and set the API Address setting to IE http://192.168.1.10:5001 , from there you can upload and manage files you push to IPFS. Your gateway to access IPFS files is http://localhost:8080/ipfs/YOUR-FILE-HASH-HERE . You can also simply use public IPFS gateways like: * Cloudflare - https://cloudflare-ipfs.com/ipfs/YOUR-FILE-HASH-HERE * IPFS.io - https://ipfs.io/ipfs/YOUR-FILE-HASH-HERE * Eternum.io - https://ipfs.eternum.io/ipfs/YOUR-FILE-HASH-HERE

    Cloudflare is a solid option as they actually edge cache the files on their CDN so even if your node pinning the item goes down for periods of time their cache will last up to a month.

    For more on using IPFS please read the docs here

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + ipfs - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. Please use the official IPFS container here: https://hub.docker.com/r/ipfs/go-ipfs When this project started the web interface was not integrated well with the default IPFS server. Now it is great and well maintained, hosting it on a static webserver does not make much sense anymore.

    linuxserver/ipfs

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ipfs - A peer-to-peer hypermedia protocol designed to make the web faster, safer, and more open.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ipfs should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Application Setup

    In order to push files beyond your local gateway you have to make sure port 4001 is forwarded to the internet. This is required for IPFS peers to reach in and grab your files so public gateways can serve them.

    Access the webui at http://localhost , if not using localhost scroll to the bottom of the page and set the API Address setting to IE http://192.168.1.10:5001 , from there you can upload and manage files you push to IPFS. Your gateway to access IPFS files is http://localhost:8080/ipfs/YOUR-FILE-HASH-HERE . You can also simply use public IPFS gateways like: * Cloudflare - https://cloudflare-ipfs.com/ipfs/YOUR-FILE-HASH-HERE * IPFS.io - https://ipfs.io/ipfs/YOUR-FILE-HASH-HERE * Eternum.io - https://ipfs.eternum.io/ipfs/YOUR-FILE-HASH-HERE

    Cloudflare is a solid option as they actually edge cache the files on their CDN so even if your node pinning the item goes down for periods of time their cache will last up to a month.

    For more on using IPFS please read the docs here

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       ipfs:
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 The port for the IPFS web UI
    4001 Peering port, this is the only port you should expose to the internet
    5001 API port, the clientside webUI needs to be able to talk to this from whatever machine your web browser is on
    8080 Gateway Port, actually serves IPFS content
    443 HTTPS port for web UI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config IPFS storage and config files/logs

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ipfs /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ipfs
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ipfs
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ipfs

    Versions

    • 02.02.22: - Deprecate.
    • 19.09.21: - Build webui from source. Update code formatting. Rebase to Alpine 3.14.
    • 01.04.21: - Add migration bins to image to support upgrades.
    • 24.02.20: - Rebase to Alpine 3.13.
    • 09.07.19: - Initial version.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ipfs /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ipfs
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ipfs
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ipfs

    Versions

    • 02.02.22: - Deprecate.
    • 19.09.21: - Build webui from source. Update code formatting. Rebase to Alpine 3.14.
    • 01.04.21: - Add migration bins to image to support upgrades.
    • 24.02.20: - Rebase to Alpine 3.13.
    • 09.07.19: - Initial version.
    \ No newline at end of file diff --git a/images/docker-jackett/index.html b/images/docker-jackett/index.html index 421ba7cd92..63d63b9a48 100644 --- a/images/docker-jackett/index.html +++ b/images/docker-jackett/index.html @@ -1,4 +1,4 @@ - jackett - LinuxServer.io

    linuxserver/jackett

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Jackett works as a proxy server: it translates queries from apps (Sonarr, SickRage, CouchPotato, Mylar, etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/jackett:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Jackett Releases
    development Latest Jackett Releases

    Application Setup

    The web interface is at <your-ip>:9117 , configure various trackers and connections to other apps there. More info at Jackett.

    Disable autoupdates in the webui to prevent jackett crashing, the image is refreshed when new versions are released.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + jackett - LinuxServer.io       

    linuxserver/jackett

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Jackett works as a proxy server: it translates queries from apps (Sonarr, SickRage, CouchPotato, Mylar, etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/jackett:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Jackett Releases
    development Latest Jackett Releases

    Application Setup

    The web interface is at <your-ip>:9117 , configure various trackers and connections to other apps there. More info at Jackett.

    Disable autoupdates in the webui to prevent jackett crashing, the image is refreshed when new versions are released.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       jackett:
    @@ -31,4 +31,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    9117 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    AUTO_UPDATE=true Allow Jackett to update inside of the container (currently recommended by Jackett and enabled by default)
    RUN_OPTS=<run options here> Optionally specify additional arguments to be passed.

    Volume Mappings (-v)

    Volume Function
    /config Where Jackett should store its config file.
    /downloads Path to torrent blackhole.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it jackett /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f jackett
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' jackett
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/jackett:latest

    Versions

    • 10.05.22: - Rebase to Ubuntu Focal.
    • 24.05.20: - Allow user to optionally enable auto updates.
    • 31.12.19: - Remove agressive startup chowning.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 10.03.19: - Switch to net-core builds of jackett, not dependant on mono and smaller images.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 11.06.18: - Ensure root ownership of Jackett files.
    • 13.12.17: - Fix continuation lines.
    • 17.04.17: - Switch to using inhouse mono baseimage, ubuntu xenial based.
    • 09.02.17: - Rebase to alpine 3.5.
    • 29.10.16: - Call python2 from edge main to satisfy new mono dependency.
    • 14.10.16: - Add version layer information.
    • 22.09.16: - Remove autoupdate, tidy up Dockerfile.
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 06.08.16: - Rebase to alpine linux for smaller image.
    • 25.01.16: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it jackett /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f jackett
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' jackett
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/jackett:latest

    Versions

    • 10.05.22: - Rebase to Ubuntu Focal.
    • 24.05.20: - Allow user to optionally enable auto updates.
    • 31.12.19: - Remove agressive startup chowning.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 10.03.19: - Switch to net-core builds of jackett, not dependant on mono and smaller images.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 11.06.18: - Ensure root ownership of Jackett files.
    • 13.12.17: - Fix continuation lines.
    • 17.04.17: - Switch to using inhouse mono baseimage, ubuntu xenial based.
    • 09.02.17: - Rebase to alpine 3.5.
    • 29.10.16: - Call python2 from edge main to satisfy new mono dependency.
    • 14.10.16: - Add version layer information.
    • 22.09.16: - Remove autoupdate, tidy up Dockerfile.
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 06.08.16: - Rebase to alpine linux for smaller image.
    • 25.01.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-jellyfin/index.html b/images/docker-jellyfin/index.html index 9526f54250..09d44b810d 100644 --- a/images/docker-jellyfin/index.html +++ b/images/docker-jellyfin/index.html @@ -1,4 +1,4 @@ - jellyfin - LinuxServer.io

    linuxserver/jellyfin

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/jellyfin:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Jellyfin releases
    nightly Nightly Jellyfin releases

    Application Setup

    Webui can be found at http://<your-ip>:8096

    More information can be found on the official documentation here.

    Hardware Acceleration

    Intel

    Hardware acceleration users for Intel Quicksync will need to mount their /dev/dri video device inside of the container by passing the following command when running or creating the container:

    --device=/dev/dri:/dev/dri

    We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here:

    https://github.com/NVIDIA/nvidia-docker

    We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the jellyfin docker container.

    OpenMAX (Raspberry Pi)

    Hardware acceleration users for Raspberry Pi MMAL/OpenMAX will need to mount their /dev/vcsm and /dev/vchiq video devices inside of the container and their system OpenMax libs by passing the following options when running or creating the container:

    --device=/dev/vcsm:/dev/vcsm
    + jellyfin - LinuxServer.io       

    linuxserver/jellyfin

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/jellyfin:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Jellyfin releases
    nightly Nightly Jellyfin releases

    Application Setup

    Webui can be found at http://<your-ip>:8096

    More information can be found on the official documentation here.

    Hardware Acceleration

    Intel

    Hardware acceleration users for Intel Quicksync will need to mount their /dev/dri video device inside of the container by passing the following command when running or creating the container:

    --device=/dev/dri:/dev/dri

    We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here:

    https://github.com/NVIDIA/nvidia-docker

    We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the jellyfin docker container.

    OpenMAX (Raspberry Pi)

    Hardware acceleration users for Raspberry Pi MMAL/OpenMAX will need to mount their /dev/vcsm and /dev/vchiq video devices inside of the container and their system OpenMax libs by passing the following options when running or creating the container:

    --device=/dev/vcsm:/dev/vcsm
     --device=/dev/vchiq:/dev/vchiq
     -v /opt/vc/lib:/opt/vc/lib
     

    V4L2 (Raspberry Pi)

    Hardware acceleration users for Raspberry Pi V4L2 will need to mount their /dev/video1X devices inside of the container by passing the following options when running or creating the container:

    --device=/dev/video10:/dev/video10
    @@ -45,4 +45,4 @@ services:
       -p 1900:1900/udp \
     

    The official documentation for environmentals has additional environmentals that can provide additional configurability such as migrating to the native Jellyfin image.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it jellyfin /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f jellyfin
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' jellyfin
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/jellyfin:latest

    Versions

    • 11.06.22: - Switch to upstream repo's ffmpeg5 build.
    • 05.01.22: - Specify Intel iHD driver versions to avoid mismatched libva errors.
    • 25.12.21: - Fix video device group perms error message.
    • 10.12.21: - Rework readme, disable template sync.
    • 22.09.21: - Pull only the server, web and ffmpeg packages instead of the wrapper.
    • 23.06.21: - Add log message if device permissions are incorrect. Pin jellyfin dependency versions to prevent upstream apt repo issues. Deprecate the bionic tag.
    • 21.05.21: - Add nvidia.icd file to fix missing tonemapping using Nvidia HW.
    • 20.01.21: - Add Jellyfin Binary Environmentals
    • 20.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 23.11.20: - Rebase to Focal, branch off Bionic.
    • 22.07.20: - Ingest releases from Jellyfin repo.
    • 28.04.20: - Replace MMAL/OMX dependency device /dev/vc-mem with /dev/vcsm as the former was not sufficient for raspbian.
    • 11.04.20: - Enable hw decode (mmal) on Raspberry Pi, update readme instructions, add donation info, create missing default transcodes folder.
    • 11.03.20: - Add Pi V4L2 support, remove optional transcode mapping (location is selected in the gui, defaults to path under /config).
    • 30.01.20: - Add nightly tag.
    • 09.01.20: - Add Pi OpenMax support.
    • 02.10.19: - Improve permission fixing for render & dvb devices.
    • 31.07.19: - Add AMD drivers for vaapi support on x86.
    • 13.06.19: - Add Intel drivers for vaapi support on x86.
    • 07.06.19: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it jellyfin /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f jellyfin
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' jellyfin
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/jellyfin:latest

    Versions

    • 11.06.22: - Switch to upstream repo's ffmpeg5 build.
    • 05.01.22: - Specify Intel iHD driver versions to avoid mismatched libva errors.
    • 25.12.21: - Fix video device group perms error message.
    • 10.12.21: - Rework readme, disable template sync.
    • 22.09.21: - Pull only the server, web and ffmpeg packages instead of the wrapper.
    • 23.06.21: - Add log message if device permissions are incorrect. Pin jellyfin dependency versions to prevent upstream apt repo issues. Deprecate the bionic tag.
    • 21.05.21: - Add nvidia.icd file to fix missing tonemapping using Nvidia HW.
    • 20.01.21: - Add Jellyfin Binary Environmentals
    • 20.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 23.11.20: - Rebase to Focal, branch off Bionic.
    • 22.07.20: - Ingest releases from Jellyfin repo.
    • 28.04.20: - Replace MMAL/OMX dependency device /dev/vc-mem with /dev/vcsm as the former was not sufficient for raspbian.
    • 11.04.20: - Enable hw decode (mmal) on Raspberry Pi, update readme instructions, add donation info, create missing default transcodes folder.
    • 11.03.20: - Add Pi V4L2 support, remove optional transcode mapping (location is selected in the gui, defaults to path under /config).
    • 30.01.20: - Add nightly tag.
    • 09.01.20: - Add Pi OpenMax support.
    • 02.10.19: - Improve permission fixing for render & dvb devices.
    • 31.07.19: - Add AMD drivers for vaapi support on x86.
    • 13.06.19: - Add Intel drivers for vaapi support on x86.
    • 07.06.19: - Initial release.
    \ No newline at end of file diff --git a/images/docker-jenkins-builder/index.html b/images/docker-jenkins-builder/index.html index 3f9675895d..5dd3a028b4 100644 --- a/images/docker-jenkins-builder/index.html +++ b/images/docker-jenkins-builder/index.html @@ -1,4 +1,4 @@ - jenkins-builder - LinuxServer.io

    linuxserver/jenkins-builder

    Expects to run as part of the LSIO CI process. Not for public consumption.

    Running against remote project

    docker run --rm \
    + jenkins-builder - LinuxServer.io       

    linuxserver/jenkins-builder

    Expects to run as part of the LSIO CI process. Not for public consumption.

    Running against remote project

    docker run --rm \
       -e CONTAINER_NAME=${CONTAINER_NAME} \
       -v ${TEMPDIR}:/ansible/jenkins \
       lscr.io/linuxserver/jenkins-builder:latest
    @@ -16,4 +16,4 @@ docker build \
       --pull \
       -t lscr.io/linuxserver/jenkins-builder:latest .
     

    The ARM variants can be built on x86_64 hardware using multiarch/qemu-user-static

    docker run --rm --privileged multiarch/qemu-user-static:register --reset
    -

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file +

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    The following line is only in this repo for loop testing:

    • { date: "01.01.50:", desc: "I am the release message for this internal repo." }
    \ No newline at end of file diff --git a/images/docker-kanzi/index.html b/images/docker-kanzi/index.html index a855be2b64..a853451e8e 100644 --- a/images/docker-kanzi/index.html +++ b/images/docker-kanzi/index.html @@ -1,4 +1,4 @@ - kanzi - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver/kanzi

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Kanzi, formerly titled Kodi-Alexa, this custom skill is the ultimate voice remote control for navigating Kodi. It can do anything you can think of (100+ intents). This container also contains lexigram-cli to setup Kanzi with an Amazon Developer Account and automatically deploy it to Amazon.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/kanzi:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Initial setup

    • Once you start the container for the first time, you need to perform some steps before use.
    • Create an Amazon Developer Account here.
    • Open a terminal in the /config directory of the docker container docker exec -itw /config kanzi bash
    • Enter lexigram login --no-browser true to setup your AWS credentials and copy the URL into a browser, login to your Amazon Developer Account and copy/paste the resulting authorisation code back into the terminal and press enter.
    • Edit the file kodi.config according to your local setup and this will be used by the included gunicorn server to respond to requests.
    • Restart the container to automatically deploy the Kanzi skill.
    • Reverse proxy this container with our LetsEncrypt container which contains preconfigured templates for reverse proxying the Kanzi container on either a subdomain or subfolder utilising Docker custom networking. Alternatively, if you already have an Nginx reverse proxy set up, you can use one of these location blocks to reverse proxy Kanzi to a subfolder or subdomain respectively.

    Subfolder location /kanzi { rewrite ^/kanzi/(.*) /$1 break; proxy_pass https://$IP-ADDRESS:8000; proxy_redirect https://$IP-ADDRESS:8000 /kanzi; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Host $server_name; } Subdomain location / { proxy_pass https://$IP-ADDRESS:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Host $server_name; }

    Strict reverse proxies

    This image uses a self-signed certificate by default. This naturally means the scheme is https. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + kanzi - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver/kanzi

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Kanzi, formerly titled Kodi-Alexa, this custom skill is the ultimate voice remote control for navigating Kodi. It can do anything you can think of (100+ intents). This container also contains lexigram-cli to setup Kanzi with an Amazon Developer Account and automatically deploy it to Amazon.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/kanzi:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Initial setup

    • Once you start the container for the first time, you need to perform some steps before use.
    • Create an Amazon Developer Account here.
    • Open a terminal in the /config directory of the docker container docker exec -itw /config kanzi bash
    • Enter lexigram login --no-browser true to setup your AWS credentials and copy the URL into a browser, login to your Amazon Developer Account and copy/paste the resulting authorisation code back into the terminal and press enter.
    • Edit the file kodi.config according to your local setup and this will be used by the included gunicorn server to respond to requests.
    • Restart the container to automatically deploy the Kanzi skill.
    • Reverse proxy this container with our LetsEncrypt container which contains preconfigured templates for reverse proxying the Kanzi container on either a subdomain or subfolder utilising Docker custom networking. Alternatively, if you already have an Nginx reverse proxy set up, you can use one of these location blocks to reverse proxy Kanzi to a subfolder or subdomain respectively.

    Subfolder location /kanzi { rewrite ^/kanzi/(.*) /$1 break; proxy_pass https://$IP-ADDRESS:8000; proxy_redirect https://$IP-ADDRESS:8000 /kanzi; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Host $server_name; } Subdomain location / { proxy_pass https://$IP-ADDRESS:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Host $server_name; }

    Strict reverse proxies

    This image uses a self-signed certificate by default. This naturally means the scheme is https. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       kanzi:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 Application Port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    INVOCATION_NAME=kanzi Specify an invocation name for this skill, use either kanzi or kod.
    URL_ENDPOINT=https://server.com/kanzi/ Specify the URL at which the webserver is reachable either https://kanzi.server.com/ or https://server.com/kanzi/ Note the trailing slash MUST be included.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it kanzi /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f kanzi
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' kanzi
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/kanzi:latest

    Versions

    • 20.06.22: - Deprecate image.
    • 13.04.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it kanzi /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f kanzi
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' kanzi
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/kanzi:latest

    Versions

    • 20.06.22: - Deprecate image.
    • 13.04.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-kasm/index.html b/images/docker-kasm/index.html index fad6c21cd7..b880319826 100644 --- a/images/docker-kasm/index.html +++ b/images/docker-kasm/index.html @@ -1,4 +1,4 @@ - kasm - LinuxServer.io

    linuxserver/kasm

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Kasm Workspaces is a docker container streaming platform for delivering browser-based access to desktops, applications, and web services. Kasm uses devops-enabled Containerized Desktop Infrastructure (CDI) to create on-demand, disposable, docker containers that are accessible via web browser. Example use-cases include Remote Browser Isolation (RBI), Data Loss Prevention (DLP), Desktop as a Service (DaaS), Secure Remote Access Services (RAS), and Open Source Intelligence (OSINT) collections.

    The rendering of the graphical-based containers is powered by the open-source project KasmVNC.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/kasm:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Kasm releases
    develop Tip of develop

    Application Setup

    This container uses Docker in Docker and requires being run in privileged mode. This container also requires an initial setup that runs on port 3000.

    Unlike other containers the web interface port (default 443) needs to be set for the env variable KASM_PORT and both the inside and outside port IE for 4443 KASM_PORT=4443 -p 4443:4443

    Unraid users due to the DinD storage layer /opt/ should be mounted directly to a disk IE /mnt/disk1/appdata/path or optimally with a cache disk at /mnt/cache/appdata/path

    Access the installation wizard at https://your ip:3000 and follow the instructions there. Once setup is complete access https://your ip:443 and login with the credentials you entered during setup. The default users are:

    • admin@kasm.local
    • user@kasm.local

    Currently Synology systems are not supported due to them blocking CPU scheduling in their Kernel.

    Strict reverse proxies

    This image uses a self-signed certificate by default. This naturally means the scheme is https. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + kasm - LinuxServer.io       

    linuxserver/kasm

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Kasm Workspaces is a docker container streaming platform for delivering browser-based access to desktops, applications, and web services. Kasm uses devops-enabled Containerized Desktop Infrastructure (CDI) to create on-demand, disposable, docker containers that are accessible via web browser. Example use-cases include Remote Browser Isolation (RBI), Data Loss Prevention (DLP), Desktop as a Service (DaaS), Secure Remote Access Services (RAS), and Open Source Intelligence (OSINT) collections.

    The rendering of the graphical-based containers is powered by the open-source project KasmVNC.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/kasm:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Kasm releases
    develop Tip of develop

    Application Setup

    This container uses Docker in Docker and requires being run in privileged mode. This container also requires an initial setup that runs on port 3000.

    Unlike other containers the web interface port (default 443) needs to be set for the env variable KASM_PORT and both the inside and outside port IE for 4443 KASM_PORT=4443 -p 4443:4443

    Unraid users due to the DinD storage layer /opt/ should be mounted directly to a disk IE /mnt/disk1/appdata/path or optimally with a cache disk at /mnt/cache/appdata/path

    Access the installation wizard at https://your ip:3000 and follow the instructions there. Once setup is complete access https://your ip:443 and login with the credentials you entered during setup. The default users are:

    • admin@kasm.local
    • user@kasm.local

    Currently Synology systems are not supported due to them blocking CPU scheduling in their Kernel.

    Strict reverse proxies

    This image uses a self-signed certificate by default. This naturally means the scheme is https. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       kasm:
    @@ -31,4 +31,4 @@ services:
       --restart unless-stopped \
       lscr.io/linuxserver/kasm:latest
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Kasm Installation wizard. (https)
    443 Kasm Workspaces interface. (https)

    Environment Variables (-e)

    Env Function
    KASM_PORT=443 Specify the port you bind to the outside for Kasm Workspaces.
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    DOCKER_HUB_USERNAME=USER Optionally specify a DockerHub Username to pull private images.
    DOCKER_HUB_PASSWORD=PASS Optionally specify a DockerHub password to pull private images.

    Volume Mappings (-v)

    Volume Function
    /opt Docker and installation storage.
    /profiles Optionally specify a path for persistent profile storage.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
    -

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it kasm /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f kasm
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' kasm
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/kasm:latest

    Versions

    • 23.09.22: - Migrate to s6v3.
    • 02.07.22: - Initial Release.
    \ No newline at end of file +

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it kasm /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f kasm
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' kasm
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/kasm:latest

    Versions

    • 23.09.22: - Migrate to s6v3.
    • 02.07.22: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-kdenlive/index.html b/images/docker-kdenlive/index.html index 876dc5bc35..4661ed1c73 100644 --- a/images/docker-kdenlive/index.html +++ b/images/docker-kdenlive/index.html @@ -1,4 +1,4 @@ - kdenlive - LinuxServer.io

    linuxserver/kdenlive

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Kdenlive is a powerful free and open source cross-platform video editing program made by the KDE community. Feature rich and production ready.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/kdenlive:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at: * http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    You can also force login on the '/' path without this parameter by passing the environment variable -e AUTO_LOGIN=false.

    Hardware Acceleration (x86_64 only)

    In order to perform hardware transcoding you will need to mount a video device into the container. Some of the default hardware rendering/transcode profiles will point to devices in /dev/dri for vaapi_device. Make sure the profile you are using points to the correct device in the container. IE if you have intel integrated graphics along with an Nvdia or AMD video card you might have renderD128, renderD129, etc. To check which device is which use vainfo from inside the container: (right click the desktop and open xterm)

    vainfo --display drm --device /dev/dri/renderD128
    + kdenlive - LinuxServer.io       

    linuxserver/kdenlive

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Kdenlive is a powerful free and open source cross-platform video editing program made by the KDE community. Feature rich and production ready.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/kdenlive:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at: * http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    You can also force login on the '/' path without this parameter by passing the environment variable -e AUTO_LOGIN=false.

    Hardware Acceleration (x86_64 only)

    In order to perform hardware transcoding you will need to mount a video device into the container. Some of the default hardware rendering/transcode profiles will point to devices in /dev/dri for vaapi_device. Make sure the profile you are using points to the correct device in the container. IE if you have intel integrated graphics along with an Nvdia or AMD video card you might have renderD128, renderD129, etc. To check which device is which use vainfo from inside the container: (right click the desktop and open xterm)

    vainfo --display drm --device /dev/dri/renderD128
     

    Intel/ATI/AMD

    To leverage hardware acceleration you will need to mount /dev/dri video device inside of the conainer.

    --device=/dev/dri:/dev/dri
     

    We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here: https://github.com/NVIDIA/nvidia-docker

    We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the container.

    Keyboard Layouts

    This should match the layout on the computer you are accessing the container from. The keyboard layouts available for use are: * da-dk-qwerty- Danish keyboard * de-ch-qwertz- Swiss German keyboard (qwertz) * de-de-qwertz- German keyboard (qwertz) - OSK available * en-gb-qwerty- English (UK) keyboard * en-us-qwerty- English (US) keyboard - OSK available DEFAULT * es-es-qwerty- Spanish keyboard - OSK available * fr-ch-qwertz- Swiss French keyboard (qwertz) * fr-fr-azerty- French keyboard (azerty) - OSK available * it-it-qwerty- Italian keyboard - OSK available * ja-jp-qwerty- Japanese keyboard * pt-br-qwerty- Portuguese Brazilian keyboard * sv-se-qwerty- Swedish keyboard * tr-tr-qwerty- Turkish-Q keyboard

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
    @@ -39,4 +39,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Kdenlive desktop gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    SUBFOLDER=/ Specify a subfolder to use with reverse proxies, IE /subfolder/
    KEYBOARD=en-us-qwerty See the keyboard layouts section for more information and options.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores local files and settings

    Device Mappings (--device)

    Parameter Function
    /dev/dri Add this for hardware acceleration (Linux hosts only)

    Miscellaneous Options

    Parameter Function
    --shm-size= This might be needed to prevent crashing
    --security-opt seccomp=unconfined For Docker Engine only, this may be required depending on your Docker and storage configuration.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it kdenlive /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f kdenlive
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' kdenlive
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/kdenlive:latest

    Versions

    • 16.09.22: - Migrate to s6v3.
    • 09.03.22: - Update seccomp explanation.
    • 07.03.22: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it kdenlive /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f kdenlive
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' kdenlive
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/kdenlive:latest

    Versions

    • 16.09.22: - Migrate to s6v3.
    • 09.03.22: - Update seccomp explanation.
    • 07.03.22: - Initial release.
    \ No newline at end of file diff --git a/images/docker-lazylibrarian/index.html b/images/docker-lazylibrarian/index.html index d576c8dd63..abdea0d1c2 100644 --- a/images/docker-lazylibrarian/index.html +++ b/images/docker-lazylibrarian/index.html @@ -1,4 +1,4 @@ - lazylibrarian - LinuxServer.io

    linuxserver/lazylibrarian

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Lazylibrarian is a program to follow authors and grab metadata for all your digital reading needs. It uses a combination of Goodreads Librarything and optionally GoogleBooks as sources for author info and book info. This container is based on the DobyTang fork.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/lazylibrarian:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at http://<your-ip>:5299/home, for more information check out Lazylibrarian.

    Calibredb import

    x86-64 only We have implemented the optional ability to pull in the dependencies to enable the Calibredb import program:, this means if you don't require this feature the container isn't uneccessarily bloated but should you require it, it is easily available. This optional layer will be rebuilt automatically on our CI pipeline upon new Calibre releases so you can stay up to date. To use this option add the optional environmental variable as detailed above to pull an addition docker layer to enable ebook conversion and then in the LazyLibrarian config page (Processing:Calibredb import program:) set the path to converter tool to /usr/bin/calibredb

    ffmpeg

    By adding linuxserver/mods:lazylibrarian-ffmpeg to your DOCKER_MODS environment variable you can install ffmpeg into your container on startup. This allows you to use the audiobook conversion features of LazyLibrarian. You can enable it in the Web UI under Settings > Processing > External Programs by setting the ffmpeg path to ffmpeg.

    Media folders

    We have set /books as optional path, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional path if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + lazylibrarian - LinuxServer.io       

    linuxserver/lazylibrarian

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Lazylibrarian is a program to follow authors and grab metadata for all your digital reading needs. It uses a combination of Goodreads Librarything and optionally GoogleBooks as sources for author info and book info. This container is based on the DobyTang fork.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/lazylibrarian:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at http://<your-ip>:5299/home, for more information check out Lazylibrarian.

    Calibredb import

    x86-64 only We have implemented the optional ability to pull in the dependencies to enable the Calibredb import program:, this means if you don't require this feature the container isn't uneccessarily bloated but should you require it, it is easily available. This optional layer will be rebuilt automatically on our CI pipeline upon new Calibre releases so you can stay up to date. To use this option add the optional environmental variable as detailed above to pull an addition docker layer to enable ebook conversion and then in the LazyLibrarian config page (Processing:Calibredb import program:) set the path to converter tool to /usr/bin/calibredb

    ffmpeg

    By adding linuxserver/mods:lazylibrarian-ffmpeg to your DOCKER_MODS environment variable you can install ffmpeg into your container on startup. This allows you to use the audiobook conversion features of LazyLibrarian. You can enable it in the Web UI under Settings > Processing > External Programs by setting the ffmpeg path to ffmpeg.

    Media folders

    We have set /books as optional path, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional path if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       lazylibrarian:
    @@ -31,4 +31,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    5299 The port for the LazyLibrarian webinterface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use e.g. Europe/London
    DOCKER_MODS=linuxserver/calibre-web:calibre|linuxserver/mods:lazylibrarian-ffmpeg Allows additional functionality to be added, e.g. the Calibredb import program (optional, more info below)

    Volume Mappings (-v)

    Volume Function
    /config LazyLibrarian config
    /downloads Download location
    /books Books location

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it lazylibrarian /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f lazylibrarian
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lazylibrarian
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/lazylibrarian:latest

    Versions

    • 27.09.22: - Switch to Levenshtein, add cmake as build dep on armhf.
    • 07.05.22: - Rebase to Ubuntu Focal.
    • 22.05.21: - Make the paths clearer to the user, remove optional volume.
    • 17.05.21: - Add linuxserver wheel index.
    • 23.10.19: - Changed gitlab download link.
    • 23.10.19: - Add python module Pillow.
    • 31.07.19: - Add pyopenssl, remove git dependency during build time.
    • 09.07.19: - Rebase to Ubuntu Bionic, enables Calibre docker mod.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 05.03.19: - Added apprise python package.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 10.12.18: - Moved to Pipeline Building
    • 16.08.18: - Rebase to alpine 3.8
    • 05.01.18: - Deprecate cpu_core routine lack of scaling
    • 12.12.17: - Rebase to alpine 3.7
    • 21.07.17: - Internal git pull instead of at runtime
    • 25.05.17: - Rebase to alpine 3.6
    • 07.02.17: - Rebase to alpine 3.5
    • 30.01.17: - Compile libunrar.so to allow reading of .cbr format files
    • 12.01.17: - Add ghostscript package, allows magazine covers to be created etc
    • 14.10.16: - Add version layer information
    • 03.10.16: - Fix non-persistent settings and make log folder
    • 28.09.16: - Inital Release
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it lazylibrarian /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f lazylibrarian
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lazylibrarian
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/lazylibrarian:latest

    Versions

    • 27.09.22: - Switch to Levenshtein, add cmake as build dep on armhf.
    • 07.05.22: - Rebase to Ubuntu Focal.
    • 22.05.21: - Make the paths clearer to the user, remove optional volume.
    • 17.05.21: - Add linuxserver wheel index.
    • 23.10.19: - Changed gitlab download link.
    • 23.10.19: - Add python module Pillow.
    • 31.07.19: - Add pyopenssl, remove git dependency during build time.
    • 09.07.19: - Rebase to Ubuntu Bionic, enables Calibre docker mod.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 05.03.19: - Added apprise python package.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 10.12.18: - Moved to Pipeline Building
    • 16.08.18: - Rebase to alpine 3.8
    • 05.01.18: - Deprecate cpu_core routine lack of scaling
    • 12.12.17: - Rebase to alpine 3.7
    • 21.07.17: - Internal git pull instead of at runtime
    • 25.05.17: - Rebase to alpine 3.6
    • 07.02.17: - Rebase to alpine 3.5
    • 30.01.17: - Compile libunrar.so to allow reading of .cbr format files
    • 12.01.17: - Add ghostscript package, allows magazine covers to be created etc
    • 14.10.16: - Add version layer information
    • 03.10.16: - Fix non-persistent settings and make log folder
    • 28.09.16: - Inital Release
    \ No newline at end of file diff --git a/images/docker-ldap-auth/index.html b/images/docker-ldap-auth/index.html index bc45f5d484..ecd211c4ed 100644 --- a/images/docker-ldap-auth/index.html +++ b/images/docker-ldap-auth/index.html @@ -1,4 +1,4 @@ - ldap-auth - LinuxServer.io

    linuxserver/ldap-auth

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ldap-auth software is for authenticating users who request protected resources from servers proxied by nginx. It includes a daemon (ldap-auth) that communicates with an authentication server, and a webserver daemon that generates an authentication cookie based on the user’s credentials. The daemons are written in Python for use with a Lightweight Directory Access Protocol (LDAP) authentication server (OpenLDAP or Microsoft Windows Active Directory 2003 and 2012).

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ldap-auth:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • This container itself does not have any settings and it relies on the pertinent information passed through in http headers of incoming requests. Make sure that your webserver is set up with the right config.
    • Here's a sample config: nginx-ldap-auth.conf.
    • Unlike the upstream project, this image encodes the cookie information with fernet, using a randomly generated key during container creation (or optionally user defined).
    • Also unlike the upstream project, this image serves the login page at /ldaplogin (as well as /login) to prevent clashes with reverse proxied apps that may also use /login for their internal auth.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + ldap-auth - LinuxServer.io       

    linuxserver/ldap-auth

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ldap-auth software is for authenticating users who request protected resources from servers proxied by nginx. It includes a daemon (ldap-auth) that communicates with an authentication server, and a webserver daemon that generates an authentication cookie based on the user’s credentials. The daemons are written in Python for use with a Lightweight Directory Access Protocol (LDAP) authentication server (OpenLDAP or Microsoft Windows Active Directory 2003 and 2012).

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ldap-auth:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • This container itself does not have any settings and it relies on the pertinent information passed through in http headers of incoming requests. Make sure that your webserver is set up with the right config.
    • Here's a sample config: nginx-ldap-auth.conf.
    • Unlike the upstream project, this image encodes the cookie information with fernet, using a randomly generated key during container creation (or optionally user defined).
    • Also unlike the upstream project, this image serves the login page at /ldaplogin (as well as /login) to prevent clashes with reverse proxied apps that may also use /login for their internal auth.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       ldap-auth:
    @@ -24,4 +24,4 @@ services:
       --restart unless-stopped \
       lscr.io/linuxserver/ldap-auth:latest
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8888 the port for ldap auth daemon
    9000 the port for ldap login page

    Environment Variables (-e)

    Env Function
    TZ=Europe/London Specify a timezone to use EG Europe/London
    FERNETKEY= Optionally define a custom fernet key, has to be base64-encoded 32-byte (only needed if container is frequently recreated, or if using multi-node setups, invalidating previous authentications)
    CERTFILE= Point this to a certificate file to enable HTTP over SSL (HTTPS) for the ldap auth daemon
    KEYFILE= Point this to the private key file, matching the certificate file referred to in CERTFILE

    Volume Mappings (-v)

    Volume Function

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
    -

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ldap-auth /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ldap-auth
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ldap-auth
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ldap-auth:latest

    Versions

    • 19.09.22: - Rebase to alpine 3.15.
    • 14.05.21: - Add linuxserver wheel index.
    • 12.02.21: - Clean up cargo/rust cache.
    • 10.02.21: - Rebasing to alpine 3.13.
    • 08.09.20: - Set form action correctly.
    • 30.07.20: - Fix bug related to unset optional CERTFILE and KEYFILE vars.
    • 27.07.20: - Add support for HTTP over SSL (HTTPS).
    • 21.07.20: - Add support for optional user defined fernet key.
    • 02.06.20: - Rebasing to alpine 3.12, serve login page at /ldaplogin as well as /login, to prevent clashes with reverese proxied apps.
    • 17.05.20: - Add support for self-signed CA certs.
    • 20.02.20: - Switch to python3.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 01.07.19: - Fall back to base64 encoding when basic http auth is used.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 18.09.18: - Update pip
    • 14.09.18: - Add TZ parameter, remove unnecessary PUID/PGID params
    • 11.08.18: - Initial release.
    \ No newline at end of file +

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ldap-auth /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ldap-auth
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ldap-auth
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ldap-auth:latest

    Versions

    • 19.09.22: - Rebase to alpine 3.15.
    • 14.05.21: - Add linuxserver wheel index.
    • 12.02.21: - Clean up cargo/rust cache.
    • 10.02.21: - Rebasing to alpine 3.13.
    • 08.09.20: - Set form action correctly.
    • 30.07.20: - Fix bug related to unset optional CERTFILE and KEYFILE vars.
    • 27.07.20: - Add support for HTTP over SSL (HTTPS).
    • 21.07.20: - Add support for optional user defined fernet key.
    • 02.06.20: - Rebasing to alpine 3.12, serve login page at /ldaplogin as well as /login, to prevent clashes with reverese proxied apps.
    • 17.05.20: - Add support for self-signed CA certs.
    • 20.02.20: - Switch to python3.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 01.07.19: - Fall back to base64 encoding when basic http auth is used.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 18.09.18: - Update pip
    • 14.09.18: - Add TZ parameter, remove unnecessary PUID/PGID params
    • 11.08.18: - Initial release.
    \ No newline at end of file diff --git a/images/docker-letsencrypt/index.html b/images/docker-letsencrypt/index.html index 175ab93b43..caabd18bee 100644 --- a/images/docker-letsencrypt/index.html +++ b/images/docker-letsencrypt/index.html @@ -1,4 +1,4 @@ - IMPORTANT NOTICE: THIS IMAGE HAS BEEN DEPRECATED AND THE PROJECT IS MOVED TO A NEW REPO - LinuxServer.io

    IMPORTANT NOTICE: THIS IMAGE HAS BEEN DEPRECATED AND THE PROJECT IS MOVED TO A NEW REPO

    Due to a trademark related request, this image is moved to a new repo on Docker Hub and GitHub. This is a breaking change and you need to manually update. Apologies for the the disruption.

    Switching existing implementations over to the new image is very easy, just follow these simple steps: https://github.com/linuxserver/docker-swag#migrating-from-the-old-linuxserverletsencrypt-image

    This repository will be archived and builds for the image will no longer be created at the end of 2020

    linuxserver.io

    Blog Discord Discourse Fleet GitHub Open Collective

    The LinuxServer.io team brings you another container release featuring:

    • regular and timely application updates
    • easy user mappings (PGID, PUID)
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • regular security updates

    Find us at: * Blog - all the things you can do with our containers including How-To guides, opinions and much more! * Discord - realtime support / chat with the community and the team. * Discourse - post on our community forum. * Fleet - an online web interface which displays all of our maintained images. * GitHub - view the source for all of our repositories. * Open Collective - please consider helping us by either donating or contributing to our budget

    linuxserver/swag

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    SWAG - Secure Web-server And Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes. It also contains fail2ban for intrusion prevention.

    letsencrypt

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/letsencrypt should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container.

    docker

    docker create \
    + IMPORTANT NOTICE: THIS IMAGE HAS BEEN DEPRECATED AND THE PROJECT IS MOVED TO A NEW REPO - LinuxServer.io       

    IMPORTANT NOTICE: THIS IMAGE HAS BEEN DEPRECATED AND THE PROJECT IS MOVED TO A NEW REPO

    Due to a trademark related request, this image is moved to a new repo on Docker Hub and GitHub. This is a breaking change and you need to manually update. Apologies for the the disruption.

    Switching existing implementations over to the new image is very easy, just follow these simple steps: https://github.com/linuxserver/docker-swag#migrating-from-the-old-linuxserverletsencrypt-image

    This repository will be archived and builds for the image will no longer be created at the end of 2020

    linuxserver.io

    Blog Discord Discourse Fleet GitHub Open Collective

    The LinuxServer.io team brings you another container release featuring:

    • regular and timely application updates
    • easy user mappings (PGID, PUID)
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • regular security updates

    Find us at: * Blog - all the things you can do with our containers including How-To guides, opinions and much more! * Discord - realtime support / chat with the community and the team. * Discourse - post on our community forum. * Fleet - an online web interface which displays all of our maintained images. * GitHub - view the source for all of our repositories. * Open Collective - please consider helping us by either donating or contributing to our budget

    linuxserver/swag

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    SWAG - Secure Web-server And Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes. It also contains fail2ban for intrusion prevention.

    letsencrypt

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/letsencrypt should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container.

    docker

    docker create \
       --name=swag \
       --cap-add=NET_ADMIN \
       -e PUID=1000 \
    @@ -57,4 +57,4 @@ docker build \
       --pull \
       -t linuxserver/letsencrypt:latest .
     

    The ARM variants can be built on x86_64 hardware using multiarch/qemu-user-static

    docker run --rm --privileged multiarch/qemu-user-static:register --reset
    -

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    • 28.07.20: - Start transition to new name, SWAG.
    • 17.06.20: - Reformat ssl.conf. Pull in pre-generated dhparams.pem from DO Spaces. Deprecate DHLEVEL param.
    • 01.06.20: - Rebasing to alpine 3.12, change ldap login address to /ldaplogin to avoid clashes (existing users need to manually update).
    • 31.05.20: - Tweak Authelia confs (existing users can delete authelia-server.conf and authelia-location.conf, and restart to update).
    • 23.05.20: - Add support for Authelia.
    • 15.05.20: - Remove php7-pecl-imagick due to upstream issues. Add support for Geoip2 auto db retrieval.
    • 10.05.20: - Added support for fail2ban deny statements.
    • 04.05.20: - Allow for optionally setting propagation time for dns plugins. Add repo version of whois to replace the built-in busybox version. Update jail.local to change default fail2ban ban action to more widely supported iptables-allports.
    • 13.04.20: - Update cloudflare.ini with token info.
    • 11.03.20: - Add php7-sodium.
    • 06.03.20: - Implement cert renewal attempt during container start (only if the cert is already expired or will expire within the next 24 hours, otherwise it will be attempted at 2:08am).
    • 05.03.20: - Use port and proto upstream variables for ldap and default sample confs.
    • 24.02.20: - Remove world/group read permissions in dns-conf.
    • 23.02.20: - Add aliyun dns validation plugin.
    • 28.01.20: - Deprecate tls-sni validation method, remove from docs.
    • 27.01.20: - Add support for cpanel dns validation.
    • 10.01.20: - Add support for domeneshop dns validation.
    • 07.01.20: - Update ciphers from Mozilla ssl-config recommendations.
    • 01.01.20: - Add support for gandi dns validation.
    • 31.12.19: - GeoIP2 databases now require personal license keys to download. Auto download is disabled and log message is added.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 19.12.19: - Increase large_client_header_buffers in nginx.conf to prevent 414 errors.
    • 18.12.19: - Add php7-imap and php7-pecl-apcu.
    • 11.12.19: - Fix Google Cloud DNS to use .json file for authentication.
    • 20.11.19: - Fix cryptography version mismatch due to pip issue.
    • 17.11.19: - Add php7-pdo_odbc.
    • 17.11.19: - Add transip dns validation plugin.
    • 27.10.19: - Turn off lua resty core to get rid of error message in the log (existing users will have to delete /config/nginx/nginx.conf and restart the container).
    • 26.10.19: - Add new package for stream-geoip2, remove geoip2 module patch.
    • 24.10.19: - Add php7-pecl-imagick.
    • 23.10.19: - Update Host header in proxy.conf to fix CSRF issues.
    • 12.10.19: - Add linode dns validation plugin.
    • 23.09.19: - Move GeoIP2 db to /config to make it persistent.
    • 14.08.19: - Add inwx dns validation plugin.
    • 06.08.19: - Add php7-ftp.
    • 04.08.19: - Add php7-bcmath, php7-pear, php7-xmlrpc.
    • 02.08.19: - Add php7-ldap, remove geoip v1(deprecated).
    • 01.08.19: - Mark https redirect block as default_server (effective only for new installs).
    • 31.07.19: - Create GeoIP2 databse (libmaxminddb) during container start if it doesn't exist.
    • 30.07.19: - Support main domain via duckdns validation.
    • 29.07.19: - Enable http to https redirect by default (effective only for new installs).
    • 01.07.19: - Patch geoip2 module until upstream is fixed.
    • 30.06.19: - Add geoip2 module.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 19.06.19: - Set resolver to docker dns in ssl.conf.
    • 29.05.19: - Compensate for changes to the reverse-proxy-confs repo.
    • 26.05.19: - Remove botocore/urllib patch.
    • 08.05.19: - Remove default.conf when nginx is upgraded in downstream image.
    • 30.04.19: - Add php-redis.
    • 12.04.19: - Rebase aarch64 image to 3.9.
    • 25.03.19: - Rebase aarch64 image back to 3.8 due to python issues (specifically with fail2ban), switch packages to python 3 on amd64 and armhf, clean up pip/python cache to shrink image size.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 10.03.19: - Add TLSv1.3 to ssl.conf.
    • 02.03.19: - Add php intl and posix modules.
    • 27.02.19: - Add gnupg package.
    • 22.02.19: - Rebase to alpine 3.9.
    • 03.02.19: - Removed memcached due to seccomp errors. Let us know if you need to re-enable memcached.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 21.01.19: - Remove client_body_max from proxy.conf (existing users need to manually update).
    • 09.01.19: - Remove tls v1 and v1.1 from default ssl.conf, update ciphers (existing users need to manually update).
    • 30.12.18: - Fix bundle key generation.
    • 19.12.18: - Add ipv6 and http/2 support to default site config.
    • 08.12.18: - Had to remove cert renewal during container start due to certbot's new undocumented feature of up to 8 minute random delay.
    • 03.12.18: - Fix silly bug resetting the duckdns token.
    • 02.12.18: - Add dns validation support for ovh.
    • 20.11.18: - Externalize reverse proxy confs to separate github repo linuxserver/reverse-proxy-confs, update baseimage packages during build
    • 19.11.18: - Add php opcache package.
    • 12.11.18: - Add support for duckdns wildcard certs via dns validation
    • 31.10.18: - Add various preset proxy confs and fix others (thanks @nemchik and @hijxf)
    • 02.10.18: - Fix fail2ban instructions and logrotate conf
    • 11.09.18: - Add various preset proxy confs and fix others (thanks @nemchik and @LeoVerto)
    • 04.09.18: - Linting fixes.
    • 30.08.18: - Add support for ldap auth, add proxy confs for bazarr, couchpotato, headphones, lidarr and plex subfolder (thanks @nemchik and @jedahan)
    • 21.08.18: - Rebase to alpine 3.8, add info on search engine de-listing
    • 08.08.18: - Add subdomain proxy conf for plex, update emby proxy confs
    • 25.07.18: - Add subdomain proxy conf for syncthing
    • 23.07.18: - Remove backwards compatibility and set default validation method to http. Update portainer proxy config to fix websockets. Add unifi proxy conf.
    • 31.05.18: - Update ssl.conf and proxy.conf for tighter security (thanks @nemchik)
    • 30.05.18: - Add reverse proxy configs for jackett, monitorr, nzbget, nzbhydra, organizr, portainer and transmission (thanks @nemchik)
    • 18.05.18: - Add more info on certs and unraid reverse proxy config
    • 11.05.18: - Add php pgsql support
    • 24.04.18: - Auto generate a private key + fullchain bundle pem that is needed by certain apps
    • 20.04.18: - Add standardized optional reverse proxy conf files
    • 19.04.18: - Bind memcached to localhost only, add php7-sqlite3
    • 08.04.18: - Fix renewal hooks
    • 29.03.18: - Create pfx cert after renewal for dns validation (previous version only created it for http and tls, an oversight)
    • 29.03.18: - Fix staging for v2 api
    • 13.03.18: - Support for wildcard cert with dns validation added. Switched to v2 api for ACME.
    • 21.02.18: - Reduce shellcheck directives by renaming secondary variables
    • 20.02.18: - Sanitize variables, increase log verbosity
    • 01.02.18: - Big changes. VALIDATION parameter added for choosing certbot validation methods, including dns through official plugins. HTTPVAL is deprecated. STAGING parameter added for testing. Backwards compatibility for the short term. Since tls-sni is disabled by letsencrypt, most users will have to change their settings and adopt the new parameters within the next 90 days. Reorganized the nginx default config, split ssl settings into new ssl.conf
    • 13.01.18: - Re-enable ipv6 due to update to fail2ban 0.10.1. Existing users can enable ipv6 by deleting /config/fail2ban/action.d/iptables-common.local and restarting the container after updating the image
    • 11.01.18: - Halt the container if validation fails instead of a stop (so restart=always doesn't get users throttled with Let's Encrypt)
    • 10.01.18: - Add option for http validation on port 80
    • 05.01.18: - Rebase to alpine 3.7
    • 04.11.17: - Add php7 soap module
    • 31.10.17: - Add php7 exif and xmlreader modules
    • 25.09.17: - Manage fail2ban via s6
    • 24.09.17: - Add memcached service
    • 01.09.17: - --privileged is no longer required as long as --cap-add=NET_ADMIN is added, instructions modified accordingly, disabled fail2ban ipv6 actions due to requiring access to host kernel modules
    • 31.08.17: - Add php7-phar
    • 14.07.17: - Enable modules dynamically in nginx.conf
    • 06.07.17: - Add support for multiple domains (thanks @oznu)
    • 22.06.17: - Add various nginx modules and enable all modules in the default nginx.conf
    • 16.06.17: - Update deprecated certbot option for https validation, make e-mail entry optional, update readme
    • 05.06.17: - Add php7-bz2
    • 27.05.17: - Rebase to alpine 3.6.
    • 03.05.17: - Fix log permissions.
    • 18.04.17: - Add php7-sockets, update fail2ban filter and action defaults
    • 27.02.17: - Add php7-dom, php7-iconv and php7-pdo_sqlite
    • 21.02.17: - Add php7-xml
    • 10.02.17: - Switch to alpine 3.5 base and php7, add php zlib module and all nginx modules
    • 13.01.17: - Add php5-ctype and php5-openssl
    • 04.01.17: - Add php5-mysqli and php5-pdo_mysql
    • 22.11.16: - Add gd and mcrypt packages
    • 21.11.16: - Add curl package
    • 07.11.16: - Initial Release
    \ No newline at end of file +

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    • 28.07.20: - Start transition to new name, SWAG.
    • 17.06.20: - Reformat ssl.conf. Pull in pre-generated dhparams.pem from DO Spaces. Deprecate DHLEVEL param.
    • 01.06.20: - Rebasing to alpine 3.12, change ldap login address to /ldaplogin to avoid clashes (existing users need to manually update).
    • 31.05.20: - Tweak Authelia confs (existing users can delete authelia-server.conf and authelia-location.conf, and restart to update).
    • 23.05.20: - Add support for Authelia.
    • 15.05.20: - Remove php7-pecl-imagick due to upstream issues. Add support for Geoip2 auto db retrieval.
    • 10.05.20: - Added support for fail2ban deny statements.
    • 04.05.20: - Allow for optionally setting propagation time for dns plugins. Add repo version of whois to replace the built-in busybox version. Update jail.local to change default fail2ban ban action to more widely supported iptables-allports.
    • 13.04.20: - Update cloudflare.ini with token info.
    • 11.03.20: - Add php7-sodium.
    • 06.03.20: - Implement cert renewal attempt during container start (only if the cert is already expired or will expire within the next 24 hours, otherwise it will be attempted at 2:08am).
    • 05.03.20: - Use port and proto upstream variables for ldap and default sample confs.
    • 24.02.20: - Remove world/group read permissions in dns-conf.
    • 23.02.20: - Add aliyun dns validation plugin.
    • 28.01.20: - Deprecate tls-sni validation method, remove from docs.
    • 27.01.20: - Add support for cpanel dns validation.
    • 10.01.20: - Add support for domeneshop dns validation.
    • 07.01.20: - Update ciphers from Mozilla ssl-config recommendations.
    • 01.01.20: - Add support for gandi dns validation.
    • 31.12.19: - GeoIP2 databases now require personal license keys to download. Auto download is disabled and log message is added.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 19.12.19: - Increase large_client_header_buffers in nginx.conf to prevent 414 errors.
    • 18.12.19: - Add php7-imap and php7-pecl-apcu.
    • 11.12.19: - Fix Google Cloud DNS to use .json file for authentication.
    • 20.11.19: - Fix cryptography version mismatch due to pip issue.
    • 17.11.19: - Add php7-pdo_odbc.
    • 17.11.19: - Add transip dns validation plugin.
    • 27.10.19: - Turn off lua resty core to get rid of error message in the log (existing users will have to delete /config/nginx/nginx.conf and restart the container).
    • 26.10.19: - Add new package for stream-geoip2, remove geoip2 module patch.
    • 24.10.19: - Add php7-pecl-imagick.
    • 23.10.19: - Update Host header in proxy.conf to fix CSRF issues.
    • 12.10.19: - Add linode dns validation plugin.
    • 23.09.19: - Move GeoIP2 db to /config to make it persistent.
    • 14.08.19: - Add inwx dns validation plugin.
    • 06.08.19: - Add php7-ftp.
    • 04.08.19: - Add php7-bcmath, php7-pear, php7-xmlrpc.
    • 02.08.19: - Add php7-ldap, remove geoip v1(deprecated).
    • 01.08.19: - Mark https redirect block as default_server (effective only for new installs).
    • 31.07.19: - Create GeoIP2 databse (libmaxminddb) during container start if it doesn't exist.
    • 30.07.19: - Support main domain via duckdns validation.
    • 29.07.19: - Enable http to https redirect by default (effective only for new installs).
    • 01.07.19: - Patch geoip2 module until upstream is fixed.
    • 30.06.19: - Add geoip2 module.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 19.06.19: - Set resolver to docker dns in ssl.conf.
    • 29.05.19: - Compensate for changes to the reverse-proxy-confs repo.
    • 26.05.19: - Remove botocore/urllib patch.
    • 08.05.19: - Remove default.conf when nginx is upgraded in downstream image.
    • 30.04.19: - Add php-redis.
    • 12.04.19: - Rebase aarch64 image to 3.9.
    • 25.03.19: - Rebase aarch64 image back to 3.8 due to python issues (specifically with fail2ban), switch packages to python 3 on amd64 and armhf, clean up pip/python cache to shrink image size.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 10.03.19: - Add TLSv1.3 to ssl.conf.
    • 02.03.19: - Add php intl and posix modules.
    • 27.02.19: - Add gnupg package.
    • 22.02.19: - Rebase to alpine 3.9.
    • 03.02.19: - Removed memcached due to seccomp errors. Let us know if you need to re-enable memcached.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 21.01.19: - Remove client_body_max from proxy.conf (existing users need to manually update).
    • 09.01.19: - Remove tls v1 and v1.1 from default ssl.conf, update ciphers (existing users need to manually update).
    • 30.12.18: - Fix bundle key generation.
    • 19.12.18: - Add ipv6 and http/2 support to default site config.
    • 08.12.18: - Had to remove cert renewal during container start due to certbot's new undocumented feature of up to 8 minute random delay.
    • 03.12.18: - Fix silly bug resetting the duckdns token.
    • 02.12.18: - Add dns validation support for ovh.
    • 20.11.18: - Externalize reverse proxy confs to separate github repo linuxserver/reverse-proxy-confs, update baseimage packages during build
    • 19.11.18: - Add php opcache package.
    • 12.11.18: - Add support for duckdns wildcard certs via dns validation
    • 31.10.18: - Add various preset proxy confs and fix others (thanks @nemchik and @hijxf)
    • 02.10.18: - Fix fail2ban instructions and logrotate conf
    • 11.09.18: - Add various preset proxy confs and fix others (thanks @nemchik and @LeoVerto)
    • 04.09.18: - Linting fixes.
    • 30.08.18: - Add support for ldap auth, add proxy confs for bazarr, couchpotato, headphones, lidarr and plex subfolder (thanks @nemchik and @jedahan)
    • 21.08.18: - Rebase to alpine 3.8, add info on search engine de-listing
    • 08.08.18: - Add subdomain proxy conf for plex, update emby proxy confs
    • 25.07.18: - Add subdomain proxy conf for syncthing
    • 23.07.18: - Remove backwards compatibility and set default validation method to http. Update portainer proxy config to fix websockets. Add unifi proxy conf.
    • 31.05.18: - Update ssl.conf and proxy.conf for tighter security (thanks @nemchik)
    • 30.05.18: - Add reverse proxy configs for jackett, monitorr, nzbget, nzbhydra, organizr, portainer and transmission (thanks @nemchik)
    • 18.05.18: - Add more info on certs and unraid reverse proxy config
    • 11.05.18: - Add php pgsql support
    • 24.04.18: - Auto generate a private key + fullchain bundle pem that is needed by certain apps
    • 20.04.18: - Add standardized optional reverse proxy conf files
    • 19.04.18: - Bind memcached to localhost only, add php7-sqlite3
    • 08.04.18: - Fix renewal hooks
    • 29.03.18: - Create pfx cert after renewal for dns validation (previous version only created it for http and tls, an oversight)
    • 29.03.18: - Fix staging for v2 api
    • 13.03.18: - Support for wildcard cert with dns validation added. Switched to v2 api for ACME.
    • 21.02.18: - Reduce shellcheck directives by renaming secondary variables
    • 20.02.18: - Sanitize variables, increase log verbosity
    • 01.02.18: - Big changes. VALIDATION parameter added for choosing certbot validation methods, including dns through official plugins. HTTPVAL is deprecated. STAGING parameter added for testing. Backwards compatibility for the short term. Since tls-sni is disabled by letsencrypt, most users will have to change their settings and adopt the new parameters within the next 90 days. Reorganized the nginx default config, split ssl settings into new ssl.conf
    • 13.01.18: - Re-enable ipv6 due to update to fail2ban 0.10.1. Existing users can enable ipv6 by deleting /config/fail2ban/action.d/iptables-common.local and restarting the container after updating the image
    • 11.01.18: - Halt the container if validation fails instead of a stop (so restart=always doesn't get users throttled with Let's Encrypt)
    • 10.01.18: - Add option for http validation on port 80
    • 05.01.18: - Rebase to alpine 3.7
    • 04.11.17: - Add php7 soap module
    • 31.10.17: - Add php7 exif and xmlreader modules
    • 25.09.17: - Manage fail2ban via s6
    • 24.09.17: - Add memcached service
    • 01.09.17: - --privileged is no longer required as long as --cap-add=NET_ADMIN is added, instructions modified accordingly, disabled fail2ban ipv6 actions due to requiring access to host kernel modules
    • 31.08.17: - Add php7-phar
    • 14.07.17: - Enable modules dynamically in nginx.conf
    • 06.07.17: - Add support for multiple domains (thanks @oznu)
    • 22.06.17: - Add various nginx modules and enable all modules in the default nginx.conf
    • 16.06.17: - Update deprecated certbot option for https validation, make e-mail entry optional, update readme
    • 05.06.17: - Add php7-bz2
    • 27.05.17: - Rebase to alpine 3.6.
    • 03.05.17: - Fix log permissions.
    • 18.04.17: - Add php7-sockets, update fail2ban filter and action defaults
    • 27.02.17: - Add php7-dom, php7-iconv and php7-pdo_sqlite
    • 21.02.17: - Add php7-xml
    • 10.02.17: - Switch to alpine 3.5 base and php7, add php zlib module and all nginx modules
    • 13.01.17: - Add php5-ctype and php5-openssl
    • 04.01.17: - Add php5-mysqli and php5-pdo_mysql
    • 22.11.16: - Add gd and mcrypt packages
    • 21.11.16: - Add curl package
    • 07.11.16: - Initial Release
    \ No newline at end of file diff --git a/images/docker-libreoffice/index.html b/images/docker-libreoffice/index.html index 145c405ef3..96cdf617cf 100644 --- a/images/docker-libreoffice/index.html +++ b/images/docker-libreoffice/index.html @@ -1,4 +1,4 @@ - libreoffice - LinuxServer.io

    linuxserver/libreoffice

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    LibreOffice is a free and powerful office suite, and a successor to OpenOffice.org (commonly known as OpenOffice). Its clean interface and feature-rich tools help you unleash your creativity and enhance your productivity.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/libreoffice:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + libreoffice - LinuxServer.io       

    linuxserver/libreoffice

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    LibreOffice is a free and powerful office suite, and a successor to OpenOffice.org (commonly known as OpenOffice). Its clean interface and feature-rich tools help you unleash your creativity and enhance your productivity.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/libreoffice:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       libreoffice:
    @@ -28,4 +28,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 LibreOffice desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores program settings and documents

    Miscellaneous Options

    Parameter Function
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function on older hosts as syscalls are unknown to Docker.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it libreoffice /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f libreoffice
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' libreoffice
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/libreoffice:latest

    Versions

    • 21.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 23.12.21: - Rebase to Alpine 3.15.
    • 26.09.21: - Rebase to Alpine 3.14.
    • 05.04.21: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it libreoffice /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f libreoffice
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' libreoffice
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/libreoffice:latest

    Versions

    • 21.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 23.12.21: - Rebase to Alpine 3.15.
    • 26.09.21: - Rebase to Alpine 3.14.
    • 05.04.21: - Initial release.
    \ No newline at end of file diff --git a/images/docker-libresonic/index.html b/images/docker-libresonic/index.html index 54538b13e9..f9de7b2fdc 100644 --- a/images/docker-libresonic/index.html +++ b/images/docker-libresonic/index.html @@ -1,4 +1,4 @@ - linuxserver/libresonic - LinuxServer.io

    linuxserver/libresonic

    Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED. PLEASE USE AIRSONIC linuxserver/airsonic Libresonic is a free, web-based media streamer, providing ubiqutious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/libresonic should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
    + linuxserver/libresonic - LinuxServer.io       

    linuxserver/libresonic

    Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED. PLEASE USE AIRSONIC linuxserver/airsonic Libresonic is a free, web-based media streamer, providing ubiqutious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/libresonic should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
       --name=libresonic \
       -e PUID=1000 \
       -e PGID=1000 \
    @@ -35,4 +35,4 @@ services:
         restart: unless-stopped
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    4040 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    CONTEXT_PATH=<URL_BASE> For setting url-base in reverse proxy setups.

    Volume Mappings (-v)

    Volume Function
    /config Configuration file location.
    /music Location of music.
    /playlists Location for playlists to be saved to.
    /podcasts Location of podcasts.
    /media Location of other media.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    Access WebUI at <your-ip>:4040.

    Default user/pass is admin/admin

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it libresonic /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f libresonic
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' libresonic
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/libresonic

    Versions

    • 24.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 15.01.19: - Pull war from github, adding pipeline multi arch builds.
    • 05.01.19: - Linting fixes.
    • 27.08.18: - Rebase to ubuntu bionic.
    • 12.12.17: - Rebase to alpine 3.7.
    • 11.07.17: - Rebase to alpine 3.6.
    • 12.05.17: - Add annotation timeout (primarily for armhf and lower powered hosts).
    • 08.02.17: - Rebase to alpine 3.5.
    • 04.12.16: - Update jetty runner version.
    • 29.11.16: - Switch to building from release tags following v6.1 stable release.
    • 17.11.16: - Initial Release.
    \ No newline at end of file +

    Application Setup

    Access WebUI at <your-ip>:4040.

    Default user/pass is admin/admin

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it libresonic /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f libresonic
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' libresonic
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/libresonic

    Versions

    • 24.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 15.01.19: - Pull war from github, adding pipeline multi arch builds.
    • 05.01.19: - Linting fixes.
    • 27.08.18: - Rebase to ubuntu bionic.
    • 12.12.17: - Rebase to alpine 3.7.
    • 11.07.17: - Rebase to alpine 3.6.
    • 12.05.17: - Add annotation timeout (primarily for armhf and lower powered hosts).
    • 08.02.17: - Rebase to alpine 3.5.
    • 04.12.16: - Update jetty runner version.
    • 29.11.16: - Switch to building from release tags following v6.1 stable release.
    • 17.11.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-librespeed/index.html b/images/docker-librespeed/index.html index 95354b3641..adbcff5c04 100644 --- a/images/docker-librespeed/index.html +++ b/images/docker-librespeed/index.html @@ -1,4 +1,4 @@ - librespeed - LinuxServer.io

    linuxserver/librespeed

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Librespeed is a very lightweight Speedtest implemented in Javascript, using XMLHttpRequest and Web Workers. No Flash, No Java, No Websocket, No Bullshit.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/librespeed:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the speedtest webui at http://SERVERIP. The results database can be accessed at http://SERVERIP/results/stats.php with the password set.
    The default template used is based on example-singleServer-full.html. However, all templates are provided for reference at /config/www/. Feel free to customize /config/www/index.html as you like. Delete the file and restart to go back to the image default.

    You can optionally place customized speedtest.js and speedtest_worker.js files under /config/www and they will supersede the defaults after a container start. Keep in mind that once you do so, they will no longer be updated. You can delete them and recreate the container to go back to the image defaults.

    If you are setting up a mysql or postgresql database, you first need to import the tables into your database as described at the following link
    https://github.com/librespeed/speedtest/blob/master/doc.md#creating-the-database

    To enable a custom results page set the environment variable CUSTOM_RESULTS=true and start (or restart) the container at least once for /config/www/results/index.php to be created and modify this file to your liking.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + librespeed - LinuxServer.io       

    linuxserver/librespeed

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Librespeed is a very lightweight Speedtest implemented in Javascript, using XMLHttpRequest and Web Workers. No Flash, No Java, No Websocket, No Bullshit.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/librespeed:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the speedtest webui at http://SERVERIP. The results database can be accessed at http://SERVERIP/results/stats.php with the password set.
    The default template used is based on example-singleServer-full.html. However, all templates are provided for reference at /config/www/. Feel free to customize /config/www/index.html as you like. Delete the file and restart to go back to the image default.

    You can optionally place customized speedtest.js and speedtest_worker.js files under /config/www and they will supersede the defaults after a container start. Keep in mind that once you do so, they will no longer be updated. You can delete them and recreate the container to go back to the image defaults.

    If you are setting up a mysql or postgresql database, you first need to import the tables into your database as described at the following link
    https://github.com/librespeed/speedtest/blob/master/doc.md#creating-the-database

    To enable a custom results page set the environment variable CUSTOM_RESULTS=true and start (or restart) the container at least once for /config/www/results/index.php to be created and modify this file to your liking.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       librespeed:
    @@ -41,4 +41,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 web gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    PASSWORD=PASSWORD Set the password for the results database.
    CUSTOM_RESULTS=false (optional) set to true to enable custom results page in /config/www/results/index.php.
    DB_TYPE=sqlite Defaults to sqlite, can also be set to mysql or postgresql.
    DB_NAME=DB_NAME Database name. Required for mysql and pgsql.
    DB_HOSTNAME=DB_HOSTNAME Database address. Required for mysql and pgsql.
    DB_USERNAME=DB_USERNAME Database username. Required for mysql and pgsql.
    DB_PASSWORD=DB_PASSWORD Database password. Required for mysql and pgsql.
    DB_PORT=DB_PORT Database port. Required for mysql.

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it librespeed /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f librespeed
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' librespeed
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/librespeed:latest

    Versions

    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 01.03.21: - Fix up database settings. Make sure index.html is recreated.
    • 28.02.21: - Added php7-ctype.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 29.04.20: - Add donation links for LibreSpeed to Github sponsor button and container log.
    • 09.01.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it librespeed /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f librespeed
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' librespeed
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/librespeed:latest

    Versions

    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 01.03.21: - Fix up database settings. Make sure index.html is recreated.
    • 28.02.21: - Added php7-ctype.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 29.04.20: - Add donation links for LibreSpeed to Github sponsor button and container log.
    • 09.01.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-lidarr/index.html b/images/docker-lidarr/index.html index bd65a026fa..b65e66d806 100644 --- a/images/docker-lidarr/index.html +++ b/images/docker-lidarr/index.html @@ -1,4 +1,4 @@ - lidarr - LinuxServer.io

    linuxserver/lidarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/lidarr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Lidarr releases.
    develop Develop Lidarr Releases.
    nightly Nightly Lidarr Releases.

    Application Setup

    Access the webui at <your-ip>:8686, for more information check out Lidarr.

    Special Note: Following our current folder structure will result in an inability to hardlink from your downloads to your Music folder because they are on seperate volumes. To support hardlinking, simply ensure that the Music and downloads data are on a single volume. For example, if you have /mnt/storage/Music and /mnt/storage/downloads/completed/Music, you would want something like /mnt/storage:/media for your volume. Then you can hardlink from /media/downloads/completed to /media/Music.

    Another item to keep in mind, is that within lidarr itself, you should then map your download client folder to your lidarr folder: Settings -> Download Client -> advanced -> remote path mappings. I input the host of my download client (matches the download client defined) remote path is /downloads/Music (relative to the internal container path) and local path is /media/downloads/completed/Music, assuming you have folders to seperate your downloaded data types.

    Media folders

    We have set /music and /downloads as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + lidarr - LinuxServer.io       

    linuxserver/lidarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/lidarr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Lidarr releases.
    develop Develop Lidarr Releases.
    nightly Nightly Lidarr Releases.

    Application Setup

    Access the webui at <your-ip>:8686, for more information check out Lidarr.

    Special Note: Following our current folder structure will result in an inability to hardlink from your downloads to your Music folder because they are on seperate volumes. To support hardlinking, simply ensure that the Music and downloads data are on a single volume. For example, if you have /mnt/storage/Music and /mnt/storage/downloads/completed/Music, you would want something like /mnt/storage:/media for your volume. Then you can hardlink from /media/downloads/completed to /media/Music.

    Another item to keep in mind, is that within lidarr itself, you should then map your download client folder to your lidarr folder: Settings -> Download Client -> advanced -> remote path mappings. I input the host of my download client (matches the download client defined) remote path is /downloads/Music (relative to the internal container path) and local path is /media/downloads/completed/Music, assuming you have folders to seperate your downloaded data types.

    Media folders

    We have set /music and /downloads as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       lidarr:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8686 Application WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files for Lidarr.
    /music Music files (See note in Application setup).
    /downloads Path to your download folder for music (See note in Application setup).

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it lidarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f lidarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lidarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/lidarr:latest

    Versions

    • 06.06.22: - Rebase master branch to Alpine 3.15.
    • 06.05.22: - Rebase master branch to Focal.
    • 06.05.22: - Rebase develop branch to Alpine.
    • 04.02.22: - Rebase nightly branch to Alpine, deprecate nightly-alpine branch.
    • 30.12.21: - Add nightly-alpine branch.
    • 01.08.21: - Add libchromaprint-tools.
    • 11.07.21: - Make the paths clearer to the user.
    • 18.04.21: - Switch latest tag to net core.
    • 25.01.21: - Publish develop tag.
    • 20.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 18.04.20: - Removed /downloads and /music volumes from Dockerfiles.
    • 05.04.20: - Move app to /app.
    • 01.08.19: - Rebase to Linuxserver LTS mono version.
    • 13.06.19: - Add env variable for setting umask.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 08.03.19: - Rebase to Bionic, use proposed endpoint for libchromaprint.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 22.04.18: - Switch to beta builds.
    • 17.03.18: - Add ENV XDG_CONFIG_HOME="/config/xdg" to Dockerfile for signalr fix.
    • 27.02.18: - Use json to query for new version.
    • 23.02.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it lidarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f lidarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lidarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/lidarr:latest

    Versions

    • 06.06.22: - Rebase master branch to Alpine 3.15.
    • 06.05.22: - Rebase master branch to Focal.
    • 06.05.22: - Rebase develop branch to Alpine.
    • 04.02.22: - Rebase nightly branch to Alpine, deprecate nightly-alpine branch.
    • 30.12.21: - Add nightly-alpine branch.
    • 01.08.21: - Add libchromaprint-tools.
    • 11.07.21: - Make the paths clearer to the user.
    • 18.04.21: - Switch latest tag to net core.
    • 25.01.21: - Publish develop tag.
    • 20.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 18.04.20: - Removed /downloads and /music volumes from Dockerfiles.
    • 05.04.20: - Move app to /app.
    • 01.08.19: - Rebase to Linuxserver LTS mono version.
    • 13.06.19: - Add env variable for setting umask.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 08.03.19: - Rebase to Bionic, use proposed endpoint for libchromaprint.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 22.04.18: - Switch to beta builds.
    • 17.03.18: - Add ENV XDG_CONFIG_HOME="/config/xdg" to Dockerfile for signalr fix.
    • 27.02.18: - Use json to query for new version.
    • 23.02.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-limnoria/index.html b/images/docker-limnoria/index.html index 0b0517c670..fe4cd90ac7 100644 --- a/images/docker-limnoria/index.html +++ b/images/docker-limnoria/index.html @@ -1,4 +1,4 @@ - limnoria - LinuxServer.io

    linuxserver/limnoria

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Limnoria A robust, full-featured, and user/programmer-friendly Python IRC bot, with many existing plugins. Successor of the well-known Supybot.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/limnoria:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    New Configuration

    If you do not have an existing config you will need to start the container and then run the following wizard command:

    docker exec -it -w /config -u abc limnoria limnoria-wizard

    Existing Configuration

    If you have an existing config, adjust the directory settings in your conf file as follows:

    supybot.directories.backup: /config/backup
    + limnoria - LinuxServer.io       

    linuxserver/limnoria

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Limnoria A robust, full-featured, and user/programmer-friendly Python IRC bot, with many existing plugins. Successor of the well-known Supybot.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/limnoria:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    New Configuration

    If you do not have an existing config you will need to start the container and then run the following wizard command:

    docker exec -it -w /config -u abc limnoria limnoria-wizard

    Existing Configuration

    If you have an existing config, adjust the directory settings in your conf file as follows:

    supybot.directories.backup: /config/backup
     supybot.directories.conf: /config/conf
     supybot.directories.data: /config/data
     supybot.directories.data.tmp: /config/data/tmp
    @@ -32,4 +32,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 Port for Limnoria's web interface.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where Limnoria config is stored.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it limnoria /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f limnoria
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' limnoria
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/limnoria:latest

    Versions

    • 19.09.22: - Rebase to alpine 3.15.
    • 25.05.21: - Install plugin requirements on container init.
    • 17.05.21: - Add linuxserver wheel index.
    • 13.02.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 13.01.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it limnoria /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f limnoria
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' limnoria
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/limnoria:latest

    Versions

    • 19.09.22: - Rebase to alpine 3.15.
    • 25.05.21: - Install plugin requirements on container init.
    • 17.05.21: - Add linuxserver wheel index.
    • 13.02.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 13.01.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-lychee/index.html b/images/docker-lychee/index.html index 95932ff99c..71e8bb57ec 100644 --- a/images/docker-lychee/index.html +++ b/images/docker-lychee/index.html @@ -1,4 +1,4 @@ - lychee - LinuxServer.io

    linuxserver/lychee

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely."

    UPGRADE WARNING

    Please note that the v4 upgrade process resets ALL password-protected albums. Any albums that were made public with a password will need to be re-secured.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/lychee:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This image will not work with a prefilled /pictures mount, lychee wants total control over this folder

    Setup mysql/mariadb and account via the webui, accessible at http://SERVERIP:PORT More info at lychee.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    version: "3"
    + lychee - LinuxServer.io       

    linuxserver/lychee

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely."

    UPGRADE WARNING

    Please note that the v4 upgrade process resets ALL password-protected albums. Any albums that were made public with a password will need to be re-secured.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/lychee:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This image will not work with a prefilled /pictures mount, lychee wants total control over this folder

    Setup mysql/mariadb and account via the webui, accessible at http://SERVERIP:PORT More info at lychee.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    version: "3"
     services:
       mariadb:
         image: lscr.io/linuxserver/mariadb:latest
    @@ -52,4 +52,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 http gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    DB_HOST=mariadb for specifying the database host
    DB_USERNAME=lychee for specifying the database user
    DB_PASSWORD=dbpassword for specifying the database password
    DB_DATABASE=lychee for specifying the database to be used

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.
    /pictures Where lychee will store uploaded data.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it lychee /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f lychee
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lychee
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/lychee:latest

    Versions

    • 04.12.21: - Rebase to alpine 3.15 with php8.
    • 13.05.21: - Make readme clearer.
    • 18.04.21: - Add php-intl for v4.3.
    • 31.01.21: - Add jpegoptim.
    • 15.01.21: - Rebase to alpine 3.13, add php7-ctype.
    • 10.07.20: - Upgrade to Lychee v4 and rebased to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 23.10.19: - Increase fastcgi timeouts (existing users need to manually update).
    • 19.09.19: - Update project website url.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 05.05.19: - Rebase to alpine 3.9, use new armv7 image format.
    • 21.01.18: - Added ffmpeg for video thumbnail creation, switched to installing zip release instead of source tarball, created small thumbnails folder, switched to dynamic readme.
    • 14.01.19: - Adding pipeline logic and multi arch..
    • 04.09.18: - Rebase to alpine 3.8, switch to LycheeOrg repository.
    • 08.01.18: - Rebase to alpine 3.7.
    • 25.05.17: - Rebase to alpine 3.6.
    • 03.05.17: - Use repo pinning to better solve dependencies, use repo version of php7-imagick.
    • 12.02.17: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it lychee /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f lychee
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lychee
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/lychee:latest

    Versions

    • 04.12.21: - Rebase to alpine 3.15 with php8.
    • 13.05.21: - Make readme clearer.
    • 18.04.21: - Add php-intl for v4.3.
    • 31.01.21: - Add jpegoptim.
    • 15.01.21: - Rebase to alpine 3.13, add php7-ctype.
    • 10.07.20: - Upgrade to Lychee v4 and rebased to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 23.10.19: - Increase fastcgi timeouts (existing users need to manually update).
    • 19.09.19: - Update project website url.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 05.05.19: - Rebase to alpine 3.9, use new armv7 image format.
    • 21.01.18: - Added ffmpeg for video thumbnail creation, switched to installing zip release instead of source tarball, created small thumbnails folder, switched to dynamic readme.
    • 14.01.19: - Adding pipeline logic and multi arch..
    • 04.09.18: - Rebase to alpine 3.8, switch to LycheeOrg repository.
    • 08.01.18: - Rebase to alpine 3.7.
    • 25.05.17: - Rebase to alpine 3.6.
    • 03.05.17: - Use repo pinning to better solve dependencies, use repo version of php7-imagick.
    • 12.02.17: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-mariadb/index.html b/images/docker-mariadb/index.html index bea6925d6c..8804ec5aac 100644 --- a/images/docker-mariadb/index.html +++ b/images/docker-mariadb/index.html @@ -1,4 +1,4 @@ - mariadb - LinuxServer.io

    linuxserver/mariadb

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Mariadb is one of the most popular database servers. Made by the original developers of MySQL.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mariadb:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    If you didn't set a password during installation, (see logs for warning) use mysqladmin -u root password <PASSWORD> to set one at the docker prompt...

    NOTE changing the MYSQL_ROOT_PASSWORD variable after the container has set up the initial databases has no effect, use the mysqladmin tool to change your mariadb password.

    NOTE if you want to use (MYSQL_DATABASE MYSQL_USER MYSQL_PASSWORD) all three of these variables need to be set you cannot pick and choose.

    Unraid users, it is advisable to edit the template/webui after setup and remove reference to this variable.

    Find custom.cnf in /config for config changes (restart container for them to take effect) , the databases in /config/databases and the log in /config/log/myqsl

    Loading passwords and users from files

    The MYSQL_ROOT_PASSWORD MYSQL_DATABASE MYSQL_USER MYSQL_PASSWORD REMOTE_SQL env values can be set in a file:

    /config/env
    + mariadb - LinuxServer.io       

    linuxserver/mariadb

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Mariadb is one of the most popular database servers. Made by the original developers of MySQL.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mariadb:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    If you didn't set a password during installation, (see logs for warning) use mysqladmin -u root password <PASSWORD> to set one at the docker prompt...

    NOTE changing the MYSQL_ROOT_PASSWORD variable after the container has set up the initial databases has no effect, use the mysqladmin tool to change your mariadb password.

    NOTE if you want to use (MYSQL_DATABASE MYSQL_USER MYSQL_PASSWORD) all three of these variables need to be set you cannot pick and choose.

    Unraid users, it is advisable to edit the template/webui after setup and remove reference to this variable.

    Find custom.cnf in /config for config changes (restart container for them to take effect) , the databases in /config/databases and the log in /config/log/myqsl

    Loading passwords and users from files

    The MYSQL_ROOT_PASSWORD MYSQL_DATABASE MYSQL_USER MYSQL_PASSWORD REMOTE_SQL env values can be set in a file:

    /config/env
     

    Using the following format:

    MYSQL_ROOT_PASSWORD="ROOT_ACCESS_PASSWORD"
     MYSQL_DATABASE="USER_DB_NAME"
     MYSQL_USER="MYSQL_USER"
    @@ -42,4 +42,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3306 Mariadb listens on this port.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    MYSQL_ROOT_PASSWORD=ROOT_ACCESS_PASSWORD Set this to root password for installation (minimum 4 characters & non-alphanumeric passwords must be properly escaped).
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    MYSQL_DATABASE=USER_DB_NAME Specify the name of a database to be created on image startup.
    MYSQL_USER=MYSQL_USER This user will have superuser access to the database specified by MYSQL_DATABASE (do not use root here).
    MYSQL_PASSWORD=DATABASE_PASSWORD Set this to the password you want to use for you MYSQL_USER (minimum 4 characters & non-alphanumeric passwords must be properly escaped).
    REMOTE_SQL=http://URL1/your.sql,https://URL2/your.sql Set this to ingest sql files from an http/https endpoint (comma seperated array).

    Volume Mappings (-v)

    Volume Function
    /config Contains the db itself and all assorted settings.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mariadb /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mariadb
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mariadb
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mariadb:latest

    Versions

    • 11.10.22: - Rebase master to Alpine 3.16, migrate to s6v3, remove password escape logic which caused problems for a small subset of users.
    • 06.07.21: - Rebase master to alpine.
    • 03.07.21: - Rebase to 3.14.
    • 08.02.21: - Fix new installs.
    • 08.02.21: - Rebase to alpine. Add mariadb-backup.
    • 08.02.21: - Release alpine tag. The alpine release will replace the latest tag in the near future.
    • 27.10.19: - Bump to 10.4, ability use custom sql on initial init ,defining root passwords via file.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 07.03.19: - Add ability to setup a database and default user on first spinup.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 10.09.18: - Rebase to ubuntu bionic and use 10.3 mariadb repository.
    • 09.12.17: - Fix continuation lines.
    • 12.09.17: - Gracefully shut down mariadb.
    • 27.10.16: - Implement linting suggestions on database init script.
    • 11.10.16: - Rebase to ubuntu xenial, add version labelling.
    • 09.03.16: - Update to mariadb 10.1. Change to use custom.cnf over my.cnf in /config. Restructured init files to change config options on startup, rather than in the dockerfile.
    • 26.01.16: - Change user of mysqld_safe script to abc, better unclean shutdown handling on restart.
    • 23.12.15: - Remove autoupdating, between some version updates the container breaks.
    • 12.08.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mariadb /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mariadb
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mariadb
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mariadb:latest

    Versions

    • 11.10.22: - Rebase master to Alpine 3.16, migrate to s6v3, remove password escape logic which caused problems for a small subset of users.
    • 06.07.21: - Rebase master to alpine.
    • 03.07.21: - Rebase to 3.14.
    • 08.02.21: - Fix new installs.
    • 08.02.21: - Rebase to alpine. Add mariadb-backup.
    • 08.02.21: - Release alpine tag. The alpine release will replace the latest tag in the near future.
    • 27.10.19: - Bump to 10.4, ability use custom sql on initial init ,defining root passwords via file.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 07.03.19: - Add ability to setup a database and default user on first spinup.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 10.09.18: - Rebase to ubuntu bionic and use 10.3 mariadb repository.
    • 09.12.17: - Fix continuation lines.
    • 12.09.17: - Gracefully shut down mariadb.
    • 27.10.16: - Implement linting suggestions on database init script.
    • 11.10.16: - Rebase to ubuntu xenial, add version labelling.
    • 09.03.16: - Update to mariadb 10.1. Change to use custom.cnf over my.cnf in /config. Restructured init files to change config options on startup, rather than in the dockerfile.
    • 26.01.16: - Change user of mysqld_safe script to abc, better unclean shutdown handling on restart.
    • 23.12.15: - Remove autoupdating, between some version updates the container breaks.
    • 12.08.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-mastodon/index.html b/images/docker-mastodon/index.html index 813526ae01..267568941f 100644 --- a/images/docker-mastodon/index.html +++ b/images/docker-mastodon/index.html @@ -1,4 +1,4 @@ - mastodon - LinuxServer.io

    linuxserver/mastodon

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    Mastodon is a free, open-source social network server based on ActivityPub where users can follow friends and discover new ones..

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mastodon:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases.
    develop Pre-releases only.

    Application Setup

    To generate keys for SECRET_KEY_BASE & OTP_SECRET run docker run --rm -it -w /app/www --entrypoint rake lscr.io/linuxserver/mastodon secret once for each.

    To generate keys for VAPID_PRIVATE_KEY & VAPID_PUBLIC_KEY run docker run --rm -it -w /app/www --entrypoint rake lscr.io/linuxserver/mastodon mastodon:webpush:generate_vapid_key

    To use tootctl you can run something like docker exec -it -w /app/www mastodon bin/tootctl <command>

    This container requires separate postgres and redis instances to run.

    We support all of the official environment variables for configuration. In place of adding them all to your run/compose you can use an env file such as this example from the upstream project.

    For more information check out the mastodon documentation.

    Strict reverse proxies

    This image automatically redirects to https with a self-signed certificate. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + mastodon - LinuxServer.io       

    linuxserver/mastodon

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    Mastodon is a free, open-source social network server based on ActivityPub where users can follow friends and discover new ones..

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mastodon:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases.
    develop Pre-releases only.

    Application Setup

    To generate keys for SECRET_KEY_BASE & OTP_SECRET run docker run --rm -it -w /app/www --entrypoint rake lscr.io/linuxserver/mastodon secret once for each.

    To generate keys for VAPID_PRIVATE_KEY & VAPID_PUBLIC_KEY run docker run --rm -it -w /app/www --entrypoint rake lscr.io/linuxserver/mastodon mastodon:webpush:generate_vapid_key

    To use tootctl you can run something like docker exec -it -w /app/www mastodon bin/tootctl <command>

    This container requires separate postgres and redis instances to run.

    We support all of the official environment variables for configuration. In place of adding them all to your run/compose you can use an env file such as this example from the upstream project.

    For more information check out the mastodon documentation.

    Strict reverse proxies

    This image automatically redirects to https with a self-signed certificate. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       mastodon:
    @@ -83,4 +83,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 Port for web frontend
    443 Port for web frontend

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York
    LOCAL_DOMAIN=example.com This is the unique identifier of your server in the network. It cannot be safely changed later.
    REDIS_HOST=redis Redis server hostname
    REDIS_PORT=6379 Redis port
    DB_HOST=db Postgres database hostname
    DB_USER=mastodon Postgres username
    DB_NAME=mastodon Postgres db name
    DB_PASS=mastodon Postgres password
    DB_PORT=5432 Portgres port
    ES_ENABLED=false Enable or disable Elasticsearch (requires a separate ES instance)
    SECRET_KEY_BASE= Browser session secret. Changing it will break all active browser sessions.
    OTP_SECRET= MFA secret. Changing it will break two-factor authentication.
    VAPID_PRIVATE_KEY= Push notification private key. Changing it will break push notifications.
    VAPID_PUBLIC_KEY= Push notification public key. Changing it will break push notifications.
    SMTP_SERVER=mail.example.com SMTP server for email notifications
    SMTP_PORT=25 SMTP server port
    SMTP_LOGIN= SMTP username
    SMTP_PASSWORD= SMTP password
    SMTP_FROM_ADDRESS=notifications@example.com From address for emails send from Mastodon
    S3_ENABLED=false Enable or disable S3 storage of uploaded files
    WEB_DOMAIN=mastodon.example.com This can be set if you want your server identifier to be different to the subdomain hosting Mastodon. See https://docs.joinmastodon.org/admin/config/#basic
    ES_HOST=es Elasticsearch server hostname
    ES_PORT=9200 Elasticsearch port
    ES_USER=elastic Elasticsearch username
    ES_PASS=elastic Elasticsearch password
    S3_BUCKET= S3 bucket hostname
    AWS_ACCESS_KEY_ID= S3 bucket access key ID
    AWS_SECRET_ACCESS_KEY= S3 bucket secret access key
    S3_ALIAS_HOST= Alternate hostname for object fetching if you are front the S3 connections.

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mastodon /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mastodon
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mastodon
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mastodon:latest

    Versions

    • 05.11.22: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mastodon /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mastodon
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mastodon
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mastodon:latest

    Versions

    • 05.11.22: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-medusa/index.html b/images/docker-medusa/index.html index 11377705df..2a0124210d 100644 --- a/images/docker-medusa/index.html +++ b/images/docker-medusa/index.html @@ -1,4 +1,4 @@ - medusa - LinuxServer.io

    linuxserver/medusa

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/medusa:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Web interface is at <your ip>:8081.

    Set paths for downloads, tv-shows to match docker mappings via the webui, for more information check out Medusa.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + medusa - LinuxServer.io       

    linuxserver/medusa

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/medusa:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Web interface is at <your ip>:8081.

    Set paths for downloads, tv-shows to match docker mappings via the webui, for more information check out Medusa.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       medusa:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8081 The port for the Medusa webui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use e.g. Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Medusa config
    /downloads Download location
    /tv TV Shows location

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it medusa /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f medusa
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' medusa
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/medusa:latest

    Versions

    • 12.09.22: - Install ffmpeg for postprocessing.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 28.02.22: - Install python3 requirements for app.
    • 19.01.22: - Rebasing to alpine 3.15.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 22.09.19: - Switch to python3.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 14.01.19: - Adding multi arch and pipeline logic
    • 16.08.18: - Rebase to alpine 3.8
    • 08.12.17: - Rebase to alpine 3.7
    • 29.11.17: - Add py-gdbm for subtitles support
    • 26.10.17: - Mediainfo moved from testing to community repo
    • 10.10.17: - Use repo version of mediainfo to shorten build time
    • 05.08.17: - Internal git pull instead of at runtime
    • 25.05.17: - Rebase to alpine 3.6
    • 07.02.17: - Rebase to alpine 3.5
    • 02.01.17: - Initial Release
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it medusa /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f medusa
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' medusa
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/medusa:latest

    Versions

    • 12.09.22: - Install ffmpeg for postprocessing.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 28.02.22: - Install python3 requirements for app.
    • 19.01.22: - Rebasing to alpine 3.15.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 22.09.19: - Switch to python3.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 14.01.19: - Adding multi arch and pipeline logic
    • 16.08.18: - Rebase to alpine 3.8
    • 08.12.17: - Rebase to alpine 3.7
    • 29.11.17: - Add py-gdbm for subtitles support
    • 26.10.17: - Mediainfo moved from testing to community repo
    • 10.10.17: - Use repo version of mediainfo to shorten build time
    • 05.08.17: - Internal git pull instead of at runtime
    • 25.05.17: - Rebase to alpine 3.6
    • 07.02.17: - Rebase to alpine 3.5
    • 02.01.17: - Initial Release
    \ No newline at end of file diff --git a/images/docker-minetest/index.html b/images/docker-minetest/index.html index 4f498d69ca..40b0a6c41d 100644 --- a/images/docker-minetest/index.html +++ b/images/docker-minetest/index.html @@ -1,4 +1,4 @@ - minetest - LinuxServer.io

    linuxserver/minetest

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Minetest (server) is a near-infinite-world block sandbox game and a game engine, inspired by InfiniMiner, Minecraft, and the like.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/minetest:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    You can find the world maps, mods folder and config files in /config/.minetest.

    If you want to override the advertised port, ensure you add --port in your CLI_ARGS AND ensure the internal port reflects the change, ie; if you set your advertised port to 40000 with --port 40000 then your ports declaration should be 40000:40000/udp

    Client and server must be the same version, please browse the tags here to pull the appropriate version for your server:

    https://hub.docker.com/r/linuxserver/minetest/tags

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + minetest - LinuxServer.io       

    linuxserver/minetest

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Minetest (server) is a near-infinite-world block sandbox game and a game engine, inspired by InfiniMiner, Minecraft, and the like.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/minetest:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    You can find the world maps, mods folder and config files in /config/.minetest.

    If you want to override the advertised port, ensure you add --port in your CLI_ARGS AND ensure the internal port reflects the change, ie; if you set your advertised port to 40000 with --port 40000 then your ports declaration should be 40000:40000/udp

    Client and server must be the same version, please browse the tags here to pull the appropriate version for your server:

    https://hub.docker.com/r/linuxserver/minetest/tags

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       minetest:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    30000/udp Port Minetest listens on.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    CLI_ARGS="--gameid minetest --port 30000" Optionally specify any CLI variables you want to launch the app with

    Volume Mappings (-v)

    Volume Function
    /config/.minetest Where minetest stores config files and maps etc.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it minetest /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f minetest
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' minetest
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/minetest:latest

    Versions

    • 06.08.22: - Update irrlicht deps.
    • 02.05.22: - Allow specifying the advertised port.
    • 17.03.22: - Install forked irrlicht, add zstd.
    • 19.01.22: - Rebasing to alpine 3.15.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 12.07.19: - Bugfix to support multiple CLI variables.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 03.06.19: - Adding custom cli vars to options.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 04.03.19: - Rebase to alpine 3.9 to compile 5.0.0 minetest with new build args.
    • 14.01.19: - Add pipeline logic and multi arch.
    • 08.08.18: - Rebase to alpine 3.8, build from latest release tag instead of master.
    • 03.01.18: - Deprecate cpu_core routine lack of scaling.
    • 08.12.17: - Rebase to alpine 3.7.
    • 30.11.17: - Use cpu core counting routine to speed up build time.
    • 26.05.17: - Rebase to alpine 3.6.
    • 14.02.17: - Rebase to alpine 3.5.
    • 25.11.16: - Rebase to alpine linux, move to main repo.
    • 27.02.16: - Bump to latest version.
    • 19.02.16: - Change port to UDP, thanks to slashopt for pointing this out.
    • 15.02.16: - Make minetest app a service.
    • 01.02.16: - Add lua-socket dependency.
    • 06.11.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it minetest /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f minetest
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' minetest
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/minetest:latest

    Versions

    • 06.08.22: - Update irrlicht deps.
    • 02.05.22: - Allow specifying the advertised port.
    • 17.03.22: - Install forked irrlicht, add zstd.
    • 19.01.22: - Rebasing to alpine 3.15.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 12.07.19: - Bugfix to support multiple CLI variables.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 03.06.19: - Adding custom cli vars to options.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 04.03.19: - Rebase to alpine 3.9 to compile 5.0.0 minetest with new build args.
    • 14.01.19: - Add pipeline logic and multi arch.
    • 08.08.18: - Rebase to alpine 3.8, build from latest release tag instead of master.
    • 03.01.18: - Deprecate cpu_core routine lack of scaling.
    • 08.12.17: - Rebase to alpine 3.7.
    • 30.11.17: - Use cpu core counting routine to speed up build time.
    • 26.05.17: - Rebase to alpine 3.6.
    • 14.02.17: - Rebase to alpine 3.5.
    • 25.11.16: - Rebase to alpine linux, move to main repo.
    • 27.02.16: - Bump to latest version.
    • 19.02.16: - Change port to UDP, thanks to slashopt for pointing this out.
    • 15.02.16: - Make minetest app a service.
    • 01.02.16: - Add lua-socket dependency.
    • 06.11.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-minisatip/index.html b/images/docker-minisatip/index.html index 334882fb58..11716b91b8 100644 --- a/images/docker-minisatip/index.html +++ b/images/docker-minisatip/index.html @@ -1,4 +1,4 @@ - minisatip - LinuxServer.io

    linuxserver/minisatip

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Minisatip is a multi-threaded satip server version 1.2 that runs under Linux and it was tested with DVB-S, DVB-S2, DVB-T, DVB-T2, DVB-C, DVB-C2, ATSC and ISDB-T cards.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/minisatip:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Best used in conjunction with tvheadend

    There is no setup per se, other than adding your cards for passthrough.

    You can then use your cards as DVB inputs in apps such as tvheadend.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + minisatip - LinuxServer.io       

    linuxserver/minisatip

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Minisatip is a multi-threaded satip server version 1.2 that runs under Linux and it was tested with DVB-S, DVB-S2, DVB-T, DVB-T2, DVB-C, DVB-C2, ATSC and ISDB-T cards.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/minisatip:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Best used in conjunction with tvheadend

    There is no setup per se, other than adding your cards for passthrough.

    You can then use your cards as DVB inputs in apps such as tvheadend.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       minisatip:
    @@ -34,4 +34,4 @@ services:
     

    Additional runtime parameters

    In some cases it might be necessary to start minisatip with additional parameters, for example to configure a unicable LNB. Add the parameters you need and restart the container. Be sure to have the right parameters set as adding the wrong once might lead to the container not starting correctly. For a list of minisatip parameters visit Minisatip page.

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8875 Status Page WebUI
    554 RTSP Port
    1900/udp App Discovery

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    RUN_OPTS=<parameter> Specify specific run params for minisatip

    Volume Mappings (-v)

    Volume Function
    /config Configuration files and minisatip data

    Device Mappings (--device)

    Parameter Function
    /dev/dvb For passing through Tv-cards

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it minisatip /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f minisatip
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' minisatip
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/minisatip:latest

    Versions

    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 20.02.19: - Fix run options.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 28.08.18: - Rebase to Alpine 3.8.
    • 13.12.17: - Rebase to Alpine 3.7.
    • 28.05.17: - Rebase to Alpine 3.6.
    • 08.02.17: - Rebase to Alpine 3.5 and only compile libs in dvb-apps.
    • 14.10.16: - Add version layer information.
    • 18.09.16: - Add support for Common Interface.
    • 11.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 15.08.16: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it minisatip /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f minisatip
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' minisatip
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/minisatip:latest

    Versions

    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 20.02.19: - Fix run options.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 28.08.18: - Rebase to Alpine 3.8.
    • 13.12.17: - Rebase to Alpine 3.7.
    • 28.05.17: - Rebase to Alpine 3.6.
    • 08.02.17: - Rebase to Alpine 3.5 and only compile libs in dvb-apps.
    • 14.10.16: - Add version layer information.
    • 18.09.16: - Add support for Common Interface.
    • 11.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 15.08.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-mstream/index.html b/images/docker-mstream/index.html index c2d8b25aa7..cab3bcadfe 100644 --- a/images/docker-mstream/index.html +++ b/images/docker-mstream/index.html @@ -1,4 +1,4 @@ - mstream - LinuxServer.io

    linuxserver/mstream

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    mstream is a personal music streaming server. You can use mStream to stream your music from your home computer to any device, anywhere. There are mobile apps available for both Android and iPhone.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mstream:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at http://<your-ip>:3000

    Settings are adjusted through the web ui or via editing of config.json. For more information check out Mstream.

    IMPORTANT NOTICE:

    mStream v5 no longer accepts cli arguments for setting the user and password and requires the use of config.json. Therefore, the environment variables USER, PASSWORD and USE_JSON are deprecated.

    v4's config.json is not compatible with v5. Existing config.json will be renamed to config.json.v4-bak for your reference and a new default config.json will be created upon upgrade from v4 to v5.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + mstream - LinuxServer.io       

    linuxserver/mstream

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    mstream is a personal music streaming server. You can use mStream to stream your music from your home computer to any device, anywhere. There are mobile apps available for both Android and iPhone.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mstream:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at http://<your-ip>:3000

    Settings are adjusted through the web ui or via editing of config.json. For more information check out Mstream.

    IMPORTANT NOTICE:

    mStream v5 no longer accepts cli arguments for setting the user and password and requires the use of config.json. Therefore, the environment variables USER, PASSWORD and USE_JSON are deprecated.

    v4's config.json is not compatible with v5. Existing config.json will be renamed to config.json.v4-bak for your reference and a new default config.json will be created upon upgrade from v4 to v5.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       mstream:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 The port for the mStream webinterface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use e.g. Europe/London

    Volume Mappings (-v)

    Volume Function
    /config mStream config
    /music Music location

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mstream /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mstream
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mstream
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mstream:latest

    Versions

    • 05.04.22: - Move sync folder to /config.
    • 02.04.22: - Rebase to alpine 3.15. Fix ffmpeg download.
    • 17.05.21: - Deprecating the env vars USER, PASSWORD and USE_JSON as mStream v5 requires the use of config.json.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 18.05.19: - Inital Release
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mstream /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mstream
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mstream
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mstream:latest

    Versions

    • 05.04.22: - Move sync folder to /config.
    • 02.04.22: - Rebase to alpine 3.15. Fix ffmpeg download.
    • 17.05.21: - Deprecating the env vars USER, PASSWORD and USE_JSON as mStream v5 requires the use of config.json.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 18.05.19: - Inital Release
    \ No newline at end of file diff --git a/images/docker-musicbrainz/index.html b/images/docker-musicbrainz/index.html index 17f5b10a64..8a592a12e0 100644 --- a/images/docker-musicbrainz/index.html +++ b/images/docker-musicbrainz/index.html @@ -1,4 +1,4 @@ - musicbrainz - LinuxServer.io

    IMPORTANT NOTICE: THIS IMAGE HAS BEEN DEPRECATED

    linuxserver.io

    Blog Discord Discourse Fleet GitHub Open Collective

    The LinuxServer.io team brings you another container release featuring:

    • regular and timely application updates
    • easy user mappings (PGID, PUID)
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • regular security updates

    Find us at: * Blog - all the things you can do with our containers including How-To guides, opinions and much more! * Discord - realtime support / chat with the community and the team. * Discourse - post on our community forum. * Fleet - an online web interface which displays all of our maintained images. * GitHub - view the source for all of our repositories. * Open Collective - please consider helping us by either donating or contributing to our budget

    linuxserver/musicbrainz

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build

    MusicBrainz is an open music encyclopedia that collects music metadata and makes it available to the public.

    musicbrainz

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/musicbrainz should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container.

    Compatible with docker-compose v2 schemas.

    ---
    + musicbrainz - LinuxServer.io       

    IMPORTANT NOTICE: THIS IMAGE HAS BEEN DEPRECATED

    linuxserver.io

    Blog Discord Discourse Fleet GitHub Open Collective

    The LinuxServer.io team brings you another container release featuring:

    • regular and timely application updates
    • easy user mappings (PGID, PUID)
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • regular security updates

    Find us at: * Blog - all the things you can do with our containers including How-To guides, opinions and much more! * Discord - realtime support / chat with the community and the team. * Discourse - post on our community forum. * Fleet - an online web interface which displays all of our maintained images. * GitHub - view the source for all of our repositories. * Open Collective - please consider helping us by either donating or contributing to our budget

    linuxserver/musicbrainz

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build

    MusicBrainz is an open music encyclopedia that collects music metadata and makes it available to the public.

    musicbrainz

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/musicbrainz should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container.

    Compatible with docker-compose v2 schemas.

    ---
     version: "2.1"
     services:
       musicbrainz:
    @@ -40,4 +40,4 @@ docker build \
       --pull \
       -t lscr.io/linuxserver/musicbrainz:latest .
     

    The ARM variants can be built on x86_64 hardware using multiarch/qemu-user-static

    docker run --rm --privileged multiarch/qemu-user-static:register --reset
    -

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    • 23.02.21: - Deprecate image as no one stepped up to take over as maintainer.
    • 03.10.20: - Rebase to alpine 3.12, add gettext and move to nodejs-current.
    • 17.05.19: - Update DBDefs.pm to schema 25 database.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 02.03.19: - Revert to alpine 3.8 to fix incompatibilities with frontend build tools.
    • 19.02.19: - Multi Arch and add pipeline logic, rebase to Alpine 3.9
    • 22.08.18: - Bump server version 2018-08-14.
    • 30.06.18: - Bump server version 2018-06-30.
    • 01.06.18: - Bump server version 2018-05-30 , simplify sed and use yarn instead of npm.
    • 14.05.18: - Bump server version 2018-05-09.
    • 26.04.18: - Bump server version 2018-04-23.
    • 09.02.18: - Bump server version 2018-02-09.
    • 24.01.18: - Bump server version 2018-01-24.
    • 10.01.18: - Bump server version 2018-01-10.
    • 31.11.17: - Bump server version 2017-12-21.
    • 30.11.17: - Add NPROC variable to allow number of processes to be set.
    • 30.11.17: - Fix linting recommendations.
    • 30.11.17: - Remove socket on startup if exists (thanks wtf911) re.
    • 24.11.17: - Remove catalyst side bar on new installs.
    • 31.10.17: - Bump server version 2017-10-31.
    • 20.09.17: - Bump server version 2017-09-18.
    • 06.09.17: - Bump server version 2017-09-04.
    • 19.07.17: - Bump server version 2017-07-17.
    • 21.06.17: - Bump server version 2017-06-19.
    • 26.05.17: - Fix later build of postgres using /run instead of /var/run.
    • 26.05.17: - Rebase to alpine 3.6.
    • 15.05.17: - Schema 24 update, recommend full rebuild with new config.
    • 15.04.17: - Bump server version 2017-04-10.
    • 04.04.17: - Bump server version 2017-03-27.
    • 15.03.17: - Bump server version 2017-03-13.
    • 04.03.17: - Bump server version and use nginx to serve web pages.
    • 06.02.17: - Rebase to alpine 3.5.
    • 16.12.16: - Rebase to alpine linux, entailing almost complete rewrite.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Fix umask.
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README, move to main repository.
    • 20.07.16: - Restructure of docker file for clarity, add maxworkers variable in conjunction with starlet, for parallel requests in multi-core setups, thanks to user baoshan.
    • 03.06.16: - Complete rewrite due to schema change. Rebased back to 14.04 direct Using S6 overaly.
    • 21.03.16: - Bump to latest server release.
    • 16.03.16: - Bump to latest server release.
    • 26.02.16: - Bump to latest server release.
    • 08.02.16: - Switch to PPA version for redis.
    • 03.01.16: - Remove d/l of sitemaps file, missing from last 2 db dumps, move fetch of db/dump higher up initialise routine to allow easier resume of broken downloads.
    • 15.12.15: - Per latest musicbrainz blog, switched to production branch,latest stable code is now production branch in place of master.
    • 10.12.15: - Initial release date.
    \ No newline at end of file +

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    • 23.02.21: - Deprecate image as no one stepped up to take over as maintainer.
    • 03.10.20: - Rebase to alpine 3.12, add gettext and move to nodejs-current.
    • 17.05.19: - Update DBDefs.pm to schema 25 database.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 02.03.19: - Revert to alpine 3.8 to fix incompatibilities with frontend build tools.
    • 19.02.19: - Multi Arch and add pipeline logic, rebase to Alpine 3.9
    • 22.08.18: - Bump server version 2018-08-14.
    • 30.06.18: - Bump server version 2018-06-30.
    • 01.06.18: - Bump server version 2018-05-30 , simplify sed and use yarn instead of npm.
    • 14.05.18: - Bump server version 2018-05-09.
    • 26.04.18: - Bump server version 2018-04-23.
    • 09.02.18: - Bump server version 2018-02-09.
    • 24.01.18: - Bump server version 2018-01-24.
    • 10.01.18: - Bump server version 2018-01-10.
    • 31.11.17: - Bump server version 2017-12-21.
    • 30.11.17: - Add NPROC variable to allow number of processes to be set.
    • 30.11.17: - Fix linting recommendations.
    • 30.11.17: - Remove socket on startup if exists (thanks wtf911) re.
    • 24.11.17: - Remove catalyst side bar on new installs.
    • 31.10.17: - Bump server version 2017-10-31.
    • 20.09.17: - Bump server version 2017-09-18.
    • 06.09.17: - Bump server version 2017-09-04.
    • 19.07.17: - Bump server version 2017-07-17.
    • 21.06.17: - Bump server version 2017-06-19.
    • 26.05.17: - Fix later build of postgres using /run instead of /var/run.
    • 26.05.17: - Rebase to alpine 3.6.
    • 15.05.17: - Schema 24 update, recommend full rebuild with new config.
    • 15.04.17: - Bump server version 2017-04-10.
    • 04.04.17: - Bump server version 2017-03-27.
    • 15.03.17: - Bump server version 2017-03-13.
    • 04.03.17: - Bump server version and use nginx to serve web pages.
    • 06.02.17: - Rebase to alpine 3.5.
    • 16.12.16: - Rebase to alpine linux, entailing almost complete rewrite.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Fix umask.
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README, move to main repository.
    • 20.07.16: - Restructure of docker file for clarity, add maxworkers variable in conjunction with starlet, for parallel requests in multi-core setups, thanks to user baoshan.
    • 03.06.16: - Complete rewrite due to schema change. Rebased back to 14.04 direct Using S6 overaly.
    • 21.03.16: - Bump to latest server release.
    • 16.03.16: - Bump to latest server release.
    • 26.02.16: - Bump to latest server release.
    • 08.02.16: - Switch to PPA version for redis.
    • 03.01.16: - Remove d/l of sitemaps file, missing from last 2 db dumps, move fetch of db/dump higher up initialise routine to allow easier resume of broken downloads.
    • 15.12.15: - Per latest musicbrainz blog, switched to production branch,latest stable code is now production branch in place of master.
    • 10.12.15: - Initial release date.
    \ No newline at end of file diff --git a/images/docker-muximux/index.html b/images/docker-muximux/index.html index 730e531b82..06fc0f1e68 100644 --- a/images/docker-muximux/index.html +++ b/images/docker-muximux/index.html @@ -1,4 +1,4 @@ - muximux - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver/muximux

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Muximux is a lightweight portal to view & manage your HTPC apps without having to run anything more than a PHP enabled webserver. With Muximux you don't need to keep multiple tabs open, or bookmark the URL to all of your apps.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/muximux:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Find the web interface at <your-ip>:80 , set apps you wish to use with muximux via the webui. More info:- Muximux

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + muximux - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver/muximux

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Muximux is a lightweight portal to view & manage your HTPC apps without having to run anything more than a PHP enabled webserver. With Muximux you don't need to keep multiple tabs open, or bookmark the URL to all of your apps.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/muximux:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Find the web interface at <your-ip>:80 , set apps you wish to use with muximux via the webui. More info:- Muximux

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       muximux:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where muximux should store its files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it muximux /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f muximux
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' muximux
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/muximux:latest

    Versions

    • 21.10.22: - Deprecate image.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 13.09.18: - Rebase to alpine 3.8.
    • 09.01.18: - Rebase to alpine 3.7.
    • 25.05.17: - Rebase to alpine 3.6.
    • 12.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Rebase to alpine linux.
    • 09.09.16: - Add badges to README.
    • 22.02.16: - Initial release date.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it muximux /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f muximux
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' muximux
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/muximux:latest

    Versions

    • 21.10.22: - Deprecate image.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 13.09.18: - Rebase to alpine 3.8.
    • 09.01.18: - Rebase to alpine 3.7.
    • 25.05.17: - Rebase to alpine 3.6.
    • 12.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Rebase to alpine linux.
    • 09.09.16: - Add badges to README.
    • 22.02.16: - Initial release date.
    \ No newline at end of file diff --git a/images/docker-mylar/index.html b/images/docker-mylar/index.html index 13170a0abd..2dd7ef1312 100644 --- a/images/docker-mylar/index.html +++ b/images/docker-mylar/index.html @@ -1,4 +1,4 @@ - [linuxserver/mylar](https://github.com/linuxserver/docker-mylar) - LinuxServer.io

    linuxserver/mylar

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Mylar is an automated Comic Book downloader (cbr/cbz) for use with SABnzbd, NZBGet and torrents.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mylar should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
    + [linuxserver/mylar](https://github.com/linuxserver/docker-mylar) - LinuxServer.io       

    linuxserver/mylar

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Mylar is an automated Comic Book downloader (cbr/cbz) for use with SABnzbd, NZBGet and torrents.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mylar should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
     version: "2.1"
     services:
       mylar:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8090 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation

    Volume Mappings (-v)

    Volume Function
    /config Where mylar should store config files.
    /comics Map to your comics folder.
    /downloads Map to your downloads folder.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    THIS IMAGE IS DEPRECATED. Please migrate to Mylar3.

    The web ui for settings etc, is on <your-ip>:8090 For more detailed setup refer Mylar.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mylar /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mylar
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mylar
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mylar

    Versions

    • 21.12.20: - Deprecated. Please migrate to Mylar3.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 08.05.19: - Re-install requests pip package to downgrade urllib version suitable for mylar.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Pipeline logic and multi arch.
    • 17.08.18: - Rebase to alpine 3.8.
    • 06.07.18: - Add html5lib python package.
    • 14.06.18: - Add requests python package.
    • 12.12.17: - Rebase to alpine 3.7.
    • 21.07.17: - Internal git pull instead of at runtime.
    • 25.05.17: - Rebase to alpine 3.6.
    • 19.02.17: - Use quiet option for cleaner console log, app logs to file anyways.
    • 07.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 26.01.16: - Initial release.
    \ No newline at end of file +

    Application Setup

    THIS IMAGE IS DEPRECATED. Please migrate to Mylar3.

    The web ui for settings etc, is on <your-ip>:8090 For more detailed setup refer Mylar.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mylar /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mylar
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mylar
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mylar

    Versions

    • 21.12.20: - Deprecated. Please migrate to Mylar3.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 08.05.19: - Re-install requests pip package to downgrade urllib version suitable for mylar.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Pipeline logic and multi arch.
    • 17.08.18: - Rebase to alpine 3.8.
    • 06.07.18: - Add html5lib python package.
    • 14.06.18: - Add requests python package.
    • 12.12.17: - Rebase to alpine 3.7.
    • 21.07.17: - Internal git pull instead of at runtime.
    • 25.05.17: - Rebase to alpine 3.6.
    • 19.02.17: - Use quiet option for cleaner console log, app logs to file anyways.
    • 07.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 26.01.16: - Initial release.
    \ No newline at end of file diff --git a/images/docker-mylar3/index.html b/images/docker-mylar3/index.html index 21176f2d58..9dd5d1dfef 100644 --- a/images/docker-mylar3/index.html +++ b/images/docker-mylar3/index.html @@ -1,4 +1,4 @@ - mylar3 - LinuxServer.io

    linuxserver/mylar3

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Mylar3 is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mylar3:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Mylar3 releases
    nightly Commits to Mylar3 python3-dev branch

    Application Setup

    The web ui for settings etc, is on http://SERVERIP:8090 For more detailed setup options, refer to Mylar3.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + mylar3 - LinuxServer.io       

    linuxserver/mylar3

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Mylar3 is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. It supports SABnzbd, NZBGET, and many torrent clients in addition to DDL.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mylar3:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Mylar3 releases
    nightly Commits to Mylar3 python3-dev branch

    Application Setup

    The web ui for settings etc, is on http://SERVERIP:8090 For more detailed setup options, refer to Mylar3.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       mylar3:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8090 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation

    Volume Mappings (-v)

    Volume Function
    /config Where mylar should store config files.
    /comics Map to your comics folder.
    /downloads Map to your downloads folder.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mylar3 /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mylar3
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mylar3
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mylar3:latest

    Versions

    • 12.10.22: - Rebase to alpine 3.16 and upgrade to s6v3.
    • 01.02.22: - Rebase to alpine 3.15.
    • 02.11.21: - Rebase to alpine 3.14. Remove pathlib.py.
    • 25.05.21: - Add libwebp support.
    • 17.05.21: - Add linuxserver wheel index.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 03.01.21: - Output mylar log to docker log.
    • 21.12.20: - Release nightly tag based on commits to upstream python3-dev branch.
    • 28.09.20: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mylar3 /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mylar3
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mylar3
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mylar3:latest

    Versions

    • 12.10.22: - Rebase to alpine 3.16 and upgrade to s6v3.
    • 01.02.22: - Rebase to alpine 3.15.
    • 02.11.21: - Rebase to alpine 3.14. Remove pathlib.py.
    • 25.05.21: - Add libwebp support.
    • 17.05.21: - Add linuxserver wheel index.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 03.01.21: - Output mylar log to docker log.
    • 21.12.20: - Release nightly tag based on commits to upstream python3-dev branch.
    • 28.09.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-mysql-workbench/index.html b/images/docker-mysql-workbench/index.html index af1e0afd29..67a2e5740e 100644 --- a/images/docker-mysql-workbench/index.html +++ b/images/docker-mysql-workbench/index.html @@ -1,4 +1,4 @@ - mysql-workbench - LinuxServer.io

    linuxserver/mysql-workbench

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    MySQL Workbench is a unified visual tool for database architects, developers, and DBAs. MySQL Workbench provides data modeling, SQL development, and comprehensive administration tools for server configuration, user administration, backup, and much more.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mysql-workbench:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64
    armhf

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + mysql-workbench - LinuxServer.io       

    linuxserver/mysql-workbench

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    MySQL Workbench is a unified visual tool for database architects, developers, and DBAs. MySQL Workbench provides data modeling, SQL development, and comprehensive administration tools for server configuration, user administration, backup, and much more.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/mysql-workbench:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64
    armhf

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       mysql-workbench:
    @@ -28,4 +28,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Mysql Workbench desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores program settings.

    Miscellaneous Options

    Parameter Function
    --cap-add= Required for keyring functionality

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mysql-workbench /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mysql-workbench
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mysql-workbench
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mysql-workbench:latest

    Versions

    • 15.09.22: - Migrate to s6v3.
    • 26.07.22: - Rebase on jammy.
    • 20.04.21: - Rebase on focal.
    • 18.01.21: - Update libpython dependency.
    • 26.03.20: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it mysql-workbench /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f mysql-workbench
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' mysql-workbench
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/mysql-workbench:latest

    Versions

    • 15.09.22: - Migrate to s6v3.
    • 26.07.22: - Rebase on jammy.
    • 20.04.21: - Rebase on focal.
    • 18.01.21: - Update libpython dependency.
    • 26.03.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-nano-discord-bot/index.html b/images/docker-nano-discord-bot/index.html index e598f6deb6..75c398dd01 100644 --- a/images/docker-nano-discord-bot/index.html +++ b/images/docker-nano-discord-bot/index.html @@ -1,4 +1,4 @@ - [lsiodev/nano-discord-bot](https://github.com/linuxserver/docker-nano-discord-bot) - LinuxServer.io

    lsiodev/nano-discord-bot

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nano-discord-bot - A bot used to hook into a self hosted Nano RPC endpoint and discord server to Distribute funds from a faucet account.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lsiodev/nano-discord-bot should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
    + [lsiodev/nano-discord-bot](https://github.com/linuxserver/docker-nano-discord-bot) - LinuxServer.io       

    lsiodev/nano-discord-bot

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nano-discord-bot - A bot used to hook into a self hosted Nano RPC endpoint and discord server to Distribute funds from a faucet account.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lsiodev/nano-discord-bot should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
       --name=nano-discord-bot \
       -e PUID=1000 \
       -e PGID=1000 \
    @@ -30,4 +30,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    WALLET_URL=https://wallet.linuxserver.io/#/nano.linuxserver.io/ Hosted wallet endpoint to use.
    RPC_URL=https://nano.linuxserver.io:7077 RPC endpoint to publish blocks to and ingest account information.
    FAUCET_KEY=XXXXXXXXXXXXX The private key for your faucet account.
    DISCORD_KEY=XXXXXXXXXXXXX Discord api key for the bot.
    FAUCET_AMOUNT="1000" Amount to distribute to individual Discord users in Nano.

    Volume Mappings (-v)

    Volume Function
    /config Database and Radarr configs

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    With the proper environment variables passed to this container it will automatically reach out to your Nano RPC server and Discord Server. More about setting up a hosted Nano network here .

    Docker Mods

    Docker Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) can be accessed via the dynamic badge above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nano-discord-bot /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nano-discord-bot
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nano-discord-bot
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lsiodev/nano-discord-bot

    Versions

    • 25.05.20: - Initial Release.
    \ No newline at end of file +

    Application Setup

    With the proper environment variables passed to this container it will automatically reach out to your Nano RPC server and Discord Server. More about setting up a hosted Nano network here .

    Docker Mods

    Docker Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) can be accessed via the dynamic badge above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nano-discord-bot /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nano-discord-bot
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nano-discord-bot
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lsiodev/nano-discord-bot

    Versions

    • 25.05.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-nano-wallet/index.html b/images/docker-nano-wallet/index.html index 8b05c3966f..bd283a25f5 100644 --- a/images/docker-nano-wallet/index.html +++ b/images/docker-nano-wallet/index.html @@ -1,4 +1,4 @@ - nano-wallet - LinuxServer.io

    linuxserver/nano-wallet

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nano-wallet is a digital payment protocol designed to be accessible and lightweight, with a focus on removing inefficiencies present in other cryptocurrencies. With ultrafast transactions and zero fees on a secure, green and decentralized network, this makes Nano ideal for everyday transactions.

    This container is a simple nginx wrapper for the light wallet located here. You will need to pass a valid RPC host when accessing this container.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nano-wallet:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This container requires a Nano RPC endpoint to communicate with whether a public network or your own, see here for more information.

    Simply access the container at the URL:

    http://localhost/#/THE_IP_OR_HOSTNAME_OF_RPC_ENDPOINT

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + nano-wallet - LinuxServer.io       

    linuxserver/nano-wallet

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nano-wallet is a digital payment protocol designed to be accessible and lightweight, with a focus on removing inefficiencies present in other cryptocurrencies. With ultrafast transactions and zero fees on a secure, green and decentralized network, this makes Nano ideal for everyday transactions.

    This container is a simple nginx wrapper for the light wallet located here. You will need to pass a valid RPC host when accessing this container.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nano-wallet:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This container requires a Nano RPC endpoint to communicate with whether a public network or your own, see here for more information.

    Simply access the container at the URL:

    http://localhost/#/THE_IP_OR_HOSTNAME_OF_RPC_ENDPOINT

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       nano-wallet:
    @@ -13,4 +13,4 @@ services:
       --restart unless-stopped \
       lscr.io/linuxserver/nano-wallet:latest
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 Webserver port

    Environment Variables (-e)

    Env Function

    Volume Mappings (-v)

    Volume Function

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
    -

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nano-wallet /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nano-wallet
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nano-wallet
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nano-wallet:latest

    Versions

    • 01.06.20: - Rebasing to alpine 3.12.
    • 23.05.20: - Initial Release.
    \ No newline at end of file +

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nano-wallet /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nano-wallet
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nano-wallet
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nano-wallet:latest

    Versions

    • 01.06.20: - Rebasing to alpine 3.12.
    • 23.05.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-nano/index.html b/images/docker-nano/index.html index c8f400b9e8..7183cd750c 100644 --- a/images/docker-nano/index.html +++ b/images/docker-nano/index.html @@ -1,4 +1,4 @@ - nano - LinuxServer.io

    linuxserver/nano

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nano is a digital payment protocol designed to be accessible and lightweight, with a focus on removing inefficiencies present in other cryptocurrencies. With ultrafast transactions and zero fees on a secure, green and decentralized network, this makes Nano ideal for everyday transactions.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nano:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Nano releases
    beta Beta Nano releases

    Application Setup

    Your Genesis account

    By default this container will launch with a genesis block based on the private key 0000000000000000000000000000000000000000000000000000000000000000, this should obviously only ever be used for testing purposes. Before you run your node you should use a script baked into this image to determine your private key and required environment variables:

    docker run --rm --entrypoint /genesis.sh linuxserver/nano
    + nano - LinuxServer.io       

    linuxserver/nano

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nano is a digital payment protocol designed to be accessible and lightweight, with a focus on removing inefficiencies present in other cryptocurrencies. With ultrafast transactions and zero fees on a secure, green and decentralized network, this makes Nano ideal for everyday transactions.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nano:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Nano releases
    beta Beta Nano releases

    Application Setup

    Your Genesis account

    By default this container will launch with a genesis block based on the private key 0000000000000000000000000000000000000000000000000000000000000000, this should obviously only ever be used for testing purposes. Before you run your node you should use a script baked into this image to determine your private key and required environment variables:

    docker run --rm --entrypoint /genesis.sh linuxserver/nano
     Generating Genesis block
     !!!!!!! ACCOUNT INFO SAVE THIS INFORMATION IT WILL NOT BE SHOWN AGAIN !!!!!!!!
     Private Key: CD4CD6B1E5523D4B5AEDD2B1E5A447C6C6797E729A531A95F9AD7937FC7CD9EA
    @@ -133,4 +133,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8075 Nano communication port
    3000 RPC interface filtered through a proxy
    3001 Https RPC interface filtered through a proxy

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    PEER_HOST=localhost Default peer host (can be overidden with an array by command line options)
    LIVE_GENESIS_PUB=GENESIS_PUBLIC Genesis block public key
    LIVE_GENESIS_ACCOUNT=nano_xxxxxx Genesis block account
    LIVE_GENESIS_WORK=WORK_FOR_BLOCK Genesis block proof of work
    LIVE_GENESIS_SIG=BLOCK_SIGNATURE Genesis block signature
    CLI_OPTIONS=--config node.enable_voting=true Node run command cli args
    LMDB_BOOTSTRAP_URL=http://example.com/Nano_64_version_20.7z HTTP/HTTPS endpoint to download a 7z file with the data.ldb to bootstrap to this node

    Volume Mappings (-v)

    Volume Function
    /config Main storage for config and blockchain

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nano /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nano
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nano
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nano:latest

    Versions

    • 02.06.20: - Rebase to Alpine 3.12.
    • 28.05.20: - Add beta tag.
    • 17.05.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nano /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nano
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nano
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nano:latest

    Versions

    • 02.06.20: - Rebase to Alpine 3.12.
    • 28.05.20: - Add beta tag.
    • 17.05.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-netbootxyz/index.html b/images/docker-netbootxyz/index.html index 1c17044c40..23c673a87a 100644 --- a/images/docker-netbootxyz/index.html +++ b/images/docker-netbootxyz/index.html @@ -1,4 +1,4 @@ - netbootxyz - LinuxServer.io

    linuxserver/netbootxyz

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Netbootxyz is a way to PXE boot various operating system installers or utilities from one place within the BIOS without the need of having to go retrieve the media to run the tool. iPXE is used to provide a user friendly menu from within the BIOS that lets you easily choose the operating system you want along with any specific types of versions or bootable flags.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/netbootxyz:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Web application for full self hosting
    tftp TFTP server only with NETBOOT.XYZ boot files

    Application Setup

    To use this image you need an existing DHCP server where you can set this TFTP server as your DHCP boot destination. This image does not contain a DHCP server nor do we aim to support one in the future. This is simply a TFTP server hosting the latest IPXE kernel builds from netboot.xyz. If you are interested in their project and lack the ability to setup a DHCP server to boot this payload they also have USB stick images you can use available on their downloads page.

    Router Setup Examples

    PFSense

    Services -> DHCP Server

    Set both the option for "TFTP Server" and the options under the Advanced "Network Booting" section. * check enable * Next server- IP used for TFTP Server * Default BIOS file name- netboot.xyz.kpxe * UEFI 32 bit file name- netboot.xyz.efi * UEFI 64 bit file name- netboot.xyz.efi

    OPNsense

    Services -> DHCP Server

    Under the Advanced "Network Booting" section. * check enable * Next server- IP of docker host * Default BIOS file name- netboot.xyz.kpxe * UEFI 32 bit file name- netboot.xyz.efi * UEFI 64 bit file name- netboot.xyz.efi

    Unifi Security Gateway (with the controller)

    Networks -> LAN (or the network you want to boot from) -> ADVANCED DHCP OPTIONS * tick Enable network boot * Server- YOURSERVERIP * Filename- netboot.xyz.kpxe

    EdgeOS/VyOS

    Connect via SSH

    configure
    + netbootxyz - LinuxServer.io       

    linuxserver/netbootxyz

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Netbootxyz is a way to PXE boot various operating system installers or utilities from one place within the BIOS without the need of having to go retrieve the media to run the tool. iPXE is used to provide a user friendly menu from within the BIOS that lets you easily choose the operating system you want along with any specific types of versions or bootable flags.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/netbootxyz:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Web application for full self hosting
    tftp TFTP server only with NETBOOT.XYZ boot files

    Application Setup

    To use this image you need an existing DHCP server where you can set this TFTP server as your DHCP boot destination. This image does not contain a DHCP server nor do we aim to support one in the future. This is simply a TFTP server hosting the latest IPXE kernel builds from netboot.xyz. If you are interested in their project and lack the ability to setup a DHCP server to boot this payload they also have USB stick images you can use available on their downloads page.

    Router Setup Examples

    PFSense

    Services -> DHCP Server

    Set both the option for "TFTP Server" and the options under the Advanced "Network Booting" section. * check enable * Next server- IP used for TFTP Server * Default BIOS file name- netboot.xyz.kpxe * UEFI 32 bit file name- netboot.xyz.efi * UEFI 64 bit file name- netboot.xyz.efi

    OPNsense

    Services -> DHCP Server

    Under the Advanced "Network Booting" section. * check enable * Next server- IP of docker host * Default BIOS file name- netboot.xyz.kpxe * UEFI 32 bit file name- netboot.xyz.efi * UEFI 64 bit file name- netboot.xyz.efi

    Unifi Security Gateway (with the controller)

    Networks -> LAN (or the network you want to boot from) -> ADVANCED DHCP OPTIONS * tick Enable network boot * Server- YOURSERVERIP * Filename- netboot.xyz.kpxe

    EdgeOS/VyOS

    Connect via SSH

    configure
     set service dhcp-server use-dnsmasq enable
     set service dns forwarding options "dhcp-match=set:bios,60,PXEClient:Arch:00000"
     set service dns forwarding options "dhcp-boot=tag:bios,netboot.xyz.kpxe,,SERVERIP"
    @@ -88,4 +88,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Web configuration interface.
    69/udp TFTP Port.
    80 NGINX server for hosting assets.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    MENU_VERSION=1.9.9 Specify a specific version of boot files you want to use from NETBOOT.XYZ (unset pulls latest)
    PORT_RANGE=30000:30010 Specify the port range tftp will use for data transfers (see Wikipedia)
    SUBFOLDER=/ Specify a sobfolder if running this behind a reverse proxy (IE /proxy/)

    Volume Mappings (-v)

    Volume Function
    /config Storage for boot menu files and web application config
    /assets Storage for NETBOOT.XYZ bootable assets (live CDs and other files)

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it netbootxyz /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f netbootxyz
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' netbootxyz
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/netbootxyz:latest

    Versions

    • 12.10.22: - Rebasing to Alpine 3.16, migrate to s6v3.
    • 29.04.21: - Rebasing to alpine 3.13, add SUBFOLDER env variable.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 13.12.19: - Swapping latest tag over to webapp stack for management.
    • 10.12.19: - Adding tftp branch to provide tftp only option to latest users.
    • 22.10.19: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it netbootxyz /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f netbootxyz
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' netbootxyz
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/netbootxyz:latest

    Versions

    • 12.10.22: - Rebasing to Alpine 3.16, migrate to s6v3.
    • 29.04.21: - Rebasing to alpine 3.13, add SUBFOLDER env variable.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 13.12.19: - Swapping latest tag over to webapp stack for management.
    • 10.12.19: - Adding tftp branch to provide tftp only option to latest users.
    • 22.10.19: - Initial release.
    \ No newline at end of file diff --git a/images/docker-netbox/index.html b/images/docker-netbox/index.html index 9545523d51..2fa210f8e7 100644 --- a/images/docker-netbox/index.html +++ b/images/docker-netbox/index.html @@ -1,4 +1,4 @@ - netbox - LinuxServer.io

    linuxserver/netbox

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Netbox is an IP address management (IPAM) and data center infrastructure management (DCIM) tool. Initially conceived by the network engineering team at DigitalOcean, NetBox was developed specifically to address the needs of network and infrastructure engineers. It is intended to function as a domain-specific source of truth for network operations.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/netbox:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Netbox requires a postgres database and a redis instance.

    Access the WebUI at :8000. For more information, check out NetBox.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + netbox - LinuxServer.io       

    linuxserver/netbox

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Netbox is an IP address management (IPAM) and data center infrastructure management (DCIM) tool. Initially conceived by the network engineering team at DigitalOcean, NetBox was developed specifically to address the needs of network and infrastructure engineers. It is intended to function as a domain-specific source of truth for network operations.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/netbox:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Netbox requires a postgres database and a redis instance.

    Access the WebUI at :8000. For more information, check out NetBox.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       netbox:
    @@ -65,4 +65,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 will map the container's port 8000 to port 8000 on the host

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=<TZ> Timezone (i.e., America/New_York)
    SUPERUSER_EMAIL=<SUPERUSER_EMAIL> Email address for admin account
    SUPERUSER_PASSWORD=<SUPERUSER_PASSWORD> Password for admin account
    ALLOWED_HOST=<ALLOWED_HOST> The hostname you will use to access the app (i.e., netbox.example.com)
    DB_NAME=<DB_NAME> Database name (default: netbox)
    DB_USER=<DB_USER> Database user
    DB_PASSWORD=<DB_PASSWORD> Database password
    DB_HOST=<DB_HOST> Database host (default: postgres)
    DB_PORT=<DB_PORT> Database port (defaul: 5432)
    REDIS_HOST=<REDIS_HOST> Redis host (default: redis)
    REDIS_PORT=<REDIS_PORT> Redis port number (default: 6379)
    REDIS_PASSWORD=<REDIS_PASSWORD> Redis password (default: none)
    REDIS_DB_TASK=<REDIS_DB_TASK> Redis database ID for tasks (default: 0)
    REDIS_DB_CACHE=<REDIS_DB_CACHE> Redis database ID for caching (default: 1)
    BASE_PATH=<BASE_PATH> The path you will use to access the app (i.e., /netbox, optional, default: none)
    REMOTE_AUTH_ENABLED=<REMOTE_AUTH_ENABLED> Enable remote authentication (optional, default: False)
    REMOTE_AUTH_BACKEND=<REMOTE_AUTH_BACKEND> Python path to the custom Django authentication backend to use for external user authentication (optional, default: netbox.authentication.RemoteUserBackend)
    REMOTE_AUTH_HEADER=<REMOTE_AUTH_HEADER> Name of the HTTP header which informs NetBox of the currently authenticated user. (optional, default: HTTP_REMOTE_USER)
    REMOTE_AUTH_AUTO_CREATE_USER=<REMOTE_AUTH_AUTO_CREATE_USER> If true, NetBox will automatically create local accounts for users authenticated via a remote service (optional, default: False)
    REMOTE_AUTH_DEFAULT_GROUPS=<REMOTE_AUTH_DEFAULT_GROUPS> The list of groups to assign a new user account when created using remote authentication (optional, default: [])
    REMOTE_AUTH_DEFAULT_PERMISSIONS=<REMOTE_AUTH_DEFAULT_PERMISSIONS> A mapping of permissions to assign a new user account when created using remote authentication (optional, default: {})

    Volume Mappings (-v)

    Volume Function
    /config config directory volume mapping

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it netbox /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f netbox
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' netbox
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/netbox:latest

    Versions

    • 02.11.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 01.08.22: - Remove py3-pillow, add tiff to fix deps.
    • 26.07.22: - Add py3-pillow package back on arm to fix build issue.
    • 10.12.21: - Remove py3-pillow package to fix dependency issue with 3.2.0.
    • 10.12.21: - Rebase to Alpine 3.15.
    • 26.04.21: - Added Redis database environment variables.
    • 03.02.21: - Added remote authentication environment variables.
    • 02.01.21: - Added BASE_PATH environment variable.
    • 23.08.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it netbox /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f netbox
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' netbox
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/netbox:latest

    Versions

    • 02.11.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 01.08.22: - Remove py3-pillow, add tiff to fix deps.
    • 26.07.22: - Add py3-pillow package back on arm to fix build issue.
    • 10.12.21: - Remove py3-pillow package to fix dependency issue with 3.2.0.
    • 10.12.21: - Rebase to Alpine 3.15.
    • 26.04.21: - Added Redis database environment variables.
    • 03.02.21: - Added remote authentication environment variables.
    • 02.01.21: - Added BASE_PATH environment variable.
    • 23.08.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-nextcloud/index.html b/images/docker-nextcloud/index.html index 8256166332..0aa9fac23f 100644 --- a/images/docker-nextcloud/index.html +++ b/images/docker-nextcloud/index.html @@ -1,4 +1,4 @@ - nextcloud - LinuxServer.io

    linuxserver/nextcloud

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nextcloud gives you access to all your files wherever you are.

    Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nextcloud:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Nextcloud releases

    Application Setup

    Access the webui at https://<your-ip>:443, for more information check out Nextcloud.

    Docker image update and recreation of container alone won't update nextcloud version.

    In order to update nextcloud version, you have two options, firstly make sure you are using the latest docker image,then either

    1. Perform the in app gui update.
    2. Use the CLI version by running docker exec -it nextcloud updater.phar (Both of these are described here)

    Note: Both occ and updater.phar can be run without prepending with sudo -u abc php or sudo -u www-data php

    If you are not customizing our default nginx configuration you will need to remove the file:

    /config/nginx/site-confs/default.conf
    + nextcloud - LinuxServer.io       

    linuxserver/nextcloud

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nextcloud gives you access to all your files wherever you are.

    Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nextcloud:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Nextcloud releases

    Application Setup

    Access the webui at https://<your-ip>:443, for more information check out Nextcloud.

    Docker image update and recreation of container alone won't update nextcloud version.

    In order to update nextcloud version, you have two options, firstly make sure you are using the latest docker image,then either

    1. Perform the in app gui update.
    2. Use the CLI version by running docker exec -it nextcloud updater.phar (Both of these are described here)

    Note: Both occ and updater.phar can be run without prepending with sudo -u abc php or sudo -u www-data php

    If you are not customizing our default nginx configuration you will need to remove the file:

    /config/nginx/site-confs/default.conf
     

    Then restart the container to replace it with the latest one.

    Collaborative Editing

    Nextcloud's built-in collaborative editing packages (Collabora/CODE and OnlyOffice) only work on x86_64 systems with glibc, and therefore they are not compatible with our images. You should create separate containers for them and set them up in Nextcloud with their respective connector addons.

    If (auto) installed, those built-in packages may cause instability and should be removed.

    Strict reverse proxies

    This image uses a self-signed certificate by default. This naturally means the scheme is https. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
    @@ -28,4 +28,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    443 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Nextcloud configs.
    /data Your personal data.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nextcloud /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nextcloud
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nextcloud
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nextcloud:latest

    Versions

    • 10.10.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 30.09.22: - Disabled output_buffering as per [nextcloud docs](https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/big_file_upload_configuration.html
    • 21.05.22: - Update version check endpoint.
    • 28.04.22: - Increase OPCache interned strings buffered setting to 16.
    • 14.04.22: - Nginx default site config updated for v23 (existing users should delete /config/nginx/site-confs/default.conf and restart the container). Fix LDAP connection.
    • 11.09.21: - Rebasing to alpine 3.14
    • 21.03.21: - Publish php8 tag for testing.
    • 25.02.21: - Nginx default site config updated for v21 (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 21.01.21: - Fix php iconv (was breaking the mail addon). If installed, attempt to remove broken CODE Server app during startup.
    • 20.01.21: - Increase php fcgi timeout to prevent 504 Gateway timeout errors (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 16.01.21: - Rebasing to alpine 3.13. Users with issues on 32-bit arm, see this article.
    • 12.08.20: - Various updates to default site config, including added support for webfinger (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 03.06.20: - Rebasing to alpine 3.12
    • 03.06.20: - Add php7-bcmath and php7-fileinfo
    • 31.05.20: - Add aliases for occ and updater.phar
    • 31.03.20: - Allow crontab to be user customized, fix logrotate.
    • 17.01.20: - Updated php.ini defaults and site config, including an optional HSTS directive (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 19.12.19: - Rebasing to alpine 3.11.
    • 18.11.19: - Nginx default site config updated for v17 (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 28.10.19: - Change cronjob to run every 5 minutes.
    • 24.10.19: - Nginx default site config updated due to CVE-2019-11043 (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 14.07.19: - Download nextcloud during build time.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 27.02.19: - Updating base nginx config to sync up with v15 requirements.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 25.01.19: - Add php7-phar for occ upgrades.
    • 05.09.18: - Rebase to alpine 3.8.
    • 11.06.18: - Use latest rather than specific version for initial install.
    • 26.04.18: - Bump default install to 13.0.1.
    • 06.02.18: - Bump default install to 13.0.0.
    • 26.01.18: - Rebase to alpine 3.7, bump default install to 12.0.5.
    • 12.12.17: - Bump default install to 12.0.4, fix continuation lines.
    • 15.10.17: - Sed php.ini for opcache requirements in newer nextcloud versions.
    • 20.09.17: - Bump default install to 12.0.3.
    • 19.08.17: - Bump default install to 12.0.2.
    • 25.05.17: - Rebase to alpine 3.6.
    • 22.05.17: - Update to nextcloud 12.0, adding required dependecies and note about commenting out SAMEORIGIN; line.
    • 03.05.17: - Use community repo of memcache.
    • 07.03.17: - Release into main repository and upgrade to php7 and Alpine 3.5.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nextcloud /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nextcloud
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nextcloud
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nextcloud:latest

    Versions

    • 10.10.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 30.09.22: - Disabled output_buffering as per [nextcloud docs](https://docs.nextcloud.com/server/latest/admin_manual/configuration_files/big_file_upload_configuration.html
    • 21.05.22: - Update version check endpoint.
    • 28.04.22: - Increase OPCache interned strings buffered setting to 16.
    • 14.04.22: - Nginx default site config updated for v23 (existing users should delete /config/nginx/site-confs/default.conf and restart the container). Fix LDAP connection.
    • 11.09.21: - Rebasing to alpine 3.14
    • 21.03.21: - Publish php8 tag for testing.
    • 25.02.21: - Nginx default site config updated for v21 (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 21.01.21: - Fix php iconv (was breaking the mail addon). If installed, attempt to remove broken CODE Server app during startup.
    • 20.01.21: - Increase php fcgi timeout to prevent 504 Gateway timeout errors (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 16.01.21: - Rebasing to alpine 3.13. Users with issues on 32-bit arm, see this article.
    • 12.08.20: - Various updates to default site config, including added support for webfinger (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 03.06.20: - Rebasing to alpine 3.12
    • 03.06.20: - Add php7-bcmath and php7-fileinfo
    • 31.05.20: - Add aliases for occ and updater.phar
    • 31.03.20: - Allow crontab to be user customized, fix logrotate.
    • 17.01.20: - Updated php.ini defaults and site config, including an optional HSTS directive (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 19.12.19: - Rebasing to alpine 3.11.
    • 18.11.19: - Nginx default site config updated for v17 (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 28.10.19: - Change cronjob to run every 5 minutes.
    • 24.10.19: - Nginx default site config updated due to CVE-2019-11043 (existing users should delete /config/nginx/site-confs/default.conf and restart the container).
    • 14.07.19: - Download nextcloud during build time.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 27.02.19: - Updating base nginx config to sync up with v15 requirements.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 25.01.19: - Add php7-phar for occ upgrades.
    • 05.09.18: - Rebase to alpine 3.8.
    • 11.06.18: - Use latest rather than specific version for initial install.
    • 26.04.18: - Bump default install to 13.0.1.
    • 06.02.18: - Bump default install to 13.0.0.
    • 26.01.18: - Rebase to alpine 3.7, bump default install to 12.0.5.
    • 12.12.17: - Bump default install to 12.0.4, fix continuation lines.
    • 15.10.17: - Sed php.ini for opcache requirements in newer nextcloud versions.
    • 20.09.17: - Bump default install to 12.0.3.
    • 19.08.17: - Bump default install to 12.0.2.
    • 25.05.17: - Rebase to alpine 3.6.
    • 22.05.17: - Update to nextcloud 12.0, adding required dependecies and note about commenting out SAMEORIGIN; line.
    • 03.05.17: - Use community repo of memcache.
    • 07.03.17: - Release into main repository and upgrade to php7 and Alpine 3.5.
    \ No newline at end of file diff --git a/images/docker-nginx/index.html b/images/docker-nginx/index.html index 483088f009..55167df621 100644 --- a/images/docker-nginx/index.html +++ b/images/docker-nginx/index.html @@ -1,4 +1,4 @@ - nginx - LinuxServer.io

    linuxserver/nginx

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nginx is a simple webserver with php support. The config files reside in /config for easy user customization.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nginx:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Add your web files to /config/www for hosting.
    Modify the nginx, php and site config files under /config as needed
    Protip: This container is best combined with a sql server, e.g. mariadb

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + nginx - LinuxServer.io       

    linuxserver/nginx

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nginx is a simple webserver with php support. The config files reside in /config for easy user customization.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nginx:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Add your web files to /config/www for hosting.
    Modify the nginx, php and site config files under /config as needed
    Protip: This container is best combined with a sql server, e.g. mariadb

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       nginx:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 http
    443 https

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Contains your www content and all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nginx /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nginx
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nginx
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nginx:latest

    Versions

    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 22.05.22: - Install nginx version from 3.14.
    • 01.07.21: - Rebasing to alpine 3.14.
    • 24.06.21: - Update default nginx conf folder.
    • 12.04.21: - Add php7-gmp and php7-pecl-mailparse.
    • 13.02.21: - Remove php7-pecl-imagick (it now installs the full imagemagick with too much crud). Users can install it via this docker mod.
    • 09.02.21: - Rebasing to alpine 3.13. Add nginx mods brotli and dav-ext. Remove nginx mods lua and lua-upstream (due to regression over the last couple of years).
    • 08.09.20: - Add php7-xsl.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 18.04.20: - Fix unwanted shutdown of the container.
    • 11.03.20: - Add php7-sodium.
    • 18.02.20: - Add geoip2, suppress lua warning.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 18.12.19: - Add php7-imap and php7-pecl-apcu.
    • 13.11.19: - Add php7-pdo_odbc.
    • 24.10.19: - Add php7-pecl-imagick.
    • 06.08.19: - Add php7-bcmath, ph7-pear, php7-xmlrpc and php7-ftp.
    • 02.08.19: - Add php7-ldap.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 08.05.19: - Remove default.conf when nginx is upgraded in downstream image.
    • 30.04.19: - Add php-redis.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 02.03.19: - Add php intl and posix modules.
    • 28.02.19: - Add php7-opcache, remove memcached service due to issues on aarch64 (let us know if you need to enable it).
    • 22.02.19: - Rebasing to alpine 3.9.
    • 18.11.18: - Attempt to upgrade packages during build.
    • 28.09.18: - Multi-arch image.
    • 17.08.18: - Rebase to alpine 3.8, inherit nginx.conf from nginx baseimage.
    • 11.05.18: - Add php pgsql support.
    • 19.04.18: - Bind memcached to localhost only, add php7-sqlite3.
    • 05.01.18: - Rebase to alpine 3.7.
    • 08.11.17: - Add php7 soap module.
    • 31.10.17: - Add php7 exif and xmlreader modules.
    • 30.09.17: - Copy additional root files into image.
    • 24.09.17: - Add memcached service.
    • 31.08.17: - Add php7-phar.
    • 14.07.17: - Enable modules dynamically in nginx.conf.
    • 22.06.17: - Add various nginx modules and enable all modules in the default nginx.conf.
    • 05.06.17: - Add php7-bz2.
    • 25.05.17: - Rebase to alpine 3.6.
    • 18.04.17: - Add php7-sockets.
    • 27.02.17: - Rebase to alpine 3.5, update to nginx 1.10.2 and php7.
    • 14.10.16: - Add version layer information.
    • 10.09.16: - Add badges to README.
    • 05.12.15: - Intial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nginx /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nginx
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nginx
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nginx:latest

    Versions

    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 22.05.22: - Install nginx version from 3.14.
    • 01.07.21: - Rebasing to alpine 3.14.
    • 24.06.21: - Update default nginx conf folder.
    • 12.04.21: - Add php7-gmp and php7-pecl-mailparse.
    • 13.02.21: - Remove php7-pecl-imagick (it now installs the full imagemagick with too much crud). Users can install it via this docker mod.
    • 09.02.21: - Rebasing to alpine 3.13. Add nginx mods brotli and dav-ext. Remove nginx mods lua and lua-upstream (due to regression over the last couple of years).
    • 08.09.20: - Add php7-xsl.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 18.04.20: - Fix unwanted shutdown of the container.
    • 11.03.20: - Add php7-sodium.
    • 18.02.20: - Add geoip2, suppress lua warning.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 18.12.19: - Add php7-imap and php7-pecl-apcu.
    • 13.11.19: - Add php7-pdo_odbc.
    • 24.10.19: - Add php7-pecl-imagick.
    • 06.08.19: - Add php7-bcmath, ph7-pear, php7-xmlrpc and php7-ftp.
    • 02.08.19: - Add php7-ldap.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 08.05.19: - Remove default.conf when nginx is upgraded in downstream image.
    • 30.04.19: - Add php-redis.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 02.03.19: - Add php intl and posix modules.
    • 28.02.19: - Add php7-opcache, remove memcached service due to issues on aarch64 (let us know if you need to enable it).
    • 22.02.19: - Rebasing to alpine 3.9.
    • 18.11.18: - Attempt to upgrade packages during build.
    • 28.09.18: - Multi-arch image.
    • 17.08.18: - Rebase to alpine 3.8, inherit nginx.conf from nginx baseimage.
    • 11.05.18: - Add php pgsql support.
    • 19.04.18: - Bind memcached to localhost only, add php7-sqlite3.
    • 05.01.18: - Rebase to alpine 3.7.
    • 08.11.17: - Add php7 soap module.
    • 31.10.17: - Add php7 exif and xmlreader modules.
    • 30.09.17: - Copy additional root files into image.
    • 24.09.17: - Add memcached service.
    • 31.08.17: - Add php7-phar.
    • 14.07.17: - Enable modules dynamically in nginx.conf.
    • 22.06.17: - Add various nginx modules and enable all modules in the default nginx.conf.
    • 05.06.17: - Add php7-bz2.
    • 25.05.17: - Rebase to alpine 3.6.
    • 18.04.17: - Add php7-sockets.
    • 27.02.17: - Rebase to alpine 3.5, update to nginx 1.10.2 and php7.
    • 14.10.16: - Add version layer information.
    • 10.09.16: - Add badges to README.
    • 05.12.15: - Intial Release.
    \ No newline at end of file diff --git a/images/docker-ngircd/index.html b/images/docker-ngircd/index.html index c9b3f20443..0bda91e843 100644 --- a/images/docker-ngircd/index.html +++ b/images/docker-ngircd/index.html @@ -1,4 +1,4 @@ - ngircd - LinuxServer.io

    linuxserver/ngircd

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ngircd is a free, portable and lightweight Internet Relay Chat server for small or private networks, developed under the GNU General Public License (GPL). It is easy to configure, can cope with dynamic IP addresses, and supports IPv6, SSL-protected connections as well as PAM for authentication. It is written from scratch and not based on the original IRCd.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ngircd:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • To setup ngircd you will need to edit /config/ngircd.conf which is created the first time the container is run, edit the file and restart the container to implement any config changes.
    • For information see the ngircd site here.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + ngircd - LinuxServer.io       

    linuxserver/ngircd

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ngircd is a free, portable and lightweight Internet Relay Chat server for small or private networks, developed under the GNU General Public License (GPL). It is easy to configure, can cope with dynamic IP addresses, and supports IPv6, SSL-protected connections as well as PAM for authentication. It is written from scratch and not based on the original IRCd.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ngircd:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • To setup ngircd you will need to edit /config/ngircd.conf which is created the first time the container is run, edit the file and restart the container to implement any config changes.
    • For information see the ngircd site here.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       ngircd:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    6667 ngircd port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use e.g. Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Where ngircd.conf is stored

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ngircd /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ngircd
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ngircd
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ngircd:latest

    Versions

    • 11.10.22: - Rebasing to alpine 3.16, migrate to s6v3.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 04.07.19: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ngircd /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ngircd
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ngircd
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ngircd:latest

    Versions

    • 11.10.22: - Rebasing to alpine 3.16, migrate to s6v3.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 04.07.19: - Initial release.
    \ No newline at end of file diff --git a/images/docker-nntp2nntp/index.html b/images/docker-nntp2nntp/index.html index 7012cc8003..7f6c46a9f9 100644 --- a/images/docker-nntp2nntp/index.html +++ b/images/docker-nntp2nntp/index.html @@ -1,4 +1,4 @@ - nntp2nntp - LinuxServer.io

    linuxserver/nntp2nntp

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nntp2nntp proxy allow you to use your NNTP Account from multiple systems, each with own user name and password. It fully supports SSL and you can also limit the access to proxy with SSL certificates. nntp2nntp proxy is very simple and pretty fast.

    Warning

    Whilst we know of no nntp2nntp security issues the upstream code for this project has received no changes since 06.08.15 and is likely abandoned permanently. For this reason we strongly recommend you do not make this application public facing and if you must do so other layers of security and SSL should be considered an absolute bare minimum requirement. We see this proxy being used primarily on a LAN so that all the users NNTP applications can share a common set of internal credentials allowing for central managment of the upstream account e.g change provider, server, thread limits for all applications with one global config change.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nntp2nntp:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Edit sample config file config/nntp2nntp.conf with upstream provider details and rename the local users.

    New user passwords can be created by running the password hash generator

    docker exec -it nntp2nntp /usr/bin/nntp2nntp.py pass
    + nntp2nntp - LinuxServer.io       

    linuxserver/nntp2nntp

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nntp2nntp proxy allow you to use your NNTP Account from multiple systems, each with own user name and password. It fully supports SSL and you can also limit the access to proxy with SSL certificates. nntp2nntp proxy is very simple and pretty fast.

    Warning

    Whilst we know of no nntp2nntp security issues the upstream code for this project has received no changes since 06.08.15 and is likely abandoned permanently. For this reason we strongly recommend you do not make this application public facing and if you must do so other layers of security and SSL should be considered an absolute bare minimum requirement. We see this proxy being used primarily on a LAN so that all the users NNTP applications can share a common set of internal credentials allowing for central managment of the upstream account e.g change provider, server, thread limits for all applications with one global config change.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nntp2nntp:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Edit sample config file config/nntp2nntp.conf with upstream provider details and rename the local users.

    New user passwords can be created by running the password hash generator

    docker exec -it nntp2nntp /usr/bin/nntp2nntp.py pass
     

    entering the desired password and copying the resulting string to the relevant user line in /config/nntp2nntp.conf

    Example with a user called Dave and with a password of password

    Dave    = 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
     

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
    @@ -31,4 +31,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    1563 will map the container's port 1563 to port 1563 on the host

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    PUID=<yourUID> specify your UID
    PGID=<yourGID> specify your GID
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config this will store config on the docker host

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nntp2nntp /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nntp2nntp
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nntp2nntp
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nntp2nntp:latest

    Versions

    • 10.10.22: - Rebase to Alpine 3.15.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.04.19: - Multiarch builds and build from Github fork.
    • 15.05.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nntp2nntp /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nntp2nntp
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nntp2nntp
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nntp2nntp:latest

    Versions

    • 10.10.22: - Rebase to Alpine 3.15.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.04.19: - Multiarch builds and build from Github fork.
    • 15.05.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-nzbget/index.html b/images/docker-nzbget/index.html index 9713c0b006..2abd570e57 100644 --- a/images/docker-nzbget/index.html +++ b/images/docker-nzbget/index.html @@ -1,4 +1,4 @@ - nzbget - LinuxServer.io

    linuxserver/nzbget

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nzbget is a usenet downloader, written in C++ and designed with performance in mind to achieve maximum download speed by using very little system resources.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nzbget:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable nzbget releases
    testing nzbget pre-releases

    Application Setup

    Webui can be found at <your-ip>:6789 and the default login details (change ASAP) are

    login:nzbget, password:tegbzn6789

    To allow scheduling, from the webui set the time correction value in settings/logging.

    To change umask settings.

    scroll to bottom, set umask like this (example shown for unraid)

    You can add an additional mount point for intermediate unpacking folder with:-

    -v </path/to/intermedia_unpacking_folder>:/intermediate

    for example, and changing the setting for InterDir in the PATHS tab of settings to /intermediate

    Media folders

    We have set /downloads as a optional path, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + nzbget - LinuxServer.io       

    linuxserver/nzbget

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nzbget is a usenet downloader, written in C++ and designed with performance in mind to achieve maximum download speed by using very little system resources.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nzbget:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable nzbget releases
    testing nzbget pre-releases

    Application Setup

    Webui can be found at <your-ip>:6789 and the default login details (change ASAP) are

    login:nzbget, password:tegbzn6789

    To allow scheduling, from the webui set the time correction value in settings/logging.

    To change umask settings.

    scroll to bottom, set umask like this (example shown for unraid)

    You can add an additional mount point for intermediate unpacking folder with:-

    -v </path/to/intermedia_unpacking_folder>:/intermediate

    for example, and changing the setting for InterDir in the PATHS tab of settings to /intermediate

    Media folders

    We have set /downloads as a optional path, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       nzbget:
    @@ -31,4 +31,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    6789 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    NZBGET_USER=nzbget Specify the user for web authentication.
    NZBGET_PASS=tegbzn6789 Specify the password for web authentication.

    Volume Mappings (-v)

    Volume Function
    /config NZBGet App data.
    /downloads Location of downloads on disk.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nzbget /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nzbget
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nzbget
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nzbget:latest

    Versions

    • 27.11.22: - Advanced notice: This image will be deprecated on 2022-12-31. Please consider switching to SABnzbd https://github.com/linuxserver/docker-sabnzbd
    • 13.11.22: - Rebase master to 3.16, migrate to s6v3.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 22.02.22: - Rebase to alpine 3.15, add six and python 7zip tools, allow env variables for credentials.
    • 04.07.21: - Rebase to alpine 3.14.
    • 28.05.21: - Add linuxserver wheel index.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 26.10.20: - Fix python dependencies.
    • 24.08.20: - Fix ignored umask environment variable.
    • 08.06.20: - Symlink python3 bin to python.
    • 01.06.20: - Rebasing to alpine 3.12. Removing python2.
    • 13.05.20: - Add rarfile python package (for DeepUnrar).
    • 01.01.20: - Add python3 alongside python2 during transition.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 13.06.19: - Add apprise, chardet & pynzbget packages.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 25.02.19: - Rebasing to alpine 3.9.
    • 20.01.19: - Add pipeline logic and multi arch, build from source.
    • 21.08.18: - Rebase to alpine 3.8.
    • 20.02.18: - Add note about supplemental mount point for intermediate unpacking.
    • 13.12.17: - Rebase to alpine 3.7.
    • 02.09.17: - Place app in subfolder rather than /app.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 28.05.17: - Rebase to alpine 3.6.
    • 20.04.17: - Add testing branch.
    • 06.02.17: - Rebase to alpine 3.5.
    • 30.09.16: - Fix umask.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README, perms fix on /app to allow updates.
    • 19.08.16: - Rebase to alpine linux.
    • 18.08.15: - Now useing latest version of unrar beta and implements the universal installer method.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nzbget /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nzbget
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nzbget
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nzbget:latest

    Versions

    • 27.11.22: - Advanced notice: This image will be deprecated on 2022-12-31. Please consider switching to SABnzbd https://github.com/linuxserver/docker-sabnzbd
    • 13.11.22: - Rebase master to 3.16, migrate to s6v3.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 22.02.22: - Rebase to alpine 3.15, add six and python 7zip tools, allow env variables for credentials.
    • 04.07.21: - Rebase to alpine 3.14.
    • 28.05.21: - Add linuxserver wheel index.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 26.10.20: - Fix python dependencies.
    • 24.08.20: - Fix ignored umask environment variable.
    • 08.06.20: - Symlink python3 bin to python.
    • 01.06.20: - Rebasing to alpine 3.12. Removing python2.
    • 13.05.20: - Add rarfile python package (for DeepUnrar).
    • 01.01.20: - Add python3 alongside python2 during transition.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 13.06.19: - Add apprise, chardet & pynzbget packages.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 25.02.19: - Rebasing to alpine 3.9.
    • 20.01.19: - Add pipeline logic and multi arch, build from source.
    • 21.08.18: - Rebase to alpine 3.8.
    • 20.02.18: - Add note about supplemental mount point for intermediate unpacking.
    • 13.12.17: - Rebase to alpine 3.7.
    • 02.09.17: - Place app in subfolder rather than /app.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 28.05.17: - Rebase to alpine 3.6.
    • 20.04.17: - Add testing branch.
    • 06.02.17: - Rebase to alpine 3.5.
    • 30.09.16: - Fix umask.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README, perms fix on /app to allow updates.
    • 19.08.16: - Rebase to alpine linux.
    • 18.08.15: - Now useing latest version of unrar beta and implements the universal installer method.
    \ No newline at end of file diff --git a/images/docker-nzbhydra2/index.html b/images/docker-nzbhydra2/index.html index 028829ff9e..2408e1cf17 100644 --- a/images/docker-nzbhydra2/index.html +++ b/images/docker-nzbhydra2/index.html @@ -1,4 +1,4 @@ - nzbhydra2 - LinuxServer.io

    linuxserver/nzbhydra2

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nzbhydra2 is a meta search application for NZB indexers, the "spiritual successor" to NZBmegasearcH, and an evolution of the original application NZBHydra.

    It provides easy access to a number of raw and newznab based indexers. The application NZBHydra 2 is replacing NZBHydra 1 and supports migrating from V1. Be wary that there may be some compatibility issues for those migrating from V1 to V2, so ensure you back up your old configuration before moving over to the new version. NOTE: The last version that supports migration is linuxserver/nzbhydra2:v2.10.2-ls49

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nzbhydra2:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases
    dev Prereleases from their GitHub

    Application Setup

    The web interface is at <your ip>:5076 , to set up indexers and connections to your nzb download applications.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + nzbhydra2 - LinuxServer.io       

    linuxserver/nzbhydra2

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Nzbhydra2 is a meta search application for NZB indexers, the "spiritual successor" to NZBmegasearcH, and an evolution of the original application NZBHydra.

    It provides easy access to a number of raw and newznab based indexers. The application NZBHydra 2 is replacing NZBHydra 1 and supports migrating from V1. Be wary that there may be some compatibility issues for those migrating from V1 to V2, so ensure you back up your old configuration before moving over to the new version. NOTE: The last version that supports migration is linuxserver/nzbhydra2:v2.10.2-ls49

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/nzbhydra2:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases
    dev Prereleases from their GitHub

    Application Setup

    The web interface is at <your ip>:5076 , to set up indexers and connections to your nzb download applications.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       nzbhydra2:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    5076 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where nzbhydra2 should store config files.
    /downloads NZB download folder.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nzbhydra2 /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nzbhydra2
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nzbhydra2
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nzbhydra2:latest

    Versions

    • 11.09.22: - Migrate to s6v3.
    • 03.05.22: - Rebase to Jammy.
    • 18.04.22: - Rebase to Alpine 3.15.
    • 01.05.20: - Reorganize container, Relocate app to /app/nzbhydra2/bin, Create /app/nzbhydra2/package_info, Use nzbhydra2wrapperPy3.py from zip.
    • 14.04.20: - Correct Name, Hydra2 -> NZBHydra2.
    • 08.01.20: - Switch to python3.
    • 05.01.20: - Add dev tag for prereleases.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 18.08.18: - Bump java version to 10, (bionic currently refers to it as version 11).
    • 10.08.18: - Rebase to ubuntu bionic.
    • 15.04.18: - Change to port 5076 in the Dockerfile.
    • 11.01.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it nzbhydra2 /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f nzbhydra2
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' nzbhydra2
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/nzbhydra2:latest

    Versions

    • 11.09.22: - Migrate to s6v3.
    • 03.05.22: - Rebase to Jammy.
    • 18.04.22: - Rebase to Alpine 3.15.
    • 01.05.20: - Reorganize container, Relocate app to /app/nzbhydra2/bin, Create /app/nzbhydra2/package_info, Use nzbhydra2wrapperPy3.py from zip.
    • 14.04.20: - Correct Name, Hydra2 -> NZBHydra2.
    • 08.01.20: - Switch to python3.
    • 05.01.20: - Add dev tag for prereleases.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 18.08.18: - Bump java version to 10, (bionic currently refers to it as version 11).
    • 10.08.18: - Rebase to ubuntu bionic.
    • 15.04.18: - Change to port 5076 in the Dockerfile.
    • 11.01.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-ombi/index.html b/images/docker-ombi/index.html index ba95cc0e59..f5c3e078c6 100644 --- a/images/docker-ombi/index.html +++ b/images/docker-ombi/index.html @@ -1,4 +1,4 @@ - ombi - LinuxServer.io

    linuxserver/ombi

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ombi allows you to host your own Plex Request and user management system. If you are sharing your Plex server with other users, allow them to request new content using an easy to manage interface! Manage all your requests for Movies and TV with ease, leave notes for the user and get notification when a user requests something. Allow your users to post issues against their requests so you know there is a problem with the audio etc. Even automatically send them weekly newsletters of new content that has been added to your Plex server!

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ombi:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Ombi releases
    development Releases from the develop branch of Ombi

    Application Setup

    Access the webui at <your-ip>:3579. Follow the setup wizard on initial install. Then configure the required services.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + ombi - LinuxServer.io       

    linuxserver/ombi

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ombi allows you to host your own Plex Request and user management system. If you are sharing your Plex server with other users, allow them to request new content using an easy to manage interface! Manage all your requests for Movies and TV with ease, leave notes for the user and get notification when a user requests something. Allow your users to post issues against their requests so you know there is a problem with the audio etc. Even automatically send them weekly newsletters of new content that has been added to your Plex server!

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ombi:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Ombi releases
    development Releases from the develop branch of Ombi

    Application Setup

    Access the webui at <your-ip>:3579. Follow the setup wizard on initial install. Then configure the required services.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       ombi:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3579 web gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    BASE_URL=/ombi Subfolder can optionally be defined as an env variable for reverse proxies. Keep in mind that once this value is defined, the gui setting for base url no longer works. To use the gui setting, remove this env variable.

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ombi /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ombi
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ombi
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ombi:latest

    Versions

    • 11.09.22: - Migrate to s6v3.
    • 01.05.22: - Rebase to Jammy.
    • 26.04.21: - Update tarball name, allow for v4 builds in stable.
    • 18.01.21: - Update upstream repo. Deprecate v4-preview tag, which is merged to development tag upstream.
    • 14.04.20: - Add Ombi donate links.
    • 10.05.19: - Added an optional env variable for base url setting.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Clarify info on tags and development builds.
    • 25.01.19: - Add info on tags and development builds.
    • 09.01.19: - Switch to multi-arch builds and add aarch64 image.
    • 11.03.18: - Add HOME env to Dockerfile.
    • 05.03.18: - Switch to Ombi v3 stable based on .net core.
    • 26.01.18: - Fix continuation lines.
    • 16.04.17: - Switch to using inhouse mono baseimage.
    • 17.02.17: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ombi /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ombi
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ombi
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ombi:latest

    Versions

    • 11.09.22: - Migrate to s6v3.
    • 01.05.22: - Rebase to Jammy.
    • 26.04.21: - Update tarball name, allow for v4 builds in stable.
    • 18.01.21: - Update upstream repo. Deprecate v4-preview tag, which is merged to development tag upstream.
    • 14.04.20: - Add Ombi donate links.
    • 10.05.19: - Added an optional env variable for base url setting.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Clarify info on tags and development builds.
    • 25.01.19: - Add info on tags and development builds.
    • 09.01.19: - Switch to multi-arch builds and add aarch64 image.
    • 11.03.18: - Add HOME env to Dockerfile.
    • 05.03.18: - Switch to Ombi v3 stable based on .net core.
    • 26.01.18: - Fix continuation lines.
    • 16.04.17: - Switch to using inhouse mono baseimage.
    • 17.02.17: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-openssh-server/index.html b/images/docker-openssh-server/index.html index 820614a779..b4dc6aff11 100644 --- a/images/docker-openssh-server/index.html +++ b/images/docker-openssh-server/index.html @@ -1,4 +1,4 @@ - openssh-server - LinuxServer.io

    linuxserver/openssh-server

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Openssh-server is a sandboxed environment that allows ssh access without giving keys to the entire server. Giving ssh access via private key often means giving full access to the server. This container creates a limited and sandboxed environment that others can ssh into. The users only have access to the folders mapped and the processes running inside this container.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/openssh-server:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    If PUBLIC_KEY or PUBLIC_KEY_FILE, or PUBLIC_KEY_DIR variables are set, the specified keys will automatically be added to authorized_keys. If not, the keys can manually be added to /config/.ssh/authorized_keys and the container should be restarted. Removing PUBLIC_KEY or PUBLIC_KEY_FILE variables from docker run environment variables will not remove the keys from authorized_keys. PUBLIC_KEY_FILE and PUBLIC_KEY_DIR can be used with docker secrets.

    We provide the ability to set and allow password based access via the PASSWORD_ACCESS and USER_PASSWORD variables, though we as an organization discourage using password auth for public facing ssh endpoints.

    Connect to server via ssh -i /path/to/private/key -p PORT USER_NAME@SERVERIP

    Setting SUDO_ACCESS to true by itself will allow passwordless sudo. USER_PASSWORD and USER_PASSWORD_FILE allow setting an optional sudo password.

    The users only have access to the folders mapped and the processes running inside this container. Add any volume mappings you like for the users to have access to. To install packages or services for users to access, use the LinuxServer container customization methods described in this blog article.

    Sample use case is when a server admin would like to have automated incoming backups from a remote server to the local server, but they might not want all the other admins of the remote server to have full access to the local server. This container can be set up with a mounted folder for incoming backups, and rsync installed via LinuxServer container customization described above, so that the incoming backups can proceed, but remote server and its admins' access would be limited to the backup folder.

    It is also possible to run multiple copies of this container with different ports mapped, different folders mounted and access to different private keys for compartmentalized access.

    TIPS

    You can volume map your own text file to /etc/motd to override the message displayed upon connection. You can optionally set the docker argument hostname

    Key Generation

    This container has a helper script to generate an ssh private/public key. In order to generate a key please run:

    docker run --rm -it --entrypoint /keygen.sh linuxserver/openssh-server
    + openssh-server - LinuxServer.io       

    linuxserver/openssh-server

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Openssh-server is a sandboxed environment that allows ssh access without giving keys to the entire server. Giving ssh access via private key often means giving full access to the server. This container creates a limited and sandboxed environment that others can ssh into. The users only have access to the folders mapped and the processes running inside this container.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/openssh-server:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    If PUBLIC_KEY or PUBLIC_KEY_FILE, or PUBLIC_KEY_DIR variables are set, the specified keys will automatically be added to authorized_keys. If not, the keys can manually be added to /config/.ssh/authorized_keys and the container should be restarted. Removing PUBLIC_KEY or PUBLIC_KEY_FILE variables from docker run environment variables will not remove the keys from authorized_keys. PUBLIC_KEY_FILE and PUBLIC_KEY_DIR can be used with docker secrets.

    We provide the ability to set and allow password based access via the PASSWORD_ACCESS and USER_PASSWORD variables, though we as an organization discourage using password auth for public facing ssh endpoints.

    Connect to server via ssh -i /path/to/private/key -p PORT USER_NAME@SERVERIP

    Setting SUDO_ACCESS to true by itself will allow passwordless sudo. USER_PASSWORD and USER_PASSWORD_FILE allow setting an optional sudo password.

    The users only have access to the folders mapped and the processes running inside this container. Add any volume mappings you like for the users to have access to. To install packages or services for users to access, use the LinuxServer container customization methods described in this blog article.

    Sample use case is when a server admin would like to have automated incoming backups from a remote server to the local server, but they might not want all the other admins of the remote server to have full access to the local server. This container can be set up with a mounted folder for incoming backups, and rsync installed via LinuxServer container customization described above, so that the incoming backups can proceed, but remote server and its admins' access would be limited to the backup folder.

    It is also possible to run multiple copies of this container with different ports mapped, different folders mounted and access to different private keys for compartmentalized access.

    TIPS

    You can volume map your own text file to /etc/motd to override the message displayed upon connection. You can optionally set the docker argument hostname

    Key Generation

    This container has a helper script to generate an ssh private/public key. In order to generate a key please run:

    docker run --rm -it --entrypoint /keygen.sh linuxserver/openssh-server
     

    Then simply follow the prompts. The keys generated by this script are only displayed on your console output, so make sure to save them somewhere after generation.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
    @@ -46,4 +46,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    2222 ssh port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    PUBLIC_KEY=yourpublickey Optional ssh public key, which will automatically be added to authorized_keys.
    PUBLIC_KEY_FILE=/path/to/file Optionally specify a file containing the public key (works with docker secrets).
    PUBLIC_KEY_DIR=/path/to/directory/containing/_only_/pubkeys Optionally specify a directory containing the public keys (works with docker secrets).
    PUBLIC_KEY_URL=https://github.com/username.keys Optionally specify a URL containing the public key.
    SUDO_ACCESS=false Set to true to allow linuxserver.io, the ssh user, sudo access. Without USER_PASSWORD set, this will allow passwordless sudo access.
    PASSWORD_ACCESS=false Set to true to allow user/password ssh access. You will want to set USER_PASSWORD or USER_PASSWORD_FILE as well.
    USER_PASSWORD=password Optionally set a sudo password for linuxserver.io, the ssh user. If this or USER_PASSWORD_FILE are not set but SUDO_ACCESS is set to true, the user will have passwordless sudo access.
    USER_PASSWORD_FILE=/path/to/file Optionally specify a file that contains the password. This setting supersedes the USER_PASSWORD option (works with docker secrets).
    USER_NAME=linuxserver.io Optionally specify a user name (Default:linuxserver.io)

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function
    --hostname= Optionally the hostname can be defined.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it openssh-server /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f openssh-server
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' openssh-server
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/openssh-server:latest

    Versions

    • 18.10.22: - Fix wrong behavior of password/passwordless sudo
    • 11.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 15.09.22: - add netcat-openbsd with support for proxies.
    • 18.07.22: - Fix service perms to comply with upgrade to s6 v3.
    • 16.04.22: - Rebase to alpine 3.15.
    • 16.11.21: - Add PUBLIC_KEY_URL option
    • 28.06.21: - Rebasing to alpine 3.14. Add support for PAM.
    • 10.02.21: - Rebasing to alpine 3.13. Add openssh-client for scp.
    • 21.10.20: - Implement s6-log for openssh, which adds local timestamps to logs and can be used with a log parser like fail2ban.
    • 20.10.20: - Set umask for sftp.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 18.01.20: - Add key generation script.
    • 13.01.20: - Add openssh-sftp-server.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 17.10.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it openssh-server /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f openssh-server
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' openssh-server
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/openssh-server:latest

    Versions

    • 18.10.22: - Fix wrong behavior of password/passwordless sudo
    • 11.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 15.09.22: - add netcat-openbsd with support for proxies.
    • 18.07.22: - Fix service perms to comply with upgrade to s6 v3.
    • 16.04.22: - Rebase to alpine 3.15.
    • 16.11.21: - Add PUBLIC_KEY_URL option
    • 28.06.21: - Rebasing to alpine 3.14. Add support for PAM.
    • 10.02.21: - Rebasing to alpine 3.13. Add openssh-client for scp.
    • 21.10.20: - Implement s6-log for openssh, which adds local timestamps to logs and can be used with a log parser like fail2ban.
    • 20.10.20: - Set umask for sftp.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 18.01.20: - Add key generation script.
    • 13.01.20: - Add openssh-sftp-server.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 17.10.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-openvpn-as/index.html b/images/docker-openvpn-as/index.html index 01e473b111..932dc3d689 100644 --- a/images/docker-openvpn-as/index.html +++ b/images/docker-openvpn-as/index.html @@ -1,4 +1,4 @@ - openvpn-as - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend our wireguard image instead for vpn: https://github.com/linuxserver/docker-wireguard

    linuxserver/openvpn-as

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Openvpn-as is a full featured secure network tunneling VPN software solution that integrates OpenVPN server capabilities, enterprise management capabilities, simplified OpenVPN Connect UI, and OpenVPN Client software packages that accommodate Windows, MAC, Linux, Android, and iOS environments. OpenVPN Access Server supports a wide range of configurations, including secure and granular remote access to internal network and/ or private cloud network resources and applications with fine-grained access control.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/openvpn-as should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 latest

    Version Tags

    This image provides various versions that are available via tags. latest tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.

    Tag Description
    latest DEPRECATED, no longer updated - Stable releases based on ubuntu bionic
    xenial DEPRECATED, no longer updated - Stable releases based on ubuntu xenial

    Application Setup

    The admin interface is available at https://DOCKER-HOST-IP:943/admin (assuming bridge mode) with a default user/password of admin/password

    During first login, make sure that the "Authentication" in the webui is set to "Local" instead of "PAM". Then set up the user accounts with their passwords (user accounts created under PAM do not survive container update or recreation).

    The "admin" account is a system (PAM) account and after container update or recreation, its password reverts back to the default. It is highly recommended to block this user's access for security reasons: 1) Create another user and set as an admin, 2) Log in as the new user, 3) Delete the "admin" user in the gui, 4) Modify the as.conf file under config/etc and replace the line boot_pam_users.0=admin with ~~#boot_pam_users.0=admin~~ boot_pam_users.0=kjhvkhv (this only has to be done once and will survive container recreation)
    * IMPORTANT NOTE: Commenting out the first pam user in as.conf creates issues in 2.7.5. To make it work while still blocking pam user access, uncomment that line and change admin to a random nonexistent user as described above.

    To ensure your devices can connect to your VPN properly, goto Configuration -> Network Settings -> and change the "Hostname or IP Address" section to either your domain name or public ip address.

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
    + openvpn-as - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend our wireguard image instead for vpn: https://github.com/linuxserver/docker-wireguard

    linuxserver/openvpn-as

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Openvpn-as is a full featured secure network tunneling VPN software solution that integrates OpenVPN server capabilities, enterprise management capabilities, simplified OpenVPN Connect UI, and OpenVPN Client software packages that accommodate Windows, MAC, Linux, Android, and iOS environments. OpenVPN Access Server supports a wide range of configurations, including secure and granular remote access to internal network and/ or private cloud network resources and applications with fine-grained access control.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/openvpn-as should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 latest

    Version Tags

    This image provides various versions that are available via tags. latest tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.

    Tag Description
    latest DEPRECATED, no longer updated - Stable releases based on ubuntu bionic
    xenial DEPRECATED, no longer updated - Stable releases based on ubuntu xenial

    Application Setup

    The admin interface is available at https://DOCKER-HOST-IP:943/admin (assuming bridge mode) with a default user/password of admin/password

    During first login, make sure that the "Authentication" in the webui is set to "Local" instead of "PAM". Then set up the user accounts with their passwords (user accounts created under PAM do not survive container update or recreation).

    The "admin" account is a system (PAM) account and after container update or recreation, its password reverts back to the default. It is highly recommended to block this user's access for security reasons: 1) Create another user and set as an admin, 2) Log in as the new user, 3) Delete the "admin" user in the gui, 4) Modify the as.conf file under config/etc and replace the line boot_pam_users.0=admin with ~~#boot_pam_users.0=admin~~ boot_pam_users.0=kjhvkhv (this only has to be done once and will survive container recreation)
    * IMPORTANT NOTE: Commenting out the first pam user in as.conf creates issues in 2.7.5. To make it work while still blocking pam user access, uncomment that line and change admin to a random nonexistent user as described above.

    To ensure your devices can connect to your VPN properly, goto Configuration -> Network Settings -> and change the "Hostname or IP Address" section to either your domain name or public ip address.

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
     version: "2.1"
     services:
       openvpn-as:
    @@ -34,4 +34,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    943 Admin GUI port.
    9443 TCP port.
    1194/udp UDP port.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    INTERFACE=eth0 With bridge networking, leave it as eth0 (or don't include at all), if host or macvlan, set it to your host's network interface, found by running ifconfig

    Volume Mappings (-v)

    Volume Function
    /config Where openvpn-as should store configuration files.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it openvpn-as /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f openvpn-as
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' openvpn-as
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/openvpn-as

    Versions

    • 15.06.20: - Deprecate.
    • 15.06.20: - Add fixes for 2.9.0.
    • 04.11.20: - xenial tag is deprecated and there will be no further releases for that tag.
    • 22.06.20: - Added Support for persistent Customization Folders.
    • 26.03.20: - Switch to using the openvpn-as repo for packages.
    • 29.08.19: - Update Application Setup instructions in readme to fix 2.7.5 login issue for existing users.
    • 27.08.19: - Add new clients package to install and upgrade process.
    • 22.08.19: - Prevent auto-start of openvpn after first time install, before configuration is completed.
    • 25.07.19: - Create a xenial branch/tag and rebase master/latest to bionic.
    • 07.04.19: - Fix first time config.
    • 03.04.19: - Big rewrite of the install and update logic of openvpn-as to fix breaking changes (should fix updating from 2.6.1 to 2.7.3), added mysql-client for cluster support.
    • 14.03.19: - Update deb package URL.
    • 21.02.19: - Rebase to xenial due to incompatibility issues on some older host OSes.
    • 12.02.19: - Rename github repo to match the docker hub repo and container name.
    • 07.02.19: - Add pipeline logic and multi arch.
    • 31.01.19: - Add port mappings to docker create sample in readme.
    • 26.01.19: - Removed privileged and host networking requirements, added cap-add=NET_ADMIN requirement instead. INTERFACE no longer needs to be defined as in bridge mode, it will use the container's eth0 interface by default.
    • 19.12.18: - Bump to version 2.6.1.
    • 10.07.18: - Bump to version 2.5.2.
    • 23.03.18: - Bump to version 2.5.
    • 14.12.17: - Consolidate layers and fix continuation lines.
    • 25.10.17: - Bump to version 2.1.12.
    • 18.08.17: - Switch default authentication method to local, update readme on how to deactivate the admin user.
    • 31.07.17: - Fix updates of existing openvpn-as installs.
    • 07.07.17: - Bump to version 2.1.9.
    • 31.10.16: - Bump to version 2.1.4.
    • 14.10.16: - Add version layer information.
    • 13.09.16: - Rebuild due to push error to hub on last build.
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 01.08.16: - Rebase to xenial.
    • 18.09.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it openvpn-as /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f openvpn-as
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' openvpn-as
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/openvpn-as

    Versions

    • 15.06.20: - Deprecate.
    • 15.06.20: - Add fixes for 2.9.0.
    • 04.11.20: - xenial tag is deprecated and there will be no further releases for that tag.
    • 22.06.20: - Added Support for persistent Customization Folders.
    • 26.03.20: - Switch to using the openvpn-as repo for packages.
    • 29.08.19: - Update Application Setup instructions in readme to fix 2.7.5 login issue for existing users.
    • 27.08.19: - Add new clients package to install and upgrade process.
    • 22.08.19: - Prevent auto-start of openvpn after first time install, before configuration is completed.
    • 25.07.19: - Create a xenial branch/tag and rebase master/latest to bionic.
    • 07.04.19: - Fix first time config.
    • 03.04.19: - Big rewrite of the install and update logic of openvpn-as to fix breaking changes (should fix updating from 2.6.1 to 2.7.3), added mysql-client for cluster support.
    • 14.03.19: - Update deb package URL.
    • 21.02.19: - Rebase to xenial due to incompatibility issues on some older host OSes.
    • 12.02.19: - Rename github repo to match the docker hub repo and container name.
    • 07.02.19: - Add pipeline logic and multi arch.
    • 31.01.19: - Add port mappings to docker create sample in readme.
    • 26.01.19: - Removed privileged and host networking requirements, added cap-add=NET_ADMIN requirement instead. INTERFACE no longer needs to be defined as in bridge mode, it will use the container's eth0 interface by default.
    • 19.12.18: - Bump to version 2.6.1.
    • 10.07.18: - Bump to version 2.5.2.
    • 23.03.18: - Bump to version 2.5.
    • 14.12.17: - Consolidate layers and fix continuation lines.
    • 25.10.17: - Bump to version 2.1.12.
    • 18.08.17: - Switch default authentication method to local, update readme on how to deactivate the admin user.
    • 31.07.17: - Fix updates of existing openvpn-as installs.
    • 07.07.17: - Bump to version 2.1.9.
    • 31.10.16: - Bump to version 2.1.4.
    • 14.10.16: - Add version layer information.
    • 13.09.16: - Rebuild due to push error to hub on last build.
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 01.08.16: - Rebase to xenial.
    • 18.09.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-openvscode-server/index.html b/images/docker-openvscode-server/index.html index 5450ec9ccb..879401c470 100644 --- a/images/docker-openvscode-server/index.html +++ b/images/docker-openvscode-server/index.html @@ -1,4 +1,4 @@ - openvscode-server - LinuxServer.io

    linuxserver/openvscode-server

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Openvscode-server provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/openvscode-server:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases
    insiders Insiders releases

    Application Setup

    If CONNECTION_TOKEN or CONNECTION_SECRET env vars are set, you can access the webui at http://<your-ip>:3000/?tkn=supersecrettoken (replace supersecrettoken with the value set). If not, you can access the webui at http://<your-ip>:3000.

    For github integration, drop your ssh key in to /config/.ssh. Then open a terminal from the top menu and set your github username and email via the following commands

    git config --global user.name "username"
    + openvscode-server - LinuxServer.io       

    linuxserver/openvscode-server

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Openvscode-server provides a version of VS Code that runs a server on a remote machine and allows access through a modern web browser.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/openvscode-server:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases
    insiders Insiders releases

    Application Setup

    If CONNECTION_TOKEN or CONNECTION_SECRET env vars are set, you can access the webui at http://<your-ip>:3000/?tkn=supersecrettoken (replace supersecrettoken with the value set). If not, you can access the webui at http://<your-ip>:3000.

    For github integration, drop your ssh key in to /config/.ssh. Then open a terminal from the top menu and set your github username and email via the following commands

    git config --global user.name "username"
     git config --global user.email "email address"
     

    When reverse proxied through SWAG, custom services running on specific ports inside openvscode-server can be accessed at https://PORT.openvscode-server.domain.com very much like how code-server's port proxy function is handled. For that, a wildcard CNAME *.openvscode-server.domain.com needs to be created and the SWAG cert needs to cover those subdomains.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
    @@ -35,4 +35,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Web UI port.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use.
    CONNECTION_TOKEN= Optional security token for accessing the Web UI (ie. supersecrettoken).
    CONNECTION_SECRET= Optional path to a file inside the container that contains the security token for accessing the Web UI (ie. /path/to/file). Overrides CONNECTION_TOKEN.
    SUDO_PASSWORD=password If this optional variable is set, user will have sudo access in the openvscode-server terminal with the specified password.
    SUDO_PASSWORD_HASH= Optionally set sudo password via hash (takes priority over SUDO_PASSWORD var). Format is $type$salt$hashed.

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it openvscode-server /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f openvscode-server
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' openvscode-server
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/openvscode-server:latest

    Versions

    • 29.09.22: - Rebase to jammy, switch to s6v3. Fix chown logic to skip /config/workspace contents.
    • 12.02.22: - Update install-extension helper to compensate for upstream changes.
    • 04.02.22: - Update binary for 1.64.0+. Allow for no token set when both toekn env vars are unset. Add libsecret for keytar.
    • 29.12.21: - Add install-extension as a helper for mods to install extensions.
    • 10.12.21: - Update deprecated connectionToken arg.
    • 30.11.21: - Fix app folder permissions, add the optional sudo password vars.
    • 29.11.21: - Create .profile and .bashrc for the user.
    • 29.11.21: - Release insiders tag.
    • 28.11.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it openvscode-server /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f openvscode-server
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' openvscode-server
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/openvscode-server:latest

    Versions

    • 29.09.22: - Rebase to jammy, switch to s6v3. Fix chown logic to skip /config/workspace contents.
    • 12.02.22: - Update install-extension helper to compensate for upstream changes.
    • 04.02.22: - Update binary for 1.64.0+. Allow for no token set when both toekn env vars are unset. Add libsecret for keytar.
    • 29.12.21: - Add install-extension as a helper for mods to install extensions.
    • 10.12.21: - Update deprecated connectionToken arg.
    • 30.11.21: - Fix app folder permissions, add the optional sudo password vars.
    • 29.11.21: - Create .profile and .bashrc for the user.
    • 29.11.21: - Release insiders tag.
    • 28.11.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-organizr/index.html b/images/docker-organizr/index.html index 91c97c5298..bb8657da31 100644 --- a/images/docker-organizr/index.html +++ b/images/docker-organizr/index.html @@ -1,4 +1,4 @@ - [linuxserver/organizr](https://github.com/linuxserver/docker-organizr) - LinuxServer.io

    linuxserver/organizr

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    THIS IMAGE IS DEPRECATED. Please use the official image at https://hub.docker.com/r/organizr/organizr

    Organizr is a HTPC/Homelab Services Organizer - Written in PHP

    Do you have quite a bit of services running on your computer or server? Do you have a lot of bookmarks or have to memorize a bunch of ip's and ports? Well, Organizr is here to help with that. Organizr allows you to setup "Tabs" that will be loaded all in one webpage. You can then work on your server with ease. You can even open up two tabs side by side. Want to give users access to some Tabs? No problem, just enable user support and have them make an account. Want guests to be able to visit too? Enable Guest support for those tabs.

    For more information on Organizr and information on how to use it visit their site at https://github.com/causefx/Organizr

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/organizr should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
    + [linuxserver/organizr](https://github.com/linuxserver/docker-organizr) - LinuxServer.io       

    linuxserver/organizr

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    THIS IMAGE IS DEPRECATED. Please use the official image at https://hub.docker.com/r/organizr/organizr

    Organizr is a HTPC/Homelab Services Organizer - Written in PHP

    Do you have quite a bit of services running on your computer or server? Do you have a lot of bookmarks or have to memorize a bunch of ip's and ports? Well, Organizr is here to help with that. Organizr allows you to setup "Tabs" that will be loaded all in one webpage. You can then work on your server with ease. You can even open up two tabs side by side. Want to give users access to some Tabs? No problem, just enable user support and have them make an account. Want guests to be able to visit too? Enable Guest support for those tabs.

    For more information on Organizr and information on how to use it visit their site at https://github.com/causefx/Organizr

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/organizr should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
     version: "2.1"
     services:
       organizr:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 will map the container's port 80 to port 9983 on the host

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=<your timezone, eg Europe/London> for specifying your timezone

    Volume Mappings (-v)

    Volume Function
    /config this is where your user data and logs will live

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    Dead simple to get running, create the container as instructed and start it. When up and running, load the site.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it organizr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f organizr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' organizr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/organizr

    Versions

    • 18.04.19: - Fix new install not working.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 26.02.19: - Upgrade packages during install to prevent mismatch with baseimage.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Fix permissions on new app location
    • 31.12.18: - Moved to pipeline building from v1-master branch
    • 05.09.18: - Rebase to Alpine 3.8
    • 10.01.18: - Rebase to Alpine 3.7
    • 25.05.17: - Rebase to Alpine 3.6
    • 02.05.17: - Added php7-curl package
    • 12.04.17: - Added php7-ldap package
    • 10.03.18: - Initial Release.
    \ No newline at end of file +

    Application Setup

    Dead simple to get running, create the container as instructed and start it. When up and running, load the site.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it organizr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f organizr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' organizr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/organizr

    Versions

    • 18.04.19: - Fix new install not working.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 26.02.19: - Upgrade packages during install to prevent mismatch with baseimage.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 11.02.19: - Fix permissions on new app location
    • 31.12.18: - Moved to pipeline building from v1-master branch
    • 05.09.18: - Rebase to Alpine 3.8
    • 10.01.18: - Rebase to Alpine 3.7
    • 25.05.17: - Rebase to Alpine 3.6
    • 02.05.17: - Added php7-curl package
    • 12.04.17: - Added php7-ldap package
    • 10.03.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-oscam/index.html b/images/docker-oscam/index.html index 04a3cc2c08..961c6cffd0 100644 --- a/images/docker-oscam/index.html +++ b/images/docker-oscam/index.html @@ -1,4 +1,4 @@ - oscam - LinuxServer.io

    linuxserver/oscam

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Oscam is an Open Source Conditional Access Module software used for descrambling DVB transmissions using smart cards. It's both a server and a client.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/oscam:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    To set up oscam there are numerous guides on the internet. There are too many scenarios to make a quick guide. The web interface is at port 8888.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + oscam - LinuxServer.io       

    linuxserver/oscam

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Oscam is an Open Source Conditional Access Module software used for descrambling DVB transmissions using smart cards. It's both a server and a client.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/oscam:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    To set up oscam there are numerous guides on the internet. There are too many scenarios to make a quick guide. The web interface is at port 8888.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       oscam:
    @@ -28,4 +28,4 @@ services:
     

    Passing through Smart Card Readers

    If you want to pass through a smart card reader, you need to specify the reader with the --device= tag. The method used depends on how the reader is recognized. The first is /dev/ttyUSBX. To find the correct device, connect the reader and run dmesg | tail on the host. In the output you will find /dev/ttyUSBX, where X is the number of the device. If this is the first reader you connect to your host, it will be /dev/ttyUSB0. If you add one more it will be /dev/ttyUSB1.

    If there are no /dev/ttyUSBX device in dmesg | tail, you have to use the USB bus path. It will look similar to the below.

    /dev/bus/usb/001/001

    The important parts are the two numbers in the end. The first one is the Bus number, the second is the Device number. To find the Bus and Device number you have to run lsusb on the host, then find your USB device in the list and note the Bus and Device numbers.

    Here is an example of how to find the Bus and Device. The output of the lsusb command is below.

    Bus 002 Device 005: ID 076b:6622 OmniKey AG CardMan 6121

    The first number, the Bus, is 002. The second number, the Device, is 005. This will look like below in the --device= tag.

    --device=/dev/bus/usb/002/005

    If you have multiple smart card readers, you add one --device= tag for each reader.

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8888 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where oscam should store config files and logs.

    Device Mappings (--device)

    Parameter Function
    /dev/ttyUSB0 For passing through smart card readers.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it oscam /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f oscam
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' oscam
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/oscam:latest

    Versions

    • 03.11.22: - Rebasing to alpine 3.16 and s6v3. Update pcsd driver link.
    • 13.02.22: - Rebasing to alpine 3.15.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 29.04.19: - Add revision check, so pipeline can build new revisions.
    • 28.04.19: - Switch back to streamboard svn to fix version not showing in UI.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 19.02.19: - Add pipeline logic and multi arch, rebase to Alpine 3.8.
    • 03.01.18: - Deprecate cpu_core routine lack of scaling.
    • 13.12.17: - Rebase to alpine 3.7.
    • 19.10.17: - Add ccid package for usb card readers.
    • 17.10.17: - Switch to using bzr for source code, streamboard awol.
    • 28.05.17: - Rebase to alpine 3.6.
    • 09.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 02.10.16: - Add info on passing through devices to README.
    • 25.09.16: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it oscam /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f oscam
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' oscam
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/oscam:latest

    Versions

    • 03.11.22: - Rebasing to alpine 3.16 and s6v3. Update pcsd driver link.
    • 13.02.22: - Rebasing to alpine 3.15.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 29.04.19: - Add revision check, so pipeline can build new revisions.
    • 28.04.19: - Switch back to streamboard svn to fix version not showing in UI.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 19.02.19: - Add pipeline logic and multi arch, rebase to Alpine 3.8.
    • 03.01.18: - Deprecate cpu_core routine lack of scaling.
    • 13.12.17: - Rebase to alpine 3.7.
    • 19.10.17: - Add ccid package for usb card readers.
    • 17.10.17: - Switch to using bzr for source code, streamboard awol.
    • 28.05.17: - Rebase to alpine 3.6.
    • 09.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 02.10.16: - Add info on passing through devices to README.
    • 25.09.16: - Initial release.
    \ No newline at end of file diff --git a/images/docker-overseerr/index.html b/images/docker-overseerr/index.html index b9bedd990d..b646112094 100644 --- a/images/docker-overseerr/index.html +++ b/images/docker-overseerr/index.html @@ -1,4 +1,4 @@ - overseerr - LinuxServer.io

    linuxserver/overseerr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Overseerr is a request management and media discovery tool built to work with your existing Plex ecosystem.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/overseerr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases from GitHub
    develop Development releases from commits in upstream develop branch

    Application Setup

    Access the webui at <your-ip>:5055, for more information check out Overseerr.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + overseerr - LinuxServer.io       

    linuxserver/overseerr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Overseerr is a request management and media discovery tool built to work with your existing Plex ecosystem.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/overseerr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases from GitHub
    develop Development releases from commits in upstream develop branch

    Application Setup

    Access the webui at <your-ip>:5055, for more information check out Overseerr.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       overseerr:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    5055 Port for Overseerr's web interface.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it overseerr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f overseerr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' overseerr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/overseerr:latest

    Versions

    • 27.10.22: - Rebase main to 3.16, migrate to s6v3.
    • 20.08.22: - Don't install cypress.
    • 01.04.22: - Rebase main branch to Alpine 3.15.
    • 27.01.22: - Rebase develop branch to Alpine 3.15.
    • 04.01.22: - Remove cached files.
    • 10.10.21: - Add additional post-build cleanup.
    • 19.09.21: - Rebase to alpine 3.14. Update code formatting. Increase js mem limit.
    • 05.04.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it overseerr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f overseerr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' overseerr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/overseerr:latest

    Versions

    • 27.10.22: - Rebase main to 3.16, migrate to s6v3.
    • 20.08.22: - Don't install cypress.
    • 01.04.22: - Rebase main branch to Alpine 3.15.
    • 27.01.22: - Rebase develop branch to Alpine 3.15.
    • 04.01.22: - Remove cached files.
    • 10.10.21: - Add additional post-build cleanup.
    • 19.09.21: - Rebase to alpine 3.14. Update code formatting. Increase js mem limit.
    • 05.04.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-paperless-ng/index.html b/images/docker-paperless-ng/index.html index ed2d0de84e..bd27e152c0 100644 --- a/images/docker-paperless-ng/index.html +++ b/images/docker-paperless-ng/index.html @@ -1,4 +1,4 @@ - paperless-ng - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend switching to the new official container: https://github.com/paperless-ngx/paperless-ngx

    linuxserver/paperless-ng

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Paperless-ng is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents."

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/paperless-ng:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Default login is admin:admin via the webui, accessible at http://SERVERIP:PORT More info at paperless-ng. For convenience this container provides an alias to perform administration management commands. Available administration commands are documented upstream here and can be accessed with this container thus: docker exec -it <container_name> manage <command>. For example, docker exec -it paperless manage document_retagger -tT.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + paperless-ng - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend switching to the new official container: https://github.com/paperless-ngx/paperless-ngx

    linuxserver/paperless-ng

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Paperless-ng is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents."

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/paperless-ng:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Default login is admin:admin via the webui, accessible at http://SERVERIP:PORT More info at paperless-ng. For convenience this container provides an alias to perform administration management commands. Available administration commands are documented upstream here and can be accessed with this container thus: docker exec -it <container_name> manage <command>. For example, docker exec -it paperless manage document_retagger -tT.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       paperless-ng:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 http gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York
    REDIS_URL= Specify an external redis instance to use. Can optionally include a port (redis:6379) and/or db (redis/foo). If left blank or not included, will use a built-in redis instance. If changed after initial setup will also require manual modification of /config/settings.py

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.
    /data Storage location for all paperless-ng data files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it paperless-ng /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f paperless-ng
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' paperless-ng
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/paperless-ng:latest

    Versions

    • 05.09.22: - Deprecate.
    • 30.11.21: - Added in jbig2enc.
    • 07.10.21: - Fixed variable that determins if we should run redis locally.
    • 01.10.21: - Replaced uwsgi with gunicorn due to websocket issues.
    • 24.07.21: - Fixed directory config files (sqlite db) is all stored.
    • 23.07.21: - Fixed initial user creation.
    • 10.07.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it paperless-ng /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f paperless-ng
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' paperless-ng
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/paperless-ng:latest

    Versions

    • 05.09.22: - Deprecate.
    • 30.11.21: - Added in jbig2enc.
    • 07.10.21: - Fixed variable that determins if we should run redis locally.
    • 01.10.21: - Replaced uwsgi with gunicorn due to websocket issues.
    • 24.07.21: - Fixed directory config files (sqlite db) is all stored.
    • 23.07.21: - Fixed initial user creation.
    • 10.07.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-paperless-ngx/index.html b/images/docker-paperless-ngx/index.html index 18d756cca1..055edbd62a 100644 --- a/images/docker-paperless-ngx/index.html +++ b/images/docker-paperless-ngx/index.html @@ -1,4 +1,4 @@ - paperless-ngx - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend switching to the new official container: https://github.com/paperless-ngx/paperless-ngx

    linuxserver/paperless-ngx

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Paperless-ngx is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents."

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/paperless-ngx:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Default login is admin:admin via the webui, accessible at http://SERVERIP:PORT More info at paperless-ngx. For convenience this container provides an alias to perform administration management commands. Available administration commands are documented upstream here and can be accessed with this container thus: docker exec -it <container_name> manage <command>. For example, docker exec -it paperless manage document_retagger -tT.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + paperless-ngx - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend switching to the new official container: https://github.com/paperless-ngx/paperless-ngx

    linuxserver/paperless-ngx

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Paperless-ngx is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents."

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/paperless-ngx:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Default login is admin:admin via the webui, accessible at http://SERVERIP:PORT More info at paperless-ngx. For convenience this container provides an alias to perform administration management commands. Available administration commands are documented upstream here and can be accessed with this container thus: docker exec -it <container_name> manage <command>. For example, docker exec -it paperless manage document_retagger -tT.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       paperless-ngx:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 http gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York
    REDIS_URL= Specify an external redis instance to use. Can optionally include a port (redis:6379) and/or db (redis/foo). If left blank or not included, will use a built-in redis instance. If changed after initial setup will also require manual modification of /config/settings.py

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.
    /data Storage location for all paperless-ngx data files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it paperless-ngx /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f paperless-ngx
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' paperless-ngx
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/paperless-ngx:latest

    Versions

    • 05.09.22: - Deprecate.
    • 16.05.22: - Add correct libqpdf.so to arm builds.
    • 14.05.22: - Fine tune disabling of redis.
    • 12.05.22: - Move migrations to after multilangocr mod. Fix disabling of redis. Add missing dep for postgresql.
    • 12.05.22: - Utilize lsio wheel for pikepdf.
    • 11.05.22: - Update upstream artifact name and utilize lsio wheels for scipy and scikit-learn.
    • 05.05.22: - Add runtime dependencies libxslt1.1 for armhf
    • 30.04.22: - Add runtime dependencies lizbar and poppler-utils
    • 27.04.22: - Add build-dependencies for arm32 builds.
    • 11.04.22: - Replaced uwsgi with gunicorn due to websocket issues.
    • 11.03.22: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it paperless-ngx /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f paperless-ngx
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' paperless-ngx
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/paperless-ngx:latest

    Versions

    • 05.09.22: - Deprecate.
    • 16.05.22: - Add correct libqpdf.so to arm builds.
    • 14.05.22: - Fine tune disabling of redis.
    • 12.05.22: - Move migrations to after multilangocr mod. Fix disabling of redis. Add missing dep for postgresql.
    • 12.05.22: - Utilize lsio wheel for pikepdf.
    • 11.05.22: - Update upstream artifact name and utilize lsio wheels for scipy and scikit-learn.
    • 05.05.22: - Add runtime dependencies libxslt1.1 for armhf
    • 30.04.22: - Add runtime dependencies lizbar and poppler-utils
    • 27.04.22: - Add build-dependencies for arm32 builds.
    • 11.04.22: - Replaced uwsgi with gunicorn due to websocket issues.
    • 11.03.22: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-papermerge/index.html b/images/docker-papermerge/index.html index 8fd626c5b4..aafae499b9 100644 --- a/images/docker-papermerge/index.html +++ b/images/docker-papermerge/index.html @@ -1,4 +1,4 @@ - papermerge - LinuxServer.io

    linuxserver/papermerge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Papermerge is an open source document management system (DMS) primarily designed for archiving and retrieving your digital documents. Instead of having piles of paper documents all over your desk, office or drawers - you can quickly scan them and configure your scanner to directly upload to Papermerge DMS."

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/papermerge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Default login is admin:admin via the webui, accessible at http://SERVERIP:PORT More info at papermerge.

    If you need non-English OCR language support, you can use this mod.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + papermerge - LinuxServer.io       

    linuxserver/papermerge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Papermerge is an open source document management system (DMS) primarily designed for archiving and retrieving your digital documents. Instead of having piles of paper documents all over your desk, office or drawers - you can quickly scan them and configure your scanner to directly upload to Papermerge DMS."

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/papermerge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Default login is admin:admin via the webui, accessible at http://SERVERIP:PORT More info at papermerge.

    If you need non-English OCR language support, you can use this mod.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       papermerge:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 http gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York
    REDIS_URL= Specify an external redis instance to use. Can optionally include a port (redis:6379) and/or db (redis/foo). If left blank or not included, will use a built-in redis instance. If changed after initial setup will also require manual modification of /config/settings.py

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.
    /data Storage location for all papermerge data files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it papermerge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f papermerge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' papermerge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/papermerge:latest

    Versions

    • 15.07.22: - Don't install development python packages
    • 13.04.21: - Handle upstream stapler change
    • 13.03.21: - Fixed mglib dependency per issue 32
    • 25.02.21: - Updated dependencies for v2
    • 07.02.21: - Support external MySQL/PSQL DBs.
    • 01.02.21: - Add redis.
    • 09.12.20: - Fix locales.
    • 08.08.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it papermerge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f papermerge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' papermerge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/papermerge:latest

    Versions

    • 15.07.22: - Don't install development python packages
    • 13.04.21: - Handle upstream stapler change
    • 13.03.21: - Fixed mglib dependency per issue 32
    • 25.02.21: - Updated dependencies for v2
    • 07.02.21: - Support external MySQL/PSQL DBs.
    • 01.02.21: - Add redis.
    • 09.12.20: - Fix locales.
    • 08.08.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-photoshow/index.html b/images/docker-photoshow/index.html index 2f16325232..0778659c20 100644 --- a/images/docker-photoshow/index.html +++ b/images/docker-photoshow/index.html @@ -1,4 +1,4 @@ - photoshow - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver/photoshow

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Photoshow is gallery software at its easiest, it doesn't even require a database.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/photoshow:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    On first run create an admin account, any folder and its subfolders that you map to /Pictures will be presented as a webgallery. Config settings are persistent and stored as a subfolder of the /Thumbs mapping.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + photoshow - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver/photoshow

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Photoshow is gallery software at its easiest, it doesn't even require a database.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/photoshow:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    On first run create an admin account, any folder and its subfolders that you map to /Pictures will be presented as a webgallery. Config settings are persistent and stored as a subfolder of the /Thumbs mapping.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       photoshow:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Stores config and logs for nginx base.
    /Pictures:ro Your local folder of photos you wish to share.
    /Thumbs Local folder to store thumbnails of your images.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it photoshow /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f photoshow
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' photoshow
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/photoshow:latest

    Versions

    • 14.10.22: - Deprecate image.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 23.09.19: - Adding PHP-Exif for image metadata and processing.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 05.09.18: - Rebase to alpine 3.8.
    • 07.01.18: - Rebase to alpine 3.7.
    • 25.05.17: - Rebase to alpine 3.6.
    • 03.05.17: - Use repo pinning to better solve dependencies, use repo version of php7-imagick.
    • 14.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Rebase to alpine linux.
    • 11.09.16: - Add layer badges to README.
    • 21.08.15: - Use patched keybaord js from fork of photoshow.
    • 21.08.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it photoshow /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f photoshow
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' photoshow
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/photoshow:latest

    Versions

    • 14.10.22: - Deprecate image.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 23.09.19: - Adding PHP-Exif for image metadata and processing.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 05.09.18: - Rebase to alpine 3.8.
    • 07.01.18: - Rebase to alpine 3.7.
    • 25.05.17: - Rebase to alpine 3.6.
    • 03.05.17: - Use repo pinning to better solve dependencies, use repo version of php7-imagick.
    • 14.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Rebase to alpine linux.
    • 11.09.16: - Add layer badges to README.
    • 21.08.15: - Use patched keybaord js from fork of photoshow.
    • 21.08.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-phpmyadmin/index.html b/images/docker-phpmyadmin/index.html index 8b86b1ee95..a584f2af0f 100644 --- a/images/docker-phpmyadmin/index.html +++ b/images/docker-phpmyadmin/index.html @@ -1,4 +1,4 @@ - phpmyadmin - LinuxServer.io

    linuxserver/phpmyadmin

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Phpmyadmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/phpmyadmin:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This image uses nginx, in contrast to the official images which offer fpm-only or Apache variants.

    We support all of the official environment variables for configuration as well as directly editing the config files.

    For more information check out the phpmyadmin documentation.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + phpmyadmin - LinuxServer.io       

    linuxserver/phpmyadmin

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Phpmyadmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/phpmyadmin:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This image uses nginx, in contrast to the official images which offer fpm-only or Apache variants.

    We support all of the official environment variables for configuration as well as directly editing the config files.

    For more information check out the phpmyadmin documentation.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       phpmyadmin:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 Port for web frontend

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York
    PMA_ARBITRARY=1 Set to 1 to allow you to connect to any server. Setting to 0 will only allow you to connect to specified hosts (See Application Setup)
    PMA_ABSOLUTE_URI=https://phpmyadmin.example.com Set the URL you will use to access the web frontend

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it phpmyadmin /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f phpmyadmin
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' phpmyadmin
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/phpmyadmin:latest

    Versions

    • 18.11.22: - Rebasing to Alpine 3.16, migrate to s6v3.
    • 20.08.22: - Rebasing to Alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 23.01.22: - Pin versions to 5.x.x.
    • 14.06.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it phpmyadmin /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f phpmyadmin
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' phpmyadmin
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/phpmyadmin:latest

    Versions

    • 18.11.22: - Rebasing to Alpine 3.16, migrate to s6v3.
    • 20.08.22: - Rebasing to Alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 23.01.22: - Pin versions to 5.x.x.
    • 14.06.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-pidgin/index.html b/images/docker-pidgin/index.html index d082845fe3..b834c664f7 100644 --- a/images/docker-pidgin/index.html +++ b/images/docker-pidgin/index.html @@ -1,4 +1,4 @@ - pidgin - LinuxServer.io

    linuxserver/pidgin

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pidgin is a chat program which lets you log into accounts on multiple chat networks simultaneously. This means that you can be chatting with friends on XMPP and sitting in an IRC channel at the same time.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pidgin:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    This Pidgin installation comes with default chat plugins plus a series of third party ones. Please note that the third party plugins for the most part are not simply plug and play, you will need to reference their documentation and possibly generate oauth tokens along with other workarounds. Third party plugins are always in a state of constant development do not expect every single native feature to work flawlessly. To ease integration with some third party plugins we include Firefox in this image to allow you to fill out captchas or pre-auth before loading your credentials into the program, simply right click the desktop to launch it.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + pidgin - LinuxServer.io       

    linuxserver/pidgin

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pidgin is a chat program which lets you log into accounts on multiple chat networks simultaneously. This means that you can be chatting with friends on XMPP and sitting in an IRC channel at the same time.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pidgin:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    This Pidgin installation comes with default chat plugins plus a series of third party ones. Please note that the third party plugins for the most part are not simply plug and play, you will need to reference their documentation and possibly generate oauth tokens along with other workarounds. Third party plugins are always in a state of constant development do not expect every single native feature to work flawlessly. To ease integration with some third party plugins we include Firefox in this image to allow you to fill out captchas or pre-auth before loading your credentials into the program, simply right click the desktop to launch it.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       pidgin:
    @@ -28,4 +28,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Pidgin desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores local files and settings

    Miscellaneous Options

    Parameter Function
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function on older hosts as syscalls are unknown to Docker.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pidgin /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pidgin
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pidgin
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pidgin:latest

    Versions

    • 21.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 15.02.22: - Add build deps for discord.
    • 23.12.21: - Rebase to Alpine 3.15.
    • 26.09.21: - Rebase to Alpine 3.14.
    • 14.05.21: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pidgin /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pidgin
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pidgin
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pidgin:latest

    Versions

    • 21.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 15.02.22: - Add build deps for discord.
    • 23.12.21: - Rebase to Alpine 3.15.
    • 26.09.21: - Rebase to Alpine 3.14.
    • 14.05.21: - Initial release.
    \ No newline at end of file diff --git a/images/docker-piwigo/index.html b/images/docker-piwigo/index.html index cf231b98ac..545814ed3b 100644 --- a/images/docker-piwigo/index.html +++ b/images/docker-piwigo/index.html @@ -1,4 +1,4 @@ - piwigo - LinuxServer.io

    linuxserver/piwigo

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Piwigo is a photo gallery software for the web that comes with powerful features to publish and manage your collection of pictures.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/piwigo:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • You must create a user and database for piwigo to use in a mysql/mariadb server.

    • Self-signed keys are generated the first time you run the container and can be found in /config/keys, if needed, you can replace them with your own.

    • The easiest way to edit the configuration file is to enable local files editor from the plugins page and use it to configure email settings etc."

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + piwigo - LinuxServer.io       

    linuxserver/piwigo

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Piwigo is a photo gallery software for the web that comes with powerful features to publish and manage your collection of pictures.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/piwigo:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • You must create a user and database for piwigo to use in a mysql/mariadb server.

    • Self-signed keys are generated the first time you run the container and can be found in /config/keys, if needed, you can replace them with your own.

    • The easiest way to edit the configuration file is to enable local files editor from the plugins page and use it to configure email settings etc."

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       piwigo:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 Application WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.
    /gallery Image storage for Piwigo

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it piwigo /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f piwigo
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' piwigo
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/piwigo:latest

    Versions

    • 08.11.22: - Rebase to Alpine 3.16, migrate to s6v3. Move application install to /app/www/public, add migration for existing users. Container updates should now update the application correctly.
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 29.06.21: - Rebase to 3.14, Add php7-zip package
    • 20.05.21: - Create separate volume for image data
    • 23.01.21: - Rebasing to alpine 3.13.
    • 12.12.20: - Increased upload_max_filesize in php.ini
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 12.06.19: - Add ffmpeg and other deps as needed by popular plugins.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 01.03.19: - Add php-ctype & php-curl.
    • 22.02.19: - Rebasing to alpine 3.9, add php-ldap.
    • 28.01.19: - Rebase to alpine linux 3.8 , add pipeline logic and multi arch.
    • 25.01.18: - Rebase to alpine linux 3.7.
    • 25.05.17: - Rebase to alpine linux 3.6.
    • 03.05.17: - Use repo pinning to better solve dependencies, use repo version of php7-imagick.
    • 20.04.17: - Add php7-exif package, thanks iiska
    • 23.02.17: - Rebase to alpine linux 3.5 and nginx.
    • 14.10.16: - Add version layer information.
    • 10.09.16: - Add layer badges to README.
    • 29.08.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it piwigo /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f piwigo
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' piwigo
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/piwigo:latest

    Versions

    • 08.11.22: - Rebase to Alpine 3.16, migrate to s6v3. Move application install to /app/www/public, add migration for existing users. Container updates should now update the application correctly.
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 29.06.21: - Rebase to 3.14, Add php7-zip package
    • 20.05.21: - Create separate volume for image data
    • 23.01.21: - Rebasing to alpine 3.13.
    • 12.12.20: - Increased upload_max_filesize in php.ini
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 12.06.19: - Add ffmpeg and other deps as needed by popular plugins.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 01.03.19: - Add php-ctype & php-curl.
    • 22.02.19: - Rebasing to alpine 3.9, add php-ldap.
    • 28.01.19: - Rebase to alpine linux 3.8 , add pipeline logic and multi arch.
    • 25.01.18: - Rebase to alpine linux 3.7.
    • 25.05.17: - Rebase to alpine linux 3.6.
    • 03.05.17: - Use repo pinning to better solve dependencies, use repo version of php7-imagick.
    • 20.04.17: - Add php7-exif package, thanks iiska
    • 23.02.17: - Rebase to alpine linux 3.5 and nginx.
    • 14.10.16: - Add version layer information.
    • 10.09.16: - Add layer badges to README.
    • 29.08.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-pixapop/index.html b/images/docker-pixapop/index.html index 30291a4416..99630d5493 100644 --- a/images/docker-pixapop/index.html +++ b/images/docker-pixapop/index.html @@ -1,4 +1,4 @@ - pixapop - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver/pixapop

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pixapop is an open-source single page application to view your photos in the easiest way possible.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pixapop:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Any photos included in /photos will be presented as galleries split by month. Config settings are persistent and stored into /config.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + pixapop - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated.

    linuxserver/pixapop

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pixapop is an open-source single page application to view your photos in the easiest way possible.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pixapop:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Any photos included in /photos will be presented as galleries split by month. Config settings are persistent and stored into /config.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       pixapop:
    @@ -31,4 +31,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    APP_USERNAME=admin Specify a username to enable authentication.
    APP_PASSWORD=admin Specify a password to enable authentication.

    Volume Mappings (-v)

    Volume Function
    /config Stores config and logs for nginx base.
    /photos Your local folder of photos.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pixapop /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pixapop
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pixapop
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pixapop:latest

    Versions

    • 14.10.22 - Deprecate image.
    • 17.12.20 - Move image to main linuxserver repo, add notice to container log
    • 18.03.19 - Update build dependencies
    • 18.03.19 - Add build dependencies
    • 17.03.19 - Initial release
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pixapop /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pixapop
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pixapop
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pixapop:latest

    Versions

    • 14.10.22 - Deprecate image.
    • 17.12.20 - Move image to main linuxserver repo, add notice to container log
    • 18.03.19 - Update build dependencies
    • 18.03.19 - Add build dependencies
    • 17.03.19 - Initial release
    \ No newline at end of file diff --git a/images/docker-plex-meta-manager/index.html b/images/docker-plex-meta-manager/index.html index d3ed23efb9..cd871dec06 100644 --- a/images/docker-plex-meta-manager/index.html +++ b/images/docker-plex-meta-manager/index.html @@ -1,4 +1,4 @@ - plex-meta-manager - LinuxServer.io

    linuxserver/plex-meta-manager

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Plex-meta-manager is a Python 3 script that can be continuously run using YAML configuration files to update on a schedule the metadata of the movies, shows, and collections in your libraries as well as automatically build collections based on various methods all detailed in the wiki.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/plex-meta-manager:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases.
    develop Latest commits from the develop branch

    Application Setup

    There is a walkthrough available to help get you up and running.

    This image supports all of the environment variables listed here and all commandline arguments.

    To perform a one-time run use docker run (or docker-compose run) with the --rm and -e PMM_RUN=True arguments. This will cause the container to process your config immediately instead of waiting for the scheduled time, and delete the old container after completion.

    For more information see the official wiki.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + plex-meta-manager - LinuxServer.io       

    linuxserver/plex-meta-manager

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Plex-meta-manager is a Python 3 script that can be continuously run using YAML configuration files to update on a schedule the metadata of the movies, shows, and collections in your libraries as well as automatically build collections based on various methods all detailed in the wiki.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/plex-meta-manager:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases.
    develop Latest commits from the develop branch

    Application Setup

    There is a walkthrough available to help get you up and running.

    This image supports all of the environment variables listed here and all commandline arguments.

    To perform a one-time run use docker run (or docker-compose run) with the --rm and -e PMM_RUN=True arguments. This will cause the container to process your config immediately instead of waiting for the scheduled time, and delete the old container after completion.

    For more information see the official wiki.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       plex-meta-manager:
    @@ -32,4 +32,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    PMM_CONFIG=/config/config.yml Specify a custom config file to use.
    PMM_TIME=03:00 Comma-separated list of times to update each day. Format: HH:MM.
    PMM_RUN=False Set to True to run without the scheduler.
    PMM_TEST=False Set to True to run in debug mode with only collections that have test: true.
    PMM_NO_MISSING=False Set to True to run without any of the missing movie/show functions.

    Volume Mappings (-v)

    Volume Function
    /config Local path for plex-meta-manager config files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it plex-meta-manager /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f plex-meta-manager
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' plex-meta-manager
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/plex-meta-manager:latest

    Versions

    • 08.11.22: - Add develop branch.
    • 25.10.22: - Support commandline args and relative paths.
    • 03.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 30.01.22: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it plex-meta-manager /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f plex-meta-manager
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' plex-meta-manager
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/plex-meta-manager:latest

    Versions

    • 08.11.22: - Add develop branch.
    • 25.10.22: - Support commandline args and relative paths.
    • 03.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 30.01.22: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-plex/index.html b/images/docker-plex/index.html index 34d97261d5..688c79a15c 100644 --- a/images/docker-plex/index.html +++ b/images/docker-plex/index.html @@ -1,4 +1,4 @@ - plex - LinuxServer.io

    linuxserver/plex

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Plex organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone Plex Media Server. has always been a top priority. Straightforward design and bulk actions mean getting things done faster.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/plex:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases with Focal baseimage
    bionic DEPRECATED - Stable releases with Bionic baseimage

    Application Setup

    Webui can be found at <your-ip>:32400/web

    Note about updates, if there is no value set for the VERSION variable, then no updates will take place.

    For new users, no updates will take place on the first run of the container as there is no preferences file to read your token from, to update restart the Docker container after logging in through the webui

    Valid settings for VERSION are:-

    IMPORTANT NOTE:- YOU CANNOT UPDATE TO A PLEXPASS ONLY (BETA) VERSION IF YOU ARE NOT LOGGED IN WITH A PLEXPASS ACCOUNT

    • docker: Let Docker handle the Plex Version, we keep our Dockerhub Endpoint up to date with the latest public builds. This is the same as leaving this setting out of your create command.
    • latest: will update plex to the latest version available that you are entitled to.
    • public: will update plexpass users to the latest public version, useful for plexpass users that don't want to be on the bleeding edge but still want the latest public updates.
    • <specific-version>: will select a specific version (eg 0.9.12.4.1192-9a47d21) of plex to install, note you cannot use this to access plexpass versions if you do not have plexpass.

    Hardware Acceleration

    Intel

    Hardware acceleration users for Intel Quicksync will need to mount their /dev/dri video device inside of the container by passing the following command when running or creating the container:

    --device=/dev/dri:/dev/dri
    + plex - LinuxServer.io       

    linuxserver/plex

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Plex organizes video, music and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone Plex Media Server. has always been a top priority. Straightforward design and bulk actions mean getting things done faster.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/plex:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases with Focal baseimage
    bionic DEPRECATED - Stable releases with Bionic baseimage

    Application Setup

    Webui can be found at <your-ip>:32400/web

    Note about updates, if there is no value set for the VERSION variable, then no updates will take place.

    For new users, no updates will take place on the first run of the container as there is no preferences file to read your token from, to update restart the Docker container after logging in through the webui

    Valid settings for VERSION are:-

    IMPORTANT NOTE:- YOU CANNOT UPDATE TO A PLEXPASS ONLY (BETA) VERSION IF YOU ARE NOT LOGGED IN WITH A PLEXPASS ACCOUNT

    • docker: Let Docker handle the Plex Version, we keep our Dockerhub Endpoint up to date with the latest public builds. This is the same as leaving this setting out of your create command.
    • latest: will update plex to the latest version available that you are entitled to.
    • public: will update plexpass users to the latest public version, useful for plexpass users that don't want to be on the bleeding edge but still want the latest public updates.
    • <specific-version>: will select a specific version (eg 0.9.12.4.1192-9a47d21) of plex to install, note you cannot use this to access plexpass versions if you do not have plexpass.

    Hardware Acceleration

    Intel

    Hardware acceleration users for Intel Quicksync will need to mount their /dev/dri video device inside of the container by passing the following command when running or creating the container:

    --device=/dev/dri:/dev/dri
     

    We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here:

    https://github.com/NVIDIA/nvidia-docker

    We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the plex docker.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
    @@ -42,4 +42,4 @@ services:
     
     

    The application accepts a series of environment variables to further customize itself on boot:

    Parameter Function
    --device=/dev/dri:/dev/dri Add this option to your run command if you plan on using Quicksync hardware acceleration - see Application Setup section.
    --device=/dev/dvb:/dev/dvb Add this option to your run command if you plan on using dvb devices.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it plex /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f plex
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' plex
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/plex:latest

    Versions

    • 16.10.22: - Rebase to jammy. Update to s6v3. Remove opencl packages (bundled with plex).
    • 18.07.22: - Pin all opencl related driver packages.
    • 16.05.22: - Pin opencl version.
    • 04.03.22: - Increase verbosity of video device permissions fix, attempt to fix missing group rw.
    • 25.12.21: - Install Intel drivers from the official repo.
    • 20.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 10.12.20: - Add latest Intel Compute packages from github repo for opencl support on latest gen igpu.
    • 23.11.20: - Add Bionic branch make Focal default.
    • 03.05.20: - Update exposed ports and example docs for bridge mode.
    • 23.03.20: - Remove udev hack (no longer needed), suppress uuid error in log during first start.
    • 04.12.19: - Add variable for setting PLEX_CLAIM. Remove /transcode volume mapping as it is now set via plex gui and defaults to a location under /config.
    • 06.08.19: - Add variable for setting UMASK.
    • 10.07.19: - Fix permissions for tuner (/dev/dvb) devices.
    • 20.05.19: - Bugfix do not allow Root group for Intel QuickSync ownership rules.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.03.19: - Fix update logic for VERSION=public.
    • 14.03.19: - Switch to new api endpoints, enable beta (plex pass) updates for armhf and aarch64.
    • 15.02.19: - Clean up plex pid after unclean stop.
    • 11.02.19: - Fix nvidia variables, add device variables.
    • 16.01.19: - Add pipeline logic, multi arch, and HW transcoding configuration; remove avahi service.
    • 07.09.18: - Rebase to ubuntu bionic, add udev package.
    • 09.12.17: - Fix continuation lines.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 28.05.17: - Add unrar package as per requests, for subzero plugin.
    • 11.01.17: - Use Plex environment variables from pms docker, change abc home folder to /app to alleviate usermod chowning library
    • 03.01.17: - Use case insensitive version variable matching rather than export and make lowercase.
    • 17.10.16: - Allow use of uppercase version variable
    • 01.10.16: - Add TZ info to README.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README.
    • 22.08.16: - Rebased to xenial and s6 overlay
    • 07.04.16: - removed /transcode volume support (upstream Plex change) and modified PlexPass download method to prevent unauthorised usage of paid PMS
    • 24.09.15: - added optional support for volume transcoding (/transcode), and various typo fixes.
    • 17.09.15: - Changed to run chmod only once
    • 19.09.15: - Plex updated their download servers from http to https
    • 28.08.15: - Removed plexpass from routine, and now uses VERSION as a combination fix.
    • 18.07.15: - Moved autoupdate to be hosted by linuxserver.io and implemented bugfix thanks to ljm42.
    • 09.07.15: - Now with ability to pick static version number.
    • 08.07.15: - Now with autoupdates. (Hosted by fanart.tv)
    • 03.07.15: - Fixed a mistake that allowed plex to run as user plex rather than abc (99:100). Thanks to double16 for spotting this.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it plex /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f plex
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' plex
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/plex:latest

    Versions

    • 16.10.22: - Rebase to jammy. Update to s6v3. Remove opencl packages (bundled with plex).
    • 18.07.22: - Pin all opencl related driver packages.
    • 16.05.22: - Pin opencl version.
    • 04.03.22: - Increase verbosity of video device permissions fix, attempt to fix missing group rw.
    • 25.12.21: - Install Intel drivers from the official repo.
    • 20.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 10.12.20: - Add latest Intel Compute packages from github repo for opencl support on latest gen igpu.
    • 23.11.20: - Add Bionic branch make Focal default.
    • 03.05.20: - Update exposed ports and example docs for bridge mode.
    • 23.03.20: - Remove udev hack (no longer needed), suppress uuid error in log during first start.
    • 04.12.19: - Add variable for setting PLEX_CLAIM. Remove /transcode volume mapping as it is now set via plex gui and defaults to a location under /config.
    • 06.08.19: - Add variable for setting UMASK.
    • 10.07.19: - Fix permissions for tuner (/dev/dvb) devices.
    • 20.05.19: - Bugfix do not allow Root group for Intel QuickSync ownership rules.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.03.19: - Fix update logic for VERSION=public.
    • 14.03.19: - Switch to new api endpoints, enable beta (plex pass) updates for armhf and aarch64.
    • 15.02.19: - Clean up plex pid after unclean stop.
    • 11.02.19: - Fix nvidia variables, add device variables.
    • 16.01.19: - Add pipeline logic, multi arch, and HW transcoding configuration; remove avahi service.
    • 07.09.18: - Rebase to ubuntu bionic, add udev package.
    • 09.12.17: - Fix continuation lines.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 28.05.17: - Add unrar package as per requests, for subzero plugin.
    • 11.01.17: - Use Plex environment variables from pms docker, change abc home folder to /app to alleviate usermod chowning library
    • 03.01.17: - Use case insensitive version variable matching rather than export and make lowercase.
    • 17.10.16: - Allow use of uppercase version variable
    • 01.10.16: - Add TZ info to README.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README.
    • 22.08.16: - Rebased to xenial and s6 overlay
    • 07.04.16: - removed /transcode volume support (upstream Plex change) and modified PlexPass download method to prevent unauthorised usage of paid PMS
    • 24.09.15: - added optional support for volume transcoding (/transcode), and various typo fixes.
    • 17.09.15: - Changed to run chmod only once
    • 19.09.15: - Plex updated their download servers from http to https
    • 28.08.15: - Removed plexpass from routine, and now uses VERSION as a combination fix.
    • 18.07.15: - Moved autoupdate to be hosted by linuxserver.io and implemented bugfix thanks to ljm42.
    • 09.07.15: - Now with ability to pick static version number.
    • 08.07.15: - Now with autoupdates. (Hosted by fanart.tv)
    • 03.07.15: - Fixed a mistake that allowed plex to run as user plex rather than abc (99:100). Thanks to double16 for spotting this.
    \ No newline at end of file diff --git a/images/docker-projectsend/index.html b/images/docker-projectsend/index.html index 8080377748..bac5b4ca8d 100644 --- a/images/docker-projectsend/index.html +++ b/images/docker-projectsend/index.html @@ -1,4 +1,4 @@ - projectsend - LinuxServer.io

    linuxserver/projectsend

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Projectsend is a self-hosted application that lets you upload files and assign them to specific clients that you create yourself. Secure, private and easy. No more depending on external services or e-mail to send those files.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/projectsend:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    IMPORTANT This image no longer supports MSSQL since being migrated to PHP7, if you want MSSQL support please use the tag linuxserver/projectsend:r1053-ls27

    Requires a user and database in either mysql or mariadb.

    To use translations, follow the instructions here. The necessary paths are symlinked under /config/translations (note that the "templates" paths don't need lang subdirectories).

    More info at ProjectSend.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + projectsend - LinuxServer.io       

    linuxserver/projectsend

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Projectsend is a self-hosted application that lets you upload files and assign them to specific clients that you create yourself. Secure, private and easy. No more depending on external services or e-mail to send those files.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/projectsend:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    IMPORTANT This image no longer supports MSSQL since being migrated to PHP7, if you want MSSQL support please use the tag linuxserver/projectsend:r1053-ls27

    Requires a user and database in either mysql or mariadb.

    To use translations, follow the instructions here. The necessary paths are symlinked under /config/translations (note that the "templates" paths don't need lang subdirectories).

    More info at ProjectSend.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       projectsend:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    MAX_UPLOAD=5000 To set maximum upload size (in MB), default if unset is 5000.

    Volume Mappings (-v)

    Volume Function
    /config Where to store projectsend config files.
    /data Where to store files to share.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it projectsend /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f projectsend
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' projectsend
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/projectsend:latest

    Versions

    • 23.08.22: - Add translation support
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 24.06.21: - Rebasing to alpine 3.14, switch to nginx
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 31.12.19: - Rebase to Alpine 3.11 and upgrade to PHP7.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 11.06.17: - Fetch version from github.
    • 09.12.17: - Rebase to alpine 3.7.
    • 13.06.17: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it projectsend /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f projectsend
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' projectsend
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/projectsend:latest

    Versions

    • 23.08.22: - Add translation support
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 24.06.21: - Rebasing to alpine 3.14, switch to nginx
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 31.12.19: - Rebase to Alpine 3.11 and upgrade to PHP7.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.02.19: - Add pipeline logic and multi arch.
    • 11.06.17: - Fetch version from github.
    • 09.12.17: - Rebase to alpine 3.7.
    • 13.06.17: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-prowlarr/index.html b/images/docker-prowlarr/index.html index 6ffd07e120..9462f37732 100644 --- a/images/docker-prowlarr/index.html +++ b/images/docker-prowlarr/index.html @@ -1,4 +1,4 @@ - prowlarr - LinuxServer.io

    linuxserver/prowlarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Prowlarr is a indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with your various PVR apps. Prowlarr supports both Torrent Trackers and Usenet Indexers. It integrates seamlessly with Sonarr, Radarr, Lidarr, and Readarr offering complete management of your indexers with no per app Indexer setup required (we do it all).

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/prowlarr:develop should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest
    develop Prowlarr releases from their develop branch
    nightly Prowlarr releases from their nightly branch

    Application Setup

    Access the webui at <your-ip>:9696, for more information check out Prowlarr.

    Setup info can be found here.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + prowlarr - LinuxServer.io       

    linuxserver/prowlarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Prowlarr is a indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with your various PVR apps. Prowlarr supports both Torrent Trackers and Usenet Indexers. It integrates seamlessly with Sonarr, Radarr, Lidarr, and Readarr offering complete management of your indexers with no per app Indexer setup required (we do it all).

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/prowlarr:develop should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest
    develop Prowlarr releases from their develop branch
    nightly Prowlarr releases from their nightly branch

    Application Setup

    Access the webui at <your-ip>:9696, for more information check out Prowlarr.

    Setup info can be found here.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       prowlarr:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    9696 The port for the Prowlarr webinterface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London, this is required for Prowlarr

    Volume Mappings (-v)

    Volume Function
    /config Database and Prowlarr configs

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it prowlarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f prowlarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' prowlarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/prowlarr:develop

    Versions

    • 06.06.21: - Initial realease.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it prowlarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f prowlarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' prowlarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/prowlarr:develop

    Versions

    • 06.06.21: - Initial realease.
    \ No newline at end of file diff --git a/images/docker-pwndrop/index.html b/images/docker-pwndrop/index.html index 1c03569f2a..b9b010c7ce 100644 --- a/images/docker-pwndrop/index.html +++ b/images/docker-pwndrop/index.html @@ -1,4 +1,4 @@ - pwndrop - LinuxServer.io

    linuxserver/pwndrop

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pwndrop is a self-deployable file hosting service for sending out red teaming payloads or securely sharing your private files over HTTP and WebDAV.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pwndrop:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the web gui at http://<your-ip>:8080/pwndrop (replace /pwndrop with your SECRET_PATH if you set one).

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + pwndrop - LinuxServer.io       

    linuxserver/pwndrop

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pwndrop is a self-deployable file hosting service for sending out red teaming payloads or securely sharing your private files over HTTP and WebDAV.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pwndrop:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the web gui at http://<your-ip>:8080/pwndrop (replace /pwndrop with your SECRET_PATH if you set one).

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       pwndrop:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 web gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    SECRET_PATH=/pwndrop Secret path for admin access. Defaults to /pwndrop. This parameter only takes effect during initial install; it can later be changed in the web gui.

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration and data.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pwndrop /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pwndrop
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pwndrop
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pwndrop:latest

    Versions

    • 19.09.22: - Rebasing to alpine 3.15.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 17.04.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pwndrop /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pwndrop
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pwndrop
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pwndrop:latest

    Versions

    • 19.09.22: - Rebasing to alpine 3.15.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 17.04.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-pydio-cells/index.html b/images/docker-pydio-cells/index.html index 8eab804a73..9370017fcd 100644 --- a/images/docker-pydio-cells/index.html +++ b/images/docker-pydio-cells/index.html @@ -1,4 +1,4 @@ - pydio-cells - LinuxServer.io

    linuxserver/pydio-cells

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pydio-cells is the nextgen file sharing platform for organizations. It is a full rewrite of the Pydio project using the Go language following a micro-service architecture.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pydio-cells:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64
    armhf

    Application Setup

    You must first create a mysql database for Pydio Cells. Using our mariadb image is recommended.

    Then access the web gui setup wizard at https://SERVER_IP:8080 if accessing locally (must set SERVER_IP env var), or at https://pydio-cells.domain.com if reverse proxying.

    Strict reverse proxies

    This image uses a self-signed certificate by default. This naturally means the scheme is https. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + pydio-cells - LinuxServer.io       

    linuxserver/pydio-cells

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pydio-cells is the nextgen file sharing platform for organizations. It is a full rewrite of the Pydio project using the Go language following a micro-service architecture.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pydio-cells:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64
    armhf

    Application Setup

    You must first create a mysql database for Pydio Cells. Using our mariadb image is recommended.

    Then access the web gui setup wizard at https://SERVER_IP:8080 if accessing locally (must set SERVER_IP env var), or at https://pydio-cells.domain.com if reverse proxying.

    Strict reverse proxies

    This image uses a self-signed certificate by default. This naturally means the scheme is https. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       pydio-cells:
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 Http port
    33060 gRPC port (required for CellsSync).

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    EXTERNALURL=yourdomain.url The external url you would like to use to access Pydio Cells (Can be https://domain.url or https://IP:PORT).
    SERVER_IP=0.0.0.0 Enter the LAN IP of the docker server. Required for local access by IP, added to self signed cert as SAN (not required if accessing only through reverse proxy).

    Volume Mappings (-v)

    Volume Function
    /config All the config files reside here.

    Miscellaneous Options

    Parameter Function
    --hostname= Pydio Cells uses the hostname to verify local files. This setting is required and should not be changed after it has been set.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pydio-cells /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pydio-cells
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pydio-cells
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pydio-cells:latest

    Versions

    • 19.10.22: - Rebasing to alpine 3.16. Upgrading to s6v3. Updating build instructions for v4.
    • 19.09.22: - Rebasing to alpine 3.15.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 18.04.20: - Switch to https as default (only affects new installs). Add self signed cert, add SERVER_IP var for adding to cert as SAN. Add optional gRPC port mapping for CellsSync.
    • 17.04.20: - Update compile options, previous release was broken for new installs.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 12.12.19: - Initial Release
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pydio-cells /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pydio-cells
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pydio-cells
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pydio-cells:latest

    Versions

    • 19.10.22: - Rebasing to alpine 3.16. Upgrading to s6v3. Updating build instructions for v4.
    • 19.09.22: - Rebasing to alpine 3.15.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 18.04.20: - Switch to https as default (only affects new installs). Add self signed cert, add SERVER_IP var for adding to cert as SAN. Add optional gRPC port mapping for CellsSync.
    • 17.04.20: - Update compile options, previous release was broken for new installs.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 12.12.19: - Initial Release
    \ No newline at end of file diff --git a/images/docker-pydio/index.html b/images/docker-pydio/index.html index 85b8d5b0ab..f9c830c1f6 100644 --- a/images/docker-pydio/index.html +++ b/images/docker-pydio/index.html @@ -1,4 +1,4 @@ - pydio - LinuxServer.io

    linuxserver/pydio

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pydio (formerly AjaXplorer) is a mature open source software solution for file sharing and synchronization. With intuitive user interfaces (web / mobile / desktop), Pydio provides enterprise-grade features to gain back control and privacy of your data: user directory connectors, legacy filesystems drivers, comprehensive admin interface, and much more.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pydio should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
    + pydio - LinuxServer.io       

    linuxserver/pydio

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pydio (formerly AjaXplorer) is a mature open source software solution for file sharing and synchronization. With intuitive user interfaces (web / mobile / desktop), Pydio provides enterprise-grade features to gain back control and privacy of your data: user directory connectors, legacy filesystems drivers, comprehensive admin interface, and much more.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pydio should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
     version: "2.1"
     services:
       pydio:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    443 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where pydio should store it's configuration files.
    /data Where pydio should store uploaded files.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    THIS IMAGE IS DEPRECATED. You can switch to Pydio Cells instead.

    You must create a user and database for pydio to use in a mysql/mariadb or postgresql server. You can use sqlite with no further config needed, but this should only be considered for testing purposes. In the setup page for database, use the ip address rather than hostname...

    Self-signed keys are generated the first time you run the container and can be found in /config/keys , if needed, you can replace them with your own.

    For public link sharing to function correctly be sure to change the Detected Server Url to the URL of your pydio instance in the setup wizard.

    For email settings edit the file /config/ssmtp.conf and restart the container.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pydio /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pydio
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pydio
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pydio

    Versions

    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.02.19: - Add pipeline logic and multi arch, rebase to alpine 3.8.
    • 12.01.18: - Rebase to alpine linux 3.7.
    • 28.10.17: - php7-ssh2 moved from testing to community repo.
    • 25.05.17: - Rebase to alpine linux 3.6.
    • 17.05.17: - Make default install pydio 8.
    • 03.05.17: - Use repo pinning to better solve dependencies, use repo version of php7-imagick.
    • 28.02.17: - Modify sed for data path.
    • 18.02.17: - Rebase to alpine linux 3.5.
    • 05.11.16: - Pinned at latest sourceforge download version, in lieu of a full rewrite.
    • 14.10.16: - Add version layer information.
    • 10.09.16: - Add layer badges to README.
    • 08.09.15: - Initial Release.
    \ No newline at end of file +

    Application Setup

    THIS IMAGE IS DEPRECATED. You can switch to Pydio Cells instead.

    You must create a user and database for pydio to use in a mysql/mariadb or postgresql server. You can use sqlite with no further config needed, but this should only be considered for testing purposes. In the setup page for database, use the ip address rather than hostname...

    Self-signed keys are generated the first time you run the container and can be found in /config/keys , if needed, you can replace them with your own.

    For public link sharing to function correctly be sure to change the Detected Server Url to the URL of your pydio instance in the setup wizard.

    For email settings edit the file /config/ssmtp.conf and restart the container.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pydio /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pydio
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pydio
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pydio

    Versions

    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.02.19: - Add pipeline logic and multi arch, rebase to alpine 3.8.
    • 12.01.18: - Rebase to alpine linux 3.7.
    • 28.10.17: - php7-ssh2 moved from testing to community repo.
    • 25.05.17: - Rebase to alpine linux 3.6.
    • 17.05.17: - Make default install pydio 8.
    • 03.05.17: - Use repo pinning to better solve dependencies, use repo version of php7-imagick.
    • 28.02.17: - Modify sed for data path.
    • 18.02.17: - Rebase to alpine linux 3.5.
    • 05.11.16: - Pinned at latest sourceforge download version, in lieu of a full rewrite.
    • 14.10.16: - Add version layer information.
    • 10.09.16: - Add layer badges to README.
    • 08.09.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-pyload-ng/index.html b/images/docker-pyload-ng/index.html index f69684cccd..01b5ea4dec 100644 --- a/images/docker-pyload-ng/index.html +++ b/images/docker-pyload-ng/index.html @@ -1,4 +1,4 @@ - pyload-ng - LinuxServer.io

    linuxserver/pyload-ng

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    pyLoad is a Free and Open Source download manager written in Python and designed to be extremely lightweight, easily extensible and fully manageable via web.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pyload-ng:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases from pyLoad Next
    develop Releases from pyload Next develop branch

    Application Setup

    Access the web interface at http://your-ip:8000 the default login is: username - pyload password - pyload

    For general usage please see the pyLoad wiki here .

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + pyload-ng - LinuxServer.io       

    linuxserver/pyload-ng

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    pyLoad is a Free and Open Source download manager written in Python and designed to be extremely lightweight, easily extensible and fully manageable via web.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pyload-ng:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases from pyLoad Next
    develop Releases from pyload Next develop branch

    Application Setup

    Access the web interface at http://your-ip:8000 the default login is: username - pyload password - pyload

    For general usage please see the pyLoad wiki here .

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       pyload-ng:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 Allows HTTP access to the application
    9666 Click'n'Load port.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config pyLoad Configuration and files database
    /downloads Destination of pyLoad downloads

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pyload-ng /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pyload-ng
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pyload-ng
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pyload-ng:latest

    Versions

    • 02.02.22: - Add ffmpeg for the Youtube plugin.
    • 24.01.22: - Replace unrar with p7zip.
    • 24.01.22: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pyload-ng /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pyload-ng
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pyload-ng
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pyload-ng:latest

    Versions

    • 02.02.22: - Add ffmpeg for the Youtube plugin.
    • 24.01.22: - Replace unrar with p7zip.
    • 24.01.22: - Initial release.
    \ No newline at end of file diff --git a/images/docker-pyload/index.html b/images/docker-pyload/index.html index 1b6088e676..b12046c192 100644 --- a/images/docker-pyload/index.html +++ b/images/docker-pyload/index.html @@ -1,4 +1,4 @@ - pyload - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend our new pyload-ng image instead: https://github.com/linuxserver/docker-pyload-ng/

    linuxserver/pyload

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pyload is a Free and Open Source download manager written in Python and designed to be extremely lightweight, easily extensible and fully manageable via web.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pyload should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Version Tags

    This image provides various versions that are available via tags. latest tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.

    Tag Description
    latest Stable releases from Pyload
    ng Development releases from Pyload-ng (currently alpha)

    Application Setup

    Access the web interface at http://your-ip:8000 the default login is: username - admin password - password

    For the ng tag, the default user/pass are pyload/pyload.

    For general usage please see the pyLoad wiki here .

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + pyload - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend our new pyload-ng image instead: https://github.com/linuxserver/docker-pyload-ng/

    linuxserver/pyload

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pyload is a Free and Open Source download manager written in Python and designed to be extremely lightweight, easily extensible and fully manageable via web.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pyload should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Version Tags

    This image provides various versions that are available via tags. latest tag usually provides the latest stable version. Others are considered under development and caution must be exercised when using them.

    Tag Description
    latest Stable releases from Pyload
    ng Development releases from Pyload-ng (currently alpha)

    Application Setup

    Access the web interface at http://your-ip:8000 the default login is: username - admin password - password

    For the ng tag, the default user/pass are pyload/pyload.

    For general usage please see the pyLoad wiki here .

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       pyload:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8000 Allows HTTP access to the application
    7227 pyLoad control port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config pyLoad Configuration and files database
    /downloads Destination of pyLoad downloads

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pyload /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pyload
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pyload
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pyload

    Versions

    • 25.01.22: - Deprecate.
    • 23.02.21: - Add Python plugin passlib.
    • 16.02.21: - Publish ng tag for pyload-ng (currently alpha).
    • 04.11.20: - Rebase to alpine 3.11.
    • 18.10.20: - Chown app folder to fix plugin updater.
    • 18.07.19: - Add ffmpeg for plugins the do video processing.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 08.06.19: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pyload /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pyload
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pyload
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pyload

    Versions

    • 25.01.22: - Deprecate.
    • 23.02.21: - Add Python plugin passlib.
    • 16.02.21: - Publish ng tag for pyload-ng (currently alpha).
    • 04.11.20: - Rebase to alpine 3.11.
    • 18.10.20: - Chown app folder to fix plugin updater.
    • 18.07.19: - Add ffmpeg for plugins the do video processing.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 08.06.19: - Initial release.
    \ No newline at end of file diff --git a/images/docker-pylon/index.html b/images/docker-pylon/index.html index 525ccc1afc..90b7c15b2f 100644 --- a/images/docker-pylon/index.html +++ b/images/docker-pylon/index.html @@ -1,4 +1,4 @@ - pylon - LinuxServer.io

    linuxserver/pylon

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pylon is a web based integrated development environment built with Node.js as a backend and with a supercharged JavaScript/HTML5 frontend, licensed under GPL version 3. This project originates from Cloud9 v2 project.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pylon:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at http://your-ip:3131, more information here.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + pylon - LinuxServer.io       

    linuxserver/pylon

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Pylon is a web based integrated development environment built with Node.js as a backend and with a supercharged JavaScript/HTML5 frontend, licensed under GPL version 3. This project originates from Cloud9 v2 project.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/pylon:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at http://your-ip:3131, more information here.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       pylon:
    @@ -31,4 +31,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3131 The port for the Pylon web interface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    GITURL=https://github.com/linuxserver/docker-pylon.git Specify a git repo to checkout on first startup
    PYUSER=myuser Specify a basic auth user.
    PYPASS=mypass Specify a basic auth password.

    Volume Mappings (-v)

    Volume Function
    /code Optionally if you want the bind mount your own code and have changes survive container upgrades.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pylon /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pylon
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pylon
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pylon:latest

    Versions

    • 19.01.22: - Rebasing to alpine 3.15.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 19.09.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it pylon /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f pylon
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' pylon
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/pylon:latest

    Versions

    • 19.01.22: - Rebasing to alpine 3.15.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 19.09.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-qbittorrent/index.html b/images/docker-qbittorrent/index.html index 35094a77a3..4ac2086cae 100644 --- a/images/docker-qbittorrent/index.html +++ b/images/docker-qbittorrent/index.html @@ -1,4 +1,4 @@ - qbittorrent - LinuxServer.io

    linuxserver/qbittorrent

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    The Qbittorrent project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/qbittorrent:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable qbittorrent releases
    libtorrentv1 Static qbittorrent builds using libtorrent v1

    Application Setup

    The webui is at <your-ip>:8080 and the default username/password is admin/adminadmin.

    Change username/password via the webui in the webui section of settings.

    WEBUI_PORT variable

    Due to issues with CSRF and port mapping, should you require to alter the port for the webui you need to change both sides of the -p 8080 switch AND set the WEBUI_PORT variable to the new port.

    For example, to set the port to 8090 you need to set -p 8090:8090 and -e WEBUI_PORT=8090

    This should alleviate the "white screen" issue.

    If you have no webui , check the file /config/qBittorrent/qBittorrent.conf

    edit or add the following lines

    WebUI\Address=*
    + qbittorrent - LinuxServer.io       

    linuxserver/qbittorrent

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    The Qbittorrent project aims to provide an open-source software alternative to µTorrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/qbittorrent:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable qbittorrent releases
    libtorrentv1 Static qbittorrent builds using libtorrent v1

    Application Setup

    The webui is at <your-ip>:8080 and the default username/password is admin/adminadmin.

    Change username/password via the webui in the webui section of settings.

    WEBUI_PORT variable

    Due to issues with CSRF and port mapping, should you require to alter the port for the webui you need to change both sides of the -p 8080 switch AND set the WEBUI_PORT variable to the new port.

    For example, to set the port to 8090 you need to set -p 8090:8090 and -e WEBUI_PORT=8090

    This should alleviate the "white screen" issue.

    If you have no webui , check the file /config/qBittorrent/qBittorrent.conf

    edit or add the following lines

    WebUI\Address=*
     
     WebUI\ServerDomains=*
     

    If you are running a very old (3.x) kernel you may run into this issue which can be worked around using this method

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    @@ -36,4 +36,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 WebUI
    6881 tcp connection port
    6881/udp udp connection port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    WEBUI_PORT=8080 for changing the port of the webui, see below for explanation

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.
    /downloads Location of downloads on disk.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it qbittorrent /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f qbittorrent
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' qbittorrent
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/qbittorrent:latest

    Versions

    • 29.11.22: - Add openssl1.1-compat for qbittorrent-cli.
    • 31.10.22: - Add libtorrentv1 branch.
    • 31.08.22: - Rebase to Alpine Edge again to follow latest releases.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 16.06.22: - Rebase to Alpine 3.16 from edge.
    • 25.05.22: - Fetch qbitorrent-cli from upstream repo.
    • 02.03.22: - Add unrar, 7zip, and qbitorrent-cli.
    • 01.03.22: - Add python for search plugin support.
    • 23.02.22: - Rebase to Alpine Edge, install from Alpine repos.
    • 19.02.22: - Add jq to build-stage
    • 07.01.22: - Rebase to Alpine, build from source.
    • 06.01.22: - Deprecate unstable branch.
    • 10.02.21: - Rebase to focal.
    • 20.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 12.11.20: - Stop creating /config/data directory on startup
    • 03.04.20: - Fix adding search engine plugin
    • 02.08.19: - Add qbitorrent-cli for processing scripts.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 14.01.19: - Rebase to Ubuntu, add multi arch and pipeline logic.
    • 25.09.18: - Use buildstage type build, bump qbitorrent to 4.1.3.
    • 14.08.18: - Rebase to alpine 3.8, bump libtorrent to 1.1.9 and qbitorrent to 4.1.2.
    • 08.06.18: - Bump qbitorrent to 4.1.1.
    • 26.04.18: - Bump libtorrent to 1.1.7.
    • 02.03.18: - Bump qbitorrent to 4.0.4 and libtorrent to 1.1.6.
    • 02.01.18: - Deprecate cpu_core routine lack of scaling.
    • 19.12.17: - Update to v4.0.3.
    • 09.02.17: - Rebase to alpine 3.7
    • 01.12.17: - Update to v4.0.2.
    • 27.11.17: - Update to v4 and use cpu_core routine to speed up builds.
    • 16.09.17: - Bump to 3.3.16, Add WEBUI_PORT variable and notes to README to allow changing port of webui.
    • 01.08.17: - Initial Release.
    • 12.02.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it qbittorrent /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f qbittorrent
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' qbittorrent
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/qbittorrent:latest

    Versions

    • 29.11.22: - Add openssl1.1-compat for qbittorrent-cli.
    • 31.10.22: - Add libtorrentv1 branch.
    • 31.08.22: - Rebase to Alpine Edge again to follow latest releases.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 16.06.22: - Rebase to Alpine 3.16 from edge.
    • 25.05.22: - Fetch qbitorrent-cli from upstream repo.
    • 02.03.22: - Add unrar, 7zip, and qbitorrent-cli.
    • 01.03.22: - Add python for search plugin support.
    • 23.02.22: - Rebase to Alpine Edge, install from Alpine repos.
    • 19.02.22: - Add jq to build-stage
    • 07.01.22: - Rebase to Alpine, build from source.
    • 06.01.22: - Deprecate unstable branch.
    • 10.02.21: - Rebase to focal.
    • 20.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 12.11.20: - Stop creating /config/data directory on startup
    • 03.04.20: - Fix adding search engine plugin
    • 02.08.19: - Add qbitorrent-cli for processing scripts.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 14.01.19: - Rebase to Ubuntu, add multi arch and pipeline logic.
    • 25.09.18: - Use buildstage type build, bump qbitorrent to 4.1.3.
    • 14.08.18: - Rebase to alpine 3.8, bump libtorrent to 1.1.9 and qbitorrent to 4.1.2.
    • 08.06.18: - Bump qbitorrent to 4.1.1.
    • 26.04.18: - Bump libtorrent to 1.1.7.
    • 02.03.18: - Bump qbitorrent to 4.0.4 and libtorrent to 1.1.6.
    • 02.01.18: - Deprecate cpu_core routine lack of scaling.
    • 19.12.17: - Update to v4.0.3.
    • 09.02.17: - Rebase to alpine 3.7
    • 01.12.17: - Update to v4.0.2.
    • 27.11.17: - Update to v4 and use cpu_core routine to speed up builds.
    • 16.09.17: - Bump to 3.3.16, Add WEBUI_PORT variable and notes to README to allow changing port of webui.
    • 01.08.17: - Initial Release.
    • 12.02.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-qdirstat/index.html b/images/docker-qdirstat/index.html index 7af38cd298..1d9cd33dba 100644 --- a/images/docker-qdirstat/index.html +++ b/images/docker-qdirstat/index.html @@ -1,4 +1,4 @@ - qdirstat - LinuxServer.io

    linuxserver/qdirstat

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    QDirStat Qt-based directory statistics: KDirStat without any KDE -- from the author of the original KDirStat.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/qdirstat:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + qdirstat - LinuxServer.io       

    linuxserver/qdirstat

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    QDirStat Qt-based directory statistics: KDirStat without any KDE -- from the author of the original KDirStat.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/qdirstat:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       qdirstat:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 QdirStat desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores qdirstat settings and scans.
    /data Data you want to analyze disk usage information of.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it qdirstat /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f qdirstat
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' qdirstat
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/qdirstat:latest

    Versions

    • 06.04.22: - Add xfce terminal.
    • 13.01.22: - Compile from source.
    • 11.01.22: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it qdirstat /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f qdirstat
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' qdirstat
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/qdirstat:latest

    Versions

    • 06.04.22: - Add xfce terminal.
    • 13.01.22: - Compile from source.
    • 11.01.22: - Initial release.
    \ No newline at end of file diff --git a/images/docker-quassel-core/index.html b/images/docker-quassel-core/index.html index 06ddf6ec4f..1ca3a50bb7 100644 --- a/images/docker-quassel-core/index.html +++ b/images/docker-quassel-core/index.html @@ -1,4 +1,4 @@ - quassel-core - LinuxServer.io

    linuxserver/quassel-core

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Quassel-core is a modern, cross-platform, distributed IRC client, meaning that one (or multiple) client(s) can attach to and detach from a central core.

    This container handles the IRC connection (quasselcore) and requires a desktop client (quasselclient) to be used and configured. It is designed to be always on and will keep your identity present in IRC even when your clients cannot be online. Backlog (history) is downloaded by your client upon reconnection allowing infinite scrollback through time.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/quassel-core:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Quassel wiki: quassel

    A great place to host a quassel instance is a VPS, such as DigitalOcean. For $5 a month you can have a 24/7 IRC connection and be up and running in under 55 seconds (or so they claim).

    Once you have the container running, fire up a quassel desktop client and connect to your new core instance using your droplets public IP address and the port you specified in your docker run command default: 4242. Create an admin user, select SQLite as your storage backend (Quassel limitation). Setup your real name and nick, then press Save & Connect.

    You're now connected to IRC. Let's add you to our IRC #linuxserver.io room on Freenode. Click 'File' > 'Networks' > 'Configure Networks' > 'Add' (under Networks section, not Servers) > 'Use preset' > Select 'Freenode' and then configure your identity using the tabs in the 'Network details' section. Once connected to Freenode, click #join and enter #linuxserver.io. That's it, you're done.

    Stateless usage

    To use Quassel in stateless mode, where it needs to be configured through environment arguments, run it with the --config-from-environment RUN_OPTS environment setting.

    Env Usage
    DB_BACKEND SQLite or PostgreSQL
    DB_PGSQL_USERNAME PostgreSQL User
    DB_PGSQL_PASSWORD PostgreSQL Password
    DB_PGSQL_HOSTNAME PostgreSQL Host
    DB_PGSQL_PORT PostgreSQL Port
    AUTH_AUTHENTICATOR Database or LDAP
    AUTH_LDAP_HOSTNAME LDAP Host
    AUTH_LDAP_PORT LDAP Port
    AUTH_LDAP_BIND_DN LDAP Bind Domain
    AUTH_LDAP_BIND_PASSWORD LDAP Password
    AUTH_LDAP_FILTER LDAP Authentication Filters
    AUTH_LDAP_UID_ATTRIBUTE LDAP UID

    Additionally you have RUN_OPTS that can be used to customize pathing and behvior.

    Option Example
    --strict-ident strictly bool --strict-ident
    --ident-daemon strictly bool --ident-daemon
    --ident-port --ident-port "10113"
    --ident-listen --ident-listen "::,0.0.0.0"
    --ssl-cert --ssl-cert /config/keys/cert.crt
    --ssl-key --ssl-key /config/keys/cert.key
    --require-ssl strictly bool --require-ssl

    Minimal example with SQLite:

    docker create \
    + quassel-core - LinuxServer.io       

    linuxserver/quassel-core

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Quassel-core is a modern, cross-platform, distributed IRC client, meaning that one (or multiple) client(s) can attach to and detach from a central core.

    This container handles the IRC connection (quasselcore) and requires a desktop client (quasselclient) to be used and configured. It is designed to be always on and will keep your identity present in IRC even when your clients cannot be online. Backlog (history) is downloaded by your client upon reconnection allowing infinite scrollback through time.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/quassel-core:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Quassel wiki: quassel

    A great place to host a quassel instance is a VPS, such as DigitalOcean. For $5 a month you can have a 24/7 IRC connection and be up and running in under 55 seconds (or so they claim).

    Once you have the container running, fire up a quassel desktop client and connect to your new core instance using your droplets public IP address and the port you specified in your docker run command default: 4242. Create an admin user, select SQLite as your storage backend (Quassel limitation). Setup your real name and nick, then press Save & Connect.

    You're now connected to IRC. Let's add you to our IRC #linuxserver.io room on Freenode. Click 'File' > 'Networks' > 'Configure Networks' > 'Add' (under Networks section, not Servers) > 'Use preset' > Select 'Freenode' and then configure your identity using the tabs in the 'Network details' section. Once connected to Freenode, click #join and enter #linuxserver.io. That's it, you're done.

    Stateless usage

    To use Quassel in stateless mode, where it needs to be configured through environment arguments, run it with the --config-from-environment RUN_OPTS environment setting.

    Env Usage
    DB_BACKEND SQLite or PostgreSQL
    DB_PGSQL_USERNAME PostgreSQL User
    DB_PGSQL_PASSWORD PostgreSQL Password
    DB_PGSQL_HOSTNAME PostgreSQL Host
    DB_PGSQL_PORT PostgreSQL Port
    AUTH_AUTHENTICATOR Database or LDAP
    AUTH_LDAP_HOSTNAME LDAP Host
    AUTH_LDAP_PORT LDAP Port
    AUTH_LDAP_BIND_DN LDAP Bind Domain
    AUTH_LDAP_BIND_PASSWORD LDAP Password
    AUTH_LDAP_FILTER LDAP Authentication Filters
    AUTH_LDAP_UID_ATTRIBUTE LDAP UID

    Additionally you have RUN_OPTS that can be used to customize pathing and behvior.

    Option Example
    --strict-ident strictly bool --strict-ident
    --ident-daemon strictly bool --ident-daemon
    --ident-port --ident-port "10113"
    --ident-listen --ident-listen "::,0.0.0.0"
    --ssl-cert --ssl-cert /config/keys/cert.crt
    --ssl-key --ssl-key /config/keys/cert.key
    --require-ssl strictly bool --require-ssl

    Minimal example with SQLite:

    docker create \
       --name=quassel-core \
       -e PUID=1000 \
       -e PGID=1000 \
    @@ -41,4 +41,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    4242 The port quassel-core listens for connections on.
    10113 Optional Ident Port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    RUN_OPTS=--config-from-environment Custom CLI options for Quassel

    Volume Mappings (-v)

    Volume Function
    /config Database and quassel-core configuration storage.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it quassel-core /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f quassel-core
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' quassel-core
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/quassel-core:latest

    Versions

    • 03.01.22: - Rebase to alpine 3.15. Add new build deps and apply other fixes for 0.14.
    • 07.08.21: - Fixing incorrect database password variable operator.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 20.03.19: - Make stateless operation an option, with input from one of the quassel team.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 08.01.19: - Rebase to Ubuntu Bionic and upgrade to Quassel0.13.0 See here..
    • 30.07.18: - Rebase to alpine:3.8 and use buildstage.
    • 03.01.18: - Deprecate cpu_core routine lack of scaling.
    • 09.12.17: - Rebase to alpine:3.7.
    • 26.11.17: - Use cpu core counting routine to speed up build time.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 27.05.17: - Rebase to alpine:3.6.
    • 13.05.17: - Switch to git source.
    • 28.12.16: - Rebase to alpine:3.5.
    • 23.11.16: - Rebase to alpine:edge.
    • 23.09.16: - Use QT5 dependencies (thanks bauerj).
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 10.08.16: - Rebase to xenial.
    • 14.10.15: - Removed the webui, turned out to be to unstable for most usecases.
    • 01.09.15: - Fixed mistake in README.
    • 30.07.15: - Switched to internal baseimage, and fixed a bug with updating the webinterface.
    • 06.07.15: - Enabled BLOWFISH encryption and added a (optional) webinterface, for the times you dont have access to your client.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it quassel-core /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f quassel-core
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' quassel-core
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/quassel-core:latest

    Versions

    • 03.01.22: - Rebase to alpine 3.15. Add new build deps and apply other fixes for 0.14.
    • 07.08.21: - Fixing incorrect database password variable operator.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 20.03.19: - Make stateless operation an option, with input from one of the quassel team.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 08.01.19: - Rebase to Ubuntu Bionic and upgrade to Quassel0.13.0 See here..
    • 30.07.18: - Rebase to alpine:3.8 and use buildstage.
    • 03.01.18: - Deprecate cpu_core routine lack of scaling.
    • 09.12.17: - Rebase to alpine:3.7.
    • 26.11.17: - Use cpu core counting routine to speed up build time.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 27.05.17: - Rebase to alpine:3.6.
    • 13.05.17: - Switch to git source.
    • 28.12.16: - Rebase to alpine:3.5.
    • 23.11.16: - Rebase to alpine:edge.
    • 23.09.16: - Use QT5 dependencies (thanks bauerj).
    • 10.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 10.08.16: - Rebase to xenial.
    • 14.10.15: - Removed the webui, turned out to be to unstable for most usecases.
    • 01.09.15: - Fixed mistake in README.
    • 30.07.15: - Switched to internal baseimage, and fixed a bug with updating the webinterface.
    • 06.07.15: - Enabled BLOWFISH encryption and added a (optional) webinterface, for the times you dont have access to your client.
    \ No newline at end of file diff --git a/images/docker-quassel-web/index.html b/images/docker-quassel-web/index.html index 340e7f5df3..fd3b36ff72 100644 --- a/images/docker-quassel-web/index.html +++ b/images/docker-quassel-web/index.html @@ -1,4 +1,4 @@ - quassel-web - LinuxServer.io

    linuxserver/quassel-web

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Quassel-web is a web client for Quassel. Note that a Quassel-Core instance is required, we have a container available here.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/quassel-web:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    By default this container webui will be available on https://$SERVER_IP:64443. To setup this container you can either use the envrionment variables we recommend or manually setup the configuration file by leaving out the QUASSEL_CORE environment variable among others. The configuration file using this method can be found at:

    /config/settings-user.js
    + quassel-web - LinuxServer.io       

    linuxserver/quassel-web

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Quassel-web is a web client for Quassel. Note that a Quassel-Core instance is required, we have a container available here.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/quassel-web:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    By default this container webui will be available on https://$SERVER_IP:64443. To setup this container you can either use the envrionment variables we recommend or manually setup the configuration file by leaving out the QUASSEL_CORE environment variable among others. The configuration file using this method can be found at:

    /config/settings-user.js
     

    Strict reverse proxies

    This image uses a self-signed certificate by default. This naturally means the scheme is https. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
    @@ -30,4 +30,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    64443 Quassel-web https webui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    QUASSEL_CORE=192.168.1.10 specify the URL or IP address of your Quassel Core instance
    QUASSEL_PORT=4242 specify the port of your Quassel Core instance
    URL_BASE=/quassel Specify a url-base in reverse proxy setups ie. /quassel

    Volume Mappings (-v)

    Volume Function
    /config this will store config on the docker host

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it quassel-web /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f quassel-web
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' quassel-web
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/quassel-web:latest

    Versions

    • 12.02.22: - Rebasing to alpine 3.15.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 18.05.19: - Reconfigure environmental variable setup.
    • 28.04.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it quassel-web /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f quassel-web
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' quassel-web
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/quassel-web:latest

    Versions

    • 12.02.22: - Rebasing to alpine 3.15.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 18.05.19: - Reconfigure environmental variable setup.
    • 28.04.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-radarr/index.html b/images/docker-radarr/index.html index 3234145e83..8a6932a87a 100644 --- a/images/docker-radarr/index.html +++ b/images/docker-radarr/index.html @@ -1,4 +1,4 @@ - radarr - LinuxServer.io

    linuxserver/radarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Radarr - A fork of Sonarr to work with movies à la Couchpotato.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/radarr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Radarr releases
    develop Radarr releases from their develop branch
    nightly Radarr releases from their nightly branch

    Application Setup

    Access the webui at <your-ip>:7878, for more information check out Radarr.

    Media folders

    We have set /movies and /downloads as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + radarr - LinuxServer.io       

    linuxserver/radarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Radarr - A fork of Sonarr to work with movies à la Couchpotato.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/radarr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Radarr releases
    develop Radarr releases from their develop branch
    nightly Radarr releases from their nightly branch

    Application Setup

    Access the webui at <your-ip>:7878, for more information check out Radarr.

    Media folders

    We have set /movies and /downloads as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       radarr:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    7878 The port for the Radarr webinterface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London, this is required for Radarr

    Volume Mappings (-v)

    Volume Function
    /config Database and Radarr configs
    /movies Location of Movie library on disk (See note in Application setup)
    /downloads Location of download managers output directory (See note in Application setup)

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it radarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f radarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' radarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/radarr:latest

    Versions

    • 06.06.22: - Rebase master branch to Alpine 3.15.
    • 20.02.22: - Rebase develop branch to Alpine.
    • 04.02.22: - Rebase nightly branch to Alpine and deprecate nightly-alpine branch.
    • 27.12.21: - Add nightly-alpine branch.
    • 17.10.21: - Remove UMASK_SET.
    • 08.05.21: - Make the paths clearer to the user
    • 17.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 11.30.20: - Publish develop tag.
    • 11.28.20: - Switch to v3 .NET CORE builds (no more mono, 5.14 tag is deprecated). Rebase to Focal (for issues on arm32v7, see here).
    • 05.04.20: - Move app to /app.
    • 01.08.19: - Rebase to Linuxserver LTS mono version.
    • 13.06.19: - Add env variable for setting umask.
    • 10.05.19: - Rebase to Bionic.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 09.09.18: - Add pipeline build process.
    • 24.02.18: - Add nightly branch.
    • 06.02.18: - Radarr repo changed owner.
    • 15.12.17: - Fix continuation lines.
    • 17.04.17: - Switch to using inhouse mono baseimage, adds python also.
    • 13.04.17: - Switch to official mono repository.
    • 10.01.17: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it radarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f radarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' radarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/radarr:latest

    Versions

    • 06.06.22: - Rebase master branch to Alpine 3.15.
    • 20.02.22: - Rebase develop branch to Alpine.
    • 04.02.22: - Rebase nightly branch to Alpine and deprecate nightly-alpine branch.
    • 27.12.21: - Add nightly-alpine branch.
    • 17.10.21: - Remove UMASK_SET.
    • 08.05.21: - Make the paths clearer to the user
    • 17.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 11.30.20: - Publish develop tag.
    • 11.28.20: - Switch to v3 .NET CORE builds (no more mono, 5.14 tag is deprecated). Rebase to Focal (for issues on arm32v7, see here).
    • 05.04.20: - Move app to /app.
    • 01.08.19: - Rebase to Linuxserver LTS mono version.
    • 13.06.19: - Add env variable for setting umask.
    • 10.05.19: - Rebase to Bionic.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 09.09.18: - Add pipeline build process.
    • 24.02.18: - Add nightly branch.
    • 06.02.18: - Radarr repo changed owner.
    • 15.12.17: - Fix continuation lines.
    • 17.04.17: - Switch to using inhouse mono baseimage, adds python also.
    • 13.04.17: - Switch to official mono repository.
    • 10.01.17: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-raneto/index.html b/images/docker-raneto/index.html index b3d19b63d7..05a60b589f 100644 --- a/images/docker-raneto/index.html +++ b/images/docker-raneto/index.html @@ -1,4 +1,4 @@ - raneto - LinuxServer.io

    linuxserver/raneto

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Raneto - is an open source Knowledgebase platform that uses static Markdown files to power your Knowledgebase.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/raneto:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at http://:3000

    The default username and password is admin/password

    This application can only be configured through file storage the web interface is only for editing Markdown files. You need to understand the following paths and the role they play for the application:

    • /config/config.default.js - Main configuration file to setup your user, site name, etc.
    • /config/content - All of your Markdown files go here more info.
    • /config/images - This folder will serve content on http://:3000/images/.png you can put anything in here but it is specifically for image files so you can embed them in your Markdown files without using external hosting.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + raneto - LinuxServer.io       

    linuxserver/raneto

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Raneto - is an open source Knowledgebase platform that uses static Markdown files to power your Knowledgebase.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/raneto:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at http://:3000

    The default username and password is admin/password

    This application can only be configured through file storage the web interface is only for editing Markdown files. You need to understand the following paths and the role they play for the application:

    • /config/config.default.js - Main configuration file to setup your user, site name, etc.
    • /config/content - All of your Markdown files go here more info.
    • /config/images - This folder will serve content on http://:3000/images/.png you can put anything in here but it is specifically for image files so you can embed them in your Markdown files without using external hosting.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       raneto:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 The port for the Raneto web interface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Raneto config and Markdown files

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it raneto /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f raneto
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' raneto
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/raneto:latest

    Versions

    • 10.08.22: - Rebasing to alpine 3.15.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 02.06.20: - Rebasing to alpine 3.11.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 01.06.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it raneto /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f raneto
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' raneto
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/raneto:latest

    Versions

    • 10.08.22: - Rebasing to alpine 3.15.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 02.06.20: - Rebasing to alpine 3.11.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 01.06.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-rdesktop/index.html b/images/docker-rdesktop/index.html index 961a52f7f1..32cd077390 100644 --- a/images/docker-rdesktop/index.html +++ b/images/docker-rdesktop/index.html @@ -1,4 +1,4 @@ - rdesktop - LinuxServer.io

    linuxserver/rdesktop

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Rdesktop - Containers containing full desktop environments in many popular flavors for Alpine, Ubuntu, Arch, and Fedora accessible via RDP.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/rdesktop:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest XFCE Alpine
    ubuntu-xfce XFCE Ubuntu
    fedora-xfce XFCE Fedora
    arch-xfce XFCE Arch
    alpine-kde KDE Alpine
    ubuntu-kde KDE Ubuntu
    fedora-kde KDE Fedora
    arch-kde KDE Arch
    alpine-mate MATE Alpine
    ubuntu-mate MATE Ubuntu
    fedora-mate MATE Fedora
    arch-mate MATE Arch
    alpine-i3 i3 Alpine
    ubuntu-i3 i3 Ubuntu
    fedora-i3 i3 Fedora
    arch-i3 i3 Arch
    alpine-openbox Openbox Alpine
    ubuntu-openbox Openbox Ubuntu
    fedora-openbox Openbox Fedora
    arch-openbox Openbox Arch
    alpine-icewm IceWM Alpine
    ubuntu-icewm IceWM Ubuntu
    fedora-icewm IceWM Fedora
    arch-icewm IceWM Arch

    Application Setup

    The Default USERNAME and PASSWORD is: abc/abc

    Unlike our other containers these Desktops are not designed to be upgraded by Docker, you will keep your home directoy but anything you installed system level will be lost if you upgrade an existing container. To keep packages up to date instead use Ubuntu's own apt, Alpine's apk, Fedora's dnf, or Arch's pacman program

    You will need a Remote Desktop client to access this container Wikipedia List, by default it listens on 3389, but you can change that port to whatever you wish on the host side IE 3390:3389. The first thing you should do when you login to the container is to change the abc users password by issuing the passwd command.

    Modern GUI desktop apps (including some flavors terminals) have issues with the latest Docker and syscall compatibility, you can use Docker with the --security-opt seccomp=unconfined setting to allow these syscalls or try podman as they have updated their codebase to support them

    If you ever lose your password you can always reset it by execing into the container as root:

    docker exec -it rdesktop passwd abc
    + rdesktop - LinuxServer.io       

    linuxserver/rdesktop

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Rdesktop - Containers containing full desktop environments in many popular flavors for Alpine, Ubuntu, Arch, and Fedora accessible via RDP.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/rdesktop:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest XFCE Alpine
    ubuntu-xfce XFCE Ubuntu
    fedora-xfce XFCE Fedora
    arch-xfce XFCE Arch
    alpine-kde KDE Alpine
    ubuntu-kde KDE Ubuntu
    fedora-kde KDE Fedora
    arch-kde KDE Arch
    alpine-mate MATE Alpine
    ubuntu-mate MATE Ubuntu
    fedora-mate MATE Fedora
    arch-mate MATE Arch
    alpine-i3 i3 Alpine
    ubuntu-i3 i3 Ubuntu
    fedora-i3 i3 Fedora
    arch-i3 i3 Arch
    alpine-openbox Openbox Alpine
    ubuntu-openbox Openbox Ubuntu
    fedora-openbox Openbox Fedora
    arch-openbox Openbox Arch
    alpine-icewm IceWM Alpine
    ubuntu-icewm IceWM Ubuntu
    fedora-icewm IceWM Fedora
    arch-icewm IceWM Arch

    Application Setup

    The Default USERNAME and PASSWORD is: abc/abc

    Unlike our other containers these Desktops are not designed to be upgraded by Docker, you will keep your home directoy but anything you installed system level will be lost if you upgrade an existing container. To keep packages up to date instead use Ubuntu's own apt, Alpine's apk, Fedora's dnf, or Arch's pacman program

    You will need a Remote Desktop client to access this container Wikipedia List, by default it listens on 3389, but you can change that port to whatever you wish on the host side IE 3390:3389. The first thing you should do when you login to the container is to change the abc users password by issuing the passwd command.

    Modern GUI desktop apps (including some flavors terminals) have issues with the latest Docker and syscall compatibility, you can use Docker with the --security-opt seccomp=unconfined setting to allow these syscalls or try podman as they have updated their codebase to support them

    If you ever lose your password you can always reset it by execing into the container as root:

    docker exec -it rdesktop passwd abc
     

    By default we perform all logic for the abc user and we reccomend using that user only in the container, but new users can be added as long as there is a startwm.sh executable script in their home directory. All of these containers are configured with passwordless sudo, we make no efforts to secure or harden these containers and we do not reccomend ever publishing their ports to the public Internet.

    Hardware Acceleration (Ubuntu Container Only)

    Many desktop application will need access to a GPU to function properly and even some Desktop Environments have compisitor effects that will not function without a GPU. This is not a hard requirement and all base images will function without a video device mounted into the container.

    Intel/ATI/AMD

    To leverage hardware acceleration you will need to mount /dev/dri video device inside of the conainer.

    --device=/dev/dri:/dev/dri
     

    We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here: https://github.com/NVIDIA/nvidia-docker

    We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the container.

    Arm Devices

    Best effort is made to install tools to allow mounting in /dev/dri on Arm devices. In most cases if /dev/dri exists on the host it should just work. If running a Raspberry Pi 4 be sure to enable dtoverlay=vc4-fkms-v3d in your usercfg.txt.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
    @@ -37,4 +37,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3389 RDP access port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /var/run/docker.sock Docker Socket on the system, if you want to use Docker in the container
    /config abc users home directory

    Device Mappings (--device)

    Parameter Function
    /dev/dri Add this for GL support (Linux hosts only)

    Miscellaneous Options

    Parameter Function
    --shm-size= We set this to 1 gig to prevent modern web browsers from crashing
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function as syscalls are unkown to Docker

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it rdesktop /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f rdesktop
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' rdesktop
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/rdesktop:latest

    Versions

    • 27.10.22: - Rebase all Ubuntu images to Jammy 22.04.
    • 26.10.22: - Rebase Alpine xfce to 3.16, migrate to s6v3.
    • 05.03.22: - Organize tags differently to run Ubuntu at latest LTS, make Alpine latest, add docs about GPU accel.
    • 05.05.21: - Reduce default packages to their flavor specific basics.
    • 05.04.21: - Add Alpine flavor.
    • 06.04.20: - Start PulseAudio in images to support audio
    • 28.02.20: - Initial Releases
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it rdesktop /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f rdesktop
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' rdesktop
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/rdesktop:latest

    Versions

    • 27.10.22: - Rebase all Ubuntu images to Jammy 22.04.
    • 26.10.22: - Rebase Alpine xfce to 3.16, migrate to s6v3.
    • 05.03.22: - Organize tags differently to run Ubuntu at latest LTS, make Alpine latest, add docs about GPU accel.
    • 05.05.21: - Reduce default packages to their flavor specific basics.
    • 05.04.21: - Add Alpine flavor.
    • 06.04.20: - Start PulseAudio in images to support audio
    • 28.02.20: - Initial Releases
    \ No newline at end of file diff --git a/images/docker-readarr/index.html b/images/docker-readarr/index.html index 3548e1f063..1d75af3dd3 100644 --- a/images/docker-readarr/index.html +++ b/images/docker-readarr/index.html @@ -1,4 +1,4 @@ - readarr - LinuxServer.io

    linuxserver/readarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Readarr - Book Manager and Automation (Sonarr for Ebooks)

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/readarr:nightly should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest
    nightly Nightly Readarr releases

    Application Setup

    Access the webui at <your-ip>:8787, for more information check out Readarr.

    Media folders

    We have set /books and /downloads as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + readarr - LinuxServer.io       

    linuxserver/readarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Readarr - Book Manager and Automation (Sonarr for Ebooks)

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/readarr:nightly should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest
    nightly Nightly Readarr releases

    Application Setup

    Access the webui at <your-ip>:8787, for more information check out Readarr.

    Media folders

    We have set /books and /downloads as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       readarr:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8787 The port for the Readarr webinterface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London, this is required for Readarr

    Volume Mappings (-v)

    Volume Function
    /config Database and Readarr configs
    /books Location of Book library on disk (See note in Application setup)
    /downloads Location of download managers output directory (See note in Application setup)

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it readarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f readarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' readarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/readarr:nightly

    Versions

    • 21.01.22: - Remove chromaprint as it's no longer a required dependency.
    • 01.01.22: - Add chromaprint for audio fingerprinting.
    • 28.07.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it readarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f readarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' readarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/readarr:nightly

    Versions

    • 21.01.22: - Remove chromaprint as it's no longer a required dependency.
    • 01.01.22: - Add chromaprint for audio fingerprinting.
    • 28.07.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-readme-sync/index.html b/images/docker-readme-sync/index.html index aa171ee6ec..521d9ae82a 100644 --- a/images/docker-readme-sync/index.html +++ b/images/docker-readme-sync/index.html @@ -1,4 +1,4 @@ - readme-sync - LinuxServer.io

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    Forum Linuserver.io forum
    IRC freenode at #linuxserver.io more information at:- IRC
    Podcast Covers everything to do with getting the most from your Linux Server plus a focus on all things Docker and containerisation! Linuxserver.io Podcast

    The LinuxServer.io team brings you another image release featuring :-

    • regular and timely application updates
    • easy user mappings
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • security updates

    lsiodev/readme-sync

    Docker PullsDocker StarsBuild Status

    Utility to copy README.md from a given github.com repository to a given dockerhub.com repository.

     

    Usage

    docker run --rm=true \
    + readme-sync - LinuxServer.io       

    linuxserver.io

    Contact information:-

    Type Address/Details
    Discord Discord
    Forum Linuserver.io forum
    IRC freenode at #linuxserver.io more information at:- IRC
    Podcast Covers everything to do with getting the most from your Linux Server plus a focus on all things Docker and containerisation! Linuxserver.io Podcast

    The LinuxServer.io team brings you another image release featuring :-

    • regular and timely application updates
    • easy user mappings
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • security updates

    lsiodev/readme-sync

    Docker PullsDocker StarsBuild Status

    Utility to copy README.md from a given github.com repository to a given dockerhub.com repository.

     

    Usage

    docker run --rm=true \
         -e DOCKERHUB_USERNAME=<USERNAME> \
         -e DOCKERHUB_PASSWORD=<PASSWORD> \
         -e GIT_REPOSITORY=<GITHUB REPO> \
    @@ -6,4 +6,4 @@
         -e GIT_BRANCH=<GITHUB BRANCH> \
         lsiodev/readme-sync bash -c 'node sync'
     
    -

     

    Parameters

    The parameters are split into two halves, separated by a colon, the left hand side representing the host and the right the container side. For example with a port -p external:internal - what this shows is the port mapping from internal to external of the container. So -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 http://192.168.x.x:8080 would show you what's running INSIDE the container on port 80.

    Parameter Function
    -e DOCKERHUB_USERNAME your dockerhub username
    -e DOCKERHUB_PASSWORD your dockerhub password
    -e GIT_REPOSITORY github repository, i.e. linuxserver/docker-readme-sync
    -e DOCKER_REPOSITORY dockerhub repository, i.e. lsiodev/docker-readme-sync
    -e GIT_BRANCH github repository branch, optional (default: master)

      It is based on alpine and is not meant to run as a service. The sync is performed and the command exits.  

    Versions

    Date Changes
    13.01.21 Use ghcr baseimages. Fall back to external folder for readme lite.
    28.07.20 Rebase to alpine 3.12.
    20.08.18 Rebase to alpine 3.8.
    28.02.18 convert repo to use node.js implementation.
    17.11.17 add github branch support.
    16.10.16 merge ruby app.
    11.10.16 Initial development release.
    \ No newline at end of file +

     

    Parameters

    The parameters are split into two halves, separated by a colon, the left hand side representing the host and the right the container side. For example with a port -p external:internal - what this shows is the port mapping from internal to external of the container. So -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 http://192.168.x.x:8080 would show you what's running INSIDE the container on port 80.

    Parameter Function
    -e DOCKERHUB_USERNAME your dockerhub username
    -e DOCKERHUB_PASSWORD your dockerhub password
    -e GIT_REPOSITORY github repository, i.e. linuxserver/docker-readme-sync
    -e DOCKER_REPOSITORY dockerhub repository, i.e. lsiodev/docker-readme-sync
    -e GIT_BRANCH github repository branch, optional (default: master)

      It is based on alpine and is not meant to run as a service. The sync is performed and the command exits.  

    Versions

    Date Changes
    13.01.21 Use ghcr baseimages. Fall back to external folder for readme lite.
    28.07.20 Rebase to alpine 3.12.
    20.08.18 Rebase to alpine 3.8.
    28.02.18 convert repo to use node.js implementation.
    17.11.17 add github branch support.
    16.10.16 merge ruby app.
    11.10.16 Initial development release.
    \ No newline at end of file diff --git a/images/docker-remmina/index.html b/images/docker-remmina/index.html index dc449e6c52..61f0f9bb51 100644 --- a/images/docker-remmina/index.html +++ b/images/docker-remmina/index.html @@ -1,4 +1,4 @@ - remmina - LinuxServer.io

    linuxserver/remmina

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Remmina is a remote desktop client written in GTK, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large or tiny screens. Remmina supports multiple network protocols, in an integrated and consistent user interface. Currently RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC are supported.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/remmina:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + remmina - LinuxServer.io       

    linuxserver/remmina

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Remmina is a remote desktop client written in GTK, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large or tiny screens. Remmina supports multiple network protocols, in an integrated and consistent user interface. Currently RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC are supported.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/remmina:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       remmina:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Remmina desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores program settings.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it remmina /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f remmina
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' remmina
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/remmina:latest

    Versions

    • 19.06.22: - Rebase to Focal. Drop Telepathy plugin due to lack of packages.
    • 27.03.20: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it remmina /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f remmina
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' remmina
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/remmina:latest

    Versions

    • 19.06.22: - Rebase to Focal. Drop Telepathy plugin due to lack of packages.
    • 27.03.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-requestrr/index.html b/images/docker-requestrr/index.html index db653b32f3..241d37d363 100644 --- a/images/docker-requestrr/index.html +++ b/images/docker-requestrr/index.html @@ -1,4 +1,4 @@ - requestrr - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. The upstream dev has ended development.

    linuxserver/requestrr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Requestrr is a chatbot used to simplify using services like Sonarr/Radarr/Ombi via the use of chat.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/requestrr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at <your-ip>:4545, for more information check out Requestrr.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + requestrr - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. The upstream dev has ended development.

    linuxserver/requestrr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Requestrr is a chatbot used to simplify using services like Sonarr/Radarr/Ombi via the use of chat.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/requestrr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at <your-ip>:4545, for more information check out Requestrr.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       requestrr:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    4545 web gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it requestrr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f requestrr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' requestrr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/requestrr:latest

    Versions

    • 20.12.21: - Deprecate.
    • 27.09.21: - Allow app to write to tmp folder.
    • 21.02.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it requestrr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f requestrr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' requestrr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/requestrr:latest

    Versions

    • 20.12.21: - Deprecate.
    • 27.09.21: - Allow app to write to tmp folder.
    • 21.02.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-resilio-sync/index.html b/images/docker-resilio-sync/index.html index ece6cc3f55..73b0defd27 100644 --- a/images/docker-resilio-sync/index.html +++ b/images/docker-resilio-sync/index.html @@ -1,4 +1,4 @@ - resilio-sync - LinuxServer.io

    linuxserver/resilio-sync

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Resilio-sync (formerly BitTorrent Sync) uses the BitTorrent protocol to sync files and folders between all of your devices. There are both free and paid versions, this container supports both. There is an official sync image but we created this one as it supports user mapping to simplify permissions for volumes.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/resilio-sync:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • Webui is at <your-ip>:8888, for account creation and configuration.
    • More info on setup at Resilio Sync

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + resilio-sync - LinuxServer.io       

    linuxserver/resilio-sync

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Resilio-sync (formerly BitTorrent Sync) uses the BitTorrent protocol to sync files and folders between all of your devices. There are both free and paid versions, this container supports both. There is an official sync image but we created this one as it supports user mapping to simplify permissions for volumes.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/resilio-sync:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • Webui is at <your-ip>:8888, for account creation and configuration.
    • More info on setup at Resilio Sync

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       resilio-sync:
    @@ -31,4 +31,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8888 WebUI
    55555 Sync Port.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where resilio-sync should store its config file.
    /downloads Folder for downloads/cache.
    /sync Sync folders root.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it resilio-sync /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f resilio-sync
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' resilio-sync
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/resilio-sync:latest

    Versions

    • 03.10.21: - Use upstream apt repo to install. Rebase to focal.
    • 20.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.02.19: - Rebase to bionic, add pipeline logic and multi arch.
    • 05.02.18: - Add downloads volume mount.
    • 28.01.18: - Add /sync to dir whitelist.
    • 26.01.18: - Use variable for arch to bring in line with armhf arch repo.
    • 15.12.17: - Fix continuation lines.
    • 02.06.17: - Rebase to ubuntu xenial, alpine linux no longer works with resilio.
    • 22.05.17: - Add variable for user defined umask.
    • 14.05.17: - Use fixed version instead of latest, while 2.5.0 is broken on non glibc (alpine).
    • 08.02.17: - Rebase to alpine 3.5.
    • 02.11.16: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it resilio-sync /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f resilio-sync
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' resilio-sync
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/resilio-sync:latest

    Versions

    • 03.10.21: - Use upstream apt repo to install. Rebase to focal.
    • 20.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 11.02.19: - Rebase to bionic, add pipeline logic and multi arch.
    • 05.02.18: - Add downloads volume mount.
    • 28.01.18: - Add /sync to dir whitelist.
    • 26.01.18: - Use variable for arch to bring in line with armhf arch repo.
    • 15.12.17: - Fix continuation lines.
    • 02.06.17: - Rebase to ubuntu xenial, alpine linux no longer works with resilio.
    • 22.05.17: - Add variable for user defined umask.
    • 14.05.17: - Use fixed version instead of latest, while 2.5.0 is broken on non glibc (alpine).
    • 08.02.17: - Rebase to alpine 3.5.
    • 02.11.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-rsnapshot/index.html b/images/docker-rsnapshot/index.html index e1dd14c9d7..c898c7fd10 100644 --- a/images/docker-rsnapshot/index.html +++ b/images/docker-rsnapshot/index.html @@ -1,4 +1,4 @@ - rsnapshot - LinuxServer.io

    linuxserver/rsnapshot

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Rsnapshot is a filesystem snapshot utility based on rsync. rsnapshot makes it easy to make periodic snapshots of local machines, and remote machines over ssh. The code makes extensive use of hard links whenever possible, to greatly reduce the disk space required."

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/rsnapshot:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    IMPORTANT NOTES:

    After starting the container you will need to edit /config/rsnapshot.conf.

    SNAPSHOT ROOT DIRECTORY

    rsnapshot is configured to backup data to the /.snapshots volume by default. This can be changed in the config, but be sure you mount a volume to the container to match.

    BACKUP LEVELS / INTERVALS

    rsnapshot retains backups based on configurations in this section. Please see the rsnapshot readme for more information.

    BACKUP POINTS

    rsnapshot is configured to backup data from the /data volume by default. This can be changed in the config, but be sure you mount a volume to the container to match.

    cron

    You will then need to edit /config/crontabs/root to set cron jobs to run rsnapshot. By default no cron jobs are enabled. Examples are includes based on information from the rsnapshot readme.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + rsnapshot - LinuxServer.io       

    linuxserver/rsnapshot

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Rsnapshot is a filesystem snapshot utility based on rsync. rsnapshot makes it easy to make periodic snapshots of local machines, and remote machines over ssh. The code makes extensive use of hard links whenever possible, to greatly reduce the disk space required."

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/rsnapshot:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    IMPORTANT NOTES:

    After starting the container you will need to edit /config/rsnapshot.conf.

    SNAPSHOT ROOT DIRECTORY

    rsnapshot is configured to backup data to the /.snapshots volume by default. This can be changed in the config, but be sure you mount a volume to the container to match.

    BACKUP LEVELS / INTERVALS

    rsnapshot retains backups based on configurations in this section. Please see the rsnapshot readme for more information.

    BACKUP POINTS

    rsnapshot is configured to backup data from the /data volume by default. This can be changed in the config, but be sure you mount a volume to the container to match.

    cron

    You will then need to edit /config/crontabs/root to set cron jobs to run rsnapshot. By default no cron jobs are enabled. Examples are includes based on information from the rsnapshot readme.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       rsnapshot:
    @@ -26,4 +26,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=America/New_York Specify a timezone to use EG America/New_York

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.
    /.snapshots Storage location for all snapshots.
    /data Storage location for data to be backed up.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it rsnapshot /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f rsnapshot
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' rsnapshot
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/rsnapshot:latest

    Versions

    • 11.10.22: - Rebase to alpine 3.16, migrate to s6v3.
    • 10.10.21: - Rebase to alpine 3.14.
    • 20.08.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it rsnapshot /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f rsnapshot
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' rsnapshot
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/rsnapshot:latest

    Versions

    • 11.10.22: - Rebase to alpine 3.16, migrate to s6v3.
    • 10.10.21: - Rebase to alpine 3.14.
    • 20.08.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-rutorrent/index.html b/images/docker-rutorrent/index.html index b67d6b3fa5..558243a403 100644 --- a/images/docker-rutorrent/index.html +++ b/images/docker-rutorrent/index.html @@ -1,4 +1,4 @@ - rutorrent - LinuxServer.io

    linuxserver/rutorrent

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Rutorrent is a popular rtorrent client with a webui for ease of use.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/rutorrent should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
    + rutorrent - LinuxServer.io       

    linuxserver/rutorrent

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build LSIO CI

    Rutorrent is a popular rtorrent client with a webui for ease of use.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/rutorrent should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    Compatible with docker-compose v2 schemas.

    ---
     version: "2.1"
     services:
       rutorrent:
    @@ -35,4 +35,4 @@ services:
     protocol.pex.set = no
     

    If after updating you see an error about connecting to rtorrent in the webui, remove or comment out these lines in /config/rtorrent/rtorrent.rc ,whatever value is set, yes or no. Just setting them to no will still cause the error..

    trackers.use_udp.set = yes
     protocol.pex.set = no
    -

    To add plugins, create a plugins folder in your /config directory and add your plugin folders. Ensure proper user and group ownership is set once you add the directories. To add themes, create a themes folder in your /config directory and add your theme folders. Ensure proper user and group ownership is set once you add the directories.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it rutorrent /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f rutorrent
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' rutorrent
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/rutorrent

    Versions

    • 25.03.22: - Deprecated. Please migrate to crazy-max's image.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 29.02.20: - Update readme for pex/dht.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 20.05.19: - Shift to building from official releases instead of commits.
    • 13.05.19: - Add libffi and openssl.
    • 07.05.19: - Add cloudscraper pip package.
    • 11.04.19: - Fix warnings in webui by adding python3, procps and pip packages.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 03.11.18: - Add pipeline and multi arch logic to repo.
    • 27.08.18: - Add bind tools package.
    • 22.08.18: - Rebase to alpine 3.8.
    • 08.12.17: - Rebase to alpine 3.7, add sox package.
    • 28.10.17: - Mediainfo moved from testing to community repo.
    • 09.10.17: - Use repo version of mediainfo to shorten build time.
    • 28.05.17: - Fix permissions on secondary temp folder of nginx.
    • 26.05.17: - Rebase to alpine 3.6.
    • 03.05.17: - Fix log permissions.
    • 18.03.17: - Note in readme about disabling dht in some circumstances.
    • 24.02.17: - Patch a source file to quash rss https bug.
    • 29.01.17: - Rebase to alpine 3.5.
    • 20.11.16: - Add php7-mbstring package, bump mediainfo to 0.7.90.
    • 14.10.16: - Add version layer information.
    • 04.10.16: - Remove redundant sessions folder.
    • 30.09.16: - Fix umask.
    • 21.09.16: - Bump mediainfo, reorg dockerfile, add full wget package.
    • 09.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README, bump mediainfo version to 0.7.87.
    • 07.08.16: - Perms fix on nginx tmp folder, also exposed php.ini for editing by use in /config/php.
    • 26.07.16: - Rebase to alpine.
    • 08.03.16: - Initial Release.
    \ No newline at end of file +

    To add plugins, create a plugins folder in your /config directory and add your plugin folders. Ensure proper user and group ownership is set once you add the directories. To add themes, create a themes folder in your /config directory and add your theme folders. Ensure proper user and group ownership is set once you add the directories.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it rutorrent /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f rutorrent
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' rutorrent
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/rutorrent

    Versions

    • 25.03.22: - Deprecated. Please migrate to crazy-max's image.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 29.02.20: - Update readme for pex/dht.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 20.05.19: - Shift to building from official releases instead of commits.
    • 13.05.19: - Add libffi and openssl.
    • 07.05.19: - Add cloudscraper pip package.
    • 11.04.19: - Fix warnings in webui by adding python3, procps and pip packages.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 03.11.18: - Add pipeline and multi arch logic to repo.
    • 27.08.18: - Add bind tools package.
    • 22.08.18: - Rebase to alpine 3.8.
    • 08.12.17: - Rebase to alpine 3.7, add sox package.
    • 28.10.17: - Mediainfo moved from testing to community repo.
    • 09.10.17: - Use repo version of mediainfo to shorten build time.
    • 28.05.17: - Fix permissions on secondary temp folder of nginx.
    • 26.05.17: - Rebase to alpine 3.6.
    • 03.05.17: - Fix log permissions.
    • 18.03.17: - Note in readme about disabling dht in some circumstances.
    • 24.02.17: - Patch a source file to quash rss https bug.
    • 29.01.17: - Rebase to alpine 3.5.
    • 20.11.16: - Add php7-mbstring package, bump mediainfo to 0.7.90.
    • 14.10.16: - Add version layer information.
    • 04.10.16: - Remove redundant sessions folder.
    • 30.09.16: - Fix umask.
    • 21.09.16: - Bump mediainfo, reorg dockerfile, add full wget package.
    • 09.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README, bump mediainfo version to 0.7.87.
    • 07.08.16: - Perms fix on nginx tmp folder, also exposed php.ini for editing by use in /config/php.
    • 26.07.16: - Rebase to alpine.
    • 08.03.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-sabnzbd/index.html b/images/docker-sabnzbd/index.html index 52fcfc2c6f..7dbbc05f20 100644 --- a/images/docker-sabnzbd/index.html +++ b/images/docker-sabnzbd/index.html @@ -1,4 +1,4 @@ - sabnzbd - LinuxServer.io

    linuxserver/sabnzbd

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Sabnzbd makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/sabnzbd:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable SABnzbd releases
    unstable Pre-releases from the develop branch
    nightly Latest commits from the develop branch

    Application Setup

    Initial setup is done from the http port.

    See the SABnzbd wiki for more information.

    nzb-notify

    nzb-notify is included with this image as a convenience script. To use it set the Scripts folder in the Folder settings to /app/nzbnotify and then configure it under Notifications. See nzb-notify for more information.

    Download folders

    In Sabnzbd gui settings, under Folders, make sure to set the Completed Download Folder as /downloads and the Temporary Download Folder as /incomplete-downloads

    We have set /incomplete-downloads and /downloads as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + sabnzbd - LinuxServer.io       

    linuxserver/sabnzbd

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Sabnzbd makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/sabnzbd:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable SABnzbd releases
    unstable Pre-releases from the develop branch
    nightly Latest commits from the develop branch

    Application Setup

    Initial setup is done from the http port.

    See the SABnzbd wiki for more information.

    nzb-notify

    nzb-notify is included with this image as a convenience script. To use it set the Scripts folder in the Folder settings to /app/nzbnotify and then configure it under Notifications. See nzb-notify for more information.

    Download folders

    In Sabnzbd gui settings, under Folders, make sure to set the Completed Download Folder as /downloads and the Temporary Download Folder as /incomplete-downloads

    We have set /incomplete-downloads and /downloads as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       sabnzbd:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 HTTP port for the WebUI.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Local path for sabnzbd config files.
    /downloads Local path for finished downloads.
    /incomplete-downloads Local path for incomplete-downloads.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sabnzbd /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sabnzbd
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sabnzbd
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/sabnzbd:latest

    Versions

    • 03.10.22: - Rebase master branch to Alpine 3.16, migrate to s6v3.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 31.07.22: - Add nightly tag.
    • 10.03.22: - Add nzb-notify.
    • 22.02.22: - Rebase master branch to Alpine, build unrar from source, deprecate Alpine branch.
    • 25.01.22: - Rebase Unstable branch to Alpine.
    • 13.01.22: - Add alpine branch
    • 08.08.21: - Bump to focal, dont enforce binding to ipv4 port 8080
    • 24.07.21: - Add python3-setuptools.
    • 14.05.21: - Use linuxserver.io wheel index for pip packages.
    • 12.02.21: - Clean up rust/cargo and pip cache.
    • 17.08.20: - Run from source with python3 instead of ppa, remove python2 completely, symlink python to python3.
    • 02.01.20: - Add python3 on top of python2 to image during transition.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 25.02.19: - Rebase to Bionic, add python deps for scripts.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 13.12.17: - Fix continuation lines.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 10.04.17: - Bump to 2.0 Release.
    • 25.02.17: - Switch to nobetas repo for master/latest branch and add unstable branch.
    • 08.02.17: - Add pythonioenconding=utf8 as env.
    • 15.09.16: - Compile par2 multicore as per latest info sabnzbd git readme.
    • 11.09.16: - Bump to release of 1.10.
    • 09.09.16: - Rebase back to xenial, issues with alpine version of python and 1.10 branch of sab.
    • 28.08.16: - Rebase to alpine, using git version of sab.
    • 17.03.16: - Bump to install 1.0 final at startup.
    • 14.03.16: - Refresh image to pick up latest RC.
    • 23.01.15: - Refresh image.
    • 14.12.15: - Refresh image to pick up latest beta.
    • 21.08.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sabnzbd /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sabnzbd
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sabnzbd
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/sabnzbd:latest

    Versions

    • 03.10.22: - Rebase master branch to Alpine 3.16, migrate to s6v3.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 31.07.22: - Add nightly tag.
    • 10.03.22: - Add nzb-notify.
    • 22.02.22: - Rebase master branch to Alpine, build unrar from source, deprecate Alpine branch.
    • 25.01.22: - Rebase Unstable branch to Alpine.
    • 13.01.22: - Add alpine branch
    • 08.08.21: - Bump to focal, dont enforce binding to ipv4 port 8080
    • 24.07.21: - Add python3-setuptools.
    • 14.05.21: - Use linuxserver.io wheel index for pip packages.
    • 12.02.21: - Clean up rust/cargo and pip cache.
    • 17.08.20: - Run from source with python3 instead of ppa, remove python2 completely, symlink python to python3.
    • 02.01.20: - Add python3 on top of python2 to image during transition.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 25.02.19: - Rebase to Bionic, add python deps for scripts.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 13.12.17: - Fix continuation lines.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 10.04.17: - Bump to 2.0 Release.
    • 25.02.17: - Switch to nobetas repo for master/latest branch and add unstable branch.
    • 08.02.17: - Add pythonioenconding=utf8 as env.
    • 15.09.16: - Compile par2 multicore as per latest info sabnzbd git readme.
    • 11.09.16: - Bump to release of 1.10.
    • 09.09.16: - Rebase back to xenial, issues with alpine version of python and 1.10 branch of sab.
    • 28.08.16: - Rebase to alpine, using git version of sab.
    • 17.03.16: - Bump to install 1.0 final at startup.
    • 14.03.16: - Refresh image to pick up latest RC.
    • 23.01.15: - Refresh image.
    • 14.12.15: - Refresh image to pick up latest beta.
    • 21.08.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-scrutiny/index.html b/images/docker-scrutiny/index.html index d6fa2d01d9..feaf797cca 100644 --- a/images/docker-scrutiny/index.html +++ b/images/docker-scrutiny/index.html @@ -1,4 +1,4 @@ - scrutiny - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend the official images: https://github.com/AnalogJ/scrutiny#docker

    linuxserver/scrutiny

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Scrutiny WebUI for smartd S.M.A.R.T monitoring. Scrutiny is a Hard Drive Health Dashboard & Monitoring solution, merging manufacturer provided S.M.A.R.T metrics with real-world failure rates from Backblaze.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/scrutiny:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This container can be run as an 'all-in-one' deployment or as a hub / spoke deployment. Use the environment variables SCRUTINY_WEB and SCRUTINY_COLLECTOR to control the mode of the container. Setting both to true will deploy the container as both a collector and the web UI - this is the simplest and most straightforward deployment approach. To make use of the hub and spoke model, run this container in "collector" mode by specifying SCRUTINY_API_ENDPOINT. Set this to the host that is running the API. For this to work, you will need to expose the API port directly from the container (by default this is 8080).

    You may need to manually enter the container to run scrutiny-collector-metrics run for your first job or wait until around midnight for it to kick off.

    A fully commented example configuration yaml file can be found in the original project repository here. Place this file in the location mounted to /config.

    A note on --cap-add for this container: * SYS_RAWIO is necessary to allow smartctl permission to query your device SMART data. * SYS_ADMIN is required for NVMe drives as per upstream issue #26.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + scrutiny - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. We recommend the official images: https://github.com/AnalogJ/scrutiny#docker

    linuxserver/scrutiny

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Scrutiny WebUI for smartd S.M.A.R.T monitoring. Scrutiny is a Hard Drive Health Dashboard & Monitoring solution, merging manufacturer provided S.M.A.R.T metrics with real-world failure rates from Backblaze.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/scrutiny:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    This container can be run as an 'all-in-one' deployment or as a hub / spoke deployment. Use the environment variables SCRUTINY_WEB and SCRUTINY_COLLECTOR to control the mode of the container. Setting both to true will deploy the container as both a collector and the web UI - this is the simplest and most straightforward deployment approach. To make use of the hub and spoke model, run this container in "collector" mode by specifying SCRUTINY_API_ENDPOINT. Set this to the host that is running the API. For this to work, you will need to expose the API port directly from the container (by default this is 8080).

    You may need to manually enter the container to run scrutiny-collector-metrics run for your first job or wait until around midnight for it to kick off.

    A fully commented example configuration yaml file can be found in the original project repository here. Place this file in the location mounted to /config.

    A note on --cap-add for this container: * SYS_RAWIO is necessary to allow smartctl permission to query your device SMART data. * SYS_ADMIN is required for NVMe drives as per upstream issue #26.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       scrutiny:
    @@ -45,4 +45,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8080 Port for scrutiny's web interface and API.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    SCRUTINY_API_ENDPOINT=http://localhost:8080 # optional - API endpoint of the scrutiny UI. Do not change unless using as a remote collector
    SCRUTINY_WEB=true # optional - Run the web service.
    SCRUTINY_COLLECTOR=true # optional - Run the metrics collector.

    Volume Mappings (-v)

    Volume Function
    /config Where config is stored.
    /run/udev:ro Provides necessary metadata to Scrutiny.

    Device Mappings (--device)

    Parameter Function
    /dev/sda This is how Scrutiny accesses drives. Optionally supply /dev:/dev instead for all devices.
    /dev/sdb A second drive.
    /dev/nvme1n1 An NVMe drive. NVMe requires --cap-add=SYS_ADMIN.

    Miscellaneous Options

    Parameter Function

    Portainer notice

    {% hint style="warning" %} This image utilises cap_add or sysctl to work properly. This is not implemented properly in some versions of Portainer, thus this image may not work if deployed through Portainer. {% endhint %}

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it scrutiny /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f scrutiny
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' scrutiny
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/scrutiny:latest

    Versions

    • 13.06.22: - Deprecate container.
    • 19.01.22: - Rebase to Alpine 3.15.
    • 22.11.20: - Added fix for nsswitch.conf to resolve local hosts
    • 17.09.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it scrutiny /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f scrutiny
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' scrutiny
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/scrutiny:latest

    Versions

    • 13.06.22: - Deprecate container.
    • 19.01.22: - Rebase to Alpine 3.15.
    • 22.11.20: - Added fix for nsswitch.conf to resolve local hosts
    • 17.09.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-shout-irc/index.html b/images/docker-shout-irc/index.html index 0592d91626..1515384b0a 100644 --- a/images/docker-shout-irc/index.html +++ b/images/docker-shout-irc/index.html @@ -1,4 +1,4 @@ - linuxserver/shout-irc - LinuxServer.io

    linuxserver/shout-irc

    Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED. PLEASE MIGRATE TO THELOUNGE linuxserver/thelounge Shout-irc is a web IRC client that you host on your own server.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/shout-irc should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
    + linuxserver/shout-irc - LinuxServer.io       

    linuxserver/shout-irc

    Docker Pulls Docker Stars Build Status

    THIS IMAGE IS DEPRECATED. PLEASE MIGRATE TO THELOUNGE linuxserver/thelounge Shout-irc is a web IRC client that you host on your own server.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/shout-irc should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
       --name=shout-irc \
       -e PUID=1000 \
       -e PGID=1000 \
    @@ -24,4 +24,4 @@ services:
         restart: unless-stopped
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    9000 Application WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    • To log in to the application, browse to https://:9000. To setup user account(s) edit /config/config.json Change the value public: true, to public: false, restart the container and enter the following from the command line of the host: docker exec -it thelounge thelounge add <user> Enter a password when prompted, refresh your browser. You should now be prompted for a password on the webinterface.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it shout-irc /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f shout-irc
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' shout-irc
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/shout-irc

    Versions

    • 11.06.19: - DEPRECATE IMAGE, USE THELOUNGE.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 25.08.18: - Rebase to alpine 3.8.
    • 13.12.17: - Rebase to alpine 3.7.
    • 27.05.17: - Rebase to alpine 3.6.
    • 09.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 31.08.16: - Rebase to alpine linux, move to lsiocommunity
    \ No newline at end of file +

    Application Setup

    • To log in to the application, browse to https://:9000. To setup user account(s) edit /config/config.json Change the value public: true, to public: false, restart the container and enter the following from the command line of the host: docker exec -it thelounge thelounge add <user> Enter a password when prompted, refresh your browser. You should now be prompted for a password on the webinterface.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it shout-irc /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f shout-irc
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' shout-irc
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/shout-irc

    Versions

    • 11.06.19: - DEPRECATE IMAGE, USE THELOUNGE.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 25.08.18: - Rebase to alpine 3.8.
    • 13.12.17: - Rebase to alpine 3.7.
    • 27.05.17: - Rebase to alpine 3.6.
    • 09.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 31.08.16: - Rebase to alpine linux, move to lsiocommunity
    \ No newline at end of file diff --git a/images/docker-sickchill/index.html b/images/docker-sickchill/index.html index f4b7798803..a99e176384 100644 --- a/images/docker-sickchill/index.html +++ b/images/docker-sickchill/index.html @@ -1,4 +1,4 @@ - sickchill - LinuxServer.io

    linuxserver/sickchill

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Sickchill is an Automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/sickchill:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Web interface is at <your ip>:8081 , set paths for downloads, tv-shows to match docker mappings via the webui.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + sickchill - LinuxServer.io       

    linuxserver/sickchill

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Sickchill is an Automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/sickchill:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Web interface is at <your ip>:8081 , set paths for downloads, tv-shows to match docker mappings via the webui.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       sickchill:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8081 will map the container's port 8081 to port 8081 on the host

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London specify your TimeZone e.g. Europe/London

    Volume Mappings (-v)

    Volume Function
    /config this will store config on the docker host
    /downloads this will store any downloaded data on the docker host
    /tv this will allow sickchill to view what you already have

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sickchill /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sickchill
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sickchill
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/sickchill:latest

    Versions

    • 17.02.22: - Rebase to alpine 3.15.
    • 20.11.21: - Modify binary usage from SickChill.py to SickChill.
    • 14.05.21: - Add linuxserver wheel index.
    • 12.02.21: - Rebasing to alpine 3.13. Add python certifi.
    • 17.09.20: - Update dependencies.
    • 06.09.20: - Switch to python3, install pip package.
    • 22.04.20: - Switch to git clone and using git tags for versioning.
    • 09.01.20: - Remove creating data volumes, fix build args for armhf and aarch64.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 17.04.19: - Adding Nodejs dependancy.
    • 31.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 10.10.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sickchill /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sickchill
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sickchill
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/sickchill:latest

    Versions

    • 17.02.22: - Rebase to alpine 3.15.
    • 20.11.21: - Modify binary usage from SickChill.py to SickChill.
    • 14.05.21: - Add linuxserver wheel index.
    • 12.02.21: - Rebasing to alpine 3.13. Add python certifi.
    • 17.09.20: - Update dependencies.
    • 06.09.20: - Switch to python3, install pip package.
    • 22.04.20: - Switch to git clone and using git tags for versioning.
    • 09.01.20: - Remove creating data volumes, fix build args for armhf and aarch64.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 17.04.19: - Adding Nodejs dependancy.
    • 31.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 10.10.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-sickgear/index.html b/images/docker-sickgear/index.html index 42e64efe5e..7879d4df13 100644 --- a/images/docker-sickgear/index.html +++ b/images/docker-sickgear/index.html @@ -1,4 +1,4 @@ - sickgear - LinuxServer.io

    linuxserver/sickgear

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    SickGear provides management of TV shows and/or Anime, it detects new episodes, links downloader apps, and more..

    For more information on SickGear visit their website and check it out: https://github.com/SickGear/SickGear

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/sickgear:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Setting up the application

    Access the webui at <your-ip>:8081, for more information check out SickGear.

    Migration

    Non linuxserver.io containers are known to have the following configuration differences and may need SickGear or docker changes to migrate an existing setup

    • The post processing directory which is volume mounted as downloads within this container may be incoming in other versions.

    • The permissions environmental variables which are defined as PGID and PUID within this container may have been APP_UID and APP_UID in other versions.

    • The configuration file directory which is volume mounted as config within this container may be set as the environmetal variable APP_DATA in other versions.

    • The cache directory which is set in config.ini may be configured as a fixed path cache_dir = /data/cache. Symptoms of this issue include port usage problems and a failure to start the web server log entries. Whilst the container is stopped alter this directive to cache_dir = cache which will allow SickGear to look for the folder relative to the volume mounted /config directory.

    It is recommended that a clean install be completed, rather than a migration, however if migration is necessary:

    • start a new instance of this image

    • compare and align SickGear version numbers bewteen old and new. Ideally they should match but at a minumum the old vesion should be a lower version number to allow SickGear itself to try and migrate

    • stop both containers

    • notice the configuration difference and migrate copies of the old settings into the new app

    • start the new container and test

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + sickgear - LinuxServer.io       

    linuxserver/sickgear

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    SickGear provides management of TV shows and/or Anime, it detects new episodes, links downloader apps, and more..

    For more information on SickGear visit their website and check it out: https://github.com/SickGear/SickGear

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/sickgear:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Setting up the application

    Access the webui at <your-ip>:8081, for more information check out SickGear.

    Migration

    Non linuxserver.io containers are known to have the following configuration differences and may need SickGear or docker changes to migrate an existing setup

    • The post processing directory which is volume mounted as downloads within this container may be incoming in other versions.

    • The permissions environmental variables which are defined as PGID and PUID within this container may have been APP_UID and APP_UID in other versions.

    • The configuration file directory which is volume mounted as config within this container may be set as the environmetal variable APP_DATA in other versions.

    • The cache directory which is set in config.ini may be configured as a fixed path cache_dir = /data/cache. Symptoms of this issue include port usage problems and a failure to start the web server log entries. Whilst the container is stopped alter this directive to cache_dir = cache which will allow SickGear to look for the folder relative to the volume mounted /config directory.

    It is recommended that a clean install be completed, rather than a migration, however if migration is necessary:

    • start a new instance of this image

    • compare and align SickGear version numbers bewteen old and new. Ideally they should match but at a minumum the old vesion should be a lower version number to allow SickGear itself to try and migrate

    • stop both containers

    • notice the configuration difference and migrate copies of the old settings into the new app

    • start the new container and test

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       sickgear:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8081 will map the container's port 8081 to port 8081 on the host

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config this will store any uploaded data on the docker host
    /tv where you store your tv shows
    /downloads your downloads folder for post processing (must not be download in progress)

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sickgear /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sickgear
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sickgear
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/sickgear:latest

    Versions

    • 18.11.22: - Update service file from legacy SickBeard.py to sickgear.py.
    • 10.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 19.09.22: - Rebase to alpine 3.15. Build unrar from source.
    • 31.01.21: - Add unrar.
    • 29.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 03.06.20: - Rebasing to alpine 3.12, switch to python3.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 07.11.18: - Pipeline prep
    • 07.07.18: - Initial draft release
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sickgear /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sickgear
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sickgear
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/sickgear:latest

    Versions

    • 18.11.22: - Update service file from legacy SickBeard.py to sickgear.py.
    • 10.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 19.09.22: - Rebase to alpine 3.15. Build unrar from source.
    • 31.01.21: - Add unrar.
    • 29.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 03.06.20: - Rebasing to alpine 3.12, switch to python3.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 07.11.18: - Pipeline prep
    • 07.07.18: - Initial draft release
    \ No newline at end of file diff --git a/images/docker-sickrage/index.html b/images/docker-sickrage/index.html index f33c8dc979..0872eceb58 100644 --- a/images/docker-sickrage/index.html +++ b/images/docker-sickrage/index.html @@ -1,4 +1,4 @@ - linuxserver/sickrage - LinuxServer.io

    linuxserver/sickrage

    Docker Pulls Docker Stars Build Status

    Sickrage has been deprecated. Please use linuxserver/sickchill instead

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/sickrage should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
    + linuxserver/sickrage - LinuxServer.io       

    linuxserver/sickrage

    Docker Pulls Docker Stars Build Status

    Sickrage has been deprecated. Please use linuxserver/sickchill instead

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/sickrage should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Here are some example snippets to help you get started creating a container from this image.

    docker

    docker create \
       --name=sickrage \
       -e PUID=1000 \
       -e PGID=1000 \
    @@ -28,4 +28,4 @@ services:
         restart: unless-stopped
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8081 Application WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.
    /downloads ISOs.
    /tv TV library directory.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Application Setup

    Web interface is at <your ip>:8081 , set paths for downloads, tv-shows to match docker mappings via the webui.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sickrage /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sickrage
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sickrage
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/sickrage

    Versions

    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 09.08.18: - Change repository to Sick-Rage
    • 17.08.18: - Rebase to alpine 3.8.
    • 20.03.18: - In lieu of a definite fix from SR, add nodejs package for use with torrentz and other sources.
    • 12.12.17: - Rebase to alpine 3.7.
    • 06.08.17: - Internal git pull instead of at runtime.
    • 25.05.17: - Rebase to alpine 3.6.
    • 07.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Fix umask.
    • 09.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 30.12.15: - Build later version of unrar from source, removed uneeded mako package.
    • 20.11.15: - Updated to new repo, by SickRage Team.
    • 15.10.15: - Initial Release.
    \ No newline at end of file +

    Application Setup

    Web interface is at <your ip>:8081 , set paths for downloads, tv-shows to match docker mappings via the webui.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sickrage /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sickrage
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sickrage
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' linuxserver/sickrage

    Versions

    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 09.08.18: - Change repository to Sick-Rage
    • 17.08.18: - Rebase to alpine 3.8.
    • 20.03.18: - In lieu of a definite fix from SR, add nodejs package for use with torrentz and other sources.
    • 12.12.17: - Rebase to alpine 3.7.
    • 06.08.17: - Internal git pull instead of at runtime.
    • 25.05.17: - Rebase to alpine 3.6.
    • 07.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Fix umask.
    • 09.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 30.12.15: - Build later version of unrar from source, removed uneeded mako package.
    • 20.11.15: - Updated to new repo, by SickRage Team.
    • 15.10.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-smokeping/index.html b/images/docker-smokeping/index.html index 8fcb3c2d83..3559364f76 100644 --- a/images/docker-smokeping/index.html +++ b/images/docker-smokeping/index.html @@ -1,4 +1,4 @@ - smokeping - LinuxServer.io

    linuxserver/smokeping

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Smokeping keeps track of your network latency. For a full example of what this application is capable of visit UCDavis.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/smokeping:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • Once running the URL will be http://<host-ip>/smokeping/smokeping.cgi. For example a full URL might look like https://smokeping.yourdomain.com/smokeping/smokeping.cgi.
    • Basics are, edit the Targets file to ping the hosts you're interested in to match the format found there.
    • Wait 10 minutes.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + smokeping - LinuxServer.io       

    linuxserver/smokeping

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Smokeping keeps track of your network latency. For a full example of what this application is capable of visit UCDavis.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/smokeping:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    • Once running the URL will be http://<host-ip>/smokeping/smokeping.cgi. For example a full URL might look like https://smokeping.yourdomain.com/smokeping/smokeping.cgi.
    • Basics are, edit the Targets file to ping the hosts you're interested in to match the format found there.
    • Wait 10 minutes.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       smokeping:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 Allows HTTP access to the internal webserver.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Configure the Targets file here
    /data Storage location for db and application data (graphs etc)

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it smokeping /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f smokeping
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' smokeping
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/smokeping:latest

    Versions

    • 29.03.21: - Dockerfile: Install curl before we call it
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 14.11.18: - Allow access without /smokeping in URL.
    • 28.04.18: - Rebase to alpine 3.8.
    • 09.04.18: - Add bc package.
    • 08.04.18: - Add tccping script and tcptraceroute package (thanks rcarmo).
    • 13.12.17: - Expose httpd_conf to /config.
    • 13.12.17: - Rebase to alpine 3.7.
    • 24.07.17: - Add :unraid tag for hosts without ipv6.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 28.05.17: - Rebase to alpine 3.6.
    • 07.05.17: - Expose smokeping.conf in /config/site-confs to allow user customisations
    • 12.04.17: - Fix cropper.js path, thanks nibbledeez.
    • 09.02.17: - Rebase to alpine 3.5.
    • 17.10.16: - Add ttf-dejavu package as per LT forum.
    • 10.09.16: - Add layer badges to README.
    • 05.09.16: - Add curl package.
    • 28.08.16: - Add badges to README.
    • 25.07.16: - Rebase to alpine linux.
    • 23.07.16: - Fix apt script confusion.
    • 29.06.15: - This is the first release, it is mostly stable, but may contain minor defects. (thus a beta tag)
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it smokeping /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f smokeping
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' smokeping
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/smokeping:latest

    Versions

    • 29.03.21: - Dockerfile: Install curl before we call it
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 14.11.18: - Allow access without /smokeping in URL.
    • 28.04.18: - Rebase to alpine 3.8.
    • 09.04.18: - Add bc package.
    • 08.04.18: - Add tccping script and tcptraceroute package (thanks rcarmo).
    • 13.12.17: - Expose httpd_conf to /config.
    • 13.12.17: - Rebase to alpine 3.7.
    • 24.07.17: - Add :unraid tag for hosts without ipv6.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 28.05.17: - Rebase to alpine 3.6.
    • 07.05.17: - Expose smokeping.conf in /config/site-confs to allow user customisations
    • 12.04.17: - Fix cropper.js path, thanks nibbledeez.
    • 09.02.17: - Rebase to alpine 3.5.
    • 17.10.16: - Add ttf-dejavu package as per LT forum.
    • 10.09.16: - Add layer badges to README.
    • 05.09.16: - Add curl package.
    • 28.08.16: - Add badges to README.
    • 25.07.16: - Rebase to alpine linux.
    • 23.07.16: - Fix apt script confusion.
    • 29.06.15: - This is the first release, it is mostly stable, but may contain minor defects. (thus a beta tag)
    \ No newline at end of file diff --git a/images/docker-snapdrop/index.html b/images/docker-snapdrop/index.html index 90f9f7c8bc..9104c7d574 100644 --- a/images/docker-snapdrop/index.html +++ b/images/docker-snapdrop/index.html @@ -1,4 +1,4 @@ - snapdrop - LinuxServer.io

    linuxserver/snapdrop

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Snapdrop A local file sharing in your browser. Inspired by Apple's Airdrop.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/snapdrop:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Webui is accessible at http://SERVERIP:PORT

    If you intend to expose Snapdrop to the internet, edit /config/nginx/site-confs/default.conf and uncomment the real_ip settings

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + snapdrop - LinuxServer.io       

    linuxserver/snapdrop

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Snapdrop A local file sharing in your browser. Inspired by Apple's Airdrop.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/snapdrop:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Webui is accessible at http://SERVERIP:PORT

    If you intend to expose Snapdrop to the internet, edit /config/nginx/site-confs/default.conf and uncomment the real_ip settings

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       snapdrop:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 http gui
    443 https gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Persistent configs and logs.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it snapdrop /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f snapdrop
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' snapdrop
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/snapdrop:latest

    Versions

    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 09.08.21: - Rebase to Alpine 3.14. Add real_ip block to nginx default site config.
    • 15.09.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it snapdrop /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f snapdrop
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' snapdrop
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/snapdrop:latest

    Versions

    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 09.08.21: - Rebase to Alpine 3.14. Add real_ip block to nginx default site config.
    • 15.09.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-snipe-it/index.html b/images/docker-snipe-it/index.html index ecad48967d..f0a62c4272 100644 --- a/images/docker-snipe-it/index.html +++ b/images/docker-snipe-it/index.html @@ -1,4 +1,4 @@ - snipe-it - LinuxServer.io

    linuxserver/snipe-it

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Snipe-it makes asset management easy. It was built by people solving real-world IT and asset management problems, and a solid UX has always been a top priority. Straightforward design and bulk actions mean getting things done faster.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/snipe-it:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at <your-ip>:8080, for more information check out Snipe-it. This container requires a MySQL or MariaDB server to connect to, we reccomend ours

    This container also generates an SSL certificate and stores it in

    /config/keys/cert.crt
    + snipe-it - LinuxServer.io       

    linuxserver/snipe-it

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Snipe-it makes asset management easy. It was built by people solving real-world IT and asset management problems, and a solid UX has always been a top priority. Straightforward design and bulk actions mean getting things done faster.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/snipe-it:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the webui at <your-ip>:8080, for more information check out Snipe-it. This container requires a MySQL or MariaDB server to connect to, we reccomend ours

    This container also generates an SSL certificate and stores it in

    /config/keys/cert.crt
     /config/keys/cert.key
     

    To use your own certificate swap these files with yours. To use SSL forward your port to 443 inside the container IE:

    -p 443:443
     

    The application accepts a series of environment variables to further customize itself on boot:

    Parameter Function
    -e APP_ENV= Default is production but can use testing or develop
    -e APP_DEBUG= Set to true to see debugging output in the web UI
    -e APP_LOCALE= Default is en set to the language preferred full list here
    -e MAIL_PORT_587_TCP_ADDR= SMTP mailserver ip or hostname
    -e MAIL_PORT_587_TCP_PORT= SMTP mailserver port
    -e MAIL_ENV_FROM_ADDR= The email address mail should be replied to and listed when sent
    -e MAIL_ENV_FROM_NAME= The name listed on email sent from the default account on the system
    -e MAIL_ENV_ENCRYPTION= Mail encryption to use IE tls
    -e MAIL_ENV_USERNAME= SMTP server login username
    -e MAIL_ENV_PASSWORD= SMTP server login password

    PHP customization

    This image uses our NGINX base image all configuration files for PHP and NGINX are located in /config/php. To overide any defaults please modify /config/php/php-local.ini IE for upload size:

    upload_max_filesize = 16
    @@ -42,4 +42,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 Snipe-IT Web UI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    APP_URL=http://localhost:8080 Hostname or IP and port if applicable, be sure to define https/http
    MYSQL_PORT_3306_TCP_ADDR=<mysql host> Mysql hostname or IP to use
    MYSQL_PORT_3306_TCP_PORT=<mysql port> Mysql port to use
    MYSQL_DATABASE=<mysql database> Mysql database to use
    MYSQL_USER=<mysql pass> Mysql user to use
    MYSQL_PASSWORD=changeme Mysql password to use
    TZ=US/Pacific Specify a timezone to use EG Europe/London, this is required to run snipe-it

    Volume Mappings (-v)

    Volume Function
    /config Contains your config files and data storage for Snipe-IT

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it snipe-it /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f snipe-it
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' snipe-it
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/snipe-it:latest

    Versions

    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 14.05.22: - Add php7-sodium for v6.
    • 12.04.22: - Don't build development elements.
    • 02.03.22: - Rework init logic, do not show default compose.
    • 29.06.21: - Rebasing to alpine 3.14.
    • 30.04.21: - Rebasing to alpine 3.13, add artisan migrate on spinup.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 10.04.19: - Add php deps for V4.7.0, ensure framework directories are available at build time.
    • 10.04.19: - Fix permissions for new bootstrap cache directory.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 31.10.18: - Rebasing to alpine 3.8
    • 05.08.18: - Migration to live build server.
    • 13.06.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it snipe-it /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f snipe-it
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' snipe-it
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/snipe-it:latest

    Versions

    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 14.05.22: - Add php7-sodium for v6.
    • 12.04.22: - Don't build development elements.
    • 02.03.22: - Rework init logic, do not show default compose.
    • 29.06.21: - Rebasing to alpine 3.14.
    • 30.04.21: - Rebasing to alpine 3.13, add artisan migrate on spinup.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 10.04.19: - Add php deps for V4.7.0, ensure framework directories are available at build time.
    • 10.04.19: - Fix permissions for new bootstrap cache directory.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 31.10.18: - Rebasing to alpine 3.8
    • 05.08.18: - Migration to live build server.
    • 13.06.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-sonarr/index.html b/images/docker-sonarr/index.html index 2269d45c94..fd04e11ae2 100644 --- a/images/docker-sonarr/index.html +++ b/images/docker-sonarr/index.html @@ -1,4 +1,4 @@ - sonarr - LinuxServer.io

    linuxserver/sonarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Sonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/sonarr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases from Sonarr (currently v3)
    develop Development releases from Sonarr (currently v4)

    Application Setup

    Access the webui at <your-ip>:8989, for more information check out Sonarr.

    Media folders

    We have set /tv and /downloads as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + sonarr - LinuxServer.io       

    linuxserver/sonarr

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Sonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/sonarr:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases from Sonarr (currently v3)
    develop Development releases from Sonarr (currently v4)

    Application Setup

    Access the webui at <your-ip>:8989, for more information check out Sonarr.

    Media folders

    We have set /tv and /downloads as optional paths, this is because it is the easiest way to get started. While easy to use, it has some drawbacks. Mainly losing the ability to hardlink (TL;DR a way for a file to exist in multiple places on the same file system while only consuming one file worth of space), or atomic move (TL;DR instant file moves, rather than copy+delete) files while processing content.

    Use the optional paths if you dont understand, or dont want hardlinks/atomic moves.

    The folks over at servarr.com wrote a good write-up on how to get started with this.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       sonarr:
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8989 The port for the Sonarr webinterface

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London, this is required for Sonarr

    Volume Mappings (-v)

    Volume Function
    /config Database and sonarr configs
    /tv Location of TV library on disk (See note in Application setup)
    /downloads Location of download managers output directory (See note in Application setup)

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sonarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sonarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sonarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/sonarr:latest

    Versions

    • 24.11.22: - Bump develop branch to v4, rebase to Alpine 3.16.
    • 03.08.22: - Deprecate armhf.
    • 02.08.22: - Add armhf deprecation warning.
    • 28.04.22: - Rebase master branch to mono 6.12 base (focal).
    • 20.02.22: - Rebase develop branch to Alpine, deprecate develop-alpine branch.
    • 28.12.21: - Add develop-alpine branch.
    • 11.05.21: - Make the paths clearer to the user.
    • 10.03.21: - Upgrade to Sonarr v3. Existing users are highly recommended to make a backup prior to update.
    • 18.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 05.04.20: - Move app to /app.
    • 01.08.19: - Rebase to Linuxserver LTS mono version.
    • 13.06.19: - Add env variable for setting umask.
    • 10.05.19: - Rebase to Bionic.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 01.02.19: - Multi arch images and pipeline build logic
    • 15.12.17: - Fix continuation lines.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 17.04.17: - Switch to using inhouse mono baseimage, adds python also.
    • 14.04.17: - Change to mount /etc/localtime in README, thanks cbgj.
    • 13.04.17: - Switch to official mono repository.
    • 30.09.16: - Fix umask
    • 23.09.16: - Add cd to /opt fixes redirects with althub (issue #25), make XDG config environment variable
    • 15.09.16: - Add libcurl3 package.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README.
    • 20.07.16: - Rebase to xenial.
    • 31.08.15: - Cleanup, changed sources to fetch binarys from. also a new baseimage.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sonarr /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sonarr
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sonarr
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/sonarr:latest

    Versions

    • 24.11.22: - Bump develop branch to v4, rebase to Alpine 3.16.
    • 03.08.22: - Deprecate armhf.
    • 02.08.22: - Add armhf deprecation warning.
    • 28.04.22: - Rebase master branch to mono 6.12 base (focal).
    • 20.02.22: - Rebase develop branch to Alpine, deprecate develop-alpine branch.
    • 28.12.21: - Add develop-alpine branch.
    • 11.05.21: - Make the paths clearer to the user.
    • 10.03.21: - Upgrade to Sonarr v3. Existing users are highly recommended to make a backup prior to update.
    • 18.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 05.04.20: - Move app to /app.
    • 01.08.19: - Rebase to Linuxserver LTS mono version.
    • 13.06.19: - Add env variable for setting umask.
    • 10.05.19: - Rebase to Bionic.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 01.02.19: - Multi arch images and pipeline build logic
    • 15.12.17: - Fix continuation lines.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 17.04.17: - Switch to using inhouse mono baseimage, adds python also.
    • 14.04.17: - Change to mount /etc/localtime in README, thanks cbgj.
    • 13.04.17: - Switch to official mono repository.
    • 30.09.16: - Fix umask
    • 23.09.16: - Add cd to /opt fixes redirects with althub (issue #25), make XDG config environment variable
    • 15.09.16: - Add libcurl3 package.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README.
    • 20.07.16: - Rebase to xenial.
    • 31.08.15: - Cleanup, changed sources to fetch binarys from. also a new baseimage.
    \ No newline at end of file diff --git a/images/docker-sqlitebrowser/index.html b/images/docker-sqlitebrowser/index.html index e549a490c7..fea27c0f5b 100644 --- a/images/docker-sqlitebrowser/index.html +++ b/images/docker-sqlitebrowser/index.html @@ -1,4 +1,4 @@ - sqlitebrowser - LinuxServer.io

    linuxserver/sqlitebrowser

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    DB Browser for SQLite is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/sqlitebrowser:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + sqlitebrowser - LinuxServer.io       

    linuxserver/sqlitebrowser

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    DB Browser for SQLite is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/sqlitebrowser:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       sqlitebrowser:
    @@ -28,4 +28,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Sqlitebrowser desktop gui.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores program settings and potentially dump files.

    Miscellaneous Options

    Parameter Function
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function on older hosts as syscalls are unknown to Docker.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sqlitebrowser /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sqlitebrowser
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sqlitebrowser
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/sqlitebrowser:latest

    Versions

    • 23.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 16.02.22: - Rebase to Alpine.
    • 20.01.21: - Remove Wireshark reference.
    • 29.07.20: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it sqlitebrowser /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f sqlitebrowser
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' sqlitebrowser
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/sqlitebrowser:latest

    Versions

    • 23.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 16.02.22: - Rebase to Alpine.
    • 20.01.21: - Remove Wireshark reference.
    • 29.07.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-swag/index.html b/images/docker-swag/index.html index d21ba338bb..faf8504a2f 100644 --- a/images/docker-swag/index.html +++ b/images/docker-swag/index.html @@ -1,4 +1,4 @@ - swag - LinuxServer.io

    linuxserver/swag

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/swag:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Validation and initial setup

    • Before running this container, make sure that the url and subdomains are properly forwarded to this container's host, and that port 443 (and/or 80) is not being used by another service on the host (NAS gui, another webserver, etc.).
    • If you need a dynamic dns provider, you can use the free provider duckdns.org where the URL will be yoursubdomain.duckdns.org and the SUBDOMAINS can be www,ftp,cloud with http validation, or wildcard with dns validation. You can use our duckdns image to update your IP on duckdns.org.
    • For http validation, port 80 on the internet side of the router should be forwarded to this container's port 80
    • For dns validation, make sure to enter your credentials into the corresponding ini (or json for some plugins) file under /config/dns-conf
    • Cloudflare provides free accounts for managing dns and is very easy to use with this image. Make sure that it is set up for "dns only" instead of "dns + proxy"
    • Google dns plugin is meant to be used with "Google Cloud DNS", a paid enterprise product, and not for "Google Domains DNS"
    • DuckDNS only supoprts two types of DNS validated certificates (not both at the same time):
      1. Certs that only cover your main subdomain (ie. yoursubdomain.duckdns.org, leave the SUBDOMAINS variable empty)
      2. Certs that cover sub-subdomains of your main subdomain (ie. *.yoursubdomain.duckdns.org, set the SUBDOMAINS variable to wildcard)
    • --cap-add=NET_ADMIN is required for fail2ban to modify iptables
    • After setup, navigate to https://yourdomain.url to access the default homepage (http access through port 80 is disabled by default, you can enable it by editing the default site config at /config/nginx/site-confs/default.conf).
    • Certs are checked nightly and if expiration is within 30 days, renewal is attempted. If your cert is about to expire in less than 30 days, check the logs under /config/log/letsencrypt to see why the renewals have been failing. It is recommended to input your e-mail in docker parameters so you receive expiration notices from Let's Encrypt in those circumstances.

    Security and password protection

    • The container detects changes to url and subdomains, revokes existing certs and generates new ones during start.
    • Per RFC7919, the container is shipping ffdhe4096 as the dhparams.pem.
    • If you'd like to password protect your sites, you can use htpasswd. Run the following command on your host to generate the htpasswd file docker exec -it swag htpasswd -c /config/nginx/.htpasswd <username>
    • You can add multiple user:pass to .htpasswd. For the first user, use the above command, for others, use the above command without the -c flag, as it will force deletion of the existing .htpasswd and creation of a new one
    • You can also use ldap auth for security and access control. A sample, user configurable ldap.conf is provided, and it requires the separate image linuxserver/ldap-auth to communicate with an ldap server.

    Site config and reverse proxy

    • The default site config resides at /config/nginx/site-confs/default.conf. Feel free to modify this file, and you can add other conf files to this directory. However, if you delete the default file, a new default will be created on container start.
    • Preset reverse proxy config files are added for popular apps. See the README.md file under /config/nginx/proxy_confs for instructions on how to enable them. The preset confs reside in and get imported from this repo.
    • If you wish to hide your site from search engine crawlers, you may find it useful to add this configuration line to your site config, within the server block, above the line where ssl.conf is included add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive"; This will ask Google et al not to index and list your site. Be careful with this, as you will eventually be de-listed if you leave this line in on a site you wish to be present on search engines
    • If you wish to redirect http to https, you must expose port 80

    Using certs in other containers

    • This container includes auto-generated pfx and private-fullchain-bundle pem certs that are needed by other apps like Emby and Znc.
    • To use these certs in other containers, do either of the following:
    • (Easier) Mount the container's config folder in other containers (ie. -v /path-to-swag-config:/swag-ssl) and in the other containers, use the cert location /swag-ssl/keys/letsencrypt/
    • (More secure) Mount the SWAG folder etc that resides under /config in other containers (ie. -v /path-to-swag-config/etc:/swag-ssl) and in the other containers, use the cert location /swag-ssl/letsencrypt/live/<your.domain.url>/ (This is more secure because the first method shares the entire SWAG config folder with other containers, including the www files, whereas the second method only shares the ssl certs)
    • These certs include:
    • cert.pem, chain.pem, fullchain.pem and privkey.pem, which are generated by Certbot and used by nginx and various other apps
    • privkey.pfx, a format supported by Microsoft and commonly used by dotnet apps such as Emby Server (no password)
    • priv-fullchain-bundle.pem, a pem cert that bundles the private key and the fullchain, used by apps like ZNC

    Using fail2ban

    • This container includes fail2ban set up with 5 jails by default:
    • nginx-http-auth
    • nginx-badbots
    • nginx-botsearch
    • nginx-deny
    • nginx-unauthorized
    • To enable or disable other jails, modify the file /config/fail2ban/jail.local
    • To modify filters and actions, instead of editing the .conf files, create .local files with the same name and edit those because .conf files get overwritten when the actions and filters are updated. .local files will append whatever's in the .conf files (ie. nginx-http-auth.conf --> nginx-http-auth.local)
    • You can check which jails are active via docker exec -it swag fail2ban-client status
    • You can check the status of a specific jail via docker exec -it swag fail2ban-client status <jail name>
    • You can unban an IP via docker exec -it swag fail2ban-client set <jail name> unbanip <IP>
    • A list of commands can be found here: https://www.fail2ban.org/wiki/index.php/Commands

    Updating configs

    • This container creates a number of configs for nginx, proxy samples, etc.
    • Config updates are noted in the changelog but not automatically applied to your files.
    • If you have modified a file with noted changes in the changelog:
    • Keep your existing configs as is (not broken, don't fix)
    • Review our repository commits and apply the new changes yourself
    • Delete the modified config file with listed updates, restart the container, reapply your changes
    • If you have NOT modified a file with noted changes in the changelog:
    • Delete the config file with listed updates, restart the container
    • Proxy sample updates are not listed in the changelog. See the changes here: https://github.com/linuxserver/reverse-proxy-confs/commits/master
    • Proxy sample files WILL be updated, however your renamed (enabled) proxy files will not.
    • You can check the new sample and adjust your active config as needed.

    Migration from the old linuxserver/letsencrypt image

    Please follow the instructions on this blog post.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + swag - LinuxServer.io       

    linuxserver/swag

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/swag:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Validation and initial setup

    • Before running this container, make sure that the url and subdomains are properly forwarded to this container's host, and that port 443 (and/or 80) is not being used by another service on the host (NAS gui, another webserver, etc.).
    • If you need a dynamic dns provider, you can use the free provider duckdns.org where the URL will be yoursubdomain.duckdns.org and the SUBDOMAINS can be www,ftp,cloud with http validation, or wildcard with dns validation. You can use our duckdns image to update your IP on duckdns.org.
    • For http validation, port 80 on the internet side of the router should be forwarded to this container's port 80
    • For dns validation, make sure to enter your credentials into the corresponding ini (or json for some plugins) file under /config/dns-conf
    • Cloudflare provides free accounts for managing dns and is very easy to use with this image. Make sure that it is set up for "dns only" instead of "dns + proxy"
    • Google dns plugin is meant to be used with "Google Cloud DNS", a paid enterprise product, and not for "Google Domains DNS"
    • DuckDNS only supoprts two types of DNS validated certificates (not both at the same time):
      1. Certs that only cover your main subdomain (ie. yoursubdomain.duckdns.org, leave the SUBDOMAINS variable empty)
      2. Certs that cover sub-subdomains of your main subdomain (ie. *.yoursubdomain.duckdns.org, set the SUBDOMAINS variable to wildcard)
    • --cap-add=NET_ADMIN is required for fail2ban to modify iptables
    • After setup, navigate to https://yourdomain.url to access the default homepage (http access through port 80 is disabled by default, you can enable it by editing the default site config at /config/nginx/site-confs/default.conf).
    • Certs are checked nightly and if expiration is within 30 days, renewal is attempted. If your cert is about to expire in less than 30 days, check the logs under /config/log/letsencrypt to see why the renewals have been failing. It is recommended to input your e-mail in docker parameters so you receive expiration notices from Let's Encrypt in those circumstances.

    Security and password protection

    • The container detects changes to url and subdomains, revokes existing certs and generates new ones during start.
    • Per RFC7919, the container is shipping ffdhe4096 as the dhparams.pem.
    • If you'd like to password protect your sites, you can use htpasswd. Run the following command on your host to generate the htpasswd file docker exec -it swag htpasswd -c /config/nginx/.htpasswd <username>
    • You can add multiple user:pass to .htpasswd. For the first user, use the above command, for others, use the above command without the -c flag, as it will force deletion of the existing .htpasswd and creation of a new one
    • You can also use ldap auth for security and access control. A sample, user configurable ldap.conf is provided, and it requires the separate image linuxserver/ldap-auth to communicate with an ldap server.

    Site config and reverse proxy

    • The default site config resides at /config/nginx/site-confs/default.conf. Feel free to modify this file, and you can add other conf files to this directory. However, if you delete the default file, a new default will be created on container start.
    • Preset reverse proxy config files are added for popular apps. See the README.md file under /config/nginx/proxy_confs for instructions on how to enable them. The preset confs reside in and get imported from this repo.
    • If you wish to hide your site from search engine crawlers, you may find it useful to add this configuration line to your site config, within the server block, above the line where ssl.conf is included add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive"; This will ask Google et al not to index and list your site. Be careful with this, as you will eventually be de-listed if you leave this line in on a site you wish to be present on search engines
    • If you wish to redirect http to https, you must expose port 80

    Using certs in other containers

    • This container includes auto-generated pfx and private-fullchain-bundle pem certs that are needed by other apps like Emby and Znc.
    • To use these certs in other containers, do either of the following:
    • (Easier) Mount the container's config folder in other containers (ie. -v /path-to-swag-config:/swag-ssl) and in the other containers, use the cert location /swag-ssl/keys/letsencrypt/
    • (More secure) Mount the SWAG folder etc that resides under /config in other containers (ie. -v /path-to-swag-config/etc:/swag-ssl) and in the other containers, use the cert location /swag-ssl/letsencrypt/live/<your.domain.url>/ (This is more secure because the first method shares the entire SWAG config folder with other containers, including the www files, whereas the second method only shares the ssl certs)
    • These certs include:
    • cert.pem, chain.pem, fullchain.pem and privkey.pem, which are generated by Certbot and used by nginx and various other apps
    • privkey.pfx, a format supported by Microsoft and commonly used by dotnet apps such as Emby Server (no password)
    • priv-fullchain-bundle.pem, a pem cert that bundles the private key and the fullchain, used by apps like ZNC

    Using fail2ban

    • This container includes fail2ban set up with 5 jails by default:
    • nginx-http-auth
    • nginx-badbots
    • nginx-botsearch
    • nginx-deny
    • nginx-unauthorized
    • To enable or disable other jails, modify the file /config/fail2ban/jail.local
    • To modify filters and actions, instead of editing the .conf files, create .local files with the same name and edit those because .conf files get overwritten when the actions and filters are updated. .local files will append whatever's in the .conf files (ie. nginx-http-auth.conf --> nginx-http-auth.local)
    • You can check which jails are active via docker exec -it swag fail2ban-client status
    • You can check the status of a specific jail via docker exec -it swag fail2ban-client status <jail name>
    • You can unban an IP via docker exec -it swag fail2ban-client set <jail name> unbanip <IP>
    • A list of commands can be found here: https://www.fail2ban.org/wiki/index.php/Commands

    Updating configs

    • This container creates a number of configs for nginx, proxy samples, etc.
    • Config updates are noted in the changelog but not automatically applied to your files.
    • If you have modified a file with noted changes in the changelog:
    • Keep your existing configs as is (not broken, don't fix)
    • Review our repository commits and apply the new changes yourself
    • Delete the modified config file with listed updates, restart the container, reapply your changes
    • If you have NOT modified a file with noted changes in the changelog:
    • Delete the config file with listed updates, restart the container
    • Proxy sample updates are not listed in the changelog. See the changes here: https://github.com/linuxserver/reverse-proxy-confs/commits/master
    • Proxy sample files WILL be updated, however your renamed (enabled) proxy files will not.
    • You can check the new sample and adjust your active config as needed.

    Migration from the old linuxserver/letsencrypt image

    Please follow the instructions on this blog post.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       swag:
    @@ -50,4 +50,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    443 Https port
    80 Http port (required for http validation and http -> https redirect)

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    URL=yourdomain.url Top url you have control over (customdomain.com if you own it, or customsubdomain.ddnsprovider.com if dynamic dns).
    VALIDATION=http Certbot validation method to use, options are http or dns (dns method also requires DNSPLUGIN variable set).
    SUBDOMAINS=www, Subdomains you'd like the cert to cover (comma separated, no spaces) ie. www,ftp,cloud. For a wildcard cert, set this exactly to wildcard (wildcard cert is available via dns validation only)
    CERTPROVIDER= Optionally define the cert provider. Set to zerossl for ZeroSSL certs (requires existing ZeroSSL account and the e-mail address entered in EMAIL env var). Otherwise defaults to Let's Encrypt.
    DNSPLUGIN=cloudflare Required if VALIDATION is set to dns. Options are acmedns, aliyun, azure, cloudflare, cloudxns, cpanel, desec, digitalocean, directadmin, dnsimple, dnsmadeeasy, dnspod, do, domeneshop, duckdns, dynu, gandi, gehirn, godaddy, google, he, hetzner, infomaniak, inwx, ionos, linode, loopia, luadns, netcup, njalla, nsone, ovh, porkbun, rfc2136, route53, sakuracloud, standalone, transip, and vultr. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under /config/dns-conf.
    PROPAGATION= Optionally override (in seconds) the default propagation time for the dns plugins.
    EMAIL= Optional e-mail address used for cert expiration notifications (Required for ZeroSSL).
    ONLY_SUBDOMAINS=false If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to true
    EXTRA_DOMAINS= Additional fully qualified domain names (comma separated, no spaces) ie. extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org
    STAGING=false Set to true to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes.

    Volume Mappings (-v)

    Volume Function
    /config All the config files including the webroot reside here.

    Miscellaneous Options

    Parameter Function

    Portainer notice

    {% hint style="warning" %} This image utilises cap_add or sysctl to work properly. This is not implemented properly in some versions of Portainer, thus this image may not work if deployed through Portainer. {% endhint %}

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it swag /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f swag
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' swag
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/swag:latest

    Versions

    • 22.11.22: - Pin acme to the same version as certbot.
    • 22.11.22: - Pin certbot to 1.32.0 until plugin compatibility improves.
    • 05.11.22: - Update acmedns plugin handling.
    • 06.10.22: - Switch to certbot-dns-duckdns. Update cpanel and gandi dns plugin handling. Minor adjustments to init logic.
    • 05.10.22: - Use certbot file hooks instead of command line hooks
    • 04.10.22: - Add godaddy and porkbun dns plugins.
    • 03.10.22: - Add default_server back to default site conf's https listen.
    • 22.09.22: - Added support for DO DNS validation.
    • 22.09.22: - Added certbot-dns-acmedns for DNS01 validation.
    • 20.08.22: - Existing users should update: nginx.conf - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 10.08.22: - Added support for Dynu DNS validation.
    • 18.05.22: - Added support for Azure DNS validation.
    • 09.04.22: - Added certbot-dns-loopia for DNS01 validation.
    • 05.04.22: - Added support for standalone DNS validation.
    • 28.03.22: - created a logfile for fail2ban nginx-unauthorized in /etc/cont-init.d/50-config
    • 09.01.22: - Added a fail2ban jail for nginx unauthorized
    • 21.12.21: - Fixed issue with iptables not working as expected
    • 30.11.21: - Move maxmind to a new mod
    • 22.11.21: - Added support for Infomaniak DNS for certificate generation.
    • 20.11.21: - Added support for dnspod validation.
    • 15.11.21: - Added support for deSEC DNS for wildcard certificate generation.
    • 26.10.21: - Existing users should update: proxy.conf - Mitigate https://httpoxy.org/ vulnerabilities. Ref: https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx#Defeating-the-Attack-using-NGINX-and-NGINX-Plus
    • 23.10.21: - Fix Hurricane Electric (HE) DNS validation.
    • 12.10.21: - Fix deprecated LE root cert check to fix failures when using STAGING=true, and failures in revoking.
    • 06.10.21: - Added support for Hurricane Electric (HE) DNS validation. Added lxml build deps.
    • 01.10.21: - Check if the cert uses the old LE root cert, revoke and regenerate if necessary. Here's more info on LE root cert expiration
    • 19.09.21: - Add an optional header to opt out of Google FLoC in ssl.conf.
    • 17.09.21: - Mark SUBDOMAINS var as optional.
    • 01.08.21: - Add support for ionos dns validation.
    • 15.07.21: - Fix libmaxminddb issue due to upstream change.
    • 07.07.21: - Rebase to alpine 3.14.
    • 24.06.21: - Update default nginx conf folder.
    • 28.05.21: - Existing users should update: authelia-server.conf - Use resolver.conf and patch for CVE-2021-32637.
    • 20.05.21: - Modify resolver.conf generation to detect and ignore ipv6.
    • 14.05.21: - Existing users should update: nginx.conf, ssl.conf, proxy.conf, and the default site-conf - Rework nginx.conf to be inline with alpine upstream and relocate lines from other files. Use linuxserver.io wheel index for pip packages. Switch to using ffdhe4096 for dhparams.pem per RFC7919. Added worker_processes.conf, which sets the number of nginx workers, and resolver.conf, which sets the dns resolver. Both conf files are auto-generated only on first start and can be user modified later.
    • 21.04.21: - Existing users should update: authelia-server.conf and authelia-location.conf - Add remote name/email headers and pass http method.
    • 12.04.21: - Add php7-gmp and php7-pecl-mailparse.
    • 12.04.21: - Add support for vultr dns validation.
    • 14.03.21: - Add support for directadmin dns validation.
    • 12.02.21: - Clean up rust/cargo cache, which ballooned the image size in the last couple of builds.
    • 10.02.21: - Fix aliyun, domeneshop, inwx and transip dns confs for existing users.
    • 09.02.21: - Rebasing to alpine 3.13. Add nginx mods brotli and dav-ext. Remove nginx mods lua and lua-upstream (due to regression over the last couple of years).
    • 26.01.21: - Add support for hetzner dns validation.
    • 20.01.21: - Add check for ZeroSSL EAB retrieval.
    • 08.01.21: - Add support for getting certs from ZeroSSL via optional CERTPROVIDER env var. Update aliyun, domeneshop, inwx and transip dns plugins with the new plugin names. Hide donoteditthisfile.conf because users were editing it despite its name. Suppress harmless error when no proxy confs are enabled.
    • 03.01.21: - Existing users should update: /config/nginx/site-confs/default.conf - Add helper pages to aid troubleshooting
    • 10.12.20: - Add support for njalla dns validation
    • 09.12.20: - Check for template/conf updates and notify in the log. Add support for gehirn and sakuracloud dns validation.
    • 01.11.20: - Add support for netcup dns validation
    • 29.10.20: - Existing users should update: ssl.conf - Add frame-ancestors to Content-Security-Policy.
    • 04.10.20: - Existing users should update: nginx.conf, proxy.conf, and ssl.conf - Minor cleanups and reordering.
    • 20.09.20: - Existing users should update: nginx.conf - Added geoip2 configs. Added MAXMINDDB_LICENSE_KEY variable to readme.
    • 08.09.20: - Add php7-xsl.
    • 01.09.20: - Existing users should update: nginx.conf, proxy.conf, and various proxy samples - Global websockets across all configs.
    • 03.08.20: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it swag /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f swag
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' swag
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/swag:latest

    Versions

    • 22.11.22: - Pin acme to the same version as certbot.
    • 22.11.22: - Pin certbot to 1.32.0 until plugin compatibility improves.
    • 05.11.22: - Update acmedns plugin handling.
    • 06.10.22: - Switch to certbot-dns-duckdns. Update cpanel and gandi dns plugin handling. Minor adjustments to init logic.
    • 05.10.22: - Use certbot file hooks instead of command line hooks
    • 04.10.22: - Add godaddy and porkbun dns plugins.
    • 03.10.22: - Add default_server back to default site conf's https listen.
    • 22.09.22: - Added support for DO DNS validation.
    • 22.09.22: - Added certbot-dns-acmedns for DNS01 validation.
    • 20.08.22: - Existing users should update: nginx.conf - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 10.08.22: - Added support for Dynu DNS validation.
    • 18.05.22: - Added support for Azure DNS validation.
    • 09.04.22: - Added certbot-dns-loopia for DNS01 validation.
    • 05.04.22: - Added support for standalone DNS validation.
    • 28.03.22: - created a logfile for fail2ban nginx-unauthorized in /etc/cont-init.d/50-config
    • 09.01.22: - Added a fail2ban jail for nginx unauthorized
    • 21.12.21: - Fixed issue with iptables not working as expected
    • 30.11.21: - Move maxmind to a new mod
    • 22.11.21: - Added support for Infomaniak DNS for certificate generation.
    • 20.11.21: - Added support for dnspod validation.
    • 15.11.21: - Added support for deSEC DNS for wildcard certificate generation.
    • 26.10.21: - Existing users should update: proxy.conf - Mitigate https://httpoxy.org/ vulnerabilities. Ref: https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx#Defeating-the-Attack-using-NGINX-and-NGINX-Plus
    • 23.10.21: - Fix Hurricane Electric (HE) DNS validation.
    • 12.10.21: - Fix deprecated LE root cert check to fix failures when using STAGING=true, and failures in revoking.
    • 06.10.21: - Added support for Hurricane Electric (HE) DNS validation. Added lxml build deps.
    • 01.10.21: - Check if the cert uses the old LE root cert, revoke and regenerate if necessary. Here's more info on LE root cert expiration
    • 19.09.21: - Add an optional header to opt out of Google FLoC in ssl.conf.
    • 17.09.21: - Mark SUBDOMAINS var as optional.
    • 01.08.21: - Add support for ionos dns validation.
    • 15.07.21: - Fix libmaxminddb issue due to upstream change.
    • 07.07.21: - Rebase to alpine 3.14.
    • 24.06.21: - Update default nginx conf folder.
    • 28.05.21: - Existing users should update: authelia-server.conf - Use resolver.conf and patch for CVE-2021-32637.
    • 20.05.21: - Modify resolver.conf generation to detect and ignore ipv6.
    • 14.05.21: - Existing users should update: nginx.conf, ssl.conf, proxy.conf, and the default site-conf - Rework nginx.conf to be inline with alpine upstream and relocate lines from other files. Use linuxserver.io wheel index for pip packages. Switch to using ffdhe4096 for dhparams.pem per RFC7919. Added worker_processes.conf, which sets the number of nginx workers, and resolver.conf, which sets the dns resolver. Both conf files are auto-generated only on first start and can be user modified later.
    • 21.04.21: - Existing users should update: authelia-server.conf and authelia-location.conf - Add remote name/email headers and pass http method.
    • 12.04.21: - Add php7-gmp and php7-pecl-mailparse.
    • 12.04.21: - Add support for vultr dns validation.
    • 14.03.21: - Add support for directadmin dns validation.
    • 12.02.21: - Clean up rust/cargo cache, which ballooned the image size in the last couple of builds.
    • 10.02.21: - Fix aliyun, domeneshop, inwx and transip dns confs for existing users.
    • 09.02.21: - Rebasing to alpine 3.13. Add nginx mods brotli and dav-ext. Remove nginx mods lua and lua-upstream (due to regression over the last couple of years).
    • 26.01.21: - Add support for hetzner dns validation.
    • 20.01.21: - Add check for ZeroSSL EAB retrieval.
    • 08.01.21: - Add support for getting certs from ZeroSSL via optional CERTPROVIDER env var. Update aliyun, domeneshop, inwx and transip dns plugins with the new plugin names. Hide donoteditthisfile.conf because users were editing it despite its name. Suppress harmless error when no proxy confs are enabled.
    • 03.01.21: - Existing users should update: /config/nginx/site-confs/default.conf - Add helper pages to aid troubleshooting
    • 10.12.20: - Add support for njalla dns validation
    • 09.12.20: - Check for template/conf updates and notify in the log. Add support for gehirn and sakuracloud dns validation.
    • 01.11.20: - Add support for netcup dns validation
    • 29.10.20: - Existing users should update: ssl.conf - Add frame-ancestors to Content-Security-Policy.
    • 04.10.20: - Existing users should update: nginx.conf, proxy.conf, and ssl.conf - Minor cleanups and reordering.
    • 20.09.20: - Existing users should update: nginx.conf - Added geoip2 configs. Added MAXMINDDB_LICENSE_KEY variable to readme.
    • 08.09.20: - Add php7-xsl.
    • 01.09.20: - Existing users should update: nginx.conf, proxy.conf, and various proxy samples - Global websockets across all configs.
    • 03.08.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-synclounge/index.html b/images/docker-synclounge/index.html index 7c363e6b48..f45e8acaa7 100644 --- a/images/docker-synclounge/index.html +++ b/images/docker-synclounge/index.html @@ -1,4 +1,4 @@ - synclounge - LinuxServer.io

    linuxserver/synclounge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Synclounge is a third party tool that allows you to watch Plex in sync with your friends/family, wherever you are.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/synclounge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The web app and the server are both accessible at http://SERVERIP:8088.

    Note: It is recommended to use http as the external proto with a reverse proxy due to https not working with external plex clients.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + synclounge - LinuxServer.io       

    linuxserver/synclounge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Synclounge is a third party tool that allows you to watch Plex in sync with your friends/family, wherever you are.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/synclounge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The web app and the server are both accessible at http://SERVERIP:8088.

    Note: It is recommended to use http as the external proto with a reverse proxy due to https not working with external plex clients.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       synclounge:
    @@ -22,4 +22,4 @@ services:
       --restart unless-stopped \
       lscr.io/linuxserver/synclounge:latest
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8088 Web app and server port

    Environment Variables (-e)

    Env Function
    TZ=Europe/London Specify a timezone to use EG Europe/London
    AUTH_LIST=plexuser1,plexuser2,email1,machineid1 If set, only the users defined here and the users of the plex servers defined here will be able to access the server. Use e-mails, plex usernames and/or plex server machine ids, comma separated, no spaces.
    AUTOJOIN_ENABLED=false DEPRECATED - (Still works but will be removed in the future in favor of the built-in var autojoin__room) - Set to true to let users autojoin the server and a room (specified by the AUTOJOIN_ROOM var).
    AUTOJOIN_ROOM=roomname DEPRECATED - (Still works but will be removed in the future in favor of the built-in var autojoin__room) - Set the room name for auto joining (requires AUTOJOIN_ENABLED set to true).

    Volume Mappings (-v)

    Volume Function

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
    -

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it synclounge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f synclounge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' synclounge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/synclounge:latest

    Versions

    • 29.11.22: - Rebase to alpine 3.17, upgrade to s6v3.
    • 19.09.22: - Rebase to alpine 3.15.
    • 12.02.21: - Fix optional dependency builds in aarch64 image.
    • 12.02.21: - Rebasing to alpine 3.13.
    • 28.10.20: - Update to v4. Env vars EXTERNAL_URL, EXTERNAL_SERVER_PORT and AUTOJOIN_PASSWORD are deprecated and no longer have any effect. Env vars AUTOJOIN_ENABLED and AUTOJOIN_ROOM are still working but will be removed in the future in favor of synclounge's built-in var autojoin__room. If you are reverse proxying, do not forget to update your proxy settings (here and here) as the server port and addresses are changed.
    • 11.10.20: - Pin builds to upstream commit 6aecc9bd while evaluating the breaking changes upstream.
    • 27.09.20: - Updating the external repo endpoint.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 11.05.20: - Initial Release.
    \ No newline at end of file +

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it synclounge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f synclounge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' synclounge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/synclounge:latest

    Versions

    • 29.11.22: - Rebase to alpine 3.17, upgrade to s6v3.
    • 19.09.22: - Rebase to alpine 3.15.
    • 12.02.21: - Fix optional dependency builds in aarch64 image.
    • 12.02.21: - Rebasing to alpine 3.13.
    • 28.10.20: - Update to v4. Env vars EXTERNAL_URL, EXTERNAL_SERVER_PORT and AUTOJOIN_PASSWORD are deprecated and no longer have any effect. Env vars AUTOJOIN_ENABLED and AUTOJOIN_ROOM are still working but will be removed in the future in favor of synclounge's built-in var autojoin__room. If you are reverse proxying, do not forget to update your proxy settings (here and here) as the server port and addresses are changed.
    • 11.10.20: - Pin builds to upstream commit 6aecc9bd while evaluating the breaking changes upstream.
    • 27.09.20: - Updating the external repo endpoint.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 11.05.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-syncthing/index.html b/images/docker-syncthing/index.html index a2beb1fe23..b13b992192 100644 --- a/images/docker-syncthing/index.html +++ b/images/docker-syncthing/index.html @@ -1,4 +1,4 @@ - syncthing - LinuxServer.io

    linuxserver/syncthing

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it's transmitted over the Internet.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/syncthing:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Note: The Syncthing devs highly suggest setting a password for this container as it listens on 0.0.0.0. To do this go to Actions -> Settings -> set user/password for the webUI.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + syncthing - LinuxServer.io       

    linuxserver/syncthing

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it's transmitted over the Internet.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/syncthing:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Note: The Syncthing devs highly suggest setting a password for this container as it listens on 0.0.0.0. To do this go to Actions -> Settings -> set user/password for the webUI.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       syncthing:
    @@ -37,4 +37,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8384 Application WebUI
    22000/tcp Listening port (TCP)
    22000/udp Listening port (UDP)
    21027/udp Protocol discovery

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.
    /data1 Data1
    /data2 Data2

    Miscellaneous Options

    Parameter Function
    --hostname= Optionally the hostname can be defined.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it syncthing /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f syncthing
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' syncthing
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/syncthing:latest

    Versions

    • 17.08.22: - Build on alpine 3.16 for go 1.18).
    • 03.05.22: - Rebase to alpine 3.15 (builds on edge for go 1.18).
    • 05.10.21: - Rebase to alpine 3.14.
    • 12.05.21: - Remove sysctl parameter again
    • 03.05.21: - Raise maximum UDP buffer size.
    • 03.05.21: - Add port mapping for 22000/udp.
    • 29.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 15.09.20: - Use go from alpine edge repo to compile. Remove duplicate UMASK env var. Add hostname setting.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 05.03.19: - Update Build process for v1.1.0 release.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 30.07.18: - Rebase to alpine 3.8 and use buildstage.
    • 13.12.17: - Rebase to alpine 3.7.
    • 25.10.17: - Add env for manual setting of umask.
    • 29.07.17: - Simplify build structure as symlinks failing on > 0.14.32
    • 28.05.17: - Rebase to alpine 3.6.
    • 08.02.17: - Rebase to alpine 3.5.
    • 01.11.16: - Switch to compiling latest version from git source.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Fix umask.
    • 09.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 11.08.16: - Rebase to alpine linux.
    • 18.12.15: - Initial testing / release (IronicBadger)
    • 24.09.15: - Inital dev complete (Lonix)
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it syncthing /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f syncthing
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' syncthing
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/syncthing:latest

    Versions

    • 17.08.22: - Build on alpine 3.16 for go 1.18).
    • 03.05.22: - Rebase to alpine 3.15 (builds on edge for go 1.18).
    • 05.10.21: - Rebase to alpine 3.14.
    • 12.05.21: - Remove sysctl parameter again
    • 03.05.21: - Raise maximum UDP buffer size.
    • 03.05.21: - Add port mapping for 22000/udp.
    • 29.01.21: - Deprecate UMASK_SET in favor of UMASK in baseimage, see above for more information.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 15.09.20: - Use go from alpine edge repo to compile. Remove duplicate UMASK env var. Add hostname setting.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 05.03.19: - Update Build process for v1.1.0 release.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 16.01.19: - Add pipeline logic and multi arch.
    • 30.07.18: - Rebase to alpine 3.8 and use buildstage.
    • 13.12.17: - Rebase to alpine 3.7.
    • 25.10.17: - Add env for manual setting of umask.
    • 29.07.17: - Simplify build structure as symlinks failing on > 0.14.32
    • 28.05.17: - Rebase to alpine 3.6.
    • 08.02.17: - Rebase to alpine 3.5.
    • 01.11.16: - Switch to compiling latest version from git source.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Fix umask.
    • 09.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 11.08.16: - Rebase to alpine linux.
    • 18.12.15: - Initial testing / release (IronicBadger)
    • 24.09.15: - Inital dev complete (Lonix)
    \ No newline at end of file diff --git a/images/docker-syslog-ng/index.html b/images/docker-syslog-ng/index.html index 9941fbddcc..6574263f82 100644 --- a/images/docker-syslog-ng/index.html +++ b/images/docker-syslog-ng/index.html @@ -1,4 +1,4 @@ - syslog-ng - LinuxServer.io

    linuxserver/syslog-ng

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    syslog-ng allows you to flexibly collect, parse, classify, rewrite and correlate logs from across your infrastructure and store or route them to log analysis tools.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/syslog-ng:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Edit /config/syslog-ng.conf to configure your logging sources and destinations. Note: As the application does not run as root you cannot listen on ports < 1024.

    The application pid, control file, etc. are all kept in /config so when using tools such as syslog-ng-ctl you need to specify the path e.g. syslog-ng-ctl reload -c /config/syslog-ng.ctl

    More info at syslog-ng.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + syslog-ng - LinuxServer.io       

    linuxserver/syslog-ng

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    syslog-ng allows you to flexibly collect, parse, classify, rewrite and correlate logs from across your infrastructure and store or route them to log analysis tools.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/syslog-ng:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Edit /config/syslog-ng.conf to configure your logging sources and destinations. Note: As the application does not run as root you cannot listen on ports < 1024.

    The application pid, control file, etc. are all kept in /config so when using tools such as syslog-ng-ctl you need to specify the path e.g. syslog-ng-ctl reload -c /config/syslog-ng.ctl

    More info at syslog-ng.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       syslog-ng:
    @@ -31,4 +31,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    5514/udp Syslog UDP
    6601/tcp Syslog TCP
    6514/tcp Syslog TLS

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Stores config and application files
    /var/log Stores logs collected by the syslog-ng service

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it syslog-ng /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f syslog-ng
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' syslog-ng
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/syslog-ng:latest

    Versions

    • 01.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 18.12.21: - Rebase to Alpine 3.15.
    • 01.07.21: - Rebase to Alpine 3.14.
    • 26.05.21: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it syslog-ng /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f syslog-ng
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' syslog-ng
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/syslog-ng:latest

    Versions

    • 01.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 18.12.21: - Rebase to Alpine 3.15.
    • 01.07.21: - Rebase to Alpine 3.14.
    • 26.05.21: - Initial release.
    \ No newline at end of file diff --git a/images/docker-taisun/index.html b/images/docker-taisun/index.html index cd4653df56..bf7a71fecf 100644 --- a/images/docker-taisun/index.html +++ b/images/docker-taisun/index.html @@ -1,4 +1,4 @@ - taisun - LinuxServer.io

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. This project is no longer maintained for VDI please use: https://github.com/linuxserver/docker-webtop For web based docker management try: https://github.com/SelfhostedPro/Yacht https://www.portainer.io/

    linuxserver/taisun

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Taisun is an application for a Docker enabled device with an emphasis on providing a web based interface for managing a single server. Taisun allows you to:

    • Deploy and manage web based virtual desktops.
    • Deploy Taisun specific stacks of applications
    • Browse available images on popular Docker repositories
    • Import a Docker project from any git repository and start developing on your choice of web based IDE or full Linux desktop
    • Spinup a developer container based on popular frameworks and work from a web based IDE
    • Single click remote server access to Taisun and your Docker applications

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/taisun should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Application Setup

    The webui is at http://localhost:3000, for more information on usage see here.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + taisun - LinuxServer.io       

    DEPRECATION NOTICE

    This image is deprecated. We will not offer support for this image and it will not be updated. This project is no longer maintained for VDI please use: https://github.com/linuxserver/docker-webtop For web based docker management try: https://github.com/SelfhostedPro/Yacht https://www.portainer.io/

    linuxserver/taisun

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Taisun is an application for a Docker enabled device with an emphasis on providing a web based interface for managing a single server. Taisun allows you to:

    • Deploy and manage web based virtual desktops.
    • Deploy Taisun specific stacks of applications
    • Browse available images on popular Docker repositories
    • Import a Docker project from any git repository and start developing on your choice of web based IDE or full Linux desktop
    • Spinup a developer container based on popular frameworks and work from a web based IDE
    • Single click remote server access to Taisun and your Docker applications

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/taisun should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Application Setup

    The webui is at http://localhost:3000, for more information on usage see here.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2"
     services:
       taisun:
    @@ -18,4 +18,4 @@ services:
       --restart unless-stopped \
       lscr.io/linuxserver/taisun
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Taisun WebUI.

    Environment Variables (-e)

    Env Function

    Volume Mappings (-v)

    Volume Function
    /var/run/docker.sock Docker Socket on the system

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
    -

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it taisun /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f taisun
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' taisun
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/taisun

    Versions

    • 02.02.22: - Deprecate.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 20.07.19: - Build compose bins from source, use minimal docker install from repos.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 30.03.19: - Updating docker-compose build dependancies for musl libc.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 13.02.19: - Initial release.
    \ No newline at end of file +

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it taisun /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f taisun
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' taisun
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/taisun

    Versions

    • 02.02.22: - Deprecate.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 20.07.19: - Build compose bins from source, use minimal docker install from repos.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 30.03.19: - Updating docker-compose build dependancies for musl libc.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 13.02.19: - Initial release.
    \ No newline at end of file diff --git a/images/docker-tautulli/index.html b/images/docker-tautulli/index.html index cf65717d80..c55938d1ae 100644 --- a/images/docker-tautulli/index.html +++ b/images/docker-tautulli/index.html @@ -1,4 +1,4 @@ - tautulli - LinuxServer.io

    linuxserver/tautulli

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Tautulli is a python based web application for monitoring, analytics and notifications for Plex Media Server.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/tautulli:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Tautulli releases
    develop Built at head of Tautulli nightly branch

    Application Setup

    Access the webui at <your-ip>:8181, for more information check out Tautulli. To use the build-in Plex LogViewer you have to add a volume, preferably ReadOnly. Then in tautulli gui settings, under Plex Media Server, turn on Show Advanced and set the Logs Folder to the folder you mapped.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + tautulli - LinuxServer.io       

    linuxserver/tautulli

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Tautulli is a python based web application for monitoring, analytics and notifications for Plex Media Server.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/tautulli:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable Tautulli releases
    develop Built at head of Tautulli nightly branch

    Application Setup

    Access the webui at <your-ip>:8181, for more information check out Tautulli. To use the build-in Plex LogViewer you have to add a volume, preferably ReadOnly. Then in tautulli gui settings, under Plex Media Server, turn on Show Advanced and set the Logs Folder to the folder you mapped.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       tautulli:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8181 WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Contains tautulli config and database.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it tautulli /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f tautulli
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' tautulli
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/tautulli:latest

    Versions

    • 04.10.22: - Rebase master branch to Alpine 3.16, migrate to s6v3.
    • 10.01.22: - Rebase to Alpine 3.15.
    • 11.07.21: - Add curl package.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 11.07.20: - Add py3-openssl.
    • 05.06.20: - Rebasing to alpine 3.12. Rework to python3.
    • 12.04.20: - Added mock from pip and donate links.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 23.10.18: - Update plex logs info in readm.
    • 16.08.18: - Rebase to alpine 3.8.
    • 10.03.18: - Rebrand to tautulli.
    • 12.12.17: - Rebase to alpine 3.7.
    • 21.07.17: - Internal git pull instead of at runtime.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 25.05.17: - Rebase to alpine 3.6.
    • 20.04.17: - Add pycryptodomex pip package.
    • 07.02.17: - Rebase to alpine 3.5.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 16.07.15: - Inital Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it tautulli /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f tautulli
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' tautulli
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/tautulli:latest

    Versions

    • 04.10.22: - Rebase master branch to Alpine 3.16, migrate to s6v3.
    • 10.01.22: - Rebase to Alpine 3.15.
    • 11.07.21: - Add curl package.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 11.07.20: - Add py3-openssl.
    • 05.06.20: - Rebasing to alpine 3.12. Rework to python3.
    • 12.04.20: - Added mock from pip and donate links.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 26.01.19: - Add pipeline logic and multi arch.
    • 23.10.18: - Update plex logs info in readm.
    • 16.08.18: - Rebase to alpine 3.8.
    • 10.03.18: - Rebrand to tautulli.
    • 12.12.17: - Rebase to alpine 3.7.
    • 21.07.17: - Internal git pull instead of at runtime.
    • 12.07.17: - Add inspect commands to README, move to jenkins build and push.
    • 25.05.17: - Rebase to alpine 3.6.
    • 20.04.17: - Add pycryptodomex pip package.
    • 07.02.17: - Rebase to alpine 3.5.
    • 09.09.16: - Add layer badges to README.
    • 27.08.16: - Add badges to README.
    • 08.08.16: - Rebase to alpine linux.
    • 16.07.15: - Inital Release.
    \ No newline at end of file diff --git a/images/docker-tester/index.html b/images/docker-tester/index.html index c85b2e04b4..13d7b120a2 100644 --- a/images/docker-tester/index.html +++ b/images/docker-tester/index.html @@ -1,4 +1,4 @@ - tester - LinuxServer.io

    linuxserver/tester

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    This internal tool is used as a desktop sandbox in our CI process to grab a screenshot of a hopefully functional endpoint

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/tester:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64
    armhf

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + tester - LinuxServer.io       

    linuxserver/tester

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    This internal tool is used as a desktop sandbox in our CI process to grab a screenshot of a hopefully functional endpoint

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/tester:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64
    armhf

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       tester:
    @@ -16,4 +16,4 @@ services:
       --restart unless-stopped \
       lscr.io/linuxserver/tester:latest
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 WebUI

    Environment Variables (-e)

    Env Function
    URL=http://google.com Specify an endpoint, the container will automatically determine the correct protocol and program to use

    Volume Mappings (-v)

    Volume Function

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
    -

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it tester /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f tester
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' tester
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/tester:latest

    Versions

    • 16.11.22: - Revert the rdesktop baseimage's sesman change that introduced a delay.
    • 24.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 18.04.20: - Initial release.
    \ No newline at end of file +

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it tester /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f tester
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' tester
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/tester:latest

    Versions

    • 16.11.22: - Revert the rdesktop baseimage's sesman change that introduced a delay.
    • 24.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 18.04.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-thelounge/index.html b/images/docker-thelounge/index.html index c316e7275e..e4220a42fb 100644 --- a/images/docker-thelounge/index.html +++ b/images/docker-thelounge/index.html @@ -1,4 +1,4 @@ - thelounge - LinuxServer.io

    linuxserver/thelounge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Thelounge (a fork of shoutIRC) is a web IRC client that you host on your own server.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/thelounge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases.
    next Next Pre-Releases.
    nightly Nightly images from commits in master.

    Application Setup

    • When the application first runs, it will populate its /config

    • Stop the container

    • Now from the host, edit /config/config.js, wherever you've mapped it

    • In most cases you want the value public: false to allow named users only

    • Setting the two prefetch values to true improves usability, but uses more storage

    • Once you have the configuration you want, save it and start the container again

    • For each user, run the command

    • docker exec -it thelounge s6-setuidgid abc thelounge add <user>

    • You will be prompted to enter a password that will not be echoed.

    • Saving logs to disk is the default, this consumes more space but allows scrollback.

    • To log in to the application, browse to http://<hostip>:9000

    • You should now be prompted for a username and password on the webinterface.

    • Once logged in, you can add an IRC network. Some defaults are preset for Freenode

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + thelounge - LinuxServer.io       

    linuxserver/thelounge

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Thelounge (a fork of shoutIRC) is a web IRC client that you host on your own server.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/thelounge:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases.
    next Next Pre-Releases.
    nightly Nightly images from commits in master.

    Application Setup

    • When the application first runs, it will populate its /config

    • Stop the container

    • Now from the host, edit /config/config.js, wherever you've mapped it

    • In most cases you want the value public: false to allow named users only

    • Setting the two prefetch values to true improves usability, but uses more storage

    • Once you have the configuration you want, save it and start the container again

    • For each user, run the command

    • docker exec -it thelounge s6-setuidgid abc thelounge add <user>

    • You will be prompted to enter a password that will not be echoed.

    • Saving logs to disk is the default, this consumes more space but allows scrollback.

    • To log in to the application, browse to http://<hostip>:9000

    • You should now be prompted for a username and password on the webinterface.

    • Once logged in, you can add an IRC network. Some defaults are preset for Freenode

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       thelounge:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    9000 Application WebUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Configuration files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it thelounge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f thelounge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' thelounge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/thelounge:latest

    Versions

    • 24.10.22: - Fix sqlite3 build.
    • 12.04.22: - Install from source using yarn.
    • 11.04.22: - Rebasing to alpine 3.15 and switching from python2-dev to python3-dev for building node sqlite on arm.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 15.05.19: - Update Arm variant images to build sqlite3 module.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 25.08.18: - Use global install, simplifies adding users.
    • 20.08.18: - Rebase to alpine 3.8.
    • 06.01.18: - Rebase to alpine 3.7.
    • 26.05.17: - Rebase to alpine 3.6.
    • 06.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Bump to pickup 2.10 release.
    • 14.10.16: - Add version layer information.
    • 11.09.16: - Add layer badges to README.
    • 31.08.16: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it thelounge /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f thelounge
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' thelounge
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/thelounge:latest

    Versions

    • 24.10.22: - Fix sqlite3 build.
    • 12.04.22: - Install from source using yarn.
    • 11.04.22: - Rebasing to alpine 3.15 and switching from python2-dev to python3-dev for building node sqlite on arm.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 02.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 15.05.19: - Update Arm variant images to build sqlite3 module.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 25.08.18: - Use global install, simplifies adding users.
    • 20.08.18: - Rebase to alpine 3.8.
    • 06.01.18: - Rebase to alpine 3.7.
    • 26.05.17: - Rebase to alpine 3.6.
    • 06.02.17: - Rebase to alpine 3.5.
    • 14.10.16: - Bump to pickup 2.10 release.
    • 14.10.16: - Add version layer information.
    • 11.09.16: - Add layer badges to README.
    • 31.08.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-transmission/index.html b/images/docker-transmission/index.html index 2451a632c9..4ab92ecf4a 100644 --- a/images/docker-transmission/index.html +++ b/images/docker-transmission/index.html @@ -1,4 +1,4 @@ - transmission - LinuxServer.io

    linuxserver/transmission

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Transmission is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, µTP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/transmission:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Webui is on port 9091, the settings.json file in /config has extra settings not available in the webui. Stop the container before editing it or any changes won't be saved.

    If you choose to use transmission-web-control as your default UI, just note that the origional Web UI will not be available to you despite the button being present.

    Securing the webui with a username/password.

    Use the USER and PASS variables in docker run/create/compose to set authentication. Do not manually edit the settings.json to input user/pass, otherwise transmission cannot be stopped cleanly by the s6 supervisor.

    Updating Blocklists Automatically

    This requires "blocklist-enabled": true, to be set. By setting this to true, it is assumed you have also populated blocklist-url with a valid block list.

    The automatic update is a shell script that downloads a blocklist from the url stored in the settings.json, gunzips it, and restarts the transmission daemon.

    The automatic update will run once a day at 3am local server time.

    Using whitelist

    Use WHITELIST to enable a list of ip as whitelist. This enable support for rpc-whitelist. When WHITELIST is empty support for whitelist is disabled.

    Use HOST_WHITELIST to enable an list of dns names as host-whitelist. This enable support for rpc-host-whitelist. When HOST_WHITELIST is empty support for host-whitelist is disabled.

    Use alternative Transmission torrent ports

    Use PEERPORT to specify the port(s) Transmission should listen on. This disables random port selection. This should be the same as the port mapped in your docker configuration.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + transmission - LinuxServer.io       

    linuxserver/transmission

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Transmission is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, µTP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/transmission:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Webui is on port 9091, the settings.json file in /config has extra settings not available in the webui. Stop the container before editing it or any changes won't be saved.

    If you choose to use transmission-web-control as your default UI, just note that the origional Web UI will not be available to you despite the button being present.

    Securing the webui with a username/password.

    Use the USER and PASS variables in docker run/create/compose to set authentication. Do not manually edit the settings.json to input user/pass, otherwise transmission cannot be stopped cleanly by the s6 supervisor.

    Updating Blocklists Automatically

    This requires "blocklist-enabled": true, to be set. By setting this to true, it is assumed you have also populated blocklist-url with a valid block list.

    The automatic update is a shell script that downloads a blocklist from the url stored in the settings.json, gunzips it, and restarts the transmission daemon.

    The automatic update will run once a day at 3am local server time.

    Using whitelist

    Use WHITELIST to enable a list of ip as whitelist. This enable support for rpc-whitelist. When WHITELIST is empty support for whitelist is disabled.

    Use HOST_WHITELIST to enable an list of dns names as host-whitelist. This enable support for rpc-host-whitelist. When HOST_WHITELIST is empty support for host-whitelist is disabled.

    Use alternative Transmission torrent ports

    Use PEERPORT to specify the port(s) Transmission should listen on. This disables random port selection. This should be the same as the port mapped in your docker configuration.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       transmission:
    @@ -45,4 +45,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    9091 WebUI
    51413 Torrent Port TCP
    51413/udp Torrent Port UDP

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    TRANSMISSION_WEB_HOME=/combustion-release/ Specify an alternative UI options are /combustion-release/, /transmission-web-control/, /kettu/, /flood-for-transmission/, and /transmissionic/.
    USER=username Specify an optional username for the interface
    PASS=password Specify an optional password for the interface
    WHITELIST=iplist Specify an optional list of comma separated ip whitelist. Fills rpc-whitelist setting.
    PEERPORT=peerport Specify an optional port for torrent TCP/UDP connections. Fills peer-port setting.
    HOST_WHITELIST=dnsname list Specify an optional list of comma separated dns name whitelist. Fills rpc-host-whitelist setting.

    Volume Mappings (-v)

    Volume Function
    /config Where transmission should store config files and logs.
    /downloads Local path for downloads.
    /watch Watch folder for torrent files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it transmission /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f transmission
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' transmission
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/transmission:latest

    Versions

    • 02.11.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 03.04.22: - Add Transmissionic as a UI option.
    • 21.02.22: - Build unrar from source, rebase to Alpine 3.15, add symlinks neeeded for TWC. Credit @alexbelgium
    • 09.07.21: - Wait for the transmission-daemon termination after a caught sigterm.
    • 06.03.21: - Add Flood for Transmission as a UI option.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 02.11.20: - Add ca-certificates package to allow connecting to https trackers.
    • 02.06.20: - Rebase to alpine 3.12, update to transmission 3.0, remove python2, add python3.
    • 11.05.20: - Remove unnecessary chmod (remnant of previous change).
    • 28.04.20: - Use transmission-remote to update blocklist.
    • 30.03.20: - Internalize blocklist-update.sh.
    • 29.03.20: - Update auth info in readme.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 04.10.19: - Update package label.
    • 21.08.19: - Add optional user/pass environment variables, fix transmission shut down if user/pass are set.
    • 19.07.19: - Send SIGTERM in blocklist update to properly close pid.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebase to Alpine 3.9, add themes to baseimage, add python and findutils.
    • 22.02.19: - Catch term and clean exit.
    • 07.02.19: - Add pipeline logic and multi arch.
    • 15.08.18: - Rebase to alpine linux 3.8.
    • 12.02.18: - Pull transmission from edge repo.
    • 10.01.18: - Rebase to alpine linux 3.7.
    • 25.07.17: - Add rsync package.
    • 27.05.17: - Rebase to alpine linux 3.6.
    • 06.02.17: - Rebase to alpine linux 3.5.
    • 15.01.17: - Add p7zip, tar, unrar, and unzip packages.
    • 16.10.16: - Blocklist autoupdate with optional authentication.
    • 14.10.16: - Add version layer informationE.
    • 23.09.16: - Add information about securing the webui to README.
    • 21.09.16: - Add curl package.
    • 09.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 09.08.16: - Rebase to alpine linux.
    • 06.12.15: - Separate mapping for watch folder.
    • 16.11.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it transmission /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f transmission
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' transmission
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/transmission:latest

    Versions

    • 02.11.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 12.08.22: - Bump unrar to 6.1.7.
    • 03.04.22: - Add Transmissionic as a UI option.
    • 21.02.22: - Build unrar from source, rebase to Alpine 3.15, add symlinks neeeded for TWC. Credit @alexbelgium
    • 09.07.21: - Wait for the transmission-daemon termination after a caught sigterm.
    • 06.03.21: - Add Flood for Transmission as a UI option.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 02.11.20: - Add ca-certificates package to allow connecting to https trackers.
    • 02.06.20: - Rebase to alpine 3.12, update to transmission 3.0, remove python2, add python3.
    • 11.05.20: - Remove unnecessary chmod (remnant of previous change).
    • 28.04.20: - Use transmission-remote to update blocklist.
    • 30.03.20: - Internalize blocklist-update.sh.
    • 29.03.20: - Update auth info in readme.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 04.10.19: - Update package label.
    • 21.08.19: - Add optional user/pass environment variables, fix transmission shut down if user/pass are set.
    • 19.07.19: - Send SIGTERM in blocklist update to properly close pid.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebase to Alpine 3.9, add themes to baseimage, add python and findutils.
    • 22.02.19: - Catch term and clean exit.
    • 07.02.19: - Add pipeline logic and multi arch.
    • 15.08.18: - Rebase to alpine linux 3.8.
    • 12.02.18: - Pull transmission from edge repo.
    • 10.01.18: - Rebase to alpine linux 3.7.
    • 25.07.17: - Add rsync package.
    • 27.05.17: - Rebase to alpine linux 3.6.
    • 06.02.17: - Rebase to alpine linux 3.5.
    • 15.01.17: - Add p7zip, tar, unrar, and unzip packages.
    • 16.10.16: - Blocklist autoupdate with optional authentication.
    • 14.10.16: - Add version layer informationE.
    • 23.09.16: - Add information about securing the webui to README.
    • 21.09.16: - Add curl package.
    • 09.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 09.08.16: - Rebase to alpine linux.
    • 06.12.15: - Separate mapping for watch folder.
    • 16.11.15: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-tvheadend/index.html b/images/docker-tvheadend/index.html index 9397535cee..a138cf6533 100644 --- a/images/docker-tvheadend/index.html +++ b/images/docker-tvheadend/index.html @@ -1,4 +1,4 @@ - tvheadend - LinuxServer.io

    linuxserver/tvheadend

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Tvheadend works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun as input sources. Tvheadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming. Multiple EPG sources are supported (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML).

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/tvheadend:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The setup depends if you run the one of the stable tags or use latest. Running latest is the easiest as it has a setup wizard.

    Stable

    First thing to do is to go to Configuration --> DVB Inputs --> TV adapters and add your LNB/switch info. Then create a new network in the Networks tab and set the correct pre-defined muxes and orbital position. Go back to the TV adapters tab and add the newly created network under universal LNB. Go back to the Networks tab and mark the network you created earlier and press the Force Scan button. Tvheadend will now scan the muxes for services.

    After the scan is done, head to the Services tab and find the services you want as channels, mark them, and press map services. They should now appear under Configuration --> Channel/EPG.

    Latest

    The first thing to do is to run the setup wizard. If it doesn't pop up at first login, you can find it in Configuration --> General --> Base and click Start Wizard. This will guide you to set up the basic parts of tvheadend.

    Configuring XMLTV grabber

    To configure the XMLTV grabber, first check if your grabber is listed in Configuration --> Channel/EPG --> EPG Grabber Modules. If it's listed, you will have to configure the grabber before enabling. Find the path in the path field of your grabber. We will use the last part. It starts with tv_grab_. Add it after /usr/bin/ in the below command. There should be no space between Usr/bin/ and the part you added.

    docker exec -it -u abc tvheadend /usr/bin/for_you_to_fill_out --configure
    + tvheadend - LinuxServer.io       

    linuxserver/tvheadend

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Tvheadend works as a proxy server: is a TV streaming server and recorder for Linux, FreeBSD and Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun as input sources. Tvheadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming. Multiple EPG sources are supported (over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML).

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/tvheadend:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The setup depends if you run the one of the stable tags or use latest. Running latest is the easiest as it has a setup wizard.

    Stable

    First thing to do is to go to Configuration --> DVB Inputs --> TV adapters and add your LNB/switch info. Then create a new network in the Networks tab and set the correct pre-defined muxes and orbital position. Go back to the TV adapters tab and add the newly created network under universal LNB. Go back to the Networks tab and mark the network you created earlier and press the Force Scan button. Tvheadend will now scan the muxes for services.

    After the scan is done, head to the Services tab and find the services you want as channels, mark them, and press map services. They should now appear under Configuration --> Channel/EPG.

    Latest

    The first thing to do is to run the setup wizard. If it doesn't pop up at first login, you can find it in Configuration --> General --> Base and click Start Wizard. This will guide you to set up the basic parts of tvheadend.

    Configuring XMLTV grabber

    To configure the XMLTV grabber, first check if your grabber is listed in Configuration --> Channel/EPG --> EPG Grabber Modules. If it's listed, you will have to configure the grabber before enabling. Find the path in the path field of your grabber. We will use the last part. It starts with tv_grab_. Add it after /usr/bin/ in the below command. There should be no space between Usr/bin/ and the part you added.

    docker exec -it -u abc tvheadend /usr/bin/for_you_to_fill_out --configure
     

    Now follow the onscreen progress. If you get asked about cache, just accept the default. After you have configured your grabber, you can go back and enable your grabber.

    If you allready have a configuration file, you can add it in the .xmltv folder where you mapped the /config volume. If it's not created, create it.

    Comskip This container comes with Comskip for commercial flagging of recordings. This you have to add in the recording config of tvheadend. Go to Configuration --> Recording. Change the view level to advanced in the top right corner, and add the below in the Post-processor command field.

    /usr/bin/comskip --ini=/config/comskip/comskip.ini "%f"
     

    Now comskip will run after each recording is finished. You will find comskip.ini in the comskip folder of your /config volume mapping. See the Comskip homepage for tuning of the ini file.

    FFmpeg

    FFmpeg is installed in /usr/bin/ in case you need to use it with pipe.

    EPG XML file

    If you have EPG data in XML format from a supplier, you can drop it in the data folder of your /config volume mapping. If it doesn't exist, create it. Then choose the XML file grabber in Configuration --> Channel/EPG --> EPG Grabber Modules. If you use WebGrab+Plus, choose the WebGrab+Plus XML file grabber. The XML file goes in the same path as above. The xml file has to be named guide.xml.

    For advanced setup of tvheadend, go to [Tvheadend][appurl]

    Picons

    We have added all the picons from picons in the folder /picons. To enable the use of these picons, add the path to the Channel icon path in Configuration --> General --> Base. You need to enable minimum advanced view level to see the picons options.

    Additional runtime parameters

    In some cases it might be necessary to start tvheadend with additional parameters, for example to enable debugging or specify webroot for reverse proxy. Be sure to have the right parameters set, as adding the wrong once might lead to the container not starting correctly.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
    @@ -38,4 +38,4 @@ services:
     

    Host vs. Bridge

    If you use IPTV, SAT>IP or HDHomeRun, you need to create the container with --net=host and remove the -p flags. This is because to work with these services Tvheadend requires a multicast address of 239.255.255.250 and a UDP port of 1900 which at this time is not possible with docker bridge mode. If you have other host services which also use multicast such as SSDP/DLNA/Emby you may experience stabilty problems. These can be solved by giving tvheadend its own IP using macvlan.

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    9981 WebUI
    9982 HTSP server port.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    RUN_OPTS= Optionally specify additional arguments to be passed. See Additional runtime parameters.

    Volume Mappings (-v)

    Volume Function
    /config Where TVHeadend show store it's config files.
    /recordings Where you want the PVR to store recordings.

    Device Mappings (--device)

    Parameter Function
    /dev/dri Only needed if you want to use your AMD/Intel GPU for hardware accelerated video encoding (vaapi).
    /dev/dvb Only needed if you want to pass through a DVB card to the container. If you use IPTV or HDHomeRun you can leave it out.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it tvheadend /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f tvheadend
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' tvheadend
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/tvheadend:latest

    Versions

    • 31.08.22: - Update sample env vars and how RUN_OPTS are handled.
    • 19.08.22: - Switch to new picons builder.
    • 16.04.22: - Added URL XMLTV grabber.
    • 05.01.22: - Rebase to Alpine 3.15. Disable execinfo to fix builds. Update xmltv.
    • 11.05.21: - Added Intel iHD driver support.
    • 02.06.20: - Update to Alpine 3.12.
    • 27.12.19: - Add requests and perl-json-xs package.
    • 27.12.19: - Update to Alpine 3.11.
    • 02.10.19: - Improve permission fixing on render & dvb devices.
    • 18.08.19: - Add AMD drivers.
    • 02.08.19: - Attempt to automatically fix permissions on /dev/dri and /dev/dvb.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 27.03.19: - Rebase to Alpine 3.9, fix init logic to only chown once.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 01.03.19: - Bump xmltv to 0.6.1.
    • 28.02.19: - add perl-lwp-useragent-determined.
    • 17.02.19: - Bump xmltv to 5.70, ensure version tagging works by cloning tvheadend.
    • 14.02.19: - Add picons path to config.
    • 15.01.19: - Add pipeline logic and multi arch.
    • 12.09.18: - Rebase to alpine 3.8 and use buildstage type build.
    • 21.04.18: - Add JSON::XS Perl package for grab_tv_huro.
    • 24.03.18: - Add dvbcsa package.
    • 04.03.18: - Use sourceforge master rather than mirror for xmltv.
    • 22.02.18: - Add lost libva-intel-driver.
    • 21.02.18: - Fix wrong version of iconv used.
    • 18.02.18: - Add vaapi support, some cleanup and dropping of deprecated options.
    • 04.01.18: - Deprecate cpu_core routine lack of scaling.
    • 11.12.17: - Rebase to alpine 3.7, linting fixes.
    • 02.09.17: - Add codec dependencies.
    • 13.07.17: - Increase uniformity across all archs.
    • 08.07.17: - Update README with full path for comskip.
    • 02.07.17: - Move to one branch for all 4.2 releases.
    • 27.05.17: - Rebase to alpine 3.6.
    • 01.05.17: - Update to tvheadend 4.2.1 stable.
    • 18.04.17: - Use repo version of gnu-libiconv rather than compiling.
    • 09.04.17: - Chain cpanm installs in one block and use --installdeps.
    • 09.02.17: - Perl changes, add picons file to gitignore and update XMLTV to 0.5.69.
    • 07.02.17: - Add variable to add additional runtime paramters.
    • 05.02.17: - Update to alpine 3.5 and change dvb-apps to only compile needed libs.
    • 14.11.16: - Add picons from picons.xyz to /picons folder and add info to README.
    • 22.09.16: - Fix broken tv_grab_wg, libs for xmltv and update README.
    • 18.09.16: - Update XMLTV to 0.5.68 and update README.
    • 10.09.16: - Add layer badges to README.
    • 05.09.16: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it tvheadend /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f tvheadend
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' tvheadend
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/tvheadend:latest

    Versions

    • 31.08.22: - Update sample env vars and how RUN_OPTS are handled.
    • 19.08.22: - Switch to new picons builder.
    • 16.04.22: - Added URL XMLTV grabber.
    • 05.01.22: - Rebase to Alpine 3.15. Disable execinfo to fix builds. Update xmltv.
    • 11.05.21: - Added Intel iHD driver support.
    • 02.06.20: - Update to Alpine 3.12.
    • 27.12.19: - Add requests and perl-json-xs package.
    • 27.12.19: - Update to Alpine 3.11.
    • 02.10.19: - Improve permission fixing on render & dvb devices.
    • 18.08.19: - Add AMD drivers.
    • 02.08.19: - Attempt to automatically fix permissions on /dev/dri and /dev/dvb.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 27.03.19: - Rebase to Alpine 3.9, fix init logic to only chown once.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 01.03.19: - Bump xmltv to 0.6.1.
    • 28.02.19: - add perl-lwp-useragent-determined.
    • 17.02.19: - Bump xmltv to 5.70, ensure version tagging works by cloning tvheadend.
    • 14.02.19: - Add picons path to config.
    • 15.01.19: - Add pipeline logic and multi arch.
    • 12.09.18: - Rebase to alpine 3.8 and use buildstage type build.
    • 21.04.18: - Add JSON::XS Perl package for grab_tv_huro.
    • 24.03.18: - Add dvbcsa package.
    • 04.03.18: - Use sourceforge master rather than mirror for xmltv.
    • 22.02.18: - Add lost libva-intel-driver.
    • 21.02.18: - Fix wrong version of iconv used.
    • 18.02.18: - Add vaapi support, some cleanup and dropping of deprecated options.
    • 04.01.18: - Deprecate cpu_core routine lack of scaling.
    • 11.12.17: - Rebase to alpine 3.7, linting fixes.
    • 02.09.17: - Add codec dependencies.
    • 13.07.17: - Increase uniformity across all archs.
    • 08.07.17: - Update README with full path for comskip.
    • 02.07.17: - Move to one branch for all 4.2 releases.
    • 27.05.17: - Rebase to alpine 3.6.
    • 01.05.17: - Update to tvheadend 4.2.1 stable.
    • 18.04.17: - Use repo version of gnu-libiconv rather than compiling.
    • 09.04.17: - Chain cpanm installs in one block and use --installdeps.
    • 09.02.17: - Perl changes, add picons file to gitignore and update XMLTV to 0.5.69.
    • 07.02.17: - Add variable to add additional runtime paramters.
    • 05.02.17: - Update to alpine 3.5 and change dvb-apps to only compile needed libs.
    • 14.11.16: - Add picons from picons.xyz to /picons folder and add info to README.
    • 22.09.16: - Fix broken tv_grab_wg, libs for xmltv and update README.
    • 18.09.16: - Update XMLTV to 0.5.68 and update README.
    • 10.09.16: - Add layer badges to README.
    • 05.09.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-ubooquity/index.html b/images/docker-ubooquity/index.html index 1d4292e0fe..89c9afa5b1 100644 --- a/images/docker-ubooquity/index.html +++ b/images/docker-ubooquity/index.html @@ -1,4 +1,4 @@ - ubooquity - LinuxServer.io

    linuxserver/ubooquity

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ubooquity is a free, lightweight and easy-to-use home server for your comics and ebooks. Use it to access your files from anywhere, with a tablet, an e-reader, a phone or a computer.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ubooquity:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    IMPORTANT Ubooquity has now been upgraded to version 2 and for existing v1.x users we recommend cleaning your appdata and reinstalling, due to changes in the application itself making the two versions essentially incompatible with each other. Also the admin page and library pages are now on separate ports as detailed below.

    Access the admin page at http://<your-ip>:2203/ubooquity/admin and set a password.

    Then you can access the webui at http://<your-ip>:2202/ubooquity/

    This container will automatically scan your files at startup.

    MAXMEM

    The quantity of memory allocated to Ubooquity depends on the hardware your are running it on. If this quantity is too small, you might sometime saturate it with when performing memory intensive operations. That’s when you get java.lang.OutOfMemoryError: Java heap space errors.

    You can explicitly set the amount of memory Ubooquity is allowed to use (be careful to set a value lower than the actual physical memory of your hardware). Value is a number of megabytes ( put just a number, without MB )

    If no value is set it will default to 512MB.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + ubooquity - LinuxServer.io       

    linuxserver/ubooquity

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Ubooquity is a free, lightweight and easy-to-use home server for your comics and ebooks. Use it to access your files from anywhere, with a tablet, an e-reader, a phone or a computer.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/ubooquity:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    IMPORTANT Ubooquity has now been upgraded to version 2 and for existing v1.x users we recommend cleaning your appdata and reinstalling, due to changes in the application itself making the two versions essentially incompatible with each other. Also the admin page and library pages are now on separate ports as detailed below.

    Access the admin page at http://<your-ip>:2203/ubooquity/admin and set a password.

    Then you can access the webui at http://<your-ip>:2202/ubooquity/

    This container will automatically scan your files at startup.

    MAXMEM

    The quantity of memory allocated to Ubooquity depends on the hardware your are running it on. If this quantity is too small, you might sometime saturate it with when performing memory intensive operations. That’s when you get java.lang.OutOfMemoryError: Java heap space errors.

    You can explicitly set the amount of memory Ubooquity is allowed to use (be careful to set a value lower than the actual physical memory of your hardware). Value is a number of megabytes ( put just a number, without MB )

    If no value is set it will default to 512MB.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       ubooquity:
    @@ -35,4 +35,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    2202 The library port.
    2203 The admin port.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.
    MAXMEM=<maxmem> To set the maximum memory. ( ex: set '1024' for 1GB )

    Volume Mappings (-v)

    Volume Function
    /config Config files and database for ubooquity.
    /books Location of books.
    /comics Location of comics.
    /files Location of raw files.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ubooquity /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ubooquity
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ubooquity
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ubooquity:latest

    Versions

    • 10.10.22: - Rebasing to alpine 3.16, migrate to s6v3.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 15.10.18: - Upgrade to Ubooquity 2.1.2.
    • 23.08.18: - Rebase to alpine 3.8.
    • 09.12.17: - Rebase to alpine 3.7.
    • 07.10.17: - Upgrade to Ubooquity 2.1.1.
    • 16.07.17: - Upgrade to Ubooquity 2.1.0, see setting up application section for important info for existing v1.x users.
    • 26.05.17: - Rebase to alpine 3.6.
    • 08.04.17: - Switch to java from 3.5 repo, fixes login crashes.
    • 06.02.17: - Rebase to alpine 3.5.
    • 06.12.16: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it ubooquity /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f ubooquity
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' ubooquity
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/ubooquity:latest

    Versions

    • 10.10.22: - Rebasing to alpine 3.16, migrate to s6v3.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 28.01.19: - Add pipeline logic and multi arch.
    • 15.10.18: - Upgrade to Ubooquity 2.1.2.
    • 23.08.18: - Rebase to alpine 3.8.
    • 09.12.17: - Rebase to alpine 3.7.
    • 07.10.17: - Upgrade to Ubooquity 2.1.1.
    • 16.07.17: - Upgrade to Ubooquity 2.1.0, see setting up application section for important info for existing v1.x users.
    • 26.05.17: - Rebase to alpine 3.6.
    • 08.04.17: - Switch to java from 3.5 repo, fixes login crashes.
    • 06.02.17: - Rebase to alpine 3.5.
    • 06.12.16: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-unifi-controller/index.html b/images/docker-unifi-controller/index.html index c1342cd1f5..b44ee32c98 100644 --- a/images/docker-unifi-controller/index.html +++ b/images/docker-unifi-controller/index.html @@ -1,4 +1,4 @@ - unifi-controller - LinuxServer.io

    linuxserver/unifi-controller

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    The Unifi-controller software is a powerful, enterprise wireless software engine ideal for high-density client deployments requiring low latency and high uptime performance.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/unifi-controller:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    The webui is at https://ip:8443, setup with the first run wizard.

    For Unifi to adopt other devices, e.g. an Access Point, it is required to change the inform IP address. Because Unifi runs inside Docker by default it uses an IP address not accessible by other devices. To change this go to Settings > System Settings > Controller Configuration and set the Controller Hostname/IP to a hostname or IP address accessible by your devices. Additionally the checkbox "Override inform host with controller hostname/IP" has to be checked, so that devices can connect to the controller during adoption (devices use the inform-endpoint during adoption).

    In order to manually adopt a device take these steps:

    ssh ubnt@$AP-IP
    + unifi-controller - LinuxServer.io       

    linuxserver/unifi-controller

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    The Unifi-controller software is a powerful, enterprise wireless software engine ideal for high-density client deployments requiring low latency and high uptime performance.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/unifi-controller:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf

    Application Setup

    The webui is at https://ip:8443, setup with the first run wizard.

    For Unifi to adopt other devices, e.g. an Access Point, it is required to change the inform IP address. Because Unifi runs inside Docker by default it uses an IP address not accessible by other devices. To change this go to Settings > System Settings > Controller Configuration and set the Controller Hostname/IP to a hostname or IP address accessible by your devices. Additionally the checkbox "Override inform host with controller hostname/IP" has to be checked, so that devices can connect to the controller during adoption (devices use the inform-endpoint during adoption).

    In order to manually adopt a device take these steps:

    ssh ubnt@$AP-IP
     set-inform http://$address:8080/inform
     

    The default device password is ubnt. $address is the IP address of the host you are running this container on and $AP-IP is the Access Point IP address.

    When using a Security Gateway (router) it could be that network connected devices are unable to obtain an ip address. This can be fixed by setting "DHCP Gateway IP", under Settings > Networks > network_name, to a correct (and accessable) ip address.

    Strict reverse proxies

    This image uses a self-signed certificate by default. This naturally means the scheme is https. If you are using a reverse proxy which validates certificates, you need to disable this check for the container.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
    @@ -47,4 +47,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    8443 Unifi web admin port
    3478/udp Unifi STUN port
    10001/udp Required for AP discovery
    8080 Required for device communication
    1900/udp Required for Make controller discoverable on L2 network option
    8843 Unifi guest portal HTTPS redirect port
    8880 Unifi guest portal HTTP redirect port
    6789 For mobile throughput test
    5514/udp Remote syslog port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use (e.g. Europe/London) - see list
    MEM_LIMIT=1024 Optionally change the Java memory limit (in Megabytes). Set to default to reset to default
    MEM_STARTUP=1024 Optionally change the Java initial/minimum memory (in Megabytes). Set to default to reset to default

    Volume Mappings (-v)

    Volume Function
    /config All Unifi data stored here

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it unifi-controller /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f unifi-controller
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' unifi-controller
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/unifi-controller:latest

    Versions

    • 30.11.22: - Bump JRE to 11.
    • 01.06.22: - Deprecate armhf.
    • 23.12.21: - Move min/max memory config from run to system.properties.
    • 22.12.21: - Move deb package install to first init to avoid overlayfs performance issues.
    • 13.12.21: - Rebase 64 bit containers to Focal.
    • 11.12.21: - Add java opts to mitigate CVE-2021-44228.
    • 11.06.21: - Allow for changing Java initial mem via new optional environment variable.
    • 12.01.21: - Deprecate the LTS tag as Unifi no longer releases LTS stable builds. Existing users can switch to the latest tag. Direct upgrade from 5.6.42 (LTS) to 6.0.42 (latest) tested successfully.
    • 17.07.20: - Rebase 64 bit containers to Bionic and Mongo 3.6.
    • 16.06.20: - Add logrotate.
    • 02.06.20: - Updated port list & descriptions. Moved some ports to optional.
    • 14.11.19: - Changed url for deb package to match new Ubiquity domain.
    • 29.07.19: - Allow for changing Java mem limit via new optional environment variable.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 10.02.19: - Initial release of new unifi-controller image with new tags and pipeline logic
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it unifi-controller /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f unifi-controller
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' unifi-controller
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/unifi-controller:latest

    Versions

    • 30.11.22: - Bump JRE to 11.
    • 01.06.22: - Deprecate armhf.
    • 23.12.21: - Move min/max memory config from run to system.properties.
    • 22.12.21: - Move deb package install to first init to avoid overlayfs performance issues.
    • 13.12.21: - Rebase 64 bit containers to Focal.
    • 11.12.21: - Add java opts to mitigate CVE-2021-44228.
    • 11.06.21: - Allow for changing Java initial mem via new optional environment variable.
    • 12.01.21: - Deprecate the LTS tag as Unifi no longer releases LTS stable builds. Existing users can switch to the latest tag. Direct upgrade from 5.6.42 (LTS) to 6.0.42 (latest) tested successfully.
    • 17.07.20: - Rebase 64 bit containers to Bionic and Mongo 3.6.
    • 16.06.20: - Add logrotate.
    • 02.06.20: - Updated port list & descriptions. Moved some ports to optional.
    • 14.11.19: - Changed url for deb package to match new Ubiquity domain.
    • 29.07.19: - Allow for changing Java mem limit via new optional environment variable.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 10.02.19: - Initial release of new unifi-controller image with new tags and pipeline logic
    \ No newline at end of file diff --git a/images/docker-webgrabplus/index.html b/images/docker-webgrabplus/index.html index 822ab7042c..312b54751c 100644 --- a/images/docker-webgrabplus/index.html +++ b/images/docker-webgrabplus/index.html @@ -1,4 +1,4 @@ - webgrabplus - LinuxServer.io

    linuxserver/webgrabplus

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Webgrabplus is a multi-site incremental xmltv epg grabber. It collects tv-program guide data from selected tvguide sites for your favourite channels.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/webgrabplus:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    To configure WebGrab+Plus follow the documentation

    Please note that depending on your host this container may not work with the no-new-privileges=true security-opt.

    Note that there are some things in the guide that does not apply to this container. Below you can find the changes.

    The configuration files are found where your config volume is mounted. Do not change the filename tag in the configuration file!

    The /data volume mapping is where WebGrab+Plus outputs the xml file. To use the xml file in another program, you have to point it to the host path you mapped the /data volume to.

    To adjust the scheduled cron job for grabbing, edit the wg3-cron file found in the /config folder. After you have edited the the wg3-cron file, restart the container to apply the new schedule. Do not adjust the command!

    Note that due to something in version 3, we had to change the commands for scheduling the grab. If you have a version where there is a wg-cron file in your /config mount, delete it and use wg3-cron instead.

    Below is the syntax of the cron file.

     ┌───────────── minute (0 - 59)
    + webgrabplus - LinuxServer.io       

    linuxserver/webgrabplus

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Webgrabplus is a multi-site incremental xmltv epg grabber. It collects tv-program guide data from selected tvguide sites for your favourite channels.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/webgrabplus:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    To configure WebGrab+Plus follow the documentation

    Please note that depending on your host this container may not work with the no-new-privileges=true security-opt.

    Note that there are some things in the guide that does not apply to this container. Below you can find the changes.

    The configuration files are found where your config volume is mounted. Do not change the filename tag in the configuration file!

    The /data volume mapping is where WebGrab+Plus outputs the xml file. To use the xml file in another program, you have to point it to the host path you mapped the /data volume to.

    To adjust the scheduled cron job for grabbing, edit the wg3-cron file found in the /config folder. After you have edited the the wg3-cron file, restart the container to apply the new schedule. Do not adjust the command!

    Note that due to something in version 3, we had to change the commands for scheduling the grab. If you have a version where there is a wg-cron file in your /config mount, delete it and use wg3-cron instead.

    Below is the syntax of the cron file.

     ┌───────────── minute (0 - 59)
      │ ┌───────────── hour (0 - 23)
      │ │ ┌───────────── day of month (1 - 31)
      │ │ │ ┌───────────── month (1 - 12)
    @@ -37,4 +37,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London

    Volume Mappings (-v)

    Volume Function
    /config Where webgrabplus should store it's config files.
    /data Where webgrabplus should store it's data files.

    Miscellaneous Options

    Parameter Function
    --hostname= Set the hostname for the container for the license check.
    --mac-address= Set the mac_address for the container for the license check.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it webgrabplus /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f webgrabplus
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' webgrabplus
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/webgrabplus:latest

    Versions

    • 23.03.22: - Rebase to Alpine 3.16 and s6v3. Update to dotnet 6.
    • 29.04.22: - Add hostname and mac_address arguments that are needed for the license check to compose and cli samples.
    • 23.03.22: - Rebase to Alpine 3.15.
    • 23.03.22: - Update to use dotnet instead of mono.
    • 06.01.22: - Rebase to Ubuntu focal. Enable auto builds on version updates (beta and stable).
    • 17.12.21: - Update to version 3.2.2 beta.
    • 05.08.21: - Update to version 3.2.1 beta.
    • 05.06.21: - Added mono-devel dependency.
    • 04.06.21: - Update to version 3.1.8 beta.
    • 22.03.21: - Update to version 3.1.7 beta.
    • 07.03.21: - Update to version 3.1.6 beta.
    • 29.01.21: - Update external version number to show as 3.1.5.
    • 24.01.21: - Update to version 3.1.5 beta.
    • 22.12.20: - Update to version 3.1.4 beta.
    • 12.10.20: - Fix version number in jenkinsfile.
    • 12.10.20: - Update to version 3.1.1 beta.
    • 22.06.20: - Add mono webrequest library.
    • 18.06.20: - Update to v3.1.0.
    • 29.03.20: - Update to v3.0.0. Changed to use wg3-cron file.
    • 28.05.19: - Update to v2.1.0 and beta v2.1.9, rebase to bionic.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 21.03.19: - Update to beta 2.1.7.
    • 19.02.19: - Add pipeline logic and multi arch.
    • 18.01.18: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it webgrabplus /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f webgrabplus
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' webgrabplus
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/webgrabplus:latest

    Versions

    • 23.03.22: - Rebase to Alpine 3.16 and s6v3. Update to dotnet 6.
    • 29.04.22: - Add hostname and mac_address arguments that are needed for the license check to compose and cli samples.
    • 23.03.22: - Rebase to Alpine 3.15.
    • 23.03.22: - Update to use dotnet instead of mono.
    • 06.01.22: - Rebase to Ubuntu focal. Enable auto builds on version updates (beta and stable).
    • 17.12.21: - Update to version 3.2.2 beta.
    • 05.08.21: - Update to version 3.2.1 beta.
    • 05.06.21: - Added mono-devel dependency.
    • 04.06.21: - Update to version 3.1.8 beta.
    • 22.03.21: - Update to version 3.1.7 beta.
    • 07.03.21: - Update to version 3.1.6 beta.
    • 29.01.21: - Update external version number to show as 3.1.5.
    • 24.01.21: - Update to version 3.1.5 beta.
    • 22.12.20: - Update to version 3.1.4 beta.
    • 12.10.20: - Fix version number in jenkinsfile.
    • 12.10.20: - Update to version 3.1.1 beta.
    • 22.06.20: - Add mono webrequest library.
    • 18.06.20: - Update to v3.1.0.
    • 29.03.20: - Update to v3.0.0. Changed to use wg3-cron file.
    • 28.05.19: - Update to v2.1.0 and beta v2.1.9, rebase to bionic.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 21.03.19: - Update to beta 2.1.7.
    • 19.02.19: - Add pipeline logic and multi arch.
    • 18.01.18: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-webtop/index.html b/images/docker-webtop/index.html index f8b44464a4..3d9835342d 100644 --- a/images/docker-webtop/index.html +++ b/images/docker-webtop/index.html @@ -1,4 +1,4 @@ - webtop - LinuxServer.io

    linuxserver/webtop

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Webtop - Alpine, Ubuntu, Fedora, and Arch based containers containing full desktop environments in officially supported flavors accessible via any modern web browser.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/webtop:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest XFCE Alpine
    ubuntu-xfce XFCE Ubuntu
    fedora-xfce XFCE Fedora
    arch-xfce XFCE Arch
    alpine-kde KDE Alpine
    ubuntu-kde KDE Ubuntu
    fedora-kde KDE Fedora
    arch-kde KDE Arch
    alpine-mate MATE Alpine
    ubuntu-mate MATE Ubuntu
    fedora-mate MATE Fedora
    arch-mate MATE Arch
    alpine-i3 i3 Alpine
    ubuntu-i3 i3 Ubuntu
    fedora-i3 i3 Fedora
    arch-i3 i3 Arch
    alpine-openbox Openbox Alpine
    ubuntu-openbox Openbox Ubuntu
    fedora-openbox Openbox Fedora
    arch-openbox Openbox Arch
    alpine-icewm IceWM Alpine
    ubuntu-icewm IceWM Ubuntu
    fedora-icewm IceWM Fedora
    arch-icewm IceWM Arch

    Application Setup

    The Webtop can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    You can also force login on the '/' path without this parameter by passing the environment variable -e AUTO_LOGIN=false.

    You can access advanced features of the Guacamole remote desktop using ctrl+alt+shift enabling you to use remote copy/paste, an onscreen keyboard, or a baked in file manager. This can also be accessed by clicking the small circle on the left side of the screen.

    Modern GUI desktop apps (including some flavors terminals) have issues with the latest Docker and syscall compatibility, you can use Docker with the --security-opt seccomp=unconfined setting to allow these syscalls or try podman as they have updated their codebase to support them

    Unlike our other containers these Desktops are not designed to be upgraded by Docker, you will keep your home directoy but anything you installed system level will be lost if you upgrade an existing container. To keep packages up to date instead use Ubuntu's own apt, Alpine's apk, Fedora's dnf, or Arch's pacman program

    Keyboard Layouts

    This should match the layout on the computer you are accessing the container from.

    The keyboard layouts available for use are: * da-dk-qwerty- Danish keyboard * de-ch-qwertz- Swiss German keyboard (qwertz) * de-de-qwertz- German keyboard (qwertz) - OSK available * en-gb-qwerty- English (UK) keyboard * en-us-qwerty- English (US) keyboard - OSK available DEFAULT * es-es-qwerty- Spanish keyboard - OSK available * fr-ch-qwertz- Swiss French keyboard (qwertz) * fr-fr-azerty- French keyboard (azerty) - OSK available * it-it-qwerty- Italian keyboard - OSK available * ja-jp-qwerty- Japanese keyboard * pt-br-qwerty- Portuguese Brazilian keyboard * sv-se-qwerty- Swedish keyboard * tr-tr-qwerty- Turkish-Q keyboard

    If you ever lose your password you can always reset it by execing into the container as root:

    docker exec -it webtop passwd abc
    + webtop - LinuxServer.io       

    linuxserver/webtop

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Webtop - Alpine, Ubuntu, Fedora, and Arch based containers containing full desktop environments in officially supported flavors accessible via any modern web browser.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/webtop:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest XFCE Alpine
    ubuntu-xfce XFCE Ubuntu
    fedora-xfce XFCE Fedora
    arch-xfce XFCE Arch
    alpine-kde KDE Alpine
    ubuntu-kde KDE Ubuntu
    fedora-kde KDE Fedora
    arch-kde KDE Arch
    alpine-mate MATE Alpine
    ubuntu-mate MATE Ubuntu
    fedora-mate MATE Fedora
    arch-mate MATE Arch
    alpine-i3 i3 Alpine
    ubuntu-i3 i3 Ubuntu
    fedora-i3 i3 Fedora
    arch-i3 i3 Arch
    alpine-openbox Openbox Alpine
    ubuntu-openbox Openbox Ubuntu
    fedora-openbox Openbox Fedora
    arch-openbox Openbox Arch
    alpine-icewm IceWM Alpine
    ubuntu-icewm IceWM Ubuntu
    fedora-icewm IceWM Fedora
    arch-icewm IceWM Arch

    Application Setup

    The Webtop can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    You can also force login on the '/' path without this parameter by passing the environment variable -e AUTO_LOGIN=false.

    You can access advanced features of the Guacamole remote desktop using ctrl+alt+shift enabling you to use remote copy/paste, an onscreen keyboard, or a baked in file manager. This can also be accessed by clicking the small circle on the left side of the screen.

    Modern GUI desktop apps (including some flavors terminals) have issues with the latest Docker and syscall compatibility, you can use Docker with the --security-opt seccomp=unconfined setting to allow these syscalls or try podman as they have updated their codebase to support them

    Unlike our other containers these Desktops are not designed to be upgraded by Docker, you will keep your home directoy but anything you installed system level will be lost if you upgrade an existing container. To keep packages up to date instead use Ubuntu's own apt, Alpine's apk, Fedora's dnf, or Arch's pacman program

    Keyboard Layouts

    This should match the layout on the computer you are accessing the container from.

    The keyboard layouts available for use are: * da-dk-qwerty- Danish keyboard * de-ch-qwertz- Swiss German keyboard (qwertz) * de-de-qwertz- German keyboard (qwertz) - OSK available * en-gb-qwerty- English (UK) keyboard * en-us-qwerty- English (US) keyboard - OSK available DEFAULT * es-es-qwerty- Spanish keyboard - OSK available * fr-ch-qwertz- Swiss French keyboard (qwertz) * fr-fr-azerty- French keyboard (azerty) - OSK available * it-it-qwerty- Italian keyboard - OSK available * ja-jp-qwerty- Japanese keyboard * pt-br-qwerty- Portuguese Brazilian keyboard * sv-se-qwerty- Swedish keyboard * tr-tr-qwerty- Turkish-Q keyboard

    If you ever lose your password you can always reset it by execing into the container as root:

    docker exec -it webtop passwd abc
     

    By default we perform all logic for the abc user and we reccomend using that user only in the container, but new users can be added as long as there is a startwm.sh executable script in their home directory. All of these containers are configured with passwordless sudo, we make no efforts to secure or harden these containers and we do not reccomend ever publishing their ports to the public Internet.

    Hardware Acceleration (Ubuntu Container Only)

    Many desktop application will need access to a GPU to function properly and even some Desktop Environments have compisitor effects that will not function without a GPU. This is not a hard requirement and all base images will function without a video device mounted into the container.

    Intel/ATI/AMD

    To leverage hardware acceleration you will need to mount /dev/dri video device inside of the conainer.

    --device=/dev/dri:/dev/dri
     

    We will automatically ensure the abc user inside of the container has the proper permissions to access this device.

    Nvidia

    Hardware acceleration users for Nvidia will need to install the container runtime provided by Nvidia on their host, instructions can be found here: https://github.com/NVIDIA/nvidia-docker

    We automatically add the necessary environment variable that will utilise all the features available on a GPU on the host. Once nvidia-docker is installed on your host you will need to re/create the docker container with the nvidia container runtime --runtime=nvidia and add an environment variable -e NVIDIA_VISIBLE_DEVICES=all (can also be set to a specific gpu's UUID, this can be discovered by running nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv ). NVIDIA automatically mounts the GPU and drivers from your host into the container.

    Arm Devices

    Best effort is made to install tools to allow mounting in /dev/dri on Arm devices. In most cases if /dev/dri exists on the host it should just work. If running a Raspberry Pi 4 be sure to enable dtoverlay=vc4-fkms-v3d in your usercfg.txt.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
    @@ -43,4 +43,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Web Desktop GUI

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    SUBFOLDER=/ Specify a subfolder to use with reverse proxies, IE /subfolder/
    KEYBOARD=en-us-qwerty See the keyboard layouts section for more information and options.
    TITLE=Webtop String which will be used as page/tab title in the web browser.

    Volume Mappings (-v)

    Volume Function
    /config abc users home directory
    /var/run/docker.sock Docker Socket on the system, if you want to use Docker in the container

    Device Mappings (--device)

    Parameter Function
    /dev/dri Add this for GL support (Linux hosts only)

    Miscellaneous Options

    Parameter Function
    --shm-size= We set this to 1 gig to prevent modern web browsers from crashing
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function on older hosts as syscalls are unknown to Docker.

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it webtop /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f webtop
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' webtop
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/webtop:latest

    Versions

    • 21.10.22: - Rebase xfce to Alpine 3.16, migrate to s6v3.
    • 12.03.22: - Add documentation for mounting in a GPU.
    • 05.02.22: - Rebase KDE Ubuntu to Jammy, add new documentation for updated gclient, stop recommending priv mode.
    • 21.09.21: - Add Fedora and Arch images, show seccomp settings in readme.
    • 26.09.21: - Rebase to Alpine versions to 3.14.
    • 20.04.21: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it webtop /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f webtop
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' webtop
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/webtop:latest

    Versions

    • 21.10.22: - Rebase xfce to Alpine 3.16, migrate to s6v3.
    • 12.03.22: - Add documentation for mounting in a GPU.
    • 05.02.22: - Rebase KDE Ubuntu to Jammy, add new documentation for updated gclient, stop recommending priv mode.
    • 21.09.21: - Add Fedora and Arch images, show seccomp settings in readme.
    • 26.09.21: - Rebase to Alpine versions to 3.14.
    • 20.04.21: - Initial release.
    \ No newline at end of file diff --git a/images/docker-wikijs/index.html b/images/docker-wikijs/index.html index ba2e9b203d..ec2003009e 100644 --- a/images/docker-wikijs/index.html +++ b/images/docker-wikijs/index.html @@ -1,4 +1,4 @@ - wikijs - LinuxServer.io

    linuxserver/wikijs

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Wikijs A modern, lightweight and powerful wiki app built on NodeJS.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/wikijs:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + wikijs - LinuxServer.io       

    linuxserver/wikijs

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Wikijs A modern, lightweight and powerful wiki app built on NodeJS.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/wikijs:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       wikijs:
    @@ -27,4 +27,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 Port for Wiki.js's web interface.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where Wiki.js config is stored.
    /data Where Wiki.js data is stored.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it wikijs /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f wikijs
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' wikijs
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/wikijs:latest

    Versions

    • 10.10.22: - Rebasing to alpine 3.16, migrate to s6v3.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 28.04.20: - Added python dependency for some NPM modules as well as git for storage module
    • 14.12.19: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it wikijs /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f wikijs
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' wikijs
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/wikijs:latest

    Versions

    • 10.10.22: - Rebasing to alpine 3.16, migrate to s6v3.
    • 23.01.21: - Rebasing to alpine 3.13.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 28.04.20: - Added python dependency for some NPM modules as well as git for storage module
    • 14.12.19: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-wireguard/index.html b/images/docker-wireguard/index.html index f42359d6d4..b2bed62297 100644 --- a/images/docker-wireguard/index.html +++ b/images/docker-wireguard/index.html @@ -1,4 +1,4 @@ - wireguard - LinuxServer.io

    linuxserver/wireguard

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. It is currently under heavy development, but already it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/wireguard:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases with support for compiling Wireguard modules
    alpine Stable releases based on Alpine without support for compiling Wireguard modules

    Application Setup

    During container start, it will first check if the wireguard module is already installed and loaded. Kernels newer than 5.6 generally have the wireguard module built-in (along with some older custom kernels). However, the module may not be enabled. Make sure it is enabled prior to starting the container.

    If the kernel is not built-in, or installed on host, the container will check if the kernel headers are present (in /usr/src) and if not, it will attempt to download the necessary kernel headers from the ubuntu xenial/bionic, debian/raspbian buster repos; then will attempt to compile and install the kernel module. If the kernel headers are not found in either usr/src or in the repos mentioned, container will sleep indefinitely as wireguard cannot be installed.

    If you're on a debian/ubuntu based host with a custom or downstream distro provided kernel (ie. Pop!_OS), the container won't be able to install the kernel headers from the regular ubuntu and debian repos. In those cases, you can try installing the headers on the host via sudo apt install linux-headers-$(uname -r) (if distro version) and then add a volume mapping for /usr/src:/usr/src, or if custom built, map the location of the existing headers to allow the container to use host installed headers to build the kernel module (tested successful on Pop!_OS, ymmv).

    With regards to arm32/64 devices, Raspberry Pi 2-4 running the official ubuntu images or Raspbian Buster are supported out of the box. For all other devices and OSes, you can try installing the kernel headers on the host, and mapping /usr/src:/usr/src and it may just work (no guarantees).

    This can be run as a server or a client, based on the parameters used.

    Server Mode

    If the environment variable PEERS is set to a number or a list of strings separated by comma, the container will run in server mode and the necessary server and peer/client confs will be generated. The peer/client config qr codes will be output in the docker log. They will also be saved in text and png format under /config/peerX in case PEERS is a variable and an integer or /config/peer_X in case a list of names was provided instead of an integer.

    Variables SERVERURL, SERVERPORT, INTERNAL_SUBNET and PEERDNS are optional variables used for server mode. Any changes to these environment variables will trigger regeneration of server and peer confs. Peer/client confs will be recreated with existing private/public keys. Delete the peer folders for the keys to be recreated along with the confs.

    To add more peers/clients later on, you increment the PEERS environment variable or add more elements to the list and recreate the container.

    To display the QR codes of active peers again, you can use the following command and list the peer numbers as arguments: docker exec -it wireguard /app/show-peer 1 4 5 or docker exec -it wireguard /app/show-peer myPC myPhone myTablet (Keep in mind that the QR codes are also stored as PNGs in the config folder).

    The templates used for server and peer confs are saved under /config/templates. Advanced users can modify these templates and force conf generation by deleting /config/wg0.conf and restarting the container.

    Client Mode

    Do not set the PEERS environment variable. Drop your client conf into the config folder as /config/wg0.conf and start the container.

    If you get IPv6 related errors in the log and connection cannot be established, edit the AllowedIPs line in your peer/client wg0.conf to include only 0.0.0.0/0 and not ::/0; and restart the container.

    Road warriors, roaming and returning home

    If you plan to use Wireguard both remotely and locally, say on your mobile phone, you will need to consider routing. Most firewalls will not route ports forwarded on your WAN interface correctly to the LAN out of the box. This means that when you return home, even though you can see the Wireguard server, the return packets will probably get lost.

    This is not a Wireguard specific issue and the two generally accepted solutions are NAT reflection (setting your edge router/firewall up in such a way as it translates internal packets correctly) or split horizon DNS (setting your internal DNS to return the private rather than public IP when connecting locally).

    Both of these approaches have positives and negatives however their setup is out of scope for this document as everyone's network layout and equipment will be different.

    Maintaining local access to attached services

    ** Note: This is not a supported configuration by Linuxserver.io - use at your own risk.

    When routing via Wireguard from another container using the service option in docker, you might lose access to the containers webUI locally. To avoid this, exclude the docker subnet from being routed via Wireguard by modifying your wg0.conf like so (modifying the subnets as you require):

    [Interface] PrivateKey = <private key> Address = 9.8.7.6/32 DNS = 8.8.8.8 PostUp = DROUTE=$(ip route | grep default | awk '{print $3}'); HOMENET=192.168.0.0/16; HOMENET2=10.0.0.0/8; HOMENET3=172.16.0.0/12; ip route add $HOMENET3 via $DROUTE;ip route add $HOMENET2 via $DROUTE; ip route add $HOMENET via $DROUTE;iptables -I OUTPUT -d $HOMENET -j ACCEPT;iptables -A OUTPUT -d $HOMENET2 -j ACCEPT; iptables -A OUTPUT -d $HOMENET3 -j ACCEPT; iptables -A OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT PreDown = HOMENET=192.168.0.0/16; HOMENET2=10.0.0.0/8; HOMENET3=172.16.0.0/12; ip route del $HOMENET3 via $DROUTE;ip route del $HOMENET2 via $DROUTE; ip route del $HOMENET via $DROUTE; iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT; iptables -D OUTPUT -d $HOMENET -j ACCEPT; iptables -D OUTPUT -d $HOMENET2 -j ACCEPT; iptables -D OUTPUT -d $HOMENET3 -j ACCEPT

    Site-to-site VPN

    ** Note: This is not a supported configuration by Linuxserver.io - use at your own risk.

    Site-to-site VPN in server mode requires customizing the AllowedIPs statement for a specific peer in wg0.conf. Since wg0.conf is autogenerated when server vars are changed, it is not recommended to edit it manually.

    In order to customize the AllowedIPs statement for a specific peer in wg0.conf, you can set an env var SERVER_ALLOWEDIPS_PEER_<peer name or number> to the additional subnets you'd like to add, comma separated and excluding the peer IP (ie. "192.168.1.0/24,192.168.2.0/24"). Replace <peer name or number> with either the name or number of a peer (whichever is used in the PEERS var).

    For instance SERVER_ALLOWEDIPS_PEER_laptop="192.168.1.0/24,192.168.2.0/24" will result in the wg0.conf entry AllowedIPs = 10.13.13.2,192.168.1.0/24,192.168.2.0/24 for the peer named laptop.

    Keep in mind that this var will only be considered when the confs are regenerated. Adding this var for an existing peer won't force a regeneration. You can delete wg0.conf and restart the container to force regeneration if necessary.

    Don't forget to set the necessary POSTUP and POSTDOWN rules in your client's peer conf for lan access.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + wireguard - LinuxServer.io       

    linuxserver/wireguard

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build

    WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. It is currently under heavy development, but already it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/wireguard:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Version Tags

    This image provides various versions that are available via tags. Please read the descriptions carefully and exercise caution when using unstable or development tags.

    Tag Available Description
    latest Stable releases with support for compiling Wireguard modules
    alpine Stable releases based on Alpine without support for compiling Wireguard modules

    Application Setup

    During container start, it will first check if the wireguard module is already installed and loaded. Kernels newer than 5.6 generally have the wireguard module built-in (along with some older custom kernels). However, the module may not be enabled. Make sure it is enabled prior to starting the container.

    If the kernel is not built-in, or installed on host, the container will check if the kernel headers are present (in /usr/src) and if not, it will attempt to download the necessary kernel headers from the ubuntu xenial/bionic, debian/raspbian buster repos; then will attempt to compile and install the kernel module. If the kernel headers are not found in either usr/src or in the repos mentioned, container will sleep indefinitely as wireguard cannot be installed.

    If you're on a debian/ubuntu based host with a custom or downstream distro provided kernel (ie. Pop!_OS), the container won't be able to install the kernel headers from the regular ubuntu and debian repos. In those cases, you can try installing the headers on the host via sudo apt install linux-headers-$(uname -r) (if distro version) and then add a volume mapping for /usr/src:/usr/src, or if custom built, map the location of the existing headers to allow the container to use host installed headers to build the kernel module (tested successful on Pop!_OS, ymmv).

    With regards to arm32/64 devices, Raspberry Pi 2-4 running the official ubuntu images or Raspbian Buster are supported out of the box. For all other devices and OSes, you can try installing the kernel headers on the host, and mapping /usr/src:/usr/src and it may just work (no guarantees).

    This can be run as a server or a client, based on the parameters used.

    Server Mode

    If the environment variable PEERS is set to a number or a list of strings separated by comma, the container will run in server mode and the necessary server and peer/client confs will be generated. The peer/client config qr codes will be output in the docker log. They will also be saved in text and png format under /config/peerX in case PEERS is a variable and an integer or /config/peer_X in case a list of names was provided instead of an integer.

    Variables SERVERURL, SERVERPORT, INTERNAL_SUBNET and PEERDNS are optional variables used for server mode. Any changes to these environment variables will trigger regeneration of server and peer confs. Peer/client confs will be recreated with existing private/public keys. Delete the peer folders for the keys to be recreated along with the confs.

    To add more peers/clients later on, you increment the PEERS environment variable or add more elements to the list and recreate the container.

    To display the QR codes of active peers again, you can use the following command and list the peer numbers as arguments: docker exec -it wireguard /app/show-peer 1 4 5 or docker exec -it wireguard /app/show-peer myPC myPhone myTablet (Keep in mind that the QR codes are also stored as PNGs in the config folder).

    The templates used for server and peer confs are saved under /config/templates. Advanced users can modify these templates and force conf generation by deleting /config/wg0.conf and restarting the container.

    Client Mode

    Do not set the PEERS environment variable. Drop your client conf into the config folder as /config/wg0.conf and start the container.

    If you get IPv6 related errors in the log and connection cannot be established, edit the AllowedIPs line in your peer/client wg0.conf to include only 0.0.0.0/0 and not ::/0; and restart the container.

    Road warriors, roaming and returning home

    If you plan to use Wireguard both remotely and locally, say on your mobile phone, you will need to consider routing. Most firewalls will not route ports forwarded on your WAN interface correctly to the LAN out of the box. This means that when you return home, even though you can see the Wireguard server, the return packets will probably get lost.

    This is not a Wireguard specific issue and the two generally accepted solutions are NAT reflection (setting your edge router/firewall up in such a way as it translates internal packets correctly) or split horizon DNS (setting your internal DNS to return the private rather than public IP when connecting locally).

    Both of these approaches have positives and negatives however their setup is out of scope for this document as everyone's network layout and equipment will be different.

    Maintaining local access to attached services

    ** Note: This is not a supported configuration by Linuxserver.io - use at your own risk.

    When routing via Wireguard from another container using the service option in docker, you might lose access to the containers webUI locally. To avoid this, exclude the docker subnet from being routed via Wireguard by modifying your wg0.conf like so (modifying the subnets as you require):

    [Interface] PrivateKey = <private key> Address = 9.8.7.6/32 DNS = 8.8.8.8 PostUp = DROUTE=$(ip route | grep default | awk '{print $3}'); HOMENET=192.168.0.0/16; HOMENET2=10.0.0.0/8; HOMENET3=172.16.0.0/12; ip route add $HOMENET3 via $DROUTE;ip route add $HOMENET2 via $DROUTE; ip route add $HOMENET via $DROUTE;iptables -I OUTPUT -d $HOMENET -j ACCEPT;iptables -A OUTPUT -d $HOMENET2 -j ACCEPT; iptables -A OUTPUT -d $HOMENET3 -j ACCEPT; iptables -A OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT PreDown = HOMENET=192.168.0.0/16; HOMENET2=10.0.0.0/8; HOMENET3=172.16.0.0/12; ip route del $HOMENET3 via $DROUTE;ip route del $HOMENET2 via $DROUTE; ip route del $HOMENET via $DROUTE; iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT; iptables -D OUTPUT -d $HOMENET -j ACCEPT; iptables -D OUTPUT -d $HOMENET2 -j ACCEPT; iptables -D OUTPUT -d $HOMENET3 -j ACCEPT

    Site-to-site VPN

    ** Note: This is not a supported configuration by Linuxserver.io - use at your own risk.

    Site-to-site VPN in server mode requires customizing the AllowedIPs statement for a specific peer in wg0.conf. Since wg0.conf is autogenerated when server vars are changed, it is not recommended to edit it manually.

    In order to customize the AllowedIPs statement for a specific peer in wg0.conf, you can set an env var SERVER_ALLOWEDIPS_PEER_<peer name or number> to the additional subnets you'd like to add, comma separated and excluding the peer IP (ie. "192.168.1.0/24,192.168.2.0/24"). Replace <peer name or number> with either the name or number of a peer (whichever is used in the PEERS var).

    For instance SERVER_ALLOWEDIPS_PEER_laptop="192.168.1.0/24,192.168.2.0/24" will result in the wg0.conf entry AllowedIPs = 10.13.13.2,192.168.1.0/24,192.168.2.0/24 for the peer named laptop.

    Keep in mind that this var will only be considered when the confs are regenerated. Adding this var for an existing peer won't force a regeneration. You can delete wg0.conf and restart the container to force regeneration if necessary.

    Don't forget to set the necessary POSTUP and POSTDOWN rules in your client's peer conf for lan access.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       wireguard:
    @@ -49,4 +49,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    51820/udp wireguard port

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London
    SERVERURL=wireguard.domain.com External IP or domain name for docker host. Used in server mode. If set to auto, the container will try to determine and set the external IP automatically
    SERVERPORT=51820 External port for docker host. Used in server mode.
    PEERS=1 Number of peers to create confs for. Required for server mode. Can also be a list of names: myPC,myPhone,myTablet (alphanumeric only)
    PEERDNS=auto DNS server set in peer/client configs (can be set as 8.8.8.8). Used in server mode. Defaults to auto, which uses wireguard docker host's DNS via included CoreDNS forward.
    INTERNAL_SUBNET=10.13.13.0 Internal subnet for the wireguard and server and peers (only change if it clashes). Used in server mode.
    ALLOWEDIPS=0.0.0.0/0 The IPs/Ranges that the peers will be able to reach using the VPN connection. If not specified the default value is: '0.0.0.0/0, ::0/0' This will cause ALL traffic to route through the VPN, if you want split tunneling, set this to only the IPs you would like to use the tunnel AND the ip of the server's WG ip, such as 10.13.13.1.
    LOG_CONFS=true Generated QR codes will be displayed in the docker log. Set to false to skip log output.

    Volume Mappings (-v)

    Volume Function
    /config Contains all relevant configuration files.
    /lib/modules Maps host's modules folder.

    Miscellaneous Options

    Parameter Function
    --sysctl= Required for client mode.

    Portainer notice

    {% hint style="warning" %} This image utilises cap_add or sysctl to work properly. This is not implemented properly in some versions of Portainer, thus this image may not work if deployed through Portainer. {% endhint %}

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it wireguard /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f wireguard
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' wireguard
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/wireguard:latest

    Versions

    • 26.10.22: - Better handle unsupported peer names. Improve logging.
    • 12.10.22: - Add Alpine branch. Optimize wg and coredns services.
    • 09.10.22: - Switch back to iptables-legacy due to issues on some hosts.
    • 04.10.22: - Rebase to Jammy. Upgrade to s6v3.
    • 16.05.22: - Improve NAT handling in server mode when multiple ethernet devices are present.
    • 23.04.22: - Add pre-shared key support. Automatically added to all new peer confs generated, existing ones are left without to ensure no breaking changes.
    • 10.04.22: - Rebase to Ubuntu Focal. Add LOG_CONFS env var. Remove deprecated add-peer command.
    • 28.10.21: - Add site-to-site vpn support.
    • 11.02.21: - Fix bug related to changing internal subnet and named peer confs not updating.
    • 06.10.20: - Disable CoreDNS in client mode, or if port 53 is already in use in server mode.
    • 04.10.20: - Allow to specify a list of names as PEERS and add ALLOWEDIPS environment variable. Also, add peer name/id to each one of the peer sections in wg0.conf. Important: Existing users need to delete /config/templates/peer.conf and restart
    • 27.09.20: - Cleaning service binding example to have accurate PreDown script.
    • 06.08.20: - Replace resolvconf with openresolv due to dns issues when a client based on this image is connected to a server also based on this image. Add IPv6 info to readme. Display kernel version in logs.
    • 29.07.20: - Update Coredns config to detect dns loops (existing users need to delete /config/coredns/Corefile and restart).
    • 27.07.20: - Update Coredns config to prevent issues with non-user-defined bridge networks (existing users need to delete /config/coredns/Corefile and restart).
    • 05.07.20: - Add Debian updates and security repos for headers.
    • 25.06.20: - Simplify module tests, prevent iptables issues from resulting in false negatives.
    • 19.06.20: - Add support for Ubuntu Focal (20.04) kernels. Compile wireguard tools and kernel module instead of using the ubuntu packages. Make module install optional. Improve verbosity in logs.
    • 29.05.20: - Add support for 64bit raspbian.
    • 28.04.20: - Add Buster/Stretch backports repos for Debian. Tested with OMV 5 and OMV 4 (on kernel 4.19.0-0.bpo.8-amd64).
    • 20.04.20: - Fix typo in client mode conf existence check.
    • 13.04.20: - Fix bug that forced conf recreation on every start.
    • 08.04.20: - Add arm32/64 builds and enable multi-arch (rpi4 with ubuntu and raspbian buster tested). Add CoreDNS for PEERDNS=auto setting. Update the add-peer/show-peer scripts to utilize the templates and the INTERNAL_SUBNET var (previously missed, oops).
    • 05.04.20: - Add INTERNAL_SUBNET variable to prevent subnet clashes. Add templates for server and peer confs.
    • 01.04.20: - Add show-peer script and include info on host installed headers.
    • 31.03.20: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it wireguard /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f wireguard
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' wireguard
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/wireguard:latest

    Versions

    • 26.10.22: - Better handle unsupported peer names. Improve logging.
    • 12.10.22: - Add Alpine branch. Optimize wg and coredns services.
    • 09.10.22: - Switch back to iptables-legacy due to issues on some hosts.
    • 04.10.22: - Rebase to Jammy. Upgrade to s6v3.
    • 16.05.22: - Improve NAT handling in server mode when multiple ethernet devices are present.
    • 23.04.22: - Add pre-shared key support. Automatically added to all new peer confs generated, existing ones are left without to ensure no breaking changes.
    • 10.04.22: - Rebase to Ubuntu Focal. Add LOG_CONFS env var. Remove deprecated add-peer command.
    • 28.10.21: - Add site-to-site vpn support.
    • 11.02.21: - Fix bug related to changing internal subnet and named peer confs not updating.
    • 06.10.20: - Disable CoreDNS in client mode, or if port 53 is already in use in server mode.
    • 04.10.20: - Allow to specify a list of names as PEERS and add ALLOWEDIPS environment variable. Also, add peer name/id to each one of the peer sections in wg0.conf. Important: Existing users need to delete /config/templates/peer.conf and restart
    • 27.09.20: - Cleaning service binding example to have accurate PreDown script.
    • 06.08.20: - Replace resolvconf with openresolv due to dns issues when a client based on this image is connected to a server also based on this image. Add IPv6 info to readme. Display kernel version in logs.
    • 29.07.20: - Update Coredns config to detect dns loops (existing users need to delete /config/coredns/Corefile and restart).
    • 27.07.20: - Update Coredns config to prevent issues with non-user-defined bridge networks (existing users need to delete /config/coredns/Corefile and restart).
    • 05.07.20: - Add Debian updates and security repos for headers.
    • 25.06.20: - Simplify module tests, prevent iptables issues from resulting in false negatives.
    • 19.06.20: - Add support for Ubuntu Focal (20.04) kernels. Compile wireguard tools and kernel module instead of using the ubuntu packages. Make module install optional. Improve verbosity in logs.
    • 29.05.20: - Add support for 64bit raspbian.
    • 28.04.20: - Add Buster/Stretch backports repos for Debian. Tested with OMV 5 and OMV 4 (on kernel 4.19.0-0.bpo.8-amd64).
    • 20.04.20: - Fix typo in client mode conf existence check.
    • 13.04.20: - Fix bug that forced conf recreation on every start.
    • 08.04.20: - Add arm32/64 builds and enable multi-arch (rpi4 with ubuntu and raspbian buster tested). Add CoreDNS for PEERDNS=auto setting. Update the add-peer/show-peer scripts to utilize the templates and the INTERNAL_SUBNET var (previously missed, oops).
    • 05.04.20: - Add INTERNAL_SUBNET variable to prevent subnet clashes. Add templates for server and peer confs.
    • 01.04.20: - Add show-peer script and include info on host installed headers.
    • 31.03.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-wireshark/index.html b/images/docker-wireshark/index.html index 73f4278574..9b7c656801 100644 --- a/images/docker-wireshark/index.html +++ b/images/docker-wireshark/index.html @@ -1,4 +1,4 @@ - wireshark - LinuxServer.io

    linuxserver/wireshark

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Wireshark is the world’s foremost and widely-used network protocol analyzer. It lets you see what’s happening on your network at a microscopic level and is the de facto (and often de jure) standard across many commercial and non-profit enterprises, government agencies, and educational institutions. Wireshark development thrives thanks to the volunteer contributions of networking experts around the globe and is the continuation of a project started by Gerald Combs in 1998.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/wireshark:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    In order to dump from an interface you will need to pass NET_ADMIN at a minimum, optionally you can use host networking to capture from your host level device or specify a Docker network you want to capture from.

    If you do not specificy host networking you will need to map port 3000 with -p 3000:3000.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + wireshark - LinuxServer.io       

    linuxserver/wireshark

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Wireshark is the world’s foremost and widely-used network protocol analyzer. It lets you see what’s happening on your network at a microscopic level and is the de facto (and often de jure) standard across many commercial and non-profit enterprises, government agencies, and educational institutions. Wireshark development thrives thanks to the volunteer contributions of networking experts around the globe and is the continuation of a project started by Gerald Combs in 1998.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/wireshark:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    The application can be accessed at:

    • http://yourhost:3000/

    By default the user/pass is abc/abc, if you change your password or want to login manually to the GUI session for any reason use the following link:

    • http://yourhost:3000/?login=true

    In order to dump from an interface you will need to pass NET_ADMIN at a minimum, optionally you can use host networking to capture from your host level device or specify a Docker network you want to capture from.

    If you do not specificy host networking you will need to map port 3000 with -p 3000:3000.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       wireshark:
    @@ -33,4 +33,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    3000 WireShark desktop gui, only use this if you are not using host mode and sniffing Docker network traffic.

    Networking (--net)

    Parameter Function
    --net=host Use Host Networking

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Users home directory in the container, stores program settings and potentially dump files.

    Miscellaneous Options

    Parameter Function
    --security-opt seccomp=unconfined For Docker Engine only, many modern gui apps need this to function on older hosts as syscalls are unknown to Docker.

    Portainer notice

    {% hint style="warning" %} This image utilises cap_add or sysctl to work properly. This is not implemented properly in some versions of Portainer, thus this image may not work if deployed through Portainer. {% endhint %}

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it wireshark /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f wireshark
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' wireshark
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/wireshark:latest

    Versions

    • 23.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 14.02.22: - Rebase to Alpine.
    • 31.03.20: - Initial release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it wireshark /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f wireshark
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' wireshark
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/wireshark:latest

    Versions

    • 23.10.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 14.02.22: - Rebase to Alpine.
    • 31.03.20: - Initial release.
    \ No newline at end of file diff --git a/images/docker-xbackbone/index.html b/images/docker-xbackbone/index.html index ece14bf76a..b3fa2453e1 100644 --- a/images/docker-xbackbone/index.html +++ b/images/docker-xbackbone/index.html @@ -1,4 +1,4 @@ - xbackbone - LinuxServer.io

    linuxserver/xbackbone

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Xbackbone is a simple, self-hosted, lightweight PHP file manager that support the instant sharing tool ShareX and *NIX systems. It supports uploading and displaying images, GIF, video, code, formatted text, and file downloading and uploading. Also have a web UI with multi user management, past uploads history and search support.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/xbackbone:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the WebUI at \:80/443. Follow the installation wizard. For more information, check out XBackBone.

    If you want to change the PHP max upload size you can override the php.ini file by adding options in /config/php/php-local.ini

    Example:

      upload_max_filesize = 25M
    + xbackbone - LinuxServer.io       

    linuxserver/xbackbone

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Xbackbone is a simple, self-hosted, lightweight PHP file manager that support the instant sharing tool ShareX and *NIX systems. It supports uploading and displaying images, GIF, video, code, formatted text, and file downloading and uploading. Also have a web UI with multi user management, past uploads history and search support.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/xbackbone:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    Access the WebUI at \:80/443. Follow the installation wizard. For more information, check out XBackBone.

    If you want to change the PHP max upload size you can override the php.ini file by adding options in /config/php/php-local.ini

    Example:

      upload_max_filesize = 25M
       post_max_size = 25M
     

    For reverse proxying, remember to change the base_url in /config/www/xbackbone/config.php to your domain if you initially set up the application with a local url. E.g. 'base_url' => 'https://images.yourdomain.com',

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
    @@ -29,4 +29,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    80 http gui
    443 https gui

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/Oslo Timezone (i.e., Europe/Oslo)

    Volume Mappings (-v)

    Volume Function
    /config config directory volume mapping

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it xbackbone /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f xbackbone
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' xbackbone
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/xbackbone:latest

    Versions

    • 04.11.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 01.11.22: - Move application install to /app/www/public, add migration notices for existing users. Container updates should now update the application correctly
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 02.08.22: - Added note about updating.
    • 06.06.21: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it xbackbone /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f xbackbone
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' xbackbone
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/xbackbone:latest

    Versions

    • 04.11.22: - Rebase to Alpine 3.16, migrate to s6v3.
    • 01.11.22: - Move application install to /app/www/public, add migration notices for existing users. Container updates should now update the application correctly
    • 20.08.22: - Rebasing to alpine 3.15 with php8. Restructure nginx configs (see changes announcement).
    • 02.08.22: - Added note about updating.
    • 06.06.21: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-yq/index.html b/images/docker-yq/index.html index b6f880d317..391d77f052 100644 --- a/images/docker-yq/index.html +++ b/images/docker-yq/index.html @@ -1,4 +1,4 @@ - yq - LinuxServer.io

    linuxserver.io

    Blog Discord Discourse Fleet GitHub Open Collective

    The LinuxServer.io team brings you another container release featuring:

    • regular and timely application updates
    • easy user mappings (PGID, PUID)
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • regular security updates

    Find us at: * Blog - all the things you can do with our containers including How-To guides, opinions and much more! * Discord - realtime support / chat with the community and the team. * Discourse - post on our community forum. * Fleet - an online web interface which displays all of our maintained images. * GitHub - view the source for all of our repositories. * Open Collective - please consider helping us by either donating or contributing to our budget

    linuxserver/yq

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build

    yq: Command-line YAML/XML processor - jq wrapper for YAML and XML documents. This image includes yq, jq, and xq.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/yq should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Docker cli

    docker run --rm \
    + yq - LinuxServer.io       

    linuxserver.io

    Blog Discord Discourse Fleet GitHub Open Collective

    The LinuxServer.io team brings you another container release featuring:

    • regular and timely application updates
    • easy user mappings (PGID, PUID)
    • custom base image with s6 overlay
    • weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth
    • regular security updates

    Find us at: * Blog - all the things you can do with our containers including How-To guides, opinions and much more! * Discord - realtime support / chat with the community and the team. * Discourse - post on our community forum. * Fleet - an online web interface which displays all of our maintained images. * GitHub - view the source for all of our repositories. * Open Collective - please consider helping us by either donating or contributing to our budget

    linuxserver/yq

    GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry MicroBadger Layers Docker Pulls Docker Stars Jenkins Build

    yq: Command-line YAML/XML processor - jq wrapper for YAML and XML documents. This image includes yq, jq, and xq.

    Supported Architectures

    Our images support multiple architectures such as x86-64, arm64 and armhf. We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling linuxserver/yq should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Tag
    x86-64 amd64-latest
    arm64 arm64v8-latest
    armhf arm32v7-latest

    Usage

    Docker cli

    docker run --rm \
       -v "$PWD:$PWD" \
       -w="$PWD" \
       --entrypoint yq \
    @@ -29,4 +29,4 @@ docker build \
       --pull \
       -t linuxserver/yq:latest .
     

    The ARM variants can be built on x86_64 hardware using multiarch/qemu-user-static

    docker run --rm --privileged multiarch/qemu-user-static:register --reset
    -

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    • 19.09.22: - Rebase to 3.15.
    • 18.05.21: - Rebase to 3.13. add linuxserver wheel repo.
    • 09.10.20: - Fix run scripts evaluating $ in cases where they should not (ex: inside single quotes). Please rerun the Recommended method install/setup commands.
    • 07.10.20: - Initial Release.
    \ No newline at end of file +

    Once registered you can define the dockerfile to use with -f Dockerfile.aarch64.

    Versions

    • 19.09.22: - Rebase to 3.15.
    • 18.05.21: - Rebase to 3.13. add linuxserver wheel repo.
    • 09.10.20: - Fix run scripts evaluating $ in cases where they should not (ex: inside single quotes). Please rerun the Recommended method install/setup commands.
    • 07.10.20: - Initial Release.
    \ No newline at end of file diff --git a/images/docker-znc/index.html b/images/docker-znc/index.html index 8f754fe186..8bd9c6c581 100644 --- a/images/docker-znc/index.html +++ b/images/docker-znc/index.html @@ -1,4 +1,4 @@ - znc - LinuxServer.io

    linuxserver/znc

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Znc is an IRC network bouncer or BNC. It can detach the client from the actual IRC server, and also from selected channels. Multiple clients from different locations can connect to a single ZNC account simultaneously and therefore appear under the same nickname on IRC.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/znc:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    To log in to the application, browse to http://:6501.

    • Default User: admin
    • Default Password: admin change password ASAP.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
    + znc - LinuxServer.io       

    linuxserver/znc

    Scarf.io pulls GitHub Stars GitHub Release GitHub Package Repository GitLab Container Registry Quay.io Docker Pulls Docker Stars Jenkins Build LSIO CI

    Znc is an IRC network bouncer or BNC. It can detach the client from the actual IRC server, and also from selected channels. Multiple clients from different locations can connect to a single ZNC account simultaneously and therefore appear under the same nickname on IRC.

    Supported Architectures

    We utilise the docker manifest for multi-platform awareness. More information is available from docker here and our announcement here.

    Simply pulling lscr.io/linuxserver/znc:latest should retrieve the correct image for your arch, but you can also pull specific arch images via tags.

    The architectures supported by this image are:

    Architecture Available Tag
    x86-64 amd64-\<version tag>
    arm64 arm64v8-\<version tag>
    armhf arm32v7-\<version tag>

    Application Setup

    To log in to the application, browse to http://:6501.

    • Default User: admin
    • Default Password: admin change password ASAP.

    Usage

    To help you get started creating a container from this image you can either use docker-compose or the docker cli.

    ---
     version: "2.1"
     services:
       znc:
    @@ -25,4 +25,4 @@ services:
     

    Parameters

    Docker images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <external>:<internal> respectively. For example, -p 8080:80 would expose port 80 from inside the container to be accessible from the host's IP on port 8080 outside the container.

    Ports (-p)

    Parameter Function
    6501 Port ZNC listens on.

    Environment Variables (-e)

    Env Function
    PUID=1000 for UserID - see below for explanation
    PGID=1000 for GroupID - see below for explanation
    TZ=Europe/London Specify a timezone to use EG Europe/London.

    Volume Mappings (-v)

    Volume Function
    /config Where local ZNC data is stored.

    Miscellaneous Options

    Parameter Function

    Environment variables from files (Docker secrets)

    You can set any environment variable from a file by using a special prepend FILE__.

    As an example:

    -e FILE__PASSWORD=/run/secrets/mysecretpassword
     

    Will set the environment variable PASSWORD based on the contents of the /run/secrets/mysecretpassword file.

    Umask for running applications

    For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional -e UMASK=022 setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up here before asking for support.

    User / Group Identifiers

    When using volumes (-v flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user PUID and group PGID.

    Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

    In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

      $ id username
         uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
    -

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it znc /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f znc
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' znc
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/znc:latest

    Versions

    • 19.01.22: - Rebasing to alpine 3.15.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 02.11.19: - Add znc-palaver module.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 31.01.19: - Add pipeline logic and multi arch.
    • 30.01.19: - Add push and clientbuffer modules.
    • 17.08.18: - Rebase to alpine 3.8, use buildstage.
    • 03.01.18: - Deprecate cpu_core routine lack of scaling.
    • 07.12.17: - Rebase alpine linux 3.7.
    • 25.10.17: - Remove debug switch from run command.
    • 26.05.17: - Rebase alpine linux 3.6.
    • 06.02.17: - Rebase alpine linux 3.5.
    • 19.01.17: - Add playback module.
    • 07.01.17: - Add ca-certificates package, resolve sasl issues.
    • 07.12.16: - Use scanelf to determine runtime dependencies. Fix error with continuation.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Fix umask.
    • 11.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 20.08.16: - Rebase to alpine linux, move to main repository.
    • 11.12.15: - Initial Release.
    \ No newline at end of file +

    Docker Mods

    Docker Mods Docker Universal Mods

    We publish various Docker Mods to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.

    Support Info

    • Shell access whilst the container is running:
    • docker exec -it znc /bin/bash
    • To monitor the logs of the container in realtime:
    • docker logs -f znc
    • Container version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' znc
    • Image version number
    • docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/znc:latest

    Versions

    • 19.01.22: - Rebasing to alpine 3.15.
    • 01.06.20: - Rebasing to alpine 3.12.
    • 19.12.19: - Rebasing to alpine 3.11.
    • 02.11.19: - Add znc-palaver module.
    • 28.06.19: - Rebasing to alpine 3.10.
    • 23.03.19: - Switching to new Base images, shift to arm32v7 tag.
    • 22.02.19: - Rebasing to alpine 3.9.
    • 31.01.19: - Add pipeline logic and multi arch.
    • 30.01.19: - Add push and clientbuffer modules.
    • 17.08.18: - Rebase to alpine 3.8, use buildstage.
    • 03.01.18: - Deprecate cpu_core routine lack of scaling.
    • 07.12.17: - Rebase alpine linux 3.7.
    • 25.10.17: - Remove debug switch from run command.
    • 26.05.17: - Rebase alpine linux 3.6.
    • 06.02.17: - Rebase alpine linux 3.5.
    • 19.01.17: - Add playback module.
    • 07.01.17: - Add ca-certificates package, resolve sasl issues.
    • 07.12.16: - Use scanelf to determine runtime dependencies. Fix error with continuation.
    • 14.10.16: - Add version layer information.
    • 30.09.16: - Fix umask.
    • 11.09.16: - Add layer badges to README.
    • 28.08.16: - Add badges to README.
    • 20.08.16: - Rebase to alpine linux, move to main repository.
    • 11.12.15: - Initial Release.
    \ No newline at end of file diff --git a/images/index.html b/images/index.html index b9dd59b1c3..fd5deb959a 100644 --- a/images/index.html +++ b/images/index.html @@ -1 +1 @@ - Images - LinuxServer.io

    Images

    Each of our images requires their own specific configuration before you can begin making use of them. If you're new to our images, please take the time to read through our documentation.

    \ No newline at end of file + Images - LinuxServer.io

    Images

    Each of our images requires their own specific configuration before you can begin making use of them. If you're new to our images, please take the time to read through our documentation.

    \ No newline at end of file diff --git a/index.html b/index.html index ff5472f5e2..1ec865bd0f 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ - LinuxServer.io

    Introduction

    Welcome to the home of the LinuxServer.io documentation! It is our goal to ensure that all of our images are properly documented with all of the relevant information in order to help our users get started. As well as individual set up guides for each of our images, there is also general information pertaining to the running of Docker containers, and best practices.

    Want to get hold of the team?

    The team resides primarily in our Discord server. We also have a forum if chat isn't your thing.

    Where Link
    Discord https://discord.gg/YWrKVTn
    Forum https://discourse.linuxserver.io

    For those interested in our CI environment via Jenkins: https://ci.linuxserver.io/

    \ No newline at end of file + LinuxServer.io

    Introduction

    Welcome to the home of the LinuxServer.io documentation! It is our goal to ensure that all of our images are properly documented with all of the relevant information in order to help our users get started. As well as individual set up guides for each of our images, there is also general information pertaining to the running of Docker containers, and best practices.

    Want to get hold of the team?

    The team resides primarily in our Discord server. We also have a forum if chat isn't your thing.

    Where Link
    Discord https://discord.gg/YWrKVTn
    Forum https://discourse.linuxserver.io

    For those interested in our CI environment via Jenkins: https://ci.linuxserver.io/

    \ No newline at end of file diff --git a/misc/finances/index.html b/misc/finances/index.html index 29e8714200..db69768e04 100644 --- a/misc/finances/index.html +++ b/misc/finances/index.html @@ -1 +1 @@ - Finances - LinuxServer.io

    Finances

    • v0.1 Beta (Work in progress)
    • Created 2021-08-18
    • Updated 2021-08-18

    Charter

    We will at all times attempt to keep a surplus of $6,000 in the bank account, or an amount which covers 3 years of expenses, whichever is higher. All other money will be disbursed by agreement of a general consensus of linuxserver.io staff members.

    Annual Expenses

    • DigitalOcean yearly costs (currently paid for) $1200
    • AWS ~$200
    • Contabo hosting $287.76
    • Email Hosting $20
    • Various domains ~$150
    • Docker Pro Plan $60
    • Various licenses ~$150

    Votes

    In order for money to be approved for a project, the requesting member must go through every effort to bring to vote a fully formed idea that is ready to be actioned. This means that all the legwork is done before bringing an idea to vote, or at least as much as is reasonably possible. A vote will last for 3 days in order to give all team members the opportunity to participate without unnecessarily causing delays. A generasl consensus will need to be reached in order for it to proceed.

    Acceptable uses of money

    • Hardware/Software needed to help the group reach a specific goal
    • Stationary + Related items for possible Conventions
    • Convention Fees (Both Attendence and Travel)
    • Hosting services (Included domain purchases)
    • Good will gestures (Example: For users outside the group that have provided help when asked)
    • Food/Drink for LinuxServer.io focused sprints.
    • Donations to upstream projects
    \ No newline at end of file + Finances - LinuxServer.io

    Finances

    • v0.1 Beta (Work in progress)
    • Created 2021-08-18
    • Updated 2021-08-18

    Charter

    We will at all times attempt to keep a surplus of $6,000 in the bank account, or an amount which covers 3 years of expenses, whichever is higher. All other money will be disbursed by agreement of a general consensus of linuxserver.io staff members.

    Annual Expenses

    • DigitalOcean yearly costs (currently paid for) $1200
    • AWS ~$200
    • Contabo hosting $287.76
    • Email Hosting $20
    • Various domains ~$150
    • Docker Pro Plan $60
    • Various licenses ~$150

    Votes

    In order for money to be approved for a project, the requesting member must go through every effort to bring to vote a fully formed idea that is ready to be actioned. This means that all the legwork is done before bringing an idea to vote, or at least as much as is reasonably possible. A vote will last for 3 days in order to give all team members the opportunity to participate without unnecessarily causing delays. A generasl consensus will need to be reached in order for it to proceed.

    Acceptable uses of money

    • Hardware/Software needed to help the group reach a specific goal
    • Stationary + Related items for possible Conventions
    • Convention Fees (Both Attendence and Travel)
    • Hosting services (Included domain purchases)
    • Good will gestures (Example: For users outside the group that have provided help when asked)
    • Food/Drink for LinuxServer.io focused sprints.
    • Donations to upstream projects
    \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index f2aa392c19..3b26032bcb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ mkdocs-awesome-pages-plugin==2.8.0 -mkdocs-material==8.5.10 +mkdocs-material==8.5.11 mkdocs-minify-plugin==0.6.1 mkdocs-redirects==1.2.0 diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 642793eb0dfd54842308d9a373f9a2492351b26e..dbfbaedfe8d0447dc184a3a8736af6c6d3ba89b1 100644 GIT binary patch delta 15 WcmeC->EU6M@8;krNZ826#s&Z$(gTD5 delta 15 WcmeC->EU6M@8;m>jNiz{#s&Z%V*{K3