feat: implement modular foundation and core system services

- Update flake.nix with 25.11 release and core inputs
- Add dedicated modules for audio (Pipewire), bluetooth, and networking
- Update GEMINI.md with the new Modular Merging Architecture blueprint
- Configure graphical installer ISO and test VM outputs
This commit is contained in:
Bernardo Magri
2026-04-03 21:06:42 +01:00
parent 33deeb494b
commit 29cc0d2547
49 changed files with 1628 additions and 855 deletions

View File

@@ -1,6 +1,7 @@
#!/bin/bash
#!/usr/bin/env bash
# Install one of the supported development environments. Usually called via Install > Development > * in the Nomarchy Menu.
# Install one of the supported development environments declaratively.
# Usually called via Install > Development > * in the Nomarchy Menu.
if [[ -z $1 ]]; then
echo "Usage: nomarchy-install-dev-env <ruby|node|bun|deno|go|laravel|symfony|php|python|elixir|phoenix|rust|java|zig|ocaml|dotnet|clojure|scala>" >&2
@@ -8,144 +9,78 @@ if [[ -z $1 ]]; then
fi
install_php() {
nomarchy-pkg-add php composer php-sqlite xdebug
# 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
echo -e "Installing PHP environment declaratively...\n"
nomarchy-pkg-add php
nomarchy-pkg-add phpExtensions.bcmath
nomarchy-pkg-add phpExtensions.intl
nomarchy-pkg-add phpExtensions.iconv
nomarchy-pkg-add phpExtensions.openssl
nomarchy-pkg-add phpExtensions.pdo_sqlite
nomarchy-pkg-add phpExtensions.pdo_mysql
nomarchy-pkg-add phpPackages.composer
echo -e "\nPHP environment added to your packages."
}
install_node() {
echo -e "Installing Node.js...\n"
echo -e "Installing Node.js with mise...\n"
mise use --global node
}
case "$1" in
ruby)
echo -e "Installing Ruby on Rails...\n"
echo -e "Installing Ruby with mise...\n"
nomarchy-pkg-add libyaml
mise settings add ruby.compile false
mise settings add idiomatic_version_file_enable_tools ruby
mise use --global ruby@latest
echo "gem: --no-document" >~/.gemrc
mise x ruby -- gem install rails --no-document
echo -e "\nYou can now run: rails new myproject"
echo -e "\nYou can now use: ruby --version"
;;
node)
install_node
;;
bun)
echo -e "Installing Bun...\n"
echo -e "Installing Bun with mise...\n"
mise use -g bun@latest
;;
deno)
echo -e "Installing Deno...\n"
echo -e "Installing Deno with mise...\n"
mise use -g deno@latest
;;
go)
echo -e "Installing Go...\n"
echo -e "Installing Go with mise...\n"
mise use --global go@latest
;;
php)
echo -e "Installing PHP...\n"
install_php
;;
laravel)
echo -e "Installing PHP and Laravel...\n"
echo -e "Installing Laravel stack...\n"
install_php
install_node
# Composer global packages are imperative, but that's how they work.
composer global require laravel/installer
echo -e "\nYou can now run: laravel new myproject"
;;
symfony)
echo -e "Installing PHP and Symfony...\n"
install_php
nomarchy-pkg-add symfony-cli
echo -e "\nYou can now run: symfony new --webapp myproject"
;;
python)
echo -e "Installing Python...\n"
echo -e "Installing Python with mise...\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"
# uv can be installed via nix
nomarchy-pkg-add uv
;;
rust)
echo -e "Installing Rust...\n"
bash -c "$(curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs)" -- -y
echo -e "Installing Rust declaratively...\n"
# Instead of shell script from website, use nixpkgs
nomarchy-pkg-add rustup
rustup-init -y
;;
java)
echo -e "Installing Java...\n"
mise use --global java@latest
;;
zig)
echo -e "Installing Zig...\n"
mise use --global zig@latest
mise use -g zls@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
;;
clojure)
echo -e "Installing Clojure...\n"
nomarchy-pkg-add rlwrap
mise use --global clojure@latest
;;
scala)
echo -e "Installing Scala...\n"
mise use --global java@latest
mise use --global scala@latest
mise use --global scala-cli@latest
# Add more language cases as needed, utilizing mise or nixpkgs.
*)
# Fallback to mise for languages that it supports
echo -e "Installing $1 with mise...\n"
if mise use --global "$1@latest"; then
echo "$1 installed successfully."
else
echo "Unsupported language: $1"
exit 1
fi
;;
esac