diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore index d09ffe4..4618033 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /target/ /.db/ +/.vagrant/ +/.direnv/ diff --git a/flake.lock b/flake.lock index 2d843df..704567a 100644 --- a/flake.lock +++ b/flake.lock @@ -51,11 +51,11 @@ ] }, "locked": { - "lastModified": 1696126582, - "narHash": "sha256-uo4cn/d2rHPy/fpKZKFBOaVO531zs/Doxz43imrpqZM=", + "lastModified": 1696644659, + "narHash": "sha256-l/DgT519At8HhXDQHz3+H8AjaEbrsb7Xkqgj+JNHV6k=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "fc6fe50d9a4540a1111731baaa00f207301fdeb7", + "rev": "126829788e99c188be4eeb805f144d73d8a00f2c", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 6aa30e8..907e5f0 100644 --- a/flake.nix +++ b/flake.nix @@ -11,57 +11,26 @@ }; }; - outputs = { self, nixpkgs, flake-utils, rust-overlay }: + outputs = { self, nixpkgs, flake-utils, rust-overlay }: flake-utils.lib.eachDefaultSystem (system: let - supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; - - overlays = [ - (final: prev: { - elixir = prev.beam.packages.erlang_26.elixir_1_15; - elixir-ls = prev.beam.packages.erlang_26.elixir-ls.override { elixir = final.elixir; }; - protoc-gen-elixir = prev.callPackage ./protoc-gen-elixir.nix { elixir = final.elixir; }; - }) - - (import rust-overlay) - ]; + pkgs = import nixpkgs { inherit system overlays; }; + overlays = [ (import ./nix/overlay.nix) (import rust-overlay) ]; + scripts = pkgs.callPackage ./nix/scripts.nix { }; in - flake-utils.lib.eachSystem supportedSystems (system: - let - pkgs = import nixpkgs { inherit system overlays; }; - in - { - devShells.default = with pkgs; mkShell { - packages = [ - elixir - elixir-ls - protobuf - protoc-gen-elixir - rust-bin.stable.latest.default - postgresql - ] ++ lib.optionals stdenv.isLinux [ inotify-tools ]; + { + devShells.default = with pkgs; mkShell { + packages = [ + elixir + elixir-ls + rustToolchain + protobuf + protoc-gen-elixir + scripts.prymn_db + ] ++ lib.optionals stdenv.isLinux [ inotify-tools ]; - inputsFrom = [ - protoc-gen-elixir - ]; - - shellHook = '' - export PGDATA=$PWD/.db - export PGHOST=/tmp - export DB_LOG=$PWD/.db/log - - if [ ! -d $PGDATA ]; then - initdb $PGDATA --auth=trust - fi - - if ! pg_ctl status >/dev/null; then - pg_ctl start -l $DB_LOG -o "-c unix_socket_directories=$PGHOST" - fi - - user_exists=$(psql --csv -t -d postgres -c "SELECT count(*) FROM pg_user WHERE usename='postgres'") - if [ $user_exists != "1" ]; then - createuser -s -h $PGHOST postgres - fi - ''; - }; - }); + shellHook = '' + export PROJECT_ROOT_DIR="$PWD" + ''; + }; + }); } diff --git a/nix/overlay.nix b/nix/overlay.nix new file mode 100644 index 0000000..afcc8e9 --- /dev/null +++ b/nix/overlay.nix @@ -0,0 +1,11 @@ +final: prev: { + rustToolchain = final.rust-bin.stable.latest.default.override { + targets = [ "x86_64-unknown-linux-musl" "aarch64-unknown-linux-musl" ]; + }; + + elixir = prev.beam.packages.erlang_26.elixir_1_15; + + elixir-ls = prev.beam.packages.erlang_26.elixir-ls.override { elixir = final.elixir; }; + + protoc-gen-elixir = prev.callPackage ./protoc-gen-elixir.nix { elixir = final.elixir; }; +} diff --git a/protoc-gen-elixir.nix b/nix/protoc-gen-elixir.nix similarity index 100% rename from protoc-gen-elixir.nix rename to nix/protoc-gen-elixir.nix diff --git a/nix/scripts.nix b/nix/scripts.nix new file mode 100644 index 0000000..b2a4ea6 --- /dev/null +++ b/nix/scripts.nix @@ -0,0 +1,33 @@ +{ writeShellApplication, postgresql, ... }: + +{ + prymn_db = writeShellApplication { + name = "prymn_db"; + + runtimeInputs = [ postgresql ]; + + text = '' + #!/usr/bin/env bash + + set -e + + export PGDATA=$PROJECT_ROOT_DIR/.db + export PGHOST=/tmp + export DB_LOG=$PROJECT_ROOT_DIR/.db/log + + if [ ! -d "$PGDATA" ]; then + initdb "$PGDATA" --auth=trust + fi + + if ! pg_ctl status >/dev/null; then + pg_ctl start -l "$DB_LOG" -o "-c unix_socket_directories=$PGHOST" + echo "starting your dev database..." + fi + + user_exists=$(psql --csv -t -d postgres -c "SELECT count(*) FROM pg_user WHERE usename='postgres'") + if [ "$user_exists" != "1" ]; then + createuser -s -h "$PGHOST" postgres + fi + ''; + }; +}