Add nix flake development environment support and ignore direnv files

ryanbooker
Jan 5, 2024, 8:11 AM
5VQYTDQJ2DCP6IYTXKYHDUTCFSAL2RY2EXWLU2BW2IWZ3ZW6WVQAC

Dependencies

Change contents

  • file addition: shell.nix (----------)
    [4.1]
    { pkgs ? (
    let
    inherit (builtins) fetchTree fromJSON readFile;
    inherit ((fromJSON (readFile ./flake.lock)).nodes) nixpkgs gomod2nix;
    in
    import (fetchTree nixpkgs.locked) {
    overlays = [
    (import "${fetchTree gomod2nix.locked}/overlay.nix")
    ];
    }
    )
    , mkGoEnv ? pkgs.mkGoEnv
    , gomod2nix ? pkgs.gomod2nix
    }:
    let
    goEnv = mkGoEnv { pwd = ./.; };
    in
    pkgs.mkShell {
    packages = [
    goEnv
    gomod2nix
    ];
    }
  • file addition: gomod2nix.toml (----------)
    [4.1]
    schema = 1
    [mod]
  • file addition: flake.nix (----------)
    [4.1]
    {
    description = "A basic gomod2nix flake";
    inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    inputs.flake-utils.url = "github:numtide/flake-utils";
    inputs.gomod2nix.url = "github:nix-community/gomod2nix";
    inputs.gomod2nix.inputs.nixpkgs.follows = "nixpkgs";
    inputs.gomod2nix.inputs.flake-utils.follows = "flake-utils";
    outputs = { self, nixpkgs, flake-utils, gomod2nix }:
    (flake-utils.lib.eachDefaultSystem
    (system:
    let
    pkgs = nixpkgs.legacyPackages.${system};
    # The current default sdk for macOS fails to compile go projects, so we use a newer one for now.
    # This has no effect on other platforms.
    callPackage = pkgs.darwin.apple_sdk_11_0.callPackage or pkgs.callPackage;
    in
    {
    packages.default = callPackage ./. {
    inherit (gomod2nix.legacyPackages.${system}) buildGoApplication;
    };
    devShells.default = callPackage ./shell.nix {
    inherit (gomod2nix.legacyPackages.${system}) mkGoEnv gomod2nix;
    };
    })
    );
    }
  • file addition: flake.lock (----------)
    [4.1]
    {
    "nodes": {
    "flake-utils": {
    "inputs": {
    "systems": "systems"
    },
    "locked": {
    "lastModified": 1701680307,
    "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
    "owner": "numtide",
    "repo": "flake-utils",
    "rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
    "type": "github"
    },
    "original": {
    "owner": "numtide",
    "repo": "flake-utils",
    "type": "github"
    }
    },
    "gomod2nix": {
    "inputs": {
    "flake-utils": [
    "flake-utils"
    ],
    "nixpkgs": [
    "nixpkgs"
    ]
    },
    "locked": {
    "lastModified": 1701687253,
    "narHash": "sha256-qJCMxIKWXonJODPF2oV7mCd0xu7VYVenTucrY0bizto=",
    "owner": "nix-community",
    "repo": "gomod2nix",
    "rev": "001bbfa22e2adeb87c34c6015e5694e88721cabe",
    "type": "github"
    },
    "original": {
    "owner": "nix-community",
    "repo": "gomod2nix",
    "type": "github"
    }
    },
    "nixpkgs": {
    "locked": {
    "lastModified": 1704194953,
    "narHash": "sha256-RtDKd8Mynhe5CFnVT8s0/0yqtWFMM9LmCzXv/YKxnq4=",
    "owner": "NixOS",
    "repo": "nixpkgs",
    "rev": "bd645e8668ec6612439a9ee7e71f7eac4099d4f6",
    "type": "github"
    },
    "original": {
    "owner": "NixOS",
    "ref": "nixos-unstable",
    "repo": "nixpkgs",
    "type": "github"
    }
    },
    "root": {
    "inputs": {
    "flake-utils": "flake-utils",
    "gomod2nix": "gomod2nix",
    "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",
    "version": 7
    }
  • file addition: default.nix (----------)
    [4.1]
    { pkgs ? (
    let
    inherit (builtins) fetchTree fromJSON readFile;
    inherit ((fromJSON (readFile ./flake.lock)).nodes) nixpkgs gomod2nix;
    in
    import (fetchTree nixpkgs.locked) {
    overlays = [
    (import "${fetchTree gomod2nix.locked}/overlay.nix")
    ];
    }
    )
    , buildGoApplication ? pkgs.buildGoApplication
    }:
    buildGoApplication {
    pname = "myapp";
    version = "0.1";
    pwd = ./.;
    src = ./.;
    modules = ./gomod2nix.toml;
    }
  • edit in .ignore at line 4
    [2.2334]
    .direnv
    .envrc