{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; }; outputs = { self, nixpkgs, ... }: let # System types to support. supportedSystems = ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"]; # Helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'. forAllSystems = nixpkgs.lib.genAttrs supportedSystems; # Nixpkgs instantiated for supported system types. nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;}); in { devShells = forAllSystems (system: let pkgs = nixpkgsFor.${system}; startPostgres = pkgs.writeScriptBin "postgres_start" '' background() { exec 0>&- exec 1>&- exec 2>&- exec 3>&- "$@" & disown $! } echo "Starting postgres server..." # start postgres server background ${pkgs.postgresql}/bin/pg_ctl -l $DB_LOG -o "--unix_socket_directories='$PWD'" start echo "Postgres server started." ''; in { default = pkgs.mkShell { buildInputs = with pkgs; [go gopls gotools go-tools postgresql]; PGDATA = "postgres.db"; DB_LOG = "postgres.log"; DB_NAME = "vegan-barcode"; shellHook = '' echo "Using ${pkgs.postgresql.name}." create_db=0 # initialize postgres if we have not done so already if [ ! -d $PGDATA ]; then echo "Postgres not found. Initializing postgres at $PGDATA" ${pkgs.postgresql}/bin/initdb > /dev/null echo "Setting postgres unix socket directories to $PWD/$SOCKET_DIRECTORIES..." echo "unix_socket_directories = '$PWD'" >> $PGDATA/postgresql.conf echo "unix socket directories set." echo "Creating database $DB_NAME..." echo "CREATE DATABASE \"$DB_NAME\";" | postgres --single -E postgres echo "Database created." fi export PGHOST="$PWD" if [ ! -f "$PWD/.s.PGSQL.5432.lock" ]; then ${startPostgres}/bin/postgres_start fi ''; }; }); # The default package for 'nix build'. This makes sense if the # flake provides only one package or there is a clear "main" # package. defaultPackage = forAllSystems (system: self.packages.${system}.go-hello); }; }