diff --git a/.direnv/flake-inputs/bpq48947cigxsm1y1qzz3jxgka63a2dd-source b/.direnv/flake-inputs/bpq48947cigxsm1y1qzz3jxgka63a2dd-source deleted file mode 120000 index 2508b26..0000000 --- a/.direnv/flake-inputs/bpq48947cigxsm1y1qzz3jxgka63a2dd-source +++ /dev/null @@ -1 +0,0 @@ -/nix/store/bpq48947cigxsm1y1qzz3jxgka63a2dd-source \ No newline at end of file diff --git a/.direnv/flake-inputs/d8j9587fki8g877fjwm5a1l29f29xckm-source b/.direnv/flake-inputs/d8j9587fki8g877fjwm5a1l29f29xckm-source deleted file mode 120000 index 668a264..0000000 --- a/.direnv/flake-inputs/d8j9587fki8g877fjwm5a1l29f29xckm-source +++ /dev/null @@ -1 +0,0 @@ -/nix/store/d8j9587fki8g877fjwm5a1l29f29xckm-source \ No newline at end of file diff --git a/.direnv/flake-inputs/jh41lavwqi3qdwypiv713yipf3dxi3nx-source b/.direnv/flake-inputs/jh41lavwqi3qdwypiv713yipf3dxi3nx-source new file mode 120000 index 0000000..491c89e --- /dev/null +++ b/.direnv/flake-inputs/jh41lavwqi3qdwypiv713yipf3dxi3nx-source @@ -0,0 +1 @@ +/nix/store/jh41lavwqi3qdwypiv713yipf3dxi3nx-source \ No newline at end of file diff --git a/.direnv/flake-inputs/npfcdcbsyzm1cnh0jqqn3jf2wx49hgwp-source b/.direnv/flake-inputs/npfcdcbsyzm1cnh0jqqn3jf2wx49hgwp-source new file mode 120000 index 0000000..d0f2aea --- /dev/null +++ b/.direnv/flake-inputs/npfcdcbsyzm1cnh0jqqn3jf2wx49hgwp-source @@ -0,0 +1 @@ +/nix/store/npfcdcbsyzm1cnh0jqqn3jf2wx49hgwp-source \ No newline at end of file diff --git a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa index 563cf90..e2924f3 120000 --- a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa +++ b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa @@ -1 +1 @@ -/nix/store/4kycd6brixc98xkpd97bz3yx8ln96f08-my-project-env \ No newline at end of file +/nix/store/mq0i12vdknm9wx5w5n7md59xn1z15ag3-my-project-env \ No newline at end of file diff --git a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc index cd32ac5..6c7d79b 100644 --- a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc +++ b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc @@ -18,7 +18,7 @@ DEVENV_DOTFILE='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv' export DEVENV_DOTFILE DEVENV_FLAKE_SHELL='default' export DEVENV_FLAKE_SHELL -DEVENV_PROFILE='/nix/store/mpwh8x3hcqkkqcl8aah6c28m54mfdiw0-devenv-profile' +DEVENV_PROFILE='/nix/store/7wyfm3pdjlbl7747ghfqlvz2rfsf013l-devenv-profile' export DEVENV_PROFILE DEVENV_ROOT='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app' export DEVENV_ROOT @@ -31,7 +31,7 @@ export DEVENV_TASKS DEVENV_TASK_FILE='/nix/store/r04g3f96h64qk8xzpm7z0vd17w5b494d-tasks.json' export DEVENV_TASK_FILE HOSTTYPE='x86_64' -HOST_PATH='/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' +HOST_PATH='/nix/store/idl8schy78hxa05jyndj4nmb4wzgcln2-compiler-rt-libc-21.1.8/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 HOST_PATH IFS=' ' @@ -53,13 +53,13 @@ NIX_CC='/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' export NIX_CC NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu -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' +NIX_CFLAGS_COMPILE=' -frandom-seed=mq0i12vdkn -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev/include -isystem /nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev/include -isystem /nix/store/i5vppnbl2qnrvm4h5azwq83rr9gm7sdy-compiler-rt-libc-21.1.8-dev/include -isystem /nix/store/i5vppnbl2qnrvm4h5azwq83rr9gm7sdy-compiler-rt-libc-21.1.8-dev/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/vi6gkki39fqlm3fhvrgkgfpb2b4f4x89-libxkbcommon-1.11.0-dev/include -isystem /nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev/include -isystem /nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev/include -isystem /nix/store/i5vppnbl2qnrvm4h5azwq83rr9gm7sdy-compiler-rt-libc-21.1.8-dev/include -isystem /nix/store/i5vppnbl2qnrvm4h5azwq83rr9gm7sdy-compiler-rt-libc-21.1.8-dev/include' export NIX_CFLAGS_COMPILE NIX_ENFORCE_NO_NATIVE='1' export NIX_ENFORCE_NO_NATIVE NIX_HARDENING_ENABLE='bindnow format fortify fortify3 libcxxhardeningextensive libcxxhardeningfast pic relro stackclashprotection stackprotector strictoverflow zerocallusedregs' export NIX_HARDENING_ENABLE -NIX_LDFLAGS='-rpath /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/outputs/out/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib' +NIX_LDFLAGS='-rpath /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/outputs/out/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib -L/nix/store/xibf2ayyaljj1r7wgjf4n7n4vg5z8n2v-clang-21.1.8-lib/lib -L/nix/store/xibf2ayyaljj1r7wgjf4n7n4vg5z8n2v-clang-21.1.8-lib/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/4jp1vkr9gj5n3zbpp2xvkp8n3g56lpv0-binaryen-125/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib -L/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/lib -L/nix/store/xibf2ayyaljj1r7wgjf4n7n4vg5z8n2v-clang-21.1.8-lib/lib -L/nix/store/xibf2ayyaljj1r7wgjf4n7n4vg5z8n2v-clang-21.1.8-lib/lib' export NIX_LDFLAGS NIX_NO_SELF_RPATH='1' NIX_PKG_CONFIG_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' @@ -76,7 +76,7 @@ OLDPWD='' export OLDPWD OPTERR='1' OSTYPE='linux-gnu' -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' +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/6n5r46icm0bl55s9p5z2zgcv93m39r5l-clang-wrapper-21.1.8/bin:/nix/store/rm8isfm4fd14is3fv3h4m459rbiy91bx-clang-21.1.8/bin:/nix/store/0bdqq2z98kg2hfn3k60if6pb5fd5p10h-glibc-2.42-47-bin/bin:/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin:/nix/store/m0rbbdfsbkdqpr6bs621jwi21ra1br4g-binutils-wrapper-2.44/bin:/nix/store/47mn80zqpygykqailwzw8zlag4cgl75q-binutils-2.44/bin:/nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev/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/i6ppbrlpp6yki8qvka7nyv091xa8dchx-binutils-wrapper-2.44/bin:/nix/store/idl8schy78hxa05jyndj4nmb4wzgcln2-compiler-rt-libc-21.1.8/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 PC_CONFIG_FILES='/nix/store/f90qf91rzv18zpk3y4yf5saigawqw9nm-process-compose.yaml' export PC_CONFIG_FILES @@ -101,7 +101,7 @@ STRINGS='strings' export STRINGS STRIP='strip' export STRIP -XDG_DATA_DIRS='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0/share:/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/share:/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/share:/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2/share:/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2/share' +XDG_DATA_DIRS='/nix/store/xgixy092whsar7fwm9lmcn4mv9kqn983-process-compose-1.87.0/share:/nix/store/fwhb4yynphdqiqb48mlh0v5wlwz50s22-rust-mixed/share:/nix/store/ni6pwnn5cg4mwm2fkmqrm2bzjvj16b64-libxkbcommon-1.11.0/share:/nix/store/rm8isfm4fd14is3fv3h4m459rbiy91bx-clang-21.1.8/share:/nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2/share:/nix/store/c2p7haf4zzkbrir9zs662r68c5dmylbq-patchelf-0.15.2/share' export XDG_DATA_DIRS __structuredAttrs='' export __structuredAttrs @@ -151,8 +151,8 @@ export dontAddDisableDepTrack declare -a envBuildBuildHooks=() declare -a envBuildHostHooks=() declare -a envBuildTargetHooks=() -declare -a envHostHostHooks=('pkgConfigWrapper_addPkgConfigPath' 'ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) -declare -a envHostTargetHooks=('pkgConfigWrapper_addPkgConfigPath' 'ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) +declare -a envHostHostHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' 'pkgConfigWrapper_addPkgConfigPath' 'ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) +declare -a envHostTargetHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' 'pkgConfigWrapper_addPkgConfigPath' 'ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) declare -a envTargetTargetHooks=() declare -a fixupOutputHooks=('if [ -z "${dontPatchELF-}" ]; then patchELF "$prefix"; fi' 'if [[ -z "${noAuditTmpdir-}" && -e "$prefix" ]]; then auditTmpdir "$prefix"; fi' 'if [ -z "${dontGzipMan-}" ]; then compressManPages "$prefix"; fi' '_moveLib64' '_moveSbin' '_moveSystemdUserUnits' 'patchShebangsAuto' '_pruneLibtoolFiles' '_doStrip' ) hardeningDisable='' @@ -162,7 +162,7 @@ mesonFlags='' export mesonFlags name='my-project-env' export name -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' +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/6n5r46icm0bl55s9p5z2zgcv93m39r5l-clang-wrapper-21.1.8 /nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev /nix/store/rvp7qlpf5jqvdckjy1afjb6aha6j8dxg-pkg-config-wrapper-0.29.2' export nativeBuildInputs out='/home/nionidh/projects/rust-tomfoolery/cursor-mover-app/outputs/out' export out @@ -183,9 +183,9 @@ phases='buildPhase' export phases pkg='/nix/store/a245z3cvf9x9sn0xlk6k8j9xhxbhda1z-gcc-wrapper-15.2.0' declare -a pkgsBuildBuild=() -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 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/6n5r46icm0bl55s9p5z2zgcv93m39r5l-clang-wrapper-21.1.8' '/nix/store/m0rbbdfsbkdqpr6bs621jwi21ra1br4g-binutils-wrapper-2.44' '/nix/store/rszqwjpka3yy6x72d4n3j12a3gxkqbpn-clang-21.1.8-dev' '/nix/store/xibf2ayyaljj1r7wgjf4n7n4vg5z8n2v-clang-21.1.8-lib' '/nix/store/rm8isfm4fd14is3fv3h4m459rbiy91bx-clang-21.1.8' '/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 pkgsHostHost=() +declare -a pkgsHostHost=('/nix/store/i5vppnbl2qnrvm4h5azwq83rr9gm7sdy-compiler-rt-libc-21.1.8-dev' '/nix/store/idl8schy78hxa05jyndj4nmb4wzgcln2-compiler-rt-libc-21.1.8' ) declare -a pkgsHostTarget=() declare -a pkgsTargetTarget=() declare -a postFixupHooks=('noBrokenSymlinksInAllOutputs' '_makeSymlinksRelative' '_multioutPropagateDev' ) @@ -231,9 +231,9 @@ if [ ! type -p direnv &>/dev/null && -f .envrc ]; then fi mkdir -p "$DEVENV_STATE" -if [ ! -L "$DEVENV_DOTFILE/profile" ] || [ "$(/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin/readlink $DEVENV_DOTFILE/profile)" != "/nix/store/mpwh8x3hcqkkqcl8aah6c28m54mfdiw0-devenv-profile" ] +if [ ! -L "$DEVENV_DOTFILE/profile" ] || [ "$(/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9/bin/readlink $DEVENV_DOTFILE/profile)" != "/nix/store/7wyfm3pdjlbl7747ghfqlvz2rfsf013l-devenv-profile" ] then - ln -snf /nix/store/mpwh8x3hcqkkqcl8aah6c28m54mfdiw0-devenv-profile "$DEVENV_DOTFILE/profile" + ln -snf /nix/store/7wyfm3pdjlbl7747ghfqlvz2rfsf013l-devenv-profile "$DEVENV_DOTFILE/profile" 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 @@ -241,10 +241,10 @@ mkdir -p /tmp/devenv-b51d30d ln -snf /tmp/devenv-b51d30d /home/nionidh/projects/rust-tomfoolery/cursor-mover-app/.devenv/run -export PATH=/nix/store/f7qg5ng20s1mi9438padw0iy5gx3pci1-devenv-flake-compat/bin:$PATH +export PATH=/nix/store/c0xxs40qc5szabj2yiimh0cziknji84q-devenv-flake-compat/bin:$PATH if [ -z "${DEVENV_SKIP_TASKS:-}" ]; then - /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 $? + /nix/store/vjc136ikp6is5m8jv4r5s24gwcfl2naf-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 source "$DEVENV_DOTFILE/load-exports" fi diff --git a/Cargo.lock b/Cargo.lock index fbe4a06..375aa93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "aho-corasick" version = "1.1.4" @@ -57,7 +63,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -68,7 +74,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -87,6 +93,29 @@ dependencies = [ "tungstenite 0.27.0", ] +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -187,7 +216,7 @@ checksum = "604fde5e028fea851ce1d8570bbdc034bec850d157f7569d10f347d06808c05c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -202,6 +231,34 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "bindgen" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 1.0.109", + "which", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "bitflags" version = "2.11.0" @@ -211,6 +268,12 @@ dependencies = [ "serde_core", ] +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -220,6 +283,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + [[package]] name = "bumpalo" version = "3.20.2" @@ -241,6 +313,31 @@ dependencies = [ "serde", ] +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.11.0", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + [[package]] name = "cc" version = "1.2.56" @@ -257,6 +354,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + [[package]] name = "cfb" version = "0.7.3" @@ -268,6 +374,16 @@ dependencies = [ "uuid", ] +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + [[package]] name = "cfg-if" version = "1.0.4" @@ -300,7 +416,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -330,6 +446,46 @@ dependencies = [ "half", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading 0.8.9", +] + +[[package]] +name = "cocoa" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad36507aeb7e16159dfe68db81ccc27571c3ccd4b76fb2fb72fc59e7a4b1b64c" +dependencies = [ + "bitflags 2.11.0", + "block", + "cocoa-foundation", + "core-foundation 0.10.1", + "core-graphics", + "foreign-types 0.5.0", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" +dependencies = [ + "bitflags 2.11.0", + "block", + "core-foundation 0.10.1", + "core-graphics-types", + "objc", +] + [[package]] name = "combine" version = "4.6.7" @@ -368,7 +524,7 @@ checksum = "4f160aad86b4343e8d4e261fee9965c3005b2fd6bc117d172ab65948779e4acf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -379,7 +535,7 @@ checksum = "42571ed01eb46d2e1adcf99c8ca576f081e46f2623d13500eba70d1d99a4c439" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -417,6 +573,12 @@ dependencies = [ "charset", ] +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "convert_case" version = "0.8.0" @@ -474,12 +636,46 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core-graphics" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" +dependencies = [ + "bitflags 2.11.0", + "core-foundation 0.10.1", + "core-graphics-types", + "foreign-types 0.5.0", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.11.0", + "core-foundation 0.10.1", + "libc", +] + [[package]] name = "cpufeatures" version = "0.2.17" @@ -489,6 +685,24 @@ dependencies = [ "libc", ] +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -511,21 +725,56 @@ dependencies = [ "typenum", ] +[[package]] +name = "cssparser" +version = "0.29.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93d03419cb5950ccfd3daf3ff1c7a36ace64609a1a8746d493df1ca0afde0fa" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "matches", + "phf 0.10.1", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.117", +] + [[package]] name = "cursor-move-webapp" version = "0.1.0" dependencies = [ "dioxus", - "dioxus-html", "memfile", - "rustix", + "rustix 1.1.4", "serde", "tokio", - "wasmtimer", "wayland-client", "wayland-protocols", "wayland-protocols-misc", "wayland-protocols-wlr", + "xkb", +] + +[[package]] +name = "cursor-mover-app" +version = "0.1.0" +dependencies = [ + "tokio", + "wayland-client", + "wayland-protocols-wlr", ] [[package]] @@ -548,7 +797,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -559,7 +808,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -591,6 +840,19 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "derive_more" +version = "0.99.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.117", +] + [[package]] name = "derive_more" version = "2.1.1" @@ -610,7 +872,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 2.0.117", "unicode-xid", ] @@ -636,6 +898,7 @@ dependencies = [ "dioxus-config-macros", "dioxus-core", "dioxus-core-macro", + "dioxus-desktop", "dioxus-devtools", "dioxus-document", "dioxus-fullstack", @@ -735,7 +998,7 @@ dependencies = [ "dioxus-rsx", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -744,6 +1007,61 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfc4b8cdc440a55c17355542fc2089d97949bba674255d84cac77805e1db8c9f" +[[package]] +name = "dioxus-desktop" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e6ec66749d1556636c5b4f661495565c155a7f78a46d4d007d7478c6bdc288c" +dependencies = [ + "async-trait", + "base64", + "bytes", + "cocoa", + "core-foundation 0.10.1", + "dioxus-asset-resolver", + "dioxus-cli-config", + "dioxus-core", + "dioxus-devtools", + "dioxus-document", + "dioxus-history", + "dioxus-hooks", + "dioxus-html", + "dioxus-interpreter-js", + "dioxus-signals", + "dunce", + "futures-channel", + "futures-util", + "generational-box", + "global-hotkey", + "infer", + "jni", + "lazy-js-bundle", + "libc", + "muda", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "objc_id", + "percent-encoding", + "rand 0.9.2", + "rfd", + "rustc-hash 2.1.1", + "serde", + "serde_json", + "signal-hook", + "slab", + "subtle", + "tao", + "thiserror 2.0.18", + "tokio", + "tracing", + "tray-icon", + "tungstenite 0.27.0", + "webbrowser", + "wry", +] + [[package]] name = "dioxus-devtools" version = "0.7.3" @@ -812,7 +1130,7 @@ dependencies = [ "const-str", "const_format", "content_disposition", - "derive_more", + "derive_more 2.1.1", "dioxus-asset-resolver", "dioxus-cli-config", "dioxus-core", @@ -897,7 +1215,7 @@ dependencies = [ "convert_case 0.8.0", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "xxhash-rust", ] @@ -963,7 +1281,7 @@ dependencies = [ "convert_case 0.8.0", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -978,6 +1296,7 @@ dependencies = [ "js-sys", "lazy-js-bundle", "rustc-hash 2.1.1", + "serde", "sledgehammer_bindgen", "sledgehammer_utils", "wasm-bindgen", @@ -1058,7 +1377,7 @@ dependencies = [ "quote", "sha2", "slab", - "syn", + "syn 2.0.117", ] [[package]] @@ -1071,7 +1390,7 @@ dependencies = [ "proc-macro2-diagnostics", "quote", "rustversion", - "syn", + "syn 2.0.117", ] [[package]] @@ -1181,7 +1500,7 @@ dependencies = [ "convert_case 0.8.0", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1218,6 +1537,45 @@ dependencies = [ "web-sys", ] +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.11.0", + "block2", + "libc", + "objc2", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -1226,7 +1584,30 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -1244,12 +1625,39 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + [[package]] name = "dunce" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + [[package]] name = "encoding_rs" version = "0.8.35" @@ -1277,7 +1685,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1306,24 +1714,107 @@ dependencies = [ "serde", ] +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "foldhash" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.2.2" @@ -1333,6 +1824,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + [[package]] name = "futures" version = "0.3.32" @@ -1389,7 +1890,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -1421,6 +1922,100 @@ dependencies = [ "slab", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + [[package]] name = "generational-box" version = "0.7.3" @@ -1441,6 +2036,27 @@ dependencies = [ "version_check", ] +[[package]] +name = "gethostname" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +dependencies = [ + "rustix 1.1.4", + "windows-link 0.2.1", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "getrandom" version = "0.2.17" @@ -1450,7 +2066,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -1468,6 +2084,121 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", + "wasip3", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.11.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "global-hotkey" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9247516746aa8e53411a0db9b62b0e24efbcf6a76e0ba73e5a91b512ddabed7" +dependencies = [ + "crossbeam-channel", + "keyboard-types", + "objc2", + "objc2-app-kit", + "once_cell", + "thiserror 2.0.18", + "windows-sys 0.59.0", + "x11rb", + "xkeysym", +] + [[package]] name = "gloo-net" version = "0.6.0" @@ -1514,6 +2245,69 @@ dependencies = [ "web-sys", ] +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "h2" version = "0.4.13" @@ -1550,6 +2344,15 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] + [[package]] name = "hashbrown" version = "0.16.1" @@ -1558,7 +2361,7 @@ checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.2.0", ] [[package]] @@ -1585,6 +2388,39 @@ dependencies = [ "http", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "home" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "html5ever" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" +dependencies = [ + "log", + "mac", + "markup5ever", + "match_token", +] + [[package]] name = "http" version = "1.4.0" @@ -1714,7 +2550,7 @@ dependencies = [ "js-sys", "log", "wasm-bindgen", - "windows-core", + "windows-core 0.62.2", ] [[package]] @@ -1807,6 +2643,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + [[package]] name = "ident_case" version = "1.0.1" @@ -1842,6 +2684,8 @@ checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", + "serde", + "serde_core", ] [[package]] @@ -1884,6 +2728,29 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + [[package]] name = "jni" version = "0.21.1" @@ -1922,8 +2789,21 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" dependencies = [ - "bitflags", + "bitflags 2.11.0", "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.8-speedreader" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" +dependencies = [ + "cssparser", + "html5ever", + "indexmap", + "selectors", ] [[package]] @@ -1938,12 +2818,58 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading 0.7.4", + "once_cell", +] + [[package]] name = "libc" version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + [[package]] name = "libloading" version = "0.8.9" @@ -1951,9 +2877,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" dependencies = [ "cfg-if", - "windows-link", + "windows-link 0.2.1", ] +[[package]] +name = "libredox" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" +dependencies = [ + "bitflags 2.11.0", + "libc", +] + +[[package]] +name = "libxdo" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00333b8756a3d28e78def82067a377de7fa61b24909000aeaa2b446a948d14db" +dependencies = [ + "libxdo-sys", +] + +[[package]] +name = "libxdo-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db23b9e7e2b7831bbd8aac0bbeeeb7b68cbebc162b227e7052e8e55829a09212" +dependencies = [ + "libc", + "x11", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -2008,6 +2969,12 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + [[package]] name = "macro-string" version = "0.1.4" @@ -2016,7 +2983,16 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", ] [[package]] @@ -2042,7 +3018,7 @@ dependencies = [ "dioxus-cli-config", "dioxus-core-types", "serde", - "winnow", + "winnow 0.7.14", ] [[package]] @@ -2056,7 +3032,32 @@ dependencies = [ "manganis-core", "proc-macro2", "quote", - "syn", + "syn 2.0.117", +] + +[[package]] +name = "markup5ever" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" +dependencies = [ + "log", + "phf 0.11.3", + "phf_codegen 0.11.3", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "match_token" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", ] [[package]] @@ -2068,6 +3069,12 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + [[package]] name = "matchit" version = "0.8.4" @@ -2086,7 +3093,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad38eb12aea514a0466ea40a80fd8cc83637065948eb4a426e4aa46261175227" dependencies = [ - "rustix", + "rustix 1.1.4", ] [[package]] @@ -2107,6 +3114,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + [[package]] name = "mime" version = "0.3.17" @@ -2123,6 +3139,22 @@ dependencies = [ "unicase", ] +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + [[package]] name = "mio" version = "1.1.1" @@ -2130,10 +3162,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.61.2", ] +[[package]] +name = "muda" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c1738382f66ed56b3b9c8119e794a2e23148ac8ea214eda86622d4cb9d415a" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "libxdo", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png", + "thiserror 2.0.18", + "windows-sys 0.60.2", +] + [[package]] name = "multer" version = "3.1.0" @@ -2151,18 +3204,35 @@ dependencies = [ "version_check", ] +[[package]] +name = "native-tls" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "ndk" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags", + "bitflags 2.11.0", "jni-sys", "log", "ndk-sys", "num_enum", - "raw-window-handle", + "raw-window-handle 0.6.2", "thiserror 1.0.69", ] @@ -2181,6 +3251,28 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "num-conv" version = "0.2.0" @@ -2212,10 +3304,125 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn", + "syn 2.0.117", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.11.0", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.11.0", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.11.0", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.11.0", + "block2", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.11.0", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.11.0", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", ] [[package]] @@ -2224,6 +3431,81 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "openssl" +version = "0.10.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +dependencies = [ + "bitflags 2.11.0", + "cfg-if", + "foreign-types 0.3.2", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "openssl-sys" +version = "0.9.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + [[package]] name = "parking_lot" version = "0.12.5" @@ -2244,15 +3526,141 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-link", + "windows-link 0.2.1", ] +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_shared 0.8.0", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_macros", + "phf_shared 0.10.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared 0.11.3", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher 0.3.11", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher 1.0.2", +] + [[package]] name = "pin-project" version = "1.1.11" @@ -2270,7 +3678,7 @@ checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2291,6 +3699,25 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "pollster" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" + [[package]] name = "potential_utf" version = "0.1.4" @@ -2315,15 +3742,81 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.117", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + [[package]] name = "proc-macro-crate" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ - "toml_edit", + "toml_edit 0.23.10+spec-1.0.0", ] +[[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-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + [[package]] name = "proc-macro2" version = "1.0.106" @@ -2341,7 +3834,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "version_check", ] @@ -2399,7 +3892,7 @@ dependencies = [ "bytes", "getrandom 0.3.4", "lru-slab", - "rand", + "rand 0.9.2", "ring", "rustc-hash 2.1.1", "rustls", @@ -2440,14 +3933,59 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + [[package]] name = "rand" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "rand_chacha", - "rand_core", + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", ] [[package]] @@ -2457,7 +3995,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", ] [[package]] @@ -2469,6 +4025,30 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -2481,7 +4061,30 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags", + "bitflags 2.11.0", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.18", +] + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", ] [[package]] @@ -2545,6 +4148,30 @@ dependencies = [ "webpki-roots", ] +[[package]] +name = "rfd" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20dafead71c16a34e1ff357ddefc8afc11e7d51d6d2b9fbd07eaa48e3e540220" +dependencies = [ + "block2", + "dispatch2", + "js-sys", + "libc", + "log", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "percent-encoding", + "pollster", + "raw-window-handle 0.6.2", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.61.2", +] + [[package]] name = "ring" version = "0.17.14" @@ -2580,16 +4207,29 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.11.0", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + [[package]] name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags", + "bitflags 2.11.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.12.1", "windows-sys 0.61.2", ] @@ -2649,12 +4289,62 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags 2.11.0", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "selectors" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c37578180969d00692904465fb7f6b3d50b9a2b952b87c23d0e2e5cb5013416" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more 0.99.20", + "fxhash", + "log", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc", + "smallvec", +] + [[package]] name = "semver" version = "1.0.27" @@ -2708,7 +4398,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2754,7 +4444,16 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", ] [[package]] @@ -2769,6 +4468,16 @@ dependencies = [ "serde", ] +[[package]] +name = "servo_arc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52aa42f8fdf0fed91e5ce7f23d8138441002fa31dca008acf47e6fd4721f741" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + [[package]] name = "sha1" version = "0.10.6" @@ -2806,6 +4515,44 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "siphasher" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" + [[package]] name = "slab" version = "0.4.12" @@ -2829,7 +4576,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb251b407f50028476a600541542b605bb864d35d9ee1de4f6cab45d88475e6d" dependencies = [ "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2867,6 +4614,32 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + [[package]] name = "spin" version = "0.9.8" @@ -2879,6 +4652,31 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared 0.11.3", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" +dependencies = [ + "phf_generator 0.11.3", + "phf_shared 0.11.3", + "proc-macro2", + "quote", +] + [[package]] name = "subsecond" version = "0.7.3" @@ -2887,7 +4685,7 @@ checksum = "8438668e545834d795d04c4335aafc332ce046106521a29f0a5c6501de34187c" dependencies = [ "js-sys", "libc", - "libloading", + "libloading 0.8.9", "memfd", "memmap2", "serde", @@ -2913,6 +4711,17 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[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.117" @@ -2941,7 +4750,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -2950,8 +4759,8 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags", - "core-foundation", + "bitflags 2.11.0", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -2965,6 +4774,101 @@ dependencies = [ "libc", ] +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.34.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" +dependencies = [ + "bitflags 2.11.0", + "block2", + "core-foundation 0.10.1", + "core-graphics", + "crossbeam-channel", + "dispatch", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "once_cell", + "parking_lot", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "scopeguard", + "tao-macros", + "unicode-segmentation", + "url", + "windows", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tempfile" +version = "3.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" +dependencies = [ + "fastrand", + "getrandom 0.4.1", + "once_cell", + "rustix 1.1.4", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -2991,7 +4895,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3002,7 +4906,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3079,7 +4983,9 @@ dependencies = [ "bytes", "libc", "mio", + "parking_lot", "pin-project-lite", + "signal-hook-registry", "socket2", "tokio-macros", "windows-sys 0.61.2", @@ -3093,7 +4999,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3157,6 +5063,27 @@ dependencies = [ "tokio", ] +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + [[package]] name = "toml_datetime" version = "0.7.5+spec-1.1.0" @@ -3166,6 +5093,30 @@ dependencies = [ "serde_core", ] +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + [[package]] name = "toml_edit" version = "0.23.10+spec-1.0.0" @@ -3173,9 +5124,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", - "toml_datetime", + "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", - "winnow", + "winnow 0.7.14", ] [[package]] @@ -3184,7 +5135,7 @@ version = "1.0.9+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" dependencies = [ - "winnow", + "winnow 0.7.14", ] [[package]] @@ -3209,7 +5160,7 @@ version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags", + "bitflags 2.11.0", "bytes", "futures-core", "futures-util", @@ -3263,7 +5214,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3311,6 +5262,27 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "tray-icon" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e85aa143ceb072062fc4d6356c1b520a51d636e7bc8e77ec94be3608e5e80c" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png", + "thiserror 2.0.18", + "windows-sys 0.60.2", +] + [[package]] name = "try-lock" version = "0.2.5" @@ -3328,7 +5300,9 @@ dependencies = [ "http", "httparse", "log", - "rand", + "native-tls", + "rand 0.9.2", + "rustls", "sha1", "thiserror 2.0.18", "utf-8", @@ -3345,7 +5319,7 @@ dependencies = [ "http", "httparse", "log", - "rand", + "rand 0.9.2", "sha1", "thiserror 2.0.18", "utf-8", @@ -3421,6 +5395,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + [[package]] name = "version_check" version = "0.9.5" @@ -3465,9 +5451,15 @@ checksum = "59195a1db0e95b920366d949ba5e0d3fc0e70b67c09be15ce5abb790106b0571" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -3483,6 +5475,15 @@ dependencies = [ "wit-bindgen", ] +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.114" @@ -3529,7 +5530,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.117", "wasm-bindgen-shared", ] @@ -3542,6 +5543,28 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap", + "wasm-encoder", + "wasmparser", +] + [[package]] name = "wasm-streams" version = "0.4.2" @@ -3556,17 +5579,15 @@ dependencies = [ ] [[package]] -name = "wasmtimer" -version = "0.4.3" +name = "wasmparser" +version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c598d6b99ea013e35844697fc4670d08339d5cda15588f193c6beedd12f644b" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "futures", - "js-sys", - "parking_lot", - "pin-utils", - "slab", - "wasm-bindgen", + "bitflags 2.11.0", + "hashbrown 0.15.5", + "indexmap", + "semver", ] [[package]] @@ -3577,7 +5598,7 @@ checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" dependencies = [ "cc", "downcast-rs", - "rustix", + "rustix 1.1.4", "smallvec", "wayland-sys", ] @@ -3588,8 +5609,8 @@ version = "0.31.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e6faa537fbb6c186cb9f1d41f2f811a4120d1b57ec61f50da451a0c5122bec" dependencies = [ - "bitflags", - "rustix", + "bitflags 2.11.0", + "rustix 1.1.4", "wayland-backend", "wayland-scanner", ] @@ -3600,7 +5621,7 @@ version = "0.32.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baeda9ffbcfc8cd6ddaade385eaf2393bd2115a69523c735f12242353c3df4f3" dependencies = [ - "bitflags", + "bitflags 2.11.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -3612,7 +5633,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791c58fdeec5406aa37169dd815327d1e47f334219b523444bc26d70ceb4c34e" dependencies = [ - "bitflags", + "bitflags 2.11.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -3625,7 +5646,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9597cdf02cf0c34cd5823786dce6b5ae8598f05c2daf5621b6e178d4f7345f3" dependencies = [ - "bitflags", + "bitflags 2.11.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -3672,6 +5693,66 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webbrowser" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f00bb839c1cf1e3036066614cbdcd035ecf215206691ea646aa3c60a24f68f2" +dependencies = [ + "core-foundation 0.10.1", + "jni", + "log", + "ndk-context", + "objc2", + "objc2-foundation", + "url", + "web-sys", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + [[package]] name = "webpki-roots" version = "1.0.6" @@ -3681,6 +5762,70 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows", + "windows-core 0.61.2", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.18", + "windows", + "windows-core 0.61.2", +] + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.44", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + [[package]] name = "winapi-util" version = "0.1.11" @@ -3690,6 +5835,47 @@ dependencies = [ "windows-sys 0.61.2", ] +[[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" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + [[package]] name = "windows-core" version = "0.62.2" @@ -3698,9 +5884,20 @@ checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", ] [[package]] @@ -3711,7 +5908,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -3722,24 +5919,49 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + [[package]] name = "windows-registry" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -3748,7 +5970,16 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link", + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -3757,7 +5988,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -3778,6 +6009,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.60.2" @@ -3793,7 +6033,7 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link", + "windows-link 0.2.1", ] [[package]] @@ -3833,7 +6073,7 @@ version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link", + "windows-link 0.2.1", "windows_aarch64_gnullvm 0.53.1", "windows_aarch64_msvc 0.53.1", "windows_i686_gnu 0.53.1", @@ -3844,6 +6084,24 @@ dependencies = [ "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -3982,6 +6240,15 @@ version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + [[package]] name = "winnow" version = "0.7.14" @@ -3996,6 +6263,88 @@ name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.0", + "indexmap", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] [[package]] name = "writeable" @@ -4003,6 +6352,115 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +[[package]] +name = "wry" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" +dependencies = [ + "base64", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dpi", + "dunce", + "gtk", + "html5ever", + "http", + "javascriptcore-rs", + "jni", + "kuchikiki", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle 0.6.2", + "sha2", + "soup3", + "tao-macros", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows", + "windows-core 0.61.2", + "windows-version", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +dependencies = [ + "gethostname", + "rustix 1.1.4", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + +[[package]] +name = "xkb" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2819e26f5465d84288b45c72864c40d55ac0684daea1973494caa3b2cea2e0f" +dependencies = [ + "bitflags 1.3.2", + "libc", + "xkbcommon-sys", +] + +[[package]] +name = "xkbcommon-sys" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f7dbb61bc8fd714a64f750e9c259952f079afe701256dd2118602c0ae15c90" +dependencies = [ + "bindgen", + "libc", + "pkg-config", +] + +[[package]] +name = "xkeysym" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" + [[package]] name = "xxhash-rust" version = "0.8.15" @@ -4028,7 +6486,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "synstructure", ] @@ -4049,7 +6507,7 @@ checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] @@ -4069,7 +6527,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", "synstructure", ] @@ -4109,7 +6567,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.117", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 88750d3..37befb8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,21 +1,19 @@ [workspace] -members = ["crates/cursor-move-webapp"] +members = ["crates/cursor-mover-app" +, "crates/cursor-move-webapp"] resolver = "2" [workspace.dependencies] the-lib = {path="crates/the-lib", version="0.0.0"} [workspace.lints.clippy] -all = {level = "warn", priority = -1} -correctness = {level = "deny", priority = -1} -suspicious = {level = "warn", priority = -1} -complexity = {level = "warn", priority = -1} -perf = {level = "warn", priority = -1} -style = {level = "warn", priority = -1} -pedantic = {level = "warn", priority = -1} -restriction = {level = "allow", priority = -1} -cargo = {level = "warn", priority = -1} -nursery = {level = "warn", priority = -1} - -# cargo deny takes care of that -multiple-crate-versions = "allow" +all = "warn" +correctness = "deny" +suspicious = "warn" +complexity = "warn" +perf = "warn" +style = "warn" +pedantic = "warn" +restriction = "allow" +cargo = "warn" +nursery = "warn" diff --git a/crates/cursor-move-webapp/Cargo.toml b/crates/cursor-move-webapp/Cargo.toml index 3cb6933..9b8fdf2 100644 --- a/crates/cursor-move-webapp/Cargo.toml +++ b/crates/cursor-move-webapp/Cargo.toml @@ -3,27 +3,20 @@ name = "cursor-move-webapp" version = "0.1.0" authors = ["Mona Mayrhofer "] 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 [dependencies] dioxus = { version = "0.7.3", features = ["router", "fullstack", "logger"] } -dioxus-html = { version = "0.7.3", features = ["serialize"] } serde = { version = "1.0.228", features = ["derive"] } -wasmtimer = "0.4.3" - wayland-client = { version = "0.31.12", optional = true } wayland-protocols-wlr = { version = "0.3.10", features = ["client"], optional = true } tokio = {version = "1.49.0", optional = true} -rustix = { version = "1.1.4", optional = true, features = ["time"], default-features = false } +rustix = { version = "1.1.4", optional = true, features = ["time"] } wayland-protocols-misc = { version = "0.3.10", features = ["client"], 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} [features] @@ -31,9 +24,9 @@ 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 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 -#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 -#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 server = ["dioxus/server", "dep:wayland-client", @@ -42,6 +35,7 @@ server = ["dioxus/server", "dep:wayland-protocols", "dep:tokio", "dep:rustix", + "dep:xkb", "dep:memfile" ] diff --git a/crates/cursor-move-webapp/assets/styling/controls.module.css b/crates/cursor-move-webapp/assets/styling/controls.module.css deleted file mode 100644 index 20c62df..0000000 --- a/crates/cursor-move-webapp/assets/styling/controls.module.css +++ /dev/null @@ -1,3 +0,0 @@ -.controls { - flex-grow: 1; -} diff --git a/crates/cursor-move-webapp/assets/styling/keyboard_area.module.css b/crates/cursor-move-webapp/assets/styling/keyboard_area.module.css deleted file mode 100644 index 8362b83..0000000 --- a/crates/cursor-move-webapp/assets/styling/keyboard_area.module.css +++ /dev/null @@ -1,8 +0,0 @@ -.keyboard-area { - height: 48px; - - input { - width: 100%; - height: 100%; - } -} diff --git a/crates/cursor-move-webapp/assets/styling/main.css b/crates/cursor-move-webapp/assets/styling/main.css index 814f086..07bd1dc 100644 --- a/crates/cursor-move-webapp/assets/styling/main.css +++ b/crates/cursor-move-webapp/assets/styling/main.css @@ -3,9 +3,8 @@ body, #main { margin: 0; padding: 0; - min-height: 100dvh; - width: 100dvw; - overflow: hidden; + min-height: 100vh; + width: 100vw; } #main { diff --git a/crates/cursor-move-webapp/assets/styling/mouse_area.module.css b/crates/cursor-move-webapp/assets/styling/mouse_area.module.css index 62e637c..2be2e3a 100644 --- a/crates/cursor-move-webapp/assets/styling/mouse_area.module.css +++ b/crates/cursor-move-webapp/assets/styling/mouse_area.module.css @@ -1,6 +1,5 @@ .mouse-area { - background: radial-gradient(#0004 15%, transparent 20%), white; - background-size: 15px 15px; + background-color: white; touch-action: none; flex-grow: 1; diff --git a/crates/cursor-move-webapp/src/components/controls.rs b/crates/cursor-move-webapp/src/components/controls.rs deleted file mode 100644 index 70083af..0000000 --- a/crates/cursor-move-webapp/src/components/controls.rs +++ /dev/null @@ -1,96 +0,0 @@ -use dioxus::{ - fullstack::{CborEncoding, WebSocketOptions, Websocket, extract::State, use_websocket}, - html::input_data::MouseButton, - logger::tracing, - prelude::*, -}; -use serde::{Deserialize, Serialize}; - -use crate::components::{KeyboardArea, MouseArea}; - -#[component] -pub fn Controls() -> Element { - #[css_module("/assets/styling/controls.module.css")] - struct Styles; - - let mut socket = use_websocket(move || mouse_move(WebSocketOptions::new())); - - use_future(move || async move { - loop { - // Wait for the socket to connect - _ = socket.connect().await; - - // Loop poll with recv. Throws an error when the connection closes, making it possible - // to run code before the socket re-connects when the name input changes - while let Ok(message) = socket.recv().await { - tracing::info!("Received message: {:?}", message); - } - } - }); - - let event_handler = use_callback(move |evt| { - spawn(async move { - _ = socket.send(evt).await; - }); - }); - - rsx! { - div { - class: Styles::controls, - MouseArea { onevent: event_handler } - KeyboardArea { onevent: event_handler } - } - } -} - -#[derive(Serialize, Deserialize, Debug)] -pub enum ClientEvent { - MouseMove { dx: f64, dy: f64 }, - MouseScroll { dx: f64, dy: f64 }, - Click { button: MouseButton }, - KeyPressEvent { key: String }, - TextInputStartEvent, - TextInputEvent { text: String }, - TextInputDoneEvent { text: String }, -} - -#[derive(Serialize, Deserialize, Debug)] -enum ServerEvent { - Ping, -} - -#[expect(clippy::unused_async)] -#[get("/api/mouse_move_ws", mouse_service: State)] -async fn mouse_move( - options: WebSocketOptions -) -> Result> { - Ok(options.on_upgrade(move |mut socket| async move { - _ = socket.send(ServerEvent::Ping).await; - - while let Ok(event) = socket.recv().await { - match event { - ClientEvent::MouseMove { dx, dy } => { - mouse_service.move_mouse(dx, dy).await; - }, - ClientEvent::MouseScroll { dx, dy } => { - mouse_service.mouse_scroll(dx, dy).await; - }, - ClientEvent::Click { button } => { - mouse_service.click(button).await; - }, - ClientEvent::KeyPressEvent { key } => { - mouse_service.key_press_event(key).await; - }, - ClientEvent::TextInputEvent { text } => { - mouse_service.text_input(text).await; - }, - ClientEvent::TextInputStartEvent => { - mouse_service.text_input_start().await; - }, - ClientEvent::TextInputDoneEvent { text } => { - mouse_service.text_input_end(text).await; - }, - } - } - })) -} diff --git a/crates/cursor-move-webapp/src/components/keyboard_area.rs b/crates/cursor-move-webapp/src/components/keyboard_area.rs deleted file mode 100644 index a9f4676..0000000 --- a/crates/cursor-move-webapp/src/components/keyboard_area.rs +++ /dev/null @@ -1,57 +0,0 @@ -use dioxus::prelude::*; - -use crate::components::controls::ClientEvent; - -#[component] -pub fn KeyboardArea(onevent: EventHandler) -> Element { - #[css_module("/assets/styling/keyboard_area.module.css")] - struct Styles; - - let mut input_state = use_signal(String::new); - let input_handler = use_callback(move |evt: Event| { - let v = evt.value(); - input_state.set(v.clone()); - - onevent.call(ClientEvent::TextInputEvent { text: v }); - }); - let key_press_handler = use_callback(move |evt: Event| { - if input_state.read().is_empty() { - match evt.key() { - Key::Character(_) => {}, - _ => { - onevent.call(ClientEvent::KeyPressEvent { - key: evt.key().to_string(), - }); - }, - } - } else if evt.key() == Key::Enter { - onevent.call(ClientEvent::TextInputDoneEvent { - text: input_state.replace(String::new()), - }); - } - }); - let input_focus_handler = use_callback(move |_: Event| { - input_state.set(String::new()); - onevent.call(ClientEvent::TextInputStartEvent); - }); - - let input_blur_handler = use_callback(move |_: Event| { - onevent.call(ClientEvent::TextInputDoneEvent { - text: input_state.replace(String::new()), - }); - }); - - rsx! { - div { - class: Styles::keyboard_area, - - input { - oninput: input_handler, - value: input_state, - onkeydown: key_press_handler, - onfocus: input_focus_handler, - onblur: input_blur_handler - } - } - } -} diff --git a/crates/cursor-move-webapp/src/components/mod.rs b/crates/cursor-move-webapp/src/components/mod.rs index f319458..a3263ad 100644 --- a/crates/cursor-move-webapp/src/components/mod.rs +++ b/crates/cursor-move-webapp/src/components/mod.rs @@ -1,6 +1,2 @@ -mod controls; -mod keyboard_area; mod mouse_area; -pub use controls::Controls; -pub use keyboard_area::KeyboardArea; pub use mouse_area::MouseArea; diff --git a/crates/cursor-move-webapp/src/components/mouse_area.rs b/crates/cursor-move-webapp/src/components/mouse_area.rs index 13b12ae..54c1692 100644 --- a/crates/cursor-move-webapp/src/components/mouse_area.rs +++ b/crates/cursor-move-webapp/src/components/mouse_area.rs @@ -1,6 +1,5 @@ -use std::{collections::HashMap, ops::Sub, time::Duration}; - use dioxus::{ + fullstack::{CborEncoding, WebSocketOptions, Websocket, extract::State, use_websocket}, html::{ geometry::{ElementSpace, euclid::Point2D}, input_data::MouseButton, @@ -8,162 +7,131 @@ use dioxus::{ logger::tracing, prelude::*, }; -use dioxus_html::geometry::euclid::Vector2D; - -use crate::{components::controls::ClientEvent, utils::mouse_filter_buffer::MouseFilterBuffer}; - -const FLING_START_THRESHOLD_VELOCITY: f64 = 500.0; -const FLING_STOP_THRESHOLD_VELOCITY: f64 = 100.0; -const FLING_DAMPENING: f64 = 0.98; - -const CURSOR_SPEED_MULTIPLIER: f64 = 1.5; - -pub struct PointerRegistryData { - initial_position: Point2D, - - last_positions: MouseFilterBuffer, -} - -pub struct FlingerData { - velocity: Vector2D, -} - -#[derive(Default)] -pub struct PointerRegistry { - pointers: HashMap, -} - -#[derive(Default)] -pub struct FlingerRegistry { - flinger: Option, -} +use serde::{Deserialize, Serialize}; #[component] -pub fn MouseArea(onevent: EventHandler) -> Element { +pub fn MouseArea() -> Element { #[css_module("/assets/styling/mouse_area.module.css")] struct Styles; - let mut registry = use_signal::(PointerRegistry::default); - let mut flingers = use_signal::(FlingerRegistry::default); + let mut last_cursor_position = use_signal::>>(|| None); + + let mut socket = use_websocket(move || mouse_move(WebSocketOptions::new())); + + use_future(move || async move { + loop { + // Wait for the socket to connect + _ = socket.connect().await; + + // Loop poll with recv. Throws an error when the connection closes, making it possible + // to run code before the socket re-connects when the name input changes + while let Ok(message) = socket.recv().await { + tracing::info!("Received message: {:?}", message); + } + } + }); let pointer_move_handler = use_callback(move |evt: Event| { - let mut registry = registry.write(); - if let Some(data) = registry.pointers.get_mut(&evt.pointer_id()) { + if evt.held_buttons().contains(MouseButton::Primary) { evt.prevent_default(); let point = evt.element_coordinates(); - let last_position = data.last_positions.back(); - let delta = point - last_position.position; + let last_position = last_cursor_position.write().replace(point); - data.last_positions - .push(point, wasmtimer::std::SystemTime::now()); + if let Some(last_position) = last_position { + let delta = point - last_position; - if registry.pointers.len() == 1 { - onevent.call(ClientEvent::MouseMove { - dx: delta.x * CURSOR_SPEED_MULTIPLIER, - dy: delta.y * CURSOR_SPEED_MULTIPLIER, - }); - } else if registry.pointers.len() == 2 { - onevent.call(ClientEvent::MouseScroll { - dx: -delta.x, - dy: -delta.y, + spawn(async move { + _ = socket + .send(ClientEvent::MouseMove { + dx: delta.x, + dy: delta.y, + }) + .await; }); } } }); let pointer_down_handler = use_callback(move |evt: Event| { - //If any pointer is down, we cancel the flingers - flingers.write().flinger.take(); - let point = evt.element_coordinates(); - - registry.write().pointers.insert( - evt.pointer_id(), - PointerRegistryData { - last_positions: MouseFilterBuffer::new( - 10, - point, - wasmtimer::std::SystemTime::now(), - ), - initial_position: point, - }, - ); - }); - let pointer_up_handler = use_callback(move |evt: Event| { - let point = evt.element_coordinates(); - let mut registry = registry.write(); - let data = registry.pointers.remove(&evt.pointer_id()); - if let Some(data) = data { - let distance_moved = data.initial_position - point; - let release_velocity = data.last_positions.average_velocity_since( - wasmtimer::std::SystemTime::now().sub(Duration::from_millis(100)), - ); - tracing::info!("Release Velocity: {:?}", release_velocity.length()); - - if distance_moved.length() <= 1.0 { - match registry.pointers.len() { - 0 => { - onevent.call(ClientEvent::Click { - button: MouseButton::Primary, - }); - }, - 1 => { - onevent.call(ClientEvent::Click { - button: MouseButton::Secondary, - }); - }, - _ => {}, - } - } else if release_velocity.length() > FLING_START_THRESHOLD_VELOCITY { - //We only fling if there are no other pointers - if registry.pointers.is_empty() { - flingers.write().flinger = Some(FlingerData { - velocity: release_velocity, - }); - } - } - } + *last_cursor_position.write() = Some(point); }); - use_future(move || async move { - let mut last_frame_time = wasmtimer::std::SystemTime::now(); + let pointer_click_handler = use_callback(move |evt: Event| { + spawn(async move { + _ = socket.send(ClientEvent::Click).await; + }); + }); - loop { - wasmtimer::tokio::sleep(Duration::from_millis(16)).await; - let new_frame_time = wasmtimer::std::SystemTime::now(); - let delta_seconds = new_frame_time - .duration_since(last_frame_time) - .unwrap() - .as_secs_f64(); - last_frame_time = new_frame_time; + let key_down_handler = use_callback(move |evt: Event| { + tracing::info!("Keydown"); + spawn(async move { + _ = socket + .send(ClientEvent::KeyEvent { + key: evt.key().to_string(), + is_pressed: true, + }) + .await; + }); + }); - let mut flinger = flingers.write(); - let new_flinger = flinger.flinger.as_ref().and_then(|flinger| { - if flinger.velocity.length() < FLING_STOP_THRESHOLD_VELOCITY { - None - } else { - onevent.call(ClientEvent::MouseMove { - dx: flinger.velocity.x * delta_seconds * CURSOR_SPEED_MULTIPLIER, - dy: flinger.velocity.y * delta_seconds * CURSOR_SPEED_MULTIPLIER, - }); - - //tracing::info!("Fling: {:?}", flinger.velocity); - Some(FlingerData { - velocity: flinger.velocity * FLING_DAMPENING, - }) - } - }); - flinger.flinger = new_flinger; - } + let key_up_handler = use_callback(move |evt: Event| { + spawn(async move { + _ = socket + .send(ClientEvent::KeyEvent { + key: evt.key().to_string(), + is_pressed: false, + }) + .await; + }); }); rsx! { div { - class: Styles::mouse_area, + input { onkeydown: key_down_handler, onkeyup: key_up_handler} + div { + class: Styles::mouse_area, - onpointermove: pointer_move_handler, - onpointerdown: pointer_down_handler, - onpointerup: pointer_up_handler, + onpointermove: pointer_move_handler, + onpointerdown: pointer_down_handler, + onclick: pointer_click_handler + } } } } + +#[derive(Serialize, Deserialize, Debug)] +enum ClientEvent { + MouseMove { dx: f64, dy: f64 }, + Click, + KeyEvent { key: String, is_pressed: bool }, +} + +#[derive(Serialize, Deserialize, Debug)] +enum ServerEvent { + Ping, +} + +#[expect(clippy::unused_async)] +#[get("/api/mouse_move_ws", mouse_service: State)] +async fn mouse_move( + options: WebSocketOptions +) -> Result> { + Ok(options.on_upgrade(move |mut socket| async move { + _ = socket.send(ServerEvent::Ping).await; + + while let Ok(event) = socket.recv().await { + match event { + ClientEvent::MouseMove { dx, dy } => { + mouse_service.move_mouse(dx, dy).await; + }, + ClientEvent::Click => { + mouse_service.click().await; + }, + ClientEvent::KeyEvent { key, is_pressed } => { + mouse_service.key_event(key, is_pressed).await; + }, + } + } + })) +} diff --git a/crates/cursor-move-webapp/src/main.rs b/crates/cursor-move-webapp/src/main.rs index 749da33..d171f40 100644 --- a/crates/cursor-move-webapp/src/main.rs +++ b/crates/cursor-move-webapp/src/main.rs @@ -4,7 +4,6 @@ use dioxus::prelude::*; use views::{Home, Navbar}; mod components; -mod utils; mod views; #[cfg(feature = "server")] @@ -46,7 +45,6 @@ fn App() -> Element { rsx! { document::Link { rel: "icon", href: FAVICON } document::Link { rel: "stylesheet", href: MAIN_CSS } - document::Meta { name: "viewport", content: "width=device-width, initial-scale=1.0" } Router:: {} } diff --git a/crates/cursor-move-webapp/src/server/input_proxy_service.rs b/crates/cursor-move-webapp/src/server/input_proxy_service.rs index 0ff0d57..4f6a7a3 100644 --- a/crates/cursor-move-webapp/src/server/input_proxy_service.rs +++ b/crates/cursor-move-webapp/src/server/input_proxy_service.rs @@ -1,44 +1,38 @@ -use std::{io::Write, sync::Arc, time::Duration}; +use std::{io::Write, str::FromStr, sync::Arc, time::Duration}; use dioxus::{ fullstack::{FullstackContext, extract::FromRef}, + html::Key, logger::tracing, }; -use dioxus_html::input_data::MouseButton; use memfile::MemFile; use rustix::time::{ClockId, clock_gettime}; use tokio::sync::Mutex; use wayland_client::{ Connection, Dispatch, EventQueue, Proxy, QueueHandle, protocol::{ - wl_pointer::{Axis, ButtonState}, + wl_pointer::ButtonState, wl_registry::{Event, WlRegistry}, wl_seat::{self, WlSeat}, }, }; -use wayland_protocols_misc::{ - zwp_input_method_v2::client::{ - zwp_input_method_manager_v2::ZwpInputMethodManagerV2, zwp_input_method_v2::ZwpInputMethodV2, - }, - zwp_virtual_keyboard_v1::client::{ - zwp_virtual_keyboard_manager_v1::ZwpVirtualKeyboardManagerV1, - zwp_virtual_keyboard_v1::ZwpVirtualKeyboardV1, - }, +use wayland_protocols_misc::zwp_virtual_keyboard_v1::client::{ + zwp_virtual_keyboard_manager_v1::ZwpVirtualKeyboardManagerV1, + zwp_virtual_keyboard_v1::ZwpVirtualKeyboardV1, }; use wayland_protocols_wlr::virtual_pointer::v1::client::{ zwlr_virtual_pointer_manager_v1::ZwlrVirtualPointerManagerV1, zwlr_virtual_pointer_v1::ZwlrVirtualPointerV1, }; -use crate::server::keymap::{self, web_key_to_linux_keycode}; +use crate::server::keymap; // https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h const BUTTON_LEFT: u32 = 0x110; -const BUTTON_RIGHT: u32 = 0x111; -const BUTTON_MIDDLE: u32 = 0x112; +const BTN_RIGHT: u32 = 0x111; +const BTN_MIDDLE: u32 = 0x112; // https://wayland.app/protocols/wayland#wl_keyboard:enum:keymap_format -#[expect(unused)] const NO_KEYMAP: u32 = 0; const XKB_V1: u32 = 1; @@ -80,103 +74,33 @@ impl InputProxyService { } } - pub async fn mouse_scroll( - &self, - dx: f64, - dy: f64, - ) { - let guard = self.input_proxy_service_state.lock().await; - if let Some(pointer) = &guard.state.virtual_pointer() { - let time = get_wayland_timestamp(); - pointer.axis(time, Axis::HorizontalScroll, dx); - pointer.axis(time, Axis::VerticalScroll, dy); - pointer.frame(); - guard.event_queue.flush().unwrap(); - } - } - - pub async fn click( - &self, - button: MouseButton, - ) { + pub async fn click(&self) { let guard = self.input_proxy_service_state.lock().await; if let Some(pointer) = &guard.state.virtual_pointer() { tracing::info!("Do click"); let time = get_wayland_timestamp(); - let button = match button { - MouseButton::Primary => BUTTON_LEFT, - MouseButton::Secondary => BUTTON_RIGHT, - MouseButton::Auxiliary => BUTTON_MIDDLE, - MouseButton::Fourth | MouseButton::Fifth | MouseButton::Unknown => { - return; - }, - }; - - pointer.button(time, button, ButtonState::Pressed); + pointer.button(time, BUTTON_LEFT, ButtonState::Pressed); pointer.frame(); - pointer.button(time, button, ButtonState::Released); + pointer.button(time, BUTTON_LEFT, ButtonState::Released); pointer.frame(); guard.event_queue.flush().unwrap(); } } - pub async fn key_press_event( + pub async fn key_event( &self, key: String, + is_pressed: bool, ) { let guard = self.input_proxy_service_state.lock().await; - - if let Some(keyboard) = guard.state.virtual_keyboard() { + if let Some(keyboard) = &guard.state.virtual_keyboard() { let time = get_wayland_timestamp(); - let key = web_key_to_linux_keycode(key.as_str()).unwrap(); - keyboard.key(time, key, 1); - keyboard.key(time, key, 0); - guard.event_queue.flush().unwrap(); - } - } + let key = Key::from_str(key.as_str()).unwrap().legacy_charcode(); - pub async fn text_input_start(&self) { - let mut guard = self.input_proxy_service_state.lock().await; + keyboard.key(time, key, if is_pressed { 1 } else { 0 }); - if let Some(ime) = guard.state.input_method_mut() { - ime.input_method_state += 1; - - tracing::info!("Text Input Start"); - ime.input_method.delete_surrounding_text(4, 4); - ime.input_method.commit(ime.input_method_state); - - guard.event_queue.flush().unwrap(); - } - } - pub async fn text_input( - &self, - key: String, - ) { - let mut guard = self.input_proxy_service_state.lock().await; - - if let Some(ime) = guard.state.input_method_mut() { - ime.input_method_state += 1; - - tracing::info!("Text Input {key}"); - ime.input_method.set_preedit_string(key, 0, 0); - ime.input_method.commit(ime.input_method_state); - guard.event_queue.flush().unwrap(); - } - } - pub async fn text_input_end( - &self, - text: String, - ) { - let mut guard = self.input_proxy_service_state.lock().await; - - if let Some(ime) = guard.state.input_method_mut() { - ime.input_method_state += 1; - - tracing::info!("Text Input End"); - ime.input_method.commit_string(text); - ime.input_method.commit(ime.input_method_state); guard.event_queue.flush().unwrap(); } } @@ -219,32 +143,21 @@ struct Keymap { size: u32, } -struct InputMethod { - input_method: ZwpInputMethodV2, - input_method_state: u32, -} - enum InputProxyServiceState { Incomplete { queue_handle: QueueHandle, seat: Option, virtual_pointer_manager: Option, virtual_keyboard_manager: Option, - input_method_manager: Option, keymap: Keymap, }, Running { - #[expect(unused)] seat: WlSeat, - #[expect(unused)] virtual_pointer_manager: ZwlrVirtualPointerManagerV1, - #[expect(unused)] virtual_keyboard_manager: ZwpVirtualKeyboardManagerV1, virtual_pointer: ZwlrVirtualPointerV1, virtual_keyboard: ZwpVirtualKeyboardV1, - - input_method: InputMethod, }, } impl InputProxyServiceState { @@ -264,7 +177,6 @@ impl InputProxyServiceState { seat: None, virtual_pointer_manager: None, virtual_keyboard_manager: None, - input_method_manager: None, } } @@ -286,13 +198,6 @@ impl InputProxyServiceState { } } - const fn input_method_mut(&mut self) -> Option<&mut InputMethod> { - match self { - Self::Running { input_method, .. } => Some(input_method), - Self::Incomplete { .. } => None, - } - } - pub fn set_seat( &mut self, seat: WlSeat, @@ -344,63 +249,35 @@ impl InputProxyServiceState { } } - pub fn set_input_method_manager( - &mut self, - input_method_manager: ZwpInputMethodManagerV2, - ) { - if let Self::Incomplete { - input_method_manager: existing @ None, - .. - } = self - { - *existing = Some(input_method_manager); - tracing::info!("Obtained Input Method Manager!"); - self.try_upgrade(); - } else { - tracing::info!("Received duplicate ZwpInputMethodManagerV2"); - } - } - pub fn try_upgrade(&mut self) { if let Self::Incomplete { queue_handle, keymap, - seat: seat @ Some(..), - virtual_pointer_manager: vpm @ Some(..), - virtual_keyboard_manager: vkm @ Some(..), - input_method_manager: imm @ Some(..), + seat: oseat @ Some(..), + virtual_pointer_manager: ovpm @ Some(..), + virtual_keyboard_manager: ovkm @ Some(..), } = self { - let virtual_keyboard = vkm.as_ref().unwrap().create_virtual_keyboard( - seat.as_ref().unwrap(), + let virtual_keyboard = ovkm.as_ref().unwrap().create_virtual_keyboard( + oseat.as_ref().unwrap(), queue_handle, (), ); virtual_keyboard.keymap(XKB_V1, keymap.file.as_fd(), keymap.size); - let virtual_pointer = vpm.as_ref().unwrap().create_virtual_pointer( - Some(seat.as_ref().unwrap()), + let virtual_pointer = ovpm.as_ref().unwrap().create_virtual_pointer( + Some(oseat.as_ref().unwrap()), queue_handle, (), ); - - let input_method = - imm.as_ref() - .unwrap() - .get_input_method(seat.as_ref().unwrap(), queue_handle, ()); - tracing::info!("InputProxyServiceState upgraded to running"); *self = Self::Running { - seat: seat.take().unwrap(), - virtual_pointer_manager: vpm.take().unwrap(), - virtual_keyboard_manager: vkm.take().unwrap(), + seat: oseat.take().unwrap(), + virtual_pointer_manager: ovpm.take().unwrap(), + virtual_keyboard_manager: ovkm.take().unwrap(), virtual_pointer, virtual_keyboard, - input_method: InputMethod { - input_method, - input_method_state: 0, - }, }; } } @@ -462,32 +339,6 @@ impl Dispatch for InputProxyServiceState { } } -impl Dispatch for InputProxyServiceState { - fn event( - _state: &mut Self, - _proxy: &ZwpInputMethodManagerV2, - _event: ::Event, - _data: &(), - _conn: &Connection, - _qhandle: &QueueHandle, - ) { - tracing::warn!("Unknown event received from ZwpInputMethodManagerV2"); - } -} - -impl Dispatch for InputProxyServiceState { - fn event( - _state: &mut Self, - _proxy: &ZwpInputMethodV2, - _event: ::Event, - _data: &(), - _conn: &Connection, - _qhandle: &QueueHandle, - ) { - tracing::warn!("Unknown event received from ZwpInputMethodV2"); - } -} - impl Dispatch for InputProxyServiceState { fn event( _state: &mut Self, @@ -548,15 +399,6 @@ impl Dispatch for InputProxyServiceState { ); app_data.set_virtual_keyboard_manager(manager); }, - "zwp_input_method_manager_v2" => { - let manager = registry.bind::( - name, - version, - queue_handle, - (), - ); - app_data.set_input_method_manager(manager); - }, _ => {}, }, Event::GlobalRemove { .. } => todo!(), diff --git a/crates/cursor-move-webapp/src/server/keymap.rs b/crates/cursor-move-webapp/src/server/keymap.rs index 3af64d4..06d8abe 100644 --- a/crates/cursor-move-webapp/src/server/keymap.rs +++ b/crates/cursor-move-webapp/src/server/keymap.rs @@ -1,563 +1,1464 @@ -#![expect(unused)] - -use dioxus::logger::tracing; - -fn is_key_string(s: &str) -> bool { - 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 { - tracing::info!("Converting {s}"); - match s { - "Unidentified" => todo!(), - "Alt" => Some(KEY_LEFTALT), - "AltGraph" => Some(KEY_RIGHTALT), - "CapsLock" => todo!(), - "Control" => todo!(), - "Fn" => todo!(), - "FnLock" => todo!(), - "Meta" => todo!(), - "NumLock" => todo!(), - "ScrollLock" => todo!(), - "Shift" => todo!(), - "Symbol" => todo!(), - "SymbolLock" => todo!(), - "Hyper" => todo!(), - "Super" => todo!(), - "Enter" => Some(KEY_ENTER), - "Tab" => Some(KEY_TAB), - "ArrowDown" => Some(KEY_DOWN), - "ArrowLeft" => Some(KEY_LEFT), - "ArrowRight" => Some(KEY_RIGHT), - "ArrowUp" => Some(KEY_UP), - "End" => Some(KEY_END), - "Home" => Some(KEY_HOME), - "PageDown" => Some(KEY_PAGEDOWN), - "PageUp" => Some(KEY_PAGEUP), - "Backspace" => Some(KEY_BACKSPACE), - "Clear" => todo!(), - "Copy" => todo!(), - "CrSel" => todo!(), - "Cut" => todo!(), - "Delete" => todo!(), - "EraseEof" => todo!(), - "ExSel" => todo!(), - "Insert" => todo!(), - "Paste" => todo!(), - "Redo" => todo!(), - "Undo" => todo!(), - "Accept" => todo!(), - "Again" => todo!(), - "Attn" => todo!(), - "Cancel" => todo!(), - "ContextMenu" => todo!(), - "Escape" => todo!(), - "Execute" => todo!(), - "Find" => todo!(), - "Help" => todo!(), - "Pause" => todo!(), - "Play" => todo!(), - "Props" => todo!(), - "Select" => todo!(), - "ZoomIn" => todo!(), - "ZoomOut" => todo!(), - "BrightnessDown" => todo!(), - "BrightnessUp" => todo!(), - "Eject" => todo!(), - "LogOff" => todo!(), - "Power" => todo!(), - "PowerOff" => todo!(), - "PrintScreen" => todo!(), - "Hibernate" => todo!(), - "Standby" => todo!(), - "WakeUp" => todo!(), - "AllCandidates" => todo!(), - "Alphanumeric" => todo!(), - "CodeInput" => todo!(), - "Compose" => todo!(), - "Convert" => todo!(), - "Dead" => todo!(), - "FinalMode" => todo!(), - "GroupFirst" => todo!(), - "GroupLast" => todo!(), - "GroupNext" => todo!(), - "GroupPrevious" => todo!(), - "ModeChange" => todo!(), - "NextCandidate" => todo!(), - "NonConvert" => todo!(), - "PreviousCandidate" => todo!(), - "Process" => None, - "SingleCandidate" => todo!(), - "HangulMode" => todo!(), - "HanjaMode" => todo!(), - "JunjaMode" => todo!(), - "Eisu" => todo!(), - "Hankaku" => todo!(), - "Hiragana" => todo!(), - "HiraganaKatakana" => todo!(), - "KanaMode" => todo!(), - "KanjiMode" => todo!(), - "Katakana" => todo!(), - "Romaji" => todo!(), - "Zenkaku" => todo!(), - "ZenkakuHankaku" => todo!(), - "Soft1" => todo!(), - "Soft2" => todo!(), - "Soft3" => todo!(), - "Soft4" => todo!(), - "ChannelDown" => todo!(), - "ChannelUp" => todo!(), - "Close" => todo!(), - "MailForward" => todo!(), - "MailReply" => todo!(), - "MailSend" => todo!(), - "MediaClose" => todo!(), - "MediaFastForward" => todo!(), - "MediaPause" => todo!(), - "MediaPlay" => todo!(), - "MediaPlayPause" => todo!(), - "MediaRecord" => todo!(), - "MediaRewind" => todo!(), - "MediaStop" => todo!(), - "MediaTrackNext" => todo!(), - "MediaTrackPrevious" => todo!(), - "New" => todo!(), - "Open" => todo!(), - "Print" => todo!(), - "Save" => todo!(), - "SpellCheck" => todo!(), - "Key11" => todo!(), - "Key12" => todo!(), - "AudioBalanceLeft" => todo!(), - "AudioBalanceRight" => todo!(), - "AudioBassBoostDown" => todo!(), - "AudioBassBoostToggle" => todo!(), - "AudioBassBoostUp" => todo!(), - "AudioFaderFront" => todo!(), - "AudioFaderRear" => todo!(), - "AudioSurroundModeNext" => todo!(), - "AudioTrebleDown" => todo!(), - "AudioTrebleUp" => todo!(), - "AudioVolumeDown" => todo!(), - "AudioVolumeUp" => todo!(), - "AudioVolumeMute" => todo!(), - "MicrophoneToggle" => todo!(), - "MicrophoneVolumeDown" => todo!(), - "MicrophoneVolumeUp" => todo!(), - "MicrophoneVolumeMute" => todo!(), - "SpeechCorrectionList" => todo!(), - "SpeechInputToggle" => todo!(), - "LaunchApplication1" => todo!(), - "LaunchApplication2" => todo!(), - "LaunchCalendar" => todo!(), - "LaunchContacts" => todo!(), - "LaunchMail" => todo!(), - "LaunchMediaPlayer" => todo!(), - "LaunchMusicPlayer" => todo!(), - "LaunchPhone" => todo!(), - "LaunchScreenSaver" => todo!(), - "LaunchSpreadsheet" => todo!(), - "LaunchWebBrowser" => todo!(), - "LaunchWebCam" => todo!(), - "LaunchWordProcessor" => todo!(), - "BrowserBack" => todo!(), - "BrowserFavorites" => todo!(), - "BrowserForward" => todo!(), - "BrowserHome" => todo!(), - "BrowserRefresh" => todo!(), - "BrowserSearch" => todo!(), - "BrowserStop" => todo!(), - "AppSwitch" => todo!(), - "Call" => todo!(), - "Camera" => todo!(), - "CameraFocus" => todo!(), - "EndCall" => todo!(), - "GoBack" => todo!(), - "GoHome" => todo!(), - "HeadsetHook" => todo!(), - "LastNumberRedial" => todo!(), - "Notification" => todo!(), - "MannerMode" => todo!(), - "VoiceDial" => todo!(), - "TV" => todo!(), - "TV3DMode" => todo!(), - "TVAntennaCable" => todo!(), - "TVAudioDescription" => todo!(), - "TVAudioDescriptionMixDown" => todo!(), - "TVAudioDescriptionMixUp" => todo!(), - "TVContentsMenu" => todo!(), - "TVDataService" => todo!(), - "TVInput" => todo!(), - "TVInputComponent1" => todo!(), - "TVInputComponent2" => todo!(), - "TVInputComposite1" => todo!(), - "TVInputComposite2" => todo!(), - "TVInputHDMI1" => todo!(), - "TVInputHDMI2" => todo!(), - "TVInputHDMI3" => todo!(), - "TVInputHDMI4" => todo!(), - "TVInputVGA1" => todo!(), - "TVMediaContext" => todo!(), - "TVNetwork" => todo!(), - "TVNumberEntry" => todo!(), - "TVPower" => todo!(), - "TVRadioService" => todo!(), - "TVSatellite" => todo!(), - "TVSatelliteBS" => todo!(), - "TVSatelliteCS" => todo!(), - "TVSatelliteToggle" => todo!(), - "TVTerrestrialAnalog" => todo!(), - "TVTerrestrialDigital" => todo!(), - "TVTimer" => todo!(), - "AVRInput" => todo!(), - "AVRPower" => todo!(), - "ColorF0Red" => todo!(), - "ColorF1Green" => todo!(), - "ColorF2Yellow" => todo!(), - "ColorF3Blue" => todo!(), - "ColorF4Grey" => todo!(), - "ColorF5Brown" => todo!(), - "ClosedCaptionToggle" => todo!(), - "Dimmer" => todo!(), - "DisplaySwap" => todo!(), - "DVR" => todo!(), - "Exit" => todo!(), - "FavoriteClear0" => todo!(), - "FavoriteClear1" => todo!(), - "FavoriteClear2" => todo!(), - "FavoriteClear3" => todo!(), - "FavoriteRecall0" => todo!(), - "FavoriteRecall1" => todo!(), - "FavoriteRecall2" => todo!(), - "FavoriteRecall3" => todo!(), - "FavoriteStore0" => todo!(), - "FavoriteStore1" => todo!(), - "FavoriteStore2" => todo!(), - "FavoriteStore3" => todo!(), - "Guide" => todo!(), - "GuideNextDay" => todo!(), - "GuidePreviousDay" => todo!(), - "Info" => todo!(), - "InstantReplay" => todo!(), - "Link" => todo!(), - "ListProgram" => todo!(), - "LiveContent" => todo!(), - "Lock" => todo!(), - "MediaApps" => todo!(), - "MediaAudioTrack" => todo!(), - "MediaLast" => todo!(), - "MediaSkipBackward" => todo!(), - "MediaSkipForward" => todo!(), - "MediaStepBackward" => todo!(), - "MediaStepForward" => todo!(), - "MediaTopMenu" => todo!(), - "NavigateIn" => todo!(), - "NavigateNext" => todo!(), - "NavigateOut" => todo!(), - "NavigatePrevious" => todo!(), - "NextFavoriteChannel" => todo!(), - "NextUserProfile" => todo!(), - "OnDemand" => todo!(), - "Pairing" => todo!(), - "PinPDown" => todo!(), - "PinPMove" => todo!(), - "PinPToggle" => todo!(), - "PinPUp" => todo!(), - "PlaySpeedDown" => todo!(), - "PlaySpeedReset" => todo!(), - "PlaySpeedUp" => todo!(), - "RandomToggle" => todo!(), - "RcLowBattery" => todo!(), - "RecordSpeedNext" => todo!(), - "RfBypass" => todo!(), - "ScanChannelsToggle" => todo!(), - "ScreenModeNext" => todo!(), - "Settings" => todo!(), - "SplitScreenToggle" => todo!(), - "STBInput" => todo!(), - "STBPower" => todo!(), - "Subtitle" => todo!(), - "Teletext" => todo!(), - "VideoModeNext" => todo!(), - "Wink" => todo!(), - "ZoomToggle" => todo!(), - "F1" => Some(KEY_F1), - "F2" => Some(KEY_F2), - "F3" => Some(KEY_F3), - "F4" => Some(KEY_F4), - "F5" => Some(KEY_F5), - "F6" => Some(KEY_F6), - "F7" => Some(KEY_F7), - "F8" => Some(KEY_F8), - "F9" => Some(KEY_F9), - "F10" => Some(KEY_F10), - "F11" => Some(KEY_F11), - "F12" => Some(KEY_F12), - "F13" => Some(KEY_F13), - "F14" => Some(KEY_F14), - "F15" => Some(KEY_F15), - "F16" => Some(KEY_F16), - "F17" => Some(KEY_F17), - "F18" => Some(KEY_F18), - "F19" => Some(KEY_F19), - "F20" => Some(KEY_F20), - "F21" => Some(KEY_F21), - "F22" => Some(KEY_F22), - "F23" => Some(KEY_F23), - "F24" => Some(KEY_F24), - _ => todo!(), - } -} - -const KEY_RESERVED: u32 = 0; -const KEY_ESC: u32 = 1; -const KEY_1: u32 = 2; -const KEY_2: u32 = 3; -const KEY_3: u32 = 4; -const KEY_4: u32 = 5; -const KEY_5: u32 = 6; -const KEY_6: u32 = 7; -const KEY_7: u32 = 8; -const KEY_8: u32 = 9; -const KEY_9: u32 = 10; -const KEY_0: u32 = 11; -const KEY_MINUS: u32 = 12; -const KEY_EQUAL: u32 = 13; -const KEY_BACKSPACE: u32 = 14; -const KEY_TAB: u32 = 15; -const KEY_Q: u32 = 16; -const KEY_W: u32 = 17; -const KEY_E: u32 = 18; -const KEY_R: u32 = 19; -const KEY_T: u32 = 20; -const KEY_Y: u32 = 21; -const KEY_U: u32 = 22; -const KEY_I: u32 = 23; -const KEY_O: u32 = 24; -const KEY_P: u32 = 25; -const KEY_LEFTBRACE: u32 = 26; -const KEY_RIGHTBRACE: u32 = 27; -const KEY_ENTER: u32 = 28; -const KEY_LEFTCTRL: u32 = 29; -const KEY_A: u32 = 30; -const KEY_S: u32 = 31; -const KEY_D: u32 = 32; -const KEY_F: u32 = 33; -const KEY_G: u32 = 34; -const KEY_H: u32 = 35; -const KEY_J: u32 = 36; -const KEY_K: u32 = 37; -const KEY_L: u32 = 38; -const KEY_SEMICOLON: u32 = 39; -const KEY_APOSTROPHE: u32 = 40; -const KEY_GRAVE: u32 = 41; -const KEY_LEFTSHIFT: u32 = 42; -const KEY_BACKSLASH: u32 = 43; -const KEY_Z: u32 = 44; -const KEY_X: u32 = 45; -const KEY_C: u32 = 46; -const KEY_V: u32 = 47; -const KEY_B: u32 = 48; -const KEY_N: u32 = 49; -const KEY_M: u32 = 50; -const KEY_COMMA: u32 = 51; -const KEY_DOT: u32 = 52; -const KEY_SLASH: u32 = 53; -const KEY_RIGHTSHIFT: u32 = 54; -const KEY_KPASTERISK: u32 = 55; -const KEY_LEFTALT: u32 = 56; -const KEY_SPACE: u32 = 57; -const KEY_CAPSLOCK: u32 = 58; -const KEY_F1: u32 = 59; -const KEY_F2: u32 = 60; -const KEY_F3: u32 = 61; -const KEY_F4: u32 = 62; -const KEY_F5: u32 = 63; -const KEY_F6: u32 = 64; -const KEY_F7: u32 = 65; -const KEY_F8: u32 = 66; -const KEY_F9: u32 = 67; -const KEY_F10: u32 = 68; -const KEY_NUMLOCK: u32 = 69; -const KEY_SCROLLLOCK: u32 = 70; -const KEY_KP7: u32 = 71; -const KEY_KP8: u32 = 72; -const KEY_KP9: u32 = 73; -const KEY_KPMINUS: u32 = 74; -const KEY_KP4: u32 = 75; -const KEY_KP5: u32 = 76; -const KEY_KP6: u32 = 77; -const KEY_KPPLUS: u32 = 78; -const KEY_KP1: u32 = 79; -const KEY_KP2: u32 = 80; -const KEY_KP3: u32 = 81; -const KEY_KP0: u32 = 82; -const KEY_KPDOT: u32 = 83; -const KEY_ZENKAKUHANKAKU: u32 = 85; -const KEY_102ND: u32 = 86; -const KEY_F11: u32 = 87; -const KEY_F12: u32 = 88; -const KEY_RO: u32 = 89; -const KEY_KATAKANA: u32 = 90; -const KEY_HIRAGANA: u32 = 91; -const KEY_HENKAN: u32 = 92; -const KEY_KATAKANAHIRAGANA: u32 = 93; -const KEY_MUHENKAN: u32 = 94; -const KEY_KPJPCOMMA: u32 = 95; -const KEY_KPENTER: u32 = 96; -const KEY_RIGHTCTRL: u32 = 97; -const KEY_KPSLASH: u32 = 98; -const KEY_SYSRQ: u32 = 99; -const KEY_RIGHTALT: u32 = 100; -const KEY_LINEFEED: u32 = 101; -const KEY_HOME: u32 = 102; -const KEY_UP: u32 = 103; -const KEY_PAGEUP: u32 = 104; -const KEY_LEFT: u32 = 105; -const KEY_RIGHT: u32 = 106; -const KEY_END: u32 = 107; -const KEY_DOWN: u32 = 108; -const KEY_PAGEDOWN: u32 = 109; -const KEY_INSERT: u32 = 110; -const KEY_DELETE: u32 = 111; -const KEY_MACRO: u32 = 112; -const KEY_MUTE: u32 = 113; -const KEY_VOLUMEDOWN: u32 = 114; -const KEY_VOLUMEUP: u32 = 115; -const KEY_POWER : u32 = 116 /* SC System Power Down */; -const KEY_KPEQUAL: u32 = 117; -const KEY_KPPLUSMINUS: u32 = 118; -const KEY_PAUSE: u32 = 119; -const KEY_SCALE : u32 = 120 /* AL Compiz Scale (Expose) */; -const KEY_KPCOMMA: u32 = 121; -const KEY_HANGEUL: u32 = 122; -const KEY_HANGUEL: u32 = KEY_HANGEUL; -const KEY_HANJA: u32 = 123; -const KEY_YEN: u32 = 124; -const KEY_LEFTMETA: u32 = 125; -const KEY_RIGHTMETA: u32 = 126; -const KEY_COMPOSE: u32 = 127; -const KEY_STOP : u32 = 128 /* AC Stop */; -const KEY_AGAIN: u32 = 129; -const KEY_PROPS : u32 = 130 /* AC Properties */; -const KEY_UNDO : u32 = 131 /* AC Undo */; -const KEY_FRONT: u32 = 132; -const KEY_COPY : u32 = 133 /* AC Copy */; -const KEY_OPEN : u32 = 134 /* AC Open */; -const KEY_PASTE : u32 = 135 /* AC Paste */; -const KEY_FIND : u32 = 136 /* AC Search */; -const KEY_CUT : u32 = 137 /* AC Cut */; -const KEY_HELP : u32 = 138 /* AL Integrated Help Center */; -const KEY_MENU : u32 = 139 /* Menu (show menu) */; -const KEY_CALC : u32 = 140 /* AL Calculator */; -const KEY_SETUP: u32 = 141; -const KEY_SLEEP : u32 = 142 /* SC System Sleep */; -const KEY_WAKEUP : u32 = 143 /* System Wake Up */; -const KEY_FILE : u32 = 144 /* AL Local Machine Browser */; -const KEY_SENDFILE: u32 = 145; -const KEY_DELETEFILE: u32 = 146; -const KEY_XFER: u32 = 147; -const KEY_PROG1: u32 = 148; -const KEY_PROG2: u32 = 149; -const KEY_WWW : u32 = 150 /* AL Internet Browser */; -const KEY_MSDOS: u32 = 151; -const KEY_COFFEE : u32 = 152 /* AL Terminal Lock/Screensaver */; -const KEY_SCREENLOCK: u32 = KEY_COFFEE; -const KEY_ROTATE_DISPLAY : u32 = 153 /* Display orientation for e.g. tablets */; -const KEY_DIRECTION: u32 = KEY_ROTATE_DISPLAY; -const KEY_CYCLEWINDOWS: u32 = 154; -const KEY_MAIL: u32 = 155; -const KEY_BOOKMARKS : u32 = 156 /* AC Bookmarks */; -const KEY_COMPUTER: u32 = 157; -const KEY_BACK : u32 = 158 /* AC Back */; -const KEY_FORWARD : u32 = 159 /* AC Forward */; -const KEY_CLOSECD: u32 = 160; -const KEY_EJECTCD: u32 = 161; -const KEY_EJECTCLOSECD: u32 = 162; -const KEY_NEXTSONG: u32 = 163; -const KEY_PLAYPAUSE: u32 = 164; -const KEY_PREVIOUSSONG: u32 = 165; -const KEY_STOPCD: u32 = 166; -const KEY_RECORD: u32 = 167; -const KEY_REWIND: u32 = 168; -const KEY_PHONE : u32 = 169 /* Media Select Telephone */; -const KEY_ISO: u32 = 170; -const KEY_CONFIG : u32 = 171 /* AL Consumer Control Configuration */; -const KEY_HOMEPAGE : u32 = 172 /* AC Home */; -const KEY_REFRESH : u32 = 173 /* AC Refresh */; -const KEY_EXIT : u32 = 174 /* AC Exit */; -const KEY_MOVE: u32 = 175; -const KEY_EDIT: u32 = 176; -const KEY_SCROLLUP: u32 = 177; -const KEY_SCROLLDOWN: u32 = 178; -const KEY_KPLEFTPAREN: u32 = 179; -const KEY_KPRIGHTPAREN: u32 = 180; -const KEY_NEW : u32 = 181 /* AC New */; -const KEY_REDO : u32 = 182 /* AC Redo/Repeat */; -const KEY_F13: u32 = 183; -const KEY_F14: u32 = 184; -const KEY_F15: u32 = 185; -const KEY_F16: u32 = 186; -const KEY_F17: u32 = 187; -const KEY_F18: u32 = 188; -const KEY_F19: u32 = 189; -const KEY_F20: u32 = 190; -const KEY_F21: u32 = 191; -const KEY_F22: u32 = 192; -const KEY_F23: u32 = 193; -const KEY_F24: u32 = 194; -const KEY_PLAYCD: u32 = 200; -const KEY_PAUSECD: u32 = 201; -const KEY_PROG3: u32 = 202; -const KEY_PROG4: u32 = 203; -const KEY_ALL_APPLICATIONS : u32 = 204 /* AC Desktop Show All Applications */; -const KEY_DASHBOARD: u32 = KEY_ALL_APPLICATIONS; -const KEY_SUSPEND: u32 = 205; -const KEY_CLOSE : u32 = 206 /* AC Close */; -const KEY_PLAY: u32 = 207; -const KEY_FASTFORWARD: u32 = 208; -const KEY_BASSBOOST: u32 = 209; -const KEY_PRINT : u32 = 210 /* AC Print */; -const KEY_HP: u32 = 211; -const KEY_CAMERA: u32 = 212; -const KEY_SOUND: u32 = 213; -const KEY_QUESTION: u32 = 214; -const KEY_EMAIL: u32 = 215; -const KEY_CHAT: u32 = 216; -const KEY_SEARCH: u32 = 217; -const KEY_CONNECT: u32 = 218; -const KEY_FINANCE : u32 = 219 /* AL Checkbook/Finance */; -const KEY_SPORT: u32 = 220; -const KEY_SHOP: u32 = 221; -const KEY_ALTERASE: u32 = 222; -const KEY_CANCEL : u32 = 223 /* AC Cancel */; -const KEY_BRIGHTNESSDOWN: u32 = 224; -const KEY_BRIGHTNESSUP: u32 = 225; -const KEY_MEDIA: u32 = 226; -const KEY_SWITCHVIDEOMODE : u32 = 227 /* Cycle between available video outputs (Monitor/LCD/TV-out/etc) */; -const KEY_KBDILLUMTOGGLE: u32 = 228; -const KEY_KBDILLUMDOWN: u32 = 229; -const KEY_KBDILLUMUP: u32 = 230; -const KEY_SEND : u32 = 231 /* AC Send */; -const KEY_REPLY : u32 = 232 /* AC Reply */; -const KEY_FORWARDMAIL : u32 = 233 /* AC Forward Msg */; -const KEY_SAVE : u32 = 234 /* AC Save */; -const KEY_DOCUMENTS: u32 = 235; -const KEY_BATTERY: u32 = 236; -const KEY_BLUETOOTH: u32 = 237; -const KEY_WLAN: u32 = 238; -const KEY_UWB: u32 = 239; -const KEY_UNKNOWN: u32 = 240; -const KEY_VIDEO_NEXT : u32 = 241 /* drive next video source */; -const KEY_VIDEO_PREV : u32 = 242 /* drive previous video source */; -const KEY_BRIGHTNESS_CYCLE : u32 = 243 /* brightness up, after max is min */; -const KEY_BRIGHTNESS_AUTO : u32 = 244 /* Set Auto Brightness: manual brightness control is off, rely on ambient */; -const KEY_BRIGHTNESS_ZERO: u32 = KEY_BRIGHTNESS_AUTO; -const KEY_DISPLAY_OFF : u32 = 245 /* display device to off state */; -const KEY_WWAN : u32 = 246 /* Wireless WAN (LTE, UMTS, GSM, etc.) */; -const KEY_WIMAX: u32 = KEY_WWAN; -const KEY_RFKILL : u32 = 247 /* Key that controls all radios */; -const KEY_MICMUTE : u32 = 248 /* Mute / unmute the microphone */; - pub const KEYMAP: &str = "xkb_keymap {}"; + +pub const KEYMAP_: &str = "xkb_keymap {\ +xkb_keycodes \"(unnamed)\" {\ + minimum = 8;\ + maximum = 255;\ + = 9;\ + = 10;\ + = 11;\ + = 12;\ + = 13;\ + = 14;\ + = 15;\ + = 16;\ + = 17;\ + = 18;\ + = 19;\ + = 20;\ + = 21;\ + = 22;\ + = 23;\ + = 24;\ + = 25;\ + = 26;\ + = 27;\ + = 28;\ + = 29;\ + = 30;\ + = 31;\ + = 32;\ + = 33;\ + = 34;\ + = 35;\ + = 36;\ + = 37;\ + = 38;\ + = 39;\ + = 40;\ + = 41;\ + = 42;\ + = 43;\ + = 44;\ + = 45;\ + = 46;\ + = 47;\ + = 48;\ + = 49;\ + = 50;\ + = 51;\ + = 52;\ + = 53;\ + = 54;\ + = 55;\ + = 56;\ + = 57;\ + = 58;\ + = 59;\ + = 60;\ + = 61;\ + = 62;\ + = 63;\ + = 64;\ + = 65;\ + = 66;\ + = 67;\ + = 68;\ + = 69;\ + = 70;\ + = 71;\ + = 72;\ + = 73;\ + = 74;\ + = 75;\ + = 76;\ + = 77;\ + = 78;\ + = 79;\ + = 80;\ + = 81;\ + = 82;\ + = 83;\ + = 84;\ + = 85;\ + = 86;\ + = 87;\ + = 88;\ + = 89;\ + = 90;\ + = 91;\ + = 92;\ + = 94;\ + = 95;\ + = 96;\ + = 97;\ + = 98;\ + = 99;\ + = 100;\ + = 101;\ + = 102;\ + = 103;\ + = 104;\ + = 105;\ + = 106;\ + = 107;\ + = 108;\ + = 109;\ + = 110;\ + = 111;\ + = 112;\ + = 113;\ + = 114;\ + = 115;\ + = 116;\ + = 117;\ + = 118;\ + = 119;\ + = 120;\ + = 121;\ + = 122;\ + = 123;\ + = 124;\ + = 125;\ + = 126;\ + = 127;\ + = 128;\ + = 129;\ + = 130;\ + = 131;\ + = 132;\ + = 133;\ + = 134;\ + = 135;\ + = 136;\ + = 137;\ + = 138;\ + = 139;\ + = 140;\ + = 141;\ + = 142;\ + = 143;\ + = 144;\ + = 145;\ + = 146;\ + = 147;\ + = 148;\ + = 149;\ + = 150;\ + = 151;\ + = 152;\ + = 153;\ + = 154;\ + = 155;\ + = 156;\ + = 157;\ + = 158;\ + = 159;\ + = 160;\ + = 161;\ + = 162;\ + = 163;\ + = 164;\ + = 165;\ + = 166;\ + = 167;\ + = 168;\ + = 169;\ + = 170;\ + = 171;\ + = 172;\ + = 173;\ + = 174;\ + = 175;\ + = 176;\ + = 177;\ + = 178;\ + = 179;\ + = 180;\ + = 181;\ + = 182;\ + = 183;\ + = 184;\ + = 185;\ + = 186;\ + = 187;\ + = 188;\ + = 189;\ + = 190;\ + = 191;\ + = 192;\ + = 193;\ + = 194;\ + = 195;\ + = 196;\ + = 197;\ + = 198;\ + = 199;\ + = 200;\ + = 201;\ + = 202;\ + = 203;\ + = 204;\ + = 205;\ + = 206;\ + = 207;\ + = 208;\ + = 209;\ + = 210;\ + = 211;\ + = 212;\ + = 213;\ + = 214;\ + = 215;\ + = 216;\ + = 217;\ + = 218;\ + = 219;\ + = 220;\ + = 221;\ + = 222;\ + = 223;\ + = 224;\ + = 225;\ + = 226;\ + = 227;\ + = 228;\ + = 229;\ + = 230;\ + = 231;\ + = 232;\ + = 233;\ + = 234;\ + = 235;\ + = 236;\ + = 237;\ + = 238;\ + = 239;\ + = 240;\ + = 241;\ + = 242;\ + = 243;\ + = 244;\ + = 245;\ + = 246;\ + = 247;\ + = 248;\ + = 249;\ + = 250;\ + = 251;\ + = 252;\ + = 253;\ + = 254;\ + = 255;\ + indicator 1 = \"Caps Lock\";\ + indicator 2 = \"Num Lock\";\ + indicator 3 = \"Scroll Lock\";\ + indicator 4 = \"Compose\";\ + indicator 5 = \"Kana\";\ + indicator 6 = \"Sleep\";\ + indicator 7 = \"Suspend\";\ + indicator 8 = \"Mute\";\ + indicator 9 = \"Misc\";\ + indicator 10 = \"Mail\";\ + indicator 11 = \"Charging\";\ + indicator 12 = \"Shift Lock\";\ + indicator 13 = \"Group 2\";\ + indicator 14 = \"Mouse Keys\";\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ + alias = ;\ +};\ +\ +xkb_types \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + type \"ONE_LEVEL\" {\ + modifiers= none;\ + level_name[Level1]= \"Any\";\ + };\ + type \"TWO_LEVEL\" {\ + modifiers= Shift;\ + map[Shift]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + };\ + type \"ALPHABETIC\" {\ + modifiers= Shift+Lock;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Caps\";\ + };\ + type \"SHIFT+ALT\" {\ + modifiers= Shift+Alt;\ + map[Shift+Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift+Alt\";\ + };\ + type \"PC_SUPER_LEVEL2\" {\ + modifiers= Mod4;\ + map[Mod4]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Super\";\ + };\ + type \"PC_CONTROL_LEVEL2\" {\ + modifiers= Control;\ + map[Control]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Control\";\ + };\ + type \"PC_LCONTROL_LEVEL2\" {\ + modifiers= LControl;\ + map[LControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LControl\";\ + };\ + type \"PC_RCONTROL_LEVEL2\" {\ + modifiers= RControl;\ + map[RControl]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RControl\";\ + };\ + type \"PC_ALT_LEVEL2\" {\ + modifiers= Alt;\ + map[Alt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt\";\ + };\ + type \"PC_LALT_LEVEL2\" {\ + modifiers= LAlt;\ + map[LAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"LAlt\";\ + };\ + type \"PC_RALT_LEVEL2\" {\ + modifiers= RAlt;\ + map[RAlt]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"RAlt\";\ + };\ + type \"CTRL+ALT\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[Shift]= Level2;\ + preserve[Shift]= Shift;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + preserve[Shift+LevelThree]= Shift;\ + map[Control+Alt]= Level5;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Ctrl+Alt\";\ + };\ + type \"LOCAL_EIGHT_LEVEL\" {\ + modifiers= Shift+Lock+Control+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Control]= Level5;\ + map[Shift+Lock+Control]= Level5;\ + map[Shift+Control]= Level6;\ + map[Lock+Control]= Level6;\ + map[Control+LevelThree]= Level7;\ + map[Shift+Lock+Control+LevelThree]= Level7;\ + map[Shift+Control+LevelThree]= Level8;\ + map[Lock+Control+LevelThree]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + level_name[Level4]= \"Shift Level3\";\ + level_name[Level5]= \"Ctrl\";\ + level_name[Level6]= \"Shift Ctrl\";\ + level_name[Level7]= \"Level3 Ctrl\";\ + level_name[Level8]= \"Shift Level3 Ctrl\";\ + };\ + type \"THREE_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Level3\";\ + };\ + type \"EIGHT_LEVEL\" {\ + modifiers= Shift+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level8;\ + map[Shift+Lock+LevelThree+LevelFive]= Level7;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Shift;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + preserve[Shift+Lock+NumLock]= Shift;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Shift+Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK\" {\ + modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + preserve[Shift+LevelFive]= Shift;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[NumLock]= Level5;\ + map[Shift+NumLock]= Level6;\ + preserve[Shift+NumLock]= Shift;\ + map[NumLock+LevelThree]= Level7;\ + map[Shift+NumLock+LevelThree]= Level8;\ + map[Shift+NumLock+LevelFive]= Level2;\ + map[NumLock+LevelThree+LevelFive]= Level3;\ + map[Shift+NumLock+LevelThree+LevelFive]= Level4;\ + map[Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + map[Lock+LevelFive]= Level5;\ + map[Shift+Lock+LevelFive]= Level6;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + map[Lock+NumLock]= Level5;\ + map[Shift+Lock+NumLock]= Level6;\ + map[Lock+NumLock+LevelThree]= Level7;\ + map[Shift+Lock+NumLock+LevelThree]= Level8;\ + map[Lock+NumLock+LevelFive]= Level2;\ + map[Lock+NumLock+LevelThree+LevelFive]= Level4;\ + map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"EIGHT_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree+LevelFive;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level4;\ + preserve[Shift+Lock+LevelThree]= Lock;\ + map[LevelFive]= Level5;\ + map[Shift+LevelFive]= Level6;\ + map[Lock+LevelFive]= Level6;\ + preserve[Lock+LevelFive]= Lock;\ + map[Shift+Lock+LevelFive]= Level6;\ + preserve[Shift+Lock+LevelFive]= Lock;\ + map[LevelThree+LevelFive]= Level7;\ + map[Shift+LevelThree+LevelFive]= Level8;\ + map[Lock+LevelThree+LevelFive]= Level7;\ + preserve[Lock+LevelThree+LevelFive]= Lock;\ + map[Shift+Lock+LevelThree+LevelFive]= Level8;\ + preserve[Shift+Lock+LevelThree+LevelFive]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"X\";\ + level_name[Level6]= \"X Shift\";\ + level_name[Level7]= \"X Alt Base\";\ + level_name[Level8]= \"X Shift Alt\";\ + };\ + type \"FOUR_LEVEL\" {\ + modifiers= Shift+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level4;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_SEMIALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level4;\ + preserve[Shift+Lock+LevelThree]= Lock;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_MIXED_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[NumLock]= Level2;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[NumLock+LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + };\ + type \"FOUR_LEVEL_X\" {\ + modifiers= Shift+Control+Alt+LevelThree;\ + map[LevelThree]= Level2;\ + map[Shift+LevelThree]= Level3;\ + map[Control+Alt]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Alt Base\";\ + level_name[Level3]= \"Shift Alt\";\ + level_name[Level4]= \"Ctrl+Alt\";\ + };\ + type \"SEPARATE_CAPS_AND_SHIFT_ALPHABETIC\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[Lock]= Level4;\ + preserve[Lock]= Lock;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock+LevelThree]= Level3;\ + preserve[Lock+LevelThree]= Lock;\ + map[Shift+Lock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"AltGr Base\";\ + level_name[Level4]= \"Shift AltGr\";\ + };\ + type \"FOUR_LEVEL_PLUS_LOCK\" {\ + modifiers= Shift+Lock+LevelThree;\ + map[Shift]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[Lock]= Level5;\ + map[Shift+Lock]= Level2;\ + map[Lock+LevelThree]= Level3;\ + map[Shift+Lock+LevelThree]= Level4;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Shift\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Shift Alt\";\ + level_name[Level5]= \"Lock\";\ + };\ + type \"KEYPAD\" {\ + modifiers= Shift+NumLock;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + };\ + type \"FOUR_LEVEL_KEYPAD\" {\ + modifiers= Shift+NumLock+LevelThree;\ + map[Shift]= Level2;\ + map[NumLock]= Level2;\ + map[LevelThree]= Level3;\ + map[Shift+LevelThree]= Level4;\ + map[NumLock+LevelThree]= Level4;\ + map[Shift+NumLock+LevelThree]= Level3;\ + level_name[Level1]= \"Base\";\ + level_name[Level2]= \"Number\";\ + level_name[Level3]= \"Alt Base\";\ + level_name[Level4]= \"Alt Number\";\ + };\ +};\ +\ +xkb_compatibility \"(unnamed)\" {\ + virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;\ +\ + interpret.useModMapMods= AnyLevel;\ + interpret.repeat= False;\ + interpret ISO_Level2_Latch+Exactly(Shift) {\ + useModMapMods=level1;\ + action= LatchMods(modifiers=Shift,clearLocks,latchToLock);\ + };\ + interpret Shift_Lock+AnyOf(Shift+Lock) {\ + action= LockMods(modifiers=Shift);\ + };\ + interpret Num_Lock+AnyOf(all) {\ + virtualModifier= NumLock;\ + action= LockMods(modifiers=NumLock);\ + };\ + interpret ISO_Level3_Shift+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOf(all) {\ + virtualModifier= LevelThree;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret Alt_L+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Alt_R+AnyOf(all) {\ + virtualModifier= Alt;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_L+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Meta_R+AnyOf(all) {\ + virtualModifier= Meta;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_L+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Super_R+AnyOf(all) {\ + virtualModifier= Super;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_L+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Hyper_R+AnyOf(all) {\ + virtualModifier= Hyper;\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + interpret Scroll_Lock+AnyOf(all) {\ + virtualModifier= ScrollLock;\ + action= LockMods(modifiers=modMapMods);\ + };\ + interpret ISO_Level5_Shift+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOf(all) {\ + virtualModifier= LevelFive;\ + useModMapMods=level1;\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Mode_switch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= SetGroup(group=+1);\ + };\ + interpret ISO_Level3_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelThree,clearLocks);\ + };\ + interpret ISO_Level3_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);\ + };\ + interpret ISO_Level3_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelThree);\ + };\ + interpret ISO_Group_Latch+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LatchGroup(group=2);\ + };\ + interpret ISO_Next_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=+1);\ + };\ + interpret ISO_Prev_Group+AnyOfOrNone(all) {\ + virtualModifier= AltGr;\ + useModMapMods=level1;\ + action= LockGroup(group=-1);\ + };\ + interpret ISO_First_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=1);\ + };\ + interpret ISO_Last_Group+AnyOfOrNone(all) {\ + action= LockGroup(group=2);\ + };\ + interpret KP_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_End+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret KP_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_Down+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=+1);\ + };\ + interpret KP_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_Next+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret KP_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_Left+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+0);\ + };\ + interpret KP_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_Right+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+0);\ + };\ + interpret KP_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_Home+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret KP_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_Up+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+0,y=-1);\ + };\ + interpret KP_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_Prior+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret KP_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_Begin+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret KP_F2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_Divide+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret KP_F3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_Multiply+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret KP_F4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Subtract+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=3);\ + };\ + interpret KP_Separator+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_Add+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret KP_0+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Insert+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=lock);\ + };\ + interpret KP_Decimal+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret KP_Delete+AnyOfOrNone(all) {\ + repeat= True;\ + action= LockPtrBtn(button=default,affect=unlock);\ + };\ + interpret F25+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=1);\ + };\ + interpret F26+AnyOfOrNone(all) {\ + repeat= True;\ + action= SetPtrDflt(affect=button,button=2);\ + };\ + interpret F27+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=-1);\ + };\ + interpret F29+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=-1);\ + };\ + interpret F31+AnyOfOrNone(all) {\ + repeat= True;\ + action= PtrBtn(button=default);\ + };\ + interpret F33+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=-1,y=+1);\ + };\ + interpret F35+AnyOfOrNone(all) {\ + repeat= True;\ + action= MovePtr(x=+1,y=+1);\ + };\ + interpret Pointer_Button_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default);\ + };\ + interpret Pointer_Button1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1);\ + };\ + interpret Pointer_Button2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2);\ + };\ + interpret Pointer_Button3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3);\ + };\ + interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {\ + action= PtrBtn(button=default,count=2);\ + };\ + interpret Pointer_DblClick1+AnyOfOrNone(all) {\ + action= PtrBtn(button=1,count=2);\ + };\ + interpret Pointer_DblClick2+AnyOfOrNone(all) {\ + action= PtrBtn(button=2,count=2);\ + };\ + interpret Pointer_DblClick3+AnyOfOrNone(all) {\ + action= PtrBtn(button=3,count=2);\ + };\ + interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=default);\ + };\ + interpret Pointer_Drag1+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=1);\ + };\ + interpret Pointer_Drag2+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=2);\ + };\ + interpret Pointer_Drag3+AnyOfOrNone(all) {\ + action= LockPtrBtn(button=3);\ + };\ + interpret Pointer_EnableKeys+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret Pointer_Accelerate+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=+1);\ + };\ + interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {\ + action= SetPtrDflt(affect=button,button=-1);\ + };\ + interpret AccessX_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXKeys);\ + };\ + interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AccessXFeedback);\ + };\ + interpret RepeatKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=RepeatKeys);\ + };\ + interpret SlowKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=SlowKeys);\ + };\ + interpret BounceKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=BounceKeys);\ + };\ + interpret StickyKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=StickyKeys);\ + };\ + interpret MouseKeys_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeys);\ + };\ + interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=MouseKeysAccel);\ + };\ + interpret Overlay1_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret Overlay2_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=none);\ + };\ + interpret AudibleBell_Enable+AnyOfOrNone(all) {\ + action= LockControls(controls=AudibleBell);\ + };\ + interpret Terminate_Server+AnyOfOrNone(all) {\ + action= Terminate();\ + };\ + interpret Alt_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Alt_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Alt,clearLocks);\ + };\ + interpret Meta_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Meta_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Meta,clearLocks);\ + };\ + interpret Super_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Super_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Super,clearLocks);\ + };\ + interpret Hyper_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Hyper_R+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Hyper,clearLocks);\ + };\ + interpret Shift_L+AnyOfOrNone(all) {\ + action= SetMods(modifiers=Shift,clearLocks);\ + };\ + interpret XF86Switch_VT_1+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=1,!same);\ + };\ + interpret XF86Switch_VT_2+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=2,!same);\ + };\ + interpret XF86Switch_VT_3+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=3,!same);\ + };\ + interpret XF86Switch_VT_4+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=4,!same);\ + };\ + interpret XF86Switch_VT_5+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=5,!same);\ + };\ + interpret XF86Switch_VT_6+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=6,!same);\ + };\ + interpret XF86Switch_VT_7+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=7,!same);\ + };\ + interpret XF86Switch_VT_8+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=8,!same);\ + };\ + interpret XF86Switch_VT_9+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=9,!same);\ + };\ + interpret XF86Switch_VT_10+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=10,!same);\ + };\ + interpret XF86Switch_VT_11+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=11,!same);\ + };\ + interpret XF86Switch_VT_12+AnyOfOrNone(all) {\ + repeat= True;\ + action= SwitchScreen(screen=12,!same);\ + };\ + interpret XF86LogGrabInfo+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86LogWindowTree+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);\ + };\ + interpret XF86Next_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret XF86Prev_VMode+AnyOfOrNone(all) {\ + repeat= True;\ + action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);\ + };\ + interpret ISO_Level5_Shift+AnyOfOrNone(all) {\ + action= SetMods(modifiers=LevelFive,clearLocks);\ + };\ + interpret ISO_Level5_Latch+AnyOfOrNone(all) {\ + action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);\ + };\ + interpret ISO_Level5_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=LevelFive);\ + };\ + interpret Caps_Lock+AnyOfOrNone(all) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+Exactly(Lock) {\ + action= LockMods(modifiers=Lock);\ + };\ + interpret Any+AnyOf(all) {\ + action= SetMods(modifiers=modMapMods,clearLocks);\ + };\ + indicator \"Caps Lock\" {\ + whichModState= locked;\ + modifiers= Lock;\ + };\ + indicator \"Num Lock\" {\ + whichModState= locked;\ + modifiers= NumLock;\ + };\ + indicator \"Scroll Lock\" {\ + whichModState= locked;\ + modifiers= ScrollLock;\ + };\ + indicator \"Shift Lock\" {\ + whichModState= locked;\ + modifiers= Shift;\ + };\ + indicator \"Group 2\" {\ + groups= 0xfe;\ + };\ + indicator \"Mouse Keys\" {\ + controls= MouseKeys;\ + };\ +};\ +\ +xkb_symbols \"(unnamed)\" {\ + name[group1]=\"English (US)\";\ +\ + key { [ Escape ] };\ + key { [ 1, exclam ] };\ + key { [ 2, at ] };\ + key { [ 3, numbersign ] };\ + key { [ 4, dollar ] };\ + key { [ 5, percent ] };\ + key { [ 6, asciicircum ] };\ + key { [ 7, ampersand ] };\ + key { [ 8, asterisk ] };\ + key { [ 9, parenleft ] };\ + key { [ 0, parenright ] };\ + key { [ minus, underscore ] };\ + key { [ equal, plus ] };\ + key { [ BackSpace, BackSpace ] };\ + key { [ Tab, ISO_Left_Tab ] };\ + key { [ q, Q, 1 ] };\ + key { [ w, W, 2 ] };\ + key { [ e, E, 3 ] };\ + key { [ r, R, 4 ] };\ + key { [ t, T, 5 ] };\ + key { [ y, Y, 6 ] };\ + key { [ u, U, 7 ] };\ + key { [ i, I, 8 ] };\ + key { [ o, O, 9 ] };\ + key { [ p, P, 0 ] };\ + key { [ bracketleft, braceleft ] };\ + key { [ bracketright, braceright ] };\ + key { [ Return ] };\ + key { [ Control_L ] };\ + key { [ a, A, minus ] };\ + key { [ s, S, at ] };\ + key { [ d, D, asterisk ] };\ + key { [ f, F, asciicircum ] };\ + key { [ g, G, colon ] };\ + key { [ h, H, semicolon ] };\ + key { [ j, J, parenleft ] };\ + key { [ k, K, parenright ] };\ + key { [ l, L, asciitilde ] };\ + key { [ semicolon, colon ] };\ + key { [ apostrophe, quotedbl ] };\ + key { [ grave, asciitilde ] };\ + key { [ Shift_L ] };\ + key { [ backslash, bar ] };\ + key { [ z, Z, slash ] };\ + key { [ x, X, apostrophe ] };\ + key { [ c, C, quotedbl ] };\ + key { [ v, V, plus ] };\ + key { [ b, B, equal ] };\ + key { [ n, N, question ] };\ + key { [ m, M, exclam ] };\ + key { [ comma, less, backslash] };\ + key { [ period, greater, bar ] };\ + key { [ slash, question ] };\ + key { [ Shift_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Multiply, KP_Multiply, KP_Multiply, KP_Multiply, XF86ClearGrab ]\ + };\ + key { [ Alt_L, Meta_L ] };\ + key { [ space ] };\ + key { [ Caps_Lock ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F6, F6, F6, F6, XF86Switch_VT_6 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F7, F7, F7, F7, XF86Switch_VT_7 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F8, F8, F8, F8, XF86Switch_VT_8 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F9, F9, F9, F9, XF86Switch_VT_9 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F10, F10, F10, F10, XF86Switch_VT_10 ]\ + };\ + key { [ Num_Lock ] };\ + key { [ Scroll_Lock ] };\ + key { [ KP_Home, KP_7 ] };\ + key { [ KP_Up, KP_8 ] };\ + key { [ KP_Prior, KP_9 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Subtract, KP_Subtract, KP_Subtract, KP_Subtract, XF86Prev_VMode ]\ + };\ + key { [ KP_Left, KP_4 ] };\ + key { [ KP_Begin, KP_5 ] };\ + key { [ KP_Right, KP_6 ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Add, KP_Add, KP_Add, KP_Add, XF86Next_VMode ]\ + };\ + key { [ KP_End, KP_1 ] };\ + key { [ KP_Down, KP_2 ] };\ + key { [ KP_Next, KP_3 ] };\ + key { [ KP_Insert, KP_0 ] };\ + key { [ KP_Delete, KP_Decimal ] };\ + key { [ ISO_Level3_Shift ] };\ + key { [ less, greater, bar, brokenbar ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ]\ + };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ]\ + };\ + key { [ Katakana ] };\ + key { [ Hiragana ] };\ + key { [ Henkan_Mode ] };\ + key { [ Hiragana_Katakana ] };\ + key { [ Muhenkan ] };\ + key { [ KP_Enter ] };\ + key { [ Control_R ] };\ + key {\ + type= \"CTRL+ALT\",\ + symbols[Group1]= [ KP_Divide, KP_Divide, KP_Divide, KP_Divide, XF86Ungrab ]\ + };\ + key {\ + type= \"PC_ALT_LEVEL2\",\ + symbols[Group1]= [ Print, Sys_Req ]\ + };\ + key {\ + type= \"TWO_LEVEL\",\ + symbols[Group1]= [ Alt_R, Meta_R ]\ + };\ + key { [ Linefeed ] };\ + key { [ Home ] };\ + key { [ Up ] };\ + key { [ Prior ] };\ + key { [ Left ] };\ + key { [ Right ] };\ + key { [ End ] };\ + key { [ Down ] };\ + key { [ Next ] };\ + key { [ Insert ] };\ + key { [ Delete ] };\ + key { [ XF86AudioMute ] };\ + key { [ XF86AudioLowerVolume ] };\ + key { [ XF86AudioRaiseVolume ] };\ + key { [ XF86PowerOff ] };\ + key { [ KP_Equal ] };\ + key { [ plusminus ] };\ + key {\ + type= \"PC_CONTROL_LEVEL2\",\ + symbols[Group1]= [ Pause, Break ]\ + };\ + key { [ XF86LaunchA ] };\ + key { [ KP_Decimal, KP_Decimal ] };\ + key { [ Hangul ] };\ + key { [ Hangul_Hanja ] };\ + key { [ Super_L ] };\ + key { [ Super_R ] };\ + key { [ Menu ] };\ + key { [ Cancel ] };\ + key { [ Redo ] };\ + key { [ SunProps ] };\ + key { [ Undo ] };\ + key { [ SunFront ] };\ + key { [ XF86Copy ] };\ + key { [ XF86Open ] };\ + key { [ XF86Paste ] };\ + key { [ Find ] };\ + key { [ XF86Cut ] };\ + key { [ Help ] };\ + key { [ XF86MenuKB ] };\ + key { [ XF86Calculator ] };\ + key { [ XF86Sleep ] };\ + key { [ XF86WakeUp ] };\ + key { [ XF86Explorer ] };\ + key { [ XF86Send ] };\ + key { [ XF86Xfer ] };\ + key { [ XF86Launch1 ] };\ + key { [ XF86Launch2 ] };\ + key { [ XF86WWW ] };\ + key { [ XF86DOS ] };\ + key { [ XF86ScreenSaver ] };\ + key { [ XF86RotateWindows ] };\ + key { [ XF86TaskPane ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Favorites ] };\ + key { [ XF86MyComputer ] };\ + key { [ XF86Back ] };\ + key { [ XF86Forward ] };\ + key { [ XF86Eject ] };\ + key { [ XF86Eject, XF86Eject ] };\ + key { [ XF86AudioNext ] };\ + key { [ XF86AudioPlay, XF86AudioPause ] };\ + key { [ XF86AudioPrev ] };\ + key { [ XF86AudioStop, XF86Eject ] };\ + key { [ XF86AudioRecord ] };\ + key { [ XF86AudioRewind ] };\ + key { [ XF86Phone ] };\ + key { [ XF86Tools ] };\ + key { [ XF86HomePage ] };\ + key { [ XF86Reload ] };\ + key { [ XF86Close ] };\ + key { [ XF86ScrollUp ] };\ + key { [ XF86ScrollDown ] };\ + key { [ parenleft ] };\ + key { [ parenright ] };\ + key { [ XF86New ] };\ + key { [ Redo ] };\ + key { [ XF86Tools ] };\ + key { [ XF86Launch5 ] };\ + key { [ XF86Launch6 ] };\ + key { [ XF86Launch7 ] };\ + key { [ XF86Launch8 ] };\ + key { [ XF86Launch9 ] };\ + key { [ XF86AudioMicMute ] };\ + key { [ XF86TouchpadToggle ] };\ + key { [ XF86TouchpadOn ] };\ + key { [ XF86TouchpadOff ] };\ + key { [ Mode_switch ] };\ + key { [ NoSymbol, Alt_L ] };\ + key { [ NoSymbol, Meta_L ] };\ + key { [ NoSymbol, Super_L ] };\ + key { [ NoSymbol, Hyper_L ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioPause ] };\ + key { [ XF86Launch3 ] };\ + key { [ XF86Launch4 ] };\ + key { [ XF86LaunchB ] };\ + key { [ XF86Suspend ] };\ + key { [ XF86Close ] };\ + key { [ XF86AudioPlay ] };\ + key { [ XF86AudioForward ] };\ + key { [ Print ] };\ + key { [ XF86WebCam ] };\ + key { [ XF86AudioPreset ] };\ + key { [ XF86Mail ] };\ + key { [ XF86Messenger ] };\ + key { [ XF86Search ] };\ + key { [ XF86Go ] };\ + key { [ XF86Finance ] };\ + key { [ XF86Game ] };\ + key { [ XF86Shop ] };\ + key { [ Cancel ] };\ + key { [ XF86MonBrightnessDown ] };\ + key { [ XF86MonBrightnessUp ] };\ + key { [ XF86AudioMedia ] };\ + key { [ XF86Display ] };\ + key { [ XF86KbdLightOnOff ] };\ + key { [ XF86KbdBrightnessDown ] };\ + key { [ XF86KbdBrightnessUp ] };\ + key { [ XF86Send ] };\ + key { [ XF86Reply ] };\ + key { [ XF86MailForward ] };\ + key { [ XF86Save ] };\ + key { [ XF86Documents ] };\ + key { [ XF86Battery ] };\ + key { [ XF86Bluetooth ] };\ + key { [ XF86WLAN ] };\ + key { [ XF86UWB ] };\ + key { [ XF86WWAN ] };\ + key { [ XF86RFKill ] };\ + modifier_map Shift { , };\ + modifier_map Lock { };\ + modifier_map Control { , };\ + modifier_map Mod1 { , , };\ + modifier_map Mod2 { };\ + modifier_map Mod4 { , , , };\ + modifier_map Mod5 { , };\ +};\ +\ +};\ +"; diff --git a/crates/cursor-move-webapp/src/utils/mod.rs b/crates/cursor-move-webapp/src/utils/mod.rs deleted file mode 100644 index cd13774..0000000 --- a/crates/cursor-move-webapp/src/utils/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod mouse_filter_buffer; diff --git a/crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs b/crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs deleted file mode 100644 index be2af6a..0000000 --- a/crates/cursor-move-webapp/src/utils/mouse_filter_buffer.rs +++ /dev/null @@ -1,78 +0,0 @@ -use std::collections::VecDeque; - -use dioxus_html::geometry::{ - ElementSpace, - euclid::{Point2D, Vector2D}, -}; -use wasmtimer::std::SystemTime; - -pub struct MouseFilterBufferEntry { - pub position: Point2D, - pub time: SystemTime, -} - -pub struct MouseFilterBuffer { - buffer: VecDeque, -} - -impl MouseFilterBuffer { - pub fn new( - size: usize, - initial: Point2D, - initial_timestamp: SystemTime, - ) -> Self { - let mut buffer = VecDeque::with_capacity(size); - buffer.push_back(MouseFilterBufferEntry { - position: initial, - time: initial_timestamp, - }); - Self { buffer } - } - - pub fn push( - &mut self, - point: Point2D, - time: SystemTime, - ) { - if self.buffer.len() == self.buffer.capacity() { - self.buffer.pop_front(); - } - self.buffer.push_back(MouseFilterBufferEntry { - position: point, - time, - }); - } - - pub fn back(&self) -> &MouseFilterBufferEntry { - self.buffer - .back() - .expect("Mouse filter buffer may never have less than one element") - } - - pub fn average_velocity_since( - &self, - start_time: SystemTime, - ) -> Vector2D { - let mut total_distance = Vector2D::zero(); - - let mut i = self.buffer.iter(); - - let Some(mut last) = i.find(|it| it.time >= start_time) else { - return Vector2D::zero(); - }; - let start_time = last.time; - let mut last_time = last.time; - - for point in i { - total_distance += point.position - last.position; - last = point; - last_time = point.time; - } - - if total_distance == Vector2D::zero() { - return Vector2D::zero(); - } - - total_distance / (last_time.duration_since(start_time).unwrap().as_secs_f64()) - } -} diff --git a/crates/cursor-move-webapp/src/views/home.rs b/crates/cursor-move-webapp/src/views/home.rs index 73878ac..51edcaa 100644 --- a/crates/cursor-move-webapp/src/views/home.rs +++ b/crates/cursor-move-webapp/src/views/home.rs @@ -1,4 +1,4 @@ -use crate::components::Controls; +use crate::components::MouseArea; use dioxus::prelude::*; /// The Home page component that will be rendered when the current route is `[Route::Home]` @@ -10,7 +10,7 @@ pub fn Home() -> Element { rsx! { div { class: Styles::container, - Controls { } + MouseArea { } } } } diff --git a/crates/cursor-mover-app/Cargo.toml b/crates/cursor-mover-app/Cargo.toml new file mode 100644 index 0000000..d8eb4c2 --- /dev/null +++ b/crates/cursor-mover-app/Cargo.toml @@ -0,0 +1,18 @@ +[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 diff --git a/crates/cursor-mover-app/README.md b/crates/cursor-mover-app/README.md new file mode 100644 index 0000000..63e3699 --- /dev/null +++ b/crates/cursor-mover-app/README.md @@ -0,0 +1 @@ +The main application diff --git a/crates/cursor-mover-app/src/main.rs b/crates/cursor-mover-app/src/main.rs new file mode 100644 index 0000000..cee2808 --- /dev/null +++ b/crates/cursor-mover-app/src/main.rs @@ -0,0 +1,133 @@ +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, +} + +impl Dispatch for AppData { + fn event( + state: &mut Self, + proxy: &ZwlrVirtualPointerV1, + event: ::Event, + data: &(), + conn: &Connection, + qhandle: &QueueHandle, + ) { + println!("VPointerData"); + } +} + +impl Dispatch for AppData { + fn event( + state: &mut Self, + proxy: &ZwlrVirtualPointerManagerV1, + event: ::Event, + data: &(), + conn: &Connection, + qhandle: &QueueHandle, + ) { + println!("ZwlrEvent") + } +} + +impl Dispatch for AppData { + fn event( + app_data: &mut Self, + registry: &wl_registry::WlRegistry, + event: wl_registry::Event, + _: &(), + _: &Connection, + queue_handle: &QueueHandle, + ) { + 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::( + 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(); +} diff --git a/deny.toml b/deny.toml index 20a6e7b..5bd3fa6 100644 --- a/deny.toml +++ b/deny.toml @@ -20,21 +20,18 @@ allow = [ "Unicode-3.0", #"0BSD", #"Apache-2.0 WITH LLVM-exception", - "Apache-2.0", - "BSD-2-Clause", - "BSD-3-Clause", - "BSL-1.0", - "CC0-1.0", - "ISC", + #"Apache-2.0", + # "BSD-2-Clause", + #"BSD-3-Clause", + #"BSL-1.0", + #"CC0-1.0", + #"ISC", # "MIT-0", "MIT", #"MPL-2.0", #"Unicode-3.0", "Unlicense", - "Zlib", - - #TODO Read up on that one - "CDLA-Permissive-2.0" + #"Zlib", ] exceptions = [ # { name = "unicode-ident", allow = ["Unicode-DFS-2016"] } @@ -45,20 +42,6 @@ multiple-versions = "warn" wildcards = "deny" # Certain crates that we do not want multiple versions of in the dependency tree 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] unknown-registry = "warn" diff --git a/flake.nix b/flake.nix index 73ceeda..f00ac9b 100644 --- a/flake.nix +++ b/flake.nix @@ -45,11 +45,11 @@ perSystem = { - #config, - #self', + config, + self', inputs', pkgs, - #system, + system, ... }: { @@ -117,6 +117,10 @@ wasmBindgen pkgs.libxkbcommon + + pkgs.clang + pkgs.llvmPackages.libclang + ]; scripts.checkall.exec = '' @@ -125,11 +129,8 @@ 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 ====" + cargo nextest run --workspace --all-targets --all-features --status-level all + cargo test ''; # DO NOT ENABLE RUST because devenv messes up the ability # to build rust-src