push sheeet
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s

This commit is contained in:
Dark Steveneq
2025-10-09 14:15:47 +02:00
commit 646b892680
49168 changed files with 5897842 additions and 0 deletions

View File

@@ -0,0 +1,152 @@
{
"name": "airflow-www",
"version": "1.0.0",
"description": "Apache Airflow is a platform to programmatically author, schedule and monitor workflows.",
"scripts": {
"test": "jest",
"dev": "NODE_ENV=development webpack --watch --progress --devtool eval-cheap-source-map --mode development",
"prod": "NODE_ENV=production node --max_old_space_size=4096 ./node_modules/webpack/bin/webpack.js --mode production --progress",
"build": "NODE_ENV=production webpack --progress --mode production",
"lint": "eslint --ignore-path=.eslintignore --max-warnings=0 --ext .js,.jsx,.ts,.tsx . && tsc",
"lint:fix": "eslint --fix --ignore-path=.eslintignore --ext .js,.jsx,.ts,.tsx . && tsc",
"format": "yarn prettier --write .",
"generate-api-types": "npx openapi-typescript \"../api_connexion/openapi/v1.yaml\" --output static/js/types/api-generated.ts && node alias-rest-types.js static/js/types/api-generated.ts"
},
"author": "Apache",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "git+https://github.com/apache/airflow.git"
},
"homepage": "https://airflow.apache.org/",
"keywords": [
"big",
"data",
"workflow",
"airflow",
"d3",
"nerds",
"database",
"flask"
],
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/core": "^7.18.5",
"@babel/eslint-parser": "^7.18.2",
"@babel/plugin-transform-runtime": "^7.16.0",
"@babel/preset-env": "^7.16.0",
"@babel/preset-react": "^7.16.0",
"@babel/preset-typescript": "^7.17.12",
"@testing-library/jest-dom": "^5.16.0",
"@testing-library/react": "^13.0.0",
"@types/color": "^3.0.3",
"@types/react": "^18.0.12",
"@types/react-dom": "^18.0.5",
"@types/react-syntax-highlighter": "^15.5.6",
"@types/react-table": "^7.7.12",
"@typescript-eslint/eslint-plugin": "^5.13.0",
"@typescript-eslint/parser": "^5.0.0",
"babel-jest": "^27.3.1",
"babel-loader": "^9.1.0",
"clean-webpack-plugin": "^3.0.0",
"copy-webpack-plugin": "^6.0.3",
"css-loader": "5.2.7",
"css-minimizer-webpack-plugin": "^4.0.0",
"eslint": "^8.6.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-typescript": "^17.0.0",
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-html": "^6.0.2",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsx-a11y": "^6.5.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-react": "^7.30.0",
"eslint-plugin-react-hooks": "^4.5.0",
"eslint-plugin-standard": "^4.0.1",
"file-loader": "^6.0.0",
"imports-loader": "^1.1.0",
"jest": "^27.3.1",
"jest-canvas-mock": "^2.5.1",
"mini-css-extract-plugin": "^1.6.2",
"moment": "^2.29.4",
"moment-locales-webpack-plugin": "^1.2.0",
"nock": "^13.2.4",
"openapi-typescript": "^5.4.1",
"prettier": "^2.8.4",
"style-loader": "^1.2.1",
"stylelint": "^15.10.1",
"stylelint-config-prettier": "^9.0.5",
"stylelint-config-standard": "^20.0.0",
"terser-webpack-plugin": "<5.0.0",
"typescript": "^4.6.3",
"url-loader": "4.1.0",
"web-worker": "^1.2.0",
"webpack": "^5.76.0",
"webpack-cli": "^4.0.0",
"webpack-license-plugin": "^4.2.1",
"webpack-manifest-plugin": "^4.0.0"
},
"dependencies": {
"@chakra-ui/react": "2.4.2",
"@emotion/cache": "^11.9.3",
"@emotion/react": "^11.9.3",
"@emotion/styled": "^11",
"@visx/group": "^2.10.0",
"@visx/shape": "^2.12.2",
"axios": "^0.26.0",
"bootstrap-3-typeahead": "^4.0.2",
"camelcase-keys": "^7.0.0",
"chakra-react-select": "^4.0.0",
"codemirror": "^5.59.1",
"color": "^4.2.3",
"d3": "^3.4.4",
"d3-selection": "^3.0.0",
"d3-shape": "^2.1.0",
"d3-tip": "^0.9.1",
"dagre-d3": "^0.6.4",
"datatables.net": "^1.11.4",
"datatables.net-bs": "^1.11.4",
"echarts": "^5.4.2",
"elkjs": "^0.7.1",
"eonasdan-bootstrap-datetimepicker": "^4.17.47",
"framer-motion": "^6.0.0",
"jquery": ">=3.5.0",
"jshint": "^2.13.4",
"lodash": "^4.17.21",
"moment-timezone": "^0.5.43",
"nvd3": "^1.8.6",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-icons": "^4.9.0",
"react-json-view": "^1.21.3",
"react-markdown": "^8.0.4",
"react-query": "^3.39.1",
"react-router-dom": "^6.3.0",
"react-syntax-highlighter": "^15.5.0",
"react-table": "^7.8.0",
"react-textarea-autosize": "^8.3.4",
"reactflow": "^11.7.4",
"redoc": "^2.0.0-rc.72",
"remark-gfm": "^3.0.1",
"swagger-ui-dist": "4.1.3",
"tsconfig-paths": "^3.14.2",
"type-fest": "^2.17.0",
"url-search-params-polyfill": "^8.1.0",
"validator": "^13.9.0"
},
"resolutions": {
"d3-color": "^3.1.0"
}
}

View File

@@ -0,0 +1,116 @@
{
fetchFromGitHub,
fetchPypi,
python3,
}:
let
python = python3.override {
self = python;
packageOverrides = pySelf: pySuper: {
connexion = pySuper.connexion.overridePythonAttrs (o: rec {
version = "2.14.2";
src = fetchFromGitHub {
owner = "spec-first";
repo = "connexion";
rev = "refs/tags/${version}";
hash = "sha256-1v1xCHY3ZnZG/Vu9wN/it7rLKC/StoDefoMNs+hMjIs=";
};
nativeBuildInputs = with pySelf; [
setuptools
];
pythonRelaxDeps = [
"werkzeug"
];
propagatedBuildInputs = with pySelf; [
aiohttp
aiohttp-jinja2
aiohttp-swagger
clickclick
flask
inflection
jsonschema
openapi-spec-validator
packaging
pyyaml
requests
swagger-ui-bundle
];
nativeCheckInputs = with pySelf; [
aiohttp-remotes
decorator
pytest-aiohttp
pytestCheckHook
testfixtures
];
disabledTests = [
"test_app"
"test_openapi_yaml_behind_proxy"
"test_swagger_ui"
];
});
flask = pySuper.flask.overridePythonAttrs (o: rec {
version = "2.2.5";
src = fetchPypi {
pname = "Flask";
inherit version;
hash = "sha256-7e6bCn/yZiG9WowQ/0hK4oc3okENmbC7mmhQx/uXeqA=";
};
nativeBuildInputs = (o.nativeBuildInputs or [ ]) ++ [
pySelf.setuptools
];
});
# flask-appbuilder doesn't work with sqlalchemy 2.x, flask-appbuilder 3.x
# https://github.com/dpgaspar/Flask-AppBuilder/issues/2038
flask-appbuilder = pySuper.flask-appbuilder.overridePythonAttrs (o: {
meta.broken = false;
});
# a knock-on effect from overriding the sqlalchemy version
flask-sqlalchemy = pySuper.flask-sqlalchemy.overridePythonAttrs (o: {
src = fetchPypi {
pname = "Flask-SQLAlchemy";
version = "2.5.1";
hash = "sha256-K9pEtD58rLFdTgX/PMH4vJeTbMRkYjQkECv8LDXpWRI=";
};
format = "setuptools";
});
httpcore = pySuper.httpcore.overridePythonAttrs (o: {
# nullify upstream's pytest flags which cause
# "TLS/SSL connection has been closed (EOF)"
# with pytest-httpbin 1.x
preCheck = ''
substituteInPlace pyproject.toml \
--replace '[tool.pytest.ini_options]' '[tool.notpytest.ini_options]'
'';
});
pytest-httpbin = pySuper.pytest-httpbin.overridePythonAttrs (o: rec {
version = "1.0.2";
src = fetchFromGitHub {
owner = "kevin1024";
repo = "pytest-httpbin";
rev = "refs/tags/v${version}";
hash = "sha256-S4ThQx4H3UlKhunJo35esPClZiEn7gX/Qwo4kE1QMTI=";
};
});
# apache-airflow doesn't work with sqlalchemy 2.x
# https://github.com/apache/airflow/issues/28723
sqlalchemy = pySuper.sqlalchemy_1_4;
apache-airflow = pySelf.callPackage ./python-package.nix { };
};
};
in
# See note in ./python-package.nix for
# instructions on manually testing the web UI
with python.pkgs;
(toPythonApplication apache-airflow).overrideAttrs (previousAttrs: {
# Provide access to airflow's modified python package set
# for the cases where external scripts need to import
# airflow modules, though *caveat emptor* because many of
# these packages will not be built by hydra and many will
# not work at all due to the unexpected version overrides
# here.
passthru = (previousAttrs.passthru or { }) // {
pythonPackages = python.pkgs;
};
})

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,348 @@
{
lib,
stdenv,
python,
buildPythonPackage,
fetchFromGitHub,
alembic,
argcomplete,
asgiref,
attrs,
blinker,
cached-property,
cattrs,
clickclick,
colorlog,
configupdater,
connexion,
cron-descriptor,
croniter,
cryptography,
deprecated,
dill,
flask,
flask-login,
flask-appbuilder,
flask-caching,
flask-session,
flask-wtf,
gitpython,
google-re2,
graphviz,
gunicorn,
httpx,
iso8601,
importlib-resources,
importlib-metadata,
inflection,
itsdangerous,
jinja2,
jsonschema,
lazy-object-proxy,
linkify-it-py,
lockfile,
markdown,
markupsafe,
marshmallow-oneofschema,
mdit-py-plugins,
numpy,
openapi-spec-validator,
opentelemetry-api,
opentelemetry-exporter-otlp,
pandas,
pathspec,
pendulum,
psutil,
pydantic,
pygments,
pyjwt,
python-daemon,
python-dateutil,
python-nvd3,
python-slugify,
python3-openid,
pythonOlder,
pyyaml,
rich,
rich-argparse,
setproctitle,
sqlalchemy,
sqlalchemy-jsonfield,
swagger-ui-bundle,
tabulate,
tenacity,
termcolor,
typing-extensions,
unicodecsv,
werkzeug,
freezegun,
pytest-asyncio,
pytestCheckHook,
time-machine,
mkYarnPackage,
fetchYarnDeps,
writeScript,
# Extra airflow providers to enable
enabledProviders ? [ ],
}:
let
version = "2.7.3";
airflow-src = fetchFromGitHub {
owner = "apache";
repo = "airflow";
rev = "refs/tags/${version}";
# Download using the git protocol rather than using tarballs, because the
# GitHub archive tarballs don't appear to include tests
forceFetchGit = true;
hash = "sha256-+YbiKFZLigSDbHPaUKIl97kpezW1rIt/j09MMa6lwhQ=";
};
# airflow bundles a web interface, which is built using webpack by an undocumented shell script in airflow's source tree.
# This replicates this shell script, fixing bugs in yarn.lock and package.json
airflow-frontend = mkYarnPackage rec {
name = "airflow-frontend";
src = "${airflow-src}/airflow/www";
packageJSON = ./package.json;
offlineCache = fetchYarnDeps {
yarnLock = "${src}/yarn.lock";
hash = "sha256-WQKuQgNp35fU6z7owequXOSwoUGJDJYcUgkjPDMOops=";
};
distPhase = "true";
# The webpack license plugin tries to create /licenses when given the
# original relative path
postPatch = ''
sed -i 's!../../../../licenses/LICENSES-ui.txt!licenses/LICENSES-ui.txt!' webpack.config.js
'';
configurePhase = ''
cp -r $node_modules node_modules
'';
buildPhase = ''
yarn --offline build
find package.json yarn.lock static/css static/js -type f | sort | xargs md5sum > static/dist/sum.md5
'';
installPhase = ''
mkdir -p $out/static/
cp -r static/dist $out/static
'';
};
# Import generated file with metadata for provider dependencies and imports.
# Enable additional providers using enabledProviders above.
providers = import ./providers.nix;
getProviderDeps = provider: map (dep: python.pkgs.${dep}) providers.${provider}.deps;
getProviderImports = provider: providers.${provider}.imports;
providerDependencies = lib.concatMap getProviderDeps enabledProviders;
providerImports = lib.concatMap getProviderImports enabledProviders;
in
buildPythonPackage rec {
pname = "apache-airflow";
inherit version;
format = "setuptools";
src = airflow-src;
disabled = pythonOlder "3.7";
propagatedBuildInputs = [
alembic
argcomplete
asgiref
attrs
blinker
cached-property
cattrs
clickclick
colorlog
configupdater
connexion
cron-descriptor
croniter
cryptography
deprecated
dill
flask
flask-appbuilder
flask-caching
flask-session
flask-wtf
flask-login
gitpython
google-re2
graphviz
gunicorn
httpx
iso8601
importlib-resources
inflection
itsdangerous
jinja2
jsonschema
lazy-object-proxy
linkify-it-py
lockfile
markdown
markupsafe
marshmallow-oneofschema
mdit-py-plugins
numpy
openapi-spec-validator
opentelemetry-api
opentelemetry-exporter-otlp
pandas
pathspec
pendulum
psutil
pydantic
pygments
pyjwt
python-daemon
python-dateutil
python-nvd3
python-slugify
python3-openid
pyyaml
rich
rich-argparse
setproctitle
sqlalchemy
sqlalchemy-jsonfield
swagger-ui-bundle
tabulate
tenacity
termcolor
typing-extensions
unicodecsv
werkzeug
]
++ lib.optionals (pythonOlder "3.9") [
importlib-metadata
]
++ providerDependencies;
buildInputs = [
airflow-frontend
];
nativeCheckInputs = [
freezegun
pytest-asyncio
pytestCheckHook
time-machine
];
# By default, source code of providers is included but unusable due to missing
# transitive dependencies. To enable a provider, add it to extraProviders
# above
INSTALL_PROVIDERS_FROM_SOURCES = "true";
postPatch = ''
# https://github.com/apache/airflow/issues/33854
substituteInPlace pyproject.toml \
--replace '[project]' $'[project]\nname = "apache-airflow"\nversion = "${version}"'
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
# Fix failing test on Hydra
substituteInPlace airflow/utils/db.py \
--replace "/tmp/sqlite_default.db" "$TMPDIR/sqlite_default.db"
'';
pythonRelaxDeps = [
"colorlog"
"flask-appbuilder"
"opentelemetry-api"
"pathspec"
];
# allow for gunicorn processes to have access to Python packages
makeWrapperArgs = [
"--prefix PYTHONPATH : $PYTHONPATH"
];
postInstall = ''
cp -rv ${airflow-frontend}/static/dist $out/${python.sitePackages}/airflow/www/static
# Needed for pythonImportsCheck below
export HOME=$(mktemp -d)
'';
pythonImportsCheck = [
"airflow"
]
++ providerImports;
preCheck = ''
export AIRFLOW_HOME=$HOME
export AIRFLOW__CORE__UNIT_TEST_MODE=True
export AIRFLOW_DB="$HOME/airflow.db"
export PATH=$PATH:$out/bin
airflow version
airflow db init
airflow db reset -y
'';
enabledTestPaths = [
"tests/core/test_core.py"
];
disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [
"bash_operator_kill" # psutil.AccessDenied
];
# Updates yarn.lock and package.json
passthru.updateScript = writeScript "update.sh" ''
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p common-updater-scripts curl pcre "python3.withPackages (ps: with ps; [ pyyaml ])" yarn2nix
set -euo pipefail
# Get new version
new_version="$(curl -s https://airflow.apache.org/docs/apache-airflow/stable/release_notes.html |
pcregrep -o1 'Airflow ([0-9.]+).' | head -1)"
update-source-version ${pname} "$new_version"
# Update frontend
cd ./pkgs/servers/apache-airflow
curl -O https://raw.githubusercontent.com/apache/airflow/$new_version/airflow/www/yarn.lock
curl -O https://raw.githubusercontent.com/apache/airflow/$new_version/airflow/www/package.json
yarn2nix > yarn.nix
# update provider dependencies
./update-providers.py
'';
# Note on testing the web UI:
# You can (manually) test the web UI as follows:
#
# nix shell .#apache-airflow
# airflow db reset # WARNING: this will wipe any existing db state you might have!
# airflow db init
# airflow standalone
#
# Then navigate to the localhost URL using the credentials printed, try
# triggering the 'example_bash_operator' and 'example_bash_operator' DAGs and
# see if they report success.
meta = with lib; {
description = "Programmatically author, schedule and monitor data pipelines";
homepage = "https://airflow.apache.org/";
license = licenses.asl20;
maintainers = with maintainers; [
bhipple
gbpdt
ingenieroariel
];
knownVulnerabilities = [
"CVE-2023-50943"
"CVE-2023-50944"
];
};
}

View File

