diff --git a/elixir/flake.lock b/elixir/flake.lock index 1cbfc64..f694c77 100644 --- a/elixir/flake.lock +++ b/elixir/flake.lock @@ -1,13 +1,31 @@ { "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1712963716, - "narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=", - "rev": "cfd6b5fc90b15709b780a5a1619695a88505a176", - "revCount": 611350, + "lastModified": 1719075281, + "narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=", + "rev": "a71e967ef3694799d0c418c98332f7ff4cc5f6af", + "revCount": 642660, "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.611350%2Brev-cfd6b5fc90b15709b780a5a1619695a88505a176/018eddfc-e6d9-74bb-a823-20f2ae60079b/source.tar.gz" + "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.642660%2Brev-a71e967ef3694799d0c418c98332f7ff4cc5f6af/0190462b-ab23-7472-8ae7-ae4f8bde47d9/source.tar.gz" }, "original": { "type": "tarball", @@ -16,8 +34,24 @@ }, "root": { "inputs": { + "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/elixir/flake.nix b/elixir/flake.nix index 951c4ce..6b248cd 100644 --- a/elixir/flake.nix +++ b/elixir/flake.nix @@ -1,27 +1,100 @@ { description = "A Nix-flake-based Elixir development environment"; - inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1.*.tar.gz"; - - outputs = { self, nixpkgs }: - let - supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; - forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f { - pkgs = import nixpkgs { inherit system; }; - }); - in - { - devShells = forEachSupportedSystem ({ pkgs }: { - default = pkgs.mkShell { - packages = (with pkgs; [ elixir ]) ++ + inputs = { + nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1.*.tar.gz"; + + flake-utils = { + url = "github:numtide/flake-utils"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = + { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = nixpkgs.legacyPackages.${system}; + + # documentation + # https://nixos.org/manual/nixpkgs/stable/#sec-beam + + # ==== ERLANG ==== + + # use whatever version is currently defined in nixpkgs + # erlang = pkgs.beam.interpreters.erlang; + + # use latest version of Erlang 27 + erlang = pkgs.beam.interpreters.erlang_27; + + # specify exact version of Erlang OTP + # erlang = pkgs.beam.interpreters.erlang.override { + # version = "26.2.2"; + # sha256 = "sha256-7S+mC4pDcbXyhW2r5y8+VcX9JQXq5iEUJZiFmgVMPZ0="; + # } + + # ==== BEAM packages ==== + + # all BEAM packages will be compile with your preferred erlang version + pkgs-beam = pkgs.beam.packagesWith erlang; + + # ==== Elixir ==== + + # use whatever version is currently defined in nixpkgs + # elixir = pkgs-beam.elixir; + + # use latest version of Elixir 1.17 + elixir = pkgs-beam.elixir_1_17; + + # specify exact version of Elixir + # elixir = pkgs-beam.elixir.override { + # version = "1.17.1"; + # sha256 = "sha256-a7A+426uuo3bUjggkglY1lqHmSbZNpjPaFpQUXYtW9k="; + # }; + + in + { + devShells.default = pkgs.mkShell { + packages = + [ + # use the Elixr/OTP versions defined above; will also install OTP, mix, hex, rebar3 + elixir + + # mix needs it for downloading dependencies + pkgs.git + + # probably needed for your Phoenix assets + pkgs.nodejs_20 + ] + ++ # Linux only - (pkgs.lib.optionals (pkgs.stdenv.isLinux) - (with pkgs; [ gigalixir inotify-tools libnotify ])) ++ - # macOS only - pkgs.lib.optionals (pkgs.stdenv.isDarwin) - ((with pkgs; [ terminal-notifier ]) ++ - (with pkgs.darwin.apple_sdk.frameworks; [ CoreFoundation CoreServices ])); + pkgs.lib.optionals pkgs.stdenv.isLinux ( + with pkgs; + [ + gigalixir + inotify-tools + libnotify + ] + ) + ++ + # macOS only + pkgs.lib.optionals pkgs.stdenv.isDarwin ( + with pkgs; + [ + terminal-notifier + darwin.apple_sdk.frameworks.CoreFoundation + darwin.apple_sdk.frameworks.CoreServices + ] + ); + + # some sane defaults for iex session + env = { + ERL_INCLUDE_PATH = "${erlang}/lib/erlang/usr/include"; + ERL_AFLAGS = "+pc unicode -kernel shell_history enabled"; + ELIXIR_ERL_OPTIONS = "+sssdio 128"; + }; }; - }); - }; + } + ); }