Compare commits
No commits in common. "201f0e5f0a539a3cf9b2ffa966d2faadc48cfb56" and "579869f2f07ffc770fad826ae90f70f85dbb368a" have entirely different histories.
201f0e5f0a
...
579869f2f0
35 changed files with 2348 additions and 834 deletions
19
.direnv/bin/nix-direnv-reload
Executable file
19
.direnv/bin/nix-direnv-reload
Executable file
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
if [[ ! -d "/home/nionidh/projects/rust-tomfoolery/cursor-mover-app" ]]; then
|
||||||
|
echo "Cannot find source directory; Did you move it?"
|
||||||
|
echo "(Looking for "/home/nionidh/projects/rust-tomfoolery/cursor-mover-app")"
|
||||||
|
echo 'Cannot force reload with this script - use "direnv reload" manually and then try again'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# rebuild the cache forcefully
|
||||||
|
_nix_direnv_force_reload=1 direnv exec "/home/nionidh/projects/rust-tomfoolery/cursor-mover-app" true
|
||||||
|
|
||||||
|
# Update the mtime for .envrc.
|
||||||
|
# This will cause direnv to reload again - but without re-building.
|
||||||
|
touch "/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.envrc"
|
||||||
|
|
||||||
|
# Also update the timestamp of whatever profile_rc we have.
|
||||||
|
# This makes sure that we know we are up to date.
|
||||||
|
touch -r "/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.envrc" "/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.direnv"/*.rc
|
||||||
1
.direnv/flake-inputs/12rd2bk68yfdn66pzcnwkgcyxf28y2fq-source
Symbolic link
1
.direnv/flake-inputs/12rd2bk68yfdn66pzcnwkgcyxf28y2fq-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/12rd2bk68yfdn66pzcnwkgcyxf28y2fq-source
|
||||||
1
.direnv/flake-inputs/2a9ylipb88x2sp2xn6cg58p5xm6qamai-source
Symbolic link
1
.direnv/flake-inputs/2a9ylipb88x2sp2xn6cg58p5xm6qamai-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/2a9ylipb88x2sp2xn6cg58p5xm6qamai-source
|
||||||
1
.direnv/flake-inputs/41f1cpnv29cwhhf9y41a1q0757v8phl3-source
Symbolic link
1
.direnv/flake-inputs/41f1cpnv29cwhhf9y41a1q0757v8phl3-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/41f1cpnv29cwhhf9y41a1q0757v8phl3-source
|
||||||
1
.direnv/flake-inputs/5wsbaidxzywizpm8ywrkl14qy125d566-source
Symbolic link
1
.direnv/flake-inputs/5wsbaidxzywizpm8ywrkl14qy125d566-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/5wsbaidxzywizpm8ywrkl14qy125d566-source
|
||||||
1
.direnv/flake-inputs/7a4jq2c49dwdqxb2b9fd5har64gkxd9w-source
Symbolic link
1
.direnv/flake-inputs/7a4jq2c49dwdqxb2b9fd5har64gkxd9w-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/7a4jq2c49dwdqxb2b9fd5har64gkxd9w-source
|
||||||
1
.direnv/flake-inputs/bmvmvrckk4vz1kmr9prig8prmc09c9yq-source
Symbolic link
1
.direnv/flake-inputs/bmvmvrckk4vz1kmr9prig8prmc09c9yq-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/bmvmvrckk4vz1kmr9prig8prmc09c9yq-source
|
||||||
1
.direnv/flake-inputs/bnswhsxlbaf17xfsacm6xbj23g7g9j5b-source
Symbolic link
1
.direnv/flake-inputs/bnswhsxlbaf17xfsacm6xbj23g7g9j5b-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/bnswhsxlbaf17xfsacm6xbj23g7g9j5b-source
|
||||||
1
.direnv/flake-inputs/bpq48947cigxsm1y1qzz3jxgka63a2dd-source
Symbolic link
1
.direnv/flake-inputs/bpq48947cigxsm1y1qzz3jxgka63a2dd-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/bpq48947cigxsm1y1qzz3jxgka63a2dd-source
|
||||||
1
.direnv/flake-inputs/d8j9587fki8g877fjwm5a1l29f29xckm-source
Symbolic link
1
.direnv/flake-inputs/d8j9587fki8g877fjwm5a1l29f29xckm-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/d8j9587fki8g877fjwm5a1l29f29xckm-source
|
||||||
1
.direnv/flake-inputs/dj66bmh6cjl4pbw0aw50iiz631xdc4z9-source
Symbolic link
1
.direnv/flake-inputs/dj66bmh6cjl4pbw0aw50iiz631xdc4z9-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/dj66bmh6cjl4pbw0aw50iiz631xdc4z9-source
|
||||||
1
.direnv/flake-inputs/dq57cg11cdy3rg7jwxh25c02jdi7mzq8-source
Symbolic link
1
.direnv/flake-inputs/dq57cg11cdy3rg7jwxh25c02jdi7mzq8-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/dq57cg11cdy3rg7jwxh25c02jdi7mzq8-source
|
||||||
1
.direnv/flake-inputs/fhapivckp1hrf0cn2bsr8cv5f98c2skb-source
Symbolic link
1
.direnv/flake-inputs/fhapivckp1hrf0cn2bsr8cv5f98c2skb-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/fhapivckp1hrf0cn2bsr8cv5f98c2skb-source
|
||||||
1
.direnv/flake-inputs/fxlr459mkipn4j7ff86h7z21zyiwxs62-source
Symbolic link
1
.direnv/flake-inputs/fxlr459mkipn4j7ff86h7z21zyiwxs62-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/fxlr459mkipn4j7ff86h7z21zyiwxs62-source
|
||||||
1
.direnv/flake-inputs/g5v3sgqy6a0fsmas7mnapc196flrplix-source
Symbolic link
1
.direnv/flake-inputs/g5v3sgqy6a0fsmas7mnapc196flrplix-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/g5v3sgqy6a0fsmas7mnapc196flrplix-source
|
||||||
1
.direnv/flake-inputs/gs1d4570bffhpg2704yb26p49fzgg343-source
Symbolic link
1
.direnv/flake-inputs/gs1d4570bffhpg2704yb26p49fzgg343-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/gs1d4570bffhpg2704yb26p49fzgg343-source
|
||||||
1
.direnv/flake-inputs/m0m72b7nj91pfyfbblzhi7k7c2cxpb6b-source
Symbolic link
1
.direnv/flake-inputs/m0m72b7nj91pfyfbblzhi7k7c2cxpb6b-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/m0m72b7nj91pfyfbblzhi7k7c2cxpb6b-source
|
||||||
1
.direnv/flake-inputs/p4l9q189cgldga9f1051fhfllfzmk4c5-source
Symbolic link
1
.direnv/flake-inputs/p4l9q189cgldga9f1051fhfllfzmk4c5-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/p4l9q189cgldga9f1051fhfllfzmk4c5-source
|
||||||
1
.direnv/flake-inputs/sy3ism981f9xcbcmdc7gbk0yz28w6yjz-source
Symbolic link
1
.direnv/flake-inputs/sy3ism981f9xcbcmdc7gbk0yz28w6yjz-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/sy3ism981f9xcbcmdc7gbk0yz28w6yjz-source
|
||||||
1
.direnv/flake-inputs/vwwbg9chin0hq0snddfn0swzdi7frgia-source
Symbolic link
1
.direnv/flake-inputs/vwwbg9chin0hq0snddfn0swzdi7frgia-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/vwwbg9chin0hq0snddfn0swzdi7frgia-source
|
||||||
1
.direnv/flake-inputs/x8ymj8dbvyzhj0vpgga2plzdgmar3bb0-source
Symbolic link
1
.direnv/flake-inputs/x8ymj8dbvyzhj0vpgga2plzdgmar3bb0-source
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/x8ymj8dbvyzhj0vpgga2plzdgmar3bb0-source
|
||||||
1
.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa
Symbolic link
1
.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
/nix/store/4kycd6brixc98xkpd97bz3yx8ln96f08-my-project-env
|
||||||
2227
.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc
Normal file
2227
.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc
Normal file
File diff suppressed because it is too large
Load diff
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1,8 +1,7 @@
|
||||||
.devenv
|
.devenv
|
||||||
.direnv
|
.devenv
|
||||||
|
|
||||||
|
|
||||||
# Added by cargo
|
# Added by cargo
|
||||||
|
|
||||||
/target
|
/target
|
||||||
result
|
|
||||||
|
|
|
||||||
1
TODO.md
1
TODO.md
|
|
@ -1 +0,0 @@
|
||||||
Installable PWAs need https...
|
|
||||||
|
|
@ -1,6 +1,4 @@
|
||||||
[application]
|
[application]
|
||||||
name = "cursor-move-webapp"
|
|
||||||
default_platform = "web"
|
|
||||||
|
|
||||||
[web.app]
|
[web.app]
|
||||||
|
|
||||||
|
|
@ -21,7 +19,3 @@ script = []
|
||||||
# Javascript code file
|
# Javascript code file
|
||||||
# serve: [dev-server] only
|
# serve: [dev-server] only
|
||||||
script = []
|
script = []
|
||||||
|
|
||||||
[web.watcher]
|
|
||||||
reload_html = true
|
|
||||||
watch_path = ["src", "public"]
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 130 KiB |
|
|
@ -1,22 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>{app_title}</title>
|
|
||||||
<script>
|
|
||||||
if ("serviceWorker" in navigator) {
|
|
||||||
navigator.serviceWorker.register("/{base_path}/assets/sw.js");
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<link rel="manifest" href="/assets/manifest.json" />
|
|
||||||
<meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
|
|
||||||
<meta
|
|
||||||
http-equiv="Content-Security-Policy"
|
|
||||||
content="worker-src 'self'"
|
|
||||||
/>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="main"></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 4.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.1 KiB |
|
|
@ -1,34 +0,0 @@
|
||||||
{
|
|
||||||
"name": "Cursor Mover",
|
|
||||||
"icons": [
|
|
||||||
{
|
|
||||||
"src": "logo_192.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "192x192"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "logo_512.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "512x512",
|
|
||||||
"purpose": "any"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "logo_512.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "any",
|
|
||||||
"purpose": "any"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"start_url": "/",
|
|
||||||
"id": "/",
|
|
||||||
"display": "standalone",
|
|
||||||
"display_override": ["window-control-overlay", "standalone"],
|
|
||||||
"scope": "/",
|
|
||||||
"theme_color": "#000000",
|
|
||||||
"background_color": "#ffffff",
|
|
||||||
"short_name": "Cursr Mover",
|
|
||||||
"description": "A web control your cursor and keyboard via a smartphone.",
|
|
||||||
"dir": "ltr",
|
|
||||||
"lang": "en",
|
|
||||||
"orientation": "portrait"
|
|
||||||
}
|
|
||||||
|
|
@ -1,198 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
//console.log('WORKER: executing.');
|
|
||||||
|
|
||||||
/* A version number is useful when updating the worker logic,
|
|
||||||
allowing you to remove outdated cache entries during the update.
|
|
||||||
*/
|
|
||||||
var version = "v1.0.0::";
|
|
||||||
|
|
||||||
/* These resources will be downloaded and cached by the service worker
|
|
||||||
during the installation process. If any resource fails to be downloaded,
|
|
||||||
then the service worker won't be installed either.
|
|
||||||
*/
|
|
||||||
var offlineFundamentals = [
|
|
||||||
// add here the files you want to cache
|
|
||||||
//"favicon.ico",
|
|
||||||
];
|
|
||||||
|
|
||||||
/* The install event fires when the service worker is first installed.
|
|
||||||
You can use this event to prepare the service worker to be able to serve
|
|
||||||
files while visitors are offline.
|
|
||||||
*/
|
|
||||||
self.addEventListener("install", function (event) {
|
|
||||||
//console.log('WORKER: install event in progress.');
|
|
||||||
/* Using event.waitUntil(p) blocks the installation process on the provided
|
|
||||||
promise. If the promise is rejected, the service worker won't be installed.
|
|
||||||
*/
|
|
||||||
event.waitUntil(
|
|
||||||
/* The caches built-in is a promise-based API that helps you cache responses,
|
|
||||||
as well as finding and deleting them.
|
|
||||||
*/
|
|
||||||
caches
|
|
||||||
/* You can open a cache by name, and this method returns a promise. We use
|
|
||||||
a versioned cache name here so that we can remove old cache entries in
|
|
||||||
one fell swoop later, when phasing out an older service worker.
|
|
||||||
*/
|
|
||||||
.open(version + "fundamentals")
|
|
||||||
.then(function (cache) {
|
|
||||||
/* After the cache is opened, we can fill it with the offline fundamentals.
|
|
||||||
The method below will add all resources in `offlineFundamentals` to the
|
|
||||||
cache, after making requests for them.
|
|
||||||
*/
|
|
||||||
return cache.addAll(offlineFundamentals);
|
|
||||||
})
|
|
||||||
.then(function () {
|
|
||||||
//console.log('WORKER: install completed');
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
/* The fetch event fires whenever a page controlled by this service worker requests
|
|
||||||
a resource. This isn't limited to `fetch` or even XMLHttpRequest. Instead, it
|
|
||||||
comprehends even the request for the HTML page on first load, as well as JS and
|
|
||||||
CSS resources, fonts, any images, etc.
|
|
||||||
*/
|
|
||||||
self.addEventListener("fetch", function (event) {
|
|
||||||
//console.log('WORKER: fetch event in progress.');
|
|
||||||
|
|
||||||
/* We should only cache GET requests, and deal with the rest of method in the
|
|
||||||
client-side, by handling failed POST,PUT,PATCH,etc. requests.
|
|
||||||
*/
|
|
||||||
if (event.request.method !== "GET") {
|
|
||||||
/* If we don't block the event as shown below, then the request will go to
|
|
||||||
the network as usual.
|
|
||||||
*/
|
|
||||||
//console.log('WORKER: fetch event ignored.', event.request.method, event.request.url);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* Similar to event.waitUntil in that it blocks the fetch event on a promise.
|
|
||||||
Fulfillment result will be used as the response, and rejection will end in a
|
|
||||||
HTTP response indicating failure.
|
|
||||||
*/
|
|
||||||
event.respondWith(
|
|
||||||
caches
|
|
||||||
/* This method returns a promise that resolves to a cache entry matching
|
|
||||||
the request. Once the promise is settled, we can then provide a response
|
|
||||||
to the fetch request.
|
|
||||||
*/
|
|
||||||
.match(event.request)
|
|
||||||
.then(function (cached) {
|
|
||||||
/* Even if the response is in our cache, we go to the network as well.
|
|
||||||
This pattern is known for producing "eventually fresh" responses,
|
|
||||||
where we return cached responses immediately, and meanwhile pull
|
|
||||||
a network response and store that in the cache.
|
|
||||||
|
|
||||||
Read more:
|
|
||||||
https://ponyfoo.com/articles/progressive-networking-serviceworker
|
|
||||||
*/
|
|
||||||
var networked = fetch(event.request)
|
|
||||||
// We handle the network request with success and failure scenarios.
|
|
||||||
.then(fetchedFromNetwork, unableToResolve)
|
|
||||||
// We should catch errors on the fetchedFromNetwork handler as well.
|
|
||||||
.catch(unableToResolve);
|
|
||||||
|
|
||||||
/* We return the cached response immediately if there is one, and fall
|
|
||||||
back to waiting on the network as usual.
|
|
||||||
*/
|
|
||||||
//console.log('WORKER: fetch event', cached ? '(cached)' : '(network)', event.request.url);
|
|
||||||
return cached || networked;
|
|
||||||
|
|
||||||
function fetchedFromNetwork(response) {
|
|
||||||
/* We copy the response before replying to the network request.
|
|
||||||
This is the response that will be stored on the ServiceWorker cache.
|
|
||||||
*/
|
|
||||||
var cacheCopy = response.clone();
|
|
||||||
|
|
||||||
//console.log('WORKER: fetch response from network.', event.request.url);
|
|
||||||
|
|
||||||
caches
|
|
||||||
// We open a cache to store the response for this request.
|
|
||||||
.open(version + "pages")
|
|
||||||
.then(function add(cache) {
|
|
||||||
/* We store the response for this request. It'll later become
|
|
||||||
available to caches.match(event.request) calls, when looking
|
|
||||||
for cached responses.
|
|
||||||
*/
|
|
||||||
cache.put(event.request, cacheCopy);
|
|
||||||
})
|
|
||||||
.then(function () {
|
|
||||||
//console.log('WORKER: fetch response stored in cache.', event.request.url);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Return the response so that the promise is settled in fulfillment.
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* When this method is called, it means we were unable to produce a response
|
|
||||||
from either the cache or the network. This is our opportunity to produce
|
|
||||||
a meaningful response even when all else fails. It's the last chance, so
|
|
||||||
you probably want to display a "Service Unavailable" view or a generic
|
|
||||||
error response.
|
|
||||||
*/
|
|
||||||
function unableToResolve() {
|
|
||||||
/* There's a couple of things we can do here.
|
|
||||||
- Test the Accept header and then return one of the `offlineFundamentals`
|
|
||||||
e.g: `return caches.match('/some/cached/image.png')`
|
|
||||||
- You should also consider the origin. It's easier to decide what
|
|
||||||
"unavailable" means for requests against your origins than for requests
|
|
||||||
against a third party, such as an ad provider.
|
|
||||||
- Generate a Response programmatically, as shown below, and return that.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//console.log('WORKER: fetch request failed in both cache and network.');
|
|
||||||
|
|
||||||
/* Here we're creating a response programmatically. The first parameter is the
|
|
||||||
response body, and the second one defines the options for the response.
|
|
||||||
*/
|
|
||||||
return new Response("<h1>Service Unavailable</h1>", {
|
|
||||||
status: 503,
|
|
||||||
statusText: "Service Unavailable",
|
|
||||||
headers: new Headers({
|
|
||||||
"Content-Type": "text/html",
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
/* The activate event fires after a service worker has been successfully installed.
|
|
||||||
It is most useful when phasing out an older version of a service worker, as at
|
|
||||||
this point you know that the new worker was installed correctly. In this example,
|
|
||||||
we delete old caches that don't match the version in the worker we just finished
|
|
||||||
installing.
|
|
||||||
*/
|
|
||||||
self.addEventListener("activate", function (event) {
|
|
||||||
/* Just like with the install event, event.waitUntil blocks activate on a promise.
|
|
||||||
Activation will fail unless the promise is fulfilled.
|
|
||||||
*/
|
|
||||||
//console.log('WORKER: activate event in progress.');
|
|
||||||
|
|
||||||
event.waitUntil(
|
|
||||||
caches
|
|
||||||
/* This method returns a promise which will resolve to an array of available
|
|
||||||
cache keys.
|
|
||||||
*/
|
|
||||||
.keys()
|
|
||||||
.then(function (keys) {
|
|
||||||
// We return a promise that settles when all outdated caches are deleted.
|
|
||||||
return Promise.all(
|
|
||||||
keys
|
|
||||||
.filter(function (key) {
|
|
||||||
// Filter by keys that don't start with the latest version prefix.
|
|
||||||
return !key.startsWith(version);
|
|
||||||
})
|
|
||||||
.map(function (key) {
|
|
||||||
/* Return a promise that's fulfilled
|
|
||||||
when each outdated cache is deleted.
|
|
||||||
*/
|
|
||||||
return caches.delete(key);
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.then(function () {
|
|
||||||
//console.log('WORKER: activate completed.');
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
@ -13,7 +13,7 @@ pub fn Controls() -> Element {
|
||||||
#[css_module("/assets/styling/controls.module.css")]
|
#[css_module("/assets/styling/controls.module.css")]
|
||||||
struct Styles;
|
struct Styles;
|
||||||
|
|
||||||
let mut socket = use_websocket(move || remote_control(WebSocketOptions::new()));
|
let mut socket = use_websocket(move || mouse_move(WebSocketOptions::new()));
|
||||||
|
|
||||||
use_future(move || async move {
|
use_future(move || async move {
|
||||||
loop {
|
loop {
|
||||||
|
|
@ -34,44 +34,12 @@ pub fn Controls() -> Element {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
match *socket.status().read() {
|
rsx! {
|
||||||
dioxus_fullstack::WebsocketState::Connecting => {
|
div {
|
||||||
rsx! {
|
class: Styles::controls,
|
||||||
div {
|
MouseArea { onevent: event_handler }
|
||||||
"Connecting..."
|
KeyboardArea { onevent: event_handler }
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
|
||||||
dioxus_fullstack::WebsocketState::Open => {
|
|
||||||
rsx! {
|
|
||||||
div {
|
|
||||||
class: Styles::controls,
|
|
||||||
MouseArea { onevent: event_handler }
|
|
||||||
KeyboardArea { onevent: event_handler }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
dioxus_fullstack::WebsocketState::Closing => {
|
|
||||||
rsx! {
|
|
||||||
div {
|
|
||||||
"Closing..."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
dioxus_fullstack::WebsocketState::Closed => {
|
|
||||||
rsx! {
|
|
||||||
div {
|
|
||||||
"Closed..."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
dioxus_fullstack::WebsocketState::FailedToConnect => {
|
|
||||||
rsx! {
|
|
||||||
div {
|
|
||||||
"Failed to connect..."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,8 +60,8 @@ enum ServerEvent {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[expect(clippy::unused_async)]
|
#[expect(clippy::unused_async)]
|
||||||
#[get("/api/remote_control_wss", mouse_service: State<crate::server::input_proxy_service::InputProxyService>)]
|
#[get("/api/mouse_move_ws", mouse_service: State<crate::server::input_proxy_service::InputProxyService>)]
|
||||||
async fn remote_control(
|
async fn mouse_move(
|
||||||
options: WebSocketOptions
|
options: WebSocketOptions
|
||||||
) -> Result<Websocket<ClientEvent, ServerEvent, CborEncoding>> {
|
) -> Result<Websocket<ClientEvent, ServerEvent, CborEncoding>> {
|
||||||
Ok(options.on_upgrade(move |mut socket| async move {
|
Ok(options.on_upgrade(move |mut socket| async move {
|
||||||
|
|
|
||||||
421
flake.lock
generated
421
flake.lock
generated
|
|
@ -1,421 +0,0 @@
|
||||||
{
|
|
||||||
"nodes": {
|
|
||||||
"cachix": {
|
|
||||||
"inputs": {
|
|
||||||
"devenv": [
|
|
||||||
"devenv"
|
|
||||||
],
|
|
||||||
"flake-compat": [
|
|
||||||
"devenv",
|
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"git-hooks": [
|
|
||||||
"devenv",
|
|
||||||
"git-hooks"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1760971495,
|
|
||||||
"narHash": "sha256-IwnNtbNVrlZIHh7h4Wz6VP0Furxg9Hh0ycighvL5cZc=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "cachix",
|
|
||||||
"rev": "c5bfd933d1033672f51a863c47303fc0e093c2d2",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"ref": "latest",
|
|
||||||
"repo": "cachix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"devenv": {
|
|
||||||
"inputs": {
|
|
||||||
"cachix": "cachix",
|
|
||||||
"flake-compat": "flake-compat",
|
|
||||||
"flake-parts": "flake-parts",
|
|
||||||
"git-hooks": "git-hooks",
|
|
||||||
"nix": "nix",
|
|
||||||
"nixd": "nixd",
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1772561312,
|
|
||||||
"narHash": "sha256-NfAIfTNeZylb3hHdDGfuEufF0wgrzICU9VvsxWymOSM=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "devenv",
|
|
||||||
"rev": "222bd22a9283281239059b8663f3de7228d14cf8",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "devenv",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"devenv-root": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"narHash": "sha256-d6xi4mKdjkX2JFicDIv5niSzpyI0m/Hnm8GGAIU04kY=",
|
|
||||||
"type": "file",
|
|
||||||
"url": "file:///dev/null"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "file:///dev/null"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fenix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"rust-analyzer-src": "rust-analyzer-src"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1772348640,
|
|
||||||
"narHash": "sha256-caiKs7O4khFydpKyg8O8/nmvw/NfN4fn/4spageGoig=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "fenix",
|
|
||||||
"rev": "47c5355eaba0b08836e720d5d545c8ea1e1783db",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"ref": "monthly",
|
|
||||||
"repo": "fenix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-compat": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1761588595,
|
|
||||||
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
|
|
||||||
"owner": "edolstra",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "edolstra",
|
|
||||||
"repo": "flake-compat",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs-lib": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1760948891,
|
|
||||||
"narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-parts_2": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs-lib": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1772408722,
|
|
||||||
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "flake-parts",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-root": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1723604017,
|
|
||||||
"narHash": "sha256-rBtQ8gg+Dn4Sx/s+pvjdq3CB2wQNzx9XGFq/JVGCB6k=",
|
|
||||||
"owner": "srid",
|
|
||||||
"repo": "flake-root",
|
|
||||||
"rev": "b759a56851e10cb13f6b8e5698af7b59c44be26e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "srid",
|
|
||||||
"repo": "flake-root",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"git-hooks": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-compat": [
|
|
||||||
"devenv",
|
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"gitignore": "gitignore",
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1760663237,
|
|
||||||
"narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "git-hooks.nix",
|
|
||||||
"rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "git-hooks.nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"gitignore": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"git-hooks",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1709087332,
|
|
||||||
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "gitignore.nix",
|
|
||||||
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "hercules-ci",
|
|
||||||
"repo": "gitignore.nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mk-shell-bin": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1677004959,
|
|
||||||
"narHash": "sha256-/uEkr1UkJrh11vD02aqufCxtbF5YnhRTIKlx5kyvf+I=",
|
|
||||||
"owner": "rrbutani",
|
|
||||||
"repo": "nix-mk-shell-bin",
|
|
||||||
"rev": "ff5d8bd4d68a347be5042e2f16caee391cd75887",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "rrbutani",
|
|
||||||
"repo": "nix-mk-shell-bin",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nix": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-compat": [
|
|
||||||
"devenv",
|
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"flake-parts": [
|
|
||||||
"devenv",
|
|
||||||
"flake-parts"
|
|
||||||
],
|
|
||||||
"git-hooks-nix": [
|
|
||||||
"devenv",
|
|
||||||
"git-hooks"
|
|
||||||
],
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"nixpkgs-23-11": [
|
|
||||||
"devenv"
|
|
||||||
],
|
|
||||||
"nixpkgs-regression": [
|
|
||||||
"devenv"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1771532737,
|
|
||||||
"narHash": "sha256-H26FQmOyvIGnedfAioparJQD8Oe+/byD6OpUpnI/hkE=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "nix",
|
|
||||||
"rev": "7eb6c427c7a86fdc3ebf9e6cbf2a84e80e8974fd",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"ref": "devenv-2.32",
|
|
||||||
"repo": "nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nix2container": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1767430085,
|
|
||||||
"narHash": "sha256-SiXJ6xv4pS2MDUqfj0/mmG746cGeJrMQGmoFgHLS25Y=",
|
|
||||||
"owner": "nlewo",
|
|
||||||
"repo": "nix2container",
|
|
||||||
"rev": "66f4b8a47e92aa744ec43acbb5e9185078983909",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nlewo",
|
|
||||||
"repo": "nix2container",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixd": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-parts": [
|
|
||||||
"devenv",
|
|
||||||
"flake-parts"
|
|
||||||
],
|
|
||||||
"flake-root": "flake-root",
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"treefmt-nix": "treefmt-nix"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1763964548,
|
|
||||||
"narHash": "sha256-JTRoaEWvPsVIMFJWeS4G2isPo15wqXY/otsiHPN0zww=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "nixd",
|
|
||||||
"rev": "d4bf15e56540422e2acc7bc26b20b0a0934e3f5e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "nixd",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1761313199,
|
|
||||||
"narHash": "sha256-wCIACXbNtXAlwvQUo1Ed++loFALPjYUA3dpcUJiXO44=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "devenv-nixpkgs",
|
|
||||||
"rev": "d1c30452ebecfc55185ae6d1c983c09da0c274ff",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"ref": "rolling",
|
|
||||||
"repo": "devenv-nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs-src": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1769922788,
|
|
||||||
"narHash": "sha256-H3AfG4ObMDTkTJYkd8cz1/RbY9LatN5Mk4UF48VuSXc=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "207d15f1a6603226e1e223dc79ac29c7846da32e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixpkgs-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_2": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs-src": "nixpkgs-src"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1770434727,
|
|
||||||
"narHash": "sha256-YzOZRgiqIccnkkZvckQha7wvOfN2z50xEdPvfgu6sf8=",
|
|
||||||
"owner": "cachix",
|
|
||||||
"repo": "devenv-nixpkgs",
|
|
||||||
"rev": "8430f16a39c27bdeef236f1eeb56f0b51b33d348",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "cachix",
|
|
||||||
"ref": "rolling",
|
|
||||||
"repo": "devenv-nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"devenv": "devenv",
|
|
||||||
"devenv-root": "devenv-root",
|
|
||||||
"fenix": "fenix",
|
|
||||||
"flake-parts": "flake-parts_2",
|
|
||||||
"mk-shell-bin": "mk-shell-bin",
|
|
||||||
"nix2container": "nix2container",
|
|
||||||
"nixpkgs": "nixpkgs_2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"rust-analyzer-src": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1772310333,
|
|
||||||
"narHash": "sha256-njFwHnxYcfQINwSa+XWhenv8s8PMg/j5ID0HpIa49xM=",
|
|
||||||
"owner": "rust-lang",
|
|
||||||
"repo": "rust-analyzer",
|
|
||||||
"rev": "a96b6a9b887008bae01839543f9ca8e1f67f4ebe",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "rust-lang",
|
|
||||||
"ref": "nightly",
|
|
||||||
"repo": "rust-analyzer",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"treefmt-nix": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"devenv",
|
|
||||||
"nixd",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1734704479,
|
|
||||||
"narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "treefmt-nix",
|
|
||||||
"rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "treefmt-nix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": "root",
|
|
||||||
"version": 7
|
|
||||||
}
|
|
||||||
180
flake.nix
180
flake.nix
|
|
@ -46,134 +46,96 @@
|
||||||
perSystem =
|
perSystem =
|
||||||
{
|
{
|
||||||
#config,
|
#config,
|
||||||
self',
|
#self',
|
||||||
inputs',
|
inputs',
|
||||||
pkgs,
|
pkgs,
|
||||||
#system,
|
#system,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
{
|
||||||
fnx = inputs'.fenix.packages;
|
devenv.shells.default =
|
||||||
rustToolchain = fnx.combine [
|
let
|
||||||
fnx.complete.cargo
|
fnx = inputs'.fenix.packages;
|
||||||
fnx.complete.clippy
|
rustToolchain = fnx.combine [
|
||||||
fnx.complete.rust-src
|
fnx.complete.cargo
|
||||||
fnx.complete.rustc
|
fnx.complete.clippy
|
||||||
fnx.complete.rustfmt
|
fnx.complete.rust-src
|
||||||
fnx.targets.wasm32-unknown-unknown.latest.rust-std
|
fnx.complete.rustc
|
||||||
];
|
fnx.complete.rustfmt
|
||||||
|
fnx.targets.wasm32-unknown-unknown.latest.rust-std
|
||||||
wasmBindgen =
|
|
||||||
with pkgs;
|
|
||||||
rustPlatform.buildRustPackage rec {
|
|
||||||
pname = "wasm-bindgen-cli";
|
|
||||||
version = "0.2.114";
|
|
||||||
|
|
||||||
src = fetchCrate {
|
|
||||||
pname = pname;
|
|
||||||
version = version;
|
|
||||||
hash = "sha256-xrCym+rFY6EUQFWyWl6OPA+LtftpUAE5pIaElAIVqW0=";
|
|
||||||
};
|
|
||||||
|
|
||||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
|
||||||
inherit src;
|
|
||||||
inherit (src) pname version;
|
|
||||||
hash = "sha256-Z8+dUXPQq7S+Q7DWNr2Y9d8GMuEdSnq00quUR0wDNPM=";
|
|
||||||
};
|
|
||||||
|
|
||||||
nativeBuildInputs = [ pkg-config ];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
openssl
|
|
||||||
]
|
|
||||||
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
|
||||||
curl
|
|
||||||
];
|
];
|
||||||
|
|
||||||
nativeCheckInputs = [ nodejs_latest ];
|
wasmBindgen =
|
||||||
|
with pkgs;
|
||||||
|
rustPlatform.buildRustPackage rec {
|
||||||
|
pname = "wasm-bindgen-cli";
|
||||||
|
version = "0.2.114";
|
||||||
|
|
||||||
# tests require it to be ran in the wasm-bindgen monorepo
|
src = fetchCrate {
|
||||||
doCheck = false;
|
pname = pname;
|
||||||
};
|
version = version;
|
||||||
in
|
hash = "sha256-xrCym+rFY6EUQFWyWl6OPA+LtftpUAE5pIaElAIVqW0=";
|
||||||
{
|
};
|
||||||
packages.default = self'.packages.cursor-mover-app;
|
|
||||||
|
|
||||||
packages.cursor-mover-app =
|
cargoDeps = rustPlatform.fetchCargoVendor {
|
||||||
(pkgs.makeRustPlatform {
|
inherit src;
|
||||||
cargo = rustToolchain;
|
inherit (src) pname version;
|
||||||
rustc = rustToolchain;
|
hash = "sha256-Z8+dUXPQq7S+Q7DWNr2Y9d8GMuEdSnq00quUR0wDNPM=";
|
||||||
}).buildRustPackage
|
};
|
||||||
{
|
|
||||||
pname = "cursor-mover-app";
|
|
||||||
version = "0.1.0";
|
|
||||||
|
|
||||||
src = ./.;
|
nativeBuildInputs = [ pkg-config ];
|
||||||
|
|
||||||
nativeBuildInputs = with pkgs; [
|
buildInputs = [
|
||||||
wasmBindgen
|
openssl
|
||||||
binaryen
|
]
|
||||||
dioxus-cli
|
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||||
breakpointHook
|
curl
|
||||||
makeWrapper
|
];
|
||||||
];
|
|
||||||
|
|
||||||
buildPhase = ''
|
nativeCheckInputs = [ nodejs_latest ];
|
||||||
dx bundle --debug-symbols=false --release --web --package cursor-move-webapp
|
|
||||||
'';
|
|
||||||
|
|
||||||
checkPhase = "";
|
# tests require it to be ran in the wasm-bindgen monorepo
|
||||||
|
doCheck = false;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
name = "my-project";
|
||||||
|
|
||||||
installPhase = "
|
env = {
|
||||||
mkdir -p $out/bin
|
LIBCLANG_PATH = "${pkgs.libclang.lib}/lib";
|
||||||
mkdir -p $out/share
|
|
||||||
|
|
||||||
cp -r target/dx/cursor-move-webapp/release/web $out/share/web
|
|
||||||
|
|
||||||
makeWrapper $out/share/web/cursor-move-webapp $out/bin/cursor-move-app --chdir $out/share/web
|
|
||||||
";
|
|
||||||
|
|
||||||
cargoLock.lockFile = ./Cargo.lock;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
devenv.shells.default = {
|
packages = [
|
||||||
name = "my-project";
|
pkgs.dioxus-cli
|
||||||
|
pkgs.cargo-expand
|
||||||
|
pkgs.cargo-deny
|
||||||
|
pkgs.cargo-nextest
|
||||||
|
pkgs.typos
|
||||||
|
pkgs.binaryen # wasm-opt
|
||||||
|
rustToolchain
|
||||||
|
fnx.rust-analyzer
|
||||||
|
wasmBindgen
|
||||||
|
|
||||||
env = {
|
pkgs.libxkbcommon
|
||||||
LIBCLANG_PATH = "${pkgs.libclang.lib}/lib";
|
];
|
||||||
|
|
||||||
|
scripts.checkall.exec = ''
|
||||||
|
set -xeuo pipefail
|
||||||
|
|
||||||
|
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||||
|
cargo deny check all -D warnings
|
||||||
|
cargo fmt --all -- --check
|
||||||
|
cargo nextest run --workspace --all-targets --all-features --status-level all --no-tests warn
|
||||||
|
|
||||||
|
# TODO Doctests
|
||||||
|
|
||||||
|
echo "==== checkall success ===="
|
||||||
|
'';
|
||||||
|
# DO NOT ENABLE RUST because devenv messes up the ability
|
||||||
|
# to build rust-src
|
||||||
|
# languages.rust = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
packages = [
|
|
||||||
pkgs.dioxus-cli
|
|
||||||
pkgs.cargo-expand
|
|
||||||
pkgs.cargo-deny
|
|
||||||
pkgs.cargo-nextest
|
|
||||||
pkgs.typos
|
|
||||||
pkgs.binaryen # wasm-opt
|
|
||||||
rustToolchain
|
|
||||||
fnx.rust-analyzer
|
|
||||||
wasmBindgen
|
|
||||||
|
|
||||||
pkgs.libxkbcommon
|
|
||||||
];
|
|
||||||
|
|
||||||
scripts.checkall.exec = ''
|
|
||||||
set -xeuo pipefail
|
|
||||||
|
|
||||||
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
|
||||||
cargo deny check all -D warnings
|
|
||||||
cargo fmt --all -- --check
|
|
||||||
cargo nextest run --workspace --all-targets --all-features --status-level all --no-tests warn
|
|
||||||
|
|
||||||
# TODO Doctests
|
|
||||||
|
|
||||||
echo "==== checkall success ===="
|
|
||||||
'';
|
|
||||||
# DO NOT ENABLE RUST because devenv messes up the ability
|
|
||||||
# to build rust-src
|
|
||||||
# languages.rust = {};
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
flake = { };
|
flake = { };
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue