diff --git a/derivations/hola-proxy.nix b/derivations/hola-proxy.nix
new file mode 100644
index 0000000..0a2c36a
--- /dev/null
+++ b/derivations/hola-proxy.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+ pname = "hola-proxy";
+ version = "1.13.3";
+
+ src = fetchFromGitHub {
+ owner = "Snawoot";
+ repo = "hola-proxy";
+ rev = "v${version}";
+ hash = "sha256-T4kXwseOspXtu6jMCytCqROwQP1XjKFT2ejfAA36HUY=";
+ };
+
+ vendorHash = "sha256-1mQzeopJzzXV4cCHu30QelCIz6NivOImpiCTpGnAtzY=";
+
+ ldflags = [ "-s" "-w" ];
+
+ meta = with lib; {
+ description = "Standalone Hola proxy client";
+ homepage = "https://github.com/Snawoot/hola-proxy";
+ license = licenses.mit;
+ maintainers = with maintainers; [ ];
+ mainProgram = "hola-proxy";
+ };
+}
diff --git a/derivations/hyprdrop/Cargo.lock b/derivations/hyprdrop/Cargo.lock
new file mode 100644
index 0000000..0281061
--- /dev/null
+++ b/derivations/hyprdrop/Cargo.lock
@@ -0,0 +1,722 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "serde",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "colored"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8"
+dependencies = [
+ "lazy_static",
+ "windows-sys",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hyprdrop"
+version = "0.2.0"
+dependencies = [
+ "hyprland",
+ "log",
+ "simple_logger",
+ "structopt",
+ "time",
+]
+
+[[package]]
+name = "hyprland"
+version = "0.4.0-alpha.2"
+source = "git+https://github.com/hyprland-community/hyprland-rs.git?tag=0.4.0-alpha.2#11f8a9fc85c03a889b1b53d750ccef6149cbed9a"
+dependencies = [
+ "ahash",
+ "derive_more",
+ "hyprland-macros",
+ "num-traits",
+ "once_cell",
+ "paste",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "tokio",
+]
+
+[[package]]
+name = "hyprland-macros"
+version = "0.4.0-alpha.2"
+source = "git+https://github.com/hyprland-community/hyprland-rs.git?tag=0.4.0-alpha.2#11f8a9fc85c03a889b1b53d750ccef6149cbed9a"
+dependencies = [
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.153"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "ryu"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+
+[[package]]
+name = "serde"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.196"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.113"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "simple_logger"
+version = "4.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e7e46c8c90251d47d08b28b8a419ffb4aede0f87c2eea95e17d1d5bacbf3ef1"
+dependencies = [
+ "colored",
+ "log",
+ "time",
+ "windows-sys",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "time"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe80ced77cbfb4cb91a94bf72b378b4b6791a0d9b7f09d0be747d1bdff4e68bd"
+dependencies = [
+ "deranged",
+ "itoa",
+ "libc",
+ "num-conv",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774"
+dependencies = [
+ "num-conv",
+ "time-core",
+]
+
+[[package]]
+name = "tokio"
+version = "1.35.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[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_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[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_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[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_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
diff --git a/derivations/hyprdrop/hyprdrop.nix b/derivations/hyprdrop/hyprdrop.nix
new file mode 100644
index 0000000..5676ec4
--- /dev/null
+++ b/derivations/hyprdrop/hyprdrop.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+ pname = "hyprdrop";
+ version = "unstable-2024-05-12";
+
+ src = fetchFromGitHub {
+ owner = "kjlo";
+ repo = "hyprdrop";
+ rev = "d21001d1589e0f4d3b809a6b6efa18c411421c30";
+ hash = "sha256-t/sxLtpPFHOWTSivMdh+7C8Ba4bBObZgjisgSkRcOpc=";
+ };
+
+ cargoLock = {
+ lockFile = ./Cargo.lock;
+ outputHashes = {
+ "hyprland-0.4.0-alpha.2" = "sha256-+AkB1ZltdqPn2ZRzU5FIQVWwuvm2TWhnNJnnG/oUIfI=";
+ };
+ };
+
+ meta = with lib; {
+ description = "Rust implementation of Hdrop";
+ homepage = "https://github.com/kjlo/hyprdrop";
+ license = licenses.mit;
+ maintainers = with maintainers; [ ];
+ mainProgram = "hyprdrop";
+ };
+}
diff --git a/derivations/opera-proxy.nix b/derivations/opera-proxy.nix
new file mode 100644
index 0000000..1d993a0
--- /dev/null
+++ b/derivations/opera-proxy.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+ pname = "opera-proxy";
+ version = "1.2.5";
+
+ src = fetchFromGitHub {
+ owner = "Snawoot";
+ repo = "opera-proxy";
+ rev = "v${version}";
+ hash = "sha256-ZTebhXmyUPONxcOR7+1qQzGKcGlGfOu2OToFaCgSPCQ=";
+ };
+
+ vendorHash = "sha256-IlkMeihvGwuvswOFC8+8ZJCCVWbFnLH51X7Z+VDnZx4=";
+
+ ldflags = [ "-s" "-w" ];
+
+ meta = with lib; {
+ description = "Standalone client for proxies of Opera VPN";
+ homepage = "https://github.com/Snawoot/opera-proxy";
+ license = licenses.mit;
+ maintainers = with maintainers; [ ];
+ mainProgram = "opera-proxy";
+ };
+}
diff --git a/derivations/windscribe-proxy.nix b/derivations/windscribe-proxy.nix
new file mode 100644
index 0000000..f97aeb1
--- /dev/null
+++ b/derivations/windscribe-proxy.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+ pname = "windscribe-proxy";
+ version = "1.4.0";
+
+ src = fetchFromGitHub {
+ owner = "Snawoot";
+ repo = "windscribe-proxy";
+ rev = "v${version}";
+ hash = "sha256-bVW/cdG1/5WiVZD5yXdkoVqUlYas/CkTD82WANne9gA=";
+ };
+
+ vendorHash = "sha256-K1ca//RdFGbNLrLDHsjaCcChHREO/dvOWg7/auRbFhs=";
+
+ ldflags = [ "-s" "-w" ];
+
+ meta = with lib; {
+ description = "Standalone client for proxies of Windscribe browser extension";
+ homepage = "https://github.com/Snawoot/windscribe-proxy";
+ license = licenses.mit;
+ maintainers = with maintainers; [ ];
+ mainProgram = "windscribe-proxy";
+ };
+}
diff --git a/flake.lock b/flake.lock
index 089b528..edb744b 100644
--- a/flake.lock
+++ b/flake.lock
@@ -5,14 +5,15 @@
"flake-parts": "flake-parts",
"nixpkgs": [
"nixpkgs"
- ]
+ ],
+ "systems": "systems"
},
"locked": {
- "lastModified": 1713259062,
- "narHash": "sha256-WTO84hUL8IlNuHDK2yOCeJ38EewFzGt5E0kzBjNWxa8=",
+ "lastModified": 1717576207,
+ "narHash": "sha256-LU6d1xX7jN1zt10YU7Oym07MtzVfziSmUEznGFdbuaw=",
"owner": "anyrun-org",
"repo": "anyrun",
- "rev": "f9d30e34fa4ccb2797c6becec37e8bcff6585d39",
+ "rev": "7aabad8d5bb7d1bffae903ce86427b888ab824b4",
"type": "github"
},
"original": {
@@ -70,11 +71,11 @@
]
},
"locked": {
- "lastModified": 1716035127,
- "narHash": "sha256-qqxeTHGDvCcer1QEGlu81MmRfbkNHBqCD9Ue7S2yHBE=",
+ "lastModified": 1717590482,
+ "narHash": "sha256-TbKrGVHIXTdanGtit/NghkQ4qeCdP7W775VKmPm0tnM=",
"owner": "nix-community",
"repo": "flake-firefox-nightly",
- "rev": "ee25f2df1923145abee8aa8096f9b45065b535fb",
+ "rev": "e7deec85c929653bc1aa034a3c2f0a588614e10b",
"type": "github"
},
"original": {
@@ -85,11 +86,11 @@
},
"flake-compat": {
"locked": {
- "lastModified": 1688025799,
- "narHash": "sha256-ktpB4dRtnksm9F5WawoIkEneh1nrEvuxb5lJFt1iOyw=",
+ "lastModified": 1717312683,
+ "narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=",
"owner": "nix-community",
"repo": "flake-compat",
- "rev": "8bf105319d44f6b9f0d764efa4fdef9f1cc9ba1c",
+ "rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea",
"type": "github"
},
"original": {
@@ -136,11 +137,11 @@
]
},
"locked": {
- "lastModified": 1696343447,
- "narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=",
+ "lastModified": 1717285511,
+ "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=",
"owner": "hercules-ci",
"repo": "flake-parts",
- "rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4",
+ "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8",
"type": "github"
},
"original": {
@@ -157,11 +158,11 @@
]
},
"locked": {
- "lastModified": 1714641030,
- "narHash": "sha256-yzcRNDoyVP7+SCNX0wmuDju1NUCt8Dz9+lyUXEI0dbI=",
+ "lastModified": 1715865404,
+ "narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
"owner": "hercules-ci",
"repo": "flake-parts",
- "rev": "e5d10a24b66c3ea8f150e47dfdb0416ab7c3390e",
+ "rev": "8dc45382d5206bd292f9c2768b8058a8fd8311d9",
"type": "github"
},
"original": {
@@ -170,24 +171,9 @@
"type": "github"
}
},
- "flake-root": {
- "locked": {
- "lastModified": 1713493429,
- "narHash": "sha256-ztz8JQkI08tjKnsTpfLqzWoKFQF4JGu2LRz8bkdnYUk=",
- "owner": "srid",
- "repo": "flake-root",
- "rev": "bc748b93b86ee76e2032eecda33440ceb2532fcd",
- "type": "github"
- },
- "original": {
- "owner": "srid",
- "repo": "flake-root",
- "type": "github"
- }
- },
"flake-utils": {
"inputs": {
- "systems": "systems"
+ "systems": "systems_2"
},
"locked": {
"lastModified": 1710146030,
@@ -205,7 +191,7 @@
},
"flake-utils_2": {
"inputs": {
- "systems": "systems_3"
+ "systems": "systems_4"
},
"locked": {
"lastModified": 1701680307,
@@ -223,7 +209,7 @@
},
"flake-utils_3": {
"inputs": {
- "systems": "systems_4"
+ "systems": "systems_5"
},
"locked": {
"lastModified": 1710146030,
@@ -240,24 +226,6 @@
}
},
"flake-utils_4": {
- "inputs": {
- "systems": "systems_5"
- },
- "locked": {
- "lastModified": 1710146030,
- "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
- "flake-utils_5": {
"inputs": {
"systems": "systems_6"
},
@@ -275,11 +243,38 @@
"type": "github"
}
},
+ "git-hooks": {
+ "inputs": {
+ "flake-compat": "flake-compat_3",
+ "gitignore": "gitignore",
+ "nixpkgs": [
+ "nixvim",
+ "nixpkgs"
+ ],
+ "nixpkgs-stable": [
+ "nixvim",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1716213921,
+ "narHash": "sha256-xrsYFST8ij4QWaV6HEokCUNIZLjjLP1bYC60K8XiBVA=",
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "rev": "0e8fcc54b842ad8428c9e705cb5994eaf05c26a0",
+ "type": "github"
+ },
+ "original": {
+ "owner": "cachix",
+ "repo": "git-hooks.nix",
+ "type": "github"
+ }
+ },
"gitignore": {
"inputs": {
"nixpkgs": [
"nixvim",
- "pre-commit-hooks",
+ "git-hooks",
"nixpkgs"
]
},
@@ -304,11 +299,11 @@
]
},
"locked": {
- "lastModified": 1715486357,
- "narHash": "sha256-4pRuzsHZOW5W4CsXI9uhKtiJeQSUoe1d2M9mWU98HC4=",
+ "lastModified": 1717525419,
+ "narHash": "sha256-5z2422pzWnPXHgq2ms8lcCfttM0dz+hg+x1pCcNkAws=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "44677a1c96810a8e8c4ffaeaad10c842402647c1",
+ "rev": "a7117efb3725e6197dd95424136f79147aa35e5b",
"type": "github"
},
"original": {
@@ -325,11 +320,11 @@
]
},
"locked": {
- "lastModified": 1715486357,
- "narHash": "sha256-4pRuzsHZOW5W4CsXI9uhKtiJeQSUoe1d2M9mWU98HC4=",
+ "lastModified": 1717052710,
+ "narHash": "sha256-LRhOxzXmOza5SymhOgnEzA8EAQp+94kkeUYWKKpLJ/U=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "44677a1c96810a8e8c4ffaeaad10c842402647c1",
+ "rev": "29c69d9a466e41d46fd3a7a9d0591ef9c113c2ae",
"type": "github"
},
"original": {
@@ -354,11 +349,11 @@
]
},
"locked": {
- "lastModified": 1715791817,
- "narHash": "sha256-J069Uhv/gCMFLX1dSh2f+9ZTM09r1Nv3oUfocCnWKow=",
+ "lastModified": 1716576411,
+ "narHash": "sha256-FIN1wMoyePBTtibCbaeJaoKNLuAYIGwLCWAYC1DJanw=",
"owner": "hyprwm",
"repo": "hyprcursor",
- "rev": "7c3aa03dffb53921e583ade3d4ae3f487e390e7e",
+ "rev": "57298fc4f13c807e50ada2c986a3114b7fc2e621",
"type": "github"
},
"original": {
@@ -373,15 +368,15 @@
"hyprlang": "hyprlang",
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": "nixpkgs",
- "systems": "systems_2",
+ "systems": "systems_3",
"xdph": "xdph"
},
"locked": {
- "lastModified": 1716316196,
- "narHash": "sha256-ynu+Ii1PTtnz4YdjP2CJbnxaie9aETNAds9lwDzeQus=",
+ "lastModified": 1717576964,
+ "narHash": "sha256-+iTjt2ujiWJZW7J36s/CzMiF1CEOi20TTK+Uq53tlxk=",
"ref": "refs/heads/main",
- "rev": "e419ef1873de01b0762f7f1a411994170a4d8cab",
- "revCount": 4723,
+ "rev": "fefa55d406e38eda481ce75178cef3e43298762d",
+ "revCount": 4763,
"submodules": true,
"type": "git",
"url": "https://github.com/hyprwm/Hyprland"
@@ -399,11 +394,11 @@
]
},
"locked": {
- "lastModified": 1715621965,
- "narHash": "sha256-S5Wzi3hhFOiCaeZqmx3zBdrv8KzaEafD5hCfY8ixz0A=",
+ "lastModified": 1716228712,
+ "narHash": "sha256-y+LOXuSRMfkR2Vfwl5K2NVrszi1h5MJpML+msLnVS8U=",
"owner": "hyprwm",
"repo": "contrib",
- "rev": "46d2206858657d439792926958f52b037534de49",
+ "rev": "33b38358559054d316eb605ccb733980dfa7dc63",
"type": "github"
},
"original": {
@@ -451,11 +446,11 @@
]
},
"locked": {
- "lastModified": 1715791527,
- "narHash": "sha256-HhQ4zvGHrRjR63ltySSeg+x+0jb0lepiutWdnFhLRoo=",
+ "lastModified": 1716473782,
+ "narHash": "sha256-+qLn4lsHU6iL3+HTo1gTQ1tWzet8K9h+IfVemzEQZj8=",
"owner": "hyprwm",
"repo": "hyprlang",
- "rev": "969cb076e5b76f2e823aeca1937a3e1f159812ee",
+ "rev": "87d5d984109c839482b88b4795db073eb9ed446f",
"type": "github"
},
"original": {
@@ -495,11 +490,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
- "lastModified": 1716725378,
- "narHash": "sha256-bNTVDAVBLFSSTU+q54cJnntmFKBi+F/D8sSqlZwBGiM=",
+ "lastModified": 1717330178,
+ "narHash": "sha256-rRZjmC3xcPpHTJHnEy3T99O86Ecjao5YhakzaoNiRcs=",
"owner": "nix-community",
"repo": "lib-aggregate",
- "rev": "dbc9130fe1455e0f6ee4d8f5f799f9be551f866b",
+ "rev": "64d43e2bbc6eab8d1cbdfba96d90a71e15a847d7",
"type": "github"
},
"original": {
@@ -532,11 +527,11 @@
]
},
"locked": {
- "lastModified": 1713946171,
- "narHash": "sha256-lc75rgRQLdp4Dzogv5cfqOg6qYc5Rp83oedF2t0kDp8=",
+ "lastModified": 1716993688,
+ "narHash": "sha256-vo5k2wQekfeoq/2aleQkBN41dQiQHNTniZeVONWiWLs=",
"owner": "lnl7",
"repo": "nix-darwin",
- "rev": "230a197063de9287128e2c68a7a4b0cd7d0b50a7",
+ "rev": "c0d5b8c54d6828516c97f6be9f2d00c63a363df4",
"type": "github"
},
"original": {
@@ -547,11 +542,11 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1716137900,
- "narHash": "sha256-sowPU+tLQv8GlqtVtsXioTKeaQvlMz/pefcdwg8MvfM=",
+ "lastModified": 1716330097,
+ "narHash": "sha256-8BO3B7e3BiyIDsaKA0tY8O88rClYRTjvAp66y+VBUeU=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "6c0b7a92c30122196a761b440ac0d46d3d9954f1",
+ "rev": "5710852ba686cc1fd0d3b8e22b3117d43ba374c2",
"type": "github"
},
"original": {
@@ -563,11 +558,11 @@
},
"nixpkgs-lib": {
"locked": {
- "lastModified": 1716684580,
- "narHash": "sha256-sIbMJWJr4hl2PWd9/iWlh89QfVzBn1NJ3u5RjeZADuM=",
+ "lastModified": 1717289404,
+ "narHash": "sha256-4q6ZO3BqHgdd3Aacb/xiQXB4g9TQKpQg/praTpD9vbI=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
- "rev": "d0d27192931680482081aa1c38389da2af84a651",
+ "rev": "e090cb30ae82f4b4461aafdb808847c6c97b08c2",
"type": "github"
},
"original": {
@@ -578,11 +573,11 @@
},
"nixpkgs-stable": {
"locked": {
- "lastModified": 1715668745,
- "narHash": "sha256-xp62OkRkbUDNUc6VSqH02jB0FbOS+MsfMb7wL1RJOfA=",
+ "lastModified": 1717530100,
+ "narHash": "sha256-b4Dn+PnrZoVZ/BoR9JN2fTxXxplJrAsdSUIePf4Cacs=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "9ddcaffecdf098822d944d4147dd8da30b4e6843",
+ "rev": "a2e1d0414259a144ebdc048408a807e69e0565af",
"type": "github"
},
"original": {
@@ -610,11 +605,11 @@
},
"nixpkgs-unstable": {
"locked": {
- "lastModified": 1715534503,
- "narHash": "sha256-5ZSVkFadZbFP1THataCaSf0JH2cAH3S29hU9rrxTEqk=",
+ "lastModified": 1717196966,
+ "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "2057814051972fa1453ddfb0d98badbea9b83c06",
+ "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8",
"type": "github"
},
"original": {
@@ -658,11 +653,11 @@
},
"nixpkgs_2": {
"locked": {
- "lastModified": 1715534503,
- "narHash": "sha256-5ZSVkFadZbFP1THataCaSf0JH2cAH3S29hU9rrxTEqk=",
+ "lastModified": 1717602782,
+ "narHash": "sha256-pL9jeus5QpX5R+9rsp3hhZ+uplVHscNJh8n8VpqscM0=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "2057814051972fa1453ddfb0d98badbea9b83c06",
+ "rev": "e8057b67ebf307f01bdcc8fba94d94f75039d1f6",
"type": "github"
},
"original": {
@@ -674,11 +669,11 @@
},
"nixpkgs_3": {
"locked": {
- "lastModified": 1715447595,
- "narHash": "sha256-VsVAUQOj/cS1LCOmMjAGeRksXIAdPnFIjCQ0XLkCsT0=",
+ "lastModified": 1716769173,
+ "narHash": "sha256-7EXDb5WBw+d004Agt+JHC/Oyh/KTUglOaQ4MNjBbo5w=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "062ca2a9370a27a35c524dc82d540e6e9824b652",
+ "rev": "9ca3f649614213b2aaf5f1e16ec06952fe4c2632",
"type": "github"
},
"original": {
@@ -741,19 +736,18 @@
"devshell": "devshell",
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts_2",
- "flake-root": "flake-root",
+ "git-hooks": "git-hooks",
"home-manager": "home-manager_2",
"nix-darwin": "nix-darwin",
"nixpkgs": "nixpkgs_3",
- "pre-commit-hooks": "pre-commit-hooks",
"treefmt-nix": "treefmt-nix"
},
"locked": {
- "lastModified": 1715758881,
- "narHash": "sha256-0W9F2F9YnqMZPBrz68VrTALlhTyBBeuuh/xD8C0PEVg=",
+ "lastModified": 1717574948,
+ "narHash": "sha256-8C2S1WWC4ty1LePzFWp+D6re/pggCJj9tWslddJ/wUw=",
"owner": "nix-community",
"repo": "nixvim",
- "rev": "e035d22b64a9bd5f469664cbe42ea798d7c16b2e",
+ "rev": "a54ee8ad64c91b587c3460126bad25a441c1118c",
"type": "github"
},
"original": {
@@ -762,34 +756,6 @@
"type": "github"
}
},
- "pre-commit-hooks": {
- "inputs": {
- "flake-compat": "flake-compat_3",
- "flake-utils": "flake-utils_3",
- "gitignore": "gitignore",
- "nixpkgs": [
- "nixvim",
- "nixpkgs"
- ],
- "nixpkgs-stable": [
- "nixvim",
- "nixpkgs"
- ]
- },
- "locked": {
- "lastModified": 1714478972,
- "narHash": "sha256-q//cgb52vv81uOuwz1LaXElp3XAe1TqrABXODAEF6Sk=",
- "owner": "cachix",
- "repo": "pre-commit-hooks.nix",
- "rev": "2849da033884f54822af194400f8dff435ada242",
- "type": "github"
- },
- "original": {
- "owner": "cachix",
- "repo": "pre-commit-hooks.nix",
- "type": "github"
- }
- },
"root": {
"inputs": {
"anyrun": "anyrun",
@@ -813,11 +779,11 @@
"sops-nix": "sops-nix"
},
"locked": {
- "lastModified": 1716081545,
- "narHash": "sha256-ypSvXHziqSlX/dafHm0SWS2TiaAEoswWr/0LrzPC8Xc=",
+ "lastModified": 1717693242,
+ "narHash": "sha256-yRPXkZ6Uc4M585Hq1hxNtSBlgGnzDEVFcs2+xccDcXs=",
"ref": "refs/heads/main",
- "rev": "33beddf3a50f2a15266f847e298b50ce54077ef8",
- "revCount": 33,
+ "rev": "dc80291b90317d2b88665392858c4191ebb6f6ad",
+ "revCount": 36,
"type": "git",
"url": "ssh://git@github.com/deltathetawastaken/secrets.git"
},
@@ -828,7 +794,7 @@
},
"shwewo": {
"inputs": {
- "flake-utils": "flake-utils_4",
+ "flake-utils": "flake-utils_3",
"nixpkgs": [
"nixpkgs"
],
@@ -871,21 +837,6 @@
}
},
"systems": {
- "locked": {
- "lastModified": 1681028828,
- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
- "owner": "nix-systems",
- "repo": "default",
- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
- "type": "github"
- },
- "original": {
- "owner": "nix-systems",
- "repo": "default",
- "type": "github"
- }
- },
- "systems_2": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
@@ -900,7 +851,7 @@
"type": "github"
}
},
- "systems_3": {
+ "systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@@ -915,6 +866,21 @@
"type": "github"
}
},
+ "systems_3": {
+ "locked": {
+ "lastModified": 1689347949,
+ "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default-linux",
+ "type": "github"
+ }
+ },
"systems_4": {
"locked": {
"lastModified": 1681028828,
@@ -962,7 +928,7 @@
},
"tdesktop": {
"inputs": {
- "flake-utils": "flake-utils_5",
+ "flake-utils": "flake-utils_4",
"nixpkgs": "nixpkgs_6"
},
"locked": {
@@ -987,11 +953,11 @@
]
},
"locked": {
- "lastModified": 1714058656,
- "narHash": "sha256-Qv4RBm4LKuO4fNOfx9wl40W2rBbv5u5m+whxRYUMiaA=",
+ "lastModified": 1715940852,
+ "narHash": "sha256-wJqHMg/K6X3JGAE9YLM0LsuKrKb4XiBeVaoeMNlReZg=",
"owner": "numtide",
"repo": "treefmt-nix",
- "rev": "c6aaf729f34a36c445618580a9f95a48f5e4e03f",
+ "rev": "2fba33a182602b9d49f0b2440513e5ee091d838b",
"type": "github"
},
"original": {
diff --git a/home/home.nix b/home/home.nix
index f470b26..3dee4e3 100644
--- a/home/home.nix
+++ b/home/home.nix
@@ -7,6 +7,7 @@
./theme.nix
../pkgs/helix
../pkgs/yazi
+ ../pkgs/waybar
];
#services.blueman-applet.enable = true;
@@ -15,7 +16,6 @@
enable = true;
package = pkgs.vscode;
extensions = with pkgs.vscode-extensions; [
- matklad.rust-analyzer
jnoortheen.nix-ide
b4dm4n.vscode-nixpkgs-fmt
usernamehw.errorlens
diff --git a/hosts/dlaptop/hardware.nix b/hosts/dlaptop/hardware.nix
index 84485bc..3c1e374 100644
--- a/hosts/dlaptop/hardware.nix
+++ b/hosts/dlaptop/hardware.nix
@@ -2,7 +2,6 @@
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ stable, unstable, config, lib, pkgs, modulesPath, ... }:
-
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
@@ -29,24 +28,49 @@
pkgs.wireless-regdb
];
+ console = {
+ earlySetup = true;
+ font = "${pkgs.spleen}/share/consolefonts/spleen-16x32.psfu";
+ packages = with pkgs; [ spleen ];
+ keyMap = "us";
+ };
+ boot.initrd = {
+ preDeviceCommands = ''
+ cat << "EOF"
+ ____
+ /\ \
+ / \ \
+ / \ \
+ / \ \
+ / /\ \ \
+ / / \ \ \
+ / / /\ \ \
+ / / / \ \ \
+ / / /____\___\ \
+ / / / \
+/ / /________________\
+\ / /
+ \/_____________________/
+EOF
+echo kernel: $(uname -r | tr '[:upper:]' '[:lower:]')
+ '';
+ };
+ # boot.initrd = {
+ # preDeviceCommands = ''/bin/initrd.sh'';
+ # secrets."/bin/initrd.sh" = ./initrd.sh;
+ # };
+
# 5 GHZ wifi
boot.extraModprobeConfig = ''
- options cfg80211 ieee80211_regdom="RU"
+ options cfg80211 ieee80211_regdom="RU"
'';
-
+ services.zfs.autoScrub.enable = true;
services.fstrim = {
enable = true;
interval = "weekly";
};
- # nix.gc = {
- # automatic = true;
- # dates = "weekly";
- # options = "--delete-older-than 7d";
- # # randomizedDelaySec = "30m";
- # };
-
programs.nh = {
enable = true;
clean.enable = true;
@@ -62,25 +86,44 @@
"initcall_blacklist=acpi_cpufreq_init"
"nowatchdog"
"amd_pstate.shared_mem=1"
+ "zfs.zfs_arc_max=19327352832"
+ "resume=UUID=a2ff20bd-56f3-4c83-b1b4-933ba0c82f36"
];
boot.kernelModules = [ "amd-pstate" "acpi_call" "amdgpu" "kvm-amd" "vfat" "nls_cp437" "nls_iso8859-1" ];
- boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" "vfat" "nls_cp437" "nls_iso8859-1" ];
+ boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "usbhid" "sd_mod" "vfat" "nls_cp437" "nls_iso8859-1" ];
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.efi.efiSysMountPoint = "/boot";
boot.initrd.kernelModules = [ ];
- boot.kernelPackages = unstable.linuxPackages_xanmod_latest;
- boot.extraModulePackages = with config.boot.kernelPackages; [ acpi_call cpupower ];
+ boot.extraModulePackages = with config.boot.kernelPackages; [ usbip.out ];
+ boot.kernelPackages =
+ with builtins; with lib; let
+ latestCompatibleVersion = config.boot.zfs.package.latestCompatibleLinuxPackages.kernel.version;
+ xanPackages = filterAttrs (name: packages: hasSuffix "_xanmod" name && (tryEval packages).success) pkgs.linuxKernel.packages;
+ compatiblePackages = filter (packages: compareVersions packages.kernel.version latestCompatibleVersion <= 0) (attrValues xanPackages);
+ orderedCompatiblePackages = sort (x: y: compareVersions x.kernel.version y.kernel.version > 0) compatiblePackages;
+ selectedKernelPackage = head orderedCompatiblePackages;
+ in selectedKernelPackage // {
+ extraPackages = with selectedKernelPackage; [ acpi_call ];
+ };
- fileSystems."/" = {
- device = "/dev/disk/by-uuid/6b2d5c46-92de-42d0-a272-16b7ef7f30af";
- fsType = "ext4";
- };
+ boot.plymouth.enable = false;
+
+ boot.supportedFilesystems = [ "zfs" ];
+
+ boot.initrd.extraUtilsCommands = ''
+ copy_bin_and_libs ${pkgs.multipath-tools}/bin/kpartx
+ '';
boot.initrd.luks = {
- yubikeySupport = true;
- devices."cryptroot" = {
+ yubikeySupport = false;
+ devices."cryptroot0" = {
device = "/dev/nvme0n1p2";
+ postOpenCommands = "
+ kpartx -u /dev/mapper/cryptroot0
+ kpartx -u /dev/mapper/cryptroot0p1
+ kpartx -u /dev/mapper/cryptroot0p2
+ ";
yubikey = {
slot = 2;
gracePeriod = 7;
@@ -96,15 +139,26 @@
};
};
+ sops.age.keyFile = lib.mkForce "/root/keys.txt";
+
fileSystems."/boot" = {
- device = "/dev/disk/by-uuid/6770-34DC";
+ device = "/dev/disk/by-uuid/4E0B-6C2F";
fsType = "vfat";
};
- swapDevices = [{
- device = "/var/lib/swapfile";
- size = 32 * 1024;
- }];
+ fileSystems."/" =
+ { device = "zroot/root";
+ fsType = "zfs";
+ };
+
+ fileSystems."/home" =
+ { device = "zroot/home";
+ fsType = "zfs";
+ };
+
+ swapDevices =
+ [ { device = "/dev/disk/by-uuid/a2ff20bd-56f3-4c83-b1b4-933ba0c82f36"; }
+ ];
hardware.opengl = {
enable = true;
@@ -118,6 +172,7 @@
};
networking.useDHCP = lib.mkDefault true;
+ networking.hostId = "11C0FFEE";
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
diff --git a/hosts/dlaptop/system.nix b/hosts/dlaptop/system.nix
index adf1254..ee84223 100644
--- a/hosts/dlaptop/system.nix
+++ b/hosts/dlaptop/system.nix
@@ -21,10 +21,16 @@
time.timeZone = "Europe/Moscow";
i18n.defaultLocale = "en_GB.UTF-8";
+ i18n.extraLocaleSettings = {
+ LANGUAGE = "en_GB.UTF-8";
+ LC_ALL = "en_GB.UTF-8";
+ LC_TIME = "en_GB.UTF-8";
+ };
networking = {
hostName = "dlaptop";
- nameservers = [ "100.92.15.128" "fd7a:115c:a1e0::b21c:f80" ];
+ nameservers = [ "1.1.1.1" ];
+ #nameservers = [ "100.92.15.128" "fd7a:115c:a1e0::b21c:f80" ];
networkmanager.dns = "none";
networkmanager.enable = true;
useDHCP = lib.mkDefault true;
@@ -156,6 +162,8 @@
};
environment.systemPackages = with pkgs; [
+ multipath-tools #ZFS in LUKS mount
+
openvpn
any-nix-shell
comma
diff --git a/hosts/generic.nix b/hosts/generic.nix
index d162e43..a091d73 100644
--- a/hosts/generic.nix
+++ b/hosts/generic.nix
@@ -129,7 +129,7 @@ in {
",s" = ", -s";
};
promptInit = ''
- # set TERM "xterm-256color"
+ set TERM "xterm-256color"
set fish_greeting
export STARSHIP_CONFIG=/etc/starship.toml
${pkgs.zoxide}/bin/zoxide init fish | source
diff --git a/pkgs/apps.nix b/pkgs/apps.nix
index 07948ee..11bf784 100644
--- a/pkgs/apps.nix
+++ b/pkgs/apps.nix
@@ -40,6 +40,8 @@ in {
wl-clipboard-x11
#(callPackage ../derivations/nu_plugin_dns.nix { })
(fishPlugins.callPackage ../derivations/fish/fish-functions.nix { })
+ (callPackage ../derivations/opera-proxy.nix { })
+ (callPackage ../derivations/hyprdrop/hyprdrop.nix { })
xorg.xwininfo
jq
dropbox
@@ -74,11 +76,11 @@ in {
lexend # font from google (non-mono)
ibm-plex
fira-code
- # iosevka-comfy.comfy
+ iosevka-comfy.comfy
# iosevka-comfy.comfy-duo
- # iosevka-comfy.comfy-wide
- # iosevka-comfy.comfy-wide-duo
- iosevka-comfy.comfy-motion-duo
+ iosevka-comfy.comfy-wide
+ iosevka-comfy.comfy-wide-duo
+ # iosevka-comfy.comfy-motion-duo
jamesdsp easyeffects
nmap
wget
@@ -94,7 +96,8 @@ in {
# '';
#})
shwewo.audiorelay
- shwewo.tdesktop
+ # shwewo.tdesktop
+ # _64gram
(pkgs.writeScriptBin "tlp" ''/run/wrappers/bin/sudo ${pkgs.tlp}/bin/tlp $@'')
prismlauncher
stable.teleport_12 #work
@@ -104,6 +107,7 @@ in {
atool #unarchive
open-interpreter
overrides.diosevka
+ # iosevka-bin
# overrides.iosevka-comfy
overrides.vesktop
# overrides.input-font
diff --git a/pkgs/gnome.nix b/pkgs/gnome.nix
index 31d3df8..7c420fb 100644
--- a/pkgs/gnome.nix
+++ b/pkgs/gnome.nix
@@ -40,9 +40,9 @@ in
programs.dconf.profiles.user.databases = [
{
settings = {
- #"org/gnome/mutter" = {
- # experimental-features = [ "scale-monitor-framebuffer" ];
- #};
+ "org/gnome/mutter" = {
+ experimental-features = [ "scale-monitor-framebuffer" ];
+ };
"org/gnome/settings-daemon/plugins/media-keys" = {
custom-keybindings = [
"/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
diff --git a/pkgs/hyprland/hypr/default.nix b/pkgs/hyprland/hypr/default.nix
index c831cf6..b1e5b06 100644
--- a/pkgs/hyprland/hypr/default.nix
+++ b/pkgs/hyprland/hypr/default.nix
@@ -10,7 +10,7 @@
programs.hyprland.package = inputs.hyprland.packages.${pkgs.system}.hyprland;
users.users.delta.packages = with pkgs; [
swww
- stable.waybar
+ waybar
stable.swaynotificationcenter
cliphist
fzf
diff --git a/pkgs/hyprland/hypr/hyprland.conf b/pkgs/hyprland/hypr/hyprland.conf
index eca1924..be7d1b0 100644
--- a/pkgs/hyprland/hypr/hyprland.conf
+++ b/pkgs/hyprland/hypr/hyprland.conf
@@ -7,7 +7,7 @@
# monitor=eDP-1,2944x1840@60,auto,1.333333
# monitor=eDP-1,preferred,auto,1.6
-monitor=eDP-1,preferred,auto,1.333333
+monitor=eDP-1,preferred,auto,1.6
#monitor=eDP-1,preferred,auto,1.066667
#source = ~/.config/hypr/monitors.conf
@@ -33,7 +33,7 @@ exec-once = sh -c "sleep 2 && swww clear"
#exec-once = mpvpaper '*' -o "video-scale-y=1.1 --gpu-context=wayland --vo=gpu --hwdec=vaapi-copy" videowork/bgloop.webm
# exec-once = gtk-launch autostart
exec-once =
-exec-once = waybar -c ~/.config/waybar/config-offline.jsonc
+exec-once = waybar
#exec-once = ags
exec-once = nm-applet
@@ -327,7 +327,11 @@ windowrulev2 = fakefullscreen,class:^(org.telegram.desktop|telegramdesktop)$,tit
# windowrulev2 = center,initialTitle:^(Media viewer)$
# windowrulev2 = fakefullscreen,initialTitle:^(Media viewer)$
# windowrulev2 = noshadow,initialTitle:^(Media viewer)$
-
+windowrulev2 = float, class:^(kitty_hyprdrop)$
+windowrulev2 = center 1, class:^(kitty_hyprdrop)$
+windowrulev2 = size 100% 98%, class:^(kitty_hyprdrop)$
+windowrulev2 = noanim,class:^(kitty_hyprdrop)$
+windowrule = noblur,^(kitty_hyprdrop)$
#layerrules
@@ -355,7 +359,8 @@ bind = $mainMod, U, togglesplit
#bind = $mainMod, RETURN, exec, footclient #open the terminal
bind = $mainMod, RETURN, exec, footclient
bind = $mainMod, Q, exec, footclient
-bind = ALT, RETURN, exec, sh -c "/home/delta/.config/hypr/hdrop -g '30' -h '98' -p t -f kitty --class kitty_drop"
+# bind = ALT, RETURN, exec, sh -c "/home/delta/.config/hypr/hdrop -g '30' -h '98' -p t -f kitty --class kitty_drop"
+bind = ALT, RETURN, exec, hyprdrop kitty -i kitty_hyprdrop
bind = ALT, X, exec, sh -c "/home/delta/.config/hypr/hdrop -g '30' -h '60' -f 'keepassxc_lite' --class org.keepassxc.KeePassXC"
# bind = ALT, T, exec, sh -c "QT_QPA_PLATFORM=xcb /home/delta/.config/hypr/hdrop -h '60' -g '30' -f 'telegram-desktop' --class TelegramDesktop"
#bind = $mainMod SHIFT, RETURN, exec, alacritty #open the terminal
@@ -525,5 +530,5 @@ binde = $mainMod SHIFT CTRL, L, moveactive, 30 0
# Source a file (multi-file configs)
# source = ~/.config/hypr/myColors.conf
-source = ~/.config/hypr/media-binds.conf
-source = ~/.config/hypr/env_var.conf
+###source = ~/.config/hypr/media-binds.conf
+###source = ~/.config/hypr/env_var.conf
diff --git a/pkgs/socks.nix b/pkgs/socks.nix
index 368bc33..a19ccc0 100644
--- a/pkgs/socks.nix
+++ b/pkgs/socks.nix
@@ -1,15 +1,15 @@
{ pkgs, lib, inputs, ... }:
let
nixpkgs2305 = import inputs.nixpkgs2305 { system = "${pkgs.system}"; config = { allowUnfree = true; }; };
- socksBuilder = attrs:
+ socksBuilder = { name, script, autostart ? true, socketConfig ? null }:
{
- inherit (attrs) name;
+ inherit name;
value = {
enable = true;
after = [ "novpn.service" "network-online.target" ];
wants = [ "novpn.service" "network-online.target" ];
bindsTo = [ "novpn.service" ];
- wantedBy = [ "multi-user.target" ];
+ wantedBy = if autostart then [ "multi-user.target" ] else [ ];
serviceConfig = {
Restart = "on-failure";
@@ -20,7 +20,7 @@ let
Group = "socks";
};
- script = attrs.script;
+ script = script;
preStart = "while true; do ip addr show dev novpn1 | grep -q 'inet' && break; sleep 1; done";
path = with pkgs; [
@@ -28,18 +28,62 @@ let
shadowsocks-libev
shadowsocks-v2ray-plugin
sing-box
- wireproxy
+ wireproxy
gost
+ (callPackage ../derivations/opera-proxy.nix { })
];
};
};
socksed = [ # IP of the proxies is 192.168.150.2
{ name = "singbox-aus"; script = "sing-box run -c /run/secrets/singbox-aus";} # port 4000
- { name = "socks-warp"; script = "wireproxy -c /etc/wireguard/cproxy.conf"; } # port 3333
+ { name = "socks-warp" ; script = "wireproxy -c /etc/wireguzard/cproxy.conf"; } # port 3333
{ name = "socks-novpn"; script = "gost -L socks5://192.168.150.2:3334"; } # port 3334
+ { name = "opera-socks";
+ script = "sing-box run -c ${opera-singboxcfg} & opera-proxy -bootstrap-dns https://1.1.1.1/dns-query -bind-address 192.168.150.2:18088";
+ autostart = false;
+ socketConfig = { port = "3335"; idleStopSec = "180s"; };
+ } # port 3335
];
+ socketsServiceGenerator = { name, port, idleStopSec }: {
+ inherit name;
+ value = {
+ description = "Socket activation for ${name}";
+ wantedBy = [ "sockets.target" ];
+
+ socketConfig = {
+ ListenStream = "${port}";
+ IdleStopSec = idleStopSec;
+ };
+ };
+ };
+
+ opera-singboxcfg = pkgs.writeText "opera-singboxcfg" ''
+ {
+ "log": {
+ "disabled": true,
+ "output": "stdout"
+ },
+ "inbounds": [
+ {
+ "type": "socks",
+ "listen": "192.168.150.2",
+ "listen_port": 3335,
+ "sniff": true,
+ "sniff_override_destination": true
+ }
+ ],
+ "outbounds": [
+ {
+ "type": "http",
+ "server": "192.168.150.2",
+ "server_port": 18088
+ }
+ ]
+ }
+ '';
+
delete_rules = pkgs.writeScriptBin "delete_rules" ''
#!${pkgs.bash}/bin/bash
default_gateway=$(cat /etc/netns/novpn/default_gateway)
@@ -117,6 +161,11 @@ let
ip netns del novpn
rm -rf /var/run/netns/novpn/
'';
+
+ socketsBuilder = socketsServiceGenerator;
+ withSockets = lib.filter (s: lib.hasAttr "socketConfig" s) socksed;
+
+ enabledSocksed = lib.filter (s: !lib.hasAttr "autostart" s || s.autostart) socksed;
in {
users.users.socks = {
group = "socks";
@@ -124,13 +173,20 @@ in {
};
users.groups.socks = {};
+
+ systemd.sockets = builtins.listToAttrs (map (s: socketsBuilder {
+ name = s.name;
+ port = s.socketConfig.port;
+ idleStopSec = s.socketConfig.idleStopSec;
+ }) withSockets);
+
systemd.services = builtins.listToAttrs (map socksBuilder socksed) // {
novpn = {
enable = true;
description = "novpn namespace";
after = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
- wants = map (s: "${s.name}.service") socksed ++ [ "network-online.target"];
+ wants = map (s: "${s.name}.service") enabledSocksed ++ [ "network-online.target"];
serviceConfig = {
Restart = "on-failure";
diff --git a/pkgs/waybar/config-offline.jsonc b/pkgs/waybar/config-offline.jsonc
new file mode 100644
index 0000000..38308f4
--- /dev/null
+++ b/pkgs/waybar/config-offline.jsonc
@@ -0,0 +1,189 @@
+{
+ "layer": "top",
+ "position": "top",
+ "mod": "dock",
+ "exclusive": true,
+ "passthrough": false,
+ "gtk-layer-shell": true,
+ "height": 20,
+ "modules-left": [
+ "custom/power_btn",
+ "custom/launch_apps",
+ "idle_inhibitor",
+ "hyprland/workspaces",
+ "hyprland/window"
+ ],
+ "modules-center": [
+ "clock"
+ ],
+ "modules-right": [
+ //"custom/updates",
+ "cpu",
+ "pulseaudio",
+ "custom/bluetoothcharge",
+ "pulseaudio#microphone",
+ "backlight",
+ "tray",
+ //"temperature",
+ "custom/power_profile",
+ "battery",
+ "hyprland/language"
+ //"custom/myutils",
+ //"custom/weather"
+ //"custom/light_dark"
+ ],
+
+ "include": [
+ "~/.config/waybar/mesu.jsonc"
+ // "~/.config/utils/waybar/conf/asus-rog.jsonc",
+ // "~/.config/utils/waybar/conf/utils-util.jsonc"
+ ],
+
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ },
+ "timeout": 180,
+ "tooltip": true
+ },
+
+ "custom/launch_apps": {
+ "format": " ",
+ "on-click": "sh -c '(nwg-drawer -term foot)'",
+ "tooltip": false
+ },
+
+ "hyprland/language": {
+ "interval": 30,
+ "format": "{}",
+ "format-en": "🇬🇧",
+ "format-ru": "🇷🇺",
+ "on-click": "hyprctl switchxkblayout at-translated-set-2-keyboard next",
+ "signal": 8
+ },
+
+ "hyprland/window": {
+ "max-length": 200,
+ "separate-outputs": true
+ },
+
+ "custom/power_btn": {
+ "format": "",
+ "on-click": "sh -c '(wlogout --protocol layer-shell)'",
+ "tooltip": false
+ },
+
+ "custom/lock_screen": {
+ "format": "",
+ "on-click": "sh -c '(swaylock)'",
+ "tooltip": false
+ },
+
+ "hyprland/workspaces": {
+ "disable-scroll": true,
+ "all-outputs": true,
+ "on-scroll-up": "hyprctl dispatch workspace e+1",
+ "on-scroll-down": "hyprctl dispatch workspace e-1",
+ "on-click": "activate"
+ },
+
+ "cpu": {
+ "states": {
+ "high": 80,
+ "med": 40,
+ "low": 15
+ },
+ "interval": 10,
+ "format": " {usage}%",
+ "max-length": 10,
+ "format-alt-click": "click-right",
+ "format-alt": " ",
+ "on-click": "footclient --fullscreen --title=btop -o colors.alpha=0.3 sh -c 'btop'"
+ },
+
+ "battery": {
+ "states": {
+ "good": 80,
+ "warning": 30,
+ "critical": 20
+ },
+ "format": "{icon} {capacity}%",
+ "format-charging": " {capacity}%",
+ "format-plugged": " {capacity}%",
+ "format-alt-click": "click-right",
+ "format-alt": "{icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", "", "", ""]
+ },
+
+ "pulseaudio": {
+ "format": "{icon}",
+ "format-muted": "",
+ "on-click": "~/.config/utils/waybar/scripts/volume --toggle",
+ "on-click-right": "pavucontrol",
+ "on-scroll-up": "~/.config/utils/waybar/scripts/volume --inc",
+ "on-scroll-down": "~/.config/utils/waybar/scripts/volume --dec",
+ "scroll-step": 5,
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ },
+ "format-alt-click": "click-middle",
+ "format-alt": "{icon} {volume}%",
+ "tooltip": true,
+ "tooltip-format": "{volume}%"
+ },
+
+ "pulseaudio#microphone": {
+ "format": "{format_source}",
+ "format-source": "",
+ "format-source-muted": "",
+ "on-click": "~/.config/utils/waybar/scripts/volume --toggle-mic",
+ "on-click-right": "pavucontrol",
+ "on-scroll-up": "~/.config/utils/waybar/scripts/volume --mic-inc",
+ "on-scroll-down": "~/.config/utils/waybar/scripts/volume --mic-dec",
+ "scroll-step": 5,
+ "format-alt-click": "click-middle",
+ "format-alt": " {volume}%",
+ "tooltip": true,
+ "tooltip-format": " {volume}%"
+ },
+
+ "backlight": {
+ "device": "intel_backlight",
+ "format": "{icon}",
+ "format-alt-click": "click-right",
+ "format-alt": "{icon} {percent}%",
+ "format-icons": ["", "", ""],
+ "on-scroll-up": "~/.config/utils/waybar/scripts/brightness --inc",
+ "on-scroll-down": "~/.config/utils/waybar/scripts/brightness --dec"
+ },
+
+ "tray": {
+ "icon-size": 16,
+ "spacing": 10
+ },
+
+ "custom/updates": {
+ "format": "{}",
+ "exec": "~/.config/utils/waybar/scripts/update-sys",
+ "on-click": "~/.config/utils/waybar/scripts/update-sys update",
+ "interval": 3600,
+ "tooltip": true
+ },
+
+ "custom/bluetoothcharge": {
+ "format": "{}",
+ "tooltip-format": "{}",
+ "exec": "~/.config/utils/waybar/scripts/bluetoothcharge",
+ "on-click": "~/.config/utils/waybar/scripts/bluetoothcharge",
+ "interval": 60,
+ "tooltip": true
+ }
+}
diff --git a/pkgs/waybar/config-online.jsonc b/pkgs/waybar/config-online.jsonc
new file mode 100644
index 0000000..a7bf53c
--- /dev/null
+++ b/pkgs/waybar/config-online.jsonc
@@ -0,0 +1,188 @@
+{
+ "layer": "top",
+ "position": "top",
+ "mod": "dock",
+ "exclusive": true,
+ "passthrough": false,
+ "gtk-layer-shell": true,
+ "height": 20,
+ "modules-left": [
+ "custom/power_btn",
+ "custom/launch_apps",
+ "idle_inhibitor",
+ "hyprland/workspaces",
+ "hyprland/window"
+ ],
+ "modules-center": [
+ "clock"
+ ],
+ "modules-right": [
+ "custom/updates",
+ "cpu",
+ "pulseaudio",
+ "custom/bluetoothcharge",
+ "pulseaudio#microphone",
+ "backlight",
+ "tray",
+ //"temperature",
+ "custom/power_profile",
+ "battery",
+ "hyprland/language",
+ //"custom/myhyprv",
+ "custom/weather"
+ //"custom/light_dark"
+ ],
+
+ "include": [
+ "~/.config/HyprV/waybar/conf/mesu.jsonc",
+ // "~/.config/HyprV/waybar/conf/asus-rog.jsonc",
+ "~/.config/HyprV/waybar/conf/hyprv-util.jsonc"
+ ],
+
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ },
+ "tooltip": true
+ },
+
+ "custom/launch_apps": {
+ "format": " ",
+ "on-click": "sh -c '(nwg-drawer -term wezterm)'",
+ "tooltip": false
+ },
+
+ "hyprland/language": {
+ "interval": 30,
+ "format": "{}",
+ "format-en": "🇬🇧",
+ "format-ru": "🇷🇺",
+ "on-click": "hyprctl switchxkblayout at-translated-set-2-keyboard next",
+ "signal": 8
+ },
+
+ "hyprland/window": {
+ "max-length": 200,
+ "separate-outputs": true
+ },
+
+ "custom/power_btn": {
+ "format": "",
+ "on-click": "sh -c '(sleep 0.5s; wlogout --protocol layer-shell)'",
+ "tooltip": false
+ },
+
+ "custom/lock_screen": {
+ "format": "",
+ "on-click": "sh -c '(sleep 0.5s; swaylock)'",
+ "tooltip": false
+ },
+
+ "hyprland/workspaces": {
+ "disable-scroll": true,
+ "all-outputs": true,
+ "on-scroll-up": "hyprctl dispatch workspace e+1",
+ "on-scroll-down": "hyprctl dispatch workspace e-1",
+ "on-click": "activate"
+ },
+
+ "cpu": {
+ "states": {
+ "high": 80,
+ "med": 40,
+ "low": 15
+ },
+ "interval": 10,
+ "format": " {usage}%",
+ "max-length": 10,
+ "format-alt-click": "click-right",
+ "format-alt": " ",
+ "on-click": "footclient --fullscreen --title=btop -o colors.alpha=0.3 sh -c 'btop'"
+ },
+
+ "battery": {
+ "states": {
+ "good": 80,
+ "warning": 30,
+ "critical": 20
+ },
+ "format": "{icon} {capacity}%",
+ "format-charging": " {capacity}%",
+ "format-plugged": " {capacity}%",
+ "format-alt-click": "click-right",
+ "format-alt": "{icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", "", "", ""]
+ },
+
+ "pulseaudio": {
+ "format": "{icon}",
+ "format-muted": "",
+ "on-click": "~/.config/HyprV/waybar/scripts/volume --toggle",
+ "on-click-right": "pavucontrol",
+ "on-scroll-up": "~/.config/HyprV/waybar/scripts/volume --inc",
+ "on-scroll-down": "~/.config/HyprV/waybar/scripts/volume --dec",
+ "scroll-step": 5,
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ },
+ "format-alt-click": "click-middle",
+ "format-alt": "{icon} {volume}%",
+ "tooltip": true,
+ "tooltip-format": "{volume}%"
+ },
+
+ "pulseaudio#microphone": {
+ "format": "{format_source}",
+ "format-source": "",
+ "format-source-muted": "",
+ "on-click": "~/.config/HyprV/waybar/scripts/volume --toggle-mic",
+ "on-click-right": "pavucontrol",
+ "on-scroll-up": "~/.config/HyprV/waybar/scripts/volume --mic-inc",
+ "on-scroll-down": "~/.config/HyprV/waybar/scripts/volume --mic-dec",
+ "scroll-step": 5,
+ "format-alt-click": "click-middle",
+ "format-alt": " {volume}%",
+ "tooltip": true,
+ "tooltip-format": " {volume}%"
+ },
+
+ "backlight": {
+ "device": "intel_backlight",
+ "format": "{icon}",
+ "format-alt-click": "click-right",
+ "format-alt": "{icon} {percent}%",
+ "format-icons": ["", "", ""],
+ "on-scroll-up": "~/.config/HyprV/waybar/scripts/brightness --inc",
+ "on-scroll-down": "~/.config/HyprV/waybar/scripts/brightness --dec"
+ },
+
+ "tray": {
+ "icon-size": 16,
+ "spacing": 10
+ },
+
+ "custom/updates": {
+ "format": "{}",
+ "exec": "~/.config/HyprV/waybar/scripts/update-sys",
+ "on-click": "~/.config/HyprV/waybar/scripts/update-sys update",
+ "interval": 3600,
+ "tooltip": true
+ },
+
+ "custom/bluetoothcharge": {
+ "format": "{}",
+ "tooltip-format": "{}",
+ "exec": "~/.config/HyprV/waybar/scripts/bluetoothcharge",
+ "on-click": "~/.config/HyprV/waybar/scripts/bluetoothcharge",
+ "interval": 60,
+ "tooltip": true
+ }
+}
diff --git a/pkgs/waybar/config-sway.jsonc b/pkgs/waybar/config-sway.jsonc
new file mode 100644
index 0000000..6ae9225
--- /dev/null
+++ b/pkgs/waybar/config-sway.jsonc
@@ -0,0 +1,159 @@
+{
+ "layer": "top",
+ "position": "top",
+ "mod": "dock",
+ "exclusive": true,
+ "passthrough": false,
+ "gtk-layer-shell": true,
+ "height": 20,
+ "modules-left": [
+ "custom/power_btn",
+ "custom/launch_apps",
+ "idle_inhibitor",
+ "sway/workspaces",
+ "sway/mode"
+ ],
+ "modules-center": [
+ "clock"
+ ],
+ "modules-right": [
+ "custom/updates",
+ "cpu",
+ "pulseaudio",
+ "pulseaudio#microphone",
+ "backlight",
+ "tray",
+ "temperature",
+ "custom/power_profile",
+ "battery",
+ "sway/language",
+ "custom/weather"
+ ],
+
+ "include": [
+ "~/.config/HyprV/waybar/conf/mesu.jsonc",
+ // "~/.config/HyprV/waybar/conf/asus-rog.jsonc",
+ "~/.config/HyprV/waybar/conf/hyprv-util.jsonc"
+ ],
+
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ },
+ "tooltip": true
+ },
+
+ "custom/launch_apps": {
+ "format": " ",
+ "on-click": "sh -c '(sleep 0.5s; pkill nwg-drawer || nwg-drawer -term wezterm)' & disown",
+ "tooltip": false
+ },
+
+ "sway/language": {
+ "interval": 30,
+ "format": " {}",
+ "format-en": "🇬🇧",
+ "format-ru": "🇷🇺",
+ "on-click": "hyprctl switchxkblayout at-translated-set-2-keyboard next",
+ "signal": 8
+ },
+
+
+ "custom/power_btn": {
+ "format": "",
+ "on-click": "sh -c '(sleep 0.5s; wlogout --protocol layer-shell)' & disown",
+ "tooltip": false
+ },
+
+ "custom/lock_screen": {
+ "format": "",
+ "on-click": "sh -c '(sleep 0.5s; swaylock)' & disown",
+ "tooltip": false
+ },
+
+ "cpu": {
+ "interval": 10,
+ "format": "",
+ "max-length": 10,
+ "format-alt-click": "click-right",
+ "format-alt": " {usage}%",
+ "on-click": "kitty --start-as=fullscreen --title btop sh -c 'btop'"
+ },
+
+ "battery": {
+ "states": {
+ "good": 80,
+ "warning": 30,
+ "critical": 20
+ },
+ "format": "{icon}",
+ "format-charging": " {capacity}%",
+ "format-plugged": " {capacity}%",
+ "format-alt-click": "click-right",
+ "format-alt": "{icon} {capacity}%",
+ "format-icons": ["", "", "", "", "", "", "", "", "", "", ""]
+ },
+
+ "pulseaudio": {
+ "format": "{icon}",
+ "format-muted": "",
+ "on-click": "~/.config/HyprV/waybar/scripts/volume --toggle",
+ "on-click-right": "pavucontrol",
+ "on-scroll-up": "~/.config/HyprV/waybar/scripts/volume --inc",
+ "on-scroll-down": "~/.config/HyprV/waybar/scripts/volume --dec",
+ "scroll-step": 5,
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ },
+ "format-alt-click": "click-middle",
+ "format-alt": "{icon} {volume}%",
+ "tooltip": true,
+ "tooltip-format": "{icon} {volume}%"
+ },
+
+ "pulseaudio#microphone": {
+ "format": "{format_source}",
+ "format-source": "",
+ "format-source-muted": "",
+ "on-click": "~/.config/HyprV/waybar/scripts/volume --toggle-mic",
+ "on-click-right": "pavucontrol",
+ "on-scroll-up": "~/.config/HyprV/waybar/scripts/volume --mic-inc",
+ "on-scroll-down": "~/.config/HyprV/waybar/scripts/volume --mic-dec",
+ "scroll-step": 5,
+ "format-alt-click": "click-middle",
+ "format-alt": " {volume}%",
+ "tooltip": true,
+ "tooltip-format": " {volume}%"
+ },
+
+ "backlight": {
+ "device": "intel_backlight",
+ "format": "{icon}",
+ "format-alt-click": "click-right",
+ "format-alt": "{icon} {percent}%",
+ "format-icons": ["", "", ""],
+ "on-scroll-up": "~/.config/HyprV/waybar/scripts/brightness --inc",
+ "on-scroll-down": "~/.config/HyprV/waybar/scripts/brightness --dec"
+ },
+
+ "tray": {
+ "icon-size": 16,
+ "spacing": 10
+ },
+
+ "custom/updates": {
+ "format": "{}",
+ "exec": "~/.config/HyprV/waybar/scripts/update-sys",
+ "on-click": "~/.config/HyprV/waybar/scripts/update-sys update",
+ "interval": 300,
+ "tooltip": true
+ }
+}
diff --git a/pkgs/waybar/config.jsonc b/pkgs/waybar/config.jsonc
new file mode 120000
index 0000000..61f95fc
--- /dev/null
+++ b/pkgs/waybar/config.jsonc
@@ -0,0 +1 @@
+config-offline.jsonc
\ No newline at end of file
diff --git a/pkgs/waybar/default.nix b/pkgs/waybar/default.nix
new file mode 100644
index 0000000..ec7fcd9
--- /dev/null
+++ b/pkgs/waybar/default.nix
@@ -0,0 +1,8 @@
+{ pkgs, lib, ... }:
+
+{
+ home.file.".config/waybar/config.jsonc".text = builtins.readFile ./config-offline.jsonc;
+ home.file.".config/waybar/style.css".text = builtins.readFile ./style.css;
+ home.file.".config/waybar/mesu.jsonc".text = builtins.readFile ./mesu.jsonc;
+
+}
\ No newline at end of file
diff --git a/pkgs/waybar/mesu.jsonc b/pkgs/waybar/mesu.jsonc
new file mode 100644
index 0000000..eb9ea42
--- /dev/null
+++ b/pkgs/waybar/mesu.jsonc
@@ -0,0 +1,38 @@
+{
+ "clock": {
+ "format": "{:%H:%M}",
+ "format-alt": "{:%a %d %R}",
+ "tooltip-format": "{calendar}",
+ "calendar": {
+ "mode" : "month",
+ "mode-mon-col" : 3,
+ "weeks-pos" : "right",
+ "on-scroll" : 1,
+ "on-click-right": "mode",
+ "format": {
+ "months": "{}",
+ "days": "{}",
+ "weeks": "{}",
+ "weekdays": "{}",
+ "today": "{}"
+ }
+ },
+ "actions": {
+ "on-click-right": "mode",
+ "on-click-forward": "tz_up",
+ "on-click-backward": "tz_down",
+ "on-scroll-up": "shift_up",
+ "on-scroll-down": "shift_down"
+ }
+},
+
+"temperature": {
+ "thermal-zone": 1,
+ "format": "",
+ "format-alt-click": "click-right",
+ "format-alt": " {temperatureC}°C",
+ "critical-threshold": 70,
+ "format-critical": " {temperatureC}°C",
+ "on-click": "kitty --start-as=fullscreen --title btop sh -c 'btop'"
+}
+}
diff --git a/pkgs/waybar/style.css b/pkgs/waybar/style.css
new file mode 100644
index 0000000..12b41a2
--- /dev/null
+++ b/pkgs/waybar/style.css
@@ -0,0 +1,161 @@
+* {
+ border: none;
+ border-radius: 0;
+ font-family: "IosevkaDiosevka";
+ font-weight: bold;
+ font-size: 16px;
+ min-height: 0;
+}
+
+#language {
+ font-size: 20px;
+ font-family: "Twemoji";
+}
+
+window#waybar {
+ background: rgba(21, 18, 27, 0);
+ color: #f6f7fc;
+}
+
+tooltip {
+ font-family: "Iosevka\ Fixed\ Heavy\ Extended";
+ background: #000000;
+ opacity: 1;
+ border-radius: 10px;
+ border-width: 2px;
+ border-style: solid;
+ border-color: #11111b;
+}
+
+tooltip label{
+ color: #cdd6f4;
+}
+
+#workspaces button {
+ padding: 5px;
+ color: #f6f7fc;
+ margin-right: 5px;
+}
+
+#workspaces button.active {
+ color: #000000;
+ background: #a6e3a1;
+ border-radius: 10px;
+}
+
+#workspaces button:hover {
+ background: #11111b;
+ color: #cdd6f4;
+ border-radius: 10px;
+}
+
+#custom-launch_wofi,
+#custom-launch_firefox,
+#custom-launch_thunderbird,
+#custom-launch_thunar,
+#custom-launch_kitty,
+#custom-lock_screen,
+#custom-light_dark,
+#custom-power_btn,
+#custom-power_profile,
+#custom-weather,
+#custom-myhyprv,
+#window,
+#cpu,
+#disk,
+#custom-updates,
+#memory,
+#clock,
+#battery,
+#pulseaudio,
+#network,
+#tray,
+#temperature,
+#workspaces,
+#idle_inhibitor,
+#backlight {
+ background: rgba(21, 18, 27, 0);
+ opacity: 1;
+ padding: 0px 8px;
+ margin: 0px 3px;
+ border: 0px;
+}
+
+#temperature.critical {
+ color: #e92d4d;
+}
+
+#workspaces {
+ padding-right: 0px;
+ padding-left: 5px;
+}
+
+#window {
+ border-radius: 10px;
+ margin-left: 0px;
+ margin-right: 0px;
+}
+
+#custom-launch_firefox,
+#custom-launch_thunderbird,
+#custom-launch_thunar,
+#custom-launch_wofi,
+#custom-launch_kitty,
+#custom-weather {
+ margin-left: 0px;
+ border-right: 0px;
+ font-size: 24px;
+ margin-right: 20px;
+}
+
+#custom-launch_firefox,
+#custom-launch_kitty {
+ font-size: 20px;
+}
+
+#battery {
+ color: #FFFFFF;
+}
+
+#battery.charging {
+ color: #7bc275;
+}
+
+#battery.warning:not(.charging) {
+ color: #FCCE7B;
+}
+
+#battery.critical:not(.charging) {
+ color: #f44336;
+}
+
+#cpu {
+ color: #FFFFFF;
+}
+
+#cpu.crit {
+ color: #70140d
+}
+
+#cpu.high {
+ color: #f44336
+}
+
+#cpu.med {
+ color: #FCCE7B;
+}
+
+#cpu.low {
+ color: #99d8ff;
+}
+
+#custom-bluetoothcharge {
+ color: #757de8;
+}
+
+#clock {
+ font-size: 17px;
+ margin-left: 0px;
+ border-right: 0px;
+ margin-right: 0px;
+}