feat: initial commit
This commit is contained in:
commit
7183e36b26
9 changed files with 186 additions and 0 deletions
1
.envrc
Normal file
1
.envrc
Normal file
|
@ -0,0 +1 @@
|
|||
use flake
|
8
.gitignore
vendored
Normal file
8
.gitignore
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Created by https://www.toptal.com/developers/gitignore/api/direnv
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=direnv
|
||||
|
||||
### direnv ###
|
||||
.direnv
|
||||
.envrc
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/direnv
|
5
example/default.nix
Normal file
5
example/default.nix
Normal file
|
@ -0,0 +1,5 @@
|
|||
{ pkgs ? import <nixpkgs> { } }:
|
||||
let
|
||||
lib = import ../lib.nix { inherit pkgs; };
|
||||
in
|
||||
lib.genNetrc { projectDir = ./.; }
|
7
example/poetry.lock
generated
Normal file
7
example/poetry.lock
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
|
||||
package = []
|
||||
|
||||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = "^3.11"
|
||||
content-hash = "8ebb161448cb827b31357cc68b7c8ada8dd31f9185cc957d9ccedf69ecb28673"
|
7
example/poetry.toml
Normal file
7
example/poetry.toml
Normal file
|
@ -0,0 +1,7 @@
|
|||
[http-basic.foo]
|
||||
username = "foo"
|
||||
password = "bar"
|
||||
|
||||
[http-basic.foo2]
|
||||
username = "foo2"
|
||||
password = "bar2"
|
27
example/pyproject.toml
Normal file
27
example/pyproject.toml
Normal file
|
@ -0,0 +1,27 @@
|
|||
[tool.poetry]
|
||||
name = "example"
|
||||
version = "0.1.0"
|
||||
description = ""
|
||||
authors = ["Your Name <you@example.com>"]
|
||||
readme = "README.md"
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.11"
|
||||
|
||||
[[tool.poetry.source]]
|
||||
name = "foo"
|
||||
url = "https://foo.bar/simple/"
|
||||
priority = "primary"
|
||||
|
||||
[[tool.poetry.source]]
|
||||
name = "foo2"
|
||||
url = "https://foo2.bar/simple/"
|
||||
priority = "primary"
|
||||
|
||||
[[tool.poetry.source]]
|
||||
name = "PyPI"
|
||||
priority = "primary"
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core"]
|
||||
build-backend = "poetry.core.masonry.api"
|
63
flake.lock
Normal file
63
flake.lock
Normal file
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
"nodes": {
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1704982712,
|
||||
"narHash": "sha256-2Ptt+9h8dczgle2Oo6z5ni5rt/uLMG47UFTR1ry/wgg=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "07f6395285469419cf9d078f59b5b49993198c00",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "flake-parts",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1705133751,
|
||||
"narHash": "sha256-rCIsyE80jgiOU78gCWN3A0wE0tR2GI5nH6MlS+HaaSQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9b19f5e77dd906cb52dade0b7bd280339d2a1f3d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"dir": "lib",
|
||||
"lastModified": 1703961334,
|
||||
"narHash": "sha256-M1mV/Cq+pgjk0rt6VxoyyD+O8cOUiai8t9Q6Yyq4noY=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b0d36bd0a420ecee3bc916c91886caca87c894e9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"dir": "lib",
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
33
flake.nix
Normal file
33
flake.nix
Normal file
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
description = "Description for the project";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
};
|
||||
|
||||
outputs = inputs@{ flake-parts, ... }:
|
||||
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||
imports = [
|
||||
# To import a flake module
|
||||
# 1. Add foo to inputs
|
||||
# 2. Add foo as a parameter to the outputs function
|
||||
# 3. Add here: foo.flakeModule
|
||||
|
||||
];
|
||||
systems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin" ];
|
||||
perSystem = { config, self', inputs', pkgs, system, ... }: {
|
||||
# Per-system attributes can be defined here. The self' and inputs'
|
||||
# module parameters provide easy access to attributes of the same
|
||||
# system.
|
||||
|
||||
# Equivalent to inputs'.nixpkgs.legacyPackages.hello;
|
||||
packages.default = pkgs.hello;
|
||||
};
|
||||
flake = {
|
||||
# The usual flake attributes can be defined here, including system-
|
||||
# agnostic ones like nixosModule and system-enumerating ones, although
|
||||
# those are more easily expressed in perSystem.
|
||||
|
||||
};
|
||||
};
|
||||
}
|
35
lib.nix
Normal file
35
lib.nix
Normal file
|
@ -0,0 +1,35 @@
|
|||
{ pkgs ? import <nixpkgs> { }
|
||||
, lib ? pkgs.lib
|
||||
}:
|
||||
{
|
||||
genNetrc =
|
||||
{ projectDir ? null
|
||||
, poetry ? projectDir + "/poetry.toml"
|
||||
, pyproject ? projectDir + "/pyproject.toml"
|
||||
}:
|
||||
let
|
||||
poetryToml = builtins.fromTOML (builtins.readFile poetry);
|
||||
pyprojectToml = builtins.fromTOML (builtins.readFile pyproject);
|
||||
|
||||
sourceNames = builtins.attrNames poetryToml.http-basic;
|
||||
authSources =
|
||||
let
|
||||
sourceNeedsAuth = { name, ... }: builtins.elem name sourceNames;
|
||||
in
|
||||
builtins.filter sourceNeedsAuth pyprojectToml.tool.poetry.source;
|
||||
mergedSources = map (source: source // (builtins.getAttr source.name poetryToml.http-basic)) authSources;
|
||||
|
||||
mkMachine = url:
|
||||
let
|
||||
matches = builtins.split "(https?://)([^/]*)(.*)" url;
|
||||
mainMatch = builtins.elemAt matches 1;
|
||||
domain = builtins.elemAt mainMatch 1;
|
||||
in
|
||||
domain;
|
||||
mkEntry = { url, username, password, ... }:
|
||||
"machine ${mkMachine url} login ${username} password ${password}";
|
||||
entries = map mkEntry mergedSources;
|
||||
contents = lib.concatLines entries;
|
||||
in
|
||||
pkgs.writeText "netrc" contents;
|
||||
}
|
Loading…
Reference in a new issue