]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Christophe Carpentier site de Fans de HK
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Thu, 5 Aug 2021 23:38:02 +0000 (01:38 +0200)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Sun, 9 Apr 2023 15:14:21 +0000 (17:14 +0200)
12 files changed:
modules/private/default.nix
modules/private/environment.nix
modules/private/websites/christophe_carpentier/agora-project.nix [new file with mode: 0644]
modules/private/websites/christophe_carpentier/agorakit.nix [new file with mode: 0644]
modules/private/websites/christophe_carpentier/agorakit/default.nix [new file with mode: 0644]
modules/private/websites/christophe_carpentier/agorakit/php-packages.nix [new file with mode: 0644]
modules/private/websites/christophe_carpentier/agorakit/sort_groups.patch [new file with mode: 0644]
modules/private/websites/christophe_carpentier/website.nix [new file with mode: 0644]
modules/private/websites/default.nix
modules/private/websites/tools/cloud/default.nix
pkgs/webapps/nextcloud/apps/files_mindmap.nix [new file with mode: 0644]
pkgs/webapps/nextcloud/default.nix

index d005de48df232b5d3ddf0caefae10c3561267c9c..b68bd6b1a3c94a48f68b749e458d9aedea8351e1 100644 (file)
@@ -27,6 +27,10 @@ set = {
   chloeInte = ./websites/chloe/integration.nix;
   chloeProd = ./websites/chloe/production.nix;
 
+  christopheCarpentierWebsite = ./websites/christophe_carpentier/website.nix;
+  christopheCarpentierAgorakit = ./websites/christophe_carpentier/agorakit.nix;
+  christopheCarpentierAgoraProject = ./websites/christophe_carpentier/agora-project.nix;
+
   cipcaSympa = ./websites/cip-ca/sympa.nix;
 
   connexionswingInte = ./websites/connexionswing/integration.nix;
index 1b4721074804adf10d5ec0818ed81c7fefbb7de1..27f36e5973eebdb32513c47c3e428305551e74fa 100644 (file)
@@ -1245,6 +1245,23 @@ in
       description = "Websites configurations";
       type = submodule {
         options = {
+          christophe_carpentier = mkOption {
+            description = "Christophe Carpentier configuration by environment";
+            type = submodule {
+              options = {
+                agorakit = mkOption {
+                  description = "Agorakit configuration";
+                  type = submodule {
+                    options = {
+                      mysql = mkMysqlOptions "Agorakit" {};
+                      smtp = mkSmtpOptions "Agorakit";
+                      appkey = mkOption { type = str; description = "App key"; };
+                    };
+                  };
+                };
+              };
+            };
+          };
           immae = mkOption {
             description = "Immae configuration by environment";
             type = submodule {
diff --git a/modules/private/websites/christophe_carpentier/agora-project.nix b/modules/private/websites/christophe_carpentier/agora-project.nix
new file mode 100644 (file)
index 0000000..256734e
--- /dev/null
@@ -0,0 +1,63 @@
+{ lib, config, pkgs, ... }:
+let
+  cfg = config.myServices.websites.christophe_carpentier.agora-project;
+  varDir = "/var/lib/ftp/christophe_carpentier/agora-project";
+  apacheUser = config.services.httpd.Inte.user;
+  apacheGroup = config.services.httpd.Inte.group;
+in {
+  options.myServices.websites.christophe_carpentier.agora-project.enable = lib.mkEnableOption "enable Christophe Carpentier's agora-project";
+
+  config = lib.mkIf cfg.enable {
+    system.activationScripts.christophe_carpentier_agora_project = {
+      deps = [ "httpd" "users" ];
+      text = ''
+        install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${varDir}
+        install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/christophe_carpentier
+      '';
+    };
+    services.phpfpm.pools.christophe_carpentier_agora_project = {
+      user = apacheUser;
+      group = apacheGroup;
+      settings = {
+        "listen.owner" = apacheUser;
+        "listen.group" = apacheGroup;
+
+        "pm" = "ondemand";
+        "pm.max_children" = "5";
+        "pm.process_idle_timeout" = "60";
+
+        "php_admin_value[open_basedir]" = "/var/lib/php/sessions/christophe_carpentier:${varDir}:/tmp";
+        "php_admin_value[session.save_path]" = "/var/lib/php/sessions/christophe_carpentier";
+        "php_admin_value[upload_max_filesize]" = "20M";
+        "php_admin_value[post_max_size]" = "20M";
+      };
+      phpOptions = config.services.phpfpm.phpOptions + ''
+        disable_functions = "mail"
+      '';
+      phpPackage = pkgs.php74;
+    };
+    services.websites.env.production.modules = [ "proxy_fcgi" ];
+    services.websites.env.integration.vhostConfs.christophe_carpentier_agora_project = {
+      certName     = "integration";
+      addToCerts   = true;
+      hosts        = ["agora-project.cc.immae.dev"];
+      root         = varDir;
+      extraConfig  = [
+        ''
+        <FilesMatch "\.php$">
+          SetHandler "proxy:unix:${config.services.phpfpm.pools.christophe_carpentier_agora_project.socket}|fcgi://localhost"
+        </FilesMatch>
+
+        <Directory ${varDir}>
+          DirectoryIndex index.php index.htm index.html
+          Options Indexes FollowSymLinks MultiViews Includes
+          AllowOverride All
+          Require all granted
+        </Directory>
+          ''
+      ];
+    };
+  };
+}
+
+
diff --git a/modules/private/websites/christophe_carpentier/agorakit.nix b/modules/private/websites/christophe_carpentier/agorakit.nix
new file mode 100644 (file)
index 0000000..10dfb07
--- /dev/null
@@ -0,0 +1,133 @@
+{ lib, pkgs, config,  ... }:
+let
+  cfg = config.myServices.websites.christophe_carpentier.agorakit;
+  env = config.myEnv.websites.christophe_carpentier.agorakit;
+  varDir = "/var/lib/christophe_carpentier_agorakit";
+  secretsPath = config.secrets.fullPaths."websites/christophe_carpentier/env";
+  app = pkgs.callPackage ./agorakit { inherit varDir secretsPath; };
+  apacheUser = config.services.httpd.Prod.user;
+  apacheGroup = config.services.httpd.Prod.group;
+in {
+  options.myServices.websites.christophe_carpentier.agorakit.enable = lib.mkEnableOption "enable Christophe Carpentier's Agorakit";
+
+  config = lib.mkIf cfg.enable {
+    secrets.keys."websites/christophe_carpentier/env" = {
+      user = config.services.httpd.Prod.user;
+      group = config.services.httpd.Prod.group;
+      permissions = "0400";
+      text = ''
+        APP_ENV=production
+        APP_DEBUG=false
+        APP_KEY=${env.appkey}
+        APP_NAME='Agorakit'
+        APP_URL=https://agorakit.artisansdunous.fr
+        APP_LOG=daily
+        APP_DEFAULT_LOCALE=fr
+
+        DB_HOST=${env.mysql.host}
+        DB_DATABASE=${env.mysql.database}
+        DB_USERNAME=${env.mysql.user}
+        DB_PASSWORD=${env.mysql.password}
+
+        CACHE_DRIVER=file
+        SESSION_DRIVER=file
+        QUEUE_DRIVER=sync
+
+        MAIL_DRIVER=smtp
+        MAIL_HOST=${env.smtp.host}
+        MAIL_PORT=${env.smtp.port}
+        MAIL_USERNAME=${env.smtp.email}
+        MAIL_PASSWORD=${env.smtp.password}
+        MAIL_ENCRYPTION=tls
+
+        MAIL_FROM=${env.smtp.email}
+        MAIL_FROM_NAME=Agorakit
+        MAIL_NOREPLY=${env.smtp.email}
+
+        # OVH doesn't allow it
+        INBOX_DRIVER=null
+        #INBOX_HOST=${env.smtp.host}
+        INBOX_USERNAME=${env.smtp.email}
+        INBOX_PASSWORD=${env.smtp.password}
+        INBOX_PREFIX=${builtins.elemAt (builtins.split "@" env.smtp.email) 0}+
+        INBOX_SUFFIX=@${builtins.elemAt (builtins.split "@" env.smtp.email) 2}
+
+        TWITTER_ID=null
+        TWITTER_SECRET=null
+        TWITTER_URL=null
+
+        FACEBOOK_ID=null
+        FACEBOOK_SECRET=null
+        FACEBOOK_URL=null
+
+        GOOGLE_ID=null
+        GOOGLE_SECRET=null
+        GOOGLE_URL=null
+
+        GITHUB_ID=null
+        GITHUB_SECRET=null
+        GITHUB_URL=null
+
+        MAX_FILE_SIZE=100000
+      '';
+    };
+
+    systemd.services.phpfpm-christophe_carpentier_agorakit.preStart = ''
+      if [ ! -e ${varDir}/.filled ]; then
+        cp -r ${app}/oldvars/* ${varDir}
+        chmod -R u+w ${varDir}
+        chown -R ${config.services.httpd.Prod.user}:${config.services.httpd.Prod.group} ${varDir}
+        touch ${varDir}/.filled
+      fi
+    '';
+    services.phpApplication.apps.christophe_carpentier_agorakit = {
+      websiteEnv = "production";
+      httpdUser = config.services.httpd.Prod.user;
+      httpdGroup = config.services.httpd.Prod.group;
+      inherit (app) webRoot varDir;
+      inherit app;
+      serviceDeps = [ "mysql.service" ];
+      phpOpenbasedir = [ "/tmp" secretsPath ];
+      phpPool = {
+        "php_admin_value[upload_max_filesize]" = "100M";
+        "php_admin_value[post_max_size]" = "100M";
+        "pm" = "dynamic";
+        "pm.max_children" = "20";
+        "pm.start_servers" = "2";
+        "pm.min_spare_servers" = "1";
+        "pm.max_spare_servers" = "3";
+      };
+
+    };
+
+    services.cron = {
+      systemCronJobs =  [
+        ''
+          */5 * * * * ${apacheUser} cd ${app} && ${pkgs.php74}/bin/php artisan schedule:run >/dev/null 2>/dev/null
+        ''
+      ];
+    };
+
+    services.websites.env.production.vhostConfs.christophe_agorakit = {
+      certName    = "christophe_carpentier";
+      certMainHost = "agorakit.artisansdunous.fr";
+      hosts       = [ "agorakit.artisansdunous.fr" ];
+      root        = "${app}/public";
+      extraConfig = [
+        ''
+        <FilesMatch "\.php$">
+          SetHandler "proxy:unix:${config.services.phpfpm.pools.christophe_carpentier_agorakit.socket}|fcgi://localhost"
+        </FilesMatch>
+
+        <Directory ${app}/public>
+          DirectoryIndex index.php index.htm index.html
+          Options Indexes FollowSymLinks MultiViews Includes
+          AllowOverride All
+          Require all granted
+        </Directory>
+          ''
+      ];
+    };
+  };
+}
+
diff --git a/modules/private/websites/christophe_carpentier/agorakit/default.nix b/modules/private/websites/christophe_carpentier/agorakit/default.nix
new file mode 100644 (file)
index 0000000..8348877
--- /dev/null
@@ -0,0 +1,34 @@
+{ varDir, secretsPath
+, composerEnv, fetchFromGitHub, fetchurl }:
+let
+  app = composerEnv.buildPackage (
+    import ./php-packages.nix { inherit composerEnv fetchurl; } //
+    rec {
+      version = "master-7d86952";
+      pname = "agorakit";
+      name = "${pname}-${version}";
+      src = fetchFromGitHub {
+        owner = "agorakit";
+        repo  = "agorakit";
+        rev = "7d86952623b2f9effff20657c81c6eb0f6de8bdf";
+        sha256 = "10h0krhzgamc9di0xw6fv97cm49krvm6a58wg3db1qkcin62hvsw";
+      };
+      noDev = true;
+      postInstall = ''
+        cd $out
+        patch -p1 < ${././sort_groups.patch}
+        ln -sf ${secretsPath} .env
+        mkdir -p oldvars/bootstrap oldvars/public_storage
+        mv storage oldvars
+        mv bootstrap/cache oldvars/bootstrap
+
+        ln -sf ${varDir}/public_storage public/storage
+        ln -sf ${varDir}/bootstrap/cache bootstrap
+        ln -sf ${varDir}/storage storage
+        '';
+      passthru = {
+        inherit varDir secretsPath;
+        webRoot = "${app}/public";
+      };
+    });
+in app
diff --git a/modules/private/websites/christophe_carpentier/agorakit/php-packages.nix b/modules/private/websites/christophe_carpentier/agorakit/php-packages.nix
new file mode 100644 (file)
index 0000000..ae3a89b
--- /dev/null
@@ -0,0 +1,1689 @@
+# Generated with composer2nix and adapted to return only the list of
+# packages
+{ composerEnv, fetchurl }:
+{
+  packages = {
+    "balping/json-raw-encoder" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "balping-json-raw-encoder-e2b0ab888342b0716f1f0628e2fa13b345c5f276";
+        src = fetchurl {
+          url = "https://gitlab.com/api/v4/projects/balping%2Fjson-raw-encoder/repository/archive.zip?sha=e2b0ab888342b0716f1f0628e2fa13b345c5f276";
+          sha256 = "10ccpssfkqfwmi1wp9v605zkc0w1s7dhg00fm4fqiib0fd290zbp";
+        };
+      };
+    };
+    "barryvdh/laravel-translation-manager" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "barryvdh-laravel-translation-manager-18ed550eb74f9e61d2fc72d06dfa576296d0d5cb";
+        src = fetchurl {
+          url = "https://api.github.com/repos/barryvdh/laravel-translation-manager/zipball/18ed550eb74f9e61d2fc72d06dfa576296d0d5cb";
+          sha256 = "06j55bissy58ch49vcrr3hwjqikc5v2yg4628wp16f5kzd4fi671";
+        };
+      };
+    };
+    "brick/math" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "brick-math-dff976c2f3487d42c1db75a3b180e2b9f0e72ce0";
+        src = fetchurl {
+          url = "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0";
+          sha256 = "11k4h3mvgf9fn2mj0f67jccgkwr1zyjjjx1czmkvxzkkydq3g3nk";
+        };
+      };
+    };
+    "clue/stream-filter" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "clue-stream-filter-aeb7d8ea49c7963d3b581378955dbf5bc49aa320";
+        src = fetchurl {
+          url = "https://api.github.com/repos/clue/stream-filter/zipball/aeb7d8ea49c7963d3b581378955dbf5bc49aa320";
+          sha256 = "085640ipq4nc4fpc4422n6cjg0wv36y8cbi8ljndfh0f484ix8jm";
+        };
+      };
+    };
+    "cocur/slugify" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "cocur-slugify-3f1ffc300f164f23abe8b64ffb3f92d35cec8307";
+        src = fetchurl {
+          url = "https://api.github.com/repos/cocur/slugify/zipball/3f1ffc300f164f23abe8b64ffb3f92d35cec8307";
+          sha256 = "0l4dl42gad4msda4s7cz4iq7z2ci3nbgwb6052d4gvmda79ci1vg";
+        };
+      };
+    };
+    "consoletvs/charts" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "consoletvs-charts-0005d14e4fe6715f4146a4dc3b56add768233001";
+        src = fetchurl {
+          url = "https://api.github.com/repos/ConsoleTVs/Charts/zipball/0005d14e4fe6715f4146a4dc3b56add768233001";
+          sha256 = "0s1hcivw8y62sw9x9c4ha4h0z45pvnqrqn5i18wk71b8sid5y0hk";
+        };
+      };
+    };
+    "cviebrock/eloquent-sluggable" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "cviebrock-eloquent-sluggable-5cdf133881beff3adc1e0fb6549d14acc12a9480";
+        src = fetchurl {
+          url = "https://api.github.com/repos/cviebrock/eloquent-sluggable/zipball/5cdf133881beff3adc1e0fb6549d14acc12a9480";
+          sha256 = "0a16p3srbaid2xqp84qggjnps3f5lc48scvz6k60yz1pyk8vfrl7";
+        };
+      };
+    };
+    "cviebrock/eloquent-taggable" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "cviebrock-eloquent-taggable-9a0d8f9be96e653c6f8e900ba9cca7e6aa77f5c3";
+        src = fetchurl {
+          url = "https://api.github.com/repos/cviebrock/eloquent-taggable/zipball/9a0d8f9be96e653c6f8e900ba9cca7e6aa77f5c3";
+          sha256 = "064b5f9cxhg0809br5zwn2aqibh7396hrddh2lkpk6cqswaawzz3";
+        };
+      };
+    };
+    "ddeboer/imap" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "ddeboer-imap-dbed05ca67b93509345a820b2859de10c48948fb";
+        src = fetchurl {
+          url = "https://api.github.com/repos/ddeboer/imap/zipball/dbed05ca67b93509345a820b2859de10c48948fb";
+          sha256 = "04v4hcw948b2689vj5i5p4p3l0ahpfkf3pgsgisylwml6hl0jipr";
+        };
+      };
+    };
+    "doctrine/inflector" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-inflector-9cf661f4eb38f7c881cac67c75ea9b00bf97b210";
+        src = fetchurl {
+          url = "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210";
+          sha256 = "0gkaw5aqkdppd7cz1n46kdms0bv8kzbnpjh75jnhv98p9fik7f24";
+        };
+      };
+    };
+    "doctrine/lexer" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-lexer-e864bbf5904cb8f5bb334f99209b48018522f042";
+        src = fetchurl {
+          url = "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042";
+          sha256 = "11lg9fcy0crb8inklajhx3kyffdbx7xzdj8kwl21xsgq9nm9iwvv";
+        };
+      };
+    };
+    "dragonmantank/cron-expression" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "dragonmantank-cron-expression-7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c";
+        src = fetchurl {
+          url = "https://api.github.com/repos/dragonmantank/cron-expression/zipball/7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c";
+          sha256 = "0pl9zrj9254qbwr7vyiilzhmb7bq2ss631iwvlq1mqky2bwinj2l";
+        };
+      };
+    };
+    "egulias/email-validator" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "egulias-email-validator-0dbf5d78455d4d6a41d186da50adc1122ec066f4";
+        src = fetchurl {
+          url = "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4";
+          sha256 = "00kwb8rhk1fq3a1i152xniipk3y907q1v5r3szqbkq5rz82dwbck";
+        };
+      };
+    };
+    "fideloper/proxy" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "fideloper-proxy-c073b2bd04d1c90e04dc1b787662b558dd65ade0";
+        src = fetchurl {
+          url = "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0";
+          sha256 = "05jzgjj4fy5p1smqj41b5qxj42zn0mnczvsaacni4fmq174mz4gy";
+        };
+      };
+    };
+    "firebase/php-jwt" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "firebase-php-jwt-f42c9110abe98dd6cfe9053c49bc86acc70b2d23";
+        src = fetchurl {
+          url = "https://api.github.com/repos/firebase/php-jwt/zipball/f42c9110abe98dd6cfe9053c49bc86acc70b2d23";
+          sha256 = "0m15wb8jpcl2inqksbrh38h71srlf7h71pwikz4lczjax72fnanm";
+        };
+      };
+    };
+    "geocoder-php/chain-provider" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "geocoder-php-chain-provider-0f6241a89ee3f26021ef0036619b10081af53b18";
+        src = fetchurl {
+          url = "https://api.github.com/repos/geocoder-php/chain-provider/zipball/0f6241a89ee3f26021ef0036619b10081af53b18";
+          sha256 = "0qixp91qxrjx9pnsdd6zh2zqr3rxa5mh1kpczkxvih7w91srnr8w";
+        };
+      };
+    };
+    "geocoder-php/common-http" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "geocoder-php-common-http-9f44a006d4b45d01dd31ea9b38ee7fb5724cd73e";
+        src = fetchurl {
+          url = "https://api.github.com/repos/geocoder-php/php-common-http/zipball/9f44a006d4b45d01dd31ea9b38ee7fb5724cd73e";
+          sha256 = "0xk90q15hgjns0jwm8ipxhapc2x3w5d74x6n94bb32kjrjf86a32";
+        };
+      };
+    };
+    "geocoder-php/geo-plugin-provider" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "geocoder-php-geo-plugin-provider-f2e3cc5af83b24530e2430ab78d46e2990f19871";
+        src = fetchurl {
+          url = "https://api.github.com/repos/geocoder-php/geo-plugin-provider/zipball/f2e3cc5af83b24530e2430ab78d46e2990f19871";
+          sha256 = "0zrwbpr3hfapmg8a1ac703bhk7rhl84jrjaw73x99wa91jf0ixji";
+        };
+      };
+    };
+    "geocoder-php/google-maps-provider" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "geocoder-php-google-maps-provider-1e88138b66bf31b7e025b7bd579edb2cc9690414";
+        src = fetchurl {
+          url = "https://api.github.com/repos/geocoder-php/google-maps-provider/zipball/1e88138b66bf31b7e025b7bd579edb2cc9690414";
+          sha256 = "1xrl3byms1yp155r0m31r2hmwp4bgcdkbwhvd7vwivsi6ikxdwng";
+        };
+      };
+    };
+    "geocoder-php/nominatim-provider" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "geocoder-php-nominatim-provider-80f39ce41bcd0e4d9de3e83c40caf92d089fecf2";
+        src = fetchurl {
+          url = "https://api.github.com/repos/geocoder-php/nominatim-provider/zipball/80f39ce41bcd0e4d9de3e83c40caf92d089fecf2";
+          sha256 = "1zs859ax4mp1l2168zylxcgxcaimal5gzmhyfac160qp17c019ij";
+        };
+      };
+    };
+    "google/auth" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "google-auth-4e0c9367719df9703e96f5ad613041b87742471c";
+        src = fetchurl {
+          url = "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/4e0c9367719df9703e96f5ad613041b87742471c";
+          sha256 = "123vqcpy80wpgb238bjzs6ns6ywf6f0khi1hry0j16drpl4znk14";
+        };
+      };
+    };
+    "google/cloud-core" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "google-cloud-core-0e311771797adb1b8674fce77e5dbaf727cea3eb";
+        src = fetchurl {
+          url = "https://api.github.com/repos/googleapis/google-cloud-php-core/zipball/0e311771797adb1b8674fce77e5dbaf727cea3eb";
+          sha256 = "0nw699r385v8328pgw3jz6imwzr7q96pcd1f71b7wlrxd1ig6jq7";
+        };
+      };
+    };
+    "google/cloud-translate" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "google-cloud-translate-82857bd84db5bb6f25b90c281ee0b91a6e191e0a";
+        src = fetchurl {
+          url = "https://api.github.com/repos/googleapis/google-cloud-php-translate/zipball/82857bd84db5bb6f25b90c281ee0b91a6e191e0a";
+          sha256 = "0b8489s6j4rhflk2bm9laavvsgb4z2j8mrszcm3gl2f9811sx1a2";
+        };
+      };
+    };
+    "google/common-protos" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "google-common-protos-535f489ff1c3433c0ea64cd5aa0560f926949ac5";
+        src = fetchurl {
+          url = "https://api.github.com/repos/googleapis/common-protos-php/zipball/535f489ff1c3433c0ea64cd5aa0560f926949ac5";
+          sha256 = "1307mp0k576bl2q58mr9krkvf9jdj3rxmm3lcxsd4jsa46fr75yz";
+        };
+      };
+    };
+    "google/gax" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "google-gax-48cd41dbea7b8fece8c41100022786d149de64ca";
+        src = fetchurl {
+          url = "https://api.github.com/repos/googleapis/gax-php/zipball/48cd41dbea7b8fece8c41100022786d149de64ca";
+          sha256 = "10bj209njlda5dl873vznsi2d0vb2xakfgfiakl6zx85cbd8f99k";
+        };
+      };
+    };
+    "google/grpc-gcp" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "google-grpc-gcp-bb9bdbf62f6ae4e73d5209d85b1d0a0b9855ff36";
+        src = fetchurl {
+          url = "https://api.github.com/repos/GoogleCloudPlatform/grpc-gcp-php/zipball/bb9bdbf62f6ae4e73d5209d85b1d0a0b9855ff36";
+          sha256 = "0yri5hpfk2yy2vg13r9cl16hi7sw0d22nw0c1a4v93nzyp3l89xl";
+        };
+      };
+    };
+    "google/protobuf" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "google-protobuf-d717dd20f64d418d46bfcee4b53c02998da2661f";
+        src = fetchurl {
+          url = "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/d717dd20f64d418d46bfcee4b53c02998da2661f";
+          sha256 = "0xpiqdiskcdlasnkrp71la4nxiw9211q6mjkvc731swz01xh8qsn";
+        };
+      };
+    };
+    "graham-campbell/result-type" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "graham-campbell-result-type-7e279d2cd5d7fbb156ce46daada972355cea27bb";
+        src = fetchurl {
+          url = "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb";
+          sha256 = "0hvbv2svljw2hyshbby7wrh29nck98rpbhfl911gyb89i8mzx1zm";
+        };
+      };
+    };
+    "grpc/grpc" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "grpc-grpc-e1687963fb0b087d0c70e75d3bfff9062eaeb215";
+        src = fetchurl {
+          url = "https://api.github.com/repos/grpc/grpc-php/zipball/e1687963fb0b087d0c70e75d3bfff9062eaeb215";
+          sha256 = "0l81hhl0dnyj5xa09hcmzh0cl93rzjp6dwbrfk37xjl5c8yi6mmi";
+        };
+      };
+    };
+    "guzzlehttp/guzzle" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "guzzlehttp-guzzle-7008573787b430c1c1f650e3722d9bba59967628";
+        src = fetchurl {
+          url = "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628";
+          sha256 = "10fiv9ifhz5vg78z4xa41dkwic5ql4m6xf8bglyvpw3x7b76l81m";
+        };
+      };
+    };
+    "guzzlehttp/promises" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "guzzlehttp-promises-8e7d04f1f6450fef59366c399cfad4b9383aa30d";
+        src = fetchurl {
+          url = "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d";
+          sha256 = "158wd8nmvvl386c24lkr4jkwdhqpdj0dxdbjwh8iv6a2rgccjr2q";
+        };
+      };
+    };
+    "guzzlehttp/psr7" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "guzzlehttp-psr7-dc960a912984efb74d0a90222870c72c87f10c91";
+        src = fetchurl {
+          url = "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91";
+          sha256 = "06nc60wf8k6kcl89kprk04khsrrik5lnis615mx4a0m0pjn8bliz";
+        };
+      };
+    };
+    "http-interop/http-factory-guzzle" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "http-interop-http-factory-guzzle-34861658efb9899a6618cef03de46e2a52c80fc0";
+        src = fetchurl {
+          url = "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/34861658efb9899a6618cef03de46e2a52c80fc0";
+          sha256 = "0zy3dzrd6b8094ckvd6ax3si8i2b36pz4ww7qqym2cilcf5bdqwl";
+        };
+      };
+    };
+    "igorw/get-in" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "igorw-get-in-170ded831f49abc6a6061f655aba9bdbcf7b8111";
+        src = fetchurl {
+          url = "https://api.github.com/repos/igorw/get-in/zipball/170ded831f49abc6a6061f655aba9bdbcf7b8111";
+          sha256 = "1fgnhh7i211xbqb9xmiy7j74i9cnrds183a3giv4vzhxk201ikyp";
+        };
+      };
+    };
+    "intervention/image" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "intervention-image-abbf18d5ab8367f96b3205ca3c89fb2fa598c69e";
+        src = fetchurl {
+          url = "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e";
+          sha256 = "1msfpr9bip69bmhg23ka2f43phgb6dq5z604j5psjh3xd86r6c5d";
+        };
+      };
+    };
+    "intervention/imagecache" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "intervention-imagecache-e714f13298ecaf9b2d11cb7106a0415d5615cbe5";
+        src = fetchurl {
+          url = "https://api.github.com/repos/Intervention/imagecache/zipball/e714f13298ecaf9b2d11cb7106a0415d5615cbe5";
+          sha256 = "00gpdld64sld4plkg3cp0p40329ifgphb8xzbw885rjqv4idk5cm";
+        };
+      };
+    };
+    "laravel/framework" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "laravel-framework-3ec63771a07e251f4fb6c7ef2411a79a314bba65";
+        src = fetchurl {
+          url = "https://api.github.com/repos/laravel/framework/zipball/3ec63771a07e251f4fb6c7ef2411a79a314bba65";
+          sha256 = "08g1z72d155f2q0s16638h0hmmm3cclaz0na23w8ayr74x116waq";
+        };
+      };
+    };
+    "laravel/helpers" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "laravel-helpers-febb10d8daaf86123825de2cb87f789a3371f0ac";
+        src = fetchurl {
+          url = "https://api.github.com/repos/laravel/helpers/zipball/febb10d8daaf86123825de2cb87f789a3371f0ac";
+          sha256 = "1axbawm5hamfqvs5a6n4bbjc2fs5q3zwpsf7xrvqirxc4rgrdbgw";
+        };
+      };
+    };
+    "laravel/tinker" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "laravel-tinker-04ad32c1a3328081097a181875733fa51f402083";
+        src = fetchurl {
+          url = "https://api.github.com/repos/laravel/tinker/zipball/04ad32c1a3328081097a181875733fa51f402083";
+          sha256 = "1h4847a5rq2qdyszvjx6bqw5c0xi2m3pn9x7cqnq7jz7fkzpi5f9";
+        };
+      };
+    };
+    "laravel/ui" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "laravel-ui-07d725813350c695c779382cbd6dac0ab8665537";
+        src = fetchurl {
+          url = "https://api.github.com/repos/laravel/ui/zipball/07d725813350c695c779382cbd6dac0ab8665537";
+          sha256 = "1vd8fddxncx47g7hh62jacvgd50rf5pkw0glw87g7m4x19qavxfv";
+        };
+      };
+    };
+    "laravelcollective/html" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "laravelcollective-html-ae15b9c4bf918ec3a78f092b8555551dd693fde3";
+        src = fetchurl {
+          url = "https://api.github.com/repos/LaravelCollective/html/zipball/ae15b9c4bf918ec3a78f092b8555551dd693fde3";
+          sha256 = "0prkxn874gp2x1hv4nsv30rfrqn5l7ld8qy3ivd3p7n391k7iak6";
+        };
+      };
+    };
+    "laravolt/avatar" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "laravolt-avatar-3ab66e32c1f7c84e7095adfa1de3cb20964e6a1e";
+        src = fetchurl {
+          url = "https://api.github.com/repos/laravolt/avatar/zipball/3ab66e32c1f7c84e7095adfa1de3cb20964e6a1e";
+          sha256 = "06cw80d8gm1krg69c68b6lp1lybj6z4hxly1vp2k5qzngikn6kyq";
+        };
+      };
+    };
+    "league/commonmark" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "league-commonmark-7d70d2f19c84bcc16275ea47edabee24747352eb";
+        src = fetchurl {
+          url = "https://api.github.com/repos/thephpleague/commonmark/zipball/7d70d2f19c84bcc16275ea47edabee24747352eb";
+          sha256 = "1clfi4k0xp15pzg8c344qj5jk54k9dm9xbg4sd6l6iv66md1xasn";
+        };
+      };
+    };
+    "league/flysystem" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "league-flysystem-9be3b16c877d477357c015cec057548cf9b2a14a";
+        src = fetchurl {
+          url = "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a";
+          sha256 = "0mhlr6l75j58xwbadq30x58s67434195zlpdax6ix4nkr7fc907j";
+        };
+      };
+    };
+    "league/html-to-markdown" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "league-html-to-markdown-c4dbebbebe0fe454b6b38e6c683a977615bd7dc2";
+        src = fetchurl {
+          url = "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/c4dbebbebe0fe454b6b38e6c683a977615bd7dc2";
+          sha256 = "0d6233c4b8lzk7a9ylw7ck7rpai9l983z7dc0551p7q7b716x0pk";
+        };
+      };
+    };
+    "league/mime-type-detection" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "league-mime-type-detection-3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3";
+        src = fetchurl {
+          url = "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3";
+          sha256 = "0pmq486v2nf6672y2z53cyb3mfrxcc8n7z2ilpzz9zkkf2yb990j";
+        };
+      };
+    };
+    "michelf/php-markdown" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "michelf-php-markdown-c83178d49e372ca967d1a8c77ae4e051b3a3c75c";
+        src = fetchurl {
+          url = "https://api.github.com/repos/michelf/php-markdown/zipball/c83178d49e372ca967d1a8c77ae4e051b3a3c75c";
+          sha256 = "13w0lznsv09250kp44ssa14r39vxvlaym0gap31ljp4dkrnznr0l";
+        };
+      };
+    };
+    "misd/linkify" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "misd-linkify-3481b148806a23b4001712de645247a1a4dcc10a";
+        src = fetchurl {
+          url = "https://api.github.com/repos/misd-service-development/php-linkify/zipball/3481b148806a23b4001712de645247a1a4dcc10a";
+          sha256 = "0630268v6w1xwvrmvjym9hkdliii363d50pm5hi7gg1jr3ic0laq";
+        };
+      };
+    };
+    "monolog/monolog" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "monolog-monolog-1cb1cde8e8dd0f70cc0fe51354a59acad9302084";
+        src = fetchurl {
+          url = "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084";
+          sha256 = "1gymdiymwrjw25fjqapq3jlmf6wnp1h26ms74sckd70d53c4m52k";
+        };
+      };
+    };
+    "mpratt/embera" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "mpratt-embera-17358913e299497e464ad17f1310f8a01505fd9c";
+        src = fetchurl {
+          url = "https://api.github.com/repos/mpratt/Embera/zipball/17358913e299497e464ad17f1310f8a01505fd9c";
+          sha256 = "0qgk8mjgn6fnh487nqnr727g5sq01dgynmndm4075zz6prjgcp8j";
+        };
+      };
+    };
+    "nesbot/carbon" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "nesbot-carbon-d3c447f21072766cddec3522f9468a5849a76147";
+        src = fetchurl {
+          url = "https://api.github.com/repos/briannesbitt/Carbon/zipball/d3c447f21072766cddec3522f9468a5849a76147";
+          sha256 = "01v2zv1lwdsd80hhwmjd4rfp7xkp26mild1kkh3w7hivnf72nad8";
+        };
+      };
+    };
+    "nicolaslopezj/searchable" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "nicolaslopezj-searchable-b1d24ea45f75e36a11a093efa46fe44c06dd10b7";
+        src = fetchurl {
+          url = "https://api.github.com/repos/nicolaslopezj/searchable/zipball/b1d24ea45f75e36a11a093efa46fe44c06dd10b7";
+          sha256 = "07k1cq37im7mm9l45vy5sy9zr1gczidydcyza768gxnb4dp67hml";
+        };
+      };
+    };
+    "nikic/php-parser" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "nikic-php-parser-4432ba399e47c66624bc73c8c0f811e5c109576f";
+        src = fetchurl {
+          url = "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f";
+          sha256 = "0372c09xdgdr9dhd9m7sblxyqxk9xdk2r9s0i13ja3ascsz3zvpd";
+        };
+      };
+    };
+    "opis/closure" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "opis-closure-06e2ebd25f2869e54a306dda991f7db58066f7f6";
+        src = fetchurl {
+          url = "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6";
+          sha256 = "0fpa1w0rmwywj67jgaldmw563p7gycahs8gpkpjvrra9zhhj4yyc";
+        };
+      };
+    };
+    "php-http/curl-client" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "php-http-curl-client-15b11b7c2f39fe61ef6a70e0c247b4a84e845cdb";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-http/curl-client/zipball/15b11b7c2f39fe61ef6a70e0c247b4a84e845cdb";
+          sha256 = "1414gzipxgaz4ail3z94z1kkl418qnpp8rhbmzsl9ax7cry3kn3l";
+        };
+      };
+    };
+    "php-http/discovery" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "php-http-discovery-788f72d64c43dc361e7fcc7464c3d947c64984a7";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-http/discovery/zipball/788f72d64c43dc361e7fcc7464c3d947c64984a7";
+          sha256 = "1vvmn1zpzwmlkwc29pxibfrgn3yr7gz3mfa379l3nfnb1i2sfnf5";
+        };
+      };
+    };
+    "php-http/httplug" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "php-http-httplug-191a0a1b41ed026b717421931f8d3bd2514ffbf9";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-http/httplug/zipball/191a0a1b41ed026b717421931f8d3bd2514ffbf9";
+          sha256 = "0a0aaikwnbb76hj0ldqyg85b94awiw71i03n8al6rmssbpr8q2x4";
+        };
+      };
+    };
+    "php-http/message" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "php-http-message-887734d9c515ad9a564f6581a682fff87a6253cc";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-http/message/zipball/887734d9c515ad9a564f6581a682fff87a6253cc";
+          sha256 = "1jx3j33xnwbg98p1bknsbzb0svygiicgl7hi2q3n0asbb4wddfh4";
+        };
+      };
+    };
+    "php-http/message-factory" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "php-http-message-factory-a478cb11f66a6ac48d8954216cfed9aa06a501a1";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1";
+          sha256 = "13drpc83bq332hz0b97whibkm7jpk56msq4yppw9nmrchzwgy7cs";
+        };
+      };
+    };
+    "php-http/promise" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "php-http-promise-4c4c1f9b7289a2ec57cde7f1e9762a5789506f88";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88";
+          sha256 = "0xjprpx6xlsjr599vrbmf3cb9726adfm1p9q59xcklrh4p8grwbz";
+        };
+      };
+    };
+    "phpoption/phpoption" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpoption-phpoption-994ecccd8f3283ecf5ac33254543eb0ac946d525";
+        src = fetchurl {
+          url = "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525";
+          sha256 = "1snrnfvqhnr5z9llf8kbqk9l97gfyp8gghmhi1ng8qx5xzv1anr7";
+        };
+      };
+    };
+    "psr/cache" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8";
+          sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz";
+        };
+      };
+    };
+    "psr/container" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-container-8622567409010282b7aeebe4bb841fe98b58dcaf";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf";
+          sha256 = "0qfvyfp3mli776kb9zda5cpc8cazj3prk0bg0gm254kwxyfkfrwn";
+        };
+      };
+    };
+    "psr/event-dispatcher" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-event-dispatcher-dbefd12671e8a14ec7f180cab83036ed26714bb0";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0";
+          sha256 = "05nicsd9lwl467bsv4sn44fjnnvqvzj1xqw2mmz9bac9zm66fsjd";
+        };
+      };
+    };
+    "psr/http-client" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-http-client-2dfb5f6c5eff0e91e20e913f8c5452ed95b86621";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621";
+          sha256 = "0cmkifa3ji1r8kn3y1rwg81rh8g2crvnhbv2am6d688dzsbw967v";
+        };
+      };
+    };
+    "psr/http-factory" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-http-factory-12ac7fcd07e5b077433f5f2bee95b3a771bf61be";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be";
+          sha256 = "0inbnqpc5bfhbbda9dwazsrw9xscfnc8rdx82q1qm3r446mc1vds";
+        };
+      };
+    };
+    "psr/http-message" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-http-message-f6561bf28d520154e4b0ec72be95418abe6d9363";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363";
+          sha256 = "195dd67hva9bmr52iadr4kyp2gw2f5l51lplfiay2pv6l9y4cf45";
+        };
+      };
+    };
+    "psr/log" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-log-d49695b909c3b7628b6289db5479a1c204601f11";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11";
+          sha256 = "0sb0mq30dvmzdgsnqvw3xh4fb4bqjncx72kf8n622f94dd48amln";
+        };
+      };
+    };
+    "psr/simple-cache" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b";
+        src = fetchurl {
+          url = "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b";
+          sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw";
+        };
+      };
+    };
+    "psy/psysh" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "psy-psysh-e4573f47750dd6c92dca5aee543fa77513cbd8d3";
+        src = fetchurl {
+          url = "https://api.github.com/repos/bobthecow/psysh/zipball/e4573f47750dd6c92dca5aee543fa77513cbd8d3";
+          sha256 = "1pzw57gild4h66nfkvlcbz43ralypcjr9dgvwj6rs2gl72rfiwnk";
+        };
+      };
+    };
+    "ralouphie/getallheaders" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "ralouphie-getallheaders-120b605dfeb996808c31b6477290a714d356e822";
+        src = fetchurl {
+          url = "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822";
+          sha256 = "1bv7ndkkankrqlr2b4kw7qp3fl0dxi6bp26bnim6dnlhavd6a0gg";
+        };
+      };
+    };
+    "ramsey/collection" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "ramsey-collection-28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1";
+        src = fetchurl {
+          url = "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1";
+          sha256 = "18ka3y51a21bf7mv3hxxxnn1dj1mn3vg8y1i3j3ajsfi49xl6r03";
+        };
+      };
+    };
+    "ramsey/uuid" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "ramsey-uuid-cd4032040a750077205918c86049aa0f43d22947";
+        src = fetchurl {
+          url = "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947";
+          sha256 = "00hnl12crjs7kh67jhhjg157pma4ka5c5rpz46sdx8m207vhylzq";
+        };
+      };
+    };
+    "rap2hpoutre/laravel-log-viewer" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "rap2hpoutre-laravel-log-viewer-27392d29234b6ff38a456454558f4bcc40cc837a";
+        src = fetchurl {
+          url = "https://api.github.com/repos/rap2hpoutre/laravel-log-viewer/zipball/27392d29234b6ff38a456454558f4bcc40cc837a";
+          sha256 = "19r629lkfygqm2ba6y0hiqrxrxx66vpqw8razzqmrszl7vszc5x1";
+        };
+      };
+    };
+    "rize/uri-template" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "rize-uri-template-6e0b97e00e0f36c652dd3c37b194ef07de669b82";
+        src = fetchurl {
+          url = "https://api.github.com/repos/rize/UriTemplate/zipball/6e0b97e00e0f36c652dd3c37b194ef07de669b82";
+          sha256 = "1gcijg4lvr9353x87fx6v906nhg482dg8vaam85r4waqg1cfwjg4";
+        };
+      };
+    };
+    "spatie/enum" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "spatie-enum-5870275f3811dc63c08200b1536ab2f8618b6a52";
+        src = fetchurl {
+          url = "https://api.github.com/repos/spatie/enum/zipball/5870275f3811dc63c08200b1536ab2f8618b6a52";
+          sha256 = "131nfisj4dl11ywa9zj0ivllfiq22wdz3rkhr2766qglaigf5l00";
+        };
+      };
+    };
+    "spatie/icalendar-generator" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "spatie-icalendar-generator-b57bf4d47d145574fe175cc6a13ce3bc41247b85";
+        src = fetchurl {
+          url = "https://api.github.com/repos/spatie/icalendar-generator/zipball/b57bf4d47d145574fe175cc6a13ce3bc41247b85";
+          sha256 = "0q794dl8viizyzic086mlb7viv5g5146y0amgk9k5j13svirv5hf";
+        };
+      };
+    };
+    "spatie/laravel-honeypot" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "spatie-laravel-honeypot-ed71dd03af7b393b60eb089d97e0af4f698e68d0";
+        src = fetchurl {
+          url = "https://api.github.com/repos/spatie/laravel-honeypot/zipball/ed71dd03af7b393b60eb089d97e0af4f698e68d0";
+          sha256 = "191in64680mk9qih6ci2lv82k583wi87111a0rvzph10hrywk2ai";
+        };
+      };
+    };
+    "stichoza/google-translate-php" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "stichoza-google-translate-php-9e4808cf6f3f1e89f06e2129c46f58eeca658428";
+        src = fetchurl {
+          url = "https://api.github.com/repos/Stichoza/google-translate-php/zipball/9e4808cf6f3f1e89f06e2129c46f58eeca658428";
+          sha256 = "0jj30zjlydfxmxbysrzs8x74mllc7gcspl50ggf19m21g3376zb0";
+        };
+      };
+    };
+    "suin/php-rss-writer" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "suin-php-rss-writer-78f45e44a2a7cb0d82e4b9efb6f7b7a075b9051c";
+        src = fetchurl {
+          url = "https://api.github.com/repos/suin/php-rss-writer/zipball/78f45e44a2a7cb0d82e4b9efb6f7b7a075b9051c";
+          sha256 = "1qcpwgk2p9sj5292csv6d489gc09r5bs4kdxvvk9wn2iy8yybmb8";
+        };
+      };
+    };
+    "swiftmailer/swiftmailer" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "swiftmailer-swiftmailer-15f7faf8508e04471f666633addacf54c0ab5933";
+        src = fetchurl {
+          url = "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/15f7faf8508e04471f666633addacf54c0ab5933";
+          sha256 = "1xiisdaxlmkzi16szh7lm3ay9vr9pdz0q2ah7vqaqrm2b4mwd90g";
+        };
+      };
+    };
+    "symfony/console" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-console-864568fdc0208b3eba3638b6000b69d2386e6768";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/console/zipball/864568fdc0208b3eba3638b6000b69d2386e6768";
+          sha256 = "0nb42nc00w0s10b8iz4xa84gfrix4yha9nw12mdb4wgi8jl59zhy";
+        };
+      };
+    };
+    "symfony/css-selector" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-css-selector-5d5f97809015102116208b976eb2edb44b689560";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/css-selector/zipball/5d5f97809015102116208b976eb2edb44b689560";
+          sha256 = "03gaq78ah9bsk63g1p1mr9yr7rhx0rv4ag3yn2n7phrwzid5kcda";
+        };
+      };
+    };
+    "symfony/deprecation-contracts" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-deprecation-contracts-5f38c8804a9e97d23e0c8d63341088cd8a22d627";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627";
+          sha256 = "11k6a8v9b6p0j788fgykq6s55baba29lg37fwvmn4igxxkfwmbp3";
+        };
+      };
+    };
+    "symfony/error-handler" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-error-handler-1416bc16317a8188aabde251afef7618bf4687ac";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/error-handler/zipball/1416bc16317a8188aabde251afef7618bf4687ac";
+          sha256 = "19xh2kbwimgvvxr7ihnpsnajpxc1v9j9hzdzzb722h79rfsmj59a";
+        };
+      };
+    };
+    "symfony/event-dispatcher" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-event-dispatcher-d08d6ec121a425897951900ab692b612a61d6240";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/event-dispatcher/zipball/d08d6ec121a425897951900ab692b612a61d6240";
+          sha256 = "16fhr3yj6rm6ax09s7ll7kqjlqgzkcsj8vlj5qrlwasw40nj0agx";
+        };
+      };
+    };
+    "symfony/event-dispatcher-contracts" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-event-dispatcher-contracts-69fee1ad2332a7cbab3aca13591953da9cdb7a11";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11";
+          sha256 = "1xajgmj8fnix4q1p93mhhiwvxspm8p4ksgzyyh31sj4xsp1c41x7";
+        };
+      };
+    };
+    "symfony/finder" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-finder-ccccb9d48ca42757dd12f2ca4bf857a4e217d90d";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/finder/zipball/ccccb9d48ca42757dd12f2ca4bf857a4e217d90d";
+          sha256 = "18qnl0dh9s48nvy9ckcmw6jjyypiwy36lvcwbpvmjv3z342kayq1";
+        };
+      };
+    };
+    "symfony/http-client-contracts" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-http-client-contracts-7e82f6084d7cae521a75ef2cb5c9457bbda785f4";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4";
+          sha256 = "04mszmb94y0xjs0cwqxzhpf65kfqhhqznldifbxvrrlxb9nn23qc";
+        };
+      };
+    };
+    "symfony/http-foundation" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-http-foundation-e8fbbab7c4a71592985019477532629cb2e142dc";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/http-foundation/zipball/e8fbbab7c4a71592985019477532629cb2e142dc";
+          sha256 = "14j4z1i3gvpqzl99cnlgdyyxvvp5ka3j4s30wg1lqp0pcm1inrj6";
+        };
+      };
+    };
+    "symfony/http-kernel" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-http-kernel-eb540ef6870dbf33c92e372cfb869ebf9649e6cb";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/http-kernel/zipball/eb540ef6870dbf33c92e372cfb869ebf9649e6cb";
+          sha256 = "0fwzrqbl0cyxcw2430v8zrpsbc9kcj9c5h5rgby1f2v63vqq2b3k";
+        };
+      };
+    };
+    "symfony/mime" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-mime-64258e870f8cc75c3dae986201ea2df58c210b52";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/mime/zipball/64258e870f8cc75c3dae986201ea2df58c210b52";
+          sha256 = "14s26zam8dxhbskizcw6mpyizg6n4i1ambq5ni6r9gv3rs6cfr9p";
+        };
+      };
+    };
+    "symfony/options-resolver" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-options-resolver-5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/options-resolver/zipball/5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce";
+          sha256 = "1rk3wcxn08s0wdjxi2byj1mhr3xf0ql55wxwik8cbx57i8p5r2sw";
+        };
+      };
+    };
+    "symfony/polyfill-ctype" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-ctype-c6c942b1ac76c82448322025e084cadc56048b4e";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e";
+          sha256 = "0jpk859wx74vm03q5s9z25f4ak2138p2x5q3b587wvy8rq2m4pbd";
+        };
+      };
+    };
+    "symfony/polyfill-iconv" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-iconv-06fb361659649bcfd6a208a0f1fcaf4e827ad342";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/polyfill-iconv/zipball/06fb361659649bcfd6a208a0f1fcaf4e827ad342";
+          sha256 = "0glb56w5q4v2j629rkndp2c7v4mcs6xdl14nwaaxy85lr5w4ixnq";
+        };
+      };
+    };
+    "symfony/polyfill-intl-grapheme" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-intl-grapheme-5601e09b69f26c1828b13b6bb87cb07cddba3170";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170";
+          sha256 = "1k3xk8iknyjaslzvhdl1am3jlyndvb6pw0509znmwgvc2jhkb4jr";
+        };
+      };
+    };
+    "symfony/polyfill-intl-idn" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-intl-idn-2d63434d922daf7da8dd863e7907e67ee3031483";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483";
+          sha256 = "0sk592qrdb6dvk6v8msjva8p672qmhmnzkw1lw53gks0xrc20xjy";
+        };
+      };
+    };
+    "symfony/polyfill-intl-normalizer" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-intl-normalizer-43a0283138253ed1d48d352ab6d0bdb3f809f248";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248";
+          sha256 = "04irkl6aks8zyfy17ni164060liihfyraqm1fmpjbs5hq0b14sc9";
+        };
+      };
+    };
+    "symfony/polyfill-mbstring" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-mbstring-5232de97ee3b75b0360528dae24e73db49566ab1";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1";
+          sha256 = "1mm670fxj2x72a9mbkyzs3yifpp6glravq2ss438bags1xf6psz8";
+        };
+      };
+    };
+    "symfony/polyfill-php72" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-php72-cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9";
+          sha256 = "12dmz2n1b9pqqd758ja0c8h8h5dxdai5ik74iwvaxc5xn86a026b";
+        };
+      };
+    };
+    "symfony/polyfill-php73" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-php73-a678b42e92f86eca04b7fa4c0f6f19d097fb69e2";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2";
+          sha256 = "10rq2x2q9hsdzskrz0aml5qcji27ypxam324044fi24nl60fyzg0";
+        };
+      };
+    };
+    "symfony/polyfill-php80" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-polyfill-php80-dc3063ba22c2a1fd2f45ed856374d79114998f91";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91";
+          sha256 = "1mhfjibk7mqyzlqpz6jjpxpd93fnfw0nik140x3mq1d2blg5cbvd";
+        };
+      };
+    };
+    "symfony/process" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-process-98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/process/zipball/98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e";
+          sha256 = "0xzxrgarkcbbb7y2gq92fj2hmdmm5hl139lnqgx13swfdm3v2z9b";
+        };
+      };
+    };
+    "symfony/routing" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-routing-4a7b2bf5e1221be1902b6853743a9bb317f6925e";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/routing/zipball/4a7b2bf5e1221be1902b6853743a9bb317f6925e";
+          sha256 = "031wxlw2nx9v2r8mma09pqkkdvqg5mg4g4xfwwcph4xa7rd0pxs0";
+        };
+      };
+    };
+    "symfony/service-contracts" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-service-contracts-f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb";
+          sha256 = "1i573rmajc33a9nrgwgc4k3svg29yp9xv17gp133rd1i705hwv1y";
+        };
+      };
+    };
+    "symfony/string" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-string-01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/string/zipball/01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db";
+          sha256 = "094avxmawqd00hfnwyqs6p2njrj202ibjrrv8vs8yx5az1875mlz";
+        };
+      };
+    };
+    "symfony/translation" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-translation-61af68dba333e2d376a325a29c2a3f2a605b4876";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/translation/zipball/61af68dba333e2d376a325a29c2a3f2a605b4876";
+          sha256 = "1bqjbdkqr325jn6mafcrh945yals73qvklpb1blh9in2z802fj0g";
+        };
+      };
+    };
+    "symfony/translation-contracts" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-translation-contracts-95c812666f3e91db75385749fe219c5e494c7f95";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95";
+          sha256 = "073l1pbmwbkaviwwjq9ypb1w7dk366nn2vn1vancbal0zqk0zx7b";
+        };
+      };
+    };
+    "symfony/var-dumper" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-var-dumper-d693200a73fae179d27f8f1b16b4faf3e8569eba";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/var-dumper/zipball/d693200a73fae179d27f8f1b16b4faf3e8569eba";
+          sha256 = "0yr2lqnk3wmv43iw0qag4nl2248f17cwhmv41k6w84x8kzrq1rc9";
+        };
+      };
+    };
+    "tanmuhittin/laravel-google-translate" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "tanmuhittin-laravel-google-translate-2f2d97b7cf0a1296b92a1aeb8cb965bac683c118";
+        src = fetchurl {
+          url = "https://api.github.com/repos/tanmuhittin/laravel-google-translate/zipball/2f2d97b7cf0a1296b92a1aeb8cb965bac683c118";
+          sha256 = "03883rvhhxgcsn6ix5fla8va2j6ghqaywf0g15ls0a9q6qx3ihky";
+        };
+      };
+    };
+    "tijsverkoyen/css-to-inline-styles" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "tijsverkoyen-css-to-inline-styles-b43b05cf43c1b6d849478965062b6ef73e223bb5";
+        src = fetchurl {
+          url = "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5";
+          sha256 = "0lc6jviz8faqxxs453dbqvfdmm6l2iczxla22v2r6xhakl58pf3w";
+        };
+      };
+    };
+    "toin0u/geocoder-laravel" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "toin0u-geocoder-laravel-55ab04e389a3174f03a9b3eae5168f6413e0ab97";
+        src = fetchurl {
+          url = "https://api.github.com/repos/geocoder-php/GeocoderLaravel/zipball/55ab04e389a3174f03a9b3eae5168f6413e0ab97";
+          sha256 = "1srx9dgir34gp3gbij701rkhhf8v17pdy7w35539sl2s01whm2wg";
+        };
+      };
+    };
+    "venturecraft/revisionable" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "venturecraft-revisionable-7dd938dd3b4abe0ff1bbd7aaf8245f3d66dce205";
+        src = fetchurl {
+          url = "https://api.github.com/repos/VentureCraft/revisionable/zipball/7dd938dd3b4abe0ff1bbd7aaf8245f3d66dce205";
+          sha256 = "07wwyw4vp4nmnfi5v1llm2gbdibq5cbhf67dzsw5dyx2v0qgql92";
+        };
+      };
+    };
+    "vlucas/phpdotenv" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "vlucas-phpdotenv-b3eac5c7ac896e52deab4a99068e3f4ab12d9e56";
+        src = fetchurl {
+          url = "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56";
+          sha256 = "1w8gylm0qwgwx2y3na9s2knpvc00yfhwf01p662l1cn9b3h33i11";
+        };
+      };
+    };
+    "voku/portable-ascii" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "voku-portable-ascii-80953678b19901e5165c56752d087fc11526017c";
+        src = fetchurl {
+          url = "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c";
+          sha256 = "112sz1jl55l3qm3041ijyzxy7qbv0sa6535hx6sp7nk2c76wjq0d";
+        };
+      };
+    };
+    "watson/validating" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "watson-validating-63c9af2ec2f01474b9a002c06c81492be10e9bd2";
+        src = fetchurl {
+          url = "https://api.github.com/repos/dwightwatson/validating/zipball/63c9af2ec2f01474b9a002c06c81492be10e9bd2";
+          sha256 = "19v3b2r66707z9djdp5gbzvi7fgrsich40b32h07vbmfndaal011";
+        };
+      };
+    };
+    "webmozart/assert" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "webmozart-assert-6964c76c7804814a842473e0c8fd15bab0f18e25";
+        src = fetchurl {
+          url = "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25";
+          sha256 = "17xqhb2wkwr7cgbl4xdjf7g1vkal17y79rpp6xjpf1xgl5vypc64";
+        };
+      };
+    };
+    "willdurand/email-reply-parser" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "willdurand-email-reply-parser-642bec19af70c2bf2f2611301349107fe2e6dd08";
+        src = fetchurl {
+          url = "https://api.github.com/repos/willdurand/EmailReplyParser/zipball/642bec19af70c2bf2f2611301349107fe2e6dd08";
+          sha256 = "0fvlwkn87mpk41m1f9nqjyz2f7wfm18ffhv4b95lysd3may56zj7";
+        };
+      };
+    };
+    "willdurand/geocoder" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "willdurand-geocoder-3e86f5b10ab0cef1cf03f979fe8e34b6476daff0";
+        src = fetchurl {
+          url = "https://api.github.com/repos/geocoder-php/php-common/zipball/3e86f5b10ab0cef1cf03f979fe8e34b6476daff0";
+          sha256 = "1z0rqvxb9gwxbfa7c06hvbp4hvvs8xjg5gm1v8p2sigwdgw8f0zh";
+        };
+      };
+    };
+    "yandex/translate-api" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "yandex-translate-api-c99e69cde3e688fc0f99c4d8a21585226a8e1938";
+        src = fetchurl {
+          url = "https://api.github.com/repos/yandex-php/translate-api/zipball/c99e69cde3e688fc0f99c4d8a21585226a8e1938";
+          sha256 = "1141n747n2dirrxx6fb2mywhq4yqdhphsk6p60wv4cs2cdm642q5";
+        };
+      };
+    };
+    "zbateson/mail-mime-parser" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "zbateson-mail-mime-parser-706964d904798b8c22d63f62f0ec5f5bc84e30d9";
+        src = fetchurl {
+          url = "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/706964d904798b8c22d63f62f0ec5f5bc84e30d9";
+          sha256 = "0v0xi79cjfpsin41qw72p0741nzclav582dipmyslvhmjc5qv7sy";
+        };
+      };
+    };
+    "zbateson/mb-wrapper" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "zbateson-mb-wrapper-721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d";
+        src = fetchurl {
+          url = "https://api.github.com/repos/zbateson/mb-wrapper/zipball/721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d";
+          sha256 = "124yibj9lp7ph6k4v4fh0gdachr3wzxlfj72klkiwphbrprm1qcg";
+        };
+      };
+    };
+    "zbateson/stream-decorators" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "zbateson-stream-decorators-6f54738dfecc65e1d5bfb855035836748083a6dd";
+        src = fetchurl {
+          url = "https://api.github.com/repos/zbateson/stream-decorators/zipball/6f54738dfecc65e1d5bfb855035836748083a6dd";
+          sha256 = "13s3cip90ylcdhbq0g7pl71i32c7j5blbfmpdvqkbbykgm1avbx2";
+        };
+      };
+    };
+  };
+  devPackages = {
+    "barryvdh/laravel-debugbar" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "barryvdh-laravel-debugbar-88fd9cfa144b06b2549e9d487fdaec68265e791e";
+        src = fetchurl {
+          url = "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/88fd9cfa144b06b2549e9d487fdaec68265e791e";
+          sha256 = "1pra2f2h8v59g3mh1mwr9ygn17igclw5xlk6xswpbkvbw2szlfhv";
+        };
+      };
+    };
+    "doctrine/instantiator" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "doctrine-instantiator-d56bf6102915de5702778fe20f2de3b2fe570b5b";
+        src = fetchurl {
+          url = "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b";
+          sha256 = "04rihgfjv8alvvb92bnb5qpz8fvqvjwfrawcjw34pfnfx4jflcwh";
+        };
+      };
+    };
+    "facade/flare-client-php" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "facade-flare-client-php-69742118c037f34ee1ef86dc605be4a105d9e984";
+        src = fetchurl {
+          url = "https://api.github.com/repos/facade/flare-client-php/zipball/69742118c037f34ee1ef86dc605be4a105d9e984";
+          sha256 = "1if56r0g9ymwankz40l5xhw5vch1qkjjy9914lz1vgbkj7ln9pvz";
+        };
+      };
+    };
+    "facade/ignition" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "facade-ignition-e7db3b601ce742568b92648818ef903904d20164";
+        src = fetchurl {
+          url = "https://api.github.com/repos/facade/ignition/zipball/e7db3b601ce742568b92648818ef903904d20164";
+          sha256 = "11y4az9miizql103px917har5firkm6pc0djjwzkiy109fa3fv3x";
+        };
+      };
+    };
+    "facade/ignition-contracts" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "facade-ignition-contracts-3c921a1cdba35b68a7f0ccffc6dffc1995b18267";
+        src = fetchurl {
+          url = "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267";
+          sha256 = "1nsjwd1k9q8qmfvh7m50rs42yxzxyq4f56r6dq205gwcmqsjb2j0";
+        };
+      };
+    };
+    "filp/whoops" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "filp-whoops-c13c0be93cff50f88bbd70827d993026821914dd";
+        src = fetchurl {
+          url = "https://api.github.com/repos/filp/whoops/zipball/c13c0be93cff50f88bbd70827d993026821914dd";
+          sha256 = "0janbd93xvr5hy2bms05q1l31gmwbqrgjfvbzkmv3bfw4gcksq0i";
+        };
+      };
+    };
+    "fzaninotto/faker" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "fzaninotto-faker-848d8125239d7dbf8ab25cb7f054f1a630e68c2e";
+        src = fetchurl {
+          url = "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e";
+          sha256 = "1nsbmkws5lwfm0nhy67q6awzwcb1qxgnqml6yfy3wfj7s62r6x09";
+        };
+      };
+    };
+    "hamcrest/hamcrest-php" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "hamcrest-hamcrest-php-8c3d0a3f6af734494ad8f6fbbee0ba92422859f3";
+        src = fetchurl {
+          url = "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3";
+          sha256 = "1ixmmpplaf1z36f34d9f1342qjbcizvi5ddkjdli6jgrbla6a6hr";
+        };
+      };
+    };
+    "laravel/browser-kit-testing" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "laravel-browser-kit-testing-a8bc92f2bb91db210ed2d8cbf4d6b16fa49453dc";
+        src = fetchurl {
+          url = "https://api.github.com/repos/laravel/browser-kit-testing/zipball/a8bc92f2bb91db210ed2d8cbf4d6b16fa49453dc";
+          sha256 = "1lmcxp1xi6y005nrldql2gz9xdpdablhbx4mx1nsip4myj5qrvhj";
+        };
+      };
+    };
+    "maximebf/debugbar" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "maximebf-debugbar-6d51ee9e94cff14412783785e79a4e7ef97b9d62";
+        src = fetchurl {
+          url = "https://api.github.com/repos/maximebf/php-debugbar/zipball/6d51ee9e94cff14412783785e79a4e7ef97b9d62";
+          sha256 = "13lh63wnsp2a6564h3if3925x4maf2plkhzyd1byv995g7bhi68i";
+        };
+      };
+    };
+    "mmo/faker-images" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "mmo-faker-images-f92b66e0c3771891280786ad3a1c4fab21f8e34d";
+        src = fetchurl {
+          url = "https://api.github.com/repos/morawskim/faker-images/zipball/f92b66e0c3771891280786ad3a1c4fab21f8e34d";
+          sha256 = "1vqj0788yaz82q5k3092gkik11c5cqmh2z4cvbchfzj4nw0vn1zq";
+        };
+      };
+    };
+    "mockery/mockery" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "mockery-mockery-d1339f64479af1bee0e82a0413813fe5345a54ea";
+        src = fetchurl {
+          url = "https://api.github.com/repos/mockery/mockery/zipball/d1339f64479af1bee0e82a0413813fe5345a54ea";
+          sha256 = "03ivhqdghsg5brgfq117ff5nj2s74d83rh34pzfqqpgca45h3w6d";
+        };
+      };
+    };
+    "myclabs/deep-copy" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "myclabs-deep-copy-776f831124e9c62e1a2c601ecc52e776d8bb7220";
+        src = fetchurl {
+          url = "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220";
+          sha256 = "181f3fsxs6s2wyy4y7qfk08qmlbvz1wn3mn3lqy42grsb8g8ym0k";
+        };
+      };
+    };
+    "nunomaduro/collision" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "nunomaduro-collision-41b7e9999133d5082700d31a1d0977161df8322a";
+        src = fetchurl {
+          url = "https://api.github.com/repos/nunomaduro/collision/zipball/41b7e9999133d5082700d31a1d0977161df8322a";
+          sha256 = "019bmg1wdxh74a2fx0fjz34m8pixxhsrj2dvkzih30yri340w1ns";
+        };
+      };
+    };
+    "phar-io/manifest" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phar-io-manifest-85265efd3af7ba3ca4b2a2c34dbfc5788dd29133";
+        src = fetchurl {
+          url = "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133";
+          sha256 = "13cqrx7iikx2aixszhxl55ql6hikblvbalix0kr05pbiccipg6fv";
+        };
+      };
+    };
+    "phar-io/version" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phar-io-version-bae7c545bef187884426f042434e561ab1ddb182";
+        src = fetchurl {
+          url = "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182";
+          sha256 = "0hqmrihb4wv53rl3fg93wjldwrz79jyad5bv29ynbdklsirh7b2l";
+        };
+      };
+    };
+    "phpdocumentor/reflection-common" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpdocumentor-reflection-common-1d01c49d4ed62f25aa84a747ad35d5a16924662b";
+        src = fetchurl {
+          url = "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b";
+          sha256 = "1wx720a17i24471jf8z499dnkijzb4b8xra11kvw9g9hhzfadz1r";
+        };
+      };
+    };
+    "phpdocumentor/reflection-docblock" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpdocumentor-reflection-docblock-069a785b2141f5bcf49f3e353548dc1cce6df556";
+        src = fetchurl {
+          url = "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556";
+          sha256 = "0qid63bsfjmc3ka54f1ijl4a5zqwf7jmackjyjmbw3gxdnbi69il";
+        };
+      };
+    };
+    "phpdocumentor/type-resolver" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpdocumentor-type-resolver-6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0";
+        src = fetchurl {
+          url = "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0";
+          sha256 = "01g6mihq5wd1396njjb7ibcdfgk26ix1kmbjb6dlshzav0k3983h";
+        };
+      };
+    };
+    "phpspec/prophecy" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpspec-prophecy-be1996ed8adc35c3fd795488a653f4b518be70ea";
+        src = fetchurl {
+          url = "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea";
+          sha256 = "167snpasy7499pbxpyx2bj607qa1vrg07xfpa30dlpbwi7f34dji";
+        };
+      };
+    };
+    "phpunit/php-code-coverage" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpunit-php-code-coverage-f6293e1b30a2354e8428e004689671b83871edde";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde";
+          sha256 = "0q7az9h109jchlsgkzlnvzl90f39ifqp53k9bih85lbkaiz5w329";
+        };
+      };
+    };
+    "phpunit/php-file-iterator" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpunit-php-file-iterator-aa4be8575f26070b100fccb67faabb28f21f66f8";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8";
+          sha256 = "0vxnrzwb573ddmiw1sd77bdym6jiimwjhcz7yvmsr9wswkxh18l6";
+        };
+      };
+    };
+    "phpunit/php-invoker" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpunit-php-invoker-5a10147d0aaf65b58940a0b72f71c9ac0423cc67";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67";
+          sha256 = "1vqnnjnw94mzm30n9n5p2bfgd3wd5jah92q6cj3gz1nf0qigr4fh";
+        };
+      };
+    };
+    "phpunit/php-text-template" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpunit-php-text-template-5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28";
+          sha256 = "0ff87yzywizi6j2ps3w0nalpx16mfyw3imzn6gj9jjsfwc2bb8lq";
+        };
+      };
+    };
+    "phpunit/php-timer" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpunit-php-timer-5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2";
+          sha256 = "0g1g7yy4zk1bidyh165fsbqx5y8f1c8pxikvcahzlfsr9p2qxk6a";
+        };
+      };
+    };
+    "phpunit/phpunit" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "phpunit-phpunit-c73c6737305e779771147af66c96ca6a7ed8a741";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741";
+          sha256 = "1j7iz17jpf69ijidylsavqxn67qf3n8xvs8g9gk6wkl4z6db7gc7";
+        };
+      };
+    };
+    "sebastian/cli-parser" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-cli-parser-442e7c7e687e42adc03470c7b668bc4b2402c0b2";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2";
+          sha256 = "074qzdq19k9x4svhq3nak5h348xska56v1sqnhk1aj0jnrx02h37";
+        };
+      };
+    };
+    "sebastian/code-unit" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-code-unit-1fc9f64c0927627ef78ba436c9b17d967e68e120";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120";
+          sha256 = "04vlx050rrd54mxal7d93pz4119pas17w3gg5h532anfxjw8j7pm";
+        };
+      };
+    };
+    "sebastian/code-unit-reverse-lookup" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-code-unit-reverse-lookup-ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5";
+          sha256 = "1h1jbzz3zak19qi4mab2yd0ddblpz7p000jfyxfwd2ds0gmrnsja";
+        };
+      };
+    };
+    "sebastian/comparator" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-comparator-55f4261989e546dc112258c7a75935a81a7ce382";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382";
+          sha256 = "1d4bgf4m2x0kn3nw9hbb45asbx22lsp9vxl74rp1yl3sj2vk9sch";
+        };
+      };
+    };
+    "sebastian/complexity" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-complexity-739b35e53379900cc9ac327b2147867b8b6efd88";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88";
+          sha256 = "1y4yz8n8hszbhinf9ipx3pqyvgm7gz0krgyn19z0097yq3bbq8yf";
+        };
+      };
+    };
+    "sebastian/diff" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-diff-3461e3fccc7cfdfc2720be910d3bd73c69be590d";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d";
+          sha256 = "0967nl6cdnr0v0z83w4xy59agn60kfv8gb41aw3fpy1n2wpp62dj";
+        };
+      };
+    };
+    "sebastian/environment" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-environment-388b6ced16caa751030f6a69e588299fa09200ac";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac";
+          sha256 = "022vn8zss3sm7hg83kg3y0lmjw2ak6cy64b584nbsgxfhlmf6msd";
+        };
+      };
+    };
+    "sebastian/exporter" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-exporter-d89cc98761b8cb5a1a235a6b703ae50d34080e65";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65";
+          sha256 = "1s8v0cbcjdb0wvwyh869y5f8d55mpjkr0f3gg2kvvxk3wh8nvvc7";
+        };
+      };
+    };
+    "sebastian/global-state" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-global-state-a90ccbddffa067b51f574dea6eb25d5680839455";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455";
+          sha256 = "0pad9gz2y38rziywdliylhhgz6762053pm57254xf7hywfpqsa3a";
+        };
+      };
+    };
+    "sebastian/lines-of-code" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-lines-of-code-c1c2e997aa3146983ed888ad08b15470a2e22ecc";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc";
+          sha256 = "0fay9s5cm16gbwr7qjihwrzxn7sikiwba0gvda16xng903argbk0";
+        };
+      };
+    };
+    "sebastian/object-enumerator" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-object-enumerator-5c9eeac41b290a3712d88851518825ad78f45c71";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71";
+          sha256 = "11853z07w8h1a67wsjy3a6ir5x7khgx6iw5bmrkhjkiyvandqcn1";
+        };
+      };
+    };
+    "sebastian/object-reflector" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-object-reflector-b4f479ebdbf63ac605d183ece17d8d7fe49c15c7";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7";
+          sha256 = "0g5m1fswy6wlf300x1vcipjdljmd3vh05hjqhqfc91byrjbk4rsg";
+        };
+      };
+    };
+    "sebastian/recursion-context" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-recursion-context-cd9d8cf3c5804de4341c283ed787f099f5506172";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172";
+          sha256 = "1k0ki1krwq6329vsbw3515wsyg8a7n2l83lk19pdc12i2lg9nhpy";
+        };
+      };
+    };
+    "sebastian/resource-operations" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-resource-operations-0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8";
+          sha256 = "0p5s8rp7mrhw20yz5wx1i4k8ywf0h0ximcqan39n9qnma1dlnbyr";
+        };
+      };
+    };
+    "sebastian/type" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-type-81cd61ab7bbf2de744aba0ea61fae32f721df3d2";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2";
+          sha256 = "0mar746dr79v1phlfhv5k6kk10615yc0vz6afnmr6r36irqdazya";
+        };
+      };
+    };
+    "sebastian/version" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "sebastian-version-c6c1022351a901512170118436c764e473f6de8c";
+        src = fetchurl {
+          url = "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c";
+          sha256 = "1bs7bwa9m0fin1zdk7vqy5lxzlfa9la90lkl27sn0wr00m745ig1";
+        };
+      };
+    };
+    "symfony/debug" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-debug-45b2136377cca5f10af858968d6079a482bca473";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/debug/zipball/45b2136377cca5f10af858968d6079a482bca473";
+          sha256 = "0p7g2mwrvg8x264kl9kn7a23adnqxh66jy1kjczq5c5xlpw2rxdb";
+        };
+      };
+    };
+    "symfony/dom-crawler" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "symfony-dom-crawler-8d5201206ded6f37de475b041a11bfaf3ac73d5e";
+        src = fetchurl {
+          url = "https://api.github.com/repos/symfony/dom-crawler/zipball/8d5201206ded6f37de475b041a11bfaf3ac73d5e";
+          sha256 = "1zi24lncfng4rmcimp5q88jjjkkqd69qg771irn3dvzwdg7pjdjr";
+        };
+      };
+    };
+    "theseer/tokenizer" = {
+      targetDir = "";
+      src = composerEnv.buildZipPackage {
+        name = "theseer-tokenizer-75a63c33a8577608444246075ea0af0d052e452a";
+        src = fetchurl {
+          url = "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a";
+          sha256 = "1cj1lb99hccsnwkq0i01mlcldmy1kxwcksfvgq6vfx8mgz3iicij";
+        };
+      };
+    };
+  };
+}
diff --git a/modules/private/websites/christophe_carpentier/agorakit/sort_groups.patch b/modules/private/websites/christophe_carpentier/agorakit/sort_groups.patch
new file mode 100644 (file)
index 0000000..ce66bda
--- /dev/null
@@ -0,0 +1,52 @@
+diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php
+index a9fd4c74..7a07bd64 100644
+--- a/app/Http/Controllers/DashboardController.php
++++ b/app/Http/Controllers/DashboardController.php
+@@ -83,9 +83,9 @@ class DashboardController extends Controller
+             $groups = $groups->with('tags', 'users', 'actions', 'discussions')
+                 ->orderBy('status', 'desc')
+-                ->orderBy('updated_at', 'desc');
++                ->orderBy('name', 'asc');
+-            $groups = $groups->paginate(20)->appends(request()->query());
++            $groups = $groups->paginate(40)->appends(request()->query());
+             
+diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php
+index 13c5cfa4..9acc7af8 100644
+--- a/app/Http/Controllers/GroupController.php
++++ b/app/Http/Controllers/GroupController.php
+@@ -27,7 +27,7 @@ class GroupController extends Controller
+         $groups = $groups->with('tags', 'users', 'actions', 'discussions')
+             ->orderBy('status', 'desc')
+-            ->orderBy('updated_at', 'desc');
++            ->orderBy('name', 'asc');
+         if (Auth::check()) {
+             $groups = $groups->with('membership');
+@@ -37,7 +37,7 @@ class GroupController extends Controller
+             $groups = $groups->search($request->get('search'));
+         }
+-        $groups = $groups->paginate(20)->appends(request()->query());
++        $groups = $groups->paginate(40)->appends(request()->query());
+         return view('dashboard.groups')
+             ->with('tab', 'groups')
+diff --git a/resources/views/actions/create.blade.php b/resources/views/actions/create.blade.php
+index 987db39e..740b833e 100644
+--- a/resources/views/actions/create.blade.php
++++ b/resources/views/actions/create.blade.php
+@@ -36,7 +36,7 @@
+             {!! Form::close() !!}
+         @else
+-            {!! Form::model($action, array('action' => ['GroupActionController@store', $group])) !!}
++            {!! Form::open(array('route' => ['groups.actions.store', $group])) !!}
+             @include('actions.form')
+
diff --git a/modules/private/websites/christophe_carpentier/website.nix b/modules/private/websites/christophe_carpentier/website.nix
new file mode 100644 (file)
index 0000000..73dfea3
--- /dev/null
@@ -0,0 +1,60 @@
+{ lib, config, pkgs, ... }:
+let
+  cfg = config.myServices.websites.christophe_carpentier.website;
+  varDir = "/var/lib/ftp/christophe_carpentier/website";
+  apacheUser = config.services.httpd.Inte.user;
+  apacheGroup = config.services.httpd.Inte.group;
+in {
+  options.myServices.websites.christophe_carpentier.website.enable = lib.mkEnableOption "enable Christophe Carpentier's website";
+
+  config = lib.mkIf cfg.enable {
+    system.activationScripts.christophe_carpentier_website = {
+      deps = [ "httpd" "users" ];
+      text = ''
+        install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${varDir}
+        install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/php/sessions/christophe_carpentier
+      '';
+    };
+    services.phpfpm.pools.christophe_carpentier_website = {
+      user = apacheUser;
+      group = apacheGroup;
+      settings = {
+        "listen.owner" = apacheUser;
+        "listen.group" = apacheGroup;
+
+        "pm" = "ondemand";
+        "pm.max_children" = "5";
+        "pm.process_idle_timeout" = "60";
+
+        "php_admin_value[open_basedir]" = "/var/lib/php/sessions/christophe_carpentier:${varDir}:/tmp";
+        "php_admin_value[session.save_path]" = "/var/lib/php/sessions/christophe_carpentier";
+      };
+      phpOptions = config.services.phpfpm.phpOptions + ''
+        disable_functions = "mail"
+      '';
+      phpPackage = pkgs.php72;
+    };
+    services.websites.env.production.modules = [ "proxy_fcgi" ];
+    services.websites.env.integration.vhostConfs.christophe_carpentier_website = {
+      certName     = "integration";
+      addToCerts   = true;
+      hosts        = ["www.cc.immae.dev" "cc.immae.dev"];
+      root         = varDir;
+      extraConfig  = [
+        ''
+        <FilesMatch "\.php$">
+          SetHandler "proxy:unix:${config.services.phpfpm.pools.christophe_carpentier_website.socket}|fcgi://localhost"
+        </FilesMatch>
+
+        <Directory ${varDir}>
+          DirectoryIndex index.php index.htm index.html
+          Options Indexes FollowSymLinks MultiViews Includes
+          AllowOverride All
+          Require all granted
+        </Directory>
+          ''
+      ];
+    };
+  };
+}
+
index fde459e5a08ea250802b1bd609105a711a8f632a..34e4bf2fb599e6ee4aaa7f6296a97e98744b4289 100644 (file)
@@ -221,6 +221,12 @@ in
         production.enable = true;
       };
 
