From 7d0fcbf28a07a432306e3dc789e9bc9ffe95d191 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Sat, 14 Oct 2023 15:44:57 +0200 Subject: [PATCH] Switch to using nix flakes, and update go to a real version --- README.md | 10 ++++------ default.nix | 25 ------------------------- flake.lock | 26 ++++++++++++++++++++++++++ flake.nix | 44 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 31 deletions(-) delete mode 100644 default.nix create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/README.md b/README.md index f066586..e85d3aa 100644 --- a/README.md +++ b/README.md @@ -6,18 +6,16 @@ super-early-alpha-don't-actually-use-this-for-anything development. ## Development Current efforts on ginger are focused on a golang-based virtual machine, which -will then be used to bootstrap the language. go >=1.18 is required for this vm. +will then be used to bootstrap the language. -If you are on a linux-amd64 machine with nix installed, you can run: +If you are on a machine with nix installed, you can run: ``` -nix-shell -A shell +nix develop ``` from the repo root and you will be dropped into a shell with all dependencies -(including the correct go version) in your PATH, ready to use. This could -probably be expanded to other OSs/architectures easily, if you care to do so -please check out the `default.nix` file and submit a PR! +(including the correct go version) in your PATH, ready to use. ## Demo diff --git a/default.nix b/default.nix deleted file mode 100644 index 87fc74d..0000000 --- a/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - - pkgs ? import (fetchTarball { - name = "nixpkgs-21-11"; - url = "https://github.com/NixOS/nixpkgs/archive/a7ecde854aee5c4c7cd6177f54a99d2c1ff28a31.tar.gz"; - sha256 = "162dywda2dvfj1248afxc45kcrg83appjd0nmdb541hl7rnncf02"; - }) { }, - -}: rec { - - # https://go.dev/dl/#go1.18beta1 - go = fetchTarball { - name = "go1.18beta1"; - url = "https://go.dev/dl/go1.18beta1.linux-amd64.tar.gz"; - sha256 = "09sb0viv1ybx6adgx4jym1sckdq3mpjkd6albj06hwnchj5rqn40"; - }; - - shell = pkgs.mkShell { - name = "ginger-dev"; - buildInputs = [ - go - ]; - }; - -} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..f1ff6ed --- /dev/null +++ b/flake.lock @@ -0,0 +1,26 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1696983906, + "narHash": "sha256-L7GyeErguS7Pg4h8nK0wGlcUTbfUMDu+HMf1UcyP72k=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bd1cde45c77891214131cbbea5b1203e485a9d51", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-23.05", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..dc20c41 --- /dev/null +++ b/flake.nix @@ -0,0 +1,44 @@ +{ + description = "gotc development environment"; + + # Nixpkgs / NixOS version to use. + inputs.nixpkgs.url = "nixpkgs/nixos-23.05"; + + outputs = { self, nixpkgs }: + let + + # to work with older version of flakes + lastModifiedDate = self.lastModifiedDate or self.lastModified or "19700101"; + + # Generate a user-friendly version number. + version = builtins.substring 0 8 lastModifiedDate; + + # 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 + { + + # Add dependencies that are only needed for development + devShells = forAllSystems (system: + let + pkgs = nixpkgsFor.${system}; + in { + default = pkgs.mkShell { + buildInputs = [ + pkgs.go + pkgs.gotools + pkgs.golangci-lint + ]; + }; + }); + }; +}