@@ -0,0 +1,228 @@
#! /usr/bin/env python3
from itertools import chain
import json
import logging
from pathlib import Path
import os
import re
import subprocess
import sys
from typing import Dict, List, Optional, Set, TextIO
from urllib.request import urlopen
from urllib.error import HTTPError
import yaml
PKG_SET = "apache-airflow.pythonPackages"
# If some requirements are matched by multiple or no Python packages, the
# following can be used to choose the correct one
PKG_PREFERENCES = {
"dnspython": "dnspython",
"elasticsearch-dsl": "elasticsearch-dsl",
"google-api-python-client": "google-api-python-client",
"protobuf": "protobuf",
"psycopg2-binary": "psycopg2",
"requests_toolbelt": "requests-toolbelt",
}
# Requirements missing from the airflow provider metadata
EXTRA_REQS = {
"sftp": ["pysftp"],
}
def get_version():
with open(os.path.dirname(sys.argv[0]) + "/default.nix") as fh:
# A version consists of digits, dots, and possibly a "b" (for beta)
m = re.search('version = "([\\d\\.b]+)";', fh.read())
return m.group(1)
def get_file_from_github(version: str, path: str):
with urlopen(
f"https://raw.githubusercontent.com/apache/airflow/{version}/{path}"
) as response:
return yaml.safe_load(response)
def repository_root() -> Path:
return Path(os.path.dirname(sys.argv[0])) / "../../.."
def dump_packages() -> Dict[str, Dict[str, str]]:
# Store a JSON dump of Nixpkgs' python3Packages
output = subprocess.check_output(
[
"nix-env",
"-f",
repository_root(),
"-qa",
"-A",
PKG_SET,
"--arg",
"config",
"{ allowAliases = false; }",
"--json",
]
)
return json.loads(output)
def remove_version_constraint(req: str) -> str:
return re.sub(r"[=><~].*$", "", req)
def name_to_attr_path(req: str, packages: Dict[str, Dict[str, str]]) -> Optional[str]:
if req in PKG_PREFERENCES:
return f"{PKG_SET}.{PKG_PREFERENCES[req]}"
attr_paths = []
names = [req]
# E.g. python-mpd2 is actually called python3.6-mpd2
# instead of python-3.6-python-mpd2 inside Nixpkgs
if req.startswith("python-") or req.startswith("python_"):
names.append(req[len("python-") :])
for name in names:
# treat "-" and "_" equally
name = re.sub("[-_]", "[-_]", name)
# python(minor).(major)-(pname)-(version or unstable-date)
# we need the version qualifier, or we'll have multiple matches
# (e.g. pyserial and pyserial-asyncio when looking for pyserial)
pattern = re.compile(
f"^python\\d+\\.\\d+-{name}-(?:\\d|unstable-.*)", re.I
)
for attr_path, package in packages.items():
# logging.debug("Checking match for %s with %s", name, package["name"])
if pattern.match(package["name"]):
attr_paths.append(attr_path)
# Let's hope there's only one derivation with a matching name
assert len(attr_paths) <= 1, f"{req} matches more than one derivation: {attr_paths}"
if attr_paths:
return attr_paths[0]
return None
def provider_reqs_to_attr_paths(reqs: List, packages: Dict) -> List:
no_version_reqs = map(remove_version_constraint, reqs)
filtered_reqs = [
req for req in no_version_reqs if not re.match(r"^apache-airflow", req)
]
attr_paths = []
for req in filtered_reqs:
attr_path = name_to_attr_path(req, packages)
if attr_path is not None:
# Add attribute path without "python3Packages." prefix
pname = attr_path[len(PKG_SET + ".") :]
attr_paths.append(pname)
else:
# If we can't find it, we just skip and warn the user
logging.warning("Could not find package attr for %s", req)
return attr_paths
def get_cross_provider_reqs(
provider: str, provider_reqs: Dict, cross_provider_deps: Dict, seen: List = None
) -> Set:
# Unfortunately there are circular cross-provider dependencies, so keep a
# list of ones we've seen already
seen = seen or []
reqs = set(provider_reqs[provider])
if len(cross_provider_deps[provider]) > 0:
reqs.update(
chain.from_iterable(
get_cross_provider_reqs(
d, provider_reqs, cross_provider_deps, seen + [provider]
)
if d not in seen
else []
for d in cross_provider_deps[provider]
)
)
return reqs
def get_provider_reqs(version: str, packages: Dict) -> Dict:
provider_dependencies = get_file_from_github(
version, "generated/provider_dependencies.json"
)
provider_reqs = {}
cross_provider_deps = {}
for provider, provider_data in provider_dependencies.items():
provider_reqs[provider] = list(
provider_reqs_to_attr_paths(provider_data["deps"], packages)
) + EXTRA_REQS.get(provider, [])
cross_provider_deps[provider] = [
d for d in provider_data["cross-providers-deps"] if d != "common.sql"
]
transitive_provider_reqs = {}
# Add transitive cross-provider reqs
for provider in provider_reqs:
transitive_provider_reqs[provider] = get_cross_provider_reqs(
provider, provider_reqs, cross_provider_deps
)
return transitive_provider_reqs
def get_provider_yaml(version: str, provider: str) -> Dict:
provider_dir = provider.replace(".", "/")
path = f"airflow/providers/{provider_dir}/provider.yaml"
try:
return get_file_from_github(version, path)
except HTTPError:
logging.warning("Couldn't get provider yaml for %s", provider)
return {}
def get_provider_imports(version: str, providers) -> Dict:
provider_imports = {}
for provider in providers:
provider_yaml = get_provider_yaml(version, provider)
imports: List[str] = []
if "hooks" in provider_yaml:
imports.extend(
chain.from_iterable(
hook["python-modules"] for hook in provider_yaml["hooks"]
)
)
if "operators" in provider_yaml:
imports.extend(
chain.from_iterable(
operator["python-modules"]
for operator in provider_yaml["operators"]
)
)
provider_imports[provider] = imports
return provider_imports
def to_nix_expr(provider_reqs: Dict, provider_imports: Dict, fh: TextIO) -> None:
fh.write("# Warning: generated by update-providers.py, do not update manually\n")
fh.write("{\n")
for provider, reqs in provider_reqs.items():
provider_name = provider.replace(".", "_")
fh.write(f" {provider_name} = {{\n")
fh.write(
" deps = [ " + " ".join(sorted(f'"{req}"' for req in reqs)) + " ];\n"
)
fh.write(
" imports = [ "
+ " ".join(sorted(f'"{imp}"' for imp in provider_imports[provider]))
+ " ];\n"
)
fh.write(" };\n")
fh.write("}\n")
def main() -> None:
logging.basicConfig(level=logging.INFO)
version = get_version()
packages = dump_packages()
logging.info("Generating providers.nix for version %s", version)
provider_reqs = get_provider_reqs(version, packages)
provider_imports = get_provider_imports(version, provider_reqs.keys())
with open("providers.nix", "w") as fh:
to_nix_expr(provider_reqs, provider_imports, fh)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,82 @@
{
buildGoModule,
lib,
fetchFromGitHub,
pnpm,
nodejs,
fetchpatch,
stdenv,
}:
buildGoModule rec {
pname = "apache-answer";
version = "1.6.0";
src = fetchFromGitHub {
owner = "apache";
repo = "answer";
tag = "v${version}";
hash = "sha256-QrLYkGiEDBB4uUzG2yrlEUYXpQxovKFBmGZjLbZiGKk=";
};
webui = stdenv.mkDerivation {
pname = pname + "-webui";
inherit version src;
sourceRoot = "${src.name}/ui";
pnpmDeps = pnpm.fetchDeps {
inherit src version pname;
sourceRoot = "${src.name}/ui";
fetcherVersion = 1;
hash = "sha256-6IeLOwsEqchCwe0GGj/4v9Q4/Hm16K+ve2X+8QHztQM=";
};
nativeBuildInputs = [
pnpm.configHook
nodejs
];
buildPhase = ''
runHook preBuild
pnpm build
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r build/* $out
runHook postInstall
'';
};
vendorHash = "sha256-mWSKoEYj23fy6ix3mK1/5HeGugp1UAUO+iwInXkzgU4=";
doCheck = false; # TODO checks are currently broken upstream
ldflags = [
"-X main.Version=${version}"
"-X main.Commit=${version}"
];
preBuild = ''
cp -r ${webui}/* ui/build/
'';
meta = {
homepage = "https://answer.apache.org/";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
bot-wxt1221
];
platforms = lib.platforms.unix;
mainProgram = "answer";
changelog = "https://github.com/apache/answer/releases/tag/v${version}";
description = "Q&A platform software for teams at any scales";
};
}

View File

@@ -0,0 +1,36 @@
{
lib,
stdenv,
fetchzip,
jdk11,
makeWrapper,
}:
stdenv.mkDerivation rec {
pname = "apache-directory-server";
version = "2.0.0.AM26";
src = fetchzip {
url = "mirror://apache/directory/apacheds/dist/${version}/apacheds-${version}.zip";
sha256 = "sha256-36kDvfSy5rt/3+nivEFTepnIKf6sX0NTgPRm28M+1v4=";
};
nativeBuildInputs = [ makeWrapper ];
installPhase = ''
mkdir -p $out/bin $out/share/apacheds
install -D $src/lib/*.jar $out/share/apacheds
classpath=$(jars=($out/share/apacheds/*.jar); IFS=:; echo "''${jars[*]}")
makeWrapper ${jdk11}/bin/java $out/bin/apache-directory-server \
--add-flags "-classpath $classpath org.apache.directory.server.UberjarMain"
'';
meta = with lib; {
description = "Extensible and embeddable directory server";
mainProgram = "apache-directory-server";
homepage = "https://directory.apache.org/apacheds/";
license = licenses.asl20;
platforms = platforms.unix;
maintainers = [ maintainers.ners ];
};
}

View File

@@ -0,0 +1,90 @@
{
lib,
stdenv,
fetchurl,
jdk,
makeWrapper,
autoPatchelfHook,
makeDesktopItem,
glib,
libsecret,
webkitgtk_4_1,
}:
stdenv.mkDerivation rec {
pname = "apache-directory-studio";
version = "2.0.0-M17";
versionWithDate = "2.0.0.v20210717-M17";
src =
if stdenv.hostPlatform.system == "x86_64-linux" then
fetchurl {
url = "mirror://apache/directory/studio/${versionWithDate}/ApacheDirectoryStudio-${versionWithDate}-linux.gtk.x86_64.tar.gz";
sha256 = "19zdspzv4n3mfgb1g45s3wh0vbvn6a9zjd4xi5x2afmdjkzlwxi4";
}
else
throw "Unsupported system: ${stdenv.hostPlatform.system}";
desktopItem = makeDesktopItem {
name = "apache-directory-studio";
exec = "ApacheDirectoryStudio";
icon = "apache-directory-studio";
comment = "Eclipse-based LDAP browser and directory client";
desktopName = "Apache Directory Studio";
genericName = "Apache Directory Studio";
categories = [
"Java"
"Network"
];
};
buildInputs = [
glib
libsecret
];
nativeBuildInputs = [
makeWrapper
autoPatchelfHook
];
installPhase = ''
dest="$out/libexec/ApacheDirectoryStudio"
mkdir -p "$dest"
cp -r . "$dest"
mkdir -p "$out/bin"
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
"$dest/ApacheDirectoryStudio"
# About `/tmp/SWT-GDBusServer`, see
# https://github.com/adoptium/adoptium-support/issues/785#issuecomment-1866680133
# and
# https://github.com/adoptium/adoptium-support/issues/785#issuecomment-2387481967.
makeWrapper "$dest/ApacheDirectoryStudio" \
"$out/bin/ApacheDirectoryStudio" \
--prefix PATH : "${jdk}/bin" \
--prefix LD_LIBRARY_PATH : ${
lib.makeLibraryPath [
glib
webkitgtk_4_1
]
} \
--run "mkdir -p /tmp/SWT-GDBusServer"
install -D icon.xpm "$out/share/pixmaps/apache-directory-studio.xpm"
install -D -t "$out/share/applications" ${desktopItem}/share/applications/*
'';
meta = with lib; {
description = "Eclipse-based LDAP browser and directory client";
homepage = "https://directory.apache.org/studio/";
sourceProvenance = with sourceTypes; [
binaryBytecode
binaryNativeCode
];
license = licenses.asl20;
# Upstream supports macOS and Windows too.
platforms = platforms.linux;
maintainers = [ maintainers.bjornfor ];
mainProgram = "ApacheDirectoryStudio";
};
}

View File

@@ -0,0 +1,63 @@
{
lib,
stdenv,
fetchurl,
makeWrapper,
jre,
}:
let
playerglobal_ver = "27.0";
playerglobal = fetchurl {
url = "https://fpdownload.macromedia.com/get/flashplayer/updaters/27/playerglobal27_0.swc";
sha256 = "0qw2bgls8qsmp80j8vpd4c7s0c8anlrk0ac8z42w89bajcdbwk2f";
};
in
stdenv.mkDerivation rec {
pname = "apache-flex-sdk";
version = "4.16.1";
src = fetchurl {
url = "mirror://apache/flex/${version}/binaries/${pname}-${version}-bin.tar.gz";
sha256 = "13iq16dqvgcpb0p35x66hzxsq5pkbr2lbwr766nnqiryinnagz8p";
};
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ jre ];
dontBuild = true;
postPatch = ''
shopt -s extglob
for i in bin/!(aasdoc|acompc|amxmlc); do
substituteInPlace $i --replace "java " "${jre}/bin/java "
done
'';
installPhase = ''
t=$out/opt/apache-flex-sdk
mkdir -p $t $out/bin
mv * $t
rm $t/bin/*.bat
ln -s $t/bin/* $out/bin/
for i in $out/bin/!(aasdoc|acompc|amxmlc); do
wrapProgram $i \
--set FLEX_HOME $t \
--set PLAYERGLOBAL_HOME $t/frameworks/libs/player/
done
mkdir -p $t/frameworks/libs/player/${playerglobal_ver}/
cp ${playerglobal} $t/frameworks/libs/player/${playerglobal_ver}/playerglobal.swc
'';
dontFixup = true;
meta = with lib; {
description = "Flex SDK for Adobe Flash / ActionScript";
homepage = "https://flex.apache.org/";
license = with licenses; [ asl20 ];
maintainers = with maintainers; [ dywedir ];
};
}

View File

@@ -0,0 +1,79 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchurl,
fetchpatch,
cmake,
gtest,
lz4,
protobuf_30,
snappy,
zlib,
zstd,
}:
let
orc-format = fetchurl {
name = "orc-format-1.1.0.tar.gz";
url = "https://www.apache.org/dyn/closer.lua/orc/orc-format-1.1.0/orc-format-1.1.0.tar.gz?action=download";
hash = "sha256-1KesdsVEKr9xGeLLhOcbZ34HWv9TUYqoZgVeLq0EUNc=";
};
in
stdenv.mkDerivation (finalAttrs: {
pname = "apache-orc";
version = "2.1.2";
src = fetchFromGitHub {
owner = "apache";
repo = "orc";
tag = "v${finalAttrs.version}";
hash = "sha256-hNKzqNOagBJOWQRebkVHIuvqfpk9Mi30bu4z7dGbsxk=";
};
nativeBuildInputs = [
cmake
];
buildInputs = [
gtest
lz4
protobuf_30
snappy
zlib
zstd
];
cmakeFlags = [
(lib.cmakeFeature "CMAKE_BUILD_TYPE" "Release")
(lib.cmakeBool "BUILD_JAVA" false)
(lib.cmakeBool "STOP_BUILD_ON_WARNING" true)
(lib.cmakeBool "INSTALL_VENDORED_LIBS" false)
]
++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) [
# Fix (RiscV) cross-compilation
# See https://github.com/apache/orc/issues/2334
(lib.cmakeFeature "HAS_PRE_1970_EXITCODE" "0")
(lib.cmakeFeature "HAS_POST_2038_EXITCODE" "0")
(lib.cmakeFeature "CMAKE_CXX_FLAGS" "-Wno-unused-parameter")
];
env = {
GTEST_HOME = gtest.dev;
LZ4_ROOT = lz4;
ORC_FORMAT_URL = orc-format;
PROTOBUF_HOME = protobuf_30;
SNAPPY_ROOT = snappy.dev;
ZLIB_ROOT = zlib.dev;
ZSTD_ROOT = zstd.dev;
};
meta = {
changelog = "https://github.com/apache/orc/releases/tag/v${finalAttrs.version}";
description = "Smallest, fastest columnar storage for Hadoop workloads";
homepage = "https://github.com/apache/orc/";
license = lib.licenses.asl20;
maintainers = [ ];
platforms = lib.platforms.all;
};
})

View File

@@ -0,0 +1,24 @@
--- a/apache2.1.pl
+++ b/apache2.1.pl
@@ -63,10 +63,10 @@ getopt ("h: l: p: e: s: t:" ,\%opts);
use LWP;
-if (!(exists $opts{h})||!(exists $opts{p})||!(exists $opts{l})||!(exists $opts{e})){ &usage;}
+if (!(exists $opts{h})){ &usage;}
sub usage{
-print "\nUSAGE: apache.pl [-h 1.2.3.4] [-l names] [-p 80] [-s (SSL Support 1=true 0=false)] [-e 403 (http code)] [-t threads]\n\n ";
+print "\nUSAGE: apache-users -h 1.2.3.4 [-l names] [-p 80] [-s (SSL Support 1=true 0=false)] [-e 403 (http code)] [-t threads]\n\n ";
exit 1;
};
@@ -75,7 +75,7 @@ if (exists $opts{h}){
}
if (exists $opts{l}){
$list=$opts{l};
-}else {$list="names";}
+}else {$list="@out@/share/apache-users/names";}
if (exists $opts{p}){
$port=$opts{p};
}else{$port=80;}

View File

@@ -0,0 +1,47 @@
{
lib,
stdenv,
fetchurl,
perl,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "apache-users";
version = "2.1";
src = fetchurl {
url = "https://labs.portcullis.co.uk/download/apache_users-${finalAttrs.version}.tar.gz";
hash = "sha256-rylW4F8Si6KKYxaxEJlVFnbLqfqS6ytMPfHpc8MgriA=";
};
# Allow optional arguments where defaults are provided
patches = [ ./optional-args.patch ];
postPatch = ''
substituteAllInPlace apache${finalAttrs.version}.pl
'';
buildInputs = [
(perl.withPackages (p: [
p.ParallelForkManager
p.LWP
]))
];
installPhase = ''
runHook preInstall
install -D apache${finalAttrs.version}.pl $out/bin/apache-users
install -Dm444 names $out/share/apache-users/names
runHook postInstall
'';
meta = with lib; {
description = "Username Enumeration through Apache UserDir";
homepage = "https://labs.portcullis.co.uk/downloads/";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ emilytrau ];
mainProgram = "apache-users";
};
})

View File

@@ -0,0 +1,52 @@
{
lib,
fetchFromGitHub,
python3,
}:
python3.pkgs.buildPythonApplication rec {
pname = "apachetomcatscanner";
version = "3.8.0";
pyproject = true;
src = fetchFromGitHub {
owner = "p0dalirius";
repo = "ApacheTomcatScanner";
tag = version;
hash = "sha256-gMyJClEE/i8AKHcSyvvMPwCooLwl/hvcRZgZqF59RUY=";
};
# Posted a PR for discussion upstream that can be followed:
# https://github.com/p0dalirius/ApacheTomcatScanner/pull/32
postPatch = ''
sed -i '/apachetomcatscanner=apachetomcatscanner\.__main__:main/d' setup.py
'';
pythonRelaxDeps = [
"requests"
"urllib3"
];
build-system = with python3.pkgs; [ setuptools ];
propagatedBuildInputs = with python3.pkgs; [
requests
sectools
urllib3
xlsxwriter
];
# Project has no test
doCheck = false;
pythonImportsCheck = [ "apachetomcatscanner" ];
meta = {
description = "Tool to scan for Apache Tomcat server vulnerabilities";
homepage = "https://github.com/p0dalirius/ApacheTomcatScanner";
changelog = "https://github.com/p0dalirius/ApacheTomcatScanner/releases/tag/${version}";
license = lib.licenses.gpl2Only;
maintainers = with lib.maintainers; [ fab ];
mainProgram = "ApacheTomcatScanner";
};
}

View File

@@ -0,0 +1,108 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
blas,
superlu,
suitesparse,
python3,
libintl,
}:
let
# this is a fork version of fetk (http://www.fetk.org/)
# which is maintained by apbs team
fetk = stdenv.mkDerivation (finalAttrs: {
pname = "fetk";
version = "1.9.3";
src = fetchFromGitHub {
owner = "Electrostatics";
repo = "fetk";
rev = "refs/tags/${finalAttrs.version}";
hash = "sha256-uFA1JRR05cNcUGaJj9IyGNONB2hU9IOBPzOj/HucNH4=";
};
nativeBuildInputs = [
cmake
];
cmakeFlags = [
"-DBLAS_LIBRARIES=${blas}/lib"
"-DBLA_STATIC=OFF"
"-DBUILD_SUPERLU=OFF"
"-DCMAKE_C_FLAGS=-Wno-error=implicit-int"
];
buildInputs = [
blas
superlu
suitesparse
];
meta = with lib; {
description = "Fork of the Finite Element ToolKit from fetk.org";
homepage = "https://github.com/Electrostatics/FETK";
changelog = "https://github.com/Electrostatics/FETK/releases/tag/${finalAttrs.version}";
license = licenses.lgpl21Plus;
maintainers = with maintainers; [ natsukium ];
platforms = platforms.unix;
};
});
in
stdenv.mkDerivation (finalAttrs: {
pname = "apbs";
version = "3.4.1";
src = fetchFromGitHub {
owner = "Electrostatics";
repo = "apbs";
rev = "refs/tags/v${finalAttrs.version}";
hash = "sha256-2DnHU9hMDl4OJBaTtcRiB+6R7gAeFcuOUy7aI63A3gQ=";
};
postPatch = ''
# ImportFETK.cmake downloads source and builds fetk
substituteInPlace CMakeLists.txt \
--replace "include(ImportFETK)" "" \
--replace 'import_fetk(''${FETK_VERSION})' ""
# U was removed in python 3.11 because it had no effect
substituteInPlace tools/manip/inputgen.py \
--replace '"rU"' '"r"'
'';
nativeBuildInputs = [
cmake
];
buildInputs = [
fetk
suitesparse
blas
python3
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
libintl
];
cmakeFlags = [
"-DPYTHON_VERSION=${python3.version}"
"-DAPBS_LIBS=mc;maloc"
"-DCMAKE_MODULE_PATH=${fetk}/share/fetk/cmake;"
"-DENABLE_TESTS=1"
"-DCMAKE_C_FLAGS=-Wno-error=incompatible-pointer-types"
];
doCheck = true;
meta = with lib; {
description = "Software for biomolecular electrostatics and solvation calculations";
mainProgram = "apbs";
homepage = "https://www.poissonboltzmann.org/";
changelog = "https://github.com/Electrostatics/apbs/releases/tag/v${finalAttrs.version}";
license = licenses.bsd3;
maintainers = with maintainers; [ natsukium ];
platforms = platforms.unix;
};
})

View File

@@ -0,0 +1,108 @@
{
lib,
stdenv,
fetchurl,
pkg-config,
systemd,
unixtools,
libusb-compat-0_1,
coreutils,
wall,
hostname,
man,
enableCgiScripts ? true,
gd,
nixosTests,
}:
assert enableCgiScripts -> gd != null;
stdenv.mkDerivation rec {
pname = "apcupsd";
version = "3.14.14";
src = fetchurl {
url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
sha256 = "0rwqiyzlg9p0szf3x6q1ppvrw6f6dbpn2rc5z623fk3bkdalhxyv";
};
nativeBuildInputs = [
pkg-config
man
unixtools.col
];
buildInputs =
lib.optional enableCgiScripts gd
++ lib.optionals stdenv.hostPlatform.isDarwin [
libusb-compat-0_1
];
prePatch = ''
sed -e "s,\$(INSTALL_PROGRAM) \$(STRIP),\$(INSTALL_PROGRAM)," \
-i ./src/apcagent/Makefile ./autoconf/targets.mak
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
substituteInPlace src/apcagent/Makefile \
--replace-fail "Applications" "$out/Applications"
substituteInPlace include/libusb.h.in \
--replace-fail "@LIBUSBH@" "${libusb-compat-0_1.dev}/include/usb.h"
substituteInPlace platforms/darwin/Makefile \
--replace-fail "/Library/LaunchDaemons" "$out/Library/LaunchDaemons" \
--replace-fail "/System/Library/Extensions" "$out/System/Library/Extensions"
'';
preConfigure = ''
sed -i 's|/bin/cat|${coreutils}/bin/cat|' configure
'';
# ./configure ignores --prefix, so we must specify some paths manually
# There is no real reason for a bin/sbin split, so just use bin.
configureFlags = [
"--bindir=${placeholder "out"}/bin"
"--sbindir=${placeholder "out"}/bin"
"--sysconfdir=${placeholder "out"}/etc/apcupsd"
"--mandir=${placeholder "out"}/share/man"
"--with-halpolicydir=${placeholder "out"}/share/halpolicy"
"--localstatedir=/var"
"--with-nologin=/run"
"--with-log-dir=/var/log/apcupsd"
"--with-pwrfail-dir=/run/apcupsd"
"--with-lock-dir=/run/lock"
"--with-pid-dir=/run"
"--enable-usb"
"ac_cv_path_WALL=${wall}/bin/wall"
]
++ lib.optionals stdenv.hostPlatform.isLinux [
"ac_cv_path_SHUTDOWN=${systemd}/sbin/shutdown"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
"ac_cv_path_SHUTDOWN=/sbin/shutdown"
"ac_cv_func_which_gethostbyname_r=no"
]
++ lib.optionals enableCgiScripts [
"--enable-cgi"
"--with-cgi-bin=${placeholder "out"}/libexec/cgi-bin"
];
enableParallelBuilding = true;
postInstall = ''
for file in "$out"/etc/apcupsd/*; do
sed -i -e 's|^WALL=.*|WALL="${wall}/bin/wall"|g' \
-e 's|^HOSTNAME=.*|HOSTNAME=`${hostname}/bin/hostname`|g' \
"$file"
done
rm -f "$out/bin/apcupsd-uninstall"
'';
passthru.tests.smoke = nixosTests.apcupsd;
meta = with lib; {
description = "Daemon for controlling APC UPSes";
homepage = "http://www.apcupsd.com/";
license = licenses.gpl2Only;
platforms = platforms.linux ++ platforms.darwin;
maintainers = [ maintainers.bjornfor ];
};
}

View File

@@ -0,0 +1,33 @@
{
buildGoModule,
fetchFromGitHub,
lib,
}:
buildGoModule rec {
pname = "aperture";
version = "0.3-beta";
src = fetchFromGitHub {
owner = "lightninglabs";
repo = "aperture";
tag = "v${version}";
hash = "sha256-PsmaNJxWkXiFDA7IGhT+Kx1GUvv23c8L8Jz21/b48oo=";
};
vendorHash = "sha256-rrDLdE7c6ykhdqOfRpuxyRO4xqYp3LZvovAppzy1wVw=";
subPackages = [ "cmd/aperture" ];
meta = {
description = "L402 (Lightning HTTP 402) Reverse Proxy";
homepage = "https://github.com/lightninglabs/aperture";
changelog = "https://github.com/lightninglabs/aperture/releases/tag/v${version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
sputn1ck
HannahMR
];
mainProgram = "aperture";
};
}

View File

@@ -0,0 +1,56 @@
{
lib,
rustPlatform,
fetchFromGitHub,
unstableGitUpdater,
}:
rustPlatform.buildRustPackage {
pname = "apery";
version = "2.1.0-unstable-2024-06-23";
src = fetchFromGitHub {
owner = "HiraokaTakuya";
# Successor of C++ implementation
# https://github.com/HiraokaTakuya/apery/blob/d14471fc879062bfabbd181eaa91e90c7cc28a71/Readme.txt#L3-L4
repo = "apery_rust";
rev = "8e64bc427bff033a38f1b60b9013ad2d62f88db7";
hash = "sha256-Y8IBZISutXNgbuc7/qhNoiwYDCP6M9ukhu48t3oZM18=";
# The submodule includes evaluation files for the installCheckPhase
fetchSubmodules = true;
};
cargoHash = "sha256-xaQ83WKXKSAFRSKzaTFnM2lklGLCJG+i7wa8a+KNR/I=";
checkFlags = [
"--skip=movegen"
];
doInstallCheck = true;
installCheckPhase = ''
runHook preInstallCheck
usi_command='isready
go byoyomi 1000
wait'
usi_output="$("$out/bin/apery" <<< "$usi_command")"
[[ "$usi_output" == *'bestmove'* ]]
runHook postInstallCheck
'';
passthru.updateScript = unstableGitUpdater {
tagPrefix = "v";
branch = "master";
};
meta = {
description = "USI shogi engine";
homepage = "https://github.com/HiraokaTakuya/apery_rust";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [
kachick
];
mainProgram = "apery";
};
}

View File

@@ -0,0 +1,14 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -46,8 +46,8 @@ message(STATUS "APFEL: APFEL_DOWNLOAD_PDFS=${APFEL_DOWNLOAD_PDFS}")
# CONFIG SCRIPT ========================================================
set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix "${prefix}")
-set(includedir "${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
-set(libdir "${prefix}/${CMAKE_INSTALL_LIBDIR}")
+set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
+set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
set(PACKAGE_VERSION "${apfel_VERSION}")
configure_file("${PROJECT_SOURCE_DIR}/bin/apfel-config.in" "${PROJECT_BINARY_DIR}/bin/apfel-config")
configure_file("${PROJECT_SOURCE_DIR}/bin/apfel.in" "${PROJECT_BINARY_DIR}/bin/apfel")

View File

@@ -0,0 +1,60 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
gfortran,
lhapdf,
python3,
swig,
zlib,
}:
stdenv.mkDerivation rec {
pname = "apfel";
version = "3.1.1";
src = fetchFromGitHub {
owner = "scarrazza";
repo = "apfel";
tag = version;
hash = "sha256-0Ix7KwEZUG/NmGJ380DVJbUA0PcoEJDlcGSc09l5Tbc=";
};
patches = [
# https://github.com/scarrazza/apfel/pull/54
./cmake.patch
];
nativeBuildInputs = [
cmake
swig
];
buildInputs = [
gfortran
lhapdf
python3
zlib
];
cmakeFlags = [
"-DAPFEL_DOWNLOAD_PDFS=OFF"
"-DAPFEL_Python_SITEARCH=autoprefix"
];
doCheck = true;
nativeCheckInputs = [
lhapdf.pdf_sets.NNPDF23_nlo_as_0118
lhapdf.pdf_sets.NNPDF31_nnlo_as_0118
];
env.NIX_CFLAGS_COMPILE = "-DAPFEL_VERSION=${version}";
meta = with lib; {
description = "PDF Evolution Library";
homepage = "https://apfel.mi.infn.it/";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ veprbl ];
platforms = platforms.unix;
};
}

View File

@@ -0,0 +1,43 @@
{
lib,
stdenv,
fetchFromGitHub,
autoreconfHook,
apfel,
applgrid,
lhapdf,
root,
zlib,
}:
stdenv.mkDerivation rec {
pname = "apfelgrid";
version = "1.0.1";
src = fetchFromGitHub {
owner = "nhartland";
repo = "APFELgrid";
tag = "v${version}";
sha256 = "0l0cyxd00kmb5aggzwsxg83ah0qiwav0shbxkxwrz3dvw78n89jk";
};
nativeBuildInputs = [ autoreconfHook ];
buildInputs = [
apfel
applgrid
lhapdf
root
zlib
];
enableParallelBuilding = true;
meta = with lib; {
description = "Ultra-fast theory predictions for collider observables";
mainProgram = "apfelgrid-config";
license = licenses.mit;
homepage = "https://nhartland.github.io/APFELgrid/";
platforms = platforms.unix;
maintainers = with maintainers; [ veprbl ];
};
}

View File

@@ -0,0 +1,55 @@
{
lib,
stdenv,
fetchFromGitHub,
fuse,
fuse3,
bzip2,
zlib,
attr,
cmake,
}:
stdenv.mkDerivation {
pname = "apfs-fuse";
version = "0-unstable-2023-03-12";
src = fetchFromGitHub {
owner = "sgan81";
repo = "apfs-fuse";
rev = "66b86bd525e8cb90f9012543be89b1f092b75cf3";
hash = "sha256-uYAlqnQp0K880XEWuH1548DUA3ii53+hfsuh/T3Vwzg=";
fetchSubmodules = true;
};
postPatch = lib.optionalString stdenv.hostPlatform.isDarwin ''
substituteInPlace CMakeLists.txt \
--replace "/usr/local/lib/libosxfuse.dylib" "fuse"
'';
nativeBuildInputs = [ cmake ];
buildInputs = [
(if stdenv.hostPlatform.isDarwin then fuse else fuse3)
bzip2
zlib
]
++ lib.optional stdenv.hostPlatform.isLinux attr;
cmakeFlags = lib.optional stdenv.hostPlatform.isDarwin "-DUSE_FUSE3=OFF";
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin "-DUSE_FUSE2";
postFixup = ''
ln -s $out/bin/apfs-fuse $out/bin/mount.fuse.apfs-fuse
'';
meta = with lib; {
homepage = "https://github.com/sgan81/apfs-fuse";
description = "FUSE driver for APFS (Apple File System)";
license = licenses.gpl2Plus;
mainProgram = "apfs-fuse";
maintainers = with maintainers; [ ealasu ];
platforms = platforms.unix;
};
}

View File

@@ -0,0 +1,84 @@
{
lib,
stdenv,
fetchFromGitHub,
nixosTests,
testers,
nix-update-script,
}:
let
tools = [
"apfsck"
"apfs-label"
"apfs-snap"
"mkapfs"
];
in
stdenv.mkDerivation (finalAttrs: {
pname = "apfsprogs";
version = "0.2.1";
src = fetchFromGitHub {
owner = "linux-apfs";
repo = "apfsprogs";
tag = "v${finalAttrs.version}";
hash = "sha256-GhhuielfFvcpe9hL3fUcg2xlwFrzjiUS/ZLn0jkfkh8=";
};
postPatch = ''
substituteInPlace \
apfs-snap/Makefile apfsck/Makefile mkapfs/Makefile apfs-label/Makefile \
--replace-fail \
'$(shell git describe --always HEAD | tail -c 9)' \
'v${finalAttrs.version}'
'';
buildPhase = ''
runHook preBuild
make -C apfs-snap $makeFlags
make -C apfsck $makeFlags
make -C mkapfs $makeFlags
make -C apfs-label $makeFlags
runHook postBuild
'';
installPhase = ''
runHook preInstall
make -C apfs-snap install DESTDIR="$out" $installFlags
make -C apfsck install DESTDIR="$out" $installFlags
make -C mkapfs install DESTDIR="$out" $installFlags
make -C apfs-label install DESTDIR="$out" $installFlags
runHook postInstall
'';
passthru.tests =
let
mkVersionTest = tool: {
"version-${tool}" = testers.testVersion {
package = finalAttrs.finalPackage;
command = "${tool} -v";
version = "v${finalAttrs.version}";
};
};
versionTestList = map mkVersionTest tools;
versionTests = lib.mergeAttrsList versionTestList;
in
{
apfs = nixosTests.apfs;
}
// versionTests;
passthru.updateScript = nix-update-script { };
strictDeps = true;
meta = with lib; {
description = "Experimental APFS tools for linux";
homepage = "https://github.com/linux-apfs/apfsprogs";
changelog = "https://github.com/linux-apfs/apfsprogs/releases/tag/v${finalAttrs.version}";
license = licenses.gpl2Only;
platforms = platforms.linux;
maintainers = with maintainers; [ Luflosi ];
};
})

View File

@@ -0,0 +1,28 @@
{
lib,
fetchFromGitHub,
rustPlatform,
}:
rustPlatform.buildRustPackage {
pname = "apftool-rs";
version = "0-unstable-2024-01-05";
src = fetchFromGitHub {
owner = "suyulin";
repo = "apftool-rs";
rev = "92d8a1b88cb79a53f9e4a70fecee481710d3565b";
hash = "sha256-0+eKxaLKZBRLdydXxUbifFfFncAbthUn7AB8QieWaXM=";
};
cargoHash = "sha256-IJEEnNIW44kItB19U1lNGi1cHpVGaGHQZt2kgAJFkjU=";
meta = {
description = "About Tools for Rockchip image unpack tool";
mainProgram = "apftool-rs";
homepage = "https://github.com/suyulin/apftool-rs";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ colemickens ];
platforms = lib.platforms.linux;
};
}

View File

@@ -0,0 +1,72 @@
{
lib,
stdenv,
fetchFromGitHub,
openssl,
autoreconfHook,
}:
stdenv.mkDerivation {
pname = "apg";
version = "unstable-2015-01-29";
src = fetchFromGitHub {
owner = "wilx";
repo = "apg";
rev = "7ecdbac79156c8864fa3ff8d61e9f1eb264e56c2";
sha256 = "sha256-+7TrJACdm/i/pc0dsp8edEIOjx8cip+x0Qc2gONajSE=";
};
nativeBuildInputs = [ autoreconfHook ];
buildInputs = [ openssl ];
meta = {
description = "Tools for random password generation";
longDescription = ''
APG (Automated Password Generator) is the tool set for random
password generation.
Standalone version
Generates some random words of required type and prints them
to standard output.
Network version
APG server: When client's request is arrived generates some
random words of predefined type and send them to client over
the network (according to RFC0972).
APG client: Sends the password generation request to the APG
server, wait for generated Passwords arrival and then prints
them to the standard output.
Advantages
* Built-in ANSI X9.17 RNG (Random Number Generator) (CAST/SHA1)
* Built-in password quality checking system (it has support for
Bloom filter for faster access)
* Two Password Generation Algorithms:
1. Pronounceable Password Generation Algorithm (according to
NIST FIPS 181)
2. Random Character Password Generation Algorithm with 35
configurable modes of operation
* Configurable password length parameters
* Configurable amount of generated passwords
* Ability to initialize RNG with user string
* Support for /dev/random
* Ability to crypt() generated passwords and print them as
additional output
* Special parameters to use APG in script
* Ability to log password generation requests for network version
* Ability to control APG service access using tcpd
* Ability to use password generation service from any type of box
(Mac, WinXX, etc.) that connected to network
* Ability to enforce remote users to use only allowed type of
password generation
'';
homepage = "https://github.com/wilx/apg";
license = lib.licenses.bsd3;
platforms = lib.platforms.unix;
};
}

View File

@@ -0,0 +1,47 @@
{
lib,
maven,
fetchFromGitHub,
jre,
makeWrapper,
}:
maven.buildMavenPackage rec {
pname = "apgdiff";
version = "2.7.0";
src = fetchFromGitHub {
sparseCheckout = [ "src" ];
owner = "fordfrog";
repo = "apgdiff";
tag = "release_${version}";
hash = "sha256-2m+9QNwQV2tJwOabTXE2xjRB5gDrSwyL6zL2op+wmkM=";
};
# Fix wrong version string in --help
postPatch = ''
sed -i 's/VersionNumber=.*/VersionNumber=${version}/' \
src/main/resources/cz/startnet/utils/pgdiff/Resources.properties
'';
mvnHash = "sha256-zJQirS8sVqHKZsBukEOf7ox5IeiAVOP6wEHWb4CAyxc=";
nativeBuildInputs = [ makeWrapper ];
installPhase = ''
install -Dm644 target/apgdiff-${version}.jar $out/lib/apgdiff.jar
mkdir -p $out/bin
makeWrapper ${jre}/bin/java $out/bin/apgdiff \
--argv0 apgdiff \
--add-flags "-jar $out/lib/apgdiff.jar"
'';
meta = with lib; {
description = "Another PostgreSQL diff tool";
mainProgram = "apgdiff";
homepage = "https://apgdiff.com";
license = licenses.mit;
inherit (jre.meta) platforms;
maintainers = [ maintainers.misterio77 ];
};
}

View File

@@ -0,0 +1,53 @@
{
lib,
fetchFromGitHub,
rustPlatform,
wayland,
libxkbcommon,
libGL,
stdenv,
testers,
aphorme,
autoPatchelfHook,
}:
rustPlatform.buildRustPackage rec {
pname = "aphorme";
version = "0.1.19";
src = fetchFromGitHub {
owner = "Iaphetes";
repo = "aphorme_launcher";
tag = "v${version}";
hash = "sha256-p1ZIMMDyQWVzoeyHb3sbeV6XQwbIDoQwJU8ynI8hGUI=";
};
cargoHash = "sha256-knxFQ9hBBc8zATwf4ntbbmT2a+33uYcqax8AAFsj/NM=";
# No tests exist
doCheck = false;
buildInputs = [ (lib.getLib stdenv.cc.cc) ];
nativeBuildInputs = [ autoPatchelfHook ];
runtimeDependencies = [
wayland
libGL
libxkbcommon
];
passthru.tests.version = testers.testVersion {
package = aphorme;
command = "aphorme --version";
version = "aphorme ${version}";
};
meta = {
description = "Program launcher for window managers, written in Rust";
mainProgram = "aphorme";
homepage = "https://github.com/Iaphetes/aphorme_launcher";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ anytimetraveler ];
platforms = lib.platforms.linux;
};
}

View File

@@ -0,0 +1,35 @@
{
lib,
buildGoModule,
fetchFromGitHub,
}:
buildGoModule rec {
pname = "api-linter";
version = "1.71.0";
src = fetchFromGitHub {
owner = "googleapis";
repo = "api-linter";
tag = "v${version}";
hash = "sha256-WZvaPYiz1pHW6OLl6ahV3/b9RXW6S/c/kbQxJFfAn28=";
};
vendorHash = "sha256-KW5+THuV7U09ZV0eShLCDJYDPOM09/bUi7t0WiVx6pk=";
subPackages = [ "cmd/api-linter" ];
ldflags = [
"-s"
"-w"
];
meta = with lib; {
description = "Linter for APIs defined in protocol buffers";
homepage = "https://github.com/googleapis/api-linter/";
changelog = "https://github.com/googleapis/api-linter/releases/tag/${src.rev}";
license = licenses.asl20;
maintainers = with maintainers; [ xrelkd ];
mainProgram = "api-linter";
};
}

View File

@@ -0,0 +1,42 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
udevCheckHook,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "apio-udev-rules";
version = "0.9.5";
src = fetchFromGitHub {
owner = "FPGAwars";
repo = "apio";
tag = "v${finalAttrs.version}";
hash = "sha256-VU4tOszGkw20DWW2SerFsnjFiSkrSwqBcwosGnHJfU8=";
};
dontBuild = true;
nativeBuildInputs = [
udevCheckHook
];
doInstallCheck = true;
# 80-* renamed to 70-* for uaccess TAG
installPhase = ''
runHook preInstall
install -D apio/resources/80-fpga-ftdi.rules $out/lib/udev/rules.d/70-fpga-ftdi.rules
install -D apio/resources/80-fpga-serial.rules $out/lib/udev/rules.d/70-fpga-serial.rules
runHook postInstall
'';
meta = {
description = "Apio udev rules list";
homepage = "https://github.com/FPGAwars/apio";
platforms = lib.platforms.linux;
license = lib.licenses.gpl2Only;
maintainers = with lib.maintainers; [ zh4ngx ];
};
})

View File

@@ -0,0 +1,87 @@
{
lib,
python3Packages,
fetchFromGitHub,
tinyprog,
scons,
}:
python3Packages.buildPythonApplication rec {
pname = "apio";
version = "0.9.5";
pyproject = true;
src = fetchFromGitHub {
owner = "FPGAwars";
repo = "apio";
tag = "v${version}";
hash = "sha256-VU4tOszGkw20DWW2SerFsnjFiSkrSwqBcwosGnHJfU8=";
};
postPatch = ''
substituteInPlace pyproject.toml \
--replace-fail 'scons==4.2.0' 'scons' \
--replace-fail '==' '>='
substituteInPlace apio/managers/scons.py --replace-fail \
'return "tinyprog --libusb --program"' \
'return "${tinyprog}/bin/tinyprog --libusb --program"'
substituteInPlace apio/util.py --replace-fail \
'_command = apio_bin_dir / "tinyprog"' \
'_command = "${tinyprog}/bin/tinyprog"'
# semantic-version seems to not support version numbers like the one of tinyprog in Nixpkgs (1.0.24.dev114+gxxxxxxx).
# See https://github.com/rbarrois/python-semanticversion/issues/47.
# This leads to an error like "Error: Invalid version string: '1.0.24.dev114+g97f6353'"
# when executing "apio upload" for a TinyFPGA.
# Replace the dot with a dash to work around this problem.
substituteInPlace apio/managers/scons.py --replace-fail \
'version = semantic_version.Version(pkg_version)' \
'version = semantic_version.Version(pkg_version.replace(".dev", "-dev"))'
'';
nativeBuildInputs = with python3Packages; [
flit-core
];
dependencies =
with python3Packages;
[
click
semantic-version
requests
colorama
pyserial
wheel
]
++ [
scons
tinyprog # needed for upload to TinyFPGA
];
build-system = with python3Packages; [
setuptools # needs pkg_resources at runtime (technically not needed when tinyprog is also in this list because of the propagatedBuildInputs of tinyprog)
];
nativeCheckInputs = with python3Packages; [
pytestCheckHook
];
disabledTestPaths = [
# This test fails and is also not executed in upstream's CI
"test2"
];
pytestFlags = [ "--offline" ];
strictDeps = true;
meta = {
description = "Open source ecosystem for open FPGA boards";
mainProgram = "apio";
homepage = "https://github.com/FPGAwars/apio";
license = lib.licenses.gpl2Only;
maintainers = with lib.maintainers; [ Luflosi ];
};
}

View File

@@ -0,0 +1,33 @@
{
fetchFromGitHub,
gradle,
lib,
REAndroidLibrary,
}:
let
self = REAndroidLibrary {
pname = "arsclib";
# 1.3.5 is not new enough for APKEditor because of API changes
version = "1.3.5-unstable-2024-10-21";
projectName = "ARSCLib";
src = fetchFromGitHub {
owner = "REAndroid";
repo = "ARSCLib";
# This is the latest commit at the time of packaging.
# It can be changed to a stable release ("V${version}")
# if it is compatible with APKEditor.
rev = "ed6ccf00e56d7cce13e8648ad46a2678a6093248";
hash = "sha256-jzd7xkc4O+P9hlGsFGGl2P3pqVvV5+mDyKTRUuGfFSA=";
};
mitmCache = gradle.fetchDeps {
pkg = self;
data = ./deps.json;
};
meta.license = lib.licenses.asl20;
};
in
self

View File

@@ -0,0 +1,17 @@
{
"!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.",
"!version": 1,
"https://repo.maven.apache.org/maven2": {
"junit#junit/4.12": {
"jar": "sha256-WXIfCAXiI9hLkGd4h9n/Vn3FNNfFAsqQPAwrF/BcEWo=",
"pom": "sha256-kPFj944/+28cetl96efrpO6iWAcUG4XW0SvmfKJUScQ="
},
"org/hamcrest#hamcrest-core/1.3": {
"jar": "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=",
"pom": "sha256-/eOGp5BRc6GxA95quCBydYS1DQ4yKC4nl3h8IKZP+pM="
},
"org/hamcrest#hamcrest-parent/1.3": {
"pom": "sha256-bVNflO+2Y722gsnyelAzU5RogAlkK6epZ3UEvBvkEps="
}
}
}

View File

