GithubHelp home page GithubHelp logo

squidowl / halloy Goto Github PK

View Code? Open in Web Editor NEW
1.2K 13.0 44.0 32.18 MB

IRC application written in Rust

License: GNU General Public License v3.0

Rust 96.57% Shell 0.87% CSS 0.38% Handlebars 2.19%
irc rust iced

halloy's Introduction

Halloy - IRC Client

banner halloy

Halloy is an open-source IRC client written in Rust, with the Iced GUI library. It aims to provide a simple and fast client for Mac, Windows, and Linux platforms.

For more information, see the website.

Join #halloy on libera.chat if you have questions or looking for help.

Installation

Installation documentation

Packaging status

Halloy is also available from Flathub and Snap Store.

Features

Why?

License

Halloy is released under the GPL-3.0 License. For more details, see the LICENSE file.

Contact

For any questions, suggestions, or issues, please open an issue on the GitHub repository.

halloy's People

Contributors

a-kenji avatar anarsoul avatar andymandias avatar casperstorm avatar chemiseblanc avatar daeraxa avatar fawni avatar flimm avatar funkeleinhorn avatar hecrj avatar jhff avatar kaikorla avatar ljrk0 avatar lodenrogue avatar mashaal avatar mmenanno avatar neilalexander avatar oldgalileo avatar petergam avatar qauff avatar ramajd avatar seth0xd avatar tarkah avatar tranzystorekk avatar youfoundalpha avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

halloy's Issues

changing nick to someone's nick kills the connection

changing nick to someone who is online will kill the connection with โˆ™ connection to server lost.

when testing on hexchat, the irc daemon returns 433 mynick mytarget :Nickname is already in use.. i don't know how to check the raw tcp stream when using halloy with tls.

steps to reproduce

  1. join any channel
  2. pick a random user in the channel
  3. change nick to that user
  4. connection will be closed

my environment

windows 10, halloy 23.1-alpha1, connected to rizon via znc

the last word disappears sometimes

when some lines in the text reach a certain length, the last word seems to disappear. i noticed this when someone said pentile which led to the message [21:12:34] <someone> in halloy, but [21:12:34] <someone> pentile in hexchat.

i tried repeating the word pentile with 1 to 10 characters before it and this happened:
image

i kept removing characters and couldn't reproduce:
image

however it happens again with "pe" and "p":
image

sorry. what? i dont even know what is happening here. how do i even begin figuring this out lol?

Highlight words

Add an ability to define a list of words you would like to be highlighted on.
When highlighted we mark the message another distinct color so its easy to see.

Later: notification and sounds.

possible to "leave" an user

when opening the context menu on the channel list (via right click), its possible to leave a nickname.

in other words, the menu option to PART a channel also shows up for people, but i can't actually PART someone.

Show channel mode

Show channel modes in either title header, or push message to the channel buffer.
Notice (+Cnst) below. This is a good indicator for the channel.

Screenshot 2023-06-29 at 15 22 12 Screenshot 2023-06-29 at 15 24 17

Better help and welcome screen

We need a better way to help users if theres error in the config file.
We also need a better way to onboard users with a welcome screen.

Typing history

It would be nice to use the up/down arrow to recall typing history in a channel

Support for Custom Fonts in the App

As a user, I want the ability to use custom fonts in the app. I should be able to place font files in the config directory and specify them in the config file. The application should automatically detect new font files and utilize them instead of the default fonts.

Acceptance Criteria:

  1. Have a designated font directory where font files can be placed.
  2. The config file should have an option to specify the custom font files to be used.
  3. Upon launching the app, it should detect and load the custom font files specified in the config file.
  4. The app should handle any errors or missing font files gracefully, falling back to the default fonts if necessary.

Create directory for themes

As a user it would be nice to have a directory where multiple themes could live. These themes can then be previewed and selected from within the app. This would work nice in conjunction with #24.

add raw command

it would be nice to have a /raw command in halloy to send raw irc lines, since some daemons have custom aliases (such as /NS).

example: /raw NS INFO nick, /raw HELP CMODE +

Display unread message count

As a user, I want to see the number of unread messages in unfocused buffers. I also need a small tag next to the buffer name showing the unread count. Additionally, it would be great to have a horizontal line indicating the starting point of unread messages (stretch goal).

Acceptance Criteria:

  • Display a small tag next to the buffer name, showing the current unread message count.
  • Remove the unread count tag when when focusing the buffer
  • (Stretch Goal) Add a horizontal line across the buffer to indicate the start of unread messages.

Slash commands

Support slash commands (eg. /msg {nick} {message}) to start a new direct message.

Simple context menu for user

Add a simple context menu for users in the user sidebar.
The context menu should have a few essential actions for a user.

We can always add more, but as a start i think the following is important:

  • Whois
  • Private message (Query)
  • Give Op (+o) (or Take Op (-o))
  • Give Voice (+v) (or Take Voice (-v))
  • Ban
  • Kick

Ensure we have information about ourself when joining a server

After joining a server, we should do a WHOIS on ourself to ensure we have the correct hostname, username and nickname.
This is important because using config nickname might be wrong if our user is using a ZNC, so we want to pull latest information about ourself initially to make sure our state is correct.

