Merge master into staging-next
This commit is contained in:
commit
c7b23f6440
38 changed files with 1419 additions and 1013 deletions
526
maintainers/scripts/pluginupdate.py
Normal file
526
maintainers/scripts/pluginupdate.py
Normal file
|
@ -0,0 +1,526 @@
|
|||
# Used by pkgs/misc/vim-plugins/update.py and pkgs/applications/editors/kakoune/plugins/update.py
|
||||
|
||||
# format:
|
||||
# $ nix run nixpkgs.python3Packages.black -c black update.py
|
||||
# type-check:
|
||||
# $ nix run nixpkgs.python3Packages.mypy -c mypy update.py
|
||||
# linted:
|
||||
# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265 update.py
|
||||
|
||||
import argparse
|
||||
import functools
|
||||
import http
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import traceback
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
import xml.etree.ElementTree as ET
|
||||
from datetime import datetime
|
||||
from functools import wraps
|
||||
from multiprocessing.dummy import Pool
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional, Tuple, Union, Any, Callable
|
||||
from urllib.parse import urljoin, urlparse
|
||||
from tempfile import NamedTemporaryFile
|
||||
|
||||
import git
|
||||
|
||||
ATOM_ENTRY = "{http://www.w3.org/2005/Atom}entry" # " vim gets confused here
|
||||
ATOM_LINK = "{http://www.w3.org/2005/Atom}link" # "
|
||||
ATOM_UPDATED = "{http://www.w3.org/2005/Atom}updated" # "
|
||||
|
||||
|
||||
def retry(ExceptionToCheck: Any, tries: int = 4, delay: float = 3, backoff: float = 2):
|
||||
"""Retry calling the decorated function using an exponential backoff.
|
||||
http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/
|
||||
original from: http://wiki.python.org/moin/PythonDecoratorLibrary#Retry
|
||||
(BSD licensed)
|
||||
:param ExceptionToCheck: the exception on which to retry
|
||||
:param tries: number of times to try (not retry) before giving up
|
||||
:param delay: initial delay between retries in seconds
|
||||
:param backoff: backoff multiplier e.g. value of 2 will double the delay
|
||||
each retry
|
||||
"""
|
||||
|
||||
def deco_retry(f: Callable) -> Callable:
|
||||
@wraps(f)
|
||||
def f_retry(*args: Any, **kwargs: Any) -> Any:
|
||||
mtries, mdelay = tries, delay
|
||||
while mtries > 1:
|
||||
try:
|
||||
return f(*args, **kwargs)
|
||||
except ExceptionToCheck as e:
|
||||
print(f"{str(e)}, Retrying in {mdelay} seconds...")
|
||||
time.sleep(mdelay)
|
||||
mtries -= 1
|
||||
mdelay *= backoff
|
||||
return f(*args, **kwargs)
|
||||
|
||||
return f_retry # true decorator
|
||||
|
||||
return deco_retry
|
||||
|
||||
|
||||
def make_request(url: str) -> urllib.request.Request:
|
||||
token = os.getenv("GITHUB_API_TOKEN")
|
||||
headers = {}
|
||||
if token is not None:
|
||||
headers["Authorization"] = f"token {token}"
|
||||
return urllib.request.Request(url, headers=headers)
|
||||
|
||||
|
||||
class Repo:
|
||||
def __init__(
|
||||
self, owner: str, name: str, branch: str, alias: Optional[str]
|
||||
) -> None:
|
||||
self.owner = owner
|
||||
self.name = name
|
||||
self.branch = branch
|
||||
self.alias = alias
|
||||
self.redirect: Dict[str, str] = {}
|
||||
|
||||
def url(self, path: str) -> str:
|
||||
return urljoin(f"https://github.com/{self.owner}/{self.name}/", path)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Repo({self.owner}, {self.name})"
|
||||
|
||||
@retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
|
||||
def has_submodules(self) -> bool:
|
||||
try:
|
||||
req = make_request(self.url(f"blob/{self.branch}/.gitmodules"))
|
||||
urllib.request.urlopen(req, timeout=10).close()
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 404:
|
||||
return False
|
||||
else:
|
||||
raise
|
||||
return True
|
||||
|
||||
@retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
|
||||
def latest_commit(self) -> Tuple[str, datetime]:
|
||||
commit_url = self.url(f"commits/{self.branch}.atom")
|
||||
commit_req = make_request(commit_url)
|
||||
with urllib.request.urlopen(commit_req, timeout=10) as req:
|
||||
self.check_for_redirect(commit_url, req)
|
||||
xml = req.read()
|
||||
root = ET.fromstring(xml)
|
||||
latest_entry = root.find(ATOM_ENTRY)
|
||||
assert latest_entry is not None, f"No commits found in repository {self}"
|
||||
commit_link = latest_entry.find(ATOM_LINK)
|
||||
assert commit_link is not None, f"No link tag found feed entry {xml}"
|
||||
url = urlparse(commit_link.get("href"))
|
||||
updated_tag = latest_entry.find(ATOM_UPDATED)
|
||||
assert (
|
||||
updated_tag is not None and updated_tag.text is not None
|
||||
), f"No updated tag found feed entry {xml}"
|
||||
updated = datetime.strptime(updated_tag.text, "%Y-%m-%dT%H:%M:%SZ")
|
||||
return Path(str(url.path)).name, updated
|
||||
|
||||
def check_for_redirect(self, url: str, req: http.client.HTTPResponse):
|
||||
response_url = req.geturl()
|
||||
if url != response_url:
|
||||
new_owner, new_name = (
|
||||
urllib.parse.urlsplit(response_url).path.strip("/").split("/")[:2]
|
||||
)
|
||||
end_line = "\n" if self.alias is None else f" as {self.alias}\n"
|
||||
plugin_line = "{owner}/{name}" + end_line
|
||||
|
||||
old_plugin = plugin_line.format(owner=self.owner, name=self.name)
|
||||
new_plugin = plugin_line.format(owner=new_owner, name=new_name)
|
||||
self.redirect[old_plugin] = new_plugin
|
||||
|
||||
def prefetch_git(self, ref: str) -> str:
|
||||
data = subprocess.check_output(
|
||||
["nix-prefetch-git", "--fetch-submodules", self.url(""), ref]
|
||||
)
|
||||
return json.loads(data)["sha256"]
|
||||
|
||||
def prefetch_github(self, ref: str) -> str:
|
||||
data = subprocess.check_output(
|
||||
["nix-prefetch-url", "--unpack", self.url(f"archive/{ref}.tar.gz")]
|
||||
)
|
||||
return data.strip().decode("utf-8")
|
||||
|
||||
|
||||
class Plugin:
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
commit: str,
|
||||
has_submodules: bool,
|
||||
sha256: str,
|
||||
date: Optional[datetime] = None,
|
||||
) -> None:
|
||||
self.name = name
|
||||
self.commit = commit
|
||||
self.has_submodules = has_submodules
|
||||
self.sha256 = sha256
|
||||
self.date = date
|
||||
|
||||
@property
|
||||
def normalized_name(self) -> str:
|
||||
return self.name.replace(".", "-")
|
||||
|
||||
@property
|
||||
def version(self) -> str:
|
||||
assert self.date is not None
|
||||
return self.date.strftime("%Y-%m-%d")
|
||||
|
||||
def as_json(self) -> Dict[str, str]:
|
||||
copy = self.__dict__.copy()
|
||||
del copy["date"]
|
||||
return copy
|
||||
|
||||
|
||||
class Editor:
|
||||
"""The configuration of the update script."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
root: Path,
|
||||
get_plugins: str,
|
||||
generate_nix: Callable[[List[Tuple[str, str, Plugin]], str], None],
|
||||
default_in: Optional[Path] = None,
|
||||
default_out: Optional[Path] = None,
|
||||
deprecated: Optional[Path] = None,
|
||||
cache_file: Optional[str] = None,
|
||||
):
|
||||
self.name = name
|
||||
self.root = root
|
||||
self.get_plugins = get_plugins
|
||||
self.generate_nix = generate_nix
|
||||
self.default_in = default_in or root.joinpath(f"{name}-plugin-names")
|
||||
self.default_out = default_out or root.joinpath("generated.nix")
|
||||
self.deprecated = deprecated or root.joinpath("deprecated.json")
|
||||
self.cache_file = cache_file or f"{name}-plugin-cache.json"
|
||||
|
||||
|
||||
class CleanEnvironment(object):
|
||||
def __enter__(self) -> None:
|
||||
self.old_environ = os.environ.copy()
|
||||
local_pkgs = str(Path(__file__).parent.parent.parent)
|
||||
os.environ["NIX_PATH"] = f"localpkgs={local_pkgs}"
|
||||
self.empty_config = NamedTemporaryFile()
|
||||
self.empty_config.write(b"{}")
|
||||
self.empty_config.flush()
|
||||
os.environ["NIXPKGS_CONFIG"] = self.empty_config.name
|
||||
|
||||
def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
|
||||
os.environ.update(self.old_environ)
|
||||
self.empty_config.close()
|
||||
|
||||
|
||||
def get_current_plugins(editor: Editor) -> List[Plugin]:
|
||||
with CleanEnvironment():
|
||||
out = subprocess.check_output(["nix", "eval", "--json", editor.get_plugins])
|
||||
data = json.loads(out)
|
||||
plugins = []
|
||||
for name, attr in data.items():
|
||||
p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
|
||||
plugins.append(p)
|
||||
return plugins
|
||||
|
||||
|
||||
def prefetch_plugin(
|
||||
user: str,
|
||||
repo_name: str,
|
||||
branch: str,
|
||||
alias: Optional[str],
|
||||
cache: "Optional[Cache]" = None,
|
||||
) -> Tuple[Plugin, Dict[str, str]]:
|
||||
repo = Repo(user, repo_name, branch, alias)
|
||||
commit, date = repo.latest_commit()
|
||||
has_submodules = repo.has_submodules()
|
||||
cached_plugin = cache[commit] if cache else None
|
||||
if cached_plugin is not None:
|
||||
cached_plugin.name = alias or repo_name
|
||||
cached_plugin.date = date
|
||||
return cached_plugin, repo.redirect
|
||||
|
||||
print(f"prefetch {user}/{repo_name}")
|
||||
if has_submodules:
|
||||
sha256 = repo.prefetch_git(commit)
|
||||
else:
|
||||
sha256 = repo.prefetch_github(commit)
|
||||
|
||||
return (
|
||||
Plugin(alias or repo_name, commit, has_submodules, sha256, date=date),
|
||||
repo.redirect,
|
||||
)
|
||||
|
||||
|
||||
def fetch_plugin_from_pluginline(plugin_line: str) -> Plugin:
|
||||
plugin, _ = prefetch_plugin(*parse_plugin_line(plugin_line))
|
||||
return plugin
|
||||
|
||||
|
||||
def print_download_error(plugin: str, ex: Exception):
|
||||
print(f"{plugin}: {ex}", file=sys.stderr)
|
||||
ex_traceback = ex.__traceback__
|
||||
tb_lines = [
|
||||
line.rstrip("\n")
|
||||
for line in traceback.format_exception(ex.__class__, ex, ex_traceback)
|
||||
]
|
||||
print("\n".join(tb_lines))
|
||||
|
||||
|
||||
def check_results(
|
||||
results: List[Tuple[str, str, Union[Exception, Plugin], Dict[str, str]]]
|
||||
) -> Tuple[List[Tuple[str, str, Plugin]], Dict[str, str]]:
|
||||
failures: List[Tuple[str, Exception]] = []
|
||||
plugins = []
|
||||
redirects: Dict[str, str] = {}
|
||||
for (owner, name, result, redirect) in results:
|
||||
if isinstance(result, Exception):
|
||||
failures.append((name, result))
|
||||
else:
|
||||
plugins.append((owner, name, result))
|
||||
redirects.update(redirect)
|
||||
|
||||
print(f"{len(results) - len(failures)} plugins were checked", end="")
|
||||
if len(failures) == 0:
|
||||
print()
|
||||
return plugins, redirects
|
||||
else:
|
||||
print(f", {len(failures)} plugin(s) could not be downloaded:\n")
|
||||
|
||||
for (plugin, exception) in failures:
|
||||
print_download_error(plugin, exception)
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def parse_plugin_line(line: str) -> Tuple[str, str, str, Optional[str]]:
|
||||
branch = "master"
|
||||
alias = None
|
||||
name, repo = line.split("/")
|
||||
if " as " in repo:
|
||||
repo, alias = repo.split(" as ")
|
||||
alias = alias.strip()
|
||||
if "@" in repo:
|
||||
repo, branch = repo.split("@")
|
||||
|
||||
return (name.strip(), repo.strip(), branch.strip(), alias)
|
||||
|
||||
|
||||
def load_plugin_spec(plugin_file: str) -> List[Tuple[str, str, str, Optional[str]]]:
|
||||
plugins = []
|
||||
with open(plugin_file) as f:
|
||||
for line in f:
|
||||
plugin = parse_plugin_line(line)
|
||||
if not plugin[0]:
|
||||
msg = f"Invalid repository {line}, must be in the format owner/repo[ as alias]"
|
||||
print(msg, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
plugins.append(plugin)
|
||||
return plugins
|
||||
|
||||
|
||||
def get_cache_path(cache_file_name: str) -> Optional[Path]:
|
||||
xdg_cache = os.environ.get("XDG_CACHE_HOME", None)
|
||||
if xdg_cache is None:
|
||||
home = os.environ.get("HOME", None)
|
||||
if home is None:
|
||||
return None
|
||||
xdg_cache = str(Path(home, ".cache"))
|
||||
|
||||
return Path(xdg_cache, cache_file_name)
|
||||
|
||||
|
||||
class Cache:
|
||||
def __init__(self, initial_plugins: List[Plugin], cache_file_name: str) -> None:
|
||||
self.cache_file = get_cache_path(cache_file_name)
|
||||
|
||||
downloads = {}
|
||||
for plugin in initial_plugins:
|
||||
downloads[plugin.commit] = plugin
|
||||
downloads.update(self.load())
|
||||
self.downloads = downloads
|
||||
|
||||
def load(self) -> Dict[str, Plugin]:
|
||||
if self.cache_file is None or not self.cache_file.exists():
|
||||
return {}
|
||||
|
||||
downloads: Dict[str, Plugin] = {}
|
||||
with open(self.cache_file) as f:
|
||||
data = json.load(f)
|
||||
for attr in data.values():
|
||||
p = Plugin(
|
||||
attr["name"], attr["commit"], attr["has_submodules"], attr["sha256"]
|
||||
)
|
||||
downloads[attr["commit"]] = p
|
||||
return downloads
|
||||
|
||||
def store(self) -> None:
|
||||
if self.cache_file is None:
|
||||
return
|
||||
|
||||
os.makedirs(self.cache_file.parent, exist_ok=True)
|
||||
with open(self.cache_file, "w+") as f:
|
||||
data = {}
|
||||
for name, attr in self.downloads.items():
|
||||
data[name] = attr.as_json()
|
||||
json.dump(data, f, indent=4, sort_keys=True)
|
||||
|
||||
def __getitem__(self, key: str) -> Optional[Plugin]:
|
||||
return self.downloads.get(key, None)
|
||||
|
||||
def __setitem__(self, key: str, value: Plugin) -> None:
|
||||
self.downloads[key] = value
|
||||
|
||||
|
||||
def prefetch(
|
||||
args: Tuple[str, str, str, Optional[str]], cache: Cache
|
||||
) -> Tuple[str, str, Union[Exception, Plugin], dict]:
|
||||
assert len(args) == 4
|
||||
owner, repo, branch, alias = args
|
||||
try:
|
||||
plugin, redirect = prefetch_plugin(owner, repo, branch, alias, cache)
|
||||
cache[plugin.commit] = plugin
|
||||
return (owner, repo, plugin, redirect)
|
||||
except Exception as e:
|
||||
return (owner, repo, e, {})
|
||||
|
||||
|
||||
def rewrite_input(
|
||||
input_file: Path,
|
||||
deprecated: Path,
|
||||
redirects: Dict[str, str] = None,
|
||||
append: Tuple = (),
|
||||
):
|
||||
with open(input_file, "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
lines.extend(append)
|
||||
|
||||
if redirects:
|
||||
lines = [redirects.get(line, line) for line in lines]
|
||||
|
||||
cur_date_iso = datetime.now().strftime("%Y-%m-%d")
|
||||
with open(deprecated, "r") as f:
|
||||
deprecations = json.load(f)
|
||||
for old, new in redirects.items():
|
||||
old_plugin = fetch_plugin_from_pluginline(old)
|
||||
new_plugin = fetch_plugin_from_pluginline(new)
|
||||
if old_plugin.normalized_name != new_plugin.normalized_name:
|
||||
deprecations[old_plugin.normalized_name] = {
|
||||
"new": new_plugin.normalized_name,
|
||||
"date": cur_date_iso,
|
||||
}
|
||||
with open(deprecated, "w") as f:
|
||||
json.dump(deprecations, f, indent=4, sort_keys=True)
|
||||
|
||||
lines = sorted(lines, key=str.casefold)
|
||||
|
||||
with open(input_file, "w") as f:
|
||||
f.writelines(lines)
|
||||
|
||||
|
||||
def parse_args(editor: Editor):
|
||||
parser = argparse.ArgumentParser(
|
||||
description=(
|
||||
f"Updates nix derivations for {editor.name} plugins"
|
||||
f"By default from {editor.default_in} to {editor.default_out}"
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
"--add",
|
||||
dest="add_plugins",
|
||||
default=[],
|
||||
action="append",
|
||||
help=f"Plugin to add to {editor.name}Plugins from Github in the form owner/repo",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--input-names",
|
||||
"-i",
|
||||
dest="input_file",
|
||||
default=editor.default_in,
|
||||
help="A list of plugins in the form owner/repo",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--out",
|
||||
"-o",
|
||||
dest="outfile",
|
||||
default=editor.default_out,
|
||||
help="Filename to save generated nix code",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--proc",
|
||||
"-p",
|
||||
dest="proc",
|
||||
type=int,
|
||||
default=30,
|
||||
help="Number of concurrent processes to spawn.",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
|
||||
repo.index.add([str(f.resolve()) for f in files])
|
||||
|
||||
if repo.index.diff("HEAD"):
|
||||
print(f'committing to nixpkgs "{message}"')
|
||||
repo.index.commit(message)
|
||||
else:
|
||||
print("no changes in working tree to commit")
|
||||
|
||||
|
||||
def get_update(input_file: str, outfile: str, proc: int, editor: Editor):
|
||||
cache: Cache = Cache(get_current_plugins(editor), editor.cache_file)
|
||||
_prefetch = functools.partial(prefetch, cache=cache)
|
||||
|
||||
def update() -> dict:
|
||||
plugin_names = load_plugin_spec(input_file)
|
||||
|
||||
try:
|
||||
pool = Pool(processes=proc)
|
||||
results = pool.map(_prefetch, plugin_names)
|
||||
finally:
|
||||
cache.store()
|
||||
|
||||
plugins, redirects = check_results(results)
|
||||
|
||||
editor.generate_nix(plugins, outfile)
|
||||
|
||||
return redirects
|
||||
|
||||
return update
|
||||
|
||||
|
||||
def update_plugins(editor: Editor):
|
||||
"""The main entry function of this module. All input arguments are grouped in the `Editor`."""
|
||||
|
||||
args = parse_args(editor)
|
||||
nixpkgs_repo = git.Repo(editor.root, search_parent_directories=True)
|
||||
update = get_update(args.input_file, args.outfile, args.proc, editor)
|
||||
|
||||
redirects = update()
|
||||
rewrite_input(args.input_file, editor.deprecated, redirects)
|
||||
commit(nixpkgs_repo, f"{editor.name}Plugins: update", [args.outfile])
|
||||
|
||||
if redirects:
|
||||
update()
|
||||
commit(
|
||||
nixpkgs_repo,
|
||||
f"{editor.name}Plugins: resolve github repository redirects",
|
||||
[args.outfile, args.input_file, editor.deprecated],
|
||||
)
|
||||
|
||||
for plugin_line in args.add_plugins:
|
||||
rewrite_input(args.input_fil, editor.deprecated, append=(plugin_line + "\n",))
|
||||
update()
|
||||
plugin = fetch_plugin_from_pluginline(plugin_line)
|
||||
commit(
|
||||
nixpkgs_repo,
|
||||
"{editor}Plugins.{name}: init at {version}".format(
|
||||
editor=editor.name, name=plugin.normalized_name, version=plugin.version
|
||||
),
|
||||
[args.outfile, args.input_file],
|
||||
)
|
|
@ -104,7 +104,7 @@ let
|
|||
ignoreCollisions = true;
|
||||
};
|
||||
|
||||
filterGutenprint = pkgs: filter (pkg: pkg.meta.isGutenprint or false == true) pkgs;
|
||||
filterGutenprint = filter (pkg: pkg.meta.isGutenprint or false == true);
|
||||
containsGutenprint = pkgs: length (filterGutenprint pkgs) > 0;
|
||||
getGutenprint = pkgs: head (filterGutenprint pkgs);
|
||||
|
||||
|
|
|
@ -1,23 +1,25 @@
|
|||
{ rust, rustPlatform, stdenv, lib, fetchFromGitHub, autoreconfHook, makeWrapper
|
||||
, cargo, pkg-config
|
||||
, bash, curl, coreutils, boost17x, db62, libsodium, libevent, utf8cpp, util-linux
|
||||
, fetchpatch, cargo, pkg-config, curl, coreutils, boost174, db62, hexdump
|
||||
, libsodium, libevent, utf8cpp, util-linux, withWallet ? true, withDaemon ? true
|
||||
, withUtils ? true
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
rustPlatform.buildRustPackage.override { stdenv = stdenv; } rec {
|
||||
pname = "zcash";
|
||||
version = "4.1.1";
|
||||
version = "4.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "zcash";
|
||||
repo = "zcash";
|
||||
rev = "v${version}";
|
||||
sha256 = "185zrw276g545np0niw5hlhlppkjbf5a1r4rwhnbaimdjdii2dil";
|
||||
sha256 = "00pn1jw8j90y7i8nc92b51znz4gczphvdzbkbcjx63cf6vk7v4ks";
|
||||
};
|
||||
|
||||
cargoSha256 = "0qxr6asf8zsya0f1ri39z2cnfpjk96hgwjchz2c7j87vibbvg6dc";
|
||||
cargoSha256 = "1rl9sjbvpfrv1mlyb04vw1935qx0kz9cs177xl7izdva1ixk9blr";
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook cargo makeWrapper pkg-config ];
|
||||
buildInputs = [ bash boost17x db62 libevent libsodium utf8cpp ];
|
||||
nativeBuildInputs = [ autoreconfHook cargo hexdump makeWrapper pkg-config ];
|
||||
buildInputs = [ boost174 libevent libsodium utf8cpp ]
|
||||
++ lib.optional withWallet db62;
|
||||
|
||||
# Use the stdenv default phases (./configure; make) instead of the
|
||||
# ones from buildRustPackage.
|
||||
|
@ -26,6 +28,14 @@ rustPlatform.buildRustPackage rec {
|
|||
checkPhase = "checkPhase";
|
||||
installPhase = "installPhase";
|
||||
|
||||
patches = [
|
||||
# See https://github.com/zcash/zcash/pull/5015
|
||||
(fetchpatch {
|
||||
url = "https://github.com/zcash/zcash/commit/a0ac27ec6ed434a233c7ad2468258f6e6e7e9688.patch";
|
||||
sha256 = "0pmx1spql9p8vvpjgw7qf3qy46f4mh9ni16bq4ss1xz1z9zgjc4k";
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# Have to do this here instead of in preConfigure because
|
||||
# cargoDepsCopy gets unset after postPatch.
|
||||
|
@ -34,10 +44,12 @@ rustPlatform.buildRustPackage rec {
|
|||
|
||||
configureFlags = [
|
||||
"--disable-tests"
|
||||
"--with-boost-libdir=${lib.getLib boost17x}/lib"
|
||||
"--with-boost-libdir=${lib.getLib boost174}/lib"
|
||||
"CXXFLAGS=-I${lib.getDev utf8cpp}/include/utf8cpp"
|
||||
"RUST_TARGET=${rust.toRustTargetSpec stdenv.hostPlatform}"
|
||||
];
|
||||
] ++ lib.optional (!withWallet) "--disable-wallet"
|
||||
++ lib.optional (!withDaemon) "--without-daemon"
|
||||
++ lib.optional (!withUtils) "--without-utils";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
|
|
46
pkgs/applications/editors/kakoune/plugins/aliases.nix
Normal file
46
pkgs/applications/editors/kakoune/plugins/aliases.nix
Normal file
|
@ -0,0 +1,46 @@
|
|||
# Deprecated aliases - for backward compatibility
|
||||
|
||||
lib: overriden:
|
||||
|
||||
with overriden;
|
||||
|
||||
let
|
||||
# Removing recurseForDerivation prevents derivations of aliased attribute
|
||||
# set to appear while listing all the packages available.
|
||||
removeRecurseForDerivations = alias: with lib;
|
||||
if alias.recurseForDerivations or false then
|
||||
removeAttrs alias ["recurseForDerivations"]
|
||||
else alias;
|
||||
|
||||
# Disabling distribution prevents top-level aliases for non-recursed package
|
||||
# sets from building on Hydra.
|
||||
removeDistribute = alias: with lib;
|
||||
if isDerivation alias then
|
||||
dontDistribute alias
|
||||
else alias;
|
||||
|
||||
# Make sure that we are not shadowing something from
|
||||
# all-packages.nix.
|
||||
checkInPkgs = n: alias: if builtins.hasAttr n overriden
|
||||
then throw "Alias ${n} is still in kakounePlugins"
|
||||
else alias;
|
||||
|
||||
mapAliases = aliases:
|
||||
lib.mapAttrs (n: alias: removeDistribute
|
||||
(removeRecurseForDerivations
|
||||
(checkInPkgs n alias)))
|
||||
aliases;
|
||||
|
||||
deprecations = lib.mapAttrs (old: info:
|
||||
throw "${old} was renamed to ${info.new} on ${info.date}. Please update to ${info.new}."
|
||||
) (builtins.fromJSON (builtins.readFile ./deprecated.json));
|
||||
|
||||
in
|
||||
mapAliases ({
|
||||
kak-auto-pairs = auto-pairs-kak; # backwards compat, added 2021-01-04
|
||||
kak-buffers = kakoune-buffers; # backwards compat, added 2021-01-04
|
||||
kak-fzf = fzf-kak; # backwards compat, added 2021-01-04
|
||||
kak-powerline = powerline-kak; # backwards compat, added 2021-01-04
|
||||
kak-prelude = prelude-kak; # backwards compat, added 2021-01-04
|
||||
kak-vertical-selection = kakoune-vertical-selection; # backwards compat, added 2021-01-04
|
||||
} // deprecations)
|
|
@ -0,0 +1,33 @@
|
|||
{ lib, stdenv, rtpPath ? "share/kak/autoload/plugins" }:
|
||||
rec {
|
||||
buildKakounePlugin = attrs@{
|
||||
name ? "${attrs.pname}-${attrs.version}",
|
||||
namePrefix ? "kakplugin-",
|
||||
src,
|
||||
unpackPhase ? "",
|
||||
configurePhase ? "",
|
||||
buildPhase ? "",
|
||||
preInstall ? "",
|
||||
postInstall ? "",
|
||||
path ? lib.getName name,
|
||||
...
|
||||
}:
|
||||
stdenv.mkDerivation ((builtins.removeAttrs attrs [ "namePrefix" "path" ]) // {
|
||||
name = namePrefix + name;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
target=$out/${rtpPath}/${path}
|
||||
mkdir -p $out/${rtpPath}
|
||||
cp -r . $target
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
});
|
||||
|
||||
buildKakounePluginFrom2Nix = attrs: buildKakounePlugin ({
|
||||
buildPhase = ":";
|
||||
configurePhase = ":";
|
||||
} // attrs);
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
{ lib, stdenv, fetchFromGitLab }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "case.kak";
|
||||
version = "unstable-2020-04-06";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "FlyingWombat";
|
||||
repo = "case.kak";
|
||||
rev = "6f1511820aa3abfa118e0f856118adc8113e2185";
|
||||
sha256 = "002njrlwgakqgp74wivbppr9qyn57dn4n5bxkr6k6nglk9qndwdp";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r rc/case.kak $out/share/kak/autoload/plugins
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Case convention conversion for Kakoune";
|
||||
homepage = "https://gitlab.com/FlyingWombat/case.kak";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,17 +1,25 @@
|
|||
{ pkgs, parinfer-rust, rep, kak-lsp }:
|
||||
{ callPackage, config, kakouneUtils, lib }:
|
||||
|
||||
{
|
||||
inherit parinfer-rust rep kak-lsp;
|
||||
let
|
||||
|
||||
case-kak = pkgs.callPackage ./case.kak.nix { };
|
||||
kak-ansi = pkgs.callPackage ./kak-ansi.nix { };
|
||||
kak-auto-pairs = pkgs.callPackage ./kak-auto-pairs.nix { };
|
||||
kak-buffers = pkgs.callPackage ./kak-buffers.nix { };
|
||||
kak-fzf = pkgs.callPackage ./kak-fzf.nix { };
|
||||
kak-plumb = pkgs.callPackage ./kak-plumb.nix { };
|
||||
kak-powerline = pkgs.callPackage ./kak-powerline.nix { };
|
||||
kak-prelude = pkgs.callPackage ./kak-prelude.nix { };
|
||||
kak-vertical-selection = pkgs.callPackage ./kak-vertical-selection.nix { };
|
||||
openscad-kak = pkgs.callPackage ./openscad.kak.nix { };
|
||||
quickscope-kak = pkgs.callPackage ./quickscope.kak.nix { };
|
||||
}
|
||||
inherit (kakouneUtils.override {}) buildKakounePluginFrom2Nix;
|
||||
|
||||
plugins = callPackage ./generated.nix {
|
||||
inherit buildKakounePluginFrom2Nix overrides;
|
||||
};
|
||||
|
||||
# TL;DR
|
||||
# * Add your plugin to ./kakoune-plugin-names
|
||||
# * run ./update.py
|
||||
#
|
||||
# If additional modifications to the build process are required,
|
||||
# add to ./overrides.nix.
|
||||
overrides = callPackage ./overrides.nix {
|
||||
inherit buildKakounePluginFrom2Nix;
|
||||
};
|
||||
|
||||
aliases = lib.optionalAttrs (config.allowAliases or true) (import ./aliases.nix lib plugins);
|
||||
|
||||
in
|
||||
|
||||
plugins // aliases
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
{}
|
211
pkgs/applications/editors/kakoune/plugins/generated.nix
Normal file
211
pkgs/applications/editors/kakoune/plugins/generated.nix
Normal file
|
@ -0,0 +1,211 @@
|
|||
# This file has been generated by ./pkgs/applications/editors/kakoune/plugins/update.py. Do not edit!
|
||||
{ lib, buildKakounePluginFrom2Nix, fetchFromGitHub, overrides ? (self: super: {}) }:
|
||||
let
|
||||
packages = ( self:
|
||||
{
|
||||
active-window-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "active-window-kak";
|
||||
version = "2020-05-13";
|
||||
src = fetchFromGitHub {
|
||||
owner = "greenfork";
|
||||
repo = "active-window.kak";
|
||||
rev = "988db69cfbb88bd741d089bb43b0be551693e7c1";
|
||||
sha256 = "1fv1cp9q212gamf9z2papl5xcl2w31fpcmbgdzbxcxdl1pvfsqp8";
|
||||
};
|
||||
meta.homepage = "https://github.com/greenfork/active-window.kak/";
|
||||
};
|
||||
|
||||
auto-pairs-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "auto-pairs-kak";
|
||||
version = "2020-10-04";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "auto-pairs.kak";
|
||||
rev = "fd735ec149ef0d9ca5f628a95b1e52858b5afbdc";
|
||||
sha256 = "07795kv9njlnp6mckwv141ny2ns6wyf5r0dfjaxh9ngd105zgif1";
|
||||
};
|
||||
meta.homepage = "https://github.com/alexherbo2/auto-pairs.kak/";
|
||||
};
|
||||
|
||||
connect-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "connect-kak";
|
||||
version = "2021-02-13";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "connect.kak";
|
||||
rev = "0858c0e50c6ca6d214fb088f052385a242548e83";
|
||||
sha256 = "1w4pwybg3v916hcyc49gz0blygv54ivv81x8fxp44ck0sy98idr3";
|
||||
};
|
||||
meta.homepage = "https://github.com/alexherbo2/connect.kak/";
|
||||
};
|
||||
|
||||
fzf-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "fzf-kak";
|
||||
version = "2021-01-27";
|
||||
src = fetchFromGitHub {
|
||||
owner = "andreyorst";
|
||||
repo = "fzf.kak";
|
||||
rev = "e10de405e2a98e910d0808059200d206ba80f865";
|
||||
sha256 = "1hbsm1k8k0cgv7gxqicvnl22n2lb1plhkanniggk694gll22lq68";
|
||||
};
|
||||
meta.homepage = "https://github.com/andreyorst/fzf.kak/";
|
||||
};
|
||||
|
||||
kakoune-buffer-switcher = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-buffer-switcher";
|
||||
version = "2020-12-27";
|
||||
src = fetchFromGitHub {
|
||||
owner = "occivink";
|
||||
repo = "kakoune-buffer-switcher";
|
||||
rev = "6a27c45db87a23070c34fab36d2f8d812cd002a6";
|
||||
sha256 = "1rmwy317908v8p54806m721bpzm8sgygb9abri34537ka6r05y5j";
|
||||
};
|
||||
meta.homepage = "https://github.com/occivink/kakoune-buffer-switcher/";
|
||||
};
|
||||
|
||||
kakoune-buffers = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-buffers";
|
||||
version = "2020-06-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Delapouite";
|
||||
repo = "kakoune-buffers";
|
||||
rev = "67959fbad727ba8470fe8cd6361169560f4fb532";
|
||||
sha256 = "09prhzz4yzf6ryw0npd1gpcfp77681vgawpp1ilfvbf25xgbbz33";
|
||||
};
|
||||
meta.homepage = "https://github.com/Delapouite/kakoune-buffers/";
|
||||
};
|
||||
|
||||
kakoune-easymotion = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-easymotion";
|
||||
version = "2020-03-09";
|
||||
src = fetchFromGitHub {
|
||||
owner = "danr";
|
||||
repo = "kakoune-easymotion";
|
||||
rev = "0ca75450023a149efc70e8e383e459b571355c70";
|
||||
sha256 = "15czvl0qj2k767pysr6xk2v31mkhvcbmv76xs2a8yrslchms70b5";
|
||||
};
|
||||
meta.homepage = "https://github.com/danr/kakoune-easymotion/";
|
||||
};
|
||||
|
||||
kakoune-extra-filetypes = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-extra-filetypes";
|
||||
version = "2021-01-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "kakoune-editor";
|
||||
repo = "kakoune-extra-filetypes";
|
||||
rev = "c6f8aaccd8c9cd6b487964c8943416e21fbe7c18";
|
||||
sha256 = "1vkff8xbycfgxv8x09cvc79qcg5fdzn2x77mbmifmkq236khrwrg";
|
||||
};
|
||||
meta.homepage = "https://github.com/kakoune-editor/kakoune-extra-filetypes/";
|
||||
};
|
||||
|
||||
kakoune-rainbow = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-rainbow";
|
||||
version = "2020-09-01";
|
||||
src = fetchFromGitHub {
|
||||
owner = "listentolist";
|
||||
repo = "kakoune-rainbow";
|
||||
rev = "d09103e8d268cf4621215bf162a0244c9482be3c";
|
||||
sha256 = "1i3id7xw0j4z1a14mscr68ckpgvcwsjpl86lr864wy7w7qcmblx6";
|
||||
};
|
||||
meta.homepage = "https://github.com/listentolist/kakoune-rainbow/";
|
||||
};
|
||||
|
||||
kakoune-registers = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-registers";
|
||||
version = "2020-06-19";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Delapouite";
|
||||
repo = "kakoune-registers";
|
||||
rev = "9531947baecd83c1d4c3bea0adf10f4462f1e120";
|
||||
sha256 = "08v9ndghh7wvr8rsrqm05gksk9ai5vnwvw9gwqasbppb48cv4a8c";
|
||||
};
|
||||
meta.homepage = "https://github.com/Delapouite/kakoune-registers/";
|
||||
};
|
||||
|
||||
kakoune-vertical-selection = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-vertical-selection";
|
||||
version = "2019-04-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "occivink";
|
||||
repo = "kakoune-vertical-selection";
|
||||
rev = "c420f8b867ce47375fac303886e31623669a42b7";
|
||||
sha256 = "13jdyd2j45wvgqvxdzw9zww14ly93bqjb6700zzxj7mkbiff6wsb";
|
||||
};
|
||||
meta.homepage = "https://github.com/occivink/kakoune-vertical-selection/";
|
||||
};
|
||||
|
||||
openscad-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "openscad-kak";
|
||||
version = "2020-12-10";
|
||||
src = fetchFromGitHub {
|
||||
owner = "mayjs";
|
||||
repo = "openscad.kak";
|
||||
rev = "ba51bbdcd96ccf94bb9239bef1481b6f37125849";
|
||||
sha256 = "15dybd6dnnwla6mj8sw83nwd62para1syxzifznl6rz6kp8vqjjj";
|
||||
};
|
||||
meta.homepage = "https://github.com/mayjs/openscad.kak/";
|
||||
};
|
||||
|
||||
powerline-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "powerline-kak";
|
||||
version = "2021-02-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "jdugan6240";
|
||||
repo = "powerline.kak";
|
||||
rev = "322a760daa099d519ff50d14c29b27f3e2af00d1";
|
||||
sha256 = "0mb8f8p6g75p05ifp45i0gbq2mib8c8giz7r1xfd0yrwspp4aksc";
|
||||
};
|
||||
meta.homepage = "https://github.com/jdugan6240/powerline.kak/";
|
||||
};
|
||||
|
||||
prelude-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "prelude-kak";
|
||||
version = "2020-09-06";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "prelude.kak";
|
||||
rev = "f1e0f4d5cb62a36924e3f8ba6824d6aed8c19d23";
|
||||
sha256 = "1pncr8azqvl2z9yvzhc68p1s9fld8cvak8yz88zgrp5ypx2cxl8c";
|
||||
};
|
||||
meta.homepage = "https://github.com/alexherbo2/prelude.kak/";
|
||||
};
|
||||
|
||||
replace-mode-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "replace-mode-kak";
|
||||
version = "2020-10-07";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "replace-mode.kak";
|
||||
rev = "5f4c73cdbaf5aeb964ee35ad4b9081b233af90c0";
|
||||
sha256 = "1cmylx99bm7jwfb4hclb69sdc4n8f29ssyy2byjiw53ni9rnc8q0";
|
||||
};
|
||||
meta.homepage = "https://github.com/alexherbo2/replace-mode.kak/";
|
||||
};
|
||||
|
||||
sleuth-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "sleuth-kak";
|
||||
version = "2020-11-06";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "sleuth.kak";
|
||||
rev = "911db8bd208ad0d289b8fa15a2ac665ff39bd6bd";
|
||||
sha256 = "0g41c0038fpmihqva71xl4vfbmvsp13i47gp6fnmaikajpynzc51";
|
||||
};
|
||||
meta.homepage = "https://github.com/alexherbo2/sleuth.kak/";
|
||||
};
|
||||
|
||||
tabs-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "tabs-kak";
|
||||
version = "2021-02-16";
|
||||
src = fetchFromGitHub {
|
||||
owner = "enricozb";
|
||||
repo = "tabs.kak";
|
||||
rev = "1aaa8cd89e404cbbd76d44ff8089de0951612fbf";
|
||||
sha256 = "0dfz6j6yxl65jbh4xvpiy2abr2sdjyalynzhl28y7l1gzqv4ni3j";
|
||||
};
|
||||
meta.homepage = "https://github.com/enricozb/tabs.kak/";
|
||||
};
|
||||
|
||||
});
|
||||
in lib.fix' (lib.extends overrides packages)
|
|
@ -1,32 +0,0 @@
|
|||
{ lib, stdenv, fetchFromGitHub }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "kak-ansi";
|
||||
version = "0.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "eraserhd";
|
||||
repo = "kak-ansi";
|
||||
rev = "v${version}";
|
||||
sha256 = "0ddjih8hfyf6s4g7y46p1355kklaw1ydzzh61141i0r45wyb2d0d";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/share/kak/autoload/plugins/
|
||||
cp kak-ansi-filter $out/bin/
|
||||
# Hard-code path of filter and don't try to build when Kakoune boots
|
||||
sed '
|
||||
/^declare-option.* ansi_filter /i\
|
||||
declare-option -hidden str ansi_filter %{'"$out"'/bin/kak-ansi-filter}
|
||||
/^declare-option.* ansi_filter /,/^}/d
|
||||
' rc/ansi.kak >$out/share/kak/autoload/plugins/ansi.kak
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Kakoune support for rendering ANSI code";
|
||||
homepage = "https://github.com/eraserhd/kak-ansi";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
{ lib, stdenv, fetchFromGitHub }:
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-auto-pairs";
|
||||
version = "2020-07-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "auto-pairs.kak";
|
||||
rev = "5b4b3b723c34c8b7f40cee60868204974349bf9f";
|
||||
sha256 = "1wgrv03f1lkzflbbaz8n23glij5rvfxf8pcqysd668mbx1hcrk9i";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r rc $out/share/kak/autoload/plugins/auto-pairs
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Kakoune extension to enable automatic closing of pairs";
|
||||
homepage = "https://github.com/alexherbo2/auto-pairs.kak";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ nrdxp ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
{ stdenv, fetchFromGitHub, lib }:
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-buffers";
|
||||
version = "2019-04-03";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Delapouite";
|
||||
repo = "kakoune-buffers";
|
||||
rev = "3b35b23ac2be661a37c085d34dd04d066450f757";
|
||||
sha256 = "0f3g0v1sjinii3ig9753jjj35v2km4h9bcfw9xgzwz8b10d75bax";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r buffers.kak $out/share/kak/autoload/plugins
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Ease navigation between opened buffers in Kakoune";
|
||||
homepage = "https://github.com/Delapouite/kakoune-buffers";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ nrdxp ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
{ lib, stdenv, fetchFromGitHub, fzf }:
|
||||
|
||||
assert lib.asserts.assertOneOf "fzf" fzf.pname [ "fzf" "skim" ];
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-fzf";
|
||||
version = "2020-07-26";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "andreyorst";
|
||||
repo = "fzf.kak";
|
||||
rev = "f23daa698ad95493fbd675ae153e3cac13ef34e9";
|
||||
hash = "sha256-BfXHTJ371ThOizMI/4BAbdJoaltGSP586hz4HqX1KWA=";
|
||||
};
|
||||
|
||||
configurePhase = ''
|
||||
if [[ -x "${fzf}/bin/fzf" ]]; then
|
||||
fzfImpl='${fzf}/bin/fzf'
|
||||
else
|
||||
fzfImpl='${fzf}/bin/sk'
|
||||
fi
|
||||
|
||||
substituteInPlace rc/fzf.kak \
|
||||
--replace \'fzf\' \'"$fzfImpl"\'
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r rc $out/share/kak/autoload/plugins/fzf
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Kakoune plugin that brings integration with fzf";
|
||||
homepage = "https://github.com/andreyorst/fzf.kak";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ nrdxp ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
{ lib, stdenv, fetchFromGitHub, kakoune-unwrapped, plan9port, ... }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "kak-plumb";
|
||||
version = "0.1.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "eraserhd";
|
||||
repo = "kak-plumb";
|
||||
rev = "v${version}";
|
||||
sha256 = "1rz6pr786slnf1a78m3sj09axr4d2lb5rg7sfa4mfg1zcjh06ps6";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/share/kak/autoload/plugins/
|
||||
substitute rc/plumb.kak $out/share/kak/autoload/plugins/plumb.kak \
|
||||
--replace '9 plumb' '${plan9port}/bin/9 plumb'
|
||||
substitute edit-client $out/bin/edit-client \
|
||||
--replace '9 9p' '${plan9port}/bin/9 9p' \
|
||||
--replace 'kak -p' '${kakoune-unwrapped}/bin/kak -p'
|
||||
chmod +x $out/bin/edit-client
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Kakoune integration with the Plan 9 plumber";
|
||||
homepage = "https://github.com/eraserhd/kak-plumb";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
{ stdenv, git, fetchFromGitHub, lib }:
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-powerline";
|
||||
version = "2020-08-22";
|
||||
src = fetchFromGitHub {
|
||||
owner = "jdugan6240";
|
||||
repo = "powerline.kak";
|
||||
rev = "d641b2cd8024f872bcda23f9256e7aff36da02ae";
|
||||
sha256 = "65948f5ef3ab2f46f6d186ad752665c251d887631d439949decc2654a67958a4";
|
||||
};
|
||||
|
||||
configurePhase = ''
|
||||
substituteInPlace rc/modules/git.kak \
|
||||
--replace \'git\' \'${git}/bin/git\'
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r rc $out/share/kak/autoload/plugins/powerline
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Kakoune modeline, but with passion";
|
||||
homepage = "https://github.com/jdugan6240/powerline.kak";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ nrdxp ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
{ lib, stdenv, fetchFromGitHub }:
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-prelude";
|
||||
version = "2020-06-09";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "prelude.kak";
|
||||
rev = "f1e0f4d5cb62a36924e3f8ba6824d6aed8c19d23";
|
||||
sha256 = "1pncr8azqvl2z9yvzhc68p1s9fld8cvak8yz88zgrp5ypx2cxl8c";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r rc $out/share/kak/autoload/plugins/prelude
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Prelude of shell blocks for Kakoune.";
|
||||
homepage = "https://github.com/alexherbo2/prelude.kak";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ buffet ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
{ stdenv, fetchFromGitHub, lib }:
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-vertical-selection";
|
||||
version = "2019-04-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "occivink";
|
||||
repo = "kakoune-vertical-selection";
|
||||
rev = "c420f8b867ce47375fac303886e31623669a42b7";
|
||||
sha256 = "13jdyd2j45wvgqvxdzw9zww14ly93bqjb6700zzxj7mkbiff6wsb";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r vertical-selection.kak $out/share/kak/autoload/plugins
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Select up and down lines that match the same pattern in Kakoune";
|
||||
homepage = "https://github.com/occivink/kakoune-vertical-selection";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ nrdxp ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
alexherbo2/auto-pairs.kak
|
||||
alexherbo2/connect.kak
|
||||
alexherbo2/prelude.kak
|
||||
alexherbo2/replace-mode.kak
|
||||
alexherbo2/sleuth.kak
|
||||
andreyorst/fzf.kak
|
||||
danr/kakoune-easymotion
|
||||
Delapouite/kakoune-buffers
|
||||
Delapouite/kakoune-registers
|
||||
enricozb/tabs.kak@main
|
||||
greenfork/active-window.kak
|
||||
jdugan6240/powerline.kak
|
||||
kakoune-editor/kakoune-extra-filetypes
|
||||
listentolist/kakoune-rainbow
|
||||
mayjs/openscad.kak
|
||||
occivink/kakoune-buffer-switcher
|
||||
occivink/kakoune-vertical-selection
|
|
@ -0,0 +1,4 @@
|
|||
{ lib, stdenv }:
|
||||
{
|
||||
inherit (import ./build-kakoune-plugin.nix { inherit lib stdenv; }) buildKakounePlugin buildKakounePluginFrom2Nix;
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
{ lib, stdenv, fetchFromGitHub }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "openscad.kak";
|
||||
version = "unstable-2019-11-08";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mayjs";
|
||||
repo = "openscad.kak";
|
||||
rev = "d9143d5e7834e3356b49720664d5647cab9db7cc";
|
||||
sha256 = "0j4dqhrn56z77hdalfdxagwz8h6nwr8s9i4w0bs2644k72lsm2ix";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
install -Dm644 rc/openscad.kak -t $out/share/kak/autoload/plugins/
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Syntax highlighting for OpenSCAD files";
|
||||
homepage = "https://github.com/mayjs/openscad.kak";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
161
pkgs/applications/editors/kakoune/plugins/overrides.nix
Normal file
161
pkgs/applications/editors/kakoune/plugins/overrides.nix
Normal file
|
@ -0,0 +1,161 @@
|
|||
{ lib, stdenv, fetchFromGitHub, fetchFromGitLab, fetchgit
|
||||
, buildKakounePluginFrom2Nix
|
||||
, kak-lsp, parinfer-rust, rep
|
||||
, fzf, git, guile, kakoune-unwrapped, lua5_3, plan9port
|
||||
}:
|
||||
|
||||
self: super: {
|
||||
inherit kak-lsp parinfer-rust rep;
|
||||
|
||||
case-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "case-kak";
|
||||
version = "2020-04-06";
|
||||
src = fetchFromGitLab {
|
||||
owner = "FlyingWombat";
|
||||
repo = "case.kak";
|
||||
rev = "6f1511820aa3abfa118e0f856118adc8113e2185";
|
||||
sha256 = "002njrlwgakqgp74wivbppr9qyn57dn4n5bxkr6k6nglk9qndwdp";
|
||||
};
|
||||
meta.homepage = "https://gitlab.com/FlyingWombat/case.kak";
|
||||
};
|
||||
|
||||
fzf-kak = super.fzf-kak.overrideAttrs(oldAttrs: rec {
|
||||
preFixup = ''
|
||||
if [[ -x "${fzf}/bin/fzf" ]]; then
|
||||
fzfImpl='${fzf}/bin/fzf'
|
||||
else
|
||||
fzfImpl='${fzf}/bin/sk'
|
||||
fi
|
||||
|
||||
substituteInPlace $out/share/kak/autoload/plugins/fzf-kak/rc/fzf.kak \
|
||||
--replace \'fzf\' \'"$fzfImpl"\'
|
||||
'';
|
||||
});
|
||||
|
||||
kak-ansi = stdenv.mkDerivation rec {
|
||||
pname = "kak-ansi";
|
||||
version = "0.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "eraserhd";
|
||||
repo = "kak-ansi";
|
||||
rev = "v${version}";
|
||||
sha256 = "0ddjih8hfyf6s4g7y46p1355kklaw1ydzzh61141i0r45wyb2d0d";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/share/kak/autoload/plugins/
|
||||
cp kak-ansi-filter $out/bin/
|
||||
# Hard-code path of filter and don't try to build when Kakoune boots
|
||||
sed '
|
||||
/^declare-option.* ansi_filter /i\
|
||||
declare-option -hidden str ansi_filter %{'"$out"'/bin/kak-ansi-filter}
|
||||
/^declare-option.* ansi_filter /,/^}/d
|
||||
' rc/ansi.kak >$out/share/kak/autoload/plugins/ansi.kak
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Kakoune support for rendering ANSI code";
|
||||
homepage = "https://github.com/eraserhd/kak-ansi";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
};
|
||||
|
||||
kak-plumb = stdenv.mkDerivation rec {
|
||||
pname = "kak-plumb";
|
||||
version = "0.1.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "eraserhd";
|
||||
repo = "kak-plumb";
|
||||
rev = "v${version}";
|
||||
sha256 = "1rz6pr786slnf1a78m3sj09axr4d2lb5rg7sfa4mfg1zcjh06ps6";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/share/kak/autoload/plugins/
|
||||
substitute rc/plumb.kak $out/share/kak/autoload/plugins/plumb.kak \
|
||||
--replace '9 plumb' '${plan9port}/bin/9 plumb'
|
||||
substitute edit-client $out/bin/edit-client \
|
||||
--replace '9 9p' '${plan9port}/bin/9 9p' \
|
||||
--replace 'kak -p' '${kakoune-unwrapped}/bin/kak -p'
|
||||
chmod +x $out/bin/edit-client
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Kakoune integration with the Plan 9 plumber";
|
||||
homepage = "https://github.com/eraserhd/kak-plumb";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
};
|
||||
|
||||
kakoune-rainbow = super.kakoune-rainbow.overrideAttrs(oldAttrs: rec {
|
||||
preFixup = ''
|
||||
mkdir -p $out/bin
|
||||
mv $out/share/kak/autoload/plugins/kakoune-rainbow/bin/kak-rainbow.scm $out/bin
|
||||
substituteInPlace $out/bin/kak-rainbow.scm \
|
||||
--replace '/usr/bin/env -S guile' '${guile}/bin/guile'
|
||||
substituteInPlace $out/share/kak/autoload/plugins/kakoune-rainbow/rainbow.kak \
|
||||
--replace '%sh{dirname "$kak_source"}' "'$out'"
|
||||
'';
|
||||
});
|
||||
|
||||
kakoune-state-save = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-state-save";
|
||||
version = "2020-02-09";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "Screwtapello";
|
||||
repo = "kakoune-state-save";
|
||||
rev = "ab7c0c765326a4a80af78857469ee8c80814c52a";
|
||||
sha256 = "AAOCG0TY3G188NnkkwMCSbkkNe487F4gwiFWwG9Yo+A=";
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Help Kakoune save and restore state between sessions";
|
||||
homepage = "https://gitlab.com/Screwtapello/kakoune-state-save";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ Flakebi ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
};
|
||||
|
||||
powerline-kak = super.powerline-kak.overrideAttrs(oldAttrs: rec {
|
||||
preFixup = ''
|
||||
substituteInPlace $out/share/kak/autoload/plugins/powerline-kak/rc/modules/git.kak \
|
||||
--replace ' git ' ' ${git}/bin/git '
|
||||
'';
|
||||
});
|
||||
|
||||
quickscope-kak = buildKakounePluginFrom2Nix rec {
|
||||
pname = "quickscope-kak";
|
||||
version = "1.0.0";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://git.sr.ht/~voroskoi/quickscope.kak";
|
||||
rev = "v${version}";
|
||||
sha256 = "0y1g3zpa2ql8l9rl5i2w84bka8a09kig9nq9zdchaff5pw660mcx";
|
||||
};
|
||||
|
||||
buildInputs = [ lua5_3 ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins/
|
||||
cp quickscope.* $out/share/kak/autoload/plugins/
|
||||
# substituteInPlace does not like the pipe
|
||||
sed -e 's,[|] *lua,|${lua5_3}/bin/lua,' quickscope.kak >$out/share/kak/autoload/plugins/quickscope.kak
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Highlight f and t jump positions";
|
||||
homepage = "https://sr.ht/~voroskoi/quickscope.kak/";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
{ lib, stdenv, fetchgit, lua5_3 }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "quickscope-kak";
|
||||
version = "1.0.0";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://git.sr.ht/~voroskoi/quickscope.kak";
|
||||
rev = "v${version}";
|
||||
sha256 = "0y1g3zpa2ql8l9rl5i2w84bka8a09kig9nq9zdchaff5pw660mcx";
|
||||
};
|
||||
|
||||
buildInputs = [ lua5_3 ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins/
|
||||
cp quickscope.* $out/share/kak/autoload/plugins/
|
||||
# substituteInPlace does not like the pipe
|
||||
sed -e 's,[|] *lua,|${lua5_3}/bin/lua,' quickscope.kak >$out/share/kak/autoload/plugins/quickscope.kak
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Highlight f and t jump positions";
|
||||
homepage = "https://sr.ht/~voroskoi/quickscope.kak/";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
91
pkgs/applications/editors/kakoune/plugins/update.py
Executable file
91
pkgs/applications/editors/kakoune/plugins/update.py
Executable file
|
@ -0,0 +1,91 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -p nix-prefetch-git -p python3 -p python3Packages.GitPython nix -i python3
|
||||
|
||||
# format:
|
||||
# $ nix run nixpkgs.python3Packages.black -c black update.py
|
||||
# type-check:
|
||||
# $ nix run nixpkgs.python3Packages.mypy -c mypy update.py
|
||||
# linted:
|
||||
# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265,E402 update.py
|
||||
|
||||
import inspect
|
||||
import os
|
||||
import sys
|
||||
from typing import List, Tuple
|
||||
from pathlib import Path
|
||||
|
||||
# Import plugin update library from maintainers/scripts/pluginupdate.py
|
||||
ROOT = Path(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
|
||||
sys.path.insert(
|
||||
0, os.path.join(ROOT.parent.parent.parent.parent.parent, "maintainers", "scripts")
|
||||
)
|
||||
import pluginupdate
|
||||
|
||||
GET_PLUGINS = f"""(with import <localpkgs> {{}};
|
||||
let
|
||||
inherit (kakouneUtils.override {{}}) buildKakounePluginFrom2Nix;
|
||||
generated = callPackage {ROOT}/generated.nix {{
|
||||
inherit buildKakounePluginFrom2Nix;
|
||||
}};
|
||||
hasChecksum = value: lib.isAttrs value && lib.hasAttrByPath ["src" "outputHash"] value;
|
||||
getChecksum = name: value:
|
||||
if hasChecksum value then {{
|
||||
submodules = value.src.fetchSubmodules or false;
|
||||
sha256 = value.src.outputHash;
|
||||
rev = value.src.rev;
|
||||
}} else null;
|
||||
checksums = lib.mapAttrs getChecksum generated;
|
||||
in lib.filterAttrs (n: v: v != null) checksums)"""
|
||||
|
||||
HEADER = "# This file has been generated by ./pkgs/applications/editors/kakoune/plugins/update.py. Do not edit!"
|
||||
|
||||
|
||||
def generate_nix(plugins: List[Tuple[str, str, pluginupdate.Plugin]], outfile: str):
|
||||
sorted_plugins = sorted(plugins, key=lambda v: v[2].name.lower())
|
||||
|
||||
with open(outfile, "w+") as f:
|
||||
f.write(HEADER)
|
||||
f.write(
|
||||
"""
|
||||
{ lib, buildKakounePluginFrom2Nix, fetchFromGitHub, overrides ? (self: super: {}) }:
|
||||
let
|
||||
packages = ( self:
|
||||
{"""
|
||||
)
|
||||
for owner, repo, plugin in sorted_plugins:
|
||||
if plugin.has_submodules:
|
||||
submodule_attr = "\n fetchSubmodules = true;"
|
||||
else:
|
||||
submodule_attr = ""
|
||||
|
||||
f.write(
|
||||
f"""
|
||||
{plugin.normalized_name} = buildKakounePluginFrom2Nix {{
|
||||
pname = "{plugin.normalized_name}";
|
||||
version = "{plugin.version}";
|
||||
src = fetchFromGitHub {{
|
||||
owner = "{owner}";
|
||||
repo = "{repo}";
|
||||
rev = "{plugin.commit}";
|
||||
sha256 = "{plugin.sha256}";{submodule_attr}
|
||||
}};
|
||||
meta.homepage = "https://github.com/{owner}/{repo}/";
|
||||
}};
|
||||
"""
|
||||
)
|
||||
f.write(
|
||||
"""
|
||||
});
|
||||
in lib.fix' (lib.extends overrides packages)
|
||||
"""
|
||||
)
|
||||
print(f"updated {outfile}")
|
||||
|
||||
|
||||
def main():
|
||||
editor = pluginupdate.Editor("kakoune", ROOT, GET_PLUGINS, generate_nix)
|
||||
pluginupdate.update_plugins(editor)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
|
@ -20,19 +20,19 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "newsflash";
|
||||
version = "1.3.0";
|
||||
version = "1.4.0";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "news-flash";
|
||||
repo = "news_flash_gtk";
|
||||
rev = version;
|
||||
hash = "sha256-Vu8PXdnayrglAFVfO+WZTzk4Qrb/3uqzQIwClnRHto8=";
|
||||
hash = "sha256-EInI5Unaz9m8/gJ7vAzJVyMynJGq0KZh12dNK8r1wnY=";
|
||||
};
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoTarball {
|
||||
inherit src;
|
||||
name = "${pname}-${version}";
|
||||
hash = "sha256-dWumQi/Bk7w2C8zVVExxguWchZU+K2qTC02otsiK9jA=";
|
||||
hash = "sha256-xrWZhjfYnO6M3LMTP6l3+oZOusvUWuRBDesIlsiEJ6s=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
|
|
@ -21,11 +21,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "pcb";
|
||||
version = "4.2.2";
|
||||
version = "4.3.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/pcb/${pname}-${version}.tar.gz";
|
||||
sha256 = "0pbfyfadbia1jf9ywkf02j8mfdh8c3mj390c2jdqnl70vcdszvhw";
|
||||
sha256 = "sha256-roUvRq+Eq6f1HYE/uRb8f82+6kP3E08VBQcCThdD+14=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{ lib, stdenv, fetchurl, libextractor, gettext }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "doodle-0.7.1";
|
||||
name = "doodle-0.7.2";
|
||||
|
||||
buildInputs = [ libextractor gettext ];
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://grothoff.org/christian/doodle/download/${name}.tar.gz";
|
||||
sha256 = "086va4q8swiablv5x72yikrdh5swhy7kzmg5wlszi5a7vjya29xw";
|
||||
sha256 = "sha256-dtRPfUjhBNgN+5zHMYmszISmBv1+K6yjKsbQBiAXWRA=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{lib, stdenv, fetchurl, unzip, autoreconfHook, libtool, makeWrapper, cups, ghostscript, pkgsi686Linux, zlib }:
|
||||
{ lib, stdenv, fetchurl, unzip, autoreconfHook, libtool, makeWrapper, cups
|
||||
, ghostscript, pkgsi686Linux, zlib }:
|
||||
|
||||
let
|
||||
|
||||
|
@ -20,7 +21,7 @@ in
|
|||
|
||||
stdenv.mkDerivation {
|
||||
pname = "canon-cups-ufr2";
|
||||
version = version;
|
||||
inherit version;
|
||||
src = src_canon;
|
||||
|
||||
phases = [ "unpackPhase" "installPhase" ];
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
{lib, stdenv, fetchurl, cups, dpkg, gnused, makeWrapper, ghostscript, file, a2ps, coreutils, gawk, perl, gnugrep, which}:
|
||||
{ lib, stdenv, fetchurl, cups, dpkg, gnused, makeWrapper, ghostscript, file
|
||||
, a2ps, coreutils, perl, gnugrep, which
|
||||
}:
|
||||
|
||||
let
|
||||
version = "3.2.0-1";
|
||||
|
|
|
@ -6,180 +6,18 @@
|
|||
# type-check:
|
||||
# $ nix run nixpkgs.python3Packages.mypy -c mypy update.py
|
||||
# linted:
|
||||
# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265 update.py
|
||||
# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265,E402 update.py
|
||||
|
||||
import argparse
|
||||
import functools
|
||||
import http
|
||||
import json
|
||||
import inspect
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import traceback
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
import xml.etree.ElementTree as ET
|
||||
from datetime import datetime
|
||||
from functools import wraps
|
||||
from multiprocessing.dummy import Pool
|
||||
from typing import List, Tuple
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional, Tuple, Union, Any, Callable
|
||||
from urllib.parse import urljoin, urlparse
|
||||
from tempfile import NamedTemporaryFile
|
||||
|
||||
import git
|
||||
|
||||
ATOM_ENTRY = "{http://www.w3.org/2005/Atom}entry" # " vim gets confused here
|
||||
ATOM_LINK = "{http://www.w3.org/2005/Atom}link" # "
|
||||
ATOM_UPDATED = "{http://www.w3.org/2005/Atom}updated" # "
|
||||
|
||||
ROOT = Path(__file__).parent
|
||||
DEFAULT_IN = ROOT.joinpath("vim-plugin-names")
|
||||
DEFAULT_OUT = ROOT.joinpath("generated.nix")
|
||||
DEPRECATED = ROOT.joinpath("deprecated.json")
|
||||
|
||||
def retry(ExceptionToCheck: Any, tries: int = 4, delay: float = 3, backoff: float = 2):
|
||||
"""Retry calling the decorated function using an exponential backoff.
|
||||
http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/
|
||||
original from: http://wiki.python.org/moin/PythonDecoratorLibrary#Retry
|
||||
(BSD licensed)
|
||||
:param ExceptionToCheck: the exception on which to retry
|
||||
:param tries: number of times to try (not retry) before giving up
|
||||
:param delay: initial delay between retries in seconds
|
||||
:param backoff: backoff multiplier e.g. value of 2 will double the delay
|
||||
each retry
|
||||
"""
|
||||
|
||||
def deco_retry(f: Callable) -> Callable:
|
||||
@wraps(f)
|
||||
def f_retry(*args: Any, **kwargs: Any) -> Any:
|
||||
mtries, mdelay = tries, delay
|
||||
while mtries > 1:
|
||||
try:
|
||||
return f(*args, **kwargs)
|
||||
except ExceptionToCheck as e:
|
||||
print(f"{str(e)}, Retrying in {mdelay} seconds...")
|
||||
time.sleep(mdelay)
|
||||
mtries -= 1
|
||||
mdelay *= backoff
|
||||
return f(*args, **kwargs)
|
||||
|
||||
return f_retry # true decorator
|
||||
|
||||
return deco_retry
|
||||
|
||||
def make_request(url: str) -> urllib.request.Request:
|
||||
token = os.getenv("GITHUB_API_TOKEN")
|
||||
headers = {}
|
||||
if token is not None:
|
||||
headers["Authorization"] = f"token {token}"
|
||||
return urllib.request.Request(url, headers=headers)
|
||||
|
||||
class Repo:
|
||||
def __init__(
|
||||
self, owner: str, name: str, branch: str, alias: Optional[str]
|
||||
) -> None:
|
||||
self.owner = owner
|
||||
self.name = name
|
||||
self.branch = branch
|
||||
self.alias = alias
|
||||
self.redirect: Dict[str, str] = {}
|
||||
|
||||
def url(self, path: str) -> str:
|
||||
return urljoin(f"https://github.com/{self.owner}/{self.name}/", path)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Repo({self.owner}, {self.name})"
|
||||
|
||||
@retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
|
||||
def has_submodules(self) -> bool:
|
||||
try:
|
||||
req = make_request(self.url(f"blob/{self.branch}/.gitmodules"))
|
||||
urllib.request.urlopen(req, timeout=10).close()
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 404:
|
||||
return False
|
||||
else:
|
||||
raise
|
||||
return True
|
||||
|
||||
@retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
|
||||
def latest_commit(self) -> Tuple[str, datetime]:
|
||||
commit_url = self.url(f"commits/{self.branch}.atom")
|
||||
commit_req = make_request(commit_url)
|
||||
with urllib.request.urlopen(commit_req, timeout=10) as req:
|
||||
self.check_for_redirect(commit_url, req)
|
||||
xml = req.read()
|
||||
root = ET.fromstring(xml)
|
||||
latest_entry = root.find(ATOM_ENTRY)
|
||||
assert latest_entry is not None, f"No commits found in repository {self}"
|
||||
commit_link = latest_entry.find(ATOM_LINK)
|
||||
assert commit_link is not None, f"No link tag found feed entry {xml}"
|
||||
url = urlparse(commit_link.get("href"))
|
||||
updated_tag = latest_entry.find(ATOM_UPDATED)
|
||||
assert (
|
||||
updated_tag is not None and updated_tag.text is not None
|
||||
), f"No updated tag found feed entry {xml}"
|
||||
updated = datetime.strptime(updated_tag.text, "%Y-%m-%dT%H:%M:%SZ")
|
||||
return Path(str(url.path)).name, updated
|
||||
|
||||
def check_for_redirect(self, url: str, req: http.client.HTTPResponse):
|
||||
response_url = req.geturl()
|
||||
if url != response_url:
|
||||
new_owner, new_name = (
|
||||
urllib.parse.urlsplit(response_url).path.strip("/").split("/")[:2]
|
||||
)
|
||||
end_line = "\n" if self.alias is None else f" as {self.alias}\n"
|
||||
plugin_line = "{owner}/{name}" + end_line
|
||||
|
||||
old_plugin = plugin_line.format(owner=self.owner, name=self.name)
|
||||
new_plugin = plugin_line.format(owner=new_owner, name=new_name)
|
||||
self.redirect[old_plugin] = new_plugin
|
||||
|
||||
def prefetch_git(self, ref: str) -> str:
|
||||
data = subprocess.check_output(
|
||||
["nix-prefetch-git", "--fetch-submodules", self.url(""), ref]
|
||||
)
|
||||
return json.loads(data)["sha256"]
|
||||
|
||||
def prefetch_github(self, ref: str) -> str:
|
||||
data = subprocess.check_output(
|
||||
["nix-prefetch-url", "--unpack", self.url(f"archive/{ref}.tar.gz")]
|
||||
)
|
||||
return data.strip().decode("utf-8")
|
||||
|
||||
|
||||
class Plugin:
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
commit: str,
|
||||
has_submodules: bool,
|
||||
sha256: str,
|
||||
date: Optional[datetime] = None,
|
||||
) -> None:
|
||||
self.name = name
|
||||
self.commit = commit
|
||||
self.has_submodules = has_submodules
|
||||
self.sha256 = sha256
|
||||
self.date = date
|
||||
|
||||
@property
|
||||
def normalized_name(self) -> str:
|
||||
return self.name.replace(".", "-")
|
||||
|
||||
@property
|
||||
def version(self) -> str:
|
||||
assert self.date is not None
|
||||
return self.date.strftime("%Y-%m-%d")
|
||||
|
||||
def as_json(self) -> Dict[str, str]:
|
||||
copy = self.__dict__.copy()
|
||||
del copy["date"]
|
||||
return copy
|
||||
|
||||
# Import plugin update library from maintainers/scripts/pluginupdate.py
|
||||
ROOT = Path(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
|
||||
sys.path.insert(0, os.path.join(ROOT.parent.parent.parent, "maintainers", "scripts"))
|
||||
import pluginupdate
|
||||
|
||||
GET_PLUGINS = f"""(with import <localpkgs> {{}};
|
||||
let
|
||||
|
@ -197,204 +35,16 @@ let
|
|||
checksums = lib.mapAttrs getChecksum generated;
|
||||
in lib.filterAttrs (n: v: v != null) checksums)"""
|
||||
|
||||
|
||||
class CleanEnvironment(object):
|
||||
def __enter__(self) -> None:
|
||||
self.old_environ = os.environ.copy()
|
||||
local_pkgs = str(ROOT.joinpath("../../.."))
|
||||
os.environ["NIX_PATH"] = f"localpkgs={local_pkgs}"
|
||||
self.empty_config = NamedTemporaryFile()
|
||||
self.empty_config.write(b"{}")
|
||||
self.empty_config.flush()
|
||||
os.environ["NIXPKGS_CONFIG"] = self.empty_config.name
|
||||
|
||||
def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
|
||||
os.environ.update(self.old_environ)
|
||||
self.empty_config.close()
|
||||
|
||||
|
||||
def get_current_plugins() -> List[Plugin]:
|
||||
with CleanEnvironment():
|
||||
out = subprocess.check_output(["nix", "eval", "--json", GET_PLUGINS])
|
||||
data = json.loads(out)
|
||||
plugins = []
|
||||
for name, attr in data.items():
|
||||
p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
|
||||
plugins.append(p)
|
||||
return plugins
|
||||
|
||||
|
||||
def prefetch_plugin(
|
||||
user: str,
|
||||
repo_name: str,
|
||||
branch: str,
|
||||
alias: Optional[str],
|
||||
cache: "Optional[Cache]" = None,
|
||||
) -> Tuple[Plugin, Dict[str, str]]:
|
||||
repo = Repo(user, repo_name, branch, alias)
|
||||
commit, date = repo.latest_commit()
|
||||
has_submodules = repo.has_submodules()
|
||||
cached_plugin = cache[commit] if cache else None
|
||||
if cached_plugin is not None:
|
||||
cached_plugin.name = alias or repo_name
|
||||
cached_plugin.date = date
|
||||
return cached_plugin, repo.redirect
|
||||
|
||||
print(f"prefetch {user}/{repo_name}")
|
||||
if has_submodules:
|
||||
sha256 = repo.prefetch_git(commit)
|
||||
else:
|
||||
sha256 = repo.prefetch_github(commit)
|
||||
|
||||
return (
|
||||
Plugin(alias or repo_name, commit, has_submodules, sha256, date=date),
|
||||
repo.redirect,
|
||||
)
|
||||
|
||||
|
||||
def fetch_plugin_from_pluginline(plugin_line: str) -> Plugin:
|
||||
plugin, _ = prefetch_plugin(*parse_plugin_line(plugin_line))
|
||||
return plugin
|
||||
|
||||
|
||||
def print_download_error(plugin: str, ex: Exception):
|
||||
print(f"{plugin}: {ex}", file=sys.stderr)
|
||||
ex_traceback = ex.__traceback__
|
||||
tb_lines = [
|
||||
line.rstrip("\n")
|
||||
for line in traceback.format_exception(ex.__class__, ex, ex_traceback)
|
||||
]
|
||||
print("\n".join(tb_lines))
|
||||
|
||||
|
||||
def check_results(
|
||||
results: List[Tuple[str, str, Union[Exception, Plugin], Dict[str, str]]]
|
||||
) -> Tuple[List[Tuple[str, str, Plugin]], Dict[str, str]]:
|
||||
failures: List[Tuple[str, Exception]] = []
|
||||
plugins = []
|
||||
redirects: Dict[str, str] = {}
|
||||
for (owner, name, result, redirect) in results:
|
||||
if isinstance(result, Exception):
|
||||
failures.append((name, result))
|
||||
else:
|
||||
plugins.append((owner, name, result))
|
||||
redirects.update(redirect)
|
||||
|
||||
print(f"{len(results) - len(failures)} plugins were checked", end="")
|
||||
if len(failures) == 0:
|
||||
print()
|
||||
return plugins, redirects
|
||||
else:
|
||||
print(f", {len(failures)} plugin(s) could not be downloaded:\n")
|
||||
|
||||
for (plugin, exception) in failures:
|
||||
print_download_error(plugin, exception)
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def parse_plugin_line(line: str) -> Tuple[str, str, str, Optional[str]]:
|
||||
branch = "master"
|
||||
alias = None
|
||||
name, repo = line.split("/")
|
||||
if " as " in repo:
|
||||
repo, alias = repo.split(" as ")
|
||||
alias = alias.strip()
|
||||
if "@" in repo:
|
||||
repo, branch = repo.split("@")
|
||||
|
||||
return (name.strip(), repo.strip(), branch.strip(), alias)
|
||||
|
||||
|
||||
def load_plugin_spec(plugin_file: str) -> List[Tuple[str, str, str, Optional[str]]]:
|
||||
plugins = []
|
||||
with open(plugin_file) as f:
|
||||
for line in f:
|
||||
plugin = parse_plugin_line(line)
|
||||
if not plugin[0]:
|
||||
msg = f"Invalid repository {line}, must be in the format owner/repo[ as alias]"
|
||||
print(msg, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
plugins.append(plugin)
|
||||
return plugins
|
||||
|
||||
|
||||
def get_cache_path() -> Optional[Path]:
|
||||
xdg_cache = os.environ.get("XDG_CACHE_HOME", None)
|
||||
if xdg_cache is None:
|
||||
home = os.environ.get("HOME", None)
|
||||
if home is None:
|
||||
return None
|
||||
xdg_cache = str(Path(home, ".cache"))
|
||||
|
||||
return Path(xdg_cache, "vim-plugin-cache.json")
|
||||
|
||||
|
||||
class Cache:
|
||||
def __init__(self, initial_plugins: List[Plugin]) -> None:
|
||||
self.cache_file = get_cache_path()
|
||||
|
||||
downloads = {}
|
||||
for plugin in initial_plugins:
|
||||
downloads[plugin.commit] = plugin
|
||||
downloads.update(self.load())
|
||||
self.downloads = downloads
|
||||
|
||||
def load(self) -> Dict[str, Plugin]:
|
||||
if self.cache_file is None or not self.cache_file.exists():
|
||||
return {}
|
||||
|
||||
downloads: Dict[str, Plugin] = {}
|
||||
with open(self.cache_file) as f:
|
||||
data = json.load(f)
|
||||
for attr in data.values():
|
||||
p = Plugin(
|
||||
attr["name"], attr["commit"], attr["has_submodules"], attr["sha256"]
|
||||
)
|
||||
downloads[attr["commit"]] = p
|
||||
return downloads
|
||||
|
||||
def store(self) -> None:
|
||||
if self.cache_file is None:
|
||||
return
|
||||
|
||||
os.makedirs(self.cache_file.parent, exist_ok=True)
|
||||
with open(self.cache_file, "w+") as f:
|
||||
data = {}
|
||||
for name, attr in self.downloads.items():
|
||||
data[name] = attr.as_json()
|
||||
json.dump(data, f, indent=4, sort_keys=True)
|
||||
|
||||
def __getitem__(self, key: str) -> Optional[Plugin]:
|
||||
return self.downloads.get(key, None)
|
||||
|
||||
def __setitem__(self, key: str, value: Plugin) -> None:
|
||||
self.downloads[key] = value
|
||||
|
||||
|
||||
def prefetch(
|
||||
args: Tuple[str, str, str, Optional[str]], cache: Cache
|
||||
) -> Tuple[str, str, Union[Exception, Plugin], dict]:
|
||||
assert len(args) == 4
|
||||
owner, repo, branch, alias = args
|
||||
try:
|
||||
plugin, redirect = prefetch_plugin(owner, repo, branch, alias, cache)
|
||||
cache[plugin.commit] = plugin
|
||||
return (owner, repo, plugin, redirect)
|
||||
except Exception as e:
|
||||
return (owner, repo, e, {})
|
||||
|
||||
|
||||
header = (
|
||||
HEADER = (
|
||||
"# This file has been generated by ./pkgs/misc/vim-plugins/update.py. Do not edit!"
|
||||
)
|
||||
|
||||
|
||||
def generate_nix(plugins: List[Tuple[str, str, Plugin]], outfile: str):
|
||||
def generate_nix(plugins: List[Tuple[str, str, pluginupdate.Plugin]], outfile: str):
|
||||
sorted_plugins = sorted(plugins, key=lambda v: v[2].name.lower())
|
||||
|
||||
with open(outfile, "w+") as f:
|
||||
f.write(header)
|
||||
f.write(HEADER)
|
||||
f.write(
|
||||
"""
|
||||
{ lib, buildVimPluginFrom2Nix, fetchFromGitHub, overrides ? (self: super: {}) }:
|
||||
|
@ -432,136 +82,9 @@ in lib.fix' (lib.extends overrides packages)
|
|||
print(f"updated {outfile}")
|
||||
|
||||
|
||||
def rewrite_input(
|
||||
input_file: Path, redirects: Dict[str, str] = None, append: Tuple = ()
|
||||
):
|
||||
with open(input_file, "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
lines.extend(append)
|
||||
|
||||
if redirects:
|
||||
lines = [redirects.get(line, line) for line in lines]
|
||||
|
||||
cur_date_iso = datetime.now().strftime("%Y-%m-%d")
|
||||
with open(DEPRECATED, "r") as f:
|
||||
deprecations = json.load(f)
|
||||
for old, new in redirects.items():
|
||||
old_plugin = fetch_plugin_from_pluginline(old)
|
||||
new_plugin = fetch_plugin_from_pluginline(new)
|
||||
if old_plugin.normalized_name != new_plugin.normalized_name:
|
||||
deprecations[old_plugin.normalized_name] = {
|
||||
"new": new_plugin.normalized_name,
|
||||
"date": cur_date_iso,
|
||||
}
|
||||
with open(DEPRECATED, "w") as f:
|
||||
json.dump(deprecations, f, indent=4, sort_keys=True)
|
||||
|
||||
lines = sorted(lines, key=str.casefold)
|
||||
|
||||
with open(input_file, "w") as f:
|
||||
f.writelines(lines)
|
||||
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(
|
||||
description=(
|
||||
"Updates nix derivations for vim plugins"
|
||||
f"By default from {DEFAULT_IN} to {DEFAULT_OUT}"
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
"--add",
|
||||
dest="add_plugins",
|
||||
default=[],
|
||||
action="append",
|
||||
help="Plugin to add to vimPlugins from Github in the form owner/repo",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--input-names",
|
||||
"-i",
|
||||
dest="input_file",
|
||||
default=DEFAULT_IN,
|
||||
help="A list of plugins in the form owner/repo",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--out",
|
||||
"-o",
|
||||
dest="outfile",
|
||||
default=DEFAULT_OUT,
|
||||
help="Filename to save generated nix code",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--proc",
|
||||
"-p",
|
||||
dest="proc",
|
||||
type=int,
|
||||
default=30,
|
||||
help="Number of concurrent processes to spawn.",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
|
||||
repo.index.add([str(f.resolve()) for f in files])
|
||||
|
||||
if repo.index.diff("HEAD"):
|
||||
print(f'committing to nixpkgs "{message}"')
|
||||
repo.index.commit(message)
|
||||
else:
|
||||
print("no changes in working tree to commit")
|
||||
|
||||
|
||||
def get_update(input_file: str, outfile: str, proc: int):
|
||||
cache: Cache = Cache(get_current_plugins())
|
||||
_prefetch = functools.partial(prefetch, cache=cache)
|
||||
|
||||
def update() -> dict:
|
||||
plugin_names = load_plugin_spec(input_file)
|
||||
|
||||
try:
|
||||
pool = Pool(processes=proc)
|
||||
results = pool.map(_prefetch, plugin_names)
|
||||
finally:
|
||||
cache.store()
|
||||
|
||||
plugins, redirects = check_results(results)
|
||||
|
||||
generate_nix(plugins, outfile)
|
||||
|
||||
return redirects
|
||||
|
||||
return update
|
||||
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
nixpkgs_repo = git.Repo(ROOT, search_parent_directories=True)
|
||||
update = get_update(args.input_file, args.outfile, args.proc)
|
||||
|
||||
redirects = update()
|
||||
rewrite_input(args.input_file, redirects)
|
||||
commit(nixpkgs_repo, "vimPlugins: update", [args.outfile])
|
||||
|
||||
if redirects:
|
||||
update()
|
||||
commit(
|
||||
nixpkgs_repo,
|
||||
"vimPlugins: resolve github repository redirects",
|
||||
[args.outfile, args.input_file, DEPRECATED],
|
||||
)
|
||||
|
||||
for plugin_line in args.add_plugins:
|
||||
rewrite_input(args.input_file, append=(plugin_line + "\n",))
|
||||
update()
|
||||
plugin = fetch_plugin_from_pluginline(plugin_line)
|
||||
commit(
|
||||
nixpkgs_repo,
|
||||
"vimPlugins.{name}: init at {version}".format(
|
||||
name=plugin.normalized_name, version=plugin.version
|
||||
),
|
||||
[args.outfile, args.input_file],
|
||||
)
|
||||
editor = pluginupdate.Editor("vim", ROOT, GET_PLUGINS, generate_nix)
|
||||
pluginupdate.update_plugins(editor)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -5,8 +5,8 @@ self: super: {
|
|||
_: {
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://github.com/rschroll/rmfuse.git";
|
||||
rev = "ac91d477cc32311c88aa7ecd1bebd6503e426ae7";
|
||||
sha256 = "129n00hricsf4jkgj39bq3m5nhvy4d4yg7mcvrcgwb2546wcix0n";
|
||||
rev = "fca03bcdd6dc118f2ba981410ec9dff7f7cb88ec";
|
||||
sha256 = "0i7dvvi2bp3hydjpzvr7vg10bx0wxz87spf7pg455aga8d0qhxgk";
|
||||
};
|
||||
}
|
||||
);
|
||||
|
|
337
pkgs/tools/filesystems/rmfuse/poetry.lock
generated
337
pkgs/tools/filesystems/rmfuse/poetry.lock
generated
|
@ -1,10 +1,10 @@
|
|||
[[package]]
|
||||
category = "main"
|
||||
description = "High level compatibility layer for multiple asynchronous event loop implementations"
|
||||
name = "anyio"
|
||||
version = "2.2.0"
|
||||
description = "High level compatibility layer for multiple asynchronous event loop implementations"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6.2"
|
||||
version = "2.1.0"
|
||||
|
||||
[package.dependencies]
|
||||
idna = ">=2.8"
|
||||
|
@ -13,16 +13,16 @@ sniffio = ">=1.1"
|
|||
[package.extras]
|
||||
curio = ["curio (>=1.4)"]
|
||||
doc = ["sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"]
|
||||
test = ["coverage (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "trustme", "uvloop"]
|
||||
test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"]
|
||||
trio = ["trio (>=0.16)"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "asks - async http"
|
||||
name = "asks"
|
||||
version = "2.4.12"
|
||||
description = "asks - async http"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">= 3.6.2"
|
||||
version = "2.4.12"
|
||||
|
||||
[package.dependencies]
|
||||
anyio = ">=2.0,<3.0"
|
||||
|
@ -30,34 +30,34 @@ async_generator = "*"
|
|||
h11 = "*"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Async generators and context managers for Python 3.5+"
|
||||
name = "async-generator"
|
||||
version = "1.10"
|
||||
description = "Async generators and context managers for Python 3.5+"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
version = "1.10"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Classes Without Boilerplate"
|
||||
name = "attrs"
|
||||
version = "20.3.0"
|
||||
description = "Classes Without Boilerplate"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
version = "20.3.0"
|
||||
|
||||
[package.extras]
|
||||
dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
|
||||
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
|
||||
docs = ["furo", "sphinx", "zope.interface"]
|
||||
tests = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
|
||||
tests_no_zope = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
|
||||
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
|
||||
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "The bidirectional mapping library for Python."
|
||||
name = "bidict"
|
||||
version = "0.21.2"
|
||||
description = "The bidirectional mapping library for Python."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "0.21.2"
|
||||
|
||||
[package.extras]
|
||||
coverage = ["coverage (<6)", "pytest-cov (<3)"]
|
||||
|
@ -67,23 +67,23 @@ precommit = ["pre-commit (<3)"]
|
|||
test = ["hypothesis (<6)", "py (<2)", "pytest (<7)", "pytest-benchmark (>=3.2.0,<4)", "sortedcollections (<2)", "sortedcontainers (<3)", "Sphinx (<4)", "sphinx-autodoc-typehints (<2)"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Foreign Function Interface for Python calling C code."
|
||||
name = "cffi"
|
||||
version = "1.14.5"
|
||||
description = "Foreign Function Interface for Python calling C code."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "1.14.5"
|
||||
|
||||
[package.dependencies]
|
||||
pycparser = "*"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "cssselect2"
|
||||
name = "cssselect2"
|
||||
version = "0.4.1"
|
||||
description = "cssselect2"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "0.4.1"
|
||||
|
||||
[package.dependencies]
|
||||
tinycss2 = "*"
|
||||
|
@ -94,28 +94,28 @@ doc = ["sphinx", "sphinx-rtd-theme"]
|
|||
test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
||||
name = "h11"
|
||||
version = "0.12.0"
|
||||
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "0.12.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Internationalized Domain Names in Applications (IDNA)"
|
||||
name = "idna"
|
||||
version = "3.1"
|
||||
description = "Internationalized Domain Names in Applications (IDNA)"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.4"
|
||||
version = "3.1"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
|
||||
name = "lxml"
|
||||
version = "4.6.2"
|
||||
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*"
|
||||
version = "4.6.2"
|
||||
|
||||
[package.extras]
|
||||
cssselect = ["cssselect (>=0.7)"]
|
||||
|
@ -124,69 +124,72 @@ htmlsoup = ["beautifulsoup4"]
|
|||
source = ["Cython (>=0.29.7)"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Capture the outcome of Python function calls."
|
||||
name = "outcome"
|
||||
version = "1.1.0"
|
||||
description = "Capture the outcome of Python function calls."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "1.1.0"
|
||||
|
||||
[package.dependencies]
|
||||
attrs = ">=19.2.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "PDF file reader/writer library"
|
||||
name = "pdfrw"
|
||||
version = "0.4"
|
||||
description = "PDF file reader/writer library"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "0.4"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Python Imaging Library (Fork)"
|
||||
name = "pillow"
|
||||
version = "8.1.2"
|
||||
description = "Python Imaging Library (Fork)"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "8.1.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "C parser in Python"
|
||||
name = "pycparser"
|
||||
version = "2.20"
|
||||
description = "C parser in Python"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
version = "2.20"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Python 3 bindings for libfuse 3 with async I/O support"
|
||||
name = "pyfuse3"
|
||||
version = "3.2.0"
|
||||
description = "Python 3 bindings for libfuse 3 with async I/O support"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
version = "3.2.0"
|
||||
|
||||
[package.dependencies]
|
||||
trio = ">=0.15"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "The Reportlab Toolkit"
|
||||
name = "reportlab"
|
||||
version = "3.5.65"
|
||||
description = "The Reportlab Toolkit"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "3.5.59"
|
||||
python-versions = ">=2.7, >=3.6, <4"
|
||||
|
||||
[package.dependencies]
|
||||
pillow = ">=4.0.0"
|
||||
|
||||
[package.extras]
|
||||
rlpycairo = ["rlPyCairo (>=0.0.5)"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "reMarkable Cloud Library"
|
||||
name = "rmcl"
|
||||
version = "0.4.0"
|
||||
description = "reMarkable Cloud Library"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7,<4.0"
|
||||
version = "0.3.1"
|
||||
|
||||
[package.dependencies]
|
||||
asks = ">=2.4.12,<3.0.0"
|
||||
|
@ -194,30 +197,38 @@ trio = ">=0.18.0,<0.19.0"
|
|||
xdg = ">=5.0.1,<6.0.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = ""
|
||||
name = "rmfuse"
|
||||
version = "0.2.1"
|
||||
description = ""
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "^3.7"
|
||||
version = "0.1.1"
|
||||
develop = false
|
||||
|
||||
[package.dependencies]
|
||||
bidict = "^0.21.2"
|
||||
pyfuse3 = "^3.2.0"
|
||||
rmcl = "^0.3.1"
|
||||
rmrl = "^0.1.2"
|
||||
pyfuse3 = {version = "^3.2.0", optional = true}
|
||||
rmcl = "^0.4.0"
|
||||
rmrl = "^0.2.1"
|
||||
xdg = "^5.0.1"
|
||||
|
||||
[package.extras]
|
||||
pyfuse3 = ["pyfuse3 (>=3.2.0,<4.0.0)"]
|
||||
llfuse = ["llfuse (>=1.4.1,<2.0.0)"]
|
||||
|
||||
[package.source]
|
||||
reference = "ac91d477cc32311c88aa7ecd1bebd6503e426ae7"
|
||||
type = "git"
|
||||
url = "https://github.com/rschroll/rmfuse.git"
|
||||
reference = "master"
|
||||
resolved_reference = "fca03bcdd6dc118f2ba981410ec9dff7f7cb88ec"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Render reMarkable documents to PDF"
|
||||
name = "rmrl"
|
||||
version = "0.2.1"
|
||||
description = "Render reMarkable documents to PDF"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7,<4.0"
|
||||
version = "0.1.2"
|
||||
|
||||
[package.dependencies]
|
||||
pdfrw = ">=0.4,<0.5"
|
||||
|
@ -226,28 +237,28 @@ svglib = ">=1.0.1,<2.0.0"
|
|||
xdg = ">=5.0.1,<6.0.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Sniff out which async library your code is running under"
|
||||
name = "sniffio"
|
||||
version = "1.2.0"
|
||||
description = "Sniff out which async library your code is running under"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
version = "1.2.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set"
|
||||
name = "sortedcontainers"
|
||||
version = "2.3.0"
|
||||
description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "2.3.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "A pure-Python library for reading and converting SVG"
|
||||
name = "svglib"
|
||||
version = "1.0.1"
|
||||
description = "A pure-Python library for reading and converting SVG"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3"
|
||||
version = "1.0.1"
|
||||
|
||||
[package.dependencies]
|
||||
cssselect2 = ">=0.2.0"
|
||||
|
@ -256,12 +267,12 @@ reportlab = "*"
|
|||
tinycss2 = ">=0.6.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "tinycss2"
|
||||
name = "tinycss2"
|
||||
version = "1.1.0"
|
||||
description = "tinycss2"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "1.1.0"
|
||||
|
||||
[package.dependencies]
|
||||
webencodings = ">=0.4"
|
||||
|
@ -271,47 +282,47 @@ doc = ["sphinx", "sphinx-rtd-theme"]
|
|||
test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "A friendly Python library for async concurrency and I/O"
|
||||
name = "trio"
|
||||
version = "0.18.0"
|
||||
description = "A friendly Python library for async concurrency and I/O"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "0.18.0"
|
||||
|
||||
[package.dependencies]
|
||||
async-generator = ">=1.9"
|
||||
attrs = ">=19.2.0"
|
||||
cffi = ">=1.14"
|
||||
cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""}
|
||||
idna = "*"
|
||||
outcome = "*"
|
||||
sniffio = "*"
|
||||
sortedcontainers = "*"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Character encoding aliases for legacy web content"
|
||||
name = "webencodings"
|
||||
version = "0.5.1"
|
||||
description = "Character encoding aliases for legacy web content"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "0.5.1"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Variables defined by the XDG Base Directory Specification"
|
||||
name = "xdg"
|
||||
version = "5.0.1"
|
||||
description = "Variables defined by the XDG Base Directory Specification"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6,<4.0"
|
||||
version = "5.0.1"
|
||||
|
||||
[metadata]
|
||||
content-hash = "df8dfb527656dec034712b2d07aaacfdee20f89f635d38af52bb21888d7d4130"
|
||||
lock-version = "1.0"
|
||||
lock-version = "1.1"
|
||||
python-versions = "^3.8"
|
||||
content-hash = "3da90f3013f1220c9081c0a11dac7d8cd05c5a47ebda40fbb4357e44503e99a3"
|
||||
|
||||
[metadata.files]
|
||||
anyio = [
|
||||
{file = "anyio-2.1.0-py3-none-any.whl", hash = "sha256:c286818ccd5dcbd5d385b223f16a055393474527b1d5650da489828a9887d559"},
|
||||
{file = "anyio-2.1.0.tar.gz", hash = "sha256:8a56e08623dc55955a06719d4ad62de6009bb3f1dd04936e60b2104dd58da484"},
|
||||
{file = "anyio-2.2.0-py3-none-any.whl", hash = "sha256:aa3da546ed17f097ca876c78024dea380a3b7fa80759abfdda59f12176a3dac8"},
|
||||
{file = "anyio-2.2.0.tar.gz", hash = "sha256:4a41c5b3a65ed92e469d51b6fba3779301850ea2e352afcf9e36c46f21ee14a9"},
|
||||
]
|
||||
asks = [
|
||||
{file = "asks-2.4.12.tar.gz", hash = "sha256:38de944eb350e7e4e3a918055fa8ff033da5f7b5ff385c1160a2d6b9d84783b0"},
|
||||
|
@ -427,38 +438,39 @@ pdfrw = [
|
|||
{file = "pdfrw-0.4.tar.gz", hash = "sha256:0dc0494a0e6561b268542b28ede2280387c2728114f117d3bb5d8e4787b93ef4"},
|
||||
]
|
||||
pillow = [
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:d355502dce85ade85a2511b40b4c61a128902f246504f7de29bbeec1ae27933a"},
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:93a473b53cc6e0b3ce6bf51b1b95b7b1e7e6084be3a07e40f79b42e83503fbf2"},
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2353834b2c49b95e1313fb34edf18fca4d57446675d05298bb694bca4b194174"},
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:1d208e670abfeb41b6143537a681299ef86e92d2a3dac299d3cd6830d5c7bded"},
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-win32.whl", hash = "sha256:dd9eef866c70d2cbbea1ae58134eaffda0d4bfea403025f4db6859724b18ab3d"},
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:b09e10ec453de97f9a23a5aa5e30b334195e8d2ddd1ce76cc32e52ba63c8b31d"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:b02a0b9f332086657852b1f7cb380f6a42403a6d9c42a4c34a561aa4530d5234"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ca20739e303254287138234485579b28cb0d524401f83d5129b5ff9d606cb0a8"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:604815c55fd92e735f9738f65dabf4edc3e79f88541c221d292faec1904a4b17"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cf6e33d92b1526190a1de904df21663c46a456758c0424e4f947ae9aa6088bf7"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-win32.whl", hash = "sha256:47c0d93ee9c8b181f353dbead6530b26980fe4f5485aa18be8f1fd3c3cbc685e"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:96d4dc103d1a0fa6d47c6c55a47de5f5dafd5ef0114fa10c85a1fd8e0216284b"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:7916cbc94f1c6b1301ac04510d0881b9e9feb20ae34094d3615a8a7c3db0dcc0"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:3de6b2ee4f78c6b3d89d184ade5d8fa68af0848f9b6b6da2b9ab7943ec46971a"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cdbbe7dff4a677fb555a54f9bc0450f2a21a93c5ba2b44e09e54fcb72d2bd13d"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f50e7a98b0453f39000619d845be8b06e611e56ee6e8186f7f60c3b1e2f0feae"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-win32.whl", hash = "sha256:cb192176b477d49b0a327b2a5a4979552b7a58cd42037034316b8018ac3ebb59"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6c5275bd82711cd3dcd0af8ce0bb99113ae8911fc2952805f1d012de7d600a4c"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:165c88bc9d8dba670110c689e3cc5c71dbe4bfb984ffa7cbebf1fac9554071d6"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:5e2fe3bb2363b862671eba632537cd3a823847db4d98be95690b7e382f3d6378"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7612520e5e1a371d77e1d1ca3a3ee6227eef00d0a9cddb4ef7ecb0b7396eddf7"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d673c4990acd016229a5c1c4ee8a9e6d8f481b27ade5fc3d95938697fa443ce0"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-win32.whl", hash = "sha256:dc577f4cfdda354db3ae37a572428a90ffdbe4e51eda7849bf442fb803f09c9b"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:22d070ca2e60c99929ef274cfced04294d2368193e935c5d6febfd8b601bf865"},
|
||||
{file = "Pillow-8.1.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:a3d3e086474ef12ef13d42e5f9b7bbf09d39cf6bd4940f982263d6954b13f6a9"},
|
||||
{file = "Pillow-8.1.0-pp36-pypy36_pp73-manylinux2010_i686.whl", hash = "sha256:731ca5aabe9085160cf68b2dbef95fc1991015bc0a3a6ea46a371ab88f3d0913"},
|
||||
{file = "Pillow-8.1.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:bba80df38cfc17f490ec651c73bb37cd896bc2400cfba27d078c2135223c1206"},
|
||||
{file = "Pillow-8.1.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c3d911614b008e8a576b8e5303e3db29224b455d3d66d1b2848ba6ca83f9ece9"},
|
||||
{file = "Pillow-8.1.0-pp37-pypy37_pp73-manylinux2010_i686.whl", hash = "sha256:39725acf2d2e9c17356e6835dccebe7a697db55f25a09207e38b835d5e1bc032"},
|
||||
{file = "Pillow-8.1.0-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:81c3fa9a75d9f1afafdb916d5995633f319db09bd773cb56b8e39f1e98d90820"},
|
||||
{file = "Pillow-8.1.0-pp37-pypy37_pp73-win32.whl", hash = "sha256:b6f00ad5ebe846cc91763b1d0c6d30a8042e02b2316e27b05de04fa6ec831ec5"},
|
||||
{file = "Pillow-8.1.0.tar.gz", hash = "sha256:887668e792b7edbfb1d3c9d8b5d8c859269a0f0eba4dda562adb95500f60dbba"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:5cf03b9534aca63b192856aa601c68d0764810857786ea5da652581f3a44c2b0"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:f91b50ad88048d795c0ad004abbe1390aa1882073b1dca10bfd55d0b8cf18ec5"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5762ebb4436f46b566fc6351d67a9b5386b5e5de4e58fdaa18a1c83e0e20f1a8"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e2cd8ac157c1e5ae88b6dd790648ee5d2777e76f1e5c7d184eaddb2938594f34"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-win32.whl", hash = "sha256:72027ebf682abc9bafd93b43edc44279f641e8996fb2945104471419113cfc71"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:d1d6bca39bb6dd94fba23cdb3eeaea5e30c7717c5343004d900e2a63b132c341"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:90882c6f084ef68b71bba190209a734bf90abb82ab5e8f64444c71d5974008c6"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:89e4c757a91b8c55d97c91fa09c69b3677c227b942fa749e9a66eef602f59c28"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8c4e32218c764bc27fe49b7328195579581aa419920edcc321c4cb877c65258d"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:a01da2c266d9868c4f91a9c6faf47a251f23b9a862dce81d2ff583135206f5be"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-win32.whl", hash = "sha256:30d33a1a6400132e6f521640dd3f64578ac9bfb79a619416d7e8802b4ce1dd55"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:71b01ee69e7df527439d7752a2ce8fb89e19a32df484a308eca3e81f673d3a03"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:5a2d957eb4aba9d48170b8fe6538ec1fbc2119ffe6373782c03d8acad3323f2e"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:87f42c976f91ca2fc21a3293e25bd3cd895918597db1b95b93cbd949f7d019ce"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:15306d71a1e96d7e271fd2a0737038b5a92ca2978d2e38b6ced7966583e3d5af"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:71f31ee4df3d5e0b366dd362007740106d3210fb6a56ec4b581a5324ba254f06"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-win32.whl", hash = "sha256:98afcac3205d31ab6a10c5006b0cf040d0026a68ec051edd3517b776c1d78b09"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:328240f7dddf77783e72d5ed79899a6b48bc6681f8d1f6001f55933cb4905060"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bead24c0ae3f1f6afcb915a057943ccf65fc755d11a1410a909c1fefb6c06ad1"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81b3716cc9744ffdf76b39afb6247eae754186838cedad0b0ac63b2571253fe6"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:63cd413ac52ee3f67057223d363f4f82ce966e64906aea046daf46695e3c8238"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:8565355a29655b28fdc2c666fd9a3890fe5edc6639d128814fafecfae2d70910"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1940fc4d361f9cc7e558d6f56ff38d7351b53052fd7911f4b60cd7bc091ea3b1"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-win32.whl", hash = "sha256:46c2bcf8e1e75d154e78417b3e3c64e96def738c2a25435e74909e127a8cba5e"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:aeab4cd016e11e7aa5cfc49dcff8e51561fa64818a0be86efa82c7038e9369d0"},
|
||||
{file = "Pillow-8.1.2-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:74cd9aa648ed6dd25e572453eb09b08817a1e3d9f8d1bd4d8403d99e42ea790b"},
|
||||
{file = "Pillow-8.1.2-pp36-pypy36_pp73-manylinux2010_i686.whl", hash = "sha256:e5739ae63636a52b706a0facec77b2b58e485637e1638202556156e424a02dc2"},
|
||||
{file = "Pillow-8.1.2-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:903293320efe2466c1ab3509a33d6b866dc850cfd0c5d9cc92632014cec185fb"},
|
||||
{file = "Pillow-8.1.2-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:5daba2b40782c1c5157a788ec4454067c6616f5a0c1b70e26ac326a880c2d328"},
|
||||
{file = "Pillow-8.1.2-pp37-pypy37_pp73-manylinux2010_i686.whl", hash = "sha256:1f93f2fe211f1ef75e6f589327f4d4f8545d5c8e826231b042b483d8383e8a7c"},
|
||||
{file = "Pillow-8.1.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:6efac40344d8f668b6c4533ae02a48d52fd852ef0654cc6f19f6ac146399c733"},
|
||||
{file = "Pillow-8.1.2-pp37-pypy37_pp73-win32.whl", hash = "sha256:f36c3ff63d6fc509ce599a2f5b0d0732189eed653420e7294c039d342c6e204a"},
|
||||
{file = "Pillow-8.1.2.tar.gz", hash = "sha256:b07c660e014852d98a00a91adfbe25033898a9d90a8f39beb2437d22a203fc44"},
|
||||
]
|
||||
pycparser = [
|
||||
{file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
|
||||
|
@ -468,55 +480,44 @@ pyfuse3 = [
|
|||
{file = "pyfuse3-3.2.0.tar.gz", hash = "sha256:45f0053ad601b03a36e2c283a5271403674245a66a0daf50e3deaab0ea4fa82f"},
|
||||
]
|
||||
reportlab = [
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:1da3d7a35f918cee905facfa94bd00ae6091cadc06dca1b0b31b69ae02d41d1d"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:792efba0c0c6e4ee94f6dc95f305451733ee9230a1c7d51cb8e5301a549e0dfb"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f3d4a1a273dc141e03b72a553c11bc14dd7a27ec7654a071edcf83eb04f004bc"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e2b4e33fea2ce9d3a14ea39191b169e41eb2ac995274f54ac8fd27519974bce8"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:b1b20208ecdfffd7ca027955c4fe8972b28b30a4b3b80cf25099a08d3b20ed7c"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-win32.whl", hash = "sha256:5ed00894e0f8281c0b7c0494b4d3067c641fd90c8e5cf933089ec4cc9a48e491"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-win_amd64.whl", hash = "sha256:85650446538cd2f606ca234634142a7ccd74cb6db7cfec250f76a4242e0f2431"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:79d63ca40231ca3860859b39a92daa5219035ba9553da89a5e1b218550744121"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:a0c377bc45e73c3f15f55d7de69fab270d174749d5b454ab0de502b15430ec2a"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cfa854bea525f8c913cb77e2bda724d94b965a0eb3bcfc4a645a9baa29bb86e2"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:3d7713dddaa8081ed709a1fa2456a43f6a74b0f07d605da8441fd53fef334f69"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:ff547cf4c1de7e104cad1a378431ff81efcb03e90e40871ee686107da5b91442"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19353aead39fc115a4d6c598d6fb9fa26da7e69160a0443ebb49b02903e704e8"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:6f3ad2b1afe99c436563cd436d8693d4a12e2c4bd45f70c7705759ff7837fe53"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:b26d6f416891cef93411d6d478a25db275766081a5fb66368248293ef459f3be"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:dd9687359e466086b9f6fe6d8069034017f8b6ca3080944fae5709767ca6814e"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-win32.whl", hash = "sha256:b71faf3b6e4d7058e1af1b8afedaf39a962db4a219affc8177009d8244ec10d4"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-win_amd64.whl", hash = "sha256:4ca5233a19a5ceca23546290f43addec2345789c7d65bb32f8b2668aa148351f"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:9da445cb79e3f740756924c053edc952cde11a65ff5af8acfda3c0a1317136ef"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:07bff6742fba612da8d1b1f783c436338c6fdc6962828159827d5ca7d2b67935"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:52f8237654acbc78ea2fa6fb4a6a06e5b023b6da93f7889adfe2deba09473fad"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:739b743b7ca1ba4b4d64c321de6fccb49b562d0507ea06c817d9cc4faed5cd22"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:33f3cfdc492575f8af3225701301a7e62fc478358729820c9e0091aff5831378"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-win32.whl", hash = "sha256:3e2b4d69763103b9dc9b54c0952dc3cee05cedd06e28c0987fad7f84705b12c0"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-win_amd64.whl", hash = "sha256:18a876449c9000c391dd3415ebc8454cd7bb9e488977b894886a2d7d018f16cd"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:04a08d284da86882ec3a41a7c719833362ef891b09ee8e2fbb47cee352aa684a"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-manylinux1_i686.whl", hash = "sha256:83b28104edd58ad65748d2d0e60e0d97e3b91b3e90b4573ea6fe60de6811972c"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9fabd5fbd24f5971085ffe53150d663f158f7d3050b25c95736e29ebf676d454"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:b4ba4c30af7044ee987e61c88a5ffb76031ca0c53666bc85d823b7de55ddbc75"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a315edef5c5610b0c75790142f49487e89ea34397fc247ae8aa890fe6d6dd057"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-win32.whl", hash = "sha256:5214a289cf01ebbd65e49bae83709671dd9edb601891cf0ae8abf85f3c0b392f"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-win_amd64.whl", hash = "sha256:009fa61710647cdc62eb373345248d8ebb93583a058990f7c4f9be46d90aa5b1"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:09fb11ab1500e679fc1b01199d2fed24435499856e75043a9ac0d31dd48fd881"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-manylinux1_i686.whl", hash = "sha256:18eec161411026dde49767bee4e5e8eeb8014879554811a62581dc7433628d5b"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:a1d3f7022a920d4a5e165d264581f1862e1c1b877ceeabb96fe98cec98125ae5"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:1b85c20e89c22ae902ca973df2afdd2d64d27dc4ffd2b29ebad8c805a213756b"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:de0c675fc2998a7eaa929c356ba49c84f53a892e9ab25e8ee7d8ebbbdcb2ac16"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-win32.whl", hash = "sha256:3b0026c1129147befd4e5a8cf25da8dea1096fce371e7b2412e36d7254019c06"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-win_amd64.whl", hash = "sha256:6191961533d49c9d860964d42bada4d7ac3bb28502d984feb8034093f2012fa8"},
|
||||
{file = "reportlab-3.5.59.tar.gz", hash = "sha256:a755cca2dcf023130b03bb671670301a992157d5c3151d838c0b68ef89894536"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:fd6712a8a6dca12181a3a12316f97810927861e77f2a98029efd2c5cfc8546dc"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:ee711804acdaf3ea7f0f2cd27f19478af993e730df8c8d923a678eb0e2572fba"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4c42e85851f969e21fa4d6414587b7544e877ce685e2495d7d422589c70b6281"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d8fefd07072bfae2715283a821fb1acf8fc4946cf925509d5cc2af791c611809"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:bdf751289efee4891f4f354ce9122da8de8258a40f328b3f11540c4888363337"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-win32.whl", hash = "sha256:f0634740b099b69caed081acd89692996b5504c59f86f39781b6bebc82b267f5"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-win_amd64.whl", hash = "sha256:d810bffd4bcd50fdcb2bab0d1fe9ea4e6187ed5237687e41c6ade6c884b00c1e"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:46745826657d35f86843487f4bc6f6f805f61260428f8ee13642bf6372f9df55"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:bc62187181582772688d65c557ad6a40a4c3bb8d1f74de463d35ea81983e9b75"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:58bec163f727c1c60515fc4704a961b3b4ccf2c76b4e6ec1a457ea7ed0c2d756"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d92834993bf998853a04946729266a3276965e7b13f7423212f1c1abdfc4a1c7"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:9ec95808b742ce70c1dab28b2c5bef9093816b92315b948419c2c6968658f9cc"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-win32.whl", hash = "sha256:b9494986f35d82350b0ce0c29704a49a3945421b789dff92e93fbd3de554fa34"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-win_amd64.whl", hash = "sha256:07f9d9c0360cb8fc780ca05264faa68b90583cd28dbdf2cda6bda34379b6e66c"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:81898de0a0be2c8318468ae0ae1590f828805e9b7fd68e5a50667dce8b942171"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-manylinux1_i686.whl", hash = "sha256:99aeee49a61c85f1af1087e9e418f3d0c2352c4dd0f0abbfac17ae6c467185aa"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3ec70873d99c14570e2a9c44b86c8c01526871e7af5ee4b2855246db15cb0c9f"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c12432575c793b8cd8552fddc219bbf2813541c64d02854ae345a108fb875b9d"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:b2cf692ae7af995b499a31a3f58f2001d98e310e03f74812bcb97a08078239c0"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-win32.whl", hash = "sha256:f92388e30bf6b5d2eceb3d7b05ee2df856635f74ce7d950a8f45d2b70c685a5b"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-win_amd64.whl", hash = "sha256:6f007142f2b166f52cbb3e5d23319e3e496c429831e53b904e6db28c3370f279"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:8707cc21a769150154bf4634dca6e9581ae24a05f0fb81a84fcc1143b1cbbfde"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-manylinux1_i686.whl", hash = "sha256:27a831da0d17153e33c985bd7a88307e206c5a28778cddb755d5372598d12637"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:fe5d98cdac07dd702bcd49f5723aacdd0af8c84d70fc82a5cc3781e52aedad52"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:ba2d10f368c9ea1e76c84b3bb6b9982eb5a8f243c434e821c505b75ca8d85852"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:289539f7888239343ef7ebcd30c55e6204ef78d5f70e1547fdeb854a2da8bfa1"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-win32.whl", hash = "sha256:cdf8ff72cd6fa9303744c8409fb81ef7720da2e034c369762c2fdf496462179e"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-win_amd64.whl", hash = "sha256:4a784ecdf3008f533e5a032b96c395e8592ed5e679baaf5ef4dcc136b01c72e9"},
|
||||
{file = "reportlab-3.5.65.tar.gz", hash = "sha256:b2c7eedb4d19db63301c27ad1076086a099fd4c8ca0a6f62f6e9ed749fa5908f"},
|
||||
]
|
||||
rmcl = [
|
||||
{file = "rmcl-0.3.1-py3-none-any.whl", hash = "sha256:e4ebcc3e6ce7e9efb1dec4a2d0a44c463ef3854d44e1f8919c65a2b3f9312ec7"},
|
||||
{file = "rmcl-0.3.1.tar.gz", hash = "sha256:5b5316adf53cca9e56273cad220cb7374cd56e7bac962c943868b05fc090e98c"},
|
||||
{file = "rmcl-0.4.0-py3-none-any.whl", hash = "sha256:d2fc5d183b213797f5886a6af52c5531c87b4e1770cc720e0e8ba5992e728473"},
|
||||
{file = "rmcl-0.4.0.tar.gz", hash = "sha256:14bd199ff2c71269c3c1ac63d10932de6c68a250a454550940dae3f06b07527a"},
|
||||
]
|
||||
rmfuse = []
|
||||
rmrl = [
|
||||
{file = "rmrl-0.1.2-py3-none-any.whl", hash = "sha256:173231c7122a11201232ed8fe74e4a9a65192b87886ef8a98ae912aa9b875c26"},
|
||||
{file = "rmrl-0.1.2.tar.gz", hash = "sha256:8c8e757af5ca3eb7475f56803f7f37256fe4c5cad3a9ea5ad7534b2ebd172447"},
|
||||
{file = "rmrl-0.2.1-py3-none-any.whl", hash = "sha256:c35b9f20494a6034a16e916d7351575efb3e3f77acabe9094453a7f6013eaa86"},
|
||||
{file = "rmrl-0.2.1.tar.gz", hash = "sha256:c532bef4168350e6ab17cf37c6481dc12b6a78e007c073503f082f36215b71c9"},
|
||||
]
|
||||
sniffio = [
|
||||
{file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"},
|
||||
|
|
|
@ -6,7 +6,7 @@ authors = []
|
|||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.8"
|
||||
rmfuse = {git = "https://github.com/rschroll/rmfuse.git"}
|
||||
rmfuse = {git = "https://github.com/rschroll/rmfuse.git", extras = ["pyfuse3"]}
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
|
||||
|
|
0
pkgs/tools/filesystems/rmfuse/update
Normal file → Executable file
0
pkgs/tools/filesystems/rmfuse/update
Normal file → Executable file
|
@ -4,10 +4,10 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "s3backer";
|
||||
version = "1.5.4";
|
||||
version = "1.6.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
sha256 = "1228qlfgz48k9vv72hrz488zg73zls99cppb9vmikc0pzv1xndsx";
|
||||
sha256 = "sha256-67sVT72i8tOMdGH/+Oh1N7Vh/2/qD56ImGWI+tprMOM=";
|
||||
rev = version;
|
||||
repo = "s3backer";
|
||||
owner = "archiecobbs";
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
buildGoPackage rec {
|
||||
pname = "git-town";
|
||||
version = "7.4.0";
|
||||
version = "7.5.0";
|
||||
|
||||
goPackagePath = "github.com/git-town/git-town";
|
||||
src = fetchFromGitHub {
|
||||
owner = "git-town";
|
||||
repo = "git-town";
|
||||
rev = "v${version}";
|
||||
sha256 = "05s2hp4xn0bs3y6rgqkpgz0k8q8yfpwkw5m8vwim95hk6n41ps18";
|
||||
sha256 = "sha256-RmLDlTK+JO2KRLuLvO927W3WYdDlteBIpgTgDXh8lC8=";
|
||||
};
|
||||
|
||||
buildFlagsArray = [ "-ldflags=-X github.com/git-town/git-town/src/cmd.version=v${version} -X github.com/git-town/git-town/src/cmd.buildDate=nix" ];
|
||||
|
|
72
pkgs/tools/security/expliot/default.nix
Normal file
72
pkgs/tools/security/expliot/default.nix
Normal file
|
@ -0,0 +1,72 @@
|
|||
{ lib
|
||||
, aiocoap
|
||||
, awsiotpythonsdk
|
||||
, bluepy
|
||||
, buildPythonApplication
|
||||
, can
|
||||
, cmd2
|
||||
, cryptography
|
||||
, fetchFromGitLab
|
||||
, paho-mqtt
|
||||
, pyi2cflash
|
||||
, pymodbus
|
||||
, pynetdicom
|
||||
, pyparsing
|
||||
, pyserial
|
||||
, pyspiflash
|
||||
, pythonOlder
|
||||
, upnpy
|
||||
, xmltodict
|
||||
, zeroconf
|
||||
}:
|
||||
|
||||
buildPythonApplication rec {
|
||||
pname = "expliot";
|
||||
version = "0.9.6";
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "expliot_framework";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "1wn8fyrvis0gw80zzmpivinw6mz5n33inhv39iallsl3is8xpgpa";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
aiocoap
|
||||
awsiotpythonsdk
|
||||
bluepy
|
||||
can
|
||||
cmd2
|
||||
cryptography
|
||||
paho-mqtt
|
||||
pyi2cflash
|
||||
pymodbus
|
||||
pynetdicom
|
||||
pyparsing
|
||||
pyserial
|
||||
pyspiflash
|
||||
upnpy
|
||||
xmltodict
|
||||
zeroconf
|
||||
];
|
||||
|
||||
# Project has no tests
|
||||
doCheck = false;
|
||||
pythonImportsCheck = [ "expliot" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "IoT security testing and exploitation framework";
|
||||
longDescription = ''
|
||||
EXPLIoT is a Framework for security testing and exploiting IoT
|
||||
products and IoT infrastructure. It provides a set of plugins
|
||||
(test cases) which are used to perform the assessment and can
|
||||
be extended easily with new ones. The name EXPLIoT (pronounced
|
||||
expl-aa-yo-tee) is a pun on the word exploit and explains the
|
||||
purpose of the framework i.e. IoT exploitation.
|
||||
'';
|
||||
homepage = "https://expliot.readthedocs.io/";
|
||||
license = with licenses; [ agpl3Plus ];
|
||||
maintainers = with maintainers; [ fab ];
|
||||
};
|
||||
}
|
|
@ -4143,6 +4143,8 @@ in
|
|||
|
||||
expect = callPackage ../tools/misc/expect { };
|
||||
|
||||
expliot = python3Packages.callPackage ../tools/security/expliot { };
|
||||
|
||||
f2fs-tools = callPackage ../tools/filesystems/f2fs-tools { };
|
||||
|
||||
Fabric = with python3Packages; toPythonApplication Fabric;
|
||||
|
@ -5584,11 +5586,13 @@ in
|
|||
kalibrate-hackrf = callPackage ../applications/radio/kalibrate-hackrf { };
|
||||
|
||||
wrapKakoune = kakoune: attrs: callPackage ../applications/editors/kakoune/wrapper.nix (attrs // { inherit kakoune; });
|
||||
kakounePlugins = callPackage ../applications/editors/kakoune/plugins { };
|
||||
kakounePlugins = recurseIntoAttrs (callPackage ../applications/editors/kakoune/plugins { });
|
||||
|
||||
kakoune-unwrapped = callPackage ../applications/editors/kakoune { };
|
||||
kakoune = wrapKakoune kakoune-unwrapped {
|
||||
plugins = [ ]; # override with the list of desired plugins
|
||||
};
|
||||
kakouneUtils = callPackage ../applications/editors/kakoune/plugins/kakoune-utils.nix { };
|
||||
|
||||
kak-lsp = callPackage ../tools/misc/kak-lsp {
|
||||
inherit (darwin.apple_sdk.frameworks) Security;
|
||||
|
@ -26694,7 +26698,7 @@ in
|
|||
|
||||
wownero = callPackage ../applications/blockchains/wownero.nix {};
|
||||
|
||||
zcash = callPackage ../applications/blockchains/zcash { };
|
||||
zcash = callPackage ../applications/blockchains/zcash { stdenv = llvmPackages_11.stdenv; };
|
||||
|
||||
openethereum = callPackage ../applications/blockchains/openethereum { };
|
||||
|
||||
|
|
|
@ -401,7 +401,7 @@ lib.makeScope pkgs.newScope (self: with self; {
|
|||
# oci8 (7.4, 7.3, 7.2)
|
||||
# odbc (7.4, 7.3, 7.2)
|
||||
{ name = "opcache";
|
||||
buildInputs = [ pcre' ] ++ lib.optionals (lib.versionAtLeast php.version "8.0") [
|
||||
buildInputs = [ pcre' ] ++ lib.optionals (!stdenv.isDarwin && lib.versionAtLeast php.version "8.0") [
|
||||
valgrind.dev
|
||||
];
|
||||
patches = lib.optionals (lib.versionOlder php.version "7.4") [
|
||||
|
@ -421,7 +421,9 @@ lib.makeScope pkgs.newScope (self: with self; {
|
|||
#include "zend_accelerator_util_funcs.h"
|
||||
'') ];
|
||||
zendExtension = true;
|
||||
doCheck = !(lib.versionOlder php.version "7.4"); }
|
||||
doCheck = !(lib.versionOlder php.version "7.4");
|
||||
# Tests launch the builtin webserver.
|
||||
__darwinAllowLocalNetworking = true; }
|
||||
{ name = "openssl";
|
||||
buildInputs = [ openssl ];
|
||||
configureFlags = [ "--with-openssl" ];
|
||||
|
|
Loading…
Reference in a new issue