surtur
8ea9e5faf7
All checks were successful
continuous-integration/drone/push Build is passing
...mainly due to arbitrarily failing ci builds, as this doesn't appear to affect local builds/nix builds on remote builders, just fresh builds in the ci. the explanation for why this is happening might be that certain package VCS's don't allow many/frequent connections from IP ranges other than GOPROXY's (Google's). that is sheer speculation, though. however, it is still true that there are "no" failed ci builds with GOPROXY env var set to its default value (left untouched), which does indeed indicate that the above mentioned might be the root cause of the issue after all.
203 lines
5.9 KiB
Nix
203 lines
5.9 KiB
Nix
{
|
|
description = "mathematical informatics course semestral project solving a few mathematical optimisation tasks using well-known algorithms";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
|
flake-compat = {
|
|
url = "github:edolstra/flake-compat";
|
|
flake = false;
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
nix-filter = {
|
|
url = "github:numtide/nix-filter";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs = {
|
|
self,
|
|
nixpkgs,
|
|
nix-filter,
|
|
...
|
|
}: let
|
|
projname = "math-optim";
|
|
|
|
# to work with older version of flakes
|
|
lastModifiedDate =
|
|
self.lastModifiedDate or self.lastModified or "19700101";
|
|
|
|
# Generate a user-friendly version number.
|
|
version = "v0.0.0";
|
|
|
|
# System types to support.
|
|
# supportedSystems = ["x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"];
|
|
supportedSystems = ["x86_64-linux" "aarch64-linux"];
|
|
|
|
# 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;
|
|
overlays = [
|
|
# no overlay imports atm
|
|
(import ./overlay.nix)
|
|
];
|
|
});
|
|
in rec {
|
|
formatter = forAllSystems (
|
|
system:
|
|
nixpkgsFor.${system}.alejandra
|
|
);
|
|
|
|
packages = forAllSystems (system: let
|
|
pkgs = nixpkgsFor.${system};
|
|
inherit (pkgs) lib overlays; # -> lib = pkgs.lib;overlays = pkgs.overlays;
|
|
in rec {
|
|
math-optim = with pkgs;
|
|
buildGoModule rec {
|
|
pname = "${projname}";
|
|
buildInputs = [
|
|
go
|
|
];
|
|
nativeBuildInputs = [pkgconfig];
|
|
|
|
overrideModAttrs = _: {
|
|
# GOPROXY = "direct";
|
|
};
|
|
|
|
inherit version;
|
|
doCheck = false;
|
|
# use go.mod for managing go deps, instead of vendor-only dir
|
|
proxyVendor = true;
|
|
tags = []; # go "-tags" to build with
|
|
ldflags = [
|
|
"-s"
|
|
"-w"
|
|
"-X main.version=${version}"
|
|
];
|
|
|
|
modSha256 = lib.fakeSha256;
|
|
# dont't forget to update vendorSha256 whenever go.mod or go.sum change
|
|
vendorSha256 = "sha256-NpZWn2yASg7HXr4sG849QSgUetouj8qjwS+p5jhlum0=";
|
|
|
|
# In 'nix develop', we don't need a copy of the source tree
|
|
# in the Nix store.
|
|
src = nix-filter.lib.filter {
|
|
root = lib.cleanSource ./.;
|
|
exclude = [
|
|
./flake.nix
|
|
./flake.lock
|
|
./default.nix
|
|
./shell.nix
|
|
];
|
|
};
|
|
|
|
meta = {
|
|
description = "mathematical informatics course semestral project solving a few mathematical optimisation tasks using well-known algorithms";
|
|
homepage = "https://git.dotya.ml/wanderer/math-optim";
|
|
license = lib.licenses.gpl3;
|
|
maintainers = ["wanderer"];
|
|
platforms = lib.platforms.linux ++ lib.platforms.darwin;
|
|
};
|
|
};
|
|
default = math-optim;
|
|
});
|
|
|
|
apps = forAllSystems (system: rec {
|
|
math-optim = {
|
|
type = "app";
|
|
program = "${self.packages.${system}.${projname}}/bin/${projname}";
|
|
};
|
|
default = math-optim;
|
|
});
|
|
|
|
devShells = forAllSystems (
|
|
system: let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [
|
|
(import ./overlay.nix)
|
|
];
|
|
};
|
|
goPkgs = import nixpkgs {
|
|
useFetched = true;
|
|
inherit system;
|
|
overlays =
|
|
self.overlays
|
|
or []
|
|
++ [
|
|
(import ./overlay.nix)
|
|
];
|
|
};
|
|
gob = pkgs.writeShellScriptBin "gob" ''
|
|
cd $(git rev-parse --show-toplevel)
|
|
go build -v ./...
|
|
'';
|
|
gota = pkgs.writeShellScriptBin "gota" ''
|
|
cd $(git rev-parse --show-toplevel)
|
|
go test ./...
|
|
'';
|
|
upcache = pkgs.writeShellScriptBin "upcache" ''
|
|
## refs:
|
|
## https://fzakaria.com/2020/08/11/caching-your-nix-shell.html
|
|
## https://nixos.wiki/wiki/Caching_nix_shell_build_inputs
|
|
nix-store --query --references $(nix-instantiate shell.nix) | \
|
|
xargs nix-store --realise | \
|
|
xargs nix-store --query --requisites | \
|
|
cachix push ${projname}
|
|
'';
|
|
add-license = pkgs.writeShellScriptBin "add-license" ''
|
|
go run github.com/google/addlicense@v1.0.0 -v \
|
|
-c "wanderer <a_mirre at utb dot cz>" \
|
|
-l "GPL-3.0-or-later" -s .
|
|
'';
|
|
in {
|
|
default = with pkgs;
|
|
mkShell
|
|
{
|
|
name = "${projname}-" + version;
|
|
|
|
GOFLAGS = "-buildmode=pie -trimpath -mod=readonly -modcacherw";
|
|
GOLDFLAGS = "-s -w -X main.version=${version}";
|
|
CGO_CFLAGS = "-g0 -mtune=native";
|
|
CGO_LDFLAGS = "-Wl,-O1,-sort-common,-as-needed,-z,relro,-z,now,-flto -pthread";
|
|
GOPROXY = "direct";
|
|
|
|
shellHook = ''
|
|
echo " -- in math-optim dev shell..."
|
|
'';
|
|
|
|
nativeBuildInputs = [
|
|
];
|
|
packages =
|
|
[
|
|
# use pathed go, as it's (supposed to be) faster with cgo,
|
|
# which will inevitably encountered anyway.
|
|
goPkgs.go
|
|
go-tools
|
|
gopls
|
|
gofumpt
|
|
statix
|
|
golangci-lint
|
|
alejandra
|
|
|
|
## ad-hoc cmds
|
|
gob
|
|
gota
|
|
upcache
|
|
add-license
|
|
]
|
|
++ (
|
|
if stdenv.isLinux
|
|
then [
|
|
]
|
|
else []
|
|
);
|
|
};
|
|
}
|
|
);
|
|
};
|
|
}
|