Hi there! I’m trying to make php and composer work. I have this in environment.systemPackages:

    (pkgs.php82.buildEnv {
      extensions = ({ enabled, all }: enabled ++ (with all; [
        xdebug
        redis
      ]));
      extraConfig = ''
        memory_limit=2G
        xdebug.mode=debug
      '';
    })
    php82Extensions.redis

The problem is that while running php -m correctly prints that redis extension is installed, composer does not, because it uses a different php:

  • file $(which php) prints the path /nix/store/igx8j4qjxy9jyj8kjyccwarnzqq5vsml-php-with-extensions-8.2.9/bin/php
  • cat $(which composer) shows that it’s a wrapper for '/nix/store/lv4prxa52zifr54ws56iz3b9kdhs1b5w-php-with-extensions-8.2.9/bin/php' --add-flags '/nix/store/avqj0662f4gg2s875zlbbjajx6fm6bl0-php-composer-2.5.5/libexec/composer/composer.phar'

Note that the path to php is different. Is there any way to correct it on my side? I’d like to avoid having to install composer manually

  • @aanderse
    link
    English
    110 months ago

    This is what you want in your configuration.nix:

    { config, pkgs, lib, ... }:
    let
       custom-php = pkgs.php82.buildEnv {
          extensions = ({ enabled, all }: enabled ++ (with all; [
            xdebug
            redis
          ]));
          extraConfig = ''
            memory_limit=2G
            xdebug.mode=debug
          '';
        };
    in
    {
      environment.systemPackages = [
        custom-php
        custom-php.packages.composer
      ];
    }
    

    Let me know how that works out for you.

    • Rikudou_SageOP
      link
      fedilink
      English
      110 months ago

      That worked! Thank you! How did you know how to solve it?

      • @aanderse
        link
        English
        210 months ago

        I’m in the NixOS php maintainers team.

          • @aanderse
            link
            English
            110 months ago

            Looks like you almost had it figured out. composer belongs to the phpPackages set, an alias for php.packages, and any package under that set should use the php package you specify. This way you can customize the php configuration for various programs.

            And how could I find out something like this?

            I briefly looked at the documentation and I’m not sure that this is specifically mentioned. Unless I missed it this would be nice to add to our documentation.