Compare commits
No commits in common. "fork" and "canon" have entirely different histories.
843 changed files with 50764 additions and 70484 deletions
|
@ -1,5 +0,0 @@
|
||||||
[gerrit]
|
|
||||||
host=cl.tvl.fyi
|
|
||||||
port=29418
|
|
||||||
project=depot
|
|
||||||
defaultbranch=canon
|
|
1
.mailmap
1
.mailmap
|
@ -1,2 +1 @@
|
||||||
Alyssa Ross <hi@alyssa.is>
|
Alyssa Ross <hi@alyssa.is>
|
||||||
Aspen Smith <root@gws.fyi> <aspen@gws.fyi> <grfn@gws.fyi>
|
|
||||||
|
|
|
@ -15,9 +15,10 @@ partially see this as [an experiment][] in tooling for monorepos.
|
||||||
|
|
||||||
## Services
|
## Services
|
||||||
|
|
||||||
* Source code can be viewed primarily via `cgit-pink` on
|
* Source code is available primarily through Sourcegraph on
|
||||||
[code.tvl.fyi](https://code.tvl.fyi), with code search being available through
|
[cs.tvl.fyi](https://cs.tvl.fyi), where it is searchable and even semantically
|
||||||
Livegrep on [grep.tvl.fyi](https://grep.tvl.fyi).
|
indexed. A lower-tech view of the repository is also available via cgit-pink
|
||||||
|
on [code.tvl.fyi](https://code.tvl.fyi).
|
||||||
|
|
||||||
The repository can be cloned using `git` from `https://cl.tvl.fyi/depot`.
|
The repository can be cloned using `git` from `https://cl.tvl.fyi/depot`.
|
||||||
|
|
||||||
|
|
633
corp/rih/backend/Cargo.lock
generated
633
corp/rih/backend/Cargo.lock
generated
File diff suppressed because it is too large
Load diff
21
corp/rih/frontend/Cargo.lock
generated
21
corp/rih/frontend/Cargo.lock
generated
|
@ -1500,20 +1500,19 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "wasm-bindgen"
|
||||||
version = "0.2.95"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"
|
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"once_cell",
|
|
||||||
"wasm-bindgen-macro",
|
"wasm-bindgen-macro",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-backend"
|
name = "wasm-bindgen-backend"
|
||||||
version = "0.2.95"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"
|
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"log",
|
"log",
|
||||||
|
@ -1538,9 +1537,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro"
|
name = "wasm-bindgen-macro"
|
||||||
version = "0.2.95"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
|
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote",
|
"quote",
|
||||||
"wasm-bindgen-macro-support",
|
"wasm-bindgen-macro-support",
|
||||||
|
@ -1548,9 +1547,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro-support"
|
name = "wasm-bindgen-macro-support"
|
||||||
version = "0.2.95"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
|
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -1561,9 +1560,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-shared"
|
name = "wasm-bindgen-shared"
|
||||||
version = "0.2.95"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
|
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "web-sys"
|
name = "web-sys"
|
||||||
|
|
|
@ -19,7 +19,7 @@ yew-router = "0.17"
|
||||||
wasm-bindgen-futures = "0.4"
|
wasm-bindgen-futures = "0.4"
|
||||||
|
|
||||||
# needs to be in sync with nixpkgs
|
# needs to be in sync with nixpkgs
|
||||||
wasm-bindgen = "= 0.2.95"
|
wasm-bindgen = "= 0.2.92"
|
||||||
uuid = { version = "1.3.3", features = ["v4", "serde"] }
|
uuid = { version = "1.3.3", features = ["v4", "serde"] }
|
||||||
|
|
||||||
[dependencies.serde]
|
[dependencies.serde]
|
||||||
|
|
21
corp/russian/predlozhnik/Cargo.lock
generated
21
corp/russian/predlozhnik/Cargo.lock
generated
|
@ -363,20 +363,19 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "wasm-bindgen"
|
||||||
version = "0.2.95"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"
|
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"once_cell",
|
|
||||||
"wasm-bindgen-macro",
|
"wasm-bindgen-macro",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-backend"
|
name = "wasm-bindgen-backend"
|
||||||
version = "0.2.95"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"
|
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"log",
|
"log",
|
||||||
|
@ -401,9 +400,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro"
|
name = "wasm-bindgen-macro"
|
||||||
version = "0.2.95"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
|
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote",
|
"quote",
|
||||||
"wasm-bindgen-macro-support",
|
"wasm-bindgen-macro-support",
|
||||||
|
@ -411,9 +410,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro-support"
|
name = "wasm-bindgen-macro-support"
|
||||||
version = "0.2.95"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
|
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -424,9 +423,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-shared"
|
name = "wasm-bindgen-shared"
|
||||||
version = "0.2.95"
|
version = "0.2.92"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
|
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "web-sys"
|
name = "web-sys"
|
||||||
|
|
|
@ -9,4 +9,4 @@ lazy_static = "1.4"
|
||||||
yew = "0.19"
|
yew = "0.19"
|
||||||
|
|
||||||
# needs to be in sync with nixpkgs
|
# needs to be in sync with nixpkgs
|
||||||
wasm-bindgen = "= 0.2.95"
|
wasm-bindgen = "= 0.2.92"
|
||||||
|
|
|
@ -44,7 +44,7 @@ We are a technology company headquartered in Moscow, working with a variety of t
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
* **Software development**. We offer a wide range of software development
|
* **Software development**. We offer a wide range of software development
|
||||||
services. Whether you need assistance with existing projects, or want to create
|
services. Whether you need existence with existing projects, or want to create
|
||||||
a new solution from scratch, we can help. We specialize in helping
|
a new solution from scratch, we can help. We specialize in helping
|
||||||
organizations avoid the trap of building overly complex systems that don't
|
organizations avoid the trap of building overly complex systems that don't
|
||||||
meet their needs.
|
meet their needs.
|
||||||
|
|
|
@ -117,10 +117,6 @@ readTree.fix (self: (readDepot {
|
||||||
self.users.wpcarro.nixos.kyokoSystem
|
self.users.wpcarro.nixos.kyokoSystem
|
||||||
self.users.wpcarro.nixos.marcusSystem
|
self.users.wpcarro.nixos.marcusSystem
|
||||||
self.users.wpcarro.nixos.tarascoSystem
|
self.users.wpcarro.nixos.tarascoSystem
|
||||||
|
|
||||||
# Disabled because it depends on an unstable FOD, which, when updated,
|
|
||||||
# breaks the build. Needs to be investigated by flokli.
|
|
||||||
self.users.flokli.keyboards.corneish_zen.firmware
|
|
||||||
];
|
];
|
||||||
|
|
||||||
# List of all buildable targets, for CI purposes.
|
# List of all buildable targets, for CI purposes.
|
||||||
|
|
|
@ -1,91 +0,0 @@
|
||||||
Importing projects into depot
|
|
||||||
=============================
|
|
||||||
|
|
||||||
Before importing an existing `git`-based project into depot, a few questions
|
|
||||||
need to be answered:
|
|
||||||
|
|
||||||
|
|
||||||
* Is the project licensed under a free software license, or public domain?
|
|
||||||
* Do you need to import existing history?
|
|
||||||
* Do you need to export new history with hashes that continue on from the old
|
|
||||||
history? (e.g. importing an existing repository, and exporting from depot to
|
|
||||||
the old upstream)
|
|
||||||
|
|
||||||
Think about this and then pick an approach below:
|
|
||||||
|
|
||||||
## Import with no history (just commit)
|
|
||||||
|
|
||||||
Simply copy the files to where you want them to be in depot, and commit. Nothing
|
|
||||||
else to do!
|
|
||||||
|
|
||||||
## Import without continuous history (subtree merge)
|
|
||||||
|
|
||||||
This import approach lets you drop an existing project into depot, keep its
|
|
||||||
existing history, but not retain the ability to continue external history.
|
|
||||||
|
|
||||||
This means that if you, for example, import a project from a different git host
|
|
||||||
using this method, and then continue to commit to it inside of depot, you will
|
|
||||||
not be able to export a history consistent with your previous hashes using
|
|
||||||
`josh`.
|
|
||||||
|
|
||||||
Commit hashes before the import will exist in depot and be valid.
|
|
||||||
|
|
||||||
Still, this approach might be viable if a project "moves into" depot, or has
|
|
||||||
nothing depending on it externally.
|
|
||||||
|
|
||||||
1. Pick a location in depot where you want your project to be (`$loc` from now on).
|
|
||||||
2. Fetch your project into the same git store as your depot clone (e.g. by
|
|
||||||
adding it as an upstream and fetching it).
|
|
||||||
3. Pick the commit you want to merge (`$commit` from now on).
|
|
||||||
4. Run `git subtree add --prefix=$loc $commit`, which will create the correct
|
|
||||||
merge commit.
|
|
||||||
5. Ensure Gerrit [knows about your commit](#preparing-merges-in-gerrit) for the
|
|
||||||
parent that is being merged.
|
|
||||||
6. Modify the merge commit's message to start with `subtree($project_name):`.
|
|
||||||
Gerrit **will not** allow merge commits that do not follow this format.
|
|
||||||
7. Push your subtree commit for review as normal.
|
|
||||||
|
|
||||||
## Import with continuous history
|
|
||||||
|
|
||||||
This approach imports the history using `josh`, which means that external
|
|
||||||
history before/after the import is consistent (you can continue committing in
|
|
||||||
`depot`, export the history back out, and from an external perspective nothing
|
|
||||||
changes).
|
|
||||||
|
|
||||||
This is what we did with repositories like `nix-1p` and `nixery`.
|
|
||||||
|
|
||||||
Note: Inside of depot, the pre-import commit hashes will **not make sense**.
|
|
||||||
`josh` will rewrite them in such a way that exporting the project will yield the
|
|
||||||
same hashes, but this rewriting changes the hashes of your commits inside of
|
|
||||||
depot.
|
|
||||||
|
|
||||||
1. Pick a location in depot where you want your project to be (`$loc`).
|
|
||||||
2. Fetch your project into the same git store as your depot clone (e.g. by
|
|
||||||
adding it as an upstream and fetching it).
|
|
||||||
3. Check out the commit you want to merge into depot.
|
|
||||||
4. Run `josh-filter ":prefix=$loc"`, and take note of the `FILTERED_HEAD` ref
|
|
||||||
that it produces (`$filtered` from now on).
|
|
||||||
5. Ensure Gerrit [knows about the filtered commit](#preparing-merges-in-gerrit).
|
|
||||||
6. Merge the filtered commit into depot using a standard merge, but make sure to
|
|
||||||
add the `--allow-unrelated-histories` flag. Your commit message **must**
|
|
||||||
start with `subtree($project_name):`, otherwise Gerrit will not let you push
|
|
||||||
a merge.
|
|
||||||
7. Push the merge commit for review as usual.
|
|
||||||
|
|
||||||
------------------------------------------------------
|
|
||||||
|
|
||||||
## Preparing merges in Gerrit
|
|
||||||
|
|
||||||
When pushing a merge to Gerrit, it needs to know about all ancestors of the
|
|
||||||
merge, otherwise it will try to interpret commits as new CLs and reject them for
|
|
||||||
not having a change ID (or create a huge number of CLs, if they do have one).
|
|
||||||
|
|
||||||
To prevent this, we have a special git ref called `subtree-staging` which you
|
|
||||||
can push external trees to.
|
|
||||||
|
|
||||||
Access to `subtree-staging` has to be granted by a TVL admin, so ping tazjin,
|
|
||||||
lukegb, flokli, sterni and so on before proceeding.
|
|
||||||
|
|
||||||
1. Determine the commit you want to merge (`$commit`).
|
|
||||||
2. Run `git push -f $commit origin/subtree-staging` (or replace `origin` with
|
|
||||||
whatever the TVL Gerrit remote is called in your clone).
|
|
|
@ -1,4 +1,4 @@
|
||||||
# This file was @generated by crate2nix 0.14.1 with the command:
|
# This file was @generated by crate2nix 0.12.0 with the command:
|
||||||
# "generate"
|
# "generate"
|
||||||
# See https://github.com/kolloch/crate2nix for more info.
|
# See https://github.com/kolloch/crate2nix for more info.
|
||||||
|
|
||||||
|
@ -13,8 +13,6 @@
|
||||||
, rootFeatures ? [ "default" ]
|
, rootFeatures ? [ "default" ]
|
||||||
# If true, throw errors instead of issueing deprecation warnings.
|
# If true, throw errors instead of issueing deprecation warnings.
|
||||||
, strictDeprecation ? false
|
, strictDeprecation ? false
|
||||||
# Elements to add to the `-C target-feature=` argument passed to `rustc`
|
|
||||||
# (separated by `,`, prefixed with `+`).
|
|
||||||
# Used for conditional compilation based on CPU feature detection.
|
# Used for conditional compilation based on CPU feature detection.
|
||||||
, targetFeatures ? [ ]
|
, targetFeatures ? [ ]
|
||||||
# Whether to perform release builds: longer compile times, faster binaries.
|
# Whether to perform release builds: longer compile times, faster binaries.
|
||||||
|
@ -157,7 +155,6 @@ rec {
|
||||||
version = "0.1.1";
|
version = "0.1.1";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "1w7ynjxrfs97xg3qlcdns4kgfpwcdv824g611fq32cag4cdr96g9";
|
sha256 = "1w7ynjxrfs97xg3qlcdns4kgfpwcdv824g611fq32cag4cdr96g9";
|
||||||
libName = "android_tzdata";
|
|
||||||
authors = [
|
authors = [
|
||||||
"RumovZ"
|
"RumovZ"
|
||||||
];
|
];
|
||||||
|
@ -396,7 +393,6 @@ rec {
|
||||||
version = "0.1.10";
|
version = "0.1.10";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "08h80ihs74jcyp24cd75wwabygbbdgl05k6p5dmq8akbr78vv1a7";
|
sha256 = "08h80ihs74jcyp24cd75wwabygbbdgl05k6p5dmq8akbr78vv1a7";
|
||||||
libName = "cfg_if";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
];
|
];
|
||||||
|
@ -411,7 +407,6 @@ rec {
|
||||||
version = "1.0.0";
|
version = "1.0.0";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "1za0vb97n4brpzpv8lsbnzmq5r8f2b0cpqqr0sy8h5bn751xxwds";
|
sha256 = "1za0vb97n4brpzpv8lsbnzmq5r8f2b0cpqqr0sy8h5bn751xxwds";
|
||||||
libName = "cfg_if";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
];
|
];
|
||||||
|
@ -577,7 +572,6 @@ rec {
|
||||||
version = "0.9.4";
|
version = "0.9.4";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "13zvbbj07yk3b61b8fhwfzhy35535a583irf23vlcg59j7h9bqci";
|
sha256 = "13zvbbj07yk3b61b8fhwfzhy35535a583irf23vlcg59j7h9bqci";
|
||||||
libName = "core_foundation";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The Servo Project Developers"
|
"The Servo Project Developers"
|
||||||
];
|
];
|
||||||
|
@ -609,7 +603,6 @@ rec {
|
||||||
version = "0.8.6";
|
version = "0.8.6";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "13w6sdf06r0hn7bx2b45zxsg1mm2phz34jikm6xc5qrbr6djpsh6";
|
sha256 = "13w6sdf06r0hn7bx2b45zxsg1mm2phz34jikm6xc5qrbr6djpsh6";
|
||||||
libName = "core_foundation_sys";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The Servo Project Developers"
|
"The Servo Project Developers"
|
||||||
];
|
];
|
||||||
|
@ -622,7 +615,12 @@ rec {
|
||||||
crateName = "crimp";
|
crateName = "crimp";
|
||||||
version = "4087.0.0";
|
version = "4087.0.0";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
src = lib.cleanSourceWith { filter = sourceFilter; src = ../../net/crimp; };
|
# We can't filter paths with references in Nix 2.4
|
||||||
|
# See https://github.com/NixOS/nix/issues/5410
|
||||||
|
src =
|
||||||
|
if ((lib.versionOlder builtins.nixVersion "2.4pre20211007") || (lib.versionOlder "2.5" builtins.nixVersion))
|
||||||
|
then lib.cleanSourceWith { filter = sourceFilter; src = ../../net/crimp; }
|
||||||
|
else ../../net/crimp;
|
||||||
authors = [
|
authors = [
|
||||||
"Vincent Ambo <tazjin@tvl.su>"
|
"Vincent Ambo <tazjin@tvl.su>"
|
||||||
];
|
];
|
||||||
|
@ -655,7 +653,6 @@ rec {
|
||||||
version = "0.7.4";
|
version = "0.7.4";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1v99xcdjk4zixvxnq7pssip670mlyhw1ma3qc88ca11jxnfz43y2";
|
sha256 = "1v99xcdjk4zixvxnq7pssip670mlyhw1ma3qc88ca11jxnfz43y2";
|
||||||
libName = "crossbeam_deque";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The Crossbeam Project Developers"
|
"The Crossbeam Project Developers"
|
||||||
];
|
];
|
||||||
|
@ -680,7 +677,6 @@ rec {
|
||||||
version = "0.8.2";
|
version = "0.8.2";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1knsf0zz7rgzxn0nwz5gajjcrivxpw3zrdcp946gdhdgr9sd53h5";
|
sha256 = "1knsf0zz7rgzxn0nwz5gajjcrivxpw3zrdcp946gdhdgr9sd53h5";
|
||||||
libName = "crossbeam_epoch";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The Crossbeam Project Developers"
|
"The Crossbeam Project Developers"
|
||||||
];
|
];
|
||||||
|
@ -733,7 +729,6 @@ rec {
|
||||||
version = "0.2.3";
|
version = "0.2.3";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0w15z68nz3ac4f2s4djhwha8vmlwsh9dlfrmsl4x84y2ah5acjvp";
|
sha256 = "0w15z68nz3ac4f2s4djhwha8vmlwsh9dlfrmsl4x84y2ah5acjvp";
|
||||||
libName = "crossbeam_queue";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The Crossbeam Project Developers"
|
"The Crossbeam Project Developers"
|
||||||
];
|
];
|
||||||
|
@ -764,7 +759,6 @@ rec {
|
||||||
version = "0.7.2";
|
version = "0.7.2";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1a31wbrda1320gj2a6az1lin2d34xfc3xf88da4c17qy5lxcgiy3";
|
sha256 = "1a31wbrda1320gj2a6az1lin2d34xfc3xf88da4c17qy5lxcgiy3";
|
||||||
libName = "crossbeam_utils";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The Crossbeam Project Developers"
|
"The Crossbeam Project Developers"
|
||||||
];
|
];
|
||||||
|
@ -1337,7 +1331,6 @@ rec {
|
||||||
version = "0.3.2";
|
version = "0.3.2";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1cgk0vyd7r45cj769jym4a6s7vwshvd0z4bqrb92q1fwibmkkwzn";
|
sha256 = "1cgk0vyd7r45cj769jym4a6s7vwshvd0z4bqrb92q1fwibmkkwzn";
|
||||||
libName = "foreign_types";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Steven Fackler <sfackler@gmail.com>"
|
"Steven Fackler <sfackler@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -1354,7 +1347,6 @@ rec {
|
||||||
version = "0.1.1";
|
version = "0.1.1";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0jxgzd04ra4imjv8jgkmdq59kj8fsz6w4zxsbmlai34h26225c00";
|
sha256 = "0jxgzd04ra4imjv8jgkmdq59kj8fsz6w4zxsbmlai34h26225c00";
|
||||||
libName = "foreign_types_shared";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Steven Fackler <sfackler@gmail.com>"
|
"Steven Fackler <sfackler@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -1365,7 +1357,6 @@ rec {
|
||||||
version = "0.3.3";
|
version = "0.3.3";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "10jxc5ks1x06gpd0xg51kcjrxr35nj6qhx2zlc5n7bmskv3675rf";
|
sha256 = "10jxc5ks1x06gpd0xg51kcjrxr35nj6qhx2zlc5n7bmskv3675rf";
|
||||||
libName = "fuchsia_zircon";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Raph Levien <raph@google.com>"
|
"Raph Levien <raph@google.com>"
|
||||||
];
|
];
|
||||||
|
@ -1386,7 +1377,6 @@ rec {
|
||||||
version = "0.3.3";
|
version = "0.3.3";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "19zp2085qsyq2bh1gvcxq1lb8w6v6jj9kbdkhpdjrl95fypakjix";
|
sha256 = "19zp2085qsyq2bh1gvcxq1lb8w6v6jj9kbdkhpdjrl95fypakjix";
|
||||||
libName = "fuchsia_zircon_sys";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Raph Levien <raph@google.com>"
|
"Raph Levien <raph@google.com>"
|
||||||
];
|
];
|
||||||
|
@ -1465,7 +1455,6 @@ rec {
|
||||||
version = "0.1.19";
|
version = "0.1.19";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "0cxcm8093nf5fyn114w8vxbrbcyvv91d4015rdnlgfll7cs6gd32";
|
sha256 = "0cxcm8093nf5fyn114w8vxbrbcyvv91d4015rdnlgfll7cs6gd32";
|
||||||
libName = "hermit_abi";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Stefan Lankes"
|
"Stefan Lankes"
|
||||||
];
|
];
|
||||||
|
@ -1488,7 +1477,6 @@ rec {
|
||||||
version = "0.3.9";
|
version = "0.3.9";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "092hxjbjnq5fmz66grd9plxd0sh6ssg5fhgwwwqbrzgzkjwdycfj";
|
sha256 = "092hxjbjnq5fmz66grd9plxd0sh6ssg5fhgwwwqbrzgzkjwdycfj";
|
||||||
libName = "hermit_abi";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Stefan Lankes"
|
"Stefan Lankes"
|
||||||
];
|
];
|
||||||
|
@ -1521,7 +1509,6 @@ rec {
|
||||||
version = "0.1.60";
|
version = "0.1.60";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "0hdid5xz3jznm04lysjm3vi93h3c523w0hcc3xba47jl3ddbpzz7";
|
sha256 = "0hdid5xz3jznm04lysjm3vi93h3c523w0hcc3xba47jl3ddbpzz7";
|
||||||
libName = "iana_time_zone";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Andrew Straw <strawman@astraw.com>"
|
"Andrew Straw <strawman@astraw.com>"
|
||||||
"René Kijewski <rene.kijewski@fu-berlin.de>"
|
"René Kijewski <rene.kijewski@fu-berlin.de>"
|
||||||
|
@ -1567,7 +1554,6 @@ rec {
|
||||||
version = "0.1.2";
|
version = "0.1.2";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "17r6jmj31chn7xs9698r122mapq85mfnv98bb4pg6spm0si2f67k";
|
sha256 = "17r6jmj31chn7xs9698r122mapq85mfnv98bb4pg6spm0si2f67k";
|
||||||
libName = "iana_time_zone_haiku";
|
|
||||||
authors = [
|
authors = [
|
||||||
"René Kijewski <crates.io@k6i.de>"
|
"René Kijewski <crates.io@k6i.de>"
|
||||||
];
|
];
|
||||||
|
@ -1702,7 +1688,6 @@ rec {
|
||||||
version = "0.3.69";
|
version = "0.3.69";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "0v99rz97asnzapb0jsc3jjhvxpfxr7h7qd97yqyrf9i7viimbh99";
|
sha256 = "0v99rz97asnzapb0jsc3jjhvxpfxr7h7qd97yqyrf9i7viimbh99";
|
||||||
libName = "js_sys";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The wasm-bindgen Developers"
|
"The wasm-bindgen Developers"
|
||||||
];
|
];
|
||||||
|
@ -1787,7 +1772,6 @@ rec {
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
links = "z";
|
links = "z";
|
||||||
sha256 = "1xj89rjhk642x8271xr9phj7da7ivwyvd5g8fmb7ma5asgsk2xq3";
|
sha256 = "1xj89rjhk642x8271xr9phj7da7ivwyvd5g8fmb7ma5asgsk2xq3";
|
||||||
libName = "libz_sys";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
"Josh Triplett <josh@joshtriplett.org>"
|
"Josh Triplett <josh@joshtriplett.org>"
|
||||||
|
@ -1827,7 +1811,6 @@ rec {
|
||||||
version = "0.3.0";
|
version = "0.3.0";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1kaf95grvfqchxn8pl0854g8ab0fzl56217hndhhhz5qqm2j09kd";
|
sha256 = "1kaf95grvfqchxn8pl0854g8ab0fzl56217hndhhhz5qqm2j09kd";
|
||||||
libName = "linked_hash_map";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Stepan Koltsov <stepan.koltsov@gmail.com>"
|
"Stepan Koltsov <stepan.koltsov@gmail.com>"
|
||||||
"Andrew Paseltiner <apaseltiner@gmail.com>"
|
"Andrew Paseltiner <apaseltiner@gmail.com>"
|
||||||
|
@ -1857,7 +1840,6 @@ rec {
|
||||||
version = "0.5.6";
|
version = "0.5.6";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "03vpgw7x507g524nx5i1jf5dl8k3kv0fzg8v3ip6qqwbpkqww5q7";
|
sha256 = "03vpgw7x507g524nx5i1jf5dl8k3kv0fzg8v3ip6qqwbpkqww5q7";
|
||||||
libName = "linked_hash_map";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Stepan Koltsov <stepan.koltsov@gmail.com>"
|
"Stepan Koltsov <stepan.koltsov@gmail.com>"
|
||||||
"Andrew Paseltiner <apaseltiner@gmail.com>"
|
"Andrew Paseltiner <apaseltiner@gmail.com>"
|
||||||
|
@ -1874,7 +1856,6 @@ rec {
|
||||||
version = "0.4.13";
|
version = "0.4.13";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "172k2c6422gsc914ig8rh99mb9yc7siw6ikc3d9xw1k7vx0s3k81";
|
sha256 = "172k2c6422gsc914ig8rh99mb9yc7siw6ikc3d9xw1k7vx0s3k81";
|
||||||
libName = "linux_raw_sys";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Dan Gohman <dev@sunfishcode.online>"
|
"Dan Gohman <dev@sunfishcode.online>"
|
||||||
];
|
];
|
||||||
|
@ -1962,7 +1943,6 @@ rec {
|
||||||
version = "2.0.0";
|
version = "2.0.0";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "004y0nzmpfdrhz251278341z6ql34iv1k6dp1h6af7d6nd6jwc30";
|
sha256 = "004y0nzmpfdrhz251278341z6ql34iv1k6dp1h6af7d6nd6jwc30";
|
||||||
libName = "maybe_uninit";
|
|
||||||
authors = [
|
authors = [
|
||||||
"est31 <MTest31@outlook.com>"
|
"est31 <MTest31@outlook.com>"
|
||||||
"The Rust Project Developers"
|
"The Rust Project Developers"
|
||||||
|
@ -2102,7 +2082,6 @@ rec {
|
||||||
version = "0.6.8";
|
version = "0.6.8";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1w36w09gd8as1mah80wdy0kgpshmphmljj68gij34hvdnag6kjxg";
|
sha256 = "1w36w09gd8as1mah80wdy0kgpshmphmljj68gij34hvdnag6kjxg";
|
||||||
libName = "mio_uds";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
];
|
];
|
||||||
|
@ -2159,7 +2138,6 @@ rec {
|
||||||
version = "0.2.11";
|
version = "0.2.11";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0bmrlg0fmzxaycjpkgkchi93av07v2yf9k33gc12ca9gqdrn28h7";
|
sha256 = "0bmrlg0fmzxaycjpkgkchi93av07v2yf9k33gc12ca9gqdrn28h7";
|
||||||
libName = "native_tls";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Steven Fackler <sfackler@gmail.com>"
|
"Steven Fackler <sfackler@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -2293,7 +2271,6 @@ rec {
|
||||||
version = "0.1.43";
|
version = "0.1.43";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0c9whknf2dm74a3cqirafy6gj83a76gl56g4v3g19k6lkwz13rcj";
|
sha256 = "0c9whknf2dm74a3cqirafy6gj83a76gl56g4v3g19k6lkwz13rcj";
|
||||||
libName = "num_traits";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The Rust Project Developers"
|
"The Rust Project Developers"
|
||||||
];
|
];
|
||||||
|
@ -2310,7 +2287,6 @@ rec {
|
||||||
version = "0.2.18";
|
version = "0.2.18";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "0yjib8p2p9kzmaz48xwhs69w5dh1wipph9jgnillzd2x33jz03fs";
|
sha256 = "0yjib8p2p9kzmaz48xwhs69w5dh1wipph9jgnillzd2x33jz03fs";
|
||||||
libName = "num_traits";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The Rust Project Developers"
|
"The Rust Project Developers"
|
||||||
];
|
];
|
||||||
|
@ -2451,7 +2427,6 @@ rec {
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "173xxvfc63rr5ybwqwylsir0vq6xsj4kxiv4hmg4c3vscdmncj59";
|
sha256 = "173xxvfc63rr5ybwqwylsir0vq6xsj4kxiv4hmg4c3vscdmncj59";
|
||||||
procMacro = true;
|
procMacro = true;
|
||||||
libName = "openssl_macros";
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{
|
{
|
||||||
name = "proc-macro2";
|
name = "proc-macro2";
|
||||||
|
@ -2474,7 +2449,6 @@ rec {
|
||||||
version = "0.1.5";
|
version = "0.1.5";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1kq18qm48rvkwgcggfkqq6pm948190czqc94d6bm2sir5hq1l0gz";
|
sha256 = "1kq18qm48rvkwgcggfkqq6pm948190czqc94d6bm2sir5hq1l0gz";
|
||||||
libName = "openssl_probe";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
];
|
];
|
||||||
|
@ -2487,7 +2461,6 @@ rec {
|
||||||
links = "openssl";
|
links = "openssl";
|
||||||
sha256 = "1zwd35nc5bq7m26vjsmja4hxf3fzk389blgpmhpzr3p78krv18nx";
|
sha256 = "1zwd35nc5bq7m26vjsmja4hxf3fzk389blgpmhpzr3p78krv18nx";
|
||||||
build = "build/main.rs";
|
build = "build/main.rs";
|
||||||
libName = "openssl_sys";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
"Steven Fackler <sfackler@gmail.com>"
|
"Steven Fackler <sfackler@gmail.com>"
|
||||||
|
@ -2682,7 +2655,12 @@ rec {
|
||||||
requiredFeatures = [ ];
|
requiredFeatures = [ ];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
src = lib.cleanSourceWith { filter = sourceFilter; src = ./.; };
|
# We can't filter paths with references in Nix 2.4
|
||||||
|
# See https://github.com/NixOS/nix/issues/5410
|
||||||
|
src =
|
||||||
|
if ((lib.versionOlder builtins.nixVersion "2.4pre20211007") || (lib.versionOlder "2.5" builtins.nixVersion))
|
||||||
|
then lib.cleanSourceWith { filter = sourceFilter; src = ./.; }
|
||||||
|
else ./.;
|
||||||
authors = [
|
authors = [
|
||||||
"eeeeeta <eta@theta.eu.org>"
|
"eeeeeta <eta@theta.eu.org>"
|
||||||
];
|
];
|
||||||
|
@ -2745,7 +2723,6 @@ rec {
|
||||||
version = "0.3.30";
|
version = "0.3.30";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1v07557dj1sa0aly9c90wsygc0i8xv5vnmyv0g94lpkvj8qb4cfj";
|
sha256 = "1v07557dj1sa0aly9c90wsygc0i8xv5vnmyv0g94lpkvj8qb4cfj";
|
||||||
libName = "pkg_config";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
];
|
];
|
||||||
|
@ -2756,7 +2733,6 @@ rec {
|
||||||
version = "0.2.17";
|
version = "0.2.17";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "1pp6g52aw970adv3x2310n7glqnji96z0a9wiamzw89ibf0ayh2v";
|
sha256 = "1pp6g52aw970adv3x2310n7glqnji96z0a9wiamzw89ibf0ayh2v";
|
||||||
libName = "ppv_lite86";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The CryptoCorrosion Contributors"
|
"The CryptoCorrosion Contributors"
|
||||||
];
|
];
|
||||||
|
@ -2788,7 +2764,6 @@ rec {
|
||||||
version = "1.0.78";
|
version = "1.0.78";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "1bjak27pqdn4f4ih1c9nr3manzyavsgqmf76ygw9k76q8pb2lhp2";
|
sha256 = "1bjak27pqdn4f4ih1c9nr3manzyavsgqmf76ygw9k76q8pb2lhp2";
|
||||||
libName = "proc_macro2";
|
|
||||||
authors = [
|
authors = [
|
||||||
"David Tolnay <dtolnay@gmail.com>"
|
"David Tolnay <dtolnay@gmail.com>"
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
|
@ -2809,7 +2784,6 @@ rec {
|
||||||
version = "1.2.3";
|
version = "1.2.3";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1q6za3v78hsspisc197bg3g7rpc989qycy8ypr8ap8igv10ikl51";
|
sha256 = "1q6za3v78hsspisc197bg3g7rpc989qycy8ypr8ap8igv10ikl51";
|
||||||
libName = "quick_error";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Paul Colomiets <paul@colomiets.name>"
|
"Paul Colomiets <paul@colomiets.name>"
|
||||||
"Colin Kiegel <kiegel@gmx.de>"
|
"Colin Kiegel <kiegel@gmx.de>"
|
||||||
|
@ -3086,7 +3060,6 @@ rec {
|
||||||
version = "0.4.6";
|
version = "0.4.6";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "1spaq7y4im7s56d1gxa2hi4hzf6dwswb1bv8xyavzya7k25kpf46";
|
sha256 = "1spaq7y4im7s56d1gxa2hi4hzf6dwswb1bv8xyavzya7k25kpf46";
|
||||||
libName = "regex_automata";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The Rust Project Developers"
|
"The Rust Project Developers"
|
||||||
"Andrew Gallant <jamslam@gmail.com>"
|
"Andrew Gallant <jamslam@gmail.com>"
|
||||||
|
@ -3147,7 +3120,6 @@ rec {
|
||||||
version = "0.8.2";
|
version = "0.8.2";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "17rd2s8xbiyf6lb4aj2nfi44zqlj98g2ays8zzj2vfs743k79360";
|
sha256 = "17rd2s8xbiyf6lb4aj2nfi44zqlj98g2ays8zzj2vfs743k79360";
|
||||||
libName = "regex_syntax";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The Rust Project Developers"
|
"The Rust Project Developers"
|
||||||
"Andrew Gallant <jamslam@gmail.com>"
|
"Andrew Gallant <jamslam@gmail.com>"
|
||||||
|
@ -3175,7 +3147,6 @@ rec {
|
||||||
version = "0.1.23";
|
version = "0.1.23";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0xnbk2bmyzshacjm2g1kd4zzv2y2az14bw3sjccq5qkpmsfvn9nn";
|
sha256 = "0xnbk2bmyzshacjm2g1kd4zzv2y2az14bw3sjccq5qkpmsfvn9nn";
|
||||||
libName = "rustc_demangle";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
];
|
];
|
||||||
|
@ -3352,7 +3323,6 @@ rec {
|
||||||
version = "0.2.7";
|
version = "0.2.7";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "068s77f9xcpvzl70nsxk8750dzzc6f9pixajhd979815cj0ndg1w";
|
sha256 = "068s77f9xcpvzl70nsxk8750dzzc6f9pixajhd979815cj0ndg1w";
|
||||||
libName = "scheduled_thread_pool";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Steven Fackler <sfackler@gmail.com>"
|
"Steven Fackler <sfackler@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -3369,7 +3339,6 @@ rec {
|
||||||
version = "0.1.2";
|
version = "0.1.2";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0a2bn9d2mb07c6l16sadijy4p540g498zddfxyiq4rsqpwrglbrk";
|
sha256 = "0a2bn9d2mb07c6l16sadijy4p540g498zddfxyiq4rsqpwrglbrk";
|
||||||
libName = "scoped_tls";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Alex Crichton <alex@alexcrichton.com>"
|
"Alex Crichton <alex@alexcrichton.com>"
|
||||||
];
|
];
|
||||||
|
@ -3392,7 +3361,6 @@ rec {
|
||||||
version = "2.9.2";
|
version = "2.9.2";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "1pplxk15s5yxvi2m1sz5xfmjibp96cscdcl432w9jzbk0frlzdh5";
|
sha256 = "1pplxk15s5yxvi2m1sz5xfmjibp96cscdcl432w9jzbk0frlzdh5";
|
||||||
libName = "security_framework";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Steven Fackler <sfackler@gmail.com>"
|
"Steven Fackler <sfackler@gmail.com>"
|
||||||
"Kornel <kornel@geekhood.net>"
|
"Kornel <kornel@geekhood.net>"
|
||||||
|
@ -3439,7 +3407,6 @@ rec {
|
||||||
version = "2.9.1";
|
version = "2.9.1";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "0yhciwlsy9dh0ps1gw3197kvyqx1bvc4knrhiznhid6kax196cp9";
|
sha256 = "0yhciwlsy9dh0ps1gw3197kvyqx1bvc4knrhiznhid6kax196cp9";
|
||||||
libName = "security_framework_sys";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Steven Fackler <sfackler@gmail.com>"
|
"Steven Fackler <sfackler@gmail.com>"
|
||||||
"Kornel <kornel@geekhood.net>"
|
"Kornel <kornel@geekhood.net>"
|
||||||
|
@ -3491,7 +3458,6 @@ rec {
|
||||||
version = "0.7.0";
|
version = "0.7.0";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "18vhypw6zgccnrlm5ps1pwa0khz7ry927iznpr88b87cagr1v2iq";
|
sha256 = "18vhypw6zgccnrlm5ps1pwa0khz7ry927iznpr88b87cagr1v2iq";
|
||||||
libName = "semver_parser";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Steve Klabnik <steve@steveklabnik.com>"
|
"Steve Klabnik <steve@steveklabnik.com>"
|
||||||
];
|
];
|
||||||
|
@ -3553,7 +3519,6 @@ rec {
|
||||||
version = "0.8.2";
|
version = "0.8.2";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0lv1qwis9rr767xv9w27y1g1r71ayf02k2wkypawwlkxsrd3r0qb";
|
sha256 = "0lv1qwis9rr767xv9w27y1g1r71ayf02k2wkypawwlkxsrd3r0qb";
|
||||||
libName = "serde_hjson";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Christian Zangl <laktak@cdak.net>"
|
"Christian Zangl <laktak@cdak.net>"
|
||||||
];
|
];
|
||||||
|
@ -4057,7 +4022,6 @@ rec {
|
||||||
version = "0.1.2";
|
version = "0.1.2";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0swpfngcb331lzggk6j68yks6w0bnw35vpl4hv8p03msc239kci5";
|
sha256 = "0swpfngcb331lzggk6j68yks6w0bnw35vpl4hv8p03msc239kci5";
|
||||||
libName = "tokio_codec";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
"Bryan Burgers <bryan@burgers.io>"
|
"Bryan Burgers <bryan@burgers.io>"
|
||||||
|
@ -4083,7 +4047,6 @@ rec {
|
||||||
version = "0.1.18";
|
version = "0.1.18";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1m7zij19xy13wmlb7a1bghvi4vs8s1hlyggnaajvqfj46i9kkcc7";
|
sha256 = "1m7zij19xy13wmlb7a1bghvi4vs8s1hlyggnaajvqfj46i9kkcc7";
|
||||||
libName = "tokio_core";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4140,7 +4103,6 @@ rec {
|
||||||
version = "0.1.7";
|
version = "0.1.7";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "03p2w316ha0irgzvy37njx9hl71133gcrmrq4801w4rzm0r0xpmi";
|
sha256 = "03p2w316ha0irgzvy37njx9hl71133gcrmrq4801w4rzm0r0xpmi";
|
||||||
libName = "tokio_current_thread";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4161,7 +4123,6 @@ rec {
|
||||||
version = "0.1.10";
|
version = "0.1.10";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0w8n78d2vixs1vghqc4wy9w0d1h6qkli51c1yzhzbns88n7inbgv";
|
sha256 = "0w8n78d2vixs1vghqc4wy9w0d1h6qkli51c1yzhzbns88n7inbgv";
|
||||||
libName = "tokio_executor";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4182,7 +4143,6 @@ rec {
|
||||||
version = "0.1.7";
|
version = "0.1.7";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1x3gkdi5x7bjlzzg7qlnymb549rb546p0nykxsh04qyaw0314yi9";
|
sha256 = "1x3gkdi5x7bjlzzg7qlnymb549rb546p0nykxsh04qyaw0314yi9";
|
||||||
libName = "tokio_fs";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4213,7 +4173,6 @@ rec {
|
||||||
version = "0.1.13";
|
version = "0.1.13";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0x06zyzinans1pn90g6i150lgixijdf1cg8y2gipjd09ms58dz2p";
|
sha256 = "0x06zyzinans1pn90g6i150lgixijdf1cg8y2gipjd09ms58dz2p";
|
||||||
libName = "tokio_io";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4238,7 +4197,6 @@ rec {
|
||||||
version = "1.1.0";
|
version = "1.1.0";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0mg1i39cl8x32wxwbn74hlirks8a6f3g0gfzkb0n0zwbxwvc9gs1";
|
sha256 = "0mg1i39cl8x32wxwbn74hlirks8a6f3g0gfzkb0n0zwbxwvc9gs1";
|
||||||
libName = "tokio_mockstream";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Aaron Weiss <awe@pdgn.co>"
|
"Aaron Weiss <awe@pdgn.co>"
|
||||||
];
|
];
|
||||||
|
@ -4259,7 +4217,6 @@ rec {
|
||||||
version = "0.1.12";
|
version = "0.1.12";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0l8klnd41q55f3ialzz0lb7s5bfwa38nh86sa9vai2xsqh75kg09";
|
sha256 = "0l8klnd41q55f3ialzz0lb7s5bfwa38nh86sa9vai2xsqh75kg09";
|
||||||
libName = "tokio_reactor";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4322,7 +4279,6 @@ rec {
|
||||||
version = "0.1.8";
|
version = "0.1.8";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1vkxz0y7qf9sshfpxvn506pvxy4vza8piavd8p64y5n85cam1zpd";
|
sha256 = "1vkxz0y7qf9sshfpxvn506pvxy4vza8piavd8p64y5n85cam1zpd";
|
||||||
libName = "tokio_sync";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4343,7 +4299,6 @@ rec {
|
||||||
version = "0.1.4";
|
version = "0.1.4";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0whzqnkyfym1ipzznibyjl3j9281walq4n0q5xs2xdz3cvniipwq";
|
sha256 = "0whzqnkyfym1ipzznibyjl3j9281walq4n0q5xs2xdz3cvniipwq";
|
||||||
libName = "tokio_tcp";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4380,7 +4335,6 @@ rec {
|
||||||
version = "0.1.18";
|
version = "0.1.18";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "12azq8jm71b7hdm72pxrgqm2879bn6b0fcdl1s7i2k3qh5jhnwnz";
|
sha256 = "12azq8jm71b7hdm72pxrgqm2879bn6b0fcdl1s7i2k3qh5jhnwnz";
|
||||||
libName = "tokio_threadpool";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4429,7 +4383,6 @@ rec {
|
||||||
version = "0.1.2";
|
version = "0.1.2";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1z0fwbh5bm6hdbfm0y17fa5l60na7fl9vbca7wdzz1vp0f0ffcb1";
|
sha256 = "1z0fwbh5bm6hdbfm0y17fa5l60na7fl9vbca7wdzz1vp0f0ffcb1";
|
||||||
libName = "tokio_timer";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4450,7 +4403,6 @@ rec {
|
||||||
version = "0.2.13";
|
version = "0.2.13";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "15pjjj6daks3sii8p24a509b0dapl2kyk740nwfgz59w64nly14k";
|
sha256 = "15pjjj6daks3sii8p24a509b0dapl2kyk740nwfgz59w64nly14k";
|
||||||
libName = "tokio_timer";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4479,7 +4431,6 @@ rec {
|
||||||
version = "0.2.1";
|
version = "0.2.1";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0z0gmvv7jrpan6y42p5f5wd48rqcd96igp592w1c5cr573c8qjrm";
|
sha256 = "0z0gmvv7jrpan6y42p5f5wd48rqcd96igp592w1c5cr573c8qjrm";
|
||||||
libName = "tokio_tls";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4504,7 +4455,6 @@ rec {
|
||||||
version = "0.1.6";
|
version = "0.1.6";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "10hdcnxdp0dxvj44jl1nrrpg30jbisqclbqs0f5w6f8bc47b3872";
|
sha256 = "10hdcnxdp0dxvj44jl1nrrpg30jbisqclbqs0f5w6f8bc47b3872";
|
||||||
libName = "tokio_udp";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4545,7 +4495,6 @@ rec {
|
||||||
version = "0.2.7";
|
version = "0.2.7";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1q74sydx22l4mkmrz02l4i5swddwr1pryxvhrzdwkj0i86na8mxb";
|
sha256 = "1q74sydx22l4mkmrz02l4i5swddwr1pryxvhrzdwkj0i86na8mxb";
|
||||||
libName = "tokio_uds";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Carl Lerche <me@carllerche.com>"
|
"Carl Lerche <me@carllerche.com>"
|
||||||
];
|
];
|
||||||
|
@ -4614,7 +4563,6 @@ rec {
|
||||||
version = "1.0.12";
|
version = "1.0.12";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "0jzf1znfpb2gx8nr8mvmyqs1crnv79l57nxnbiszc7xf7ynbjm1k";
|
sha256 = "0jzf1znfpb2gx8nr8mvmyqs1crnv79l57nxnbiszc7xf7ynbjm1k";
|
||||||
libName = "unicode_ident";
|
|
||||||
authors = [
|
authors = [
|
||||||
"David Tolnay <dtolnay@gmail.com>"
|
"David Tolnay <dtolnay@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -4625,7 +4573,6 @@ rec {
|
||||||
version = "0.2.4";
|
version = "0.2.4";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "131dfzf7d8fsr1ivch34x42c2d1ik5ig3g78brxncnn0r1sdyqpr";
|
sha256 = "131dfzf7d8fsr1ivch34x42c2d1ik5ig3g78brxncnn0r1sdyqpr";
|
||||||
libName = "unicode_xid";
|
|
||||||
authors = [
|
authors = [
|
||||||
"erick.tryzelaar <erick.tryzelaar@gmail.com>"
|
"erick.tryzelaar <erick.tryzelaar@gmail.com>"
|
||||||
"kwantam <kwantam@gmail.com>"
|
"kwantam <kwantam@gmail.com>"
|
||||||
|
@ -4676,7 +4623,6 @@ rec {
|
||||||
version = "0.2.92";
|
version = "0.2.92";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "1a4mcw13nsk3fr8fxjzf9kk1wj88xkfsmnm0pjraw01ryqfm7qjb";
|
sha256 = "1a4mcw13nsk3fr8fxjzf9kk1wj88xkfsmnm0pjraw01ryqfm7qjb";
|
||||||
libName = "wasm_bindgen";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The wasm-bindgen Developers"
|
"The wasm-bindgen Developers"
|
||||||
];
|
];
|
||||||
|
@ -4708,7 +4654,6 @@ rec {
|
||||||
version = "0.2.92";
|
version = "0.2.92";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "1nj7wxbi49f0rw9d44rjzms26xlw6r76b2mrggx8jfbdjrxphkb1";
|
sha256 = "1nj7wxbi49f0rw9d44rjzms26xlw6r76b2mrggx8jfbdjrxphkb1";
|
||||||
libName = "wasm_bindgen_backend";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The wasm-bindgen Developers"
|
"The wasm-bindgen Developers"
|
||||||
];
|
];
|
||||||
|
@ -4754,7 +4699,6 @@ rec {
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "09npa1srjjabd6nfph5yc03jb26sycjlxhy0c2a1pdrpx4yq5y51";
|
sha256 = "09npa1srjjabd6nfph5yc03jb26sycjlxhy0c2a1pdrpx4yq5y51";
|
||||||
procMacro = true;
|
procMacro = true;
|
||||||
libName = "wasm_bindgen_macro";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The wasm-bindgen Developers"
|
"The wasm-bindgen Developers"
|
||||||
];
|
];
|
||||||
|
@ -4779,7 +4723,6 @@ rec {
|
||||||
version = "0.2.92";
|
version = "0.2.92";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "1dqv2xs8zcyw4kjgzj84bknp2h76phmsb3n7j6hn396h4ssifkz9";
|
sha256 = "1dqv2xs8zcyw4kjgzj84bknp2h76phmsb3n7j6hn396h4ssifkz9";
|
||||||
libName = "wasm_bindgen_macro_support";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The wasm-bindgen Developers"
|
"The wasm-bindgen Developers"
|
||||||
];
|
];
|
||||||
|
@ -4818,7 +4761,6 @@ rec {
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
links = "wasm_bindgen";
|
links = "wasm_bindgen";
|
||||||
sha256 = "15kyavsrna2cvy30kg03va257fraf9x00ny554vxngvpyaa0q6dg";
|
sha256 = "15kyavsrna2cvy30kg03va257fraf9x00ny554vxngvpyaa0q6dg";
|
||||||
libName = "wasm_bindgen_shared";
|
|
||||||
authors = [
|
authors = [
|
||||||
"The wasm-bindgen Developers"
|
"The wasm-bindgen Developers"
|
||||||
];
|
];
|
||||||
|
@ -4846,12 +4788,12 @@ rec {
|
||||||
{
|
{
|
||||||
name = "winapi-i686-pc-windows-gnu";
|
name = "winapi-i686-pc-windows-gnu";
|
||||||
packageId = "winapi-i686-pc-windows-gnu";
|
packageId = "winapi-i686-pc-windows-gnu";
|
||||||
target = { target, features }: (stdenv.hostPlatform.rust.rustcTarget == "i686-pc-windows-gnu");
|
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "i686-pc-windows-gnu");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "winapi-x86_64-pc-windows-gnu";
|
name = "winapi-x86_64-pc-windows-gnu";
|
||||||
packageId = "winapi-x86_64-pc-windows-gnu";
|
packageId = "winapi-x86_64-pc-windows-gnu";
|
||||||
target = { target, features }: (stdenv.hostPlatform.rust.rustcTarget == "x86_64-pc-windows-gnu");
|
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-gnu");
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
features = {
|
features = {
|
||||||
|
@ -4875,7 +4817,6 @@ rec {
|
||||||
version = "0.4.0";
|
version = "0.4.0";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc";
|
sha256 = "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc";
|
||||||
libName = "winapi_i686_pc_windows_gnu";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Peter Atashian <retep998@gmail.com>"
|
"Peter Atashian <retep998@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -4886,7 +4827,6 @@ rec {
|
||||||
version = "0.1.6";
|
version = "0.1.6";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "15i5lm39wd44004i9d5qspry2cynkrpvwzghr6s2c3dsk28nz7pj";
|
sha256 = "15i5lm39wd44004i9d5qspry2cynkrpvwzghr6s2c3dsk28nz7pj";
|
||||||
libName = "winapi_util";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Andrew Gallant <jamslam@gmail.com>"
|
"Andrew Gallant <jamslam@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -4905,7 +4845,6 @@ rec {
|
||||||
version = "0.4.0";
|
version = "0.4.0";
|
||||||
edition = "2015";
|
edition = "2015";
|
||||||
sha256 = "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki";
|
sha256 = "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki";
|
||||||
libName = "winapi_x86_64_pc_windows_gnu";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Peter Atashian <retep998@gmail.com>"
|
"Peter Atashian <retep998@gmail.com>"
|
||||||
];
|
];
|
||||||
|
@ -4916,7 +4855,6 @@ rec {
|
||||||
version = "0.52.0";
|
version = "0.52.0";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "1nc3qv7sy24x0nlnb32f7alzpd6f72l4p24vl65vydbyil669ark";
|
sha256 = "1nc3qv7sy24x0nlnb32f7alzpd6f72l4p24vl65vydbyil669ark";
|
||||||
libName = "windows_core";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Microsoft"
|
"Microsoft"
|
||||||
];
|
];
|
||||||
|
@ -4934,7 +4872,6 @@ rec {
|
||||||
version = "0.52.0";
|
version = "0.52.0";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "0gd3v4ji88490zgb6b5mq5zgbvwv7zx1ibn8v3x83rwcdbryaar8";
|
sha256 = "0gd3v4ji88490zgb6b5mq5zgbvwv7zx1ibn8v3x83rwcdbryaar8";
|
||||||
libName = "windows_sys";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Microsoft"
|
"Microsoft"
|
||||||
];
|
];
|
||||||
|
@ -5182,7 +5119,6 @@ rec {
|
||||||
version = "0.48.5";
|
version = "0.48.5";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "034ljxqshifs1lan89xwpcy1hp0lhdh4b5n0d2z4fwjx2piacbws";
|
sha256 = "034ljxqshifs1lan89xwpcy1hp0lhdh4b5n0d2z4fwjx2piacbws";
|
||||||
libName = "windows_targets";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Microsoft"
|
"Microsoft"
|
||||||
];
|
];
|
||||||
|
@ -5190,7 +5126,7 @@ rec {
|
||||||
{
|
{
|
||||||
name = "windows_aarch64_gnullvm";
|
name = "windows_aarch64_gnullvm";
|
||||||
packageId = "windows_aarch64_gnullvm 0.48.5";
|
packageId = "windows_aarch64_gnullvm 0.48.5";
|
||||||
target = { target, features }: (stdenv.hostPlatform.rust.rustcTarget == "aarch64-pc-windows-gnullvm");
|
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "aarch64-pc-windows-gnullvm");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "windows_aarch64_msvc";
|
name = "windows_aarch64_msvc";
|
||||||
|
@ -5215,7 +5151,7 @@ rec {
|
||||||
{
|
{
|
||||||
name = "windows_x86_64_gnullvm";
|
name = "windows_x86_64_gnullvm";
|
||||||
packageId = "windows_x86_64_gnullvm 0.48.5";
|
packageId = "windows_x86_64_gnullvm 0.48.5";
|
||||||
target = { target, features }: (stdenv.hostPlatform.rust.rustcTarget == "x86_64-pc-windows-gnullvm");
|
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-gnullvm");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "windows_x86_64_msvc";
|
name = "windows_x86_64_msvc";
|
||||||
|
@ -5230,7 +5166,6 @@ rec {
|
||||||
version = "0.52.4";
|
version = "0.52.4";
|
||||||
edition = "2021";
|
edition = "2021";
|
||||||
sha256 = "06sdd7fin3dj9cmlg6n1dw0n1l10jhn9b8ckz1cqf0drb9z7plvx";
|
sha256 = "06sdd7fin3dj9cmlg6n1dw0n1l10jhn9b8ckz1cqf0drb9z7plvx";
|
||||||
libName = "windows_targets";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Microsoft"
|
"Microsoft"
|
||||||
];
|
];
|
||||||
|
@ -5238,7 +5173,7 @@ rec {
|
||||||
{
|
{
|
||||||
name = "windows_aarch64_gnullvm";
|
name = "windows_aarch64_gnullvm";
|
||||||
packageId = "windows_aarch64_gnullvm 0.52.4";
|
packageId = "windows_aarch64_gnullvm 0.52.4";
|
||||||
target = { target, features }: (stdenv.hostPlatform.rust.rustcTarget == "aarch64-pc-windows-gnullvm");
|
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "aarch64-pc-windows-gnullvm");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "windows_aarch64_msvc";
|
name = "windows_aarch64_msvc";
|
||||||
|
@ -5263,7 +5198,7 @@ rec {
|
||||||
{
|
{
|
||||||
name = "windows_x86_64_gnullvm";
|
name = "windows_x86_64_gnullvm";
|
||||||
packageId = "windows_x86_64_gnullvm 0.52.4";
|
packageId = "windows_x86_64_gnullvm 0.52.4";
|
||||||
target = { target, features }: (stdenv.hostPlatform.rust.rustcTarget == "x86_64-pc-windows-gnullvm");
|
target = { target, features }: (pkgs.rust.lib.toRustTarget stdenv.hostPlatform == "x86_64-pc-windows-gnullvm");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "windows_x86_64_msvc";
|
name = "windows_x86_64_msvc";
|
||||||
|
@ -5441,7 +5376,6 @@ rec {
|
||||||
version = "0.4.5";
|
version = "0.4.5";
|
||||||
edition = "2018";
|
edition = "2018";
|
||||||
sha256 = "118wbqrr4n6wgk5rjjnlrdlahawlxc1bdsx146mwk8f79in97han";
|
sha256 = "118wbqrr4n6wgk5rjjnlrdlahawlxc1bdsx146mwk8f79in97han";
|
||||||
libName = "yaml_rust";
|
|
||||||
authors = [
|
authors = [
|
||||||
"Yuheng Chen <yuhengchen@sensetime.com>"
|
"Yuheng Chen <yuhengchen@sensetime.com>"
|
||||||
];
|
];
|
||||||
|
@ -5468,11 +5402,14 @@ rec {
|
||||||
fuchsia = true;
|
fuchsia = true;
|
||||||
test = false;
|
test = false;
|
||||||
|
|
||||||
inherit (platform.rust.platform)
|
/* We are choosing an arbitrary rust version to grab `lib` from,
|
||||||
arch
|
which is unfortunate, but `lib` has been version-agnostic the
|
||||||
os
|
whole time so this is good enough for now.
|
||||||
vendor;
|
*/
|
||||||
family = platform.rust.platform.target-family;
|
os = pkgs.rust.lib.toTargetOs platform;
|
||||||
|
arch = pkgs.rust.lib.toTargetArch platform;
|
||||||
|
family = pkgs.rust.lib.toTargetFamily platform;
|
||||||
|
vendor = pkgs.rust.lib.toTargetVendor platform;
|
||||||
env = "gnu";
|
env = "gnu";
|
||||||
endian =
|
endian =
|
||||||
if platform.parsed.cpu.significantByte.name == "littleEndian"
|
if platform.parsed.cpu.significantByte.name == "littleEndian"
|
||||||
|
@ -5549,7 +5486,6 @@ rec {
|
||||||
(
|
(
|
||||||
_: {
|
_: {
|
||||||
buildTests = true;
|
buildTests = true;
|
||||||
release = false;
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
# If the user hasn't set any pre/post commands, we don't want to
|
# If the user hasn't set any pre/post commands, we don't want to
|
||||||
|
@ -5562,41 +5498,41 @@ rec {
|
||||||
testPostRun
|
testPostRun
|
||||||
]);
|
]);
|
||||||
in
|
in
|
||||||
pkgs.stdenvNoCC.mkDerivation {
|
pkgs.runCommand "run-tests-${testCrate.name}"
|
||||||
name = "run-tests-${testCrate.name}";
|
{
|
||||||
|
inherit testCrateFlags;
|
||||||
|
buildInputs = testInputs;
|
||||||
|
} ''
|
||||||
|
set -e
|
||||||
|
|
||||||
inherit (crate) src;
|
export RUST_BACKTRACE=1
|
||||||
|
|
||||||
inherit testCrateFlags;
|
# recreate a file hierarchy as when running tests with cargo
|
||||||
|
|
||||||
buildInputs = testInputs;
|
# the source for test data
|
||||||
|
${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src}
|
||||||
|
|
||||||
buildPhase = ''
|
# build outputs
|
||||||
set -e
|
testRoot=target/debug
|
||||||
export RUST_BACKTRACE=1
|
mkdir -p $testRoot
|
||||||
|
|
||||||
# build outputs
|
# executables of the crate
|
||||||
testRoot=target/debug
|
# we copy to prevent std::env::current_exe() to resolve to a store location
|
||||||
mkdir -p $testRoot
|
for i in ${crate}/bin/*; do
|
||||||
|
cp "$i" "$testRoot"
|
||||||
|
done
|
||||||
|
chmod +w -R .
|
||||||
|
|
||||||
# executables of the crate
|
# test harness executables are suffixed with a hash, like cargo does
|
||||||
# we copy to prevent std::env::current_exe() to resolve to a store location
|
# this allows to prevent name collision with the main
|
||||||
for i in ${crate}/bin/*; do
|
# executables of the crate
|
||||||
cp "$i" "$testRoot"
|
hash=$(basename $out)
|
||||||
done
|
for file in ${drv}/tests/*; do
|
||||||
chmod +w -R .
|
f=$testRoot/$(basename $file)-$hash
|
||||||
|
cp $file $f
|
||||||
# test harness executables are suffixed with a hash, like cargo does
|
${testCommand}
|
||||||
# this allows to prevent name collision with the main
|
done
|
||||||
# executables of the crate
|
'';
|
||||||
hash=$(basename $out)
|
|
||||||
for file in ${drv}/tests/*; do
|
|
||||||
f=$testRoot/$(basename $file)-$hash
|
|
||||||
cp $file $f
|
|
||||||
${testCommand}
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
pkgs.runCommand "${crate.name}-linked"
|
pkgs.runCommand "${crate.name}-linked"
|
||||||
{
|
{
|
||||||
|
@ -5705,7 +5641,7 @@ rec {
|
||||||
let
|
let
|
||||||
self = {
|
self = {
|
||||||
crates = lib.mapAttrs (packageId: value: buildByPackageIdForPkgsImpl self pkgs packageId) crateConfigs;
|
crates = lib.mapAttrs (packageId: value: buildByPackageIdForPkgsImpl self pkgs packageId) crateConfigs;
|
||||||
target = makeTarget stdenv.hostPlatform;
|
target = makeTarget pkgs.stdenv.hostPlatform;
|
||||||
build = mkBuiltByPackageIdByPkgs pkgs.buildPackages;
|
build = mkBuiltByPackageIdByPkgs pkgs.buildPackages;
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
|
@ -5780,6 +5716,8 @@ rec {
|
||||||
buildRustCrateForPkgsFunc pkgs
|
buildRustCrateForPkgsFunc pkgs
|
||||||
(
|
(
|
||||||
crateConfig // {
|
crateConfig // {
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/218712
|
||||||
|
dontStrip = stdenv.hostPlatform.isDarwin;
|
||||||
src = crateConfig.src or (
|
src = crateConfig.src or (
|
||||||
pkgs.fetchurl rec {
|
pkgs.fetchurl rec {
|
||||||
name = "${crateConfig.crateName}-${crateConfig.version}.tar.gz";
|
name = "${crateConfig.crateName}-${crateConfig.version}.tar.gz";
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
{ makeSetupHook }:
|
{ makeSetupHook }:
|
||||||
|
|
||||||
makeSetupHook
|
makeSetupHook {
|
||||||
{
|
|
||||||
name = "rules_java_bazel_hook";
|
name = "rules_java_bazel_hook";
|
||||||
substitutions = {
|
substitutions = {
|
||||||
local_java = ./local_java;
|
local_java = ./local_java;
|
||||||
|
|
|
@ -37,9 +37,7 @@ let
|
||||||
cp -R . $out
|
cp -R . $out
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
in
|
in makeSetupHook {
|
||||||
makeSetupHook
|
|
||||||
{
|
|
||||||
name = "bazelbuild-rules_nodejs-5-hook";
|
name = "bazelbuild-rules_nodejs-5-hook";
|
||||||
propagatedBuildInputs = [
|
propagatedBuildInputs = [
|
||||||
nodejs
|
nodejs
|
||||||
|
|
|
@ -16,16 +16,12 @@
|
||||||
|
|
||||||
let
|
let
|
||||||
cleanAttrs = lib.flip removeAttrs [
|
cleanAttrs = lib.flip removeAttrs [
|
||||||
"bazelTargets"
|
"bazelTargets" "depsHash" "extraCacheInstall" "extraBuildSetup" "extraBuildInstall"
|
||||||
"depsHash"
|
|
||||||
"extraCacheInstall"
|
|
||||||
"extraBuildSetup"
|
|
||||||
"extraBuildInstall"
|
|
||||||
];
|
];
|
||||||
attrs = cleanAttrs baseAttrs;
|
attrs = cleanAttrs baseAttrs;
|
||||||
|
|
||||||
base = stdenv.mkDerivation (attrs // {
|
base = stdenv.mkDerivation (attrs // {
|
||||||
nativeBuildInputs = (attrs.nativeBuildInputs or [ ]) ++ [
|
nativeBuildInputs = (attrs.nativeBuildInputs or []) ++ [
|
||||||
bazel
|
bazel
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -73,7 +69,7 @@ let
|
||||||
|
|
||||||
inherit cache;
|
inherit cache;
|
||||||
|
|
||||||
nativeBuildInputs = (base.nativeBuildInputs or [ ]) ++ [
|
nativeBuildInputs = (base.nativeBuildInputs or []) ++ [
|
||||||
coreutils
|
coreutils
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -106,5 +102,4 @@ let
|
||||||
runHook postInstall
|
runHook postInstall
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
in
|
in build
|
||||||
build
|
|
||||||
|
|
1
nix/buildManPages/OWNERS
Normal file
1
nix/buildManPages/OWNERS
Normal file
|
@ -0,0 +1 @@
|
||||||
|
sterni
|
|
@ -99,7 +99,11 @@ rec {
|
||||||
#
|
#
|
||||||
# See //nix/dependency-analyzer for documentation on the structure of `targetDepMap`.
|
# See //nix/dependency-analyzer for documentation on the structure of `targetDepMap`.
|
||||||
getTargetPipelineDeps = targetDepMap: drvPath:
|
getTargetPipelineDeps = targetDepMap: drvPath:
|
||||||
builtins.map keyForDrv (targetDepMap.${drvPath}.knownDeps or [ ]);
|
# Sanity check: We should only call this function on targets explicitly
|
||||||
|
# passed to mkPipeline. Thus it should have been passed as a “known” drv to
|
||||||
|
# dependency-analyzer.
|
||||||
|
assert targetDepMap.${drvPath}.known;
|
||||||
|
builtins.map keyForDrv targetDepMap.${drvPath}.knownDeps;
|
||||||
|
|
||||||
# Create a pipeline step from a single target.
|
# Create a pipeline step from a single target.
|
||||||
mkStep = { headBranch, parentTargetMap, targetDepMap, target, cancelOnBuildFailing }:
|
mkStep = { headBranch, parentTargetMap, targetDepMap, target, cancelOnBuildFailing }:
|
||||||
|
@ -227,19 +231,7 @@ rec {
|
||||||
buildEnabled = elem "build" enabledPhases;
|
buildEnabled = elem "build" enabledPhases;
|
||||||
|
|
||||||
# Dependency relations between the `drvTargets`. See also //nix/dependency-analyzer.
|
# Dependency relations between the `drvTargets`. See also //nix/dependency-analyzer.
|
||||||
targetDepMap =
|
targetDepMap = dependency-analyzer (dependency-analyzer.drvsToPaths drvTargets);
|
||||||
let
|
|
||||||
# Only calculate dependencies between drvTargets that were not part of
|
|
||||||
# the previous pipeline (per parentTargetMap). Unchanged targets will
|
|
||||||
# be skipped (assumed already built), so it's useless to emit deps
|
|
||||||
# on their steps.
|
|
||||||
changedDrvTargets = builtins.filter
|
|
||||||
(target:
|
|
||||||
parentTargetMap.${mkLabel target}.drvPath or null != target.drvPath
|
|
||||||
)
|
|
||||||
drvTargets;
|
|
||||||
in
|
|
||||||
dependency-analyzer (dependency-analyzer.drvsToPaths changedDrvTargets);
|
|
||||||
|
|
||||||
# Convert a target into all of its steps, separated by build
|
# Convert a target into all of its steps, separated by build
|
||||||
# phase (as phases end up in different chunks).
|
# phase (as phases end up in different chunks).
|
||||||
|
|
|
@ -259,12 +259,12 @@ in
|
||||||
, args
|
, args
|
||||||
, filter ? (_parts: x: x)
|
, filter ? (_parts: x: x)
|
||||||
, scopedArgs ? { }
|
, scopedArgs ? { }
|
||||||
, rootDir ? true
|
|
||||||
}:
|
}:
|
||||||
readTree {
|
readTree {
|
||||||
inherit args scopedArgs rootDir;
|
inherit args scopedArgs;
|
||||||
argsFilter = filter;
|
argsFilter = filter;
|
||||||
initPath = path;
|
initPath = path;
|
||||||
|
rootDir = true;
|
||||||
parts = [ ];
|
parts = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ let
|
||||||
+ pipe tree [
|
+ pipe tree [
|
||||||
(mapAttrsToList (k: v:
|
(mapAttrsToList (k: v:
|
||||||
if isPathLike v then
|
if isPathLike v then
|
||||||
"cp -R --reflink=auto ${esc "${v}"} \"$out/\"${esc path}/${esc k}"
|
"cp -R --reflink=auto ${v} \"$out/\"${esc path}/${esc k}"
|
||||||
else if lib.isAttrs v then
|
else if lib.isAttrs v then
|
||||||
writeTreeAtPath (path + "/" + k) v
|
writeTreeAtPath (path + "/" + k) v
|
||||||
else
|
else
|
||||||
|
|
|
@ -23,6 +23,7 @@ let
|
||||||
{ name
|
{ name
|
||||||
, dependencies ? [ ]
|
, dependencies ? [ ]
|
||||||
, doCheck ? true
|
, doCheck ? true
|
||||||
|
,
|
||||||
}: src:
|
}: src:
|
||||||
(if doCheck then testRustSimple else pkgs.lib.id)
|
(if doCheck then testRustSimple else pkgs.lib.id)
|
||||||
(pkgs.buildRustCrate ({
|
(pkgs.buildRustCrate ({
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# This program is used as a Gerrit hook to trigger builds on
|
# This program is used as a Gerrit hook to trigger builds on
|
||||||
# Buildkite and perform other maintenance tasks.
|
# Buildkite, Sourcegraph reindexing and other maintenance tasks.
|
||||||
{ depot, ... }:
|
{ depot, ... }:
|
||||||
|
|
||||||
depot.nix.buildGo.program {
|
depot.nix.buildGo.program {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
//
|
//
|
||||||
// Gerrit (ref-updated) hook:
|
// Gerrit (ref-updated) hook:
|
||||||
// - Trigger Buildkite CI builds
|
// - Trigger Buildkite CI builds
|
||||||
|
// - Trigger SourceGraph repository index updates
|
||||||
//
|
//
|
||||||
// Buildkite (post-command) hook:
|
// Buildkite (post-command) hook:
|
||||||
// - Submit CL verification status back to Gerrit
|
// - Submit CL verification status back to Gerrit
|
||||||
|
@ -54,6 +55,10 @@ type config struct {
|
||||||
BuildkiteProject string `json:"buildkiteProject"`
|
BuildkiteProject string `json:"buildkiteProject"`
|
||||||
BuildkiteToken string `json:"buildkiteToken"`
|
BuildkiteToken string `json:"buildkiteToken"`
|
||||||
GerritChangeName string `json:"gerritChangeName"`
|
GerritChangeName string `json:"gerritChangeName"`
|
||||||
|
|
||||||
|
// Optional configuration for Sourcegraph trigger updates.
|
||||||
|
SourcegraphUrl string `json:"sourcegraphUrl"`
|
||||||
|
SourcegraphToken string `json:"sourcegraphToken"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// buildTrigger represents the information passed to besadii when it
|
// buildTrigger represents the information passed to besadii when it
|
||||||
|
@ -149,6 +154,11 @@ func loadConfig() (*config, error) {
|
||||||
return nil, fmt.Errorf("invalid 'gerritChangeName': %s", cfg.GerritChangeName)
|
return nil, fmt.Errorf("invalid 'gerritChangeName': %s", cfg.GerritChangeName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Rudimentary config validation logic
|
||||||
|
if cfg.SourcegraphUrl != "" && cfg.SourcegraphToken == "" {
|
||||||
|
return nil, fmt.Errorf("'SourcegraphToken' must be set if 'SourcegraphUrl' is set")
|
||||||
|
}
|
||||||
|
|
||||||
if cfg.Repository == "" || cfg.Branch == "" {
|
if cfg.Repository == "" || cfg.Branch == "" {
|
||||||
return nil, fmt.Errorf("missing repository configuration (required: repository, branch)")
|
return nil, fmt.Errorf("missing repository configuration (required: repository, branch)")
|
||||||
}
|
}
|
||||||
|
@ -289,6 +299,26 @@ func triggerBuild(cfg *config, log *syslog.Writer, trigger *buildTrigger) error
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Trigger a Sourcegraph repository index update.
|
||||||
|
//
|
||||||
|
// https://docs.sourcegraph.com/admin/repo/webhooks
|
||||||
|
func triggerIndexUpdate(cfg *config, log *syslog.Writer) error {
|
||||||
|
req, err := http.NewRequest("POST", cfg.SourcegraphUrl, nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Add("Authorization", "token "+cfg.SourcegraphToken)
|
||||||
|
|
||||||
|
_, err = http.DefaultClient.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to trigger Sourcegraph index update: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info("triggered sourcegraph index update")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Gerrit passes more flags than we want, but Rob Pike decided[0] in
|
// Gerrit passes more flags than we want, but Rob Pike decided[0] in
|
||||||
// 2013 that the Go art project will not allow users to ignore flags
|
// 2013 that the Go art project will not allow users to ignore flags
|
||||||
// because he "doesn't like it". This function allows users to ignore
|
// because he "doesn't like it". This function allows users to ignore
|
||||||
|
@ -428,6 +458,13 @@ func gerritHookMain(cfg *config, log *syslog.Writer, trigger *buildTrigger) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Err(fmt.Sprintf("failed to trigger Buildkite build: %s", err))
|
log.Err(fmt.Sprintf("failed to trigger Buildkite build: %s", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cfg.SourcegraphUrl != "" && trigger.ref == cfg.Branch {
|
||||||
|
err = triggerIndexUpdate(cfg, log)
|
||||||
|
if err != nil {
|
||||||
|
log.Err(fmt.Sprintf("failed to trigger sourcegraph index update: %s", err))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func postCommandMain(cfg *config) {
|
func postCommandMain(cfg *config) {
|
||||||
|
|
|
@ -8,9 +8,7 @@ terraform {
|
||||||
}
|
}
|
||||||
|
|
||||||
backend "s3" {
|
backend "s3" {
|
||||||
endpoints = {
|
endpoint = "https://objects.dc-sto1.glesys.net"
|
||||||
s3 = "https://objects.dc-sto1.glesys.net"
|
|
||||||
}
|
|
||||||
bucket = "tvl-state"
|
bucket = "tvl-state"
|
||||||
key = "terraform/tvl-buildkite"
|
key = "terraform/tvl-buildkite"
|
||||||
region = "glesys"
|
region = "glesys"
|
||||||
|
@ -18,8 +16,6 @@ terraform {
|
||||||
skip_credentials_validation = true
|
skip_credentials_validation = true
|
||||||
skip_region_validation = true
|
skip_region_validation = true
|
||||||
skip_metadata_api_check = true
|
skip_metadata_api_check = true
|
||||||
skip_requesting_account_id = true
|
|
||||||
skip_s3_checksum = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
274
ops/journaldriver/Cargo.lock
generated
274
ops/journaldriver/Cargo.lock
generated
|
@ -4,18 +4,18 @@ version = 3
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aho-corasick"
|
name = "aho-corasick"
|
||||||
version = "1.1.3"
|
version = "1.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.86"
|
version = "1.0.75"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "base64"
|
name = "base64"
|
||||||
|
@ -25,9 +25,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "2.6.0"
|
version = "2.4.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
|
checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "build-env"
|
name = "build-env"
|
||||||
|
@ -37,11 +37,11 @@ checksum = "e068f31938f954b695423ecaf756179597627d0828c0d3e48c0a722a8b23cf9e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.1.15"
|
version = "1.0.84"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6"
|
checksum = "0f8e7c90afad890484a21653d08b6e209ae34770fb5ee298f9c699fcc1e5c856"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"shlex",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -73,9 +73,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "curl"
|
name = "curl"
|
||||||
version = "0.4.46"
|
version = "0.4.44"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6"
|
checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"curl-sys",
|
"curl-sys",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -83,14 +83,14 @@ dependencies = [
|
||||||
"openssl-sys",
|
"openssl-sys",
|
||||||
"schannel",
|
"schannel",
|
||||||
"socket2",
|
"socket2",
|
||||||
"windows-sys 0.52.0",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "curl-sys"
|
name = "curl-sys"
|
||||||
version = "0.4.74+curl-8.9.0"
|
version = "0.4.68+curl-8.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8af10b986114528fcdc4b63b6f5f021b7057618411046a4de2ba0f0149a097bf"
|
checksum = "b4a0d18d88360e374b16b2273c832b5e57258ffc1d4aa4f96b108e0738d5752f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -98,14 +98,14 @@ dependencies = [
|
||||||
"openssl-sys",
|
"openssl-sys",
|
||||||
"pkg-config",
|
"pkg-config",
|
||||||
"vcpkg",
|
"vcpkg",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deranged"
|
name = "deranged"
|
||||||
version = "0.3.11"
|
version = "0.3.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
|
checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"powerfmt",
|
"powerfmt",
|
||||||
"serde",
|
"serde",
|
||||||
|
@ -113,9 +113,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "env_logger"
|
name = "env_logger"
|
||||||
version = "0.10.2"
|
version = "0.10.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580"
|
checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"humantime",
|
"humantime",
|
||||||
"is-terminal",
|
"is-terminal",
|
||||||
|
@ -124,6 +124,16 @@ dependencies = [
|
||||||
"termcolor",
|
"termcolor",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "errno"
|
||||||
|
version = "0.3.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"windows-sys",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "foreign-types"
|
name = "foreign-types"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
|
@ -168,9 +178,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hermit-abi"
|
name = "hermit-abi"
|
||||||
version = "0.4.0"
|
version = "0.3.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
|
checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "humantime"
|
name = "humantime"
|
||||||
|
@ -180,20 +190,20 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "is-terminal"
|
name = "is-terminal"
|
||||||
version = "0.4.13"
|
version = "0.4.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b"
|
checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hermit-abi",
|
"hermit-abi",
|
||||||
"libc",
|
"rustix",
|
||||||
"windows-sys 0.52.0",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.11"
|
version = "1.0.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
|
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "journaldriver"
|
name = "journaldriver"
|
||||||
|
@ -214,15 +224,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lazy_static"
|
name = "lazy_static"
|
||||||
version = "1.5.0"
|
version = "1.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.158"
|
version = "0.2.150"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
|
checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libsystemd-sys"
|
name = "libsystemd-sys"
|
||||||
|
@ -237,9 +247,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libz-sys"
|
name = "libz-sys"
|
||||||
version = "1.1.20"
|
version = "1.1.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472"
|
checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -248,10 +258,16 @@ dependencies = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "linux-raw-sys"
|
||||||
version = "0.4.22"
|
version = "0.4.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
|
checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "log"
|
||||||
|
version = "0.4.20"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "medallion"
|
name = "medallion"
|
||||||
|
@ -269,27 +285,21 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.7.4"
|
version = "2.6.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-conv"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "once_cell"
|
||||||
version = "1.19.0"
|
version = "1.18.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
|
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl"
|
name = "openssl"
|
||||||
version = "0.10.66"
|
version = "0.10.59"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1"
|
checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
|
@ -319,9 +329,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl-sys"
|
name = "openssl-sys"
|
||||||
version = "0.9.103"
|
version = "0.9.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6"
|
checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -331,9 +341,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pkg-config"
|
name = "pkg-config"
|
||||||
version = "0.3.30"
|
version = "0.3.27"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
|
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "powerfmt"
|
name = "powerfmt"
|
||||||
|
@ -343,27 +353,27 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.86"
|
version = "1.0.69"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
|
checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.37"
|
version = "1.0.33"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
|
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.10.6"
|
version = "1.10.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
|
checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"memchr",
|
"memchr",
|
||||||
|
@ -373,9 +383,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-automata"
|
name = "regex-automata"
|
||||||
version = "0.4.7"
|
version = "0.4.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
|
checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"memchr",
|
"memchr",
|
||||||
|
@ -384,39 +394,52 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-syntax"
|
name = "regex-syntax"
|
||||||
version = "0.8.4"
|
version = "0.8.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
|
checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustix"
|
||||||
|
version = "0.38.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"errno",
|
||||||
|
"libc",
|
||||||
|
"linux-raw-sys",
|
||||||
|
"windows-sys",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.18"
|
version = "1.0.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
|
checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "schannel"
|
name = "schannel"
|
||||||
version = "0.1.23"
|
version = "0.1.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
|
checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.52.0",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.209"
|
version = "1.0.192"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09"
|
checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.209"
|
version = "1.0.192"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170"
|
checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -425,37 +448,30 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.127"
|
version = "1.0.108"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad"
|
checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"memchr",
|
|
||||||
"ryu",
|
"ryu",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "shlex"
|
|
||||||
version = "1.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "socket2"
|
name = "socket2"
|
||||||
version = "0.5.7"
|
version = "0.4.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
|
checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"windows-sys 0.52.0",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.77"
|
version = "2.0.39"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
|
checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -478,22 +494,21 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "termcolor"
|
name = "termcolor"
|
||||||
version = "1.4.1"
|
version = "1.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
|
checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.3.36"
|
version = "0.3.30"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
|
checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"deranged",
|
"deranged",
|
||||||
"itoa",
|
"itoa",
|
||||||
"num-conv",
|
|
||||||
"powerfmt",
|
"powerfmt",
|
||||||
"serde",
|
"serde",
|
||||||
"time-core",
|
"time-core",
|
||||||
|
@ -508,11 +523,10 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time-macros"
|
name = "time-macros"
|
||||||
version = "0.2.18"
|
version = "0.2.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
|
checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-conv",
|
|
||||||
"time-core",
|
"time-core",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -534,43 +548,55 @@ version = "0.2.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi"
|
||||||
|
version = "0.3.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||||
|
dependencies = [
|
||||||
|
"winapi-i686-pc-windows-gnu",
|
||||||
|
"winapi-x86_64-pc-windows-gnu",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-i686-pc-windows-gnu"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winapi-util"
|
name = "winapi-util"
|
||||||
version = "0.1.9"
|
version = "0.1.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-sys 0.59.0",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-sys"
|
name = "winapi-x86_64-pc-windows-gnu"
|
||||||
version = "0.52.0"
|
version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
dependencies = [
|
|
||||||
"windows-targets",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-sys"
|
name = "windows-sys"
|
||||||
version = "0.59.0"
|
version = "0.48.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-targets",
|
"windows-targets",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-targets"
|
name = "windows-targets"
|
||||||
version = "0.52.6"
|
version = "0.48.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows_aarch64_gnullvm",
|
"windows_aarch64_gnullvm",
|
||||||
"windows_aarch64_msvc",
|
"windows_aarch64_msvc",
|
||||||
"windows_i686_gnu",
|
"windows_i686_gnu",
|
||||||
"windows_i686_gnullvm",
|
|
||||||
"windows_i686_msvc",
|
"windows_i686_msvc",
|
||||||
"windows_x86_64_gnu",
|
"windows_x86_64_gnu",
|
||||||
"windows_x86_64_gnullvm",
|
"windows_x86_64_gnullvm",
|
||||||
|
@ -579,48 +605,42 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_gnullvm"
|
name = "windows_aarch64_gnullvm"
|
||||||
version = "0.52.6"
|
version = "0.48.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_msvc"
|
name = "windows_aarch64_msvc"
|
||||||
version = "0.52.6"
|
version = "0.48.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_gnu"
|
name = "windows_i686_gnu"
|
||||||
version = "0.52.6"
|
version = "0.48.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_gnullvm"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_msvc"
|
name = "windows_i686_msvc"
|
||||||
version = "0.52.6"
|
version = "0.48.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnu"
|
name = "windows_x86_64_gnu"
|
||||||
version = "0.52.6"
|
version = "0.48.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnullvm"
|
name = "windows_x86_64_gnullvm"
|
||||||
version = "0.52.6"
|
version = "0.48.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_msvc"
|
name = "windows_x86_64_msvc"
|
||||||
version = "0.52.6"
|
version = "0.48.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||||
|
|
|
@ -10,29 +10,20 @@ terraform {
|
||||||
}
|
}
|
||||||
|
|
||||||
backend "s3" {
|
backend "s3" {
|
||||||
endpoints = {
|
endpoint = "https://objects.dc-sto1.glesys.net"
|
||||||
s3 = "https://objects.dc-sto1.glesys.net"
|
bucket = "tvl-state"
|
||||||
}
|
key = "terraform/tvl-keycloak"
|
||||||
bucket = "tvl-state"
|
region = "glesys"
|
||||||
key = "terraform/tvl-keycloak"
|
|
||||||
region = "glesys"
|
|
||||||
|
|
||||||
skip_credentials_validation = true
|
skip_credentials_validation = true
|
||||||
skip_region_validation = true
|
skip_region_validation = true
|
||||||
skip_metadata_api_check = true
|
skip_metadata_api_check = true
|
||||||
skip_requesting_account_id = true
|
|
||||||
skip_s3_checksum = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
provider "keycloak" {
|
provider "keycloak" {
|
||||||
client_id = "terraform"
|
client_id = "terraform"
|
||||||
url = "https://auth.tvl.fyi"
|
url = "https://auth.tvl.fyi"
|
||||||
# NOTE: Docs mention this applies to "users of the legacy distribution of keycloak".
|
|
||||||
# However, we get a "failed to perform initial login to Keycloak: error
|
|
||||||
# sending POST request to https://auth.tvl.fyi/realms/master/protocol/openid-connect/token: 404 Not Found"
|
|
||||||
# if we don't set this.
|
|
||||||
base_path = "/auth"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "keycloak_realm" "tvl" {
|
resource "keycloak_realm" "tvl" {
|
||||||
|
|
|
@ -22,13 +22,6 @@ resource "keycloak_ldap_user_federation" "tvl_ldap" {
|
||||||
"inetOrgPerson",
|
"inetOrgPerson",
|
||||||
"organizationalPerson",
|
"organizationalPerson",
|
||||||
]
|
]
|
||||||
|
|
||||||
lifecycle {
|
|
||||||
# Without this, terraform wants to recreate the resource.
|
|
||||||
ignore_changes = [
|
|
||||||
delete_default_mappers
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# keycloak_oidc_identity_provider.github will be destroyed
|
# keycloak_oidc_identity_provider.github will be destroyed
|
||||||
|
@ -36,7 +29,7 @@ resource "keycloak_ldap_user_federation" "tvl_ldap" {
|
||||||
resource "keycloak_oidc_identity_provider" "github" {
|
resource "keycloak_oidc_identity_provider" "github" {
|
||||||
alias = "github"
|
alias = "github"
|
||||||
provider_id = "github"
|
provider_id = "github"
|
||||||
client_id = "Iv23liXfGNIr7InMg5Uo"
|
client_id = "6d7f8bb2e82bb6739556"
|
||||||
client_secret = var.github_client_secret
|
client_secret = var.github_client_secret
|
||||||
realm = keycloak_realm.tvl.id
|
realm = keycloak_realm.tvl.id
|
||||||
backchannel_supported = false
|
backchannel_supported = false
|
||||||
|
|
|
@ -29,29 +29,13 @@ func Merge(in1 *map[string]interface{}, in2 *map[string]interface{}) *map[string
|
||||||
return in1
|
return in1
|
||||||
}
|
}
|
||||||
|
|
||||||
// The maps are map[string]interface{} with unknown depth.
|
|
||||||
// Loop over both maps into every level and merge them.
|
|
||||||
new := make(map[string]interface{})
|
new := make(map[string]interface{})
|
||||||
|
|
||||||
for k, v := range *in1 {
|
for k, v := range *in1 {
|
||||||
new[k] = v
|
new[k] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
for k, v := range *in2 {
|
for k, v := range *in2 {
|
||||||
if existing, ok := new[k]; ok {
|
new[k] = v
|
||||||
// If both values are maps, merge them recursively
|
|
||||||
if existingMap, ok := existing.(map[string]interface{}); ok {
|
|
||||||
if newMap, ok := v.(map[string]interface{}); ok {
|
|
||||||
new[k] = *Merge(&existingMap, &newMap)
|
|
||||||
} else {
|
|
||||||
new[k] = v
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
new[k] = v
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
new[k] = v
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return &new
|
return &new
|
||||||
|
|
|
@ -47,9 +47,6 @@ func TestMergeWithNilMap(t *testing.T) {
|
||||||
func TestMergeMaps(t *testing.T) {
|
func TestMergeMaps(t *testing.T) {
|
||||||
map1 := map[string]interface{}{
|
map1 := map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
"baz": map[string]interface{}{
|
|
||||||
"qux": "quux",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
map2 := map[string]interface{}{
|
map2 := map[string]interface{}{
|
||||||
|
@ -59,9 +56,6 @@ func TestMergeMaps(t *testing.T) {
|
||||||
result := Merge(&map1, &map2)
|
result := Merge(&map1, &map2)
|
||||||
expected := map[string]interface{}{
|
expected := map[string]interface{}{
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
"baz": map[string]interface{}{
|
|
||||||
"qux": "quux",
|
|
||||||
},
|
|
||||||
"bar": "baz",
|
"bar": "baz",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
(with depot.ops.machines; [
|
(with depot.ops.machines; [
|
||||||
sanduny
|
sanduny
|
||||||
whitby
|
whitby
|
||||||
nixery-01
|
|
||||||
]) ++
|
]) ++
|
||||||
|
|
||||||
(with depot.users.tazjin.nixos; [
|
(with depot.users.tazjin.nixos; [
|
||||||
|
|
|
@ -11,10 +11,8 @@ in
|
||||||
imports = [
|
imports = [
|
||||||
(mod "atward.nix")
|
(mod "atward.nix")
|
||||||
(mod "cgit.nix")
|
(mod "cgit.nix")
|
||||||
(mod "cheddar.nix")
|
|
||||||
(mod "clbot.nix")
|
(mod "clbot.nix")
|
||||||
(mod "gerrit-autosubmit.nix")
|
(mod "gerrit-autosubmit.nix")
|
||||||
(mod "harmonia.nix")
|
|
||||||
(mod "irccat.nix")
|
(mod "irccat.nix")
|
||||||
(mod "josh.nix")
|
(mod "josh.nix")
|
||||||
(mod "journaldriver.nix")
|
(mod "journaldriver.nix")
|
||||||
|
@ -26,6 +24,7 @@ in
|
||||||
(mod "paroxysm.nix")
|
(mod "paroxysm.nix")
|
||||||
(mod "restic.nix")
|
(mod "restic.nix")
|
||||||
(mod "smtprelay.nix")
|
(mod "smtprelay.nix")
|
||||||
|
(mod "sourcegraph.nix")
|
||||||
(mod "teleirc.nix")
|
(mod "teleirc.nix")
|
||||||
(mod "tvl-buildkite.nix")
|
(mod "tvl-buildkite.nix")
|
||||||
(mod "tvl-slapd/default.nix")
|
(mod "tvl-slapd/default.nix")
|
||||||
|
@ -230,17 +229,12 @@ in
|
||||||
grafana.file = secretFile "grafana";
|
grafana.file = secretFile "grafana";
|
||||||
irccat.file = secretFile "irccat";
|
irccat.file = secretFile "irccat";
|
||||||
keycloak-db.file = secretFile "keycloak-db";
|
keycloak-db.file = secretFile "keycloak-db";
|
||||||
|
nix-cache-priv.file = secretFile "nix-cache-priv";
|
||||||
owothia.file = secretFile "owothia";
|
owothia.file = secretFile "owothia";
|
||||||
panettone.file = secretFile "panettone";
|
panettone.file = secretFile "panettone";
|
||||||
smtprelay.file = secretFile "smtprelay";
|
smtprelay.file = secretFile "smtprelay";
|
||||||
teleirc.file = secretFile "teleirc";
|
teleirc.file = secretFile "teleirc";
|
||||||
|
|
||||||
nix-cache-priv = {
|
|
||||||
file = secretFile "nix-cache-priv";
|
|
||||||
mode = "0440";
|
|
||||||
group = "harmonia";
|
|
||||||
};
|
|
||||||
|
|
||||||
buildkite-agent-token = {
|
buildkite-agent-token = {
|
||||||
file = secretFile "buildkite-agent-token";
|
file = secretFile "buildkite-agent-token";
|
||||||
mode = "0440";
|
mode = "0440";
|
||||||
|
@ -312,9 +306,6 @@ in
|
||||||
agentCount = 32;
|
agentCount = 32;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Run Markdown/code renderer
|
|
||||||
services.depot.cheddar.enable = true;
|
|
||||||
|
|
||||||
# Start a local SMTP relay to Gmail (used by gerrit)
|
# Start a local SMTP relay to Gmail (used by gerrit)
|
||||||
services.depot.smtprelay = {
|
services.depot.smtprelay = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -383,6 +374,9 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
services.depot = {
|
services.depot = {
|
||||||
|
# Run a SourceGraph code search instance
|
||||||
|
sourcegraph.enable = true;
|
||||||
|
|
||||||
# Run a livegrep code search instance
|
# Run a livegrep code search instance
|
||||||
livegrep.enable = true;
|
livegrep.enable = true;
|
||||||
|
|
||||||
|
@ -483,14 +477,11 @@ in
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Run a Harmonia binary cache.
|
services.nix-serve = {
|
||||||
#
|
|
||||||
# TODO(tazjin): switch to upstream module after fix for Nix 2.3
|
|
||||||
services.depot.harmonia = {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
signKeyPaths = [ (config.age.secretsDir + "/nix-cache-priv") ];
|
port = 6443;
|
||||||
settings.bind = "127.0.0.1:6443";
|
secretKeyFile = config.age.secretsDir + "/nix-cache-priv";
|
||||||
settings.priority = 50;
|
bindAddress = "localhost";
|
||||||
};
|
};
|
||||||
|
|
||||||
services.fail2ban.enable = true;
|
services.fail2ban.enable = true;
|
||||||
|
@ -626,8 +617,7 @@ in
|
||||||
http-port = 5925; # kycl
|
http-port = 5925; # kycl
|
||||||
hostname = "auth.tvl.fyi";
|
hostname = "auth.tvl.fyi";
|
||||||
http-relative-path = "/auth";
|
http-relative-path = "/auth";
|
||||||
proxy-headers = "xforwarded";
|
proxy = "edge";
|
||||||
http-enabled = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
database = {
|
database = {
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
{ depot, config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.depot.cheddar;
|
|
||||||
description = "cheddar - markdown/highlighting server";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.services.depot.cheddar = with lib; {
|
|
||||||
enable = mkEnableOption description;
|
|
||||||
port = mkOption {
|
|
||||||
description = "Port on which cheddar should listen";
|
|
||||||
type = types.int;
|
|
||||||
default = 4238;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
systemd.services.cheddar-server = {
|
|
||||||
inherit description;
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
script = "${depot.tools.cheddar}/bin/cheddar --listen 0.0.0.0:${toString cfg.port} --sourcegraph-server";
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
DynamicUser = true;
|
|
||||||
Restart = "always";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,110 +0,0 @@
|
||||||
# This is a fork of the nixpkgs module for Harmonia, which adds compatibility
|
|
||||||
# with Nix 2.3.
|
|
||||||
#
|
|
||||||
# We will upstream this eventually.
|
|
||||||
{ config, pkgs, lib, ... }:
|
|
||||||
let
|
|
||||||
cfg = config.services.depot.harmonia;
|
|
||||||
format = pkgs.formats.toml { };
|
|
||||||
|
|
||||||
credentials = lib.imap0
|
|
||||||
(i: signKeyPath: {
|
|
||||||
id = "sign-key-${builtins.toString i}";
|
|
||||||
path = signKeyPath;
|
|
||||||
})
|
|
||||||
cfg.signKeyPaths;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options = {
|
|
||||||
services.depot.harmonia = {
|
|
||||||
enable = lib.mkEnableOption "Harmonia: Nix binary cache written in Rust";
|
|
||||||
|
|
||||||
signKeyPaths = lib.mkOption {
|
|
||||||
type = lib.types.listOf lib.types.path;
|
|
||||||
default = [ ];
|
|
||||||
description = "Paths to the signing keys to use for signing the cache";
|
|
||||||
};
|
|
||||||
|
|
||||||
package = lib.mkPackageOption pkgs "harmonia" { };
|
|
||||||
|
|
||||||
settings = lib.mkOption {
|
|
||||||
inherit (format) type;
|
|
||||||
default = { };
|
|
||||||
description = ''
|
|
||||||
Settings to merge with the default configuration.
|
|
||||||
For the list of the default configuration, see <https://github.com/nix-community/harmonia/tree/master#configuration>.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
users.users.harmonia = {
|
|
||||||
isSystemUser = true;
|
|
||||||
group = "harmonia";
|
|
||||||
};
|
|
||||||
users.groups.harmonia = { };
|
|
||||||
|
|
||||||
systemd.services.harmonia = {
|
|
||||||
description = "harmonia binary cache service";
|
|
||||||
|
|
||||||
requires = [ "nix-daemon.socket" ];
|
|
||||||
after = [ "network.target" ];
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
|
|
||||||
environment = {
|
|
||||||
CONFIG_FILE = format.generate "harmonia.toml" cfg.settings;
|
|
||||||
SIGN_KEY_PATHS = lib.strings.concatMapStringsSep " "
|
|
||||||
(
|
|
||||||
credential: "%d/${credential.id}"
|
|
||||||
)
|
|
||||||
credentials;
|
|
||||||
# Note: it's important to set this for nix-store, because it wants to use
|
|
||||||
# $HOME in order to use a temporary cache dir. bizarre failures will occur
|
|
||||||
# otherwise
|
|
||||||
HOME = "/run/harmonia";
|
|
||||||
};
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
ExecStart = lib.getExe cfg.package;
|
|
||||||
User = "harmonia";
|
|
||||||
Group = "harmonia";
|
|
||||||
Restart = "on-failure";
|
|
||||||
PrivateUsers = true;
|
|
||||||
DeviceAllow = [ "" ];
|
|
||||||
UMask = "0066";
|
|
||||||
RuntimeDirectory = "harmonia";
|
|
||||||
LoadCredential = builtins.map (credential: "${credential.id}:${credential.path}") credentials;
|
|
||||||
SystemCallFilter = [
|
|
||||||
"@system-service"
|
|
||||||
"~@privileged"
|
|
||||||
"~@resources"
|
|
||||||
];
|
|
||||||
CapabilityBoundingSet = "";
|
|
||||||
ProtectKernelModules = true;
|
|
||||||
ProtectKernelTunables = true;
|
|
||||||
ProtectControlGroups = true;
|
|
||||||
ProtectKernelLogs = true;
|
|
||||||
ProtectHostname = true;
|
|
||||||
ProtectClock = true;
|
|
||||||
RestrictRealtime = true;
|
|
||||||
MemoryDenyWriteExecute = true;
|
|
||||||
ProcSubset = "pid";
|
|
||||||
ProtectProc = "invisible";
|
|
||||||
RestrictNamespaces = true;
|
|
||||||
SystemCallArchitectures = "native";
|
|
||||||
PrivateNetwork = false;
|
|
||||||
PrivateTmp = true;
|
|
||||||
PrivateDevices = true;
|
|
||||||
PrivateMounts = true;
|
|
||||||
NoNewPrivileges = true;
|
|
||||||
ProtectSystem = "strict";
|
|
||||||
ProtectHome = true;
|
|
||||||
LockPersonality = true;
|
|
||||||
RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6";
|
|
||||||
LimitNOFILE = 65536;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
|
@ -48,8 +48,6 @@ in
|
||||||
systemd.services.irccat = {
|
systemd.services.irccat = {
|
||||||
inherit description;
|
inherit description;
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
after = [ "network-online.target" ];
|
|
||||||
wants = [ "network-online.target" ];
|
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = "${mergeAndLaunch}";
|
ExecStart = "${mergeAndLaunch}";
|
||||||
|
|
|
@ -97,12 +97,6 @@ in
|
||||||
link = "https://cl.tvl.fyi/$1";
|
link = "https://cl.tvl.fyi/$1";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Auto-link links to monotonically increasing revisions/commits
|
|
||||||
commentlink.revision = {
|
|
||||||
match = "r/(\\d+)";
|
|
||||||
link = "https://code.tvl.fyi/commit/?h=refs/r/$1";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Configures integration with Keycloak, which then integrates with a
|
# Configures integration with Keycloak, which then integrates with a
|
||||||
# variety of backends.
|
# variety of backends.
|
||||||
auth.type = "OAUTH";
|
auth.type = "OAUTH";
|
||||||
|
|
60
ops/modules/sourcegraph.nix
Normal file
60
ops/modules/sourcegraph.nix
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
# Run sourcegraph, including its entire machinery, in a container.
|
||||||
|
# Running it outside of a container is a futile endeavour for now.
|
||||||
|
{ depot, config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.depot.sourcegraph;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.depot.sourcegraph = with lib; {
|
||||||
|
enable = mkEnableOption "SourceGraph code search engine";
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
description = "Port on which SourceGraph should listen";
|
||||||
|
type = types.int;
|
||||||
|
default = 3463;
|
||||||
|
};
|
||||||
|
|
||||||
|
cheddarPort = mkOption {
|
||||||
|
description = "Port on which cheddar should listen";
|
||||||
|
type = types.int;
|
||||||
|
default = 4238;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
# Run a cheddar syntax highlighting server
|
||||||
|
systemd.services.cheddar-server = {
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
script = "${depot.tools.cheddar}/bin/cheddar --listen 0.0.0.0:${toString cfg.cheddarPort} --sourcegraph-server";
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
DynamicUser = true;
|
||||||
|
Restart = "always";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
virtualisation.oci-containers.containers.sourcegraph = {
|
||||||
|
image = "sourcegraph/server:3.40.0";
|
||||||
|
|
||||||
|
ports = [
|
||||||
|
"127.0.0.1:${toString cfg.port}:7080"
|
||||||
|
];
|
||||||
|
|
||||||
|
volumes = [
|
||||||
|
"/var/lib/sourcegraph/etc:/etc/sourcegraph"
|
||||||
|
"/var/lib/sourcegraph/data:/var/opt/sourcegraph"
|
||||||
|
];
|
||||||
|
|
||||||
|
# TODO(tazjin): Figure out what changed in the protocol.
|
||||||
|
# environment.SRC_SYNTECT_SERVER = "http://172.17.0.1:${toString cfg.cheddarPort}";
|
||||||
|
|
||||||
|
# Sourcegraph needs a higher nofile limit, it logs warnings
|
||||||
|
# otherwise (unclear whether it actually affects the service).
|
||||||
|
extraOptions = [
|
||||||
|
"--ulimit"
|
||||||
|
"nofile=10000:10000"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -22,7 +22,11 @@
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
server_url = "https://net.tvl.fyi";
|
server_url = "https://net.tvl.fyi";
|
||||||
dns.magic_dns = false;
|
dns_config.nameservers = [
|
||||||
|
"8.8.8.8"
|
||||||
|
"1.1.1.1"
|
||||||
|
"77.88.8.8"
|
||||||
|
];
|
||||||
|
|
||||||
# TLS is handled by nginx
|
# TLS is handled by nginx
|
||||||
tls_cert_path = null;
|
tls_cert_path = null;
|
||||||
|
|
|
@ -17,8 +17,13 @@
|
||||||
alias /run/agenix/nix-cache-pub;
|
alias /run/agenix/nix-cache-pub;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location = /nix-cache-info {
|
||||||
|
add_header Content-Type text/plain;
|
||||||
|
return 200 "StoreDir: /nix/store\nWantMassQuery: 1\nPriority: 50\n";
|
||||||
|
}
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_pass http://${config.services.depot.harmonia.settings.bind};
|
proxy_pass http://localhost:${toString config.services.nix-serve.port};
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
# This configuration redirects from the previous Sourcegraph instance to
|
|
||||||
# livegrep/cgit where appropriate.
|
|
||||||
{ config, ... }:
|
{ config, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -15,50 +13,17 @@
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
|
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
set $lineno "";
|
location = / {
|
||||||
|
return 301 https://cs.tvl.fyi/depot;
|
||||||
# depot root
|
|
||||||
location = /depot {
|
|
||||||
return 301 https://code.tvl.fyi/tree/;
|
|
||||||
}
|
|
||||||
|
|
||||||
# folder/file on canon
|
|
||||||
location ~ ^/depot/-/(blob|tree)/([^\s]*)$ {
|
|
||||||
set $path $2;
|
|
||||||
if ($args ~ ^L(\d+)(-\d+)?$) {
|
|
||||||
set $lineno "#n$1";
|
|
||||||
}
|
|
||||||
|
|
||||||
return 302 https://code.tvl.fyi/tree/$path$lineno;
|
|
||||||
}
|
|
||||||
|
|
||||||
# folder/file on specific commit
|
|
||||||
location ~ ^/depot@([a-f0-9]+)/-/(blob|tree)/([^\s]*)$ {
|
|
||||||
set $commit $1;
|
|
||||||
set $path $3;
|
|
||||||
|
|
||||||
if ($args ~ ^L(\d+)(-\d+)?$) {
|
|
||||||
set $lineno "#n$1";
|
|
||||||
}
|
|
||||||
|
|
||||||
return 302 https://code.tvl.fyi/tree/$path?id=$commit$lineno;
|
|
||||||
}
|
|
||||||
|
|
||||||
# commit info
|
|
||||||
location ~ ^/depot/-/commit/([a-f0-9]+)$ {
|
|
||||||
set $commit $1;
|
|
||||||
return 302 https://code.tvl.fyi/commit/?id=$commit;
|
|
||||||
}
|
|
||||||
|
|
||||||
# search handler
|
|
||||||
# This only redirects to the new search, it doesn't try to parse and
|
|
||||||
# rewrite the query.
|
|
||||||
location /search {
|
|
||||||
return 302 https://grep.tvl.fyi/search;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
return 404 "TVL code search has moved to grep.tvl.fyi and we could not figure out how to rewrite your query. Sorry!";
|
proxy_set_header X-Sg-Auth "Anonymous";
|
||||||
|
proxy_pass http://localhost:${toString config.services.depot.sourcegraph.port};
|
||||||
|
}
|
||||||
|
|
||||||
|
location /users/Anonymous/settings {
|
||||||
|
return 301 https://cs.tvl.fyi;
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
54
ops/modules/www/tazj.in.nix
Normal file
54
ops/modules/www/tazj.in.nix
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# serve tazjin's website & blog
|
||||||
|
{ depot, config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./base.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
config = {
|
||||||
|
services.nginx.virtualHosts."tazj.in" = {
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
root = depot.users.tazjin.homepage;
|
||||||
|
serverAliases = [ "www.tazj.in" ];
|
||||||
|
|
||||||
|
extraConfig = ''
|
||||||
|
location = /en/rss.xml {
|
||||||
|
return 301 https://tazj.in/feed.atom;
|
||||||
|
}
|
||||||
|
|
||||||
|
${depot.users.tazjin.blog.oldRedirects}
|
||||||
|
location /blog/ {
|
||||||
|
alias ${depot.users.tazjin.blog.rendered}/;
|
||||||
|
|
||||||
|
if ($request_uri ~ ^/(.*)\.html$) {
|
||||||
|
return 302 /$1;
|
||||||
|
}
|
||||||
|
|
||||||
|
try_files $uri $uri.html $uri/ =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = /predlozhnik {
|
||||||
|
return 302 https://predlozhnik.ru;
|
||||||
|
}
|
||||||
|
|
||||||
|
# redirect for easier entry on a TV
|
||||||
|
location = /tv {
|
||||||
|
return 302 https://tazj.in/blobs/play.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Temporary place for serving static files.
|
||||||
|
location /blobs/ {
|
||||||
|
alias /var/lib/tazjins-blobs/;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx.virtualHosts."git.tazj.in" = {
|
||||||
|
enableACME = true;
|
||||||
|
forceSSL = true;
|
||||||
|
extraConfig = "return 301 https://code.tvl.fyi$request_uri;";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -50,7 +50,7 @@ steps:
|
||||||
- label: ":llama:"
|
- label: ":llama:"
|
||||||
key: "pipeline-gen"
|
key: "pipeline-gen"
|
||||||
concurrency_group: 'depot-nix-eval'
|
concurrency_group: 'depot-nix-eval'
|
||||||
concurrency: 3 # much more than this and whitby will OOM
|
concurrency: 5 # much more than this and whitby will OOM
|
||||||
command: |
|
command: |
|
||||||
set -ue
|
set -ue
|
||||||
|
|
||||||
|
@ -88,12 +88,10 @@ steps:
|
||||||
continue_on_failure: true
|
continue_on_failure: true
|
||||||
|
|
||||||
# Exit with success or failure depending on whether any other steps
|
# Exit with success or failure depending on whether any other steps
|
||||||
# failed (but not retried).
|
# failed.
|
||||||
#
|
#
|
||||||
# This information is checked by querying the Buildkite GraphQL API
|
# This information is checked by querying the Buildkite GraphQL API
|
||||||
# and fetching all failed steps, then filtering out the ones that were
|
# and fetching the count of failed steps.
|
||||||
# retried (retried jobs create new jobs, which would also show up in the
|
|
||||||
# query).
|
|
||||||
#
|
#
|
||||||
# This step must be :duck: (yes, really!) because the post-command
|
# This step must be :duck: (yes, really!) because the post-command
|
||||||
# hook will inspect this name.
|
# hook will inspect this name.
|
||||||
|
@ -111,8 +109,8 @@ steps:
|
||||||
readonly FAILED_JOBS=$(curl 'https://graphql.buildkite.com/v1' \
|
readonly FAILED_JOBS=$(curl 'https://graphql.buildkite.com/v1' \
|
||||||
--silent \
|
--silent \
|
||||||
-H "Authorization: Bearer $(cat ${BUILDKITE_TOKEN_PATH})" \
|
-H "Authorization: Bearer $(cat ${BUILDKITE_TOKEN_PATH})" \
|
||||||
-d "{\"query\": \"query BuildStatusQuery { build(uuid: \\\"$BUILDKITE_BUILD_ID\\\") { jobs(passed: false, first: 500 ) { edges { node { ... on JobTypeCommand { retried } } } } } }\"}" | \
|
-d "{\"query\": \"query BuildStatusQuery { build(uuid: \\\"$BUILDKITE_BUILD_ID\\\") { jobs(passed: false) { count } } }\"}" | \
|
||||||
jq -r '.data.build.jobs.edges | map(select(.node.retried == false)) | length')
|
jq -r '.data.build.jobs.count')
|
||||||
|
|
||||||
echo "$$FAILED_JOBS build jobs failed."
|
echo "$$FAILED_JOBS build jobs failed."
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -21,11 +21,6 @@
|
||||||
email = "root@gws.fyi";
|
email = "root@gws.fyi";
|
||||||
password = "{ARGON2}$argon2id$v=19$m=65536,t=2,p=1$5NEYPJ19nDITK5sGr4bzhQ$Xzpzth6y4w+HGvioHiYgzqFiwMDx0B7HAh+PVbkRuuk";
|
password = "{ARGON2}$argon2id$v=19$m=65536,t=2,p=1$5NEYPJ19nDITK5sGr4bzhQ$Xzpzth6y4w+HGvioHiYgzqFiwMDx0B7HAh+PVbkRuuk";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
username = "azahi";
|
|
||||||
email = "azat@bahawi.net";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$BVRzgfs8YIorOTq62B00CQ$5UXHyG/Ivn5TqB7UNgfjYJMxTjun3NDvAStWFom4oas";
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
username = "chickadee";
|
username = "chickadee";
|
||||||
email = "matthewktromp@gmail.com";
|
email = "matthewktromp@gmail.com";
|
||||||
|
@ -41,21 +36,11 @@
|
||||||
email = "me@cynthia.re";
|
email = "me@cynthia.re";
|
||||||
password = "{ARGON2}$argon2id$v=19$m=65536,t=4,p=1$TxjbMGenhEmkyYLrg5uGhbr60THB86YeRZg5bPdiTJo$k9gbRlAPjmxwdUwzbavvsAVkckgQZ0jS2oTtvZBPysk";
|
password = "{ARGON2}$argon2id$v=19$m=65536,t=4,p=1$TxjbMGenhEmkyYLrg5uGhbr60THB86YeRZg5bPdiTJo$k9gbRlAPjmxwdUwzbavvsAVkckgQZ0jS2oTtvZBPysk";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
username = "domenkozar";
|
|
||||||
email = "domen@cachix.org";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$c9WgMrTqPJZenOr5+wlnnQ$XOpRZRTkduzP2+NJBxkg2jhffurg7PDla4/RoAyclwI";
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
username = "edef";
|
username = "edef";
|
||||||
email = "edef@edef.eu";
|
email = "edef@edef.eu";
|
||||||
password = "{ARGON2}$argon2id$v=19$m=65536,t=2,p=1$OORx4ERbkgvTmuYCJA8cIw$i5qaBzHkRVw7Tl+wZsTFTDqJwF0vuZqhW3VpknMYMc0";
|
password = "{ARGON2}$argon2id$v=19$m=65536,t=2,p=1$OORx4ERbkgvTmuYCJA8cIw$i5qaBzHkRVw7Tl+wZsTFTDqJwF0vuZqhW3VpknMYMc0";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
username = "elle";
|
|
||||||
email = "lnajt4@gmail.com";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$b5Bfq6u+fEKbtpixOl+yPw$nCyTLbSDYsw30ZiSxhJ6N99IIPQAnS2XRNlpEx9os+0";
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
username = "ericvolp12";
|
username = "ericvolp12";
|
||||||
email = "ericvolp12@gmail.com";
|
email = "ericvolp12@gmail.com";
|
||||||
|
@ -126,16 +111,6 @@
|
||||||
email = "lukegb@tvl.fyi";
|
email = "lukegb@tvl.fyi";
|
||||||
password = "{SSHA}7a85VNhpFElFw+N5xcjgGmt4HnBsaGp4";
|
password = "{SSHA}7a85VNhpFElFw+N5xcjgGmt4HnBsaGp4";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
username = "marijan";
|
|
||||||
email = "marijan.petricevic94@gmail.com";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$KG+6Kx+qi5FA4JmBgIOBDA$bQm9u/9A5VbpVmNuMDqJa+iDCU0JCyboevQ3eEzlMdE";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
username = "mrflos";
|
|
||||||
email = "mrflos@yeswiki.pro";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$/D1y+6n3+0GigG9mCMqK8A$9PseWm3+QATxN/M3Wu4JM+CnIppLD/LbQaVEKLItv9o";
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
username = "noteed";
|
username = "noteed";
|
||||||
email = "noteed@gmail.com";
|
email = "noteed@gmail.com";
|
||||||
|
@ -178,16 +153,6 @@
|
||||||
email = "tazjin@tvl.su";
|
email = "tazjin@tvl.su";
|
||||||
password = "{ARGON2}$argon2id$v=19$m=65536,t=2,p=1$wOPEl9D3kSke//oLtbvqrg$j0npwwXgaXQ/emefKUwL59tH8hdmtzbgH2rQzWSmE2Y";
|
password = "{ARGON2}$argon2id$v=19$m=65536,t=2,p=1$wOPEl9D3kSke//oLtbvqrg$j0npwwXgaXQ/emefKUwL59tH8hdmtzbgH2rQzWSmE2Y";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
username = "thk";
|
|
||||||
email = "thomas@koch.ro";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$WFP0HGCiY5IV6OOWEqM0zA$BkmBq2rLv59YyulsY25hlt9LYTpI7zLrJjGHiBN5MIc";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
username = "yl3dy";
|
|
||||||
email = "aleksandr.kiselyov@gmail.com";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$vPvOa0/7RzDLuD/icQuIzQ$IVMSI7hh/frihuL11sNRj6Jz8TTn1wZZHjZZGszz3pI";
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
username = "implr";
|
username = "implr";
|
||||||
email = "implr@hackerspace.pl";
|
email = "implr@hackerspace.pl";
|
||||||
|
@ -289,29 +254,4 @@
|
||||||
email = "toastal@posteo.net";
|
email = "toastal@posteo.net";
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$txwVjPn9kKPUgsZnPtpyaA$pE0ISDGScCE4JCKcmbnzC+GZZ4PP6MqKJKmR/sxo6TY";
|
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$txwVjPn9kKPUgsZnPtpyaA$pE0ISDGScCE4JCKcmbnzC+GZZ4PP6MqKJKmR/sxo6TY";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
username = "sinavir";
|
|
||||||
email = "tvix@sinavir.fr";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$5GXvoN/enVljV97yE/Zasg$OrgY9/ge2LoxNm9OOqxh/kKLxoAvU54MbQa9WWiT0jY";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
username = "emery";
|
|
||||||
email = "emery@dmz.rs";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$b2k5UpTJafqM7yjHfVRjBg$zFGy/ZeI9Hb71TUfJwFp7qDKyUl8tdyFDUK1uNBYfUI";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
username = "aziz";
|
|
||||||
email = "abd.aziz89@gmail.com";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$xTvdtTF+gavMfF8556CiiQ$IshnauhlEr80skpv5s6ueJLkQxlynzBt6oCp3cQrNCY";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
username = "nikiv";
|
|
||||||
email = "nikita@nikiv.dev";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$79mMAD2XYa5dg7D9ueWMpw$Edf5WODrFpkNDyWaMdLKcgcErFLx4khmPIk8wzmYGUE";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
username = "ein-shved";
|
|
||||||
email = "mestofel13@gmail.com";
|
|
||||||
password = "{ARGON2}$argon2id$v=19$m=19456,t=2,p=1$D4wzfJoyFye48QNdrC66VA$aBJ/ZaL+rTgXoQa/nFdpHap3G/Oju8WlHaWTii95X8E";
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
|
|
47
third_party/chicago95/default.nix
vendored
47
third_party/chicago95/default.nix
vendored
|
@ -1,47 +0,0 @@
|
||||||
# A rendition of everyone's favourite computer theme.
|
|
||||||
{ pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# Chicago95 has no GTK-4 theme (because GTK-4 removed important features that
|
|
||||||
# it needs), but there is a project with an approximation.
|
|
||||||
#
|
|
||||||
# This is a bit of a hack, but I inject that project's GTK-4 theme as if it
|
|
||||||
# was a part of Chicago95.
|
|
||||||
#
|
|
||||||
# This other project is GPL-3.0, under which Chicago95 is also distributed.
|
|
||||||
gtk4ProjectSrc = pkgs.fetchFromGitHub {
|
|
||||||
owner = "B00merang-Project";
|
|
||||||
repo = "Windows-95";
|
|
||||||
rev = "055abd7a3608afdcb2ef021732e07020f2b416b2";
|
|
||||||
hash = "sha256:1li6wzyn3y09d188xki1h96pmn4xcx2lklfc4rkiq2y2r22wx7kz";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
pkgs.stdenvNoCC.mkDerivation {
|
|
||||||
pname = "Chicago95";
|
|
||||||
version = "master";
|
|
||||||
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "grassmunk";
|
|
||||||
repo = "Chicago95";
|
|
||||||
rev = "bdf5cf36a16102aaac297f3de887c601c2b1146f";
|
|
||||||
hash = "sha256:11fsy3bam1rhp1292zflvzmf1432z1p0ncwy3601wl2f8rnvfdfm";
|
|
||||||
};
|
|
||||||
|
|
||||||
# The project has a Makefile, but it's broken in all sorts of ways, so we just
|
|
||||||
# copy the important stuff manually.
|
|
||||||
dontBuild = true;
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out/share/{icons,fonts,themes,sounds,qt5ct/colors}
|
|
||||||
|
|
||||||
cp -r Theme/Chicago95 $out/share/themes
|
|
||||||
cp -r Icons/* $out/share/icons
|
|
||||||
cp -r Cursors/* $out/share/icons
|
|
||||||
cp -r Fonts/* $out/share/fonts
|
|
||||||
cp Extras/Chicago95_qt.conf $out/share/qt5ct/colors
|
|
||||||
|
|
||||||
cp -r ${gtk4ProjectSrc}/gtk-4.0 $out/share/themes/Chicago95
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta.license = pkgs.lib.licenses.gpl3;
|
|
||||||
}
|
|
||||||
|
|
12
third_party/ddclient/default.nix
vendored
Normal file
12
third_party/ddclient/default.nix
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Users of this package & module should replace it with something like
|
||||||
|
# inadyn, after https://github.com/NixOS/nixpkgs/issues/242330 is
|
||||||
|
# landed.
|
||||||
|
#
|
||||||
|
# TODO(aspen): replace ddclient with inadyn or something else.
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
(pkgs.callPackage ./pkg.nix { }).overrideAttrs (old: {
|
||||||
|
passthru = old.passthru // {
|
||||||
|
module = ./module.nix;
|
||||||
|
};
|
||||||
|
})
|
230
third_party/ddclient/module.nix
vendored
Normal file
230
third_party/ddclient/module.nix
vendored
Normal file
|
@ -0,0 +1,230 @@
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
# SPDX-FileCopyrightText: Copyright (c) 2003-2023 The Nixpkgs/NixOS contributors
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.deprecated-ddclient;
|
||||||
|
boolToStr = bool: if bool then "yes" else "no";
|
||||||
|
dataDir = "/var/lib/ddclient";
|
||||||
|
StateDirectory = builtins.baseNameOf dataDir;
|
||||||
|
RuntimeDirectory = StateDirectory;
|
||||||
|
|
||||||
|
configFile' = pkgs.writeText "ddclient.conf" ''
|
||||||
|
# This file can be used as a template for configFile or is automatically generated by Nix options.
|
||||||
|
cache=${dataDir}/ddclient.cache
|
||||||
|
foreground=YES
|
||||||
|
use=${cfg.use}
|
||||||
|
login=${cfg.username}
|
||||||
|
password=${if cfg.protocol == "nsupdate" then "/run/${RuntimeDirectory}/ddclient.key" else "@password_placeholder@"}
|
||||||
|
protocol=${cfg.protocol}
|
||||||
|
${lib.optionalString (cfg.script != "") "script=${cfg.script}"}
|
||||||
|
${lib.optionalString (cfg.server != "") "server=${cfg.server}"}
|
||||||
|
${lib.optionalString (cfg.zone != "") "zone=${cfg.zone}"}
|
||||||
|
ssl=${boolToStr cfg.ssl}
|
||||||
|
wildcard=YES
|
||||||
|
quiet=${boolToStr cfg.quiet}
|
||||||
|
verbose=${boolToStr cfg.verbose}
|
||||||
|
${cfg.extraConfig}
|
||||||
|
${lib.concatStringsSep "," cfg.domains}
|
||||||
|
'';
|
||||||
|
configFile = if (cfg.configFile != null) then cfg.configFile else configFile';
|
||||||
|
|
||||||
|
preStart = ''
|
||||||
|
install --mode=600 --owner=$USER ${configFile} /run/${RuntimeDirectory}/ddclient.conf
|
||||||
|
${lib.optionalString (cfg.configFile == null) (if (cfg.protocol == "nsupdate") then ''
|
||||||
|
install --mode=600 --owner=$USER ${cfg.passwordFile} /run/${RuntimeDirectory}/ddclient.key
|
||||||
|
'' else if (cfg.passwordFile != null) then ''
|
||||||
|
"${pkgs.replace-secret}/bin/replace-secret" "@password_placeholder@" "${cfg.passwordFile}" "/run/${RuntimeDirectory}/ddclient.conf"
|
||||||
|
'' else ''
|
||||||
|
sed -i '/^password=@password_placeholder@$/d' /run/${RuntimeDirectory}/ddclient.conf
|
||||||
|
'')}
|
||||||
|
'';
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
|
||||||
|
services.deprecated-ddclient = with lib.types; {
|
||||||
|
|
||||||
|
enable = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = bool;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Whether to synchronise your machine's IP address with a dynamic DNS provider (e.g. dyndns.org).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
package = mkOption {
|
||||||
|
type = package;
|
||||||
|
default = pkgs.ddclient;
|
||||||
|
defaultText = lib.literalExpression "pkgs.ddclient";
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
The ddclient executable package run by the service.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
domains = mkOption {
|
||||||
|
default = [ "" ];
|
||||||
|
type = listOf str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Domain name(s) to synchronize.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
username = mkOption {
|
||||||
|
# For `nsupdate` username contains the path to the nsupdate executable
|
||||||
|
default = lib.optionalString (cfg.protocol == "nsupdate") "${pkgs.bind.dnsutils}/bin/nsupdate";
|
||||||
|
defaultText = "";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
User name.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
passwordFile = mkOption {
|
||||||
|
default = null;
|
||||||
|
type = nullOr str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
A file containing the password or a TSIG key in named format when using the nsupdate protocol.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
interval = mkOption {
|
||||||
|
default = "10min";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
The interval at which to run the check and update.
|
||||||
|
See {command}`man 7 systemd.time` for the format.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
configFile = mkOption {
|
||||||
|
default = null;
|
||||||
|
type = nullOr path;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Path to configuration file.
|
||||||
|
When set this overrides the generated configuration from module options.
|
||||||
|
'';
|
||||||
|
example = "/root/nixos/secrets/ddclient.conf";
|
||||||
|
};
|
||||||
|
|
||||||
|
protocol = mkOption {
|
||||||
|
default = "dyndns2";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Protocol to use with dynamic DNS provider (see https://sourceforge.net/p/ddclient/wiki/protocols).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
server = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Server address.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
ssl = mkOption {
|
||||||
|
default = true;
|
||||||
|
type = bool;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Whether to use SSL/TLS to connect to dynamic DNS provider.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
quiet = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = bool;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Print no messages for unnecessary updates.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
script = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
script as required by some providers.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
use = mkOption {
|
||||||
|
default = "web, web=checkip.dyndns.com/, web-skip='Current IP Address: '";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Method to determine the IP address to send to the dynamic DNS provider.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
verbose = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = bool;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Print verbose information.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
zone = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
zone as required by some providers.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = mkOption {
|
||||||
|
default = "";
|
||||||
|
type = lines;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Extra configuration. Contents will be added verbatim to the configuration file.
|
||||||
|
::: {.note}
|
||||||
|
`daemon` should not be added here because it does not work great with the systemd-timer approach the service uses.
|
||||||
|
:::
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = mkMerge [
|
||||||
|
(mkIf cfg.enable {
|
||||||
|
systemd.services.ddclient = {
|
||||||
|
description = "Dynamic DNS Client";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
restartTriggers = optional (cfg.configFile != null) cfg.configFile;
|
||||||
|
path = lib.optional (lib.hasPrefix "if," cfg.use) pkgs.iproute2;
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
DynamicUser = true;
|
||||||
|
RuntimeDirectoryMode = "0700";
|
||||||
|
inherit RuntimeDirectory;
|
||||||
|
inherit StateDirectory;
|
||||||
|
Type = "oneshot";
|
||||||
|
ExecStartPre = "!${pkgs.writeShellScript "ddclient-prestart" preStart}";
|
||||||
|
ExecStart = "${lib.getBin cfg.package}/bin/ddclient -file /run/${RuntimeDirectory}/ddclient.conf";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.timers.ddclient = {
|
||||||
|
description = "Run ddclient";
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
OnBootSec = cfg.interval;
|
||||||
|
OnUnitInactiveSec = cfg.interval;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
{
|
||||||
|
ids.uids.ddclient = 30;
|
||||||
|
ids.gids.ddclient = 30;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
45
third_party/ddclient/pkg.nix
vendored
Normal file
45
third_party/ddclient/pkg.nix
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
# SPDX-FileCopyrightText: Copyright (c) 2003-2023 The Nixpkgs/NixOS contributors
|
||||||
|
{ lib, fetchFromGitHub, perlPackages, autoreconfHook, iproute2, perl }:
|
||||||
|
|
||||||
|
perlPackages.buildPerlPackage rec {
|
||||||
|
pname = "ddclient";
|
||||||
|
version = "3.10.0";
|
||||||
|
|
||||||
|
outputs = [ "out" ];
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "ddclient";
|
||||||
|
repo = "ddclient";
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "sha256-wWUkjXwVNZRJR1rXPn3IkDRi9is9vsRuNC/zq8RpB1E=";
|
||||||
|
};
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
touch Makefile.PL
|
||||||
|
'';
|
||||||
|
|
||||||
|
nativeBuildInputs = [ autoreconfHook ];
|
||||||
|
|
||||||
|
buildInputs = with perlPackages; [ IOSocketINET6 IOSocketSSL JSONPP ];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
# patch sheebang ddclient script which only exists after buildPhase
|
||||||
|
preConfigure
|
||||||
|
install -Dm755 ddclient $out/bin/ddclient
|
||||||
|
install -Dm644 -t $out/share/doc/ddclient COP* README.* ChangeLog.md
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
# TODO: run upstream tests
|
||||||
|
doCheck = false;
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Client for updating dynamic DNS service entries";
|
||||||
|
homepage = "https://ddclient.net/";
|
||||||
|
license = licenses.gpl2Plus;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
maintainers = with maintainers; [ SuperSandro2000 ];
|
||||||
|
};
|
||||||
|
}
|
2
third_party/gerrit/default.nix
vendored
2
third_party/gerrit/default.nix
vendored
|
@ -27,7 +27,7 @@ pkgs.lib.makeOverridable depot.nix.buildBazelPackageNG rec {
|
||||||
find "$dir" -name .git -print0 | xargs -0 rm -rf
|
find "$dir" -name .git -print0 | xargs -0 rm -rf
|
||||||
'';
|
'';
|
||||||
});
|
});
|
||||||
depsHash = "sha256:114k8ck7056c415qncqmykwqrgprmxnaw3pdv50758mrgw7zdkpm";
|
depsHash = "sha256-OS2kLXjtuWf+XRyQO2qGvEaAOvxqu20+gXR+fsCvpMc=";
|
||||||
|
|
||||||
patches = [
|
patches = [
|
||||||
./0001-Syntax-highlight-nix.patch
|
./0001-Syntax-highlight-nix.patch
|
||||||
|
|
2
third_party/gerrit_plugins/builder.nix
vendored
2
third_party/gerrit_plugins/builder.nix
vendored
|
@ -4,7 +4,7 @@
|
||||||
{ name
|
{ name
|
||||||
, version
|
, version
|
||||||
, src
|
, src
|
||||||
, depsHash ? null
|
, depsHash ? null
|
||||||
, overlayPluginCmd ? ''
|
, overlayPluginCmd ? ''
|
||||||
cp -R "${src}" "$out/plugins/${name}"
|
cp -R "${src}" "$out/plugins/${name}"
|
||||||
echo "STABLE_BUILD_${lib.toUpper name}_LABEL v${version}-nix${if patches != [] then "-dirty" else ""}" >> $out/.version
|
echo "STABLE_BUILD_${lib.toUpper name}_LABEL v${version}-nix${if patches != [] then "-dirty" else ""}" >> $out/.version
|
||||||
|
|
2
third_party/gerrit_plugins/oauth/default.nix
vendored
2
third_party/gerrit_plugins/oauth/default.nix
vendored
|
@ -11,7 +11,7 @@ buildGerritBazelPlugin rec {
|
||||||
rev = "98231604d60788bb43490f1a301d792817ac8008";
|
rev = "98231604d60788bb43490f1a301d792817ac8008";
|
||||||
hash = "sha256-AuVO1Yys8BYqGHZI/adszCUg0JM2v4Td4fe26LdOPLM=";
|
hash = "sha256-AuVO1Yys8BYqGHZI/adszCUg0JM2v4Td4fe26LdOPLM=";
|
||||||
};
|
};
|
||||||
depsHash = "sha256:10py3vq9sfq5j4gjrlxff01vp346jbcygry06x4zc26xgnf4pa9r";
|
depsHash = "sha256-7SC4NXm4zGeJrYBqtEvcrLmsZmXEX8P21J0kwHBDBZ4=";
|
||||||
postOverlayPlugin = ''
|
postOverlayPlugin = ''
|
||||||
cp "${src}/external_plugin_deps.bzl" "$out/plugins/external_plugin_deps.bzl"
|
cp "${src}/external_plugin_deps.bzl" "$out/plugins/external_plugin_deps.bzl"
|
||||||
'';
|
'';
|
||||||
|
|
12
third_party/gitignoreSource/default.nix
vendored
12
third_party/gitignoreSource/default.nix
vendored
|
@ -1,7 +1,15 @@
|
||||||
{ depot, lib, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
gitignoreNix = import depot.third_party.sources."gitignore.nix" { inherit lib; };
|
gitignoreNix = import
|
||||||
|
(pkgs.fetchFromGitHub {
|
||||||
|
owner = "hercules-ci";
|
||||||
|
repo = "gitignore";
|
||||||
|
rev = "f9e996052b5af4032fe6150bba4a6fe4f7b9d698";
|
||||||
|
sha256 = "0jrh5ghisaqdd0vldbywags20m2cxpkbbk5jjjmwaw0gr8nhsafv";
|
||||||
|
})
|
||||||
|
{ inherit (pkgs) lib; };
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
__functor = _: gitignoreNix.gitignoreSource;
|
__functor = _: gitignoreNix.gitignoreSource;
|
||||||
|
|
5
third_party/lisp/closure-common.nix
vendored
5
third_party/lisp/closure-common.nix
vendored
|
@ -33,9 +33,4 @@ depot.nix.buildLisp.library {
|
||||||
depot.third_party.lisp.trivial-gray-streams
|
depot.third_party.lisp.trivial-gray-streams
|
||||||
depot.third_party.lisp.babel #+rune-is-character
|
depot.third_party.lisp.babel #+rune-is-character
|
||||||
];
|
];
|
||||||
|
|
||||||
brokenOn = [
|
|
||||||
# TODO(sterni): fails when loading because it tries to access package.lisp at runtime
|
|
||||||
"ecl"
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
6
third_party/lisp/closure-html/default.nix
vendored
6
third_party/lisp/closure-html/default.nix
vendored
|
@ -9,7 +9,7 @@ let
|
||||||
# delete unexported and unused double defun in sgml-dtd.lisp
|
# delete unexported and unused double defun in sgml-dtd.lisp
|
||||||
# which reference undefined CL-USER:*HTML-DTD* (!) which
|
# which reference undefined CL-USER:*HTML-DTD* (!) which
|
||||||
# unlike CLOSURE-HTML:*HTML-DTD* is not involved in the
|
# unlike CLOSURE-HTML:*HTML-DTD* is not involved in the
|
||||||
# package's operation.
|
# packages operation.
|
||||||
./no-double-defun.patch
|
./no-double-defun.patch
|
||||||
# Patches html-parser.lisp to look for the distributed
|
# Patches html-parser.lisp to look for the distributed
|
||||||
# dtd files and catalog in this source derivations out
|
# dtd files and catalog in this source derivations out
|
||||||
|
@ -62,8 +62,4 @@ depot.nix.buildLisp.library {
|
||||||
depot.third_party.lisp.flexi-streams
|
depot.third_party.lisp.flexi-streams
|
||||||
depot.third_party.lisp.closure-common
|
depot.third_party.lisp.closure-common
|
||||||
];
|
];
|
||||||
|
|
||||||
brokenOn = [
|
|
||||||
"ecl" # see closure-common
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
1
third_party/lisp/mime4cl/.skip-subtree
vendored
Normal file
1
third_party/lisp/mime4cl/.skip-subtree
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
prevent readTree from creating entries for subdirs that don't contain an .nix files
|
12
third_party/lisp/mime4cl/README.md
vendored
12
third_party/lisp/mime4cl/README.md
vendored
|
@ -9,17 +9,13 @@ website](http://wcp.sdf-eu.org/software/#mime4cl) can still be accessed.
|
||||||
The depot version has since diverged from upstream. Main aims were to improve
|
The depot version has since diverged from upstream. Main aims were to improve
|
||||||
performance and reduce code size by relying on third party libraries like
|
performance and reduce code size by relying on third party libraries like
|
||||||
flexi-streams. It is planned to improve encoding handling in the long term.
|
flexi-streams. It is planned to improve encoding handling in the long term.
|
||||||
Work towards this happens intermittently.
|
Currently, the library is being worked on intermittently and not very well
|
||||||
|
tested—**it may not work as expected**.
|
||||||
WARNING:
|
|
||||||
mime4cl currently doesn't have a _comprehensive_ test suite
|
|
||||||
and decidedly lacks performance.
|
|
||||||
|
|
||||||
## Differences from the original version
|
## Differences from the original version
|
||||||
|
|
||||||
* `//nix/buildLisp` is used as the build system. ASDF has been removed
|
* `//nix/buildLisp` is used as the build system. ASDF is currently untested and
|
||||||
since it was untested (it should be reintroduced once mime4cl is
|
may be broken.
|
||||||
“ready”).
|
|
||||||
|
|
||||||
* The dependency on [sclf](http://wcp.sdf-eu.org/software/#sclf) has been
|
* The dependency on [sclf](http://wcp.sdf-eu.org/software/#sclf) has been
|
||||||
eliminated by inlining the relevant parts.
|
eliminated by inlining the relevant parts.
|
||||||
|
|
30
third_party/lisp/mime4cl/benchmark/bench.lisp
vendored
30
third_party/lisp/mime4cl/benchmark/bench.lisp
vendored
|
@ -1,30 +0,0 @@
|
||||||
(defpackage :mime4cl-bench
|
|
||||||
(:use :common-lisp :mime4cl)
|
|
||||||
(:export :main))
|
|
||||||
|
|
||||||
(in-package :mime4cl-bench)
|
|
||||||
|
|
||||||
;; Write to /dev/null so that I/O is less (?) of a factor
|
|
||||||
(defparameter *output-path* (pathname "/dev/null"))
|
|
||||||
|
|
||||||
(defun parse-message (path)
|
|
||||||
(let ((msg (mime-message path)))
|
|
||||||
;; to prove we are doing something, print the subject
|
|
||||||
(format t "Subject: ~A~%" (car (mime-message-header-values "Subject" msg :decode t)))
|
|
||||||
msg))
|
|
||||||
|
|
||||||
(defun main ()
|
|
||||||
(destructuring-bind (bench-name message-path) (uiop:command-line-arguments)
|
|
||||||
(let ((action (intern (string-upcase bench-name) :mime4cl-bench))
|
|
||||||
(message-path (pathname message-path)))
|
|
||||||
(ccase action
|
|
||||||
((parse) (parse-message message-path))
|
|
||||||
((extract) (do-parts (part (parse-message message-path))
|
|
||||||
(format t "Content-Type: ~A~%" (mime-type-string part))
|
|
||||||
(let ((in (mime-body-stream part)))
|
|
||||||
(with-open-file (output-stream (pathname *output-path*)
|
|
||||||
:direction :output
|
|
||||||
:if-does-not-exist :create
|
|
||||||
:element-type (stream-element-type in)
|
|
||||||
:if-exists :overwrite)
|
|
||||||
(redirect-stream in output-stream)))))))))
|
|
69
third_party/lisp/mime4cl/benchmark/default.nix
vendored
69
third_party/lisp/mime4cl/benchmark/default.nix
vendored
|
@ -1,69 +0,0 @@
|
||||||
{ depot, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# Example email that's going to push the parser due to its big attachment
|
|
||||||
# of almost 200MB. We are using a GHC bindist since it's quite big and a
|
|
||||||
# fixed output derivation that's already part of nixpkgs, so whitby only
|
|
||||||
# needs to download it once (and it won't change).
|
|
||||||
message = pkgs.runCommand "huge.mime"
|
|
||||||
{
|
|
||||||
nativeBuildInputs = [ pkgs.buildPackages.mblaze ];
|
|
||||||
}
|
|
||||||
''
|
|
||||||
mmime > $out <<EOF
|
|
||||||
Subject: Test message with a big attachment
|
|
||||||
|
|
||||||
Henlo world!
|
|
||||||
|
|
||||||
#application/x-xz#base64 ${pkgs.haskell.compiler.ghc963Binary.src}
|
|
||||||
EOF
|
|
||||||
'';
|
|
||||||
|
|
||||||
inherit (depot.nix) buildLisp getBins;
|
|
||||||
|
|
||||||
benchmark-program = buildLisp.program {
|
|
||||||
name = "mime4cl-benchmark-program";
|
|
||||||
|
|
||||||
deps = [
|
|
||||||
{
|
|
||||||
sbcl = buildLisp.bundled "uiop";
|
|
||||||
default = buildLisp.bundled "asdf";
|
|
||||||
}
|
|
||||||
depot.third_party.lisp.mime4cl
|
|
||||||
];
|
|
||||||
|
|
||||||
srcs = [
|
|
||||||
./bench.lisp
|
|
||||||
];
|
|
||||||
|
|
||||||
main = "mime4cl-bench:main";
|
|
||||||
};
|
|
||||||
|
|
||||||
commands = bench: {
|
|
||||||
mime4cl-message-parsing = "${bench} parse ${message}";
|
|
||||||
mime4cl-attachment-extraction = "${bench} extract ${message}";
|
|
||||||
};
|
|
||||||
|
|
||||||
# TODO(sterni): expose this information from //nix/buildLisp and generate automatically
|
|
||||||
lispImplementations = [ "sbcl" /* "ccl" "ecl" */ ];
|
|
||||||
in
|
|
||||||
|
|
||||||
(pkgs.writeShellScriptBin "mime4cl-benchmark" ''
|
|
||||||
exec ${pkgs.hyperfine}/bin/hyperfine \
|
|
||||||
${
|
|
||||||
lib.escapeShellArgs (
|
|
||||||
lib.concatMap (impl:
|
|
||||||
lib.concatLists (
|
|
||||||
lib.mapAttrsToList (name: cmd:
|
|
||||||
[ "-n" "${impl}-${name}" cmd ]
|
|
||||||
) (commands (let b = benchmark-program.${impl}; in "${b}/bin/${b.name}"))
|
|
||||||
)
|
|
||||||
) lispImplementations
|
|
||||||
)
|
|
||||||
} \
|
|
||||||
"$@"
|
|
||||||
'').overrideAttrs (oldAttrs: {
|
|
||||||
passthru = oldAttrs.passthru or { } // {
|
|
||||||
inherit benchmark-program;
|
|
||||||
};
|
|
||||||
})
|
|
6
third_party/lisp/mime4cl/default.nix
vendored
6
third_party/lisp/mime4cl/default.nix
vendored
|
@ -42,4 +42,10 @@ depot.nix.buildLisp.library {
|
||||||
|
|
||||||
expression = "(rtest:do-tests)";
|
expression = "(rtest:do-tests)";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# limited by sclf
|
||||||
|
brokenOn = [
|
||||||
|
"ccl"
|
||||||
|
"ecl"
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
1
third_party/lisp/mime4cl/endec.lisp
vendored
1
third_party/lisp/mime4cl/endec.lisp
vendored
|
@ -656,7 +656,6 @@ sequence, a charset string indicating the original coding."
|
||||||
(cons (flexi-streams:octets-to-string
|
(cons (flexi-streams:octets-to-string
|
||||||
(car part)
|
(car part)
|
||||||
:external-format (flexi-streams:make-external-format
|
:external-format (flexi-streams:make-external-format
|
||||||
;; TODO(sterni): sanitize charset before interning
|
|
||||||
(intern (string-upcase (cdr part)) 'keyword))))
|
(intern (string-upcase (cdr part)) 'keyword))))
|
||||||
(string part))))
|
(string part))))
|
||||||
(apply #'concatenate
|
(apply #'concatenate
|
||||||
|
|
17
third_party/lisp/mime4cl/ex-sclf.lisp
vendored
17
third_party/lisp/mime4cl/ex-sclf.lisp
vendored
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
(defpackage :mime4cl-ex-sclf
|
(defpackage :mime4cl-ex-sclf
|
||||||
(:use :common-lisp)
|
(:use :common-lisp)
|
||||||
|
(:import-from :sb-posix :stat :stat-size)
|
||||||
|
|
||||||
(:export
|
(:export
|
||||||
#:aif
|
#:aif
|
||||||
|
@ -63,6 +64,8 @@
|
||||||
#:save-file-excursion
|
#:save-file-excursion
|
||||||
#:read-file
|
#:read-file
|
||||||
|
|
||||||
|
#:file-size
|
||||||
|
|
||||||
#:promise
|
#:promise
|
||||||
#:make-promise
|
#:make-promise
|
||||||
#:lazy
|
#:lazy
|
||||||
|
@ -265,6 +268,20 @@ ELEMENT-TYPE."
|
||||||
seq)
|
seq)
|
||||||
default)))
|
default)))
|
||||||
|
|
||||||
|
;; FILES
|
||||||
|
|
||||||
|
(defun native-namestring (pathname)
|
||||||
|
#+sbcl (sb-ext:native-namestring pathname)
|
||||||
|
#-sbcl (let (#+cmu (lisp::*ignore-wildcards* t))
|
||||||
|
(namestring pathname)))
|
||||||
|
|
||||||
|
;; FILE-LENGTH is a bit idiosyncratic in this respect. Besides, Unix
|
||||||
|
;; allows to get to know the file size without being able to open a
|
||||||
|
;; file; just ask politely.
|
||||||
|
(defun file-size (pathname)
|
||||||
|
#+sbcl (stat-size (unix-stat pathname))
|
||||||
|
#-sbcl (error "nyi"))
|
||||||
|
|
||||||
;; LAZY
|
;; LAZY
|
||||||
|
|
||||||
(defstruct promise
|
(defstruct promise
|
||||||
|
|
130
third_party/lisp/mime4cl/mime.lisp
vendored
130
third_party/lisp/mime4cl/mime.lisp
vendored
|
@ -67,15 +67,6 @@
|
||||||
(:documentation
|
(:documentation
|
||||||
"Abstract base class for all types of MIME parts."))
|
"Abstract base class for all types of MIME parts."))
|
||||||
|
|
||||||
(defparameter +redundant-headers+ '(:mime-version
|
|
||||||
:content-type
|
|
||||||
:content-id
|
|
||||||
:content-description
|
|
||||||
:content-disposition
|
|
||||||
:content-transfer-encoding)
|
|
||||||
"Headers that don't need to be preserved in the HEADERS slot of MIME-MESSAGE
|
|
||||||
because they are stored in dedicated slots in MIME-PART.")
|
|
||||||
|
|
||||||
(defclass mime-bodily-part (mime-part)
|
(defclass mime-bodily-part (mime-part)
|
||||||
((body
|
((body
|
||||||
:initarg :body
|
:initarg :body
|
||||||
|
@ -140,20 +131,11 @@ because they are stored in dedicated slots in MIME-PART.")
|
||||||
;; Allow a list of mime parts to be specified as body of a
|
;; Allow a list of mime parts to be specified as body of a
|
||||||
;; mime-message. In that case we implicitly create a mime-multipart
|
;; mime-message. In that case we implicitly create a mime-multipart
|
||||||
;; and assign to the body slot.
|
;; and assign to the body slot.
|
||||||
(with-slots (real-message headers) part
|
(with-slots (real-message) part
|
||||||
(when (and (slot-boundp part 'real-message)
|
(when (and (slot-boundp part 'real-message)
|
||||||
(consp real-message))
|
(consp real-message))
|
||||||
(setf real-message
|
(setf real-message
|
||||||
(make-instance 'mime-multipart :parts real-message)))
|
(make-instance 'mime-multipart :parts real-message)))))
|
||||||
;; Remove headers that are parsed and stored in MIME-PART (i.e.
|
|
||||||
;; REAL-MESSAGE). This prevents redundant storage and rendering of these
|
|
||||||
;; headers as well as MIME= depending on the specific rendering of these
|
|
||||||
;; headers which may diverge between mime4cl and other software. We do this
|
|
||||||
;; here since construction of REAL-MESSAGE may access the HEADERS slot.
|
|
||||||
(setf headers
|
|
||||||
(delete-if (lambda (h)
|
|
||||||
(member (car h) +redundant-headers+ :test #'string-equal))
|
|
||||||
headers))))
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
@ -201,25 +183,26 @@ because they are stored in dedicated slots in MIME-PART.")
|
||||||
:test #'string=)
|
:test #'string=)
|
||||||
(mime= (mime-body part1) (mime-body part2))))
|
(mime= (mime-body part1) (mime-body part2))))
|
||||||
|
|
||||||
(defgeneric mime-body-stream (mime-part)
|
(defun mime-body-stream (mime-part)
|
||||||
(:documentation
|
(make-input-adapter (mime-body mime-part)))
|
||||||
"Returns stream that allows reading the decoded body of the given part.
|
|
||||||
STREAM-ELEMENT-TYPE depends on part type."))
|
|
||||||
|
|
||||||
;; TODO(sterni): Allow accessing underlying binary stream?
|
(defun mime-body-length (mime-part)
|
||||||
;; Would need matching behavior with :7bit
|
(let ((body (mime-body mime-part)))
|
||||||
(defmethod mime-body-stream ((part mime-text))
|
;; here the stream type is missing on purpose, because we may not
|
||||||
(let ((underlying-stream (call-next-method)))
|
;; be able to size the length of a stream
|
||||||
(if (eq (stream-element-type underlying-stream) 'character)
|
(etypecase body
|
||||||
underlying-stream
|
(string
|
||||||
(make-flexi-stream underlying-stream
|
(length body))
|
||||||
:external-format
|
(vector
|
||||||
;; TODO(sterni): sanitize charset before interning
|
(length body))
|
||||||
(intern (string-upcase (mime-text-charset part))
|
(pathname
|
||||||
'keyword)))))
|
(file-size body))
|
||||||
|
(file-portion
|
||||||
(defmethod mime-body-stream ((part mime-part))
|
(with-open-stream (in (open-decoded-file-portion body))
|
||||||
(make-input-adapter (mime-body part)))
|
(loop
|
||||||
|
for byte = (read-byte in nil)
|
||||||
|
while byte
|
||||||
|
count byte))))))
|
||||||
|
|
||||||
(defmacro with-input-from-mime-body-stream ((stream part) &body forms)
|
(defmacro with-input-from-mime-body-stream ((stream part) &body forms)
|
||||||
`(with-open-stream (,stream (mime-body-stream ,part))
|
`(with-open-stream (,stream (mime-body-stream ,part))
|
||||||
|
@ -385,6 +368,10 @@ that may change this.")
|
||||||
(:multipart mime-multipart)
|
(:multipart mime-multipart)
|
||||||
(:message mime-message)))
|
(:message mime-message)))
|
||||||
|
|
||||||
|
(defgeneric mime-part-size (part)
|
||||||
|
(:documentation
|
||||||
|
"Return the size in bytes of the body of a MIME part."))
|
||||||
|
|
||||||
(defgeneric print-mime-part (part stream)
|
(defgeneric print-mime-part (part stream)
|
||||||
(:documentation
|
(:documentation
|
||||||
"Output to STREAM one of the possible human-readable representation
|
"Output to STREAM one of the possible human-readable representation
|
||||||
|
@ -484,18 +471,18 @@ separated by PART-BOUNDARY."
|
||||||
(encode-mime-body part stream))
|
(encode-mime-body part stream))
|
||||||
|
|
||||||
(defmethod encode-mime-part ((part mime-message) stream)
|
(defmethod encode-mime-part ((part mime-message) stream)
|
||||||
;; tricky: we have to mix the MIME headers with the message headers, i.e.
|
;; tricky: we have to mix the MIME headers with the message headers
|
||||||
;; ENCODE-MIME-PART will output additional headers
|
|
||||||
(dolist (h (mime-message-headers part))
|
(dolist (h (mime-message-headers part))
|
||||||
(unless (stringp (car h))
|
(unless (stringp (car h))
|
||||||
(setf (car h)
|
(setf (car h)
|
||||||
(string-capitalize (car h))))
|
(string-capitalize (car h))))
|
||||||
(format stream "~A: ~A~%"
|
(unless (or (string-starts-with "content-" (car h) #'string-equal)
|
||||||
(car h) (cdr h)))
|
(string-equal "mime-version" (car h)))
|
||||||
|
(format stream "~A: ~A~%"
|
||||||
|
(car h) (cdr h))))
|
||||||
(encode-mime-part (mime-body part) stream))
|
(encode-mime-part (mime-body part) stream))
|
||||||
|
|
||||||
(defmethod encode-mime-part ((part mime-multipart) stream)
|
(defmethod encode-mime-part ((part mime-multipart) stream)
|
||||||
(declare (ignore stream)) ; call-next-method
|
|
||||||
;; choose a boundary if not already set
|
;; choose a boundary if not already set
|
||||||
(let* ((original-boundary (get-mime-type-parameter part :boundary))
|
(let* ((original-boundary (get-mime-type-parameter part :boundary))
|
||||||
(boundary (choose-boundary (mime-parts part) original-boundary)))
|
(boundary (choose-boundary (mime-parts part) original-boundary)))
|
||||||
|
@ -690,10 +677,9 @@ body."
|
||||||
(defun keywordify-encoding (string)
|
(defun keywordify-encoding (string)
|
||||||
"Return a keyword for a content transfer encoding string.
|
"Return a keyword for a content transfer encoding string.
|
||||||
Return STRING itself if STRING is an unkown encoding."
|
Return STRING itself if STRING is an unkown encoding."
|
||||||
(when string
|
(aif (member string +known-encodings+ :test #'string-equal)
|
||||||
(aif (member string +known-encodings+ :test #'string-equal)
|
(car it)
|
||||||
(car it)
|
string))
|
||||||
string)))
|
|
||||||
|
|
||||||
(defun header (name headers)
|
(defun header (name headers)
|
||||||
(let ((elt (assoc name headers :test #'string-equal)))
|
(let ((elt (assoc name headers :test #'string-equal)))
|
||||||
|
@ -728,9 +714,8 @@ guessed from the headers, use the *DEFAULT-TYPE*."
|
||||||
:disposition (car disp)
|
:disposition (car disp)
|
||||||
:disposition-parameters (cdr disp)
|
:disposition-parameters (cdr disp)
|
||||||
:mime-version (hdr :mime-version)
|
:mime-version (hdr :mime-version)
|
||||||
:encoding (or (keywordify-encoding
|
:encoding (keywordify-encoding
|
||||||
(hdr :content-transfer-encoding))
|
(hdr :content-transfer-encoding))
|
||||||
:7bit) ; default per RFC2045
|
|
||||||
:description (hdr :content-description)
|
:description (hdr :content-description)
|
||||||
:id (hdr :content-id)
|
:id (hdr :content-id)
|
||||||
:allow-other-keys t)))
|
:allow-other-keys t)))
|
||||||
|
@ -776,12 +761,12 @@ returns a MIME-MESSAGE object."
|
||||||
(with-open-file (in msg :element-type '(unsigned-byte 8))
|
(with-open-file (in msg :element-type '(unsigned-byte 8))
|
||||||
(mime-message in)))
|
(mime-message in)))
|
||||||
|
|
||||||
(defmethod mime-message ((msg stream))
|
|
||||||
(mime-message (make-flexi-stream msg)))
|
|
||||||
|
|
||||||
(defmethod mime-message ((msg flexi-stream))
|
(defmethod mime-message ((msg flexi-stream))
|
||||||
(read-mime-message msg))
|
(read-mime-message msg))
|
||||||
|
|
||||||
|
(defmethod mime-message ((msg stream))
|
||||||
|
(read-mime-message (make-flexi-stream msg)))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defgeneric mime-part (object)
|
(defgeneric mime-part (object)
|
||||||
|
@ -842,6 +827,31 @@ returns a MIME-MESSAGE object."
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; fall back method
|
||||||
|
(defmethod mime-part-size ((part mime-part))
|
||||||
|
(let ((body (mime-body part)))
|
||||||
|
(typecase body
|
||||||
|
(pathname
|
||||||
|
(file-size body))
|
||||||
|
(string
|
||||||
|
(length body))
|
||||||
|
(vector
|
||||||
|
(length body))
|
||||||
|
(t nil))))
|
||||||
|
|
||||||
|
(defmethod mime-part-size ((part mime-multipart))
|
||||||
|
(loop
|
||||||
|
for p in (mime-parts part)
|
||||||
|
for size = (mime-part-size p)
|
||||||
|
unless size
|
||||||
|
return nil
|
||||||
|
sum size))
|
||||||
|
|
||||||
|
(defmethod mime-part-size ((part mime-message))
|
||||||
|
(mime-part-size (mime-body part)))
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defmethod print-mime-part ((part mime-multipart) (out stream))
|
(defmethod print-mime-part ((part mime-multipart) (out stream))
|
||||||
(case (mime-subtype part)
|
(case (mime-subtype part)
|
||||||
(:alternative
|
(:alternative
|
||||||
|
@ -868,11 +878,12 @@ returns a MIME-MESSAGE object."
|
||||||
(loop
|
(loop
|
||||||
for byte across body
|
for byte across body
|
||||||
do (write-char (code-char byte) out)))
|
do (write-char (code-char byte) out)))
|
||||||
(file-portion
|
|
||||||
(redirect-stream (open-decoded-file-portion body) out))
|
|
||||||
(pathname
|
(pathname
|
||||||
(with-open-file (in body)
|
(with-open-file (in body)
|
||||||
(redirect-stream in out))))))
|
(loop
|
||||||
|
for c = (read-char in nil)
|
||||||
|
while c
|
||||||
|
do (write-char c out)))))))
|
||||||
|
|
||||||
(defmethod print-mime-part ((part mime-message) (out stream))
|
(defmethod print-mime-part ((part mime-message) (out stream))
|
||||||
(flet ((hdr (name)
|
(flet ((hdr (name)
|
||||||
|
@ -886,8 +897,8 @@ returns a MIME-MESSAGE object."
|
||||||
(print-mime-part (mime-body part) out)))
|
(print-mime-part (mime-body part) out)))
|
||||||
|
|
||||||
(defmethod print-mime-part ((part mime-part) (out stream))
|
(defmethod print-mime-part ((part mime-part) (out stream))
|
||||||
(format out "~&[ ~A subtype=~A ~@[description=~S ~]]~%"
|
(format out "~&[ ~A subtype=~A ~@[description=~S ~]~@[size=~A~] ]~%"
|
||||||
(type-of part) (mime-subtype part) (mime-description part)))
|
(type-of part) (mime-subtype part) (mime-description part) (mime-part-size part)))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
@ -969,6 +980,9 @@ is a string."))
|
||||||
(:documentation
|
(:documentation
|
||||||
"Return the string describing the MIME part."))
|
"Return the string describing the MIME part."))
|
||||||
|
|
||||||
|
(defmethod mime-type-string ((part mime-unknown-part))
|
||||||
|
(mime-type part))
|
||||||
|
|
||||||
(defmethod mime-type-string ((part mime-text))
|
(defmethod mime-type-string ((part mime-text))
|
||||||
(format nil "text/~A" (mime-subtype part)))
|
(format nil "text/~A" (mime-subtype part)))
|
||||||
|
|
||||||
|
|
55
third_party/lisp/mime4cl/mime4cl-tests.asd
vendored
Normal file
55
third_party/lisp/mime4cl/mime4cl-tests.asd
vendored
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
;;; mime4cl-tests.asd --- system description for the regression tests
|
||||||
|
|
||||||
|
;;; Copyright (C) 2006, 2007, 2010 by Walter C. Pelissero
|
||||||
|
;;; Copyright (C) 2022 by The TVL Authors
|
||||||
|
|
||||||
|
;;; Author: Walter C. Pelissero <walter@pelissero.de>
|
||||||
|
;;; Project: mime4cl
|
||||||
|
|
||||||
|
;;; This library is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU Lesser General Public License
|
||||||
|
;;; as published by the Free Software Foundation; either version 2.1
|
||||||
|
;;; of the License, or (at your option) any later version.
|
||||||
|
;;; This library is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; Lesser General Public License for more details.
|
||||||
|
;;; You should have received a copy of the GNU Lesser General Public
|
||||||
|
;;; License along with this library; if not, write to the Free
|
||||||
|
;;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
;;; 02111-1307 USA
|
||||||
|
|
||||||
|
#-(or sbcl)
|
||||||
|
(warn "This code hasn't been tested on your Lisp system.")
|
||||||
|
|
||||||
|
(defpackage :mime4cl-tests-system
|
||||||
|
(:use :common-lisp :asdf #+asdfa :asdfa)
|
||||||
|
(:export #:*base-directory*
|
||||||
|
#:*compilation-epoch*))
|
||||||
|
|
||||||
|
(in-package :mime4cl-tests-system)
|
||||||
|
|
||||||
|
(defsystem mime4cl-tests
|
||||||
|
:name "MIME4CL-tests"
|
||||||
|
:author "Walter C. Pelissero <walter@pelissero.de>"
|
||||||
|
:maintainer "Walter C. Pelissero <walter@pelissero.de>"
|
||||||
|
:description "Test suite for the MIME4CL library"
|
||||||
|
:long-description
|
||||||
|
"These regression tests require rt.lisp from MIT. It is included."
|
||||||
|
:licence "LGPL"
|
||||||
|
:depends-on (:mime4cl)
|
||||||
|
:components
|
||||||
|
((:module test
|
||||||
|
:components
|
||||||
|
((:file "rt")
|
||||||
|
(:file "package" :depends-on ("rt"))
|
||||||
|
(:file "endec" :depends-on ("rt" "package"))
|
||||||
|
(:file "address" :depends-on ("rt" "package"))
|
||||||
|
(:file "mime" :depends-on ("rt" "package"))))))
|
||||||
|
|
||||||
|
;; when loading this form the regression-test, the package is yet to
|
||||||
|
;; be loaded so we cannot use rt:do-tests directly or we would get a
|
||||||
|
;; reader error (unknown package)
|
||||||
|
(defmethod perform ((o test-op) (c (eql (find-system :mime4cl-tests))))
|
||||||
|
(or (funcall (intern "DO-TESTS" "REGRESSION-TEST"))
|
||||||
|
(error "test-op failed")))
|
49
third_party/lisp/mime4cl/mime4cl.asd
vendored
Normal file
49
third_party/lisp/mime4cl/mime4cl.asd
vendored
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
;;; mime4cl.asd --- system definition
|
||||||
|
|
||||||
|
;;; Copyright (C) 2005-2007, 2010 by Walter C. Pelissero
|
||||||
|
;;; Copyright (C) 2022 by The TVL Authors
|
||||||
|
|
||||||
|
;;; Author: Walter C. Pelissero <walter@pelissero.de>
|
||||||
|
;;; Project: mime4cl
|
||||||
|
|
||||||
|
;;; This program is free software; you can redistribute it and/or
|
||||||
|
;;; modify it under the terms of the GNU General Public License as
|
||||||
|
;;; published by the Free Software Foundation; either version 2, or (at
|
||||||
|
;;; your option) any later version.
|
||||||
|
;;; This program is distributed in the hope that it will be useful,
|
||||||
|
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
;;; General Public License for more details.
|
||||||
|
;;; You should have received a copy of the GNU General Public License
|
||||||
|
;;; along with this program; see the file COPYING. If not, write to
|
||||||
|
;;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
;;; Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
(in-package :cl-user)
|
||||||
|
|
||||||
|
(defpackage :mime4cl-system
|
||||||
|
(:use :common-lisp :asdf))
|
||||||
|
|
||||||
|
(in-package :mime4cl-system)
|
||||||
|
|
||||||
|
(defsystem mime4cl
|
||||||
|
:name "MIME4CL"
|
||||||
|
:author "Walter C. Pelissero <walter@pelissero.de>"
|
||||||
|
:maintainer "Walter C. Pelissero <walter@pelissero.de>"
|
||||||
|
;; :version "0.0"
|
||||||
|
:description "MIME primitives for Common Lisp"
|
||||||
|
:long-description
|
||||||
|
"A collection of Common Lisp primitives to forge and handle
|
||||||
|
MIME mail contents."
|
||||||
|
:licence "LGPL"
|
||||||
|
:depends-on (:npg :sclf :trivial-gray-streams)
|
||||||
|
:components
|
||||||
|
((:file "package")
|
||||||
|
(:file "mime" :depends-on ("package" "endec" "streams"))
|
||||||
|
(:file "endec" :depends-on ("package"))
|
||||||
|
(:file "streams" :depends-on ("package" "endec"))
|
||||||
|
(:file "address" :depends-on ("package"))))
|
||||||
|
|
||||||
|
(defmethod perform ((o test-op) (c (eql (find-system 'mime4cl))))
|
||||||
|
(oos 'load-op 'mime4cl-tests)
|
||||||
|
(oos 'test-op 'mime4cl-tests :force t))
|
2
third_party/lisp/mime4cl/package.lisp
vendored
2
third_party/lisp/mime4cl/package.lisp
vendored
|
@ -44,9 +44,11 @@
|
||||||
#:mime-application
|
#:mime-application
|
||||||
#:mime-video
|
#:mime-video
|
||||||
#:mime-description
|
#:mime-description
|
||||||
|
#:mime-part-size
|
||||||
#:mime-subtype
|
#:mime-subtype
|
||||||
#:mime-body
|
#:mime-body
|
||||||
#:mime-body-stream
|
#:mime-body-stream
|
||||||
|
#:mime-body-length
|
||||||
#:mime-parts
|
#:mime-parts
|
||||||
#:mime-part-p
|
#:mime-part-p
|
||||||
#:mime-type
|
#:mime-type
|
||||||
|
|
1
third_party/lisp/mime4cl/test/.skip-tree
vendored
1
third_party/lisp/mime4cl/test/.skip-tree
vendored
|
@ -1 +0,0 @@
|
||||||
parent exposes tests
|
|
|
@ -1,206 +0,0 @@
|
||||||
Received: by 2002:a05:6838:9619:0:0:0:0 with SMTP id y25csp3021959nkj;
|
|
||||||
Sun, 27 Sep 2020 16:35:15 -0700 (PDT)
|
|
||||||
X-Received: by 2002:a05:6402:396:: with SMTP id o22mr12644027edv.316.1601249714826;
|
|
||||||
Sun, 27 Sep 2020 16:35:14 -0700 (PDT)
|
|
||||||
ARC-Seal: i=3; a=rsa-sha256; t=1601249714; cv=pass;
|
|
||||||
d=google.com; s=arc-20160816;
|
|
||||||
b=JZF8xwEI+NfpPypYuVsDwKKN4In4Gxk3qcvm260gDbKPo04eS7Dn3CcoeQkbB3Ryck
|
|
||||||
FUtB8PfISQOsDboMeEXqGbhbCSbH2HoXWySM6XucTVzfeL2hXF9sPjFUCx6LLuvSDSxL
|
|
||||||
7E146B7H3dNvB1ndqkWyefiVeSgeES7KzVvYbkoMJJlKozR6FUsKMCVMdrRq0ja6iGbf
|
|
||||||
7TlLWvlci49+8LZQKtDQ2ovU/DSQmu2f7eWcbozsIP3ArBxQ+814bQprLWQYsI5Z4fZz
|
|
||||||
0kPEC6dbZpajPDNpTx5ark/+EV/ICGVE6kODmNjFTi18eMjMU1PXULE8FImkw+duFdzP
|
|
||||||
DF4g==
|
|
||||||
ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
|
|
||||||
h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post
|
|
||||||
:list-id:mailing-list:precedence:subject:to:from:date:message-id
|
|
||||||
:mime-version:user-agent:sender:dkim-signature;
|
|
||||||
bh=2VC221ICpWr3atnjvjQBr2VGuwcTNaQLBA5EJvQxzNE=;
|
|
||||||
b=oI1vj3HEqVB2vRTlg44B8ik+G5jSMm7YHiPOdg+oWwiZSeK1DlKf3S0C9brs8iLBDU
|
|
||||||
paovJkxdJu++lY1zzBorw34bMDPHsfnBf6ztDZfAhpDSQM3VZEW+jAvAc9vFh6eL5ilE
|
|
||||||
qdZR9blzrqoi5GoPmVx7j/Z30zFidppWNbZLzuC7pAcS86WzKd8Ta56EDxxHE48RFRyO
|
|
||||||
TYhIonS2QEBp+Yn2Pm5SGez/5HHI2s3vu1kXTZ0JKETvWSkZUtBsX7u7KTfcy3EAjvc8
|
|
||||||
3s2dxQpMCYXZvyvJ0g2k0dsecEDRBWa2gv9Wr3iip7v5NaRcKuz1nuN/AiazKZPTDION
|
|
||||||
f/tg==
|
|
||||||
ARC-Authentication-Results: i=3; mx.google.com;
|
|
||||||
dkim=pass header.i=@tazj.in header.s=google header.b=dVeQt6cm;
|
|
||||||
arc=pass (i=2 dkim=pass dkdomain=firefly.nu dkim=pass dkdomain=messagingengine.com);
|
|
||||||
spf=pass (google.com: domain of depot+bncbdhlpx4g2ierbmwdyt5qkgqexgc7sqy@tazj.in designates 209.85.220.69 as permitted sender) smtp.mailfrom=depot+bncBDHLPX4G2IERBMWDYT5QKGQEXGC7SQY@tazj.in
|
|
||||||
Return-Path: <depot+bncBDHLPX4G2IERBMWDYT5QKGQEXGC7SQY@tazj.in>
|
|
||||||
Received: from mail-sor-f69.google.com (mail-sor-f69.google.com. [209.85.220.69])
|
|
||||||
by mx.google.com with SMTPS id li22sor4242657ejb.49.2020.09.27.16.35.14
|
|
||||||
for <mail@tazj.in>
|
|
||||||
(Google Transport Security);
|
|
||||||
Sun, 27 Sep 2020 16:35:14 -0700 (PDT)
|
|
||||||
Received-SPF: pass (google.com: domain of depot+bncbdhlpx4g2ierbmwdyt5qkgqexgc7sqy@tazj.in designates 209.85.220.69 as permitted sender) client-ip=209.85.220.69;
|
|
||||||
Authentication-Results: mx.google.com;
|
|
||||||
dkim=pass header.i=@tazj.in header.s=google header.b=dVeQt6cm;
|
|
||||||
arc=pass (i=2 dkim=pass dkdomain=firefly.nu dkim=pass dkdomain=messagingengine.com);
|
|
||||||
spf=pass (google.com: domain of depot+bncbdhlpx4g2ierbmwdyt5qkgqexgc7sqy@tazj.in designates 209.85.220.69 as permitted sender) smtp.mailfrom=depot+bncBDHLPX4G2IERBMWDYT5QKGQEXGC7SQY@tazj.in
|
|
||||||
ARC-Seal: i=2; a=rsa-sha256; t=1601249714; cv=pass;
|
|
||||||
d=google.com; s=arc-20160816;
|
|
||||||
b=e/oahP75xCAPQvP5D7B1dG2SDAEC5XNRI40cafqhXEI32hdW9TQNSs1krZ7tQHOht2
|
|
||||||
/ZGbOLY/BNxS3VoDM+Mcif7BCx7bjeOpmVkVzEhM0KZoBHorf91SOBM05PvewA9nQtLb
|
|
||||||
1pXB8bdivzOkYUuSX56rX1sOjNjMrWWUPF8Ven5zy3r2MIqJ561O8pPN/6Uz0tajiK7Y
|
|
||||||
klavaIk/Pxo91kuVbOKDJTH2mmggFTthqYkkCQuelgeKx4zBdDjS32vx3kPLRhMnfuGu
|
|
||||||
+CHC9L2Gv0ww0PyfRhkYeNLRrAqVHWDyCrw26f2QxFBEoTv/OnzH380uqO9n+SdmILBI
|
|
||||||
fNzw==
|
|
||||||
ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
|
|
||||||
h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post
|
|
||||||
:list-id:mailing-list:precedence:subject:to:from:date:message-id
|
|
||||||
:mime-version:user-agent:sender:dkim-signature;
|
|
||||||
bh=2VC221ICpWr3atnjvjQBr2VGuwcTNaQLBA5EJvQxzNE=;
|
|
||||||
b=BONPbsQkjSVRgH8pu89B9aXx6IAuchsgfp2pedA7kEz7Gw3/M9nQoPxTbjcAXKFWoi
|
|
||||||
SDqYH/Ch6TrYFy6WmgKyw5NB0WuB6WIC9jhRbeiGsXlxbnm1cP1thD7uRFJTaAhcaRBO
|
|
||||||
cbRA5Ue7pTphAtNVWkHeC37swSOrLtl9WFj+vXwo2l8ndO+5uP6jBi3ApaZDXyx7NODT
|
|
||||||
i3Jo1kehj7rnA+PINKR8tjlZ1COJYmxWz7upypJY4rZxLdJYzXPS19Rdhq4zmumyqRxt
|
|
||||||
NsnIIPsPRnYopcLd15rwgSOaHYi4CWwalkpfsBL1IaKXuk0K/XwmLsWdGrNRAN4aUEoR
|
|
||||||
7KEw==
|
|
||||||
ARC-Authentication-Results: i=2; mx.google.com;
|
|
||||||
dkim=pass header.i=@firefly.nu header.s=fm2 header.b=P5Ezbo3T;
|
|
||||||
dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=pHVhf6X0;
|
|
||||||
spf=neutral (google.com: 64.147.123.21 is neither permitted nor denied by best guess record for domain of firefly@firefly.nu) smtp.mailfrom=firefly@firefly.nu
|
|
||||||
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
|
||||||
d=tazj.in; s=google;
|
|
||||||
h=sender:user-agent:mime-version:message-id:date:from:to:subject
|
|
||||||
:x-original-sender:x-original-authentication-results:precedence
|
|
||||||
:mailing-list:list-id:list-post:list-help:list-archive
|
|
||||||
:list-subscribe:list-unsubscribe;
|
|
||||||
bh=2VC221ICpWr3atnjvjQBr2VGuwcTNaQLBA5EJvQxzNE=;
|
|
||||||
b=dVeQt6cmfZBkKqjl826gk0BnxKVtl6OsjaldzCuNQxqxhrecw9GbSofGqS3WxrxWWP
|
|
||||||
S8cg2AoRtIFC8nuTiRCAEgREb+4paYH5BtDbLtL/Y56jOA0djb6APwYx8MYOVwQxflrx
|
|
||||||
yyGWSXI04MYjkX/+0gFyvzi0VfZM4UK4pjfPN6WhHBe4xy6bF8VBds11PPAaKZdSdAvR
|
|
||||||
z8j+CpWBNzKNfbM3bUdLbEuPmt3+Qeem/4HAnRhY6jIYyBJb2a2vXT/edBasnTE/gNSd
|
|
||||||
Cf4SppE7H3EpRwveBAF367MeeX3stQrXN//t2aXljnuxymM90yPkIq2Xn0zBfp1O47WR
|
|
||||||
aOBg==
|
|
||||||
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
|
||||||
d=1e100.net; s=20161025;
|
|
||||||
h=sender:x-gm-message-state:user-agent:mime-version:message-id:date
|
|
||||||
:from:to:subject:x-original-sender:x-original-authentication-results
|
|
||||||
:precedence:mailing-list:list-id:x-spam-checked-in-group:list-post
|
|
||||||
:list-help:list-archive:list-subscribe:list-unsubscribe;
|
|
||||||
bh=2VC221ICpWr3atnjvjQBr2VGuwcTNaQLBA5EJvQxzNE=;
|
|
||||||
b=qScRnwtHSE4Boeu7UpmdBjsVhesvMMFHVmdPjW3sNCgR1SxUIOLjFpJNPXy/l+dlOh
|
|
||||||
sApL/oDMQ25yHodkQF8G2mRCV+SBDVAsrIo0w+LILPP3h+Y0y2yTLiLwKE4WLqoaPi1l
|
|
||||||
jugZUthJC3KEHq8fhtQHRTtBc5V7UQJIecH2kIU43DUNKpzkzOdf7km6Q0cY9CdXs23x
|
|
||||||
PSuSg4PzbHOo6cGdBVKvbsjh+sOn6WFuxoXOTtNmFJfE9fTfUlz7LJumTZU3J7DKc5Ho
|
|
||||||
aYzHFmRwdZUyoX/FQwT//Tf2RQbnVGD3o5a+6lhzt8MFecmLHvRImbKCL/L8K+WTYYFY
|
|
||||||
ou0g==
|
|
||||||
Sender: depot@tazj.in
|
|
||||||
X-Gm-Message-State: AOAM530ZJ8ZcOIvD5lsuI9DM+tccfbSnX8Qgkk03neyoDAKpidBSMC/W
|
|
||||||
yt/uGXfgEMSbcEOWEu/zxLqwyI0F
|
|
||||||
X-Google-Smtp-Source: ABdhPJySQZLzFZhvk2VQDhHrXOWbCQqFMNYvDodhQIOIvOgRkT6bOuvTGVrWIiY58v2NVvIzUZCfKw==
|
|
||||||
X-Received: by 2002:a17:906:d78c:: with SMTP id pj12mr12868809ejb.36.1601249714531;
|
|
||||||
Sun, 27 Sep 2020 16:35:14 -0700 (PDT)
|
|
||||||
X-BeenThere: depot@tazj.in
|
|
||||||
Received: by 2002:a17:906:547:: with SMTP id k7ls3670922eja.7.gmail; Sun, 27
|
|
||||||
Sep 2020 16:35:13 -0700 (PDT)
|
|
||||||
X-Received: by 2002:a17:906:2cd2:: with SMTP id r18mr13573990ejr.371.1601249713549;
|
|
||||||
Sun, 27 Sep 2020 16:35:13 -0700 (PDT)
|
|
||||||
ARC-Seal: i=1; a=rsa-sha256; t=1601249713; cv=none;
|
|
||||||
d=google.com; s=arc-20160816;
|
|
||||||
b=oi0sYnQxS35/hNyKRgiTTgLNV0zvOtiE8Irv6bfmQCOADDql9vaDvs430N+tsEzON3
|
|
||||||
wd8frXphZvgkZjVvPer5CgLyr84ixyrrHhEDwqs89AYR9wHibQ6QtinQfr5xoDkQW9Tb
|
|
||||||
MMlgl55c2AHzXXqe+eY4gEHww/y8ys1aCDAWEhGxe1M09FiUVBn3+F2ZOV5IW4q+p9TW
|
|
||||||
EMPNZyByXAZnqkYZCX+KHJ+3nyuQ0PsRVuIVbQA/a0GvVwl+yEhyJno7l2AUR8cfl8at
|
|
||||||
MeevKmvuYTCuc03cLceleXov097xsF0WvO8H68OPkZj1Kf9wrE3qg6avyZF285ixaXrS
|
|
||||||
Kc6A==
|
|
||||||
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
|
|
||||||
h=subject:to:from:date:message-id:mime-version:user-agent
|
|
||||||
:dkim-signature:dkim-signature;
|
|
||||||
bh=RahJwSWaN3jErVsNLXnMXbf7yUdzKHDGCF4swc44ayM=;
|
|
||||||
b=qzsApa+4gOUyfT8CcBmrz26QKrvOy54oZgzrHdDe7oNkLANtUyxqKD3KhDAKGUMLYQ
|
|
||||||
jbXSNrQnhNR4GUNAYmpT/TM0RnbEgdO9rr9LcA3pGA9/LuJo3jBkV87a9H7cC5mp8Zwc
|
|
||||||
sL4WScovJaK7m0m83VBDqq9Zhp0hexHCKCnH/LrNtpTrWiQvYz6BuDM04BuOEXN4mq1c
|
|
||||||
tXXcDsrcoj4hTLtGplWU5qGhYnem00cKPXsQ09ivGKFib1TbNgiVGsnHrICktmmionRw
|
|
||||||
SioEgIoc0ZUlHQOvoV0UlbkCAEEPS9GBR3NeTbm+Dth08zejgs+Il9QiFV2kLnJ0QMpn
|
|
||||||
oB8A==
|
|
||||||
ARC-Authentication-Results: i=1; mx.google.com;
|
|
||||||
dkim=pass header.i=@firefly.nu header.s=fm2 header.b=P5Ezbo3T;
|
|
||||||
dkim=pass header.i=@messagingengine.com header.s=fm3 header.b=pHVhf6X0;
|
|
||||||
spf=neutral (google.com: 64.147.123.21 is neither permitted nor denied by best guess record for domain of firefly@firefly.nu) smtp.mailfrom=firefly@firefly.nu
|
|
||||||
Received: from wout5-smtp.messagingengine.com (wout5-smtp.messagingengine.com. [64.147.123.21])
|
|
||||||
by mx.google.com with ESMTPS id m23si6276235ejo.333.2020.09.27.16.35.13
|
|
||||||
for <depot@tazj.in>
|
|
||||||
(version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
|
|
||||||
Sun, 27 Sep 2020 16:35:13 -0700 (PDT)
|
|
||||||
Received-SPF: neutral (google.com: 64.147.123.21 is neither permitted nor denied by best guess record for domain of firefly@firefly.nu) client-ip=64.147.123.21;
|
|
||||||
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41])
|
|
||||||
by mailout.west.internal (Postfix) with ESMTP id AF9D4858
|
|
||||||
for <depot@tazj.in>; Sun, 27 Sep 2020 19:35:11 -0400 (EDT)
|
|
||||||
Received: from imap6 ([10.202.2.56])
|
|
||||||
by compute1.internal (MEProxy); Sun, 27 Sep 2020 19:35:11 -0400
|
|
||||||
X-ME-Sender: <xms:riFxX4VnnifQ9w1KFMktbNIetMCUOiNsY4QMYMYNlcgQgeqXmCbxGg>
|
|
||||||
<xme:riFxX8mtBTwZaJ30GiNT2TYs0ejG-tC5fKpxry_tax2FN1_w3MP63qO7Ffo4aMcuK
|
|
||||||
eqmL1zZSYwS6hK6BvU>
|
|
||||||
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrvdehgddvfecutefuodetggdotefrodftvf
|
|
||||||
curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
|
|
||||||
uegrihhlohhuthemuceftddtnecunecujfgurhepofgfggfkfffhvffutgesmhdtreerre
|
|
||||||
ertdenucfhrhhomhephfhirhgvhfhlhicuoehfihhrvghflhihsehfihhrvghflhihrdhn
|
|
||||||
uheqnecuggftrfgrthhtvghrnhepgfejjeeivdduheehhffgiedvvdeivefhfeekhfejvd
|
|
||||||
fgleekffdtvefgtdeuheefnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehm
|
|
||||||
rghilhhfrhhomhepfhhirhgvfhhlhiesfhhirhgvfhhlhidrnhhu
|
|
||||||
X-ME-Proxy: <xmx:riFxX8bsOSPgAJy1KyePkpmeGpo8_4ECkIYua3cdRGhJD45-GomP8Q>
|
|
||||||
<xmx:riFxX3Ugz0lVIhmd_81eDzJj-2szxZvctDBqkrSaqBZ_TDOMs1VupQ>
|
|
||||||
<xmx:riFxXym0eSIOSeILjv9B21LhstreNAqMkiGciBVaC2LtNcaTVGm6wg>
|
|
||||||
<xmx:ryFxX4k9Fcb8iNBf12VTr02XeILIeJsjVJ3N-5Zb8vvkAOQ9acbwRQ>
|
|
||||||
Received: by mailuser.nyi.internal (Postfix, from userid 501)
|
|
||||||
id AEA2C1400D7; Sun, 27 Sep 2020 19:35:10 -0400 (EDT)
|
|
||||||
X-Mailer: MessagingEngine.com Webmail Interface
|
|
||||||
User-Agent: Cyrus-JMAP/3.3.0-355-g3ece53b-fm-20200922.004-g3ece53b9
|
|
||||||
Mime-Version: 1.0
|
|
||||||
Message-Id: <4f4614f5-23dc-4263-b506-c557588232b2@www.fastmail.com>
|
|
||||||
Date: Mon, 28 Sep 2020 01:34:48 +0200
|
|
||||||
From: FireFly <firefly@firefly.nu>
|
|
||||||
To: depot@tazj.in
|
|
||||||
Subject: [PATCH] feat(tvl-slapd): add firefly
|
|
||||||
Content-Type: multipart/mixed;
|
|
||||||
boundary=07c9605219da4b40b95ea5a855089bfa
|
|
||||||
X-Original-Sender: firefly@firefly.nu
|
|
||||||
X-Original-Authentication-Results: mx.google.com; dkim=pass
|
|
||||||
header.i=@firefly.nu header.s=fm2 header.b=P5Ezbo3T; dkim=pass
|
|
||||||
header.i=@messagingengine.com header.s=fm3 header.b=pHVhf6X0;
|
|
||||||
spf=neutral (google.com: 64.147.123.21 is neither permitted nor denied
|
|
||||||
by best guess record for domain of firefly@firefly.nu) smtp.mailfrom=firefly@firefly.nu
|
|
||||||
Precedence: list
|
|
||||||
Mailing-list: list depot@tazj.in; contact depot+owners@tazj.in
|
|
||||||
List-ID: <depot.tazj.in>
|
|
||||||
X-Spam-Checked-In-Group: depot@tazj.in
|
|
||||||
X-Google-Group-Id: 728837484537
|
|
||||||
List-Post: <https://groups.google.com/a/tazj.in/group/depot/post>, <mailto:depot@tazj.in>
|
|
||||||
List-Help: <https://support.google.com/a/tazj.in/bin/topic.py?topic=25838>, <mailto:depot+help@tazj.in>
|
|
||||||
List-Archive: <https://groups.google.com/a/tazj.in/group/depot/>
|
|
||||||
List-Subscribe: <https://groups.google.com/a/tazj.in/group/depot/subscribe>, <mailto:depot+subscribe@tazj.in>
|
|
||||||
List-Unsubscribe: <mailto:googlegroups-manage+728837484537+unsubscribe@googlegroups.com>,
|
|
||||||
<https://groups.google.com/a/tazj.in/group/depot/subscribe>
|
|
||||||
|
|
||||||
--07c9605219da4b40b95ea5a855089bfa
|
|
||||||
Content-Type: text/plain; charset="UTF-8"
|
|
||||||
|
|
||||||
Adding an account for myself
|
|
||||||
|
|
||||||
|
|
||||||
--07c9605219da4b40b95ea5a855089bfa
|
|
||||||
Content-Disposition: attachment;filename="0001-feat-tvl-slapd-add-firefly.patch"
|
|
||||||
Content-Type: application/octet-stream; name="0001-feat-tvl-slapd-add-firefly.patch"
|
|
||||||
Content-Transfer-Encoding: BASE64
|
|
||||||
|
|
||||||
RnJvbSA4ZDNiNmI5NWQ0Y2RlMDNmM2I2MjQzZmYyYWJhYmQ0YTEzNDhjZmUzIE1vbiBTZXAg
|
|
||||||
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Sm9uYXM9MjBIPUMzPUI2Z2x1bmQ/
|
|
||||||
PSA8ZmlyZWZseUBmaXJlZmx5Lm51PgpEYXRlOiBNb24sIDI4IFNlcCAyMDIwIDAxOjI4OjI5
|
|
||||||
ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gZmVhdCh0dmwtc2xhcGQpOiBhZGQgZmlyZWZseQoK
|
|
||||||
LS0tCiBvcHMvbml4b3MvdHZsLXNsYXBkL2RlZmF1bHQubml4IHwgNSArKysrKwogMSBmaWxl
|
|
||||||
IGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL29wcy9uaXhvcy90dmwt
|
|
||||||
c2xhcGQvZGVmYXVsdC5uaXggYi9vcHMvbml4b3MvdHZsLXNsYXBkL2RlZmF1bHQubml4Cmlu
|
|
||||||
ZGV4IDQyMGU4ZTE5Ni4uMzk3N2ZjNzkyIDEwMDY0NAotLS0gYS9vcHMvbml4b3MvdHZsLXNs
|
|
||||||
YXBkL2RlZmF1bHQubml4CisrKyBiL29wcy9uaXhvcy90dmwtc2xhcGQvZGVmYXVsdC5uaXgK
|
|
||||||
QEAgLTYwLDYgKzYwLDExIEBAIGxldAogICAgICAgZW1haWwgPSAiZXRhQHRoZXRhLmV1Lm9y
|
|
||||||
ZyI7CiAgICAgICBwYXNzd29yZCA9ICJ7U1NIQX1zT1I1eHppN0xmdjM3NlhHUUE4SGY2anlo
|
|
||||||
VHZvMFhZYyI7CiAgICAgfQorICAgIHsKKyAgICAgIHVzZXJuYW1lID0gImZpcmVmbHkiOwor
|
|
||||||
ICAgICAgZW1haWwgPSAiZmlyZWZseUBmaXJlZmx5Lm51IjsKKyAgICAgIHBhc3N3b3JkID0g
|
|
||||||
IntBUkdPTjJ9JGFyZ29uMmlkJHY9MTkkbT02NTUzNix0PTIscD0xJFJZVlZrRm9pM0ExeVlr
|
|
||||||
SThKMnpVd2ckR1VFUnZnSHZVOFNHalFtaWxESkdadTUwaFlSQUh3K2VqdHVMK1NreWdzOCI7
|
|
||||||
CisgICAgfQogICAgIHsKICAgICAgIHVzZXJuYW1lID0gImdsaXR0ZXJzaGFyayI7CiAgICAg
|
|
||||||
ICBlbWFpbCA9ICJncmZuQGd3cy5meWkiOwotLSAKMi4yNS4xCgo=
|
|
||||||
|
|
||||||
--07c9605219da4b40b95ea5a855089bfa--
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
From: <sterni>
|
|
||||||
Date: Wed, 25 Dec 2024 23:54:39 +0100
|
|
||||||
X-Universally-Unique-Identifier: d2ccdc74-830c-41ee-9d64-2221f1c35449
|
|
||||||
X-Uniform-Type-Identifier: com.apple.mail-note
|
|
||||||
X-Mailer: notemap
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset="utf-8"
|
|
||||||
Content-Transfer-Encoding: quoted-printable
|
|
||||||
Subject: =?utf-8?Q?test.txt?=
|
|
||||||
X-TUID: clxSN23/djqG
|
|
||||||
|
|
||||||
gr=C3=BC=C3=9Fe from notemap
|
|
||||||
|
|
|
@ -1,338 +0,0 @@
|
||||||
Content-Type: multipart/related;
|
|
||||||
type="text/html";
|
|
||||||
boundary=Apple-Mail-89556518-7D3B-49E6-BE3B-A3267CB0D688
|
|
||||||
Content-Transfer-Encoding: 7bit
|
|
||||||
From: sternenseemann <sternenseemann@systemli.org>
|
|
||||||
X-Uniform-Type-Identifier: com.apple.mail-note
|
|
||||||
Mime-Version: 1.0 (iOS/17.6.1 \(21G93\) dataaccessd/1.0)
|
|
||||||
Date: Fri, 22 Nov 2024 12:49:56 +0100
|
|
||||||
X-Mail-Created-Date: Fri, 22 Nov 2024 12:49:52 +0100
|
|
||||||
Subject: example note
|
|
||||||
X-Universally-Unique-Identifier: D81CB91D-C210-46B1-835A-6A7C34DB666B
|
|
||||||
Message-Id: <2CF676DC-A86B-433A-8DB5-53D547D415F3@systemli.org>
|
|
||||||
X-TUID: GhgIofLgzNSd
|
|
||||||
|
|
||||||
|
|
||||||
--Apple-Mail-89556518-7D3B-49E6-BE3B-A3267CB0D688
|
|
||||||
Content-Type: text/html;
|
|
||||||
charset=utf-8
|
|
||||||
Content-Transfer-Encoding: quoted-printable
|
|
||||||
|
|
||||||
<html><head></head><body style=3D"overflow-wrap: break-word; -webkit-nbsp-mo=
|
|
||||||
de: space; line-break: after-white-space;"><div><u>example note</u></div><di=
|
|
||||||
v><br></div><div><b>bold </b><i>italic</i> <i><b>bold & italic=
|
|
||||||
</b></i> <strike>strikethrough</strike></div><div><strike><br></strike>=
|
|
||||||
</div><div><strike><object type=3D"application/x-apple-msg-attachment" data=3D=
|
|
||||||
"cid:C457B697-405B-4A9D-9419-AC33C4A20638@mobilenotes.apple.com"></object></=
|
|
||||||
strike></div><div><strike><br></strike></div><div>It is technically possible=
|
|
||||||
to create arbitrary (?) HTML markup via copy & paste from e.g. a browse=
|
|
||||||
r. Let=E2=80=99s not test that for now.</div></body></html>=
|
|
||||||
|
|
||||||
--Apple-Mail-89556518-7D3B-49E6-BE3B-A3267CB0D688
|
|
||||||
Content-Type: image/jpeg;
|
|
||||||
name=IMG_1637.JPG;
|
|
||||||
x-apple-part-url="C457B697-405B-4A9D-9419-AC33C4A20638@mobilenotes.apple.com"
|
|
||||||
Content-Disposition: inline;
|
|
||||||
filename=IMG_1637.JPG
|
|
||||||
Content-Transfer-Encoding: base64
|
|
||||||
Content-Id: <C457B697-405B-4A9D-9419-AC33C4A20638@mobilenotes.apple.com>
|
|
||||||
|
|
||||||
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
|
|
||||||
uP/Z
|
|
||||||
--Apple-Mail-89556518-7D3B-49E6-BE3B-A3267CB0D688--
|
|
8
third_party/nixpkgs/default.nix
vendored
8
third_party/nixpkgs/default.nix
vendored
|
@ -56,14 +56,8 @@ let
|
||||||
# newer trunk fails somewhere within reqwest, trying to read a mystery file
|
# newer trunk fails somewhere within reqwest, trying to read a mystery file
|
||||||
trunk = stableNixpkgs.trunk;
|
trunk = stableNixpkgs.trunk;
|
||||||
|
|
||||||
# the big lisp package change breaks everything in //3p/lisp, undo it for now.
|
# the big lis package change breaks everything in //3p/lisp, undo it for now.
|
||||||
lispPackages = stableNixpkgs.lispPackages;
|
lispPackages = stableNixpkgs.lispPackages;
|
||||||
|
|
||||||
# mypaint is broken on stable (2024-09-05)
|
|
||||||
mypaint = stableNixpkgs.mypaint;
|
|
||||||
|
|
||||||
# gdmap is broken on unstable (2024-12-31)
|
|
||||||
gdmap = stableNixpkgs.gdmap;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Overlay to expose the nixpkgs commits we are using to other Nix code.
|
# Overlay to expose the nixpkgs commits we are using to other Nix code.
|
||||||
|
|
140
third_party/overlays/patches/cbtemulator-uds.patch
vendored
Normal file
140
third_party/overlays/patches/cbtemulator-uds.patch
vendored
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
commit 1397e10225d8c6fd079a86fccd58fb5d0f4200bc
|
||||||
|
Author: Florian Klink <flokli@flokli.de>
|
||||||
|
Date: Fri Mar 29 10:06:34 2024 +0100
|
||||||
|
|
||||||
|
feat(bigtable/emulator): allow listening on Unix Domain Sockets
|
||||||
|
|
||||||
|
cbtemulator listening on unix domain sockets is much easier than trying
|
||||||
|
to allocate free TCP ports, especially if many cbtemulators are run at
|
||||||
|
the same time in integration tests.
|
||||||
|
|
||||||
|
This adds an additional flag, address, which has priority if it's set,
|
||||||
|
rather than host:port.
|
||||||
|
|
||||||
|
`NewServer` already takes a `laddr string`, so we simply check for it to
|
||||||
|
contain slashes, and if so, listen on unix, rather than TCP.
|
||||||
|
|
||||||
|
diff --git a/bigtable/bttest/inmem.go b/bigtable/bttest/inmem.go
|
||||||
|
index 556abc2a85..33e4bf2667 100644
|
||||||
|
--- a/bttest/inmem.go
|
||||||
|
+++ b/bttest/inmem.go
|
||||||
|
@@ -40,6 +40,7 @@ import (
|
||||||
|
"math"
|
||||||
|
"math/rand"
|
||||||
|
"net"
|
||||||
|
+ "os"
|
||||||
|
"regexp"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
@@ -106,7 +107,15 @@ type server struct {
|
||||||
|
// The Server will be listening for gRPC connections, without TLS,
|
||||||
|
// on the provided address. The resolved address is named by the Addr field.
|
||||||
|
func NewServer(laddr string, opt ...grpc.ServerOption) (*Server, error) {
|
||||||
|
- l, err := net.Listen("tcp", laddr)
|
||||||
|
+ var l net.Listener
|
||||||
|
+ var err error
|
||||||
|
+
|
||||||
|
+ // If the address contains slashes, listen on a unix domain socket instead.
|
||||||
|
+ if strings.Contains(laddr, "/") {
|
||||||
|
+ l, err = net.Listen("unix", laddr)
|
||||||
|
+ } else {
|
||||||
|
+ l, err = net.Listen("tcp", laddr)
|
||||||
|
+ }
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
diff --git a/bigtable/cmd/emulator/cbtemulator.go b/bigtable/cmd/emulator/cbtemulator.go
|
||||||
|
index 144c09ffb1..deaf69b717 100644
|
||||||
|
--- a/cmd/emulator/cbtemulator.go
|
||||||
|
+++ b/cmd/emulator/cbtemulator.go
|
||||||
|
@@ -27,8 +27,9 @@ import (
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
- host = flag.String("host", "localhost", "the address to bind to on the local machine")
|
||||||
|
- port = flag.Int("port", 9000, "the port number to bind to on the local machine")
|
||||||
|
+ host = flag.String("host", "localhost", "the address to bind to on the local machine")
|
||||||
|
+ port = flag.Int("port", 9000, "the port number to bind to on the local machine")
|
||||||
|
+ address = flag.String("address", "", "address:port number or unix socket path to listen on. Has priority over host/port")
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
@@ -42,7 +43,15 @@ func main() {
|
||||||
|
grpc.MaxRecvMsgSize(maxMsgSize),
|
||||||
|
grpc.MaxSendMsgSize(maxMsgSize),
|
||||||
|
}
|
||||||
|
- srv, err := bttest.NewServer(fmt.Sprintf("%s:%d", *host, *port), opts...)
|
||||||
|
+
|
||||||
|
+ var laddr string
|
||||||
|
+ if *address != "" {
|
||||||
|
+ laddr = *address
|
||||||
|
+ } else {
|
||||||
|
+ laddr = fmt.Sprintf("%s:%d", *host, *port)
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ srv, err := bttest.NewServer(laddr, opts...)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("failed to start emulator: %v", err)
|
||||||
|
}
|
||||||
|
commit ce16f843d6c93159d86b3807c6d9ff66e43aac67
|
||||||
|
Author: Florian Klink <flokli@flokli.de>
|
||||||
|
Date: Fri Mar 29 11:53:15 2024 +0100
|
||||||
|
|
||||||
|
feat(bigtable): clean up unix socket on close
|
||||||
|
|
||||||
|
Call srv.Close when receiving an interrupt, and delete the unix domain
|
||||||
|
socket in that function.
|
||||||
|
|
||||||
|
diff --git a/bigtable/bttest/inmem.go b/bigtable/bttest/inmem.go
|
||||||
|
index 33e4bf2667..0dc96024b1 100644
|
||||||
|
--- a/bttest/inmem.go
|
||||||
|
+++ b/bttest/inmem.go
|
||||||
|
@@ -148,6 +148,11 @@ func (s *Server) Close() {
|
||||||
|
|
||||||
|
s.srv.Stop()
|
||||||
|
s.l.Close()
|
||||||
|
+
|
||||||
|
+ // clean up unix socket
|
||||||
|
+ if strings.Contains(s.Addr, "/") {
|
||||||
|
+ _ = os.Remove(s.Addr)
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *server) CreateTable(ctx context.Context, req *btapb.CreateTableRequest) (*btapb.Table, error) {
|
||||||
|
diff --git a/bigtable/cmd/emulator/cbtemulator.go b/bigtable/cmd/emulator/cbtemulator.go
|
||||||
|
index deaf69b717..5a9e8f7a8c 100644
|
||||||
|
--- a/cmd/emulator/cbtemulator.go
|
||||||
|
+++ b/cmd/emulator/cbtemulator.go
|
||||||
|
@@ -18,9 +18,12 @@ cbtemulator launches the in-memory Cloud Bigtable server on the given address.
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
+ "context"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
+ "os"
|
||||||
|
+ "os/signal"
|
||||||
|
|
||||||
|
"cloud.google.com/go/bigtable/bttest"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
@@ -51,11 +54,18 @@ func main() {
|
||||||
|
laddr = fmt.Sprintf("%s:%d", *host, *port)
|
||||||
|
}
|
||||||
|
|
||||||
|
+ ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
|
||||||
|
+ defer stop()
|
||||||
|
+
|
||||||
|
srv, err := bttest.NewServer(laddr, opts...)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("failed to start emulator: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("Cloud Bigtable emulator running on %s\n", srv.Addr)
|
||||||
|
- select {}
|
||||||
|
+ select {
|
||||||
|
+ case <-ctx.Done():
|
||||||
|
+ srv.Close()
|
||||||
|
+ stop()
|
||||||
|
+ }
|
||||||
|
}
|
|
@ -1,109 +0,0 @@
|
||||||
From 96f66ec32e003c6c215aa2a644281289a71dae7d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ilan Joselevich <personal@ilanjoselevich.com>
|
|
||||||
Date: Sun, 4 Aug 2024 02:35:27 +0300
|
|
||||||
Subject: [PATCH] Fix: Use mkDerivation with src instead of runCommand for test
|
|
||||||
derivation
|
|
||||||
|
|
||||||
The problem with using runCommand and recreating the src directory with
|
|
||||||
lndir is that it changes the file types of individual files, they will
|
|
||||||
now be a symlink instead of a regular file. If you have a crate that tests
|
|
||||||
that a file is of regular type then it will fail inside the crate2nix derivation.
|
|
||||||
---
|
|
||||||
templates/nix/crate2nix/default.nix | 81 ++++++++-----------
|
|
||||||
1 file changed, 35 insertions(+), 46 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/templates/nix/crate2nix/default.nix b/templates/nix/crate2nix/default.nix
|
|
||||||
index c53925e..90e10c6 100644
|
|
||||||
--- a/templates/nix/crate2nix/default.nix
|
|
||||||
+++ b/templates/nix/crate2nix/default.nix
|
|
||||||
@@ -120,52 +120,41 @@ rec {
|
|
||||||
testPostRun
|
|
||||||
]);
|
|
||||||
in
|
|
||||||
- pkgs.runCommand "run-tests-${testCrate.name}"
|
|
||||||
- {
|
|
||||||
- inherit testCrateFlags;
|
|
||||||
- buildInputs = testInputs;
|
|
||||||
- } ''
|
|
||||||
- set -e
|
|
||||||
-
|
|
||||||
- export RUST_BACKTRACE=1
|
|
||||||
-
|
|
||||||
- # recreate a file hierarchy as when running tests with cargo
|
|
||||||
-
|
|
||||||
- # the source for test data
|
|
||||||
- # It's necessary to locate the source in $NIX_BUILD_TOP/source/
|
|
||||||
- # instead of $NIX_BUILD_TOP/
|
|
||||||
- # because we compiled those test binaries in the former and not the latter.
|
|
||||||
- # So all paths will expect source tree to be there and not in the build top directly.
|
|
||||||
- # For example: $NIX_BUILD_TOP := /build in general, if you ask yourself.
|
|
||||||
- # NOTE: There could be edge cases if `crate.sourceRoot` does exist but
|
|
||||||
- # it's very hard to reason about them.
|
|
||||||
- # Open a bug if you run into this!
|
|
||||||
- mkdir -p source/
|
|
||||||
- cd source/
|
|
||||||
-
|
|
||||||
- ${pkgs.buildPackages.xorg.lndir}/bin/lndir ${crate.src}
|
|
||||||
-
|
|
||||||
- # build outputs
|
|
||||||
- testRoot=target/debug
|
|
||||||
- mkdir -p $testRoot
|
|
||||||
-
|
|
||||||
- # executables of the crate
|
|
||||||
- # we copy to prevent std::env::current_exe() to resolve to a store location
|
|
||||||
- for i in ${crate}/bin/*; do
|
|
||||||
- cp "$i" "$testRoot"
|
|
||||||
- done
|
|
||||||
- chmod +w -R .
|
|
||||||
-
|
|
||||||
- # test harness executables are suffixed with a hash, like cargo does
|
|
||||||
- # this allows to prevent name collision with the main
|
|
||||||
- # executables of the crate
|
|
||||||
- hash=$(basename $out)
|
|
||||||
- for file in ${drv}/tests/*; do
|
|
||||||
- f=$testRoot/$(basename $file)-$hash
|
|
||||||
- cp $file $f
|
|
||||||
- ${testCommand}
|
|
||||||
- done
|
|
||||||
- '';
|
|
||||||
+ pkgs.stdenvNoCC.mkDerivation {
|
|
||||||
+ name = "run-tests-${testCrate.name}";
|
|
||||||
+
|
|
||||||
+ inherit (crate) src;
|
|
||||||
+
|
|
||||||
+ inherit testCrateFlags;
|
|
||||||
+
|
|
||||||
+ buildInputs = testInputs;
|
|
||||||
+
|
|
||||||
+ buildPhase = ''
|
|
||||||
+ set -e
|
|
||||||
+ export RUST_BACKTRACE=1
|
|
||||||
+
|
|
||||||
+ # build outputs
|
|
||||||
+ testRoot=target/debug
|
|
||||||
+ mkdir -p $testRoot
|
|
||||||
+
|
|
||||||
+ # executables of the crate
|
|
||||||
+ # we copy to prevent std::env::current_exe() to resolve to a store location
|
|
||||||
+ for i in ${crate}/bin/*; do
|
|
||||||
+ cp "$i" "$testRoot"
|
|
||||||
+ done
|
|
||||||
+ chmod +w -R .
|
|
||||||
+
|
|
||||||
+ # test harness executables are suffixed with a hash, like cargo does
|
|
||||||
+ # this allows to prevent name collision with the main
|
|
||||||
+ # executables of the crate
|
|
||||||
+ hash=$(basename $out)
|
|
||||||
+ for file in ${drv}/tests/*; do
|
|
||||||
+ f=$testRoot/$(basename $file)-$hash
|
|
||||||
+ cp $file $f
|
|
||||||
+ ${testCommand}
|
|
||||||
+ done
|
|
||||||
+ '';
|
|
||||||
+ };
|
|
||||||
in
|
|
||||||
pkgs.runCommand "${crate.name}-linked"
|
|
||||||
{
|
|
||||||
--
|
|
||||||
2.44.0
|
|
||||||
|
|
62
third_party/overlays/tvl.nix
vendored
62
third_party/overlays/tvl.nix
vendored
|
@ -16,17 +16,11 @@ depot.nix.readTree.drvTargets {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
nix_latest_stable = super.nix.override ({
|
nix_latest = super.nix.override ({
|
||||||
# flaky tests, long painful build, see https://github.com/NixOS/nixpkgs/pull/266443
|
# flaky tests, long painful build, see https://github.com/NixOS/nixpkgs/pull/266443
|
||||||
withAWS = false;
|
withAWS = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
# No longer builds with Nix 2.3 after
|
|
||||||
# https://github.com/nixos/nixpkgs/commit/5f9d2d95721cdf20ace744f2db75ad70a7aedd3a
|
|
||||||
nixos-option = super.nixos-option.override {
|
|
||||||
nix = self.nix_latest_stable;
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager = super.home-manager.overrideAttrs (_: {
|
home-manager = super.home-manager.overrideAttrs (_: {
|
||||||
src = depot.third_party.sources.home-manager;
|
src = depot.third_party.sources.home-manager;
|
||||||
version = "git-"
|
version = "git-"
|
||||||
|
@ -85,6 +79,10 @@ depot.nix.readTree.drvTargets {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
# nix-serve does not work with nix 2.4
|
||||||
|
# https://github.com/edolstra/nix-serve/issues/28
|
||||||
|
nix-serve = super.nix-serve.override { nix = self.nix_2_3; };
|
||||||
|
|
||||||
# Avoid builds of mkShell derivations in CI.
|
# Avoid builds of mkShell derivations in CI.
|
||||||
mkShell = super.lib.makeOverridable (args: (super.mkShell args).overrideAttrs (_: {
|
mkShell = super.lib.makeOverridable (args: (super.mkShell args).overrideAttrs (_: {
|
||||||
passthru = {
|
passthru = {
|
||||||
|
@ -92,10 +90,15 @@ depot.nix.readTree.drvTargets {
|
||||||
};
|
};
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
# https://github.com/googleapis/google-cloud-go/pull/9665
|
||||||
|
cbtemulator = super.cbtemulator.overrideAttrs (old: {
|
||||||
|
patches = old.patches or [ ] ++ [
|
||||||
|
./patches/cbtemulator-uds.patch
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
crate2nix = super.crate2nix.overrideAttrs (old: {
|
crate2nix = super.crate2nix.overrideAttrs (old: {
|
||||||
patches = old.patches or [ ] ++ [
|
patches = old.patches or [ ] ++ [
|
||||||
# TODO(Kranzes): Remove in next release.
|
|
||||||
./patches/crate2nix-0001-Fix-Use-mkDerivation-with-src-instead-of-runCommand.patch
|
|
||||||
# https://github.com/nix-community/crate2nix/pull/301
|
# https://github.com/nix-community/crate2nix/pull/301
|
||||||
./patches/crate2nix-tests-debug.patch
|
./patches/crate2nix-tests-debug.patch
|
||||||
];
|
];
|
||||||
|
@ -109,33 +112,6 @@ depot.nix.readTree.drvTargets {
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
# https://gcc.gnu.org/gcc-14/porting_to.html#warnings-as-errors
|
|
||||||
thttpd = super.thttpd.overrideAttrs (oldAttrs: {
|
|
||||||
NIX_CFLAGS_COMPILE = oldAttrs.NIX_CFLAGS_COMPILE or [ ] ++ [
|
|
||||||
"-Wno-error=implicit-int"
|
|
||||||
"-Wno-error=implicit-function-declaration"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
# https://github.com/NixOS/nixpkgs/pull/329415/files
|
|
||||||
grpc-health-check = super.rustPlatform.buildRustPackage {
|
|
||||||
pname = "grpc-health-check";
|
|
||||||
version = "unstable-2022-08-19";
|
|
||||||
|
|
||||||
src = super.fetchFromGitHub {
|
|
||||||
owner = "paypizza";
|
|
||||||
repo = "grpc-health-check";
|
|
||||||
rev = "f61bb5e10beadc5ed53144cc540d66e19fc510bd";
|
|
||||||
hash = "sha256-nKut9c1HHIacdRcmvlXe0GrtkgCWN6sxJ4ImO0CIDdo=";
|
|
||||||
};
|
|
||||||
|
|
||||||
cargoHash = "sha256-lz+815iE+oXBQ3PfqBO0QBpZY6x1SNR7OU7BjkRszzI=";
|
|
||||||
|
|
||||||
nativeBuildInputs = [ super.protobuf ];
|
|
||||||
# tests fail
|
|
||||||
doCheck = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Imports a patch that fixes usage of this package on versions
|
# Imports a patch that fixes usage of this package on versions
|
||||||
# >=1.9. The patch has been proposed upstream, but so far with no
|
# >=1.9. The patch has been proposed upstream, but so far with no
|
||||||
# reactions from the maintainer:
|
# reactions from the maintainer:
|
||||||
|
@ -145,11 +121,6 @@ depot.nix.readTree.drvTargets {
|
||||||
patches = (old.patches or [ ]) ++ [ ./patches/tpm2-pkcs11-190-dbupgrade.patch ];
|
patches = (old.patches or [ ]) ++ [ ./patches/tpm2-pkcs11-190-dbupgrade.patch ];
|
||||||
});
|
});
|
||||||
|
|
||||||
# Dependency isn't supported by Python 3.12
|
|
||||||
html5validator = super.html5validator.override {
|
|
||||||
python3 = self.python311;
|
|
||||||
};
|
|
||||||
|
|
||||||
# macFUSE bump containing fix for https://github.com/osxfuse/osxfuse/issues/974
|
# macFUSE bump containing fix for https://github.com/osxfuse/osxfuse/issues/974
|
||||||
# https://github.com/NixOS/nixpkgs/pull/320197
|
# https://github.com/NixOS/nixpkgs/pull/320197
|
||||||
fuse =
|
fuse =
|
||||||
|
@ -163,9 +134,8 @@ depot.nix.readTree.drvTargets {
|
||||||
};
|
};
|
||||||
}) else super.fuse;
|
}) else super.fuse;
|
||||||
|
|
||||||
# somebody renamed 'utillinux' upstream, but didn't rename all use-cases,
|
treefmt = super.treefmt.overrideAttrs (old: {
|
||||||
# leading to some packages being broken.
|
# https://github.com/numtide/treefmt/pull/328
|
||||||
#
|
patches = old.patches or [ ] ++ [ ./patches/treefmt-fix-no-cache.patch ];
|
||||||
# temporarily restore the old name to make things work again.
|
});
|
||||||
utillinux = self.util-linux;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,78 +0,0 @@
|
||||||
From cc4718cbea1bd70de21a2be515a944802246ffc7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Vincent Ambo <mail@tazj.in>
|
|
||||||
Date: Sun, 15 Sep 2024 03:08:28 +0300
|
|
||||||
Subject: [PATCH] remove dependency on plausible
|
|
||||||
|
|
||||||
We don't need spyware, thanks.
|
|
||||||
---
|
|
||||||
package-lock.json | 9 ---------
|
|
||||||
package.json | 1 -
|
|
||||||
src/App.svelte | 8 --------
|
|
||||||
3 files changed, 18 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/package-lock.json b/package-lock.json
|
|
||||||
index d52de6c0..d96e342f 100644
|
|
||||||
--- a/package-lock.json
|
|
||||||
+++ b/package-lock.json
|
|
||||||
@@ -29,7 +29,6 @@
|
|
||||||
"marked-katex-extension": "^5.1.1",
|
|
||||||
"marked-linkify-it": "^3.1.11",
|
|
||||||
"md5": "^2.3.0",
|
|
||||||
- "plausible-tracker": "^0.3.9",
|
|
||||||
"svelte": "^4.2.19",
|
|
||||||
"twemoji": "^14.0.2",
|
|
||||||
"zod": "^3.23.8"
|
|
||||||
@@ -3697,14 +3696,6 @@
|
|
||||||
"url": "https://github.com/sponsors/jonschlinkert"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
- "node_modules/plausible-tracker": {
|
|
||||||
- "version": "0.3.9",
|
|
||||||
- "resolved": "https://registry.npmjs.org/plausible-tracker/-/plausible-tracker-0.3.9.tgz",
|
|
||||||
- "integrity": "sha512-hMhneYm3GCPyQon88SZrVJx+LlqhM1kZFQbuAgXPoh/Az2YvO1B6bitT9qlhpiTdJlsT5lsr3gPmzoVjb5CDXA==",
|
|
||||||
- "engines": {
|
|
||||||
- "node": ">=10"
|
|
||||||
- }
|
|
||||||
- },
|
|
||||||
"node_modules/playwright": {
|
|
||||||
"version": "1.46.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.46.1.tgz",
|
|
||||||
diff --git a/package.json b/package.json
|
|
||||||
index 6d569ad9..61e8d892 100644
|
|
||||||
--- a/package.json
|
|
||||||
+++ b/package.json
|
|
||||||
@@ -73,7 +73,6 @@
|
|
||||||
"marked-katex-extension": "^5.1.1",
|
|
||||||
"marked-linkify-it": "^3.1.11",
|
|
||||||
"md5": "^2.3.0",
|
|
||||||
- "plausible-tracker": "^0.3.9",
|
|
||||||
"svelte": "^4.2.19",
|
|
||||||
"twemoji": "^14.0.2",
|
|
||||||
"zod": "^3.23.8"
|
|
||||||
diff --git a/src/App.svelte b/src/App.svelte
|
|
||||||
index 8161c390..4281ba61 100644
|
|
||||||
--- a/src/App.svelte
|
|
||||||
+++ b/src/App.svelte
|
|
||||||
@@ -1,6 +1,4 @@
|
|
||||||
<script lang="ts">
|
|
||||||
- import Plausible from "plausible-tracker";
|
|
||||||
-
|
|
||||||
import * as router from "@app/lib/router";
|
|
||||||
import { unreachable } from "@app/lib/utils";
|
|
||||||
|
|
||||||
@@ -28,12 +26,6 @@
|
|
||||||
|
|
||||||
void router.loadFromLocation();
|
|
||||||
|
|
||||||
- if (import.meta.env.PROD) {
|
|
||||||
- const plausible = Plausible({ domain: "app.radicle.xyz" });
|
|
||||||
-
|
|
||||||
- plausible.enableAutoPageviews();
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
$: document.documentElement.setAttribute("data-codefont", $codeFont);
|
|
||||||
$: document.documentElement.setAttribute("data-theme", $theme);
|
|
||||||
</script>
|
|
||||||
--
|
|
||||||
2.46.0
|
|
||||||
|
|
66
third_party/radicle-explorer/default.nix
vendored
66
third_party/radicle-explorer/default.nix
vendored
|
@ -1,66 +0,0 @@
|
||||||
# radicle-explorer is the web UI for Radicle.
|
|
||||||
#
|
|
||||||
# They have an upstream Nix derivation, but it only works with experimental
|
|
||||||
# features Nix and is quite messy, so this is a copy of the relevant parts.
|
|
||||||
{ lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
twemoji-assets = pkgs.fetchFromGitHub {
|
|
||||||
owner = "twitter";
|
|
||||||
repo = "twemoji";
|
|
||||||
rev = "v14.0.2";
|
|
||||||
hash = "sha256-YoOnZ5uVukzi/6bLi22Y8U5TpplPzB7ji42l+/ys5xI=";
|
|
||||||
};
|
|
||||||
|
|
||||||
httpdSrc = pkgs.radicle-httpd.src;
|
|
||||||
in
|
|
||||||
lib.fix (self: pkgs.buildNpmPackage rec {
|
|
||||||
pname = "radicle-explorer";
|
|
||||||
version = (builtins.fromJSON (builtins.readFile "${src}/package.json")).version;
|
|
||||||
|
|
||||||
# source should be synced with the httpd, which is already in nixpkgs
|
|
||||||
src = pkgs.fetchgit {
|
|
||||||
inherit (httpdSrc) url rev;
|
|
||||||
hash = "sha256:09m13238h6j7g02r6332ihgyyzbjx90pgz14rz29pgv7936h6il8";
|
|
||||||
};
|
|
||||||
|
|
||||||
# This might change during nixpkgs bumps and will need updating. Need to fix
|
|
||||||
# upstream so that there is a normal, callable derivation.
|
|
||||||
npmDepsHash = "sha256:1hbrzfjkfc0q8qk03yi6qb9zqm57h7hnkn7fl0yxkrzbrljaljaz";
|
|
||||||
|
|
||||||
patches = [
|
|
||||||
./0001-remove-dependency-on-plausible.patch
|
|
||||||
];
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
patchShebangs --build ./scripts
|
|
||||||
mkdir -p "public/twemoji"
|
|
||||||
cp -t public/twemoji -r -- ${twemoji-assets}/assets/svg/*
|
|
||||||
: >scripts/install-twemoji-assets
|
|
||||||
'';
|
|
||||||
dontConfigure = true;
|
|
||||||
doCheck = false;
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
mkdir -p "$out"
|
|
||||||
cp -r -t "$out" build/*
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Override the build-time configuration with other preferred seeds which are
|
|
||||||
# displayed on the landing page.
|
|
||||||
passthru.withPreferredSeeds = seeds:
|
|
||||||
let
|
|
||||||
originalConfig = builtins.fromJSON (builtins.readFile "${src}/config/default.json");
|
|
||||||
config = originalConfig // {
|
|
||||||
preferredSeeds = seeds;
|
|
||||||
};
|
|
||||||
newConfig = pkgs.writeText "local.json" (builtins.toJSON config);
|
|
||||||
in
|
|
||||||
self.overrideAttrs (_: {
|
|
||||||
preBuild = ''
|
|
||||||
cp ${newConfig} config/local.json
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
})
|
|
126
third_party/rust-crates/default.nix
vendored
126
third_party/rust-crates/default.nix
vendored
|
@ -292,4 +292,130 @@ depot.nix.readTree.drvTargets rec{
|
||||||
sha256 = "1kd047p8jv6mhmfzddjvfa2nwkfrb3l1wml6lfm51n1cr06cc9lz";
|
sha256 = "1kd047p8jv6mhmfzddjvfa2nwkfrb3l1wml6lfm51n1cr06cc9lz";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
libz-sys = buildRustCrate {
|
||||||
|
pname = "libz-sys";
|
||||||
|
version = "1.1.2";
|
||||||
|
sha256 = "1y7v6bkwr4b6yaf951p1ns7mx47b29ziwdd5wziaic14gs1gwq30";
|
||||||
|
buildDependencies = [
|
||||||
|
cc
|
||||||
|
pkg-config
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
libgit2-sys = buildRustCrate {
|
||||||
|
pname = "libgit2-sys";
|
||||||
|
version = "0.16.2+1.7.2";
|
||||||
|
sha256 = "0bs446idbmg8s13jvb0ck6qmrskcdn2mp3d4mn9ggxbmiw4ryd3g";
|
||||||
|
dependencies = [
|
||||||
|
libc
|
||||||
|
libz-sys
|
||||||
|
];
|
||||||
|
libPath = "lib.rs";
|
||||||
|
libName = "libgit2_sys";
|
||||||
|
# TODO: this should be available via `pkgs.defaultCrateOverrides`,
|
||||||
|
# I thought that was included by default?
|
||||||
|
nativeBuildInputs = [ pkg-config ];
|
||||||
|
buildInputs = [ pkgs.zlib pkgs.libgit2 ];
|
||||||
|
buildDependencies = [
|
||||||
|
cc
|
||||||
|
pkg-config
|
||||||
|
];
|
||||||
|
env.LIBGIT2_NO_VENDOR = "1";
|
||||||
|
};
|
||||||
|
|
||||||
|
matches = buildRustCrate {
|
||||||
|
pname = "matches";
|
||||||
|
version = "0.1.8";
|
||||||
|
sha256 = "03hl636fg6xggy0a26200xs74amk3k9n0908rga2szn68agyz3cv";
|
||||||
|
libPath = "lib.rs";
|
||||||
|
};
|
||||||
|
|
||||||
|
percent-encoding = buildRustCrate {
|
||||||
|
pname = "percent-encoding";
|
||||||
|
version = "2.1.0";
|
||||||
|
sha256 = "0i838f2nr81585ckmfymf8l1x1vdmx6n8xqvli0lgcy60yl2axy3";
|
||||||
|
libPath = "lib.rs";
|
||||||
|
};
|
||||||
|
|
||||||
|
form_urlencoded = buildRustCrate {
|
||||||
|
pname = "form_urlencoded";
|
||||||
|
version = "1.0.1";
|
||||||
|
sha256 = "0rhv2hfrzk2smdh27walkm66zlvccnnwrbd47fmf8jh6m420dhj8";
|
||||||
|
dependencies = [
|
||||||
|
matches
|
||||||
|
percent-encoding
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
tinyvec_macros = buildRustCrate {
|
||||||
|
pname = "tinyvec_macros";
|
||||||
|
version = "0.1.0";
|
||||||
|
sha256 = "0aim73hyq5g8b2hs9gjq2sv0xm4xzfbwp5fdyg1frljqzkapq682";
|
||||||
|
};
|
||||||
|
|
||||||
|
tinyvec = buildRustCrate {
|
||||||
|
pname = "tinyvec";
|
||||||
|
version = "1.2.0";
|
||||||
|
sha256 = "1c95nma20kiyrjwfsk7hzd5ir6yy4bm63fmfbfb4dm9ahnlvdp3y";
|
||||||
|
features = [ "alloc" ];
|
||||||
|
dependencies = [
|
||||||
|
tinyvec_macros
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
unicode-normalization = buildRustCrate {
|
||||||
|
pname = "unicode-normalization";
|
||||||
|
version = "0.1.17";
|
||||||
|
sha256 = "0w4s0avzlf7pzcclhhih93aap613398sshm6jrxcwq0f9lhis11c";
|
||||||
|
dependencies = [
|
||||||
|
tinyvec
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
unicode-bidi = buildRustCrate {
|
||||||
|
pname = "unicode-bidi";
|
||||||
|
version = "0.3.5";
|
||||||
|
sha256 = "193jzlxj1dfcms2381lyd45zh4ywlicj9lzcfpid1zbkmfarymkz";
|
||||||
|
dependencies = [
|
||||||
|
matches
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
idna = buildRustCrate {
|
||||||
|
pname = "idna";
|
||||||
|
version = "0.2.3";
|
||||||
|
sha256 = "0hwypd0fpym9lmd4bbqpwyr5lhrlvmvzhi1vy9asc5wxwkzrh299";
|
||||||
|
dependencies = [
|
||||||
|
matches
|
||||||
|
unicode-normalization
|
||||||
|
unicode-bidi
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
url = buildRustCrate {
|
||||||
|
pname = "url";
|
||||||
|
version = "2.2.1";
|
||||||
|
sha256 = "1ci1djafh83qhpzbmxnr9w5gcrjs3ghf8rrxdy4vklqyji6fvn5v";
|
||||||
|
dependencies = [
|
||||||
|
form_urlencoded
|
||||||
|
idna
|
||||||
|
matches
|
||||||
|
percent-encoding
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
git2 = buildRustCrate {
|
||||||
|
pname = "git2";
|
||||||
|
edition = "2018";
|
||||||
|
version = "0.18.1";
|
||||||
|
sha256 = "1d1wm8cn37svyxgvzfapwilkkc9d2x7fcrgciwn8b2pv9aqz102k";
|
||||||
|
dependencies = [
|
||||||
|
bitflags
|
||||||
|
libc
|
||||||
|
libgit2-sys
|
||||||
|
log
|
||||||
|
url
|
||||||
|
];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
66
third_party/sources/sources.json
vendored
66
third_party/sources/sources.json
vendored
|
@ -5,22 +5,10 @@
|
||||||
"homepage": "https://matrix.to/#/#agenix:nixos.org",
|
"homepage": "https://matrix.to/#/#agenix:nixos.org",
|
||||||
"owner": "ryantm",
|
"owner": "ryantm",
|
||||||
"repo": "agenix",
|
"repo": "agenix",
|
||||||
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
|
"rev": "c2fc0762bbe8feb06a2e59a364fa81b3a57671c9",
|
||||||
"sha256": "1x8nd8hvsq6mvzig122vprwigsr3z2skanig65haqswn7z7amsvg",
|
"sha256": "1lpkwinlax40b7xgzspbkm9rsi4a1x48hxhixnni4irxxwnav0ah",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/ryantm/agenix/archive/f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41.tar.gz",
|
"url": "https://github.com/ryantm/agenix/archive/c2fc0762bbe8feb06a2e59a364fa81b3a57671c9.tar.gz",
|
||||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
|
||||||
},
|
|
||||||
"gitignore.nix": {
|
|
||||||
"branch": "master",
|
|
||||||
"description": "Nix functions for filtering local git sources",
|
|
||||||
"homepage": "",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "gitignore.nix",
|
|
||||||
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
|
||||||
"sha256": "02wxkdpbhlm3yk5mhkhsp3kwakc16xpmsf2baw57nz1dg459qv8w",
|
|
||||||
"type": "tarball",
|
|
||||||
"url": "https://github.com/hercules-ci/gitignore.nix/archive/637db329424fd7e46cf4185293b9cc8c88c95394.tar.gz",
|
|
||||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||||
},
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
|
@ -29,10 +17,10 @@
|
||||||
"homepage": "https://nix-community.github.io/home-manager/",
|
"homepage": "https://nix-community.github.io/home-manager/",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "10e99c43cdf4a0713b4e81d90691d22c6a58bdf2",
|
"rev": "a7117efb3725e6197dd95424136f79147aa35e5b",
|
||||||
"sha256": "1vklmr0vzhplcjcqg19v66c1swg3xcgw96ry90dyd4hl2cb9j80b",
|
"sha256": "02q3ck1hjs8xzdhfikqxrnsfs9vh4p7rmdha3vbp6nkkdbdvhgg7",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/nix-community/home-manager/archive/10e99c43cdf4a0713b4e81d90691d22c6a58bdf2.tar.gz",
|
"url": "https://github.com/nix-community/home-manager/archive/a7117efb3725e6197dd95424136f79147aa35e5b.tar.gz",
|
||||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||||
},
|
},
|
||||||
"impermanence": {
|
"impermanence": {
|
||||||
|
@ -41,10 +29,10 @@
|
||||||
"homepage": "",
|
"homepage": "",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "impermanence",
|
"repo": "impermanence",
|
||||||
"rev": "d000479f4f41390ff7cf9204979660ad5dd16176",
|
"rev": "a33ef102a02ce77d3e39c25197664b7a636f9c30",
|
||||||
"sha256": "1xj0kw8w1xv4g1k64k9mak6j8c044rrrkz7ik22z3qsayaqiylm2",
|
"sha256": "1mig6ns8l5iynsm6pfbnx2b9hmr592s1kqbw6gq1n25czdlcniam",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/nix-community/impermanence/archive/d000479f4f41390ff7cf9204979660ad5dd16176.tar.gz",
|
"url": "https://github.com/nix-community/impermanence/archive/a33ef102a02ce77d3e39c25197664b7a636f9c30.tar.gz",
|
||||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||||
},
|
},
|
||||||
"naersk": {
|
"naersk": {
|
||||||
|
@ -53,10 +41,10 @@
|
||||||
"homepage": "",
|
"homepage": "",
|
||||||
"owner": "nmattia",
|
"owner": "nmattia",
|
||||||
"repo": "naersk",
|
"repo": "naersk",
|
||||||
"rev": "378614f37a6bee5a3f2ef4f825a73d948d3ae921",
|
"rev": "fa19d8c135e776dc97f4dcca08656a0eeb28d5c0",
|
||||||
"sha256": "088pbn3jcckbhzg7kr9bhii9vgrnr6y2mrqnw30bk4jhbjkrk1bb",
|
"sha256": "1mif058gcbw5d5yixsmzalqlr0h9m9mmbsgv8v4r2mmsbw83k2x0",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/nmattia/naersk/archive/378614f37a6bee5a3f2ef4f825a73d948d3ae921.tar.gz",
|
"url": "https://github.com/nmattia/naersk/archive/fa19d8c135e776dc97f4dcca08656a0eeb28d5c0.tar.gz",
|
||||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||||
},
|
},
|
||||||
"napalm": {
|
"napalm": {
|
||||||
|
@ -65,10 +53,10 @@
|
||||||
"homepage": "",
|
"homepage": "",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "napalm",
|
"repo": "napalm",
|
||||||
"rev": "e1babff744cd278b56abe8478008b4a9e23036cf",
|
"rev": "edcb26c266ca37c9521f6a97f33234633cbec186",
|
||||||
"sha256": "04h62p4hxw7fhclki7hcn739hhig3rh9q4njp24j7bm0dk2kj8h6",
|
"sha256": "0ai1ax380nnpz0mbgbc5vdzafyjilcmdj7kgv087x2vagpprb4yy",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/nix-community/napalm/archive/e1babff744cd278b56abe8478008b4a9e23036cf.tar.gz",
|
"url": "https://github.com/nix-community/napalm/archive/edcb26c266ca37c9521f6a97f33234633cbec186.tar.gz",
|
||||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
|
@ -77,10 +65,10 @@
|
||||||
"homepage": "",
|
"homepage": "",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "88195a94f390381c6afcdaa933c2f6ff93959cb4",
|
"rev": "7f993cdf26ccef564eabf31fdb40d140821e12bc",
|
||||||
"sha256": "1fs25csg0lq3v34jdzxr2qdvnyvylimmfh0qxlf39h4j1hclvbyj",
|
"sha256": "0dypbvibfdmv14rqlamf451625fw2fyk11prw9bbywi0q2i313d5",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/NixOS/nixpkgs/archive/88195a94f390381c6afcdaa933c2f6ff93959cb4.tar.gz",
|
"url": "https://github.com/NixOS/nixpkgs/archive/7f993cdf26ccef564eabf31fdb40d140821e12bc.tar.gz",
|
||||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||||
},
|
},
|
||||||
"nixpkgs-stable": {
|
"nixpkgs-stable": {
|
||||||
|
@ -89,10 +77,10 @@
|
||||||
"homepage": "",
|
"homepage": "",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5",
|
"rev": "a2e1d0414259a144ebdc048408a807e69e0565af",
|
||||||
"sha256": "1f5d2g1p6nfwycpmrnnmc2xmcszp804adp16knjvdkj8nz36y1fg",
|
"sha256": "1jv90bz3s7j294fhpb29k735fg3xfs9z848szicqarpbz7wfg03g",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/NixOS/nixpkgs/archive/205fd4226592cc83fd4c0885a3e4c9c400efabb5.tar.gz",
|
"url": "https://github.com/NixOS/nixpkgs/archive/a2e1d0414259a144ebdc048408a807e69e0565af.tar.gz",
|
||||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||||
},
|
},
|
||||||
"rust-overlay": {
|
"rust-overlay": {
|
||||||
|
@ -101,10 +89,10 @@
|
||||||
"homepage": "",
|
"homepage": "",
|
||||||
"owner": "oxalica",
|
"owner": "oxalica",
|
||||||
"repo": "rust-overlay",
|
"repo": "rust-overlay",
|
||||||
"rev": "d199142e84bfaae476ffb4e09a70879d7918784d",
|
"rev": "6dc3e45fe4aee36efeed24d64fc68b1f989d5465",
|
||||||
"sha256": "1bhapkiiii984m86cp1xkr8jh0i86vmbl5z3b9nzylfg0y7fij5f",
|
"sha256": "0vqgkzbfdj920lbm1dy8kylrv2gk4ard38lb3i20xvp2mp1d39n2",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/oxalica/rust-overlay/archive/d199142e84bfaae476ffb4e09a70879d7918784d.tar.gz",
|
"url": "https://github.com/oxalica/rust-overlay/archive/6dc3e45fe4aee36efeed24d64fc68b1f989d5465.tar.gz",
|
||||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||||
},
|
},
|
||||||
"rustsec-advisory-db": {
|
"rustsec-advisory-db": {
|
||||||
|
@ -113,10 +101,10 @@
|
||||||
"homepage": "https://rustsec.org",
|
"homepage": "https://rustsec.org",
|
||||||
"owner": "RustSec",
|
"owner": "RustSec",
|
||||||
"repo": "advisory-db",
|
"repo": "advisory-db",
|
||||||
"rev": "3c6d3186ab06737d1defd2b5ae556d0ecd161603",
|
"rev": "af76d4423761499f954411bb3071dcc72e6b0450",
|
||||||
"sha256": "05cg2fhjqv4xly1g5a8dm0bc08yzzqn2is5s7c7kczib3j4gpiq5",
|
"sha256": "167qxr66j638km3z7zk2drjdr4bgqz77hr35vkwdp0lbafmd6y1c",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/RustSec/advisory-db/archive/3c6d3186ab06737d1defd2b5ae556d0ecd161603.tar.gz",
|
"url": "https://github.com/RustSec/advisory-db/archive/af76d4423761499f954411bb3071dcc72e6b0450.tar.gz",
|
||||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
598
tools/cheddar/Cargo.lock
generated
598
tools/cheddar/Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -8,7 +8,6 @@ depot.nix.lazy-deps {
|
||||||
depotfmt.attr = "tools.depotfmt";
|
depotfmt.attr = "tools.depotfmt";
|
||||||
fetch-depot-inbox.attr = "tools.fetch-depot-inbox";
|
fetch-depot-inbox.attr = "tools.fetch-depot-inbox";
|
||||||
git-r.attr = "tools.git-r";
|
git-r.attr = "tools.git-r";
|
||||||
git-review.attr = "third_party.nixpkgs.git-review";
|
|
||||||
gerrit-update.attr = "tools.gerrit-update";
|
gerrit-update.attr = "tools.gerrit-update";
|
||||||
gerrit.attr = "tools.gerrit-cli";
|
gerrit.attr = "tools.gerrit-cli";
|
||||||
hash-password.attr = "tools.hash-password";
|
hash-password.attr = "tools.hash-password";
|
||||||
|
|
|
@ -1,14 +1,24 @@
|
||||||
# Builds treefmt for depot, with a hardcoded configuration that
|
# Builds treefmt for depot, with a hardcoded configuration that
|
||||||
# includes the right paths to formatters.
|
# includes the right paths to formatters.
|
||||||
{ pkgs, ... }:
|
{ depot, pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
# terraform fmt can't handle multiple paths at once, but treefmt
|
||||||
|
# expects this
|
||||||
|
terraformat = pkgs.writeShellScript "terraformat" ''
|
||||||
|
echo "$@" | xargs -n1 ${pkgs.terraform}/bin/terraform fmt
|
||||||
|
'';
|
||||||
|
|
||||||
config = pkgs.writeText "depot-treefmt-config" ''
|
config = pkgs.writeText "depot-treefmt-config" ''
|
||||||
[formatter.go]
|
[formatter.go]
|
||||||
command = "${pkgs.go}/bin/gofmt"
|
command = "${depot.nix.buildGo.go}/bin/gofmt"
|
||||||
options = [ "-w" ]
|
options = [ "-w" ]
|
||||||
includes = ["*.go"]
|
includes = ["*.go"]
|
||||||
|
|
||||||
|
[formatter.tf]
|
||||||
|
command = "${terraformat}"
|
||||||
|
includes = [ "*.tf" ]
|
||||||
|
|
||||||
[formatter.nix]
|
[formatter.nix]
|
||||||
command = "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt"
|
command = "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt"
|
||||||
includes = [ "*.nix" ]
|
includes = [ "*.nix" ]
|
||||||
|
@ -18,10 +28,8 @@ let
|
||||||
|
|
||||||
[formatter.rust]
|
[formatter.rust]
|
||||||
command = "${pkgs.rustfmt}/bin/rustfmt"
|
command = "${pkgs.rustfmt}/bin/rustfmt"
|
||||||
options = ["--edition", "2021"]
|
|
||||||
includes = [ "*.rs" ]
|
includes = [ "*.rs" ]
|
||||||
excludes = [
|
excludes = [
|
||||||
"users/emery/*",
|
|
||||||
"users/tazjin/*",
|
"users/tazjin/*",
|
||||||
]
|
]
|
||||||
'';
|
'';
|
||||||
|
@ -45,12 +53,10 @@ let
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
depotfmt.overrideAttrs (_: {
|
depotfmt.overrideAttrs (_: {
|
||||||
passthru = {
|
passthru.config = config;
|
||||||
inherit config check;
|
passthru.meta.ci.extraSteps.check = {
|
||||||
meta.ci.extraSteps.check = {
|
label = "depot formatting check";
|
||||||
label = "depot formatting check";
|
command = check;
|
||||||
command = check;
|
alwaysRun = true;
|
||||||
alwaysRun = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
{ depot, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
em = depot.tools.eaglemode;
|
|
||||||
in
|
|
||||||
em.mkCommand {
|
|
||||||
name = "9 B";
|
|
||||||
hotkey = "Ctrl+E";
|
|
||||||
icon = "${./plan9.tga}";
|
|
||||||
|
|
||||||
description = ''
|
|
||||||
Plumb target to Sam or Acme
|
|
||||||
'';
|
|
||||||
|
|
||||||
code = ''
|
|
||||||
ErrorIfNotSingleTarget();
|
|
||||||
|
|
||||||
my @tgt=GetTgt();
|
|
||||||
my $dir=$tgt[0];
|
|
||||||
|
|
||||||
ExecOrError('${pkgs.plan9port}/bin/9', 'B', $dir);
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
{ depot, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
em = depot.tools.eaglemode;
|
|
||||||
icon = em.mkTGA "emacs" "${pkgs.emacs}/share/icons/hicolor/128x128/apps/emacs.png";
|
|
||||||
in
|
|
||||||
em.mkCommand {
|
|
||||||
name = "Emacsclient";
|
|
||||||
hotkey = "Ctrl+E";
|
|
||||||
icon = "${icon}";
|
|
||||||
|
|
||||||
description = ''
|
|
||||||
Open target in Emacsclient.
|
|
||||||
|
|
||||||
Emacs server must be running already for this to have any effect.
|
|
||||||
'';
|
|
||||||
|
|
||||||
code = ''
|
|
||||||
ErrorIfNotSingleTarget();
|
|
||||||
|
|
||||||
my @tgt=GetTgt();
|
|
||||||
my $dir=$tgt[0];
|
|
||||||
|
|
||||||
ExecOrError('${pkgs.emacs}/bin/emacsclient', '-n', $dir);
|
|
||||||
'';
|
|
||||||
}
|
|
Binary file not shown.
|
@ -1,146 +0,0 @@
|
||||||
# Helper functions for extending Eagle Mode with useful stuff.
|
|
||||||
#
|
|
||||||
# Eagle Mode's customisation usually expects people to copy the entire
|
|
||||||
# configuration into their user folder, which we can automate fairly easily
|
|
||||||
# using Nix, letting users choose whether to keep upstream config or not.
|
|
||||||
{ depot, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
mkDesc = d: lib.concatMapStringsSep "\n"
|
|
||||||
(x: "# Descr =${x}")
|
|
||||||
(builtins.filter (s: s != "") (lib.splitString "\n" d));
|
|
||||||
|
|
||||||
configWrapper = pkgs.runCommand "eaglemode-config-wrapper" { } ''
|
|
||||||
cp ${./wrapper.go} wrapper.go
|
|
||||||
export HOME=$PWD
|
|
||||||
${pkgs.go}/bin/go build wrapper.go
|
|
||||||
install -Dm755 wrapper $out/bin/wrapper
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
rec {
|
|
||||||
# mkCommand creates an Eagle Mode command for the file browser.
|
|
||||||
#
|
|
||||||
# Commands are basically little Perl scripts with a command standard library
|
|
||||||
# available. They receive the user's selected target from Eagle Mode.
|
|
||||||
mkCommand = lib.makeOverridable (
|
|
||||||
{
|
|
||||||
# Name of the command.
|
|
||||||
name
|
|
||||||
, # User-facing description, displayed in Eagle Mode UI. Can be multi-line.
|
|
||||||
description
|
|
||||||
, # Verbatim Perl code of the command. Command library is already available.
|
|
||||||
code
|
|
||||||
, # Caption for the UI button (defaults to name).
|
|
||||||
caption ? name
|
|
||||||
, icon ? "terminal.tga"
|
|
||||||
, # TODO: what's a good default?
|
|
||||||
hotkey ? ""
|
|
||||||
, order ? 1.0
|
|
||||||
}: pkgs.writeTextDir "emFileMan/Commands/${name}.pl" (''
|
|
||||||
#!${pkgs.perl}/bin/perl
|
|
||||||
#[[BEGIN PROPERTIES]]
|
|
||||||
# Type = Command
|
|
||||||
# Interpreter = perl
|
|
||||||
# DefaultFor = directory
|
|
||||||
# Caption = ${caption}
|
|
||||||
# Order = ${toString order}
|
|
||||||
# Icon = ${icon}
|
|
||||||
''
|
|
||||||
+ (lib.optionalString (description != "") "${mkDesc description}\n")
|
|
||||||
+ (lib.optionalString (hotkey != "") "# Hotkey = ${hotkey}\n")
|
|
||||||
+ ''
|
|
||||||
#[[END PROPERTIES]]
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use warnings;
|
|
||||||
BEGIN { require "$ENV{'EM_DIR'}/res/emFileMan/scripts/cmd-util.pl"; }
|
|
||||||
|
|
||||||
${if builtins.isString code
|
|
||||||
then code
|
|
||||||
else (if builtins.isPath code
|
|
||||||
then builtins.readFile code
|
|
||||||
else throw "code must be a string (literal code) or path to file")}
|
|
||||||
'')
|
|
||||||
);
|
|
||||||
|
|
||||||
# mkTGA converts the given image to a TGA image.
|
|
||||||
mkTGA = name: path: pkgs.runCommand "${name}.tga" { } ''
|
|
||||||
${pkgs.imagemagick}/bin/convert ${path} $out
|
|
||||||
'';
|
|
||||||
|
|
||||||
buildPlugin = lib.makeOverridable (
|
|
||||||
{ name
|
|
||||||
, src
|
|
||||||
, version
|
|
||||||
, eaglemode ? pkgs.eaglemode
|
|
||||||
, target ? name
|
|
||||||
, extraNativeBuildInputs ? [ ]
|
|
||||||
, extraBuildInputs ? [ ]
|
|
||||||
}:
|
|
||||||
pkgs.stdenv.mkDerivation {
|
|
||||||
pname = "eaglemode-plugin-${name}";
|
|
||||||
inherit src version;
|
|
||||||
# inherit (eaglemode.drvAttrs) dontPatchELF;
|
|
||||||
|
|
||||||
nativeBuildInputs = eaglemode.drvAttrs.nativeBuildInputs ++ extraNativeBuildInputs;
|
|
||||||
buildInputs = eaglemode.drvAttrs.buildInputs ++ extraBuildInputs ++ [ eaglemode ];
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
runHook preBuild
|
|
||||||
|
|
||||||
# merge eaglemode & plugin folders
|
|
||||||
cp -r ${pkgs.srcOnly eaglemode} merged-src && chmod -R u+rw merged-src
|
|
||||||
cp -r $src/* merged-src && chmod -R u+rw merged-src
|
|
||||||
cd merged-src
|
|
||||||
|
|
||||||
export NIX_LDFLAGS="$NIX_LDFLAGS -lXxf86vm -lXext -lXinerama"
|
|
||||||
perl make.pl build projects=${target} continue=no
|
|
||||||
|
|
||||||
runHook postBuild
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
mkdir -p $out/lib
|
|
||||||
cp -r lib/lib${target}.so $out/lib
|
|
||||||
|
|
||||||
if [ -d "$src/etc" ]; then
|
|
||||||
cp -r $src/etc/* $out
|
|
||||||
fi
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
# etcDir creates a directory layout suitable for use in the EM_USER_CONFIG_DIR
|
|
||||||
# environment variable.
|
|
||||||
#
|
|
||||||
# Note that Eagle Mode requires the value of that variable to be mutable at
|
|
||||||
# runtime (it is the same place where it persists all of its user-controlled
|
|
||||||
# state), so the results of this function can not be used directly.
|
|
||||||
etcDir =
|
|
||||||
{ eaglemode ? pkgs.eaglemode
|
|
||||||
, extraPaths ? [ ]
|
|
||||||
}: pkgs.runCommand "eaglemode-config" { } ''
|
|
||||||
mkdir $out
|
|
||||||
|
|
||||||
${
|
|
||||||
lib.concatMapStringsSep "\n" (s: "cp -rT ${s} $out/\nchmod -R u+rw $out/\n") ([ "${eaglemode}/etc"] ++ extraPaths)
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
|
|
||||||
# withConfig creates an Eagle Mode wrapper that runs it with the given
|
|
||||||
# configuration.
|
|
||||||
withConfig = { eaglemode ? pkgs.eaglemode, config }: pkgs.writeShellScriptBin "eaglemode" ''
|
|
||||||
${configWrapper}/bin/wrapper --em-config "${config}"
|
|
||||||
|
|
||||||
if [ -d "${config}/lib" ]; then
|
|
||||||
export LD_LIBRARY_PATH="${config}/lib:$LD_LIBRARY_PATH"
|
|
||||||
exec ${eaglemode}/bin/eaglemode "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec ${eaglemode}/bin/eaglemode "$@"
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
{ depot, pkgs, ... }:
|
|
||||||
|
|
||||||
depot.tools.eaglemode.buildPlugin {
|
|
||||||
name = "avif";
|
|
||||||
version = "canon";
|
|
||||||
src = ./.;
|
|
||||||
target = "PlAvif";
|
|
||||||
extraBuildInputs = [ pkgs.libavif ];
|
|
||||||
extraNativeBuildInputs = [ pkgs.pkg-config ];
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
#%rec:emFpPlugin%#
|
|
||||||
|
|
||||||
FileTypes = { ".avif" }
|
|
||||||
Priority = 1.0
|
|
||||||
Library = "PlAvif"
|
|
||||||
Function = "PlAvifFpPluginFunc"
|
|
|
@ -1,64 +0,0 @@
|
||||||
package PlAvif;
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use warnings;
|
|
||||||
|
|
||||||
sub GetDependencies
|
|
||||||
{
|
|
||||||
return ('emCore');
|
|
||||||
}
|
|
||||||
|
|
||||||
sub IsEssential
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub GetFileHandlingrules
|
|
||||||
{
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub GetExtraBuildOptions
|
|
||||||
{
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub Build
|
|
||||||
{
|
|
||||||
shift;
|
|
||||||
my %options=@_;
|
|
||||||
|
|
||||||
my @libAvifFlags=();
|
|
||||||
if ($options{'avif-inc-dir'} eq '' && $options{'avif-lib-dir'} eq '') {
|
|
||||||
@libAvifFlags=split("\n",readpipe(
|
|
||||||
"perl \"".$options{'utils'}."/PkgConfig.pl\" libavif"
|
|
||||||
));
|
|
||||||
}
|
|
||||||
if (!@libAvifFlags) {
|
|
||||||
if ($options{'avif-inc-dir'} ne '') {
|
|
||||||
push(@libAvifFlags, "--inc-search-dir", $options{'avif-inc-dir'});
|
|
||||||
}
|
|
||||||
if ($options{'avif-lib-dir'} ne '') {
|
|
||||||
push(@libAvifFlags, "--lib-search-dir", $options{'avif-lib-dir'});
|
|
||||||
}
|
|
||||||
push(@libAvifFlags, "--link", "avif");
|
|
||||||
}
|
|
||||||
|
|
||||||
system(
|
|
||||||
@{$options{'unicc_call'}},
|
|
||||||
"--math",
|
|
||||||
"--rtti",
|
|
||||||
"--exceptions",
|
|
||||||
"--bin-dir" , "bin",
|
|
||||||
"--lib-dir" , "lib",
|
|
||||||
"--obj-dir" , "obj",
|
|
||||||
"--inc-search-dir", "include",
|
|
||||||
@libAvifFlags,
|
|
||||||
"--link" , "emCore",
|
|
||||||
"--type" , "dynlib",
|
|
||||||
"--name" , "PlAvif",
|
|
||||||
"src/PlAvif.cpp"
|
|
||||||
)==0 or return 0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
|
@ -1,190 +0,0 @@
|
||||||
#include <emCore/emFpPlugin.h>
|
|
||||||
#include <emCore/emImageFile.h>
|
|
||||||
|
|
||||||
#include "avif/avif.h"
|
|
||||||
|
|
||||||
class PlAvifImageFileModel : public emImageFileModel
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
static emRef<PlAvifImageFileModel> Acquire(
|
|
||||||
emContext & context, const emString & name, bool common=true
|
|
||||||
);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
PlAvifImageFileModel(emContext & context, const emString & name);
|
|
||||||
virtual ~PlAvifImageFileModel();
|
|
||||||
virtual void TryStartLoading();
|
|
||||||
virtual bool TryContinueLoading();
|
|
||||||
virtual void QuitLoading();
|
|
||||||
virtual void TryStartSaving();
|
|
||||||
virtual bool TryContinueSaving();
|
|
||||||
virtual void QuitSaving();
|
|
||||||
virtual emUInt64 CalcMemoryNeed();
|
|
||||||
virtual double CalcFileProgress();
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct LoadingState;
|
|
||||||
LoadingState * L = NULL;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct PlAvifImageFileModel::LoadingState {
|
|
||||||
avifRGBImage rgb;
|
|
||||||
avifDecoder * decoder;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
emRef<PlAvifImageFileModel> PlAvifImageFileModel::Acquire(
|
|
||||||
emContext & context, const emString & name, bool common
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EM_IMPL_ACQUIRE(PlAvifImageFileModel, context, name, common)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PlAvifImageFileModel::PlAvifImageFileModel(
|
|
||||||
emContext & context, const emString & name
|
|
||||||
)
|
|
||||||
: emImageFileModel(context, name)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PlAvifImageFileModel::~PlAvifImageFileModel()
|
|
||||||
{
|
|
||||||
PlAvifImageFileModel::QuitLoading();
|
|
||||||
PlAvifImageFileModel::QuitSaving();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PlAvifImageFileModel::TryStartLoading()
|
|
||||||
{
|
|
||||||
avifResult result;
|
|
||||||
|
|
||||||
L = new LoadingState;
|
|
||||||
memset(L, 0, sizeof(LoadingState));
|
|
||||||
|
|
||||||
L->decoder = avifDecoderCreate();
|
|
||||||
if (L->decoder == NULL) {
|
|
||||||
throw emException("failed to create AVIF decoder");
|
|
||||||
}
|
|
||||||
|
|
||||||
result = avifDecoderSetIOFile(L->decoder, GetFilePath());
|
|
||||||
if (result != AVIF_RESULT_OK) {
|
|
||||||
throw emException("%s", avifResultToString(result));
|
|
||||||
}
|
|
||||||
|
|
||||||
result = avifDecoderParse(L->decoder);
|
|
||||||
if (result != AVIF_RESULT_OK) {
|
|
||||||
throw emException("%s", avifResultToString(result));
|
|
||||||
}
|
|
||||||
|
|
||||||
FileFormatInfo = emString::Format(
|
|
||||||
"AVIF %s %ubpc",
|
|
||||||
avifPixelFormatToString(L->decoder->image->yuvFormat),
|
|
||||||
L->decoder->image->depth
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
Signal(ChangeSignal);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool PlAvifImageFileModel::TryContinueLoading()
|
|
||||||
{
|
|
||||||
avifResult result;
|
|
||||||
|
|
||||||
if (!Image.GetHeight()) {
|
|
||||||
Image.Setup(
|
|
||||||
L->decoder->image->width,
|
|
||||||
L->decoder->image->height,
|
|
||||||
L->decoder->alphaPresent ? 4 : 3
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
result = avifDecoderNextImage(L->decoder);
|
|
||||||
if (result != AVIF_RESULT_OK) {
|
|
||||||
throw emException("%s", avifResultToString(result));
|
|
||||||
}
|
|
||||||
|
|
||||||
avifRGBImageSetDefaults(&L->rgb, L->decoder->image);
|
|
||||||
L->rgb.format = L->decoder->alphaPresent ?
|
|
||||||
AVIF_RGB_FORMAT_RGBA : AVIF_RGB_FORMAT_RGB;
|
|
||||||
L->rgb.pixels = Image.GetWritableMap();
|
|
||||||
L->rgb.width = Image.GetWidth();
|
|
||||||
L->rgb.height = Image.GetHeight();
|
|
||||||
L->rgb.depth = 8;
|
|
||||||
L->rgb.rowBytes = Image.GetWidth() * Image.GetChannelCount();
|
|
||||||
|
|
||||||
result = avifImageYUVToRGB(L->decoder->image, &L->rgb);
|
|
||||||
if (result != AVIF_RESULT_OK) {
|
|
||||||
throw emException("%s", avifResultToString(result));
|
|
||||||
}
|
|
||||||
|
|
||||||
Signal(ChangeSignal);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PlAvifImageFileModel::QuitLoading()
|
|
||||||
{
|
|
||||||
if (L) {
|
|
||||||
if (L->decoder) avifDecoderDestroy(L->decoder);
|
|
||||||
delete L;
|
|
||||||
L = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PlAvifImageFileModel::TryStartSaving()
|
|
||||||
{
|
|
||||||
throw emException("PlAvifImageFileModel: Saving not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool PlAvifImageFileModel::TryContinueSaving()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PlAvifImageFileModel::QuitSaving()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
emUInt64 PlAvifImageFileModel::CalcMemoryNeed()
|
|
||||||
{
|
|
||||||
return
|
|
||||||
(emUInt64)
|
|
||||||
L->decoder->image->width *
|
|
||||||
L->decoder->image->height *
|
|
||||||
(L->decoder->alphaPresent ? 4 : 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
double PlAvifImageFileModel::CalcFileProgress()
|
|
||||||
{
|
|
||||||
return 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
emPanel * PlAvifFpPluginFunc(
|
|
||||||
emPanel::ParentArg parent, const emString & name,
|
|
||||||
const emString & path, emFpPlugin * plugin,
|
|
||||||
emString * errorBuf
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (plugin->Properties.GetCount()) {
|
|
||||||
*errorBuf="PlAvifFpPlugin: No properties allowed.";
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return new emImageFilePanel(
|
|
||||||
parent, name,
|
|
||||||
PlAvifImageFileModel::Acquire(
|
|
||||||
parent.GetRootContext(), path
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
{ depot, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
em = depot.tools.eaglemode;
|
|
||||||
emSrc = with pkgs; srcOnly eaglemode;
|
|
||||||
in
|
|
||||||
em.buildPlugin {
|
|
||||||
name = "example";
|
|
||||||
version = "canon";
|
|
||||||
|
|
||||||
src = pkgs.runCommand "em-plugin-example-src" { } ''
|
|
||||||
set -ux
|
|
||||||
cp -r ${emSrc}/doc/examples/CppApiExamples/PluginExample $out
|
|
||||||
'';
|
|
||||||
|
|
||||||
target = "PlEx";
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
{ depot, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
em = depot.tools.eaglemode;
|
|
||||||
emSrc = pkgs.srcOnly pkgs.em;
|
|
||||||
in
|
|
||||||
em.buildPlugin {
|
|
||||||
name = "qoi";
|
|
||||||
version = "canon";
|
|
||||||
src = ./.;
|
|
||||||
target = "PlQoi";
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
#%rec:emFpPlugin%#
|
|
||||||
|
|
||||||
FileTypes = { ".qoi" }
|
|
||||||
Priority = 1.0
|
|
||||||
Library = "PlQoi"
|
|
||||||
Function = "PlQoiFpPluginFunc"
|
|
|
@ -1,47 +0,0 @@
|
||||||
package PlQoi;
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use warnings;
|
|
||||||
|
|
||||||
sub GetDependencies
|
|
||||||
{
|
|
||||||
return ('emCore');
|
|
||||||
}
|
|
||||||
|
|
||||||
sub IsEssential
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub GetFileHandlingrules
|
|
||||||
{
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub GetExtraBuildOptions
|
|
||||||
{
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub Build
|
|
||||||
{
|
|
||||||
shift;
|
|
||||||
my %options=@_;
|
|
||||||
|
|
||||||
system(
|
|
||||||
@{$options{'unicc_call'}},
|
|
||||||
"--math",
|
|
||||||
"--rtti",
|
|
||||||
"--exceptions",
|
|
||||||
"--bin-dir" , "bin",
|
|
||||||
"--lib-dir" , "lib",
|
|
||||||
"--obj-dir" , "obj",
|
|
||||||
"--inc-search-dir", "include",
|
|
||||||
"--link" , "emCore",
|
|
||||||
"--type" , "dynlib",
|
|
||||||
"--name" , "PlQoi",
|
|
||||||
"src/PlQoi.cpp"
|
|
||||||
)==0 or return 0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
|
@ -1,273 +0,0 @@
|
||||||
#include <emCore/emFpPlugin.h>
|
|
||||||
#include <emCore/emImageFile.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
QOI Utilities
|
|
||||||
|
|
||||||
Copyright (c) 2021, Dominic Szablewski - https://phoboslab.org
|
|
||||||
SPDX-License-Identifier: MIT
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define QOI_OP_INDEX 0x00 /* 00xxxxxx */
|
|
||||||
#define QOI_OP_DIFF 0x40 /* 01xxxxxx */
|
|
||||||
#define QOI_OP_LUMA 0x80 /* 10xxxxxx */
|
|
||||||
#define QOI_OP_RUN 0xc0 /* 11xxxxxx */
|
|
||||||
#define QOI_OP_RGB 0xfe /* 11111110 */
|
|
||||||
#define QOI_OP_RGBA 0xff /* 11111111 */
|
|
||||||
|
|
||||||
#define QOI_MASK_2 0xc0 /* 11000000 */
|
|
||||||
|
|
||||||
#define QOI_COLOR_HASH(C) (C.GetRed()*3 + C.GetGreen()*5 + C.GetBlue()*7 + C.GetAlpha()*11)
|
|
||||||
|
|
||||||
#define QOI_MAGIC \
|
|
||||||
(((unsigned int)'q') << 24 | ((unsigned int)'o') << 16 | \
|
|
||||||
((unsigned int)'i') << 8 | ((unsigned int)'f'))
|
|
||||||
|
|
||||||
#define QOI_HEADER_SIZE 14
|
|
||||||
|
|
||||||
static unsigned int qoi_read_32(const unsigned char *bytes, int *p) {
|
|
||||||
unsigned int a = bytes[(*p)++];
|
|
||||||
unsigned int b = bytes[(*p)++];
|
|
||||||
unsigned int c = bytes[(*p)++];
|
|
||||||
unsigned int d = bytes[(*p)++];
|
|
||||||
return a << 24 | b << 16 | c << 8 | d;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class PlQoiImageFileModel : public emImageFileModel
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
static emRef<PlQoiImageFileModel> Acquire(
|
|
||||||
emContext & context, const emString & name, bool common=true
|
|
||||||
);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
PlQoiImageFileModel(emContext & context, const emString & name);
|
|
||||||
virtual ~PlQoiImageFileModel();
|
|
||||||
virtual void TryStartLoading();
|
|
||||||
virtual bool TryContinueLoading();
|
|
||||||
virtual void QuitLoading();
|
|
||||||
virtual void TryStartSaving();
|
|
||||||
virtual bool TryContinueSaving();
|
|
||||||
virtual void QuitSaving();
|
|
||||||
virtual emUInt64 CalcMemoryNeed();
|
|
||||||
virtual double CalcFileProgress();
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct LoadingState;
|
|
||||||
LoadingState * L = NULL;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct PlQoiImageFileModel::LoadingState {
|
|
||||||
FILE * file;
|
|
||||||
unsigned int width, height, channels;
|
|
||||||
size_t file_len;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
emRef<PlQoiImageFileModel> PlQoiImageFileModel::Acquire(
|
|
||||||
emContext & context, const emString & name, bool common
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EM_IMPL_ACQUIRE(PlQoiImageFileModel, context, name, common)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PlQoiImageFileModel::PlQoiImageFileModel(
|
|
||||||
emContext & context, const emString & name
|
|
||||||
)
|
|
||||||
: emImageFileModel(context, name)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PlQoiImageFileModel::~PlQoiImageFileModel()
|
|
||||||
{
|
|
||||||
PlQoiImageFileModel::QuitLoading();
|
|
||||||
PlQoiImageFileModel::QuitSaving();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PlQoiImageFileModel::TryStartLoading()
|
|
||||||
{
|
|
||||||
unsigned char header[QOI_HEADER_SIZE];
|
|
||||||
unsigned int header_magic, colorspace;
|
|
||||||
int pos = 0;
|
|
||||||
|
|
||||||
L = new LoadingState;
|
|
||||||
memset(L, 0, sizeof(LoadingState));
|
|
||||||
L->file = fopen(GetFilePath(),"rb");
|
|
||||||
if (!L->file) throw emException("%s",emGetErrorText(errno).Get());
|
|
||||||
|
|
||||||
if (fread(header, 1, sizeof(header), L->file) != sizeof(header)) {
|
|
||||||
if (ferror(L->file)) {
|
|
||||||
throw emException("%s",emGetErrorText(errno).Get());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw emException("QOI header not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
header_magic = qoi_read_32(header, &pos);
|
|
||||||
L->width = qoi_read_32(header, &pos);
|
|
||||||
L->height = qoi_read_32(header, &pos);
|
|
||||||
L->channels = header[pos++];
|
|
||||||
colorspace = header[pos++];
|
|
||||||
|
|
||||||
if (
|
|
||||||
L->width == 0 || L->height == 0 ||
|
|
||||||
L->channels < 3 || L->channels > 4 ||
|
|
||||||
colorspace > 1 ||
|
|
||||||
header_magic != QOI_MAGIC
|
|
||||||
) {
|
|
||||||
throw emException("QOI header not valid");
|
|
||||||
}
|
|
||||||
|
|
||||||
fseek(L->file, 0, SEEK_END);
|
|
||||||
L->file_len = ftell(L->file);
|
|
||||||
|
|
||||||
if (L->file_len <= QOI_HEADER_SIZE || fseek(L->file, 0, SEEK_SET) != 0) {
|
|
||||||
throw emException("QOI data incomplete");
|
|
||||||
}
|
|
||||||
|
|
||||||
FileFormatInfo = "QOI ";
|
|
||||||
FileFormatInfo += (
|
|
||||||
colorspace ? "all channels linear" : "sRGB with linear alpha"
|
|
||||||
);
|
|
||||||
|
|
||||||
Signal(ChangeSignal);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool PlQoiImageFileModel::TryContinueLoading()
|
|
||||||
{
|
|
||||||
emArray<unsigned char> data;
|
|
||||||
emColor index[64];
|
|
||||||
emColor px { 0, 0, 0, 255 };
|
|
||||||
int pos = QOI_HEADER_SIZE;
|
|
||||||
int run = 0;
|
|
||||||
|
|
||||||
if (!Image.GetHeight()) {
|
|
||||||
Image.Setup(L->width, L->height, L->channels);
|
|
||||||
}
|
|
||||||
|
|
||||||
data.SetCount(L->file_len);
|
|
||||||
if (fread(data.GetWritable(), 1, L->file_len, L->file) < L->file_len) {
|
|
||||||
if (ferror(L->file)) {
|
|
||||||
throw emException("%s",emGetErrorText(errno).Get());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw emException("QOI data incomplete");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(index, 0, sizeof(index));
|
|
||||||
|
|
||||||
for (int px_y = 0; px_y < L->height; px_y++) {
|
|
||||||
for (int px_x = 0; px_x < L->width; px_x++) {
|
|
||||||
if (run > 0) {
|
|
||||||
run--;
|
|
||||||
} else if (pos < data.GetCount()) {
|
|
||||||
int b1 = data.Get(pos++);
|
|
||||||
|
|
||||||
if (b1 == QOI_OP_RGB) {
|
|
||||||
px.SetRed( data.Get(pos++));
|
|
||||||
px.SetGreen( data.Get(pos++));
|
|
||||||
px.SetBlue( data.Get(pos++));
|
|
||||||
} else if (b1 == QOI_OP_RGBA) {
|
|
||||||
px.SetRed( data.Get(pos++));
|
|
||||||
px.SetGreen( data.Get(pos++));
|
|
||||||
px.SetBlue( data.Get(pos++));
|
|
||||||
px.SetAlpha( data.Get(pos++));
|
|
||||||
} else if ((b1 & QOI_MASK_2) == QOI_OP_INDEX) {
|
|
||||||
px = index[b1];
|
|
||||||
} else if ((b1 & QOI_MASK_2) == QOI_OP_DIFF) {
|
|
||||||
px.SetRed(
|
|
||||||
px.GetRed() + ((b1 >> 4) & 0x03) - 2);
|
|
||||||
px.SetGreen(
|
|
||||||
px.GetGreen() + ((b1 >> 2) & 0x03) - 2);
|
|
||||||
px.SetBlue(
|
|
||||||
px.GetBlue() + ( b1 & 0x03) - 2);
|
|
||||||
} else if ((b1 & QOI_MASK_2) == QOI_OP_LUMA) {
|
|
||||||
int b2 = data.Get(pos++);
|
|
||||||
int vg = (b1 & 0x3f) - 32;
|
|
||||||
px.SetRed(
|
|
||||||
px.GetRed() + vg - 8 + ((b2 >> 4) & 0x0f));
|
|
||||||
px.SetGreen(
|
|
||||||
px.GetGreen() + vg);
|
|
||||||
px.SetBlue(
|
|
||||||
px.GetBlue() + vg - 8 + (b2 & 0x0f));
|
|
||||||
} else if ((b1 & QOI_MASK_2) == QOI_OP_RUN) {
|
|
||||||
run = (b1 & 0x3f);
|
|
||||||
}
|
|
||||||
index[QOI_COLOR_HASH(px) % 64] = px;
|
|
||||||
}
|
|
||||||
Image.SetPixel(px_x, px_y, px);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Signal(ChangeSignal);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PlQoiImageFileModel::QuitLoading()
|
|
||||||
{
|
|
||||||
if (L) {
|
|
||||||
if (L->file) fclose(L->file);
|
|
||||||
delete L;
|
|
||||||
L = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PlQoiImageFileModel::TryStartSaving()
|
|
||||||
{
|
|
||||||
throw emException("PlQoiImageFileModel: Saving not implemented.");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool PlQoiImageFileModel::TryContinueSaving()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PlQoiImageFileModel::QuitSaving()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
emUInt64 PlQoiImageFileModel::CalcMemoryNeed()
|
|
||||||
{
|
|
||||||
return
|
|
||||||
(emUInt64)L->width * L->height * L->channels + L->file_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
double PlQoiImageFileModel::CalcFileProgress()
|
|
||||||
{
|
|
||||||
return 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
emPanel * PlQoiFpPluginFunc(
|
|
||||||
emPanel::ParentArg parent, const emString & name,
|
|
||||||
const emString & path, emFpPlugin * plugin,
|
|
||||||
emString * errorBuf
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (plugin->Properties.GetCount()) {
|
|
||||||
*errorBuf="PlQoiFpPlugin: No properties allowed.";
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return new emImageFilePanel(
|
|
||||||
parent, name,
|
|
||||||
PlQoiImageFileModel::Acquire(
|
|
||||||
parent.GetRootContext(), path
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
{ depot, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
em = depot.tools.eaglemode;
|
|
||||||
emSrc = with pkgs; srcOnly eaglemode;
|
|
||||||
in
|
|
||||||
(em.buildPlugin {
|
|
||||||
name = "yatracker";
|
|
||||||
version = "canon";
|
|
||||||
src = ./.;
|
|
||||||
target = "PlYaTracker";
|
|
||||||
}).overrideAttrs (_: {
|
|
||||||
postInstall = ''
|
|
||||||
mkdir -p $out/icons
|
|
||||||
${pkgs.imagemagick}/bin/convert $src/logo.webp $out/icons/yandex-tracker.tga
|
|
||||||
'';
|
|
||||||
})
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
#%rec:emFpPlugin%#
|
|
||||||
|
|
||||||
FileTypes = { ".YaTracker" }
|
|
||||||
Priority = 1.0
|
|
||||||
Library = "PlYaTracker"
|
|
||||||
Function = "PlYaTrackerPluginFunc"
|
|
Binary file not shown.
Before Width: | Height: | Size: 14 KiB |
|
@ -1,47 +0,0 @@
|
||||||
package PlYaTracker;
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use warnings;
|
|
||||||
|
|
||||||
sub GetDependencies
|
|
||||||
{
|
|
||||||
return ('emCore');
|
|
||||||
}
|
|
||||||
|
|
||||||
sub IsEssential
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub GetFileHandlingRules
|
|
||||||
{
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub GetExtraBuildOptions
|
|
||||||
{
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub Build
|
|
||||||
{
|
|
||||||
shift;
|
|
||||||
my %options=@_;
|
|
||||||
|
|
||||||
system(
|
|
||||||
@{$options{'unicc_call'}},
|
|
||||||
"--math",
|
|
||||||
"--rtti",
|
|
||||||
"--exceptions",
|
|
||||||
"--bin-dir" , "bin",
|
|
||||||
"--lib-dir" , "lib",
|
|
||||||
"--obj-dir" , "obj",
|
|
||||||
"--inc-search-dir", "include",
|
|
||||||
"--link" , "emCore",
|
|
||||||
"--type" , "dynlib",
|
|
||||||
"--name" , "PlYaTracker",
|
|
||||||
"src/PlYaTracker/PlYaTracker.cpp"
|
|
||||||
)==0 or return 0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
|
@ -1,58 +0,0 @@
|
||||||
#include <emCore/emFilePanel.h>
|
|
||||||
#include <emCore/emFpPlugin.h>
|
|
||||||
#include <emCore/emRecFileModel.h>
|
|
||||||
#include <emCore/emToolkit.h>
|
|
||||||
|
|
||||||
class PlYaTrackerConfig final : public emRecFileModel, public emStructRec {
|
|
||||||
public:
|
|
||||||
static emRef<PlYaTrackerConfig> Acquire(emContext& context,
|
|
||||||
const emString& name,
|
|
||||||
bool common = true);
|
|
||||||
|
|
||||||
virtual const char* GetFormatName() const;
|
|
||||||
|
|
||||||
emStringRec URL;
|
|
||||||
emStringRec Token;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
PlYaTrackerConfig(emContext& context, const emString& name);
|
|
||||||
};
|
|
||||||
|
|
||||||
emRef<PlYaTrackerConfig> PlYaTrackerConfig::Acquire(emContext& context,
|
|
||||||
const emString& name,
|
|
||||||
bool common) {
|
|
||||||
EM_IMPL_ACQUIRE(PlYaTrackerConfig, context, name, common)
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* PlYaTrackerConfig::GetFormatName() const { return "PlYaTracker"; }
|
|
||||||
|
|
||||||
PlYaTrackerConfig::PlYaTrackerConfig(emContext& context, const emString& name)
|
|
||||||
: emRecFileModel(context, name),
|
|
||||||
emStructRec(),
|
|
||||||
URL(this, "URL"),
|
|
||||||
Token(this, "Token") {
|
|
||||||
PostConstruct(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
class PlYaTrackerFilePanel : public emFilePanel {
|
|
||||||
public:
|
|
||||||
PlYaTrackerFilePanel(ParentArg parent, const emString& name,
|
|
||||||
emRef<PlYaTrackerConfig> config);
|
|
||||||
|
|
||||||
private:
|
|
||||||
emRef<PlYaTrackerConfig> Config;
|
|
||||||
};
|
|
||||||
|
|
||||||
PlYaTrackerFilePanel::PlYaTrackerFilePanel(ParentArg parent,
|
|
||||||
const emString& name,
|
|
||||||
emRef<PlYaTrackerConfig> config)
|
|
||||||
: emFilePanel(parent, name, config), Config(config) {}
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
emPanel* PlYaTrackerPluginFunc(emPanel::ParentArg parent, const emString& name,
|
|
||||||
const emString& path, emFpPlugin* plugin,
|
|
||||||
emString* errorBuf) {
|
|
||||||
return new PlYaTrackerFilePanel(
|
|
||||||
parent, name, PlYaTrackerConfig::Acquire(parent.GetRootContext(), path));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,156 +0,0 @@
|
||||||
// Eagle Mode configuration wrapper that recreates the required directory
|
|
||||||
// structure for Eagle Mode based on the output of depot.tools.eaglemode.etcDir
|
|
||||||
//
|
|
||||||
// This will replace *all* symlinks in the Eagle Mode configuration directory,
|
|
||||||
// but it will not touch actual files. Missing folders will be created.
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
"io/fs"
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
"os/user"
|
|
||||||
"path"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func configDir() (string, error) {
|
|
||||||
v := os.Getenv("EM_USER_CONFIG_DIR")
|
|
||||||
if v != "" {
|
|
||||||
return v, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
usr, err := user.Current()
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("failed to get current user: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return path.Join(usr.HomeDir, ".eaglemode"), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// cleanupConfig removes *all* existing symlinks in the configuration which do
|
|
||||||
// not point into the right Nix store path.
|
|
||||||
func cleanupConfig(conf string, dir string) (map[string]bool, error) {
|
|
||||||
// In case of first launch, we might have to create the directory.
|
|
||||||
_ = os.MkdirAll(dir, 0755)
|
|
||||||
c := 0
|
|
||||||
|
|
||||||
currentFiles := map[string]bool{}
|
|
||||||
|
|
||||||
walker := func(p string, d fs.DirEntry, e error) error {
|
|
||||||
if e != nil {
|
|
||||||
return fmt.Errorf("could not walk %s in config directory: %w", p, e)
|
|
||||||
}
|
|
||||||
|
|
||||||
if d.Type()&fs.ModeSymlink != 0 {
|
|
||||||
target, err := os.Readlink(p)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("could not read link for %s: %w", p, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !strings.HasPrefix(target, conf) {
|
|
||||||
err = os.Remove(p)
|
|
||||||
c++
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("could not remove stale link %q: %w", p, err)
|
|
||||||
}
|
|
||||||
log.Printf("removed stale symlink %q", p)
|
|
||||||
} else {
|
|
||||||
currentFiles[p] = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if d.Type().IsRegular() {
|
|
||||||
currentFiles[p] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
err := filepath.WalkDir(dir, walker)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if c > 0 {
|
|
||||||
log.Printf("removed %v stale symlinks", c)
|
|
||||||
}
|
|
||||||
|
|
||||||
return currentFiles, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// linkConfig traverses the given Eagle Mode configuration and links everything
|
|
||||||
// to the expected location in the user's configuration directory.
|
|
||||||
//
|
|
||||||
// If the user placed actual files in the configuration directory at paths that
|
|
||||||
// would be overwritten, they will not be touched.
|
|
||||||
func linkConfig(conf string, dir string, existing map[string]bool) error {
|
|
||||||
walker := func(p string, d fs.DirEntry, e error) error {
|
|
||||||
if e != nil {
|
|
||||||
return fmt.Errorf("could not walk %s in config directory: %w", p, e)
|
|
||||||
}
|
|
||||||
|
|
||||||
target := path.Join(dir, strings.TrimPrefix(p, conf))
|
|
||||||
|
|
||||||
if d.Type().IsDir() {
|
|
||||||
err := os.MkdirAll(target, 0755)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("could not create directory %q: %w", target, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if shadow, exists := existing[target]; exists {
|
|
||||||
if shadow {
|
|
||||||
log.Printf("WARN: file %q already exists and shadows a file from configuration", target)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
err := os.Symlink(p, target)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to link %q: %w", target, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return filepath.WalkDir(conf, walker)
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
emConfig := flag.String("em-config", "", "path to em-config dir")
|
|
||||||
|
|
||||||
flag.Parse()
|
|
||||||
log.Println("verifying current Eagle Mode configuration")
|
|
||||||
|
|
||||||
if *emConfig == "" {
|
|
||||||
log.Fatalf("Eagle Mode configuration must be given")
|
|
||||||
}
|
|
||||||
|
|
||||||
if !strings.HasPrefix(*emConfig, "/nix/store/") {
|
|
||||||
log.Fatalf("Eagle Mode configuration must be in Nix store")
|
|
||||||
}
|
|
||||||
|
|
||||||
dir, err := configDir()
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("could not determine Eagle Mode config dir: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
currentFiles, err := cleanupConfig(*emConfig, dir)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("failed to remove stale symlinks: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = linkConfig(*emConfig, dir, currentFiles)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("failed to link new configuration: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Println("Eagle Mode configuration updated")
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
{ depot, ... }:
|
|
||||||
|
|
||||||
depot.tools.emacs-pkgs.buildEmacsPackage rec {
|
|
||||||
pname = "niri";
|
|
||||||
version = "1.0";
|
|
||||||
src = ./niri.el;
|
|
||||||
}
|
|
|
@ -1,181 +0,0 @@
|
||||||
;;; niri.el --- seamless niri/emacs integration. -*- lexical-binding: t; -*-
|
|
||||||
;;
|
|
||||||
;; Copyright (C) 2024 The TVL Contributors
|
|
||||||
;;
|
|
||||||
;; Author: Vincent Ambo <tazjin@tvl.su>
|
|
||||||
;; Version: 1.0
|
|
||||||
;; Package-Requires: ((emacs "27.1"))
|
|
||||||
;;
|
|
||||||
;;; Commentary:
|
|
||||||
;;
|
|
||||||
;; After having used EXWM for many years (7 or so?) it's become second nature
|
|
||||||
;; that there is no difference between windows and Emacs buffers. This means
|
|
||||||
;; that from any Emacs buffer (or, in the case of EXWM, from any X window) it's
|
|
||||||
;; possible to switch to any of the others.
|
|
||||||
;;
|
|
||||||
;; This implements similar logic for Emacs running in Niri, consisting of two
|
|
||||||
;; sides of the integration:
|
|
||||||
;;
|
|
||||||
;; # In Emacs
|
|
||||||
;;
|
|
||||||
;; Inside of Emacs, when switching buffers, populate the buffer-switching menu
|
|
||||||
;; additionally with all open Niri windows. Selecting a Niri window moves the
|
|
||||||
;; screen to that window.
|
|
||||||
;;
|
|
||||||
;; # Outside of Emacs
|
|
||||||
;;
|
|
||||||
;; Provides an interface for the same core functionality that can be used from
|
|
||||||
;; shell scripts, and bound to selectors like dmenu or rofi.
|
|
||||||
;;
|
|
||||||
;; # Switching to Emacs buffers
|
|
||||||
;;
|
|
||||||
;; Some special logic exists for handling the case of switching to an Emacs
|
|
||||||
;; buffer. There are several conditions that we can be in, that each have a
|
|
||||||
;; predictable result:
|
|
||||||
;;
|
|
||||||
;; In a non-Emacs window, selecting an Emacs buffer will either switch to an
|
|
||||||
;; Emacs frame already displaying this buffer, or launch a new frame for it.
|
|
||||||
;;
|
|
||||||
;; Inside of Emacs, if *another* frame is already displaying the buffer, switch
|
|
||||||
;; to it. Otherwise the behaviour is the same as standard buffer switching.
|
|
||||||
|
|
||||||
(require 'seq)
|
|
||||||
(require 'map)
|
|
||||||
|
|
||||||
(defun niri-list-windows ()
|
|
||||||
"List all currently open Niri windows."
|
|
||||||
(json-parse-string
|
|
||||||
(shell-command-to-string "niri msg -j windows")
|
|
||||||
:false-object nil))
|
|
||||||
|
|
||||||
(defun niri--window-is-emacs (window)
|
|
||||||
(equal (map-elt window "app_id") "emacs"))
|
|
||||||
|
|
||||||
(defun niri--list-selectables ()
|
|
||||||
"Lists all currently selectable things in a format that can work
|
|
||||||
with completing-read. Selectable means all open Niri
|
|
||||||
windows (except Emacs windows) and all Emacs buffers.
|
|
||||||
|
|
||||||
Emacs windows are returned separately, as they are required for
|
|
||||||
frame navigation."
|
|
||||||
(let* (;; all niri windows, with emacs/non-emacs windows split up
|
|
||||||
(all-windows (niri-list-windows))
|
|
||||||
(windows (seq-filter (lambda (w) (not (niri--window-is-emacs w)))
|
|
||||||
all-windows))
|
|
||||||
(emacs-windows (seq-filter #'niri--window-is-emacs all-windows))
|
|
||||||
|
|
||||||
;; all non-hidden buffers
|
|
||||||
(buffers (seq-filter (lambda (b) (not (string-prefix-p " " (buffer-name b))))
|
|
||||||
(buffer-list)))
|
|
||||||
(selectables (make-hash-table :test 'equal :size (+ (length windows)
|
|
||||||
(length buffers)))))
|
|
||||||
(seq-do (lambda (window)
|
|
||||||
(map-put! selectables (map-elt window "title")
|
|
||||||
(cons :niri window)))
|
|
||||||
windows)
|
|
||||||
|
|
||||||
(seq-do (lambda (buf)
|
|
||||||
(map-put! selectables (buffer-name buf)
|
|
||||||
(cons :emacs buf)))
|
|
||||||
buffers)
|
|
||||||
(cons selectables emacs-windows)))
|
|
||||||
|
|
||||||
(defun niri--focus-window (window)
|
|
||||||
(shell-command (format "niri msg action focus-window --id %d"
|
|
||||||
(map-elt window "id"))))
|
|
||||||
|
|
||||||
(defun niri--target-action-internal (target)
|
|
||||||
"Focus the given TARGET (a Niri window or Emacs buffer). This is
|
|
||||||
used when called from inside of Emacs. It will NOT correctly
|
|
||||||
switch Niri windows when called from outside of Emacs."
|
|
||||||
(pcase (car target)
|
|
||||||
(:emacs (pop-to-buffer (cdr target) '((display-buffer-reuse-window
|
|
||||||
display-buffer-same-window)
|
|
||||||
(reusable-frames . 0))))
|
|
||||||
(:niri (niri--focus-window (cdr target)))))
|
|
||||||
|
|
||||||
(defun niri-go-anywhere ()
|
|
||||||
"Interactively select and switch to an open Niri window, or an
|
|
||||||
Emacs buffer."
|
|
||||||
(interactive)
|
|
||||||
(let* ((selectables (car (niri--list-selectables)))
|
|
||||||
;; Annotate buffers that display remote files. I frequently
|
|
||||||
;; want to see it, because I might have identically named
|
|
||||||
;; files open locally and remotely at the same time, and it
|
|
||||||
;; helps with differentiating them.
|
|
||||||
(completion-extra-properties
|
|
||||||
'(:annotation-function
|
|
||||||
(lambda (name)
|
|
||||||
(let ((elt (map-elt selectables name)))
|
|
||||||
(pcase (car elt)
|
|
||||||
(:emacs
|
|
||||||
(if-let* ((file (buffer-file-name (cdr elt)))
|
|
||||||
(remote (file-remote-p file)))
|
|
||||||
(format " [%s]" remote)))
|
|
||||||
(:niri (format " [%s]" (map-elt (cdr elt) "app_id"))))))))
|
|
||||||
|
|
||||||
(target-key (completing-read "Switch to: " (map-keys selectables)))
|
|
||||||
(target (map-elt selectables target-key)))
|
|
||||||
(if target
|
|
||||||
(niri--target-action-internal target)
|
|
||||||
(switch-to-buffer target-key nil t))))
|
|
||||||
|
|
||||||
|
|
||||||
(defun niri--target-action-external (target frames)
|
|
||||||
"Focus the given TARGET (a Niri window or Emacs buffer). This
|
|
||||||
always behaves correctly, but does more work than the -internal
|
|
||||||
variant. It should only be called when invoking the switcher from
|
|
||||||
outside of Emacs (i.e. through `emacsclient').
|
|
||||||
|
|
||||||
FRAMES is the exact list of Emacs frames that existed at the time
|
|
||||||
the switcher was invoked."
|
|
||||||
(pcase (car target)
|
|
||||||
(:niri (niri--focus-window (cdr target)))
|
|
||||||
|
|
||||||
;; When switching to an Emacs buffer from outside of Emacs, we run into the
|
|
||||||
;; additional complication that Wayland does not allow arbitrary
|
|
||||||
;; applications to change the focused window. Calling e.g.
|
|
||||||
;; `select-frame-set-input-focus' has no effect on Wayland when not called
|
|
||||||
;; from within a focused Emacs frame.
|
|
||||||
;;
|
|
||||||
;; However, due to concurrency, frames may change between the moment when we
|
|
||||||
;; start the switcher (and potentially wait for user input), and when the
|
|
||||||
;; final selection happens.
|
|
||||||
;;
|
|
||||||
;; To get around this we try to match the target Emacs frame (if present) to
|
|
||||||
;; a Niri window, switch to it optimistically, and *then* execute the final
|
|
||||||
;; buffer switching command.
|
|
||||||
(:emacs
|
|
||||||
(if-let ((window (get-buffer-window (cdr target) t))
|
|
||||||
(frame (window-frame window))
|
|
||||||
(frame-name (frame-parameter frame 'name))
|
|
||||||
(niri-window (seq-find (lambda (w)
|
|
||||||
(equal (map-elt w "title") frame-name))
|
|
||||||
frames)))
|
|
||||||
;; Target frame found and could be matched to a Niri window: Go there!
|
|
||||||
(progn (select-window window) ;; ensure the right window in the frame has focus
|
|
||||||
(niri--focus-window niri-window)
|
|
||||||
(message "Switched to existing window for \"%s\"" (buffer-name (cdr target))))
|
|
||||||
|
|
||||||
;; Target frame not found; is Emacs the focused program?
|
|
||||||
(if (seq-find (lambda (w) (map-elt w "is_focused")) frames)
|
|
||||||
(switch-to-buffer (cdr target))
|
|
||||||
;; if not, just make a new frame
|
|
||||||
(display-buffer (cdr target) '(display-buffer-pop-up-frame)))))))
|
|
||||||
|
|
||||||
(defun niri-go-anywhere-external ()
|
|
||||||
"Use a dmenu-compatible launcher like `fuzzel' to achieve the same
|
|
||||||
effect as `niri-go-anywhere', but from outside of Emacs through
|
|
||||||
Emacsclient."
|
|
||||||
(interactive) ;; TODO no?
|
|
||||||
(let* ((all (niri--list-selectables))
|
|
||||||
(selectables (car all))
|
|
||||||
(target (with-temp-buffer
|
|
||||||
(dolist (key (map-keys selectables))
|
|
||||||
(insert key "\n"))
|
|
||||||
(call-process-region nil nil "fuzzel" t t nil "-d")
|
|
||||||
(string-trim (buffer-string)))))
|
|
||||||
(when-let ((selectable (map-elt selectables target)))
|
|
||||||
(niri--target-action-external selectable (cdr all)))))
|
|
||||||
|
|
||||||
(provide 'niri)
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue