{ description = "Webdev flake"; inputs.nixpkgs.url = "github:NixOS/nixpkgs"; inputs.flake-utils.url = "github:numtide/flake-utils?rev=a4b154ebbdc88c8498a5c7b01589addc9e9cb678"; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; inputs = with pkgs; [ nodejs nodePackages.npm nodePackages.yarn git gnupg vim less openssh ]; mkPhp = pkg: let php = pkg.buildEnv { extensions = { enabled, all }: enabled ++ [ all.imagick all.redis ]; extraConfig = "memory_limit = 2G"; }; in [ php php.packages.composer ]; devShell = config: pkgs.mkShell { shellHook = '' cd $DEVSHELL_OLDPWD exec bwbox --profile dev zsh ''; } // config; in { devShells = { php74 = devShell { buildInputs = inputs ++ (mkPhp pkgs.php74); }; php80 = devShell { buildInputs = inputs ++ (mkPhp pkgs.php80); }; php81 = devShell { buildInputs = inputs ++ (mkPhp pkgs.php81); }; devops = devShell { buildInputs = with pkgs; inputs ++ [ ansible ]; }; ctf = devShell { buildInputs = let python = pkgs.python310.withPackages (p: with p; [ requests pip setuptools ]); in with pkgs; inputs ++ [ python curl ]; }; }; } ); }