Colored nicknames

It's common that each nickname has it's own color, which helps readability.
For picking the colors we should use accent color converted to HSL and then pick a random hue value, while not touching saturation and lightning.

Stretch goals:

  • Caching the color to a file with nick@host and invalidated on theme change.
  • Enable/disable colored nicks in channel settings (#6)

Implement query buffer

Currently there's only "server" and "channel" buffers.
We need to implement support for direct messages.

Config.yaml file location amiguity

When opening Halloy for the first time, there is a screen guiding the user to create a new configuration file, which is very nice, but the problem is that in the config.template.yaml file is showing # Linux: $HOME/.config/halloy as the expected location when in fact the application is looking for the config.yaml file under ~/.var/app/org.squidowl.halloy/config/halloy/config.yaml.

Is this a Flatpak related problem? I did install it via Flatpak.

Has the project considered adhering to $XDG_CONFIG_HOME from the XDG Base Directory Specification and move away from a adding a new .var/ directory and instead using the directory $HOME/.config/halloyas stated in theconfig.template.yaml file?

Dashboard persistence

We should persist user dashboard so it's faster for the user to get going after launching Halloy.
If they have lost acces (eg. been banned) from a channel and we can't load it we could just show a empty buffer instead, but keeping the layout as it was.

Server channel and query logs

It would be great to have the server channel and query logs in plain text.

Perhaps under the halloy/history directory as server/channels/channel/timestamp and server/queries/nick/timestamp. For example:

Screenshot 2023-07-03 at 1 19 06 PM

Create a Slack like command-bar

As a user, I want to be able to press a shortcut (Ctrl + K (macOS: CMD + K) to bring up a Slack-like command-bar. From the command-bar I can do different commands like closing the focused buffer, splitting into a new buffer.

Acceptance Criteria:

  • Pressing the specified shortcut should activate the Command-bar.
  • The Command-bar should be anchored to the top of the window and overlay over everything.
  • Users should be able to enter commands in the Command-bar.

Feature request: Notify on no available username

When starting Halloy with a config.yaml from the template the application connected and disconnected without telling me why.

Found out that the problem was no available nickname in the ~/.var/app/org.squidowl.halloy/data/halloy/halloy.log file.

Related to #76 in a "general user error/warning" way, this could also possibly be printed directly in the application for faster user feedback?

Content of message input box is lost when message input box closes

Halloy version: built from #dacb740
OS: Linux Mint 21.1

  • With an open channel, type something in the text input box "Send Message..." but do not press return
  • Move window - chat box closes
  • Click back in window - chat box reopens but contents have been lost

This also happens when connection to the server is lost, whatever you are typing is instantly deleted as box closes on disconnect then reopens once connected.

Advanced server config

I wanted to give halloy a spin but my current irc configuration requires a "Server password" to authenticate over at my bouncer, which the config template seems to be missing.

notify on tls error

currently a connection fails silently when connecting to a server with an invalid tls certificate. its possible to read the error in the config/halloy.log but its not user-friendly.

it would be an improvement to show an error in the window mentioning why it failed to connect.

environment: windows 10, halloy 23.1-alpha1, own irc server with self-signed cert.

Smart join message filter

It would be nice to have functionality similar to weechat where join/part/quit messages are only displayed if the user has spoken in a channel within some period of time.

User name autocomplete

It would be nice to press tab and have the application autocomplete a matching username when typing in a channel.

soju.im/bouncer-networks support

The Soju bouncer has an IRCv3 capability, soju.im/bouncer-networks, to allow automatically creating connections to the networks that are configured in the bouncer.

It would be very convenient to have support for this in halloy.

An example implementation of client support for this as a Weechat script may be found here.

Create a shortcut to config directory

As a user it can be cumbersome to find the config.yaml. I would be nice to have a quick way to open the directory from within the app. Possible in conjunction with #24.

Typing history cycling lost after switching channels

I really like the new typing history feature but it seems the history cycling is lost if you switch to another channel and come back.

Can we add a feature where the typing history is preserved per channel (or globally)?

Managed Channel & User lists

We have some potentially large allocations across the application during view when referencing channel user lists.

We should try to manage this data ourselves instead of querying it from the IRC crate client. This will allow us to pass references to them and avoid allocation.

A naive implementation would be to simply query & store this data in our Connection state after processing each batch of IRC messages.

Embed one or more scripting languages

Or not, but they are fun to play with. I have no preference which but I'll list some here with their licenses and welcome further suggestions.

Uniquely rusty languages (MIT OR Apache-2.0 licensed):

More familiar languages:

Don't use ##rust as the default channel

Hiya, this is a very nice project!

Unfortunately it has caused a bit of spam in the ##rust channel. A different channel could be chosen/created, perhaps even something like #halloy or #halloy-irc so users immediately find the right community.

IIUC, the fix should be as simple as replacing the default configuration here:

halloy/config.yaml

Lines 35 to 36 in dde014d

channels:
- "##rust"

Add clickable hyperlinks that open in a user's browser

URLs within chat windows could have an underline text effect applied when hovered over with the mouse cursor and when clicked these could be opened by an application chosen by the operating system.

The open crate could be used to accomplish this.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.