Simple Wayland HotKey Daemon

Related tags

Miscellaneousswhkd
Overview

swhkd

Simple Wayland HotKey Daemon

This project is still very new and I'm making new decisions everyday as to where I should drive this project.

I'm using libevdev which technically makes swhkd display protocol indepdent, but we'll need to put that to the test before claiming anything.

Currently I have only been able to achieve the grabbing of input evdev, I don't know how I will process chains of keybinds, but we'll get to that soon.

Python:

Adressing the elephant in the room, python. Python is good enough for the prototype stage of the project, once I have a clear idea and a working prototype, I will port the project to go or zig.

Comments
  • swhkd doesn't start: Os Error, Function not implemented

    swhkd doesn't start: Os Error, Function not implemented

    Version Information:

    • Distribution Information ( run uname -a ): Linux FrameWork 5.16.11-arch1-1 #1 SMP PREEMPT Thu, 24 Feb 2022 02:18:20 +0000 x86_64 GNU/Linux
    • swhkd version ( swhkd -V ) swhkd 1.0.0

    Describe the bug: I installed from the AUR (swhkd-git), when I try to run start the daemon I get the following error msg:

    $ swhks &
    $ pkexec swhkd -c ~/.config/swhkd/swhkdrc
    [2022-03-02T00:49:56Z WARN  swhkd] Running swhkd as root!
    Error: Os { code: 38, kind: Unsupported, message: "Function not implemented" }
    

    Expected behavior: The daemon to start succefully.

    Actual behavior: Daemon doesn't start and crashes.

    To Reproduce:

    $ paru -S swhkd
    $ swhks &
    $ pkexec swhkd -c ~/.config/swhkd/swhkdrc
    

    I also tried installing straight from the github:

    $ git clone https://github.com/waycrate/swhkd
    $ cd swhkd
    $ git rev-parse HEAD
    3986dd01a31c168e91a3de038911745293dfa574
    $ make setup
    $ make glibc
    $ sudo make install
    

    But the same crash happens.

    Bug 
    opened by loiccoyle 18
  • Re-emit ignored events from grabbed devices to uinput devices

    Re-emit ignored events from grabbed devices to uinput devices

    Ignored events (i.e. events other than key presses for now) are re-emitted to the uinput devices. This allows grabbing mouses and other pointer devices while still allowing the cursors to work.

    In some cases, events are not re-emitted at all when the uinput device handles keys, relative axes and switches. By sending switch events to a separate uinput device just for switches and another one for keys and relative axes, we can re-emit keys, pointer events, and switches events properly.

    Enhancement 
    opened by ajanon 16
  • `pkexec swhkd` turn off the wifi on start

    `pkexec swhkd` turn off the wifi on start

    Version Information:

    • Distribution Information ( run uname -a )

    Debian 5.18.16

    • swhkd version ( swhkd -V )

    swhkd 1.2.1

    Describe the bug: pkexec swhkd turn off the wifi on start. I have to enable it manually after.

    Note

    • It turns off the wifi (not disconnect)
    • Reload config is fine.

    Expected behavior: Don't turn off wifi

    Actual behavior:

    ❯ pkexec swhkd -d -c ~/.config/swhkd/swhkdrc
    [2022-11-28T13:34:22Z TRACE swhkd] Logger initialized.
    [2022-11-28T13:34:22Z TRACE swhkd] Invoking UID: 85819
    [2022-11-28T13:34:22Z TRACE swhkd] Setting process umask.
    [2022-11-28T13:34:22Z ERROR swhkd] XDG_RUNTIME_DIR has not been set.
    [2022-11-28T13:34:22Z TRACE swhkd] Reading /run/swhkd/swhkd_85819.pid file and checking for running instances.
    [2022-11-28T13:34:22Z DEBUG swhkd] Previous PID: 1559337
    [2022-11-28T13:34:23Z WARN  swhkd] Running swhkd as root!
    [2022-11-28T13:34:23Z DEBUG swhkd::perms] Setting initgroups...
    [2022-11-28T13:34:23Z DEBUG swhkd::perms] Setting EGID...
    [2022-11-28T13:34:23Z DEBUG swhkd::perms] Setting EUID...
    [2022-11-28T13:34:23Z DEBUG swhkd] Using config file path: "/home/timgreen/.config/swhkd/swhkdrc"
    [2022-11-28T13:34:23Z DEBUG swhkd::perms] Setting EGID...
    [2022-11-28T13:34:23Z DEBUG swhkd::perms] Setting EUID...
    [2022-11-28T13:34:23Z DEBUG swhkd::perms] Setting initgroups...
    [2022-11-28T13:34:23Z TRACE swhkd] Attempting to find all keyboard file descriptors.
    [2022-11-28T13:34:23Z TRACE swhkd] Other: sof-hda-dsp HDMI/DP,pcm=5
    [2022-11-28T13:34:23Z TRACE swhkd] Other: sof-hda-dsp HDMI/DP,pcm=4
    [2022-11-28T13:34:23Z TRACE swhkd] Other: sof-hda-dsp HDMI/DP,pcm=3
    [2022-11-28T13:34:23Z TRACE swhkd] Other: sof-hda-dsp Headphone
    [2022-11-28T13:34:23Z TRACE swhkd] Other: sof-hda-dsp Mic
    [2022-11-28T13:34:23Z TRACE swhkd] Other: Integrated RGB Camera: Integrat
    [2022-11-28T13:34:23Z TRACE swhkd] Other: ELAN067A:00 04F3:3197 Touchpad
    [2022-11-28T13:34:23Z TRACE swhkd] Other: ELAN067A:00 04F3:3197 Mouse
    [2022-11-28T13:34:23Z TRACE swhkd] Other: Integrated RGB Camera: Integrat
    [2022-11-28T13:34:23Z TRACE swhkd] Other: ThinkPad Extra Buttons
    [2022-11-28T13:34:23Z TRACE swhkd] Other: Wacom Pen and multitouch sensor Finger
    [2022-11-28T13:34:23Z TRACE swhkd] Other: Wacom Pen and multitouch sensor Pen
    [2022-11-28T13:34:23Z TRACE swhkd] Other: TPPS/2 Elan TrackPoint
    [2022-11-28T13:34:23Z TRACE swhkd] Other: Video Bus
    [2022-11-28T13:34:23Z TRACE swhkd] Other: Power Button
    [2022-11-28T13:34:23Z TRACE swhkd] Other: Lid Switch
    [2022-11-28T13:34:24Z TRACE swhkd] Other: PC Speaker
    [2022-11-28T13:34:24Z TRACE swhkd] Other: Sleep Button
    [2022-11-28T13:34:24Z DEBUG swhkd] Keyboard: AT Translated Set 2 keyboard
    [2022-11-28T13:34:24Z DEBUG swhkd] 1 Keyboard device(s) detected.
    [2022-11-28T13:34:24Z ERROR swhkd] XDG_RUNTIME_DIR has not been set.
    [2022-11-28T13:34:37Z DEBUG swhkd] state_modifiers: {
    

    To Reproduce: Just run pkexec swhkd

    Additional information: Anything else you'd like us to know ?

    Happy to grab other logs to happy debugging.

    Bug 
    opened by timgreen 14
  • Add ability to load multiple config

    Add ability to load multiple config

    Example:

    # /home/waycrate/.config/swhkd/swhkdrc
    super + enter
        alarcritty
    super + shift + w
        firefox
    
    # /home/waycrate/.dwm/swhkdrc
    use /home/waycrate/.config/swhkd/swhkdrc
    super + q
        dwmc quit
    

    As you can see in the code, we can anyone of use import include source as the token

    Todo:

    • [x] error checks for each config file imported and report error with the file path
    • [ ] do some clean up
    • [ ] write test functions for testing a config file (read the file and compare the result)
    • [ ] support relative path and ~/ in path
    Enhancement 
    opened by EdenQwQ 13
  • cargo package / crates io?

    cargo package / crates io?

    Describe the bug:

    Can see here a cargo.toml file in the root folder of this repo / the main project repo. However cannot seem to just cargo install ... the software like other rust packages. So is this something planned for the future?

    Have tried the following on the cmdline:

    ⏚ θ127° [id:~/.bin] $ cargo install Swhkd
        Updating crates.io index
    error: could not find `Swhkd` in registry `crates-io` with version `*`
    ⏚ θ127° [id:~/.bin] 101 $ cargo install swhkd
        Updating crates.io index
    error: could not find `swhkd` in registry `crates-io` with version `*`
    ⏚ θ127° [id:~/.bin] 101 $ cargo install swhkd-git
        Updating crates.io index
    error: could not find `swhkd-git` in registry `crates-io` with version `*`
    ⏚ θ127° [id:~/.bin] 101 $ cargo install swhkd-musl-git
        Updating crates.io index
    error: could not find `swhkd-musl-git` in registry `crates-io` with version `*`
    ⏚ θ127° [id:~/.bin] 101 $ cargo install swhkd-bin
        Updating crates.io index
    error: could not find `swhkd-bin` in registry `crates-io` with version `*`
    ⏚ θ127° [id:~/.bin] 101 $ cargo install swhkd-musl-bin
        Updating crates.io index
    error: could not find `swhkd-musl-bin` in registry `crates-io` with version `*`
    ⏚ θ127° [id:~/.bin] 101 $ cargo install swhks
        Updating crates.io index
    error: could not find `swhks` in registry `crates-io` with version `*`
    ⏚ θ127° [id:~/.bin] 101 $ 
    

    Additional information: Anything else you'd like us to know ?

    Bug 
    opened by dreamcat4 11
  • modal feature missing?

    modal feature missing?

    Version Information:

    • linux 5.16.11-arch1-2
    • swhkd 1.1.0

    Describe the bug: sxhkd has the modal feature, e.g. (example from https://github.com/baskerville/sxhkd/blob/master/README.md )

    super + o ; {e,w,m}
    	{gvim,firefox,thunderbird}
    

    swhkd doesn't seem to recognize the semicolor ;. Is this implemented yet?

    Expected behavior: Drop in replacement for sxhkd.

    Actual behavior: semicolon ; causes error.

    To Reproduce: same as above

    super + o ; {e,w,m}
    	{gvim,firefox,thunderbird}
    

    Additional information: Great project! Thank you!

    Enhancement Good first issue 
    opened by tsankuanglee 11
  • fix: patch CVE-2022-27814

    fix: patch CVE-2022-27814

    From what I've seen, std::fs::File::open() doesn't take into account the UID when trying to detect files. To prevent detection of root-owned files in root directories, I've resorted to using the system /bin/cat command for now to open files. It's hacky, but it seems to work.

    opened by angelofallars 8
  • Chords do not work

    Chords do not work

    Version Information:

    • Distribution Information ( run uname -a ) Linux xircon-w6567sz 5.16.16-zen1-1-zen #1 ZEN SMP PREEMPT Mon, 21 Mar 2022 22:59:42 +0000 x86_64 GNU/Linux
    • swhkd version ( swhkd -V ) swhkd 1.1.7

    Describe the bug: Chords not working

    super + n:  {n,p,d,x}
        {variety -n, variety -p, variety -t, variety --pause && notify-send Paused} 
    
    [2022-03-28T13:43:13Z ERROR swhkd] Config Error: Error parsing config file "/etc/swhkd/swhkdrc". Unknown symbol at line 11.
    

    Expected behavior: Should work as it does in sxhkd.

    Actual behavior: See error swhkd does not load.

    Bug 
    opened by xircon 7
  • Add changelog

    Add changelog

    We're currently missing a changelog file. Having a changelog file directly inside the repository would help track changes. This would also make it easier to create new releases as we could just copy and paste what is already available in the changelog file.

    I would suggest using something like Keep a Changelog for this. We can add this file with the latest changes only for now, and try to add previous releases to this file gradually later on.

    We could also enforce updating the changelog on PRs to ensure we do have everything in there.

    This issue is mainly to discuss this and to think about possible solutions.

    Documentation 
    opened by ajanon 6
  • Grab keys so they don't go to a focused application

    Grab keys so they don't go to a focused application

    what i meant is that with sxhkd the keybindings conflict and sxhkd is given the preference (i think that's how you spell it) so if i press alt + a when i'm focused on pcmanfm the keybinding will work on sxhkd but not pcmanfm

    Discord message

    Somehow we should provide an option to swallow keys so that they don't go to a focused application / the tty.

    Enhancement 
    opened by UnsignedArduino 6
  • [fix] raise swhkd privileges right after reading config

    [fix] raise swhkd privileges right after reading config

    As a fix for CVE-2022-27814, root privileges are dropped to the calling user when (re)loading the config file. Privileges were sometimes dropped but never raised again, which caused crashes when sending SIGHUP to swhkd multiple times in a row.

    This now always raises privileges after successfully reading the config file. Fixes #155.

    Bug 
    opened by ajanon 5
  • Release milestones

    Release milestones

    To help plan features and work on long-term goals for the project, we could use GitHub milestones.

    This would be particularly helpful for deprecation or for big features that could then be split into multiple smaller issues to distribute work more easily.

    For now, we could create a 1.3.0 milestone and add some features we would like to implement. Fixes could just be added as needed and as implemented.

    This would help in bringing features to stable releases in a timely manner (see #194).

    Enhancement 
    opened by ajanon 0
  • Stable release process

    Stable release process

    There is currently no formal process for releasing a stable version of swhkd.

    For 1.2.2, I created a separate branch, split from a specific older commit, on which I updated the Cargo.toml and Cargo.lock files. As the 1.2.2 version is a patch release (semver), this made sense to not include larger changes, such as new features.

    This way of doing releases could be extended to all new swhkd releases.

    Process proposal:

    1. Branch off from a commit -- either from the main branch, or from an already existing release branch
    2. (Optional) Cherry-pick commits from other branches, or develop fixes/features as needed
    3. Update changelogs in the main branch and in the new branch
    4. Update the Cargo.toml and Cargo.lock files in the new branch
    5. Make sure tests pass
    6. Tag the Cargo update commit with the release version
    7. Create a release on GitHub

    Ideally, 2, 3 and 4 would be bundled in a PR, which would ensure 5 gets verified.

    Pros:

    • Easy to cherry-pick fixes, security patches, and other updates onto the stable release branches
    • Less version bumps commits on the main branch
    • Clear history showing where releases diverge from the main branch
    • Probably simpler to package, which may increase adoption (especially for non-rolling distros such as Debian, Ubuntu, Suse, etc)

    Cons:

    • This implicitly assumes that we support older releases, which may increase maintenance in the long run
      • This would in turn means we need to discuss how long we should support these older releases
      • And also, what would "support" actually mean for us?
    • (too) many branches for each stable release, which will clutter the GitHub UI (personally, I think it is fine development-wise to have many branches)
    • Divergence from the main branch

    If we go forward with this process (or another), it could be documented either directly inside the repository (PROCESSES.md?) or the GitHub wiki.

    As always, this proposal is debatable, feel free to chip in!

    Documentation Enhancement 
    opened by ajanon 0
  • Git commit format

    Git commit format

    Currently, git commits tend to follow the [subject] title style. Unfortunately, there is no strict guide for this format as the link given in the CONTRIBUTING.md file is not up to date (https://github.com/facebook/draft-js/blob/a9316a723f9e918afde44dea68b5f9f39b7d9b00/CONTRIBUTING.md links to a 404). In addition, this format is not followed closely by contributors or maintainers: see 04e5125, e4a490 and 321c58c for three different commit styles.

    This was mentioned briefly in #181 (comment https://github.com/waycrate/swhkd/issues/181#issuecomment-1357503117) where we discussed adopting Conventional Commits with automation help from the cocogitto project.

    This issue is for discussing adopting Conventional Commits or alternatives.

    We should also discuss if/how to enforce it. Should we add git hooks? GitHub actions checks? Manually, as part of the PR review process?

    Enhancement 
    opened by ajanon 3
  • `swhkd` should grab all devices

    `swhkd` should grab all devices

    This is a continuation of a discussion from #71.

    First, a small summary of how device grabbing was implemented in swhkd as I understand it:

    To avoid grabbing all devices and swallowing their events (mouse cursor movements, for instance), a keyboard detection algorithm was first implemented in 8bbd34c. It checks if a given device is a keyboard by checking for the presence of the Enter key. This was not completely correct, as some users still had their non-keyboard devices grabbed by swhkd (see #131) and this was causing other issues. For some others, some hardware keys were not recognized as keyboards (see #71).

    In answer to these issues, a --device argument was added to swhkd in b53b8c. This allows users to explicitely tell what devices to use. With some configuration from users, this thus solves the issues.

    Ideally, users should not have to worry about what device swhkd should grab - it should do it correctly out of the box.

    In #163, we added support for re-emitting most device events from the grabbed device to the virtual uinput device of swhkd.

    With this improvement, it should not be necessary anymore to avoid grabbing all devices, as swhkd can just re-emit events as needed. Additionally, the --device argument is probably unnecessary and could be deprecated.

    Enhancement Difficulty: low Component: daemon 
    opened by ajanon 3
  • Update Cargo.toml and Cargo.lock to 1.2.2 for 1.2.2 branch

    Update Cargo.toml and Cargo.lock to 1.2.2 for 1.2.2 branch

    Cargo.lock was updated using make release.

    Please note that this PR is to be merged into the 1.2.2 branch. There will be a bit of divergence compared to the current main branch, but this allows us to make a proper fix release.

    1.2.2 contains a number of fixes. Below is a tentative release text for this version based in part on keep a changelog as discussed in #181:

    1.2.2

    Added

    • swhks debug command line option to get verbose logging
    • swhks log command line option to log to a file
    • swhkd-vim installs alongside swhkd in the AUR package

    Changed

    • swhks no longer defaults to a verbose output (see debug flag)
    • swhks logs to a file by default
    • swhks now logs command output by default
    • man pages are now gzipped as part of the build process

    Fixed

    • Incorrect short version flag documentation in swhkd man page.
    • Release key events are no longer shadowed by press events (#159)
    • Sending multiple SIGHUP to swhkd to reload the config file no longer crashes (#155)

    I am not 100% sure that the changelog above is accurate, feel free to discuss it. Notably, I am not sure what 2832de8 is about. @EdenQwQ would you mind explaining it a bit for the changelog? Additionally, a2cdcee is quite large, and I am not sure if I understood all changes.

    opened by ajanon 4
Releases(1.2.1)
  • 1.2.1(Jul 23, 2022)

  • 1.2.0(May 11, 2022)

    Thanks to @uncomfyhalomacro who packaged swhkd from open suse repos, a multitude of security vulnerabilities were discovered by @mgerstner which primarily arose due to my incompetence and lack of careful review of all pull requests. I apologize for this.

    The following CVE's have been fixed in this release:

    CVE-2022-27815
    CVE-2022-27814
    CVE-2022-27819
    CVE-2022-27818
    CVE-2022-27816
    

    Only CVE-2022-27817 remains as it is a genuinely difficult problem to solve for us right now. After a short conversation with Kenny Levinsen ( author of seatd ) we came to the conclusion that it's not possible to get access of a seat without complete control of the session hence any compositor which is launched after swhkd won't work. We can however get the fd's of the devices, release the seat, and then pass it along to evdev but that will require a complete application rewrite.

    @mgerstner did suggest to try systemd context switching with elogind for supporting various inits. As far as I can tell this implementation will have a time complexity of O(2^n) so as the number of seats increase, swhkd will start to lag because there is a considerable amount of cold start to swhkd after which the application runs fine.

    I'd also like to point out that the above solution will NOT be portable. Distributions that decide to not build elogind support into their init systems will not be able to run swhkd and hence it's not a path that I'd fancy even if it were to fix the problem.

    For now CVE-2022-27817 will probably remain stale. For single user ( single seat ) systems swhkd will function just fine.

    Source code(tar.gz)
    Source code(zip)
    glibc-x86_64-1.2.0.zip(1.31 MB)
    musl_libc-x86_64-1.2.0.zip(1.42 MB)
  • 1.1.7(Mar 13, 2022)

    New features

    Include multiple config files by using the include statement.

    # /etc/swhkd/swhkdrc
    include /home/user/.config/swhkd/swhkdrc
    

    @ and ~ prefixes.

    Add @ before a keysym so that the command will run when the key is released. Add ~ before a keysym so that the keysym would be sent to other clients.

    What's Changed

    • Update release.sh by @uncomfyhalomacro in https://github.com/waycrate/swhkd/pull/84
    • refactor: improve daemon / server code by @angelofallars in https://github.com/waycrate/swhkd/pull/85
    • feat: improve logs in daemon/server by @angelofallars in https://github.com/waycrate/swhkd/pull/86
    • Feat: multiple config file loading & '@' '~' prefix by @EdenQwQ in https://github.com/waycrate/swhkd/pull/87

    New Contributors

    • @uncomfyhalomacro made their first contribution in https://github.com/waycrate/swhkd/pull/84

    Full Changelog: https://github.com/waycrate/swhkd/compare/1.1.5...1.1.7

    Source code(tar.gz)
    Source code(zip)
    glibc-x86_64-1.1.7.zip(3.34 MB)
    musl_libc-x86_64-1.1.7.zip(3.34 MB)
  • 1.1.4(Mar 6, 2022)

Owner
Aakash Sen Sharma
@evilbryan590 is a furry
Aakash Sen Sharma
A clock widget for linux ez to use no need for cmd line ;)

A clock widget in LINUX A clock widget for linux ez to use no need for cmd line ;) How to install? oh its ez just go to realese! what are the paltform

1 Feb 15, 2022
Jannik Ramrath 1 Feb 05, 2022
Convert your Gyrosco.pe travels to GPX files

gyroscope2gpx This little python joint will do you a favor of taking your "Travel" export from Gyroscope (https://gyrosco.pe) and turn it into a bunch

nick g 4 Oct 02, 2022
Inviare messaggi tramite app IO a partire da dati contenuti in file .csv

parlaConIO Inviare messaggi tramite app IO a partire da dati contenuti in file .csv -- Nessun obbligo, ma in caso di clonazione o uso del programma c

Francesco Del Castillo 6 Aug 22, 2022
Data Structures and Algorithms Python - Practice data structures and algorithms in python with few small projects

Data Structures and Algorithms All the essential resources and template code nee

Hesham 13 Dec 01, 2022
Blender addon for executing the operator in response to the received OSC message.

I/F Joiner 受信したOSCメッセージに応じてオペレータ(bpy.ops)を実行するアドオンです. OSC通信に対応したコントローラやアプリをインストールしたスマートフォンを使用してBlenderを操作することが可能になります. 同時開発しているAndroidコントローラ化アプリMocopa

simasimataiyo 6 Oct 02, 2022
Automatically unpin old messages so you can always pin more!

PinRotate Automatically unpin old messages so you can always pin more! Installation You will need to install poetry to run this bot locally for develo

3 Sep 18, 2022
A small scale relica of bank management system using the MySQL queries in the python language.

Bank_Management_system This is a Bank Management System Database Project. Abstract: The main aim of the Bank Management Mini project is to keep record

Arun Singh Babal 1 Jan 27, 2022
Cobalt Strike Sleep Python Bridge

This project is 'bridge' between the sleep and python language. It allows the control of a Cobalt Strike teamserver through python without the need for for the standard GUI client. NOTE: This project

Cobalt Strike 140 Jan 04, 2023
Calculatrix is a project where I'll create plenty of calculators in a lot of differents languages

Calculatrix What is Calculatrix ? Calculatrix is a project where I'll create plenty of calculators in a lot of differents languages. I know this sound

1 Jun 14, 2022
Code needed for hybrid land cover change analysis for NASA IDS project

Documentation for the NASA IDS change analysis Poley 10/21/2021 Required python packages: whitebox numpy rasterio rasterio.mask os glob math itertools

Andrew Poley 2 Nov 12, 2021
Coronavirus Tracker API

Coronavirus Tracker API Provides up-to-date data about Coronavirus outbreak. Includes numbers about confirmed cases, deaths and recovered. Support mul

Francisco Laguna 1 Oct 31, 2020
Control your gtps with gtps-tools!

Note Please give credit to me! Do not try to sell this app, because this app is 100% open source! Do not try to reupload and rename the creator app! S

Jesen N 6 Feb 16, 2022
Paxos in Python, tested with Jepsen

Python implementation of Multi-Paxos with a stable leader and reconfiguration, roughly following "Paxos Made Moderately Complex". Run python3 paxos/st

A. Jesse Jiryu Davis 25 Dec 15, 2022
Simplest way to find Appointments in Bürgeramt Berlin, Not over engineered.

Simplest way to find Appointments in Bürgeramt Berlin, Not over engineered. Der einfachste Weg, Termine im Bürgeramt Berlin zu finden, ohne viel Schnickschnack.

Jannis 8 Nov 25, 2022
An execution framework for systematic strategies

WAGMI is an execution framework for systematic strategies. It is very much a work in progress, please don't expect it to work! Architecture The Django

Rich Atkinson 10 Mar 28, 2022
A weekly dive into commonly used modules in the Rust ecosystem, with story flavor!

The goal of this project is to bring the same concept as PyMOTW to the Rust world. PyMOTW was an invaluable resource for me when I was learning Python years ago, and I hope that I can help someone in

Scott Lyons 20 Aug 26, 2022
This an Anki add on that automatically converts Notion notes into Anki flash cards. Currently in development!

NotionFlash This is an Anki add on in development that will allow automatically convert your Notion study notes into Anki flash cards. The Anki deck c

Neeraj Patel 10 Oct 07, 2022
Graphene Metanode is a locally hosted node for one account and several trading pairs, which uses minimal RAM resources.

Graphene Metanode is a locally hosted node for one account and several trading pairs, which uses minimal RAM resources. It provides the necessary user stream data and order book data for trading in a

litepresence 5 May 08, 2022
Geodesic Dome Math

dome Geodesic Dome Math Python dome tool dome.py calculates an icosahedron or 2v geodesic dome and creates 3d printable hubs as OpenSCAD sources. usag

Brian Olson 2 Feb 09, 2022