@@ -0,0 +1,41 @@
diff --git a/build.gradle b/build.gradle
index 97fd54f..128a269 100755
--- a/build.gradle
+++ b/build.gradle
@@ -5,8 +5,8 @@ group 'com.reandroid.apkeditor'
version '1.4.1'
java {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
+ sourceCompatibility JavaVersion.VERSION_17
+ targetCompatibility JavaVersion.VERSION_17
}
if (JavaVersion.current().isJava8Compatible()) {
@@ -22,13 +22,13 @@ repositories {
dependencies {
//implementation("io.github.reandroid:ARSCLib:+")
- compile(files("$rootProject.projectDir/libs/ARSCLib.jar"))
+ implementation(files("$rootProject.projectDir/libs/ARSCLib.jar"))
// built from: https://github.com/REAndroid/smali-lib
- compile(files("$rootProject.projectDir/libs/smali.jar"))
+ implementation(files("$rootProject.projectDir/libs/smali.jar"))
// built from: https://github.com/REAndroid/JCommand
- compile(files("$rootProject.projectDir/libs/JCommand.jar"))
+ implementation(files("$rootProject.projectDir/libs/JCommand.jar"))
}
processResources {
@@ -52,7 +52,7 @@ task fatJar(type: Jar) {
'Main-Class': 'com.reandroid.apkeditor.Main'
)
}
- from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
+ from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}

View File

@@ -0,0 +1,33 @@
{
fetchFromGitHub,
gradle,
lib,
REAndroidLibrary,
}:
let
self = REAndroidLibrary {
pname = "jcommand";
version = "0-unstable-2024-09-20";
projectName = "JCommand";
src = fetchFromGitHub {
owner = "REAndroid";
repo = "JCommand";
# No tagged releases, and
# it is hard to determine the actual commit that APKEditor is intended to use,
# so I think we should use the latest commit that doesn't break compilation or basic functionality.
# Currently this is the latest commit at the time of packaging.
rev = "714b6263c28dabb34adc858951cf4bc60d6c3fed";
hash = "sha256-6Em+1ddUkZBCYWs88qtfeGnxISZchFrHgDL8fsgZoQg=";
};
mitmCache = gradle.fetchDeps {
pkg = self;
data = ./deps.json;
};
meta.license = lib.licenses.asl20;
};
in
self

View File

@@ -0,0 +1,17 @@
{
"!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.",
"!version": 1,
"https://repo.maven.apache.org/maven2": {
"junit#junit/4.12": {
"jar": "sha256-WXIfCAXiI9hLkGd4h9n/Vn3FNNfFAsqQPAwrF/BcEWo=",
"pom": "sha256-kPFj944/+28cetl96efrpO6iWAcUG4XW0SvmfKJUScQ="
},
"org/hamcrest#hamcrest-core/1.3": {
"jar": "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=",
"pom": "sha256-/eOGp5BRc6GxA95quCBydYS1DQ4yKC4nl3h8IKZP+pM="
},
"org/hamcrest#hamcrest-parent/1.3": {
"pom": "sha256-bVNflO+2Y722gsnyelAzU5RogAlkK6epZ3UEvBvkEps="
}
}
}

View File

@@ -0,0 +1,111 @@
{
lib,
stdenv,
fetchFromGitHub,
callPackage,
jre,
gradle,
makeWrapper,
}:
let
REAndroidLibrary =
args:
let
inherit (args) pname version projectName;
outJar = "share/${projectName}/${projectName}.jar";
self = stdenv.mkDerivation (
{
__darwinAllowLocalNetworking = true;
buildInputs = [ jre ];
nativeBuildInputs = [ gradle ];
gradleFlags = [ "-Dfile.encoding=utf-8" ];
gradleBuildTask = "jar";
doCheck = true;
inherit outJar;
installPhase = ''
runHook preInstall
install -Dm644 build/libs/*.jar $out/${outJar}
runHook postInstall
'';
}
// args
// {
meta = {
sourceProvenance = with lib.sourceTypes; [
fromSource
binaryBytecode # mitm cache
];
}
// args.meta;
}
);
in
self;
arsclib = callPackage ./arsclib { inherit REAndroidLibrary; };
smali = callPackage ./smali { inherit REAndroidLibrary; };
jcommand = callPackage ./jcommand { inherit REAndroidLibrary; };
apkeditor =
let
pname = "apkeditor";
version = "1.4.1";
projectName = "APKEditor";
in
REAndroidLibrary {
inherit pname version projectName;
# When you need to update **/deps.json for the dependencies (e.g. for smali),
# run `nix build apkeditor.passthru.deps.smali.mitmCache.updateScript`.
passthru.deps = {
inherit arsclib smali jcommand;
};
src = fetchFromGitHub {
owner = "REAndroid";
repo = "APKEditor";
tag = "v${version}";
hash = "sha256-a72j9qGjJXnTFeqLez2rhBSArFVYCX+Xs7NQd8CY5Yk=";
};
patches = [
# Remove this patch after REAndroid/APKEditor#144 is merged
./fix-gradle.patch
];
nativeBuildInputs = [
gradle
makeWrapper
];
gradleBuildTask = "fatJar";
# The paths libs/*.jar are hardcoded in build.gradle of APKEditor:
# https://github.com/REAndroid/APKEditor/blob/V1.4.1/build.gradle#L24-L31
preConfigure = ''
ln -sf ${arsclib}/${arsclib.outJar} libs/ARSCLib.jar
ln -sf ${smali}/${smali.outJar} libs/smali.jar
ln -sf ${jcommand}/${jcommand.outJar} libs/JCommand.jar
'';
postInstall = ''
mkdir -p $out/bin
makeWrapper ${lib.getExe jre} $out/bin/APKEditor \
--add-flags "-jar $out/${apkeditor.outJar}"
'';
meta = {
description = "Powerful android apk resources editor";
maintainers = with lib.maintainers; [ ulysseszhan ];
license = lib.licenses.asl20;
platforms = lib.platforms.all;
mainProgram = "APKEditor";
};
};
in
apkeditor

View File

@@ -0,0 +1,57 @@
{
fetchFromGitHub,
gradle,
lib,
REAndroidLibrary,
}:
let
self = REAndroidLibrary {
pname = "smali";
version = "0-unstable-2024-10-15";
projectName = "smali";
src = fetchFromGitHub {
owner = "REAndroid";
repo = "smali-lib";
# No tagged releases, and
# it is hard to determine the actual commit that APKEditor is intended to use,
# so I think we should use the latest commit that doesn't break compilation or basic functionality.
# Currently this is the latest commit at the time of packaging.
rev = "c781eafb31f526abce9fdf406ce2c925fec20d28";
hash = "sha256-6tkvikgWMUcKwzsgbfpxlB6NZBAlZtTE34M3qPQw7Y4=";
};
patches = [
# Remove this patch after REAndroid/smali-lib#1 is merged
./fix-gradle.patch
];
mitmCache = gradle.fetchDeps {
pkg = self;
data = ./deps.json;
};
gradleBuildTask = "build";
installPhase = ''
runHook preInstall
install -Dm644 smali/build/libs/*-fat.jar $out/${self.outJar}
runHook postInstall
'';
# This fork deleted the NOTICE file from the original repo:
# https://github.com/REAndroid/smali-lib/commit/40c075a1ff5fa8e29f339f4e71f45c028789c86c#diff-dfb14fbb9e7d095209ec4cfd621069437bf9c442ff9de9d4ce889781bd0fefcf
# Here is the gist of the original NOTICE file:
# Various portions of the code are from AOSP and is licensed under Apache 2.0.
# Other parts are copyrighted by JesusFreke and Google,
# permitting redistribution (with or without modification) of source and binary
# as long as the copyright notice is present.
# For full details, see:
# https://github.com/JesusFreke/smali/blob/master/NOTICE
meta.license = with lib.licenses; [
asl20
free
];
};
in
self

View File

@@ -0,0 +1,86 @@
{
"!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.",
"!version": 1,
"https://repo.maven.apache.org/maven2": {
"antlr#antlr/2.7.7": {
"jar": "sha256-iPvaS5Ellrn1bo4S5YDMlUus+1F3bs/d0+GPwc9W3Ew=",
"pom": "sha256-EA95O6J/i05CBO20YXHr825U4PlM/AJSf+oHoLsfzrc="
},
"com/beust#jcommander/1.48": {
"jar": "sha256-pzE/z94HCTDkDsee3zxZSM805PDSXLOgn5lj2L3YQRM=",
"pom": "sha256-EH4aAn6KszS4H7KJYGDba68y430uME5glCNtPn6ymQM="
},
"de/jflex#jflex-parent/1.6.1": {
"pom": "sha256-zgOPd5P3f7eO+hFMMyjlx37OF9MzRfB7TsCm4U4WB1k="
},
"de/jflex#jflex/1.6.1": {
"jar": "sha256-EsuEWC3TPm3O2yTaSwwf6AdfxjkWx8xt8UCHDPHpKbY=",
"pom": "sha256-MXynvUMHgykKCEHUwxEvcbyY1aR+6cyIaZXEFChcnes="
},
"junit#junit/4.12": {
"jar": "sha256-WXIfCAXiI9hLkGd4h9n/Vn3FNNfFAsqQPAwrF/BcEWo=",
"pom": "sha256-kPFj944/+28cetl96efrpO6iWAcUG4XW0SvmfKJUScQ="
},
"org/antlr#ST4/4.0.8": {
"jar": "sha256-WMqrxAyfdLC1mT/YaOD2SlDAdZCU5qJRqq+tmO38ejs=",
"pom": "sha256-PAiQ3scRdOs7o9QEyp40GQH/awQhgIsAcTsNuxMGwXw="
},
"org/antlr#antlr-master/3.5.2": {
"pom": "sha256-QtkaUx6lEA6wm1QaoALDuQjo8oK9c7bi9S83HvEzG9Y="
},
"org/antlr#antlr-runtime/3.5.2": {
"jar": "sha256-zj/I7LEPOemjzdy7LONQ0nLZzT0LHhjm/nPDuTichzQ=",
"pom": "sha256-RqnCIAu4sSvXEkqnpQl/9JCZkIMpyFGgTLIFFCCqfyU="
},
"org/antlr#antlr/3.5.2": {
"jar": "sha256-WsNsKs+woPPTfa/iC1tXDyZD4tAAxkjURQPCc4vmQ98=",
"pom": "sha256-Bl5egGYv64WHldPAH3cUJHvdMZRZcF7hOxpLGWj6IuQ="
},
"org/antlr#stringtemplate/3.2.1": {
"jar": "sha256-9mznLpZeUwHLDwIOVNK6atdv65Gzy/ww278AwGpt9tc=",
"pom": "sha256-tF6CZVqlpI8z0TpD5DRUJrFWM1s14kta6hLbWCPBahY="
},
"org/apache/ant#ant-launcher/1.7.0": {
"jar": "sha256-crPQPg19hqVlE+w43UzWq+PaZiAYm+IiqyVTUstuuko=",
"pom": "sha256-0p0myykG6cOYOBvUhz7KuwTWMO9hNDXssUmoWirvyvQ="
},
"org/apache/ant#ant-parent/1.7.0": {
"pom": "sha256-GlLYNxpsvG4F7b8CZGcXEX3SNERZvulnAU8EH9zzCJM="
},
"org/apache/ant#ant/1.7.0": {
"jar": "sha256-kvcjB+dEDx41LJFvJDjSu6s//Sz3MMcTFhF60Eq63qg=",
"pom": "sha256-fAIXQD9XogDLgNSJiSzgTqdi8qEzq+PdOEcGUUNM+vI="
},
"org/hamcrest#hamcrest-core/1.3": {
"jar": "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=",
"pom": "sha256-/eOGp5BRc6GxA95quCBydYS1DQ4yKC4nl3h8IKZP+pM="
},
"org/hamcrest#hamcrest-parent/1.3": {
"pom": "sha256-bVNflO+2Y722gsnyelAzU5RogAlkK6epZ3UEvBvkEps="
},
"org/mockito#mockito-core/1.10.19": {
"jar": "sha256-1YMe5PcQVYAIIaNKMFHPHtWzcC8pX/69UPZftdgacbg=",
"pom": "sha256-cVJo2AC6zQcjbuHm9EB2UOYc+XlzO8Ji5N4V+9E7kg0="
},
"org/objenesis#objenesis-parent/2.1": {
"pom": "sha256-NDsaMJNBDj+ybGaZhCOrOJw6dEHNGohZvTJ90VtHmqQ="
},
"org/objenesis#objenesis/2.1": {
"jar": "sha256-x0MwzGuAbIBP0350SHtP5dfCdQxeFfvG76E73uG974A=",
"pom": "sha256-QFTxhhN+O4SafCPJ6EbNV9ii/jLBfUxivUIFEtdMPT8="
},
"org/sonatype/oss#oss-parent/3": {
"pom": "sha256-DCeIkmfAlGJEYRaZcJPGcVzMAMKzqVTmZDRDDY9Nrt4="
},
"org/sonatype/oss#oss-parent/7": {
"pom": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ="
},
"org/sonatype/oss#oss-parent/9": {
"pom": "sha256-+0AmX5glSCEv+C42LllzKyGH7G8NgBgohcFO8fmCgno="
},
"org/xbib/gradle/plugin#gradle-plugin-jflex/1.1.0": {
"jar": "sha256-nfON5Bsazk30I3o2pAw8k0qzVWBomj9b6DiwfQ3jn3g=",
"pom": "sha256-Ikxjj1TL8LCYxDw6GylqmsF/dfYC9m65szjnkqr6C5g="
}
}
}

View File

@@ -0,0 +1,87 @@
diff --git a/baksmali/build.gradle b/baksmali/build.gradle
index d346970e..eaddfa27 100644
--- a/baksmali/build.gradle
+++ b/baksmali/build.gradle
@@ -25,7 +25,7 @@ task fatJar(type: Jar) {
from sourceSets.main.output
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
- classifier = 'fat'
+ archiveClassifier = 'fat'
manifest {
attributes('Main-Class': 'org.jf.baksmali.Main')
@@ -36,6 +36,10 @@ task fatJar(type: Jar) {
ant.symlink(link: file("${destinationDirectory.get()}/baksmali.jar"), resource: archivePath, overwrite: true)
}
}
+
+ // Necessary on Gradle 7 to eplicitly set dependency
+ dependsOn project(':util').jar
+ dependsOn project(':dexlib2').jar
}
tasks.getByPath('build').dependsOn(fatJar)
diff --git a/build.gradle b/build.gradle
index 5656b634..e519c53e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -30,8 +30,8 @@ subprojects {
version = parent.version
java {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
+ sourceCompatibility JavaVersion.VERSION_17
+ targetCompatibility JavaVersion.VERSION_17
}
ext {
diff --git a/dexlib2/build.gradle b/dexlib2/build.gradle
index e1c39897..fc45707c 100644
--- a/dexlib2/build.gradle
+++ b/dexlib2/build.gradle
@@ -18,4 +18,7 @@ task ragel(type:Exec) {
'SyntheticAccessorFSM.rl'
}
-
+test {
+ // Since Java 9, this is needed. See https://stackoverflow.com/a/41265267
+ jvmArgs '--add-opens', 'java.base/java.lang=ALL-UNNAMED'
+}
diff --git a/smali/build.gradle b/smali/build.gradle
index 6ec5f483..2b3bb771 100644
--- a/smali/build.gradle
+++ b/smali/build.gradle
@@ -57,13 +57,17 @@ dependencies {
processResources.inputs.property('version', version)
processResources.expand('version': version)
+processResources.configure {
+ // Necessary on Gradle 7 to eplicitly set dependency
+ dependsOn generateGrammarSource
+}
// Build a separate jar that contains all dependencies
task fatJar(type: Jar, dependsOn: jar) {
from sourceSets.main.output
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
- classifier = 'fat'
+ archiveClassifier = 'fat'
manifest {
attributes('Main-Class': 'org.jf.smali.Main')
@@ -74,6 +78,11 @@ task fatJar(type: Jar, dependsOn: jar) {
ant.symlink(link: file("${destinationDirectory.get()}/smali.jar"), resource: archivePath, overwrite: true)
}
}
+
+ // Necessary on Gradle 7 to eplicitly set dependency
+ dependsOn project(':util').jar
+ dependsOn project(':dexlib2').jar
+ dependsOn project(':baksmali').jar
}
tasks.getByPath('build').dependsOn(fatJar)

View File

@@ -0,0 +1,40 @@
{
lib,
fetchCrate,
rustPlatform,
openssl,
pkg-config,
}:
rustPlatform.buildRustPackage rec {
pname = "apkeep";
version = "0.17.0";
src = fetchCrate {
inherit pname version;
hash = "sha256-YjGfnYK22RIVa8D8CWnAxHGDqXENGAPIeQQ606Q3JW8=";
};
cargoHash = "sha256-CwucGAwAvxePNQu5p1OWx9o9xsvpzX1abH6HyF43nEE=";
prePatch = ''
rm .cargo/config.toml
'';
nativeBuildInputs = [
pkg-config
];
buildInputs = [
openssl
];
meta = {
description = "Command-line tool for downloading APK files from various sources";
homepage = "https://github.com/EFForg/apkeep";
changelog = "https://github.com/EFForg/apkeep/blob/${version}/CHANGELOG.md";
license = lib.licenses.mit;
maintainers = [ ];
mainProgram = "apkeep";
};
}

View File

@@ -0,0 +1,73 @@
{
lib,
fetchFromGitLab,
python3Packages,
gitMinimal,
rpm,
dpkg,
fakeroot,
}:
python3Packages.buildPythonApplication rec {
pname = "apkg";
version = "0.6.1";
format = "pyproject";
src = fetchFromGitLab {
domain = "gitlab.nic.cz";
owner = "packaging";
repo = "apkg";
tag = "v${version}";
hash = "sha256-rFcHgNaZBTKO0tU7O8fz2eOD731sLHWxhh0x5mMo9uw=";
};
propagatedBuildInputs = with python3Packages; [
# copy&pasted requirements.txt (almost exactly)
beautifulsoup4 # upstream version detection
blessed # terminal colors
build # apkg distribution
cached-property # for python <= 3.7; but pip complains even with 3.8
click # nice CLI framework
distro # current distro detection
jinja2 # templating
packaging # version parsing
requests # HTTP for humans™
toml # config files
];
nativeBuildInputs = with python3Packages; [
setuptools # required for build
];
makeWrapperArgs = [
# deps for `srcpkg` operation for other distros; could be optional
"--prefix"
"PATH"
":"
(lib.makeBinPath [
gitMinimal
rpm
dpkg
fakeroot
])
];
nativeCheckInputs = with python3Packages; [
pytest
];
checkPhase = ''
runHook preCheck
py.test # inspiration: .gitlab-ci.yml
runHook postCheck
'';
meta = with lib; {
description = "Upstream packaging automation tool";
homepage = "https://pkg.labs.nic.cz/pages/apkg";
license = licenses.gpl3Plus;
maintainers = [
maintainers.vcunat # close to upstream
];
mainProgram = "apkg";
};
}

View File

@@ -0,0 +1,46 @@
{
lib,
fetchFromGitHub,
python3,
}:
python3.pkgs.buildPythonApplication rec {
pname = "apkid";
version = "3.0.0";
pyproject = true;
src = fetchFromGitHub {
owner = "rednaga";
repo = "APKiD";
tag = "v${version}";
hash = "sha256-/8p2qR1je65k1irXFcCre2e16rhGjcu0+u6RChMYTWQ=";
};
postPatch = ''
# We have dex support enabled in yara-python
substituteInPlace setup.py \
--replace "yara-python-dex>=1.0.1" "yara-python"
'';
build-system = with python3.pkgs; [ setuptools ];
dependencies = with python3.pkgs; [ yara-python ];
nativeCheckInputs = with python3.pkgs; [ pytestCheckHook ];
preBuild = ''
# Prepare the YARA rules
${python3.interpreter} prep-release.py
'';
pythonImportsCheck = [ "apkid" ];
meta = with lib; {
description = "Android Application Identifier";
homepage = "https://github.com/rednaga/APKiD";
changelog = "https://github.com/rednaga/APKiD/releases/tag/${src.tag}";
license = licenses.gpl3Only;
maintainers = with maintainers; [ fab ];
mainProgram = "apkid";
};
}

View File

@@ -0,0 +1,41 @@
{
lib,
fetchFromGitHub,
jadx,
python3,
}:
python3.pkgs.buildPythonApplication rec {
pname = "apkleaks";
version = "2.6.3";
pyproject = true;
src = fetchFromGitHub {
owner = "dwisiswant0";
repo = "apkleaks";
tag = "v${version}";
hash = "sha256-8P4LZsyq0mSVdE6QhnW3QaaA3UAg4UDBS3jSg7Kg/oY=";
};
build-system = with python3.pkgs; [ setuptools ];
dependencies = with python3.pkgs; [
jadx
pyaxmlparser
setuptools
];
# Project has no tests
doCheck = false;
pythonImportsCheck = [ "apkleaks" ];
meta = {
description = "Scanning APK file for URIs, endpoints and secrets";
homepage = "https://github.com/dwisiswant0/apkleaks";
changelog = "https://github.com/dwisiswant0/apkleaks/releases/tag/v${version}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ fab ];
mainProgram = "apkleaks";
};
}

View File

@@ -0,0 +1,98 @@
{
lib,
stdenv,
buildGoModule,
fetchFromGitHub,
writableTmpDirAsHomeHook,
installShellFiles,
versionCheckHook,
buildPackages,
}:
buildGoModule (finalAttrs: {
pname = "apko";
version = "0.30.13";
src = fetchFromGitHub {
owner = "chainguard-dev";
repo = "apko";
tag = "v${finalAttrs.version}";
hash = "sha256-b90o1MmFYhEc8mwh7ejTm6I59zlaa8Jv46dtuZdC6GQ=";
# populate values that require us to use git. By doing this in postFetch we
# can delete .git afterwards and maintain better reproducibility of the src.
leaveDotGit = true;
postFetch = ''
cd "$out"
git rev-parse HEAD > $out/COMMIT
# '0000-00-00T00:00:00Z'
date -u -d "@$(git log -1 --pretty=%ct)" "+'%Y-%m-%dT%H:%M:%SZ'" > $out/SOURCE_DATE_EPOCH
find "$out" -name .git -print0 | xargs -0 rm -rf
'';
};
vendorHash = "sha256-mZg8OXPMeBAJYQWB0vrZC5fo0+xuU8ho/IE2j624RV8=";
nativeBuildInputs = [ installShellFiles ];
ldflags = [
"-s"
"-w"
"-X sigs.k8s.io/release-utils/version.gitVersion=v${finalAttrs.version}"
"-X sigs.k8s.io/release-utils/version.gitTreeState=clean"
];
# ldflags based on metadata from git and source
preBuild = ''
ldflags+=" -X sigs.k8s.io/release-utils/version.gitCommit=$(cat COMMIT)"
ldflags+=" -X sigs.k8s.io/release-utils/version.buildDate=$(cat SOURCE_DATE_EPOCH)"
'';
nativeCheckInputs = [ writableTmpDirAsHomeHook ];
# skip tests on darwin due to some local networking failures
# `__darwinAllowLocalNetworking = true;` wasn't sufficient for
# aarch64 or x86_64
doCheck = !stdenv.isDarwin;
preCheck = ''
# some test data include SOURCE_DATE_EPOCH (which is different from our default)
# and the default version info which we get by unsetting our ldflags
export SOURCE_DATE_EPOCH=0
unset ldflags
'';
checkFlags = [
# requires networking (apk.chainreg.biz)
"-skip=TestInitDB_ChainguardDiscovery"
];
postInstall =
let
apko =
if stdenv.buildPlatform.canExecute stdenv.hostPlatform then
placeholder "out"
else
buildPackages.apko;
in
''
installShellCompletion --cmd apko \
--bash <(${apko}/bin/apko completion bash) \
--fish <(${apko}/bin/apko completion fish) \
--zsh <(${apko}/bin/apko completion zsh)
'';
nativeInstallCheckInputs = [ versionCheckHook ];
doInstallCheck = true;
versionCheckProgramArg = "version";
meta = {
homepage = "https://apko.dev/";
changelog = "https://github.com/chainguard-dev/apko/releases/tag/v${finalAttrs.version}";
description = "Build OCI images using APK directly without Dockerfile";
mainProgram = "apko";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
jk
developer-guy
emilylange
];
};
})

View File

@@ -0,0 +1,82 @@
{
lib,
apksigner,
bash,
fetchFromGitHub,
installShellFiles,
pandoc,
python3,
}:
python3.pkgs.buildPythonApplication rec {
pname = "apksigcopier";
version = "1.1.1";
format = "pyproject";
src = fetchFromGitHub {
owner = "obfusk";
repo = "apksigcopier";
tag = "v${version}";
sha256 = "sha256-VuwSaoTv5qq1jKwgBTKd1y9RKUzz89n86Z4UBv7Q51o=";
};
nativeBuildInputs = [
installShellFiles
pandoc
];
build-system = with python3.pkgs; [
setuptools
];
dependencies = with python3.pkgs; [
click
];
makeWrapperArgs = [
"--prefix"
"PATH"
":"
"${lib.makeBinPath [ apksigner ]}"
];
postPatch = ''
substituteInPlace Makefile \
--replace-fail /bin/bash ${bash}/bin/bash
'';
postBuild = ''
make ${pname}.1
'';
postInstall = ''
installManPage ${pname}.1
'';
doInstallCheck = true;
installCheckPhase = ''
runHook preInstallCheck
$out/bin/apksigcopier --version | grep "${version}"
runHook postInstallCheck
'';
meta = with lib; {
description = "Copy/extract/patch android apk signatures & compare APKs";
mainProgram = "apksigcopier";
longDescription = ''
apksigcopier is a tool for copying android APK signatures from a signed
APK to an unsigned one (in order to verify reproducible builds).
It can also be used to compare two APKs with different signatures.
Its command-line tool offers four operations:
* copy signatures directly from a signed to an unsigned APK
* extract signatures from a signed APK to a directory
* patch previously extracted signatures onto an unsigned APK
* compare two APKs with different signatures (requires apksigner)
'';
homepage = "https://github.com/obfusk/apksigcopier";
license = with licenses; [ gpl3Plus ];
maintainers = with maintainers; [ obfusk ];
};
}

585
pkgs/by-name/ap/apksigner/deps.json generated Normal file
View File

@@ -0,0 +1,585 @@
{
"!comment": "This is a nixpkgs Gradle dependency lockfile. For more details, refer to the Gradle section in the nixpkgs manual.",
"!version": 1,
"https://dl.google.com": {
"dl/android/maven2/androidx/annotation#annotation/1.5.0": {
"jar": "sha256-Jh+3wCEIWFALq2bTQ1SXKnUWarQYKt0oN4CwVRPW7Eo=",
"module": "sha256-TIT+7i24kf9rl9YToNQKuWzil7A0ppJ8qEefCegtfC4=",
"pom": "sha256-4pMlmZmt4HAXXEqreA0H1V0BhbtDpRWiT1iQ0CLhzAU="
}
},
"https://repo.maven.apache.org/maven2": {
"com/google/android#annotations/4.1.1.4": {
"jar": "sha256-unNOHoTAnWFa9qCdMwNLTwRC+Hct7BIO+zdthqVlrhU=",
"pom": "sha256-5LtUdTw2onoOXXAVSlA0/t2P6sQoIpUDS/1IPWx6rng="
},
"com/google/api#api-common/2.10.0": {
"jar": "sha256-Dq1YL3+jxBQOhjbPxgMUdsK7LxAHb9P0OakBiDoUXyY=",
"pom": "sha256-epLvsCCqY6cYZuC1wNpRBdJfrh3YMxtPvpV5gstzfJ0="
},
"com/google/api#gapic-generator-java-pom-parent/2.19.0": {
"pom": "sha256-dis49MzAgcHaiOffE49+1XOepbigivOpB0PlatLOrgU="
},
"com/google/api#gax-grpc/2.27.0": {
"jar": "sha256-BJ7WlAxDd2B0aLFemBdckNrCQ/3cHqdrXKsq4SLdYOY=",
"pom": "sha256-ct6RfbdpiCvKGUoJh2AgIwKKYMVO43D2nBu/e/6RL+c="
},
"com/google/api#gax-httpjson/0.112.0": {
"jar": "sha256-GYL4bCXE46YPuHhzIe0ANP9Tra8YG/CTYJ9j7TtD1b8=",
"pom": "sha256-mja5Hi8kl1P7zcshG6z97kzIMjuTe1o3V5Qt0Sn/AwY="
},
"com/google/api#gax-parent/2.27.0": {
"pom": "sha256-36zNIaIPzIoNvn1S/akZh5UbADv3yv7ysTH+vdd/HJo="
},
"com/google/api#gax/2.27.0": {
"jar": "sha256-IFGFWHOE0Er5eWm1a7F69m+l3YieYhvPywYrfofJhQ4=",
"pom": "sha256-5tuvtvcdoq5RF1olhHoD/IZFqMwvuBMTTg2hdwZa4ac="
},
"com/google/api/grpc#grpc-google-common-protos/2.18.0": {
"jar": "sha256-j8v4L9wybri+S66NfSJ2bY1kiXEKrYm0R7KDI0X20xg=",
"pom": "sha256-SyTmH6k63B3hoi23gtzvnGI79qx3ZDIh8VJ70RFNSv4="
},
"com/google/api/grpc#grpc-google-iam-v1/1.13.0": {
"jar": "sha256-1b/fLrb7yp50a18XNkO0tzzI6Ofwfcw0v5BbJiGWkRk=",
"pom": "sha256-ek30qnkYxKAcjuu6lqCN5dBlrSOC0g4s1/wlFUUyzkk="
},
"com/google/api/grpc#proto-google-cloud-kms-v1/0.111.0": {
"jar": "sha256-L3nwQq3sTUjYbWjcjCMUNseJ05qAfaOzxL++nSoIjSs=",
"pom": "sha256-rnCdRQZTQge24UwBzB/N7gvYoi41UtWGxuGUIntqrFY="
},
"com/google/api/grpc#proto-google-common-protos/2.18.0": {
"jar": "sha256-XnfwFi+3Bfz0iLeHnoNppkJCmrz3tZecR35ktUaSklM=",
"pom": "sha256-m7sNr83dtembMtRQgJLH+4BQcs2f3utgKb2EpPKwq98="
},
"com/google/api/grpc#proto-google-iam-v1/1.13.0": {
"jar": "sha256-2HTNg7AF8tncQ5NmAe54D3VMTUxpYhcukKYYJV2poCQ=",
"pom": "sha256-vyLch8u8mx7Q2E2GNmMqAsdP/Jo9Wz+yTA6gW4P9ZaQ="
},
"com/google/auth#google-auth-library-bom/1.16.0": {
"pom": "sha256-JPx2runhD92FvXDMp3OgoXAGh6+BM+plxG8yS8R+Hfw="
},
"com/google/auth#google-auth-library-credentials/1.16.0": {
"jar": "sha256-tYqdGKn2CmYmFW5+VUOQs1jflcpfiuO8iVuGhfV8+HY=",
"pom": "sha256-PyZmDOenD4P3KRBeKjouOvy4R8e7atDGua5o/QXP/rQ="
},
"com/google/auth#google-auth-library-oauth2-http/1.16.0": {
"jar": "sha256-NXcWxdf5UNRXH5J0IWWItZgu2am4vrhWmwNCurcv+w4=",
"pom": "sha256-ubUIswklyQO/3jNpJM71TVRJJL8Pc9LSM8I28YvEdPA="
},
"com/google/auth#google-auth-library-parent/1.16.0": {
"pom": "sha256-PVbYHAAlOoH0bs/SLPCJaHxmX6UPtUEc864tWLmeNeQ="
},
"com/google/auto/value#auto-value-annotations/1.10.1": {
"jar": "sha256-pP4KIRkl6TioUQ10F2PuEXGhG/kx9Yke9NTuhPynK+I=",
"pom": "sha256-n7rMhpTRkE37TVrx5KVGD9ZMHKnQBJ0YFFQs0q0osEc="
},
"com/google/auto/value#auto-value-parent/1.10.1": {
"pom": "sha256-9y2jrhi84YuHRM1yM6qDSjLTvR4LRTsV9tujP3lzz+k="
},
"com/google/cloud#google-cloud-kms/2.20.0": {
"jar": "sha256-pNPghrGcOyoJ+TrdBX6ySxyigjmOEBw/2SbHISvBoLI=",
"pom": "sha256-DAaJz/1vXvxHRJDqDlTSU6m3xPskn0Pqqn04Y9yz2Mc="
},
"com/google/cloud#google-cloud-shared-config/1.5.5": {
"pom": "sha256-mLz9fSHahIoeXpTp4VJG+eHoe1bJ54zxfJsSOG4jrnM="
},
"com/google/code/findbugs#jsr305/3.0.2": {
"jar": "sha256-dmrSoHg/JoeWLIrXTO7MOKKLn3Ki0IXuQ4t4E+ko0Mc=",
"pom": "sha256-GYidvfGyVLJgGl7mRbgUepdGRIgil2hMeYr+XWPXjf4="
},
"com/google/code/gson#gson-parent/2.10.1": {
"pom": "sha256-QkjgiCQmxhUYI4XWCGw+8yYudplXGJ4pMGKAuFSCuDM="
},
"com/google/code/gson#gson/2.10.1": {
"jar": "sha256-QkHBSncnw0/uplB+yAExij1KkPBw5FJWgQefuU7kxZM=",
"pom": "sha256-0rEVY09cCF20ucn/wmWOieIx/b++IkISGhzZXU2Ujdc="
},
"com/google/crypto/tink#tink-android/1.12.0": {
"jar": "sha256-p4a4yhHV+9D77QyT6KTJulr6arhS953M2BMjSl6ZUto=",
"pom": "sha256-qr8HB2wBaJTvmlxFIKP1m4+VhK87URpDZBzNnZudIPg="
},
"com/google/errorprone#error_prone_annotations/2.18.0": {
"jar": "sha256-nmgUy3GBaYik/RsHqZOo8hu3BY1SLBYrHehJ4ZvqVK4=",
"pom": "sha256-kgE1eX3MpZF7WlwBdkKljTQKTNG80S9W+JKlZjvXvdw="
},
"com/google/errorprone#error_prone_annotations/2.22.0": {
"jar": "sha256-gqAnuGVB9Y0fnuAgzfa+voKsx6Jn08U6LqXNYzWTK70=",
"pom": "sha256-tyXFIVFBaOnCDTcZp2qgG1DlpygoWfTqhMJRz5+EIIA="
},
"com/google/errorprone#error_prone_parent/2.18.0": {
"pom": "sha256-R/Iumce/RmOR3vFvg3eYXl07pvW7z2WFNkSAVRPhX60="
},
"com/google/errorprone#error_prone_parent/2.22.0": {
"pom": "sha256-XSUivqg99aWBzNayJ2Nco04NOXt2ct50ispBVwgFc8c="
},
"com/google/guava#failureaccess/1.0.1": {
"jar": "sha256-oXHuTHNN0tqDfksWvp30Zhr6typBra8x64Tf2vk2yiY=",
"pom": "sha256-6WBCznj+y6DaK+lkUilHyHtAopG1/TzWcqQ0kkEDxLk="
},
"com/google/guava#guava-parent/26.0-android": {
"pom": "sha256-+GmKtGypls6InBr8jKTyXrisawNNyJjUWDdCNgAWzAQ="
},
"com/google/guava#guava-parent/31.1-jre": {
"pom": "sha256-RDliZ4O0StJe8F/wdiHdS7eWzE608pZqSkYf6kEw4Pw="
},
"com/google/guava#guava-parent/32.0.1-jre": {
"pom": "sha256-Q+0ONrNT9B5et1zXVmZ8ni35fO8G6xYGaWcVih0DTSo="
},
"com/google/guava#guava/31.1-jre": {
"jar": "sha256-pC7cnKt5Ljn+ObuU8/ymVe0Vf/h6iveOHWulsHxKAKs=",
"pom": "sha256-kZPQe/T2YBCNc1jliyfSG0TjToDWc06Y4hkWN28nDeI="
},
"com/google/guava#guava/32.0.1-jre": {
"jar": "sha256-vX+iJ1kfuFCWd9DREiz5UVjzuKn0VlP1goHYefbcSMU=",
"pom": "sha256-QsJX9/c203ezGv7u6XirJtcwzXCvYN3nZi4YI1LiSCo="
},
"com/google/guava#listenablefuture/9999.0-empty-to-avoid-conflict-with-guava": {
"jar": "sha256-s3KgN9QjCqV/vv/e8w/WEj+cDC24XQrO0AyRuXTzP5k=",
"pom": "sha256-GNSx2yYVPU5VB5zh92ux/gXNuGLvmVSojLzE/zi4Z5s="
},
"com/google/http-client#google-http-client-bom/1.42.3": {
"pom": "sha256-SllPSmi+keMqV7keI9plQGixLtIveYBfvNYiYfULR+w="
},
"com/google/http-client#google-http-client-bom/1.43.1": {
"pom": "sha256-eSc6FEsB1GX+f+tvJLN7Gfbv0mCOXvEviOY1sf3toEg="
},
"com/google/http-client#google-http-client-gson/1.43.1": {
"jar": "sha256-AXQG5RBaMxR6sTuve0kf9T2Z5UpeK2G3zNZR4WQilpg=",
"pom": "sha256-EqhE8wvEQ29kCX2xTYNt7vxshmldPFpetmi76P8OaUE="
},
"com/google/http-client#google-http-client-parent/1.43.1": {
"pom": "sha256-fOZP1l2/NuZ5y+SUhU79JODdC/xXe1umLNCV5q8u6xM="
},
"com/google/http-client#google-http-client/1.43.1": {
"jar": "sha256-g043sK8s/oCyl75NalyP0MyrHQsT6bjXrJIejdLyUew=",
"pom": "sha256-21zBH3o7xj6nYyIPc6n1GO173MhAZ2Mt5VXeWQPtmPI="
},
"com/google/j2objc#j2objc-annotations/1.3": {
"jar": "sha256-Ia8wySJnvWEiwOC00gzMtmQaN+r5VsZUDsRx1YTmSns=",
"pom": "sha256-X6yoJLoRW+5FhzAzff2y/OpGui/XdNQwTtvzD6aj8FU="
},
"com/google/j2objc#j2objc-annotations/2.8": {
"jar": "sha256-8CqV+hpele2z7YWf0Pt99wnRIaNSkO/4t03OKrf01u0=",
"pom": "sha256-N/h3mLGDhRE8kYv6nhJ2/lBzXvj6hJtYAMUZ1U2/Efg="
},
"com/google/protobuf#protobuf-bom/3.21.12": {
"pom": "sha256-O72GqUBXpnHmPVX532EsZBlz1ecNba4qtFYk/xrfUcU="
},
"com/google/protobuf#protobuf-bom/3.25.3": {
"pom": "sha256-tG4/Jv4PRz/zMHfuEkX4jUuNs1zHn1VM0P2Td2akXlg="
},
"com/google/protobuf#protobuf-java-util/3.21.12": {
"jar": "sha256-mz2nSVlbZsrww1ZW+nc2c8YdtopqyzTOHKtbL/xxDF8=",
"pom": "sha256-PRUyjuLPonCuYhxzlMMcW/IKhXZLSYrW9ubHSkv8YVw="
},
"com/google/protobuf#protobuf-java-util/3.25.3": {
"jar": "sha256-uBPI1tVUy3HB6C0XHX+AcwrnQiKhhchjy+3wUHLIgVU=",
"pom": "sha256-mwLH87Tr551RO/JGiw1vgOEe8RQylMsDQHxgaV5qkEs="
},
"com/google/protobuf#protobuf-java/3.21.12": {
"jar": "sha256-Pz7b2pKGJGCA8+r1Yd1rDVorHxAI9pCRFchgnOrp34c=",
"pom": "sha256-CXiOUXdwUnUK3bE39cMbdwDlY6UsncRQlXqGVM/gVrU="
},
"com/google/protobuf#protobuf-java/3.25.3": {
"jar": "sha256-6Q2N25Y7IKlypqWbUJOt4rB8vlRsqzJ5qvQ4MmA4X1g=",
"pom": "sha256-we+sGuAPC7q2VkKOGWtjaYyRTQ3SK+EgcQvv/EgctUc="
},
"com/google/protobuf#protobuf-parent/3.21.12": {
"pom": "sha256-fj44jW/7fyDmb/JfRbk3i0Igt7L9Jh9rO8IGs9/4u8g="
},
"com/google/protobuf#protobuf-parent/3.25.3": {
"pom": "sha256-vCdEYIzqOnotTNC3Thw/iBOMZM5aphudfwr9hGiCvno="
},
"com/google/re2j#re2j/1.6": {
"jar": "sha256-yLXDRy1NtZSoZbLkf4NdB/uLFBXuulWdzPsKaUXwM80=",
"pom": "sha256-DL7CO8gvuQDrXrYsX8LLXiObeKDrdl67CObwX6YVgDo="
},
"commons-codec#commons-codec/1.15": {
"jar": "sha256-s+n21jp5AQm/DQVmEfvtHPaQVYJt7+uYlKcTadJG7WM=",
"pom": "sha256-yG7hmKNaNxVIeGD0Gcv2Qufk2ehxR3eUfb5qTjogq1g="
},
"commons-logging#commons-logging/1.2": {
"jar": "sha256-2t3qHqC+D1aXirMAa4rJKDSv7vvZt+TmMW/KV98PpjY=",
"pom": "sha256-yRq1qlcNhvb9B8wVjsa8LFAIBAKXLukXn+JBAHOfuyA="
},
"io/grpc#grpc-alts/1.54.0": {
"jar": "sha256-QuBz77s7BWtBMTUNw7YVjv2DwPRSkNXkxLjKE1e2dPA=",
"pom": "sha256-Wc0wTLw2SQmfETtEnYlKbtmFANL5T3r6NptcUgH+GcM="
},
"io/grpc#grpc-api/1.54.0": {
"jar": "sha256-NSGfOWFrmjPIxboZbh0ktJ4yHzREhgdT6EBVV1lUqjE=",
"pom": "sha256-iqKb2G5W60UzGTEwbPLlwghGzOs/diXB0JLo+HWcko8="
},
"io/grpc#grpc-auth/1.54.0": {
"jar": "sha256-uYtd/UbKUaJ/iRTEnqAMbC9Lncy+etrgHW2E9upCKwo=",
"pom": "sha256-rX6kJxBLu9zKyS0bfc39FXrGk85JRfE2Ub9qurIQkcE="
},
"io/grpc#grpc-bom/1.54.0": {
"pom": "sha256-wB1RhDKFZItNboB1O9UUDTdW1KnW4SAhTy1gkDlazOw="
},
"io/grpc#grpc-context/1.54.0": {
"jar": "sha256-m06EXYri30e2/Q4u3hFuRQ73kjy9OgkyBAJ4a+GeabE=",
"pom": "sha256-PYaGleq7bre/2dEP2Gs1eadI56H//daiqggiETog+Nc="
},
"io/grpc#grpc-core/1.54.0": {
"jar": "sha256-TXdLP8ITllVypPxK5R3B60vI0j4jKaGKdfA3yD439Sw=",
"pom": "sha256-oqzTg5rJXFBeqDlAkD1iyKJBZI6xugikVEPv+cKQ3I4="
},
"io/grpc#grpc-googleapis/1.54.0": {
"jar": "sha256-1+sx96NQTbxWX2v2IbnDl+RpmlgWFg7ag1VXdFbs+3U=",
"pom": "sha256-HmQDIfQAa3I7ur8CLWKQKmY0jWpdOwbdhQNysLsmES0="
},
"io/grpc#grpc-grpclb/1.54.0": {
"jar": "sha256-1NardVATbDs+tI6Yjz6DhPunQp75MZQ+B+SQ7NX16JU=",
"pom": "sha256-8IjegVQnmpBi85PnyDSsoWgICTmmSikpJ6caLI8HlkE="
},
"io/grpc#grpc-netty-shaded/1.54.0": {
"jar": "sha256-ttwhAzyT4l1E+CFS2PukMmv90xvU4gdfnSLe6AARhzM=",
"pom": "sha256-i+oJeBjOfkKMaKfSGDTrYD+yIBFph9Ts+nErHNRMb2w="
},
"io/grpc#grpc-protobuf-lite/1.54.0": {
"jar": "sha256-P32lYgFAtVuOB6EGWkMN0+Fef09UrRyjIWQoiDNY4wU=",
"pom": "sha256-3rGZlpJjBEb/ideQi1vfP5QYlTbVkveLiaXSeMIMY8c="
},
"io/grpc#grpc-protobuf/1.54.0": {
"jar": "sha256-YHmJNi3MEc3qF9Br45PE5CW+noqDQbIePw2++TMO2ZM=",
"pom": "sha256-XWefgulq6R3X5tBTvMXoixITOYwKr3NQoIEr1+7Y3bI="
},
"io/grpc#grpc-services/1.54.0": {
"jar": "sha256-fju+4YgrWDu88gdLePsz334Jv4Ymx6inpZSs0ppoM8s=",
"pom": "sha256-jcgkDnq8AfsuLraWhuIBFDuIthEW5M3DVzXKkucVwTM="
},
"io/grpc#grpc-stub/1.54.0": {
"jar": "sha256-r0gbqrjAHhEW+9bOWZFQOtgGSONrFIZBkv3ZK3v1J50=",
"pom": "sha256-AqilDzJx3oQos/0QN/dC6yu4ll/PIjHSEUEMWK00JAg="
},
"io/grpc#grpc-xds/1.54.0": {
"jar": "sha256-/mFHagVvHSFermdL52ussBXevRuybPdNnnbaGRlQxGk=",
"pom": "sha256-C+nz32pRbunKczoYxQ38ErVCaNfbYPG9IUpWxbNkL9k="
},
"io/netty#netty-buffer/4.1.100.Final": {
"jar": "sha256-Rih0tE7ngvvv7GQHjNpuuOe/nw4K9xqSjvTB8tVk9+4=",
"pom": "sha256-pKlxXeZ2+R2PiLQOt4c6DWN2mQIIZ5jTqJjKkwMlvTQ="
},
"io/netty#netty-codec-http/4.1.100.Final": {
"jar": "sha256-MmgR0knLDlVV544Cbod4NOeSJhw48GZtgEZEJmldlZA=",
"pom": "sha256-5rfLfsxp5E8SdyWkEk1Qh2M0+JZPx0d/xpSnSSqV/4o="
},
"io/netty#netty-codec-http2/4.1.100.Final": {
"jar": "sha256-I7SnQ1D0z41BuT+5PVK1BQZn2NU//8OFZyyG6rg7h0k=",
"pom": "sha256-4iMo6SZzeIbMW1eEC5GirtaP3oE6H1efmrWRF6KLmbw="
},
"io/netty#netty-codec/4.1.100.Final": {
"jar": "sha256-GAoB7WevOZYC4k/xwyhk5/V/V8Sg+l6as/6bDl6c8FE=",
"pom": "sha256-iRrXaSyRGjVqC573wlW8ZK/FJui/zK5vGMXtKRJJj3U="
},
"io/netty#netty-common/4.1.100.Final": {
"jar": "sha256-0pCDAfGsbykQkAdCRzwV1wF2XT1EZ6zbHuu53zqoKIU=",
"pom": "sha256-7/apmfoHAOALyd4Cj8yyoTEC57RJ87oqI6inaGAGMa8="
},
"io/netty#netty-handler/4.1.100.Final": {
"jar": "sha256-DhDlhMLn/ff0gE4Udg7ZhwA/G2KrmC9i6vE6mJJ5PTo=",
"pom": "sha256-RuVkerE0TF+u/+oM1QmRNGWAjAlGnQX1S3pWPpbZ1T4="
},
"io/netty#netty-parent/4.1.100.Final": {
"pom": "sha256-JXh90dBp/s0Q5HNgpQz2V7w5vtluqn53QAGI7vUFh0E="
},
"io/netty#netty-resolver/4.1.100.Final": {
"jar": "sha256-xCxIHHdunTZ6Rcw6Z6BvZYl9KAM06zCyNiuMVbdSP08=",
"pom": "sha256-Ti52vDcKBWTdt++pzyAydS4yj83QdRcOHB4jE/qO/cY="
},
"io/netty#netty-transport-classes-epoll/4.1.100.Final": {
"jar": "sha256-mrxLF7EhKzNmbq5OgBPQu3iporzQqaYhub0Gp+X8AFA=",
"pom": "sha256-bHkKddDuLakj/JXuMuvwGTqynytmeNms58AFqWdlT4s="
},
"io/netty#netty-transport-native-unix-common/4.1.100.Final": {
"jar": "sha256-XYiCMKBMSj5kfGTpM877ZP1JBW+Wm/tzTIo/zt8L6oo=",
"pom": "sha256-sWyNDgg/ZadLYRjCLtAsk9AbgIT2XB6sCPzm6BbVCxU="
},
"io/netty#netty-transport/4.1.100.Final": {
"jar": "sha256-sd7s7tqzc0zblZxV9L5atKZnqK7VkSH/k3Y/SUcPVHA=",
"pom": "sha256-n+Q/DqN6PO7cz/FXy6YQMx065VyJpfmkj7x11+FVnjw="
},
"io/opencensus#opencensus-api/0.31.1": {
"jar": "sha256-8UdNR/S2sAFVitJ7lS417aXMcUZ4iHf8UpOMbroks4I=",
"pom": "sha256-VW9CfhIJDvs2pgh/dBCr/kXeEBByktlvpj5BdRdOy3Y="
},
"io/opencensus#opencensus-contrib-http-util/0.31.1": {
"jar": "sha256-PqmVtVpAaL4imJtwzCmk14jC0yjR1QYTp6mv0T/dLQo=",
"pom": "sha256-6+IsQiIX1mLHzumUdvC1LIBXftRFeGrCmSUb76pMB1s="
},
"io/opencensus#opencensus-proto/0.2.0": {
"jar": "sha256-DBktRR6d106Ychsn0C8OK2vKRLUVY7Xavy4hH3o+vxM=",
"pom": "sha256-twh5B5IPyKgVNGhrLxorMxEnr5fwFau9s3hqUfP6HlI="
},
"io/perfmark#perfmark-api/0.26.0": {
"jar": "sha256-t9I+k6NFN84zJwgmmg0UBHiKW14ZSegvVTX85Rs+qVs=",
"module": "sha256-MdgyMyR0zkgVD1uuADNDMZE28zav0QdqKJApMZ4+qXo=",
"pom": "sha256-ft7khhbhe2Epfq46gutIOoXlbSVnkpN4qkbzCpUDIto="
},
"javax/annotation#javax.annotation-api/1.3.2": {
"jar": "sha256-4EulGVvNVV3JVlD3zGFNFR5LzVLSmhC4qiGX86uJq5s=",
"pom": "sha256-RqSiUcpAbnjkhT16K66DKChEpJkoUUOe6aHyNxbwa5c="
},
"junit#junit/4.13": {
"jar": "sha256-S4Uy9jvcDgZhUH+UfrMkqVTR26xjGtGciqmgD+7R2GM=",
"pom": "sha256-mg3Ew/orCG5wgiZzfvS7N4R8PLHOTiA1F8CfYwWyJn4="
},
"net/java#jvnet-parent/3": {
"pom": "sha256-MPV4nvo53b+WCVqto/wSYMRWH68vcUaGcXyy3FBJR1o="
},
"org/apache#apache/13": {
"pom": "sha256-/1E9sDYf1BI3vvR4SWi8FarkeNTsCpSW+BEHLMrzhB0="
},
"org/apache#apache/21": {
"pom": "sha256-rxDBCNoBTxfK+se1KytLWjocGCZfoq+XoyXZFDU3s4A="
},
"org/apache#apache/23": {
"pom": "sha256-vBBiTgYj82V3+sVjnKKTbTJA7RUvttjVM6tNJwVDSRw="
},
"org/apache/commons#commons-parent/34": {
"pom": "sha256-Oi5p0G1kHR87KTEm3J4uTqZWO/jDbIfgq2+kKS0Et5w="
},
"org/apache/commons#commons-parent/52": {
"pom": "sha256-ddvo806Y5MP/QtquSi+etMvNO18QR9VEYKzpBtu0UC4="
},
"org/apache/httpcomponents#httpclient/4.5.14": {
"jar": "sha256-yLx+HFGm1M5y9A0uu6vxxLaL/nbnMhBLBDgbSTR46dY=",
"pom": "sha256-8YNVr0z4CopO8E69dCpH6Qp+rwgMclsgldvE/F2977c="
},
"org/apache/httpcomponents#httpcomponents-client/4.5.14": {
"pom": "sha256-W60d5PEBRHZZ+J0ImGjMutZKaMxQPS1lQQtR9pBKoGE="
},
"org/apache/httpcomponents#httpcomponents-core/4.4.16": {
"pom": "sha256-8tdaLC1COtGFOb8hZW1W+IpAkZRKZi/K8VnVrig9t/c="
},
"org/apache/httpcomponents#httpcomponents-parent/11": {
"pom": "sha256-qQH4exFcVQcMfuQ+//Y+IOewLTCvJEOuKSvx9OUy06o="
},
"org/apache/httpcomponents#httpcore/4.4.16": {
"jar": "sha256-bJs90UKgncRo4jrTmq1vdaDyuFElEERp8CblKkdORk8=",
"pom": "sha256-PLrYSbNdrP5s7DGtraLGI8AmwyYRQbDSbux+OZxs1/o="
},
"org/bouncycastle#bcprov-jdk15on/1.68": {
"jar": "sha256-9zKkbI3n4iMvIAfGgqIdH0zIqKAUm2t71qoa/cZaD40=",
"pom": "sha256-2QfezWhfnNlx5xvfbOWXzzqVt8j/ajSCNRv9irwXz+A="
},
"org/checkerframework#checker-qual/3.32.0": {
"jar": "sha256-tm4CXaCmv4Xwt/X9rcqDKjJ3H4WhLKwUAaPAzY/XPM0=",
"module": "sha256-zN7Nqhqu63g5UfanwY3Bk5XC4qXn93RQ1we41i6H3k8=",
"pom": "sha256-eVqIZSpu3vocMP26soASnkGDsaz5lKx0vkPz64qnfc8="
},
"org/checkerframework#checker-qual/3.33.0": {
"jar": "sha256-4xYlW7/Nn+UNFlMUuFq7KzPLKmapPEkdtkjkmKgsLeE=",
"module": "sha256-6FIddWJdQScsdn0mKhU6wWPMUFtmZEou9wX6iUn/tOU=",
"pom": "sha256-9VqSICenj92LPqFaDYv+P+xqXOrDDIaqivpKW5sN9gM="
},
"org/codehaus/mojo#animal-sniffer-annotations/1.23": {
"jar": "sha256-n/5Sa/Q6Y0jp2LM7nNb1gKf17tDPBVkTAH7aJj3pdNA=",
"pom": "sha256-VhDbBrczZBrLx6DEioDEAGnbYnutBD+MfI16+09qPSc="
},
"org/codehaus/mojo#animal-sniffer-parent/1.23": {
"pom": "sha256-a38FSrhqh/jiWZ81gIsJiZIuhrbKsTmIAhzRJkCktAQ="
},
"org/codehaus/mojo#mojo-parent/74": {
"pom": "sha256-FHIyWhbwsb2r7SH6SDk3KWSURhApTOJoGyBZ7cZU8rM="
},
"org/conscrypt#conscrypt-openjdk-uber/2.5.2": {
"jar": "sha256-6vU32Y4DPQ8EUc0bjMdOAte1XsiC2mPIgGDYBrqJw0g=",
"pom": "sha256-tf1UhzL5MlRdd3iQ65lSIr/oZiMjUb6QgTfjnDxnLYs="
},
"org/hamcrest#hamcrest-core/1.3": {
"jar": "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=",
"pom": "sha256-/eOGp5BRc6GxA95quCBydYS1DQ4yKC4nl3h8IKZP+pM="
},
"org/hamcrest#hamcrest-parent/1.3": {
"pom": "sha256-bVNflO+2Y722gsnyelAzU5RogAlkK6epZ3UEvBvkEps="
},
"org/jetbrains#annotations/13.0": {
"jar": "sha256-rOKhDcji1f00kl7KwD5JiLLA+FFlDJS4zvSbob0RFHg=",
"pom": "sha256-llrrK+3/NpgZvd4b96CzuJuCR91pyIuGN112Fju4w5c="
},
"org/jetbrains/kotlin#kotlin-stdlib-common/1.7.10": {
"jar": "sha256-GfEC7+lin46rxjhTrRXFM+R8R/kfygkoXFvehuWfkdQ=",
"pom": "sha256-EBHGO4julM3/XVlpNzB1WbxVA3tzPMAM5jzaPPrgqOs="
},
"org/jetbrains/kotlin#kotlin-stdlib/1.7.10": {
"jar": "sha256-53H+dCUKlD6PY0ZxMgH/HYy5XDpdGpGiK2Wp4E9qiQE=",
"pom": "sha256-bMDPWivALe4GDruQw1Nfw929ejurIQrOPhQqr4F2TYE="
},
"org/junit#junit-bom/5.10.0": {
"module": "sha256-6z7mEnYIAQaUqJgFbnQH0RcpYAOrpfXbgB30MLmIf88=",
"pom": "sha256-4AbdiJT5/Ht1/DK7Ev5e2L5lZn1bRU+Z4uC4xbuNMLM="
},
"org/junit#junit-bom/5.9.2": {
"module": "sha256-qxN7pajjLJsGa/kSahx23VYUtyS6XAsCVJdyten0zx8=",
"pom": "sha256-LtB9ZYRRMfUzaoZHbJpAVrWdC1i5gVqzZ5uw82819wU="
},
"org/reactivestreams#reactive-streams/1.0.4": {
"jar": "sha256-91yll3ibPaxY9hhXuawuEDSmj6Zy2zUFWo+0UJ4yXyg=",
"pom": "sha256-VLoj2HotQ4VAyZ74eUoIVvxXOiVrSYZ4KDw8Z+8Yrag="
},
"org/slf4j#slf4j-api/1.7.30": {
"jar": "sha256-zboHlk0btAoHYUhcax6ML4/Z6x0ZxTkorA1/lRAQXFc=",
"pom": "sha256-fgdHdR6bZ+Gdy1IG8E6iLMA9JQxCJCZALq3QNRPywxQ="
},
"org/slf4j#slf4j-parent/1.7.30": {
"pom": "sha256-EWR5VuSKDFv7OsM/bafoPzQQAraFfv0zWlBbaHvjS3U="
},
"org/sonatype/oss#oss-parent/7": {
"pom": "sha256-tR+IZ8kranIkmVV/w6H96ne9+e9XRyL+kM5DailVlFQ="
},
"org/sonatype/oss#oss-parent/9": {
"pom": "sha256-+0AmX5glSCEv+C42LllzKyGH7G8NgBgohcFO8fmCgno="
},
"org/threeten#threetenbp/1.6.8": {
"jar": "sha256-5LHrPZDDilTH8zhP2pV+C1vwtBtAZypErosDy2yHzgY=",
"pom": "sha256-ztMznYANG7wB7mct+A5NqHUgrgKXuarI+MS33aI+SwI="
},
"software/amazon/awssdk#annotations/2.23.18": {
"pom": "sha256-u/NoQopTahMxql1Uvl5/dMme+HetPvY/5YRzf4DTpMU="
},
"software/amazon/awssdk#annotations/2.24.7": {
"jar": "sha256-S8kcmqIxIc1ZKHM3eo3KkOG5G5gaTSA+yIxYXJJtrCo=",
"pom": "sha256-MNwRu7T2as2U4FEa7tvDIoOuKlGzckjz3M6L0MNc1Vo="
},
"software/amazon/awssdk#apache-client/2.23.18": {
"jar": "sha256-bwCXzDSM6l4mgs964DnXNIxJaLzjyz5IRh0rCFTBuWA=",
"pom": "sha256-Sryz9iZpMOKTHR7oYgwXtEd14ALx06MOVK5rJrWAfWg="
},
"software/amazon/awssdk#auth/2.23.18": {
"jar": "sha256-M8GVspwMVYVYXst52xpvTgV2oEr9iv7A9uP5UDIQKjk=",
"pom": "sha256-5xBdSEiC3SfSt4OlyDiZaXSDqxvGmpt1aJh3wVy/8S8="
},
"software/amazon/awssdk#aws-core/2.23.18": {
"jar": "sha256-d5rCzOz3dSqGSqai1nTJplvIwXVNcm8hawUwXlwQHdw=",
"pom": "sha256-Nq6BlAcW/P8sKQ522m06sYt/4qvNy37mI0//QJa6apI="
},
"software/amazon/awssdk#aws-json-protocol/2.23.18": {
"jar": "sha256-fm4kjYFOEamqNkIdNyb3ocgmIfiKplFGzKLPj0qvVHg=",
"pom": "sha256-3zpiZb1Cca7+HoOaU/NaxTU2FQXAELhZTb903D/ThIQ="
},
"software/amazon/awssdk#aws-sdk-java-pom/2.23.18": {
"pom": "sha256-DdAF90kz/ezIfyWOAHi15vE3HEnDCSu99BBzegOs92E="
},
"software/amazon/awssdk#aws-sdk-java-pom/2.24.7": {
"pom": "sha256-pVxLnOskbbcG57vMlkFp9eOeNCmYmJCz7ZSer7WAqJg="
},
"software/amazon/awssdk#bom-internal/2.23.18": {
"pom": "sha256-EzVaaj68bODzg3vEWjIAH479BKI81AvpMDUFxxRpSDo="
},
"software/amazon/awssdk#bom-internal/2.24.7": {
"pom": "sha256-UvuCrqRzdmMYh/1two+aINZyzj7/you1rwOV9FXo2yI="
},
"software/amazon/awssdk#checksums-spi/2.23.18": {
"jar": "sha256-oxjGgwaqdDS4fZXniNlVi9HpsTv1BkYl9kCUrDmnJ5k=",
"pom": "sha256-iW8Gv9gFverLy9IcN2rXPFh3ifpDdt/pMYG2ovkrvo4="
},
"software/amazon/awssdk#checksums/2.23.18": {
"jar": "sha256-+kXnR8Mmw1n79nvEWpbREvnQQxprRtpxv3n7+fIfcxQ=",
"pom": "sha256-WK7sn8HcpnD+m/9nhkeMmb9sLfa7URxMssYVXEd8zKo="
},
"software/amazon/awssdk#core/2.23.18": {
"pom": "sha256-whHR/zyCuvajWz0YKmBaGAP4x6nI9BIpyQyjPUc3SzU="
},
"software/amazon/awssdk#core/2.24.7": {
"pom": "sha256-ZMbleXgYUo4ziEm41KmM5GnLpTtpMAJaUWluhdUihM0="
},
"software/amazon/awssdk#endpoints-spi/2.23.18": {
"jar": "sha256-OVfxld7QPPaUT1mpxJTeZmmB/te1ZmWU+ZBQqzO/s6I=",
"pom": "sha256-rGgFmHffZn1aMj825X+O6Dgli9hf7EAlgYbhdwx41DY="
},
"software/amazon/awssdk#http-auth-aws/2.23.18": {
"jar": "sha256-AiTCBorI2wsGy/v81fxRhJt4Wf0rgdN+BuKEwEjb9z0=",
"pom": "sha256-SZ3tLK1vEUB21usf0BlzpX+Xozz/jRiTB90yD97zDtk="
},
"software/amazon/awssdk#http-auth-spi/2.23.18": {
"jar": "sha256-9QgH9ykETUTdIKmmRsEPf315BqMRaJs7O4I+irl9T08=",
"pom": "sha256-JQhtFkAGGOZNI2v++xTkuDk0Agu/h7AOfYhyq5q7osA="
},
"software/amazon/awssdk#http-auth/2.23.18": {
"jar": "sha256-2EW616cSQdPU2M+T5ZWD/mLFn4oE+30kaNLNvCBeiEU=",
"pom": "sha256-7TEY+UtwlSyvNrROBP5LgsgZV92fMzAHlU11bFsISeY="
},
"software/amazon/awssdk#http-client-spi/2.23.18": {
"pom": "sha256-1TEyPV+1aJGyk4QuGcLyl+0bq9GdK8jjc4TYd2BDYhg="
},
"software/amazon/awssdk#http-client-spi/2.24.7": {
"jar": "sha256-CzaksEhfg5sPpIDVgL4mg+0fHyYdIwVDH+8WPuyqKaA=",
"pom": "sha256-fi5vVpujx2UZvZkoMVu0YIaqL7sfTkkox9R9HdUgDYg="
},
"software/amazon/awssdk#http-clients/2.23.18": {
"pom": "sha256-oUaoCeI7DcOEz19MbrlBF+KljXB2OhN07fUHKRxW2ZM="
},
"software/amazon/awssdk#http-clients/2.24.7": {
"pom": "sha256-4VlySxMbsOD1H+uAx6soz7WLj546GSgRBBgewnm2XVI="
},
"software/amazon/awssdk#identity-spi/2.23.18": {
"jar": "sha256-PoZDhNJz9EbpoNIhq3Jqkna1cUMEW0l7D0/pxi7qUc4=",
"pom": "sha256-r1rmx6GeTNQvGU4xumS5xiUPGTY9VzSCTvU15+2zKsQ="
},
"software/amazon/awssdk#json-utils/2.23.18": {
"jar": "sha256-+dslPsJnAc6pNxjie1wEPvdvBrqdDdE0U8sgJdG41Y4=",
"pom": "sha256-NN7X19+3TF9NfDB5RH2ocpyGp3iXis2XJEsXF9Ek2Js="
},
"software/amazon/awssdk#kms/2.23.18": {
"jar": "sha256-CGGjL6rC8iOhchxcXpT7eWo+PtRl+7CRUH2AJfmgVMo=",
"pom": "sha256-6viSKV9amkbB30ERWxRaALK8ZC2+ltCrvxYd+sWqh04="
},
"software/amazon/awssdk#metrics-spi/2.23.18": {
"pom": "sha256-KB0RG8RCazAERl/cnMHLQJi2lQ++fkh8XLV0hMGpyUw="
},
"software/amazon/awssdk#metrics-spi/2.24.7": {
"jar": "sha256-GrYI8X2pwQpTtAtkmvGryTcrOaeCAF+NIr4z1GAf/yM=",
"pom": "sha256-1IrYkDfvgMLQs9I/35sra/mFctZmtlQC3R/tLP7lsN4="
},
"software/amazon/awssdk#netty-nio-client/2.23.18": {
"jar": "sha256-r6+aUWrbxgE8DgskuGHDOuVuTX61LIj8aH6FFRKYk3Y=",
"pom": "sha256-a5+91SZtknAOAjzfcSxXS76r8Cidzn+npSFISd3LUIY="
},
"software/amazon/awssdk#profiles/2.23.18": {
"jar": "sha256-1x1EHZXQtrfvONfkFhzSxqMh8EWtSln7ydeH0lE1oaw=",
"pom": "sha256-gDr0geArwi5S818OLS5fMquSQuqNgZWJRHcXXy9+LRc="
},
"software/amazon/awssdk#protocol-core/2.23.18": {
"jar": "sha256-YRxqBiVDHXID1ge5A/wRXUQFPO3x7dRBy7xI+8tjF2E=",
"pom": "sha256-lcjiTtXLew0sWD3t31PXLYVpUWLDhi5Qp0ugKR91Sao="
},
"software/amazon/awssdk#protocols/2.23.18": {
"pom": "sha256-wmTssyedVEqWIg1rxnXgARiIMs5WmGdF54wRtMvgSbQ="
},
"software/amazon/awssdk#regions/2.23.18": {
"jar": "sha256-uGMn/39yXEmYI+SgQuIgX0TMIuCq3C7+hnyHrrCtXaY=",
"pom": "sha256-l16KuXCbR9v13/bIOTM3m5v7qr+ieMrn5MDuEAsa/os="
},
"software/amazon/awssdk#sdk-core/2.23.18": {
"jar": "sha256-5ZY7kCNgNwVBOpvtfog3UfUOACRqVKhoAjj4Xgd07hk=",
"pom": "sha256-1vPsBkbZdi4Pgkk9/eTvbB2ACe02mKp1/sobuXR3zAQ="
},
"software/amazon/awssdk#services/2.23.18": {
"pom": "sha256-qbegC61+DnRYnxo28oC4lmKco9rkzB3mLenDCZhQrAQ="
},
"software/amazon/awssdk#third-party-jackson-core/2.23.18": {
"jar": "sha256-4zLJO048lhRWhMVIpzDohFJlCXKiaT20ozrTLvP0xP0=",
"pom": "sha256-BXOfqKWU/kz3Nq22QKZa8GRBkMlQpMRkAiYELqTB5Ho="
},
"software/amazon/awssdk#third-party/2.23.18": {
"pom": "sha256-OM/sIB6RuoAiypK1qepIaptnSY8Z6MtXLcDavlCHpIQ="
},
"software/amazon/awssdk#url-connection-client/2.24.7": {
"jar": "sha256-1zbDWhwNA+d4w4LR04pFSml3Mf4SbH/P2PaWLYFo7Co=",
"pom": "sha256-5SMf1UBLK7EGkGRhX2bSiR2zXxbL1sIZaQgNVCKvPeY="
},
"software/amazon/awssdk#utils/2.23.18": {
"pom": "sha256-57JdScZbeYdG/9psUCriiqC0smxcKT2/G0fy6lF8bsI="
},
"software/amazon/awssdk#utils/2.24.7": {
"jar": "sha256-Mx09/XCVBuON4XdYr++IzBkfvkEuCC5Z83OzlDZMO+0=",
"pom": "sha256-iqyHgJjhBSQRB/2H7zmNOl6wWpOMsdLhuyBR2DtCuuM="
},
"software/amazon/eventstream#eventstream/1.0.1": {
"jar": "sha256-DDfY5pYRfwLDAhkbgRCw0Osg+kEvzjTDomnsc8Fs6CI=",
"pom": "sha256-+UYMt5Sgp69oJ377V2lWno5mUVJQJ2w35ip+i9SyV8w="
}
}
}

View File

@@ -0,0 +1,74 @@
{
lib,
stdenv,
fetchgit,
jdk_headless,
gradle_8,
makeWrapper,
bashNonInteractive,
}:
let
# "Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0."
gradle = gradle_8;
in
stdenv.mkDerivation rec {
pname = "apksigner";
# Major version is derived from the API version of the corresponding Android release.
# Patch version is derived from the release number.
# For example, Android 15 had releases starting at r24 -> r30 is patch 6.
version = "35.0.6";
src = fetchgit {
# use pname here because the final jar uses this as the filename
name = pname;
url = "https://android.googlesource.com/platform/tools/apksig";
rev = "refs/tags/android-15.0.0_r30";
hash = "sha256-f/PggxvBv8nYUyL9Ukd4YVpunpRWbLL5UYsYhsiDWRE=";
};
mitmCache = gradle.fetchDeps {
inherit pname;
data = ./deps.json;
};
__darwinAllowLocalNetworking = true;
doCheck = true;
nativeBuildInputs = [
gradle
makeWrapper
];
buildInputs = [
# required for startup script generated by Gradle
bashNonInteractive
];
installPhase = ''
runHook preInstall
mkdir -p $out/opt
tar xf build/distributions/apksigner.tar
mv apksigner $out/opt
mkdir -p $out/bin
makeWrapper $out/opt/apksigner/bin/apksigner $out/bin/apksigner \
--set JAVA_HOME ${jdk_headless.home}
runHook postInstall
'';
meta = {
description = "Command line tool to sign and verify Android APKs";
mainProgram = "apksigner";
homepage = "https://developer.android.com/tools/apksigner";
downloadPage = "https://android.googlesource.com/platform/tools/apksig/";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
linsui
fliegendewurst
];
teams = [ lib.teams.android ];
platforms = lib.platforms.unix;
};
}

View File

@@ -0,0 +1,46 @@
{
lib,
stdenv,
fetchurl,
makeWrapper,
jdk_headless,
aapt,
}:
stdenv.mkDerivation rec {
pname = "apktool";
version = "2.12.1";
src = fetchurl {
urls = [
"https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_${version}.jar"
"https://github.com/iBotPeaches/Apktool/releases/download/v${version}/apktool_${version}.jar"
];
hash = "sha256-Zs9FJKSkWn9WVn0Issm27CN7zdeM7mn9SlnIoCQ66vo=";
};
dontUnpack = true;
nativeBuildInputs = [ makeWrapper ];
sourceRoot = ".";
installPhase = ''
install -D ${src} "$out/libexec/apktool/apktool.jar"
mkdir -p "$out/bin"
makeWrapper "${jdk_headless}/bin/java" "$out/bin/apktool" \
--add-flags "-jar $out/libexec/apktool/apktool.jar" \
--prefix PATH : ${lib.getBin aapt}
'';
meta = {
description = "Tool for reverse engineering Android apk files";
mainProgram = "apktool";
homepage = "https://ibotpeaches.github.io/Apktool/";
changelog = "https://github.com/iBotPeaches/Apktool/releases/tag/v${version}";
sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ offline ];
platforms = with lib.platforms; unix;
};
}

View File

@@ -0,0 +1,33 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
}:
stdenvNoCC.mkDerivation {
pname = "apl386";
version = "0-unstable-2025-03-11";
src = fetchFromGitHub {
owner = "abrudz";
repo = "APL386";
rev = "c5bca014b6610ee170985c3ce32a8bb14dbd7b94";
hash = "sha256-5aiydx8TyJG0H0F261Xg5fGWBbAIZCtVHgWs7B6+83w=";
};
installPhase = ''
runHook preInstall
install -Dm444 -t $out/share/fonts/truetype *.ttf
runHook postInstall
'';
meta = {
homepage = "https://abrudz.github.io/APL386/";
description = "APL385 Unicode font evolved";
license = lib.licenses.unlicense;
maintainers = with lib.maintainers; [ sigmanificient ];
platforms = lib.platforms.all;
};
}

View File

@@ -0,0 +1,42 @@
{
lib,
stdenv,
fetchzip,
libpng,
}:
stdenv.mkDerivation rec {
pname = "apng2gif";
version = "1.8";
src = fetchzip {
url = "mirror://sourceforge/apng2gif/apng2gif-${version}-src.zip";
stripRoot = false;
hash = "sha256-qX8gmE0Lu2p15kL0y6cmX/bI0uk5Ehfi8ygt07BbgmU=";
};
# Remove bundled libs
postPatch = ''
rm -r libpng zlib
'';
buildInputs = [
libpng
];
makeFlags = [ "CC=${stdenv.cc.targetPrefix}c++" ];
installPhase = ''
runHook preInstall
install -Dm755 apng2gif $out/bin/apng2gif
runHook postInstall
'';
meta = with lib; {
homepage = "https://apng2gif.sourceforge.net/";
description = "Simple program that converts APNG files to animated GIF format";
license = licenses.zlib;
maintainers = with maintainers; [ fgaz ];
platforms = platforms.all;
};
}

View File

@@ -0,0 +1,54 @@
{
lib,
stdenv,
fetchzip,
libpng,
zlib,
zopfli,
}:
stdenv.mkDerivation rec {
pname = "apngopt";
version = "1.4";
src = fetchzip {
url = "mirror://sourceforge/apng/apngopt-${version}-src.zip";
stripRoot = false;
hash = "sha256-MAqth5Yt7+SabY6iEgSFcaBmuHvA0ZkNdXSgvhKao1Y=";
};
patches = [
./remove-7z.patch
];
# Remove bundled libs
postPatch = ''
rm -r 7z libpng zlib zopfli
'';
buildInputs = [
libpng
zlib
zopfli
];
preBuild = ''
buildFlagsArray+=("LIBS=-lzopfli -lstdc++ -lpng -lz")
'';
makeFlags = [ "CC=${stdenv.cc.targetPrefix}c++" ];
installPhase = ''
runHook preInstall
install -Dm755 apngopt $out/bin/apngopt
runHook postInstall
'';
meta = with lib; {
homepage = "https://sourceforge.net/projects/apng/";
description = "Optimizes APNG animations";
license = licenses.zlib;
maintainers = with maintainers; [ fgaz ];
platforms = platforms.all;
};
}

View File

@@ -0,0 +1,40 @@
Index: b/apngopt.cpp
===================================================================
--- a/apngopt.cpp
+++ b/apngopt.cpp
@@ -33,7 +33,6 @@
#include <vector>
#include "png.h" /* original (unpatched) libpng is ok */
#include "zlib.h"
-#include "7z.h"
extern "C" {
#include "zopfli.h"
}
@@ -958,8 +957,6 @@ void deflate_rect_fin(int deflate_method
if (deflate_method == 1)
{
unsigned size = zbuf_size;
- compress_rfc1950_7z(rows, op[n].h*(rowbytes + 1), zbuf, size, iter<100 ? iter : 100, 255);
- *zsize = size;
}
else
{
@@ -1438,8 +1435,7 @@ int main(int argc, char** argv)
if (argc <= 1)
{
printf("\n\nUsage: apngopt [options] anim.png [anim_opt.png]\n\n"
- "-z0 : zlib compression\n"
- "-z1 : 7zip compression (default)\n"
+ "-z0 : zlib compression (default)\n"
"-z2 : zopfli compression\n"
"-i## : number of iterations, default -i%d\n", iter);
return 1;
@@ -1459,7 +1455,7 @@ int main(int argc, char** argv)
if (szOpt[2] == '0')
deflate_method = 0;
if (szOpt[2] == '1')
- deflate_method = 1;
+ deflate_method = 0;
if (szOpt[2] == '2')
deflate_method = 2;
}

View File

@@ -0,0 +1,38 @@
{
stdenvNoCC,
lib,
fetchFromGitHub,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "aporetic-bin";
version = "1.2.0";
src = fetchFromGitHub {
owner = "protesilaos";
repo = "aporetic";
tag = finalAttrs.version;
hash = "sha256-1BbuC/mWEcXJxzDppvsukhNtdOLz0QosD6QqI/93Khc=";
};
installPhase = ''
runHook preInstall
mkdir -p $out/share/fonts/truetype
cp -r $src/{aporetic-sans-mono,aporetic-sans,aporetic-serif-mono,aporetic-serif} $out/share/fonts/truetype
runHook postInstall
'';
meta = {
homepage = "https://github.com/protesilaos/aporetic";
description = ''
Custom build of Iosevka with different style and metrics than the default. This is the successor to my "Iosevka Comfy" fonts.
'';
license = lib.licenses.ofl;
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [
DamienCassou
];
};
})

View File

@@ -0,0 +1,66 @@
{
lib,
iosevka,
fetchFromGitHub,
buildNpmPackage,
symlinkJoin,
}:
let
sets = [
"sans-mono"
"sans"
"serif-mono"
"serif"
];
pname = "aporetic";
version = "1.2.0";
src = fetchFromGitHub {
owner = "protesilaos";
repo = "aporetic";
tag = version;
hash = "sha256-1BbuC/mWEcXJxzDppvsukhNtdOLz0QosD6QqI/93Khc=";
};
privateBuildPlan = src.outPath + "/private-build-plans.toml";
makeIosevkaFont =
set:
let
superBuildNpmPackage = buildNpmPackage;
in
(iosevka.override {
inherit set privateBuildPlan;
buildNpmPackage =
args:
superBuildNpmPackage (
args
// {
pname = "aporetic-${set}";
inherit version;
src = fetchFromGitHub {
owner = "be5invis";
repo = "iosevka";
tag = "v33.2.2";
hash = "sha256-dhMTcceHru/uLHRY4eWzFV+73ckCBBnDlizP3iY5w5w=";
};
npmDepsHash = "sha256-5DcMV9N16pyQxRaK6RCoeghZqAvM5EY1jftceT/bP+o=";
}
);
});
in
symlinkJoin {
inherit pname version;
paths = (map makeIosevkaFont sets);
meta = {
inherit (src.meta) homepage;
description = ''
Custom build of Iosevka with different style and metrics than the default, successor to my "Iosevka Comfy" fonts
'';
license = lib.licenses.ofl;
platforms = iosevka.meta.platforms;
maintainers = [ lib.maintainers.DamienCassou ];
};
}

View File

@@ -0,0 +1,118 @@
{
lib,
fetchFromGitLab,
gtksourceview5,
libspelling,
fetchFromGitHub,
python312Packages,
nodePackages,
meson,
ninja,
pkg-config,
wrapGAppsHook4,
desktop-file-utils,
gobject-introspection,
libadwaita,
webkitgtk_6_0,
texliveMedium,
shared-mime-info,
nix-update-script,
}:
let
version = "3.2";
src = fetchFromGitLab {
owner = "World";
repo = "apostrophe";
domain = "gitlab.gnome.org";
rev = "refs/tags/v${version}";
hash = "sha256-NPpBu6Wmd8z99vzVQ394CyHRV2RQBtkbuqcaFqKqlkQ=";
};
reveal-js = fetchFromGitHub {
owner = "hakimel";
repo = "reveal.js";
# keep in sync with upstream shipped version
# in build-aux/flatpak/org.gnome.gitlab.somas.Apostrophe.json
rev = "refs/tags/5.1.0";
hash = "sha256-L6KVBw20K67lHT07Ws+ZC2DwdURahqyuyjAaK0kTgN0=";
};
in
# Requires telnetlib, and possibly others
# Try to remove in subsequent updates
python312Packages.buildPythonApplication {
inherit version src;
pname = "apostrophe";
pyproject = false;
postPatch = ''
substituteInPlace build-aux/meson_post_install.py \
--replace-fail 'gtk-update-icon-cache' 'gtk4-update-icon-cache'
patchShebangs --build build-aux/meson_post_install.py
''
# Use mathjax from nixpkgs to avoid loading from CDN
+ ''
substituteInPlace apostrophe/preview_converter.py \
--replace-fail "--mathjax" "--mathjax=file://${nodePackages.mathjax}/lib/node_modules/mathjax/es5/tex-chtml-full.js"
'';
# Should be done in postInstall, but meson checks this eagerly before build
preConfigure = ''
install -d $out/share/apostrophe/libs
cp -r ${reveal-js} $out/share/apostrophe/libs/reveal.js
'';
nativeBuildInputs = [
meson
ninja
pkg-config
wrapGAppsHook4
desktop-file-utils
gobject-introspection
];
buildInputs = [
libadwaita
gtksourceview5
libspelling
webkitgtk_6_0
];
dependencies = with python312Packages; [
pygobject3
pypandoc
chardet
levenshtein
];
dontWrapGApps = true;
preFixup = ''
makeWrapperArgs+=(
''${gappsWrapperArgs[@]}
--prefix PATH : "${texliveMedium}/bin"
--prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
)
'';
passthru = {
inherit reveal-js;
updateScript = nix-update-script { };
};
meta = {
homepage = "https://gitlab.gnome.org/World/apostrophe";
description = "Distraction free Markdown editor for GNU/Linux";
license = lib.licenses.gpl3Plus;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [
sternenseemann
];
teams = [ lib.teams.gnome-circle ];
mainProgram = "apostrophe";
};
}

View File

@@ -0,0 +1,109 @@
{
lib,
stdenv,
fetchFromGitea,
meson,
libGLU,
ninja,
python3,
cmake,
pkg-config,
xxd,
libopus,
libogg,
zlib,
SDL2,
SDL2_mixer,
libopenmpt,
libXrandr,
libXext,
libXfixes,
libXcursor,
libXi,
libXScrnSaver,
makeDesktopItem,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "apotris";
version = "4.1.0";
src = fetchFromGitea {
domain = "gitea.com";
owner = "akouzoukos";
repo = "apotris";
rev = "v${finalAttrs.version}";
hash = "sha256-jP0fmfAAjWkgI5I3OTLS5+7+xLvcGhV8yP80qDWDjC8=";
fetchSubmodules = true;
};
postPatch = ''
patchShebangs tools/bin2s.py
'';
nativeBuildInputs = [
meson
ninja
python3
cmake
pkg-config
xxd
];
buildInputs = [
libGLU
libopus
libogg
zlib
SDL2_mixer
libopenmpt
SDL2
libXrandr
libXext
libXfixes
libXcursor
libXi
libXScrnSaver
];
strictDeps = true;
dontUseCmakeConfigure = true;
desktopItem = makeDesktopItem {
name = "Apotris";
exec = "Apotris";
comment = "A block stacking game";
desktopName = "Apotris";
categories = [
"Game"
];
};
meta = {
description = "Block stacking game";
longDescription = ''
Apotris is a multiplatform open-source block stacking game! What sets
Apotris apart from other block stacking games is its extensive
customization options, complemented by ultra-responsive controls that let
you execute your moves with precision. With 14 unique game modes and a
plethora of settings, you can tailor the game to your preferences,
ensuring a fresh and challenging experience every time you play. Whether
you're a casual player or a hardcore enthusiast, Apotris has something for
everyone. You can even battle your friends using the Gameboy Advance Link
Cable or Wireless Adapters in 2-Player Battle! While Apotris was
originally designed for Gameboy Advance, it now supports all kinds of
platforms, so between the ports and emulation you can play Apotris on
almost anything.
'';
homepage = "https://akouzoukos.com/apotris/";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [
oluceps
bizmyth
];
mainProgram = "Apotris";
inherit (SDL2.meta) platforms;
broken = stdenv.hostPlatform.isDarwin;
};
})

View File

@@ -0,0 +1,62 @@
{
lib,
stdenvNoCC,
dash,
scdoc,
fetchFromGitHub,
nix-update-script,
installShellFiles,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "app2unit";
version = "1.1.2";
src = fetchFromGitHub {
owner = "Vladimir-csp";
repo = "app2unit";
tag = "v${finalAttrs.version}";
sha256 = "sha256-M2sitlrQNSLthSaDH+R8gUcZ8i+o1ktf2SB/vvjyJEI=";
};
passthru.updateScript = nix-update-script { };
nativeBuildInputs = [
scdoc
installShellFiles
];
buildPhase = ''
scdoc < app2unit.1.scd > app2unit.1
'';
installPhase = ''
install -Dt $out/bin app2unit
installManPage app2unit.1
for link in \
app2unit-open \
app2unit-open-scope \
app2unit-open-service \
app2unit-term \
app2unit-term-scope \
app2unit-term-service
do
ln -s $out/bin/app2unit $out/bin/$link
done
'';
dontPatchShebangs = true;
postFixup = ''
substituteInPlace $out/bin/app2unit \
--replace-fail '#!/bin/sh' '#!${lib.getExe dash}'
'';
meta = {
description = "Launches Desktop Entries as Systemd user units";
homepage = "https://github.com/Vladimir-csp/app2unit";
license = lib.licenses.gpl3;
mainProgram = "app2unit";
maintainers = with lib.maintainers; [ fazzi ];
platforms = lib.platforms.linux;
};
})

View File

@@ -0,0 +1,45 @@
{
lib,
fetchurl,
stdenv,
undmg,
}:
let
snapshot = "20250820092243";
in
stdenv.mkDerivation {
pname = "apparency";
version = "2.3";
src = fetchurl {
# Use externally archived download URL because
# upstream does not provide stable URLs for versioned releases
url = "https://web.archive.org/web/${snapshot}/https://www.mothersruin.com/software/downloads/Apparency.dmg";
hash = "sha256-QaP7Ll5ZK0QVHPFzDPmV8rd0XmY3Ie0VPBDXJEDMECU=";
};
nativeBuildInputs = [ undmg ];
sourceRoot = "Apparency.app";
installPhase = ''
runHook preInstall
mkdir -p $out/Applications/Apparency.app $out/bin
cp -R . $out/Applications/Apparency.app
ln -s ../Applications/Apparency.app/Contents/MacOS/appy $out/bin
runHook postInstall
'';
meta = {
description = "Toolkit for analysing macOS applications";
homepage = "https://www.mothersruin.com/software/Apparency/";
license = lib.licenses.unfreeRedistributable;
maintainers = with lib.maintainers; [ andre4ik3 ];
mainProgram = "appy";
platforms = lib.platforms.darwin;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
}

View File

@@ -0,0 +1,26 @@
{
lib,
stdenv,
fetchurl,
}:
stdenv.mkDerivation rec {
pname = "apparix";
version = "11-062";
src = fetchurl {
url = "https://micans.org/apparix/src/apparix-${version}.tar.gz";
sha256 = "211bb5f67b32ba7c3e044a13e4e79eb998ca017538e9f4b06bc92d5953615235";
};
doCheck = true;
meta = with lib; {
homepage = "http://micans.org/apparix";
description = "Add directory bookmarks, distant listing, and distant editing to the command line";
maintainers = [ ];
license = licenses.gpl2Plus;
platforms = platforms.all;
mainProgram = "apparix";
};
}

View File

@@ -0,0 +1,53 @@
{
lib,
stdenv,
pkg-config,
which,
buildPackages,
# apparmor deps
libapparmor,
# testing
perl,
}:
stdenv.mkDerivation {
pname = "apparmor-bin-utils";
inherit (libapparmor)
version
src
;
sourceRoot = "${libapparmor.src.name}/binutils";
nativeBuildInputs = [
pkg-config
libapparmor
which
];
buildInputs = [
libapparmor
];
makeFlags = [
"LANGS="
"USE_SYSTEM=1"
"POD2MAN=${lib.getExe' buildPackages.perl "pod2man"}"
"POD2HTML=${lib.getExe' buildPackages.perl "pod2html"}"
"MANDIR=share/man"
];
doCheck = true;
checkInputs = [ perl ];
installFlags = [
"DESTDIR=$(out)"
"BINDIR=$(out)/bin"
"SBINDIR=$(out)/bin"
];
meta = libapparmor.meta // {
description = "Mandatory access control system - binary user-land utilities";
};
}

View File

@@ -0,0 +1,40 @@
{
stdenv,
pkg-config,
which,
pam,
# apparmor deps
libapparmor,
}:
stdenv.mkDerivation {
pname = "apparmor-pam";
inherit (libapparmor)
version
src
;
postPatch = ''
substituteInPlace Makefile \
--replace-fail "pkg-config" "$PKG_CONFIG"
'';
nativeBuildInputs = [
pkg-config
which
];
buildInputs = [
libapparmor
pam
];
sourceRoot = "${libapparmor.src.name}/changehat/pam_apparmor";
makeFlags = [ "USE_SYSTEM=1" ];
installFlags = [ "DESTDIR=$(out)" ];
meta = libapparmor.meta // {
description = "Mandatory access control system - PAM service";
};
}

