From 154356fe38d79835cf3fb28aba213827e21de72b Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sat, 18 Jan 2025 12:25:22 +0200 Subject: feat: Add nix setup for MySQL --- shell.nix | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 shell.nix (limited to 'shell.nix') diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..0f0b24a --- /dev/null +++ b/shell.nix @@ -0,0 +1,89 @@ +{ pkgs ? import {} }: +let + + shellDrv = + { + mkShell, + mariadb, + apacheHttpd, + ... + }: + mkShell { + nativeBuildInputs = [ + mariadb + apacheHttpd + ]; + + # Thanks https://github.com/JianZcar/LAMP-nix-shell-env/blob/main/default.nix + shellHook = '' + : ''${MYSQL_HOME:="$HOME/.config/mysql"} + : ''${MYSQL_DATADIR:="$MYSQL_HOME/data"} + : ''${MYSQL_PID_FILE:="$MYSQL_HOME/mysql.pid"} + : ''${MYSQL_UNIX_PORT:="$MYSQL_HOME/mysql.sock"} + export MYSQL_UNIX_PORT + + __first_time="" + if [ ! -d "$MYSQL_HOME" ] + then + echo 'Installing mysql database...' + mkdir -p "$MYSQL_HOME" "$MYSQL_DATADIR" + mysql_install_db \ + --auth-root-authentication-method=normal \ + --basedir="${mariadb}" \ + --datadir="$MYSQL_DATADIR" \ + --pid-file="$MYSQL_PID_FILE" \ + --user="$USER" >/tmp/install_log 2>&1 || { + echo 'Could not install mysql database! Log:'; + cat /tmp/install_log; + exit 1; + } + + __first_time="y" + fi + + # Start mysql + echo 'Starting mysql...' + mysqld \ + --no-defaults \ + --basedir="${mariadb}" \ + --datadir="$MYSQL_DATADIR" \ + --pid-file="$MYSQL_PID_FILE" \ + --socket="$MYSQL_UNIX_PORT" \ + --bind-address=0.0.0.0 \ + --log-error="$MYSQL_HOME"/mysql.err \ + --user="$USER" >>"$MYSQL_HOME"/mysql.log & + MYSQL_PID=$! + + until mysqladmin ping >/dev/null 2>&1 + do + sleep 0.5 + ps -p $MYSQL_PID >/dev/null 2>&1 || { + echo "mysql daemon stopped initializing!"; + exit 1; + } + done + + if [ -n "$__first_time" ] + then + mysql \ + --user="root" \ + -e "CREATE USER '$USER'@'localhost'; GRANT ALL PRIVILEGES ON *.* TO '$USER'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;" + fi + unset __first_time + + # Start user's shell + "$(getent passwd $USER | cut -d : -f 7)" + + # Stop mysql + echo 'Shutting down mysql...' + mysqladmin \ + --user="root" \ + --socket="$MYSQL_UNIX_PORT" \ + shutdown || pkill mysqld + + exit 0 + ''; + }; + +in + shellDrv pkgs -- cgit v1.2.3