#!/bin/bash if [[ -z "$1" ]]; then echo "Usage: omarchy-install-dev-env " >&2 exit 1 fi install_php() { yay -Sy php composer php-sqlite --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" ) for ext in "${extensions_to_enable[@]}"; do sudo sed -i "s/^;extension=${ext}/extension=${ext}/" "$php_ini_path" done } 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) echo -e "Installing Node.js...\n" mise use --global node@lts ;; 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 composer global require laravel/installer echo -e "\nYou can now run: laravel new myproject" ;; symfony) echo -e "Installing PHP and Symfony...\n" install_php yay -S symfony-cli --noconfirm 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 "\n Phoenix installed. Create a project with:\n mix phx.new my_app\n" echo -e "Tip: Inside the project you can run:\n mix deps.get\n mix ecto.create # if using a DB\n mix phx.server\n" ;; 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