View File

@@ -0,0 +1,32 @@
aa_action() {
STRING=$1
shift
$*
rc=$?
if [ $rc -eq 0 ] ; then
aa_log_success_msg $"$STRING "
else
aa_log_failure_msg $"$STRING "
fi
return $rc
}
aa_log_success_msg() {
[ -n "$1" ] && echo -n $1
echo ": done."
}
aa_log_warning_msg() {
[ -n "$1" ] && echo -n $1
echo ": Warning."
}
aa_log_failure_msg() {
[ -n "$1" ] && echo -n $1
echo ": Failed."
}
aa_log_skipped_msg() {
[ -n "$1" ] && echo -n $1
echo ": Skipped."
}

View File

@@ -0,0 +1,77 @@
{
lib,
stdenv,
which,
flex,
bison,
linuxHeaders ? stdenv.cc.libc.linuxHeaders,
buildPackages,
# apparmor deps
libapparmor,
apparmor-bin-utils,
# testing
perl,
python3,
bashInteractive,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "apparmor-parser";
inherit (libapparmor) version src;
postPatch = ''
patchShebangs .
cd parser
substituteInPlace Makefile \
--replace-fail "/usr/include/linux/capability.h" "${linuxHeaders}/include/linux/capability.h"
substituteInPlace rc.apparmor.functions \
--replace-fail "/sbin/apparmor_parser" "$out/bin/apparmor_parser" # FIXME
substituteInPlace rc.apparmor.functions \
--replace-fail "/usr/sbin/aa-status" "${lib.getExe' apparmor-bin-utils "aa-status"}"
sed -i rc.apparmor.functions -e '2i . ${./fix-rc.apparmor.functions.sh}'
'';
nativeBuildInputs = [
bison
flex
which
];
buildInputs = [ libapparmor ];
makeFlags = [
"LANGS="
"USE_SYSTEM=1"
"INCLUDEDIR=${libapparmor}/include"
"AR=${stdenv.cc.bintools.targetPrefix}ar"
"POD2MAN=${lib.getExe' buildPackages.perl "pod2man"}"
"POD2HTML=${lib.getExe' buildPackages.perl "pod2html"}"
"MANDIR=share/man"
]
++ lib.optional finalAttrs.doCheck "PROVE=${lib.getExe' perl "prove"}";
installFlags = [
"DESTDIR=$(out)"
"DISTRO=unknown"
];
preCheck = "pushd ./tst";
checkTarget = "tests";
postCheck = "popd";
doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
checkInputs = [
bashInteractive
perl
python3
];
meta = libapparmor.meta // {
description = "Mandatory access control system - core library";
mainProgram = "apparmor_parser";
};
})