+      christophe_carpentier = {
+        website.enable = true;
+        agorakit.enable = true;
+        agora-project.enable = true;
+      };
+
       cip-ca = {
         sympa.enable = true;
       };
index 44163de71d80d0fb1e9524513acf2442709acbaa..134d1bcded9f52782de2fb5f548bc0b8f6bf9942 100644 (file)
@@ -2,7 +2,7 @@
 let
   nextcloud = pkgs.webapps.nextcloud.withApps (a: [
     a.apporder a.audioplayer a.bookmarks a.calendar a.carnet a.contacts
-    a.cookbook a.deck a.extract a.files_markdown a.files_readmemd
+    a.cookbook a.deck a.extract a.files_markdown a.files_readmemd a.files_mindmap
     a.flowupload a.gpxedit a.gpxpod a.keeweb a.maps a.metadata a.music
     a.notes a.ocsms a.passman a.polls a.spreed a.tasks
   ]);
diff --git a/pkgs/webapps/nextcloud/apps/files_mindmap.nix b/pkgs/webapps/nextcloud/apps/files_mindmap.nix
new file mode 100644 (file)
index 0000000..e347053
--- /dev/null
@@ -0,0 +1,13 @@
+{ buildApp, nextcloudVersion }:
+assert nextcloudVersion >= 14 && nextcloudVersion <= 21;
+buildApp rec {
+  appName = "files_mindmap";
+  version = "0.0.24";
+  url = "https://github.com/ACTom/${appName}/releases/download/v${version}/${appName}-${version}.tar.gz";
+  sha256 = "1cd6lq8z7k2h5dnj58qrxfs7l5pw3qw2w8r5r90r7an8v215gv2p";
+  installHook = self: ''
+    # https://github.com/ACTom/files_mindmap/issues/122
+    ln -s ${self}/img/mindmap.svg $out/core/img/filetypes/
+  '';
+}
+
index 5017fd23b392b8dfdfb5ddd3cde60b7292c80211..1b011697eeb8f8a8223f007268f8ec2bfdf97c03 100644 (file)
@@ -2,14 +2,14 @@
 let
   appNames = [
     "apporder" "audioplayer" "bookmarks" "calendar" "carnet" "circles"
-    "contacts" "cookbook" "deck" "extract" "files_markdown"
+    "contacts" "cookbook" "deck" "extract" "files_markdown" "files_mindmap"
     "files_readmemd" "flowupload" "gpxedit" "gpxpod" "impersonate"
     "keeweb" "maps" "metadata" "music" "notes" "ocsms" "passman" "polls"
     "spreed" "social" "tasks"
   ];
   allApps = lib.attrsets.genAttrs appNames
     (name: callPackage (./apps + "/${name}.nix") { inherit buildApp nextcloudVersion; });
-  buildApp = { appName, version, url, sha256, zip ? false, otherConfig ? {}, installPhase ? "mkdir -p $out && cp -R . $out/" }:
+  buildApp = { appName, version, url, sha256, zip ? false, installHook ? (n: ""), otherConfig ? {}, installPhase ? "mkdir -p $out && cp -R . $out/" }:
     stdenv.mkDerivation rec {
       name = "nextcloud-app-${appName}-${version}";
       inherit version;
@@ -17,7 +17,7 @@ let
       inherit installPhase;
       src = (if zip then fetchzip else fetchurl) { inherit url sha256; };
       passthru = {
-        inherit appName otherConfig;
+        inherit appName otherConfig installHook;
       };
     };
   toPassthru = pkg: apps: otherConfig: {
@@ -29,7 +29,7 @@ let
       apps = toApps allApps;
       toInstallApp = n: ''
         ln -sf ${n} $out/apps/${n.appName}
-      '';
+      '' + (n.installHook n);
       zipped = lib.attrsets.zipAttrs ([pkg.otherConfig or {}] ++ map (v: v.otherConfig) apps);
       appConfigs = with lib.attrsets; with lib.lists; {
         mimetypealiases = foldr (h: prev: prev // h) {} (zipped.mimetypealiases or []);