Compare commits

..

No commits in common. "master" and "1.0.1" have entirely different histories.

2 changed files with 32 additions and 117 deletions

View file

@ -1,40 +1,13 @@
# Vegvisir installer # Vegvisir installer
Run this script from a git repository to automatically install and configure Vegvisir as a git submodule to your project. This script will automatically install and configure Vegvisir from in a fresh git repository.
> [!IMPORTANT] ## Important
> The script will only run in environments with Bash and `coreutils` installed (for now). The script will only run on Linux environments with `coreutils` installed (for now).
# Get started # Get started
1. Create a git repository for your project. 1. Create a repository for your website
2. Run this command from the root directory of your local repository. 2. Run this command from the root directory of your local repository
```sh ```sh
curl -fsSL https://codeberg.org/vegvisir/install/raw/branch/master/install.sh | bash curl -fsSL https://href.vlw.se/vegvisir/install | bash
``` ```
# Arguments
You can pass optional named arguments to this script for headless installation of Vegvisir.
### `--install` - Don't install, only configure Vegvisir
```sh
./install.sh --install=n
```
Pass `--install=n` to prevent download and installation of the Vegvisir git submodule. Use this option if you're version controlling Vegvisir from your project repository.
### `--dir` - Installation directory
```sh
./install.sh --dir="/path/to/project"
```
Pass a `--dir` argument with a value of a directory Vegvisir should consider its [`root_path`](https://vegvisir.vlw.se/docs/Reference/Env#root_path).
### `--overwrite` - Overwrite configuration files
```sh
./install.sh --overwrite=y
```
Pass `--overwrite=y` to replace existing Vegvisir configuration files.
### `--example` - Generate example website
```sh
./install.sh --example=n
```
Pass `--overwrite=n` to disable generation of an example website after installation.

View file

@ -1,11 +1,7 @@
#!/bin/bash #!/bin/bash
# Initialize variables # Get the current working directory
cwd="" cwd=$(pwd)
dir=""
install=""
example=""
overwrite=""
echo_err() { echo_err() {
echo "!! -> $1" echo "!! -> $1"
@ -13,7 +9,7 @@ echo_err() {
# Bail out from an error with a message asking the user to report the incident # Bail out from an error with a message asking the user to report the incident
exit_report() { exit_report() {
echo_err "Please report this error at: https://codeberg.org/vegvisir/install/issues" echo_err "Please report error at: https://codeberg.org/vegvisir/install/issues"
exit 1 exit 1
} }
@ -29,7 +25,7 @@ check_sys_depend() {
fi fi
done done
# Bail out if any required package is missing # Bail out if required packages are missing
if [ "$valid" = false ] ; then if [ "$valid" = false ] ; then
exit 1 exit 1
fi fi
@ -37,19 +33,16 @@ check_sys_depend() {
install_vegvisir() { install_vegvisir() {
if ! [ -d ".git" ] ; then if ! [ -d ".git" ] ; then
echo_err "Installation aborted: '$cwd' is not a git repository" echo_err "Not in a git repository"
exit 1 exit 1
fi fi
# Download and install the Vegvisir repository
if [[ "$install" != "n" ]]; then
if ! [ -d "vegvisir" ] ; then if ! [ -d "vegvisir" ] ; then
git submodule add https://codeberg.org/vegvisir/vegvisir git submodule add https://codeberg.org/vegvisir/vegvisir
fi fi
# Update submodules # Update submodules
git submodule update --init --recursive git submodule update --init --recursive
fi
# Install dependencies with composer # Install dependencies with composer
(cd vegvisir && composer install --classmap-authoritative) (cd vegvisir && composer install --classmap-authoritative)
@ -57,15 +50,8 @@ install_vegvisir() {
# Bail out if composer didn't create a vendor folder # Bail out if composer didn't create a vendor folder
if ! [ -d "vegvisir/vendor" ] ; then if ! [ -d "vegvisir/vendor" ] ; then
echo_err "Something went wrong with the installation." echo_err "Something went wrong with the installation."
# Script was not run with the install flag disabled, this is probably a bug
if [[ "$install" != "n" ]]; then
exit_report exit_report
fi fi
echo_err "Make sure you have cloned the Vegvisir repository. Or run without '--install=n'."
exit 1
fi
} }
configure_vegvisir() { configure_vegvisir() {
@ -75,14 +61,12 @@ configure_vegvisir() {
fi fi
# A configuration file already exists # A configuration file already exists
if [[ -f "vegvisir/.env.ini" ]] ; then if [ -f "vegvisir/.env.ini" ] ; then
if ! [[ -n "$overwrite" ]]; then
echo "A Vegvisir configuration file already exists at: ${cwd}/vegvisir/.env.ini" echo "A Vegvisir configuration file already exists at: ${cwd}/vegvisir/.env.ini"
read -p "Do you want to overwrite this file? (y/n): " overwrite </dev/tty read -p "Do you want to overwrite this file? (y/n): " choice </dev/tty
fi
# Check the user's response # Check the user's response
if [[ "$overwrite" == "y" || "$overwrite" == "Y" ]] ; then if [[ "$choice" == "y" || "$choice" == "Y" ]] ; then
echo "Removing existing Vegvisir configuration and proceeding with the installation in ${cwd}..." echo "Removing existing Vegvisir configuration and proceeding with the installation in ${cwd}..."
rm vegvisir/.env.ini rm vegvisir/.env.ini
else else
@ -97,6 +81,8 @@ configure_vegvisir() {
"root_path = '${cwd}'" "root_path = '${cwd}'"
"shell_page = 'public/shell'" "shell_page = 'public/shell'"
"public_path = 'public/'" "public_path = 'public/'"
"worker_magic_pathname = '/__vvnavwrkr'"
"rfc_4288_url = 'https://raw.githubusercontent.com/apache/httpd/refs/heads/trunk/docs/conf/mime.types'"
) )
for line in "${config[@]}" ; do for line in "${config[@]}" ; do
@ -166,72 +152,28 @@ generate_example_website() {
} }
main() { main() {
# Get the current working directory
cwd=$(pwd)
check_sys_depend check_sys_depend
install_vegvisir install_vegvisir
configure_vegvisir configure_vegvisir
echo "Vegvisir has been sucessfully installed." echo "Vegvisir has been sucessfully installed."
if [[ "$example" != "n" ]]; then
read -p "Do you want to generate a simple example website to start from? (y/n): " choice </dev/tty read -p "Do you want to generate a simple example website to start from? (y/n): " choice </dev/tty
# Check the user's response # Check the user's response
if [[ "$choice" == "y" || "$choice" == "Y" ]] ; then if [[ "$choice" == "y" || "$choice" == "Y" ]] ; then
generate_example_website generate_example_website
fi fi
fi
echo "Done! Thank you for choosing Vegvisir :)" echo "Done! Thank you for choosing Vegvisir :)"
exit 0
} }
# Loop through all arguments
for arg in "$@"; do
case $arg in
--dir=*)
dir="${arg#*=}"
;;
--install=*)
install="${arg#*=}"
;;
--overwrite=*)
overwrite="${arg#*=}"
;;
--example=*)
example="${arg#*=}"
;;
*)
echo_err "Unknown argument: $arg"
;;
esac
done
# Start execution immediately if an install directory was passed
if [ -n "$dir" ]; then
if ! [ -d "$dir" ]; then
echo_err "Installation aborted: '$dir' is not a directory"
exit 1
fi
# Move to install directory and run main
cd $dir
main
fi
# Prompt the user for confirmation # Prompt the user for confirmation
echo "You are currently in: $(pwd)" echo "You are currently in: ${cwd}"
read -p "Do you want to proceed with the installation in this directory? (y/n): " choice </dev/tty read -p "Do you want to proceed with the installation in this directory? (y/n): " choice </dev/tty
# Check the user's response # Check the user's response
if [[ "$choice" == "y" || "$choice" == "Y" ]] ; then if [[ "$choice" == "y" || "$choice" == "Y" ]] ; then
echo "Proceeding with the installation in $(pwd)..." echo "Proceeding with the installation in ${cwd}..."
main main
else else
echo "Installation aborted." echo "Installation aborted."