{ pkgs, pkgsUnstable, ... }: let extensions = with pkgs.vscode-extensions; [ ms-dotnettools.csharp ms-dotnettools.csdevkit ms-dotnettools.vscode-dotnet-runtime mkhl.direnv catppuccin.catppuccin-vsc bmewburn.vscode-intelephense-client continue.continue vue.volar ms-vscode-remote.remote-containers (pkgs.vscode-utils.buildVscodeMarketplaceExtension { mktplcRef = { publisher = "ryanluker"; name = "vscode-coverage-gutters"; version = "2.14.0"; # use the current version sha256 = "sha256-waF3FmncUsXqWFWGRy9X7RQ29BDRYlaqyFhEXg4HXNo"; }; }) (pkgs.vscode-utils.buildVscodeMarketplaceExtension { mktplcRef = { publisher = "laravel"; name = "vscode-laravel"; version = "1.7.0"; # use the current version sha256 = "sha256-5PVbv5hWIdsOHvYttnf2BPeqfPXsOVENrnRyiUf/Hlg="; }; }) (pkgs.vscode-utils.buildVscodeMarketplaceExtension { mktplcRef = { publisher = "amiralizadeh9480"; name = "laravel-extra-intellisense"; version = "0.7.4"; # use the current version sha256 = "sha256-EoyKm2YYfEZDmI1mqRU/SaNk0bNLPrWVINpIhglnL80="; }; }) (pkgs.vscode-utils.buildVscodeMarketplaceExtension { mktplcRef = { publisher = "recca0120"; name = "vscode-phpunit"; version = "3.9.40"; # use the current version sha256 = "sha256-EVyDT5aXu1KsGr8xrBQlIRCMOtiCyHgU7aDjl9d9ldY="; }; }) ]; userSettings = { "editor.lineNumbers" = "relative"; "workbench.colorTheme" = "Catppuccin Mocha"; "workbench.editor.enablePreview" = false; "direnv.restart.automatic" = true; "terminal.integrated.defaultProfile.linux" = "zsh"; "terminal.integrated.profiles.linux".zsh = { path = "${pkgs.zsh}/bin/zsh"; }; "coverage-gutters.coverageBaseDir" = "test-reports"; # PHPUnit "phpunit.command" = "docker compose exec laravel.test \${php} \${phpargs} \${phpunit} \${phpunitargs}"; "phpunit.phpunit" = "artisan test"; "phpunit.paths" = { "\${workspaceFolder}" = "/var/www/html"; }; }; editors = { vscode = pkgsUnstable.vscode.fhs; cursor = pkgsUnstable.code-cursor-fhs; vscodium = pkgsUnstable.vscodium-fhs; }; mkEditor = package: { enable = true; inherit package; profiles.default = { inherit extensions; inherit userSettings; }; }; in { programs = builtins.mapAttrs (_: mkEditor) editors; }