diff --git a/packages/lastfm-rpc/Cargo.lock b/packages/lastfm-rpc/Cargo.lock new file mode 100644 index 00000000..db5f884d --- /dev/null +++ b/packages/lastfm-rpc/Cargo.lock @@ -0,0 +1,1647 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" + +[[package]] +name = "bumpalo" +version = "3.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "cc" +version = "1.2.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "discord-rich-presence" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75db747ecd252c01bfecaf709b07fcb4c634adf0edb5fed47bc9c3052e7076b" +dependencies = [ + "serde", + "serde_derive", + "serde_json", + "serde_repr", + "uuid", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "fastrand" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", + "wasip3", +] + +[[package]] +name = "h2" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.10", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.0", + "serde", + "serde_core", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "js-sys" +version = "0.3.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" +dependencies = [ + "cfg-if", + "futures-util", + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "lastfm-rpc" +version = "0.1.0" +dependencies = [ + "discord-rich-presence", + "dotenvy", + "reqwest", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "libc" +version = "0.2.184" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mio" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "native-tls" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "openssl" +version = "0.10.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "951c002c75e16ea2c65b8c7e4d3d51d5530d8dfa7d060b4776828c88cfb18ecf" +dependencies = [ + "bitflags 2.11.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "openssl-sys" +version = "0.9.112" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d55af3b3e226502be1526dfdba67ab0e9c96fc293004e79576b2b9edb0dbdb" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.11.0", +] + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.11.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags 2.11.0", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.2", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.3", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + +[[package]] +name = "web-sys" +version = "0.3.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +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" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "yoke" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/packages/lastfm-rpc/Cargo.toml b/packages/lastfm-rpc/Cargo.toml new file mode 100644 index 00000000..bbcff6d6 --- /dev/null +++ b/packages/lastfm-rpc/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "lastfm-rpc" +version = "0.1.0" +edition = "2024" + +[dependencies] +tokio = { version = "1", features = ["full"] } +reqwest = { version = "0.11", features = ["json"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +discord-rich-presence = "0.2" +dotenvy = "0.15" \ No newline at end of file diff --git a/packages/lastfm-rpc/configuration.nix b/packages/lastfm-rpc/configuration.nix new file mode 100644 index 00000000..a733c25e --- /dev/null +++ b/packages/lastfm-rpc/configuration.nix @@ -0,0 +1,30 @@ +{ + pkgs, + lib, + config, + ... +}: +{ + options = { + envPath = lib.mkOption { type = lib.types.str; }; + }; + + config = + let + package = (pkgs.callPackage ./default.nix { }); + in + { + systemd.user.services.lastfm-rpc = { + description = "Last.FM Discord RPC"; + wantedBy = [ "graphical-session.target" ]; + after = [ "network.target" ]; + + serviceConfig = { + ExecStart = "${package}/bin/lastfm-rpc"; + Restart = "always"; + RestartSec = "60s"; + EnvironmentFile = config.envPath; + }; + }; + }; +} diff --git a/packages/lastfm-rpc/package.nix b/packages/lastfm-rpc/package.nix new file mode 100644 index 00000000..21a97e53 --- /dev/null +++ b/packages/lastfm-rpc/package.nix @@ -0,0 +1,19 @@ +{ + pkgs, + ... +}: + +pkgs.rustPlatform.buildRustPackage rec { + pname = "lastfm-rpc"; + version = "0.1.0"; + src = pkgs.lib.cleanSource ./.; + cargoLock.lockFile = ./Cargo.lock; + + nativeBuildInputs = [ + pkgs.pkg-config + ]; + + buildInputs = [ + pkgs.openssl + ]; +} diff --git a/packages/lastfm-rpc/src/main.rs b/packages/lastfm-rpc/src/main.rs new file mode 100644 index 00000000..51f81f49 --- /dev/null +++ b/packages/lastfm-rpc/src/main.rs @@ -0,0 +1,245 @@ +use std::env; +use std::time::Duration; + +use discord_rich_presence::{activity, activity::ActivityType, DiscordIpc, DiscordIpcClient}; +use reqwest::Client; +use serde::Deserialize; + +const POLL_INTERVAL: Duration = Duration::from_secs(5); +const HTTP_TIMEOUT: Duration = Duration::from_secs(15); +const CIDER_TIMEOUT: Duration = Duration::from_secs(2); +const INITIAL_BACKOFF: Duration = Duration::from_secs(2); +const MAX_BACKOFF: Duration = Duration::from_secs(60); +const USER_AGENT: &str = concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")); +const CIDER_RPC_BASE: &str = "http://127.0.0.1:10767"; + +#[derive(Deserialize, Debug)] +struct LastFmResponse { + recenttracks: RecentTracks, +} + +#[derive(Deserialize, Debug)] +struct RecentTracks { + track: Vec, +} + +#[derive(Deserialize, Debug)] +struct Track { + name: String, + artist: TextNode, + album: TextNode, + #[serde(rename = "@attr")] + attr: Option, + #[serde(default)] + image: Vec, +} + +#[derive(Deserialize, Debug)] +struct TextNode { + #[serde(rename = "#text")] + text: String, +} + +#[derive(Deserialize, Debug)] +struct AttrNode { + nowplaying: String, +} + +#[derive(Deserialize, Debug)] +struct ImageNode { + #[serde(rename = "#text")] + text: String, +} + +fn env_required(name: &str) -> String { + env::var(name).unwrap_or_else(|_| { + eprintln!("Missing required environment variable: {name}"); + std::process::exit(1); + }) +} + +async fn fetch_recent_track( + client: &Client, + user: &str, + api_key: &str, +) -> Result { + client + .get("https://ws.audioscrobbler.com/2.0/") + .query(&[ + ("method", "user.getrecenttracks"), + ("user", user), + ("api_key", api_key), + ("format", "json"), + ("limit", "1"), + ]) + .send() + .await? + .error_for_status()? + .json::() + .await +} + +async fn fetch_with_retry(client: &Client, user: &str, api_key: &str) -> LastFmResponse { + let mut backoff = INITIAL_BACKOFF; + loop { + match fetch_recent_track(client, user, api_key).await { + Ok(data) => return data, + Err(e) => { + eprintln!("Last.fm request failed ({e}); retrying in {backoff:?}"); + tokio::time::sleep(backoff).await; + backoff = (backoff * 2).min(MAX_BACKOFF); + } + } + } +} + +async fn cider_is_playing(client: &Client, token: Option<&str>) -> bool { + let mut req = client + .get(format!("{CIDER_RPC_BASE}/api/v1/playback/is-playing")) + .timeout(CIDER_TIMEOUT); + if let Some(t) = token { + req = req.header("apptoken", t); + } + let Ok(resp) = req.send().await else { + return false; + }; + if !resp.status().is_success() { + return false; + } + match resp.json::().await { + Ok(v) => v + .get("is_playing") + .and_then(|x| x.as_bool()) + .unwrap_or(false), + Err(_) => false, + } +} + +async fn connect_discord(client_id: &str) -> DiscordIpcClient { + let mut backoff = INITIAL_BACKOFF; + loop { + match DiscordIpcClient::new(client_id) { + Ok(mut client) => match client.connect() { + Ok(()) => { + println!("Connected to Discord IPC."); + return client; + } + Err(e) => eprintln!("Discord IPC connect failed ({e}); retrying in {backoff:?}"), + }, + Err(e) => eprintln!("Discord IPC client init failed ({e}); retrying in {backoff:?}"), + } + tokio::time::sleep(backoff).await; + backoff = (backoff * 2).min(MAX_BACKOFF); + } +} + +#[tokio::main] +async fn main() -> Result<(), Box> { + let _ = dotenvy::dotenv(); + + let lastfm_api_key = env_required("LASTFM_API_KEY"); + let lastfm_user = env_required("LASTFM_USER"); + let discord_client_id = env_required("DISCORD_CLIENT_ID"); + let cider_token = env::var("CIDER_API_TOKEN").ok(); + + let http_client = Client::builder() + .timeout(HTTP_TIMEOUT) + .user_agent(USER_AGENT) + .build()?; + + println!("Connecting to Discord IPC..."); + let mut discord_client = connect_discord(&discord_client_id).await; + println!("Starting Last.fm polling loop..."); + + let mut last_state: Option<(String, String)> = None; + + loop { + // Cider already publishes its own Discord activity; suppress ours so they don't double up. + if cider_is_playing(&http_client, cider_token.as_deref()).await { + if last_state.is_some() { + match discord_client.clear_activity() { + Ok(()) => { + println!("Cider is playing. Activity cleared."); + last_state = None; + } + Err(e) => { + eprintln!("Discord IPC error ({e}); reconnecting..."); + let _ = discord_client.close(); + discord_client = connect_discord(&discord_client_id).await; + last_state = None; + } + } + } + tokio::time::sleep(POLL_INTERVAL).await; + continue; + } + + let data = fetch_with_retry(&http_client, &lastfm_user, &lastfm_api_key).await; + + let now_playing = data.recenttracks.track.first().filter(|t| { + t.attr + .as_ref() + .is_some_and(|a| a.nowplaying == "true") + }); + + let ipc_result = match now_playing { + Some(track) => { + let details = track.name.clone(); + let state = format!("{} - {}", track.artist.text, track.album.text); + let cover_url = track + .image + .iter() + .rev() + .find(|i| !i.text.is_empty()) + .map(|i| i.text.clone()); + + let new_state = (details, state); + if last_state.as_ref() == Some(&new_state) { + Ok(()) + } else { + let mut assets = activity::Assets::new().large_text("Last.fm"); + if let Some(url) = cover_url.as_deref() { + assets = assets.large_image(url); + } + let payload = activity::Activity::new() + .activity_type(ActivityType::Listening) + .details(&new_state.0) + .state(&new_state.1) + .assets(assets); + + match discord_client.set_activity(payload) { + Ok(()) => { + println!("Now playing: {} — {}", new_state.0, new_state.1); + last_state = Some(new_state); + Ok(()) + } + Err(e) => Err(e), + } + } + } + None => { + if last_state.is_some() { + match discord_client.clear_activity() { + Ok(()) => { + println!("Nothing playing. Status cleared."); + last_state = None; + Ok(()) + } + Err(e) => Err(e), + } + } else { + Ok(()) + } + } + }; + + if let Err(e) = ipc_result { + eprintln!("Discord IPC error ({e}); reconnecting..."); + let _ = discord_client.close(); + discord_client = connect_discord(&discord_client_id).await; + last_state = None; + } + + tokio::time::sleep(POLL_INTERVAL).await; + } +} diff --git a/packages/skye-server-checks/.gitignore b/packages/skye-server-checks/.gitignore new file mode 100644 index 00000000..66cabaf2 --- /dev/null +++ b/packages/skye-server-checks/.gitignore @@ -0,0 +1,3 @@ +debug +target +**/*.rs.bk \ No newline at end of file diff --git a/packages/skye-server-checks/Cargo.lock b/packages/skye-server-checks/Cargo.lock new file mode 100644 index 00000000..41454285 --- /dev/null +++ b/packages/skye-server-checks/Cargo.lock @@ -0,0 +1,2673 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-signal" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "aws-lc-rs" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94bffc006df10ac2a68c83692d734a465f8ee6c5b384d8545a636f81d858f4bf" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4321e568ed89bb5a7d291a7f37997c2c0df89809d7b6d12062c81ddb54aa782e" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "bumpalo" +version = "3.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "cc" +version = "1.2.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-link", +] + +[[package]] +name = "cmake" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75443c44cd6b379beb8c5b45d85d0773baf31cce901fe7bb252f4eff3008ef7d" +dependencies = [ + "cc", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "endi" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi 5.3.0", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "wasip2", + "wasip3", +] + +[[package]] +name = "h2" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +dependencies = [ + "equivalent", + "hashbrown 0.16.1", + "serde", + "serde_core", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "iri-string" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "libc" +version = "0.2.183" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mio" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.18", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +dependencies = [ + "aws-lc-rs", + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "reqwest" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "mime", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "rustls-platform-verifier", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" +dependencies = [ + "aws-lc-rs", + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-platform-verifier" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni", + "log", + "once_cell", + "rustls", + "rustls-native-certs", + "rustls-platform-verifier-android", + "rustls-webpki", + "security-framework", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + +[[package]] +name = "rustls-webpki" +version = "0.103.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" +dependencies = [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "server-checks" +version = "0.1.0" +dependencies = [ + "anyhow", + "reqwest", + "serde", + "serde_json", + "tokio", + "tokio_schedule", + "urlencoding", + "zbus", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "system-configuration" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" +dependencies = [ + "bitflags", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.2", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl 2.0.18", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio_schedule" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c291c554da3518d6ef69c76ea35aabc78f736185a16b6017f6d1c224dac2e0" +dependencies = [ + "chrono", + "tokio", +] + +[[package]] +name = "toml_datetime" +version = "1.0.0+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32c2555c699578a4f59f0cc68e5116c8d7cabbd45e1409b989d4be085b53f13e" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.25.4+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7193cbd0ce53dc966037f54351dbbcf0d5a642c7f0038c382ef9e677ce8c13f2" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.9+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" +dependencies = [ + "winnow", +] + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "uds_windows" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b70b87d15e91f553711b40df3048faf27a7a04e01e0ddc0cf9309f0af7c2ca" +dependencies = [ + "memoffset", + "tempfile", + "windows-sys 0.61.2", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a68d3c8f01c0cfa54a75291d83601161799e4a89a39e0929f4b0354d88757a37" +dependencies = [ + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.2+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" +dependencies = [ + "cfg-if", + "futures-util", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags", + "hashbrown 0.15.5", + "indexmap", + "semver", +] + +[[package]] +name = "web-sys" +version = "0.3.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-root-certs" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck", + "indexmap", + "prettyplease", + "syn", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zbus" +version = "5.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca82f95dbd3943a40a53cfded6c2d0a2ca26192011846a1810c4256ef92c60bc" +dependencies = [ + "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-lite", + "hex", + "libc", + "ordered-stream", + "rustix", + "serde", + "serde_repr", + "tracing", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897e79616e84aac4b2c46e9132a4f63b93105d54fe8c0e8f6bffc21fa8d49222" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffd8af6d5b78619bab301ff3c560a5bd22426150253db278f164d6cf3b72c50f" +dependencies = [ + "serde", + "winnow", + "zvariant", +] + +[[package]] +name = "zerocopy" +version = "0.8.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + +[[package]] +name = "zvariant" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5708299b21903bbe348e94729f22c49c55d04720a004aa350f1f9c122fd2540b" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b59b012ebe9c46656f9cc08d8da8b4c726510aef12559da3e5f1bf72780752c" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75c23a64ef8f40f13a6989991e643554d9bef1d682a281160cf0c1bc389c5e9" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn", + "winnow", +] diff --git a/packages/skye-server-checks/Cargo.toml b/packages/skye-server-checks/Cargo.toml new file mode 100644 index 00000000..15f99b1d --- /dev/null +++ b/packages/skye-server-checks/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "server-checks" +version = "0.1.0" +edition = "2024" + +[dependencies] +anyhow = "1.0.102" +reqwest = "0.13.2" +serde = "1.0.228" +serde_json = "1.0.149" +tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread"] } +tokio_schedule = "0.3.2" +urlencoding = "2.1.3" +zbus = "5.14.0" + +[profile.release] +lto = true +strip = true diff --git a/packages/skye-server-checks/configuration.nix b/packages/skye-server-checks/configuration.nix new file mode 100644 index 00000000..a254dd33 --- /dev/null +++ b/packages/skye-server-checks/configuration.nix @@ -0,0 +1,40 @@ +{ + pkgs, + lib, + config, + ... +}: +# adapted from https://github.com/PluralKit/infra/tree/main +{ + options = { + serverChecks = lib.mkOption { + type = with lib.types; listOf anything; + default = [ ]; + }; + envPath = lib.mkOption { type = lib.types.str; }; + }; + + config = + let + package = (pkgs.callPackage ./default.nix { }); + in + { + environment.interactiveShellInit = '' + ${package}/bin/server-checks + ''; + environment.etc."/server-checks/checks.json".text = builtins.toJSON config.serverChecks; + systemd.services.server-checks = { + description = "Server monitoring daemon"; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + + serviceConfig = { + ExecStart = "${package}/bin/server-checks agent"; + Restart = "always"; + RestartSec = "60s"; + User = "root"; + EnvironmentFile = config.envPath; + }; + }; + }; +} diff --git a/packages/skye-server-checks/package.nix b/packages/skye-server-checks/package.nix new file mode 100644 index 00000000..b6655acb --- /dev/null +++ b/packages/skye-server-checks/package.nix @@ -0,0 +1,11 @@ +{ + pkgs, + ... +}: + +pkgs.rustPlatform.buildRustPackage rec { + pname = "server-checks"; + version = "0.1"; + src = pkgs.lib.cleanSource ./.; + cargoLock.lockFile = ./Cargo.lock; +} diff --git a/packages/skye-server-checks/src/checks.rs b/packages/skye-server-checks/src/checks.rs new file mode 100644 index 00000000..544fa2df --- /dev/null +++ b/packages/skye-server-checks/src/checks.rs @@ -0,0 +1,86 @@ +use std::{ + fs, + time::{SystemTime, UNIX_EPOCH}, +}; + +use crate::{ + SystemdManagerProxy, + types::{Check, Runfile, UnitStatus}, +}; + +pub async fn run_checks(manager: SystemdManagerProxy<'_>) -> anyhow::Result<()> { + let contents = std::fs::read_to_string(super::CONFIG_FILE)?; + let checks: Vec = serde_json::from_str(&contents)?; + + if checks.len() == 0 { + anyhow::bail!("no checks to run"); + } + + let units = manager.list_units().await?; + + let mut errors: Vec = Vec::new(); + for check in checks { + match check_run(&units, &check).await { + Ok(()) => {} + Err(err) => { + let key = format!("{} {}", check.r#type, check.value.unwrap_or(String::new())); + errors.push(format!("{key}: {err}")); + println!("check {key} FAIL: {err}"); + } + } + } + + let data: Runfile = Runfile { + ts: SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("time is fucked?") + .as_secs() as i64, + errors, + }; + + fs::write(super::STATE_FILE, serde_json::to_string(&data)?)?; + Ok(()) +} + +pub async fn check_run(units: &Vec, check: &Check) -> anyhow::Result<(), String> { + match check.r#type.as_str() { + "systemd_no_failing_services" => { + let failed_units: Vec<_> = units + .into_iter() + .filter(|unit| unit.active_state == "failed") + .collect(); + if failed_units.len() > 0 { + return Err(failed_units + .iter() + .map(|u| u.id.as_str()) + .collect::>() + .join(", ")); + } else { + println!("no systemd units failing") + } + } + "systemd_service_running" => { + let mut name: String = check.value.as_ref().expect("expected value").clone(); + (!name.ends_with(".service")).then(|| name = format!("{name}.service")); + + let unit = (units + .into_iter() + .filter(|unit| unit.id == name) + .collect::>()) + .first() + .ok_or("could not find service")? + .to_owned(); + + if unit.active_state == "active" && unit.sub_state == "running" { + println!("systemd service {} is running", unit.id.clone()) + } else { + return Err(format!( + "service is in unexpected state {} ({})", + unit.active_state, unit.sub_state + )); + } + } + u => return Err(format!("unknown check type {u}")), + } + Ok(()) +} diff --git a/packages/skye-server-checks/src/main.rs b/packages/skye-server-checks/src/main.rs new file mode 100644 index 00000000..7142fc39 --- /dev/null +++ b/packages/skye-server-checks/src/main.rs @@ -0,0 +1,127 @@ +mod checks; +mod types; + +use std::{ + env, + time::{SystemTime, UNIX_EPOCH}, +}; + +use anyhow::Ok; +use tokio::spawn; +use tokio_schedule::{Job, every}; +use zbus::{Connection, proxy}; + +use crate::{ + checks::run_checks, + types::{Runfile, UnitStatus}, +}; + +const STATE_FILE: &str = "/run/server-checks.json"; +const CONFIG_FILE: &str = "/etc/server-checks/checks.json"; + +#[proxy( + interface = "org.freedesktop.systemd1.Manager", + default_service = "org.freedesktop.systemd1", + default_path = "/org/freedesktop/systemd1" +)] +trait SystemdManager { + fn list_units(&self) -> anyhow::Result>; +} + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let args: Vec = env::args().collect(); + + match args.len() { + 1 => {} + 2 => match args[1].as_str() { + "agent" => { + return run_agent(&env::var("KUMA_URL").expect("KUMA_URL must be set")).await; + } + "check-now" => { + return checks::run_checks( + SystemdManagerProxy::new( + &Connection::system() + .await + .expect("expected system connection"), + ) + .await + .expect("expected system proxy"), + ) + .await; + } + _ => anyhow::bail!("invalid argument!"), + }, + _ => anyhow::bail!("too many arguments!"), + } + + println!("getting latest check status"); + + let contents = std::fs::read_to_string(STATE_FILE)?; + let runfile: Runfile = serde_json::from_str(&contents)?; + let current_timestamp = SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() as i64; + let age = current_timestamp - runfile.ts; + + if age > 60 { + println!("warn: last check too old ({} seconds ago)!", age); + } + + if runfile.errors.len() > 0 { + println!("last check ({} seconds ago) was failing:", age); + anyhow::bail!("failing checks:\n - {}\n", runfile.errors.join(", ")); + } + + println!("all checks ok! last check was {} seconds ago", age); + Ok(()) +} + +async fn run_agent(kuma_url: &str) -> anyhow::Result<()> { + let checks = every(30).seconds().perform(|| async { + run_checks( + SystemdManagerProxy::new( + &Connection::system() + .await + .expect("expected system connection"), + ) + .await + .expect("expected system proxy"), + ) + .await + .expect("checks failed") + }); + spawn(checks); + let heartbeat = every(60).seconds().perform(|| async { + if let Err(e) = kuma_heartbeat(kuma_url).await { + eprintln!("heartbeat failed: {:?}", e); + } + }); + heartbeat.await; + Ok(()) +} + +async fn kuma_heartbeat(kuma_url: &str) -> anyhow::Result<()> { + let mut status = "up"; + let mut msg = String::new(); + + let contents = std::fs::read_to_string(STATE_FILE)?; + let runfile: Runfile = serde_json::from_str(&contents)?; + let current_timestamp = SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() as i64; + let age = current_timestamp - runfile.ts; + + if age > 60 { + status = "down"; + msg = urlencoding::encode("last check older than 60s").into_owned(); + } + if runfile.errors.len() > 0 { + status = "down"; + msg = urlencoding::encode(&format!("failed checks: {}", runfile.errors.join(", "))) + .into_owned(); + } + + let status = reqwest::get(format!("{kuma_url}?status={status}&msg={msg}")) + .await? + .status(); + (!status.is_success()).then(|| println!("error while heartbeating")); + + Ok(()) +} diff --git a/packages/skye-server-checks/src/types.rs b/packages/skye-server-checks/src/types.rs new file mode 100644 index 00000000..59d2b841 --- /dev/null +++ b/packages/skye-server-checks/src/types.rs @@ -0,0 +1,29 @@ +use serde::{Deserialize, Serialize}; +use zbus::zvariant::{OwnedObjectPath, Type}; + +#[derive(Debug, Serialize, Deserialize, Type)] +pub struct UnitStatus { + pub id: String, + pub description: String, + pub load_state: String, + pub active_state: String, + pub sub_state: String, + pub following: String, + pub unit_path: OwnedObjectPath, + pub job_id: u32, + pub job_type: String, + pub job_path: OwnedObjectPath, +} + +#[derive(Serialize, Deserialize)] +pub struct Runfile { + pub ts: i64, + pub errors: Vec, +} + +#[derive(Serialize, Deserialize)] +pub struct Check { + pub r#type: String, + pub value: Option, + pub data: Option, +} -- 2.51.2 From 11e5369cc3dcc18ee9a560b886004feb36d06130 Mon Sep 17 00:00:00 2001 From: dish Date: Fri, 19 Jun 2026 20:45:36 -0400 Subject: [PATCH 2/9] [pkgs] make lastfm-rpc more idiomatic --- packages/lastfm-rpc/configuration.nix | 6 +++--- packages/lastfm-rpc/package.nix | 16 ++++++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/lastfm-rpc/configuration.nix b/packages/lastfm-rpc/configuration.nix index a733c25e..8212fe81 100644 --- a/packages/lastfm-rpc/configuration.nix +++ b/packages/lastfm-rpc/configuration.nix @@ -1,5 +1,5 @@ { - pkgs, + self', lib, config, ... @@ -11,7 +11,7 @@ config = let - package = (pkgs.callPackage ./default.nix { }); + package = self'.packages.lastfm-rpc; in { systemd.user.services.lastfm-rpc = { @@ -20,7 +20,7 @@ after = [ "network.target" ]; serviceConfig = { - ExecStart = "${package}/bin/lastfm-rpc"; + ExecStart = lib.getExe package; Restart = "always"; RestartSec = "60s"; EnvironmentFile = config.envPath; diff --git a/packages/lastfm-rpc/package.nix b/packages/lastfm-rpc/package.nix index 21a97e53..308f6507 100644 --- a/packages/lastfm-rpc/package.nix +++ b/packages/lastfm-rpc/package.nix @@ -1,19 +1,23 @@ { - pkgs, - ... + lib, + rustPlatform, + pkg-config, + openssl, }: -pkgs.rustPlatform.buildRustPackage rec { +rustPlatform.buildRustPackage { pname = "lastfm-rpc"; version = "0.1.0"; - src = pkgs.lib.cleanSource ./.; + src = lib.cleanSource ./.; cargoLock.lockFile = ./Cargo.lock; nativeBuildInputs = [ - pkgs.pkg-config + pkg-config ]; buildInputs = [ - pkgs.openssl + openssl ]; + + meta.mainProgram = "lastfm-rpc"; } -- 2.51.2 From e95036274a511d9b91ae5d4bac6778c64b0c5872 Mon Sep 17 00:00:00 2001 From: dish Date: Fri, 19 Jun 2026 20:45:43 -0400 Subject: [PATCH 3/9] [pkgs] make skye-server-checks more idiomatic --- packages/skye-server-checks/configuration.nix | 10 +++++----- packages/skye-server-checks/package.nix | 10 ++++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/skye-server-checks/configuration.nix b/packages/skye-server-checks/configuration.nix index a254dd33..9b4eefda 100644 --- a/packages/skye-server-checks/configuration.nix +++ b/packages/skye-server-checks/configuration.nix @@ -1,5 +1,5 @@ { - pkgs, + self', lib, config, ... @@ -16,12 +16,12 @@ config = let - package = (pkgs.callPackage ./default.nix { }); + package = self'.packages.skye-server-checks; in { environment.interactiveShellInit = '' - ${package}/bin/server-checks - ''; + ${lib.getExe package} + ''; environment.etc."/server-checks/checks.json".text = builtins.toJSON config.serverChecks; systemd.services.server-checks = { description = "Server monitoring daemon"; @@ -29,7 +29,7 @@ after = [ "network.target" ]; serviceConfig = { - ExecStart = "${package}/bin/server-checks agent"; + ExecStart = "${lib.getExe package} agent"; Restart = "always"; RestartSec = "60s"; User = "root"; diff --git a/packages/skye-server-checks/package.nix b/packages/skye-server-checks/package.nix index b6655acb..cb0c66eb 100644 --- a/packages/skye-server-checks/package.nix +++ b/packages/skye-server-checks/package.nix @@ -1,11 +1,13 @@ { - pkgs, - ... + lib, + rustPlatform, }: -pkgs.rustPlatform.buildRustPackage rec { +rustPlatform.buildRustPackage { pname = "server-checks"; version = "0.1"; - src = pkgs.lib.cleanSource ./.; + src = lib.cleanSource ./.; cargoLock.lockFile = ./Cargo.lock; + + meta.mainProgram = "server-checks"; } -- 2.51.2 From 37f98275bb1780effa6b05034699b822b81ba283 Mon Sep 17 00:00:00 2001 From: dish Date: Fri, 19 Jun 2026 23:27:24 -0400 Subject: [PATCH 4/9] [nixos] move over skye's nixos modules --- nixosModules/default.nix | 3 + nixosModules/skye/base/backup.nix | 46 ++++++++++++++ nixosModules/skye/base/default.nix | 62 +++++++++++++++++++ nixosModules/skye/base/desktop/default.nix | 9 +++ nixosModules/skye/base/desktop/desktop.nix | 40 ++++++++++++ nixosModules/skye/base/desktop/packages.nix | 47 ++++++++++++++ nixosModules/skye/base/metrics.nix | 50 +++++++++++++++ .../skye/base/misc/tailscale-serve.nix | 54 ++++++++++++++++ nixosModules/skye/base/networking.nix | 17 +++++ nixosModules/skye/base/packages.nix | 24 +++++++ nixosModules/skye/base/server/checks.nix | 30 +++++++++ nixosModules/skye/base/server/default.nix | 6 ++ nixosModules/skye/base/sshKeys/skye | 4 ++ nixosModules/skye/base/users.nix | 28 +++++++++ .../skye/lastfm-rpc/default.nix | 0 .../skye/server-checks/default.nix | 0 16 files changed, 420 insertions(+) create mode 100644 nixosModules/skye/base/backup.nix create mode 100644 nixosModules/skye/base/default.nix create mode 100644 nixosModules/skye/base/desktop/default.nix create mode 100644 nixosModules/skye/base/desktop/desktop.nix create mode 100644 nixosModules/skye/base/desktop/packages.nix create mode 100644 nixosModules/skye/base/metrics.nix create mode 100644 nixosModules/skye/base/misc/tailscale-serve.nix create mode 100644 nixosModules/skye/base/networking.nix create mode 100644 nixosModules/skye/base/packages.nix create mode 100644 nixosModules/skye/base/server/checks.nix create mode 100644 nixosModules/skye/base/server/default.nix create mode 100644 nixosModules/skye/base/sshKeys/skye create mode 100644 nixosModules/skye/base/users.nix rename packages/lastfm-rpc/configuration.nix => nixosModules/skye/lastfm-rpc/default.nix (100%) rename packages/skye-server-checks/configuration.nix => nixosModules/skye/server-checks/default.nix (100%) diff --git a/nixosModules/default.nix b/nixosModules/default.nix index 8639e4d5..8525e25b 100644 --- a/nixosModules/default.nix +++ b/nixosModules/default.nix @@ -5,6 +5,9 @@ _: { defaultUsers = import ./default-users; profiles = import ./profiles; distributed-builds = import ./distributedBuilds; + skye-base = import ./skye/base; + skye-server-checks = import ./skye/server-checks; + skye-lastfm-rpc = import ./skye/lastfm-rpc; dn42Wireguard = import ./dn42Wireguard; diff --git a/nixosModules/skye/base/backup.nix b/nixosModules/skye/base/backup.nix new file mode 100644 index 00000000..ff25f862 --- /dev/null +++ b/nixosModules/skye/base/backup.nix @@ -0,0 +1,46 @@ +{ + pkgs, + lib, + config, + ... +}: + +let + hasConfig = builtins.pathExists ../../secrets/restic/${config.networking.hostName}/repo.age; +in +lib.mkIf hasConfig { + age.secrets = { + "restic/env".file = ../../secrets/restic/env.age; + "restic/repo".file = ../../secrets/restic/${config.networking.hostName}/repo.age; + "restic/password".file = ../../secrets/restic/${config.networking.hostName}/password.age; + }; + + services.restic.backups = { + cloud = { + initialize = true; + + repositoryFile = config.age.secrets."restic/repo".path; + environmentFile = config.age.secrets."restic/env".path; + passwordFile = config.age.secrets."restic/password".path; + + paths = [ + "/home/skye/Documents" + "/home/skye/Desktop" + ]; + timerConfig = { + OnBootSec = "1min"; + OnUnitActiveSec = "1h"; + }; + exclude = [ + ".cargo" + "node_modules" + "/home/skye/Documents/Git/*/target" + ]; + pruneOpts = [ + "--keep-daily 7" + "--keep-weekly 5" + "--keep-monthly 12" + ]; + }; + }; +} diff --git a/nixosModules/skye/base/default.nix b/nixosModules/skye/base/default.nix new file mode 100644 index 00000000..17bb8c4b --- /dev/null +++ b/nixosModules/skye/base/default.nix @@ -0,0 +1,62 @@ +{ + pkgs, + config, + lib, + inputs, + hostType, + ... +}: + +{ + imports = [ + ./users.nix + ./packages.nix + ./networking.nix + ./metrics.nix + ./backup.nix + ./${hostType}/default.nix + ]; + + time.timeZone = "America/Detroit"; + i18n.defaultLocale = "en_US.UTF-8"; + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + + nix = { + package = pkgs.nix; + settings = { + experimental-features = [ + "nix-command" + "flakes" + ]; + }; + + registry = { + nixpkgs.flake = inputs.nixpkgs; + }; + }; + nixpkgs.config.allowUnfree = true; + + services.openssh = { + enable = true; + settings = { + UseDns = false; + PermitRootLogin = "prohibit-password"; + PasswordAuthentication = false; + KbdInteractiveAuthentication = false; + X11Forwarding = false; + AllowGroups = [ "wheel" ]; + }; + }; + + age.identityPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]; +} diff --git a/nixosModules/skye/base/desktop/default.nix b/nixosModules/skye/base/desktop/default.nix new file mode 100644 index 00000000..8f545154 --- /dev/null +++ b/nixosModules/skye/base/desktop/default.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + imports = [ + ./desktop.nix + ./packages.nix + ]; + + boot.kernelPackages = pkgs.linuxPackages_latest; +} diff --git a/nixosModules/skye/base/desktop/desktop.nix b/nixosModules/skye/base/desktop/desktop.nix new file mode 100644 index 00000000..43fd00fd --- /dev/null +++ b/nixosModules/skye/base/desktop/desktop.nix @@ -0,0 +1,40 @@ +{ + lib, + pkgs, + config, + ... +}: +{ + #services.desktopManager.plasma6.enable = true; + #services.displayManager.plasma-login-manager.enable = true; + + # services.xserver.enable = true; + # services.xrdp.enable = true; + # services.xrdp.defaultWindowManager = "niri-session"; + + programs.niri.enable = true; + environment.systemPackages = [ pkgs.xwayland-satellite ]; + + programs.regreet.enable = true; + + programs.kdeconnect.enable = true; + xdg.portal = { + enable = true; + extraPortals = [ pkgs.xdg-desktop-portal-gnome ]; + config.niri = { + default = [ "gnome" "gtk" ]; + }; + }; + + services.printing.enable = true; + + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; +} diff --git a/nixosModules/skye/base/desktop/packages.nix b/nixosModules/skye/base/desktop/packages.nix new file mode 100644 index 00000000..c65f98d2 --- /dev/null +++ b/nixosModules/skye/base/desktop/packages.nix @@ -0,0 +1,47 @@ +{ + lib, + pkgs, + config, + ... +}: +{ + programs.firefox = { + enable = true; + package = pkgs.firefox; + }; + + programs.obs-studio = { + enable = true; + enableVirtualCamera = true; + + package = ( + pkgs.obs-studio.override { + cudaSupport = true; + } + ); + + plugins = with pkgs.obs-studio-plugins; [ + obs-pipewire-audio-capture + obs-vkcapture + ]; + }; + boot.extraModulePackages = with config.boot.kernelPackages; [ + v4l2loopback + ]; + boot.kernelModules = [ "v4l2loopback" ]; + security.polkit.enable = true; + + programs.nix-ld.enable = true; + environment.systemPackages = with pkgs; [ + winetricks + wineWowPackages.stable + gearlever + nfs-utils + cider-2 + betterdiscordctl + discord + android-tools + nautilus + sushi + ]; +} diff --git a/nixosModules/skye/base/metrics.nix b/nixosModules/skye/base/metrics.nix new file mode 100644 index 00000000..d8dca574 --- /dev/null +++ b/nixosModules/skye/base/metrics.nix @@ -0,0 +1,50 @@ +{ + lib, + pkgs, + config, + ... +}: +{ + services.vmagent = { + enable = true; + remoteWrite = { + url = "https://metrics.flyingfox-fir.ts.net/api/v1/write"; + }; + prometheusConfig = { + global.scrape_interval = "15s"; + scrape_configs = [ + { + job_name = "prometheus-node-exporter"; + static_configs = [ + { + targets = [ "http://localhost:9100/metrics" ]; + labels = { + instance = config.networking.hostName; + }; + } + ]; + } + ]; + }; + }; + systemd.services.vmagent = { + serviceConfig.Restart = lib.mkForce "always"; + unitConfig.StartLimitIntervalSec = lib.mkForce 0; + }; + + services.prometheus.exporters.node = { + enable = true; + listenAddress = "127.0.0.1"; + }; + systemd.services.prometheus-node-exporter = { + serviceConfig.Restart = lib.mkForce "always"; + }; + + services.scrutiny.collector = { + enable = true; + settings = { + api.endpoint = "https://scrutiny.flyingfox-fir.ts.net"; + host.id = config.networking.hostName; + }; + }; +} diff --git a/nixosModules/skye/base/misc/tailscale-serve.nix b/nixosModules/skye/base/misc/tailscale-serve.nix new file mode 100644 index 00000000..3fa7c8ab --- /dev/null +++ b/nixosModules/skye/base/misc/tailscale-serve.nix @@ -0,0 +1,54 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; + +let + cfg = config.vixens.tailscale-serve; +in +{ + options.vixens.tailscale-serve = mkOption { + default = { }; + type = types.attrsOf ( + types.submodule { + options = { + port = mkOption { type = types.int; }; + targetService = mkOption { type = types.str; }; + tailscaleService = mkOption { type = types.str; }; + }; + } + ); + }; + + config = mkIf (cfg != { }) { + systemd.services = mapAttrs' ( + name: instance: + nameValuePair "tailscale-serve-${name}" { + after = [ + "tailscaled.service" + instance.targetService + ]; + wants = [ + "tailscaled.service" + instance.targetService + ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + + Restart = "on-failure"; + RestartSec = "3s"; + StartLimitIntervalSec = 0; + + ExecStart = "${lib.getExe config.services.tailscale.package} serve --service=svc:${instance.tailscaleService} --bg ${toString instance.port}"; + }; + } + ) cfg; + }; +} diff --git a/nixosModules/skye/base/networking.nix b/nixosModules/skye/base/networking.nix new file mode 100644 index 00000000..e59e65a7 --- /dev/null +++ b/nixosModules/skye/base/networking.nix @@ -0,0 +1,17 @@ +{ + pkgs, + lib, + ... +}: + +{ + networking.networkmanager.enable = true; + + services.tailscale = { + enable = true; + }; + + networking.firewall = { + trustedInterfaces = [ "tailscale0" ]; + }; +} diff --git a/nixosModules/skye/base/packages.nix b/nixosModules/skye/base/packages.nix new file mode 100644 index 00000000..b5b9c634 --- /dev/null +++ b/nixosModules/skye/base/packages.nix @@ -0,0 +1,24 @@ +{ + pkgs, + lib, + inputs, + ... +}: + +{ + programs.zsh.enable = true; + + environment.systemPackages = with pkgs; [ + tmux + htop + git + jq + + tcpdump + dig + + vim + nano + helix + ]; +} diff --git a/nixosModules/skye/base/server/checks.nix b/nixosModules/skye/base/server/checks.nix new file mode 100644 index 00000000..aeba185f --- /dev/null +++ b/nixosModules/skye/base/server/checks.nix @@ -0,0 +1,30 @@ +{ + self, + self', + config, + ... +}: +{ + imports = [ self.nixosModules.skye-server-checks ]; + + age.secrets = { + "server-checks-env".file = ../../../secrets/server-checks/${config.networking.hostName}.age; + }; + + serverChecks = [ + { type = "systemd_no_failing_services"; } + { + type = "systemd_service_running"; + value = "tailscaled"; + } + { + type = "systemd_service_running"; + value = "sshd"; + } + ]; + envPath = config.age.secrets."server-checks-env".path; + + environment.systemPackages = [ + self'.packages.skye-server-checks + ]; +} diff --git a/nixosModules/skye/base/server/default.nix b/nixosModules/skye/base/server/default.nix new file mode 100644 index 00000000..90e83660 --- /dev/null +++ b/nixosModules/skye/base/server/default.nix @@ -0,0 +1,6 @@ +{ pkgs, ... }: +{ + imports = [ ./checks.nix ]; + + boot.kernelPackages = pkgs.linuxPackages_6_18; +} diff --git a/nixosModules/skye/base/sshKeys/skye b/nixosModules/skye/base/sshKeys/skye new file mode 100644 index 00000000..56cb66ec --- /dev/null +++ b/nixosModules/skye/base/sshKeys/skye @@ -0,0 +1,4 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICpWoaHA7PBagCZ+oCTT82AjQnKCZw/f6F9ZDcqjqTaR skye@sylveon +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINIlUR+DVEsNGIJxGD0YgkoFSpOZgtyYUkuj+ESUq3oH skye@ninetails +sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIN1J0JMT/yFmtvOpNbUEU3IfqnhDT3iu5fP0soxreaG8AAAABHNzaDo= skye@vixen.lgbt +sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBOFGx63o+9ynaHhe8XY/EIbwig8NKVZYIkLEd+aEvDizDsT6+KrdqYPyMjDPxCTgSdkn6t1paEU4u7qa5hRai3sAAAALdGVybWl1cy5jb20= skye@vixen.lgbt \ No newline at end of file diff --git a/nixosModules/skye/base/users.nix b/nixosModules/skye/base/users.nix new file mode 100644 index 00000000..bf6480ba --- /dev/null +++ b/nixosModules/skye/base/users.nix @@ -0,0 +1,28 @@ +{ + pkgs, + lib, + inputs, + hostType, + ... +}: + +{ + users.users.skye = { + isNormalUser = true; + description = "skye"; + extraGroups = [ + "networkmanager" + "wheel" + "docker" + "dialout" + "i2c" + ]; + openssh.authorizedKeys.keys = (lib.splitString "\n" (lib.readFile sshKeys/skye)); + shell = pkgs.zsh; + }; + + home-manager.extraSpecialArgs = { inherit inputs; }; + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.skye = import (inputs.self + "/home/skye/${hostType}.nix"); +} diff --git a/packages/lastfm-rpc/configuration.nix b/nixosModules/skye/lastfm-rpc/default.nix similarity index 100% rename from packages/lastfm-rpc/configuration.nix rename to nixosModules/skye/lastfm-rpc/default.nix diff --git a/packages/skye-server-checks/configuration.nix b/nixosModules/skye/server-checks/default.nix similarity index 100% rename from packages/skye-server-checks/configuration.nix rename to nixosModules/skye/server-checks/default.nix -- 2.51.2 From a73812d5152caae93a106b2aeb43e4e363e6b4b0 Mon Sep 17 00:00:00 2001 From: dish Date: Fri, 19 Jun 2026 23:27:31 -0400 Subject: [PATCH 5/9] [hosts] move over skye's hosts --- hosts/altaria/default.nix | 41 ++++++++++ hosts/altaria/disk-config.nix | 32 ++++++++ hosts/altaria/hardware.nix | 26 ++++++ hosts/altaria/services/anubis.nix | 32 ++++++++ hosts/altaria/services/cloudflared.nix | 20 +++++ hosts/altaria/services/docker.nix | 17 ++++ hosts/altaria/services/modules.nix | 8 ++ hosts/altaria/services/pufferpanel.nix | 32 ++++++++ hosts/default.nix | 90 +++++++-------------- hosts/dialga/default.nix | 43 ++++++++++ hosts/dialga/hardware.nix | 47 +++++++++++ hosts/dialga/services/caddy.nix | 26 ++++++ hosts/dialga/services/docker.nix | 17 ++++ hosts/dialga/services/forgejo.nix | 69 ++++++++++++++++ hosts/dialga/services/grafana.nix | 34 ++++++++ hosts/dialga/services/jellyfin.nix | 25 ++++++ hosts/dialga/services/miniflux.nix | 10 +++ hosts/dialga/services/modules.nix | 14 ++++ hosts/dialga/services/samba.nix | 52 ++++++++++++ hosts/dialga/services/scrutiny.nix | 33 ++++++++ hosts/dialga/services/victorialogs.nix | 23 ++++++ hosts/dialga/services/victoriametrics.nix | 23 ++++++ hosts/dish-hosts.nix | 58 +++++++++++++ hosts/mareep/default.nix | 45 +++++++++++ hosts/mareep/hardware.nix | 30 +++++++ hosts/ninetails/default.nix | 99 +++++++++++++++++++++++ hosts/ninetails/hardware.nix | 48 +++++++++++ hosts/skye-hosts.nix | 32 ++++++++ hosts/zorua/default.nix | 21 +++++ hosts/zorua/hardware.nix | 32 ++++++++ hosts/zorua/services/docker.nix | 16 ++++ hosts/zorua/services/modules.nix | 5 ++ 32 files changed, 1040 insertions(+), 60 deletions(-) create mode 100644 hosts/altaria/default.nix create mode 100644 hosts/altaria/disk-config.nix create mode 100644 hosts/altaria/hardware.nix create mode 100644 hosts/altaria/services/anubis.nix create mode 100644 hosts/altaria/services/cloudflared.nix create mode 100644 hosts/altaria/services/docker.nix create mode 100644 hosts/altaria/services/modules.nix create mode 100644 hosts/altaria/services/pufferpanel.nix create mode 100644 hosts/dialga/default.nix create mode 100644 hosts/dialga/hardware.nix create mode 100644 hosts/dialga/services/caddy.nix create mode 100644 hosts/dialga/services/docker.nix create mode 100644 hosts/dialga/services/forgejo.nix create mode 100644 hosts/dialga/services/grafana.nix create mode 100644 hosts/dialga/services/jellyfin.nix create mode 100644 hosts/dialga/services/miniflux.nix create mode 100644 hosts/dialga/services/modules.nix create mode 100644 hosts/dialga/services/samba.nix create mode 100644 hosts/dialga/services/scrutiny.nix create mode 100644 hosts/dialga/services/victorialogs.nix create mode 100644 hosts/dialga/services/victoriametrics.nix create mode 100644 hosts/dish-hosts.nix create mode 100644 hosts/mareep/default.nix create mode 100644 hosts/mareep/hardware.nix create mode 100644 hosts/ninetails/default.nix create mode 100644 hosts/ninetails/hardware.nix create mode 100644 hosts/skye-hosts.nix create mode 100644 hosts/zorua/default.nix create mode 100644 hosts/zorua/hardware.nix create mode 100644 hosts/zorua/services/docker.nix create mode 100644 hosts/zorua/services/modules.nix diff --git a/hosts/altaria/default.nix b/hosts/altaria/default.nix new file mode 100644 index 00000000..07a3cdf5 --- /dev/null +++ b/hosts/altaria/default.nix @@ -0,0 +1,41 @@ +{ + inputs, + pkgs, + lib, + config, + ... +}: + +let +in +{ + imports = [ + inputs.disko.nixosModules.disko + ./hardware.nix + ./disk-config.nix + ./services/modules.nix + ]; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.initrd.systemd.enable = true; + + systemd.targets.multi-user.enable = true; + + services.scrutiny.collector.enable = lib.mkForce false; + + environment.systemPackages = with pkgs; [ + curl + wget + cloudflared + zulu25 + ]; + + networking.firewall.allowedTCPPorts = [ + 25565 + ]; + + documentation.enable = false; + + system.stateVersion = "25.05"; +} diff --git a/hosts/altaria/disk-config.nix b/hosts/altaria/disk-config.nix new file mode 100644 index 00000000..84ce4aca --- /dev/null +++ b/hosts/altaria/disk-config.nix @@ -0,0 +1,32 @@ +{ + disko.devices = { + disk = { + main = { + type = "disk"; + device = "/dev/sda"; + content = { + type = "gpt"; + partitions = { + boot = { + size = "1024M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + }; + }; + root = { + size = "100%"; + content = { + type = "filesystem"; + format = "ext4"; + mountpoint = "/"; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/hosts/altaria/hardware.nix b/hosts/altaria/hardware.nix new file mode 100644 index 00000000..41edac2c --- /dev/null +++ b/hosts/altaria/hardware.nix @@ -0,0 +1,26 @@ +{ + config, + lib, + pkgs, + modulesPath, + ... +}: + +{ + imports = [ + (modulesPath + "/profiles/qemu-guest.nix") + ]; + + boot.initrd.availableKernelModules = [ + "xhci_pci" + "virtio_pci" + "virtio_scsi" + "usbhid" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + networking.useDHCP = lib.mkDefault true; + nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; +} diff --git a/hosts/altaria/services/anubis.nix b/hosts/altaria/services/anubis.nix new file mode 100644 index 00000000..c2cc8019 --- /dev/null +++ b/hosts/altaria/services/anubis.nix @@ -0,0 +1,32 @@ +{ + lib, + config, + self, + ... +}: +let +in +{ + services.anubis = { + instances.gotosocial = { + enable = true; + settings = { + TARGET = "http://127.0.0.1:8000"; + BIND = ":8010"; + BIND_NETWORK = "tcp"; + OG_PASSTHROUGH = true; + POLICY_FNAME = "/etc/anubis/policy.yaml"; + }; + }; + instances.g2swebui = { + enable = true; + settings = { + TARGET = "http://127.0.0.1:8005"; + BIND = ":8015"; + BIND_NETWORK = "tcp"; + OG_PASSTHROUGH = true; + POLICY_FNAME = "/etc/anubis/policy.yaml"; + }; + }; + }; +} diff --git a/hosts/altaria/services/cloudflared.nix b/hosts/altaria/services/cloudflared.nix new file mode 100644 index 00000000..aba3f3b4 --- /dev/null +++ b/hosts/altaria/services/cloudflared.nix @@ -0,0 +1,20 @@ +{ + lib, + config, + self, + ... +}: +let + tunnelId = builtins.readFile /etc/vixen/cloudflare-tunnel; +in +{ + services.cloudflared = { + enable = true; + tunnels = { + tunnelId = { + credentialsFile = "/etc/vixen/4ed6b559-d63b-436f-a1ae-17e8e629c935.json"; + default = "http_status:404"; + }; + }; + }; +} diff --git a/hosts/altaria/services/docker.nix b/hosts/altaria/services/docker.nix new file mode 100644 index 00000000..49eafd0f --- /dev/null +++ b/hosts/altaria/services/docker.nix @@ -0,0 +1,17 @@ +{ + lib, + config, + self, + ... +}: +let +in +{ + virtualisation.docker = { + enable = true; + daemon.settings = { + "insecure-registries" = [ "registry.den.vixen.lgbt" ]; + "live-restore" = true; + }; + }; +} diff --git a/hosts/altaria/services/modules.nix b/hosts/altaria/services/modules.nix new file mode 100644 index 00000000..51e8ab45 --- /dev/null +++ b/hosts/altaria/services/modules.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./docker.nix + ./cloudflared.nix + ./pufferpanel.nix + ./anubis.nix + ]; +} diff --git a/hosts/altaria/services/pufferpanel.nix b/hosts/altaria/services/pufferpanel.nix new file mode 100644 index 00000000..06b89ce3 --- /dev/null +++ b/hosts/altaria/services/pufferpanel.nix @@ -0,0 +1,32 @@ +{ + lib, + pkgs, + config, + self, + ... +}: +let +in +{ + services.pufferpanel = { + enable = true; + extraPackages = with pkgs; [ + bash + curl + gawk + gnutar + gzip + ]; + package = pkgs.buildFHSEnv { + name = "pufferpanel-fhs"; + runScript = lib.getExe pkgs.pufferpanel; + targetPkgs = + pkgs': with pkgs'; [ + icu + openssl + zlib + zulu25 + ]; + }; + }; +} diff --git a/hosts/default.nix b/hosts/default.nix index e475784c..154d615e 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -1,73 +1,43 @@ { inputs, ... }: { + imports = [ + ./dish-hosts.nix + ./skye-hosts.nix + ]; easy-hosts = { useGlobalPkgs = true; + perTag = + let + tags = { + dish.imports = [ + inputs.ctp.nixosModules.catppuccin + inputs.self.nixosModules.chromium + inputs.self.nixosModules.defaultConfig + inputs.self.nixosModules.defaultUsers + inputs.self.nixosModules.firefox + inputs.self.nixosModules.niri + inputs.self.nixosModules.forgejo-runner + inputs.self.nixosModules.hm-pyrox + inputs.self.nixosModules.hm-thehedgehog + inputs.self.nixosModules.miscPrograms + inputs.self.nixosModules.neovim + inputs.self.nixosModules.profiles + inputs.self.nixosModules.scrutiny + + ]; + skye.imports = [ + inputs.self.nixosModules.skye-base + + ]; + }; + in + tag: { modules = [ tags.${tag} ]; }; shared = { modules = [ inputs.agenix.nixosModules.default - inputs.ctp.nixosModules.catppuccin inputs.home-manager.nixosModules.home-manager - inputs.self.nixosModules.chromium - inputs.self.nixosModules.defaultConfig - inputs.self.nixosModules.defaultUsers - inputs.self.nixosModules.firefox - inputs.self.nixosModules.niri - inputs.self.nixosModules.forgejo-runner - inputs.self.nixosModules.hm-pyrox - inputs.self.nixosModules.hm-thehedgehog - inputs.self.nixosModules.miscPrograms - inputs.self.nixosModules.neovim - inputs.self.nixosModules.profiles - inputs.self.nixosModules.scrutiny ]; }; path = ./.; - hosts = { - marvin = { - deployable = true; - tags = [ - "server" - "home" - ]; - modules = [ - inputs.golink.nixosModules.default - inputs.tangled.nixosModules.knot - inputs.tangled.nixosModules.spindle - inputs.tsnsrv.nixosModules.default - inputs.self.nixosModules.voidauth - ]; - }; - prefect = { - deployable = true; - tags = [ - "server" - "vps" - ]; - modules = [ - inputs.dn42.nixosModules.default - ]; - }; - thought = { - deployable = true; - tags = [ - "server" - "vps" - ]; - }; - zaphod = { - deployable = true; - tags = [ "laptop" ]; - modules = [ - inputs.hardware.nixosModules.framework-16-7040-amd - inputs.self.nixosModules.hm-pyrox-zaphod - inputs.self.nixosModules.hm-thehedgehog-zaphod - inputs.self.nixosModules.dms - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - } - ]; - }; - }; }; } diff --git a/hosts/dialga/default.nix b/hosts/dialga/default.nix new file mode 100644 index 00000000..79c4fcd3 --- /dev/null +++ b/hosts/dialga/default.nix @@ -0,0 +1,43 @@ +{ + inputs, + pkgs, + lib, + config, + ... +}: + +let +in +{ + imports = [ + ./hardware.nix + ./services/modules.nix + ]; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.supportedFilesystems = [ "zfs" ]; + + boot.zfs.extraPools = [ + "apps-new" + "sinnoh" + "kanto" + ]; + services.zfs.autoScrub.enable = true; + + hardware.graphics = { + enable = true; + }; + + #kinda stupid, we have to overwrite the metrics endpoint because tailscale services don't work on the same node + services.vmagent.remoteWrite.url = lib.mkForce "http://localhost:8428/api/v1/write"; + services.scrutiny.collector.settings.api.endpoint = lib.mkForce "http://localhost:8400"; + + services.restic.backups.cloud.paths = [ + "/sinnoh/backup" + "/sinnoh/personal" + "/sinnoh/forgejo-backup" + ]; + + system.stateVersion = "25.11"; +} diff --git a/hosts/dialga/hardware.nix b/hosts/dialga/hardware.nix new file mode 100644 index 00000000..d72f2392 --- /dev/null +++ b/hosts/dialga/hardware.nix @@ -0,0 +1,47 @@ +{ + config, + lib, + pkgs, + modulesPath, + ... +}: +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ + "xhci_pci" + "ahci" + "mpt3sas" + "usb_storage" + "sd_mod" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + boot.kernelParams = [ "amd_pstate=guided" ]; + powerManagement.enable = true; + powerManagement.cpuFreqGovernor = "schedutil"; + + fileSystems."/" = { + device = "/dev/disk/by-label/NIXROOT"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-label/NIXBOOT"; + fsType = "vfat"; + options = [ + "fmask=0022" + "dmask=0022" + ]; + }; + + swapDevices = [ ]; + + networking.hostId = "0aef1983"; + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/dialga/services/caddy.nix b/hosts/dialga/services/caddy.nix new file mode 100644 index 00000000..5ae814be --- /dev/null +++ b/hosts/dialga/services/caddy.nix @@ -0,0 +1,26 @@ +{ + lib, + config, + self, + ... +}: +let +in +{ + services.caddy = { + enable = true; + virtualHosts = { + "http://jelly.den.vixen.lgbt".extraConfig = '' + reverse_proxy http://localhost:8096 + ''; + "http://lib.den.vixen.lgbt".extraConfig = '' + reverse_proxy http://localhost:6060 + ''; + "http://feed.den.vixen.lgbt".extraConfig = '' + reverse_proxy http://localhost:6070 + ''; + }; + }; + + networking.firewall.allowedTCPPorts = [ 80 443 ]; +} diff --git a/hosts/dialga/services/docker.nix b/hosts/dialga/services/docker.nix new file mode 100644 index 00000000..49eafd0f --- /dev/null +++ b/hosts/dialga/services/docker.nix @@ -0,0 +1,17 @@ +{ + lib, + config, + self, + ... +}: +let +in +{ + virtualisation.docker = { + enable = true; + daemon.settings = { + "insecure-registries" = [ "registry.den.vixen.lgbt" ]; + "live-restore" = true; + }; + }; +} diff --git a/hosts/dialga/services/forgejo.nix b/hosts/dialga/services/forgejo.nix new file mode 100644 index 00000000..d5451a6b --- /dev/null +++ b/hosts/dialga/services/forgejo.nix @@ -0,0 +1,69 @@ +{ + lib, + config, + self, + ... +}: +let + tunnelId = builtins.readFile /etc/vixen/cloudflare-tunnel; +in +{ + services.cloudflared = { + enable = true; + tunnels = { + # im lazy and i dont think this matters but,, better safe than sorry? + tunnelId = { + credentialsFile = "/etc/vixen/cloudflare-token"; + default = "http_status:404"; + }; + }; + }; + services.anubis.instances.forgejo = { + enable = true; + settings = { + TARGET = "http://127.0.0.1:3100"; + BIND = ":3800"; + BIND_NETWORK = "tcp"; + OG_PASSTHROUGH = true; + POLICY_FNAME = "/etc/anubis/policy.yaml"; + }; + }; + services.forgejo = { + enable = true; + customDir = "/etc/forgejo/custom"; + repositoryRoot = "/etc/forgejo/repos"; + dump = { + enable = true; + backupDir = "/sinnoh/forgejo-backup"; + }; + lfs = { + enable = true; + contentDir = "/etc/forgejo/lfs"; + }; + settings = { + DEFAULT.APP_NAME = "git.vixen.lgbt"; + server = { + DOMAIN = "git.vixen.lgbt"; + ROOT_URL = "https://git.vixen.lgbt/"; + HTTP_PORT = 3100; + }; + service.DISABLE_REGISTRATION = true; + actions = { + ENABLED = true; + DEFAULT_ACTIONS_URL = "github"; + }; + mailer = { + ENABLED = true; + SMTP_ADDR = "smtp.fastmail.com"; + SMTP_PORT = 587; + USER = "skye@vixen.lgbt"; + FROM = "mail-noreply@vixen.lgbt"; + }; + ui = { + THEMES="forgejo-auto, forgejo-light, forgejo-dark, gitea-auto, gitea-light, gitea-dark, forgejo-auto-deuteranopia-protanopia, forgejo-light-deuteranopia-protanopia, forgejo-dark-deuteranopia-protanopia, forgejo-auto-tritanopia, forgejo-light-tritanopia, forgejo-dark-tritanopia, custom-light"; + DEFAULT_THEME="custom-light"; + }; + }; + mailerPasswordFile = "/etc/vixen/mailer-secret"; + }; +} diff --git a/hosts/dialga/services/grafana.nix b/hosts/dialga/services/grafana.nix new file mode 100644 index 00000000..f0a1c295 --- /dev/null +++ b/hosts/dialga/services/grafana.nix @@ -0,0 +1,34 @@ +{ + lib, + config, + self, + ... +}: +let +in +{ + imports = [ + ../../../nixosModules/base/misc/tailscale-serve.nix + ]; + + services.grafana = { + enable = true; + settings = { + server = { + http_addr = "0.0.0.0"; + http_port = 3000; + enable_gzip = true; + domain = "grafana.vixen.lgbt"; + }; + # someone remind me to change this ,,,, + security.secret_key = "SW2YcwTIb9zpOOhoPsMm"; + analytics.reporting_enabled = false; + }; + }; + + vixens.tailscale-serve."grafana" = { + port = 3000; + targetService = "grafana.service"; + tailscaleService = "grafana"; + }; +} diff --git a/hosts/dialga/services/jellyfin.nix b/hosts/dialga/services/jellyfin.nix new file mode 100644 index 00000000..2efded38 --- /dev/null +++ b/hosts/dialga/services/jellyfin.nix @@ -0,0 +1,25 @@ +{ + lib, + config, + self, + ... +}: +let +in +{ + services.jellyfin = { + enable = true; + }; + users.users.jellyfin.extraGroups = [ + "input" + "render" + "video" + ]; + + networking.firewall.allowedUDPPorts = [ + 7359 + ]; + networking.firewall.allowedTCPPorts = [ + 8096 + ]; +} diff --git a/hosts/dialga/services/miniflux.nix b/hosts/dialga/services/miniflux.nix new file mode 100644 index 00000000..3eba3582 --- /dev/null +++ b/hosts/dialga/services/miniflux.nix @@ -0,0 +1,10 @@ +{ self, config, ... }: +let +in +{ + services.miniflux = { + enable = true; + config.LISTEN_ADDR = "127.0.0.1:6070"; + adminCredentialsFile = "/etc/vixen/miniflux"; + }; +} diff --git a/hosts/dialga/services/modules.nix b/hosts/dialga/services/modules.nix new file mode 100644 index 00000000..bd0e16f2 --- /dev/null +++ b/hosts/dialga/services/modules.nix @@ -0,0 +1,14 @@ +{ + imports = [ + ./jellyfin.nix + ./samba.nix + ./docker.nix + ./victorialogs.nix + ./victoriametrics.nix + ./grafana.nix + ./scrutiny.nix + ./forgejo.nix + ./caddy.nix + ./miniflux.nix + ]; +} diff --git a/hosts/dialga/services/samba.nix b/hosts/dialga/services/samba.nix new file mode 100644 index 00000000..0efc0f75 --- /dev/null +++ b/hosts/dialga/services/samba.nix @@ -0,0 +1,52 @@ +{ + lib, + config, + self, + ... +}: +let +in +{ + services.samba = { + enable = true; + securityType = "user"; + openFirewall = true; + settings = { + global = { + "workgroup" = "WORKGROUP"; + "server string" = "dialga"; + "netbios name" = "dialga"; + "security" = "user"; + "hosts allow" = "100.64.0.0/10 10.0.0.0/8 127.0.0.1 localhost"; + "hosts deny" = "0.0.0.0/0"; + "guest account" = "nobody"; + "map to guest" = "bad user"; + }; + + "media" = { + "path" = "/kanto/media"; + "browseable" = "yes"; + "read only" = "no"; + "guest ok" = "no"; + "create mask" = "0644"; + "directory mask" = "0755"; + "force user" = "jellyfin"; + "force group" = "jellyfin"; + }; + + "personal" = { + "path" = "/sinnoh/personal"; + "browseable" = "yes"; + "read only" = "no"; + "guest ok" = "no"; + "create mask" = "0644"; + "directory mask" = "0755"; + }; + }; + }; + + services.samba-wsdd = { + enable = true; + openFirewall = true; + }; +} diff --git a/hosts/dialga/services/scrutiny.nix b/hosts/dialga/services/scrutiny.nix new file mode 100644 index 00000000..ca842282 --- /dev/null +++ b/hosts/dialga/services/scrutiny.nix @@ -0,0 +1,33 @@ +{ self, config, ... }: +let +in +{ + age.secrets."monitoring/scrutiny" = { + file = ../../../secrets/monitoring/scrutiny.age; + }; + + services.scrutiny = { + enable = true; + influxdb.enable = true; + settings = { + web = { + listen.port = 8400; + influxdb.tls.insecure_skip_verify = true; + }; + notify = { + urls = [ + { _secret = "/run/credentials/scrutiny.service/discord_webhook"; } + ]; + }; + }; + }; + systemd.services.scrutiny.serviceConfig.LoadCredential = [ + "discord_webhook:${config.age.secrets."monitoring/scrutiny".path}" + ]; + + vixens.tailscale-serve."scrutiny" = { + port = 8400; + targetService = "scrutiny.service"; + tailscaleService = "scrutiny"; + }; +} diff --git a/hosts/dialga/services/victorialogs.nix b/hosts/dialga/services/victorialogs.nix new file mode 100644 index 00000000..3ad6e012 --- /dev/null +++ b/hosts/dialga/services/victorialogs.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + self, + ... +}: +let +in +{ + imports = [ + ../../../nixosModules/base/misc/tailscale-serve.nix + ]; + + services.victorialogs = { + enable = true; + }; + + vixens.tailscale-serve."logs" = { + port = 9428; + targetService = "victorialogs.service"; + tailscaleService = "logs"; + }; +} diff --git a/hosts/dialga/services/victoriametrics.nix b/hosts/dialga/services/victoriametrics.nix new file mode 100644 index 00000000..2332e232 --- /dev/null +++ b/hosts/dialga/services/victoriametrics.nix @@ -0,0 +1,23 @@ +{ + lib, + config, + self, + ... +}: +let +in +{ + imports = [ + ../../../nixosModules/base/misc/tailscale-serve.nix + ]; + + services.victoriametrics = { + enable = true; + }; + + vixens.tailscale-serve."metrics" = { + port = 8428; + targetService = "victoriametrics.service"; + tailscaleService = "metrics"; + }; +} diff --git a/hosts/dish-hosts.nix b/hosts/dish-hosts.nix new file mode 100644 index 00000000..03791206 --- /dev/null +++ b/hosts/dish-hosts.nix @@ -0,0 +1,58 @@ +{ inputs, ... }: +{ + easy-hosts = { + hosts = { + marvin = { + deployable = true; + tags = [ + "dish" + "server" + "home" + ]; + modules = [ + inputs.golink.nixosModules.default + inputs.tangled.nixosModules.knot + inputs.tangled.nixosModules.spindle + inputs.tsnsrv.nixosModules.default + inputs.self.nixosModules.voidauth + ]; + }; + prefect = { + deployable = true; + tags = [ + "dish" + "server" + "vps" + ]; + modules = [ + inputs.dn42.nixosModules.default + ]; + }; + thought = { + deployable = true; + tags = [ + "dish" + "server" + "vps" + ]; + }; + zaphod = { + deployable = true; + tags = [ + "dish" + "laptop" + ]; + modules = [ + inputs.hardware.nixosModules.framework-16-7040-amd + inputs.self.nixosModules.hm-pyrox-zaphod + inputs.self.nixosModules.hm-thehedgehog-zaphod + inputs.self.nixosModules.dms + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + } + ]; + }; + }; + }; +} diff --git a/hosts/mareep/default.nix b/hosts/mareep/default.nix new file mode 100644 index 00000000..9c3cad84 --- /dev/null +++ b/hosts/mareep/default.nix @@ -0,0 +1,45 @@ +{ + inputs, + pkgs, + lib, + config, + ... +}: + +let +in +{ + imports = [ + ./hardware.nix + ]; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + hardware.graphics = { + enable = true; + }; + services.xserver.videoDrivers = [ "nvidia" ]; + hardware.nvidia = { + modesetting.enable = true; + powerManagement.enable = true; + nvidiaSettings = true; + open = true; + }; + + services.ollama = { + enable = true; + package = pkgs.ollama-cuda; + host = "100.105.168.46"; + }; + services.open-webui = { + enable = true; + host = "100.105.168.46"; + }; + services.logind.lidSwitch = "ignore"; + + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + + system.stateVersion = "26.05"; +} diff --git a/hosts/mareep/hardware.nix b/hosts/mareep/hardware.nix new file mode 100644 index 00000000..4fb786db --- /dev/null +++ b/hosts/mareep/hardware.nix @@ -0,0 +1,30 @@ +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/ef3b60af-c66d-46d4-838c-05817127ca9b"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/1581-9A44"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/2f20e039-dbfd-4c79-b91d-3f8945ac1018"; } + ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/ninetails/default.nix b/hosts/ninetails/default.nix new file mode 100644 index 00000000..fa61d0ec --- /dev/null +++ b/hosts/ninetails/default.nix @@ -0,0 +1,99 @@ +{ + inputs, + pkgs, + lib, + config, + ... +}: + +let +in +{ + imports = [ + ./hardware.nix + ]; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.supportedFilesystems = [ + "ntfs" + "nfs" + ]; + + boot.kernelParams = [ + "amd_iommu=on" + "iommu=pt" + #"vfio-pci.ids=10de:2705,10de:22bb" + ]; + boot.initrd.kernelModules = [ + "vfio_pci" + "vfio" + "vfio_iommu_type1" + ]; + services.rpcbind.enable = true; + programs.nix-ld.enable = true; + + #uhhhhhhhh someone remind me to clean all this up later :p + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + + hardware.graphics = { + enable = true; + enable32Bit = true; + }; + services.xserver.videoDrivers = [ "nvidia" "displaylink" "modesetting" ]; + hardware.nvidia = { + modesetting.enable = true; + powerManagement.enable = true; + nvidiaSettings = true; + open = true; + }; + + environment.systemPackages = with pkgs; [ + prismlauncher + xivlauncher + dotnet-sdk_8 + displaylink + + #(llama-cpp.override { cudaSupport = true; }) + ]; + + services.hardware.openrgb = { + enable = true; + package = pkgs.callPackage ../../pkgs/openrgb/default.nix { }; + motherboard = "amd"; + }; + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + localNetworkGameTransfers.openFirewall = true; + }; + + programs.appimage = { + enable = true; + binfmt = true; + package = pkgs.appimage-run.override { + extraPkgs = pkgs: [ pkgs.icu ]; + }; + }; + services.flatpak.enable = true; + + virtualisation.docker = { + enable = true; + daemon.settings = { + "insecure-registries" = [ "registry.den.vixen.lgbt" ]; + }; + }; + services.power-profiles-daemon.enable = true; + + programs.virt-manager.enable = true; + virtualisation.libvirtd.enable = true; + virtualisation.spiceUSBRedirection.enable = true; + + networking.interfaces.enp14s0.wakeOnLan.enable = true; + networking.firewall.enable = true; + networking.firewall.allowedTCPPorts = [ 22 ]; + + system.stateVersion = "25.11"; +} diff --git a/hosts/ninetails/hardware.nix b/hosts/ninetails/hardware.nix new file mode 100644 index 00000000..bb5ccd7e --- /dev/null +++ b/hosts/ninetails/hardware.nix @@ -0,0 +1,48 @@ +{ + config, + lib, + pkgs, + modulesPath, + ... +}: + +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "thunderbolt" + "usbhid" + "ixgbe" + ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/bdbfccca-c22d-4ea7-99a4-e6e776b8dd8e"; + fsType = "ext4"; + }; + fileSystems."/mnt/storage" = { + device = "/dev/disk/by-uuid/6A88914488910FA5"; + fsType = "ntfs"; + options = [ "uid=1000" "gid=100" "umask=022" "rw" ]; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/D127-08D3"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = [ { device = "/dev/disk/by-uuid/b100a5d3-a307-4298-8893-026ef62fd4d7"; } ]; + + networking.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/skye-hosts.nix b/hosts/skye-hosts.nix new file mode 100644 index 00000000..ccd08231 --- /dev/null +++ b/hosts/skye-hosts.nix @@ -0,0 +1,32 @@ +{ + easy-hosts = { + hosts = { + dialga = { + deployable = true; + tags = [ "skye" ]; + specialArgs.hostType = "server"; + }; + mareep = { + deployable = true; + tags = [ "skye" ]; + specialArgs.hostType = "server"; + }; + zorua = { + deployable = true; + tags = [ "skye" ]; + specialArgs.hostType = "server"; + }; + altaria = { + deployable = true; + tags = [ "skye" ]; + arch = "aarch64"; + specialArgs.hostType = "server"; + }; + ninetails = { + deployable = true; + tags = [ "skye" ]; + specialArgs.hostType = "desktop"; + }; + }; + }; +} diff --git a/hosts/zorua/default.nix b/hosts/zorua/default.nix new file mode 100644 index 00000000..6db497f4 --- /dev/null +++ b/hosts/zorua/default.nix @@ -0,0 +1,21 @@ +{ + inputs, + pkgs, + lib, + config, + ... +}: + +let +in +{ + imports = [ + ./hardware.nix + ./services/modules.nix + ]; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + system.stateVersion = "26.05"; +} diff --git a/hosts/zorua/hardware.nix b/hosts/zorua/hardware.nix new file mode 100644 index 00000000..eee75d83 --- /dev/null +++ b/hosts/zorua/hardware.nix @@ -0,0 +1,32 @@ +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + boot.kernelParams = [ "amd_pstate=guided" ]; + powerManagement.enable = true; + powerManagement.cpuFreqGovernor = "schedutil"; + + fileSystems."/" = + { device = "/dev/disk/by-label/NIXROOT"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-label/NIXBOOT"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + + swapDevices = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} \ No newline at end of file diff --git a/hosts/zorua/services/docker.nix b/hosts/zorua/services/docker.nix new file mode 100644 index 00000000..3f0b4b0d --- /dev/null +++ b/hosts/zorua/services/docker.nix @@ -0,0 +1,16 @@ +{ + lib, + config, + self, + ... +}: +let +in +{ + virtualisation.docker = { + enable = true; + daemon.settings = { + "insecure-registries" = [ "registry.den.vixen.lgbt" ]; + }; + }; +} diff --git a/hosts/zorua/services/modules.nix b/hosts/zorua/services/modules.nix new file mode 100644 index 00000000..9045632e --- /dev/null +++ b/hosts/zorua/services/modules.nix @@ -0,0 +1,5 @@ +{ + imports = [ + ./docker.nix + ]; +} -- 2.51.2 From 43809f154ff7f3f3cc06a39ab28a44fe14beb882 Mon Sep 17 00:00:00 2001 From: dish Date: Sat, 20 Jun 2026 11:06:32 -0400 Subject: [PATCH 6/9] [skye] add disko --- flake.lock | 21 +++++++++++++++++++++ flake.nix | 4 ++++ hosts/altaria/default.nix | 1 - hosts/skye-hosts.nix | 5 ++++- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/flake.lock b/flake.lock index 22b652c4..8cc220ca 100644 --- a/flake.lock +++ b/flake.lock @@ -88,6 +88,26 @@ "type": "github" } }, + "disko": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781152676, + "narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=", + "owner": "nix-community", + "repo": "disko", + "rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "disko", + "type": "github" + } + }, "dn42": { "inputs": { "bird": "bird", @@ -469,6 +489,7 @@ "agenix": "agenix", "buildbot-nix": "buildbot-nix", "ctp": "ctp", + "disko": "disko", "dn42": "dn42", "easy-hosts": "easy-hosts", "flake-compat": "flake-compat", diff --git a/flake.nix b/flake.nix index 0134448b..204fdc55 100644 --- a/flake.nix +++ b/flake.nix @@ -45,6 +45,10 @@ url = "github:catppuccin/nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + disko = { + url = "github:nix-community/disko"; + inputs.nixpkgs.follows = "nixpkgs"; + }; dn42 = { url = "github:pyrox0/dn43.nix"; inputs.nixpkgs.follows = "nixpkgs"; diff --git a/hosts/altaria/default.nix b/hosts/altaria/default.nix index 07a3cdf5..2ffa467f 100644 --- a/hosts/altaria/default.nix +++ b/hosts/altaria/default.nix @@ -10,7 +10,6 @@ let in { imports = [ - inputs.disko.nixosModules.disko ./hardware.nix ./disk-config.nix ./services/modules.nix diff --git a/hosts/skye-hosts.nix b/hosts/skye-hosts.nix index ccd08231..37bf9fc7 100644 --- a/hosts/skye-hosts.nix +++ b/hosts/skye-hosts.nix @@ -1,4 +1,4 @@ -{ +{ inputs, ... }: { easy-hosts = { hosts = { dialga = { @@ -21,6 +21,9 @@ tags = [ "skye" ]; arch = "aarch64"; specialArgs.hostType = "server"; + modules = [ + inputs.disko.nixosModules.disko + ]; }; ninetails = { deployable = true; -- 2.51.2 From a5a9a29e2de849b2969feb1c7abeb10535542b8d Mon Sep 17 00:00:00 2001 From: dish Date: Sat, 20 Jun 2026 11:15:28 -0400 Subject: [PATCH 7/9] [skye] finish moving over her config --- hosts/dialga/services/scrutiny.nix | 4 +- nixosModules/default.nix | 14 +- .../homes/{ => dish}/pyrox-zaphod/default.nix | 0 .../pyrox-zaphod/files/distrobox-config.nix | 0 .../{ => dish}/pyrox-zaphod/files/pamKeys.nix | 0 .../homes/{ => dish}/pyrox/default.nix | 0 .../{ => dish}/thehedgehog-zaphod/default.nix | 0 .../homes/{ => dish}/thehedgehog/default.nix | 0 nixosModules/homes/skye/common.nix | 55 +++++ nixosModules/homes/skye/desktop.nix | 200 ++++++++++++++++++ nixosModules/homes/skye/server.nix | 10 + nixosModules/skye/base/backup.nix | 10 +- .../base/secrets/lastfm-rpc/ninetails.age | Bin 0 -> 583 bytes .../skye/base/secrets/monitoring/scrutiny.age | 9 + .../base/secrets/restic/dialga/password.age | Bin 0 -> 561 bytes .../skye/base/secrets/restic/dialga/repo.age | 9 + nixosModules/skye/base/secrets/restic/env.age | 12 ++ .../secrets/restic/ninetails/password.age | 11 + .../base/secrets/restic/ninetails/repo.age | 10 + nixosModules/skye/base/secrets/secrets.nix | 83 ++++++++ .../base/secrets/server-checks/altaria.age | 10 + .../base/secrets/server-checks/dialga.age | 10 + .../base/secrets/server-checks/mareep.age | Bin 0 -> 487 bytes .../skye/base/secrets/server-checks/zorua.age | 9 + nixosModules/skye/base/server/checks.nix | 2 +- nixosModules/skye/base/users.nix | 2 +- 26 files changed, 445 insertions(+), 15 deletions(-) rename nixosModules/homes/{ => dish}/pyrox-zaphod/default.nix (100%) rename nixosModules/homes/{ => dish}/pyrox-zaphod/files/distrobox-config.nix (100%) rename nixosModules/homes/{ => dish}/pyrox-zaphod/files/pamKeys.nix (100%) rename nixosModules/homes/{ => dish}/pyrox/default.nix (100%) rename nixosModules/homes/{ => dish}/thehedgehog-zaphod/default.nix (100%) rename nixosModules/homes/{ => dish}/thehedgehog/default.nix (100%) create mode 100644 nixosModules/homes/skye/common.nix create mode 100644 nixosModules/homes/skye/desktop.nix create mode 100644 nixosModules/homes/skye/server.nix create mode 100644 nixosModules/skye/base/secrets/lastfm-rpc/ninetails.age create mode 100644 nixosModules/skye/base/secrets/monitoring/scrutiny.age create mode 100644 nixosModules/skye/base/secrets/restic/dialga/password.age create mode 100644 nixosModules/skye/base/secrets/restic/dialga/repo.age create mode 100644 nixosModules/skye/base/secrets/restic/env.age create mode 100644 nixosModules/skye/base/secrets/restic/ninetails/password.age create mode 100644 nixosModules/skye/base/secrets/restic/ninetails/repo.age create mode 100644 nixosModules/skye/base/secrets/secrets.nix create mode 100644 nixosModules/skye/base/secrets/server-checks/altaria.age create mode 100644 nixosModules/skye/base/secrets/server-checks/dialga.age create mode 100644 nixosModules/skye/base/secrets/server-checks/mareep.age create mode 100644 nixosModules/skye/base/secrets/server-checks/zorua.age diff --git a/hosts/dialga/services/scrutiny.nix b/hosts/dialga/services/scrutiny.nix index ca842282..5b5ed8f6 100644 --- a/hosts/dialga/services/scrutiny.nix +++ b/hosts/dialga/services/scrutiny.nix @@ -1,9 +1,9 @@ -{ self, config, ... }: +{ config, ... }: let in { age.secrets."monitoring/scrutiny" = { - file = ../../../secrets/monitoring/scrutiny.age; + file = ../../../nixosModules/skye/base/secrets/monitoring/scrutiny.age; }; services.scrutiny = { diff --git a/nixosModules/default.nix b/nixosModules/default.nix index 8525e25b..62b453ca 100644 --- a/nixosModules/default.nix +++ b/nixosModules/default.nix @@ -5,12 +5,13 @@ _: { defaultUsers = import ./default-users; profiles = import ./profiles; distributed-builds = import ./distributedBuilds; + dn42Wireguard = import ./dn42Wireguard; + + # Skye's modules skye-base = import ./skye/base; skye-server-checks = import ./skye/server-checks; skye-lastfm-rpc = import ./skye/lastfm-rpc; - dn42Wireguard = import ./dn42Wireguard; - # Programs chromium = import ./programs/chromium; dms = import ./programs/dms; @@ -25,9 +26,10 @@ _: { scrutiny = import ./services/scrutiny; voidauth = import ./services/voidauth; - hm-pyrox = import ./homes/pyrox; - hm-thehedgehog = import ./homes/thehedgehog; - hm-pyrox-zaphod = import ./homes/pyrox-zaphod; - hm-thehedgehog-zaphod = import ./homes/thehedgehog-zaphod; + # dish's homes + hm-pyrox = import ./homes/dish/pyrox; + hm-thehedgehog = import ./homes/dish/thehedgehog; + hm-pyrox-zaphod = import ./homes/dish/pyrox-zaphod; + hm-thehedgehog-zaphod = import ./homes/dish/thehedgehog-zaphod; }; } diff --git a/nixosModules/homes/pyrox-zaphod/default.nix b/nixosModules/homes/dish/pyrox-zaphod/default.nix similarity index 100% rename from nixosModules/homes/pyrox-zaphod/default.nix rename to nixosModules/homes/dish/pyrox-zaphod/default.nix diff --git a/nixosModules/homes/pyrox-zaphod/files/distrobox-config.nix b/nixosModules/homes/dish/pyrox-zaphod/files/distrobox-config.nix similarity index 100% rename from nixosModules/homes/pyrox-zaphod/files/distrobox-config.nix rename to nixosModules/homes/dish/pyrox-zaphod/files/distrobox-config.nix diff --git a/nixosModules/homes/pyrox-zaphod/files/pamKeys.nix b/nixosModules/homes/dish/pyrox-zaphod/files/pamKeys.nix similarity index 100% rename from nixosModules/homes/pyrox-zaphod/files/pamKeys.nix rename to nixosModules/homes/dish/pyrox-zaphod/files/pamKeys.nix diff --git a/nixosModules/homes/pyrox/default.nix b/nixosModules/homes/dish/pyrox/default.nix similarity index 100% rename from nixosModules/homes/pyrox/default.nix rename to nixosModules/homes/dish/pyrox/default.nix diff --git a/nixosModules/homes/thehedgehog-zaphod/default.nix b/nixosModules/homes/dish/thehedgehog-zaphod/default.nix similarity index 100% rename from nixosModules/homes/thehedgehog-zaphod/default.nix rename to nixosModules/homes/dish/thehedgehog-zaphod/default.nix diff --git a/nixosModules/homes/thehedgehog/default.nix b/nixosModules/homes/dish/thehedgehog/default.nix similarity index 100% rename from nixosModules/homes/thehedgehog/default.nix rename to nixosModules/homes/dish/thehedgehog/default.nix diff --git a/nixosModules/homes/skye/common.nix b/nixosModules/homes/skye/common.nix new file mode 100644 index 00000000..4ca28686 --- /dev/null +++ b/nixosModules/homes/skye/common.nix @@ -0,0 +1,55 @@ +{ config, pkgs, ... }: + +{ + home = { + username = "skye"; + homeDirectory = "/home/skye"; + stateVersion = "25.11"; + }; + + programs.zsh = { + enable = true; + oh-my-zsh = { + enable = true; + plugins = [ "git" ]; + }; + initContent = '' + bindkey "^[[1;3D" backward-word + bindkey "^[[1;3C" forward-word + bindkey "^[[1;5D" backward-word + bindkey "^[[1;5C" forward-word + bindkey "^[b" backward-word + bindkey "^[f" forward-word + ''; + }; + + programs.git = { + enable = true; + extraConfig = { + user.name = "asleepyskye"; + user.email = "skye@vixen.lgbt"; + }; + }; + + home.packages = with pkgs; [ + hyfetch + ]; + + xdg.configFile."hyfetch.json".source = (pkgs.formats.json { }).generate "hyfetch.json" { + preset = "transgender"; + mode = "8bit"; + auto_detect_light_dark = true; + light_dark = "dark"; + lightness = 0.65; + color_align = { + mode = "horizontal"; + }; + backend = "neofetch"; + args = null; + distro = null; + pride_month_disable = false; + custom_ascii_path = null; + }; + + programs.home-manager.enable = true; +} diff --git a/nixosModules/homes/skye/desktop.nix b/nixosModules/homes/skye/desktop.nix new file mode 100644 index 00000000..c92e31ef --- /dev/null +++ b/nixosModules/homes/skye/desktop.nix @@ -0,0 +1,200 @@ +{ pkgs, inputs, ... }: +{ + imports = [ + ./common.nix + inputs.noctalia.homeModules.default + ]; + + programs.noctalia-shell = { + enable = true; + }; + + programs.zsh.oh-my-zsh = { + theme = "lesbianheart"; + custom = "${pkgs.writeTextDir "themes/lesbianheart.zsh-theme" '' + PROMPT='[%m] %F{#D52D00}♥ %F{#FF9A56}♥ %F{#FFFFFF}♥ %F{#D362A4}♥ %F{#A30262}♥%f %F{cyan}%~%f > ' + ''}"; + }; + + home.file.".face".source = pkgs.fetchurl { + url = "https://media.vixen.lgbt/sso/skye.png"; + hash = "sha256-53Mh2svqeTCI5oaQBYxRcwrzAMgmCmd2ZNljTOFNPpc="; + }; + + xdg.configFile."niri/config.kdl".text = '' + spawn-at-startup "noctalia-shell" + spawn-at-startup "playerctld" + spawn-at-startup "cider-2" + spawn-at-startup "discord" + spawn-at-startup "flatpak" "run" "me.amankhanna.opendeck" "--hide" + xwayland-satellite {} + + layout { + shadow { + off + } + focus-ring { + width 4 + active-gradient from="#b5ddf7" to="#f5a9b8" angle=45 in="srgb-linear" + } + } + + output "HP Inc. HP Z27n G2 6CM8150LVM" { + mode "2560x1440@74.971" + position x=0 y=1080 + } + output "GIGA-BYTE TECHNOLOGY CO., LTD. M27Q P 22163B004576" { + mode "2560x1440@164.958" + position x=2560 y=1080 + } + output "HP Inc. HP E223 3CQ9200Q2B" { + mode "1920x1080@60.000" + position x=359 y=0 + transform "180" + } + + window-rule { + geometry-corner-radius 10 + clip-to-geometry true + } + + debug { + honor-xdg-activation-with-invalid-serial + } + + window-rule { + draw-border-with-background false + background-effect { + blur true + xray false + } + } + + window-rule { + match app-id="discord" + open-on-output "HP Inc. HP Z27n G2 6CM8150LVM" + default-column-width { proportion 1.0; } + } + + window-rule { + match app-id="Cider" + open-on-output "HP Inc. HP E223 3CQ9200Q2B" + default-column-width { proportion 1.0; } + } + + layer-rule { + match namespace="^noctalia-(background|launcher-overlay|dock)-.*$" + background-effect { + xray false + } + } + + gestures { + hot-corners { + off + } + } + + binds { + Ctrl+Alt+T { spawn "kitty"; } + Mod+Space { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; } + Mod+V { spawn "noctalia-shell" "ipc" "call" "launcher" "clipboard"; } + Mod+L { spawn "noctalia-shell" "ipc" "call" "lockScreen" "lock"; } + + Mod+Alt+O repeat=false { toggle-overview; } + + Mod+Alt+Up { focus-workspace-up; } + Mod+Alt+Down { focus-workspace-down; } + + Mod+Alt+Left { set-column-width "50%"; } + Mod+Alt+Right { set-column-width "50%"; } + + Mod+Q repeat=false { close-window; } + + Mod+Alt+Return repeat=false { maximize-column; } + Mod+Shift+Alt+Return repeat=false { maximize-window-to-edges; } + Mod+Alt+Apostrophe repeat=false { toggle-window-floating; } + + Mod+Shift+S repeat=false { screenshot; } + Print repeat=false { screenshot-screen; } + + XF86AudioRaiseVolume allow-when-locked=true { spawn "sh" "-c" "playerctl status 2>/dev/null | grep -q Playing && playerctl volume 0.05+ || noctalia-shell ipc call volume increase"; } + XF86AudioLowerVolume allow-when-locked=true { spawn "sh" "-c" "playerctl status 2>/dev/null | grep -q Playing && playerctl volume 0.05- || noctalia-shell ipc call volume decrease"; } + XF86AudioMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput"; } + XF86AudioMicMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteInput"; } + XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause"; } + XF86AudioNext allow-when-locked=true { spawn "playerctl" "next"; } + XF86AudioPrev allow-when-locked=true { spawn "playerctl" "previous"; } + + Mod+Left { focus-column-left; } + Mod+Down { focus-window-down; } + Mod+Up { focus-window-up; } + Mod+Right { focus-column-right; } + + Mod+Ctrl+Left { move-column-left; } + Mod+Ctrl+Down { move-window-down; } + Mod+Ctrl+Up { move-window-up; } + Mod+Ctrl+Right { move-column-right; } + Mod+Ctrl+H { move-column-left; } + Mod+Ctrl+J { move-window-down; } + Mod+Ctrl+K { move-window-up; } + Mod+Ctrl+L { move-column-right; } + + Mod+Home { focus-column-first; } + Mod+End { focus-column-last; } + Mod+Ctrl+Home { move-column-to-first; } + Mod+Ctrl+End { move-column-to-last; } + + Mod+Shift+Left { focus-monitor-left; } + Mod+Shift+Down { focus-monitor-down; } + Mod+Shift+Up { focus-monitor-up; } + Mod+Shift+Right { focus-monitor-right; } + Mod+Shift+H { focus-monitor-left; } + Mod+Shift+J { focus-monitor-down; } + Mod+Shift+K { focus-monitor-up; } + Mod+Shift+L { focus-monitor-right; } + + Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } + Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } + Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } + Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } + Mod+Shift+Ctrl+H { move-column-to-monitor-left; } + Mod+Shift+Ctrl+J { move-column-to-monitor-down; } + Mod+Shift+Ctrl+K { move-column-to-monitor-up; } + Mod+Shift+Ctrl+L { move-column-to-monitor-right; } + } + ''; + + programs.kitty = { + enable = true; + shellIntegration.enableZshIntegration = true; + themeFile = "Catppuccin-Mocha"; + font = { + size = 12; + name = "JetBrainsMono Nerd Font Mono"; + }; + settings = { + background_opacity = "0.8"; + wayland_titlebar_color = "system"; + macos_titlebar_color = "background"; + window_padding_width = "6 8"; + term = "xterm-256color"; + }; + }; + + home.packages = with pkgs; [ + nerd-fonts.jetbrains-mono + direnv + playerctl + + obsidian + betterdiscordctl + discord + ]; + + programs.vscode = { + enable = true; + extensions = with pkgs.vscode-extensions; [ rust-lang.rust-analyzer ]; + package = pkgs.vscode.fhs; + }; +} diff --git a/nixosModules/homes/skye/server.nix b/nixosModules/homes/skye/server.nix new file mode 100644 index 00000000..4af15bbd --- /dev/null +++ b/nixosModules/homes/skye/server.nix @@ -0,0 +1,10 @@ +{ pkgs, ... }: +{ + imports = [ ./common.nix ]; + programs.zsh.oh-my-zsh = { + theme = "transheart"; + custom = "${pkgs.writeTextDir "themes/transheart.zsh-theme" '' + PROMPT='[%m] %F{117}♥ %F{218}♥ %F{231}♥ %F{218}♥ %F{117}♥ %f %F{cyan}%~%f > ' + ''}"; + }; +} diff --git a/nixosModules/skye/base/backup.nix b/nixosModules/skye/base/backup.nix index ff25f862..a3c23e14 100644 --- a/nixosModules/skye/base/backup.nix +++ b/nixosModules/skye/base/backup.nix @@ -5,14 +5,14 @@ ... }: -let - hasConfig = builtins.pathExists ../../secrets/restic/${config.networking.hostName}/repo.age; +let + hasConfig = builtins.pathExists ./secrets/restic/${config.networking.hostName}/repo.age; in lib.mkIf hasConfig { age.secrets = { - "restic/env".file = ../../secrets/restic/env.age; - "restic/repo".file = ../../secrets/restic/${config.networking.hostName}/repo.age; - "restic/password".file = ../../secrets/restic/${config.networking.hostName}/password.age; + "restic/env".file = ./secrets/restic/env.age; + "restic/repo".file = ./secrets/restic/${config.networking.hostName}/repo.age; + "restic/password".file = ./secrets/restic/${config.networking.hostName}/password.age; }; services.restic.backups = { diff --git a/nixosModules/skye/base/secrets/lastfm-rpc/ninetails.age b/nixosModules/skye/base/secrets/lastfm-rpc/ninetails.age new file mode 100644 index 0000000000000000000000000000000000000000..b28e85e33c536799a3042fc75318e31759aea720 GIT binary patch literal 583 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCR+^|VMXFIVvPPcb$q zGjQ?o3a@f0Off47&MI_EEeXiJaa=sNAHweCw-4> z$6_P@aF>82pVHhavy|M@u)HM8%s{U4K*JQX@Vrc~;-n(ailj`Fa4$=XsH$Q=OLM2P zU>Aejki@d0%q$b1=uU0sE|0)3OTfS}Y2Gqda{vl2^_WH0~x6w6ANKxfA&Hw$;K zyyA=?$CS*J5?`+8?l+#E306FO>e~JOS2xU_s2Ha6H}7~^px5fY;80khnMY}vq)?t; z!?R=WP8?&nqBLdJuiIt4U$*ZOZ`a`L_piBjAYNPW*dyNaeccr&rxw`FUEK5C;`|w> z)drhCIZqYwi{w^#^dls6YWzEkwhFs`dyc(**^ib*Pi0#Dw2po8qWy+1J0>kJ|M!5$ z=a+Be*{90u{ObBu+e~k=7U^F%lWUOqbUuUqvD698o0eL0SDrH7>n@w0dGD<_02id) A?EnA( literal 0 HcmV?d00001 diff --git a/nixosModules/skye/base/secrets/monitoring/scrutiny.age b/nixosModules/skye/base/secrets/monitoring/scrutiny.age new file mode 100644 index 00000000..c2f316ae --- /dev/null +++ b/nixosModules/skye/base/secrets/monitoring/scrutiny.age @@ -0,0 +1,9 @@ +age-encryption.org/v1 +-> ssh-ed25519 UI8cww JLXAoxOUsEjRPyLw5ZHzuNON7BLqHAeFkHeDYCMkt2o +/XdizJKUd8CUcZ7OCvhrhXgmpw3RCbbDyXZQVy+xNe8 +-> ssh-ed25519 R5iBIA gfZe3hDGxdWjq7d+FlRE+B68zXB+vQIMkJKMcvSajjs +TR9q8ZkCDJyXNLBs0CEISbFDHNdaGNiUvAS4ZqagGFA +-> ssh-ed25519 E4banw HiMpRPv0qvJ+JPUiZQsFPsoDIMiZxoO/6QBhBlr9E2M +34i3AE5YBKijMha3O/+blJmRfEsafC09Y8l+udd7IjE +--- +/vs+O7AdwQ+KvHisqwmLFEkkBhcl+c9Z4CFW5outj8 +���N������k�w|`��o)�6+/��u�>T$�� ��,�����ZG3�q�IJ]+�ZV��;�J��ЌJ�^.�t���{�����Y����y�����i�rUR"估x{�h�z�s��;��, Ԅ7ߡ� \ No newline at end of file diff --git a/nixosModules/skye/base/secrets/restic/dialga/password.age b/nixosModules/skye/base/secrets/restic/dialga/password.age new file mode 100644 index 0000000000000000000000000000000000000000..330fbdb6d8f2a4b88b163b95a459d8f176085bfd GIT binary patch literal 561 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCR+^|VMXFIULV$@b4n zuE=#sb}=t4EhyA3_A;|{3-v9vNKY*e@eA@O4KVPr2=aC{isY)&F83}^_cL)VFo<$C zF7(h&sqjyBi!gICGOr8{3(NB@4i8PK$jQvkOGdXX$TZW*(@~+^)gvdT+$_(-ImN&v zsKnGGAg9>Hr8390G@>fp+^MW0IHNMrtR%_6D3q(zB|J#KIM7Ht%{SDwAkn1AIZQvQ z*eAcrH7L#1HONCdxY!^#FFnYwARpZ}SCgc~ymAFcAJ4)xqioMC)38!~H?tzM$e_>= zlj6jRjL2*Y(}0}fL}wSXj2wTbigYf|BJ*&IaEt7+;?T0NN>6t;6YWY*r^M{COjASc z$~@Dch`fxF%*e3f;B+osU0sDJW5bFlV~;>r=gQ2)04LK5PnQz6#C)H~0*_#`67T%H z#42-bi>TbH)N-zhC3=o0mN>QEw~2eW>xc0EQ!xThKdhLU*JJj6%{BL2Ur%Yz%H ssh-ed25519 UI8cww /Rk3MNNcVIdm5VBY2Od3x11+jpA+D3k13HRDqRZPOhs +N+D5xO/4HncSgPmIGU7ITKzrZTh5q/JYi1hkUEoNCzQ +-> ssh-ed25519 R5iBIA vL//87C4+w4NoZSDAxLHwLsipVmmWxsOLF4ZK5UTuiU +t/Bq3xJ57cDv62NlQntVKvEgEwp7pdPSj9+ukAMD2wY +-> ssh-ed25519 E4banw aE3JAjkRav+JF8VIkmUPr2pKVfsOGVfjDZ/+KomcEDU +AK92cYEgupFKaiV39/orqZKULtVMYEdyhgva3jCYTyE +--- feYc+yOxLoqBi3K9e0MlLExC5mARhn/b1WrX6ARlxfM +�� �{s!1\A��FIj���U�hn�~�}Q��\Fi�fM�����!`�#��}u�s7�G���W"X�nF��z� b��PT \ No newline at end of file diff --git a/nixosModules/skye/base/secrets/restic/env.age b/nixosModules/skye/base/secrets/restic/env.age new file mode 100644 index 00000000..489982e3 --- /dev/null +++ b/nixosModules/skye/base/secrets/restic/env.age @@ -0,0 +1,12 @@ +age-encryption.org/v1 +-> ssh-ed25519 UI8cww 9HpUUflITFaXl3eSEBHCDnF0uWDZqS2VulNkXwxcwA0 +wztJidelEbi4HEzzU1DkWm2d34MyUVDrFZFLCYrkj1o +-> ssh-ed25519 R5iBIA VCvKqdqUzLS5DwNEmaXmEVe1/nwq9XcMCFxEwwknk0M +Qksfwscjg/npywoKcEzODBamNCiGL5Q0YNBYM3vbly0 +-> ssh-ed25519 E4banw vpbp9UD+ougK9StGY8AhfiuNpBpUAC1zUS9cAV2qTEo +3Q+0YAHQ9uW0/elwAHSLfpyJut+ZfIJhPRxWEelsWWk +-> ssh-ed25519 TrfPEg utNOUlQSmdmEUwTIHhAnRcLgwFS3nldPGfTbNVPS0jM +gygKmo7OBY5l6OJ0B815qQTb3eJH8KH+9v6ilkGzGXk +--- m7SYkkvwLyp0lLyjND2Fn1MGCtkVJb1Rk+52CsKxBBg +��[��_��,���)e�ː[��IP���~z&1��:���^`9u�������]ӎD�4���T|$ �^ ��%�F�슃���B����TČ������h�֬�X(� + �E�����Fz \ No newline at end of file diff --git a/nixosModules/skye/base/secrets/restic/ninetails/password.age b/nixosModules/skye/base/secrets/restic/ninetails/password.age new file mode 100644 index 00000000..b047456d --- /dev/null +++ b/nixosModules/skye/base/secrets/restic/ninetails/password.age @@ -0,0 +1,11 @@ +age-encryption.org/v1 +-> ssh-ed25519 UI8cww Bjq0l3i4cmRm6B5eJ3vcGcMp6ndmHxEsLbGE7h3JsD0 +96RGNrW6omYujvFCCGCSzQay+XBEdIs5JZu3CstDFOw +-> ssh-ed25519 R5iBIA j/WA2v/lz9nHpv3LDE8lqkC7hLerWPEp2HBKaGRNzQQ +ZF8sAEfzb1bQbeQz5JLQub/SrvK0UCjmEWAYELMceFk +-> ssh-ed25519 TrfPEg 89gyV/RBgzVjAZCzNRxIEO1MlaJS/8uj5pU/G1qtmiA +hP6dz5417gOXeYOjVxkScbyIyfwxtME4VHAuXpG8ofs +--- TjnoEnBe1oPNh/u0kgPgxdOsz+PUyMtwuF8aMtm3z/s +��>Ѓp�b���2�uXN �D�\ϲ��O]�/��� RF���.YW1C.#�U������ +�����ffАY>8O��^ѥW& +_[�{��Y���J�������`+��o���{�8��y /�N��ݲ�L����l����H��Й��n�g�:`4c�H�K�� \ No newline at end of file diff --git a/nixosModules/skye/base/secrets/restic/ninetails/repo.age b/nixosModules/skye/base/secrets/restic/ninetails/repo.age new file mode 100644 index 00000000..79a2c597 --- /dev/null +++ b/nixosModules/skye/base/secrets/restic/ninetails/repo.age @@ -0,0 +1,10 @@ +age-encryption.org/v1 +-> ssh-ed25519 UI8cww fU7cb9MKoFAlfqyBfeoRYJW9zIuJVo1fNyqEZSUQKRs +f+UMj8543swEtXhQUVt/idMFrYSN9FmTefY3UOkOo2M +-> ssh-ed25519 R5iBIA tu/R00RiTILTKZPY6LkdlzbCB5P0oXSGyJ/ugi4AfGc +AjBepZXHF8WpInbF4j1DdjV3AIntrgEY41RfDg5sh0E +-> ssh-ed25519 TrfPEg FMckmGYcRUg/wWHuyFyrP+wtlFc61lrbnr0ti6wGtBI +sq/PqpxDpPvIuj/fOuKzBoe6MVwOlLO6adqQG4ahN0U +--- WFvAmhYelgTQlmQPyZtbygGlXI/V2grf7dceQb4sqys + KI=���Oc��0u +��bo��t0�+�ɺ���_�� �U�e�S��y0WS;����>U��=L'c��,X֨�y|Bg����� \ No newline at end of file diff --git a/nixosModules/skye/base/secrets/secrets.nix b/nixosModules/skye/base/secrets/secrets.nix new file mode 100644 index 00000000..0a3621bd --- /dev/null +++ b/nixosModules/skye/base/secrets/secrets.nix @@ -0,0 +1,83 @@ +let + inherit (import { }) lib; + readSshKeyFile = ( + file: + with builtins; + with lib; + filter (line: isString line && hasPrefix "ssh-" line) (split "\n" (readFile file)) + ); + keys = { + users.skye = readSshKeyFile ../sshKeys/skye; + systems = { + ninetails = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILLoxq0t2bNBEEX6o3fEtQnT8qC/wWoXUuEXzhjYnLyv" ]; + dialga = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEIRlV0hCtR1qEhVRPm6CrwquoUNVSG3mtVtQ/lUz5hD" ]; + mareep = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyB7xEE+FU45DgyFer/+11hXoW0axIR3RVDf+6ftPT/" ]; + zorua = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAYYPqYWx1HEduhHB9LXvzW0oIFEYXyX3TN7x9CeH8TX" ]; + altaria = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBlYgikrxduQ9Mrwd1+0pINiXHDxwyStdj1/qGAC4m0e" ]; + }; + }; + + #todo: simplify this? + keysets = { + ninetails = lib.flatten ( + with keys; + [ + users.skye + systems.ninetails + ] + ); + dialga = lib.flatten ( + with keys; + [ + users.skye + systems.dialga + ] + ); + mareep = lib.flatten ( + with keys; + [ + users.skye + systems.mareep + ] + ); + zorua = lib.flatten ( + with keys; + [ + users.skye + systems.zorua + ] + ); + altaria = lib.flatten ( + with keys; + [ + users.skye + systems.altaria + ] + ); + all = lib.flatten ( + with keys; + [ + users.skye + (builtins.attrValues systems) + ] + ); + }; +in +{ + "restic/env.age".publicKeys = keysets.all; + + "restic/ninetails/repo.age".publicKeys = keysets.ninetails; + "restic/ninetails/password.age".publicKeys = keysets.ninetails; + + "restic/dialga/repo.age".publicKeys = keysets.dialga; + "restic/dialga/password.age".publicKeys = keysets.dialga; + + "server-checks/dialga.age".publicKeys = keysets.dialga; + "server-checks/mareep.age".publicKeys = keysets.mareep; + "server-checks/zorua.age".publicKeys = keysets.zorua; + "server-checks/altaria.age".publicKeys = keysets.altaria; + + "monitoring/scrutiny.age".publicKeys = keysets.dialga; + + "lastfm-rpc/ninetails.age".publicKeys = keysets.ninetails; +} diff --git a/nixosModules/skye/base/secrets/server-checks/altaria.age b/nixosModules/skye/base/secrets/server-checks/altaria.age new file mode 100644 index 00000000..361e7fa9 --- /dev/null +++ b/nixosModules/skye/base/secrets/server-checks/altaria.age @@ -0,0 +1,10 @@ +age-encryption.org/v1 +-> ssh-ed25519 UI8cww QD+UPEvANPSRU9KkHcvNAG0EXtUTj549gL+wSbpnaig +KoaVzrlIenaslod399AXukcnzuMZYcrimJGNqu0EQcM +-> ssh-ed25519 R5iBIA WVrg/b2OF7qgLEgIhfOfF4D4uVFLoKRlW8RpuC6wWAc +FFF21bExXQ+x1HIFP6MdwFM92NMI1q065EaPhleKgmY +-> ssh-ed25519 IObEQA evXHgLaRT6IHPypzCH/pPLFM10/WzSQkfSGrUqohIkQ +6uQCZ/xRgPXHedDq6qBfqseOcnzgGv0hUBAsVYG5Lus +--- +OlyAcf7WD0WCNi8ihILmFuK5Ikhl9tUox3JN8gKsyc +��jL{���/���M��1F��dj��T���Kƌ�i��Hk."]�0f����U��U +ݬ��L�<'G�&�h�� �3h�Gz p`�w&� \ No newline at end of file diff --git a/nixosModules/skye/base/secrets/server-checks/dialga.age b/nixosModules/skye/base/secrets/server-checks/dialga.age new file mode 100644 index 00000000..8ffdb9e2 --- /dev/null +++ b/nixosModules/skye/base/secrets/server-checks/dialga.age @@ -0,0 +1,10 @@ +age-encryption.org/v1 +-> ssh-ed25519 UI8cww U5kS+9VY8KcEdyHZHJQ0fgo8yK9iSpNeuTC9xSI1xD0 +Sjv9d9+6P58hcGB71P26+bx1AZumUGBtRyhG09uofk4 +-> ssh-ed25519 R5iBIA ZeyCbM3UtjjpWASQFZLdWKe/LFElAsgLEjU+embYDVE +HwhrcdWb+a8Fx7MYLtrdp8QfBMMDkdYNwVm7n3XVKcg +-> ssh-ed25519 E4banw dVJj+PtFIkjidpKQr5u7mwMoStvcOJfTV+x3EytlRVs +9i+Wfuz8emDbH10rIOFZ1CAogEVGwyn/3CpWzk8H9ns +--- 1MOEnPY++oMpHcjC32+xN7sHa72MUedkHsTJXl9eq7k +�[S.}�)��SON�� *:c�$� ��ƫ}��>�Ն` +�8 M�8�WV�U2\���>I�ǛG��>2�=� PAp�˳��j��% \ No newline at end of file diff --git a/nixosModules/skye/base/secrets/server-checks/mareep.age b/nixosModules/skye/base/secrets/server-checks/mareep.age new file mode 100644 index 0000000000000000000000000000000000000000..8273fc4ca06e8fb6f78c8232cfc90cc7b8462104 GIT binary patch literal 487 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCR+^|VMXFIVs=_O>w1 zG%xoHajXi+G%pJ&3@9-2Nb#;JbSnur4KvF%2rxCbEU`=v%IETkib{2_3a;?2taP(T z&CIH@u*~$x@^W)5E;Dv3Dlaw-38~B}$<5C+@I|*R$TZW*(@`PQCnqbZG~G+zJ1N;O zI4>vH$1l&@qSDnrB{j4vJkrm?IoQ=TH#xf^+>G%zBM6zvq} zuu79)%P0%~(sZum#T%~fVURh*yJYFbu;bke4D!Tw%sJvL;cS#^v($TONMv2^ulc9A z%U ssh-ed25519 UI8cww 5aZojzAgB1p03uVzmrSLLfUKNCylRTkx+5GqT1ZBKAU +yfk1gtfEK6gwO1W8YEffmN7WE7eoXVL5VNVV4EGaZ8Y +-> ssh-ed25519 R5iBIA 9VQsCC2+RLEuzhs/nVyG41jkgOMdOkGATi96hXILNSs +q+4z45iZ7rFdj3dGOiKXoa6QYbRZ4Jny6xUXhzJhc1w +-> ssh-ed25519 j+CTdg yy1vUAZirabmdeoEvWYB8YYyHzLhiHXBPJxu5IuF0Cg +NbINSODd4yUDbSGLxBipJHRLH7+1GgsK/bLDoUYGWTM +--- FUeRQlU7UV5rAfnAfNoGqOul4Km346gn3WdFTr5Omjw +B,g��#c�Q���lۼ�$ ��& �,Y#%��3nDab�9�,Gd�r�N5Չg�G���-C����k߄���r�4�����1y���,D�g \ No newline at end of file diff --git a/nixosModules/skye/base/server/checks.nix b/nixosModules/skye/base/server/checks.nix index aeba185f..975660aa 100644 --- a/nixosModules/skye/base/server/checks.nix +++ b/nixosModules/skye/base/server/checks.nix @@ -8,7 +8,7 @@ imports = [ self.nixosModules.skye-server-checks ]; age.secrets = { - "server-checks-env".file = ../../../secrets/server-checks/${config.networking.hostName}.age; + "server-checks-env".file = ./secrets/server-checks/${config.networking.hostName}.age; }; serverChecks = [ diff --git a/nixosModules/skye/base/users.nix b/nixosModules/skye/base/users.nix index bf6480ba..b321d807 100644 --- a/nixosModules/skye/base/users.nix +++ b/nixosModules/skye/base/users.nix @@ -24,5 +24,5 @@ home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.skye = import (inputs.self + "/home/skye/${hostType}.nix"); + home-manager.users.skye = import ../../homes/skye/${hostType}.nix; } -- 2.51.2 From 821c051ea35fcbb34a4d99437fd599af3ffef076 Mon Sep 17 00:00:00 2001 From: dish Date: Sat, 20 Jun 2026 11:19:09 -0400 Subject: [PATCH 8/9] [skye] format all her stuff --- hosts/altaria/default.nix | 4 -- hosts/altaria/hardware.nix | 2 - hosts/altaria/services/anubis.nix | 10 +--- hosts/altaria/services/cloudflared.nix | 11 +---- hosts/altaria/services/docker.nix | 10 +--- hosts/altaria/services/pufferpanel.nix | 4 -- hosts/dialga/default.nix | 5 -- hosts/dialga/hardware.nix | 1 - hosts/dialga/services/caddy.nix | 15 ++---- hosts/dialga/services/docker.nix | 10 +--- hosts/dialga/services/forgejo.nix | 17 ++----- hosts/dialga/services/grafana.nix | 5 -- hosts/dialga/services/jellyfin.nix | 10 +--- hosts/dialga/services/miniflux.nix | 5 +- hosts/dialga/services/samba.nix | 10 +--- hosts/dialga/services/scrutiny.nix | 2 - hosts/dialga/services/victorialogs.nix | 5 -- hosts/dialga/services/victoriametrics.nix | 5 -- hosts/mareep/default.nix | 5 -- hosts/mareep/hardware.nix | 49 ++++++++++++------- hosts/ninetails/default.nix | 11 ++--- hosts/ninetails/hardware.nix | 8 ++- hosts/zorua/default.nix | 6 --- hosts/zorua/hardware.nix | 44 +++++++++++------ hosts/zorua/services/docker.nix | 10 +--- nixosModules/homes/skye/common.nix | 2 +- nixosModules/homes/skye/desktop.nix | 2 +- nixosModules/skye/base/backup.nix | 1 - nixosModules/skye/base/default.nix | 2 - nixosModules/skye/base/desktop/desktop.nix | 9 ++-- nixosModules/skye/base/desktop/packages.nix | 9 ++-- nixosModules/skye/base/metrics.nix | 1 - .../skye/base/misc/tailscale-serve.nix | 3 +- nixosModules/skye/base/networking.nix | 6 +-- nixosModules/skye/base/packages.nix | 2 - nixosModules/skye/base/secrets/secrets.nix | 8 +-- nixosModules/skye/base/users.nix | 2 +- packages/lastfm-rpc/Cargo.toml | 2 +- 38 files changed, 105 insertions(+), 208 deletions(-) diff --git a/hosts/altaria/default.nix b/hosts/altaria/default.nix index 2ffa467f..4ef24fa6 100644 --- a/hosts/altaria/default.nix +++ b/hosts/altaria/default.nix @@ -1,13 +1,9 @@ { - inputs, pkgs, lib, - config, ... }: -let -in { imports = [ ./hardware.nix diff --git a/hosts/altaria/hardware.nix b/hosts/altaria/hardware.nix index 41edac2c..44bc1233 100644 --- a/hosts/altaria/hardware.nix +++ b/hosts/altaria/hardware.nix @@ -1,7 +1,5 @@ { - config, lib, - pkgs, modulesPath, ... }: diff --git a/hosts/altaria/services/anubis.nix b/hosts/altaria/services/anubis.nix index c2cc8019..820877e4 100644 --- a/hosts/altaria/services/anubis.nix +++ b/hosts/altaria/services/anubis.nix @@ -1,12 +1,4 @@ -{ - lib, - config, - self, - ... -}: -let -in -{ +_: { services.anubis = { instances.gotosocial = { enable = true; diff --git a/hosts/altaria/services/cloudflared.nix b/hosts/altaria/services/cloudflared.nix index aba3f3b4..9aeb7062 100644 --- a/hosts/altaria/services/cloudflared.nix +++ b/hosts/altaria/services/cloudflared.nix @@ -1,13 +1,4 @@ -{ - lib, - config, - self, - ... -}: -let - tunnelId = builtins.readFile /etc/vixen/cloudflare-tunnel; -in -{ +_: { services.cloudflared = { enable = true; tunnels = { diff --git a/hosts/altaria/services/docker.nix b/hosts/altaria/services/docker.nix index 49eafd0f..31569e15 100644 --- a/hosts/altaria/services/docker.nix +++ b/hosts/altaria/services/docker.nix @@ -1,12 +1,4 @@ -{ - lib, - config, - self, - ... -}: -let -in -{ +_: { virtualisation.docker = { enable = true; daemon.settings = { diff --git a/hosts/altaria/services/pufferpanel.nix b/hosts/altaria/services/pufferpanel.nix index 06b89ce3..d535264c 100644 --- a/hosts/altaria/services/pufferpanel.nix +++ b/hosts/altaria/services/pufferpanel.nix @@ -1,12 +1,8 @@ { lib, pkgs, - config, - self, ... }: -let -in { services.pufferpanel = { enable = true; diff --git a/hosts/dialga/default.nix b/hosts/dialga/default.nix index 79c4fcd3..be9cc8ee 100644 --- a/hosts/dialga/default.nix +++ b/hosts/dialga/default.nix @@ -1,13 +1,8 @@ { - inputs, - pkgs, lib, - config, ... }: -let -in { imports = [ ./hardware.nix diff --git a/hosts/dialga/hardware.nix b/hosts/dialga/hardware.nix index d72f2392..d6a05920 100644 --- a/hosts/dialga/hardware.nix +++ b/hosts/dialga/hardware.nix @@ -1,7 +1,6 @@ { config, lib, - pkgs, modulesPath, ... }: diff --git a/hosts/dialga/services/caddy.nix b/hosts/dialga/services/caddy.nix index 5ae814be..254a811c 100644 --- a/hosts/dialga/services/caddy.nix +++ b/hosts/dialga/services/caddy.nix @@ -1,12 +1,4 @@ -{ - lib, - config, - self, - ... -}: -let -in -{ +_: { services.caddy = { enable = true; virtualHosts = { @@ -22,5 +14,8 @@ in }; }; - networking.firewall.allowedTCPPorts = [ 80 443 ]; + networking.firewall.allowedTCPPorts = [ + 80 + 443 + ]; } diff --git a/hosts/dialga/services/docker.nix b/hosts/dialga/services/docker.nix index 49eafd0f..31569e15 100644 --- a/hosts/dialga/services/docker.nix +++ b/hosts/dialga/services/docker.nix @@ -1,12 +1,4 @@ -{ - lib, - config, - self, - ... -}: -let -in -{ +_: { virtualisation.docker = { enable = true; daemon.settings = { diff --git a/hosts/dialga/services/forgejo.nix b/hosts/dialga/services/forgejo.nix index d5451a6b..bd5a0895 100644 --- a/hosts/dialga/services/forgejo.nix +++ b/hosts/dialga/services/forgejo.nix @@ -1,13 +1,4 @@ -{ - lib, - config, - self, - ... -}: -let - tunnelId = builtins.readFile /etc/vixen/cloudflare-tunnel; -in -{ +_: { services.cloudflared = { enable = true; tunnels = { @@ -44,7 +35,7 @@ in DEFAULT.APP_NAME = "git.vixen.lgbt"; server = { DOMAIN = "git.vixen.lgbt"; - ROOT_URL = "https://git.vixen.lgbt/"; + ROOT_URL = "https://git.vixen.lgbt/"; HTTP_PORT = 3100; }; service.DISABLE_REGISTRATION = true; @@ -60,8 +51,8 @@ in FROM = "mail-noreply@vixen.lgbt"; }; ui = { - THEMES="forgejo-auto, forgejo-light, forgejo-dark, gitea-auto, gitea-light, gitea-dark, forgejo-auto-deuteranopia-protanopia, forgejo-light-deuteranopia-protanopia, forgejo-dark-deuteranopia-protanopia, forgejo-auto-tritanopia, forgejo-light-tritanopia, forgejo-dark-tritanopia, custom-light"; - DEFAULT_THEME="custom-light"; + THEMES = "forgejo-auto, forgejo-light, forgejo-dark, gitea-auto, gitea-light, gitea-dark, forgejo-auto-deuteranopia-protanopia, forgejo-light-deuteranopia-protanopia, forgejo-dark-deuteranopia-protanopia, forgejo-auto-tritanopia, forgejo-light-tritanopia, forgejo-dark-tritanopia, custom-light"; + DEFAULT_THEME = "custom-light"; }; }; mailerPasswordFile = "/etc/vixen/mailer-secret"; diff --git a/hosts/dialga/services/grafana.nix b/hosts/dialga/services/grafana.nix index f0a1c295..46f995ca 100644 --- a/hosts/dialga/services/grafana.nix +++ b/hosts/dialga/services/grafana.nix @@ -1,11 +1,6 @@ { - lib, - config, - self, ... }: -let -in { imports = [ ../../../nixosModules/base/misc/tailscale-serve.nix diff --git a/hosts/dialga/services/jellyfin.nix b/hosts/dialga/services/jellyfin.nix index 2efded38..ec2142e1 100644 --- a/hosts/dialga/services/jellyfin.nix +++ b/hosts/dialga/services/jellyfin.nix @@ -1,12 +1,4 @@ -{ - lib, - config, - self, - ... -}: -let -in -{ +_: { services.jellyfin = { enable = true; }; diff --git a/hosts/dialga/services/miniflux.nix b/hosts/dialga/services/miniflux.nix index 3eba3582..1ae662ac 100644 --- a/hosts/dialga/services/miniflux.nix +++ b/hosts/dialga/services/miniflux.nix @@ -1,7 +1,4 @@ -{ self, config, ... }: -let -in -{ +_: { services.miniflux = { enable = true; config.LISTEN_ADDR = "127.0.0.1:6070"; diff --git a/hosts/dialga/services/samba.nix b/hosts/dialga/services/samba.nix index 0efc0f75..c2a9f7a4 100644 --- a/hosts/dialga/services/samba.nix +++ b/hosts/dialga/services/samba.nix @@ -1,12 +1,4 @@ -{ - lib, - config, - self, - ... -}: -let -in -{ +_: { services.samba = { enable = true; securityType = "user"; diff --git a/hosts/dialga/services/scrutiny.nix b/hosts/dialga/services/scrutiny.nix index 5b5ed8f6..2512bc32 100644 --- a/hosts/dialga/services/scrutiny.nix +++ b/hosts/dialga/services/scrutiny.nix @@ -1,6 +1,4 @@ { config, ... }: -let -in { age.secrets."monitoring/scrutiny" = { file = ../../../nixosModules/skye/base/secrets/monitoring/scrutiny.age; diff --git a/hosts/dialga/services/victorialogs.nix b/hosts/dialga/services/victorialogs.nix index 3ad6e012..feaf0803 100644 --- a/hosts/dialga/services/victorialogs.nix +++ b/hosts/dialga/services/victorialogs.nix @@ -1,11 +1,6 @@ { - lib, - config, - self, ... }: -let -in { imports = [ ../../../nixosModules/base/misc/tailscale-serve.nix diff --git a/hosts/dialga/services/victoriametrics.nix b/hosts/dialga/services/victoriametrics.nix index 2332e232..2a3808d7 100644 --- a/hosts/dialga/services/victoriametrics.nix +++ b/hosts/dialga/services/victoriametrics.nix @@ -1,11 +1,6 @@ { - lib, - config, - self, ... }: -let -in { imports = [ ../../../nixosModules/base/misc/tailscale-serve.nix diff --git a/hosts/mareep/default.nix b/hosts/mareep/default.nix index 9c3cad84..d436af23 100644 --- a/hosts/mareep/default.nix +++ b/hosts/mareep/default.nix @@ -1,13 +1,8 @@ { - inputs, pkgs, - lib, - config, ... }: -let -in { imports = [ ./hardware.nix diff --git a/hosts/mareep/hardware.nix b/hosts/mareep/hardware.nix index 4fb786db..35080f23 100644 --- a/hosts/mareep/hardware.nix +++ b/hosts/mareep/hardware.nix @@ -1,29 +1,44 @@ -{ config, lib, pkgs, modulesPath, ... }: +{ + config, + lib, + modulesPath, + ... +}: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "ahci" + "nvme" + "usb_storage" + "sd_mod" + "rtsx_pci_sdmmc" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/ef3b60af-c66d-46d4-838c-05817127ca9b"; - fsType = "ext4"; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/ef3b60af-c66d-46d4-838c-05817127ca9b"; + fsType = "ext4"; + }; - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/1581-9A44"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; - - swapDevices = - [ { device = "/dev/disk/by-uuid/2f20e039-dbfd-4c79-b91d-3f8945ac1018"; } + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/1581-9A44"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" ]; + }; + + swapDevices = [ + { device = "/dev/disk/by-uuid/2f20e039-dbfd-4c79-b91d-3f8945ac1018"; } + ]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; diff --git a/hosts/ninetails/default.nix b/hosts/ninetails/default.nix index fa61d0ec..57a8f247 100644 --- a/hosts/ninetails/default.nix +++ b/hosts/ninetails/default.nix @@ -1,13 +1,8 @@ { - inputs, pkgs, - lib, - config, ... }: -let -in { imports = [ ./hardware.nix @@ -41,7 +36,11 @@ in enable = true; enable32Bit = true; }; - services.xserver.videoDrivers = [ "nvidia" "displaylink" "modesetting" ]; + services.xserver.videoDrivers = [ + "nvidia" + "displaylink" + "modesetting" + ]; hardware.nvidia = { modesetting.enable = true; powerManagement.enable = true; diff --git a/hosts/ninetails/hardware.nix b/hosts/ninetails/hardware.nix index bb5ccd7e..9719aa0f 100644 --- a/hosts/ninetails/hardware.nix +++ b/hosts/ninetails/hardware.nix @@ -1,7 +1,6 @@ { config, lib, - pkgs, modulesPath, ... }: @@ -27,7 +26,12 @@ fileSystems."/mnt/storage" = { device = "/dev/disk/by-uuid/6A88914488910FA5"; fsType = "ntfs"; - options = [ "uid=1000" "gid=100" "umask=022" "rw" ]; + options = [ + "uid=1000" + "gid=100" + "umask=022" + "rw" + ]; }; fileSystems."/boot" = { diff --git a/hosts/zorua/default.nix b/hosts/zorua/default.nix index 6db497f4..31b97dcf 100644 --- a/hosts/zorua/default.nix +++ b/hosts/zorua/default.nix @@ -1,13 +1,7 @@ { - inputs, - pkgs, - lib, - config, ... }: -let -in { imports = [ ./hardware.nix diff --git a/hosts/zorua/hardware.nix b/hosts/zorua/hardware.nix index eee75d83..ee1cf00d 100644 --- a/hosts/zorua/hardware.nix +++ b/hosts/zorua/hardware.nix @@ -1,11 +1,22 @@ -{ config, lib, pkgs, modulesPath, ... }: +{ + config, + lib, + modulesPath, + ... +}: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" ]; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "ahci" + "nvme" + "usb_storage" + "sd_mod" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; @@ -14,19 +25,22 @@ powerManagement.enable = true; powerManagement.cpuFreqGovernor = "schedutil"; - fileSystems."/" = - { device = "/dev/disk/by-label/NIXROOT"; - fsType = "ext4"; - }; + fileSystems."/" = { + device = "/dev/disk/by-label/NIXROOT"; + fsType = "ext4"; + }; - fileSystems."/boot" = - { device = "/dev/disk/by-label/NIXBOOT"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; + fileSystems."/boot" = { + device = "/dev/disk/by-label/NIXBOOT"; + fsType = "vfat"; + options = [ + "fmask=0022" + "dmask=0022" + ]; + }; swapDevices = [ ]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} \ No newline at end of file +} diff --git a/hosts/zorua/services/docker.nix b/hosts/zorua/services/docker.nix index 3f0b4b0d..afc7b393 100644 --- a/hosts/zorua/services/docker.nix +++ b/hosts/zorua/services/docker.nix @@ -1,12 +1,4 @@ -{ - lib, - config, - self, - ... -}: -let -in -{ +_: { virtualisation.docker = { enable = true; daemon.settings = { diff --git a/nixosModules/homes/skye/common.nix b/nixosModules/homes/skye/common.nix index 4ca28686..c7645e30 100644 --- a/nixosModules/homes/skye/common.nix +++ b/nixosModules/homes/skye/common.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ pkgs, ... }: { home = { diff --git a/nixosModules/homes/skye/desktop.nix b/nixosModules/homes/skye/desktop.nix index c92e31ef..7d39b307 100644 --- a/nixosModules/homes/skye/desktop.nix +++ b/nixosModules/homes/skye/desktop.nix @@ -8,7 +8,7 @@ programs.noctalia-shell = { enable = true; }; - + programs.zsh.oh-my-zsh = { theme = "lesbianheart"; custom = "${pkgs.writeTextDir "themes/lesbianheart.zsh-theme" '' diff --git a/nixosModules/skye/base/backup.nix b/nixosModules/skye/base/backup.nix index a3c23e14..206ce49e 100644 --- a/nixosModules/skye/base/backup.nix +++ b/nixosModules/skye/base/backup.nix @@ -1,5 +1,4 @@ { - pkgs, lib, config, ... diff --git a/nixosModules/skye/base/default.nix b/nixosModules/skye/base/default.nix index 17bb8c4b..d68c33e3 100644 --- a/nixosModules/skye/base/default.nix +++ b/nixosModules/skye/base/default.nix @@ -1,7 +1,5 @@ { pkgs, - config, - lib, inputs, hostType, ... diff --git a/nixosModules/skye/base/desktop/desktop.nix b/nixosModules/skye/base/desktop/desktop.nix index 43fd00fd..05262441 100644 --- a/nixosModules/skye/base/desktop/desktop.nix +++ b/nixosModules/skye/base/desktop/desktop.nix @@ -1,13 +1,11 @@ { - lib, pkgs, - config, ... }: { #services.desktopManager.plasma6.enable = true; #services.displayManager.plasma-login-manager.enable = true; - + # services.xserver.enable = true; # services.xrdp.enable = true; # services.xrdp.defaultWindowManager = "niri-session"; @@ -22,7 +20,10 @@ enable = true; extraPortals = [ pkgs.xdg-desktop-portal-gnome ]; config.niri = { - default = [ "gnome" "gtk" ]; + default = [ + "gnome" + "gtk" + ]; }; }; diff --git a/nixosModules/skye/base/desktop/packages.nix b/nixosModules/skye/base/desktop/packages.nix index c65f98d2..92b337df 100644 --- a/nixosModules/skye/base/desktop/packages.nix +++ b/nixosModules/skye/base/desktop/packages.nix @@ -1,5 +1,4 @@ { - lib, pkgs, config, ... @@ -14,11 +13,9 @@ enable = true; enableVirtualCamera = true; - package = ( - pkgs.obs-studio.override { - cudaSupport = true; - } - ); + package = pkgs.obs-studio.override { + cudaSupport = true; + }; plugins = with pkgs.obs-studio-plugins; [ obs-pipewire-audio-capture diff --git a/nixosModules/skye/base/metrics.nix b/nixosModules/skye/base/metrics.nix index d8dca574..f5173a0e 100644 --- a/nixosModules/skye/base/metrics.nix +++ b/nixosModules/skye/base/metrics.nix @@ -1,6 +1,5 @@ { lib, - pkgs, config, ... }: diff --git a/nixosModules/skye/base/misc/tailscale-serve.nix b/nixosModules/skye/base/misc/tailscale-serve.nix index 3fa7c8ab..f3410f90 100644 --- a/nixosModules/skye/base/misc/tailscale-serve.nix +++ b/nixosModules/skye/base/misc/tailscale-serve.nix @@ -1,7 +1,6 @@ { config, lib, - pkgs, ... }: @@ -45,7 +44,7 @@ in Restart = "on-failure"; RestartSec = "3s"; StartLimitIntervalSec = 0; - + ExecStart = "${lib.getExe config.services.tailscale.package} serve --service=svc:${instance.tailscaleService} --bg ${toString instance.port}"; }; } diff --git a/nixosModules/skye/base/networking.nix b/nixosModules/skye/base/networking.nix index e59e65a7..570ff469 100644 --- a/nixosModules/skye/base/networking.nix +++ b/nixosModules/skye/base/networking.nix @@ -1,8 +1,4 @@ -{ - pkgs, - lib, - ... -}: +_: { networking.networkmanager.enable = true; diff --git a/nixosModules/skye/base/packages.nix b/nixosModules/skye/base/packages.nix index b5b9c634..06b5bd37 100644 --- a/nixosModules/skye/base/packages.nix +++ b/nixosModules/skye/base/packages.nix @@ -1,7 +1,5 @@ { pkgs, - lib, - inputs, ... }: diff --git a/nixosModules/skye/base/secrets/secrets.nix b/nixosModules/skye/base/secrets/secrets.nix index 0a3621bd..99de601e 100644 --- a/nixosModules/skye/base/secrets/secrets.nix +++ b/nixosModules/skye/base/secrets/secrets.nix @@ -1,11 +1,7 @@ let inherit (import { }) lib; - readSshKeyFile = ( - file: - with builtins; - with lib; - filter (line: isString line && hasPrefix "ssh-" line) (split "\n" (readFile file)) - ); + readSshKeyFile = + file: with builtins; with lib; filter (line: isString line && hasPrefix "ssh-" line) (split "\n" (readFile file)); keys = { users.skye = readSshKeyFile ../sshKeys/skye; systems = { diff --git a/nixosModules/skye/base/users.nix b/nixosModules/skye/base/users.nix index b321d807..58bdf561 100644 --- a/nixosModules/skye/base/users.nix +++ b/nixosModules/skye/base/users.nix @@ -17,7 +17,7 @@ "dialout" "i2c" ]; - openssh.authorizedKeys.keys = (lib.splitString "\n" (lib.readFile sshKeys/skye)); + openssh.authorizedKeys.keys = lib.splitString "\n" (lib.readFile sshKeys/skye); shell = pkgs.zsh; }; diff --git a/packages/lastfm-rpc/Cargo.toml b/packages/lastfm-rpc/Cargo.toml index bbcff6d6..2e24bdc2 100644 --- a/packages/lastfm-rpc/Cargo.toml +++ b/packages/lastfm-rpc/Cargo.toml @@ -9,4 +9,4 @@ reqwest = { version = "0.11", features = ["json"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" discord-rich-presence = "0.2" -dotenvy = "0.15" \ No newline at end of file +dotenvy = "0.15" -- 2.51.2 From b2a0b301003967cab9bc68719791fd5d3c629d7d Mon Sep 17 00:00:00 2001 From: dish Date: Sat, 20 Jun 2026 13:39:53 -0400 Subject: [PATCH 9/9] [skye] more fixes --- hosts/dialga/services/grafana.nix | 4 ---- hosts/dialga/services/victorialogs.nix | 4 ---- hosts/dialga/services/victoriametrics.nix | 4 ---- hosts/ninetails/default.nix | 1 - hosts/skye-hosts.nix | 3 +++ nixosModules/default.nix | 1 + nixosModules/homes/skye/desktop.nix | 20 +++++++++---------- nixosModules/skye/base/default.nix | 1 - nixosModules/skye/base/server/checks.nix | 2 +- .../default.nix} | 0 10 files changed, 15 insertions(+), 25 deletions(-) rename nixosModules/skye/{base/misc/tailscale-serve.nix => tailscale-serve/default.nix} (100%) diff --git a/hosts/dialga/services/grafana.nix b/hosts/dialga/services/grafana.nix index 46f995ca..ec9db9a0 100644 --- a/hosts/dialga/services/grafana.nix +++ b/hosts/dialga/services/grafana.nix @@ -2,10 +2,6 @@ ... }: { - imports = [ - ../../../nixosModules/base/misc/tailscale-serve.nix - ]; - services.grafana = { enable = true; settings = { diff --git a/hosts/dialga/services/victorialogs.nix b/hosts/dialga/services/victorialogs.nix index feaf0803..ecf80edd 100644 --- a/hosts/dialga/services/victorialogs.nix +++ b/hosts/dialga/services/victorialogs.nix @@ -2,10 +2,6 @@ ... }: { - imports = [ - ../../../nixosModules/base/misc/tailscale-serve.nix - ]; - services.victorialogs = { enable = true; }; diff --git a/hosts/dialga/services/victoriametrics.nix b/hosts/dialga/services/victoriametrics.nix index 2a3808d7..8643bc6b 100644 --- a/hosts/dialga/services/victoriametrics.nix +++ b/hosts/dialga/services/victoriametrics.nix @@ -2,10 +2,6 @@ ... }: { - imports = [ - ../../../nixosModules/base/misc/tailscale-serve.nix - ]; - services.victoriametrics = { enable = true; }; diff --git a/hosts/ninetails/default.nix b/hosts/ninetails/default.nix index 57a8f247..c9bd8a17 100644 --- a/hosts/ninetails/default.nix +++ b/hosts/ninetails/default.nix @@ -59,7 +59,6 @@ services.hardware.openrgb = { enable = true; - package = pkgs.callPackage ../../pkgs/openrgb/default.nix { }; motherboard = "amd"; }; programs.steam = { diff --git a/hosts/skye-hosts.nix b/hosts/skye-hosts.nix index 37bf9fc7..5a5df893 100644 --- a/hosts/skye-hosts.nix +++ b/hosts/skye-hosts.nix @@ -5,6 +5,9 @@ deployable = true; tags = [ "skye" ]; specialArgs.hostType = "server"; + modules = [ + inputs.self.nixosModules.skye-tailscale-serve + ]; }; mareep = { deployable = true; diff --git a/nixosModules/default.nix b/nixosModules/default.nix index 62b453ca..bc6df772 100644 --- a/nixosModules/default.nix +++ b/nixosModules/default.nix @@ -11,6 +11,7 @@ _: { skye-base = import ./skye/base; skye-server-checks = import ./skye/server-checks; skye-lastfm-rpc = import ./skye/lastfm-rpc; + skye-tailscale-serve = import ./skye/tailscale-serve; # Programs chromium = import ./programs/chromium; diff --git a/nixosModules/homes/skye/desktop.nix b/nixosModules/homes/skye/desktop.nix index 7d39b307..2271405c 100644 --- a/nixosModules/homes/skye/desktop.nix +++ b/nixosModules/homes/skye/desktop.nix @@ -5,7 +5,7 @@ inputs.noctalia.homeModules.default ]; - programs.noctalia-shell = { + programs.noctalia = { enable = true; }; @@ -22,7 +22,7 @@ }; xdg.configFile."niri/config.kdl".text = '' - spawn-at-startup "noctalia-shell" + spawn-at-startup "noctalia" spawn-at-startup "playerctld" spawn-at-startup "cider-2" spawn-at-startup "discord" @@ -83,7 +83,7 @@ } layer-rule { - match namespace="^noctalia-(background|launcher-overlay|dock)-.*$" + match namespace="^noctalia-(background|panel|dock)-.*$" background-effect { xray false } @@ -97,9 +97,9 @@ binds { Ctrl+Alt+T { spawn "kitty"; } - Mod+Space { spawn "noctalia-shell" "ipc" "call" "launcher" "toggle"; } - Mod+V { spawn "noctalia-shell" "ipc" "call" "launcher" "clipboard"; } - Mod+L { spawn "noctalia-shell" "ipc" "call" "lockScreen" "lock"; } + Mod+Space { spawn "noctalia" "msg" "panel-toggle" "launcher"; } + Mod+V { spawn "noctalia" "msg" "panel-toggle" "clipboard"; } + Mod+L { spawn "noctalia" "msg" "session" "lock"; } Mod+Alt+O repeat=false { toggle-overview; } @@ -118,10 +118,10 @@ Mod+Shift+S repeat=false { screenshot; } Print repeat=false { screenshot-screen; } - XF86AudioRaiseVolume allow-when-locked=true { spawn "sh" "-c" "playerctl status 2>/dev/null | grep -q Playing && playerctl volume 0.05+ || noctalia-shell ipc call volume increase"; } - XF86AudioLowerVolume allow-when-locked=true { spawn "sh" "-c" "playerctl status 2>/dev/null | grep -q Playing && playerctl volume 0.05- || noctalia-shell ipc call volume decrease"; } - XF86AudioMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput"; } - XF86AudioMicMute allow-when-locked=true { spawn "noctalia-shell" "ipc" "call" "volume" "muteInput"; } + XF86AudioRaiseVolume allow-when-locked=true { spawn "sh" "-c" "playerctl status 2>/dev/null | grep -q Playing && playerctl volume 0.05+ || noctalia msg volume-up"; } + XF86AudioLowerVolume allow-when-locked=true { spawn "sh" "-c" "playerctl status 2>/dev/null | grep -q Playing && playerctl volume 0.05- || noctalia msg volume-down"; } + XF86AudioMute allow-when-locked=true { spawn "noctalia" "msg" "volume-mute"; } + XF86AudioMicMute allow-when-locked=true { spawn "noctalia" "msg" "mic-mute"; } XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause"; } XF86AudioNext allow-when-locked=true { spawn "playerctl" "next"; } XF86AudioPrev allow-when-locked=true { spawn "playerctl" "previous"; } diff --git a/nixosModules/skye/base/default.nix b/nixosModules/skye/base/default.nix index d68c33e3..7f2032f9 100644 --- a/nixosModules/skye/base/default.nix +++ b/nixosModules/skye/base/default.nix @@ -42,7 +42,6 @@ nixpkgs.flake = inputs.nixpkgs; }; }; - nixpkgs.config.allowUnfree = true; services.openssh = { enable = true; diff --git a/nixosModules/skye/base/server/checks.nix b/nixosModules/skye/base/server/checks.nix index 975660aa..30f9a1bd 100644 --- a/nixosModules/skye/base/server/checks.nix +++ b/nixosModules/skye/base/server/checks.nix @@ -8,7 +8,7 @@ imports = [ self.nixosModules.skye-server-checks ]; age.secrets = { - "server-checks-env".file = ./secrets/server-checks/${config.networking.hostName}.age; + "server-checks-env".file = ../secrets/server-checks/${config.networking.hostName}.age; }; serverChecks = [ diff --git a/nixosModules/skye/base/misc/tailscale-serve.nix b/nixosModules/skye/tailscale-serve/default.nix similarity index 100% rename from nixosModules/skye/base/misc/tailscale-serve.nix rename to nixosModules/skye/tailscale-serve/default.nix