Unofficial Linux QQ client, based on GTK4 and libadwaita, developed with Rust and Relm4.

Overview

GTK QQ (WIP)

check-badge build-badge dependency-badge

Unofficial Linux QQ client, based on GTK4 and libadwaita, developed with Rust and Relm4.

Screenshots

Light Dark
Light Mode Screenshot Dark Mode Screenshot

Note

The two screenshots have been a little outdated. The UI now has been adjusted and improved compared to them.

Run & Build

Requirements

Make sure you have installed meson, and dev libs of gtk4 and libadwaita before building.

Ubuntu

sudo apt-get install meson ninja-build libgtk-4-dev libadwaita-1-dev

Fedora

sudo dnf install meson gtk4-devel libadwaita-devel

Windows & MacOS

Gtk4 based projects would be more complex to compile on Windows/MacOS platform. Nevertheless, considering some special reasons that you know, we shall not offer the Windows/MacOS release or even build scripts.

Warning

You can try to build it still if you are just for personal use. At the same time, you should also promise that you will not distribute the Windows/MacOS build to the public in order to ensure the maintenance of this project.

The user builds, uses or distributes this project at the user's own risk. This project and its contributors assume no responsibility.

Setup

You only need to run the commands below once unless you change the related codes.

# In the root directory of project
meson setup builddir
meson compile -C builddir

Build

Switch to nightly toolchain before building.

# In the root directory of project
rustup override set nightly
cargo build --release

Contributing

License

This repository is under the AGPL-3.0 license .

