This commit is contained in:
Mona Mayrhofer 2026-03-03 18:08:02 +01:00
parent 6d466c65a4
commit 579869f2f0
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG key ID: 374AB152BDEBA1AE
21 changed files with 168 additions and 2771 deletions

View file

@ -0,0 +1 @@
/nix/store/bpq48947cigxsm1y1qzz3jxgka63a2dd-source

View file

@ -0,0 +1 @@
/nix/store/d8j9587fki8g877fjwm5a1l29f29xckm-source

View file

@ -1 +0,0 @@
/nix/store/pg23i5nvj8wg12bb657b2r4s5kixjqic-source

View file

@ -1 +0,0 @@
/nix/store/zgbjmrhgvd8a42nyi1jck6v98gzvvql0-source

View file

@ -1 +1 @@
/nix/store/xa13w7i8cjcs7bhc21lczj9qyi40ay3s-my-project-env /nix/store/4kycd6brixc98xkpd97bz3yx8ln96f08-my-project-env

View file

@ -18,7 +18,7 @@ DEVENV_DOTFILE='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv'
export DEVENV_DOTFILE export DEVENV_DOTFILE
DEVENV_FLAKE_SHELL='default' DEVENV_FLAKE_SHELL='default'
export DEVENV_FLAKE_SHELL export DEVENV_FLAKE_SHELL
DEVENV_PROFILE='/nix/store/3niz0g2hddnbba4bcql8s8arc6mmna5m-devenv-profile' DEVENV_PROFILE='/nix/store/mpwh8x3hcqkkqcl8aah6c28m54mfdiw0-devenv-profile'
export DEVENV_PROFILE export DEVENV_PROFILE
DEVENV_ROOT='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app' DEVENV_ROOT='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app'
export DEVENV_ROOT export DEVENV_ROOT
@ -53,7 +53,7 @@ NIX_CC='/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0'
export NIX_CC export NIX_CC
NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1'
export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu
NIX_CFLAGS_COMPILE=' -frandom-seed=xa13w7i8cj -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include' NIX_CFLAGS_COMPILE=' -frandom-seed=4kycd6brix -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include'
export NIX_CFLAGS_COMPILE export NIX_CFLAGS_COMPILE
NIX_ENFORCE_NO_NATIVE='1' NIX_ENFORCE_NO_NATIVE='1'
export NIX_ENFORCE_NO_NATIVE export NIX_ENFORCE_NO_NATIVE
@ -76,7 +76,7 @@ OLDPWD=''
export OLDPWD export OLDPWD
OPTERR='1' OPTERR='1'
OSTYPE='linux-gnu' OSTYPE='linux-gnu'
PATH='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0/bin:/nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall/bin:/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3/bin:/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119/bin:/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0/bin:/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124/bin:/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3/bin:/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/bin:/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/bin:/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe/bin:/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114/bin:/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/bin:/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2/bin:/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2/bin:/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0/bin:/nix/store/mjf8jlq9grydcdvyw6hb063x5c34g5gf-gcc-15.2.0/bin:/nix/store/0bdqq2z98kg2hfn3k60if6pb5fd5p10h-glibc-2.42-47-bin/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44/bin:/nix/store/47mn80zqpygykqailwzw8zlag4cgl75q-binutils-2.44/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/16wfacfgap3chf7mcjnd8dwi85dj4qqi-findutils-4.10.0/bin:/nix/store/3p87h6dn5i87i3iq9364imzbqgwvkg2p-diffutils-3.12/bin:/nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9/bin:/nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin:/nix/store/2xq9rayckw8zq26k274xxlikn77jn60j-gawk-5.3.2/bin:/nix/store/qyg62bc2xnpwz0fa9prqxvvk00zj4g9q-gnutar-1.35/bin:/nix/store/84yyzmxs7mb8nhkvcfv9n1l9irpb6mnq-gzip-1.14/bin:/nix/store/90yw24gqmwph4xjp4mqhpx1y1gcrvqla-bzip2-1.0.8-bin/bin:/nix/store/vbah5c4rzy1q1hbqhginyxjhj8d4dj8j-gnumake-4.4.1/bin:/nix/store/f15k3dpilmiyv6zgpib289rnjykgr1r4-bash-5.3p9/bin:/nix/store/wwij6563c6wbg4kzgjhng7vlhf7api19-patch-2.8/bin:/nix/store/zys6d102zp171wpwcs08g632886w2qxs-xz-5.8.2-bin/bin:/nix/store/nyy0bvgjwd98x7ih8pl6pr79qjljgsf7-file-5.45/bin' PATH='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0/bin:/nix/store/czivij0a8n2z7al3d11m97l4p7x417ak-checkall/bin:/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3/bin:/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119/bin:/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0/bin:/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124/bin:/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3/bin:/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/bin:/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/bin:/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe/bin:/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114/bin:/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/bin:/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2/bin:/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2/bin:/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0/bin:/nix/store/mjf8jlq9grydcdvyw6hb063x5c34g5gf-gcc-15.2.0/bin:/nix/store/0bdqq2z98kg2hfn3k60if6pb5fd5p10h-glibc-2.42-47-bin/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44/bin:/nix/store/47mn80zqpygykqailwzw8zlag4cgl75q-binutils-2.44/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/16wfacfgap3chf7mcjnd8dwi85dj4qqi-findutils-4.10.0/bin:/nix/store/3p87h6dn5i87i3iq9364imzbqgwvkg2p-diffutils-3.12/bin:/nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9/bin:/nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12/bin:/nix/store/2xq9rayckw8zq26k274xxlikn77jn60j-gawk-5.3.2/bin:/nix/store/qyg62bc2xnpwz0fa9prqxvvk00zj4g9q-gnutar-1.35/bin:/nix/store/84yyzmxs7mb8nhkvcfv9n1l9irpb6mnq-gzip-1.14/bin:/nix/store/90yw24gqmwph4xjp4mqhpx1y1gcrvqla-bzip2-1.0.8-bin/bin:/nix/store/vbah5c4rzy1q1hbqhginyxjhj8d4dj8j-gnumake-4.4.1/bin:/nix/store/f15k3dpilmiyv6zgpib289rnjykgr1r4-bash-5.3p9/bin:/nix/store/wwij6563c6wbg4kzgjhng7vlhf7api19-patch-2.8/bin:/nix/store/zys6d102zp171wpwcs08g632886w2qxs-xz-5.8.2-bin/bin:/nix/store/nyy0bvgjwd98x7ih8pl6pr79qjljgsf7-file-5.45/bin'
export PATH export PATH
PC_CONFIG_FILES='/nix/store/f90qf91rzv18zpk3y4yf5saigawqw9nm-process-compose.yaml' PC_CONFIG_FILES='/nix/store/f90qf91rzv18zpk3y4yf5saigawqw9nm-process-compose.yaml'
export PC_CONFIG_FILES export PC_CONFIG_FILES
@ -162,7 +162,7 @@ mesonFlags=''
export mesonFlags export mesonFlags
name='my-project-env' name='my-project-env'
export name export name
nativeBuildInputs='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0 /nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall /nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3 /nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119 /nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0 /nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124 /nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3 /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125 /nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed /nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe /nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114 /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev /nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' nativeBuildInputs='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0 /nix/store/czivij0a8n2z7al3d11m97l4p7x417ak-checkall /nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3 /nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119 /nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0 /nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124 /nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3 /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125 /nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed /nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe /nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114 /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev /nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2'
export nativeBuildInputs export nativeBuildInputs
out='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/outputs/out' out='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/outputs/out'
export out export out
@ -183,7 +183,7 @@ phases='buildPhase'
export phases export phases
pkg='/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' pkg='/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0'
declare -a pkgsBuildBuild=() declare -a pkgsBuildBuild=()
declare -a pkgsBuildHost=('/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0' '/nix/store/f53d7gw5jh2yc1rv62kp670gnqq3vwwz-checkall' '/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3' '/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119' '/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0' '/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124' '/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3' '/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125' '/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed' '/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe' '/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114' '/nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev' '/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0' '/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' '/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2' '/nix/store/y03z7y8cgdck7vk8qpim30vps4d22gzv-update-autotools-gnu-config-scripts-hook' '/nix/store/0y5xmdb7qfvimjwbq7ibg1xdgkgjwqng-no-broken-symlinks.sh' '/nix/store/cv1d7p48379km6a85h4zp6kr86brh32q-audit-tmpdir.sh' '/nix/store/85clx3b0xkdf58jn161iy80y5223ilbi-compress-man-pages.sh' '/nix/store/p3l1a5y7nllfyrjn2krlwgcc3z0cd3fq-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh' '/nix/store/x8c40nfigps493a07sdr2pm5s9j1cdc0-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh' '/nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh' '/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' '/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44' ) declare -a pkgsBuildHost=('/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0' '/nix/store/czivij0a8n2z7al3d11m97l4p7x417ak-checkall' '/nix/store/py79xv22ipf2ycg4qks55wwai9g4w2qg-dioxus-cli-0.7.3' '/nix/store/9dpg06rzbppmxi5q8rms8zyybz56sa6r-cargo-expand-1.0.119' '/nix/store/fl02yv3ax1qf1xkq64ik8qz5bjxyyd71-cargo-deny-0.19.0' '/nix/store/hadf76x1xknx2w6ydp05gzl2w3j40hqy-cargo-nextest-0.9.124' '/nix/store/s4rgqv7brrcq2jm8m00dyair22knq10s-typos-1.42.3' '/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125' '/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed' '/nix/store/m05d7wi0zxg35937jbp6rp7zsvbb5qv4-rust-analyzer-nightly-a96b6a9b887008bae01839543f9ca8e1f67f4ebe' '/nix/store/8njkmn9yfcka8yid251wk109n7a6sz1y-wasm-bindgen-cli-0.2.114' '/nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev' '/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0' '/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' '/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2' '/nix/store/y03z7y8cgdck7vk8qpim30vps4d22gzv-update-autotools-gnu-config-scripts-hook' '/nix/store/0y5xmdb7qfvimjwbq7ibg1xdgkgjwqng-no-broken-symlinks.sh' '/nix/store/cv1d7p48379km6a85h4zp6kr86brh32q-audit-tmpdir.sh' '/nix/store/85clx3b0xkdf58jn161iy80y5223ilbi-compress-man-pages.sh' '/nix/store/p3l1a5y7nllfyrjn2krlwgcc3z0cd3fq-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh' '/nix/store/x8c40nfigps493a07sdr2pm5s9j1cdc0-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh' '/nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh' '/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' '/nix/store/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44' )
declare -a pkgsBuildTarget=() declare -a pkgsBuildTarget=()
declare -a pkgsHostHost=() declare -a pkgsHostHost=()
declare -a pkgsHostTarget=() declare -a pkgsHostTarget=()
@ -231,9 +231,9 @@ if [ ! type -p direnv &>/dev/null && -f .envrc ]; then
fi fi
mkdir -p "$DEVENV_STATE" mkdir -p "$DEVENV_STATE"
if [ ! -L "$DEVENV_DOTFILE/profile" ] || [ "$(/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin/readlink $DEVENV_DOTFILE/profile)" != "/nix/store/3niz0g2hddnbba4bcql8s8arc6mmna5m-devenv-profile" ] if [ ! -L "$DEVENV_DOTFILE/profile" ] || [ "$(/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin/readlink $DEVENV_DOTFILE/profile)" != "/nix/store/mpwh8x3hcqkkqcl8aah6c28m54mfdiw0-devenv-profile" ]
then then
ln -snf /nix/store/3niz0g2hddnbba4bcql8s8arc6mmna5m-devenv-profile "$DEVENV_DOTFILE/profile" ln -snf /nix/store/mpwh8x3hcqkkqcl8aah6c28m54mfdiw0-devenv-profile "$DEVENV_DOTFILE/profile"
fi fi
unset HOST_PATH NIX_BUILD_CORES __structuredAttrs buildInputs buildPhase builder depsBuildBuild depsBuildBuildPropagated depsBuildTarget depsBuildTargetPropagated depsHostHost depsHostHostPropagated depsTargetTarget depsTargetTargetPropagated dontAddDisableDepTrack doCheck doInstallCheck nativeBuildInputs out outputs patches phases preferLocalBuild propagatedBuildInputs propagatedNativeBuildInputs shell shellHook stdenv strictDeps unset HOST_PATH NIX_BUILD_CORES __structuredAttrs buildInputs buildPhase builder depsBuildBuild depsBuildBuildPropagated depsBuildTarget depsBuildTargetPropagated depsHostHost depsHostHostPropagated depsTargetTarget depsTargetTargetPropagated dontAddDisableDepTrack doCheck doInstallCheck nativeBuildInputs out outputs patches phases preferLocalBuild propagatedBuildInputs propagatedNativeBuildInputs shell shellHook stdenv strictDeps
@ -241,10 +241,10 @@ mkdir -p /tmp/devenv-b51d30d
ln -snf /tmp/devenv-b51d30d /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv/run ln -snf /tmp/devenv-b51d30d /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv/run
export PATH=/nix/store/qgm0a9f2cxfsf6v0d4b5riy5x54w3zib-devenv-flake-compat/bin:$PATH export PATH=/nix/store/f7qg5ng20s1mi9438padw0iy5gx3pci1-devenv-flake-compat/bin:$PATH
if [ -z "${DEVENV_SKIP_TASKS:-}" ]; then if [ -z "${DEVENV_SKIP_TASKS:-}" ]; then
/nix/store/bkl9r14hgr0qy850wkdj1bgs8884i46r-devenv-tasks-2.0.0/bin/devenv-tasks run devenv:enterShell --mode all --cache-dir /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv --runtime-dir /tmp/devenv-b51d30d || exit $? /nix/store/2a3cn42zhsg4yckjvy9yp5qh62xy0qx3-devenv-tasks-2.0.0/bin/devenv-tasks run devenv:enterShell --mode all --cache-dir /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv --runtime-dir /tmp/devenv-b51d30d || exit $?
if [ -f "$DEVENV_DOTFILE/load-exports" ]; then if [ -f "$DEVENV_DOTFILE/load-exports" ]; then
source "$DEVENV_DOTFILE/load-exports" source "$DEVENV_DOTFILE/load-exports"
fi fi

