diff --git a/pkgs/servers/grocy/config-locations.patch b/pkgs/servers/grocy/config-locations.patch new file mode 100644 index 00000000000..475be78ec20 --- /dev/null +++ b/pkgs/servers/grocy/config-locations.patch @@ -0,0 +1,61 @@ +diff --git a/app.php b/app.php +index 5f91e4d..09c6010 100644 +--- a/app.php ++++ b/app.php +@@ -23,7 +23,7 @@ else + require_once __DIR__ . '/vendor/autoload.php'; + + // Load config files +-require_once GROCY_DATAPATH . '/config.php'; ++require_once getenv('GROCY_CONFIG_FILE'); + require_once __DIR__ . '/config-dist.php'; // For not in own config defined values we use the default ones + + // Definitions for dev/demo/prerelease mode +@@ -49,7 +49,7 @@ $appContainer = new \Slim\Container([ + ], + 'view' => function($container) + { +- return new \Slim\Views\Blade(__DIR__ . '/views', GROCY_DATAPATH . '/viewcache'); ++ return new \Slim\Views\Blade(__DIR__ . '/views', getenv('GROCY_CACHE_DIR')); + }, + 'LoginControllerInstance' => function($container) + { +diff --git a/services/DatabaseService.php b/services/DatabaseService.php +index 0bcf9b8..ec45e93 100644 +--- a/services/DatabaseService.php ++++ b/services/DatabaseService.php +@@ -13,7 +13,7 @@ class DatabaseService + return GROCY_DATAPATH . '/grocy_' . GROCY_CULTURE . '.db'; + } + +- return GROCY_DATAPATH . '/grocy.db'; ++ return getenv('GROCY_DB_FILE'); + } + + private $DbConnectionRaw; +diff --git a/services/FilesService.php b/services/FilesService.php +index 7933b73..f52657e 100644 +--- a/services/FilesService.php ++++ b/services/FilesService.php +@@ -12,7 +12,7 @@ class FilesService extends BaseService + { + parent::__construct(); + +- $this->StoragePath = GROCY_DATAPATH . '/storage'; ++ $this->StoragePath = getenv('GROCY_STORAGE_DIR'); + + if (!file_exists($this->StoragePath)) + { +diff --git a/services/StockService.php b/services/StockService.php +index d7482ef..d1399a7 100644 +--- a/services/StockService.php ++++ b/services/StockService.php +@@ -933,7 +933,7 @@ class StockService extends BaseService + throw new \Exception('No barcode lookup plugin defined'); + } + +- $path = GROCY_DATAPATH . "/plugins/$pluginName.php"; ++ $path = getenv('GROCY_PLUGIN_DIR'); + if (file_exists($path)) + { + require_once $path; diff --git a/pkgs/servers/grocy/default.nix b/pkgs/servers/grocy/default.nix new file mode 100644 index 00000000000..7af59f6904c --- /dev/null +++ b/pkgs/servers/grocy/default.nix @@ -0,0 +1,32 @@ +{ stdenv, fetchurl, unzip }: + +stdenv.mkDerivation rec { + pname = "grocy"; + version = "2.6.0"; + + src = fetchurl { + url = "https://github.com/grocy/grocy/releases/download/v${version}/grocy_${version}.zip"; + sha256 = "1d4hy495in7p0i4fnhai1yqhjhmblv1g30siggmqpjrzdiiw3bak"; + }; + + nativeBuildInputs = [ unzip ]; + unpackPhase = '' + unzip ${src} -d . + ''; + + patches = [ ./config-locations.patch ]; + + dontBuild = true; + + installPhase = '' + mkdir -p $out/ + cp -R . $out/ + ''; + + meta = with stdenv.lib; { + license = licenses.mit; + maintainers = with maintainers; [ ma27 ]; + description = "ERP beyond your fridge - grocy is a web-based self-hosted groceries & household management solution for your home"; + homepage = "https://grocy.info/"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0c9b909a9d0..99c9006098f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5272,6 +5272,8 @@ in inherit (darwin.apple_sdk.frameworks) Security; }; + grocy = callPackage ../servers/grocy { }; + nextcloud = callPackage ../servers/nextcloud { }; nextcloud-client = libsForQt5.callPackage ../applications/networking/nextcloud-client { };