mirror of
https://github.com/basecamp/omarchy.git
synced 2026-02-17 15:25:37 +00:00
While working in a non-trivial feature, debugging support was needed.
Since Xdebug is the official PHP debugger, is available in Arch's
official repositories, and is trivial to configure, it makes sense to
include it in the PHP development environment.
This addition improves the overall development experience for PHP
developers by enabling easier inspection and troubleshooting.
With this PR, the debugger now shows up an enabled extension:
```
$ php -v
PHP 8.4.12 (cli) (built: Aug 27 2025 06:23:40) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.12, Copyright (c) Zend Technologies
with Xdebug v3.4.4, Copyright (c) 2002-2025, by Derick Rethans
```
135 lines
3.3 KiB
Bash
Executable File
135 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if [[ -z "$1" ]]; then
|
|
echo "Usage: omarchy-install-dev-env <ruby|node|bun|go|laravel|symfony|php|python|elixir|phoenix|rust|java|ocaml|dotnet>" >&2
|
|
exit 1
|
|
fi
|
|
|
|
install_php() {
|
|
sudo pacman -S php composer php-sqlite xdebug --noconfirm
|
|
|
|
# Install Path for Composer
|
|
if [[ ":$PATH:" != *":$HOME/.config/composer/vendor/bin:"* ]]; then
|
|
echo 'export PATH="$HOME/.config/composer/vendor/bin:$PATH"' >>"$HOME/.bashrc"
|
|
source "$HOME/.bashrc"
|
|
echo "Added Composer global bin directory to PATH."
|
|
else
|
|
echo "Composer global bin directory already in PATH."
|
|
fi
|
|
|
|
# Enable some extensions
|
|
local php_ini_path="/etc/php/php.ini"
|
|
local extensions_to_enable=(
|
|
"bcmath"
|
|
"intl"
|
|
"iconv"
|
|
"openssl"
|
|
"pdo_sqlite"
|
|
"pdo_mysql"
|
|
)
|
|
|
|
# Enable Xdebug
|
|
sudo sed -i \
|
|
-e 's/^;zend_extension=xdebug.so/zend_extension=xdebug.so/' \
|
|
-e 's/^;xdebug.mode=debug/xdebug.mode=debug/' \
|
|
/etc/php/conf.d/xdebug.ini
|
|
|
|
for ext in "${extensions_to_enable[@]}"; do
|
|
sudo sed -i "s/^;extension=${ext}/extension=${ext}/" "$php_ini_path"
|
|
done
|
|
}
|
|
|
|
install_node() {
|
|
echo -e "Installing Node.js...\n"
|
|
mise use --global node@lts
|
|
}
|
|
|
|
case "$1" in
|
|
ruby)
|
|
echo -e "Installing Ruby on Rails...\n"
|
|
mise use --global ruby@latest
|
|
mise settings add idiomatic_version_file_enable_tools ruby
|
|
mise x ruby -- gem install rails --no-document
|
|
echo -e "\nYou can now run: rails new myproject"
|
|
;;
|
|
node)
|
|
install_node
|
|
;;
|
|
bun)
|
|
echo -e "Installing Bun...\n"
|
|
mise use -g bun@latest
|
|
;;
|
|
deno)
|
|
echo -e "Installing Deno...\n"
|
|
mise use -g deno@latest
|
|
;;
|
|
go)
|
|
echo -e "Installing Go...\n"
|
|
mise use --global go@latest
|
|
;;
|
|
php)
|
|
echo -e "Installing PHP...\n"
|
|
install_php
|
|
;;
|
|
laravel)
|
|
echo -e "Installing PHP and Laravel...\n"
|
|
install_php
|
|
install_node
|
|
composer global require laravel/installer
|
|
echo -e "\nYou can now run: laravel new myproject"
|
|
;;
|
|
symfony)
|
|
echo -e "Installing PHP and Symfony...\n"
|
|
install_php
|
|
omarchy-pkg-add symfony-cli
|
|
echo -e "\nYou can now run: symfony new --webapp myproject"
|
|
;;
|
|
python)
|
|
echo -e "Installing Python...\n"
|
|
mise use --global python@latest
|
|
echo -e "\nInstalling uv...\n"
|
|
curl -fsSL https://astral.sh/uv/install.sh | sh
|
|
;;
|
|
elixir)
|
|
echo -e "Installing Elixir...\n"
|
|
mise use --global erlang@latest
|
|
mise use --global elixir@latest
|
|
mise x elixir -- mix local.hex --force
|
|
;;
|
|
phoenix)
|
|
echo -e "Installing Phoenix Framework...\n"
|
|
# Ensure Erlang/Elixir first
|
|
mise use --global erlang@latest
|
|
mise use --global elixir@latest
|
|
# Hex & Rebar
|
|
mise x elixir -- mix local.hex --force
|
|
mise x elixir -- mix local.rebar --force
|
|
# Phoenix project (phx_new)
|
|
mise x elixir -- mix archive.install hex phx_new --force
|
|
echo -e "\nYou can now run: mix phx.new my_app"
|
|
;;
|
|
rust)
|
|
echo -e "Installing Rust...\n"
|
|
bash -c "$(curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs)" -- -y
|
|
;;
|
|
java)
|
|
echo -e "Installing Java...\n"
|
|
mise use --global java@latest
|
|
;;
|
|
zig)
|
|
echo -e "Installing Zig...\n"
|
|
mise use --global zig@latest
|
|
;;
|
|
ocaml)
|
|
echo -e "Installing OCaml...\n"
|
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)"
|
|
opam init --yes
|
|
eval "$(opam env)"
|
|
opam install ocaml-lsp-server odoc ocamlformat utop --yes
|
|
;;
|
|
dotnet)
|
|
echo -e "Installing .NET...\n"
|
|
mise use --global dotnet@latest
|
|
;;
|
|
esac
|