2646
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,19 +1,21 @@
[workspace] [workspace]
members = ["crates/cursor-mover-app" members = ["crates/cursor-move-webapp"]
, "crates/cursor-move-webapp"]
resolver = "2" resolver = "2"
[workspace.dependencies] [workspace.dependencies]
the-lib = {path="crates/the-lib", version="0.0.0"} the-lib = {path="crates/the-lib", version="0.0.0"}
[workspace.lints.clippy] [workspace.lints.clippy]
all = "warn" all = {level = "warn", priority = -1}
correctness = "deny" correctness = {level = "deny", priority = -1}
suspicious = "warn" suspicious = {level = "warn", priority = -1}
complexity = "warn" complexity = {level = "warn", priority = -1}
perf = "warn" perf = {level = "warn", priority = -1}
style = "warn" style = {level = "warn", priority = -1}
pedantic = "warn" pedantic = {level = "warn", priority = -1}
restriction = "allow" restriction = {level = "allow", priority = -1}
cargo = "warn" cargo = {level = "warn", priority = -1}
nursery = "warn" nursery = {level = "warn", priority = -1}
# cargo deny takes care of that
multiple-crate-versions = "allow"

View file

@ -3,6 +3,11 @@ name = "cursor-move-webapp"
version = "0.1.0" version = "0.1.0"
authors = ["Mona Mayrhofer <mona.mayrhofer@proton.me>"] authors = ["Mona Mayrhofer <mona.mayrhofer@proton.me>"]
edition = "2024" edition = "2024"
repository = "https://github.com/mona-mayrhofer/cursor-mover-app"
categories = ["tools"]
keywords = ["tools", "cursor", "remote"]
license = "EUPL-1.2"
description = "A web application for controlling your cursor and keyboard via a smartphone browser."
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@ -10,25 +15,25 @@ edition = "2024"
dioxus = { version = "0.7.3", features = ["router", "fullstack", "logger"] } dioxus = { version = "0.7.3", features = ["router", "fullstack", "logger"] }
dioxus-html = { version = "0.7.3", features = ["serialize"] } dioxus-html = { version = "0.7.3", features = ["serialize"] }
serde = { version = "1.0.228", features = ["derive"] } serde = { version = "1.0.228", features = ["derive"] }
wasmtimer = "0.4.3"
wayland-client = { version = "0.31.12", optional = true } wayland-client = { version = "0.31.12", optional = true }
wayland-protocols-wlr = { version = "0.3.10", features = ["client"], optional = true } wayland-protocols-wlr = { version = "0.3.10", features = ["client"], optional = true }
tokio = {version = "1.49.0", optional = true} tokio = {version = "1.49.0", optional = true}
rustix = { version = "1.1.4", optional = true, features = ["time"] } rustix = { version = "1.1.4", optional = true, features = ["time"], default-features = false }
wayland-protocols-misc = { version = "0.3.10", features = ["client"], optional = true } wayland-protocols-misc = { version = "0.3.10", features = ["client"], optional = true }
wayland-protocols = { version = "0.32.10", features = ["client", "staging"], optional = true } wayland-protocols = { version = "0.32.10", features = ["client", "staging"], optional = true }
xkb = {version = "0.3.0", optional = true}
memfile = {version = "0.3.2", optional = true} memfile = {version = "0.3.2", optional = true}
wasmtimer = "0.4.3"
[features] [features]
default = ["web"] default = ["web"]
# The feature that are only required for the web = ["dioxus/web"] build target should be optional and only enabled in the web = ["dioxus/web"] feature # The feature that are only required for the web = ["dioxus/web"] build target should be optional and only enabled in the web = ["dioxus/web"] feature
web = ["dioxus/web"] web = ["dioxus/web"]
# The feature that are only required for the desktop = ["dioxus/desktop"] build target should be optional and only enabled in the desktop = ["dioxus/desktop"] feature # The feature that are only required for the desktop = ["dioxus/desktop"] build target should be optional and only enabled in the desktop = ["dioxus/desktop"] feature
desktop = ["dioxus/desktop"] #desktop = ["dioxus/desktop"]
# The feature that are only required for the mobile = ["dioxus/mobile"] build target should be optional and only enabled in the mobile = ["dioxus/mobile"] feature # The feature that are only required for the mobile = ["dioxus/mobile"] build target should be optional and only enabled in the mobile = ["dioxus/mobile"] feature
mobile = ["dioxus/mobile"] #mobile = ["dioxus/mobile"]
# The feature that are only required for the server = ["dioxus/server"] build target should be optional and only enabled in the server = ["dioxus/server"] feature # The feature that are only required for the server = ["dioxus/server"] build target should be optional and only enabled in the server = ["dioxus/server"] feature
server = ["dioxus/server", server = ["dioxus/server",
"dep:wayland-client", "dep:wayland-client",
@ -37,7 +42,6 @@ server = ["dioxus/server",
"dep:wayland-protocols", "dep:wayland-protocols",
"dep:tokio", "dep:tokio",
"dep:rustix", "dep:rustix",
"dep:xkb",
"dep:memfile" "dep:memfile"
] ]

View file

@ -1,9 +1,6 @@
use dioxus::{ use dioxus::{
fullstack::{CborEncoding, WebSocketOptions, Websocket, extract::State, use_websocket}, fullstack::{CborEncoding, WebSocketOptions, Websocket, extract::State, use_websocket},
html::{ html::input_data::MouseButton,
geometry::{ElementSpace, euclid::Point2D},
input_data::MouseButton,
},
logger::tracing, logger::tracing,
prelude::*, prelude::*,
}; };

View file

@ -12,7 +12,7 @@ pub fn KeyboardArea(onevent: EventHandler<ClientEvent>) -> Element {
let v = evt.value(); let v = evt.value();
input_state.set(v.clone()); input_state.set(v.clone());
onevent.call(ClientEvent::TextInputEvent { text: v }) onevent.call(ClientEvent::TextInputEvent { text: v });
}); });
let key_press_handler = use_callback(move |evt: Event<KeyboardData>| { let key_press_handler = use_callback(move |evt: Event<KeyboardData>| {
if input_state.read().is_empty() { if input_state.read().is_empty() {

View file

@ -1,8 +1,4 @@
use std::{ use std::{collections::HashMap, ops::Sub, time::Duration};
collections::{HashMap, VecDeque},
ops::Sub,
time::Duration,
};
use dioxus::{ use dioxus::{
html::{ html::{

View file

@ -38,6 +38,7 @@ const BUTTON_RIGHT: u32 = 0x111;
const BUTTON_MIDDLE: u32 = 0x112; const BUTTON_MIDDLE: u32 = 0x112;
// https://wayland.app/protocols/wayland#wl_keyboard:enum:keymap_format // https://wayland.app/protocols/wayland#wl_keyboard:enum:keymap_format
#[expect(unused)]
const NO_KEYMAP: u32 = 0; const NO_KEYMAP: u32 = 0;
const XKB_V1: u32 = 1; const XKB_V1: u32 = 1;
@ -233,8 +234,11 @@ enum InputProxyServiceState {
keymap: Keymap, keymap: Keymap,
}, },
Running { Running {
#[expect(unused)]
seat: WlSeat, seat: WlSeat,
#[expect(unused)]
virtual_pointer_manager: ZwlrVirtualPointerManagerV1, virtual_pointer_manager: ZwlrVirtualPointerManagerV1,
#[expect(unused)]
virtual_keyboard_manager: ZwpVirtualKeyboardManagerV1, virtual_keyboard_manager: ZwpVirtualKeyboardManagerV1,
virtual_pointer: ZwlrVirtualPointerV1, virtual_pointer: ZwlrVirtualPointerV1,
@ -282,7 +286,7 @@ impl InputProxyServiceState {
} }
} }
fn input_method_mut(&mut self) -> Option<&mut InputMethod> { const fn input_method_mut(&mut self) -> Option<&mut InputMethod> {
match self { match self {
Self::Running { input_method, .. } => Some(input_method), Self::Running { input_method, .. } => Some(input_method),
Self::Incomplete { .. } => None, Self::Incomplete { .. } => None,
@ -480,7 +484,6 @@ impl Dispatch<ZwpInputMethodV2, ()> for InputProxyServiceState {
_conn: &Connection, _conn: &Connection,
_qhandle: &QueueHandle<Self>, _qhandle: &QueueHandle<Self>,
) { ) {
panic!();
tracing::warn!("Unknown event received from ZwpInputMethodV2"); tracing::warn!("Unknown event received from ZwpInputMethodV2");
} }
} }

View file

@ -1,9 +1,12 @@
#![expect(unused)]
use dioxus::logger::tracing; use dioxus::logger::tracing;
fn is_key_string(s: &str) -> bool { fn is_key_string(s: &str) -> bool {
s.chars().all(|c| !c.is_control()) && s.chars().skip(1).all(|c| !c.is_ascii()) s.chars().all(|c| !c.is_control()) && s.chars().skip(1).all(|c| !c.is_ascii())
} }
#[expect(clippy::too_many_lines)]
pub fn web_key_to_linux_keycode(s: &str) -> Option<u32> { pub fn web_key_to_linux_keycode(s: &str) -> Option<u32> {
tracing::info!("Converting {s}"); tracing::info!("Converting {s}");
match s { match s {

View file

@ -57,16 +57,14 @@ impl MouseFilterBuffer {
let mut i = self.buffer.iter(); let mut i = self.buffer.iter();
let mut last = if let Some(it) = i.find(|it| it.time >= start_time) { let Some(mut last) = i.find(|it| it.time >= start_time) else {
it
} else {
return Vector2D::zero(); return Vector2D::zero();
}; };
let start_time = last.time; let start_time = last.time;
let mut last_time = last.time; let mut last_time = last.time;
for point in i { for point in i {
total_distance += (point.position - last.position); total_distance += point.position - last.position;
last = point; last = point;
last_time = point.time; last_time = point.time;
} }

View file

@ -1,4 +1,4 @@
use crate::components::{Controls, MouseArea}; use crate::components::Controls;
use dioxus::prelude::*; use dioxus::prelude::*;
/// The Home page component that will be rendered when the current route is `[Route::Home]` /// The Home page component that will be rendered when the current route is `[Route::Home]`

View file

@ -1,18 +0,0 @@
[package]
name = "cursor-mover-app"
version = "0.1.0"
edition = "2024"
license = "EUPL-1.2"
description = "A web-application that lets you remotely control your cursor."
repository = "https://forgejo.monalith.xyz/Nionidh/cursor-mover-app"
keywords = ["web", "application", "cursor", "control"]
categories = ["web-programming"]
readme = "README.md"
[dependencies]
tokio = { version = "1.49.0", features = ["full"] }
wayland-client = "0.31.12"
wayland-protocols-wlr = { version = "0.3.10", features = ["client"] }
[lints]
workspace = true

View file

@ -1 +0,0 @@
The main application

View file

@ -1,133 +0,0 @@
use std::{
alloc::System,
f64,
future::poll_fn,
time::{Duration, SystemTime, UNIX_EPOCH},
};
use tokio::{
select,
time::{self, Instant},
};
use wayland_client::{Connection, Dispatch, Proxy, QueueHandle, protocol::wl_registry};
use wayland_protocols_wlr::virtual_pointer::v1::client::{
zwlr_virtual_pointer_manager_v1::ZwlrVirtualPointerManagerV1,
zwlr_virtual_pointer_v1::ZwlrVirtualPointerV1,
};
#[derive(Default)]
struct AppData {
virtual_pointer: Option<ZwlrVirtualPointerV1>,
}
impl Dispatch<ZwlrVirtualPointerV1, ()> for AppData {
fn event(
state: &mut Self,
proxy: &ZwlrVirtualPointerV1,
event: <ZwlrVirtualPointerV1 as Proxy>::Event,
data: &(),
conn: &Connection,
qhandle: &QueueHandle<Self>,
) {
println!("VPointerData");
}
}
impl Dispatch<ZwlrVirtualPointerManagerV1, ()> for AppData {
fn event(
state: &mut Self,
proxy: &ZwlrVirtualPointerManagerV1,
event: <ZwlrVirtualPointerManagerV1 as Proxy>::Event,
data: &(),
conn: &Connection,
qhandle: &QueueHandle<Self>,
) {
println!("ZwlrEvent")
}
}
impl Dispatch<wl_registry::WlRegistry, ()> for AppData {
fn event(
app_data: &mut Self,
registry: &wl_registry::WlRegistry,
event: wl_registry::Event,
_: &(),
_: &Connection,
queue_handle: &QueueHandle<Self>,
) {
println!("WlRegistry Event");
if let wl_registry::Event::Global {
name,
interface,
version,
} = event
&& interface == "zwlr_virtual_pointer_manager_v1"
{
app_data.virtual_pointer.get_or_insert_with(|| {
let manager = registry.bind::<ZwlrVirtualPointerManagerV1, _, _>(
name,
version,
queue_handle,
(),
);
let pointer = manager.create_virtual_pointer(None, queue_handle, ());
println!("Virtual pointer manager created");
pointer
});
}
}
}
#[tokio::main]
async fn main() {
let connection = Connection::connect_to_env().unwrap();
let display = connection.display();
let mut event_queue = connection.new_event_queue();
let queue_handle = event_queue.handle();
let _registry = display.get_registry(&queue_handle, ());
println!("Advertized globals:");
let mut appdata = AppData::default();
event_queue.roundtrip(&mut appdata).unwrap();
let mut interval = time::interval(Duration::from_millis(15));
let start = Instant::now();
loop {
if Instant::now().duration_since(start) > Duration::from_secs(5) {
break;
}
select! {
poll = poll_fn(|cx| event_queue.poll_dispatch_pending(cx, &mut appdata)) => {
println!("Did the mash");
},
now = interval.tick() => {
if let Some(pointer) = appdata.virtual_pointer.as_mut() {
handle_pointer_motion(now, &pointer);
}
event_queue.flush().unwrap();
},
}
}
}
pub fn handle_pointer_motion(
time: Instant,
pointer: &ZwlrVirtualPointerV1,
) {
let time = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis();
let x = ((time as f64 / 1000.0 * f64::consts::PI).sin() * 10.0);
let y = ((time as f64 / 1000.0 * f64::consts::PI).cos() * 10.0);
pointer.motion(time as u32, x, y);
pointer.frame();
}

View file

@ -20,18 +20,21 @@ allow = [
"Unicode-3.0", "Unicode-3.0",
#"0BSD", #"0BSD",
#"Apache-2.0 WITH LLVM-exception", #"Apache-2.0 WITH LLVM-exception",
#"Apache-2.0", "Apache-2.0",
# "BSD-2-Clause", "BSD-2-Clause",
#"BSD-3-Clause", "BSD-3-Clause",
#"BSL-1.0", "BSL-1.0",
#"CC0-1.0", "CC0-1.0",
#"ISC", "ISC",
# "MIT-0", # "MIT-0",
"MIT", "MIT",
#"MPL-2.0", #"MPL-2.0",
#"Unicode-3.0", #"Unicode-3.0",
"Unlicense", "Unlicense",
#"Zlib", "Zlib",
#TODO Read up on that one
"CDLA-Permissive-2.0"
] ]
exceptions = [ exceptions = [
# { name = "unicode-ident", allow = ["Unicode-DFS-2016"] } # { name = "unicode-ident", allow = ["Unicode-DFS-2016"] }
@ -42,6 +45,20 @@ multiple-versions = "warn"
wildcards = "deny" wildcards = "deny"
# Certain crates that we do not want multiple versions of in the dependency tree # Certain crates that we do not want multiple versions of in the dependency tree
deny = [] deny = []
skip = [
{ crate = "windows-sys", reason = "dioxus still depends on an old version" },
{ crate = "tungstenite", reason = "dioxus internally depends on two versions" },
{ crate = "tokio-tungstenite", reason = "dioxus internally depends on two versions" },
{ crate = "thiserror-impl", reason = "dioxus internally depends on two versions" },
{ crate = "thiserror", reason = "dioxus internally depends on two versions" },
{ crate = "rustc-hash", reason = "dioxus internally depends on two versions" },
{ crate = "hashbrown", reason = "dioxus internally depends on two versions" },
{ crate = "getrandom", reason = "dioxus internally depends on two versions" },
{ crate = "convert_case", reason = "dioxus internally depends on two versions" },
{ crate = "const-serialize", reason = "dioxus internally depends on two versions" },
{ crate = "const-serialize-macro", reason = "dioxus internally depends on two versions" },
]
[sources] [sources]
unknown-registry = "warn" unknown-registry = "warn"

View file

@ -45,11 +45,11 @@
perSystem = perSystem =
{ {
config, #config,
self', #self',
inputs', inputs',
pkgs, pkgs,
system, #system,
... ...
}: }:
{ {
@ -125,8 +125,11 @@
cargo clippy --workspace --all-targets --all-features -- -D warnings cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo deny check all -D warnings cargo deny check all -D warnings
cargo fmt --all -- --check cargo fmt --all -- --check
cargo nextest run --workspace --all-targets --all-features --status-level all cargo nextest run --workspace --all-targets --all-features --status-level all --no-tests warn
cargo test
# TODO Doctests
echo "==== checkall success ===="
''; '';
# DO NOT ENABLE RUST because devenv messes up the ability # DO NOT ENABLE RUST because devenv messes up the ability
# to build rust-src # to build rust-src