View File

@@ -0,0 +1,42 @@
{
stdenv,
which,
callPackage,
# apparmor deps
libapparmor,
apparmor-parser,
apparmor-utils,
}:
stdenv.mkDerivation {
pname = "apparmor-profiles";
inherit (libapparmor) version src;
sourceRoot = "${libapparmor.src.name}/profiles";
nativeBuildInputs = [ which ];
installFlags = [
"DESTDIR=$(out)"
"EXTRAS_DEST=$(out)/share/apparmor/extra-profiles"
];
checkTarget = "check";
checkInputs = [
apparmor-parser
apparmor-utils
];
preCheck = ''
export USE_SYSTEM=1
export LOGPROF="aa-logprof --configdir ${callPackage ./test_config.nix { }} --no-check-mountpoint"
'';
doCheck = true;
meta = libapparmor.meta // {
description = "Mandatory access control system - profiles";
mainProgram = "apparmor_parser";
};
}

View File

@@ -0,0 +1,47 @@
{
lib,
runCommand,
util-linux,
stdenv,
runtimeShell,
bashInteractive,
# apparmor deps
libapparmor,
apparmor-parser,
}:
(runCommand "logprof_conf"
{
header = ''
[settings]
# /etc/apparmor.d/ is read-only on NixOS
profiledir = /var/cache/apparmor/logprof
inactive_profiledir = /etc/apparmor.d/disable
# Use: journalctl -b --since today --grep audit: | aa-logprof
logfiles = /dev/stdin
parser = ${lib.getExe apparmor-parser}
ldd = ${lib.getExe' stdenv.cc.libc "ldd"}
logger = ${util-linux}/bin/logger
# customize how file ownership permissions are presented
# 0 - off
# 1 - default of what ever mode the log reported
# 2 - force the new permissions to be user
# 3 - force all perms on the rule to be user
default_owner_prompt = 1
[qualifiers]
${runtimeShell} = icnu
${bashInteractive}/bin/sh = icnu
${bashInteractive}/bin/bash = icnu
'';
passAsFile = [ "header" ];
}
''
mkdir $out
cp $headerPath $out/logprof.conf
ln -s ${libapparmor.src}/utils/severity.db $out/severity.db
sed '1,/\[qualifiers\]/d' ${libapparmor.src}/utils/logprof.conf >> $out/logprof.conf
''
)

View File

@@ -0,0 +1,33 @@
{
writeShellApplication,
coreutils,
gnused,
gnugrep,
which,
# apparmor deps
apparmor-parser,
apparmor-bin-utils,
libapparmor,
}:
writeShellApplication {
name = "apparmor-teardown";
runtimeInputs = [
apparmor-parser
apparmor-bin-utils
coreutils
gnused
gnugrep
which
];
text = ''
set +e # the imported script tries to `read` an empty line
# shellcheck source=/dev/null
. ${apparmor-parser}/lib/apparmor/rc.apparmor.functions
remove_profiles
exit 0
'';
inherit (libapparmor) meta;
}

View File

@@ -0,0 +1,87 @@
{
lib,
makeWrapper,
gawk,
perl,
bash,
stdenv,
which,
linuxHeaders ? stdenv.cc.libc.linuxHeaders,
python3Packages,
bashNonInteractive,
buildPackages,
# apparmor deps
apparmor-parser,
apparmor-teardown,
}:
let
inherit (python3Packages) libapparmor;
in
python3Packages.buildPythonApplication {
pname = "apparmor-utils";
inherit (libapparmor) version src;
postPatch = ''
patchShebangs .
cd utils
substituteInPlace aa-remove-unknown \
--replace-fail "/lib/apparmor/rc.apparmor.functions" "${apparmor-parser}/lib/apparmor/rc.apparmor.functions"
substituteInPlace Makefile \
--replace-fail "/usr/include/linux/capability.h" "${linuxHeaders}/include/linux/capability.h"
sed -i -E 's/^(DESTDIR|BINDIR|PYPREFIX)=.*//g' Makefile
sed -i aa-unconfined -e "/my_env\['PATH'\]/d"
''
+ (lib.optionalString stdenv.hostPlatform.isMusl ''
sed -i Makefile -e "/\<vim\>/d"
'');
format = "other";
strictDeps = true;
doCheck = true;
nativeBuildInputs = [
makeWrapper
which
bashNonInteractive
python3Packages.setuptools
];
buildInputs = [
bash
perl
];
pythonPath = [
python3Packages.notify2
python3Packages.psutil
libapparmor
];
makeFlags = [
"LANGS="
"POD2MAN=${lib.getExe' buildPackages.perl "pod2man"}"
"POD2HTML=${lib.getExe' buildPackages.perl "pod2html"}"
"MANDIR=share/man"
];
installFlags = [
"DESTDIR=$(out)"
"BINDIR=$(out)/bin"
"VIM_INSTALL_PATH=$(out)/share"
"PYPREFIX="
];
postInstall = ''
wrapProgram $out/bin/aa-remove-unknown \
--prefix PATH : ${lib.makeBinPath [ gawk ]}
ln -s ${lib.getExe apparmor-teardown} $out/bin/aa-teardown
'';
meta = libapparmor.meta // {
description = "Mandatory access control system - script user-land utilities";
};
}

View File

@@ -0,0 +1,36 @@
{
lib,
stdenvNoCC,
fetchurl,
unzip,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "appcleaner";
version = "3.6.8";
src = fetchurl {
url = "https://freemacsoft.net/downloads/AppCleaner_${finalAttrs.version}.zip";
hash = "sha256-4BL3KUQkc8IOfM4zSwAYJSHktmcupoGzSTGxgP6z1r4=";
};
dontUnpack = true;
nativeBuildInputs = [ unzip ];
installPhase = ''
runHook preInstall
mkdir -p $out/Applications
unzip -d $out/Applications $src
runHook postInstall
'';
meta = with lib; {
description = "Uninstall unwanted apps";
homepage = "https://freemacsoft.net/appcleaner";
license = licenses.unfree;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
maintainers = with maintainers; [ emilytrau ];
platforms = platforms.darwin;
};
})

View File

@@ -0,0 +1,58 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
csxcad,
qcsxcad,
hdf5,
vtkWithQt6,
qt6,
fparser,
tinyxml,
cgal,
boost,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "appcsxcad";
version = "0.2.3";
src = fetchFromGitHub {
owner = "thliebig";
repo = "AppCSXCAD";
rev = "v${finalAttrs.version}";
hash = "sha256-KrsnCnRZRTbkgEH3hOETrYhseg5mCHPqhAbYyHlS3sk=";
};
nativeBuildInputs = [
cmake
qt6.wrapQtAppsHook
];
buildInputs = [
csxcad
qcsxcad
hdf5
vtkWithQt6
qt6.qtbase
qt6.qtwayland
fparser
tinyxml
cgal
boost
];
postFixup = ''
rm $out/bin/AppCSXCAD.sh
'';
meta = {
description = "Minimal Application using the QCSXCAD library";
mainProgram = "AppCSXCAD";
homepage = "https://github.com/thliebig/AppCSXCAD";
license = lib.licenses.gpl3;
maintainers = with lib.maintainers; [ matthuszagh ];
platforms = lib.platforms.linux;
};
})

View File

@@ -0,0 +1,65 @@
{
lib,
stdenv,
fetchFromGitHub,
nix-update-script,
vala,
meson,
ninja,
pkg-config,
pantheon,
python3,
gettext,
glib,
gtk3,
libgee,
wrapGAppsHook3,
}:
stdenv.mkDerivation rec {
pname = "appeditor";
version = "1.1.5";
src = fetchFromGitHub {
owner = "donadigo";
repo = "appeditor";
tag = version;
sha256 = "sha256-A0YasHw5osGrgUPiUPuRBnv1MR/Pth6jVHGEx/klOGY=";
};
nativeBuildInputs = [
gettext
meson
ninja
vala
pkg-config
python3
wrapGAppsHook3
];
buildInputs = [
glib
gtk3
pantheon.granite
libgee
];
postPatch = ''
chmod +x meson/post_install.py
patchShebangs meson/post_install.py
'';
passthru = {
updateScript = nix-update-script { };
};
meta = with lib; {
description = "Edit the Pantheon desktop application menu";
homepage = "https://github.com/donadigo/appeditor";
maintainers = with maintainers; [ xiorcale ];
teams = [ teams.pantheon ];
platforms = platforms.linux;
license = licenses.gpl3Plus;
mainProgram = "com.github.donadigo.appeditor";
};
}

View File

