diff --git a/flake.nix b/flake.nix index df15ee7..fab0fe9 100644 --- a/flake.nix +++ b/flake.nix @@ -1,73 +1,118 @@ +# this was taken from hydra { - description = "A simple Go package"; + description = "A simple flake comprising a package and a module which can be added to a NixOS configuration"; - # Nixpkgs / NixOS version to use. - # inputs.nixpkgs.url = "nixpkgs/nixos-21.11"; + # inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11-small"; inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - - outputs = { self, nixpkgs }: + outputs = + { self + , nixpkgs + , nix + , + }: let + systems = [ + "x86_64-linux" + "aarch64-linux" + ]; + forEachSystem = nixpkgs.lib.genAttrs systems; - # to work with older version of flakes - lastModifiedDate = self.lastModifiedDate or self.lastModified or "19700101"; + overlayList = [ self.overlays.default ]; - # 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; }); + pkgsBySystem = forEachSystem ( + system: + import nixpkgs { + inherit system; + overlays = overlayList; + } + ); in - { + rec { - # Provide some binary packages for selected system types. - packages = forAllSystems (system: - let - pkgs = nixpkgsFor.${system}; - in - { - sox = pkgs.buildGoModule { - pname = "sox"; - inherit version; - # In 'nix develop', we don't need a copy of the source tree - # in the Nix store. - src = ./.; + # A Nixpkgs overlay that provides a 'simple-go-webserver' package. + overlays.default = final: prev: { sox = final.callPackage ./package.nix { }; }; - # This hash locks the dependencies of this package. It is - # necessary because of how Go requires network access to resolve - # VCS. See https://www.tweag.io/blog/2021-03-04-gomod2nix/ for - # details. Normally one can build with a fake hash and rely on native Go - # mechanisms to tell you what the hash should be or determine what - # it should be "out-of-band" with other tooling (eg. gomod2nix). - # To begin with it is recommended to set this, but one must - # remember to bump this hash when your dependencies change. - # vendorHash = pkgs.lib.fakeHash; + packages = forEachSystem (system: { + sox = pkgsBySystem.${system}.sox; + default = pkgsBySystem.${system}.sox; + }); - vendorHash = null; - }; - }); + nixosModules = import ./nixos-modules { overlays = overlayList; }; - # Add dependencies that are only needed for development - devShells = forAllSystems (system: - let - pkgs = nixpkgsFor.${system}; - in - { - default = pkgs.mkShell { - buildInputs = with pkgs; [ go gopls gotools go-tools ]; - }; - }); - - # 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}.sox); }; } +# { +# description = "A simple Go package"; +# +# # Nixpkgs / NixOS version to use. +# # inputs.nixpkgs.url = "nixpkgs/nixos-21.11"; +# inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; +# +# +# 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 +# { +# +# # Provide some binary packages for selected system types. +# packages = forAllSystems (system: +# let +# pkgs = nixpkgsFor.${system}; +# in +# { +# sox = pkgs.buildGoModule { +# pname = "sox"; +# inherit version; +# # In 'nix develop', we don't need a copy of the source tree +# # in the Nix store. +# src = ./.; +# +# # This hash locks the dependencies of this package. It is +# # necessary because of how Go requires network access to resolve +# # VCS. See https://www.tweag.io/blog/2021-03-04-gomod2nix/ for +# # details. Normally one can build with a fake hash and rely on native Go +# # mechanisms to tell you what the hash should be or determine what +# # it should be "out-of-band" with other tooling (eg. gomod2nix). +# # To begin with it is recommended to set this, but one must +# # remember to bump this hash when your dependencies change. +# # vendorHash = pkgs.lib.fakeHash; +# +# vendorHash = null; +# }; +# }); +# +# # Add dependencies that are only needed for development +# devShells = forAllSystems (system: +# let +# pkgs = nixpkgsFor.${system}; +# in +# { +# default = pkgs.mkShell { +# buildInputs = with pkgs; [ go gopls gotools go-tools ]; +# }; +# }); +# +# # 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}.sox); +# }; +# } diff --git a/package.nix b/package.nix new file mode 100644 index 0000000..6d0506d --- /dev/null +++ b/package.nix @@ -0,0 +1,25 @@ +{ lib +, buildGoModule +, fetchFromGitHub +, +}: +{ + sox = buildGoModule { + pname = "sox"; + # In 'nix develop', we don't need a copy of the source tree + # in the Nix store. + src = ./.; + + # This hash locks the dependencies of this package. It is + # necessary because of how Go requires network access to resolve + # VCS. See https://www.tweag.io/blog/2021-03-04-gomod2nix/ for + # details. Normally one can build with a fake hash and rely on native Go + # mechanisms to tell you what the hash should be or determine what + # it should be "out-of-band" with other tooling (eg. gomod2nix). + # To begin with it is recommended to set this, but one must + # remember to bump this hash when your dependencies change. + # vendorHash = pkgs.lib.fakeHash; + + vendorHash = null; + }; +}