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>
|
||||
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
|
||||
|
||||
* Source code can be viewed primarily via `cgit-pink` on
|
||||
[code.tvl.fyi](https://code.tvl.fyi), with code search being available through
|
||||
Livegrep on [grep.tvl.fyi](https://grep.tvl.fyi).
|
||||
* Source code is available primarily through Sourcegraph on
|
||||
[cs.tvl.fyi](https://cs.tvl.fyi), where it is searchable and even semantically
|
||||
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`.
|
||||
|
||||
|
|
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]]
|
||||
name = "wasm-bindgen"
|
||||
version = "0.2.95"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"
|
||||
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"once_cell",
|
||||
"wasm-bindgen-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-backend"
|
||||
version = "0.2.95"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"
|
||||
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
|
||||
dependencies = [
|
||||
"bumpalo",
|
||||
"log",
|
||||
|
@ -1538,9 +1537,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro"
|
||||
version = "0.2.95"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
|
||||
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"wasm-bindgen-macro-support",
|
||||
|
@ -1548,9 +1547,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro-support"
|
||||
version = "0.2.95"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
|
||||
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -1561,9 +1560,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-shared"
|
||||
version = "0.2.95"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
|
||||
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
|
||||
|
||||
[[package]]
|
||||
name = "web-sys"
|
||||
|
|
|
@ -19,7 +19,7 @@ yew-router = "0.17"
|
|||
wasm-bindgen-futures = "0.4"
|
||||
|
||||
# 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"] }
|
||||
|
||||
[dependencies.serde]
|
||||
|
|
21
corp/russian/predlozhnik/Cargo.lock
generated
21
corp/russian/predlozhnik/Cargo.lock
generated
|
@ -363,20 +363,19 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
|||
|
||||
[[package]]
|
||||
name = "wasm-bindgen"
|
||||
version = "0.2.95"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"
|
||||
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"once_cell",
|
||||
"wasm-bindgen-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-backend"
|
||||
version = "0.2.95"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"
|
||||
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
|
||||
dependencies = [
|
||||
"bumpalo",
|
||||
"log",
|
||||
|
@ -401,9 +400,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro"
|
||||
version = "0.2.95"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
|
||||
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"wasm-bindgen-macro-support",
|
||||
|
@ -411,9 +410,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro-support"
|
||||
version = "0.2.95"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
|
||||
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -424,9 +423,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-shared"
|
||||
version = "0.2.95"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
|
||||
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
|
||||
|
||||
[[package]]
|
||||
name = "web-sys"
|
||||
|
|
|
@ -9,4 +9,4 @@ lazy_static = "1.4"
|
|||
yew = "0.19"
|
||||
|
||||
# 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>
|
||||
|
||||
* **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
|
||||
organizations avoid the trap of building overly complex systems that don't
|
||||
meet their needs.
|
||||
|
|
|
@ -117,10 +117,6 @@ readTree.fix (self: (readDepot {
|
|||
self.users.wpcarro.nixos.kyokoSystem
|
||||
self.users.wpcarro.nixos.marcusSystem
|
||||
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.
|
||||
|
|
|
@ -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"
|
||||
# See https://github.com/kolloch/crate2nix for more info.
|
||||
|
||||
|
@ -13,8 +13,6 @@
|
|||
, rootFeatures ? [ "default" ]
|
||||
# If true, throw errors instead of issueing deprecation warnings.
|
||||
, 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.
|
||||
, targetFeatures ? [ ]
|
||||
# Whether to perform release builds: longer compile times, faster binaries.
|
||||
|
@ -157,7 +155,6 @@ rec {
|
|||
version = "0.1.1";
|
||||
edition = "2018";
|
||||
sha256 = "1w7ynjxrfs97xg3qlcdns4kgfpwcdv824g611fq32cag4cdr96g9";
|
||||
libName = "android_tzdata";
|
||||
authors = [
|
||||
"RumovZ"
|
||||
];
|
||||
|
@ -396,7 +393,6 @@ rec {
|
|||
version = "0.1.10";
|
||||
edition = "2018";
|
||||
sha256 = "08h80ihs74jcyp24cd75wwabygbbdgl05k6p5dmq8akbr78vv1a7";
|
||||
libName = "cfg_if";
|
||||
authors = [
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
];
|
||||
|
@ -411,7 +407,6 @@ rec {
|
|||
version = "1.0.0";
|
||||
edition = "2018";
|
||||
sha256 = "1za0vb97n4brpzpv8lsbnzmq5r8f2b0cpqqr0sy8h5bn751xxwds";
|
||||
libName = "cfg_if";
|
||||
authors = [
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
];
|
||||
|
@ -577,7 +572,6 @@ rec {
|
|||
version = "0.9.4";
|
||||
edition = "2018";
|
||||
sha256 = "13zvbbj07yk3b61b8fhwfzhy35535a583irf23vlcg59j7h9bqci";
|
||||
libName = "core_foundation";
|
||||
authors = [
|
||||
"The Servo Project Developers"
|
||||
];
|
||||
|
@ -609,7 +603,6 @@ rec {
|
|||
version = "0.8.6";
|
||||
edition = "2018";
|
||||
sha256 = "13w6sdf06r0hn7bx2b45zxsg1mm2phz34jikm6xc5qrbr6djpsh6";
|
||||
libName = "core_foundation_sys";
|
||||
authors = [
|
||||
"The Servo Project Developers"
|
||||
];
|
||||
|
@ -622,7 +615,12 @@ rec {
|
|||
crateName = "crimp";
|
||||
version = "4087.0.0";
|
||||
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 = [
|
||||
"Vincent Ambo <tazjin@tvl.su>"
|
||||
];
|
||||
|
@ -655,7 +653,6 @@ rec {
|
|||
version = "0.7.4";
|
||||
edition = "2015";
|
||||
sha256 = "1v99xcdjk4zixvxnq7pssip670mlyhw1ma3qc88ca11jxnfz43y2";
|
||||
libName = "crossbeam_deque";
|
||||
authors = [
|
||||
"The Crossbeam Project Developers"
|
||||
];
|
||||
|
@ -680,7 +677,6 @@ rec {
|
|||
version = "0.8.2";
|
||||
edition = "2015";
|
||||
sha256 = "1knsf0zz7rgzxn0nwz5gajjcrivxpw3zrdcp946gdhdgr9sd53h5";
|
||||
libName = "crossbeam_epoch";
|
||||
authors = [
|
||||
"The Crossbeam Project Developers"
|
||||
];
|
||||
|
@ -733,7 +729,6 @@ rec {
|
|||
version = "0.2.3";
|
||||
edition = "2015";
|
||||
sha256 = "0w15z68nz3ac4f2s4djhwha8vmlwsh9dlfrmsl4x84y2ah5acjvp";
|
||||
libName = "crossbeam_queue";
|
||||
authors = [
|
||||
"The Crossbeam Project Developers"
|
||||
];
|
||||
|
@ -764,7 +759,6 @@ rec {
|
|||
version = "0.7.2";
|
||||
edition = "2015";
|
||||
sha256 = "1a31wbrda1320gj2a6az1lin2d34xfc3xf88da4c17qy5lxcgiy3";
|
||||
libName = "crossbeam_utils";
|
||||
authors = [
|
||||
"The Crossbeam Project Developers"
|
||||
];
|
||||
|
@ -1337,7 +1331,6 @@ rec {
|
|||
version = "0.3.2";
|
||||
edition = "2015";
|
||||
sha256 = "1cgk0vyd7r45cj769jym4a6s7vwshvd0z4bqrb92q1fwibmkkwzn";
|
||||
libName = "foreign_types";
|
||||
authors = [
|
||||
"Steven Fackler <sfackler@gmail.com>"
|
||||
];
|
||||
|
@ -1354,7 +1347,6 @@ rec {
|
|||
version = "0.1.1";
|
||||
edition = "2015";
|
||||
sha256 = "0jxgzd04ra4imjv8jgkmdq59kj8fsz6w4zxsbmlai34h26225c00";
|
||||
libName = "foreign_types_shared";
|
||||
authors = [
|
||||
"Steven Fackler <sfackler@gmail.com>"
|
||||
];
|
||||
|
@ -1365,7 +1357,6 @@ rec {
|
|||
version = "0.3.3";
|
||||
edition = "2015";
|
||||
sha256 = "10jxc5ks1x06gpd0xg51kcjrxr35nj6qhx2zlc5n7bmskv3675rf";
|
||||
libName = "fuchsia_zircon";
|
||||
authors = [
|
||||
"Raph Levien <raph@google.com>"
|
||||
];
|
||||
|
@ -1386,7 +1377,6 @@ rec {
|
|||
version = "0.3.3";
|
||||
edition = "2015";
|
||||
sha256 = "19zp2085qsyq2bh1gvcxq1lb8w6v6jj9kbdkhpdjrl95fypakjix";
|
||||
libName = "fuchsia_zircon_sys";
|
||||
authors = [
|
||||
"Raph Levien <raph@google.com>"
|
||||
];
|
||||
|
@ -1465,7 +1455,6 @@ rec {
|
|||
version = "0.1.19";
|
||||
edition = "2018";
|
||||
sha256 = "0cxcm8093nf5fyn114w8vxbrbcyvv91d4015rdnlgfll7cs6gd32";
|
||||
libName = "hermit_abi";
|
||||
authors = [
|
||||
"Stefan Lankes"
|
||||
];
|
||||
|
@ -1488,7 +1477,6 @@ rec {
|
|||
version = "0.3.9";
|
||||
edition = "2021";
|
||||
sha256 = "092hxjbjnq5fmz66grd9plxd0sh6ssg5fhgwwwqbrzgzkjwdycfj";
|
||||
libName = "hermit_abi";
|
||||
authors = [
|
||||
"Stefan Lankes"
|
||||
];
|
||||
|
@ -1521,7 +1509,6 @@ rec {
|
|||
version = "0.1.60";
|
||||
edition = "2018";
|
||||
sha256 = "0hdid5xz3jznm04lysjm3vi93h3c523w0hcc3xba47jl3ddbpzz7";
|
||||
libName = "iana_time_zone";
|
||||
authors = [
|
||||
"Andrew Straw <strawman@astraw.com>"
|
||||
"René Kijewski <rene.kijewski@fu-berlin.de>"
|
||||
|
@ -1567,7 +1554,6 @@ rec {
|
|||
version = "0.1.2";
|
||||
edition = "2018";
|
||||
sha256 = "17r6jmj31chn7xs9698r122mapq85mfnv98bb4pg6spm0si2f67k";
|
||||
libName = "iana_time_zone_haiku";
|
||||
authors = [
|
||||
"René Kijewski <crates.io@k6i.de>"
|
||||
];
|
||||
|
@ -1702,7 +1688,6 @@ rec {
|
|||
version = "0.3.69";
|
||||
edition = "2018";
|
||||
sha256 = "0v99rz97asnzapb0jsc3jjhvxpfxr7h7qd97yqyrf9i7viimbh99";
|
||||
libName = "js_sys";
|
||||
authors = [
|
||||
"The wasm-bindgen Developers"
|
||||
];
|
||||
|
@ -1787,7 +1772,6 @@ rec {
|
|||
edition = "2018";
|
||||
links = "z";
|
||||
sha256 = "1xj89rjhk642x8271xr9phj7da7ivwyvd5g8fmb7ma5asgsk2xq3";
|
||||
libName = "libz_sys";
|
||||
authors = [
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
"Josh Triplett <josh@joshtriplett.org>"
|
||||
|
@ -1827,7 +1811,6 @@ rec {
|
|||
version = "0.3.0";
|
||||
edition = "2015";
|
||||
sha256 = "1kaf95grvfqchxn8pl0854g8ab0fzl56217hndhhhz5qqm2j09kd";
|
||||
libName = "linked_hash_map";
|
||||
authors = [
|
||||
"Stepan Koltsov <stepan.koltsov@gmail.com>"
|
||||
"Andrew Paseltiner <apaseltiner@gmail.com>"
|
||||
|
@ -1857,7 +1840,6 @@ rec {
|
|||
version = "0.5.6";
|
||||
edition = "2015";
|
||||
sha256 = "03vpgw7x507g524nx5i1jf5dl8k3kv0fzg8v3ip6qqwbpkqww5q7";
|
||||
libName = "linked_hash_map";
|
||||
authors = [
|
||||
"Stepan Koltsov <stepan.koltsov@gmail.com>"
|
||||
"Andrew Paseltiner <apaseltiner@gmail.com>"
|
||||
|
@ -1874,7 +1856,6 @@ rec {
|
|||
version = "0.4.13";
|
||||
edition = "2021";
|
||||
sha256 = "172k2c6422gsc914ig8rh99mb9yc7siw6ikc3d9xw1k7vx0s3k81";
|
||||
libName = "linux_raw_sys";
|
||||
authors = [
|
||||
"Dan Gohman <dev@sunfishcode.online>"
|
||||
];
|
||||
|
@ -1962,7 +1943,6 @@ rec {
|
|||
version = "2.0.0";
|
||||
edition = "2015";
|
||||
sha256 = "004y0nzmpfdrhz251278341z6ql34iv1k6dp1h6af7d6nd6jwc30";
|
||||
libName = "maybe_uninit";
|
||||
authors = [
|
||||
"est31 <MTest31@outlook.com>"
|
||||
"The Rust Project Developers"
|
||||
|
@ -2102,7 +2082,6 @@ rec {
|
|||
version = "0.6.8";
|
||||
edition = "2015";
|
||||
sha256 = "1w36w09gd8as1mah80wdy0kgpshmphmljj68gij34hvdnag6kjxg";
|
||||
libName = "mio_uds";
|
||||
authors = [
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
];
|
||||
|
@ -2159,7 +2138,6 @@ rec {
|
|||
version = "0.2.11";
|
||||
edition = "2015";
|
||||
sha256 = "0bmrlg0fmzxaycjpkgkchi93av07v2yf9k33gc12ca9gqdrn28h7";
|
||||
libName = "native_tls";
|
||||
authors = [
|
||||
"Steven Fackler <sfackler@gmail.com>"
|
||||
];
|
||||
|
@ -2293,7 +2271,6 @@ rec {
|
|||
version = "0.1.43";
|
||||
edition = "2015";
|
||||
sha256 = "0c9whknf2dm74a3cqirafy6gj83a76gl56g4v3g19k6lkwz13rcj";
|
||||
libName = "num_traits";
|
||||
authors = [
|
||||
"The Rust Project Developers"
|
||||
];
|
||||
|
@ -2310,7 +2287,6 @@ rec {
|
|||
version = "0.2.18";
|
||||
edition = "2018";
|
||||
sha256 = "0yjib8p2p9kzmaz48xwhs69w5dh1wipph9jgnillzd2x33jz03fs";
|
||||
libName = "num_traits";
|
||||
authors = [
|
||||
"The Rust Project Developers"
|
||||
];
|
||||
|
@ -2451,7 +2427,6 @@ rec {
|
|||
edition = "2018";
|
||||
sha256 = "173xxvfc63rr5ybwqwylsir0vq6xsj4kxiv4hmg4c3vscdmncj59";
|
||||
procMacro = true;
|
||||
libName = "openssl_macros";
|
||||
dependencies = [
|
||||
{
|
||||
name = "proc-macro2";
|
||||
|
@ -2474,7 +2449,6 @@ rec {
|
|||
version = "0.1.5";
|
||||
edition = "2015";
|
||||
sha256 = "1kq18qm48rvkwgcggfkqq6pm948190czqc94d6bm2sir5hq1l0gz";
|
||||
libName = "openssl_probe";
|
||||
authors = [
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
];
|
||||
|
@ -2487,7 +2461,6 @@ rec {
|
|||
links = "openssl";
|
||||
sha256 = "1zwd35nc5bq7m26vjsmja4hxf3fzk389blgpmhpzr3p78krv18nx";
|
||||
build = "build/main.rs";
|
||||
libName = "openssl_sys";
|
||||
authors = [
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
"Steven Fackler <sfackler@gmail.com>"
|
||||
|
@ -2682,7 +2655,12 @@ rec {
|
|||
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 = [
|
||||
"eeeeeta <eta@theta.eu.org>"
|
||||
];
|
||||
|
@ -2745,7 +2723,6 @@ rec {
|
|||
version = "0.3.30";
|
||||
edition = "2015";
|
||||
sha256 = "1v07557dj1sa0aly9c90wsygc0i8xv5vnmyv0g94lpkvj8qb4cfj";
|
||||
libName = "pkg_config";
|
||||
authors = [
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
];
|
||||
|
@ -2756,7 +2733,6 @@ rec {
|
|||
version = "0.2.17";
|
||||
edition = "2018";
|
||||
sha256 = "1pp6g52aw970adv3x2310n7glqnji96z0a9wiamzw89ibf0ayh2v";
|
||||
libName = "ppv_lite86";
|
||||
authors = [
|
||||
"The CryptoCorrosion Contributors"
|
||||
];
|
||||
|
@ -2788,7 +2764,6 @@ rec {
|
|||
version = "1.0.78";
|
||||
edition = "2021";
|
||||
sha256 = "1bjak27pqdn4f4ih1c9nr3manzyavsgqmf76ygw9k76q8pb2lhp2";
|
||||
libName = "proc_macro2";
|
||||
authors = [
|
||||
"David Tolnay <dtolnay@gmail.com>"
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
|
@ -2809,7 +2784,6 @@ rec {
|
|||
version = "1.2.3";
|
||||
edition = "2015";
|
||||
sha256 = "1q6za3v78hsspisc197bg3g7rpc989qycy8ypr8ap8igv10ikl51";
|
||||
libName = "quick_error";
|
||||
authors = [
|
||||
"Paul Colomiets <paul@colomiets.name>"
|
||||
"Colin Kiegel <kiegel@gmx.de>"
|
||||
|
@ -3086,7 +3060,6 @@ rec {
|
|||
version = "0.4.6";
|
||||
edition = "2021";
|
||||
sha256 = "1spaq7y4im7s56d1gxa2hi4hzf6dwswb1bv8xyavzya7k25kpf46";
|
||||
libName = "regex_automata";
|
||||
authors = [
|
||||
"The Rust Project Developers"
|
||||
"Andrew Gallant <jamslam@gmail.com>"
|
||||
|
@ -3147,7 +3120,6 @@ rec {
|
|||
version = "0.8.2";
|
||||
edition = "2021";
|
||||
sha256 = "17rd2s8xbiyf6lb4aj2nfi44zqlj98g2ays8zzj2vfs743k79360";
|
||||
libName = "regex_syntax";
|
||||
authors = [
|
||||
"The Rust Project Developers"
|
||||
"Andrew Gallant <jamslam@gmail.com>"
|
||||
|
@ -3175,7 +3147,6 @@ rec {
|
|||
version = "0.1.23";
|
||||
edition = "2015";
|
||||
sha256 = "0xnbk2bmyzshacjm2g1kd4zzv2y2az14bw3sjccq5qkpmsfvn9nn";
|
||||
libName = "rustc_demangle";
|
||||
authors = [
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
];
|
||||
|
@ -3352,7 +3323,6 @@ rec {
|
|||
version = "0.2.7";
|
||||
edition = "2018";
|
||||
sha256 = "068s77f9xcpvzl70nsxk8750dzzc6f9pixajhd979815cj0ndg1w";
|
||||
libName = "scheduled_thread_pool";
|
||||
authors = [
|
||||
"Steven Fackler <sfackler@gmail.com>"
|
||||
];
|
||||
|
@ -3369,7 +3339,6 @@ rec {
|
|||
version = "0.1.2";
|
||||
edition = "2015";
|
||||
sha256 = "0a2bn9d2mb07c6l16sadijy4p540g498zddfxyiq4rsqpwrglbrk";
|
||||
libName = "scoped_tls";
|
||||
authors = [
|
||||
"Alex Crichton <alex@alexcrichton.com>"
|
||||
];
|
||||
|
@ -3392,7 +3361,6 @@ rec {
|
|||
version = "2.9.2";
|
||||
edition = "2021";
|
||||
sha256 = "1pplxk15s5yxvi2m1sz5xfmjibp96cscdcl432w9jzbk0frlzdh5";
|
||||
libName = "security_framework";
|
||||
authors = [
|
||||
"Steven Fackler <sfackler@gmail.com>"
|
||||
"Kornel <kornel@geekhood.net>"
|
||||
|
@ -3439,7 +3407,6 @@ rec {
|
|||
version = "2.9.1";
|
||||
edition = "2021";
|
||||
sha256 = "0yhciwlsy9dh0ps1gw3197kvyqx1bvc4knrhiznhid6kax196cp9";
|
||||
libName = "security_framework_sys";
|
||||
authors = [
|
||||
"Steven Fackler <sfackler@gmail.com>"
|
||||
"Kornel <kornel@geekhood.net>"
|
||||
|
@ -3491,7 +3458,6 @@ rec {
|
|||
version = "0.7.0";
|
||||
edition = "2015";
|
||||
sha256 = "18vhypw6zgccnrlm5ps1pwa0khz7ry927iznpr88b87cagr1v2iq";
|
||||
libName = "semver_parser";
|
||||
authors = [
|
||||
"Steve Klabnik <steve@steveklabnik.com>"
|
||||
];
|
||||
|
@ -3553,7 +3519,6 @@ rec {
|
|||
version = "0.8.2";
|
||||
edition = "2015";
|
||||
sha256 = "0lv1qwis9rr767xv9w27y1g1r71ayf02k2wkypawwlkxsrd3r0qb";
|
||||
libName = "serde_hjson";
|
||||
authors = [
|
||||
"Christian Zangl <laktak@cdak.net>"
|
||||
];
|
||||
|
@ -4057,7 +4022,6 @@ rec {
|
|||
version = "0.1.2";
|
||||
edition = "2015";
|
||||
sha256 = "0swpfngcb331lzggk6j68yks6w0bnw35vpl4hv8p03msc239kci5";
|
||||
libName = "tokio_codec";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
"Bryan Burgers <bryan@burgers.io>"
|
||||
|
@ -4083,7 +4047,6 @@ rec {
|
|||
version = "0.1.18";
|
||||
edition = "2015";
|
||||
sha256 = "1m7zij19xy13wmlb7a1bghvi4vs8s1hlyggnaajvqfj46i9kkcc7";
|
||||
libName = "tokio_core";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4140,7 +4103,6 @@ rec {
|
|||
version = "0.1.7";
|
||||
edition = "2015";
|
||||
sha256 = "03p2w316ha0irgzvy37njx9hl71133gcrmrq4801w4rzm0r0xpmi";
|
||||
libName = "tokio_current_thread";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4161,7 +4123,6 @@ rec {
|
|||
version = "0.1.10";
|
||||
edition = "2015";
|
||||
sha256 = "0w8n78d2vixs1vghqc4wy9w0d1h6qkli51c1yzhzbns88n7inbgv";
|
||||
libName = "tokio_executor";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4182,7 +4143,6 @@ rec {
|
|||
version = "0.1.7";
|
||||
edition = "2015";
|
||||
sha256 = "1x3gkdi5x7bjlzzg7qlnymb549rb546p0nykxsh04qyaw0314yi9";
|
||||
libName = "tokio_fs";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4213,7 +4173,6 @@ rec {
|
|||
version = "0.1.13";
|
||||
edition = "2015";
|
||||
sha256 = "0x06zyzinans1pn90g6i150lgixijdf1cg8y2gipjd09ms58dz2p";
|
||||
libName = "tokio_io";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4238,7 +4197,6 @@ rec {
|
|||
version = "1.1.0";
|
||||
edition = "2015";
|
||||
sha256 = "0mg1i39cl8x32wxwbn74hlirks8a6f3g0gfzkb0n0zwbxwvc9gs1";
|
||||
libName = "tokio_mockstream";
|
||||
authors = [
|
||||
"Aaron Weiss <awe@pdgn.co>"
|
||||
];
|
||||
|
@ -4259,7 +4217,6 @@ rec {
|
|||
version = "0.1.12";
|
||||
edition = "2015";
|
||||
sha256 = "0l8klnd41q55f3ialzz0lb7s5bfwa38nh86sa9vai2xsqh75kg09";
|
||||
libName = "tokio_reactor";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4322,7 +4279,6 @@ rec {
|
|||
version = "0.1.8";
|
||||
edition = "2015";
|
||||
sha256 = "1vkxz0y7qf9sshfpxvn506pvxy4vza8piavd8p64y5n85cam1zpd";
|
||||
libName = "tokio_sync";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4343,7 +4299,6 @@ rec {
|
|||
version = "0.1.4";
|
||||
edition = "2015";
|
||||
sha256 = "0whzqnkyfym1ipzznibyjl3j9281walq4n0q5xs2xdz3cvniipwq";
|
||||
libName = "tokio_tcp";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4380,7 +4335,6 @@ rec {
|
|||
version = "0.1.18";
|
||||
edition = "2015";
|
||||
sha256 = "12azq8jm71b7hdm72pxrgqm2879bn6b0fcdl1s7i2k3qh5jhnwnz";
|
||||
libName = "tokio_threadpool";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4429,7 +4383,6 @@ rec {
|
|||
version = "0.1.2";
|
||||
edition = "2015";
|
||||
sha256 = "1z0fwbh5bm6hdbfm0y17fa5l60na7fl9vbca7wdzz1vp0f0ffcb1";
|
||||
libName = "tokio_timer";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4450,7 +4403,6 @@ rec {
|
|||
version = "0.2.13";
|
||||
edition = "2015";
|
||||
sha256 = "15pjjj6daks3sii8p24a509b0dapl2kyk740nwfgz59w64nly14k";
|
||||
libName = "tokio_timer";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4479,7 +4431,6 @@ rec {
|
|||
version = "0.2.1";
|
||||
edition = "2015";
|
||||
sha256 = "0z0gmvv7jrpan6y42p5f5wd48rqcd96igp592w1c5cr573c8qjrm";
|
||||
libName = "tokio_tls";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4504,7 +4455,6 @@ rec {
|
|||
version = "0.1.6";
|
||||
edition = "2015";
|
||||
sha256 = "10hdcnxdp0dxvj44jl1nrrpg30jbisqclbqs0f5w6f8bc47b3872";
|
||||
libName = "tokio_udp";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4545,7 +4495,6 @@ rec {
|
|||
version = "0.2.7";
|
||||
edition = "2015";
|
||||
sha256 = "1q74sydx22l4mkmrz02l4i5swddwr1pryxvhrzdwkj0i86na8mxb";
|
||||
libName = "tokio_uds";
|
||||
authors = [
|
||||
"Carl Lerche <me@carllerche.com>"
|
||||
];
|
||||
|
@ -4614,7 +4563,6 @@ rec {
|
|||
version = "1.0.12";
|
||||
edition = "2018";
|
||||
sha256 = "0jzf1znfpb2gx8nr8mvmyqs1crnv79l57nxnbiszc7xf7ynbjm1k";
|
||||
libName = "unicode_ident";
|
||||
authors = [
|
||||
"David Tolnay <dtolnay@gmail.com>"
|
||||
];
|
||||
|
@ -4625,7 +4573,6 @@ rec {
|
|||
version = "0.2.4";
|
||||
edition = "2015";
|
||||
sha256 = "131dfzf7d8fsr1ivch34x42c2d1ik5ig3g78brxncnn0r1sdyqpr";
|
||||
libName = "unicode_xid";
|
||||
authors = [
|
||||
"erick.tryzelaar <erick.tryzelaar@gmail.com>"
|
||||
"kwantam <kwantam@gmail.com>"
|
||||
|
@ -4676,7 +4623,6 @@ rec {
|
|||
version = "0.2.92";
|
||||
edition = "2018";
|
||||
sha256 = "1a4mcw13nsk3fr8fxjzf9kk1wj88xkfsmnm0pjraw01ryqfm7qjb";
|
||||
libName = "wasm_bindgen";
|
||||
authors = [
|
||||
"The wasm-bindgen Developers"
|
||||
];
|
||||
|
@ -4708,7 +4654,6 @@ rec {
|
|||
version = "0.2.92";
|
||||
edition = "2018";
|
||||
sha256 = "1nj7wxbi49f0rw9d44rjzms26xlw6r76b2mrggx8jfbdjrxphkb1";
|
||||
libName = "wasm_bindgen_backend";
|
||||
authors = [
|
||||
"The wasm-bindgen Developers"
|
||||
];
|
||||
|
@ -4754,7 +4699,6 @@ rec {
|
|||
edition = "2018";
|
||||
sha256 = "09npa1srjjabd6nfph5yc03jb26sycjlxhy0c2a1pdrpx4yq5y51";
|
||||
procMacro = true;
|
||||
libName = "wasm_bindgen_macro";
|
||||
authors = [
|
||||
"The wasm-bindgen Developers"
|
||||
];
|
||||
|
@ -4779,7 +4723,6 @@ rec {
|
|||
version = "0.2.92";
|
||||
edition = "2018";
|
||||
sha256 = "1dqv2xs8zcyw4kjgzj84bknp2h76phmsb3n7j6hn396h4ssifkz9";
|
||||
libName = "wasm_bindgen_macro_support";
|
||||
authors = [
|
||||
"The wasm-bindgen Developers"
|
||||
];
|
||||
|
@ -4818,7 +4761,6 @@ rec {
|
|||
edition = "2018";
|
||||
links = "wasm_bindgen";
|
||||
sha256 = "15kyavsrna2cvy30kg03va257fraf9x00ny554vxngvpyaa0q6dg";
|
||||
libName = "wasm_bindgen_shared";
|
||||
authors = [
|
||||
"The wasm-bindgen Developers"
|
||||
];
|
||||
|
@ -4846,12 +4788,12 @@ rec {
|
|||
{
|
||||
name = "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";
|
||||
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 = {
|
||||
|
@ -4875,7 +4817,6 @@ rec {
|
|||
version = "0.4.0";
|
||||
edition = "2015";
|
||||
sha256 = "1dmpa6mvcvzz16zg6d5vrfy4bxgg541wxrcip7cnshi06v38ffxc";
|
||||
libName = "winapi_i686_pc_windows_gnu";
|
||||
authors = [
|
||||
"Peter Atashian <retep998@gmail.com>"
|
||||
];
|
||||
|
@ -4886,7 +4827,6 @@ rec {
|
|||
version = "0.1.6";
|
||||
edition = "2021";
|
||||
sha256 = "15i5lm39wd44004i9d5qspry2cynkrpvwzghr6s2c3dsk28nz7pj";
|
||||
libName = "winapi_util";
|
||||
authors = [
|
||||
"Andrew Gallant <jamslam@gmail.com>"
|
||||
];
|
||||
|
@ -4905,7 +4845,6 @@ rec {
|
|||
version = "0.4.0";
|
||||
edition = "2015";
|
||||
sha256 = "0gqq64czqb64kskjryj8isp62m2sgvx25yyj3kpc2myh85w24bki";
|
||||
libName = "winapi_x86_64_pc_windows_gnu";
|
||||
authors = [
|
||||
"Peter Atashian <retep998@gmail.com>"
|
||||
];
|
||||
|
@ -4916,7 +4855,6 @@ rec {
|
|||
version = "0.52.0";
|
||||
edition = "2021";
|
||||
sha256 = "1nc3qv7sy24x0nlnb32f7alzpd6f72l4p24vl65vydbyil669ark";
|
||||
libName = "windows_core";
|
||||
authors = [
|
||||
"Microsoft"
|
||||
];
|
||||
|
@ -4934,7 +4872,6 @@ rec {
|
|||
version = "0.52.0";
|
||||
edition = "2021";
|
||||
sha256 = "0gd3v4ji88490zgb6b5mq5zgbvwv7zx1ibn8v3x83rwcdbryaar8";
|
||||
libName = "windows_sys";
|
||||
authors = [
|
||||
"Microsoft"
|
||||
];
|
||||
|
@ -5182,7 +5119,6 @@ rec {
|
|||
version = "0.48.5";
|
||||
edition = "2018";
|
||||
sha256 = "034ljxqshifs1lan89xwpcy1hp0lhdh4b5n0d2z4fwjx2piacbws";
|
||||
libName = "windows_targets";
|
||||
authors = [
|
||||
"Microsoft"
|
||||
];
|
||||
|
@ -5190,7 +5126,7 @@ rec {
|
|||
{
|
||||
name = "windows_aarch64_gnullvm";
|
||||
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";
|
||||
|
@ -5215,7 +5151,7 @@ rec {
|
|||
{
|
||||
name = "windows_x86_64_gnullvm";
|
||||
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";
|
||||
|
@ -5230,7 +5166,6 @@ rec {
|
|||
version = "0.52.4";
|
||||
edition = "2021";
|
||||
sha256 = "06sdd7fin3dj9cmlg6n1dw0n1l10jhn9b8ckz1cqf0drb9z7plvx";
|
||||
libName = "windows_targets";
|
||||
authors = [
|
||||
"Microsoft"
|
||||
];
|
||||
|
@ -5238,7 +5173,7 @@ rec {
|
|||
{
|
||||
name = "windows_aarch64_gnullvm";
|
||||
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";
|
||||
|
@ -5263,7 +5198,7 @@ rec {
|
|||
{
|
||||
name = "windows_x86_64_gnullvm";
|
||||
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";
|
||||
|
@ -5441,7 +5376,6 @@ rec {
|
|||
version = "0.4.5";
|
||||
edition = "2018";
|
||||
sha256 = "118wbqrr4n6wgk5rjjnlrdlahawlxc1bdsx146mwk8f79in97han";
|
||||
libName = "yaml_rust";
|
||||
authors = [
|
||||
"Yuheng Chen <yuhengchen@sensetime.com>"
|
||||
];
|
||||
|
@ -5468,11 +5402,14 @@ rec {
|
|||
fuchsia = true;
|
||||
test = false;
|
||||
|
||||
inherit (platform.rust.platform)
|
||||
arch
|
||||
os
|
||||
vendor;
|
||||
family = platform.rust.platform.target-family;
|
||||
/* We are choosing an arbitrary rust version to grab `lib` from,
|
||||
which is unfortunate, but `lib` has been version-agnostic the
|
||||
whole time so this is good enough for now.
|
||||
*/
|
||||
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";
|
||||
endian =
|
||||
if platform.parsed.cpu.significantByte.name == "littleEndian"
|
||||
|
@ -5549,7 +5486,6 @@ rec {
|
|||
(
|
||||
_: {
|
||||
buildTests = true;
|
||||
release = false;
|
||||
}
|
||||
);
|
||||
# If the user hasn't set any pre/post commands, we don't want to
|
||||
|
@ -5562,41 +5498,41 @@ rec {
|
|||
testPostRun
|
||||
]);
|
||||
in
|
||||
pkgs.stdenvNoCC.mkDerivation {
|
||||
name = "run-tests-${testCrate.name}";
|
||||
pkgs.runCommand "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 = ''
|
||||
set -e
|
||||
export RUST_BACKTRACE=1
|
||||
# build outputs
|
||||
testRoot=target/debug
|
||||
mkdir -p $testRoot
|
||||
|
||||
# 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 .
|
||||
|
||||
# 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
|
||||
'';
|
||||
};
|
||||
# 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"
|
||||
{
|
||||
|
@ -5705,7 +5641,7 @@ rec {
|
|||
let
|
||||
self = {
|
||||
crates = lib.mapAttrs (packageId: value: buildByPackageIdForPkgsImpl self pkgs packageId) crateConfigs;
|
||||
target = makeTarget stdenv.hostPlatform;
|
||||
target = makeTarget pkgs.stdenv.hostPlatform;
|
||||
build = mkBuiltByPackageIdByPkgs pkgs.buildPackages;
|
||||
};
|
||||
in
|
||||
|
@ -5780,6 +5716,8 @@ rec {
|
|||
buildRustCrateForPkgsFunc pkgs
|
||||
(
|
||||
crateConfig // {
|
||||
# https://github.com/NixOS/nixpkgs/issues/218712
|
||||
dontStrip = stdenv.hostPlatform.isDarwin;
|
||||
src = crateConfig.src or (
|
||||
pkgs.fetchurl rec {
|
||||
name = "${crateConfig.crateName}-${crateConfig.version}.tar.gz";
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
{ makeSetupHook }:
|
||||
|
||||
makeSetupHook
|
||||
{
|
||||
makeSetupHook {
|
||||
name = "rules_java_bazel_hook";
|
||||
substitutions = {
|
||||
local_java = ./local_java;
|
||||
|
|
|
@ -37,9 +37,7 @@ let
|
|||
cp -R . $out
|
||||
'';
|
||||
};
|
||||
in
|
||||
makeSetupHook
|
||||
{
|
||||
in makeSetupHook {
|
||||
name = "bazelbuild-rules_nodejs-5-hook";
|
||||
propagatedBuildInputs = [
|
||||
nodejs
|
||||
|
|
|
@ -16,16 +16,12 @@
|
|||
|
||||
let
|
||||
cleanAttrs = lib.flip removeAttrs [
|
||||
"bazelTargets"
|
||||
"depsHash"
|
||||
"extraCacheInstall"
|
||||
"extraBuildSetup"
|
||||
"extraBuildInstall"
|
||||
"bazelTargets" "depsHash" "extraCacheInstall" "extraBuildSetup" "extraBuildInstall"
|
||||
];
|
||||
attrs = cleanAttrs baseAttrs;
|
||||
|
||||
base = stdenv.mkDerivation (attrs // {
|
||||
nativeBuildInputs = (attrs.nativeBuildInputs or [ ]) ++ [
|
||||
nativeBuildInputs = (attrs.nativeBuildInputs or []) ++ [
|
||||
bazel
|
||||
];
|
||||
|
||||
|
@ -73,7 +69,7 @@ let
|
|||
|
||||
inherit cache;
|
||||
|
||||
nativeBuildInputs = (base.nativeBuildInputs or [ ]) ++ [
|
||||
nativeBuildInputs = (base.nativeBuildInputs or []) ++ [
|
||||
coreutils
|
||||
];
|
||||
|
||||
|
@ -106,5 +102,4 @@ let
|
|||
runHook postInstall
|
||||
'';
|
||||
});
|
||||
in
|
||||
build
|
||||
in 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`.
|
||||
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.
|
||||
mkStep = { headBranch, parentTargetMap, targetDepMap, target, cancelOnBuildFailing }:
|
||||
|
@ -227,19 +231,7 @@ rec {
|
|||
buildEnabled = elem "build" enabledPhases;
|
||||
|
||||
# Dependency relations between the `drvTargets`. See also //nix/dependency-analyzer.
|
||||
targetDepMap =
|
||||
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);
|
||||
targetDepMap = dependency-analyzer (dependency-analyzer.drvsToPaths drvTargets);
|
||||
|
||||
# Convert a target into all of its steps, separated by build
|
||||
# phase (as phases end up in different chunks).
|
||||
|
|
|
@ -259,12 +259,12 @@ in
|
|||
, args
|
||||
, filter ? (_parts: x: x)
|
||||
, scopedArgs ? { }
|
||||
, rootDir ? true
|
||||
}:
|
||||
readTree {
|
||||
inherit args scopedArgs rootDir;
|
||||
inherit args scopedArgs;
|
||||
argsFilter = filter;
|
||||
initPath = path;
|
||||
rootDir = true;
|
||||
parts = [ ];
|
||||
};
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ let
|
|||
+ pipe tree [
|
||||
(mapAttrsToList (k: v:
|
||||
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
|
||||
writeTreeAtPath (path + "/" + k) v
|
||||
else
|
||||
|
|
|
@ -23,6 +23,7 @@ let
|
|||
{ name
|
||||
, dependencies ? [ ]
|
||||
, doCheck ? true
|
||||
,
|
||||
}: src:
|
||||
(if doCheck then testRustSimple else pkgs.lib.id)
|
||||
(pkgs.buildRustCrate ({
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# 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.nix.buildGo.program {
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
//
|
||||
// Gerrit (ref-updated) hook:
|
||||
// - Trigger Buildkite CI builds
|
||||
// - Trigger SourceGraph repository index updates
|
||||
//
|
||||
// Buildkite (post-command) hook:
|
||||
// - Submit CL verification status back to Gerrit
|
||||
|
@ -54,6 +55,10 @@ type config struct {
|
|||
BuildkiteProject string `json:"buildkiteProject"`
|
||||
BuildkiteToken string `json:"buildkiteToken"`
|
||||
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
|
||||
|
@ -149,6 +154,11 @@ func loadConfig() (*config, error) {
|
|||
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 == "" {
|
||||
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
|
||||
}
|
||||
|
||||
// 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
|
||||
// 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
|
||||
|
@ -428,6 +458,13 @@ func gerritHookMain(cfg *config, log *syslog.Writer, trigger *buildTrigger) {
|
|||
if err != nil {
|
||||
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) {
|
||||
|
|
|
@ -8,9 +8,7 @@ terraform {
|
|||
}
|
||||
|
||||
backend "s3" {
|
||||
endpoints = {
|
||||
s3 = "https://objects.dc-sto1.glesys.net"
|
||||
}
|
||||
endpoint = "https://objects.dc-sto1.glesys.net"
|
||||
bucket = "tvl-state"
|
||||
key = "terraform/tvl-buildkite"
|
||||
region = "glesys"
|
||||
|
@ -18,8 +16,6 @@ terraform {
|
|||
skip_credentials_validation = true
|
||||
skip_region_validation = 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]]
|
||||
name = "aho-corasick"
|
||||
version = "1.1.3"
|
||||
version = "1.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
||||
checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.86"
|
||||
version = "1.0.75"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
||||
checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
|
@ -25,9 +25,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
|
|||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.6.0"
|
||||
version = "2.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
|
||||
checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
|
||||
|
||||
[[package]]
|
||||
name = "build-env"
|
||||
|
@ -37,11 +37,11 @@ checksum = "e068f31938f954b695423ecaf756179597627d0828c0d3e48c0a722a8b23cf9e"
|
|||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.1.15"
|
||||
version = "1.0.84"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6"
|
||||
checksum = "0f8e7c90afad890484a21653d08b6e209ae34770fb5ee298f9c699fcc1e5c856"
|
||||
dependencies = [
|
||||
"shlex",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -73,9 +73,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "curl"
|
||||
version = "0.4.46"
|
||||
version = "0.4.44"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6"
|
||||
checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
|
||||
dependencies = [
|
||||
"curl-sys",
|
||||
"libc",
|
||||
|
@ -83,14 +83,14 @@ dependencies = [
|
|||
"openssl-sys",
|
||||
"schannel",
|
||||
"socket2",
|
||||
"windows-sys 0.52.0",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
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"
|
||||
checksum = "8af10b986114528fcdc4b63b6f5f021b7057618411046a4de2ba0f0149a097bf"
|
||||
checksum = "b4a0d18d88360e374b16b2273c832b5e57258ffc1d4aa4f96b108e0738d5752f"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
|
@ -98,14 +98,14 @@ dependencies = [
|
|||
"openssl-sys",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "deranged"
|
||||
version = "0.3.11"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
|
||||
checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
|
||||
dependencies = [
|
||||
"powerfmt",
|
||||
"serde",
|
||||
|
@ -113,9 +113,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "env_logger"
|
||||
version = "0.10.2"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580"
|
||||
checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
|
||||
dependencies = [
|
||||
"humantime",
|
||||
"is-terminal",
|
||||
|
@ -124,6 +124,16 @@ dependencies = [
|
|||
"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]]
|
||||
name = "foreign-types"
|
||||
version = "0.3.2"
|
||||
|
@ -168,9 +178,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
|
|||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.4.0"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
|
||||
checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
|
||||
|
||||
[[package]]
|
||||
name = "humantime"
|
||||
|
@ -180,20 +190,20 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
|
|||
|
||||
[[package]]
|
||||
name = "is-terminal"
|
||||
version = "0.4.13"
|
||||
version = "0.4.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b"
|
||||
checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
"windows-sys 0.52.0",
|
||||
"rustix",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.11"
|
||||
version = "1.0.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
|
||||
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
|
||||
|
||||
[[package]]
|
||||
name = "journaldriver"
|
||||
|
@ -214,15 +224,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.5.0"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.158"
|
||||
version = "0.2.150"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
|
||||
checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
|
||||
|
||||
[[package]]
|
||||
name = "libsystemd-sys"
|
||||
|
@ -237,9 +247,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "libz-sys"
|
||||
version = "1.1.20"
|
||||
version = "1.1.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472"
|
||||
checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
|
@ -248,10 +258,16 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.22"
|
||||
name = "linux-raw-sys"
|
||||
version = "0.4.11"
|
||||
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]]
|
||||
name = "medallion"
|
||||
|
@ -269,27 +285,21 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.7.4"
|
||||
version = "2.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||
|
||||
[[package]]
|
||||
name = "num-conv"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
|
||||
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.19.0"
|
||||
version = "1.18.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
|
||||
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
|
||||
|
||||
[[package]]
|
||||
name = "openssl"
|
||||
version = "0.10.66"
|
||||
version = "0.10.59"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1"
|
||||
checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cfg-if",
|
||||
|
@ -319,9 +329,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
|
|||
|
||||
[[package]]
|
||||
name = "openssl-sys"
|
||||
version = "0.9.103"
|
||||
version = "0.9.95"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6"
|
||||
checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
|
@ -331,9 +341,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pkg-config"
|
||||
version = "0.3.30"
|
||||
version = "0.3.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
|
||||
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
|
||||
|
||||
[[package]]
|
||||
name = "powerfmt"
|
||||
|
@ -343,27 +353,27 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
|||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.86"
|
||||
version = "1.0.69"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
|
||||
checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.37"
|
||||
version = "1.0.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
|
||||
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.10.6"
|
||||
version = "1.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
|
||||
checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
|
@ -373,9 +383,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "regex-automata"
|
||||
version = "0.4.7"
|
||||
version = "0.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
|
||||
checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
|
@ -384,39 +394,52 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.8.4"
|
||||
version = "0.8.2"
|
||||
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]]
|
||||
name = "ryu"
|
||||
version = "1.0.18"
|
||||
version = "1.0.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
|
||||
checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
|
||||
|
||||
[[package]]
|
||||
name = "schannel"
|
||||
version = "0.1.23"
|
||||
version = "0.1.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
|
||||
checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
|
||||
dependencies = [
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.209"
|
||||
version = "1.0.192"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09"
|
||||
checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.209"
|
||||
version = "1.0.192"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170"
|
||||
checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -425,37 +448,30 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.127"
|
||||
version = "1.0.108"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad"
|
||||
checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"memchr",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shlex"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.5.7"
|
||||
version = "0.4.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
|
||||
checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.52.0",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.77"
|
||||
version = "2.0.39"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
|
||||
checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -478,22 +494,21 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "termcolor"
|
||||
version = "1.4.1"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
|
||||
checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
|
||||
dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "time"
|
||||
version = "0.3.36"
|
||||
version = "0.3.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
|
||||
checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
|
||||
dependencies = [
|
||||
"deranged",
|
||||
"itoa",
|
||||
"num-conv",
|
||||
"powerfmt",
|
||||
"serde",
|
||||
"time-core",
|
||||
|
@ -508,11 +523,10 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
|
|||
|
||||
[[package]]
|
||||
name = "time-macros"
|
||||
version = "0.2.18"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
|
||||
checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
|
||||
dependencies = [
|
||||
"num-conv",
|
||||
"time-core",
|
||||
]
|
||||
|
||||
|
@ -534,43 +548,55 @@ version = "0.2.15"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
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]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.9"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
||||
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
|
||||
dependencies = [
|
||||
"windows-sys 0.59.0",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.52.0"
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.59.0"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
||||
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.52.6"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
||||
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm",
|
||||
"windows_aarch64_msvc",
|
||||
"windows_i686_gnu",
|
||||
"windows_i686_gnullvm",
|
||||
"windows_i686_msvc",
|
||||
"windows_x86_64_gnu",
|
||||
"windows_x86_64_gnullvm",
|
||||
|
@ -579,48 +605,42 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.52.6"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
||||
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.52.6"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
||||
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.52.6"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnullvm"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
||||
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.52.6"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
||||
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.52.6"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
||||
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.52.6"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
||||
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.52.6"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||
|
|
|
@ -10,29 +10,20 @@ terraform {
|
|||
}
|
||||
|
||||
backend "s3" {
|
||||
endpoints = {
|
||||
s3 = "https://objects.dc-sto1.glesys.net"
|
||||
}
|
||||
bucket = "tvl-state"
|
||||
key = "terraform/tvl-keycloak"
|
||||
region = "glesys"
|
||||
endpoint = "https://objects.dc-sto1.glesys.net"
|
||||
bucket = "tvl-state"
|
||||
key = "terraform/tvl-keycloak"
|
||||
region = "glesys"
|
||||
|
||||
skip_credentials_validation = true
|
||||
skip_region_validation = true
|
||||
skip_metadata_api_check = true
|
||||
skip_requesting_account_id = true
|
||||
skip_s3_checksum = true
|
||||
}
|
||||
}
|
||||
|
||||
provider "keycloak" {
|
||||
client_id = "terraform"
|
||||
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" {
|
||||
|
|
|
@ -22,13 +22,6 @@ resource "keycloak_ldap_user_federation" "tvl_ldap" {
|
|||
"inetOrgPerson",
|
||||
"organizationalPerson",
|
||||
]
|
||||
|
||||
lifecycle {
|
||||
# Without this, terraform wants to recreate the resource.
|
||||
ignore_changes = [
|
||||
delete_default_mappers
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
# 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" {
|
||||
alias = "github"
|
||||
provider_id = "github"
|
||||
client_id = "Iv23liXfGNIr7InMg5Uo"
|
||||
client_id = "6d7f8bb2e82bb6739556"
|
||||
client_secret = var.github_client_secret
|
||||
realm = keycloak_realm.tvl.id
|
||||
backchannel_supported = false
|
||||
|
|
|
@ -29,29 +29,13 @@ func Merge(in1 *map[string]interface{}, in2 *map[string]interface{}) *map[string
|
|||
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{})
|
||||
|
||||
for k, v := range *in1 {
|
||||
new[k] = v
|
||||
}
|
||||
|
||||
for k, v := range *in2 {
|
||||
if existing, ok := new[k]; ok {
|
||||
// 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
|
||||
}
|
||||
new[k] = v
|
||||
}
|
||||
|
||||
return &new
|
||||
|
|
|
@ -47,9 +47,6 @@ func TestMergeWithNilMap(t *testing.T) {
|
|||
func TestMergeMaps(t *testing.T) {
|
||||
map1 := map[string]interface{}{
|
||||
"foo": "bar",
|
||||
"baz": map[string]interface{}{
|
||||
"qux": "quux",
|
||||
},
|
||||
}
|
||||
|
||||
map2 := map[string]interface{}{
|
||||
|
@ -59,9 +56,6 @@ func TestMergeMaps(t *testing.T) {
|
|||
result := Merge(&map1, &map2)
|
||||
expected := map[string]interface{}{
|
||||
"foo": "bar",
|
||||
"baz": map[string]interface{}{
|
||||
"qux": "quux",
|
||||
},
|
||||
"bar": "baz",
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
(with depot.ops.machines; [
|
||||
sanduny
|
||||
whitby
|
||||
nixery-01
|
||||
]) ++
|
||||
|
||||
(with depot.users.tazjin.nixos; [
|
||||
|
|
|
@ -11,10 +11,8 @@ in
|
|||
imports = [
|
||||
(mod "atward.nix")
|
||||
(mod "cgit.nix")
|
||||
(mod "cheddar.nix")
|
||||
(mod "clbot.nix")
|
||||
(mod "gerrit-autosubmit.nix")
|
||||
(mod "harmonia.nix")
|
||||
(mod "irccat.nix")
|
||||
(mod "josh.nix")
|
||||
(mod "journaldriver.nix")
|
||||
|
@ -26,6 +24,7 @@ in
|
|||
(mod "paroxysm.nix")
|
||||
(mod "restic.nix")
|
||||
(mod "smtprelay.nix")
|
||||
(mod "sourcegraph.nix")
|
||||
(mod "teleirc.nix")
|
||||
(mod "tvl-buildkite.nix")
|
||||
(mod "tvl-slapd/default.nix")
|
||||
|
@ -230,17 +229,12 @@ in
|
|||
grafana.file = secretFile "grafana";
|
||||
irccat.file = secretFile "irccat";
|
||||
keycloak-db.file = secretFile "keycloak-db";
|
||||
nix-cache-priv.file = secretFile "nix-cache-priv";
|
||||
owothia.file = secretFile "owothia";
|
||||
panettone.file = secretFile "panettone";
|
||||
smtprelay.file = secretFile "smtprelay";
|
||||
teleirc.file = secretFile "teleirc";
|
||||
|
||||
nix-cache-priv = {
|
||||
file = secretFile "nix-cache-priv";
|
||||
mode = "0440";
|
||||
group = "harmonia";
|
||||
};
|
||||
|
||||
buildkite-agent-token = {
|
||||
file = secretFile "buildkite-agent-token";
|
||||
mode = "0440";
|
||||
|
@ -312,9 +306,6 @@ in
|
|||
agentCount = 32;
|
||||
};
|
||||
|
||||
# Run Markdown/code renderer
|
||||
services.depot.cheddar.enable = true;
|
||||
|
||||
# Start a local SMTP relay to Gmail (used by gerrit)
|
||||
services.depot.smtprelay = {
|
||||
enable = true;
|
||||
|
@ -383,6 +374,9 @@ in
|
|||
};
|
||||
|
||||
services.depot = {
|
||||
# Run a SourceGraph code search instance
|
||||
sourcegraph.enable = true;
|
||||
|
||||
# Run a livegrep code search instance
|
||||
livegrep.enable = true;
|
||||
|
||||
|
@ -483,14 +477,11 @@ in
|
|||
];
|
||||
};
|
||||
|
||||
# Run a Harmonia binary cache.
|
||||
#
|
||||
# TODO(tazjin): switch to upstream module after fix for Nix 2.3
|
||||
services.depot.harmonia = {
|
||||
services.nix-serve = {
|
||||
enable = true;
|
||||
signKeyPaths = [ (config.age.secretsDir + "/nix-cache-priv") ];
|
||||
settings.bind = "127.0.0.1:6443";
|
||||
settings.priority = 50;
|
||||
port = 6443;
|
||||
secretKeyFile = config.age.secretsDir + "/nix-cache-priv";
|
||||
bindAddress = "localhost";
|
||||
};
|
||||
|
||||
services.fail2ban.enable = true;
|
||||
|
@ -626,8 +617,7 @@ in
|
|||
http-port = 5925; # kycl
|
||||
hostname = "auth.tvl.fyi";
|
||||
http-relative-path = "/auth";
|
||||
proxy-headers = "xforwarded";
|
||||
http-enabled = true;
|
||||
proxy = "edge";
|
||||
};
|
||||
|
||||
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 = {
|
||||
inherit description;
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = "${mergeAndLaunch}";
|
||||
|
|
|
@ -97,12 +97,6 @@ in
|
|||
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
|
||||
# variety of backends.
|
||||
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 = {
|
||||
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_cert_path = null;
|
||||
|
|
|
@ -17,8 +17,13 @@
|
|||
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 / {
|
||||
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, ... }:
|
||||
|
||||
{
|
||||
|
@ -15,50 +13,17 @@
|
|||
forceSSL = true;
|
||||
|
||||
extraConfig = ''
|
||||
set $lineno "";
|
||||
|
||||
# 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 = / {
|
||||
return 301 https://cs.tvl.fyi/depot;
|
||||
}
|
||||
|
||||
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:"
|
||||
key: "pipeline-gen"
|
||||
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: |
|
||||
set -ue
|
||||
|
||||
|
@ -88,12 +88,10 @@ steps:
|
|||
continue_on_failure: true
|
||||
|
||||
# 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
|
||||
# and fetching all failed steps, then filtering out the ones that were
|
||||
# retried (retried jobs create new jobs, which would also show up in the
|
||||
# query).
|
||||
# and fetching the count of failed steps.
|
||||
#
|
||||
# This step must be :duck: (yes, really!) because the post-command
|
||||
# hook will inspect this name.
|
||||
|
@ -111,8 +109,8 @@ steps:
|
|||
readonly FAILED_JOBS=$(curl 'https://graphql.buildkite.com/v1' \
|
||||
--silent \
|
||||
-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 } } } } } }\"}" | \
|
||||
jq -r '.data.build.jobs.edges | map(select(.node.retried == false)) | length')
|
||||
-d "{\"query\": \"query BuildStatusQuery { build(uuid: \\\"$BUILDKITE_BUILD_ID\\\") { jobs(passed: false) { count } } }\"}" | \
|
||||
jq -r '.data.build.jobs.count')
|
||||
|
||||
echo "$$FAILED_JOBS build jobs failed."
|
||||
|
||||
|
|
Binary file not shown.
|
@ -21,11 +21,6 @@
|
|||
email = "root@gws.fyi";
|
||||
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";
|
||||
email = "matthewktromp@gmail.com";
|
||||
|
@ -41,21 +36,11 @@
|
|||
email = "me@cynthia.re";
|
||||
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";
|
||||
email = "edef@edef.eu";
|
||||
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";
|
||||
email = "ericvolp12@gmail.com";
|
||||
|
@ -126,16 +111,6 @@
|
|||
email = "lukegb@tvl.fyi";
|
||||
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";
|
||||
email = "noteed@gmail.com";
|
||||
|
@ -178,16 +153,6 @@
|
|||
email = "tazjin@tvl.su";
|
||||
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";
|
||||
email = "implr@hackerspace.pl";
|
||||
|
@ -289,29 +254,4 @@
|
|||
email = "toastal@posteo.net";
|
||||
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
|
||||
'';
|
||||
});
|
||||
depsHash = "sha256:114k8ck7056c415qncqmykwqrgprmxnaw3pdv50758mrgw7zdkpm";
|
||||
depsHash = "sha256-OS2kLXjtuWf+XRyQO2qGvEaAOvxqu20+gXR+fsCvpMc=";
|
||||
|
||||
patches = [
|
||||
./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
|
||||
, version
|
||||
, src
|
||||
, depsHash ? null
|
||||
, depsHash ? null
|
||||
, overlayPluginCmd ? ''
|
||||
cp -R "${src}" "$out/plugins/${name}"
|
||||
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";
|
||||
hash = "sha256-AuVO1Yys8BYqGHZI/adszCUg0JM2v4Td4fe26LdOPLM=";
|
||||
};
|
||||
depsHash = "sha256:10py3vq9sfq5j4gjrlxff01vp346jbcygry06x4zc26xgnf4pa9r";
|
||||
depsHash = "sha256-7SC4NXm4zGeJrYBqtEvcrLmsZmXEX8P21J0kwHBDBZ4=";
|
||||
postOverlayPlugin = ''
|
||||
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
|
||||
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
|
||||
{
|
||||
__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.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
|
||||
# which reference undefined CL-USER:*HTML-DTD* (!) which
|
||||
# unlike CLOSURE-HTML:*HTML-DTD* is not involved in the
|
||||
# package's operation.
|
||||
# packages operation.
|
||||
./no-double-defun.patch
|
||||
# Patches html-parser.lisp to look for the distributed
|
||||
# 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.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
|
||||
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.
|
||||
Work towards this happens intermittently.
|
||||
|
||||
WARNING:
|
||||
mime4cl currently doesn't have a _comprehensive_ test suite
|
||||
and decidedly lacks performance.
|
||||
Currently, the library is being worked on intermittently and not very well
|
||||
tested—**it may not work as expected**.
|
||||
|
||||
## Differences from the original version
|
||||
|
||||
* `//nix/buildLisp` is used as the build system. ASDF has been removed
|
||||
since it was untested (it should be reintroduced once mime4cl is
|
||||
“ready”).
|
||||
* `//nix/buildLisp` is used as the build system. ASDF is currently untested and
|
||||
may be broken.
|
||||
|
||||
* The dependency on [sclf](http://wcp.sdf-eu.org/software/#sclf) has been
|
||||
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)";
|
||||
};
|
||||
|
||||
# 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
|
||||
(car part)
|
||||
:external-format (flexi-streams:make-external-format
|
||||
;; TODO(sterni): sanitize charset before interning
|
||||
(intern (string-upcase (cdr part)) 'keyword))))
|
||||
(string part))))
|
||||
(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
|
||||
(:use :common-lisp)
|
||||
(:import-from :sb-posix :stat :stat-size)
|
||||
|
||||
(:export
|
||||
#:aif
|
||||
|
@ -63,6 +64,8 @@
|
|||
#:save-file-excursion
|
||||
#:read-file
|
||||
|
||||
#:file-size
|
||||
|
||||
#:promise
|
||||
#:make-promise
|
||||
#:lazy
|
||||
|
@ -265,6 +268,20 @@ ELEMENT-TYPE."
|
|||
seq)
|
||||
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
|
||||
|
||||
(defstruct promise
|
||||
|
|
130
third_party/lisp/mime4cl/mime.lisp
vendored
130
third_party/lisp/mime4cl/mime.lisp
vendored
|
@ -67,15 +67,6 @@
|
|||
(:documentation
|
||||
"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)
|
||||
((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
|
||||
;; mime-message. In that case we implicitly create a mime-multipart
|
||||
;; and assign to the body slot.
|
||||
(with-slots (real-message headers) part
|
||||
(with-slots (real-message) part
|
||||
(when (and (slot-boundp part 'real-message)
|
||||
(consp real-message))
|
||||
(setf 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))))
|
||||
(make-instance 'mime-multipart :parts real-message)))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
@ -201,25 +183,26 @@ because they are stored in dedicated slots in MIME-PART.")
|
|||
:test #'string=)
|
||||
(mime= (mime-body part1) (mime-body part2))))
|
||||
|
||||
(defgeneric mime-body-stream (mime-part)
|
||||
(:documentation
|
||||
"Returns stream that allows reading the decoded body of the given part.
|
||||
STREAM-ELEMENT-TYPE depends on part type."))
|
||||
(defun mime-body-stream (mime-part)
|
||||
(make-input-adapter (mime-body mime-part)))
|
||||
|
||||
;; TODO(sterni): Allow accessing underlying binary stream?
|
||||
;; Would need matching behavior with :7bit
|
||||
(defmethod mime-body-stream ((part mime-text))
|
||||
(let ((underlying-stream (call-next-method)))
|
||||
(if (eq (stream-element-type underlying-stream) 'character)
|
||||
underlying-stream
|
||||
(make-flexi-stream underlying-stream
|
||||
:external-format
|
||||
;; TODO(sterni): sanitize charset before interning
|
||||
(intern (string-upcase (mime-text-charset part))
|
||||
'keyword)))))
|
||||
|
||||
(defmethod mime-body-stream ((part mime-part))
|
||||
(make-input-adapter (mime-body part)))
|
||||
(defun mime-body-length (mime-part)
|
||||
(let ((body (mime-body mime-part)))
|
||||
;; here the stream type is missing on purpose, because we may not
|
||||
;; be able to size the length of a stream
|
||||
(etypecase body
|
||||
(string
|
||||
(length body))
|
||||
(vector
|
||||
(length body))
|
||||
(pathname
|
||||
(file-size body))
|
||||
(file-portion
|
||||
(with-open-stream (in (open-decoded-file-portion body))
|
||||
(loop
|
||||
for byte = (read-byte in nil)
|
||||
while byte
|
||||
count byte))))))
|
||||
|
||||
(defmacro with-input-from-mime-body-stream ((stream part) &body forms)
|
||||
`(with-open-stream (,stream (mime-body-stream ,part))
|
||||
|
@ -385,6 +368,10 @@ that may change this.")
|
|||
(:multipart mime-multipart)
|
||||
(: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)
|
||||
(:documentation
|
||||
"Output to STREAM one of the possible human-readable representation
|
||||
|
@ -484,18 +471,18 @@ separated by PART-BOUNDARY."
|
|||
(encode-mime-body part stream))
|
||||
|
||||
(defmethod encode-mime-part ((part mime-message) stream)
|
||||
;; tricky: we have to mix the MIME headers with the message headers, i.e.
|
||||
;; ENCODE-MIME-PART will output additional headers
|
||||
;; tricky: we have to mix the MIME headers with the message headers
|
||||
(dolist (h (mime-message-headers part))
|
||||
(unless (stringp (car h))
|
||||
(setf (car h)
|
||||
(string-capitalize (car h))))
|
||||
(format stream "~A: ~A~%"
|
||||
(car h) (cdr h)))
|
||||
(unless (or (string-starts-with "content-" (car h) #'string-equal)
|
||||
(string-equal "mime-version" (car h)))
|
||||
(format stream "~A: ~A~%"
|
||||
(car h) (cdr h))))
|
||||
(encode-mime-part (mime-body part) stream))
|
||||
|
||||
(defmethod encode-mime-part ((part mime-multipart) stream)
|
||||
(declare (ignore stream)) ; call-next-method
|
||||
;; choose a boundary if not already set
|
||||
(let* ((original-boundary (get-mime-type-parameter part :boundary))
|
||||
(boundary (choose-boundary (mime-parts part) original-boundary)))
|
||||
|
@ -690,10 +677,9 @@ body."
|
|||
(defun keywordify-encoding (string)
|
||||
"Return a keyword for a content transfer encoding string.
|
||||
Return STRING itself if STRING is an unkown encoding."
|
||||
(when string
|
||||
(aif (member string +known-encodings+ :test #'string-equal)
|
||||
(car it)
|
||||
string)))
|
||||
(aif (member string +known-encodings+ :test #'string-equal)
|
||||
(car it)
|
||||
string))
|
||||
|
||||
(defun header (name headers)
|
||||
(let ((elt (assoc name headers :test #'string-equal)))
|
||||
|
@ -728,9 +714,8 @@ guessed from the headers, use the *DEFAULT-TYPE*."
|
|||
:disposition (car disp)
|
||||
:disposition-parameters (cdr disp)
|
||||
:mime-version (hdr :mime-version)
|
||||
:encoding (or (keywordify-encoding
|
||||
(hdr :content-transfer-encoding))
|
||||
:7bit) ; default per RFC2045
|
||||
:encoding (keywordify-encoding
|
||||
(hdr :content-transfer-encoding))
|
||||
:description (hdr :content-description)
|
||||
:id (hdr :content-id)
|
||||
:allow-other-keys t)))
|
||||
|
@ -776,12 +761,12 @@ returns a MIME-MESSAGE object."
|
|||
(with-open-file (in msg :element-type '(unsigned-byte 8))
|
||||
(mime-message in)))
|
||||
|
||||
(defmethod mime-message ((msg stream))
|
||||
(mime-message (make-flexi-stream msg)))
|
||||
|
||||
(defmethod mime-message ((msg flexi-stream))
|
||||
(read-mime-message msg))
|
||||
|
||||
(defmethod mime-message ((msg stream))
|
||||
(read-mime-message (make-flexi-stream msg)))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(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))
|
||||
(case (mime-subtype part)
|
||||
(:alternative
|
||||
|
@ -868,11 +878,12 @@ returns a MIME-MESSAGE object."
|
|||
(loop
|
||||
for byte across body
|
||||
do (write-char (code-char byte) out)))
|
||||
(file-portion
|
||||
(redirect-stream (open-decoded-file-portion body) out))
|
||||
(pathname
|
||||
(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))
|
||||
(flet ((hdr (name)
|
||||
|
@ -886,8 +897,8 @@ returns a MIME-MESSAGE object."
|
|||
(print-mime-part (mime-body part) out)))
|
||||
|
||||
(defmethod print-mime-part ((part mime-part) (out stream))
|
||||
(format out "~&[ ~A subtype=~A ~@[description=~S ~]]~%"
|
||||
(type-of part) (mime-subtype part) (mime-description part)))
|
||||
(format out "~&[ ~A subtype=~A ~@[description=~S ~]~@[size=~A~] ]~%"
|
||||
(type-of part) (mime-subtype part) (mime-description part) (mime-part-size part)))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
@ -969,6 +980,9 @@ is a string."))
|
|||
(:documentation
|
||||
"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))
|
||||
(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-video
|
||||
#:mime-description
|
||||
#:mime-part-size
|
||||
#:mime-subtype
|
||||
#:mime-body
|
||||
#:mime-body-stream
|
||||
#:mime-body-length
|
||||
#:mime-parts
|
||||
#:mime-part-p
|
||||
#: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>
|
||||
|
||||
/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU
|
||||
FhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo
|
||||
KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAEsASwDAREA
|
||||
AhEBAxEB/8QAHAAAAgMBAQEBAAAAAAAAAAAABAUCAwYBBwAI/8QAOhAAAQQBBAEDAwIFAgQGAwAA
|
||||
AQACAxEEBRIhMUEGE1EiYXEUMgcjQoGRUqEIFSSxFiUzYtHxNEPB/8QAGwEAAgMBAQEAAAAAAAAA
|
||||
AAAAAgMAAQQFBgf/xAApEQADAAICAgEEAwEBAAMAAAAAAQIDERIhBDFBBRMiUTJhcRRCgZGh/9oA
|
||||
DAMBAAIRAxEAPwDGNbws7g6U0TaCOktyHyLWlUQkHfKohIFUWju5VoIk0q9bITFqkV7O2pohwlWW
|
||||
USKmQEl5tRIv0DSDgqwWBTMsFWAATRd8KFMBlj7UKBXs7V7LKxG53QVpFNnxx3V0UaQpg0uOR4TZ
|
||||
E0AzR0eESFsHPaIA4oQ+UIdChC+F9FU0WhljPS6RohjbEelND0xxhn6gqSLH2EeQpxK2abTSAAr4
|
||||
g7NDidBVxAbGcDkaQDYzxqTEgGwwCwjSF7KMigCiSIK8gXavgTYueCHFTgFyPMI+UNSapZYAlNDE
|
||||
zh7SKWmEjrShLOgqMJdE2AuNAWVNF70H4uBJJ2FakB2M4dIJHLUXADmdfpJAP0qcSuYBkae9gNBC
|
||||
5DmhZM1zCQ4FB/oxPYI/m1EwisstWAyiRnasFgcsffChQK7Fc88BWkC3omzS9w5CJSDyLm6a1g5C
|
||||
YpAbKZsVrRYCPQOxZkwDyFaAYpyoaJ4VoVQrmjq0QJQoQ+pQh8FCE2GioQNxn9JbGwxxhuSx6eh5
|
||||
huoAolJNjzBk5CviTZosCYAK1IDZocOfjtXxAbGmPKFakF0M8fIaPIRqQGwj9a35CJIrZTLlNffK
|
||||
YpB2AzSjnlGpA5AbpBZso+BaZ5jGeVnpG2WXD8pNINUccs9DURBSgyUbS91DyoVsfaXgg0aTJkCq
|
||||
NTp+nih9KYpFuhxDgtA6RJC+RKTAaR0r0TkxVnaaNp4QOQ1Rl9VwKBG1LcjZozE8RjcQUr0PT2Vg
|
||||
cKFEHNUBD9A9Nal6gy/Y0vGdKR+554Yz8lHEOhN5FHs9N0f+DIEbXanqdPrlmOzgf3KcolGd5aYf
|
||||
k/wf08s/6fUslj/l7WuCL8f0V9yjFepv4daxo8T5omszcZvJdD+4D7t/+FalP0yfd/aPP8iO7pQL
|
||||
YNj6Rm6g8swsSaY3/S00P7obuY/k9C6yTPtjI/ww9QTvIMUMY22C5/Z+Fkf1DBPuhLy/pGI9Temd
|
||||
T0SV7M/FewN7e0Et/wArXizRlW4eypyJiXTNMzdVzW4mmYk+Xkv/AGxQsLnH/Cckw20vZ6fov/D9
|
||||
601CJsuW3A00OF7cia3j8hoNKdL2yt0/SDs//hz9VwQl+NnaTlOAvYJHMJ/uRSicfv8A/Cbv9Hmv
|
||||
qf0jrvpXIEWv6ZPh7jTXuFxv/DhwVfHra7RFab18iqA8pTGwN8R3IQpD9jvFdwERNjnCdRCtIEd4
|
||||
stBGkC3obYuXXlGoFNjCPUNvlGoA5Ejqp8OTZxguiQ1UjyjWMDmWR6oD5RKAeRGTUb8olIOyk5bi
|
||||
btFxJsxDHBYmjoSy0PSKGI+L1mv2Ol9HA4JWhiYy0uMOdaKUBTNfpcA44TUhTZp8KKgKCMBsaRx0
|
||||
FYJ1zOFCAOVGC08KFpmZ1eAbTwgpDJZidUion8pLQ+WKWuo0UrQex36U0KX1Dq8eHEdkf7pZK/Yw
|
||||
efyiieT0KyXwWz9F6BpuJo+nxYmBE2OFgrgcuPyfkrXrrSMLbfbM5/En+JGk+hceE57ZcnLnsxY0
|
||||
NbiB2STwApp/AJidA/4hdAzppGaxg5emNAtkn/rNd9jt5BVPkvgs1Wg/xV9JeodSi07TtSJy5uI2
|
||||
SxOj3n4BPn7IW9e0WCepPR2kSZztSONTruRjOGk/NLJ5mbJjxuoFXtLr0SxhHBDsx2NiYOg0Va8n
|
||||
l8m7e2xKZ97hAdudaz8yciP6VmpPjw3MjmjmO17JBYr5WvxKusimHpkS59G09K+ltH9NQSN0jBgx
|
||||
nym5ZGNAc8/c/H2XtI2pSfY+ImfRXjetvTWVqMuDja7pz8uNxY6L3gCD5HPam9ew/wDBs7Lh90R+
|
||||
9F7juQzeNx/AtXtfsvsB1rAw9VwZsLUcaLJxpBtfFK2wUSbntAtKlpn5M/i9/Dp3ozU25Wnb5NEy
|
||||
XVGXcuhd3scfj4KJ6rtEjcvizF4h6Qo0f0O8PwrZSHOM7gIpIMoZaCZKF0wls5HSdKFs6cogclNS
|
||||
FHG5V9nlMQLRIZZ+USB0TZlG+CiRWtBbMmgi1oE7+q+6ohl3S7fKwX0b5Z0T/dZaY6ToltZ6HyTZ
|
||||
JZ/ugCHukO5HKOQKNrpNEBMQs1OEOEaFjBo4VlHxHChAPJH0lUQzOrftchY2TD6s4AuSmOkzj5Kk
|
||||
ItKYaez2b+DeGyDRZc1wHu5MlA/+1vFf5tPxLox5629HpjJQGWSAmiD8ffxw1/G9S/xCyZdKkfkw
|
||||
QxsxWOAsOc2920fFo0Dv5M76L9MZ3qb1Fi6biwShr5B70mwgRsv6iT44VNa9lcl8H6X0b+EfpTRN
|
||||
Sxs7Fx8l+TjPEkbpZy4Bw6NIKra1onH5bNTrOWPbdED9Tu/sFw/qflLHDxr2wboQOmt5Deh4XmG9
|
||||
mfZCV4aAOfsAh0Rsnp+Q2HLZILa5pHadht47VfovHWmehY+SzJxgQQWvFEL3HjZVkhWjX7R+df4s
|
||||
/wAGcDRdH1DXtAy5mwY7fdkxJhv43c7Xd+fK2LVfHYDVT89HhrczIbK2Vs8wkb+1/uHcPwb4QaQx
|
||||
H6r/AIDeqc/1F6Kf/wA1ldPk4U5x/ef+6RtAi/kjq0tTxbSLNF610qD1B6ez9NyWhzZ4yGk/0vHL
|
||||
T/Y0il8WRraPyBEx0Mr4pRUjHFjh8EGio1roanvsb4b+KVljfGeikgfG5MkWyTpaCdIplLp/umbB
|
||||
SKnZP3Rpk0cbl+LVpk4l0M5BslNlg0gsZnHaJsWpIjLKXyL0xQ6W1lyI1QViQhYbNEssbLwkMamW
|
||||
Mm5HKrQWx7o8/wBQ5RJAM3ejztAaLTJYt9Gu0+UEBGLY2ZRaoUmcJ4UILs6UBpULRk9YyBRQsZKM
|
||||
HrM1udt5PwlManoWaVpuZquRtxonbb5fX0hZ8mSca3TBvNML+z3L0axmnaPjYbHbhEKv5Np3i5Vl
|
||||
x8kZOfPsd61E/VNBz8GGcwS5MD4myjthIq1pQL7Wked/wg/hnH6SfNn6ycfJ1Q2yMs5bGz7X5Ktv
|
||||
9Arv2eoh0MG58bI2buXFrQL/ACgu9LbZOkKs/VxtLYDf/uXn/M+qruMX/wBi6yfoTSTlznE9/c9r
|
||||
z13VvdCeX7KhKCdoFuJ/whK2n0V+40kgP68eQrSK2ilz4y0ubIS4/wBqRaYL0/ka6HrL8GcQykuh
|
||||
d5+F1fp/mPA9V/Ediya/FmqzRj6jgT42Q0S42RGY3tPTmkUQvV47T1SND7Wj88+tf4Js0rSdQ1HR
|
||||
dSlyP07DK3GljG4tHYDh2QE5NV6B25Wxp/w1a8x2i6ppDmgSQSjIa7/W1/Bv8Ef7pT6ocesZOWKP
|
||||
Kplo/J3qXa31Tq4jrb+qkqvyrYUetHMVyiYY2xZOBaJFMZRP4TpYpn0nIKYmVoElNAokUlsEdIfl
|
||||
GmQgJVNloujyKVqimgmOYu8q3ZXEJYbag5l8RVuV0iI+32slyNmtHN6zVOhyo6JEAexvpmRtrlWg
|
||||
Wa7Ss+q5Vp6BZsNL1IULKLYDNDj6g3b2ESYBKbUG7ewFeyIQanqQFi0Ow0Y/V9RsOooRiF2i6Lka
|
||||
1P7+/wBrFYeXkcu+wWPyfKnCu/YrLmULSN3FBDhYrcXDbsjaKvyfuV53N5FZa2zm3kdE9Lyjib2z
|
||||
uobraV0/p/lzjnhQeHJpaY9j1rGY36pmhdGvPwyvY15pXyVzeoWCxBG57h5PAWHL9YldY0IryUvS
|
||||
FztQycskzS7WXw1poLjeR5uXN/JiHmqyLZAGENIFFYtEVaIiZt7SdtjvpTROR8x5a3+Q0Ob5JNWq
|
||||
0n7IuvQLM/3JAXEscf8ASOSmSin2+yl7wxr9pa5zubIpGlsr16Iske8tIkcQD2R2r6RW2xpp2vS4
|
||||
ThHKXPivmx1+F0fC8ysL0/4j8efXVD4ahFmY7tjg9jgQR9vgr0eDyZyrcs1qlS6Md6a9K6R6Syc6
|
||||
fS/c9zKPJkde1t3tH2Tm9vYcrQwzM80QCNx4AKVdqVyYW9LZ+cfUOBnafreWNRicySSVz9xHDrN2
|
||||
EUWrXKQcV8kRxTwi+R6Y1xjwAiRTYxhdwmoWwjwmIoEyW8GkxEF0qsoHLqJUYSOsfZq0OwmHY1ml
|
||||
TZXQ2jjJYg2TQmcwrQ2AUuBFlKrstFe/tZ6Q2WfNebWdocmHYcm0hCUx3hZZbXKhTY/wdRI/qKmw
|
||||
GOYtXcB+5RMrRN2rkj9yLkCJ9S1IuaTuVbDnor9OaadWndkZdjDjPN/1n4WTyvJWFf2Bly8Fo2jp
|
||||
I2MbDjMEUbRQaPC87kyVkrlRzqp0z7c2vqI5+6zsW9FbwCCQTt65VJimVMaxpFtHavbBSQQ0tcSH
|
||||
gCuqS3ssmDQduPFfhCQkXtcG7mk3zY5V6D6CCQ4bHNFn57IQjHp9AzxI2N7WycAbWgcIl/YtppaB
|
||||
H5BbbX1vApvZNpin9Fb/AGCTyujFtYZPG74TJlP5Kb0QGQfbaWij1+EXAm/lE/r2bi4WVSa9FNP2
|
||||
Rimkx3gta9pPJIPB/KbFue5YUZKk67UJn2Ht/BXSxedU/wAuzTHkNewGWeWSYEHgKZ/L+7LQbzcu
|
||||
j71HokfqfSPYkLW5kYuGQ/Pwfsl+H5f2K4v0yppy9o8gztOytIzn4mfH7crf8H7heiila3L2jXGT
|
||||
kgjHcCmJBbGML0aBCg7hNSKbK3t3ApiRWwKZh5V6K2BSMPwpovZ9HHRVaL2NcGOyhaL2PIoxsCWQ
|
||||
VPxDXSJ2HxBZcavCB0TiATQ7SaQt7LU6BzYNpFIbIRjuSvQTGWPIbUFtjTHlKoHYwglJHJVEZa6Q
|
||||
gdqESAX75pWxsBLnGgFG9LbI+ls2DZo9Mx4cODtgt3PnyuB5Dea2zn5L5UT/AFW8h18/YrLw0JYV
|
||||
FJfAIpx7PaTSAZfvbYDrLbrlBoAvYQTwe/HhBpk9Em8VRAvzSFlI+c2QHl1x+QfKpaL0ywObGeAA
|
||||
P6la7DWl6Ivl5LqkIPYvhTRXJFT5OC4t2A8NDueUSRNlLngt3e5Z/FfmkSTIDSvdW2mgfYdo5SKI
|
||||
OPA2ta9hHZ7tEiejhkLaNEg8UOVetlM7IJC3a2vlRaXZegZwJcA4cDx8FMTIV0eTXB+EWwkwzEPQ
|
||||
B2mkuhssjruj4fqDFDMljP1MYIjlqjf3+y2+H5lYHxfoNbXaPIM3BydLzZMbMiMcjDXI4P4Xqoqb
|
||||
XKX0aYtUi2BxTUgw6I2EyRbLgLCaimyiZnBRJA7Anx2VNE5HzIubVaJyGOEKKCkEmOI3DalBpnZI
|
||||
e1l57NjkClg74U5A6F2TBVqkyaFczKtU2EuipjtpSmgtbGWIdygprQyhdtVAhTJgPKomz52RfCss
|
||||
L0c/+YwO22d3+EvKvwYF/wASrXNQEepSOcSPqpcyI2ujl77Gunz+5GxwP0u8/Kz5I0E0OceUActv
|
||||
nwelluRbQbHkhrQGinXXKQ5B6QTE8BzQ1u49kpbRX9IvaWhp22B2a8oGiyRedtteOj32VWiI+BLx
|
||||
9Rpo4JU9E/0+c1pLm0b7+ocKIrWwR7zG3a4AlxNkE8//AAmrsm9AxkhY/bJY3dDv/wCkaTa6Iml0
|
||||
QdJ9UrKIo2Cf9lanXZN/BzGssDHEcknnwpXT2ipLNmx4G4WR0q3tF6Kw0R9vJB5B+EXstLRW973N
|
||||
HuOb+2wa7RJL4LKwQG7h31SItE2S7b3NAcOaVcQ5JsnaAXA/5U47DQn9b4h1XSTLCwHIxvqLvJbX
|
||||
K7H0rO4r7den6Cl6ezzrF/a2/K9KjSMYekaBZeOkaKK5OQiTB0U+3yrTA0dDKKvZWiyO2lKYyVoO
|
||||
jf8ASlMah66H7Ll8zpuQaWDg8K+QHAWZUPB4VqiuIkyoKtXyC4gQj5U2RSXxOMbvpQbLqU0HxTAh
|
||||
GZqnRbvU0Douh5U0WMcAluTEQaN+Eu10y6X4sF9T47pMkjbxdrnw+LZxsm1RToudJC8xOugKaSel
|
||||
WWE1sKL30zT4eTe0AgOI55WO4JSGmPlNPEgBrgWO1lqP0Kf9hUZY0jcCAejaW0CGQOaWUx4sc7fs
|
||||
k0v6CSRZK8jaTd+eOEGgafyXQutp9oEj7+EL/stPforkLre4j7Hbzf4RInfsGmDASCC93FfY/BTJ
|
||||
2RorO4MeZY4w1F/jKS/ZV9JprWbneSeKRafyXolTC4GSi7+lo4v8qv8AC1/ZH3IX9h7QB3Xn7K+L
|
||||
RfRVJI0NDGua4E3yfCOZftlr0BTPp7gBuZd0T4TUiaKZpXDcWOAaK7RqQkgd+QN+4Sso8do1CDS0
|
||||
UZOosjbZkIoc2Uc49hqT7TdQOR7wa+2e27dzwOE7Hj45J/0v+jz6Ke5jyCAaFfFr08s0L0M8Z9gI
|
||||
09EaDG9I0wWfbUW9lHA2iiK0d2qFaKyKVFosY4gIOIWzdug+y82sh3KkHlxvkJisU0K8rGNnhGqK
|
||||
0JcrHqxSNMJC2SCiVNhaB3NIKLZWjjX7UcibktZLyjEPoNgk4CmgQ+CbY5rvgoGhjW1oL1Efqomy
|
||||
ji+CuZmnhbOR5EcbYDFjBjXHsn7IHWxEy12XtndjuHuC2/KrXL0NVL5GmJnNfzdivHJSKx6KqBpB
|
||||
mAxhocTRJqlnrE0xfEMx8gNstFkf5CTUMoMxstgc4Bu/nk/n7JNY2Ugg5LSQGAg1y7oBB9t/Jf8A
|
||||
hKTbtG6QNbX7uLKilr4LckZ3MazayncXfyimWMc6QHPIJGcOPH+yZMtfAGil8zYmkFzrNHjhEpbZ
|
||||
XoqnytzQ179wN0apHON/BF37B3ZTm7trw55+fKZ9sLQDNl1I5zYg0n/BTJjrsiSBcieQgAnaf9Xf
|
||||
PwmzCGKRZlZzY4ntmmAI4vpOnHv0MmRDna+WB7MYOe8/t44WiMG/YWkhbB+vz5WjIJ23yE58Ma6E
|
||||
1kRrMdn6DRc2TadohI/ykYd3mRMfezB4klVS7qZuHOJL0EeyDaCSwiTB0FMFokyHxaiTB0QIpEmV
|
||||
ordShCNqEPVX4/a8eqPRMGlhFJs0JaF+TjjaUxMHQizMerTEyaE2TFtJTU9hCydtEogdgjjRKZPo
|
||||
CiG8hMSM9BWPPQ5KvQpsKblgeeFXEJUPNJlZlYMo9wFzT+3yFg8yfTMfkrfoldErCZCEga4Dd0VF
|
||||
0XrYLNA4cwuc0/ZGq/ZW2vRT/wA1nwzUjHFtdjlGsSr0Emmdb6txg4bpQx279pscKv8Akp+kGsLp
|
||||
dBsPqnEe4e3O3f2Wl3aW/FrXoH7DXwHf+JGua57ZWhod9Vm9o+Er/k09aB+1X6Kf/EjXEf8AUtG4
|
||||
V+6wCj/5f6DWKkEO9SODuQXfTQFjlV/zIvi2QOulzpS4At45a6j/AHU/59egXDPhrLHWBKCQKBq1
|
||||
Psa+AeAKNTbKeZbA7aQQD+Ef2tEUnBqNsftDG0eyVPthKQaTWGgbHPaXM+D2iWJlqV8lHvZU73GO
|
||||
MtaSCC4dotSvZfJJFb9DdNKH5LySea8BWs3FaRSotj0OBpaQ2/hV95sXVDGDBYwhwH+PCU8jFeyj
|
||||
1G4x6DLC1p3SuDLHwt30/HyyOhvP7aRgm4roz5Xa4GiM6YXjlzDyqa0PTQ1xpuO0SLGUMnHaJPRW
|
||||
i4mwrRWit5pFsrRQ9yvZTK9yvZR7PK3ul4zZ6PQLIzgo5YDQuyR2nSU0J8uMm6CdIIkzYSAVoiQK
|
||||
ehJltIuwmaA2KZ30eEaBbBny8dpqRnplDspwNAo0hFMujyD5KporYx0jPGJmxyOd9F078JWXHzlo
|
||||
ldo1cz2k72kFjuRXlcSpcvRiudAz5TXflTREThmaGhrnclU0FrZJ8cUo5I5UVNCnAp1D0/BkB1sF
|
||||
1xY5T4ztewoyVD2mZjO9NSxEuic6vC1z5G/Zvx+ZNdWhRNp+TFYIcQe6J5TZzSzoRhnKt42mCuhl
|
||||
joHeK656Rq5foqvGufaLn5mY6ryZTQoEu5UUz+hX2f6OMy8xj9zJ5AartRzD+Cvsh2HNrGQ8CB0r
|
||||
yPJbwl0sKXYjIscfyY/xtH1ueTfkZpjujTT0s9ZsU9JGOs0/CHGP6dfJ/wDmZWRK6/ngrPXkL/yh
|
||||
Ltv0N8bTMPGmDWMAdXZHaRWS32VthrGNja4NcK6BQb2WkR3t2tHBJ8qF6PmlocR2ALtQW/0XBvgd
|
||||
HpAuySu9AetxNkjijLHb2/4Xo/p2Hhj2/ky+Rk29IRSYIPQXTSAx5GgKXE2+FHBvxZSijGfslOdG
|
||||
2b2G48v3QphhzJLCJEPnlWCDPKtAspLjaso9zI7XjkejBph4CJEF8zOzS0QgWLclva1xIlibNaOV
|
||||
plCaZndQaBaapFcjPZgomlfEp2LXuKiQqmUOKYhRwSEdKtFEvfI6KrRaZsfRmQ/OxZsdxv2uW2ud
|
||||
5mNL8hWRJjBzSNzSKr4WAztaAHOd7liiUxLopMIjyXMA5BQuRnsJjzRe6uevsgcAuQzHfHMGFw4P
|
||||
j/uhe16FVGgj/lunvbUgp5HIrhAstr0AnU9yCSeldOkc6nOHkUUX/RSOjh+r+ViWt7X9g0nozTmk
|
||||
OLnObXN0Fa8nIzavrtOXvFO//kux/TmkQkPbjscfIcbVvNkfyc/J9Rz5et6/xBQigha4RBjABwCO
|
||||
v7IVTfsyNOvZX+shjHNUDV15V8GWp2Rfnje4RyFz+DzxQU4P5DWPRVNmM9wEEX5P3VqGEoKxkts7
|
||||
SSK/q8ouJetF8EoIOw9V4QNC2whrw5xFEPPKFoUw7TYTk5LGbi5t2QEzDHK0g59DPP09rrNcr1OL
|
||||
paOfkjvYiy8EtsgLTKE6aFU8IN8co+JpxUK8mCr4QXBvx2BNcY314WVzo1qtoOgk47UCCN1jhGii
|
||||
lysAhtV6Ie+PhscBeMTPSAj4O76TYWwGCT44ANcLXEi+Qlzoi0Fa4QFMQZpItaZkz2zO6i4fUmzJ
|
||||
nqjO5ZslHxF72K5TylNEKHIkQrtUCcLlCGs/h3kbc6eLbe5nYWLzF+Gxdro004BLz07qlyzPvYtl
|
||||
Yfb4RJgaAJHOZIK6TUtlqi6GTaa7+FTQxUXCaWOyCaHFBA0g1pk4NSDD/OsDsE9Knj36BcJhjdZj
|
||||
dC+pi13G0tP/APEP2nsH7RWNQMxFSMvvdVWr4a+CfbKHai5p5kY7k2R2UXANYwZ2oF0290tkDkA+
|
||||
PhFw6C4Akmqhzy4sAaOA0+UaxvRfFFEmoGV30g8HhWo17J6CMaWWQMaBx5+yppIF1oYYjXAGMuN+
|
||||
DXKXXXYl0HxGSMiiLri0p6YDYSA94ElHcOwPKH+ika/0phtGPJkOFF3Db+F0vBx6XJodroaZMQIK
|
||||
7uOTBkFGXAKPC0zIjRmc+La8kBNUhT0xPkssFDUmvG+hRPGSeFlqTZFaLsVhKBQM5jGOGwmKAXRx
|
||||
8BHSjknNFPtkE2FWtBbP0CW8LxEnpWUPAWnGKaA52ggrZApibPioFaIFszOoxDnhaoYizIaq1wc6
|
||||
ulplGRiHJvm1bKTFs3ZSWWCPdZVbIVkqEIkqEH/oXIMWuMY3+tpBWbylvGwLRtMyxOfgeFxkYt6B
|
||||
JSyRjgByPujXRafJAToW1ub2UaYIO54jJ+qyjXZEy1koIv8A2vtC0MmiD2NI6sflWnoYmCTx001y
|
||||
PhEmEC7i3px/CPRaZB0r9wJI6VpIJMiS6+CQT9lEVsvxsZ8hd2fNqnWgHQdBhUQGndQ5HlBVCnQf
|
||||
jYoaRZ4+6W6AbYdHGwuq+W+R8pbbKCQ0u4NO8UhBC8OJ80zI2h1P47UiOdKRsTtm3ilbBBHE2gGi
|
||||
qC9Hix8UkbLjjOj79Ru7XQxz0crKuwXMeNhWmZEaMxqJBJpM4kSEkw7CFofPQI6MG0pyPVEoItpQ
|
||||
8S1QxhaKRqSci0x8dIXJaoodHyeAg4oYqPc3tXgUeqKXMtaIAYPJDa2Y2JoWZ2O7YeFqQpmV1OMg
|
||||
O4WiGJoyuoRfuJWmWZqRlNQG0lR0AJZ39pWy9AhdyoURJVohEuUIMvTEhZruIW9l9JOZbxsGvR6P
|
||||
qLT7rvkrhmGxY+oJAeymrtAS9H0rfdi+kgEmyqXTD9+hbkN2vof2CciFVkv8UERC5ryyM8DlC0gk
|
||||
zjnN+kE/lVoYmUzRgm2hWi9gbo7cWj8o0w0yyMfVT2nlQB9h0DhE2w6m/A5QMBhEcgsuYCHeeO0L
|
||||
QDWvYRDK8hv0h18WULQIY1xsU3mr78pZC2KR7ydp4Hj7oS0h1olRSGaXgjrlb/p+LlfLXo1YZ72O
|
||||
35LH8hwteijGFkopfltaDytcTo59rYHNmh4q0+ZM7TFeS7dZRNFpC6XspbGJlACriFstYxTgXsLg
|
||||
bZU4kTCa4VNBIpc3k8JLQxNnuhYF8/UnrGRMQKfCFtlMkJAWmRbYuy4/pPCdN6BaRltVhH1cLROQ
|
||||
FwYvWBt30mzexFwYzVfPyidCHJn5zZKmyaBSe0WwGRtWURJUIMPTji3W8Rw7EgS8v8WDXo9S1GxM
|
||||
4CurXDMVoUzAAB/38o5FaIMeA4Du1ei09FeVFfIAoK5YYvc2nG6u0wjRAiSyXAj4CsmyuQuoOdyQ
|
||||
aV6LTO+4f2nk0poNMp9wBx45+VehiPhJZtx4CmiaL2TDr7qtAtFzcza4bqJB8eUPEFyEiUknZdH6
|
||||
hfhVxB4hmNKH0S8uHlLa/QOguHbI4NcXNI6LfKDvY2JL5ssMcImO+lvkFej8DAseNfs1ytI+ZmvH
|
||||
TiupOkLqdk3ZbnduR8hTxEWym7JTJsTWIk6S2lM5GdzoDlPJQllbDyrRTCYuQj0CFwhVoJMucQAl
|
||||
UGigvFrO32PXo94FUvByesZNgCfIqjkjRSdLEtCvNaKKtMtIzGqtBDkSoNIw2tx/uTJoC56MJqwr
|
||||
cnzWzLU6M5M7kpyFMFJRIW0RtECcUIF6M/ZqmM4nqQf90Frcsp+j1nUQDI0j+oDlcJrsxX7FeTQZ
|
||||
RsopFMFLgwA+T8I12DoIY73mEWAfFodaGJgORFsPQryUyXssDeXOcTuJATEQrfTSdoJJ8qIsjQ3H
|
||||
ca48KyFT2m6A/JV+g5og9p4DTZ/CtBqtkbkbY5FfCvoLaLI+Tuuz3+FTBYZjSe5vbuO4f4S30DxD
|
||||
YOa+rk90UtlqWOMeIsx5Z7BAFA2mePHO+/g0Y429CppdZJ7K7qypG5eOyxshCtZxi8YuY8pk5Ni6
|
||||
w6L2PvorVNmS8ZMvsJ80Ybgoe4I9iGirfSnIriWRz15V8yuIU3L+6p2WoOuyrHKTdjpkoOQL5KzO
|
||||
zRM9H6BikuqK8RJ6mkXgkeU9CWde/hNTFsWZrrBVbIkZjU3cFWmXrRitad+5Nkp+jz7W38uWmDNk
|
||||
RmpXclaEZmDkqwDiJME6OVNlBmlQ+5qGM0juQIKfTZT9Hrme0AMFVTQuFT7Ziv2xNkGw5o5+6ORT
|
||||
A3GuRVhNSIfNlILSOVHJCc1TRkV/hCuhksBfFtFcWPCYnsogWFw+lpAHZVkIytY26suPRtEmQi76
|
||||
iABQd2qLJuit1A2PFKi0z6OKHa7cSZK5CjbJtkPZIb7kTA1vwi3v2EmSbF7YZID33SHew0HYUW+T
|
||||
mtvikqhi6NFPGI9E+BdI8GTTZu+nR9zKIiFqWZnoVgR8Aji2yVjSRawLbjZgyxouZwCtuNnOyyfF
|
||||
y0yzn5EUSP7R8jK0DOk7QOy1BD3kHMNQSbMULsJQd98pVZBkyfCbjtZ3Y9T0fo2B4XlJ6PRUE7uO
|
||||
E1CGVyPoco0ytC7KlFFWRIzeqPH1K5I/RhNfm2h6dIps881aXc5y04xGRiSTklaEZmUnsqwDrBah
|
||||
EO/T/p/M1icMx4ztvlxCVkyzjW2D/h7H6W/h/g6TC2bNAlnq+Vyc/nOupLUa9i71DTct7WimjoJM
|
||||
Pa2YMi/JmfnNMO0dlPkS0CPFkAA/dGiEXbnOAoAD4V6KTLW00gDm0Oi09HHR7pBYVp6QSZXIw39A
|
||||
oeVaZNlBgJLRQAHm0XImybIS76Rt58nwpshBsZ2ubwNvG5TZZGMGFpkaQ49UrCRxzi4/S7h3d9KB
|
||||
JbJwNFENu/hC2NlB+GNkgaG8nylv9kutdD/UmE4MEf8AcpuCNps7X0hcU6Fjcb7LTOI7P3DnsV4T
|
||||
pxgVkObNtrVjnRjyUmQc6rWuDm5WUPkWiTn2CSydqqoQltgxkSKsdMkQ+7S3kDUnfcoIeYSkiZe0
|
||||
urDmdkw/jspDseoP0fG++ivPo7lBAkNJiQhlM05oqwUKsuegVaL2Z3VJ/pKNAUzCeoJtzXcrRCMt
|
||||
0YPPNkrTC0JqtixwTUKZCrKIE0npT0xl6zkMLY3CC+XHyFlz+TOJf2T36PdND0rG0jFayFgDgOSA
|
||||
vP5vIrJQaWgnLyHOa6ncpRGYvWyXPs/uW3F6Odk9iKQPeK4HynJ6ElUjKFWCTwjT2CVthdvF1Svl
|
||||
0V0WRwnfVgUhddFIvfH1Zs/ZCmTZVKz6CG8FEmEmCuDP3ucCR2Aj7LKXbHPLmAj7WiSaL0UvlkHD
|
||||
Q0t8q9BLRVujBcX7m/ZFoNI5CAHXdg+FTDSC2fQ3cfPhL9hb0htpcBmlb5c4igl29IT/ACZotRxJ
|
||||
YfbEjTt2iiuh4jmo6PSeEljx6QE5gAW6ZNLsHkAopikU7Ap3gBMlGe66AZZeCnyjBkvYHJOm70Y2
|
||||
9gks1pF0XKKt3Payuhy0TYCg2Xs64EdIWEtFBeQaS2xspEg/4S9j0j9HMkLVxZR2aeyx2RQTpM9I
|
||||
GmyO0XsS2KMzIHPKJTsW7M5qeUKKYpFuzFavKXFy0RJlyWZTLaS4p6QlPYA9p5RohpvQ3peTWsxs
|
||||
szSMZh8jtY/L8lYp0vZaXI9x07BgwMdsWOwNAFceV528jt7Y3pFkjuDygRNgD5af9kxLoFmb12N7
|
||||
Hl7eWlacTWtGPND3tCM8jnsrQjIREdAniz0r2U0S27aLip/gOiTSwHolUWkdqgdrqtQmgeWwHtsV
|
||||
8o0WAy7Q0tFE/KZJaBSANxLg6/nwjD0UtyHCIsaRSvQalIgS6QHcASVPRYRixiiHgtrzSGmGi+Bn
|
||||
6iQBh+lqFviuxV1v0bL03jtdlNLm/s5WLNekOwTtm0mijzcZzHgXVBL8fyHhraOlNuTDarA/Cncx
|
||||
/wC3wV6jDlnJPJG6L5oVyy9p6ZHIDPJ2mSzLk9C6eTtNVIw3Iull5KF2K4lQeXEpLeym9BcEe6lS
|
||||
kU8qDGxcdKOQVkISRGktyOnIATNolJpGrHRBo4SGal6P0U6SvK5ak6DyEHTAikxSJrICSyd8pikz
|
||||
1kFGdKADymKDO8hmNSmu6KbMi3ZmdQddp8oz3YjnZZKPQKoP9Menn6znBlEQtP1H5WfPn+1O/kZP
|
||||
5HtekaZBpmIyDHaAAKJC87mzPJW2PS0FzTRxNJfI0AfJSVLr0WLjqmJNKYYpWuf8Apn2qS20DtP0
|
||||
VPHJKJFFMsTJmFrhYPyiTaBa2ZrUtLfC9z47LP8AstOPLvpmPJia7QAxwIIPYTNGf+jkkoFANHCt
|
||||
LZCPutoloN1/ur4kQO+SR/JcWtHaNJL0WCOnLfca362lFxLSA5JyGbSAAjSGJA5lAtpH90Wg0iIe
|
||||
KIoflTReibHChzRCpomgqFxmcGMuj2UOtdg1WhzpuM4PDYxZ+UjJX7BmHTNlpEf6dv1VuPaw5Hs3
|
||||
4p4odRTBpuwElodvYF6lwxmYBkYPraLXT+neRxrgxmO3FHneQ8sJabBHBXeWQ6bjktoXyzXaJZDP
|
||||
eMCmfdolZjudAcnKvlsx00i/EgLz0U2I2c3Pn09DvFw+BwnKDJ94NbiGukLgucxCbF4NhLcDpyif
|
||||
KgolZsknQw5NgoYsr6OpHo9zlmryuepG1kApMrbfKdMGesgLNn8dpqgQ8gnzcuweUagS8iEGXMCT
|
||||
ymqRNZBPlO3GgjU6EO9nNM0qfVMoQwMJs8muAl5Mk41tjMe6fR61oOkY3p/TQJS1rq+olee8jNWa
|
||||
ujfKUIznqT1u2FzoNNb7j+rCZh8NvuxN50vRk5H6rqj9+RkPDCf2g0ti+3j9IyVnb+TXekNGbhNf
|
||||
O63SP8uWLycvN6NHjp62zRSCisqNGyqkRDpjEjSCAVChRmaC2V5fC7Yfik2czXsReFP0L5/T2du/
|
||||
lNDgOyCmLyY+RLwUL8rR85l3A8H5ATZzQ/kB4qXwLptOyWE+7vr4Caskv0Dp/oCODO3cAx1fhHzk
|
||||
LYLJiy7iCDSYqRarRB+BJX0tNKLIvkJWcZpuQ8GmOKjyyguWxhhen8qY2WOr8JdeRKL41Xo0ulen
|
||||
BHt97iu1lyeQ36CnD+x62GOBpbGxo+9LPtv2aZlLpFsDSTyUNBoF9RxZJwvdw5C2WPmh5RYHPLVA
|
||||
ZG0to76V9R/qGDHz2bXdG+im5fHcPnBMOXmS9TekzlRnK043fNDytOHzNrjR1PG8nh+NHnWbiz4s
|
||||
ro8iNzHD5C6GO+Xo0ZLmltAbwVpk5mWtEY4dzrK1Y42zj+RmSQ60+AUKC2xOkcTJe2PsaEbbpGkI
|
||||
d6CxHx0qckWQpmiaWmkFSOjIxDnx04rHkk6/i2KyzkrC12d3G/xPVZ8jvlZpgz1lF2RkjnlNmTNW
|
||||
UWT5NXymKDPWUV5OV90yYEPKLpJDIabyT8ItJA8mxro/pbO1FzXbCyP5Ky5vKjGntjIjZ6Bpult0
|
||||
TG2Y8QdLXJXEzeT917bNquca1Ih9Q4uoZocHyuDD2ArxZMciMmZsR43p9kBsgOPyU2vI5ejI72Mc
|
||||
bFG8MDezSS7JG6ejUwRiKANA6Cyt7ezryuK0RfZ5KgZFoDvsrIWtYWi+wq2UWxt44QtlFwNISEXf
|
||||
Ua/p+FaRCBZE0csYT9wrK0DyRYz/AN0TP7BEtomkUHCwSDcLCPwi5V+ycUc/RYV22Bn9gpyr9k0i
|
||||
Yx8dgpkTB/ZVtv5LRFwaCQ0AK0WUE90iLREgk2BwoWWRtpC3sIte0OaWnkEKl0VraM27BazMc39t
|
||||
mwVvx5euzAreKx/puXqOnt+giWL/AElDeHHb2no2/wDRNLaBdYy8DVmujy8cRSnyRx/lNxK8Xp7C
|
||||
nOYfVtElxXOfD/Mh/wB12MGab9+zNnyUlsBxYHPdVLrY4OFlybNDgYtAcLTMGSmOYYeOkxSZqZN0
|
||||
dBC5KQHlP2NKTZrxoQ5bg4m1iyHW8ZaYtdwT0sVLs72N/iaybPdygmTkVlF0+eeeU1SId7Fk+aSe
|
||||
Cj6QvtkcSOfOnbFAwvc4+EF5FK2y+J6J6c9IMxmNmzgC+rAK4nl/Ul6gep0ts1MbxCzZGNrfFLhX
|
||||
ldvsB2VSSu2kHlLQt2xblvLrACdAp2xXI0tLiVplgp6OadBvyy/sNRU9LRt8Sd1scutL2dQjW4G1
|
||||
N6IZ71PrLdNxi2P6sh3DWhavHwvI9v0BdqUOdAMkmk47pj/Mc2ys+bStpBJ7Qwazm7SiI64hvRUR
|
||||
CJN8hEiA0pvgIkiFFHxavZDrWdk3ShCVEDgKFnSCOyoQHeOT5RIhACnWTwr2Whfrept0xkMjwPac
|
||||
/afsmYsbybROWhpjyRzwtfGba4WCkNNPTDRZtofKogu1GKnNeO7TYrRg8uGvyCcBziKJ4QXejEno
|
||||
KdpEWawiSrPlDHmPGxs1/YsyfT+djteIT7sFdHwux4vm4LpcumXeW+LQhh018UrhKza6+qXscDm1
|
||||
+LOPextj4wHgLUpE6YbHEAFegKgryAACUFIqIEOou5KyZDbikzuVLTisORnWwQCGSzyVjfZ2Ynoe
|
||||
zyE2q5HH+0wGZpPYV8i1hGmg+mMnVJA5zSyG/wBxCy5/LnCuwWkukelaTpGDpMDWQxtdIO3UvP8A
|
||||
kebeX5BbSDnyFwsu4XPdNi2ykmxyQQq2CyqQNrgqIFpAMgbzuKfO/gVoSZ+UGWByteKN+yhtosQG
|
||||
L7hFOcl5X+Wjr+LHGNhxZXfSBM1CP1FrMWmxFjCHZDuGtHytODC7e36F3ahGKix5snKE2Yd8j3D+
|
||||
3Phb6tTOpMLyOq7PT8Rojx42tFU0Bciu2dBeiTjd8qIsqJvtWQB1nVIdLw3TzuFDigm4sTyPSKb0
|
||||
WYr/ANRDHLZ2uFoX09Fl+37ISH1dqyHA0VyoQW4eqY+a+dsDwXRO2kX5TaxOPZE9lt8qizlW7lTe
|
||||
izP+toRPpOzv6lp8StWJzVqTNelPUUulZH6PNJdATTXE9LT5PjrJ+U+yYsnwekxTCaIPicHNIsEL
|
||||
lNaemaF6KspnuQOB7Vy+xWaeUNC/FyS223RHCOoOJW0x3gZLy7kmljyQkXLY8je/bx58LOnpjlTI
|
||||
5GBDkMJexokPkLqeD9Vy+NXvoq8c2vQlnwnQOIIsDyvoPhfUMflQmn2YKwuegZ5DV0CvtbF+dMKK
|
||||
XRFi0ZnUp/3UsWWjZixmdyHFziudko6eCCobq6WRs6kLo1BhLjQFkpfIxcNGk9P+nRI4T5rajHIB
|
||||
XP8AK81QtT7MuTIvSNhE9kEftQtDYxwKXBy5Kt7Zkdg8kwbZBtAk2JdFIzWBp3nyi+036B5i/P12
|
||||
DGaaIJ+LT8fiui+2JZvVrN1AgBap8EZONsHPqNryfIRrxdEeJopjyG5mZExlkucjc8JbJjxcno3s
|
||||
TRHE1oFUFzTrpaWhN6m12LS8Vw/dM7hrQtODA8jBu1CMPhQTZmX+qy3EudyL8LoVSieKOfkybe2O
|
||||
Y46zMdgAP1DlZ2/xYGPukbcGmjmlz9HWIn8hEWVyOa1hLuAObVrso839WZTtVyXMjJMEXA57K6vj
|
||||
ysS79mPLl3Wl8Gy9I5H6jQ4N5+to2lYfInjbNOOuUpji/wD7SAzhPdKEAtVyP02nzyn+lppMxzyp
|
||||
IqnpNnk/prUn6Z6jJkcRFkO+q/krs+Rj+5i69oTis9V4LQWmweVxvRpPrIBUKE/qUj9C3dyNyfg/
|
||||
kI8j+JhNWxGvi3NFFdLFfejJFaGHo31C/FkGFluJYTTSfCR5Pjqvzk34r+Gegbw9oc08FcxLTHMz
|
||||
edktxs9wcVrmHcnHzxxtjPH1mCCLc8274CS/GqnpCONA03ryOF5ZGAa45KJfTd+xix2H4PrRuRtD
|
||||
uCSk5Pp/HegW6Xs0+NqMORF9VOB/2QYM2XxK3AfJUtMXalCGMMjf2L3/ANM+oz5WPt9irniZPPls
|
||||
mjwuhkrQURsR5R3WuZls348YCYd3hc7JRuxwd/ThI2bZXR6Vo+jtiqfIaPsCuV5Pl6/GTk+Rm+EN
|
||||
3ycbQKHgBcht17OXeQFkmc0OFq5lCHQHNkOo0e01QRdiTUc/aCC4CvhaseMOZ2ZfPynva5262/JW
|
||||
+J0a8eLZl8jIeZDRNLVM6RsmUkX4mW9oIoqqhAXKZuP4fwmfJfO+yGcC1zvMelpFYI72bDW9Zi07
|
||||
Ec95G+vpb5JWHDheSjRdKVs89YMjVc85GTZs8D4XUfHHPFHPyZHTNFjwNjZ+FlqmzM3sswxv1SED
|
||||
ocob/iP8ZbtGsDiO+lkOoSAUIZn1dqLoYhh47v50nf2C1+Nj2+TEZ8nGdGexcb24vqaCVoqts5vL
|
||||
scej5yybKxncc7gEjyJ6VG7xa2mjUEnwO1k0ayVgd8KEM36zyQ3FZC3neefwtXiz3sz+RWlo801q
|
||||
Hb/MjsEG11sT+GZ8dHoHozVP+YaSzcQZo/pcuZ5GPhZ0Je0PLAvlZwhXr4DsQA/Kbi9mfyP4mXmh
|
||||
3MIrpbJrswJiDUMYwyb28G/C0y99D8dG09J6wcrHEErh7jB58rn+Ri4vaNuOt9AnqoXlRObwTxaZ
|
||||
43poVmxqnsd6No0R0wucfcle27Pheo8DxcdY967OdkrjWkeb6vpz8fVpYzfdhYfJj7VtGiL3I50n
|
||||
De1rXONLmZKM11s2OlZD4WFpcK+VzssJik9GgiyW5EPtO5BHCDxs1+Nk5yx8vktMxuvxuxMgtP7X
|
||||
dL2uDy/+jGrG450JC7cUjJRvxosijtYqZrgIECWap9HpkmQXNr/ZeVa2zyl2DTzBgNdopkzt7FuT
|
||||
mijQsj4T4x7K9iPM1C7BO1a8eLQyZbFbcabLkLgXe35JWj+KNePEKdckbG32mdBNxLfZplGdDC5x
|
||||
K0jNh2LENvIQNme6PRfS2zTdFMrqBdyuV5G8mTSHY2pjbEGoTS6tnOfISGA/SFqiVjkyZMvNjbT4
|
||||
DAwUAfukXWzOw8UeyAfhK9Ak9Ibeq2OgOlWR/ia/FX57NLd9rMdEE1HMGFiyTSOAAHAR445vSKqu
|
||||
K2YWD3c3LflZJLi43fwF0XqFxRy8t8ntjF+wMSUIYLhZH6bX4HNsNf8AQ5Hc8sbNXj1q0bsScfuW
|
||||
A6RBz/v/ALKIhh/UOSJdSe1xsMFBdDBOpMGet1oQ5sTXQuB89LTD0xMvsH9HZx07VzC41HLwfyi8
|
||||
mPuRtfBvxUemUD+KXJNAq13nGbz/AFJuLpmfyP4iSVtNAsrSjAwDMxjK00mTQUsV6a9+DqLXA1zR
|
||||
TMiVSaovRpNd/wCoiikabpZsPT0Ot+jVekpDJhNDjyBS9Z9JvcaOb5K7EXrbT2x5DMqMDvkpf1TB
|
||||
+PNC8ddaBMJjXhpJFUvL2wbGUIAJDUlihniOI5BWekNlkdfxBm4Bc0fzWLd9P8l464P0zXjezFQt
|
||||
O6j8rt09m+BlBF0k0jTDCvbCXo0p9GuklPzS8wpPH0wHInIs9gJ0yCI8/LLdxaaH2WuIGxOwjQ/T
|
||||
2RqUwnmBbjjnnytkR0dTxvEb7foN172sKExQgAAeAlX2w8vT0jzbUT707j91ojpArpFEcNGyi5C6
|
||||
rYdixX0gpiKZo4pZZcJkR4a3wsrSVbBrK3PEIwsahuIBJQ1XwJb6GUQEbK7H2SH32CjhaOfKi2UE
|
||||
+n4j+ulcTwAhyvo3eIu2x8baCSEjZvMP6mzn5+eMbH5ij/d9yuh48cJ5P5MWfJt6RLDxNsVk8kdK
|
||||
qowtlvtiNv1H+1IE9gifVC6N7JRwGOBC0Y+00Nh6ezeYUwnxopG9OaCufS02jry9rZ9ky+3E9x4o
|
||||
EqStsj6WzAyn3JZJHckuvldGelo5Vvb2VPAew8AfCJPRS6M5nxOiyQ9vBBu1qh7WjTio9I9PZpz9
|
||||
MikHYFELk5Y4UzdD2tkta4xhQ5vlTF7E+R/ERg9g8laGYSDhfZ7VplinPxgJN7R5TprfTDljSA7s
|
||||
WNp5I+Un0xjvaSH+hymC2g1YXb+kZdVoXnnaI628ZMD438jwu35LWSHJmiGmZ/DJhtpP4tePzY+N
|
||||
NBXIzgfYHKytGahljkkAMNfKRa0WmMcdxb9LuWnu0pPi9o0Y70zOapp3sZ7jELY7leh8bL92NnTx
|
||||
1svgxXBt0U1o0yy4Y5rpVoemMMma+zyvNRJ5L2JszJO0gOK1RA2ZND6N9IO1YNzMwObDf0tPn7rZ
|
||||
jx7Ov4nidc6PR5NNiw8BzY201rfhaX+MnS9I8Y9XZFZEovorF7o5dvdMxLuXF33T0A2TjYXXSoVT
|
||||
HGm49ssj+6TdCWx3A1obRq1ne2KCIGg3XCBlF4BaLVbKK3A87OLUSIhj6ZaaneTZukvM/R0fEXTZ
|
||||
D1XqpwsX2oXXPJxXx90Xj4ub2/Q3Nk4T/ZltMjN+5IefP3Wy38HNb2NwygNjiFnFlcgeQC91noBW
|
||||
tFC/U2Okgc3bynY32FLHvo3KMule242+I7Vm8idXs6uCtwE69MYtOk+TwEOKd0XmeoZjXB3YC3Jn
|
||||
NIuaavhWQXapjl0e6kzHQzG9BnorUf02YcaQ/wAuTr8pflY+U8kbcV96NjrB/wCkJA6Paw4/ZfkL
|
||||
8GZ9wBcT5WnZgZ13R45UTLBpGbm06kaZaJwtAZx2qZa7GeETubzytngXxs0ceSJZjHkldqsxJwi/
|
||||
IxXPYXtB3N7pczyp5dg5cW10cwp4waef8rl1L+DnVPY5xXMLKj8rPU/sXrQyx2ktJJ58JFP4Dhls
|
||||
2O2WME8uC6P0/L+XA6WCt9EoMfjpdribJZd+l+Ah4jlRmc/LouDSAvP48ejzczsbeiPTk2tZ7MjJ
|
||||
Yf0jeeR+4rbjxnV8TxdvlXo9rw8eHFgbFE0Na0UKC1zKXSOqugL1BIItNlcPhDk/iDT6Pzr6lyd+
|
||||
VKSLslY4W3s5be2zOcGyOE4FhOG0l6FiaZocUFraCzUIbC42Hg8pe/gEMjLeAO0DKJbuav8AyhZR
|
||||
HIIDLBIVyWhnpU7cPR3TP82fyl3PO9HSwvhj2zIZ8rs3MdLMTuJ4+wW6EoWkYsl83sYYjWMjaCLp
|
||||
Jp9imFOd9QIoWgKINO5zr6CsoHmHuRu5o14RyFIH6QyXY+ryQONNl8fcJnkRuNm7xq70PfVEn8mK
|
||||
Nvk2s2BdtheU+kjNln3WvZiIloaOwSrXZGU5I3xm666RSFIjaHQZQcy2uDrBT3+S0aZro9Fxcgal
|
||||
o5b/APsDeVyql47NHJZIYmohpAHXZWhGD+iHHkm1ZZFwscqFHGCjQPCsYhxpMe+ZoR+PWrNWLs07
|
||||
tKDhe3/ZdTma+BEaMCCNvB4PCqnyBcbMJ6hwHabqRYLDDyLWO50cvPHGjun5hY4V/hZLgyD7Dzfc
|
||||
cst49ArpjSB1ygHypgr7dpmzDWmaXF03fE1wHa9PFcpTOin0EjTCB0r0Fs8p0LBk1jUo4GD6LtxP
|
||||
wuNEGLxvH5s9w0lsGn4jIIAGtaPHlaZ6O0p0tIPGWPkI9k0KPVea1uky2fBSsj2tC8nUn531qbfk
|
||||
PI6JtKhHN0LQN32TPQDGWl/+oPIS79CLY7YdjgQVnYhhrHFzBd/2S2CydjgF3KHRC6wKDjarRQPk
|
||||
PcGkA8IpLR82Z08DI3WGtHA8FTWnsZWRuUgVsLTK4nx4Rp9C9hjWgADgD7oCjrQGE/SXHxXSomis
|
||||
tBcd1i1ZCiZxdwPpA8hEi0xK9xx9Shlju2uu1p1uGmOx1xezQ6rksnmY9rtwDfCyxLnoZntU+hdL
|
||||
GDRb5TU9CCgsDSSRaPeyaIlm51NHfSm/2EhlgekHZjvey3GNh6A7SL8xT1I1VpGlxtFx8JhELzdU
|
||||
bKyPPVMKL4iTUNLkjJfAS9nJP2WmMqfTBqd+hZuAtrhz8pz79AMg6+AOlaIjjGkE0oGmaD039ebG
|
||||
0+fKmL+RrxHqcWG32m8A8Lqz6NpIYbPgIgTGfxI0hsune+1o3M5SssbWzJ5M7nZ5njsJPHCw0+jk
|
||||
se6fG5tHtZbYDGkchD73chZ9DsbPS/Sjm5OnN5shei8K+eM62N7kdiAD4WsM8e9PZcOk49NoyO5L
|
||||
lzpjo045WNaQ7b6kH+oK9DORa31IP9Q/yponIC1/XG5GmSNBv+6Va0JzV+OjyTUX7shyGF0YQRt7
|
||||
u0z4F0OtMaGiys99mW2NoGOk4a0uPgBIfXsDTY4w9LzHgEQuAPzxSTWSV8k4MPj9PS3/ADZGtPYA
|
||||
SX5C+Avt/wBkm6E+3B+QyvHCr/oXwTgv2QydCc2OxNZ+CKB/urnyE2TgvhioN2nY4AVxwnv9iq9k
|
||||
enUwX8lRA7OhhogkXfwpss+O5v7Tu4+FCaZTZ5LuQjIQB3XyQFCwaXDdM9vstL3XzQ6RK1PsJJsL
|
||||
OFkhl/p31+O0H3J/YfFlLsSfr23hx6G1F9yf2TiwR0bmEhzXE/BFJiaZSTND6d0xrYxk5LRyfpB8
|
||||
LHny/wDlFt6Q7zMyPFge8uYWgdALNjxu3pIGW2+jH5/qPIcXbI2tYBwasro4/GlIekl0DYPqOV5L
|
||||
JHNeOqraUdeOl2g5aJZlCUllbXcilJ9AWuyi+KJ5VgpbJROINFRho0Ppgj/mEZdwFMX8jVi9nq8W
|
||||
QzYKI6XWn0bCfvt+QiKFfqZjMnR529/SVVLaFZFylnjWPEGyuFcArk5OmcW1obQWAs7Eey9pLRdf
|
||||
3QNDY6Nx6C1ABskLuD2LXS+nZNNydTBW1o2H6kfK7BoPzt70n+orl7Zr0SbPJ/qKmyE/1En+oqbI
|
||||
dfO92M8E2gp9Cc3oyuW4+8eVcoyEGcyBEKo0GmNDnMaeiaWbJ0Zmts9GwMeKBjPajaCR3S5WS2wt
|
||||
69B24+2TfKRrZWyl08hDbI6vpWpQOwbLyZYot7HckdeEeOFXsFmYn1TKnyJInSFrAapvC2zimO0g
|
||||
5lewmJodKGno0qb0L12MMLAhe87t3B45SLyNLoascjaDTcUOFxA/k2s7zW/kvigbVMeIwyD22jae
|
||||
KFJmGnsLimuzJOH8zbZpb/gxjB+FE3Hjd9RLquykq22xvBa2OdIYyDEjEbQNxsmuTykZHyrsbrSW
|
||||
gt0jvb76IS+KIqeip0jtzhxxSJIpNnzmtc2nsa78i1Spr5LVMmGCto4FeFf9l8VXsS6vgRSjc90h
|
||||
5qt3C0YsjRfFJdCmTT8ccFpIHglP+4ykhLqGFBj5LHQt2l3YvhOx26XYSDsriGOvgBBPsqwYuI6R
|
||||
oFF0YBQthobaQ4ty4qNchXi/kacXs3gyZA0U5deV0aj4Zct/uR6BZJ2RI+JzXGwRRULZ5fnPdHnz
|
||||
NZwA5czNK2zkeQkmwrHe54ouNLHS0ZGMWcUElsuWN/T0z485uw1af4jayI6HjvTNX+pl/wBS9CvR
|
||||
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
|
||||
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;
|
||||
|
||||
# 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.
|
||||
|
|
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
|
||||
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 (_: {
|
||||
src = depot.third_party.sources.home-manager;
|
||||
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.
|
||||
mkShell = super.lib.makeOverridable (args: (super.mkShell args).overrideAttrs (_: {
|
||||
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: {
|
||||
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
|
||||
./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
|
||||
# >=1.9. The patch has been proposed upstream, but so far with no
|
||||
# reactions from the maintainer:
|
||||
|
@ -145,11 +121,6 @@ depot.nix.readTree.drvTargets {
|
|||
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
|
||||
# https://github.com/NixOS/nixpkgs/pull/320197
|
||||
fuse =
|
||||
|
@ -163,9 +134,8 @@ depot.nix.readTree.drvTargets {
|
|||
};
|
||||
}) else super.fuse;
|
||||
|
||||
# somebody renamed 'utillinux' upstream, but didn't rename all use-cases,
|
||||
# leading to some packages being broken.
|
||||
#
|
||||
# temporarily restore the old name to make things work again.
|
||||
utillinux = self.util-linux;
|
||||
treefmt = super.treefmt.overrideAttrs (old: {
|
||||
# https://github.com/numtide/treefmt/pull/328
|
||||
patches = old.patches or [ ] ++ [ ./patches/treefmt-fix-no-cache.patch ];
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
};
|
||||
|
||||
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",
|
||||
"owner": "ryantm",
|
||||
"repo": "agenix",
|
||||
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
|
||||
"sha256": "1x8nd8hvsq6mvzig122vprwigsr3z2skanig65haqswn7z7amsvg",
|
||||
"rev": "c2fc0762bbe8feb06a2e59a364fa81b3a57671c9",
|
||||
"sha256": "1lpkwinlax40b7xgzspbkm9rsi4a1x48hxhixnni4irxxwnav0ah",
|
||||
"type": "tarball",
|
||||
"url": "https://github.com/ryantm/agenix/archive/f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41.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": "https://github.com/ryantm/agenix/archive/c2fc0762bbe8feb06a2e59a364fa81b3a57671c9.tar.gz",
|
||||
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
|
||||
},
|
||||
"home-manager": {
|
||||
|
@ -29,10 +17,10 @@
|
|||
"homepage": "https://nix-community.github.io/home-manager/",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "10e99c43cdf4a0713b4e81d90691d22c6a58bdf2",
|
||||
"sha256": "1vklmr0vzhplcjcqg19v66c1swg3xcgw96ry90dyd4hl2cb9j80b",
|
||||
"rev": "a7117efb3725e6197dd95424136f79147aa35e5b",
|
||||
"sha256": "02q3ck1hjs8xzdhfikqxrnsfs9vh4p7rmdha3vbp6nkkdbdvhgg7",
|
||||
"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"
|
||||
},
|
||||
"impermanence": {
|
||||
|
@ -41,10 +29,10 @@
|
|||
"homepage": "",
|
||||
"owner": "nix-community",
|
||||
"repo": "impermanence",
|
||||
"rev": "d000479f4f41390ff7cf9204979660ad5dd16176",
|
||||
"sha256": "1xj0kw8w1xv4g1k64k9mak6j8c044rrrkz7ik22z3qsayaqiylm2",
|
||||
"rev": "a33ef102a02ce77d3e39c25197664b7a636f9c30",
|
||||
"sha256": "1mig6ns8l5iynsm6pfbnx2b9hmr592s1kqbw6gq1n25czdlcniam",
|
||||
"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"
|
||||
},
|
||||
"naersk": {
|
||||
|
@ -53,10 +41,10 @@
|
|||
"homepage": "",
|
||||
"owner": "nmattia",
|
||||
"repo": "naersk",
|
||||
"rev": "378614f37a6bee5a3f2ef4f825a73d948d3ae921",
|
||||
"sha256": "088pbn3jcckbhzg7kr9bhii9vgrnr6y2mrqnw30bk4jhbjkrk1bb",
|
||||
"rev": "fa19d8c135e776dc97f4dcca08656a0eeb28d5c0",
|
||||
"sha256": "1mif058gcbw5d5yixsmzalqlr0h9m9mmbsgv8v4r2mmsbw83k2x0",
|
||||
"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"
|
||||
},
|
||||
"napalm": {
|
||||
|
@ -65,10 +53,10 @@
|
|||
"homepage": "",
|
||||
"owner": "nix-community",
|
||||
"repo": "napalm",
|
||||
"rev": "e1babff744cd278b56abe8478008b4a9e23036cf",
|
||||
"sha256": "04h62p4hxw7fhclki7hcn739hhig3rh9q4njp24j7bm0dk2kj8h6",
|
||||
"rev": "edcb26c266ca37c9521f6a97f33234633cbec186",
|
||||
"sha256": "0ai1ax380nnpz0mbgbc5vdzafyjilcmdj7kgv087x2vagpprb4yy",
|
||||
"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"
|
||||
},
|
||||
"nixpkgs": {
|
||||
|
@ -77,10 +65,10 @@
|
|||
"homepage": "",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "88195a94f390381c6afcdaa933c2f6ff93959cb4",
|
||||
"sha256": "1fs25csg0lq3v34jdzxr2qdvnyvylimmfh0qxlf39h4j1hclvbyj",
|
||||
"rev": "7f993cdf26ccef564eabf31fdb40d140821e12bc",
|
||||
"sha256": "0dypbvibfdmv14rqlamf451625fw2fyk11prw9bbywi0q2i313d5",
|
||||
"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"
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
|
@ -89,10 +77,10 @@
|
|||
"homepage": "",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5",
|
||||
"sha256": "1f5d2g1p6nfwycpmrnnmc2xmcszp804adp16knjvdkj8nz36y1fg",
|
||||
"rev": "a2e1d0414259a144ebdc048408a807e69e0565af",
|
||||
"sha256": "1jv90bz3s7j294fhpb29k735fg3xfs9z848szicqarpbz7wfg03g",
|
||||
"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"
|
||||
},
|
||||
"rust-overlay": {
|
||||
|
@ -101,10 +89,10 @@
|
|||
"homepage": "",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "d199142e84bfaae476ffb4e09a70879d7918784d",
|
||||
"sha256": "1bhapkiiii984m86cp1xkr8jh0i86vmbl5z3b9nzylfg0y7fij5f",
|
||||
"rev": "6dc3e45fe4aee36efeed24d64fc68b1f989d5465",
|
||||
"sha256": "0vqgkzbfdj920lbm1dy8kylrv2gk4ard38lb3i20xvp2mp1d39n2",
|
||||
"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"
|
||||
},
|
||||
"rustsec-advisory-db": {
|
||||
|
@ -113,10 +101,10 @@
|
|||
"homepage": "https://rustsec.org",
|
||||
"owner": "RustSec",
|
||||
"repo": "advisory-db",
|
||||
"rev": "3c6d3186ab06737d1defd2b5ae556d0ecd161603",
|
||||
"sha256": "05cg2fhjqv4xly1g5a8dm0bc08yzzqn2is5s7c7kczib3j4gpiq5",
|
||||
"rev": "af76d4423761499f954411bb3071dcc72e6b0450",
|
||||
"sha256": "167qxr66j638km3z7zk2drjdr4bgqz77hr35vkwdp0lbafmd6y1c",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
|
|
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";
|
||||
fetch-depot-inbox.attr = "tools.fetch-depot-inbox";
|
||||
git-r.attr = "tools.git-r";
|
||||
git-review.attr = "third_party.nixpkgs.git-review";
|
||||
gerrit-update.attr = "tools.gerrit-update";
|
||||
gerrit.attr = "tools.gerrit-cli";
|
||||
hash-password.attr = "tools.hash-password";
|
||||
|
|
|
@ -1,14 +1,24 @@
|
|||
# Builds treefmt for depot, with a hardcoded configuration that
|
||||
# includes the right paths to formatters.
|
||||
{ pkgs, ... }:
|
||||
{ depot, pkgs, ... }:
|
||||
|
||||
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" ''
|
||||
[formatter.go]
|
||||
command = "${pkgs.go}/bin/gofmt"
|
||||
command = "${depot.nix.buildGo.go}/bin/gofmt"
|
||||
options = [ "-w" ]
|
||||
includes = ["*.go"]
|
||||
|
||||
[formatter.tf]
|
||||
command = "${terraformat}"
|
||||
includes = [ "*.tf" ]
|
||||
|
||||
[formatter.nix]
|
||||
command = "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt"
|
||||
includes = [ "*.nix" ]
|
||||
|
@ -18,10 +28,8 @@ let
|
|||
|
||||
[formatter.rust]
|
||||
command = "${pkgs.rustfmt}/bin/rustfmt"
|
||||
options = ["--edition", "2021"]
|
||||
includes = [ "*.rs" ]
|
||||
excludes = [
|
||||
"users/emery/*",
|
||||
"users/tazjin/*",
|
||||
]
|
||||
'';
|
||||
|
@ -45,12 +53,10 @@ let
|
|||
'';
|
||||
in
|
||||
depotfmt.overrideAttrs (_: {
|
||||
passthru = {
|
||||
inherit config check;
|
||||
meta.ci.extraSteps.check = {
|
||||
label = "depot formatting check";
|
||||
command = check;
|
||||
alwaysRun = true;
|
||||
};
|
||||
passthru.config = config;
|
||||
passthru.meta.ci.extraSteps.check = {
|
||||
label = "depot formatting check";
|
||||
command = check;
|
||||
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