2022-03-30 15:34:47 +00:00
|
|
|
|
2023-08-01 23:47:57 +00:00
|
|
|
include "build.nims"
|
|
|
|
|
|
|
|
import std/os
|
2023-02-08 08:48:27 +00:00
|
|
|
const currentDir = currentSourcePath()[0 .. ^(len("config.nims") + 1)]
|
|
|
|
|
2023-08-01 23:47:57 +00:00
|
|
|
when getEnv("NIMBUS_BUILD_SYSTEM") == "yes" and
|
2023-02-08 08:48:27 +00:00
|
|
|
# BEWARE
|
|
|
|
# In Nim 1.6, config files are evaluated with a working directory
|
|
|
|
# matching where the Nim command was invocated. This means that we
|
2023-12-22 12:04:01 +00:00
|
|
|
# must do all file existence checks with full absolute paths:
|
2023-02-08 08:48:27 +00:00
|
|
|
system.fileExists(currentDir & "nimbus-build-system.paths"):
|
|
|
|
include "nimbus-build-system.paths"
|
|
|
|
|
2023-08-01 23:47:57 +00:00
|
|
|
when defined(release):
|
2022-03-30 15:34:47 +00:00
|
|
|
switch("nimcache", joinPath(currentSourcePath.parentDir, "nimcache/release/$projectName"))
|
2021-11-23 16:55:16 +00:00
|
|
|
else:
|
2022-03-30 15:34:47 +00:00
|
|
|
switch("nimcache", joinPath(currentSourcePath.parentDir, "nimcache/debug/$projectName"))
|
2021-11-23 16:55:16 +00:00
|
|
|
|
2023-08-01 23:47:57 +00:00
|
|
|
when defined(limitStackUsage):
|
ci: update GitHub Actions CI workflow to use msys2/setup-msys2@v2
Main goal is to update the nim-codex CI workflow to use the
[`msys2/setup-msys2@v2`][setmsys2] GitHub Action, as used by the
[nimbus-eth2 workflow][ne2w] per changes made to it several months ago. The
`msys2/setup-msys2@v2` action has been used by other Status-org projects prior
to this commit, e.g. nim-leopard, nim-datastore, nim-status.
A fix is included for the failing macOS builds, related to
[actions/virtual-environments#5819][ave5819]. See [L151][L151].
All builds [succeed][succeed] (with build arch-targets verified as far as
possible via `ldd`, `otool`, `ntldd`), including `linux-i386` and
`windows-i386`, though the `i386` builds are presently disabled (commented
out). The `i386` builds can be enabled simply by uncommenting:
```
# - os: linux
# cpu: i386
...
# - os: windows
# cpu: i386
```
The resulting `.github/workflows/ci.yml` is a "remix" of the current workflows
for nimbus-eth2 and nim-codex (i.e. prior to this commit) along with techniques
learned from developing workflows for other Status-org repos. Some comments and
code-reorg help to clarify/explain what's done in the
`Derive environment variables` step.
`-d:limitStackUsage` has been adopted for `linux-amd64` builds from
[nimbus-eth2's workflow][ne2wL155] and [related code][ne2config] has been
copied into `config.nims`
`-d:limitStackUsage` can easily be dropped if it's not desirable for Codex.
Build targets use `-latest` for `runs-on`, i.e. `macos-latest`,
`ubuntu-latest`, `windows-latest`.
Through a combination of local testing and iterative pushes to GitHub, the
workflow's embedded Bash scripts have been revised to include only the
necessary steps for all builds to succeed, including `linux-i386` and
`windows-i386`.
The GitHub Actions workflow `.github/workflows/codecov.yml` has been removed,
while coverage data generation/upload steps have been added to
`.github/workflows/ci.yml` as the final steps conditional on
`if: runner.os == 'Linux' && matrix.target.cpu == 'amd64' && matrix.nim_branch == matrix.cov_branch`.
A redundant `--passC:'-m32 -mno-adx'` is used for `linux-i386` builds; the
redundant flags do not affect the build, but can be helpful when eyeballing
GitHub Actions builds with increased compile-time verbosity.
Some variable expansions used in `github/workflows/ci.yml` could result in
compilation failures if related paths include whitespace. It's not a problem
for this commit but could be a problem for a user copy-pasting from the
workflow; solving that problem is left as an exercise for the reader.
[setmsys2]: https://github.com/msys2/setup-msys2#readme
[ne2w]: https://github.com/status-im/nimbus-eth2/blob/stable/.github/workflows/ci.yml
[ave5819]: https://github.com/actions/virtual-environments/pull/5819
[L151]: https://github.com/status-im/nim-codex/blob/ci/msys2/.github/workflows/ci.yml#L151
[succeed]: https://github.com/status-im/nim-codex/actions/runs/2606854455
[ne2wL155]: https://github.com/status-im/nimbus-eth2/blob/stable/.github/workflows/ci.yml#L155-L159
[ne2config]: https://github.com/status-im/nimbus-eth2/blob/stable/config.nims#L43-L49
2022-07-04 02:37:34 +00:00
|
|
|
# This limits stack usage of each individual function to 1MB - the option is
|
|
|
|
# available on some GCC versions but not all - run with `-d:limitStackUsage`
|
|
|
|
# and look for .su files in "./build/", "./nimcache/" or $TMPDIR that list the
|
|
|
|
# stack size of each function.
|
|
|
|
switch("passC", "-fstack-usage -Werror=stack-usage=1048576")
|
|
|
|
switch("passL", "-fstack-usage -Werror=stack-usage=1048576")
|
|
|
|
|
2023-08-01 23:47:57 +00:00
|
|
|
when defined(windows):
|
2022-06-30 16:05:52 +00:00
|
|
|
# https://github.com/nim-lang/Nim/pull/19891
|
|
|
|
switch("define", "nimRawSetjmp")
|
|
|
|
|
2021-11-23 16:55:16 +00:00
|
|
|
# disable timestamps in Windows PE headers - https://wiki.debian.org/ReproducibleBuilds/TimestampsInPEBinaries
|
|
|
|
switch("passL", "-Wl,--no-insert-timestamp")
|
|
|
|
# increase stack size
|
|
|
|
switch("passL", "-Wl,--stack,8388608")
|
|
|
|
# https://github.com/nim-lang/Nim/issues/4057
|
|
|
|
--tlsEmulation:off
|
|
|
|
if defined(i386):
|
|
|
|
# set the IMAGE_FILE_LARGE_ADDRESS_AWARE flag so we can use PAE, if enabled, and access more than 2 GiB of RAM
|
|
|
|
switch("passL", "-Wl,--large-address-aware")
|
|
|
|
|
|
|
|
# The dynamic Chronicles output currently prevents us from using colors on Windows
|
|
|
|
# because these require direct manipulations of the stdout File object.
|
|
|
|
switch("define", "chronicles_colors=off")
|
|
|
|
|
|
|
|
# This helps especially for 32-bit x86, which sans SSE2 and newer instructions
|
|
|
|
# requires quite roundabout code generation for cryptography, and other 64-bit
|
|
|
|
# and larger arithmetic use cases, along with register starvation issues. When
|
|
|
|
# engineering a more portable binary release, this should be tweaked but still
|
|
|
|
# use at least -msse2 or -msse3.
|
2022-05-17 14:27:59 +00:00
|
|
|
|
2023-08-01 23:47:57 +00:00
|
|
|
when defined(disableMarchNative):
|
|
|
|
when defined(i386) or defined(amd64):
|
2022-05-17 14:27:59 +00:00
|
|
|
switch("passC", "-mssse3")
|
|
|
|
elif defined(macosx) and defined(arm64):
|
|
|
|
# Apple's Clang can't handle "-march=native" on M1: https://github.com/status-im/nimbus-eth2/issues/2758
|
|
|
|
switch("passC", "-mcpu=apple-a14")
|
|
|
|
# TODO: newer Clang >=15.0 can: https://github.com/llvm/llvm-project/commit/fcca10c69aaab539962d10fcc59a5f074b73b0de
|
2021-11-23 16:55:16 +00:00
|
|
|
else:
|
|
|
|
switch("passC", "-march=native")
|
|
|
|
if defined(windows):
|
|
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65782
|
|
|
|
# ("-fno-asynchronous-unwind-tables" breaks Nim's exception raising, sometimes)
|
|
|
|
switch("passC", "-mno-avx512vl")
|
|
|
|
|
2022-01-10 15:32:56 +00:00
|
|
|
--tlsEmulation:off
|
2021-11-23 16:55:16 +00:00
|
|
|
--threads:on
|
|
|
|
--opt:speed
|
|
|
|
--excessiveStackTrace:on
|
|
|
|
# enable metric collection
|
|
|
|
--define:metrics
|
|
|
|
# for heap-usage-by-instance-type metrics and object base-type strings
|
|
|
|
--define:nimTypeNames
|
2023-03-10 07:02:54 +00:00
|
|
|
--styleCheck:usages
|
|
|
|
--styleCheck:error
|
2024-01-11 16:45:23 +00:00
|
|
|
--maxLoopIterationsVM:1000000000
|
2024-03-12 12:10:14 +00:00
|
|
|
--fieldChecks:on
|
|
|
|
--warningAsError:"ProveField:on"
|
2021-11-23 16:55:16 +00:00
|
|
|
|
2023-03-09 11:23:45 +00:00
|
|
|
when (NimMajor, NimMinor) >= (1, 4):
|
|
|
|
--warning:"ObservableStores:off"
|
|
|
|
--warning:"LockLevel:off"
|
|
|
|
--hint:"XCannotRaiseY:off"
|
|
|
|
when (NimMajor, NimMinor) >= (1, 6):
|
|
|
|
--warning:"DotLikeOps:off"
|
|
|
|
when (NimMajor, NimMinor, NimPatch) >= (1, 6, 11):
|
|
|
|
--warning:"BareExcept:off"
|
|
|
|
|
2021-11-23 16:55:16 +00:00
|
|
|
switch("define", "withoutPCRE")
|
|
|
|
|
|
|
|
# the default open files limit is too low on macOS (512), breaking the
|
|
|
|
# "--debugger:native" build. It can be increased with `ulimit -n 1024`.
|
|
|
|
if not defined(macosx):
|
|
|
|
# add debugging symbols and original files and line numbers
|
|
|
|
--debugger:native
|
|
|
|
if not (defined(windows) and defined(i386)) and not defined(disable_libbacktrace):
|
|
|
|
# light-weight stack traces using libbacktrace and libunwind
|
|
|
|
--define:nimStackTraceOverride
|
|
|
|
switch("import", "libbacktrace")
|
|
|
|
|
|
|
|
# `switch("warning[CaseTransition]", "off")` fails with "Error: invalid command line option: '--warning[CaseTransition]'"
|
|
|
|
switch("warning", "CaseTransition:off")
|
|
|
|
|
|
|
|
# The compiler doth protest too much, methinks, about all these cases where it can't
|
|
|
|
# do its (N)RVO pass: https://github.com/nim-lang/RFCs/issues/230
|
|
|
|
switch("warning", "ObservableStores:off")
|
|
|
|
|
|
|
|
# Too many false positives for "Warning: method has lock level <unknown>, but another method has 0 [LockLevel]"
|
|
|
|
switch("warning", "LockLevel:off")
|
2022-04-13 16:32:35 +00:00
|
|
|
|
|
|
|
switch("define", "libp2p_pki_schemes=secp256k1")
|
2022-04-20 12:28:11 +00:00
|
|
|
#TODO this infects everything in this folder, ideally it would only
|
2022-05-19 19:56:03 +00:00
|
|
|
# apply to codex.nim, but since codex.nims is used for other purpose
|
|
|
|
# we can't use it. And codex.cfg doesn't work
|
2023-11-09 05:35:55 +00:00
|
|
|
switch("define", "chronicles_sinks=textlines[dynamic],json[dynamic],textlines[dynamic]")
|
2022-04-12 00:42:18 +00:00
|
|
|
|
2023-11-20 08:51:36 +00:00
|
|
|
# Workaround for assembler incompatibility between constantine and secp256k1
|
|
|
|
switch("define", "use_asm_syntax_intel=false")
|
2023-12-12 08:11:54 +00:00
|
|
|
switch("define", "ctt_asm=false")
|
2023-11-20 08:51:36 +00:00
|
|
|
|
2024-03-12 09:57:13 +00:00
|
|
|
# Allow the use of old-style case objects for nim config compatibility
|
|
|
|
switch("define", "nimOldCaseObjects")
|
|
|
|
|
Release v0.1.4 (#912)
* fix: createReservation lock (#825)
* fix: createReservation lock
* fix: additional locking places
* fix: acquire lock
* chore: feedback
Co-authored-by: markspanbroek <mark@spanbroek.net>
Signed-off-by: Adam Uhlíř <adam@uhlir.dev>
* feat: withLock template and fixed tests
* fix: use proc for MockReservations constructor
* chore: feedback
Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
Signed-off-by: Adam Uhlíř <adam@uhlir.dev>
* chore: feedback implementation
---------
Signed-off-by: Adam Uhlíř <adam@uhlir.dev>
Co-authored-by: markspanbroek <mark@spanbroek.net>
Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
* Block deletion with ref count & repostore refactor (#631)
* Fix StoreStream so it doesn't return parity bytes (#838)
* fix storestream so it doesn\'t return parity bits for protected/verifiable manifests
* use Cid.example instead of creating a mock manually
* Fix verifiable manifest initialization (#839)
* fix verifiable manifest initialization
* fix linearstrategy, use verifiableStrategy to select blocks for slots
* check for both strategies in attribute inheritance test
* ci: add verify_circuit=true to the releases (#840)
* provisional fix so EC errors do not crash the node on download (#841)
* prevent node crashing with `not val.isNil` (#843)
* bump nim-leopard to handle no parity data (#845)
* Fix verifiable manifest constructor (#844)
* Fix verifiable manifest constructor
* Add integration test for verifiable manifest download
Add integration test for testing download of verifiable dataset after creating request for storage
* add missing import
* add testecbug to integration suite
* Remove hardhat instance from integration test
* change description, drop echo
---------
Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
Co-authored-by: gmega <giuliano.mega@gmail.com>
* Bump Nim to 1.6.21 (#851)
* bump Nim to 1.6.21 (range type reset fixes)
* remove incompatible versions from compiler matrix
* feat(rest): adds erasure coding constraints when requesting storage (#848)
* Rest API: add erasure coding constraints when requesting storage
* clean up
* Make error message for "dataset too small" more informative.
* fix API integration test
---------
Co-authored-by: gmega <giuliano.mega@gmail.com>
* Prover workshop band-aid (#853)
* add prover bandaid
* Improve error message text
Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
Signed-off-by: Giuliano Mega <giuliano.mega@gmail.com>
---------
Signed-off-by: Giuliano Mega <giuliano.mega@gmail.com>
Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
* Bandaid for failing erasure coding (#855)
* Update Release workflow (#858)
Signed-off-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
* Fixes prover behavior with singleton proof trees (#859)
* add logs and test
* add Merkle proof checks
* factor out Circom input normalization, fix proof input serialization
* add test and update existing ones
* update circuit assets
* add back trace message
* switch contracts to fix branch
* update codex-contracts-eth to latest
* do not expose prove with prenormalized inputs
* Chronos v4 Update (v3 Compat Mode) (#814)
* add changes to use chronos v4 in compat mode
* switch chronos to compat fix branch
* use nimbus-build-system with configurable Nim repo
* add missing imports
* add missing await
* bump compat
* pin nim version in Makefile
* add await instead of asyncSpawn to advertisement queue loop
* bump DHT to v0.5.0
* allow error state of `onBatch` to propagate upwards in test code
* pin Nim compiler commit to avoid fetching stale branch
* make CI build against branch head instead of merge
* fix handling of return values in testslotqueue
* Downgrade to gcc 13 on Windows (#874)
* Downgrade to gcc 13 on Windows
Signed-off-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
* Increase build job timeout to 90 minutes
Signed-off-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
---------
Signed-off-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
* Add MIT/Apache licenses (#861)
* Add MIT/Apache licenses
* Center "Apache License"
Signed-off-by: Giuliano Mega <giuliano.mega@gmail.com>
* remove wrong legal entity; rename apache license file
---------
Signed-off-by: Giuliano Mega <giuliano.mega@gmail.com>
* Add OPTIONS endpoint to allow the content-type header for the upload endpoint (#869)
* Add OPTIONS endpoint to allow the content-type header
exec git commit --amend --no-edit -S
* Remove useless header "Access-Control-Headers" and add cache
Signed-off-by: Arnaud <arnaud@status.im>
---------
Signed-off-by: Arnaud <arnaud@status.im>
Co-authored-by: Giuliano Mega <giuliano.mega@gmail.com>
* chore: add `downtimeProduct` config parameter (#867)
* chore: add `downtimeProduct` config parameter
* bump codex-contracts-eth to master
* Support CORS preflight requests when the storage request api returns an error (#878)
* Add CORS headers when the REST API is returning an error
* Use the allowedOrigin instead of the wilcard when setting the origin
Signed-off-by: Arnaud <arnaud@status.im>
---------
Signed-off-by: Arnaud <arnaud@status.im>
* refactor(marketplace): generic querying of historical marketplace events (#872)
* refactor(marketplace): move marketplace events to the Market abstraction
Move marketplace contract events to the Market abstraction so the types can be shared across all modules that call the Market abstraction.
* Remove unneeded conversion
* Switch to generic implementation of event querying
* change parent type to MarketplaceEvent
* Remove extra license file (#876)
* remove extra license
* center "apache license"
* Update advertising (#862)
* Setting up advertiser
* Wires up advertiser
* cleanup
* test compiles
* tests pass
* setting up test for advertiser
* Finishes advertiser tests
* fixes commonstore tests
* Review comments by Giuliano
* Race condition found by Giuliano
* Review comment by Dmitriy
Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>
Signed-off-by: Ben Bierens <39762930+benbierens@users.noreply.github.com>
* fixes tests
---------
Signed-off-by: Ben Bierens <39762930+benbierens@users.noreply.github.com>
Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>
* feat: add `--payout-address` (#870)
* feat: add `--payout-address`
Allows SPs to be paid out to a separate address, keeping their profits secure.
Supports https://github.com/codex-storage/codex-contracts-eth/pull/144 in the nim-codex client.
* Remove optional payoutAddress
Change --payout-address so that it is no longer optional. There is no longer an overload in `Marketplace.sol` for `fillSlot` accepting no `payoutAddress`.
* Update integration tests to include --payout-address
* move payoutAddress from fillSlot to freeSlot
* Update integration tests to use required payoutAddress
- to make payoutAddress required, the integration tests needed to avoid building the cli params until just before starting the node, otherwise if cli params were added ad-hoc, there would be an error after a non-required parameter was added before a required parameter.
* support client payout address
- withdrawFunds requires a withdrawAddress parameter, directs payouts for withdrawing of client funds (for a cancelled request) to go to that address.
* fix integration test
adds --payout-address to validators
* refactor: support withdrawFunds and freeSlot optional parameters
- withdrawFunds has an optional parameter for withdrawRecipient
- freeSlot has optional parameters for rewardRecipient and collateralRecipient
- change --payout-address to --reward-recipient to match contract signature naming
* Revert "Update integration tests to include --payout-address"
This reverts commit 8f9535cf35b0f2b183ac4013a7ed11b246486964.
There are some valid improvements to the integration tests, but they can be handled in a separate PR.
* small fix
* bump contracts to fix marketplace spec
* bump codex-contracts-eth, now rebased on master
* bump codex-contracts-eth
now that feat/reward-address has been merged to master
* clean up, comments
* Rework circuit downloader (#882)
* Introduces a start method to prover
* Moves backend creation into start method
* sets up three paths for backend initialization
* Extracts backend initialization to backend-factory
* Implements loading backend from cli files or previously downloaded local files
* Wires up downloading and unzipping
* functional implementation
* Fixes testprover.nim
* Sets up tests for backendfactory
* includes libzip-dev
* pulls in updated contracts
* removes integration cli tests for r1cs, wasm, and zkey file arguments.
* Fixes issue where inner-scope values are lost before returning
* sets local proof verification for dist-test images
* Adds two traces and bumps nim-ethers
* Adds separate path for circuit files
* Create circuit dir if not exists
* fix: make sure requestStorage is mined
* fix: correct place to plug confirm
* test: fixing contracts tests
* Restores gitmodules
* restores nim-datastore reference
* Sets up downloader exe
* sets up tool skeleton
* implements getting of circuit hash
* Implements downloader tool
* sets up test skeleton
* Implements test for cirdl
* includes testTools in testAll
* Cleanup building.md
* cleans up previous downloader implementation
* cleans up testbackendfactory
* moves start of prover into node.nim
* Fills in arguments in example command
* Initializes backend in prover constructor
* Restores tests
* Restores tests for cli instructions
* Review comments by Dmitriy, part 1
* Quotes path in download instruction.
* replaces curl with chronos http session
* Moves cirdl build output to 'build' folder.
* Fixes chronicles log output
* Add cirdl support to the codex Dockerfile
Signed-off-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
* Add cirdl support to the docker entrypoint
Signed-off-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
* Add cirdl support to the release workflow
Signed-off-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
* Disable verify_circuit flag for releases
Signed-off-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
* Removes backendFactory placeholder type
* wip
* Replaces zip library with status-im/zippy library (which supports zip and tar)
* Updates cirdl to not change circuitdir folder
* Switches from zip to tar.gz
* Review comments by Dmitriy
* updates codex-contracts-eth
* Adds testTools to CI
* Adds check for access to config.circuitdir
* Update fixture circuit zkey
* Update matrix to run tools tests on Windows
* Adds 'deps' dependency for cirdl
* Adjust docker-entrypoint.sh to use CODEX_CIRCUIT_DIR env var
* Review comments by Giuliano
---------
Signed-off-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
Co-authored-by: Adam Uhlíř <adam@uhlir.dev>
Co-authored-by: Veaceslav Doina <20563034+veaceslavdoina@users.noreply.github.com>
* Support CORS for POST and PATCH availability endpoints (#897)
* Adds testnet marketplace address to known deployments (#911)
* API tweaks for OpenAPI, errors and endpoints (#886)
* All sort of tweaks
* docs: availability's minPrice doc
* Revert changes to the two node test example
* Change default EC params in REST API
Change default EC params in REST API to 3 nodes and 1 tolerance.
Adjust integration tests to honour these settings.
---------
Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
---------
Signed-off-by: Adam Uhlíř <adam@uhlir.dev>
Signed-off-by: Giuliano Mega <giuliano.mega@gmail.com>
Signed-off-by: Slava <20563034+veaceslavdoina@users.noreply.github.com>
Signed-off-by: Arnaud <arnaud@status.im>
Signed-off-by: Ben Bierens <39762930+benbierens@users.noreply.github.com>
Co-authored-by: Adam Uhlíř <adam@uhlir.dev>
Co-authored-by: markspanbroek <mark@spanbroek.net>
Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
Co-authored-by: Tomasz Bekas <tomasz.bekas@gmail.com>
Co-authored-by: Giuliano Mega <giuliano.mega@gmail.com>
Co-authored-by: Arnaud <arno.deville@gmail.com>
Co-authored-by: Ben Bierens <39762930+benbierens@users.noreply.github.com>
Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>
Co-authored-by: Arnaud <arnaud@status.im>
2024-09-24 10:19:58 +00:00
|
|
|
# Enable compat mode for Chronos V4
|
|
|
|
switch("define", "chronosHandleException")
|
|
|
|
|
2022-04-12 00:42:18 +00:00
|
|
|
# begin Nimble config (version 1)
|
|
|
|
when system.fileExists("nimble.paths"):
|
|
|
|
include "nimble.paths"
|
|
|
|
# end Nimble config
|