Comments
  • 可配置化资源位置功能

    可配置化资源位置功能

    集中资源文件、文件夹路径加载相关接口,增加可维护性和可扩展性

    • [x] 在 ~/.gtk-qq 下最少保留 config.toml 文件
      • [x] 可配置 Avatar 位置
      • [x] 可配置数据库文件位置
      • [x] 临时文件夹内文件配置
    • [x] 统一路径加载接口,而不是dirs 遍地开花
    • [x] 默认配置信息支持
    • [x] 异步io操作支持
    • [x] 支持直接加载资源文件
    • [x] 日志覆盖
    opened by Goodjooy 19
  • 登录部分逻辑重构

    登录部分逻辑重构

    • [x] 登录逻辑重构
      • [x] 密码登录模块独立
      • [x] 解除device的随机种子与账号关联
        • [x] 使用配置文件提供登录设备协议和device随机种子
      • [x] 记住密码采用保存token而不是密码来实现
      • [x] 支持 记住密码自动登录 功能
        • [x] 记住密码
        • [x] ~自动登录~ 由于当前不支持登出,暂时不可用
      • [x] 为QR code 登录预留支持
        • [x] handle_login_respond 更改为接收 &LoginRespond
        • [x] 独立处理登录处理逻辑
    opened by Goodjooy 18
  • login response: NeedCaptcha

    login response: NeedCaptcha

    when I press the Login button there is no response in GUI, the console message shows NeedCaptcha but where can I find it?

    image

    system info:

    • wm: bspwm
    • distro: gentoo
    enhancement good first issue 
    opened by K1ngst0m 12
  • 二维码登录支持

    二维码登录支持

    • [x] 二维码登录组件
      • [x] 组件实现完成
      • [x] 测试组件运行可行性
      • [x] #20 临时文件配置信息等待,目前暂时使用 .\qr_code.png 做临时文件
    • [x] 将二维码登录功能添加到登录界面
      • [x] 添加后相关Message 更改
      • [x] handle_login_respond 改造为接收Box<LoginRespond> 或者 将 Box 移动回栈上
      • [x] 重构原有密码登录逻辑
    • [x] ~优化二维码登录界面展示~
    opened by Goodjooy 9
  • ">

    "Device Lock Verify Introduction" 的链接为

    在Device Lock Verify Introduction界面 提示Please open the link below and use your logged in device [sms:todo] to verify 但是点击下面的Device Lock Verification无反应,点击Copy Link后复制的是<unknown>

    bug 
    opened by Integral-Tech 5
  • 提供 XDG 标准的支持

    提供 XDG 标准的支持

    XDG 标准目前被大多数桌面环境支持,而现在 GTK QQ 的数据存放位置是 $HOME/.gtk-qq,会使用户的 $HOME 文件夹在显示隐藏文件时看起来更杂乱。按照 XDG 标准存放后绝大多数数据都会按照用途分别放在 .config.cache.local 下,对于强迫症的体验上会更好(

    标准页面: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html

    enhancement good first issue 
    opened by zhanghua000 4
  • 无法成功加载群聊名称

    无法成功加载群聊名称

    Failed to get group name: 30****897
    Help: Try to refresh the groups list in sidebar. If the problem still exists, please report it on Github.
    Failed to get group name: 30****897
    Help: Try to refresh the groups list in sidebar. If the problem still exists, please report it on Github.
    Failed to get group name: 30****897
    Help: Try to refresh the groups list in sidebar. If the problem still exists, please report it on Github.
    

    类似这样的日志输出

    Archlinux, rustc 1.64.0-nightly (830880640 2022-06-28), cargo 1.64.0-nightly (a5e08c470 2022-06-23), commit 3b7060cf6d02ada0679a838f433274a46d6471ad

    unconfirmed 
    opened by Tim-Paik 4
  • invalid gvdb header

    invalid gvdb header

    使用nightly buil通过后,但是运行src/main.rs出现下面错误

    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error { domain: g-resource-error-quark, code: 1, message: "invalid gvdb header" }', src/main.rs:39:47
    stack backtrace:
       0:     0x560db49b84a0 - std::backtrace_rs::backtrace::libunwind::trace::heafe4e76b4fd4cac
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
       1:     0x560db49b84a0 - std::backtrace_rs::backtrace::trace_unsynchronized::h19321be3e640ae38
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
       2:     0x560db49b84a0 - std::sys_common::backtrace::_print_fmt::h2fcd792e338f1cc5
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/sys_common/backtrace.rs:66:5
       3:     0x560db49b84a0 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::he5b28f0056e90af1
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/sys_common/backtrace.rs:45:22
       4:     0x560db49dadfe - core::fmt::write::h8cee4989ef91009c
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/core/src/fmt/mod.rs:1202:17
       5:     0x560db49b31d5 - std::io::Write::write_fmt::h3fb743e9e09d846d
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/io/mod.rs:1679:15
       6:     0x560db49b9cd3 - std::sys_common::backtrace::_print::h751a1d130f5db246
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/sys_common/backtrace.rs:48:5
       7:     0x560db49b9cd3 - std::sys_common::backtrace::print::h42eee5f5e3400273
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/sys_common/backtrace.rs:35:9
       8:     0x560db49b9cd3 - std::panicking::default_hook::{{closure}}::hced954fcffb6800d
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panicking.rs:267:22
       9:     0x560db49b99bf - std::panicking::default_hook::hbc950bafaf526371
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panicking.rs:286:9
      10:     0x560db49ba379 - std::panicking::rust_panic_with_hook::ha913975239a26952
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panicking.rs:669:13
      11:     0x560db49ba277 - std::panicking::begin_panic_handler::{{closure}}::hd15d2ea30e523ac9
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panicking.rs:560:13
      12:     0x560db49b894c - std::sys_common::backtrace::__rust_end_short_backtrace::h991cb75202f3fe80
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/sys_common/backtrace.rs:138:18
      13:     0x560db49b9f92 - rust_begin_unwind
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panicking.rs:556:5
      14:     0x560db3d3e2a3 - core::panicking::panic_fmt::hadf97da9eb1db8d0
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/core/src/panicking.rs:142:14
      15:     0x560db3d3e3f3 - core::result::unwrap_failed::h7567ca1ff620d57a
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/core/src/result.rs:1785:5
      16:     0x560db4138570 - core::result::Result<T,E>::unwrap::hd544b6b815296545
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/core/src/result.rs:1107:23
      17:     0x560db3f1cb08 - gtk_qq::init_resources::h82d09919be8e4455
                                   at /home/user/Workspace/Projects/IdeaProjects/Rust/gtk-qq/src/main.rs:39:15
      18:     0x560db3f43e2b - gtk_qq::main::{{closure}}::hd3e8049f5786cc55
                                   at /home/user/Workspace/Projects/IdeaProjects/Rust/gtk-qq/src/main.rs:24:5
      19:     0x560db3db7c5c - <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll::he945863fbdf58add
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/core/src/future/mod.rs:91:19
      20:     0x560db3f25df0 - tokio::park::thread::CachedParkThread::block_on::{{closure}}::ha6766354cae7f373
                                   at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.18.2/src/park/thread.rs:263:54
      21:     0x560db3de2760 - tokio::coop::with_budget::{{closure}}::haba2863dbfdbdcf7
                                   at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.18.2/src/coop.rs:102:9
      22:     0x560db3d57680 - std::thread::local::LocalKey<T>::try_with::h854ab1ad37253422
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/thread/local.rs:445:16
      23:     0x560db3d56eed - std::thread::local::LocalKey<T>::with::h3752abb491a0b071
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/thread/local.rs:421:9
      24:     0x560db3f2580e - tokio::coop::with_budget::hf96e99983599dae4
                                   at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.18.2/src/coop.rs:95:5
      25:     0x560db3f2580e - tokio::coop::budget::h7e4a2794295f390d
                                   at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.18.2/src/coop.rs:72:5
      26:     0x560db3f2580e - tokio::park::thread::CachedParkThread::block_on::h56cbeed176b3f947
                                   at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.18.2/src/park/thread.rs:263:31
      27:     0x560db3efca72 - tokio::runtime::enter::Enter::block_on::hd4e50190375c5df0
                                   at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.18.2/src/runtime/enter.rs:151:13
      28:     0x560db3f19c4e - tokio::runtime::thread_pool::ThreadPool::block_on::h43a96a8dc0eb7033
                                   at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.18.2/src/runtime/thread_pool/mod.rs:81:9
      29:     0x560db3f42c5b - tokio::runtime::Runtime::block_on::h77e5c5d38621280f
                                   at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.18.2/src/runtime/mod.rs:477:43
      30:     0x560db3f1cc55 - gtk_qq::main::hc11e23b2831cb6f1
                                   at /home/user/Workspace/Projects/IdeaProjects/Rust/gtk-qq/src/main.rs:34:5
      31:     0x560db3e55ceb - core::ops::function::FnOnce::call_once::hd92a2667723f18e6
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/core/src/ops/function.rs:251:5
      32:     0x560db3f8775e - std::sys_common::backtrace::__rust_begin_short_backtrace::hceed64cb09cef062
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/sys_common/backtrace.rs:122:18
      33:     0x560db3ecddf1 - std::rt::lang_start::{{closure}}::h9f4b24027cf4ca77
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/rt.rs:166:18
      34:     0x560db49aec7f - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h43a13d8e353fa2cf
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/core/src/ops/function.rs:286:13
      35:     0x560db49aec7f - std::panicking::try::do_call::hb4ad2451f55ff841
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panicking.rs:464:40
      36:     0x560db49aec7f - std::panicking::try::h1c264415a2dcd70c
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panicking.rs:428:19
      37:     0x560db49aec7f - std::panic::catch_unwind::h5eaacebe4b60fd6f
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panic.rs:137:14
      38:     0x560db49aec7f - std::rt::lang_start_internal::{{closure}}::hd662914f4c894eea
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/rt.rs:148:48
      39:     0x560db49aec7f - std::panicking::try::do_call::h6d84bd1c7cfdfee7
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panicking.rs:464:40
      40:     0x560db49aec7f - std::panicking::try::h5135ff3079ab0e64
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panicking.rs:428:19
      41:     0x560db49aec7f - std::panic::catch_unwind::h831cf44434fdd677
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/panic.rs:137:14
      42:     0x560db49aec7f - std::rt::lang_start_internal::h4e9f2db716310b0b
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/rt.rs:148:20
      43:     0x560db3ecddca - std::rt::lang_start::hc47fb56fbb71ef33
                                   at /rustc/f5193a9fcc73dc09e41a90c5a2c97fc9acc16032/library/std/src/rt.rs:165:17
      44:     0x560db3f1ccf1 - main
      45:     0x7f3e7178b2d0 - <unknown>
      46:     0x7f3e7178b38a - __libc_start_main
      47:     0x560db3d3e5d5 - _start
                                   at /build/glibc/src/glibc/csu/../sysdeps/x86_64/start.S:115
      48:                0x0 - <unknown>
    

    我用的是idea 运行配置如图 image 系统:manjaro linux内核5.15 gnome42

    bug 
    opened by greenhand520 2
  • [求助]openSUSE/Tumbleweed下编译的正确步骤

    [求助]openSUSE/Tumbleweed下编译的正确步骤

    release中编译好的gtk-qq无法在openSUSE/Tumbleweed(kde)中运行,故尝试自行编译,在完善依赖后依旧编译失败,我比较业余所以想从作者处获取帮助 💖

    编译报错信息

       Compiling gtk-qq v0.2.0 
    error: linking with `cc` failed: exit status: 1
      |
      = note: "cc" "-m64" "/tmp/rustciD4633/symbols.o" "/home/kunkun/\xe4\xb8\x8b\xe8\xbd\xbd/gtk-qq/target/release/deps/gtk_qq-0468aab82f2e21f7.gtk_qq.ed8abc2e-cgu.9.rcgu.o" "-Wl,--as-needed" "-L" "/home/kunkun/\xe4\xb8\x8b\xe8\xbd\xbd/gtk-qq/target/release/deps" "-L" "/home/kunkun/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,--start-group" "-Wl,--end-group" "-Wl,-Bstatic" "/home/kunkun/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-5b83a1df856cf582.rlib" "-Wl,-Bdynamic" "-lssl" "-lcrypto" "-lsqlite3" "-ladwaita-1" "-lgtk-4" "-lpangocairo-1.0" "-lpango-1.0" "-lharfbuzz" "-lgdk_pixbuf-2.0" "-lcairo-gobject" "-lcairo" "-lvulkan" "-lgraphene-1.0" "-lgio-2.0" "-lgobject-2.0" "-lglib-2.0" "-lgobject-2.0" "-lgtk-4" "-lpangocairo-1.0" "-lpango-1.0" "-lharfbuzz" "-lgdk_pixbuf-2.0" "-lcairo-gobject" "-lcairo" "-lvulkan" "-lgraphene-1.0" "-lgio-2.0" "-lgobject-2.0" "-lglib-2.0" "-lgtk-4" "-lpangocairo-1.0" "-lpango-1.0" "-lharfbuzz" "-lgdk_pixbuf-2.0" "-lcairo-gobject" "-lcairo" "-lvulkan" "-lgraphene-1.0" "-lgio-2.0" "-lgobject-2.0" "-lglib-2.0" "-lgraphene-1.0" "-lgobject-2.0" "-lglib-2.0" "-lgtk-4" "-lpangocairo-1.0" "-lpango-1.0" "-lharfbuzz" "-lgdk_pixbuf-2.0" "-lcairo-gobject" "-lcairo" "-lvulkan" "-lgraphene-1.0" "-lgio-2.0" "-lgobject-2.0" "-lglib-2.0" "-lgdk_pixbuf-2.0" "-lgobject-2.0" "-lglib-2.0" "-lpango-1.0" "-lgobject-2.0" "-lglib-2.0" "-lharfbuzz" "-lcairo-gobject" "-lcairo" "-lgobject-2.0" "-lglib-2.0" "-lgio-2.0" "-lgobject-2.0" "-lglib-2.0" "-lgobject-2.0" "-lglib-2.0" "-lgobject-2.0" "-lglib-2.0" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/kunkun/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/kunkun/\xe4\xb8\x8b\xe8\xbd\xbd/gtk-qq/target/release/deps/gtk_qq-0468aab82f2e21f7" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro,-znow" "-Wl,-O1" "-nodefaultlibs"
      = note: /usr/lib64/gcc/x86_64-suse-linux/12/../../../../x86_64-suse-linux/bin/ld: cannot find -lsqlite3: No such file or directory
              collect2: error: ld returned 1 exit status
              
    
    error: could not compile `gtk-qq` due to previous error
    
    question 
    opened by Riceneeder 2
  • Added a method to install ArchLinux using the AUR build.

    Added a method to install ArchLinux using the AUR build.

    I uploaded a PKGBUILD on AUR to make it easier to build and install this software, as the binaries in the release don't seem to work with ArchLinux and will prompt "error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory"

    opened by st0nie 1
  • `spawn_local` called from outside of a `task::LocalSet`

    `spawn_local` called from outside of a `task::LocalSet`

    提交 ticket 时 触发panic

    确定代码位置如下 https://github.com/lomirus/gtk-qq/blob/main/src/app/login/captcha/mod.rs#L188

    没有在 LocalSet 的运行上下文中 调用 task::spawn_local

    tokio 文档如下 https://docs.rs/tokio/latest/tokio/task/fn.spawn_local.html

    是否应该使用task::spawn ?

    bug 
    opened by Goodjooy 1
  • Unable to login: timeout error

    Unable to login: timeout error

    The gtk-qq was Installed by using yay -S gtk-qq-git, there is no error occured in the building progress, but I failed to login with a message box: timeout error. Is there any problem in my installation or the network problem? (I'm using China network when trying to login)

    bug 
    opened by IOwQI 2
  • adding logger support

    adding logger support

    • [x] 日志格式
      • [x] 不同等级日志输出颜色
      • [x] 日志筛选等级
    • [x] 日志输出到 Stdout
    • [ ] 日志输出到文件
      • [ ] 日志文件位置
      • [ ] 日志文件格式

    • [ ] 日志全覆盖
      • [ ] 来自ricq message 字符串 日志记录
    • [ ] 原有日志等级调整

    opened by Goodjooy 0
  • Not responding when receiving messages

    Not responding when receiving messages

    When you send and receive messages in an order like this:

    Another: XXX You: XXX Another: XXX

    The app will be no responding. The cause of the problem is still under research

    bug help wanted 
    opened by lomirus 0
Releases(v0.2.0)
  • v0.2.0(Jun 16, 2022)

    Features

    • Send notification when receiving message by @lomirus
    • Save user account and password locally by @lomirus
    • Download and render the friends' and groups' avatars by @lomirus and @Goodjooy
    • Search friends and groups by @lomirus
    • Implement GUI for Need Captcha by @lomirus and @Goodjooy
    • Implement GUI for Device Locked by @Goodjooy
    • Send message by pressing Enter by @Goodjooy
    • Show user avatar on login panel by @lomirus

    Fix

    • Chats sidebar item would be overflow if it's too long. Fixed by @lomirus

    UI Refinements

    • Replace the \n to of the "last message" in the chats sidebar by @lomirus
    • Show the online friends count in the contact sidebar by @lomirus
    • Show the friend name instead of account on avatar if the avatar is not loaded by @Goodjooy
    • Scale up the avatar on login panel by @lomirus
    • Scale up the window default size by @lomirus

    Chore

    • Add Windows build support for meson by @Goodjooy
    • Only run build workflow on push by @lomirus
    • Bump ricq version to v0.1.10 by @lomirus

    Known Issues

    • #15
    • #19
    Source code(tar.gz)
    Source code(zip)
    gtk-qq(7.51 MB)
  • v0.1.0(May 30, 2022)

    After the hard work of nearly a month and 120 commits, the first early version of GTK QQ was just published now! 🎉

    Highlights

    • 💬 Recent Chats
    • 👤 Friends List
    • 👥 Groups List
    • 🏠 Receiving messages
    • 🚀 Sending text messages

    This project is still under the stage of rapid development, You may not see some important and eager features that you want, like showing avatars, saving chats history and pushing notifications. But don't worry, they will also be implemented in the future versions. So just be patient :)

    Click this link for viewing Roadmap for v0.2.0.

    Source code(tar.gz)
    Source code(zip)
    gtk-qq(4.51 MB)
Owner
Lomírus
Rookie Web Dev | Using TS/JS/RS | Wanna be an Indie Game Dev | Now just being slacking 😪
Lomírus
An Anime Game Launcher variant written on Rust, GTK4 and libadwaita, using Anime Game Core library

An Anime Game Launcher GTK The launcher variant written on Rust, GTK4 and libadwaita, using Anime Game Core library You could also try the main branch

An Anime Team 77 Jan 9, 2023
Honkers Launcher variant written on Rust, GTK4 and libadwaita, using Anime Game Core library

You could also try the main branch Development Folder Description ui Blueprint UI files ui/.dist UI files compiled by the blueprint src Rust source co

An Anime Team 9 Nov 2, 2022
An idiomatic GUI library inspired by Elm and based on gtk4-rs

An idiomatic GUI library inspired by Elm and based on gtk4-rs. Relm4 is a new version of relm that's built from scratch and is compatible with GTK4 an

Aaron Erhardt 722 Dec 31, 2022
A simple note taking application written in Rust and GTK4

Rnote A simple note taking application written in Rust and GTK4. Rnote aims to be a simple but functional note taking application for freehand drawing

Felix Zwettler 3.4k Jan 5, 2023
A Modern, Open Source GTK4 ebook manager powered by Rust.

Bookx An MVP in progress: An ebook reader with .epub support Context menu for each book (delete, rename book, info) On click switch the carousal to th

Anurag Dhadse 12 Dec 28, 2022
Unsafe bindings and a safe wrapper for gtk4-layer-shell, automatically generated from a .gir file

gtk4-layer-shell: gtk4-layer-shell-sys: gtk4-layer-shell This is the safe wrapper for gtk4-layer-shell, automatically generated from its .gir file. Fo

null 3 Apr 30, 2023
A GUI for NordVPN on Linux that maintains feature parity with the official clients, written with Rust and GTK.

Viking for NordVPN This project aims to provide a fully usable and feature-complete graphical interface for NordVPN on Linux. While it attempts to clo

Jacob Birkett 2 Oct 23, 2022
OS-native file dialogs on Linux, OS X and Windows

nfd-rs nfd-rs is a Rust binding to the library nativefiledialog, that provides a convenient cross-platform interface to opening file dialogs on Linux,

Saurav Sachidanand 152 Nov 9, 2022
OS native dialogs for Windows, MacOS, and Linux

?? nfd2 nfd2 is a Rust binding to the nativefiledialog library, that provides a convenient cross-platform interface to opening file dialogs on Windows

Embark 33 May 15, 2022
A cross-platform Mod Manager for RimWorld intended to work with macOS, linux and Windows

TODOs are available here. Discussions, PRs and Issues are open for anyone who is willing to contribute. rrm Inspired by Spoons rmm. This is a cross-pl

Alejandro Osornio 7 Sep 5, 2022
Access German-language public broadcasting live streams and archives on the Linux Desktop

Deutsche Version Televido Televido (“Television” in Esperanto) lets you livestream, search, play and download media from German-language public televi

David C. 10 Nov 4, 2023
Arch Linux Security Update Notifications

arch-audit-gtk Show an indicator if there are any security updates missing for your Arch Linux system. Install git clone https://aur.archlinux.org/arc

null 48 Nov 28, 2022
A utility for mapping events from Linux event devices.

What is evsieve? Evsieve (from "event sieve") is a low-level utility that can read events from Linux event devices (evdev) and write them to virtual e

Kars Mulder 116 Jan 2, 2023
GUI based tool to sort and categorize images written in Rust

ImageSieve GUI based tool to sort out images based on similarity, categorize them according to their creation date and archive them in a target folder

Florian Fetz 67 Dec 14, 2022
Idiomatic, GTK+-based, GUI library, inspired by Elm, written in Rust

Relm Asynchronous, GTK+-based, GUI library, inspired by Elm, written in Rust. This library is in beta stage: it has not been thoroughly tested and its

null 2.2k Dec 31, 2022
A floating, tag-based window manager written in Rust

worm worm is a floating, tag-based window manager for X11. It is written in the Rust programming language, using the X11RB library. Install cargo buil

null 627 Jan 4, 2023
A fast, zbus-based, permissively licensed AT-SPI library written in pure Rust!

AT-SPI for Rust Higher level, asynchronous Rust bindings to AT-SPI2, using zbus. Part of the Odilia screen reader project. Design Fully documented, wi

Odilia 12 Dec 31, 2022
Fuse filesystem that returns symlinks to executables based on the PATH of the requesting process.

Envfs Fuse filesystem that returns symlinks to executables based on the PATH of the requesting process. This is useful to execute shebangs on NixOS th

Jörg Thalheim 98 Jan 2, 2023
Termbox is a library that provides minimalistic API which allows the programmer to write text-based user interfaces.

Termbox is a library that provides minimalistic API which allows the programmer to write text-based user interfaces.

null 1.9k Dec 22, 2022