@@ -0,0 +1,114 @@
{
stdenvNoCC,
lib,
fetchzip,
autoPatchelfHook,
makeWrapper,
copyDesktopItems,
makeDesktopItem,
gtk3,
xdg-user-dirs,
keybinder3,
libnotify,
}:
let
dist =
rec {
x86_64-linux = {
urlSuffix = "linux-x86_64.tar.gz";
hash = "sha256-n1ID/fGkRisxJ2rYmNLO9YX1ylezEQldEtnRuIVXHGk=";
};
x86_64-darwin = {
urlSuffix = "macos-universal.zip";
hash = "sha256-+TXllfXtu+7X36XJQMydJzMaWeUkp4/TRD0a35GHuws=";
};
aarch64-darwin = x86_64-darwin;
}
."${stdenvNoCC.hostPlatform.system}"
or (throw "appflowy: No source for system: ${stdenvNoCC.hostPlatform.system}");
in
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "appflowy";
version = "0.9.9";
src = fetchzip {
url = "https://github.com/AppFlowy-IO/appflowy/releases/download/${finalAttrs.version}/AppFlowy-${finalAttrs.version}-${dist.urlSuffix}";
inherit (dist) hash;
stripRoot = false;
};
nativeBuildInputs = [
makeWrapper
copyDesktopItems
]
++ lib.optionals stdenvNoCC.hostPlatform.isLinux [ autoPatchelfHook ];
buildInputs = [
gtk3
keybinder3
libnotify
];
dontBuild = true;
dontConfigure = true;
installPhase =
lib.optionalString stdenvNoCC.hostPlatform.isLinux ''
runHook preInstall
cd AppFlowy/
mkdir -p $out/{bin,opt}
# Copy archive contents to the outpout directory
cp -r ./* $out/opt/
# Copy icon
install -Dm444 data/flutter_assets/assets/images/flowy_logo.svg $out/share/icons/hicolor/scalable/apps/appflowy.svg
runHook postInstall
''
+ lib.optionalString stdenvNoCC.hostPlatform.isDarwin ''
runHook preInstall
mkdir -p $out/{Applications,bin}
cp -r ./AppFlowy.app $out/Applications/
runHook postInstall
'';
preFixup =
lib.optionalString stdenvNoCC.hostPlatform.isLinux ''
# Add missing libraries to appflowy using the ones it comes with
makeWrapper $out/opt/AppFlowy $out/bin/appflowy \
--set LD_LIBRARY_PATH "$out/opt/lib/" \
--prefix PATH : "${lib.makeBinPath [ xdg-user-dirs ]}"
''
+ lib.optionalString stdenvNoCC.hostPlatform.isDarwin ''
makeWrapper $out/Applications/AppFlowy.app/Contents/MacOS/AppFlowy $out/bin/appflowy
'';
desktopItems = lib.optionals stdenvNoCC.hostPlatform.isLinux [
(makeDesktopItem {
name = "appflowy";
desktopName = "AppFlowy";
comment = finalAttrs.meta.description;
exec = "appflowy %U";
icon = "appflowy";
categories = [ "Office" ];
mimeTypes = [ "x-scheme-handler/appflowy-flutter" ];
})
];
meta = with lib; {
description = "Open-source alternative to Notion";
homepage = "https://www.appflowy.io/";
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
license = licenses.agpl3Only;
changelog = "https://github.com/AppFlowy-IO/appflowy/releases/tag/${finalAttrs.version}";
maintainers = with maintainers; [ darkonion0 ];
platforms = [ "x86_64-linux" ] ++ platforms.darwin;
mainProgram = "appflowy";
};
})

View File

@@ -0,0 +1,167 @@
{
alsa-lib,
at-spi2-atk,
at-spi2-core,
atk,
autoPatchelfHook,
cairo,
cups,
curl,
dbus,
dnsmasq,
dpkg,
expat,
fetchurl,
gdk-pixbuf,
glib,
gtk3,
icu,
iproute2,
krb5,
lib,
libdrm,
libsecret,
libuuid,
libxcb,
libxkbcommon,
lttng-ust,
makeWrapper,
libgbm,
networkmanager,
nspr,
nss,
openssl,
pango,
python3,
stdenv,
systemd,
xdg-utils,
xorg,
zlib,
}:
let
deps = [
alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
curl
dbus
expat
gdk-pixbuf
glib
gtk3
icu
krb5
libdrm
libsecret
libuuid
libxcb
libxkbcommon
lttng-ust
libgbm
nspr
nss
openssl
pango
stdenv.cc.cc
systemd
xorg.libX11
xorg.libXScrnSaver
xorg.libXcomposite
xorg.libXcursor
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXtst
xorg.libxkbfile
xorg.libxshmfence
zlib
];
in
stdenv.mkDerivation rec {
pname = "appgate-sdp";
version = "6.4.2";
src = fetchurl {
url = "https://bin.appgate-sdp.com/${lib.versions.majorMinor version}/client/appgate-sdp_${version}_amd64.deb";
sha256 = "sha256-xFpBC6X95C01wUfzJ3a0kMz898k6BItkpJLcUmfd7oY=";
};
# just patch interpreter
autoPatchelfIgnoreMissingDeps = true;
dontConfigure = true;
dontBuild = true;
buildInputs = [
python3
python3.pkgs.dbus-python
];
nativeBuildInputs = [
autoPatchelfHook
makeWrapper
dpkg
];
unpackPhase = ''
dpkg-deb -x $src $out
'';
installPhase = ''
cp -r $out/usr/share $out/share
substituteInPlace $out/lib/systemd/system/appgate-dumb-resolver.service \
--replace "/opt/" "$out/opt/"
substituteInPlace $out/lib/systemd/system/appgatedriver.service \
--replace "/opt/" "$out/opt/" \
--replace "InaccessiblePaths=/mnt /srv /boot /media" "InaccessiblePaths=-/mnt -/srv -/boot -/media"
substituteInPlace $out/lib/systemd/system/appgate-resolver.service \
--replace "/usr/sbin/dnsmasq" "${dnsmasq}/bin/dnsmasq" \
--replace "/opt/" "$out/opt/"
substituteInPlace $out/opt/appgate/linux/nm.py \
--replace "/usr/sbin/dnsmasq" "${dnsmasq}/bin/dnsmasq"
substituteInPlace $out/opt/appgate/linux/set_dns \
--replace "/etc/appgate.conf" "$out/etc/appgate.conf"
wrapProgram $out/opt/appgate/service/createdump \
--set LD_LIBRARY_PATH "${lib.makeLibraryPath [ stdenv.cc.cc ]}"
wrapProgram $out/opt/appgate/appgate-driver \
--prefix PATH : ${
lib.makeBinPath [
iproute2
networkmanager
dnsmasq
]
} \
--set LD_LIBRARY_PATH $out/opt/appgate/service
# make xdg-open overrideable at runtime
makeWrapper $out/opt/appgate/Appgate $out/bin/appgate \
--suffix PATH : ${lib.makeBinPath [ xdg-utils ]} \
--set LD_LIBRARY_PATH $out/opt/appgate:${lib.makeLibraryPath deps}
wrapProgram $out/opt/appgate/linux/set_dns --set PYTHONPATH $PYTHONPATH
'';
meta = with lib; {
description = "Appgate SDP (Software Defined Perimeter) desktop client";
homepage = "https://www.appgate.com/support/software-defined-perimeter-support";
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
license = licenses.unfree;
platforms = platforms.linux;
maintainers = with maintainers; [ ymatsiuk ];
mainProgram = "appgate";
};
}

View File

@@ -0,0 +1,92 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
cmake,
pkg-config,
qt5,
zsync2,
libcpr,
libgcrypt,
libappimage,
argagg,
nlohmann_json,
gpgme,
appimageupdate-qt,
withQtUI ? false,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "appimageupdate";
version = "2.0.0-alpha-1-20230526";
src = fetchFromGitHub {
owner = "AppImageCommunity";
repo = "AppImageUpdate";
rev = finalAttrs.version;
hash = "sha256-b2RqSw0Ksn9OLxQV9+3reBiqrty+Kx9OwV93jlvuPnY=";
};
patches = [
(fetchpatch {
name = "include-algorithm-header.patch";
url = "https://github.com/AppImageCommunity/AppImageUpdate/commit/5e91de84aba775ba8d3a4771e4f7f06056f9b764.patch";
hash = "sha256-RX2HFAlGsEjXona7cL3WdwwiiA0u9CnfvHMC6S0DeLY=";
})
];
postPatch = ''
substituteInPlace CMakeLists.txt \
--replace-fail 'VERSION 1-alpha' 'VERSION ${finalAttrs.version}' \
--replace-fail 'env LC_ALL=C date -u "+%Y-%m-%d %H:%M:%S %Z"' 'bash -c "echo 1970-01-01 00:00:01 UTC"' \
--replace-fail 'git rev-parse --short HEAD' 'bash -c "echo unknown"' \
--replace-fail '<local dev build>' '<nixpkgs build>'
'';
nativeBuildInputs = [
cmake
pkg-config
]
++ lib.optionals withQtUI [
qt5.wrapQtAppsHook
];
buildInputs = [
zsync2
libcpr
libgcrypt
libappimage
argagg
nlohmann_json
gpgme
]
++ lib.optionals withQtUI [
qt5.qtbase
];
cmakeFlags = [
(lib.cmakeBool "USE_SYSTEM_ZSYNC2" true)
(lib.cmakeBool "USE_SYSTEM_LIBAPPIMAGE" true)
(lib.cmakeBool "BUILD_QT_UI" withQtUI)
];
dontWrapQtApps = true;
preFixup = lib.optionalString withQtUI ''
wrapQtApp "$out/bin/AppImageUpdate"
'';
passthru.tests = {
inherit appimageupdate-qt;
};
meta = {
description = "Update AppImages using information embedded in the AppImage itself";
homepage = "https://github.com/AppImageCommunity/AppImageUpdate";
license = lib.licenses.mit;
mainProgram = if withQtUI then "AppImageUpdate" else "appimageupdatetool";
maintainers = with lib.maintainers; [ aleksana ];
platforms = lib.platforms.linux;
};
})

View File

@@ -0,0 +1,43 @@
{
autoreconfHook,
fetchFromGitHub,
lib,
libappindicator,
mono,
gtk-sharp-3_0,
pkg-config,
stdenv,
}:
stdenv.mkDerivation {
pname = "appindicator-sharp";
version = "0-unstable-2016-01-18";
src = fetchFromGitHub {
owner = "stsundermann";
repo = "appindicator-sharp";
rev = "5a79cde93da6d68a4b1373f1ce5796c3c5fe1b37";
sha256 = "sha256:1i0vqbp05l29f5v9ygp7flm4s05pcnn5ivl578mxmhb51s7ncw6l";
};
nativeBuildInputs = [
autoreconfHook
mono
pkg-config
];
buildInputs = [
gtk-sharp-3_0
libappindicator
];
ac_cv_path_MDOC = "no";
installFlags = [ "GAPIXMLDIR=/tmp/gapixml" ];
meta = {
description = "Bindings for appindicator using gobject-introspection";
homepage = "https://github.com/stsundermann/appindicator-sharp";
license = lib.licenses.lgpl3Only;
maintainers = with lib.maintainers; [ kevincox ];
};
}

View File

@@ -0,0 +1,89 @@
{
lib,
buildNpmPackage,
copyDesktopItems,
electron_36,
fetchFromGitHub,
makeDesktopItem,
makeWrapper,
nix-update-script,
}:
let
electron = electron_36;
version = "2025.8.2";
in
buildNpmPackage {
pname = "appium-inspector";
inherit version;
src = fetchFromGitHub {
owner = "appium";
repo = "appium-inspector";
tag = "v${version}";
hash = "sha256-v3UN58dJ+rSdFx+99xRMI88gnJ/hgL48Lr7AMjNgXMY=";
};
npmDepsHash = "sha256-rlmAZyznoLSudAf7k1mgf13CO+9mlDB3HhubPga+30Q=";
npmFlags = [ "--ignore-scripts" ];
nativeBuildInputs = [
makeWrapper
copyDesktopItems
];
makeCacheWritable = true;
buildPhase = ''
runHook preBuild
npm run build:electron
npm exec electron-builder -- \
--dir \
-c.electronDist=${electron.dist} \
-c.electronVersion=${electron.version}
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p "$out/share/appium-inspector"
cp -r release/*-unpacked/resources "$out/share/appium-inspector/"
makeWrapper '${electron}/bin/electron' "$out/bin/appium-inspector" \
--add-flags "$out/share/appium-inspector/resources/app.asar" \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \
--set NODE_ENV production
install -m 444 -D 'app/common/renderer/assets/images/icon.png' \
$out/share/icons/hicolor/256x256/apps/appium-inspector.png
runHook postInstall
'';
desktopItems = [
(makeDesktopItem {
name = "appium-inspector";
exec = "appium-inspector";
desktopName = "Appium Inspector";
comment = "A GUI inspector for mobile apps and more, powered by a (separately installed) Appium server";
categories = [ "Development" ];
icon = "appium-inspector";
})
];
passthru.updateScript = nix-update-script { };
meta = {
description = "GUI inspector for the appium UI automation tool";
homepage = "https://appium.github.io/appium-inspector";
changelog = "https://github.com/appium/appium-inspector/releases/tag/v${version}";
license = lib.licenses.asl20;
mainProgram = "appium-inspector";
maintainers = with lib.maintainers; [ marie ];
platforms = lib.platforms.linux;
};
}

View File

@@ -0,0 +1,51 @@
{
lib,
fetchzip,
stdenv,
}:
let
_src =
variant: suffix: hash:
fetchzip (
{
name = variant;
url = "https://github.com/ful1e5/apple_cursor/releases/download/v${version}/${variant}.${suffix}";
hash = hash;
}
// (lib.optionalAttrs (suffix == "zip") { stripRoot = false; })
// (lib.optionalAttrs (suffix == "tar.xz") { stripRoot = false; })
);
srcs = [
(_src "macOS" "tar.xz" "sha256-nS4g+VwM+4q/S1ODb3ySi2SBk7Ha8vF8d9XpP5cEkok=")
];
version = "2.0.1";
in
stdenv.mkDerivation {
pname = "apple_cursor";
inherit version;
inherit srcs;
sourceRoot = ".";
installPhase = ''
install -dm 0755 $out/share/icons
cp -r macOS/macOS* $out/share/icons/
'';
meta = with lib; {
description = "Opensource macOS Cursors";
homepage = "https://github.com/ful1e5/apple_cursor";
license = [
licenses.gpl3Only
# Potentially a derivative work of copyrighted Apple designs
licenses.unfree
];
platforms = platforms.linux;
maintainers = with maintainers; [
colemickens
dxwil
];
};
}

View File

View File

@@ -0,0 +1,49 @@
{
lib,
fetchFromGitHub,
stdenvNoCC,
}:
let
CoreSymbolication = stdenvNoCC.mkDerivation (finalAttrs: {
pname = "CoreSymbolication";
version = "0-unstable-2018-06-17";
src = fetchFromGitHub {
repo = "CoreSymbolication";
owner = "matthewbauer";
rev = "24c87c23664b3ee05dc7a5a87d647ae476a680e4";
hash = "sha256-PzvLq94eNhP0+rLwGMKcMzxuD6MlrNI7iT/eV0obtSE=";
};
patches = [
# Add missing symbol definitions needed to build `zlog` in system_cmds.
# https://github.com/matthewbauer/CoreSymbolication/pull/2
../patches/0001-Add-function-definitions-needed-to-build-zlog-in-sys.patch
../patches/0002-Add-CF_EXPORT-To-const-symbols.patch
];
dontBuild = true;
installPhase = ''
mkdir -p "$out/include"
cp *.h "$out/include"
'';
meta = {
description = "Reverse engineered headers for Apple's CoreSymbolication framework";
homepage = "https://github.com/matthewbauer/CoreSymbolication";
license = lib.licenses.mit;
teams = [ lib.teams.darwin ];
platforms = lib.platforms.darwin;
};
});
in
self: super: {
buildPhase = super.buildPhase or "" + ''
mkdir -p System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/Headers
ln -s A System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/Current
ln -s Versions/Current/Headers System/Library/PrivateFrameworks/CoreSymbolication.framework/Headers
cp '${CoreSymbolication}/include/'*.h System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/Headers
'';
}

View File

@@ -0,0 +1,13 @@
{ lib, config }:
self: super: {
preBuild = super.preBuild or "" + ''
platformPath=$out/Platforms/MacOSX.platform
sdkpath=$platformPath/Developer/SDKs
'';
preInstall = super.preInstall or "" + ''
platformPath=$out/Platforms/MacOSX.platform
sdkpath=$platformPath/Developer/SDKs
'';
}

View File

@@ -0,0 +1,38 @@
{
lib,
fetchurl,
cpio,
pbzx,
}:
{
urls,
version,
hash,
}:
fetchurl {
pname = "macOS-SDK";
inherit version urls hash;
recursiveHash = true;
nativeBuildInputs = [
cpio
pbzx
];
postFetch = ''
renamed=$(mktemp -d)/sdk.xar
mv "$downloadedFile" "$renamed"
pbzx "$renamed" | cpio -idm
src=Library/Developer/CommandLineTools/SDKs/MacOSX${lib.versions.majorMinor version}.sdk
# Remove unwanted binaries, man pages, and folders from the SDK.
rm -rf $src/usr/bin $src/usr/share $src/System/Library/Perl
mkdir -p "$out"
cp -rd $src/* "$out"
'';
}

View File

@@ -0,0 +1,9 @@
{ makeSetupHook, sdkVersion }:
self: super: {
passthru = super.passthru or { } // {
privateFrameworksHook = makeSetupHook {
name = "apple-sdk-private-frameworks-hook";
} ../setup-hooks/add-private-frameworks.sh;
};
}

View File

@@ -0,0 +1,37 @@
let
lockfile = builtins.fromJSON (builtins.readFile ../metadata/apple-oss-lockfile.json);
in
{
lib,
fetchFromGitHub,
stdenvNoCC,
sdkVersion,
}:
let
sdkinfo = lockfile.${sdkVersion};
in
self: super: {
passthru = super.passthru or { } // {
# Returns the raw source from apple-oss-distributions repo.
# This is mostly useful for copying private headers needed to build other source releases.
#
# Note: The source releases are mostly not used to build the SDK. Unless they can be used to build binaries,
# theyre not used.
sourceRelease =
name:
let
lockinfo = sdkinfo.${name};
in
fetchFromGitHub {
owner = "apple-oss-distributions";
repo = name;
rev = lockinfo.rev or "${name}-${lockinfo.version}";
inherit (lockinfo) hash;
}
// {
inherit (lockinfo) version;
};
};
}

View File

@@ -0,0 +1,315 @@
{
lib,
stdenvNoCC,
xcodePlatform,
}:
let
inherit (lib.generators) toPlist;
Info = {
CFBundleIdentifier = "com.apple.platform.${lib.toLower xcodePlatform}";
Type = "Platform";
Name = lib.toLower xcodePlatform;
};
# These files are all based off of Xcode spec files found in
# /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/PrivatePlugIns/IDEOSXSupportCore.ideplugin/Contents/Resources.
# Based off of the "MacOSX Architectures.xcspec" file. All i386 stuff
# is removed because NixPkgs only supports darwin-x86_64 and darwin-arm64.
Architectures = [
{
Identifier = "Standard";
Type = "Architecture";
Name = "Standard Architectures (Apple Silicon, 64-bit Intel)";
RealArchitectures = [
"arm64"
"x86_64"
];
ArchitectureSetting = "ARCHS_STANDARD";
}
{
Identifier = "Universal";
Type = "Architecture";
Name = "Universal (Apple Silicon, 64-bit Intel)";
RealArchitectures = [
"arm64"
"x86_64"
];
ArchitectureSetting = "ARCHS_STANDARD_32_64_BIT";
}
{
Identifier = "Native";
Type = "Architecture";
Name = "Native Architecture of Build Machine";
ArchitectureSetting = "NATIVE_ARCH_ACTUAL";
}
{
Identifier = "Standard64bit";
Type = "Architecture";
Name = "Apple Silicon, 64-bit Intel";
RealArchitectures = [
"arm64"
"x86_64"
];
ArchitectureSetting = "ARCHS_STANDARD_64_BIT";
}
{
Identifier = stdenvNoCC.hostPlatform.darwinArch;
Type = "Architecture";
Name = "Apple Silicon or Intel 64-bit";
}
{
Identifier = "Standard_Including_64_bit";
Type = "Architecture";
Name = "Standard Architectures (including 64-bit)";
RealArchitectures = [
"arm64"
"x86_64"
];
ArchitectureSetting = "ARCHS_STANDARD_INCLUDING_64_BIT";
}
];
# Based off of the "MacOSX Package Types.xcspec" file. Only keep the
# bare minimum needed.
PackageTypes = [
{
Identifier = "com.apple.package-type.mach-o-executable";
Type = "PackageType";
Name = "Mach-O Executable";
DefaultBuildSettings = {
EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
};
ProductReference = {
FileType = "compiled.mach-o.executable";
Name = "$(EXECUTABLE_NAME)";
};
}
{
Identifier = "com.apple.package-type.mach-o-objfile";
Type = "PackageType";
Name = "Mach-O Object File";
DefaultBuildSettings = {
EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
};
ProductReference = {
FileType = "compiled.mach-o.objfile";
Name = "$(EXECUTABLE_NAME)";
};
}
{
Identifier = "com.apple.package-type.mach-o-dylib";
Type = "PackageType";
Name = "Mach-O Dynamic Library";
DefaultBuildSettings = {
EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
};
ProductReference = {
FileType = "compiled.mach-o.dylib";
Name = "$(EXECUTABLE_NAME)";
};
}
{
Identifier = "com.apple.package-type.static-library";
Type = "PackageType";
Name = "Mach-O Static Library";
DefaultBuildSettings = {
EXECUTABLE_PREFIX = "lib";
EXECUTABLE_SUFFIX = ".a";
EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
};
ProductReference = {
FileType = "archive.ar";
Name = "$(EXECUTABLE_NAME)";
IsLaunchable = "NO";
};
}
{
Identifier = "com.apple.package-type.wrapper";
Type = "PackageType";
Name = "Wrapper";
DefaultBuildSettings = {
WRAPPER_SUFFIX = ".bundle";
WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
CONTENTS_FOLDER_PATH = "$(WRAPPER_NAME)/Contents";
EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
EXECUTABLE_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/MacOS";
EXECUTABLE_PATH = "$(EXECUTABLE_FOLDER_PATH)/$(EXECUTABLE_NAME)";
INFOPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/Info.plist";
INFOSTRINGS_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/InfoPlist.strings";
PKGINFO_PATH = "$(CONTENTS_FOLDER_PATH)/PkgInfo";
PBDEVELOPMENTPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/pbdevelopment.plist";
VERSIONPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/version.plist";
PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Headers";
PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders";
EXECUTABLES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Executables";
FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Frameworks";
SHARED_FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/SharedFrameworks";
SHARED_SUPPORT_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/SharedSupport";
UNLOCALIZED_RESOURCES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Resources";
LOCALIZED_RESOURCES_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/$(DEVELOPMENT_LANGUAGE).lproj";
DOCUMENTATION_FOLDER_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/Documentation";
PLUGINS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PlugIns";
SCRIPTS_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Scripts";
};
ProductReference = {
FileType = "wrapper.cfbundle";
Name = "$(WRAPPER_NAME)";
IsLaunchable = "NO";
};
}
{
Identifier = "com.apple.package-type.wrapper.application";
Type = "PackageType";
BasedOn = "com.apple.package-type.wrapper";
Name = "Application Wrapper";
DefaultBuildSettings = {
GENERATE_PKGINFO_FILE = "YES";
};
ProductReference = {
FileType = "wrapper.application";
Name = "$(WRAPPER_NAME)";
IsLaunchable = "YES";
};
}
];
# Based off of the "MacOSX Product Types.xcspec" file. All
# bundles/wrapper are removed, because we prefer dynamic products in
# NixPkgs.
ProductTypes = [
{
Identifier = "com.apple.product-type.tool";
Type = "ProductType";
Name = "Command-line Tool";
PackageTypes = [ "com.apple.package-type.mach-o-executable" ];
}
{
Identifier = "com.apple.product-type.objfile";
Type = "ProductType";
Name = "Object File";
PackageTypes = [ "com.apple.package-type.mach-o-objfile" ];
}
{
Identifier = "com.apple.product-type.library.dynamic";
Type = "ProductType";
Name = "Dynamic Library";
PackageTypes = [ "com.apple.package-type.mach-o-dylib" ];
DefaultBuildProperties = {
FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
MACH_O_TYPE = "mh_dylib";
REZ_EXECUTABLE = "YES";
EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)";
EXECUTABLE_EXTENSION = "dylib";
DYLIB_COMPATIBILITY_VERSION = "1";
DYLIB_CURRENT_VERSION = "1";
FRAMEWORK_FLAG_PREFIX = "-framework";
LIBRARY_FLAG_PREFIX = "-l";
LIBRARY_FLAG_NOSPACE = "YES";
STRIP_STYLE = "debugging";
GCC_INLINES_ARE_PRIVATE_EXTERN = "YES";
CODE_SIGNING_ALLOWED = "YES";
CODE_SIGNING_REQUIRED = "NO";
};
}
{
Identifier = "com.apple.product-type.library.static";
Type = "ProductType";
Name = "Static Library";
PackageTypes = [ "com.apple.package-type.static-library" ];
DefaultBuildProperties = {
FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
MACH_O_TYPE = "staticlib";
REZ_EXECUTABLE = "YES";
EXECUTABLE_PREFIX = "lib";
EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)";
EXECUTABLE_EXTENSION = "a";
FRAMEWORK_FLAG_PREFIX = "-framework";
LIBRARY_FLAG_PREFIX = "-l";
LIBRARY_FLAG_NOSPACE = "YES";
STRIP_STYLE = "debugging";
SEPARATE_STRIP = "YES";
CLANG_ENABLE_MODULE_DEBUGGING = "NO";
};
}
{
Type = "ProductType";
Identifier = "com.apple.product-type.bundle";
Name = "Bundle";
DefaultBuildProperties = {
FULL_PRODUCT_NAME = "$(WRAPPER_NAME)";
MACH_O_TYPE = "mh_bundle";
WRAPPER_PREFIX = "";
WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
WRAPPER_EXTENSION = "bundle";
WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
FRAMEWORK_FLAG_PREFIX = "-framework";
LIBRARY_FLAG_PREFIX = "-l";
LIBRARY_FLAG_NOSPACE = "YES";
STRIP_STYLE = "non-global";
};
PackageTypes = [ "com.apple.package-type.wrapper" ];
IsWrapper = "YES";
HasInfoPlist = "YES";
HasInfoPlistStrings = "YES";
}
{
Identifier = "com.apple.product-type.application";
Type = "ProductType";
BasedOn = "com.apple.product-type.bundle";
Name = "Application";
DefaultBuildProperties = {
MACH_O_TYPE = "mh_execute";
WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
WRAPPER_EXTENSION = "app";
};
PackageTypes = [ "com.apple.package-type.wrapper.application" ];
}
{
Type = "ProductType";
Identifier = "com.apple.product-type.framework";
Name = "Bundle";
DefaultBuildProperties = {
FULL_PRODUCT_NAME = "$(WRAPPER_NAME)";
MACH_O_TYPE = "mh_bundle";
WRAPPER_PREFIX = "";
WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
WRAPPER_EXTENSION = "bundle";
WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
FRAMEWORK_FLAG_PREFIX = "-framework";
LIBRARY_FLAG_PREFIX = "-l";
LIBRARY_FLAG_NOSPACE = "YES";
STRIP_STYLE = "non-global";
};
PackageTypes = [ "com.apple.package-type.wrapper" ];
IsWrapper = "YES";
HasInfoPlist = "YES";
HasInfoPlistStrings = "YES";
}
];
ToolchainInfo = {
Identifier = "com.apple.dt.toolchain.XcodeDefault";
};
in
{
"Info.plist" = builtins.toFile "Info.plist" (toPlist { escape = true; } Info);
"ToolchainInfo.plist" = builtins.toFile "ToolchainInfo.plist" (
toPlist { escape = true; } ToolchainInfo
);
"Architectures.xcspec" = builtins.toFile "Architectures.xcspec" (
toPlist { escape = true; } Architectures
);
"PackageTypes.xcspec" = builtins.toFile "PackageTypes.xcspec" (
toPlist { escape = true; } PackageTypes
);
"ProductTypes.xcspec" = builtins.toFile "ProductTypes.xcspec" (
toPlist { escape = true; } ProductTypes
);
}

View File

@@ -0,0 +1,40 @@
let
removedDylibs = [
# corecrypto is available under a very restrictive license (effectively: non-free, cant use).
# Without the headers and not being able to use corecrypto due to its license, its not very useful.
# Stubs are included in the SDK for all dylibs, including corecrypto. They should be removed.
"/usr/lib/system/libcorecrypto.dylib"
];
in
{
lib,
jq,
llvm,
}:
self: super: {
nativeBuildInputs = super.nativeBuildInputs or [ ] ++ [
jq
llvm
];
buildPhase = super.buildPhase or "" + ''
echo "Removing the following dylibs from the libSystem reexported libraries list: ${lib.escapeShellArg (lib.concatStringsSep ", " removedDylibs)}"
for libSystem in libSystem.B.tbd libSystem.B_asan.tbd; do
# tbd-v5 is a JSON-based format, which can be manipulated by `jq`.
llvm-readtapi --filetype=tbd-v5 usr/lib/$libSystem \
| jq --argjson libs ${lib.escapeShellArg (builtins.toJSON removedDylibs)} '
if .libraries then
.libraries[] |= select(.install_names[] | any([.] | inside($libs)) | not)
else
.
end
| .main_library.reexported_libraries[].names[] |= select([.] | inside($libs) | not)
' > usr/lib/$libSystem~
# Convert libSystem back to tbd-v4 because not all tooling supports the JSON-based format yet.
llvm-readtapi --filetype=tbd-v4 usr/lib/$libSystem~ -o usr/lib/$libSystem
rm usr/lib/$libSystem~
done
'';
}

View File

@@ -0,0 +1,71 @@
{
lib,
cups,
darwin,
db,
libiconv,
ncurses,
stdenv,
stdenvNoCC,
xcbuild,
}:
let
# CUPS has too many dependencies to build as part of the Darwin bootstrap. Its also typically taken as an explicit
# dependency by other packages, so building only the headers (to satisfy other SDK headers) should be okay.
cupsHeaders = darwin.bootstrapStdenv.mkDerivation {
pname = "${lib.getName cups}-headers";
version = lib.getVersion cups;
inherit (cups) src;
patches = cups.patches or [ ];
strictDeps = true;
dontBuild = true;
buildInputs = [ darwin.libresolv ]; # The `configure` script requires libresolv headers.
# CUPSs configure script fails to find `ar` when cross-compiling.
configureFlags = [ "ac_cv_path_AR=${stdenv.cc.targetPrefix}ar" ];
installTargets = [ "install-headers" ];
__structuredAttrs = true;
meta = {
inherit (cups.meta)
homepage
description
license
maintainers
platforms
;
};
};
in
self: super: {
# These packages are propagated only because other platforms include them in their libc (or otherwise by default).
# Reducing the number of special cases required to support Darwin makes supporting it easier for package authors.
propagatedBuildInputs =
super.propagatedBuildInputs or [ ]
++ [
libiconv
darwin.libresolv
darwin.libsbuf
# Shipped with the SDK only as a library with no headers
(lib.getLib darwin.libutil)
# Required by some SDK headers
cupsHeaders
]
# x86_64-darwin links the object files from Csu when targeting very old releases
++ lib.optionals stdenvNoCC.hostPlatform.isx86_64 [ darwin.Csu ];
# The Darwin module for Swift requires certain headers to be included in the SDK (and not just be propagated).
buildPhase = super.buildPhase or "" + ''
for header in '${lib.getDev libiconv}/include/'* '${lib.getDev ncurses}/include/'*; do
ln -s "$header" "usr/include/$(basename "$header")"
done
'';
}

View File

@@ -0,0 +1,48 @@
{
lib,
pkgsBuildHost,
stdenv,
stdenvNoCC,
}:
let
plists = import ./plists.nix {
inherit lib stdenvNoCC;
xcodePlatform = if stdenvNoCC.hostPlatform.isMacOS then "MacOSX" else "iPhoneOS";
};
inherit (pkgsBuildHost) darwin cctools xcbuild;
in
self: super: {
propagatedNativeBuildInputs = super.propagatedNativeBuildInputs or [ ] ++ [ xcbuild.xcrun ];
postInstall = super.postInstall or "" + ''
specspath=$out/Library/Xcode/Specifications
toolchainsPath=$out/Toolchains/XcodeDefault.xctoolchain
mkdir -p "$specspath" "$toolchainsPath"
# xcbuild expects to find things relative to the plist locations. If these are linked instead of copied,
# it wont find any platforms or SDKs.
cp '${plists."Info.plist"}' "$platformPath/Info.plist"
cp '${plists."ToolchainInfo.plist"}' "$toolchainsPath/ToolchainInfo.plist"
for spec in '${xcbuild}/Library/Xcode/Specifications/'*; do
ln -s "$spec" "$specspath/$(basename "$spec")"
done
cp '${plists."Architectures.xcspec"}' "$specspath/Architectures.xcspec"
cp '${plists."PackageTypes.xcspec"}' "$specspath/PackageTypes.xcspec"
cp '${plists."ProductTypes.xcspec"}' "$specspath/ProductTypes.xcspec"
mkdir -p "$out/usr/bin"
ln -s '${xcbuild.xcrun}/bin/xcrun' "$out/usr/bin/xcrun"
# Include `libtool` in the toolchain, so `xcrun -find libtool` can find it without requiring `cctools.libtool`
# as a `nativeBuildInput`.
mkdir -p "$toolchainsPath/usr/bin"
ln -s '${cctools.libtool}/bin/${stdenv.cc.targetPrefix}libtool' "$toolchainsPath/usr/bin/libtool"
# Include additional binutils required by some packages (such as Chromium).
for tool in lipo nm otool size strip; do
ln -s '${darwin.binutils-unwrapped}/bin/${stdenv.cc.targetPrefix}'$tool "$toolchainsPath/usr/bin/$tool"
done
'';
}

View File

@@ -0,0 +1,24 @@
let
disallowedPackages = builtins.fromJSON (builtins.readFile ../metadata/disallowed-packages.json);
in
{
lib,
jq,
stdenv,
}:
self: super: {
# Remove headers and stubs for packages that are available in nixpkgs.
buildPhase = super.buildPhase or "" + ''
${lib.concatMapStringsSep "\n" (
pkg:
lib.concatLines (
[ ''echo "Removing headers and libraries from ${pkg.package}"'' ]
++ (map (header: "rm -rf -- usr/include/${header}") pkg.headers or [ ])
++ (map (framework: "rm -rf -- System/Library/Frameworks/${framework}") pkg.frameworks or [ ])
++ (map (library: "rm -rf -- usr/lib/${library}") pkg.libraries or [ ])
)
) disallowedPackages}
'';
}

View File

@@ -0,0 +1,9 @@
{ }:
self: super: {
buildPhase = ''
runHook preBuild
${super.buildPhase or ""}
runHook postBuild
'';
}

View File

@@ -0,0 +1,892 @@
{
"11.3": {
"CarbonHeaders": {
"hash": "sha256-nIPXnLr21yVnpBhx9K5q3l/nPARA6JL/dED08MeyhP8=",
"version": "18.1"
},
"CommonCrypto": {
"hash": "sha256-92v9tuNLqvalwYV4AqQllA8yN9fqGjSpc4MNAmFPrbk=",
"version": "60178.100.1"
},
"IOAudioFamily": {
"hash": "sha256-dSSbt9ZoL/Tq2xXwvvXsDmD3Xru7igzdK1MxGL1K+Aw=",
"version": "300.6.1"
},
"IOBDStorageFamily": {
"hash": "sha256-UgLMsQBe1QLzlbScmPmASBN7VH4YBmNOUX2CEDezjmE=",
"version": "20.100.1"
},
"IOCDStorageFamily": {
"hash": "sha256-w0YhZ38RBfnxSc74Q8r5UdK+WiWOSAX46r5hahHLnSg=",
"version": "59"
},
"IODVDStorageFamily": {
"hash": "sha256-1Sa8aZBGNtqJBNHva+YXxET6Wcdm2PgVrTzYT/8qrN4=",
"version": "43"
},
"IOFWDVComponents": {
"hash": "sha256-WkfkWnzRupEh20U7vjsTta89clhus6GTkOpXQWXw/bM=",
"version": "208"
},
"IOFireWireAVC": {
"hash": "sha256-7H3WcZC/HuS9xsTNDWRqt+1JzUNK4ndvd4u2ru0GGRE=",
"version": "428"
},
"IOFireWireFamily": {
"hash": "sha256-2xppN8RJ9cxrHWjPQ4bUIjtupPbzfmrm3rXnT/9QVfc=",
"version": "483"
},
"IOFireWireSBP2": {
"hash": "sha256-kfhmZy8veqI3/XHDtOTKmKj6P7s+j0B+BiAbcjhGq0M=",
"version": "442"
},
"IOFireWireSerialBusProtocolTransport": {
"hash": "sha256-WDq2Ak72Jw6gYNIKgZkiexA6LzccrPn1kpSbW5U50ek=",
"version": "257.40.1"
},
"IOGraphics": {
"hash": "sha256-kEP4RWIZwu3ZPIq9IAPUKM0gIXHr8xD50SnGNFCQRcI=",
"version": "585.1"
},
"IOHIDFamily": {
"hash": "sha256-QASfvttke+AUx55In4DD4vsQGzC3nbe+MugQQ4ddXGU=",
"version": "1633.100.36"
},
"IOKitUser": {
"hash": "sha256-NQCRrufElx00B7CqqslBi5BTxf5Zs4lcMcJig4Eab0k=",
"version": "1845.100.19"
},
"IONetworkingFamily": {
"hash": "sha256-HqTKzrX75mMFYYbxNKwPdXmI7h7t/QWuO3W1Qo//zIo=",
"version": "151.40.1"
},
"IOSerialFamily": {
"hash": "sha256-wVS4QTx6MBOS0VrwyCZ3s5Usezwaf8rWzmNnfdDTXTU=",
"version": "93"
},
"IOStorageFamily": {
"hash": "sha256-dy6CYz/z6SwPw0YfC6GLZO2u62Xy8otMDUNrZ5JhTDY=",
"version": "260.100.1"
},
"IOUSBFamily": {
"hash": "sha256-Z0E3TfKP49toYo1Fo9kElRap8CZ+mVDHy5RIexgJTpA=",
"version": "630.4.5"
},
"Libc": {
"hash": "sha256-v01g/EtMW/STZQ1neKDMyUGL7sgaCzlwXN0VDaj/Mf0=",
"version": "1439.100.3"
},
"Libinfo": {
"hash": "sha256-T7KO6zfswjyTIKSdZJCbvfsdqQfPMLj5nheX9iSIl9o=",
"version": "542.40.3"
},
"Libm": {
"hash": "sha256-p4BndAag9d0XSMYWQ+c4myGv5qXbKx5E1VghudSbpTk=",
"version": "2026"
},
"Libnotify": {
"hash": "sha256-vcDjdwB5OiTEUdl8ISezzpoHeFttkdvkulY/YbUOZjk=",
"version": "279.40.4"
},
"Librpcsvc": {
"hash": "sha256-8e8E9TkRTAep3/miyqhF/mSkNdlym12W+AVhXF94+Bg=",
"version": "26"
},
"Libsystem": {
"hash": "sha256-24T9aD4W71prcpr3MnnaU3pfxIzIwkOz39OyhCwPO/E=",
"version": "1292.100.5"
},
"OpenDirectory": {
"hash": "sha256-6fSl8PasCZSBfe0ftaePcBuSEO3syb6kK+mfDI6iR7A=",
"version": "146"
},
"Security": {
"hash": "sha256-o5MyyqDpERvNPvbEfXNgqMIq0YpQV0+ju72C9g/9OdI=",
"version": "59754.100.106"
},
"architecture": {
"hash": "sha256-pIX9pEXE1Xjll9qwiWrMRwqw6G4g0isto/ALHsmkUSc=",
"version": "279"
},
"configd": {
"hash": "sha256-WEorIW5Vl8E9/aB0RBTY2bhkfVOF3tckjNztGDOOueA=",
"version": "1109.101.1"
},
"copyfile": {
"hash": "sha256-3BHFM67dvwUpinzF0pSX3QiUbIsqtLo77WzB3tMbTW4=",
"version": "173.40.2"
},
"dtrace": {
"hash": "sha256-FfyaYjEMDeL9wGdUyZ4eJdkbkp/WpdTGyBvaorwKSi8=",
"version": "370.40.1"
},
"dyld": {
"hash": "sha256-dtDTh6YqubBI4Z+QeytwGgUmU6tutvonIWHqzw6zuxo=",
"version": "851.27"
},
"eap8021x": {
"hash": "sha256-Ap7qumn/oKYe424n2NW6QkuivgDyLoJgDfl30Q5O7Jo=",
"version": "304.100.1"
},
"hfs": {
"hash": "sha256-MSnc1pB8DcB+mn308snTD1uRQ7Ro4aWyFuLdWjHtAG4=",
"version": "556.100.11"
},
"launchd": {
"hash": "sha256-8mW9bnuHmRXCx9py8Wy28C5b2QPICW0rlAps5njYa00=",
"version": "842.1.4"
},
"libclosure": {
"hash": "sha256-UgmMnDUosaC2yI7IyQ7mkNwZ6/oft77ay+SmGSoycIw=",
"version": "79"
},
"libdispatch": {
"hash": "sha256-K8QL9NfjGsj8c0jbocKegmKBqydimpKu8yRXnQQqdH8=",
"version": "1271.100.5"
},
"libmalloc": {
"hash": "sha256-k3dJk7S0Lom3B28vRI9QxIuo0AOkd9OHzWO7MandfUw=",
"version": "317.100.9"
},
"libplatform": {
"hash": "sha256-BSIGgKj5B6Dr0KQiIl2LSA3+ZEhzk/snQeCauErcq6k=",
"version": "254.80.2"
},
"libpthread": {
"hash": "sha256-cGaDXLTztUYppbMvv41qj5RqONXfhfdHpt9dqY6+5Lc=",
"version": "454.100.8"
},
"mDNSResponder": {
"hash": "sha256-eqcv174vIwWYXrIhzph+KO1zG8TdK5jRFVgsaAlV9es=",
"version": "1310.100.10"
},
"objc4": {
"hash": "sha256-rqOPyN9S4KbMhCCVvtyEmGxTWzy+tsh0kfu3k47szXo=",
"version": "818.2"
},
"ppp": {
"hash": "sha256-pSOlu/yXQhopCHDLnmhUnQeU89MkXhkQB0ZrN9r3qyk=",
"version": "877.40.2"
},
"removefile": {
"hash": "sha256-B79A9AQ1/cB+zlmVKWcEXVOJHW6rOrX40S/hrMuWqXU=",
"version": "49.101.1"
},
"xnu": {
"hash": "sha256-M1XWippH55VUJu4aosRFX8j9aOm/PONYVjPZOPufD80=",
"version": "7195.101.1"
}
},
"12.3": {
"CarbonHeaders": {
"hash": "sha256-nIPXnLr21yVnpBhx9K5q3l/nPARA6JL/dED08MeyhP8=",
"version": "18.1"
},
"CommonCrypto": {
"hash": "sha256-HTGBUE6vHjS80CFTiIQ8F17m8Yd2ZRHccvFu2CA2P9U=",
"version": "60191.100.1"
},
"IOAudioFamily": {
"hash": "sha256-CuBFZeX2JTKIab2xpp+Yvn66bCl4+aKOv9TvzJef20c=",
"version": "340.2"
},
"IOBDStorageFamily": {
"hash": "sha256-UgLMsQBe1QLzlbScmPmASBN7VH4YBmNOUX2CEDezjmE=",
"version": "22"
},
"IOCDStorageFamily": {
"hash": "sha256-p/2qM5zjXFDRb/DISpEHxQEdvmuLlRGt/Ygc71Yu2rI=",
"version": "61"
},
"IODVDStorageFamily": {
"hash": "sha256-1Sa8aZBGNtqJBNHva+YXxET6Wcdm2PgVrTzYT/8qrN4=",
"version": "43"
},
"IOFWDVComponents": {
"hash": "sha256-WkfkWnzRupEh20U7vjsTta89clhus6GTkOpXQWXw/bM=",
"version": "208"
},
"IOFireWireAVC": {
"hash": "sha256-ruAomp5Lv7zuPu9vHsNKoPtDvD1AIrRARsPMpcx/fh0=",
"version": "430"
},
"IOFireWireFamily": {
"hash": "sha256-W0KOF4hkA7kFOnL1ThAeFU/YlhFVqoqk9uzGjcBppX8=",
"version": "487"
},
"IOFireWireSBP2": {
"hash": "sha256-bItnRQIaGUxMyiU0q+4N8e5+jYiDEOUPmsrKhBFXvok=",
"version": "445"
},
"IOFireWireSerialBusProtocolTransport": {
"hash": "sha256-P7egeaD9SSa+YyrIRzM44gILKbIL7vezXK3M6q3MBOI=",
"version": "260"
},
"IOGraphics": {
"hash": "sha256-lzxBrPLlF01+2jFKRJtSnwpf0r05C0H3tM7Q0N1RUPA=",
"version": "594"
},
"IOHIDFamily": {
"hash": "sha256-EQQHAS8WKUoTxZscixylc2ZMoD4UYBlHRUj2O7Ikgac=",
"version": "1787.100.13"
},
"IOKitUser": {
"hash": "sha256-Cdfa/YXM0W4O15femcU0G1Xcpbm+iADWIBWIdzoeuTE=",
"version": "1955.100.5"
},
"IONetworkingFamily": {
"hash": "sha256-odUZJQq8lb3UYk7F8dBi1Hds00M+kwdlyGwZkVkSwTg=",
"version": "160.100.2"
},
"IOSerialFamily": {
"hash": "sha256-wVS4QTx6MBOS0VrwyCZ3s5Usezwaf8rWzmNnfdDTXTU=",
"version": "93"
},
"IOStorageFamily": {
"hash": "sha256-2b32qe1z7Z+Od1dVlAGdM142DdF8cBaRC+ElysSuAQ4=",
"version": "290.100.6"
},
"IOUSBFamily": {
"hash": "sha256-Z0E3TfKP49toYo1Fo9kElRap8CZ+mVDHy5RIexgJTpA=",
"version": "630.4.5"
},
"Libc": {
"hash": "sha256-obalDxsbE+7gm7YwznUbfxL7MCriamQFP3DrXleNwU4=",
"version": "1507.100.9"
},
"Libinfo": {
"hash": "sha256-OjnnSHEcifcWarVyXiHvYg/9jbCQy5/lzaq6fJRriy0=",
"version": "554"
},
"Libm": {
"hash": "sha256-p4BndAag9d0XSMYWQ+c4myGv5qXbKx5E1VghudSbpTk=",
"version": "2026"
},
"Libnotify": {
"hash": "sha256-JXG0kHEdoIs6krVZ4+KsRVES4AuNjnQi8qF+XKSp5jE=",
"version": "301"
},
"Librpcsvc": {
"hash": "sha256-8e8E9TkRTAep3/miyqhF/mSkNdlym12W+AVhXF94+Bg=",
"version": "26"
},
"Libsystem": {
"hash": "sha256-mPPAxo67wWLtemO+PuKg1Ui0zKEfjnYVj/qX1/0kNBs=",
"version": "1311.100.3"
},
"OpenDirectory": {
"hash": "sha256-6fSl8PasCZSBfe0ftaePcBuSEO3syb6kK+mfDI6iR7A=",
"version": "146"
},
"Security": {
"hash": "sha256-cIqfXcfQOZonxaKndH80xC5YmmveHw+TxHOxqvc9u8I=",
"version": "60158.100.133"
},
"architecture": {
"hash": "sha256-PRNUrhzSOrwmxSPkKmV0LV7yEIik65sdkfKdBqcwFhU=",
"version": "280.100.2"
},
"configd": {
"hash": "sha256-X34mjXdil4HeBLyqY4tyBWdmpjsOFTJDdDE81UQf708=",
"version": "1163.100.19.0.2"
},
"copyfile": {
"hash": "sha256-3/zI3j/m9b13hebjCsOLry3Mf8ADdWJgrtQOdD0huG0=",
"version": "180.100.3"
},
"dtrace": {
"hash": "sha256-q8H6slCN4RwJ5TxC5s3og6cIbjALySP5ODfVw6a/a+M=",
"version": "375"
},
"dyld": {
"hash": "sha256-v1kk/Z3eI2sufNm2rx3FRbA/f9BeKJ3t9i9W7tTksXg=",
"version": "955"
},
"eap8021x": {
"hash": "sha256-SayP1d2KWoRShykBA/NrQCuRnPoxlTiaLwifoqm0Gkg=",
"version": "315.100.2"
},
"hfs": {
"hash": "sha256-q1yOIei98oudGAoBMNPRTV5EOYpXFL7iYmlCYsKsG0o=",
"version": "583.100.10"
},
"launchd": {
"hash": "sha256-8mW9bnuHmRXCx9py8Wy28C5b2QPICW0rlAps5njYa00=",
"version": "842.1.4"
},
"libclosure": {
"hash": "sha256-Ez75a0m+fJas7mGqFeDjjpc7sFDnyirRbtLMTYQDVxw=",
"version": "79.1"
},
"libdispatch": {
"hash": "sha256-/VbSUtnWyToWOUyAAg/3wImbJ2w5k1tbJkt827x2lIE=",
"version": "1325.100.36"
},
"libmalloc": {
"hash": "sha256-tyYce5nk0N923MbzoGzkGqunoKwArbTiZl8PCppYpso=",
"version": "374.100.5"
},
"libplatform": {
"hash": "sha256-JUD2NdS310OhZ0F8gnOvoD8AgEtWRtPahKDw5iE2QJU=",
"version": "273.100.5"
},
"libpthread": {
"hash": "sha256-al8QumtH7/D04oJ4LUSYW+6OdX0Ko3S3rwYU53n9/54=",
"version": "486.100.11"
},
"mDNSResponder": {
"hash": "sha256-hsV0VYTPoO5YpaxrUXpXFy97LxlERzrQT0FRfCMOwic=",
"version": "1557.101.2"
},
"objc4": {
"hash": "sha256-MKXnfZL46VtmAQMolqd7ATF9fYjCNstapGQfcH4uVwo=",
"version": "841.13"
},
"ppp": {
"hash": "sha256-YyCE19T3rcM1G5jdXuYXuBXblJgR/nelvjpq+9maMhw=",
"version": "884"
},
"removefile": {
"hash": "sha256-xF1VtTUhoiGsFQsvuFnFYemwiCdsKeriFJv51vRLqmw=",
"version": "60"
},
"xnu": {
"hash": "sha256-bfFmDfRBSvoWMdQYVstsJRbcq+15lDjVFqk+0XYWpy8=",
"version": "8020.101.4"
}
},
"13.3": {
"CarbonHeaders": {
"hash": "sha256-nIPXnLr21yVnpBhx9K5q3l/nPARA6JL/dED08MeyhP8=",
"version": "18.1"
},
"CommonCrypto": {
"hash": "sha256-tftAQbs5xIOc5VZLVAKXAUvle9WO/i33/pQ3D64l/yI=",
"version": "600016.100.4"
},
"IOAudioFamily": {
"hash": "sha256-CuBFZeX2JTKIab2xpp+Yvn66bCl4+aKOv9TvzJef20c=",
"version": "440.2"
},
"IOBDStorageFamily": {
"hash": "sha256-UgLMsQBe1QLzlbScmPmASBN7VH4YBmNOUX2CEDezjmE=",
"version": "22"
},
"IOCDStorageFamily": {
"hash": "sha256-p/2qM5zjXFDRb/DISpEHxQEdvmuLlRGt/Ygc71Yu2rI=",
"version": "61"
},
"IODVDStorageFamily": {
"hash": "sha256-1Sa8aZBGNtqJBNHva+YXxET6Wcdm2PgVrTzYT/8qrN4=",
"version": "43"
},
"IOFWDVComponents": {
"hash": "sha256-WkfkWnzRupEh20U7vjsTta89clhus6GTkOpXQWXw/bM=",
"version": "208"
},
"IOFireWireAVC": {
"hash": "sha256-IUytBKhhCgg0vtI+7q8d5kxpOUgO3tQD7TMy++jrorc=",
"version": "431"
},
"IOFireWireFamily": {
"hash": "sha256-W0KOF4hkA7kFOnL1ThAeFU/YlhFVqoqk9uzGjcBppX8=",
"version": "487"
},
"IOFireWireSBP2": {
"hash": "sha256-bItnRQIaGUxMyiU0q+4N8e5+jYiDEOUPmsrKhBFXvok=",
"version": "445"
},
"IOFireWireSerialBusProtocolTransport": {
"hash": "sha256-P7egeaD9SSa+YyrIRzM44gILKbIL7vezXK3M6q3MBOI=",
"version": "260"
},
"IOGraphics": {
"hash": "sha256-KubCz8DNwf1WuF7LrtARM2VJugFDP0wfHoUhnIz/faQ=",
"version": "596.1"
},
"IOHIDFamily": {
"hash": "sha256-7UFMBdF5k9aVFVuoL2riozzKmn8uOt87Aitt8j6XkN8=",
"version": "1915.100.21"
},
"IOKitUser": {
"hash": "sha256-hgFRHPAuoqSf6aRUBUyfU2y2+dBUA34DKwLHLwhPNms=",
"version": "2022.100.19"
},
"IONetworkingFamily": {
"hash": "sha256-SwZvXLSB9cMHssZU4dCogGVoV64qYdGN1CGYV3FZ6tk=",
"version": "170"
},
"IOSerialFamily": {
"hash": "sha256-wVS4QTx6MBOS0VrwyCZ3s5Usezwaf8rWzmNnfdDTXTU=",
"version": "93"
},
"IOStorageFamily": {
"hash": "sha256-g4oCrxM5VtHm8h1M+zM81Ar1LsaaiJZLej5fT8EHPG4=",
"version": "302.100.1"
},
"IOUSBFamily": {
"hash": "sha256-Z0E3TfKP49toYo1Fo9kElRap8CZ+mVDHy5RIexgJTpA=",
"version": "630.4.5"
},
"Libc": {
"hash": "sha256-dqbdWtBuaRq3IHnSUPH2aj8h/X4zCwUNSOeSdwfKvN8=",
"version": "1534.100.14"
},
"Libinfo": {
"hash": "sha256-iUyndeUXx7FFZ/jgJ6jRwda3IChOaMs4dZW/ISuAJ1E=",
"version": "564.101.1"
},
"Libm": {
"hash": "sha256-p4BndAag9d0XSMYWQ+c4myGv5qXbKx5E1VghudSbpTk=",
"version": "2026"
},
"Libnotify": {
"hash": "sha256-7AwTfogvCUMdoabxf413ENWXtFTOM6AUldccoPQ89sU=",
"version": "312"
},
"Librpcsvc": {
"hash": "sha256-UWYdCQ9QsBqwM01bWr+igINAHSdSluB/FrOclC5AjTI=",
"version": "31"
},
"Libsystem": {
"hash": "sha256-IIksf0yCg3GdME3HofYzD1MRC+ofsPhHcxddmNd7V2M=",
"version": "1319.100.3"
},
"OpenDirectory": {
"hash": "sha256-6fSl8PasCZSBfe0ftaePcBuSEO3syb6kK+mfDI6iR7A=",
"version": "146"
},
"Security": {
"hash": "sha256-lPq58QIx+H9DouTXAUJSMf1X7dj9V6xu3c8VWr2R1IY=",
"version": "60420.101.4"
},
"architecture": {
"hash": "sha256-PRNUrhzSOrwmxSPkKmV0LV7yEIik65sdkfKdBqcwFhU=",
"version": "282"
},
"configd": {
"hash": "sha256-M/fRAnUw2wObhCQp9a6zQbCGhACCQHpju4/1+KGlkjg=",
"version": "1241.100.11"
},
"copyfile": {
"hash": "sha256-te3WcQudrXPqnTM1s/AtsTdu7VIXf5dIASy+IGnIxv0=",
"version": "191.100.3"
},
"dtrace": {
"hash": "sha256-7jAG66hG9qmqpRbECazMD1Pyi53CWTOGNnZca1NpcxE=",
"version": "397"
},
"dyld": {
"hash": "sha256-OkDOTV86EB44LxsqwTD4ZncMcr7iqSHXxw+6U+AP7oU=",
"version": "1066.8"
},
"eap8021x": {
"hash": "sha256-FMG+IGVPpcwrRe2/OKpFycrY/EFPZkge2vX61NgorGg=",
"version": "336.100.6"
},
"hfs": {
"hash": "sha256-Au5VDrYRBerI1I6rjC0lVDwB5IBwGARrAdcTI4M+Fx0=",
"version": "627.100.6"
},
"launchd": {
"hash": "sha256-8mW9bnuHmRXCx9py8Wy28C5b2QPICW0rlAps5njYa00=",
"version": "842.1.4"
},
"libclosure": {
"hash": "sha256-V1tpp/XG6baETunJt029rI6wp6moYSnFprt+bNGaQ40=",
"version": "87"
},
"libdispatch": {
"hash": "sha256-d1VObN11bNdtNJlZQqp2y8yP4lit5Wbj+4/aN3StsPc=",
"version": "1415.100.11"
},
"libmalloc": {
"hash": "sha256-jcR1AO/chcZzfAvELkC+U3q9tzxqPdwgLcHrnkQmN4M=",
"version": "425.100.7"
},
"libplatform": {
"hash": "sha256-+BB23YGGT0hA326Dh+3k2UvAqBdEJ84A6yGA/ccrihg=",
"version": "292.100.1"
},
"libpthread": {
"hash": "sha256-/l17vMWhfAs0YhIHi+l84vGVxpGFOzocvxxii7B+WUk=",
"version": "514.100.2"
},
"mDNSResponder": {
"hash": "sha256-M4yfQsdlKwes5M2QOEEfjv7ldSVZw7oGXLISaDcObjs=",
"version": "1807.101.2"
},
"objc4": {
"hash": "sha256-qOV9YfP59WP8Izp+IvM/aiYTW8fCoq21uxU64OcIHk8=",
"version": "876"
},
"ppp": {
"hash": "sha256-Sg5c5qOSk5TaS4pgXZ+eAy/iuGBa1oFML0dkj463DcE=",
"version": "1010"
},
"removefile": {
"hash": "sha256-oQorWHlJ0ctekCTUsLXHko8k1aCKBJ00A2FHkRd4B3E=",
"version": "68"
},
"xnu": {
"hash": "sha256-w9/lDZ/E54YzYQkOWptNpX5GomgI/fvZLAy7NY3O+IQ=",
"version": "8796.101.5"
}
},
"14.4": {
"CarbonHeaders": {
"hash": "sha256-nIPXnLr21yVnpBhx9K5q3l/nPARA6JL/dED08MeyhP8=",
"version": "18.1"
},
"CommonCrypto": {
"hash": "sha256-/VoOR9wJuKnmGE1CWGGXxX8SpmALHnEooNTa3QM+ITc=",
"version": "600028.100.1"
},
"IOAudioFamily": {
"hash": "sha256-VSk3jvsITJugtL67Qt0m4qJ879i7Fj6B/NGBFVCwpiU=",
"version": "540.3"
},
"IOBDStorageFamily": {
"hash": "sha256-UgLMsQBe1QLzlbScmPmASBN7VH4YBmNOUX2CEDezjmE=",
"version": "22"
},
"IOCDStorageFamily": {
"hash": "sha256-p/2qM5zjXFDRb/DISpEHxQEdvmuLlRGt/Ygc71Yu2rI=",
"version": "61"
},
"IODVDStorageFamily": {
"hash": "sha256-1Sa8aZBGNtqJBNHva+YXxET6Wcdm2PgVrTzYT/8qrN4=",
"version": "45"
},
"IOFWDVComponents": {
"hash": "sha256-WkfkWnzRupEh20U7vjsTta89clhus6GTkOpXQWXw/bM=",
"version": "208"
},
"IOFireWireAVC": {
"hash": "sha256-IUytBKhhCgg0vtI+7q8d5kxpOUgO3tQD7TMy++jrorc=",
"version": "431"
},
"IOFireWireFamily": {
"hash": "sha256-W0KOF4hkA7kFOnL1ThAeFU/YlhFVqoqk9uzGjcBppX8=",
"version": "487"
},
"IOFireWireSBP2": {
"hash": "sha256-bItnRQIaGUxMyiU0q+4N8e5+jYiDEOUPmsrKhBFXvok=",
"version": "445"
},
"IOFireWireSerialBusProtocolTransport": {
"hash": "sha256-P7egeaD9SSa+YyrIRzM44gILKbIL7vezXK3M6q3MBOI=",
"version": "260"
},
"IOGraphics": {
"hash": "sha256-Ag37fd3tZJLXLVq1yzHOCWGOYYfwwTkC8hnvNaTEaWg=",
"version": "598"
},
"IOHIDFamily": {
"hash": "sha256-fmYTJsquAOBwzsgRmqPyjSJJi1hGcfnMmqLIcTe8W1s=",
"version": "2031.100.16"
},
"IOKitUser": {
"hash": "sha256-1bqRiLvyr2GQfbWwhXHXXIOtIka9YDw5GbKV6bd2k4k=",
"version": "100076.101.1"
},
"IONetworkingFamily": {
"hash": "sha256-J3cLeWKrQ8ypIaqgwRH9eU5JbjEDBVoezj3a2Lvwu5k=",
"version": "177"
},
"IOSerialFamily": {
"hash": "sha256-wVS4QTx6MBOS0VrwyCZ3s5Usezwaf8rWzmNnfdDTXTU=",
"version": "93"
},
"IOStorageFamily": {
"hash": "sha256-cllpJX11c3CX8zEYdOT2TC63sx7NUAHh33yRHhrG2Ro=",
"version": "315"
},
"IOUSBFamily": {
"hash": "sha256-Z0E3TfKP49toYo1Fo9kElRap8CZ+mVDHy5RIexgJTpA=",
"version": "630.4.5"
},
"Libc": {
"hash": "sha256-fxBM4KbPwQNVEJl7PCKP+1nUk9Oce/O2+0lVBxyngew=",
"version": "1592.100.35"
},
"Libinfo": {
"hash": "sha256-zZr6Mmou8Q+G6/wS+k0k7R+XirB94TNCUGS5dhi96ZE=",
"version": "583.0.1"
},
"Libm": {
"hash": "sha256-p4BndAag9d0XSMYWQ+c4myGv5qXbKx5E1VghudSbpTk=",
"version": "2026"
},
"Libnotify": {
"hash": "sha256-7X+6S3C7ZOTXJUeDXOOg5EmoZyLZvtE06x3Is0TGgSU=",
"version": "317.100.2"
},
"Librpcsvc": {
"hash": "sha256-UWYdCQ9QsBqwM01bWr+igINAHSdSluB/FrOclC5AjTI=",
"version": "31"
},
"Libsystem": {
"hash": "sha256-HsItciWrwyXujQ2hwqzv0JKOkkuynXYIqejLAEPJbMc=",
"version": "1345.100.2"
},
"OpenDirectory": {
"hash": "sha256-6fSl8PasCZSBfe0ftaePcBuSEO3syb6kK+mfDI6iR7A=",
"version": "146"
},
"Security": {
"hash": "sha256-NgTGbaw5JkpboDQpt1fSgUr9NYGS+bIOrEMQX7mLAME=",
"version": "61123.100.169"
},
"architecture": {
"hash": "sha256-PRNUrhzSOrwmxSPkKmV0LV7yEIik65sdkfKdBqcwFhU=",
"version": "282"
},
"configd": {
"hash": "sha256-+3xesYxqfsNjWCW3T87OA7+Z1hBqmGEh/I8kP8Ajbso=",
"version": "1300.100.9"
},
"copyfile": {
"hash": "sha256-rSCTgzdHr7QmnPk9rJ9P4fOAolnEQv8PHfgAY+qA0s4=",
"version": "196.100.4"
},
"dtrace": {
"hash": "sha256-04Q35rCKnM5Csv5poFJKpK0VplWq4hvy251/Cb2Kl80=",
"version": "401.100.3"
},
"dyld": {
"hash": "sha256-6P/Da6xP19vmaCROoYv9pl7DaW3/U+qZBJT8PD33bn0=",
"version": "1160.6"
},
"eap8021x": {
"hash": "sha256-Ky6KSlJhyX1NRufGhVBcp+ZFmqYrAxwC/5QvJhC2PhU=",
"version": "354.100.3"
},
"hfs": {
"hash": "sha256-+YUVOttZU7C8I14CC6t3ZH2KxAjjTA2nB0y5bPgLxZM=",
"version": "650.0.2"
},
"launchd": {
"hash": "sha256-8mW9bnuHmRXCx9py8Wy28C5b2QPICW0rlAps5njYa00=",
"version": "842.1.4"
},
"libclosure": {
"hash": "sha256-M/jnIHzKYvdFCO0tJ1JXiD/UcZtJhLIoulaCQQUbn30=",
"version": "90"
},
"libdispatch": {
"hash": "sha256-igqIA5DMVHjG30WMHZZpYY7LRM9hZyMWItD+UxeTehY=",
"version": "1477.100.9"
},
"libmalloc": {
"hash": "sha256-Sh4/z7lGWRMldOPURkP5vLOAb5Ou6AUsVJEWz9wk9hI=",
"version": "521.100.59"
},
"libplatform": {
"hash": "sha256-gojt3sWOr7XO2yYI/B1CmNLTPFieSfoNtlOgQahOCok=",
"version": "316.100.10"
},
"libpthread": {
"hash": "sha256-phjfN8+IU8ibPsflR6LktnSi3giy89ghI+cFyrhiQNo=",
"version": "519.101.1"
},
"mDNSResponder": {
"hash": "sha256-0ECbWeMnIRTsi03BeBEe5boyR/84JJPbxzPQze8hHSA=",
"version": "2200.100.94.0.2"
},
"objc4": {
"hash": "sha256-eUVSpbyTEOMEdHoxSv6lZIZwB+cW/YWIaTZTcHgGOjo=",
"version": "912.3"
},
"ppp": {
"hash": "sha256-8+QUA79sHf85yvGSPE9qCmGsrZDT3NZnbgZVroJw/Hg=",
"version": "1016"
},
"removefile": {
"hash": "sha256-L6I0u8S3h3uV1veKA5HvkSebbBCd78ymlf//KWbebZo=",
"version": "70.100.4"
},
"xnu": {
"hash": "sha256-j5Ep1RX5DTJqTGszrF4d/JtzUqZ6nA6XoExqcIQ0RVQ=",
"version": "10063.101.15"
}
},
"15.5": {
"CarbonHeaders": {
"hash": "sha256-nIPXnLr21yVnpBhx9K5q3l/nPARA6JL/dED08MeyhP8=",
"version": "18.1"
},
"CommonCrypto": {
"hash": "sha256-+qAwL6+s7di9cX/qXtapLkjCFoDuZaSYltRJEG4qekM=",
"version": "600035"
},
"IOAudioFamily": {
"hash": "sha256-VSk3jvsITJugtL67Qt0m4qJ879i7Fj6B/NGBFVCwpiU=",
"version": "600.2"
},
"IOBDStorageFamily": {
"hash": "sha256-s8hTwX0jq2iPULfBLUwpzqtszWuvJrrLGbmrKa/fY4U=",
"version": "24"
},
"IOCDStorageFamily": {
"hash": "sha256-p/2qM5zjXFDRb/DISpEHxQEdvmuLlRGt/Ygc71Yu2rI=",
"version": "62"
},
"IODVDStorageFamily": {
"hash": "sha256-1Sa8aZBGNtqJBNHva+YXxET6Wcdm2PgVrTzYT/8qrN4=",
"version": "46"
},
"IOFWDVComponents": {
"hash": "sha256-WkfkWnzRupEh20U7vjsTta89clhus6GTkOpXQWXw/bM=",
"version": "208"
},
"IOFireWireAVC": {
"hash": "sha256-qR9lSTa7PN5Z9Nis4tfuXlcZGMIU48dete/NPD0UBbE=",
"version": "434"
},
"IOFireWireFamily": {
"hash": "sha256-hmErAXjLWIelqJaCrB8J4IiIxyB7S6EHFY+AY9YhmKQ=",
"version": "490"
},
"IOFireWireSBP2": {
"hash": "sha256-Xk+PDnUaO9q46nQwHwTKf/QXtGclfs0wTWiUbcV7e4s=",
"version": "452"
},
"IOFireWireSerialBusProtocolTransport": {
"hash": "sha256-P7egeaD9SSa+YyrIRzM44gILKbIL7vezXK3M6q3MBOI=",
"version": "261"
},
"IOGraphics": {
"hash": "sha256-iysZE42mOKZbFxSZBNspaBTCRKEKK38DFGBxZWQxZxI=",
"version": "599"
},
"IOHIDFamily": {
"hash": "sha256-gEYPyjXgQ2ABGufCKPjmzMdNRLxhELkCvOURCokyTO4=",
"version": "2115.100.21"
},
"IOKitUser": {
"hash": "sha256-p32U+jHfwA/tqnjF4p1BmojghEXK8KxiflW3IHs2iIY=",
"version": "100150.120.2"
},
"IONetworkingFamily": {
"hash": "sha256-gZ7Dkk4Iu7AV9K2ioqSeJ1W7bTNxv77bmT18iv3ljLg=",
"version": "185"
},
"IOSerialFamily": {
"hash": "sha256-wVS4QTx6MBOS0VrwyCZ3s5Usezwaf8rWzmNnfdDTXTU=",
"version": "93"
},
"IOStorageFamily": {
"hash": "sha256-/0H0tqWUWkgYigYypucbc7lOCFYDuukwF9fvLEOhwOk=",
"version": "323"
},
"IOUSBFamily": {
"hash": "sha256-Z0E3TfKP49toYo1Fo9kElRap8CZ+mVDHy5RIexgJTpA=",
"version": "630.4.5"
},
"Libc": {
"hash": "sha256-nWDokN0Vr5pUyNGculnDOah9RNgHiWr3S13RSQLmZrc=",
"version": "1698.100.8"
},
"Libinfo": {
"hash": "sha256-UI5mGvzZ6BPafGYD6CrNAJAKjeJLB6urAS2lpB6X/Ec=",
"version": "597"
},
"Libm": {
"hash": "sha256-p4BndAag9d0XSMYWQ+c4myGv5qXbKx5E1VghudSbpTk=",
"version": "2026"
},
"Libnotify": {
"hash": "sha256-GDYMVi1034f9empq0YOuumQp/BDJ7phTb0Zl4KTY9xg=",
"version": "342"
},
"Librpcsvc": {
"hash": "sha256-UWYdCQ9QsBqwM01bWr+igINAHSdSluB/FrOclC5AjTI=",
"version": "31"
},
"Libsystem": {
"hash": "sha256-nawWJiu2IJ34ek5iOX6CrlqMzev7TuJpUkvDp30ZQ/U=",
"version": "1351"
},
"OpenDirectory": {
"hash": "sha256-6fSl8PasCZSBfe0ftaePcBuSEO3syb6kK+mfDI6iR7A=",
"version": "146"
},
"Security": {
"hash": "sha256-ZOrOOCk+hZbzDilzkihpQfsDpzV3Ul4zy6fpFRWUQHw=",
"version": "61439.120.27"
},
"architecture": {
"hash": "sha256-PRNUrhzSOrwmxSPkKmV0LV7yEIik65sdkfKdBqcwFhU=",
"version": "282"
},
"configd": {
"hash": "sha256-ZdUq1SrOwB88Lx68ekrA4zeVsLDZz4TAJywNnF+uAzY=",
"version": "1351.120.3"
},
"copyfile": {
"hash": "sha256-rLqT6e44W2ohgwUXREmiOyJBYCrV3gRLbtVnbUq60xc=",
"version": "221.121.1"
},
"dtrace": {
"hash": "sha256-iNEZyxK3DmEwO3gzrfvCaVZSEuuOMQm5IG/6FodPNdI=",
"version": "411"
},
"dyld": {
"hash": "sha256-4OOghgUYyMJbsTe96fiWCndTJ1BS94rK9v6Kqn/ooYs=",
"version": "1285.19"
},
"eap8021x": {
"hash": "sha256-Kx/wwnt108hDm0qQPyTNbZ8KoHkD5m7L4yb5qjSuQjI=",
"version": "365.120.2"
},
"hfs": {
"hash": "sha256-5/3Ycp3cKqlgAl1kjBmbF5tFlfJYQS5rbrbk4SS66b8=",
"version": "683.120.3"
},
"launchd": {
"hash": "sha256-8mW9bnuHmRXCx9py8Wy28C5b2QPICW0rlAps5njYa00=",
"version": "842.1.4"
},
"libclosure": {
"hash": "sha256-pvwfcbeEJmTEPdt6/lgVswiabLRG+sMN6VT5FwG7C4Q=",
"version": "96"
},
"libdispatch": {
"hash": "sha256-jTp2DolOOCQPBt1HRotkmPnKgQ2LGgniEqeHoM+vlKg=",
"version": "1521.120.4"
},
"libmalloc": {
"hash": "sha256-d9AVHSYTqHDlgctv8Hh4HAYW53MJelj4F8LWPsjrsws=",
"version": "715.120.13"
},
"libplatform": {
"hash": "sha256-gpijoTMvdkM0PdG8gyIllOJlh/MtTc4ro9ODDAhN6gM=",
"version": "349"
},
"libpthread": {
"hash": "sha256-N+MMXdbthsxauTTfZ5ElUs39dVH+Chn1yyU6pObZpkU=",
"version": "536"
},
"mDNSResponder": {
"hash": "sha256-ILx12PRxj/+VqfpCCErJFEJXFI9yzTh4g+FK0UCenIE=",
"version": "2600.120.12"
},
"objc4": {
"hash": "sha256-DMxa25gXjKCkiDnVJ/8SyJUjaBlmBGABg8EfCHcmTj0=",
"version": "940.4"
},
"ppp": {
"hash": "sha256-8+QUA79sHf85yvGSPE9qCmGsrZDT3NZnbgZVroJw/Hg=",
"version": "1016"
},
"removefile": {
"hash": "sha256-Z5UD0mk/s80CQB0PZWDzSl2JWXmnVmwUvlNb28+hR3k=",
"version": "81"
},
"xnu": {
"hash": "sha256-o4tCuCAIgAYg/Li3wTs12mVWr5C/4vbwu1zi+kJ9d6w=",
"version": "11417.121.6"
}
}
}

View File

@@ -0,0 +1,533 @@
[
{
"package": "apache",
"headers": [
"apache2"
]
},
{
"package": "apr",
"headers": [
"apr-1"
],
"libraries": [
"libapr-1.*",
"libaprutil-1.*"
]
},
{
"package": "boringssl",
"libraries": [
"libboringssl.*"
]
},
{
"package": "bzip2",
"headers": [
"bzlib.h"
],
"libraries": [
"libbz2.*"
]
},
{
"package": "corecrypto",
"libraries": [
"system/libcorecrypto*"
]
},
{
"package": "Csu",
"libraries": [
"*.o"
]
},
{
"package": "cups",
"headers": [
"cups"
],
"libraries": [
"libcups*"
]
},
{
"package": "curl",
"headers": [
"curl"
],
"libraries": [
"libcurl.*"
]
},
{
"package": "cyrus_sasl",
"headers": [
"sasl"
],
"libraries": [
"libsasl*"
]
},
{
"package": "editline",
"headers": [
"editline.h",
"editline"
],
"libraries": [
"libedit.*",
"libeditline.*"
]
},
{
"package": "html-tidy",
"headers": [
"tidy*"
],
"libraries": [
"libtidy.*"
]
},
{
"package": "hunspell",
"headers": [
"hunspell"
],
"libraries": [
"libhunspell*"
]
},
{
"package": "icu",
"headers": [
"unicode"
],
"libraries": [
"libicucore.*"
]
},
{
"package": "libarchive",
"headers": [
"archive.h",
"archive_entry.h"
],
"libraries": [
"libarchive.*"
]
},
{
"package": "libc++",
"headers": [
"c++",
"cxxabi.h",
"__cxxabi_config.h"
],
"libraries": [
"libc++*"
]
},
{
"package": "ld64",
"libraries": [
"libcodedirectory.*",
"libcodedirectory_static.*"
]
},
{
"package": "expat",
"headers": [
"expat.h",
"expat_config.h",
"expat_external.h"
],
"libraries": [
"libexpat.*"
]
},
{
"package": "libffi",
"headers": [
"ffi*"
],
"libraries": [
"libffi*"
]
},
{
"package": "libgcc",
"libraries": [
"libgcc*"
]
},
{
"package": "libiconv",
"headers": [
"iconv.h",
"libcharset.h",
"localcharset.h"
],
"libraries": [
"libcharset.*",
"libiconv.*",
"i18n"
]
},
{
"package": "libiodbc",
"libraries": [
"libiodbc*"
]
},
{
"package": "libkrb4",
"libraries": [
"libkrb4.*"
]
},
{
"package": "libkrb5",
"headers": [
"com_err.h",
"gssapi",
"gssapi.h",
"gssrpc",
"kadm5",
"kdb.h",
"krad.h",
"krb5",
"krb5.h",
"profile.h",
"verto-module.h",
"verto.h"
],
"libraries": [
"krb5",
"libcom_err.*",
"libgssapi_krb5.*",
"libgssrpc.*",
"libk5crypto.*",
"libkadm5clnt.*",
"libkadm5clnt_mit.*",
"libkadm5srv.*",
"libkadm5srv_mit.*",
"libkdb5.*",
"libkrad.*",
"libkrb5*",
"libkrb5support.*",
"libverto.*"
]
},
{
"package": "libpcap",
"headers": [
"pcap*"
],
"libraries": [
"libpcap.*"
]
},
{
"package": "libresolv",
"headers": [
"arpa/nameser.h",
"arpa/nameser_compat.h",
"dns.h",
"dns_util.h",
"nameser.h",
"resolv.h"
],
"libraries": [
"libresolv.*"
]
},
{
"package": "libstdc++",
"libraries": [
"libstdc++.*"
]
},
{
"package": "libsbuf",
"headers": [
"usbuf.h"
],
"libraries": [
"libsbuf.*"
]
},
{
"package": "libtermcap",
"headers": [
"termcap.h"
],
"libraries": [
"libtermcap.*"
]
},
{
"package": "libutil",
"headers": [
"libutil.h"
],
"libraries": [
"libutil.*",
"libutil1.*"
]
},
{
"package": "libxml2",
"headers": [
"libxml",
"libxml2"
],
"libraries": [
"libxml2.*"
]
},
{
"package": "libxo",
"headers": [
"libxo"
],
"libraries": [
"libxo.*"
]
},
{
"package": "libxslt",
"headers": [
"libexslt",
"libxslt"
],
"libraries": [
"libexslt.*",
"libxslt.*"
]
},
{
"package": "liby",
"libraries": [
"liby.a"
]
},
{
"package": "marisa-trie",
"libraries": [
"libmarisa.*"
]
},
{
"package": "ncurses",
"headers": [
"curses*",
"cursslk.h",
"eti.h",
"etip.h",
"form.h",
"menu.h",
"nc_tparm.h",
"ncurses*",
"panel.h",
"term.h",
"term_entry.h",
"termcap.h",
"tic.h",
"unctrl.h"
],
"libraries": [
"libcurses.*",
"libform.*",
"libformw.*",
"libmenu.*",
"libmenuw.*",
"libncurses.*",
"libncursesw.*",
"libpanel.*",
"libpanelw.*",
"libtinfo.*"
]
},
{
"package": "net-snmp",
"headers": [
"net-snmp"
],
"libraries": [
"libnetsnmp*"
]
},
{
"package": "nghttp",
"libraries": [
"lib*nghttp2.*"
]
},
{
"package": "openblas",
"headers": [
"cblas.h",
"f77blas.h",
"lapack.h",
"lapacke.h",
"lapacke_config.h",
"lapacke_mangling.h",
"lapacke_utils.h",
"openblas_config.h"
],
"libraries": [
"libblas.*",
"libcblas.*",
"libclapack.*",
"libf77lapack.*",
"liblapack.*",
"liblapacke.*",
"libopenblas.*",
"libopenblas.*",
"libopenblasp*"
]
},
{
"package": "openldap",
"libraries": [
"liblber.*",
"liblber_r.*",
"libldap.*",
"libldap_r.*"
]
},
{
"package": "openpam",
"headers": [
"security"
],
"libraries": [
"libpam.*",
"pam_*"
]
},
{
"package": "pcre",
"headers": [
"pcre.h",
"pcreposix.h"
],
"libraries": [
"libpcre.*",
"libpcre2*",
"libpcreposix.*"
]
},
{
"package": "php",
"headers": [
"php"
],
"libraries": [
"php"
]
},
{
"package": "postgresql",
"libraries": [
"libecpg*",
"libpg*",
"libpq*"
]
},
{
"package": "python",
"headers": [
"python*"
],
"frameworks": [
"Python.framework"
],
"libraries": [
"libpython*",
"python*"
]
},
{
"package": "readline",
"headers": [
"readline"
],
"libraries": [
"libhistory.*",
"libreadline.*"
]
},
{
"package": "ruby",
"frameworks": [
"Ruby.framework"
],
"libraries": [
"libruby.*",
"ruby"
]
},
{
"package": "sqlite3",
"headers": [
"sqlite3.h",
"sqlite3ext.h"
],
"libraries": [
"libsqlite3.*"
]
},
{
"package": "swift",
"libraries": [
"swift/shims"
]
},
{
"package": "tcl",
"headers": [
"tcl*",
"tk*"
],
"frameworks": [
"Tcl.framework",
"Tk.framework"
],
"libraries": [
"libtcl*",
"libtk*",
"tclConfig.sh",
"tkConfig.sh"
]
},
{
"package": "xar",
"headers": [
"xar"
],
"libraries": [
"libxar.*"
]
},
{
"package": "xz",
"headers": [
"lzma*"
],
"libraries": [
"liblzma.*"
]
},
{
"package": "zlib",
"headers": [
"zconf.h",
"zlib.h"
],
"libraries": [
"libz.*"
]
}
]

View File

@@ -0,0 +1,42 @@
{
"11": {
"urls": [
"https://swcdn.apple.com/content/downloads/02/62/071-54303-A_EU2CL1YVT7/943i95dpeyi2ghlnj2mgyq3t202t5gf18b/CLTools_macOSNMOS_SDK.pkg",
"https://web.archive.org/web/20250210235110/https://swcdn.apple.com/content/downloads/02/62/071-54303-A_EU2CL1YVT7/943i95dpeyi2ghlnj2mgyq3t202t5gf18b/CLTools_macOSNMOS_SDK.pkg"
],
"version": "11.3",
"hash": "sha256-/go8utcx3jprf6c8V/DUbXwsmNYSFchOAai1OaJs3Bg="
},
"12": {
"urls": [
"https://swcdn.apple.com/content/downloads/24/42/002-83793-A_74JRE8GVAT/rlnkct919wgc5c0pjq986z5bb9h62uvni2/CLTools_macOSNMOS_SDK.pkg",
"https://web.archive.org/web/20250210235341/https://swcdn.apple.com/content/downloads/24/42/002-83793-A_74JRE8GVAT/rlnkct919wgc5c0pjq986z5bb9h62uvni2/CLTools_macOSNMOS_SDK.pkg"
],
"version": "12.3",
"hash": "sha256-qG21ssNUmkqxPLTXALGP2N/RBHu8NMlI1dWvGlV+Wm8="
},
"13": {
"urls": [
"https://swcdn.apple.com/content/downloads/15/62/032-84673-A_7A1TG1RF8Z/xpc8q44ggn2pkn82iwr0fi1zeb9cxi8ath/CLTools_macOSNMOS_SDK.pkg",
"https://web.archive.org/web/20250210235949/https://swcdn.apple.com/content/downloads/15/62/032-84673-A_7A1TG1RF8Z/xpc8q44ggn2pkn82iwr0fi1zeb9cxi8ath/CLTools_macOSNMOS_SDK.pkg"
],
"version": "13.3",
"hash": "sha256-zZ4pbgoXunLGwdYDemxOfyH4CE5WGfMy2s5jN+0q4B4="
},
"14": {
"urls": [
"https://swcdn.apple.com/content/downloads/14/48/052-59890-A_I0F5YGAY0Y/p9n40hio7892gou31o1v031ng6fnm9sb3c/CLTools_macOSNMOS_SDK.pkg",
"https://web.archive.org/web/20250211001355/https://swcdn.apple.com/content/downloads/14/48/052-59890-A_I0F5YGAY0Y/p9n40hio7892gou31o1v031ng6fnm9sb3c/CLTools_macOSNMOS_SDK.pkg"
],
"version": "14.4",
"hash": "sha256-QozDiwY0Czc0g45vPD7G4v4Ra+3DujCJbSads3fJjjM="
},
"15": {
"urls": [
"https://swcdn.apple.com/content/downloads/52/01/082-41241-A_0747ZN8FHV/dectd075r63pppkkzsb75qk61s0lfee22j/CLTools_macOSNMOS_SDK.pkg",
"https://web.archive.org/web/20250530132510/https://swcdn.apple.com/content/downloads/52/01/082-41241-A_0747ZN8FHV/dectd075r63pppkkzsb75qk61s0lfee22j/CLTools_macOSNMOS_SDK.pkg"
],
"version": "15.5",
"hash": "sha256-HBiSJuw1XBUK5R/8Sj65c3rftSEvQl/O9ZZVp/g1Amo="
}
}

View File

@@ -0,0 +1,116 @@
let
sdkVersions = builtins.fromJSON (builtins.readFile ./metadata/versions.json);
in
{
lib,
stdenv,
stdenvNoCC,
substitute,
# Specifies the major version used for the SDK. Uses `hostPlatform.darwinSdkVersion` by default.
darwinSdkMajorVersion ? lib.versions.major stdenv.hostPlatform.darwinSdkVersion,
# Enabling bootstrap disables propagation. Defaults to `false` (meaning to propagate certain packages and `xcrun`)
# except in stage0 of the Darwin stdenv bootstrap.
enableBootstrap ? stdenv.name == "bootstrap-stage0-stdenv-darwin",
# Required by various phases
callPackage,
jq,
llvm,
}:
let
sdkInfo =
sdkVersions.${darwinSdkMajorVersion}
or (lib.throw "Unsupported SDK major version: ${darwinSdkMajorVersion}");
sdkVersion = sdkInfo.version;
fetchSDK = callPackage ./common/fetch-sdk.nix { };
phases = lib.composeManyExtensions (
[
(callPackage ./common/add-core-symbolication.nix { })
(callPackage ./common/derivation-options.nix { })
(callPackage ./common/passthru-private-frameworks.nix { inherit sdkVersion; })
(callPackage ./common/passthru-source-release-files.nix { inherit sdkVersion; })
(callPackage ./common/remove-disallowed-packages.nix { })
(callPackage ./common/process-stubs.nix { })
]
# Avoid infinite recursions by not propagating certain packages, so they can themselves build with the SDK.
++ lib.optionals (!enableBootstrap) [
(callPackage ./common/propagate-inputs.nix { })
(callPackage ./common/propagate-xcrun.nix { })
]
# This has to happen last.
++ [
(callPackage ./common/run-build-phase-hooks.nix { })
]
);
in
stdenvNoCC.mkDerivation (
lib.extends phases (finalAttrs: {
pname = "apple-sdk";
inherit (sdkInfo) version;
src = fetchSDK sdkInfo;
dontConfigure = true;
# TODO(@connorbaker):
# This is a quick fix unblock builds broken by https://github.com/NixOS/nixpkgs/pull/370750.
# Fails due to a reflexive symlink:
# $out/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk/System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/A
dontCheckForBrokenSymlinks = true;
strictDeps = true;
setupHooks = [
# `role.bash` is copied from `../build-support/setup-hooks/role.bash` due to the requirements not to reference
# paths outside the package when it is in `by-name`. It needs to be kept in sync, but it fortunately does not
# change often. Once `build-support` is available as a package (or some other mechanism), it should be changed
# to whatever that replacement is.
./setup-hooks/role.bash
(substitute {
src = ./setup-hooks/sdk-hook.sh;
substitutions = [
"--subst-var-by"
"sdkVersion"
(lib.escapeShellArgs (lib.splitVersion sdkVersion))
];
})
];
installPhase =
let
sdkName = "MacOSX${lib.versions.majorMinor sdkVersion}.sdk";
sdkMajor = lib.versions.major sdkVersion;
in
''
runHook preInstall
mkdir -p "$sdkpath"
cp -rd . "$sdkpath/${sdkName}"
ln -s "${sdkName}" "$sdkpath/MacOSX${sdkMajor}.sdk"
ln -s "${sdkName}" "$sdkpath/MacOSX.sdk"
runHook postInstall
'';
passthru = {
sdkroot = finalAttrs.finalPackage + "/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk";
};
__structuredAttrs = true;
meta = {
description = "Frameworks and libraries required for building packages on Darwin";
homepage = "https://developer.apple.com";
teams = [ lib.teams.darwin ];
platforms = lib.platforms.darwin;
badPlatforms = [ lib.systems.inspect.patterns.is32bit ];
};
})
)

View File

@@ -0,0 +1,48 @@
From 6531da946949a94643e6d8424236174ae64fe0ca Mon Sep 17 00:00:00 2001
From: Randy Eckenrode <randy@largeandhighquality.com>
Date: Sat, 30 Sep 2023 18:02:39 -0400
Subject: [PATCH 1/2] Add function definitions needed to build zlog in
system_cmds
---
CoreSymbolication.h | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/CoreSymbolication.h b/CoreSymbolication.h
index a413860..f3cf63f 100644
--- a/CoreSymbolication.h
+++ b/CoreSymbolication.h
@@ -324,7 +324,9 @@ CSSymbolOwnerEditRelocations
CSSymbolOwnerForeachRegion
CSSymbolOwnerForeachRegionWithName
CSSymbolOwnerForeachSection
-CSSymbolOwnerForeachSegment
+*/
+void CSSymbolOwnerForeachSegment(CSSymbolOwnerRef owner, void (^block)(CSSegmentRef));
+/*
CSSymbolOwnerForeachSourceInfo
CSSymbolOwnerForeachSymbol
*/
@@ -333,7 +335,9 @@ void CSSymbolOwnerForeachSymbolWithName(CSSymbolOwnerRef owner, const char *sna
/*
CSSymbolOwnerGetArchitecture
CSSymbolOwnerGetBaseAddress
-CSSymbolOwnerGetCFUUIDBytes
+*/
+const CFUUIDBytes* CSSymbolOwnerGetCFUUIDBytes(CSSymbolOwnerRef owner);
+/*
CSSymbolOwnerGetCompatibilityVersion
CSSymbolOwnerGetCurrentVersion
CSSymbolOwnerGetDataFlags
@@ -390,7 +394,7 @@ CSSymbolOwnerSetLoadTimestamp
CSSymbolOwnerSetPath
CSSymbolOwnerSetRelocationCount
*/
-CSSymbolOwnerSetTransientUserData(CSSymbolOwnerRef owner, uint32_t gen);
+void CSSymbolOwnerSetTransientUserData(CSSymbolOwnerRef owner, uint32_t gen);
/*
CSSymbolOwnerSetUnloadTimestamp
*/
--
2.44.1

View File

@@ -0,0 +1,45 @@
From ae7ac6a7043dbae8e63d6ce5e63dfaf02b5977fe Mon Sep 17 00:00:00 2001
From: Randy Eckenrode <randy@largeandhighquality.com>
Date: Sat, 30 Sep 2023 18:37:18 -0400
Subject: [PATCH 2/2] Add CF_EXPORT To const symbols
---
CoreSymbolication.h | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/CoreSymbolication.h b/CoreSymbolication.h
index f3cf63f..4124a54 100644
--- a/CoreSymbolication.h
+++ b/CoreSymbolication.h
@@ -49,6 +49,7 @@
#include <CoreFoundation/CoreFoundation.h>
+#include <CoreFoundation/CFBase.h>
#include <mach/mach.h>
@@ -139,13 +140,13 @@ typedef void (^CSSegmentIterator)(CSSegmentRef segment);
* External symbols
*/
-const char* kCSRegionMachHeaderName;
-const CSDictionaryKeyCallBacks kCSTypeDictionaryKeyCallBacks;
-const CSDictionaryValueCallBacks kCSTypeDictionaryValueCallBacks;
-const CSDictionaryKeyCallBacks kCSTypeDictionaryWeakKeyCallBacks;
-const CSDictionaryValueCallBacks kCSTypeDictionaryWeakValueCallBacks;
-const CSSetCallBacks kCSTypeSetCallBacks;
-const CSSetCallBacks kCSTypeSetWeakCallBacks;
+CF_EXPORT const char* kCSRegionMachHeaderName;
+CF_EXPORT const CSDictionaryKeyCallBacks kCSTypeDictionaryKeyCallBacks;
+CF_EXPORT const CSDictionaryValueCallBacks kCSTypeDictionaryValueCallBacks;
+CF_EXPORT const CSDictionaryKeyCallBacks kCSTypeDictionaryWeakKeyCallBacks;
+CF_EXPORT const CSDictionaryValueCallBacks kCSTypeDictionaryWeakValueCallBacks;
+CF_EXPORT const CSSetCallBacks kCSTypeSetCallBacks;
+CF_EXPORT const CSSetCallBacks kCSTypeSetWeakCallBacks;
/*
--
2.44.1

View File

@@ -0,0 +1,41 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p coreutils curl file gzip jq xcbuild yq
set -eu -o pipefail
catalog=${1-}
if [ -z "$catalog" ]; then
echo "usage: get-sdks-from-catalog.sh <catalog>"
echo " <catalog> Apple software update catalog (may be gzipped)" >&2
exit 1
fi
scratch=$(mktemp)
trap 'rm -f -- "$scratch"' EXIT
if [[ "$(file "$catalog")" =~ gzip ]]; then
gzcat "$catalog" > "$scratch"
else
cp --reflink=auto "$catalog" "$scratch"
fi
# Grab all SDK packages from the catalog
filter='.Products[].Packages[] | select(.URL | test(".*CLTools_macOSNMOS_SDK.pkg")) | "\(.URL)|\(.MetadataURL)"'
declare -A package_list
for package in $(plutil -convert json -o - "$scratch" | jq -r "$filter"); do
package_list[${package%%|*}]=${package#*|}
done
truncate --size 0 "$scratch"
for pkg in "${!package_list[@]}"; do
ver=$(curl --silent "${package_list[$pkg]}" | xq -r '."pkg-info"."@version"')
echo "{\"url\": \"$pkg\", \"version\": \"$(cut -d. -f1-3 <<< "$ver")\", \"long_version\": \"$ver\"}" >> "$scratch"
done
jq -r --slurp '
group_by(.version | split(".")[0])
| map(max_by(.version))
| sort_by(.version)[]
| "Package URL: \(.url)\n Xcode Ver: \(.version) (\(.long_version))\n"' "$scratch"

View File

@@ -0,0 +1,69 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p coreutils curl git gnutar jq moreutils nix
set -eu -o pipefail
if [ ! -v 2 ]; then
echo "usage: lock-sdk-deps.sh <SDK version> <Packages>" >&2
echo " <SDK version> Decimal-separated version number." >&2
echo " Must correspond to a tag in https://github.com/apple-oss-distributions/distribution-macOS" >&2
echo " <Packages> List of packages from the distributions-macOS repository." >&2
echo " Packages not in the repository at the tag for <SDK version> will be ignored."
exit 1
fi
pkgdir=$(dirname "$(dirname "$(realpath "$0")")")
lockfile=$pkgdir/metadata/apple-oss-lockfile.json
if [ ! -e "$lockfile" ]; then
touch "$lockfile"
fi
workdir=$(mktemp -d)
trap 'rm -rf -- "$workdir"' EXIT
sdkVersion=$1; shift
tag="macos-${sdkVersion//.}"
declare -a packages=("$@")
echo "Locking versions for macOS $sdkVersion using tag '$tag'..."
pushd "$workdir" > /dev/null
git clone --branch "$tag" https://github.com/apple-oss-distributions/distribution-macOS.git &> /dev/null
cd distribution-macOS
for package in "${packages[@]}"; do
# If the tag exists in `release.json`, use that as an optimization to avoid downloading unnecessarily from Github.
packageTag=$(jq -r --arg package "$package" '.projects[] | select(.project == $package) | .tag' release.json)
packageCommit=$(git ls-tree -d HEAD "$package" | awk '{print $3}')
if [ ! -d "$package" ]; then
packageCommit=HEAD
fi
# However, sometimes it doesnt exist. In that case, fall back to cloning the repo and check manually
# which tag corresponds to the commit from the submodule.
if [ -z "$packageTag" ]; then
git clone --no-checkout "https://github.com/apple-oss-distributions/$package.git" ../source &> /dev/null
pushd ../source > /dev/null
packageTag=$(git tag --points-at "$packageCommit")
popd > /dev/null
rm -rf ../source
fi
packageVersion=${packageTag##"$package"-}
curl -OL "https://github.com/apple-oss-distributions/$package/archive/$packageTag.tar.gz" &> /dev/null
tar axf "$packageTag.tar.gz"
packageHash=$(nix --extra-experimental-features nix-command hash path "$package-$packageTag")
pkgsjson="{\"$sdkVersion\": {\"$package\": {\"version\": \"$packageVersion\", \"hash\": \"$packageHash\"}}}"
echo " - Locking $package to version $packageVersion with hash '$packageHash'"
jq --argjson pkg "$pkgsjson" -S '. * $pkg' "$lockfile" | sponge "$lockfile"
done
popd > /dev/null

View File

@@ -0,0 +1,62 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p coreutils jq
set -eu -o pipefail
pkgdir=$(dirname "$(dirname "$(realpath "$0")")")
echo '{}' > "$pkgdir/metadata/apple-oss-lockfile.json"
declare -a versions
readarray -t versions < <(jq -r '.[].version' "$pkgdir/metadata/versions.json")
declare -a packages=(
CarbonHeaders
CommonCrypto
IOAudioFamily
IOFireWireFamily
IOFWDVComponents
IOFireWireAVC
IOFireWireSBP2
IOFireWireSerialBusProtocolTransport
IOGraphics
IOHIDFamily
IONetworkingFamily
IOSerialFamily
IOStorageFamily
IOBDStorageFamily
IOCDStorageFamily
IODVDStorageFamily
IOUSBFamily
IOKitUser
Libc
Libinfo
Libm
Libnotify
Librpcsvc
Libsystem
OpenDirectory
Security
architecture
configd
copyfile
dtrace
dyld
eap8021x
hfs
launchd
libclosure
libdispatch
libmalloc
libplatform
libpthread
mDNSResponder
objc4
ppp
removefile
xnu
)
for version in "${versions[@]}"; do
"$pkgdir/scripts/lock-sdk-deps.sh" "$version" "${packages[@]}"
done

View File

@@ -0,0 +1,6 @@
function enablePrivateFrameworks() {
export NIX_CFLAGS_COMPILE+=" -iframework $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/PrivateFrameworks"
export NIX_LDFLAGS+=" -F$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/PrivateFrameworks"
}
preConfigureHooks+=(enablePrivateFrameworks)

View File

@@ -0,0 +1,71 @@
# Since the same derivation can be depended on in multiple ways, we need to
# accumulate *each* role (i.e. host and target platforms relative the depending
# derivation) in which the derivation is used.
#
# The role is intended to be used as part of other variables names like
# - $NIX_SOMETHING${role_post}
function getRole() {
case $1 in
-1)
role_post='_FOR_BUILD'
;;
0)
role_post=''
;;
1)
role_post='_FOR_TARGET'
;;
*)
echo "@name@: used as improper sort of dependency" >&2
return 1
;;
esac
}
# `hostOffset` describes how the host platform of the package is slid relative
# to the depending package. `targetOffset` likewise describes the target
# platform of the package. Both are brought into scope of the setup hook defined
# for dependency whose setup hook is being processed relative to the package
# being built.
function getHostRole() {
getRole "$hostOffset"
}
function getTargetRole() {
getRole "$targetOffset"
}
# `depHostOffset` describes how the host platform of the dependencies are slid
# relative to the depending package. `depTargetOffset` likewise describes the
# target platform of dependenices. Both are brought into scope of the
# environment hook defined for the dependency being applied relative to the
# package being built.
function getHostRoleEnvHook() {
getRole "$depHostOffset"
}
function getTargetRoleEnvHook() {
getRole "$depTargetOffset"
}
# This variant is intended specifically for code-producing tool wrapper scripts
# `NIX_@wrapperName@_TARGET_*_@suffixSalt@` tracks this (needs to be an exported
# env var so can't use fancier data structures).
function getTargetRoleWrapper() {
case $targetOffset in
-1)
export NIX_@wrapperName@_TARGET_BUILD_@suffixSalt@=1
;;
0)
export NIX_@wrapperName@_TARGET_HOST_@suffixSalt@=1
;;
1)
export NIX_@wrapperName@_TARGET_TARGET_@suffixSalt@=1
;;
*)
echo "@name@: used as improper sort of dependency" >&2
return 1
;;
esac
}

View File

@@ -0,0 +1,17 @@
local role_post
getHostRole
local sdkVersionVar=NIX_APPLE_SDK_VERSION${role_post}
local developerDirVar=DEVELOPER_DIR${role_post}
local sdkVersionArr=(@sdkVersion@)
local sdkVersion
sdkVersion=$(printf "%02d%02d%02d" "${sdkVersionArr[0]-0}" "${sdkVersionArr[1]-0}" "${sdkVersionArr[2]-0}")
if [ "$sdkVersion" -gt "${!sdkVersionVar-000000}" ]; then
export "$developerDirVar"='@out@'
export "$sdkVersionVar"="$sdkVersion"
export "SDKROOT${role_post}"="${!developerDirVar}/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
fi
unset -v role_post developerDirVar sdkVersion sdkVersionArr sdkVersionVar

View File

@@ -0,0 +1,33 @@
{
lib,
fetchFromGitHub,
rustPlatform,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "applesauce";
version = "0.5.19";
src = fetchFromGitHub {
owner = "Dr-Emann";
repo = "applesauce";
tag = "applesauce-cli-v${finalAttrs.version}";
hash = "sha256-OJZOB7h3qFkaCaPi+EJxIFX8q/Q38vtI0CmDK4PMD1g=";
};
cargoHash = "sha256-gQQpvS2LtlDBXjTqQvSUCXv5UCiQm1kiS/yPcG5KGxY=";
meta = {
description = "Transparent compression for Apple File System Compression (AFSC)";
homepage = "https://github.com/Dr-Emann/applesauce";
changelog = "https://github.com/Dr-Emann/applesauce/releases/tag/applesauce-cli-v${finalAttrs.version}";
license = with lib.licenses; [
gpl3Plus
];
maintainers = with lib.maintainers; [
maxicode
];
mainProgram = "applesauce";
platforms = lib.platforms.darwin;
};
})

Some files were not shown because too many files have changed in this diff Show More