Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide an option to override all icons with a custom one #80

Closed
vyfor opened this issue Jun 24, 2024 · 1 comment · Fixed by #81
Closed

Provide an option to override all icons with a custom one #80

vyfor opened this issue Jun 24, 2024 · 1 comment · Fixed by #81
Assignees
Labels
enhancement New feature or request released

Comments

@vyfor
Copy link
Owner

vyfor commented Jun 24, 2024

No description provided.

@vyfor vyfor added the enhancement New feature or request label Jun 24, 2024
@vyfor vyfor self-assigned this Jun 24, 2024
@vyfor vyfor closed this as completed in #81 Jun 24, 2024
github-actions bot pushed a commit that referenced this issue Jan 2, 2025
# 1.0.0-beta.1 (2025-01-02)

### Bug Fixes

* `Cord.override` should be of lowest priority ([a12c353](a12c353))
* `IPC:is_closing` should return true if the pipe does not exist ([29170fd](29170fd))
* `should_skip_update` should be checked right before the update ([93636dd](93636dd))
* ABI compatibility issues on Apple Silicon due to long argument lists in functions ([db805fa](db805fa))
* actually update the editor image ([b1e5deb](b1e5deb))
* allow sending same activity updates ([1883ba4](1883ba4))
* an attempt to fix intermittent ui freezes ([e53bf20](e53bf20))
* **async:** avoid including debug info on regular errors and fix error propagation ([618ce39](618ce39))
* automatically retry connection on `ECONNREFUSED` & `ETIMEDOUT` ([55452b3](55452b3))
* avoid joining the handles ([3d478f1](3d478f1))
* c & csharp displaying incorrectly ([b300334](b300334))
* change `cfg-if` attribute ([76ecb5c](76ecb5c))
* change backgrounds of the file icons to a solid color to avoid inconsistencies ([3ce1569](3ce1569))
* check for license file's file extension ([b1da43c](b1da43c))
* **config:** correctly handle custom client ids ([a4719a2](a4719a2))
* **config:** correctly replace config values ([17dd6f3](17dd6f3))
* **config:** do not override the given editor icon ([25d31ba](25d31ba))
* connection issues ([a0729c1](a0729c1))
* correct param typedef in update presence function ([991f9f5](991f9f5))
* correct param typedef in update presence function ([299cd3e](299cd3e))
* correct the logic responsible for falling back to defaults ([b784a74](b784a74))
* correct the order of arguments ([fc05cb3](fc05cb3))
* correct the toggleterm lua pattern ([6e1e62a](6e1e62a))
* correctly handle curl's stdout ([5b44dff](5b44dff))
* correctly parse git repository's url ([7d422eb](7d422eb))
* correctly parse git ssh urls ([7925b31](7925b31))
* Correctly parse Git SSH urls ([#53](#53)) ([c366ac0](c366ac0))
* correctly parse toggleterm executable names ([518e9b8](518e9b8))
* correctly serialize activity timestamps ([6362a2c](6362a2c))
* correctly serialize rich presence packet ([3e894ee](3e894ee))
* correctly set `workspace_dir` & `workspace_name` ([a56a856](a56a856))
* default text not displaying when Neovim is opened without file arguments ([fe1f817](fe1f817))
* disabling show_repository also hides the other buttons ([edcea53](edcea53))
* displaying incorrect column number ([41c5089](41c5089))
* do not queue activity updates upon losing focus ([0b8d609](0b8d609))
* enforce that `last_presence.idle` is `true` when idling ([d99adc6](d99adc6))
* fallback to default activity type if not provided ([bebea1f](bebea1f))
* fallback to default icons if no client id was provided ([d0cb15a](d0cb15a))
* Fallback to default icons if no client ID was provided ([7cea2c3](7cea2c3))
* fallback to file extensions on unknown filetypes ([c0d1dd1](c0d1dd1))
* fallback to the default image, in case one was not provided along with the client id ([46435f1](46435f1))
* focus event resetting the idle status variable ([356b0b0](356b0b0))
* forgot to rename the files ([50d602d](50d602d))
* handle workspace blacklists in rust ([34bc8db](34bc8db))
* **icons:** append ?v=2 to the asset URLs to prompt Discord to refresh its file cache ([aaa0482](aaa0482))
* **icons:** append ?v=3 to the asset URLs to prompt Discord to refresh its file cache ([5d5e75a](5d5e75a))
* **icons:** append ?v=4 to the asset URLs to prompt Discord to refresh its file cache ([fb4bcc4](fb4bcc4))
* **icons:** append ?v=5 to the asset URLs to prompt Discord to refresh its file cache ([ffdc72c](ffdc72c))
* idle timeout check ([2e3e961](2e3e961))
* implement event queuing for handling events registered after the handler is run ([46b8de4](46b8de4))
* implement status codes for better error handling ([4bb5786](4bb5786))
* imports ([9e8819e](9e8819e))
* include `vim.log.levels.OFF` when parsing the log level ([cc9ba64](cc9ba64))
* initial presence update is delayed by timer interval ([3f03ba4](3f03ba4))
* invalid data size ([4b3bcb1](4b3bcb1))
* **ipc:** cleanup the stale pipe if the server process was forcefully terminated ([a77e86c](a77e86c))
* **ipc:** handle client disconnection on `ErrorKind::BrokenPipe` ([a315118](a315118))
* **ipc:** properly cleanup on exit ([0d5c61b](0d5c61b))
* issues with displaying the idle status ([0edce6f](0edce6f))
* issues with refactoring ([efd0f50](efd0f50))
* language specific files not being recognized ([495b303](495b303))
* let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously ([44acc10](44acc10))
* log_level failing when set to nil ([5a8c5dd](5a8c5dd))
* **log:** correctly write to the client pipe ([710b83e](710b83e))
* logging ([cb0bc73](cb0bc73))
* make `config.timer.reset_on_idle` reset idle status on both entry and exit ([5df8ca2](5df8ca2))
* make the `Config` struct public ([8c6f789](8c6f789))
* **mappings:** ensure that the tooltips have a minimum length of 2 ([e9368fa](e9368fa))
* **mappings:** set plugin managers' default icon to `plugin` ([a2be431](a2be431))
* normalize path before workspace lookup ([c919c94](c919c94))
* pad the tooltip with spaces in case it's too short ([2ca8849](2ca8849))
* perform a nil check for usercmds interacting with the activity manager ([8427bed](8427bed))
* prevent sending identical activity updates ([62ffb46](62ffb46))
* properly handle chunked data ([0b8c655](0b8c655))
* properly handle server shutdowns ([281a93b](281a93b))
* replace `os.clock()` with `vim.loop.hrtime()` due to inconsistent behaviour between different platforms ([061b166](061b166))
* replace method definition with a function definition ([8d6bcf9](8d6bcf9))
* repository button being displayed regardless of the configuration ([700e59e](700e59e))
* resolve event serialization issues ([7ec693e](7ec693e))
* resolve idle timeout related issues ([21d9a50](21d9a50))
* resolve workspace issues; handle missing hooks ([4cff958](4cff958))
* return if config validation fails ([503371d](503371d))
* schedule cleanup logic if necessary ([9aa6578](9aa6578))
* schedule the callbacks to maintain compatibility with Neovim 0.6.0 ([35428c0](35428c0))
* send valid payload to clear presence ([5b49d82](5b49d82))
* sending identical updates ([76699c5](76699c5))
* **serialization:** escape special characters in the json ([c693475](c693475))
* **server:** fix logging level comparison ([86f2a70](86f2a70))
* **server:** use panic-free means to write to stdout ([23ba754](23ba754))
* **sessions:** retrieve the correct session based on id instead of always returning the first available ([6493da4](6493da4))
* set executable permissions on unix systems ([541a563](541a563))
* small image not being overridden by the config ([b9b4f13](b9b4f13))
* **spawn:** use an absolute path for server executable's fallback path ([0ac391a](0ac391a))
* stop the plugin on server errors ([20d0a48](20d0a48))
* swap the image tooltips, if swap_icons is set to true ([b4a1099](b4a1099))
* take the asset type into account when no matches are found ([4bbfb5c](4bbfb5c))
* unix build ([3458ca1](3458ca1))
* update `last_activity` only if an actual update occurred ([1dd0e20](1dd0e20))
* update Git repository on `DirChanged` event ([b05bb4e](b05bb4e))
* update server's status to `ready` on receiving the ready event ([8e57129](8e57129))
* update workspace when revisiting a previously opened buffer ([cf8cf2b](cf8cf2b))
* use `cord --version` to determine the current version of the executable and whether an update is required ([5c31319](5c31319))
* use structs for functions with long arguments list due to ABI incompatibility issues on Apple Silicon ([d8e2387](d8e2387))
* user commands ([0e5ca46](0e5ca46))
* **windows:** properly handle overlapped I/O ([296e4f4](296e4f4))
* **windows:** use overlapped io for named pipes to avoid deadlocks ([2f73ce8](2f73ce8))
* workspace_blacklist ([c94361f](c94361f))
* workspace_blacklist misbehaving (note: config.timer.enable is no longer a valid option) ([f2c9d99](f2c9d99))

### Features

* **activity:** add additional fields ([ffec9cd](ffec9cd))
* add .direnv directory to gitignore ([0c5cc06](0c5cc06))
* add `:Cord restart` ([ff7b7cf](ff7b7cf))
* add `astronvim` editor client ([963cdb6](963cdb6))
* add `astronvim` editor client ([2269dfc](2269dfc))
* add `config.log_level` ([191e613](191e613))
* add `json:Error` & `msgpack:Error` ([0f33af2](0f33af2))
* add `new` function to `Packet` struct ([fd4b201](fd4b201))
* add `notes` field ([304d171](304d171))
* add `TryFrom` impl to `AssetType` ([ca4d5d8](ca4d5d8))
* add `vim.g.cord_is_updating` to avoid multiple simultaneous updates ([166be04](166be04))
* add a configuration option to replace the default idle icon ([3ebf630](3ebf630))
* add a logger struct ([d3f4fa0](d3f4fa0))
* add a macro that simplifies field deserialization ([ada22e6](ada22e6))
* Add a user command for changing the workspace name ([fa1a47b](fa1a47b))
* add a user command for changing workspace ([f8c289c](f8c289c))
* add an option to configure the logging level ([273d454](273d454))
* add cleanup logic ([df96059](df96059))
* add custom buttons ([9f00000](9f00000))
* add explicit rich presence clearing; can be completely hidden with `force = true` ([8e99c03](8e99c03))
* add fern as file browser ([3ac290c](3ac290c))
* add file icon for ahk ([4246e0f](4246e0f))
* add file icon for clojure ([bd6c32b](bd6c32b))
* add file icon for crystal ([7eb6a73](7eb6a73))
* add file icon for d lang ([d2a66d4](d2a66d4))
* add file icon for docker ([de2c389](de2c389))
* add file icon for elixir ([b6324f0](b6324f0))
* add file icon for erlang ([ff9627d](ff9627d))
* add file icon for F# ([b600aa9](b600aa9))
* add file icon for git ([041bff7](041bff7))
* add file icon for GML ([98a94bb](98a94bb))
* add file icon for gradle ([f937c28](f937c28))
* add file icon for groovy ([e732a44](e732a44))
* add file icon for latex ([737b765](737b765))
* add file icon for license files ([e2227c2](e2227c2))
* add file icon for lisp ([71c9511](71c9511))
* add file icon for nim ([099dd72](099dd72))
* add file icon for nix ([2626769](2626769))
* add file icon for ocaml ([9cac03c](9cac03c))
* add file icon for pascal ([e06c339](e06c339))
* add file icon for postcss ([7b489dc](7b489dc))
* add file icon for r lang ([dbfbdcb](dbfbdcb))
* add file icon for sass ([568b190](568b190))
* add file icon for svelte ([fa857d3](fa857d3))
* add file icon for v lang ([7e1bd31](7e1bd31))
* add file icon for vue ([2be12a8](2be12a8))
* add file icon for zig ([c74a64d](c74a64d))
* Add icon for Julia language ([a678779](a678779))
* Add icon for Maven ([91152a8](91152a8))
* add logging ([8d9957c](8d9957c))
* add message deserialization logic ([3f7fea2](3f7fea2))
* add message handler struct ([e93d9c8](e93d9c8))
* add nix flake + direnv ([b62e959](b62e959))
* add phoenix icon + eelixir filetype ([a3d65aa](a3d65aa))
* add program entry point ([f0e8727](f0e8727))
* add proper serialization for `LogEvent` ([340c504](340c504))
* add server-scoped `InitializeEvent` ([5097ceb](5097ceb))
* Add support for custom icons ([6ac0239](6ac0239))
* add support for Flatpak and Snap IPC paths ([b431eb2](b431eb2))
* add support for Flatpak and Snap IPC paths ([57d1111](57d1111))
* add support for git related plugins ([a603a95](a603a95))
* add support for lsp managers ([8bca29e](8bca29e))
* Add support for LSP managers ([c9c8593](c9c8593))
* add support for more file icons ([8529e6f](8529e6f))
* add support for plaintex filetype ([2a7bd9d](2a7bd9d))
* add the `Cord` struct which is used as the entry point ([c2f67c0](c2f67c0))
* add unix implementation of the IPC server ([cdc4245](cdc4245))
* add user commands for managing the idle status ([06c4ae8](06c4ae8))
* add usercommands ([8582099](8582099))
* add utility functions for building and fetching the executable ([b77455b](b77455b))
* add windows implementation of the IPC server ([04192c5](04192c5))
* add workspace blacklist ([b5fd3ee](b5fd3ee))
* add yazi as a file explorer ([fd5e423](fd5e423))
* allow parsing `client_id` from client name ([3e7f1b3](3e7f1b3))
* allow string values for asset types ([9ee4094](9ee4094))
* allow swapping the position of fields ([1dc822b](1dc822b))
* allow swapping the positions of the editor and language icons ([afad2bb](afad2bb))
* allow the user to skip updates ([381542d](381542d))
* allow users to set a custom activity ([e9d388c](e9d388c))
* always fetch the executable if it's not present ([7a18740](7a18740))
* always perform the file exists check first ([d94b5b8](d94b5b8))
* **async:** implement Future wrappers for commonly used uv functions ([62b133c](62b133c))
* **async:** implement the concept of futures and handle async operations via coroutines ([8638d30](8638d30))
* capture build errors ([64b1103](64b1103))
* **cli:** add `--version` argument ([1799242](1799242))
* **cli:** implement argument parsing ([b3051db](b3051db))
* **config:** add `advanced.server.build` ([bf27f76](bf27f76))
* **config:** add `advanced.variables_in_functions` ([6aae137](6aae137))
* **config:** add `idle.unidle_on_focus` ([f4e8c93](f4e8c93))
* **config:** add `on_activity` hook ([2695288](2695288))
* **config:** add `on_disconnect` hook ([299882d](299882d))
* **config:** add support for string templates using the new `variables` option ([d5ec225](d5ec225))
* **config:** allow users to choose between different icon styles ([3fef850](3fef850))
* **config:** custom assets' options now support function types ([2a5122c](2a5122c))
* **config:** introduce `idle.smart_idle` option which lets general activities take precedence over the idle ones ([99e9e93](99e9e93))
* create `Config` struct to store internal configuration and refine timeout logic ([d5c179c](d5c179c))
* create a separate module for icon-related stuff ([8b83610](8b83610))
* darken backgrounds of the icons ([aac34bd](aac34bd))
* darken backgrounds of the icons ([8cc1b6a](8cc1b6a))
* display the most recent activity in case a client disconnects; clear the status if none are connected ([eedc94a](eedc94a))
* **events:** add client event implementations ([fcda103](fcda103))
* **events:** add server events ([52061da](52061da))
* **events:** handle client connection ([2e7d5d4](2e7d5d4))
* **events:** notify the client about errors on their side ([db9a2ef](db9a2ef))
* handle automatically moving the server executable to nvim's data directory ([ae0fb6f](ae0fb6f))
* handle the activity type ([0bfa07c](0bfa07c))
* hide cursor position text when at position 1:1 ([6444711](6444711))
* hide workspace text on idle ([af23462](af23462))
* **icon:** expose locals ([15e83b3](15e83b3))
* **icons:** add a default icon for lsp managers ([bcd37f0](bcd37f0))
* **icons:** add a file icon for CUDA ([7ce67bf](7ce67bf))
* **icons:** add a file icon for Haxe ([0e1e7b4](0e1e7b4))
* **icons:** add icon for julia language ([58dd29d](58dd29d))
* **icons:** add icon for maven ([ebca692](ebca692))
* **icons:** add icon for quarto ([d514aec](d514aec))
* **icons:** add icon for zsh ([c04e8fd](c04e8fd))
* **icons:** provide an icon for Astro ([fd8016f](fd8016f))
* **icons:** update java icon ([a9b975d](a9b975d))
* **icons:** update kotlin icon ([6130cdb](6130cdb))
* **icons:** update lua icon ([004a79c](004a79c))
* **icons:** update shell icon ([dde71a8](dde71a8))
* **icons:** update shell icon ([1f3e08c](1f3e08c))
* implement `config.assets['Cord.override']` ([#80](#80)) ([0777f91](0777f91))
* implement `Default` for `Overlapped` struct ([83d9c4e](83d9c4e))
* implement `OnEvent` trait for all events ([1675342](1675342))
* implement `swap_icons` ([758e0dc](758e0dc))
* implement a wrapper around `curl` ([4bb65b4](4bb65b4))
* implement caching for workspace and repository entries ([1dc2def](1dc2def))
* implement custom error type ([ff80157](ff80157))
* implement iterations - a maximum amount of time the server can idle without active connections ([b6e8955](b6e8955))
* implement reconnection mechanism for Discord ([90ba49a](90ba49a))
* implement sessions and session manager ([312b924](312b924))
* improve cleanup logic ([1b9be0c](1b9be0c))
* improve error handling ([70d6bb4](70d6bb4))
* increase connection timeout to 60 seconds ([bf121e2](bf121e2))
* introduce `PresenceContext` struct which will be used to build the rich presence ([59ec145](59ec145))
* introduce message communication system ([19ab5c6](19ab5c6))
* **ipc:** continuously read data from Discord pipe to detect sudden disconnects ([807291f](807291f))
* **ipc:** use full pipe path ([55ca5ab](55ca5ab))
* **json:** add robust error handling ([a6697da](a6697da))
* **lockfile:** implement file locking mechanism ([dd8fe2c](dd8fe2c))
* **logger:** handle cases in lua callbacks ([c3ccb35](c3ccb35))
* **lua:** add support for BSD ([c3ee1aa](c3ee1aa))
* **lua:** automatically start the server ([0364cfb](0364cfb))
* **lua:** call `on_workspace_change` hook if a workspace change is detected ([33abe5a](33abe5a))
* **lua:** initial implementation of the Lua codebase ([6f72e92](6f72e92))
* **lua:** switch to event-driven architecture ([e65f015](e65f015))
* make server error messages clean ([c097bd8](c097bd8))
* **manager:** expose more functions for interacting with rich presence and its manager ([c34dea1](c34dea1))
* **mappings:** add `cuda` filetype ([9fdd31e](9fdd31e))
* **mappings:** add icon for odin ([0df0a45](0df0a45))
* **mappings:** add missing filetypes ([dbfb1ad](dbfb1ad))
* **mappings:** add support for dashboard plugins ([cd04a8c](cd04a8c))
* **mappings:** add support for docs ([cfe563f](cfe563f))
* modularize the event system and add helper macros for creating messages ([f302fa1](f302fa1))
* **msgpack:** add msgpack deserialization ([eb2e10d](eb2e10d))
* **msgpack:** add msgpack serialization ([1f7c2a6](1f7c2a6))
* **msgpack:** add support for STR8 header ([cd634ea](cd634ea))
* **msgpack:** allow serialization of Map values ([9dc26b4](9dc26b4))
* **msgpack:** support owned strings ([0679c31](0679c31))
* notify client when the workspace is found in the blacklist ([ae660bd](ae660bd))
* notify the client when server is ready to accept connections ([b27d763](b27d763))
* notify the clients about the server shutdown ([e987ba0](e987ba0))
* prepend the messages with a length header in case they get merged ([264fde3](264fde3))
* prioritize general activities over the idle activity ([b4a837c](b4a837c))
* **producer:** allow sending a shutdown request ([354e2a6](354e2a6))
* properly close pipe connection ([8dde573](8dde573))
* provide a way to override the default file icon, which is used when filetype was not detected ([07e889a](07e889a))
* provide an option to override all icons with a custom one ([e679870](e679870))
* provide clear error message for when the connection to Discord IPC fails ([4828894](4828894))
* provide clearer server error messages ([34bfe12](34bfe12))
* provide more data when logging the error ([22e9ed8](22e9ed8))
* **server:** add local `ShutdownEvent` ([3f55760](3f55760))
* **server:** improve error handling & error messages ([9aea257](9aea257))
* **server:** notify the client whether the provided client id is incorrect ([edc9f5a](edc9f5a))
* set style-specific default idle icons ([c17ad89](c17ad89))
* shut down connection in case it wasn't established within 15 seconds ([c7f0f7a](c7f0f7a))
* specify MSRV ([1b520ca](1b520ca))
* specify plugin version ([cd8142f](cd8142f))
* stop any updates when connection is lost ([dd1dd43](dd1dd43))
* store os name and architecture ([3f663db](3f663db))
* support custom icons ([9627657](9627657))
* support defining file assets with a string ([824455d](824455d))
* support executables launched via toggleterm ([4119ef4](4119ef4))
* support multiple git protocols ([2af4b85](2af4b85))
* Support multiple Git protocols ([190e836](190e836))
* support the rest of the git related filetypes ([20c390e](20c390e))
* switch to next available activity on `clear_activity` event ([f05f126](f05f126))
* tie each client to a session ([edd2141](edd2141))
* trim stderr messages ([4ec5de9](4ec5de9))
* update sessions' last updated time ([9968d94](9968d94))
* use current file's directory as the workspace instead of cwd ([7ef94fc](7ef94fc))
* use newly added mapping types ([015f7ed](015f7ed))
* **usercmds:** add `:Cord status` ([47c3d6a](47c3d6a))
* **usercmds:** add `:Cord update` ([eba53d9](eba53d9))
* **util:** add additional file-related utility functions ([36d5031](36d5031))
* validate and set `editor_image` upon initialization ([d56416a](d56416a))

### Performance Improvements

* avoid unnecessary lookups ([a4bccf4](a4bccf4))
* avoid unnecessary lookups ([b586eec](b586eec))
* **fs:** switch to async filesystem ops ([961ec2c](961ec2c))
* handle logic responsible for broadcasting the ready event more efficiently ([a5c8ca3](a5c8ca3))
* **json:** optimize deserialization logic ([02c233f](02c233f))
* **json:** optimize serialization logic and generalize the serializer ([3e7ab98](3e7ab98))
* **lua:**  lazy load some modules ([0f1ebaa](0f1ebaa))
* **lua:** lazily load other modules ([6313f45](6313f45))
* **mappings:** significant performance improvements ([8ea0ad8](8ea0ad8))
* move crucial components to the Rust codebase ([e6e1cf3](e6e1cf3))
* move crucial components to the Rust codebase ([3cb21e5](3cb21e5))
* optimize `find_git_repository` ([45bc551](45bc551))
* remove unnecessary atomics ([85499cf](85499cf))
* remove unnecessary vector allocations ([160a9d1](160a9d1))
* set `assets` to `nil` by default ([586ceed](586ceed))
github-actions bot pushed a commit that referenced this issue Jan 2, 2025
# 1.0.0 (2025-01-02)

### Bug Fixes

* `Cord.override` should be of lowest priority ([a12c353](a12c353))
* ABI compatibility issues on Apple Silicon due to long argument lists in functions ([db805fa](db805fa))
* c & csharp displaying incorrectly ([b300334](b300334))
* change backgrounds of the file icons to a solid color to avoid inconsistencies ([3ce1569](3ce1569))
* check for license file's file extension ([b1da43c](b1da43c))
* connection issues ([a0729c1](a0729c1))
* correct param typedef in update presence function ([991f9f5](991f9f5))
* correct param typedef in update presence function ([299cd3e](299cd3e))
* correct the order of arguments ([fc05cb3](fc05cb3))
* correct the toggleterm lua pattern ([6e1e62a](6e1e62a))
* correctly parse git repository's url ([7d422eb](7d422eb))
* correctly parse git ssh urls ([7925b31](7925b31))
* Correctly parse Git SSH urls ([#53](#53)) ([c366ac0](c366ac0))
* correctly parse toggleterm executable names ([518e9b8](518e9b8))
* disabling show_repository also hides the other buttons ([edcea53](edcea53))
* displaying incorrect column number ([41c5089](41c5089))
* enforce that `last_presence.idle` is `true` when idling ([d99adc6](d99adc6))
* fallback to default icons if no client id was provided ([d0cb15a](d0cb15a))
* Fallback to default icons if no client ID was provided ([7cea2c3](7cea2c3))
* fallback to file extensions on unknown filetypes ([c0d1dd1](c0d1dd1))
* fallback to the default image, in case one was not provided along with the client id ([46435f1](46435f1))
* focus event resetting the idle status variable ([356b0b0](356b0b0))
* forgot to rename the files ([50d602d](50d602d))
* handle workspace blacklists in rust ([34bc8db](34bc8db))
* **icons:** append ?v=2 to the asset URLs to prompt Discord to refresh its file cache ([aaa0482](aaa0482))
* **icons:** append ?v=3 to the asset URLs to prompt Discord to refresh its file cache ([5d5e75a](5d5e75a))
* **icons:** append ?v=4 to the asset URLs to prompt Discord to refresh its file cache ([fb4bcc4](fb4bcc4))
* **icons:** append ?v=5 to the asset URLs to prompt Discord to refresh its file cache ([ffdc72c](ffdc72c))
* implement status codes for better error handling ([4bb5786](4bb5786))
* initial presence update is delayed by timer interval ([3f03ba4](3f03ba4))
* invalid data size ([4b3bcb1](4b3bcb1))
* issues with displaying the idle status ([0edce6f](0edce6f))
* issues with refactoring ([efd0f50](efd0f50))
* language specific files not being recognized ([495b303](495b303))
* log_level failing when set to nil ([5a8c5dd](5a8c5dd))
* logging ([cb0bc73](cb0bc73))
* make `config.timer.reset_on_idle` reset idle status on both entry and exit ([5df8ca2](5df8ca2))
* make the `Config` struct public ([8c6f789](8c6f789))
* pad the tooltip with spaces in case it's too short ([2ca8849](2ca8849))
* prevent sending identical activity updates ([62ffb46](62ffb46))
* replace `os.clock()` with `vim.loop.hrtime()` due to inconsistent behaviour between different platforms ([061b166](061b166))
* repository button being displayed regardless of the configuration ([700e59e](700e59e))
* send valid payload to clear presence ([5b49d82](5b49d82))
* sending identical updates ([76699c5](76699c5))
* **serialization:** escape special characters in the json ([c693475](c693475))
* small image not being overridden by the config ([b9b4f13](b9b4f13))
* swap the image tooltips, if swap_icons is set to true ([b4a1099](b4a1099))
* take the asset type into account when no matches are found ([4bbfb5c](4bbfb5c))
* unix build ([3458ca1](3458ca1))
* update Git repository on `DirChanged` event ([b05bb4e](b05bb4e))
* update workspace when revisiting a previously opened buffer ([cf8cf2b](cf8cf2b))
* use structs for functions with long arguments list due to ABI incompatibility issues on Apple Silicon ([d8e2387](d8e2387))
* user commands ([0e5ca46](0e5ca46))
* workspace_blacklist ([c94361f](c94361f))
* workspace_blacklist misbehaving (note: config.timer.enable is no longer a valid option) ([f2c9d99](f2c9d99))

### Features

* add .direnv directory to gitignore ([0c5cc06](0c5cc06))
* add `astronvim` editor client ([963cdb6](963cdb6))
* add `astronvim` editor client ([2269dfc](2269dfc))
* add `config.log_level` ([191e613](191e613))
* add a configuration option to replace the default idle icon ([3ebf630](3ebf630))
* Add a user command for changing the workspace name ([fa1a47b](fa1a47b))
* add a user command for changing workspace ([f8c289c](f8c289c))
* add an option to configure the logging level ([273d454](273d454))
* add custom buttons ([9f00000](9f00000))
* add fern as file browser ([3ac290c](3ac290c))
* add file icon for ahk ([4246e0f](4246e0f))
* add file icon for clojure ([bd6c32b](bd6c32b))
* add file icon for crystal ([7eb6a73](7eb6a73))
* add file icon for d lang ([d2a66d4](d2a66d4))
* add file icon for docker ([de2c389](de2c389))
* add file icon for elixir ([b6324f0](b6324f0))
* add file icon for erlang ([ff9627d](ff9627d))
* add file icon for F# ([b600aa9](b600aa9))
* add file icon for git ([041bff7](041bff7))
* add file icon for GML ([98a94bb](98a94bb))
* add file icon for gradle ([f937c28](f937c28))
* add file icon for groovy ([e732a44](e732a44))
* add file icon for latex ([737b765](737b765))
* add file icon for license files ([e2227c2](e2227c2))
* add file icon for lisp ([71c9511](71c9511))
* add file icon for nim ([099dd72](099dd72))
* add file icon for nix ([2626769](2626769))
* add file icon for ocaml ([9cac03c](9cac03c))
* add file icon for pascal ([e06c339](e06c339))
* add file icon for postcss ([7b489dc](7b489dc))
* add file icon for r lang ([dbfbdcb](dbfbdcb))
* add file icon for sass ([568b190](568b190))
* add file icon for svelte ([fa857d3](fa857d3))
* add file icon for v lang ([7e1bd31](7e1bd31))
* add file icon for vue ([2be12a8](2be12a8))
* add file icon for zig ([c74a64d](c74a64d))
* Add icon for Julia language ([a678779](a678779))
* Add icon for Maven ([91152a8](91152a8))
* add logging ([8d9957c](8d9957c))
* add nix flake + direnv ([b62e959](b62e959))
* add phoenix icon + eelixir filetype ([a3d65aa](a3d65aa))
* Add support for custom icons ([6ac0239](6ac0239))
* add support for Flatpak and Snap IPC paths ([b431eb2](b431eb2))
* add support for Flatpak and Snap IPC paths ([57d1111](57d1111))
* add support for git related plugins ([a603a95](a603a95))
* add support for lsp managers ([8bca29e](8bca29e))
* Add support for LSP managers ([c9c8593](c9c8593))
* add support for more file icons ([8529e6f](8529e6f))
* add support for plaintex filetype ([2a7bd9d](2a7bd9d))
* add user commands for managing the idle status ([06c4ae8](06c4ae8))
* add workspace blacklist ([b5fd3ee](b5fd3ee))
* add yazi as a file explorer ([fd5e423](fd5e423))
* allow string values for asset types ([9ee4094](9ee4094))
* allow swapping the position of fields ([1dc822b](1dc822b))
* allow swapping the positions of the editor and language icons ([afad2bb](afad2bb))
* darken backgrounds of the icons ([aac34bd](aac34bd))
* darken backgrounds of the icons ([8cc1b6a](8cc1b6a))
* hide cursor position text when at position 1:1 ([6444711](6444711))
* hide workspace text on idle ([af23462](af23462))
* **icons:** add a default icon for lsp managers ([bcd37f0](bcd37f0))
* **icons:** add a file icon for CUDA ([7ce67bf](7ce67bf))
* **icons:** add a file icon for Haxe ([0e1e7b4](0e1e7b4))
* **icons:** add icon for julia language ([58dd29d](58dd29d))
* **icons:** add icon for maven ([ebca692](ebca692))
* **icons:** add icon for quarto ([d514aec](d514aec))
* **icons:** add icon for zsh ([c04e8fd](c04e8fd))
* **icons:** provide an icon for Astro ([fd8016f](fd8016f))
* **icons:** update java icon ([a9b975d](a9b975d))
* **icons:** update kotlin icon ([6130cdb](6130cdb))
* **icons:** update lua icon ([004a79c](004a79c))
* **icons:** update shell icon ([dde71a8](dde71a8))
* **icons:** update shell icon ([1f3e08c](1f3e08c))
* implement `config.assets['Cord.override']` ([#80](#80)) ([0777f91](0777f91))
* implement `swap_icons` ([758e0dc](758e0dc))
* improve error handling ([70d6bb4](70d6bb4))
* increase connection timeout to 60 seconds ([bf121e2](bf121e2))
* **lua:** add support for BSD ([c3ee1aa](c3ee1aa))
* properly close pipe connection ([8dde573](8dde573))
* provide a way to override the default file icon, which is used when filetype was not detected ([07e889a](07e889a))
* provide an option to override all icons with a custom one ([e679870](e679870))
* shut down connection in case it wasn't established within 15 seconds ([c7f0f7a](c7f0f7a))
* support custom icons ([9627657](9627657))
* support defining file assets with a string ([824455d](824455d))
* support executables launched via toggleterm ([4119ef4](4119ef4))
* support multiple git protocols ([2af4b85](2af4b85))
* Support multiple Git protocols ([190e836](190e836))
* support the rest of the git related filetypes ([20c390e](20c390e))
* use current file's directory as the workspace instead of cwd ([7ef94fc](7ef94fc))

### Performance Improvements

* move crucial components to the Rust codebase ([e6e1cf3](e6e1cf3))
* move crucial components to the Rust codebase ([3cb21e5](3cb21e5))
* optimize `find_git_repository` ([45bc551](45bc551))
* remove unnecessary vector allocations ([160a9d1](160a9d1))
* set `assets` to `nil` by default ([586ceed](586ceed))
Copy link
Contributor

github-actions bot commented Jan 2, 2025

🎉 This issue has been resolved in version 1.0.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

github-actions bot pushed a commit that referenced this issue Jan 2, 2025
# ⚙️ [v2.0.0-beta.1]

_2025-01-02_

* feat!: update semantic release's ci ([](https://github.com/vyfor/cord.nvim/commit/573814db641b62a37a9bea2c6f750c6a543f136f))
* fix!: bugfixes related to opts handling, workspace detection callback, button validation as well as slight changes in configuration ([](https://github.com/vyfor/cord.nvim/commit/277b5b0517c9dfcb2a6887820005a8f3df068a14))
* merge #147 ([](https://github.com/vyfor/cord.nvim/commit/9423cf34faca901874a0d3741f867bb0babf24dc)), closes [#147](https://github.com/vyfor/cord.nvim/issues/147)
* merge #152 ([](https://github.com/vyfor/cord.nvim/commit/2b0fc960fa3927a49d89ef11c7087138ef6a311e)), closes [#152](https://github.com/vyfor/cord.nvim/issues/152)
* merge #155 ([](https://github.com/vyfor/cord.nvim/commit/a490466e5cc72e3d645d19582f63fc0070050b7d)), closes [#155](https://github.com/vyfor/cord.nvim/issues/155)
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](https://github.com/vyfor/cord.nvim/commit/ccdd74992e14face4b727b57e6b56fc66da902fb))
* refactor!: rename `git_url` -> `repo_url` ([](https://github.com/vyfor/cord.nvim/commit/5d8faf24962e1c2e4543e2f35881fc6cdebac5f0))

### build

* bump project version ([](https://github.com/vyfor/cord.nvim/commit/e4f9b715f716c7926c70543b3d0360863601a28a))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/a6a33eba2e2487f9cfe8242173bc5130fd9601b2))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/d56244a6eb59be4b8ecde0e1065e2afbe681235a))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/d1853f4f5a65bb28c3073d61d003eea5d162445d))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/6196014399171b5218cf42db0e3750cacd93f7c5))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/f43c94da6fe7b160f26638fe212ab018523b85b3))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/9898651c4f53e2011f4cc5f744789e153cad26f1))
* enable incremental compilation ([](https://github.com/vyfor/cord.nvim/commit/7b6bb0034fba7ba14a6cc8d6b831651d5e5e1b8c))
* prepare for publishing ([](https://github.com/vyfor/cord.nvim/commit/9bf0821d72d7f38cef4e39ade1979e694d431232))
* set project version to `2.0.0-beta.1` ([](https://github.com/vyfor/cord.nvim/commit/52ae36fd1162c03dbc573f6393788db2d2bccb6a))
* specify msrv ([](https://github.com/vyfor/cord.nvim/commit/abaa56eb2764c8046bf25834bb4360199c17bb6c))

### chore

* add `rustfmt.toml` ([](https://github.com/vyfor/cord.nvim/commit/c53d928d583a6c4b9a1eb465b7f5b888ff3db640))
* add derives and reformat code ([](https://github.com/vyfor/cord.nvim/commit/3d5096c99882b266a4bb4341b9ab5f154f1e6a3c))
* add relevant `mod`s ([](https://github.com/vyfor/cord.nvim/commit/c51352c31f9a8a0400c5e1407458bf9572c54652))
* **assets:** delete the assets directory ([](https://github.com/vyfor/cord.nvim/commit/97ca959d9e5ccb65a1c7aa23667cd03c45193f81))
* bump assets version ([](https://github.com/vyfor/cord.nvim/commit/14ff704001076bd00dfdbab2619cea58876b80b6))
* bump assets version ([](https://github.com/vyfor/cord.nvim/commit/3e5016bc468b7593b8d9594aa804cfcc17f4f055))
* bump assets version ([](https://github.com/vyfor/cord.nvim/commit/d573d6e0c7bf2cc44b9a18ce85e9bdfa829b9d83))
* bump assets version ([](https://github.com/vyfor/cord.nvim/commit/155638df69fe2dcf2bea268fc7d3a011382abb2f))
* bump assets version ([](https://github.com/vyfor/cord.nvim/commit/3092bbce6d7f828b78b12f57ed44287edf73329b))
* change semantic release config ([](https://github.com/vyfor/cord.nvim/commit/705f0ac11985a03323daf56fceb096259665dd65))
* code cleanup ([](https://github.com/vyfor/cord.nvim/commit/b139bfaf75a254fa75e6cef065d361658efdbc7c))
* delete redundant file `status.rs` ([](https://github.com/vyfor/cord.nvim/commit/1b133d134c09ca173e7b5e1bd2fda0068d304e8c))
* **event:** remove redundant implementations ([](https://github.com/vyfor/cord.nvim/commit/800991fd271ef536078f66242f7d340b08b95be8))
* fix clippy warnings ([](https://github.com/vyfor/cord.nvim/commit/6ed0a5d7a055bf2a77fffe4ca938a1636e90ada5))
* fix typo ([](https://github.com/vyfor/cord.nvim/commit/935dce3cce751a886c855d549be484285988b795))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/f7c9e208da73049754d0b240d147d7bdc63cb585))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/d27ab6a0fe526eb5db986f206955e72fb365a546))
* ignore clippy warning ([](https://github.com/vyfor/cord.nvim/commit/16fa5b52ca090bb3428edc10af3eabbd2b3d4c40))
* **lua:** fix warnings ([](https://github.com/vyfor/cord.nvim/commit/8ef3177695639a0223e2ce199dbbd1d4280606d2))
* **release:** 1.0.0-beta.1 [skip ci] ([](https://github.com/vyfor/cord.nvim/commit/f166cfc9bb51c4b912269aeca2c5bfa4c03047a3)), closes [#53](https://github.com/vyfor/cord.nvim/issues/53) [#80](https://github.com/vyfor/cord.nvim/issues/80)
* **release:** 2.0.0-beta.1 [skip ci] ([](https://github.com/vyfor/cord.nvim/commit/1c39245537dd7e649cb342588cf44eef7feae2dc))
* **release:** 2.0.0-beta.2 [skip ci] ([](https://github.com/vyfor/cord.nvim/commit/371b6ebe61bb31374dd5ba7bbfa08dfc377375a4))
* remove changelog ([](https://github.com/vyfor/cord.nvim/commit/c05af76e9d992b6551bce815c0e5f81a7dad7a02))
* remove changelog ([](https://github.com/vyfor/cord.nvim/commit/ca109e523157b674a94d272e86ef077f98b31af9))
* remove debug statement ([](https://github.com/vyfor/cord.nvim/commit/67d97700fc833465050f651482ce21cec0fa6c08))
* remove redundant code ([](https://github.com/vyfor/cord.nvim/commit/baa87039629f49f4a37fe5860073ecfb05710cab))
* remove redundant file ([](https://github.com/vyfor/cord.nvim/commit/755ce4024683470fbfad800751f2178c4d56763e))
* remove unnecessary explicit lifetimes ([](https://github.com/vyfor/cord.nvim/commit/10889765071d217b4431c8d274e747220fbbe5aa))
* remove unnecessary statement ([](https://github.com/vyfor/cord.nvim/commit/c12ad54f3c0eb2c6fc1f752a26edbe6fbf30cb9f))
* remove unused imports ([](https://github.com/vyfor/cord.nvim/commit/0b1d6b92a1e46756a9bec45b0f3ee179a038deeb))
* remove unused variable ([](https://github.com/vyfor/cord.nvim/commit/fef472f96113c20e3e90d33ce673027585dadfe9))
* resolve merge conflicts ([](https://github.com/vyfor/cord.nvim/commit/4cd628cce4a223173f05336692600140c7ac1f88))
* set previous release in `.releaserc.json` ([](https://github.com/vyfor/cord.nvim/commit/f398c02d5b7ec0e551706448d6eee1fb9d4ec258))
* temporarily comment out code ([](https://github.com/vyfor/cord.nvim/commit/e2e2fd3b9725b18be186992d39e1383ff26d1d66))
* update `.gitignore` ([](https://github.com/vyfor/cord.nvim/commit/bb072143f32d44139470af409a94b724da2abe7e))
* update `.luacheckrc` ([](https://github.com/vyfor/cord.nvim/commit/f59f170fe0bdb887685f94a9e7fa9935d2d59de8))
* update `.luacheckrc` ([](https://github.com/vyfor/cord.nvim/commit/df2f2000e8a6ed0ff15903b133a7b5f30360afa2))
* update `.luacheckrc` ([](https://github.com/vyfor/cord.nvim/commit/6ce30eef93d404fefd9c5d6765ae3a8e80f96aaf))
* update `.releaserc.json` ([](https://github.com/vyfor/cord.nvim/commit/97444621a631d1cd80a6ea48d1f4b1120705dcc7))
* update `util/mod.rs` ([](https://github.com/vyfor/cord.nvim/commit/5ba79f408c5baa92e20d0ea1b943aedb9bbadfa2))
* update releaserc ([](https://github.com/vyfor/cord.nvim/commit/5fbdd5dcacea85be899d031ae148da773387672a))

### ci

* add freebsd target ([](https://github.com/vyfor/cord.nvim/commit/20d27e1f1210ee0a2d91c6e2ef198e6b95809345))
* create release.yml ([](https://github.com/vyfor/cord.nvim/commit/1d725d1423629ad8562990d79bd349970f35c22a))
* integrate semantic release ([](https://github.com/vyfor/cord.nvim/commit/66ca7cdd59e35d07fe12ddbfbc059ba4348d161b))
* prepare for publishing to luarocks ([](https://github.com/vyfor/cord.nvim/commit/ac35d97651a10d2609e3aef75af7a78dee799217))
* update `release.yml` ([](https://github.com/vyfor/cord.nvim/commit/30c3177ed2145eb7a187299a6d0fcce1f814cec6))
* update `release.yml` ([](https://github.com/vyfor/cord.nvim/commit/99848180eadd4d8b3f3bd3a4b35b75e786e9deca))
* update release workflow ([](https://github.com/vyfor/cord.nvim/commit/53674918914377177f6c98514b3bf5195282e0c0))
* update release workflow ([](https://github.com/vyfor/cord.nvim/commit/f9ddd9fa0e1ced1c9d1d353bd82880acc3c47beb))
* update release workflow ([](https://github.com/vyfor/cord.nvim/commit/30e98f629e75728a195aa9e568aab77e4114a7ac))
* update release.yml ([](https://github.com/vyfor/cord.nvim/commit/a60ac049bd48dfcf86cff19d0a44986b1b2787c9))
* update semantic release ([](https://github.com/vyfor/cord.nvim/commit/638dadf8ba54619735196ab39eecb94b4c75aff1))

### docs

* add configuration examples ([](https://github.com/vyfor/cord.nvim/commit/a15b917663fdc4f1ae582b6a0cf27b53a31cadf9))
* **configration:** add missing backticks ([](https://github.com/vyfor/cord.nvim/commit/7958f89ff6266294a419849054e03d70ed1f943e))
* **configuration:** add default config values ([](https://github.com/vyfor/cord.nvim/commit/1aff02e676c4c48dfe99db9937918ff311a87cf2))
* **configuration:** center activity options ([](https://github.com/vyfor/cord.nvim/commit/de33741fd6d872523085f57a433ebd4d762cc37c))
* create a configuration guide ([](https://github.com/vyfor/cord.nvim/commit/e51af265f799826ec901f0b325d1088938b7c8e6))
* create a migration guide ([](https://github.com/vyfor/cord.nvim/commit/debee75e1bb6348e5fbdd511b5d3cfa454fb5f75))
* document string templating ([](https://github.com/vyfor/cord.nvim/commit/0bfc19d629cf1bb152cdbebd726fc5be311f2680))
* **lua:** document exposed interfaces ([](https://github.com/vyfor/cord.nvim/commit/7c23fe2d2f6400b976c9527a9fe23f304a24a09c))
* **migration:** fix text highlighting ([](https://github.com/vyfor/cord.nvim/commit/965ee867d04e6875a2b04891d9451ae060a0e598))
* prefer `:Cord update` over `:Cord fetch` ([](https://github.com/vyfor/cord.nvim/commit/7774af4bfdb065fb777a0807023b8680f877c35d))
* **readme:** add badge icons ([](https://github.com/vyfor/cord.nvim/commit/63c5b0877244ed221e47f748edf39562682af810))
* **readme:** add cord's logo ([](https://github.com/vyfor/cord.nvim/commit/6bd56b5b1b78b7190e6acfab0865c926aed78537))
* **readme:** add installation step for `rocks.nvim` ([](https://github.com/vyfor/cord.nvim/commit/3f1dba69d1e0fc73470b1ca8f23b17e5fe8c35b4))
* **readme:** include a link for cord's brand new discord server ([](https://github.com/vyfor/cord.nvim/commit/ce8ce56f190768c039668349b1d84f9f2384ffa7))
* **readme:** rewrite README ([](https://github.com/vyfor/cord.nvim/commit/24d75e0112f2cd150b97513729795fba2401b94c))
* **readme:** update README ([](https://github.com/vyfor/cord.nvim/commit/89ccba3bde8c574728a3d42adcdb60912d744c8f))
* **readme:** update README ([](https://github.com/vyfor/cord.nvim/commit/29f5f744d368f42a0779982a29189073f1b0fb68))
* **readme:** update README ([](https://github.com/vyfor/cord.nvim/commit/12b71d1c7d7ba3a432dc5e514ae5f5902ead6587))
* **readme:** update README ([](https://github.com/vyfor/cord.nvim/commit/95f8167d550254a3448ee03e4fbe6d6aec6ec67c))
* **rust:** document crucial parts of the codebase ([](https://github.com/vyfor/cord.nvim/commit/7f217a7776ed5f7662bf3a5432493c73b49f2756))
* **templates:** remove the icon request issue template ([](https://github.com/vyfor/cord.nvim/commit/257892093da816d76f781a68e62cb134f1bb7e23))
* update configuration guide ([](https://github.com/vyfor/cord.nvim/commit/62b0764f2e9d2188691ad9762eb924fadf1550e1))
* update configuration guide ([](https://github.com/vyfor/cord.nvim/commit/5eca57b6f7259a6d07a314b73f21bb1c75157689))
* update configuration guide ([](https://github.com/vyfor/cord.nvim/commit/cf031ffcf41b657c291b419ecea86e8d3b077cea))
* update documentation ([](https://github.com/vyfor/cord.nvim/commit/243898a90f0924dbe783e5b3307ce7fd43f8b1ba))
* update examples ([](https://github.com/vyfor/cord.nvim/commit/a1699d1654a66d64dab79ba1b62369118c6e5ae2))
* update examples ([](https://github.com/vyfor/cord.nvim/commit/8abe5299792a6cb11e0f7f6c45c7d38858d911eb))
* update examples ([](https://github.com/vyfor/cord.nvim/commit/20e02e308a8e7bc67615e2353d562c15bdb90c8c))
* update migration guide ([](https://github.com/vyfor/cord.nvim/commit/01d1d604c1be498f9ddba0152057b61f689e4d95))
* update migration guide ([](https://github.com/vyfor/cord.nvim/commit/d527f71872a70e8550abfb2ab3be18307925ddfc))
* update migration guide ([](https://github.com/vyfor/cord.nvim/commit/c4c66937c40ee489267ff2bc5fd0b7409d04673e))
* update readme ([](https://github.com/vyfor/cord.nvim/commit/653c13db4a638e4e6a4527f698de746b43f1cdf8))
* update readme ([](https://github.com/vyfor/cord.nvim/commit/e4c562143b8a49b155258e8e7f2005b3aae676ef))
* update readme ([](https://github.com/vyfor/cord.nvim/commit/d13991bfacf173227f01cc7c9f0168f4d46b67eb))
* update readme ([](https://github.com/vyfor/cord.nvim/commit/ccdc4dc6b5fb03a02b0289468f01bd039611b142))
* update readme ([](https://github.com/vyfor/cord.nvim/commit/69d998b1dfbe5f90dbb8141b232ca3c1e474e066))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/cf2396183003cc1c23a53ee71c818ab33769e9a6))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/78b7ca686261fd4a6669b9e9ffe3043dbec6690c))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/9ef07b7cd5fab3a5f2789ee3b2069cf3f6a7aa5c))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/480d74c866815b554a903460cb3b6429f145b749))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/fb6326f0186e131fc2f8c41188ff689de653101c))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/40ec350c0194ea9af72e97a312decb0b0ef980cf))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/16b1ec31d889ed324b3957c597b64f75ef9e04e9))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/80386758639517cdbe37dd11edbecbaa54ae8801))
* update the examples ([](https://github.com/vyfor/cord.nvim/commit/cf728c3dfb00f32fc001e2f3c748820618379bfd))
* update the examples ([](https://github.com/vyfor/cord.nvim/commit/4e67d61656f8e136a4265fdedf635c31fdc5f7b6))
* update the examples ([](https://github.com/vyfor/cord.nvim/commit/8209e2189491cf068eb4f8c40a838692c7a17a2c))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/006f3a45f75f36831b405530459e1edbf6624d2e))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/d9ccf2e4d0efc991580b61624ca7a4d4d142f917))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/048f1d2b3fcc2463364ca9ab73d39030ef936e6e))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/7ba64be4903a1b827791d52ffaa94b0a43861090))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/c5353fe09dd983d3b05a250febf6c6145e5f115b))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/7030badb7e6a48f0ac3a3cc9678157d18886b196))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/8013f9b5ed055e337a28f69676930b5503611c86))

### feat

* **activity:** add additional fields ([](https://github.com/vyfor/cord.nvim/commit/ffec9cd47945200cbbd767bf101aae1c1f0bb9d4))
* add `:Cord restart` ([](https://github.com/vyfor/cord.nvim/commit/ff7b7cf122f8826590ad242c43b714131e897c80))
* add `json:Error` & `msgpack:Error` ([](https://github.com/vyfor/cord.nvim/commit/0f33af208828f04243190994015c29b669b0a3c9))
* add `new` function to `Packet` struct ([](https://github.com/vyfor/cord.nvim/commit/fd4b2017987e22ca0df62989b6cb9489c13a3511))
* add `notes` field ([](https://github.com/vyfor/cord.nvim/commit/304d17169eb83d47add2c3cdbb5355b77e13f73c))
* add `TryFrom` impl to `AssetType` ([](https://github.com/vyfor/cord.nvim/commit/ca4d5d86a0f50f028926dce715145ad85b801c5c))
* add `vim.g.cord_is_updating` to avoid multiple simultaneous updates ([](https://github.com/vyfor/cord.nvim/commit/166be045e0017cec72ec007e4c2d211b16f199e6))
* add a logger struct ([](https://github.com/vyfor/cord.nvim/commit/d3f4fa071b36f67a0be4ddbd96f5407b654b5419))
* add a macro that simplifies field deserialization ([](https://github.com/vyfor/cord.nvim/commit/ada22e60ee4e329cfd5f2e53aafcc3a1bfeb1692))
* add cleanup logic ([](https://github.com/vyfor/cord.nvim/commit/df96059c49580480d21f60692416e2b067ea160b))
* add explicit rich presence clearing; can be completely hidden with `force = true` ([](https://github.com/vyfor/cord.nvim/commit/8e99c030336225a983e38b3045024aa586e37842))
* add message deserialization logic ([](https://github.com/vyfor/cord.nvim/commit/3f7fea213f120fd0a6efc00432e40d8612f0d404))
* add message handler struct ([](https://github.com/vyfor/cord.nvim/commit/e93d9c8d625672834e8635a6d1bb40465b7e6136))
* add program entry point ([](https://github.com/vyfor/cord.nvim/commit/f0e8727733422e0b23230bb8eac6f27efbc892bd))
* add proper serialization for `LogEvent` ([](https://github.com/vyfor/cord.nvim/commit/340c504b1dbc4af239aed12f3deafb8a1adc6caf))
* add server-scoped `InitializeEvent` ([](https://github.com/vyfor/cord.nvim/commit/5097cebed85511547d8afdd3c1deb1bfdccc745a))
* add the `Cord` struct which is used as the entry point ([](https://github.com/vyfor/cord.nvim/commit/c2f67c02aa18c99a79ba8a2fe6422d6f7f858590))
* add unix implementation of the IPC server ([](https://github.com/vyfor/cord.nvim/commit/cdc4245030ceb3872433b5186a06442a5320dc59))
* add usercommands ([](https://github.com/vyfor/cord.nvim/commit/858209995306f9782d7d2d33dc2fdf6fb1db8386))
* add utility functions for building and fetching the executable ([](https://github.com/vyfor/cord.nvim/commit/b77455ba4878fc6563fdd1fdcc82650fb143dba6))
* add windows implementation of the IPC server ([](https://github.com/vyfor/cord.nvim/commit/04192c5a785dc08e6592007a8eee8a50e944e0b3))
* allow parsing `client_id` from client name ([](https://github.com/vyfor/cord.nvim/commit/3e7f1b36005fdec1bf5768495fbec88aa7197cc6))
* allow the user to skip updates ([](https://github.com/vyfor/cord.nvim/commit/381542d9d69badd9704285adc0349dcd69a42bb9))
* allow users to set a custom activity ([](https://github.com/vyfor/cord.nvim/commit/e9d388c84908db1c8749746b66e8333b000b8565))
* always fetch the executable if it's not present ([](https://github.com/vyfor/cord.nvim/commit/7a18740c8326b26571639d6f4712c6df88c5a982))
* always perform the file exists check first ([](https://github.com/vyfor/cord.nvim/commit/d94b5b85ee8ceae2a2dffe2fc91fe31e1796360f))
* **async:** implement Future wrappers for commonly used uv functions ([](https://github.com/vyfor/cord.nvim/commit/62b133caef3068694d24543869c80f9285782968))
* **async:** implement the concept of futures and handle async operations via coroutines ([](https://github.com/vyfor/cord.nvim/commit/8638d304f5ec003cc08aea4dda14b85ae29a9ce1))
* capture build errors ([](https://github.com/vyfor/cord.nvim/commit/64b1103ed59ce2ab145acc4e9e1a489753e861cf))
* **cli:** add `--version` argument ([](https://github.com/vyfor/cord.nvim/commit/1799242aa27426a7cf95d6a95ab0aad817edc418))
* **cli:** implement argument parsing ([](https://github.com/vyfor/cord.nvim/commit/b3051db2aad03a84494785bb6c244f0e8941302e))
* **config:** add `advanced.server.build` ([](https://github.com/vyfor/cord.nvim/commit/bf27f76d01797c8afa25ca1df76809f45fa58584))
* **config:** add `advanced.variables_in_functions` ([](https://github.com/vyfor/cord.nvim/commit/6aae1378c36d2c0c1a12e94d2a70af286709fb64))
* **config:** add `idle.unidle_on_focus` ([](https://github.com/vyfor/cord.nvim/commit/f4e8c93ba79b540e8b8afa47e1d2e597789aa916))
* **config:** add `on_activity` hook ([](https://github.com/vyfor/cord.nvim/commit/26952887fdb965ebc55cfdeebf7bcd15b2a8b629))
* **config:** add `on_disconnect` hook ([](https://github.com/vyfor/cord.nvim/commit/299882de687a89a92d003b62700acea5809340d3))
* **config:** add support for string templates using the new `variables` option ([](https://github.com/vyfor/cord.nvim/commit/d5ec225c14572f7f64fc60d40152ea0bcf83d944))
* **config:** allow users to choose between different icon styles ([](https://github.com/vyfor/cord.nvim/commit/3fef850c9b74e184778ed3b8ff4862d0b3ee446b))
* **config:** custom assets' options now support function types ([](https://github.com/vyfor/cord.nvim/commit/2a5122c6f8ecb41593e2b781e2203723ba1f05fc))
* **config:** introduce `idle.smart_idle` option which lets general activities take precedence over the idle ones ([](https://github.com/vyfor/cord.nvim/commit/99e9e93ecc90b54d76b07909a00ab7a1360a60a9))
* create `Config` struct to store internal configuration and refine timeout logic ([](https://github.com/vyfor/cord.nvim/commit/d5c179cd6afb853586d929c3f075c5377b5b3a48))
* create a separate module for icon-related stuff ([](https://github.com/vyfor/cord.nvim/commit/8b8361004e1fc01dce3f0c16941da36b80cbf106))
* display the most recent activity in case a client disconnects; clear the status if none are connected ([](https://github.com/vyfor/cord.nvim/commit/eedc94a3efd09724ec5b2581a063c87608a82020))
* **events:** add client event implementations ([](https://github.com/vyfor/cord.nvim/commit/fcda10325960bf771ec074324fa08d084c96bda0))
* **events:** add server events ([](https://github.com/vyfor/cord.nvim/commit/52061da15eda88b489786e5ff7e8681f487ba331))
* **events:** handle client connection ([](https://github.com/vyfor/cord.nvim/commit/2e7d5d40a847c2caacc8129d06fbb1cd6e3b837e))
* **events:** notify the client about errors on their side ([](https://github.com/vyfor/cord.nvim/commit/db9a2efc984f6b59a6cc763bfe965645697a19d0))
* handle automatically moving the server executable to nvim's data directory ([](https://github.com/vyfor/cord.nvim/commit/ae0fb6fa6662d66d825cc3e33a05772f894cb3dc))
* handle the activity type ([](https://github.com/vyfor/cord.nvim/commit/0bfa07ca972b0de1e2e1a8ea9d0c7fcf28394300))
* **icon:** expose locals ([](https://github.com/vyfor/cord.nvim/commit/15e83b3c51a77ebcfb5491bc3bec61df9a4bbe3d))
* implement `Default` for `Overlapped` struct ([](https://github.com/vyfor/cord.nvim/commit/83d9c4e82090c2ef188d0851e996dabffe46139d))
* implement `OnEvent` trait for all events ([](https://github.com/vyfor/cord.nvim/commit/16753421aa85f755f6d613521d74594adfaf3dbb))
* implement a wrapper around `curl` ([](https://github.com/vyfor/cord.nvim/commit/4bb65b4647922e5ac6bbd23ea6778bc98b271b2a))
* implement caching for workspace and repository entries ([](https://github.com/vyfor/cord.nvim/commit/1dc2defbb9d1957617f26b0495fc2fce15aae345))
* implement custom error type ([](https://github.com/vyfor/cord.nvim/commit/ff801571c357fe5598273a59ebb78bc84df79842))
* implement iterations - a maximum amount of time the server can idle without active connections ([](https://github.com/vyfor/cord.nvim/commit/b6e8955d9c17684916a63e7a7520c3564efe7128))
* implement reconnection mechanism for Discord ([](https://github.com/vyfor/cord.nvim/commit/90ba49a927bd206b85057bd85bdd05c3ab8667ad))
* implement sessions and session manager ([](https://github.com/vyfor/cord.nvim/commit/312b924f83c51750a45ff964beb264774f02516a))
* improve cleanup logic ([](https://github.com/vyfor/cord.nvim/commit/1b9be0c48931ab443d3a219ce7eb557b1134dcea))
* introduce `PresenceContext` struct which will be used to build the rich presence ([](https://github.com/vyfor/cord.nvim/commit/59ec14566b5b47bc1eaa80d04f8887f84377174c))
* introduce message communication system ([](https://github.com/vyfor/cord.nvim/commit/19ab5c6e67878e3d2ac75f89a5fa59e7b9678b67))
* **ipc:** continuously read data from Discord pipe to detect sudden disconnects ([](https://github.com/vyfor/cord.nvim/commit/807291fa7e752ba159eb27cff15475156dc0834d))
* **ipc:** use full pipe path ([](https://github.com/vyfor/cord.nvim/commit/55ca5aba72e4a8c892ce2aa5e460456331fce9f7))
* **json:** add robust error handling ([](https://github.com/vyfor/cord.nvim/commit/a6697da80f2f8f30cf4d31fdf4374b94973f61bf))
* **lockfile:** implement file locking mechanism ([](https://github.com/vyfor/cord.nvim/commit/dd8fe2c510eba26abe06eae2cad9aabb085ebfd5))
* **logger:** handle cases in lua callbacks ([](https://github.com/vyfor/cord.nvim/commit/c3ccb35d51e741b6c48d1512d637c6f4c38780c4))
* **lua:** automatically start the server ([](https://github.com/vyfor/cord.nvim/commit/0364cfb863f41154ae69ed90595f2d1e705b9a7c))
* **lua:** call `on_workspace_change` hook if a workspace change is detected ([](https://github.com/vyfor/cord.nvim/commit/33abe5a0ba516fbd1963282587beb8f0b2b38ea9))
* **lua:** initial implementation of the Lua codebase ([](https://github.com/vyfor/cord.nvim/commit/6f72e92fd737a5c210261ef44c8e6d490d2997bb))
* **lua:** switch to event-driven architecture ([](https://github.com/vyfor/cord.nvim/commit/e65f0153ae17feab7bf8266707f99299b91e9fb9))
* make server error messages clean ([](https://github.com/vyfor/cord.nvim/commit/c097bd898279379f0585ed9f7b56a04a2eb0ad0a))
* **manager:** expose more functions for interacting with rich presence and its manager ([](https://github.com/vyfor/cord.nvim/commit/c34dea16106505febf05b68297951e9e3ff78c87))
* **mappings:** add `cuda` filetype ([](https://github.com/vyfor/cord.nvim/commit/9fdd31efc4c2e665e43a397d0085410536e5b0c6))
* **mappings:** add icon for odin ([](https://github.com/vyfor/cord.nvim/commit/0df0a4586249f9fdb8b3d53da7a73f1ee0bf0bbc))
* **mappings:** add missing filetypes ([](https://github.com/vyfor/cord.nvim/commit/dbfb1adc6aa5394e072e2d97e964602ad1a7e5f2))
* **mappings:** add support for dashboard plugins ([](https://github.com/vyfor/cord.nvim/commit/cd04a8c944bf702b1c3771845a1eb9cb0795caf1))
* **mappings:** add support for docs ([](https://github.com/vyfor/cord.nvim/commit/cfe563fae5208e30481f676433268a9f4d62b7bb))
* modularize the event system and add helper macros for creating messages ([](https://github.com/vyfor/cord.nvim/commit/f302fa165e81be81102ec573b9f45b5b318824fd))
* **msgpack:** add msgpack deserialization ([](https://github.com/vyfor/cord.nvim/commit/eb2e10d54fba0b5da77741b3d3bbaf649341d8ef))
* **msgpack:** add msgpack serialization ([](https://github.com/vyfor/cord.nvim/commit/1f7c2a61196ccdc55dc8136d84866546ea9803df))
* **msgpack:** add support for STR8 header ([](https://github.com/vyfor/cord.nvim/commit/cd634ea1ef03ae126b59a9e58626d3bfc36d23ef))
* **msgpack:** allow serialization of Map values ([](https://github.com/vyfor/cord.nvim/commit/9dc26b48e9bed0c313ea1596fa3efd63af6594ab))
* **msgpack:** support owned strings ([](https://github.com/vyfor/cord.nvim/commit/0679c31e07a36e62de90831b43534aec498a7bcb))
* notify client when the workspace is found in the blacklist ([](https://github.com/vyfor/cord.nvim/commit/ae660bdf271cd57fa7845cc4287976ee6f2c685b))
* notify the client when server is ready to accept connections ([](https://github.com/vyfor/cord.nvim/commit/b27d7636b87d1eda512b3ad23f6b6a81fcc274a5))
* notify the clients about the server shutdown ([](https://github.com/vyfor/cord.nvim/commit/e987ba045392e83dc7ef90bc1e7eb57ecbbe4556))
* prepend the messages with a length header in case they get merged ([](https://github.com/vyfor/cord.nvim/commit/264fde3b37af50c6b7d90d6a92f3e2fb957ca4da))
* prioritize general activities over the idle activity ([](https://github.com/vyfor/cord.nvim/commit/b4a837c72d32c025009d927990bd5d487cb62a21))
* **producer:** allow sending a shutdown request ([](https://github.com/vyfor/cord.nvim/commit/354e2a697b50306d9e6fa850b51d26851f2c081b))
* provide clear error message for when the connection to Discord IPC fails ([](https://github.com/vyfor/cord.nvim/commit/48288949314e7646841f589848b911f4739e191e))
* provide clearer server error messages ([](https://github.com/vyfor/cord.nvim/commit/34bfe124cf437a4251361654ca03ea4a9757caf5))
* provide more data when logging the error ([](https://github.com/vyfor/cord.nvim/commit/22e9ed8973cb22a627e728366a034a242afbce05))
* **server:** add local `ShutdownEvent` ([](https://github.com/vyfor/cord.nvim/commit/3f55760fb8f7b557e4b44fbef2b57d59e580919b))
* **server:** improve error handling & error messages ([](https://github.com/vyfor/cord.nvim/commit/9aea257233410f1107ac8b5cba6f7c3e00a86a45))
* **server:** notify the client whether the provided client id is incorrect ([](https://github.com/vyfor/cord.nvim/commit/edc9f5aa81224a01a7436ca659cff7d4892133a3))
* set style-specific default idle icons ([](https://github.com/vyfor/cord.nvim/commit/c17ad890de619724b1983b6029c23fcd91563877))
* specify MSRV ([](https://github.com/vyfor/cord.nvim/commit/1b520cab90bf3ea3e9db69ed6ae9224ed93e5c11))
* specify plugin version ([](https://github.com/vyfor/cord.nvim/commit/cd8142f72240fc3ef15aafa64a0b7e0b713948c5))
* stop any updates when connection is lost ([](https://github.com/vyfor/cord.nvim/commit/dd1dd439e9a89bd3eb7ab5e28558437e38652bcb))
* store os name and architecture ([](https://github.com/vyfor/cord.nvim/commit/3f663db719c070ccdaf0bd1deabd0f86c151d327))
* switch to next available activity on `clear_activity` event ([](https://github.com/vyfor/cord.nvim/commit/f05f12673a962d13efe9fecaa3969c8a40f77fc6))
* tie each client to a session ([](https://github.com/vyfor/cord.nvim/commit/edd2141f1f0c9ecd6d1c9b9dde4f70771cb1861a))
* trim stderr messages ([](https://github.com/vyfor/cord.nvim/commit/4ec5de9c410819a4a8bdd97ee2f87e4808e57a4a))
* update sessions' last updated time ([](https://github.com/vyfor/cord.nvim/commit/9968d94ba2a463fca466915b0715f95679707456))
* use newly added mapping types ([](https://github.com/vyfor/cord.nvim/commit/015f7ed48729abf782eebfb25193b3438311bedf))
* **usercmds:** add `:Cord status` ([](https://github.com/vyfor/cord.nvim/commit/47c3d6af8c0fc74edd2859036952c82da7870215))
* **usercmds:** add `:Cord update` ([](https://github.com/vyfor/cord.nvim/commit/eba53d977e7439c8c8a3743e2496949b9c08320d))
* **util:** add additional file-related utility functions ([](https://github.com/vyfor/cord.nvim/commit/36d5031c22ba459845e6b9e5978373680ee25172))
* validate and set `editor_image` upon initialization ([](https://github.com/vyfor/cord.nvim/commit/d56416a13a448ed59be31726c3dc22bfc659e87b))

### fix

* `IPC:is_closing` should return true if the pipe does not exist ([](https://github.com/vyfor/cord.nvim/commit/29170fda16fa179ec2bf6e0eac4454e9c7ba49b1))
* `should_skip_update` should be checked right before the update ([](https://github.com/vyfor/cord.nvim/commit/93636dd1c2a93d31782b6f7bb113ae250bbc5ad1))
* actually update the editor image ([](https://github.com/vyfor/cord.nvim/commit/b1e5deb51ce26605bfbf7cbf3a28a42114e95d9e))
* allow sending same activity updates ([](https://github.com/vyfor/cord.nvim/commit/1883ba4715f0104b8a918e20bff28dcd4bf27625))
* an attempt to fix intermittent ui freezes ([](https://github.com/vyfor/cord.nvim/commit/e53bf20a754775dfc6ee12da56a3404fb98d3207))
* **async:** avoid including debug info on regular errors and fix error propagation ([](https://github.com/vyfor/cord.nvim/commit/618ce39bce038e220542c49241a8dbacb26b61b8))
* automatically retry connection on `ECONNREFUSED` & `ETIMEDOUT` ([](https://github.com/vyfor/cord.nvim/commit/55452b306bd3a765b90f54fcf89ab91f8473a261))
* avoid joining the handles ([](https://github.com/vyfor/cord.nvim/commit/3d478f127ebb4c23d47d6d613a64485cc90bd7f9))
* change `cfg-if` attribute ([](https://github.com/vyfor/cord.nvim/commit/76ecb5c8d6b0acc647302642a4d246f8c4fe27b7))
* close uv handles before exiting ([](https://github.com/vyfor/cord.nvim/commit/1bd6bb9358d1b6387f48613f85995094845dbe05))
* **config:** correctly handle custom client ids ([](https://github.com/vyfor/cord.nvim/commit/a4719a2dadcaf3952b80165d8bfad6cdf9a14fec))
* **config:** correctly replace config values ([](https://github.com/vyfor/cord.nvim/commit/17dd6f36a11ed25068fcf5f1785ef23a7f7e6928))
* **config:** do not override the given editor icon ([](https://github.com/vyfor/cord.nvim/commit/25d31ba64e44d02bbd84a130561b1e06638678b0))
* correct the logic responsible for falling back to defaults ([](https://github.com/vyfor/cord.nvim/commit/b784a7450ca19153cc3cf444c84cab3ce8cc5dad))
* correctly handle curl's stdout ([](https://github.com/vyfor/cord.nvim/commit/5b44dff6dee59be5c7cc9ff25891c476429571c5))
* correctly serialize activity timestamps ([](https://github.com/vyfor/cord.nvim/commit/6362a2c35b3fabbe58a9211e3034ac4042052622))
* correctly serialize rich presence packet ([](https://github.com/vyfor/cord.nvim/commit/3e894ee1e6f9c2e35f610134d7022ec536998e18))
* correctly set `workspace_dir` & `workspace_name` ([](https://github.com/vyfor/cord.nvim/commit/a56a85630e7b382332fc3b3c0bd756973a5ec6b9))
* do not queue activity updates upon losing focus ([](https://github.com/vyfor/cord.nvim/commit/0b8d6099ae14e1ba9fc984e6252c3477760a015c))
* fallback to default activity type if not provided ([](https://github.com/vyfor/cord.nvim/commit/bebea1fa9b12f9ed00266b892fe9060450b9e8d5))
* idle timeout check ([](https://github.com/vyfor/cord.nvim/commit/2e3e96150cdcbb7f20640caa9ab62e362f3c5448))
* implement event queuing for handling events registered after the handler is run ([](https://github.com/vyfor/cord.nvim/commit/46b8de4512cbbc268dd0d6b4cff21483aec2f0a3))
* imports ([](https://github.com/vyfor/cord.nvim/commit/9e8819e4595b2735b7471be55aaa17c55ecf7d5f))
* include `vim.log.levels.OFF` when parsing the log level ([](https://github.com/vyfor/cord.nvim/commit/cc9ba644fa02f2646651724d6d154af444625565))
* **ipc:** cleanup the stale pipe if the server process was forcefully terminated ([](https://github.com/vyfor/cord.nvim/commit/a77e86c8381da06f28715d0bebb9e6fce5f42dda))
* **ipc:** handle client disconnection on `ErrorKind::BrokenPipe` ([](https://github.com/vyfor/cord.nvim/commit/a315118178b121a31fa37d4cbb977ea2626cefc1))
* **ipc:** properly cleanup on exit ([](https://github.com/vyfor/cord.nvim/commit/0d5c61bf3da514f4188795b18b0633a9be560567))
* let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously ([](https://github.com/vyfor/cord.nvim/commit/44acc109b3daaee104300804b5df97b8ea3ed729))
* **log:** correctly write to the client pipe ([](https://github.com/vyfor/cord.nvim/commit/710b83e2f80d05b6fc8c90ab17a0d696d9c02406))
* **mappings:** ensure that the tooltips have a minimum length of 2 ([](https://github.com/vyfor/cord.nvim/commit/e9368fa5f5f51e279a5e506305cdec8368af7ce1))
* **mappings:** set plugin managers' default icon to `plugin` ([](https://github.com/vyfor/cord.nvim/commit/a2be43130107eb1cc07faf1724d587bd659116d5))
* normalize path before workspace lookup ([](https://github.com/vyfor/cord.nvim/commit/c919c945193a583b5b4269784e81012ec8fbf873))
* perform a nil check for usercmds interacting with the activity manager ([](https://github.com/vyfor/cord.nvim/commit/8427bed4be7a2f1c481c320dfc256fa5691410e1))
* properly handle chunked data ([](https://github.com/vyfor/cord.nvim/commit/0b8c655e23e747a4d987e290f54d684a3f53982b))
* properly handle server shutdowns ([](https://github.com/vyfor/cord.nvim/commit/281a93bd2cfe71ec51620f673bfb6847a9ea30fa))
* replace method definition with a function definition ([](https://github.com/vyfor/cord.nvim/commit/8d6bcf94904160ab1035b03517e010d75b15c491))
* resolve autocmds errors ([](https://github.com/vyfor/cord.nvim/commit/02340b11391843e852182b74e8dcd085084e724f))
* resolve event serialization issues ([](https://github.com/vyfor/cord.nvim/commit/7ec693ecb0b518d8b955510ae16c239486dbd0f1))
* resolve idle timeout related issues ([](https://github.com/vyfor/cord.nvim/commit/21d9a500f2c7e0d1458388af2800ac427a582d02))
* resolve workspace issues; handle missing hooks ([](https://github.com/vyfor/cord.nvim/commit/4cff95899d4af7cce572a3d24304d0f026bb1c48))
* return if config validation fails ([](https://github.com/vyfor/cord.nvim/commit/503371da39d5bf2451a5b4a4035ccfd4b8f8eb90))
* schedule cleanup logic if necessary ([](https://github.com/vyfor/cord.nvim/commit/9aa6578e76b616db3a897df485ea09a04093afea))
* schedule the callbacks to maintain compatibility with Neovim 0.6.0 ([](https://github.com/vyfor/cord.nvim/commit/35428c0c34f8235dd3e0b1bf52e60304cd2fd078))
* **server:** fix logging level comparison ([](https://github.com/vyfor/cord.nvim/commit/86f2a704526c846a18d3ff485ac1a39427bd7961))
* **server:** use panic-free means to write to stdout ([](https://github.com/vyfor/cord.nvim/commit/23ba7546c124023f853f14bb18c7d0d06fd5a1d4))
* **sessions:** retrieve the correct session based on id instead of always returning the first available ([](https://github.com/vyfor/cord.nvim/commit/6493da41d75c05e9ba8e02cd2322ce989b290e7e))
* set executable permissions on unix systems ([](https://github.com/vyfor/cord.nvim/commit/541a563b02dad39a15481180f47e6d9f05c9ba70))
* **spawn:** use an absolute path for server executable's fallback path ([](https://github.com/vyfor/cord.nvim/commit/0ac391a48c4b98e4b809ecb29c86986cb4ed46af))
* stop the plugin on server errors ([](https://github.com/vyfor/cord.nvim/commit/20d0a48010342c709c1ec060e1cc3870ab8e6879))
* update `last_activity` only if an actual update occurred ([](https://github.com/vyfor/cord.nvim/commit/1dd0e2053a6bd357e36ce7a4c8c9b687dde2392e))
* update server's status to `ready` on receiving the ready event ([](https://github.com/vyfor/cord.nvim/commit/8e5712950566f5ccd7959483765ff2e3c9b75787))
* use `cord --version` to determine the current version of the executable and whether an update is required ([](https://github.com/vyfor/cord.nvim/commit/5c313197e0516dc717af55a0d4187970329da4af))
* **windows:** properly handle overlapped I/O ([](https://github.com/vyfor/cord.nvim/commit/296e4f4fe6c61abcbccae0cefbdf58854b45bc99))
* **windows:** use overlapped io for named pipes to avoid deadlocks ([](https://github.com/vyfor/cord.nvim/commit/2f73ce8676a59aea21619542fcefe5298da8c0e7))

### perf

* avoid unnecessary lookups ([](https://github.com/vyfor/cord.nvim/commit/a4bccf465bac46801b5e55148ef7555a330d80f7))
* avoid unnecessary lookups ([](https://github.com/vyfor/cord.nvim/commit/b586eec3e834a61e043f663b0a6a2ac8c814bcef))
* **fs:** switch to async filesystem ops ([](https://github.com/vyfor/cord.nvim/commit/961ec2cbacc9b1ad2d9da5bcb6f5c2b607de382e))
* handle logic responsible for broadcasting the ready event more efficiently ([](https://github.com/vyfor/cord.nvim/commit/a5c8ca3796b0d44ca277292d3309705cf6d1397a))
* **json:** optimize deserialization logic ([](https://github.com/vyfor/cord.nvim/commit/02c233fcdba5b3813dd057fbc3189fbd2bdd9d96))
* **json:** optimize serialization logic and generalize the serializer ([](https://github.com/vyfor/cord.nvim/commit/3e7ab98cf7b79a565746edf77f178cd366eb9970))
* **lua:**  lazy load some modules ([](https://github.com/vyfor/cord.nvim/commit/0f1ebaa90343a744b06945ee7192535f4f3b60f7))
* **lua:** lazily load other modules ([](https://github.com/vyfor/cord.nvim/commit/6313f45ed0dcb282da54ac508ca3d7d9a710a128))
* **mappings:** significant performance improvements ([](https://github.com/vyfor/cord.nvim/commit/8ea0ad8a2451efea8539e3d8c682eebe0d723d5c))
* remove unnecessary atomics ([](https://github.com/vyfor/cord.nvim/commit/85499cf441a06db1c677abf78bc9757255a9c3d1))

### refactor

* **`AssetType`:** rename `Lsp` to `LspManager`, allow parsing from a string slice ([](https://github.com/vyfor/cord.nvim/commit/025092da3d148fd0bd9f530b4102aab5c5be6413))
* `Config::buttons` should be optional ([](https://github.com/vyfor/cord.nvim/commit/363fbee799481af7b2f3898337f2a203c11d8c44))
* `Packet` should not own the `Activity` ([](https://github.com/vyfor/cord.nvim/commit/ca936f8b7787055c778a6d3ad7a8306d88273fc4))
* **activity manager:** `pause()` and `resume()` should check `is_paused` ([](https://github.com/vyfor/cord.nvim/commit/d884b1d510e73b221744d58c0aab52e7990f4022))
* add more logging ([](https://github.com/vyfor/cord.nvim/commit/2e78f244b222c57428902f94c933667e50802e31))
* add new message types, rename `ServerMessage` to `LocalMessage`, resolve lifetime issues ([](https://github.com/vyfor/cord.nvim/commit/9a7d0c62ef6db8d937f0381c980bdb062f240681))
* apply clippy suggestions ([](https://github.com/vyfor/cord.nvim/commit/071da49da52c279147cc0c2e48eee4bab2b0ffec))
* call `on_ready` after initializing the activity manager ([](https://github.com/vyfor/cord.nvim/commit/378ade36ffe95f026f59b8f2002b3dd0ed9861eb))
* change `'Connecting'` log level to `DEBUG` ([](https://github.com/vyfor/cord.nvim/commit/f0749be64d817073e37c758c434e9bbc5b680c96))
* change `Deserialize::deserialize` to return `crate::Result` ([](https://github.com/vyfor/cord.nvim/commit/28e93f039311f58fdb547697e0ecc5579188bc7f))
* change `killall -9` -> `pkill -15` ([](https://github.com/vyfor/cord.nvim/commit/f9931732e83f14e41d98d6786917b94c0e656100))
* change `validate_buttons` function to accept a mutable reference ([](https://github.com/vyfor/cord.nvim/commit/29938ed924d737bc43e6b928ccef094d6216b34b))
* change error messages ([](https://github.com/vyfor/cord.nvim/commit/694fb967fea332b80504e8cfb583772c2c6ed973))
* change the return type of `OnEvent::on_event` to `crate::Result<()>` ([](https://github.com/vyfor/cord.nvim/commit/54f69dcc8c6eb2abf70b55cf97019f659f061daf))
* **cli:** add a new error type for cli-related errors ([](https://github.com/vyfor/cord.nvim/commit/4962a5f8cc50bb6b7bf06d65240d15b073fabc82))
* **codebase:** ensure proper asynchronous flow and reorganize codebase ([](https://github.com/vyfor/cord.nvim/commit/9f205acbae0022c1d6b73d87560dbdfb53695fd9))
* **config:** change default text values ([](https://github.com/vyfor/cord.nvim/commit/15a8f58aafabf4c5f25966338d1dc3d1ae109a58))
* **config:** change default values ([](https://github.com/vyfor/cord.nvim/commit/3822787a17fc009438eea6d58a3d717cadbca3df))
* **config:** remove `lsp` ([](https://github.com/vyfor/cord.nvim/commit/178631a04e333cfd0c85eec76e84d29833384175))
* **config:** rename `advanced.server.build` to `update` ([](https://github.com/vyfor/cord.nvim/commit/8f723a500540d68ac6af1651ba1cde274223d51a))
* **config:** rename `enable` -> `enabled` ([](https://github.com/vyfor/cord.nvim/commit/849f7a9d789f36164091e168cac0e58425d6a76f))
* **config:** set `cursor_update_mode` to `'on_hold'` by default ([](https://github.com/vyfor/cord.nvim/commit/6b320e924f863fd2b6b36eec45ac3c2e404c9bab))
* **config:** set `log_level` to `INFO` by default ([](https://github.com/vyfor/cord.nvim/commit/96e9bab3b6ab7679d7127fcca20817f34dadb18e))
* **constants:** change assets url to the new repo; reset assets version ([](https://github.com/vyfor/cord.nvim/commit/a61520e4c0eb66b71b309548d4491d636b94147c))
* **core:** simplify Rust backend by removing internal details ([](https://github.com/vyfor/cord.nvim/commit/266b82452bc775fa62b2a1501bd93ecea51dbab5))
* correct require path ([](https://github.com/vyfor/cord.nvim/commit/6f6899ac1804cf5b9fad8a9427be1e9cece0d237))
* **error:** change `CordError` type definition; add missing error types ([](https://github.com/vyfor/cord.nvim/commit/cf1990d8ad15496f715c0db3a384b347408294bc))
* **error:** include error kind when converting the error to string ([](https://github.com/vyfor/cord.nvim/commit/ecfd9675bcf548cf3412e8e3b19d09468bf4241e))
* **events:** update event implementations ([](https://github.com/vyfor/cord.nvim/commit/baaa8fa62bcf7249a166545bdb63d123bded17c0))
* **events:** use the client `DisconnectEvent` instead of the local `ClientDisconnectedEvent` ([](https://github.com/vyfor/cord.nvim/commit/6535683bbfaf3774b8d33d92caf9e4650ba6b814))
* fallback to `vim.uv` ([](https://github.com/vyfor/cord.nvim/commit/4d7604da1a5e72381882807bcaa35173cc4b7dac))
* fallback to os-specific executable path ([](https://github.com/vyfor/cord.nvim/commit/19d2ef9cbfb144572d9e48cb1f4cd1601259db28))
* fix error message ([](https://github.com/vyfor/cord.nvim/commit/7ae59661360ffb5e122e46995be7f8c531677c0f))
* force constructor initialization ([](https://github.com/vyfor/cord.nvim/commit/cb81ac9e14c82b5aaceb2a1ec29da7186cd41a85))
* handle shutdowns directly ([](https://github.com/vyfor/cord.nvim/commit/4e9748c58f605819d074495e20e5c9a81fc58372))
* handle the process handle ([](https://github.com/vyfor/cord.nvim/commit/edf1a1b79577a5245f9632beb34f988b55545099))
* have the session store `last_activity` ([](https://github.com/vyfor/cord.nvim/commit/ca3480841e35653885072c0cd8de52ffb1268294))
* implicitly return result in main function ([](https://github.com/vyfor/cord.nvim/commit/e9667f26002e79b24471d5767112fb3cc1249bf0))
* improve the way updates are skipped; expose a function in the manager class ([](https://github.com/vyfor/cord.nvim/commit/7032c0dbc996cb6f0b817790d1e898787278d35f))
* **ipc:** remove `on_error` calls ([](https://github.com/vyfor/cord.nvim/commit/5f3fcfe606d34e6124db8af8748d65d2e8894192))
* **ipc:** remove unnecessary scheduling ([](https://github.com/vyfor/cord.nvim/commit/3271a527a01ecafa5215896ceea299297c261124))
* **ipc:** use full pipe path ([](https://github.com/vyfor/cord.nvim/commit/8090ddf69a141eac14ec9dd354c65c07cde79380))
* **json:** rename value structs and move them to their own file ([](https://github.com/vyfor/cord.nvim/commit/542f2f8a1b064a83aa3149b3535c1caaf56b5e61))
* make `EventContext` mutable ([](https://github.com/vyfor/cord.nvim/commit/53bae427dce0ce84e5f7c67c240a0287b2aa7bfc))
* **manager:** force an update upon gaining focus ([](https://github.com/vyfor/cord.nvim/commit/4e5778fcc743a438ac67000619974eeee828b7f7))
* **mappings:** provide a constant value for default icons ([](https://github.com/vyfor/cord.nvim/commit/5a93c0838ef22b948109a9b0e2890d871a2df3e2))
* minor changes ([](https://github.com/vyfor/cord.nvim/commit/f8b7e0b84fdc8ae29443354bcf21ecf368a8d7cc))
* move `args.rs` to its own module ([](https://github.com/vyfor/cord.nvim/commit/26575ef9e080c2c119a59fd6378c51ed7d475371))
* move `AssetType` to `util` ([](https://github.com/vyfor/cord.nvim/commit/cf9605a72e3ebb6febe95a6a74ef4fc735366ad6))
* move `types.rs` to its own module ([](https://github.com/vyfor/cord.nvim/commit/aa090112b91cdef138564c64dd8d41aa2acd58dc))
* move autocmd for cleaning up to `plugin/cord.vim` ([](https://github.com/vyfor/cord.nvim/commit/d57d2fc48869cc9674fb954a096fc041c5f76795))
* move Discord IPC logic to a separate module ([](https://github.com/vyfor/cord.nvim/commit/5915844d17546fff55742b6377e538b1a7dc4464))
* move IPC messages to their own module ([](https://github.com/vyfor/cord.nvim/commit/3a70ea636b8130228fd94e0bfe5c0f776f3720e4))
* move usercmds to `cord.vim` ([](https://github.com/vyfor/cord.nvim/commit/ca7bb9d3382b5b8d2c1ed50945b0c438da9de37f))
* **msgpack:** make `deseralize` accept already deserialized `Value` ([](https://github.com/vyfor/cord.nvim/commit/4051fa21558f164eb9e97ce9bdf24635966d5e84))
* override `opts.filename` if it's empty ([](https://github.com/vyfor/cord.nvim/commit/5e5dee3a1a8ed5b2d3738add7f159f84472d269f))
* provide debug error messages ([](https://github.com/vyfor/cord.nvim/commit/64a6489f6a01096de7581b63fe59ca41ac20ee86))
* reduce code verbosity by using macros ([](https://github.com/vyfor/cord.nvim/commit/bee4aa09211db43dfc755394b7666fc02887677d))
* reflect codebase changes ([](https://github.com/vyfor/cord.nvim/commit/4b03eb2d63e05366722cfa64cbef2689a5f1ebc6))
* remove `constants.VERSION` ([](https://github.com/vyfor/cord.nvim/commit/2d43373e2413247914de27d89ad5dc3489141fb2))
* remove excessive debug logging ([](https://github.com/vyfor/cord.nvim/commit/414b4b249146a25032271b8575a6a31c5fea3dcc))
* remove lib.rs ([](https://github.com/vyfor/cord.nvim/commit/e01274ea28ff29d76674ac381c661d70cfa6bbfa))
* remove redundant functions ([](https://github.com/vyfor/cord.nvim/commit/bc814dae5706d6c3e5106cd91cb7641d2a431568))
* remove server-scoped `ShutdownEvent` ([](https://github.com/vyfor/cord.nvim/commit/96f3478874cbf83528abbd0fcbd1a699828bb6d7))
* remove unnecessary events ([](https://github.com/vyfor/cord.nvim/commit/e4522d61c5510d511868eaf542077387362a1979))
* rename `Config` to `PluginConfig` ([](https://github.com/vyfor/cord.nvim/commit/e7d37952af1d037da11c57d39fa3959016476388))
* rename `ResetTimestampEvent` -> `SetTimestampEvent` ([](https://github.com/vyfor/cord.nvim/commit/f2807503e6001aa5f0d35bc3a2c4aae4cc6ceefb))
* rename `rpc` to `activity` ([](https://github.com/vyfor/cord.nvim/commit/09ed1af7dedaa143b863ac4e02de894d4231f77c))
* rename `style` -> `theme` ([](https://github.com/vyfor/cord.nvim/commit/b9a7b7ea9cf9a91efc59eefc116eab97911d661a))
* rename `swap_images` -> `swap_icons` ([](https://github.com/vyfor/cord.nvim/commit/c40b7ca5776151989ad5a42551b3fbe4e4d24e56))
* rename `take_str` -> `take_string` ([](https://github.com/vyfor/cord.nvim/commit/c5b0a228fc787c017c258e7deeab2662b9b15ae7))
* rename directory to `presence` ([](https://github.com/vyfor/cord.nvim/commit/71034b2243669ea5156431fd6e28b5fa21b7b54e))
* replace `SessionManager::new` with `Default` derive ([](https://github.com/vyfor/cord.nvim/commit/a0587fdf93378b705a2afeff7e38f3b47ad8e31d))
* rewrite the codebase to use msgpack instead of json ([](https://github.com/vyfor/cord.nvim/commit/f2228cfccbc5a7453d4e18bc07a66029e654b58a))
* separate process spawning logic ([](https://github.com/vyfor/cord.nvim/commit/b0d46bde3810125475912b01b46198550bc85510))
* **serialization:** move [de]serializers to their own common module; introduce a common error type ([](https://github.com/vyfor/cord.nvim/commit/92102e674ff25911eefd04e1136f519dfe67d16f))
* set `opts.skip_update` back to `false` after skipping an activity update ([](https://github.com/vyfor/cord.nvim/commit/fe78f7acd20cd93ca983dc9806011b6d31c01376))
* set executable directory to `nvim-data/cord/bin` ([](https://github.com/vyfor/cord.nvim/commit/4e69b5b79d596086381a26293cb92ade44829c60))
* split `PluginConfig` into structs with relevant fields ([](https://github.com/vyfor/cord.nvim/commit/3e10a9a0adca9748ebb8ef2241152d91113aebd5))
* store relevant types and constants in a separate file ([](https://github.com/vyfor/cord.nvim/commit/05eb4f4f9b93801855143c1b51a21d59604b5965))
* tweak events ([](https://github.com/vyfor/cord.nvim/commit/9dfa106280f21e8ba0ff57663c4f6b794584326d))
* unconditionally fetch and store the git url ([](https://github.com/vyfor/cord.nvim/commit/a78605352e20e7222d7fabae0feed1ab7caa2066))
* update event context to include reference to Cord itself ([](https://github.com/vyfor/cord.nvim/commit/30995c661c124311d22f75af0f613aeb8d5808e6))
* update log message ([](https://github.com/vyfor/cord.nvim/commit/e2d16d255e41522bfdc8f29df9949ab006131445))
* update serialization logic ([](https://github.com/vyfor/cord.nvim/commit/c17fa3ece4e05530e7f6f9473094206f947a899e))
* use `crate::Result` type ([](https://github.com/vyfor/cord.nvim/commit/8cf2bc2dbbbe541e5bb79789f9245e552fdfa37d))
* use `Packet::empty()` ([](https://github.com/vyfor/cord.nvim/commit/d4ff8faf7a26a4f64d27b920bde13a9161968611))
* use Cargo to build the server executable ([](https://github.com/vyfor/cord.nvim/commit/233b18b2e51b5aef874775d7d9dd959fcea19359))
* use os-specific defaults ([](https://github.com/vyfor/cord.nvim/commit/c5b9e03f87be8cf17a61be78bf07b1dd1504397c))
* **usercmds:** do not include stack traceback when logging on unknown command ([](https://github.com/vyfor/cord.nvim/commit/46164b4254c6e6872d483bc54e360ea2454275ae))
* wrap `editor_image` in Option type ([](https://github.com/vyfor/cord.nvim/commit/a59eb2533d283ceb03bb837f08a4ae5aca199f68))

### style

* correct error message ([](https://github.com/vyfor/cord.nvim/commit/2914451e5a61e633bb865eefa42e7a09feef13c1))
* fix warning ([](https://github.com/vyfor/cord.nvim/commit/d55a6b171ee58b400a124e29233a16c11a9e2980))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/149cb9f0a09478d73e2faa264b1bb33687a6de91))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/b5f7cee2ab210a581e11dceb3cf41872f6f71030))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/791a83e181f3f74143ddfd4047b1d7ac487d947a))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/b22e44287952230ef28c8234bd33204b9bf06791))
* more logging ([](https://github.com/vyfor/cord.nvim/commit/a776a4161b04a8e1258aedf9490493e315313650))
* move autocmds to the bottom of the file ([](https://github.com/vyfor/cord.nvim/commit/c42f88f5f463da1822aff1b2d218319ad26c87db))
* reformat code ([](https://github.com/vyfor/cord.nvim/commit/7af31a82e01432e7e562a671fb88575609806ab4))
* reformat codebase ([](https://github.com/vyfor/cord.nvim/commit/8e88a20e01c00c96048ebed7fed925e17822d988))
* remove unused import ([](https://github.com/vyfor/cord.nvim/commit/ed3f1309d0f219391e6b5d2c4b439f00b36b7b1a))
* remove unused variables ([](https://github.com/vyfor/cord.nvim/commit/d6f7a4096bea85ac4c36a91a49e16eaf199745ea))
* remove unused variables ([](https://github.com/vyfor/cord.nvim/commit/dedec5f7dfe96daa57e153120c7f39402f2dad2b))
* reorder imports ([](https://github.com/vyfor/cord.nvim/commit/5658ca805c3bb495017d277e59367de3580fac84))
* resolve unused argument warning ([](https://github.com/vyfor/cord.nvim/commit/85781a2c862de4cbbb80b2bf35c0bfe9c3251075))

### BREAKING CHANGE

* none
github-actions bot pushed a commit that referenced this issue Jan 2, 2025
# ⚙️ [v2.0.0-beta.1]

_2025-01-02_

* feat!: update semantic release's ci ([](573814d))
* fix!: bugfixes related to opts handling, workspace detection callback, button validation as well as slight changes in configuration ([](277b5b0))
* merge #147 ([](9423cf3)), closes [#147](#147)
* merge #152 ([](2b0fc96)), closes [#152](#152)
* merge #155 ([](a490466)), closes [#155](#155)
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](f253296))
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](ccdd749))
* refactor!: rename `git_url` -> `repo_url` ([](5d8faf2))

### build

* bump project version ([](e4f9b71))
* bump project version ([](a6a33eb))
* bump project version ([](d56244a))
* bump project version ([](d1853f4))
* bump project version ([](6196014))
* bump project version ([](f43c94d))
* bump project version ([](9898651))
* enable incremental compilation ([](7b6bb00))
* prepare for publishing ([](9bf0821))
* set project version to `2.0.0-beta.1` ([](52ae36f))
* specify msrv ([](abaa56e))

### chore

* add `rustfmt.toml` ([](c53d928))
* add derives and reformat code ([](3d5096c))
* add relevant `mod`s ([](c51352c))
* **assets:** delete the assets directory ([](97ca959))
* bump assets version ([](14ff704))
* bump assets version ([](3e5016b))
* bump assets version ([](d573d6e))
* bump assets version ([](155638d))
* bump assets version ([](3092bbc))
* change semantic release config ([](705f0ac))
* code cleanup ([](b139bfa))
* delete redundant file `status.rs` ([](1b133d1))
* **event:** remove redundant implementations ([](800991f))
* fix clippy warnings ([](6ed0a5d))
* fix typo ([](935dce3))
* fix warnings ([](f7c9e20))
* fix warnings ([](d27ab6a))
* ignore clippy warning ([](16fa5b5))
* **lua:** fix warnings ([](8ef3177))
* **release:** 1.0.0-beta.1 [skip ci] ([](f166cfc)), closes [#53](#53) [#80](#80)
* **release:** 2.0.0-beta.1 [skip ci] ([](fb719c6)), closes [#147](#147) [#152](#152) [#155](#155) [#53](#53) [#80](#80)
* **release:** 2.0.0-beta.1 [skip ci] ([](1c39245))
* **release:** 2.0.0-beta.2 [skip ci] ([](371b6eb))
* remove changelog ([](c05af76))
* remove changelog ([](ca109e5))
* remove debug statement ([](67d9770))
* remove redundant code ([](baa8703))
* remove redundant file ([](755ce40))
* remove unnecessary explicit lifetimes ([](1088976))
* remove unnecessary statement ([](c12ad54))
* remove unused imports ([](0b1d6b9))
* remove unused variable ([](fef472f))
* resolve merge conflicts ([](4cd628c))
* set previous release in `.releaserc.json` ([](f398c02))
* temporarily comment out code ([](e2e2fd3))
* update `.gitignore` ([](bb07214))
* update `.luacheckrc` ([](f59f170))
* update `.luacheckrc` ([](df2f200))
* update `.luacheckrc` ([](6ce30ee))
* update `.releaserc.json` ([](9744462))
* update `util/mod.rs` ([](5ba79f4))
* update releaserc ([](5fbdd5d))
* update semantic release ([](808c978))
* update semantic release ([](8149653))

### ci

* add freebsd target ([](20d27e1))
* create release.yml ([](1d725d1))
* integrate semantic release ([](66ca7cd))
* prepare for publishing to luarocks ([](ac35d97))
* update `release.yml` ([](30c3177))
* update `release.yml` ([](9984818))
* update release workflow ([](5367491))
* update release workflow ([](f9ddd9f))
* update release workflow ([](30e98f6))
* update release.yml ([](a60ac04))
* update semantic release ([](638dadf))

### docs

* add configuration examples ([](a15b917))
* **configration:** add missing backticks ([](7958f89))
* **configuration:** add default config values ([](1aff02e))
* **configuration:** center activity options ([](de33741))
* create a configuration guide ([](e51af26))
* create a migration guide ([](debee75))
* document string templating ([](0bfc19d))
* **lua:** document exposed interfaces ([](7c23fe2))
* **migration:** fix text highlighting ([](965ee86))
* prefer `:Cord update` over `:Cord fetch` ([](7774af4))
* **readme:** add badge icons ([](63c5b08))
* **readme:** add cord's logo ([](6bd56b5))
* **readme:** add installation step for `rocks.nvim` ([](3f1dba6))
* **readme:** include a link for cord's brand new discord server ([](ce8ce56))
* **readme:** rewrite README ([](24d75e0))
* **readme:** update README ([](89ccba3))
* **readme:** update README ([](29f5f74))
* **readme:** update README ([](12b71d1))
* **readme:** update README ([](95f8167))
* **rust:** document crucial parts of the codebase ([](7f217a7))
* **templates:** remove the icon request issue template ([](2578920))
* update configuration guide ([](62b0764))
* update configuration guide ([](5eca57b))
* update configuration guide ([](cf031ff))
* update documentation ([](243898a))
* update examples ([](a1699d1))
* update examples ([](8abe529))
* update examples ([](20e02e3))
* update migration guide ([](01d1d60))
* update migration guide ([](d527f71))
* update migration guide ([](c4c6693))
* update readme ([](653c13d))
* update readme ([](e4c5621))
* update readme ([](d13991b))
* update readme ([](ccdc4dc))
* update readme ([](69d998b))
* update the configuration guide ([](cf23961))
* update the configuration guide ([](78b7ca6))
* update the configuration guide ([](9ef07b7))
* update the configuration guide ([](480d74c))
* update the configuration guide ([](fb6326f))
* update the configuration guide ([](40ec350))
* update the configuration guide ([](16b1ec3))
* update the configuration guide ([](8038675))
* update the examples ([](cf728c3))
* update the examples ([](4e67d61))
* update the examples ([](8209e21))
* update the migration guide ([](006f3a4))
* update the migration guide ([](d9ccf2e))
* update the migration guide ([](048f1d2))
* update the migration guide ([](7ba64be))
* update the migration guide ([](c5353fe))
* update the migration guide ([](7030bad))
* update the migration guide ([](8013f9b))

### feat

* **activity:** add additional fields ([](ffec9cd))
* add `:Cord restart` ([](ff7b7cf))
* add `json:Error` & `msgpack:Error` ([](0f33af2))
* add `new` function to `Packet` struct ([](fd4b201))
* add `notes` field ([](304d171))
* add `TryFrom` impl to `AssetType` ([](ca4d5d8))
* add `vim.g.cord_is_updating` to avoid multiple simultaneous updates ([](166be04))
* add a logger struct ([](d3f4fa0))
* add a macro that simplifies field deserialization ([](ada22e6))
* add cleanup logic ([](df96059))
* add explicit rich presence clearing; can be completely hidden with `force = true` ([](8e99c03))
* add message deserialization logic ([](3f7fea2))
* add message handler struct ([](e93d9c8))
* add program entry point ([](f0e8727))
* add proper serialization for `LogEvent` ([](340c504))
* add server-scoped `InitializeEvent` ([](5097ceb))
* add the `Cord` struct which is used as the entry point ([](c2f67c0))
* add unix implementation of the IPC server ([](cdc4245))
* add usercommands ([](8582099))
* add utility functions for building and fetching the executable ([](b77455b))
* add windows implementation of the IPC server ([](04192c5))
* allow parsing `client_id` from client name ([](3e7f1b3))
* allow the user to skip updates ([](381542d))
* allow users to set a custom activity ([](e9d388c))
* always fetch the executable if it's not present ([](7a18740))
* always perform the file exists check first ([](d94b5b8))
* **async:** implement Future wrappers for commonly used uv functions ([](62b133c))
* **async:** implement the concept of futures and handle async operations via coroutines ([](8638d30))
* capture build errors ([](64b1103))
* **cli:** add `--version` argument ([](1799242))
* **cli:** implement argument parsing ([](b3051db))
* **config:** add `advanced.server.build` ([](bf27f76))
* **config:** add `advanced.variables_in_functions` ([](6aae137))
* **config:** add `idle.unidle_on_focus` ([](f4e8c93))
* **config:** add `on_activity` hook ([](2695288))
* **config:** add `on_disconnect` hook ([](299882d))
* **config:** add support for string templates using the new `variables` option ([](d5ec225))
* **config:** allow users to choose between different icon styles ([](3fef850))
* **config:** custom assets' options now support function types ([](2a5122c))
* **config:** introduce `idle.smart_idle` option which lets general activities take precedence over the idle ones ([](99e9e93))
* create `Config` struct to store internal configuration and refine timeout logic ([](d5c179c))
* create a separate module for icon-related stuff ([](8b83610))
* display the most recent activity in case a client disconnects; clear the status if none are connected ([](eedc94a))
* **events:** add client event implementations ([](fcda103))
* **events:** add server events ([](52061da))
* **events:** handle client connection ([](2e7d5d4))
* **events:** notify the client about errors on their side ([](db9a2ef))
* handle automatically moving the server executable to nvim's data directory ([](ae0fb6f))
* handle the activity type ([](0bfa07c))
* **icon:** expose locals ([](15e83b3))
* implement `Default` for `Overlapped` struct ([](83d9c4e))
* implement `OnEvent` trait for all events ([](1675342))
* implement a wrapper around `curl` ([](4bb65b4))
* implement caching for workspace and repository entries ([](1dc2def))
* implement custom error type ([](ff80157))
* implement iterations - a maximum amount of time the server can idle without active connections ([](b6e8955))
* implement reconnection mechanism for Discord ([](90ba49a))
* implement sessions and session manager ([](312b924))
* improve cleanup logic ([](1b9be0c))
* introduce `PresenceContext` struct which will be used to build the rich presence ([](59ec145))
* introduce message communication system ([](19ab5c6))
* **ipc:** continuously read data from Discord pipe to detect sudden disconnects ([](807291f))
* **ipc:** use full pipe path ([](55ca5ab))
* **json:** add robust error handling ([](a6697da))
* **lockfile:** implement file locking mechanism ([](dd8fe2c))
* **logger:** handle cases in lua callbacks ([](c3ccb35))
* **lua:** automatically start the server ([](0364cfb))
* **lua:** call `on_workspace_change` hook if a workspace change is detected ([](33abe5a))
* **lua:** initial implementation of the Lua codebase ([](6f72e92))
* **lua:** switch to event-driven architecture ([](e65f015))
* make server error messages clean ([](c097bd8))
* **manager:** expose more functions for interacting with rich presence and its manager ([](c34dea1))
* **mappings:** add `cuda` filetype ([](9fdd31e))
* **mappings:** add icon for odin ([](0df0a45))
* **mappings:** add missing filetypes ([](dbfb1ad))
* **mappings:** add support for dashboard plugins ([](cd04a8c))
* **mappings:** add support for docs ([](cfe563f))
* modularize the event system and add helper macros for creating messages ([](f302fa1))
* **msgpack:** add msgpack deserialization ([](eb2e10d))
* **msgpack:** add msgpack serialization ([](1f7c2a6))
* **msgpack:** add support for STR8 header ([](cd634ea))
* **msgpack:** allow serialization of Map values ([](9dc26b4))
* **msgpack:** support owned strings ([](0679c31))
* notify client when the workspace is found in the blacklist ([](ae660bd))
* notify the client when server is ready to accept connections ([](b27d763))
* notify the clients about the server shutdown ([](e987ba0))
* prepend the messages with a length header in case they get merged ([](264fde3))
* prioritize general activities over the idle activity ([](b4a837c))
* **producer:** allow sending a shutdown request ([](354e2a6))
* provide clear error message for when the connection to Discord IPC fails ([](4828894))
* provide clearer server error messages ([](34bfe12))
* provide more data when logging the error ([](22e9ed8))
* **server:** add local `ShutdownEvent` ([](3f55760))
* **server:** improve error handling & error messages ([](9aea257))
* **server:** notify the client whether the provided client id is incorrect ([](edc9f5a))
* set style-specific default idle icons ([](c17ad89))
* specify MSRV ([](1b520ca))
* specify plugin version ([](cd8142f))
* stop any updates when connection is lost ([](dd1dd43))
* store os name and architecture ([](3f663db))
* switch to next available activity on `clear_activity` event ([](f05f126))
* tie each client to a session ([](edd2141))
* trim stderr messages ([](4ec5de9))
* update sessions' last updated time ([](9968d94))
* use newly added mapping types ([](015f7ed))
* **usercmds:** add `:Cord status` ([](47c3d6a))
* **usercmds:** add `:Cord update` ([](eba53d9))
* **util:** add additional file-related utility functions ([](36d5031))
* validate and set `editor_image` upon initialization ([](d56416a))

### fix

* `IPC:is_closing` should return true if the pipe does not exist ([](29170fd))
* `should_skip_update` should be checked right before the update ([](93636dd))
* actually update the editor image ([](b1e5deb))
* allow sending same activity updates ([](1883ba4))
* an attempt to fix intermittent ui freezes ([](e53bf20))
* **async:** avoid including debug info on regular errors and fix error propagation ([](618ce39))
* automatically retry connection on `ECONNREFUSED` & `ETIMEDOUT` ([](55452b3))
* avoid joining the handles ([](3d478f1))
* change `cfg-if` attribute ([](76ecb5c))
* close uv handles before exiting ([](1bd6bb9))
* **config:** correctly handle custom client ids ([](a4719a2))
* **config:** correctly replace config values ([](17dd6f3))
* **config:** do not override the given editor icon ([](25d31ba))
* correct the logic responsible for falling back to defaults ([](b784a74))
* correctly handle curl's stdout ([](5b44dff))
* correctly serialize activity timestamps ([](6362a2c))
* correctly serialize rich presence packet ([](3e894ee))
* correctly set `workspace_dir` & `workspace_name` ([](a56a856))
* do not queue activity updates upon losing focus ([](0b8d609))
* fallback to default activity type if not provided ([](bebea1f))
* idle timeout check ([](2e3e961))
* implement event queuing for handling events registered after the handler is run ([](46b8de4))
* imports ([](9e8819e))
* include `vim.log.levels.OFF` when parsing the log level ([](cc9ba64))
* **ipc:** cleanup the stale pipe if the server process was forcefully terminated ([](a77e86c))
* **ipc:** handle client disconnection on `ErrorKind::BrokenPipe` ([](a315118))
* **ipc:** properly cleanup on exit ([](0d5c61b))
* let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously ([](44acc10))
* **log:** correctly write to the client pipe ([](710b83e))
* **mappings:** ensure that the tooltips have a minimum length of 2 ([](e9368fa))
* **mappings:** set plugin managers' default icon to `plugin` ([](a2be431))
* normalize path before workspace lookup ([](c919c94))
* perform a nil check for usercmds interacting with the activity manager ([](8427bed))
* properly handle chunked data ([](0b8c655))
* properly handle server shutdowns ([](281a93b))
* replace method definition with a function definition ([](8d6bcf9))
* resolve autocmds errors ([](02340b1))
* resolve event serialization issues ([](7ec693e))
* resolve idle timeout related issues ([](21d9a50))
* resolve workspace issues; handle missing hooks ([](4cff958))
* return if config validation fails ([](503371d))
* schedule cleanup logic if necessary ([](9aa6578))
* schedule the callbacks to maintain compatibility with Neovim 0.6.0 ([](35428c0))
* **server:** fix logging level comparison ([](86f2a70))
* **server:** use panic-free means to write to stdout ([](23ba754))
* **sessions:** retrieve the correct session based on id instead of always returning the first available ([](6493da4))
* set executable permissions on unix systems ([](541a563))
* **spawn:** use an absolute path for server executable's fallback path ([](0ac391a))
* stop the plugin on server errors ([](20d0a48))
* update `last_activity` only if an actual update occurred ([](1dd0e20))
* update server's status to `ready` on receiving the ready event ([](8e57129))
* use `cord --version` to determine the current version of the executable and whether an update is required ([](5c31319))
* **windows:** properly handle overlapped I/O ([](296e4f4))
* **windows:** use overlapped io for named pipes to avoid deadlocks ([](2f73ce8))

### perf

* avoid unnecessary lookups ([](a4bccf4))
* avoid unnecessary lookups ([](b586eec))
* **fs:** switch to async filesystem ops ([](961ec2c))
* handle logic responsible for broadcasting the ready event more efficiently ([](a5c8ca3))
* **json:** optimize deserialization logic ([](02c233f))
* **json:** optimize serialization logic and generalize the serializer ([](3e7ab98))
* **lua:**  lazy load some modules ([](0f1ebaa))
* **lua:** lazily load other modules ([](6313f45))
* **mappings:** significant performance improvements ([](8ea0ad8))
* remove unnecessary atomics ([](85499cf))

### refactor

* **`AssetType`:** rename `Lsp` to `LspManager`, allow parsing from a string slice ([](025092d))
* `Config::buttons` should be optional ([](363fbee))
* `Packet` should not own the `Activity` ([](ca936f8))
* **activity manager:** `pause()` and `resume()` should check `is_paused` ([](d884b1d))
* add more logging ([](2e78f24))
* add new message types, rename `ServerMessage` to `LocalMessage`, resolve lifetime issues ([](9a7d0c6))
* apply clippy suggestions ([](071da49))
* call `on_ready` after initializing the activity manager ([](378ade3))
* change `'Connecting'` log level to `DEBUG` ([](f0749be))
* change `Deserialize::deserialize` to return `crate::Result` ([](28e93f0))
* change `killall -9` -> `pkill -15` ([](f993173))
* change `validate_buttons` function to accept a mutable reference ([](29938ed))
* change error messages ([](694fb96))
* change the return type of `OnEvent::on_event` to `crate::Result<()>` ([](54f69dc))
* **cli:** add a new error type for cli-related errors ([](4962a5f))
* **codebase:** ensure proper asynchronous flow and reorganize codebase ([](9f205ac))
* **config:** change default text values ([](15a8f58))
* **config:** change default values ([](3822787))
* **config:** remove `lsp` ([](178631a))
* **config:** rename `advanced.server.build` to `update` ([](8f723a5))
* **config:** rename `enable` -> `enabled` ([](849f7a9))
* **config:** set `cursor_update_mode` to `'on_hold'` by default ([](6b320e9))
* **config:** set `log_level` to `INFO` by default ([](96e9bab))
* **constants:** change assets url to the new repo; reset assets version ([](a61520e))
* **core:** simplify Rust backend by removing internal details ([](266b824))
* correct require path ([](6f6899a))
* **error:** change `CordError` type definition; add missing error types ([](cf1990d))
* **error:** include error kind when converting the error to string ([](ecfd967))
* **events:** update event implementations ([](baaa8fa))
* **events:** use the client `DisconnectEvent` instead of the local `ClientDisconnectedEvent` ([](6535683))
* fallback to `vim.uv` ([](4d7604d))
* fallback to os-specific executable path ([](19d2ef9))
* fix error message ([](7ae5966))
* force constructor initialization ([](cb81ac9))
* handle shutdowns directly ([](4e9748c))
* handle the process handle ([](edf1a1b))
* have the session store `last_activity` ([](ca34808))
* implicitly return result in main function ([](e9667f2))
* improve the way updates are skipped; expose a function in the manager class ([](7032c0d))
* **ipc:** remove `on_error` calls ([](5f3fcfe))
* **ipc:** remove unnecessary scheduling ([](3271a52))
* **ipc:** use full pipe path ([](8090ddf))
* **json:** rename value structs and move them to their own file ([](542f2f8))
* make `EventContext` mutable ([](53bae42))
* **manager:** force an update upon gaining focus ([](4e5778f))
* **mappings:** provide a constant value for default icons ([](5a93c08))
* minor changes ([](f8b7e0b))
* move `args.rs` to its own module ([](26575ef))
* move `AssetType` to `util` ([](cf9605a))
* move `types.rs` to its own module ([](aa09011))
* move autocmd for cleaning up to `plugin/cord.vim` ([](d57d2fc))
* move Discord IPC logic to a separate module ([](5915844))
* move IPC messages to their own module ([](3a70ea6))
* move usercmds to `cord.vim` ([](ca7bb9d))
* **msgpack:** make `deseralize` accept already deserialized `Value` ([](4051fa2))
* override `opts.filename` if it's empty ([](5e5dee3))
* provide debug error messages ([](64a6489))
* reduce code verbosity by using macros ([](bee4aa0))
* reflect codebase changes ([](4b03eb2))
* remove `constants.VERSION` ([](2d43373))
* remove excessive debug logging ([](414b4b2))
* remove lib.rs ([](e01274e))
* remove redundant functions ([](bc814da))
* remove server-scoped `ShutdownEvent` ([](96f3478))
* remove unnecessary events ([](e4522d6))
* rename `Config` to `PluginConfig` ([](e7d3795))
* rename `ResetTimestampEvent` -> `SetTimestampEvent` ([](f280750))
* rename `rpc` to `activity` ([](09ed1af))
* rename `style` -> `theme` ([](b9a7b7e))
* rename `swap_images` -> `swap_icons` ([](c40b7ca))
* rename `take_str` -> `take_string` ([](c5b0a22))
* rename directory to `presence` ([](71034b2))
* replace `SessionManager::new` with `Default` derive ([](a0587fd))
* rewrite the codebase to use msgpack instead of json ([](f2228cf))
* separate process spawning logic ([](b0d46bd))
* **serialization:** move [de]serializers to their own common module; introduce a common error type ([](92102e6))
* set `opts.skip_update` back to `false` after skipping an activity update ([](fe78f7a))
* set executable directory to `nvim-data/cord/bin` ([](4e69b5b))
* split `PluginConfig` into structs with relevant fields ([](3e10a9a))
* store relevant types and constants in a separate file ([](05eb4f4))
* tweak events ([](9dfa106))
* unconditionally fetch and store the git url ([](a786053))
* update event context to include reference to Cord itself ([](30995c6))
* update log message ([](e2d16d2))
* update serialization logic ([](c17fa3e))
* use `crate::Result` type ([](8cf2bc2))
* use `Packet::empty()` ([](d4ff8fa))
* use Cargo to build the server executable ([](233b18b))
* use os-specific defaults ([](c5b9e03))
* **usercmds:** do not include stack traceback when logging on unknown command ([](46164b4))
* wrap `editor_image` in Option type ([](a59eb25))

### style

* correct error message ([](2914451))
* fix warning ([](d55a6b1))
* fix warnings ([](149cb9f))
* fix warnings ([](b5f7cee))
* fix warnings ([](791a83e))
* fix warnings ([](b22e442))
* more logging ([](a776a41))
* move autocmds to the bottom of the file ([](c42f88f))
* reformat code ([](7af31a8))
* reformat codebase ([](8e88a20))
* remove unused import ([](ed3f130))
* remove unused variables ([](d6f7a40))
* remove unused variables ([](dedec5f))
* reorder imports ([](5658ca8))
* resolve unused argument warning ([](85781a2))

### BREAKING CHANGE

* none
github-actions bot pushed a commit that referenced this issue Jan 2, 2025
# ⚙️ [v2.0.0-beta.1]

_2025-01-02_

* feat!: update semantic release's ci ([](573814d))
* fix!: bugfixes related to opts handling, workspace detection callback, button validation as well as slight changes in configuration ([](277b5b0))
* merge #147 ([](9423cf3)), closes [#147](#147)
* merge #152 ([](2b0fc96)), closes [#152](#152)
* merge #155 ([](a490466)), closes [#155](#155)
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](f253296))
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](ccdd749))
* refactor!: rename `git_url` -> `repo_url` ([](5d8faf2))

### build

* bump project version ([](e4f9b71))
* bump project version ([](a6a33eb))
* bump project version ([](d56244a))
* bump project version ([](d1853f4))
* bump project version ([](6196014))
* bump project version ([](f43c94d))
* bump project version ([](9898651))
* enable incremental compilation ([](7b6bb00))
* prepare for publishing ([](9bf0821))
* set project version to `2.0.0-beta.1` ([](52ae36f))
* specify msrv ([](abaa56e))

### chore

* add `rustfmt.toml` ([](c53d928))
* add derives and reformat code ([](3d5096c))
* add relevant `mod`s ([](c51352c))
* **assets:** delete the assets directory ([](97ca959))
* bump assets version ([](14ff704))
* bump assets version ([](3e5016b))
* bump assets version ([](d573d6e))
* bump assets version ([](155638d))
* bump assets version ([](3092bbc))
* change semantic release config ([](705f0ac))
* code cleanup ([](b139bfa))
* delete redundant file `status.rs` ([](1b133d1))
* **event:** remove redundant implementations ([](800991f))
* fix clippy warnings ([](6ed0a5d))
* fix typo ([](935dce3))
* fix warnings ([](f7c9e20))
* fix warnings ([](d27ab6a))
* ignore clippy warning ([](16fa5b5))
* **lua:** fix warnings ([](8ef3177))
* **release:** 1.0.0-beta.1 [skip ci] ([](f166cfc)), closes [#53](#53) [#80](#80)
* **release:** 2.0.0-beta.1 [skip ci] ([](fb719c6)), closes [#147](#147) [#152](#152) [#155](#155) [#53](#53) [#80](#80)
* **release:** 2.0.0-beta.1 [skip ci] ([](1c39245))
* **release:** 2.0.0-beta.2 [skip ci] ([](371b6eb))
* remove changelog ([](c05af76))
* remove changelog ([](ca109e5))
* remove debug statement ([](67d9770))
* remove redundant code ([](baa8703))
* remove redundant file ([](755ce40))
* remove unnecessary explicit lifetimes ([](1088976))
* remove unnecessary statement ([](c12ad54))
* remove unused imports ([](0b1d6b9))
* remove unused variable ([](fef472f))
* resolve merge conflicts ([](4cd628c))
* set previous release in `.releaserc.json` ([](f398c02))
* temporarily comment out code ([](e2e2fd3))
* update `.gitignore` ([](bb07214))
* update `.luacheckrc` ([](f59f170))
* update `.luacheckrc` ([](df2f200))
* update `.luacheckrc` ([](6ce30ee))
* update `.releaserc.json` ([](9744462))
* update `util/mod.rs` ([](5ba79f4))
* update releaserc ([](5fbdd5d))
* update semantic release ([](7e9c5b0))
* update semantic release ([](8149653))

### ci

* add freebsd target ([](20d27e1))
* create release.yml ([](1d725d1))
* integrate semantic release ([](66ca7cd))
* prepare for publishing to luarocks ([](ac35d97))
* update `release.yml` ([](30c3177))
* update `release.yml` ([](9984818))
* update release workflow ([](5367491))
* update release workflow ([](f9ddd9f))
* update release workflow ([](30e98f6))
* update release.yml ([](a60ac04))
* update semantic release ([](638dadf))

### docs

* add configuration examples ([](a15b917))
* **configration:** add missing backticks ([](7958f89))
* **configuration:** add default config values ([](1aff02e))
* **configuration:** center activity options ([](de33741))
* create a configuration guide ([](e51af26))
* create a migration guide ([](debee75))
* document string templating ([](0bfc19d))
* **lua:** document exposed interfaces ([](7c23fe2))
* **migration:** fix text highlighting ([](965ee86))
* prefer `:Cord update` over `:Cord fetch` ([](7774af4))
* **readme:** add badge icons ([](63c5b08))
* **readme:** add cord's logo ([](6bd56b5))
* **readme:** add installation step for `rocks.nvim` ([](3f1dba6))
* **readme:** include a link for cord's brand new discord server ([](ce8ce56))
* **readme:** rewrite README ([](24d75e0))
* **readme:** update README ([](89ccba3))
* **readme:** update README ([](29f5f74))
* **readme:** update README ([](12b71d1))
* **readme:** update README ([](95f8167))
* **rust:** document crucial parts of the codebase ([](7f217a7))
* **templates:** remove the icon request issue template ([](2578920))
* update configuration guide ([](62b0764))
* update configuration guide ([](5eca57b))
* update configuration guide ([](cf031ff))
* update documentation ([](243898a))
* update examples ([](a1699d1))
* update examples ([](8abe529))
* update examples ([](20e02e3))
* update migration guide ([](01d1d60))
* update migration guide ([](d527f71))
* update migration guide ([](c4c6693))
* update readme ([](653c13d))
* update readme ([](e4c5621))
* update readme ([](d13991b))
* update readme ([](ccdc4dc))
* update readme ([](69d998b))
* update the configuration guide ([](cf23961))
* update the configuration guide ([](78b7ca6))
* update the configuration guide ([](9ef07b7))
* update the configuration guide ([](480d74c))
* update the configuration guide ([](fb6326f))
* update the configuration guide ([](40ec350))
* update the configuration guide ([](16b1ec3))
* update the configuration guide ([](8038675))
* update the examples ([](cf728c3))
* update the examples ([](4e67d61))
* update the examples ([](8209e21))
* update the migration guide ([](006f3a4))
* update the migration guide ([](d9ccf2e))
* update the migration guide ([](048f1d2))
* update the migration guide ([](7ba64be))
* update the migration guide ([](c5353fe))
* update the migration guide ([](7030bad))
* update the migration guide ([](8013f9b))

### feat

* **activity:** add additional fields ([](ffec9cd))
* add `:Cord restart` ([](ff7b7cf))
* add `json:Error` & `msgpack:Error` ([](0f33af2))
* add `new` function to `Packet` struct ([](fd4b201))
* add `notes` field ([](304d171))
* add `TryFrom` impl to `AssetType` ([](ca4d5d8))
* add `vim.g.cord_is_updating` to avoid multiple simultaneous updates ([](166be04))
* add a logger struct ([](d3f4fa0))
* add a macro that simplifies field deserialization ([](ada22e6))
* add cleanup logic ([](df96059))
* add explicit rich presence clearing; can be completely hidden with `force = true` ([](8e99c03))
* add message deserialization logic ([](3f7fea2))
* add message handler struct ([](e93d9c8))
* add program entry point ([](f0e8727))
* add proper serialization for `LogEvent` ([](340c504))
* add server-scoped `InitializeEvent` ([](5097ceb))
* add the `Cord` struct which is used as the entry point ([](c2f67c0))
* add unix implementation of the IPC server ([](cdc4245))
* add usercommands ([](8582099))
* add utility functions for building and fetching the executable ([](b77455b))
* add windows implementation of the IPC server ([](04192c5))
* allow parsing `client_id` from client name ([](3e7f1b3))
* allow the user to skip updates ([](381542d))
* allow users to set a custom activity ([](e9d388c))
* always fetch the executable if it's not present ([](7a18740))
* always perform the file exists check first ([](d94b5b8))
* **async:** implement Future wrappers for commonly used uv functions ([](62b133c))
* **async:** implement the concept of futures and handle async operations via coroutines ([](8638d30))
* capture build errors ([](64b1103))
* **cli:** add `--version` argument ([](1799242))
* **cli:** implement argument parsing ([](b3051db))
* **config:** add `advanced.server.build` ([](bf27f76))
* **config:** add `advanced.variables_in_functions` ([](6aae137))
* **config:** add `idle.unidle_on_focus` ([](f4e8c93))
* **config:** add `on_activity` hook ([](2695288))
* **config:** add `on_disconnect` hook ([](299882d))
* **config:** add support for string templates using the new `variables` option ([](d5ec225))
* **config:** allow users to choose between different icon styles ([](3fef850))
* **config:** custom assets' options now support function types ([](2a5122c))
* **config:** introduce `idle.smart_idle` option which lets general activities take precedence over the idle ones ([](99e9e93))
* create `Config` struct to store internal configuration and refine timeout logic ([](d5c179c))
* create a separate module for icon-related stuff ([](8b83610))
* display the most recent activity in case a client disconnects; clear the status if none are connected ([](eedc94a))
* **events:** add client event implementations ([](fcda103))
* **events:** add server events ([](52061da))
* **events:** handle client connection ([](2e7d5d4))
* **events:** notify the client about errors on their side ([](db9a2ef))
* handle automatically moving the server executable to nvim's data directory ([](ae0fb6f))
* handle the activity type ([](0bfa07c))
* **icon:** expose locals ([](15e83b3))
* implement `Default` for `Overlapped` struct ([](83d9c4e))
* implement `OnEvent` trait for all events ([](1675342))
* implement a wrapper around `curl` ([](4bb65b4))
* implement caching for workspace and repository entries ([](1dc2def))
* implement custom error type ([](ff80157))
* implement iterations - a maximum amount of time the server can idle without active connections ([](b6e8955))
* implement reconnection mechanism for Discord ([](90ba49a))
* implement sessions and session manager ([](312b924))
* improve cleanup logic ([](1b9be0c))
* introduce `PresenceContext` struct which will be used to build the rich presence ([](59ec145))
* introduce message communication system ([](19ab5c6))
* **ipc:** continuously read data from Discord pipe to detect sudden disconnects ([](807291f))
* **ipc:** use full pipe path ([](55ca5ab))
* **json:** add robust error handling ([](a6697da))
* **lockfile:** implement file locking mechanism ([](dd8fe2c))
* **logger:** handle cases in lua callbacks ([](c3ccb35))
* **lua:** automatically start the server ([](0364cfb))
* **lua:** call `on_workspace_change` hook if a workspace change is detected ([](33abe5a))
* **lua:** initial implementation of the Lua codebase ([](6f72e92))
* **lua:** switch to event-driven architecture ([](e65f015))
* make server error messages clean ([](c097bd8))
* **manager:** expose more functions for interacting with rich presence and its manager ([](c34dea1))
* **mappings:** add `cuda` filetype ([](9fdd31e))
* **mappings:** add icon for odin ([](0df0a45))
* **mappings:** add missing filetypes ([](dbfb1ad))
* **mappings:** add support for dashboard plugins ([](cd04a8c))
* **mappings:** add support for docs ([](cfe563f))
* modularize the event system and add helper macros for creating messages ([](f302fa1))
* **msgpack:** add msgpack deserialization ([](eb2e10d))
* **msgpack:** add msgpack serialization ([](1f7c2a6))
* **msgpack:** add support for STR8 header ([](cd634ea))
* **msgpack:** allow serialization of Map values ([](9dc26b4))
* **msgpack:** support owned strings ([](0679c31))
* notify client when the workspace is found in the blacklist ([](ae660bd))
* notify the client when server is ready to accept connections ([](b27d763))
* notify the clients about the server shutdown ([](e987ba0))
* prepend the messages with a length header in case they get merged ([](264fde3))
* prioritize general activities over the idle activity ([](b4a837c))
* **producer:** allow sending a shutdown request ([](354e2a6))
* provide clear error message for when the connection to Discord IPC fails ([](4828894))
* provide clearer server error messages ([](34bfe12))
* provide more data when logging the error ([](22e9ed8))
* **server:** add local `ShutdownEvent` ([](3f55760))
* **server:** improve error handling & error messages ([](9aea257))
* **server:** notify the client whether the provided client id is incorrect ([](edc9f5a))
* set style-specific default idle icons ([](c17ad89))
* specify MSRV ([](1b520ca))
* specify plugin version ([](cd8142f))
* stop any updates when connection is lost ([](dd1dd43))
* store os name and architecture ([](3f663db))
* switch to next available activity on `clear_activity` event ([](f05f126))
* tie each client to a session ([](edd2141))
* trim stderr messages ([](4ec5de9))
* update sessions' last updated time ([](9968d94))
* use newly added mapping types ([](015f7ed))
* **usercmds:** add `:Cord status` ([](47c3d6a))
* **usercmds:** add `:Cord update` ([](eba53d9))
* **util:** add additional file-related utility functions ([](36d5031))
* validate and set `editor_image` upon initialization ([](d56416a))

### fix

* `IPC:is_closing` should return true if the pipe does not exist ([](29170fd))
* `should_skip_update` should be checked right before the update ([](93636dd))
* actually update the editor image ([](b1e5deb))
* allow sending same activity updates ([](1883ba4))
* an attempt to fix intermittent ui freezes ([](e53bf20))
* **async:** avoid including debug info on regular errors and fix error propagation ([](618ce39))
* automatically retry connection on `ECONNREFUSED` & `ETIMEDOUT` ([](55452b3))
* avoid joining the handles ([](3d478f1))
* change `cfg-if` attribute ([](76ecb5c))
* close uv handles before exiting ([](1bd6bb9))
* **config:** correctly handle custom client ids ([](a4719a2))
* **config:** correctly replace config values ([](17dd6f3))
* **config:** do not override the given editor icon ([](25d31ba))
* correct the logic responsible for falling back to defaults ([](b784a74))
* correctly handle curl's stdout ([](5b44dff))
* correctly serialize activity timestamps ([](6362a2c))
* correctly serialize rich presence packet ([](3e894ee))
* correctly set `workspace_dir` & `workspace_name` ([](a56a856))
* do not queue activity updates upon losing focus ([](0b8d609))
* fallback to default activity type if not provided ([](bebea1f))
* idle timeout check ([](2e3e961))
* implement event queuing for handling events registered after the handler is run ([](46b8de4))
* imports ([](9e8819e))
* include `vim.log.levels.OFF` when parsing the log level ([](cc9ba64))
* **ipc:** cleanup the stale pipe if the server process was forcefully terminated ([](a77e86c))
* **ipc:** handle client disconnection on `ErrorKind::BrokenPipe` ([](a315118))
* **ipc:** properly cleanup on exit ([](0d5c61b))
* let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously ([](44acc10))
* **log:** correctly write to the client pipe ([](710b83e))
* **mappings:** ensure that the tooltips have a minimum length of 2 ([](e9368fa))
* **mappings:** set plugin managers' default icon to `plugin` ([](a2be431))
* normalize path before workspace lookup ([](c919c94))
* perform a nil check for usercmds interacting with the activity manager ([](8427bed))
* properly handle chunked data ([](0b8c655))
* properly handle server shutdowns ([](281a93b))
* replace method definition with a function definition ([](8d6bcf9))
* resolve autocmds errors ([](02340b1))
* resolve event serialization issues ([](7ec693e))
* resolve idle timeout related issues ([](21d9a50))
* resolve workspace issues; handle missing hooks ([](4cff958))
* return if config validation fails ([](503371d))
* schedule cleanup logic if necessary ([](9aa6578))
* schedule the callbacks to maintain compatibility with Neovim 0.6.0 ([](35428c0))
* **server:** fix logging level comparison ([](86f2a70))
* **server:** use panic-free means to write to stdout ([](23ba754))
* **sessions:** retrieve the correct session based on id instead of always returning the first available ([](6493da4))
* set executable permissions on unix systems ([](541a563))
* **spawn:** use an absolute path for server executable's fallback path ([](0ac391a))
* stop the plugin on server errors ([](20d0a48))
* update `last_activity` only if an actual update occurred ([](1dd0e20))
* update server's status to `ready` on receiving the ready event ([](8e57129))
* use `cord --version` to determine the current version of the executable and whether an update is required ([](5c31319))
* **windows:** properly handle overlapped I/O ([](296e4f4))
* **windows:** use overlapped io for named pipes to avoid deadlocks ([](2f73ce8))

### perf

* avoid unnecessary lookups ([](a4bccf4))
* avoid unnecessary lookups ([](b586eec))
* **fs:** switch to async filesystem ops ([](961ec2c))
* handle logic responsible for broadcasting the ready event more efficiently ([](a5c8ca3))
* **json:** optimize deserialization logic ([](02c233f))
* **json:** optimize serialization logic and generalize the serializer ([](3e7ab98))
* **lua:**  lazy load some modules ([](0f1ebaa))
* **lua:** lazily load other modules ([](6313f45))
* **mappings:** significant performance improvements ([](8ea0ad8))
* remove unnecessary atomics ([](85499cf))

### refactor

* **`AssetType`:** rename `Lsp` to `LspManager`, allow parsing from a string slice ([](025092d))
* `Config::buttons` should be optional ([](363fbee))
* `Packet` should not own the `Activity` ([](ca936f8))
* **activity manager:** `pause()` and `resume()` should check `is_paused` ([](d884b1d))
* add more logging ([](2e78f24))
* add new message types, rename `ServerMessage` to `LocalMessage`, resolve lifetime issues ([](9a7d0c6))
* apply clippy suggestions ([](071da49))
* call `on_ready` after initializing the activity manager ([](378ade3))
* change `'Connecting'` log level to `DEBUG` ([](f0749be))
* change `Deserialize::deserialize` to return `crate::Result` ([](28e93f0))
* change `killall -9` -> `pkill -15` ([](f993173))
* change `validate_buttons` function to accept a mutable reference ([](29938ed))
* change error messages ([](694fb96))
* change the return type of `OnEvent::on_event` to `crate::Result<()>` ([](54f69dc))
* **cli:** add a new error type for cli-related errors ([](4962a5f))
* **codebase:** ensure proper asynchronous flow and reorganize codebase ([](9f205ac))
* **config:** change default text values ([](15a8f58))
* **config:** change default values ([](3822787))
* **config:** remove `lsp` ([](178631a))
* **config:** rename `advanced.server.build` to `update` ([](8f723a5))
* **config:** rename `enable` -> `enabled` ([](849f7a9))
* **config:** set `cursor_update_mode` to `'on_hold'` by default ([](6b320e9))
* **config:** set `log_level` to `INFO` by default ([](96e9bab))
* **constants:** change assets url to the new repo; reset assets version ([](a61520e))
* **core:** simplify Rust backend by removing internal details ([](266b824))
* correct require path ([](6f6899a))
* **error:** change `CordError` type definition; add missing error types ([](cf1990d))
* **error:** include error kind when converting the error to string ([](ecfd967))
* **events:** update event implementations ([](baaa8fa))
* **events:** use the client `DisconnectEvent` instead of the local `ClientDisconnectedEvent` ([](6535683))
* fallback to `vim.uv` ([](4d7604d))
* fallback to os-specific executable path ([](19d2ef9))
* fix error message ([](7ae5966))
* force constructor initialization ([](cb81ac9))
* handle shutdowns directly ([](4e9748c))
* handle the process handle ([](edf1a1b))
* have the session store `last_activity` ([](ca34808))
* implicitly return result in main function ([](e9667f2))
* improve the way updates are skipped; expose a function in the manager class ([](7032c0d))
* **ipc:** remove `on_error` calls ([](5f3fcfe))
* **ipc:** remove unnecessary scheduling ([](3271a52))
* **ipc:** use full pipe path ([](8090ddf))
* **json:** rename value structs and move them to their own file ([](542f2f8))
* make `EventContext` mutable ([](53bae42))
* **manager:** force an update upon gaining focus ([](4e5778f))
* **mappings:** provide a constant value for default icons ([](5a93c08))
* minor changes ([](f8b7e0b))
* move `args.rs` to its own module ([](26575ef))
* move `AssetType` to `util` ([](cf9605a))
* move `types.rs` to its own module ([](aa09011))
* move autocmd for cleaning up to `plugin/cord.vim` ([](d57d2fc))
* move Discord IPC logic to a separate module ([](5915844))
* move IPC messages to their own module ([](3a70ea6))
* move usercmds to `cord.vim` ([](ca7bb9d))
* **msgpack:** make `deseralize` accept already deserialized `Value` ([](4051fa2))
* override `opts.filename` if it's empty ([](5e5dee3))
* provide debug error messages ([](64a6489))
* reduce code verbosity by using macros ([](bee4aa0))
* reflect codebase changes ([](4b03eb2))
* remove `constants.VERSION` ([](2d43373))
* remove excessive debug logging ([](414b4b2))
* remove lib.rs ([](e01274e))
* remove redundant functions ([](bc814da))
* remove server-scoped `ShutdownEvent` ([](96f3478))
* remove unnecessary events ([](e4522d6))
* rename `Config` to `PluginConfig` ([](e7d3795))
* rename `ResetTimestampEvent` -> `SetTimestampEvent` ([](f280750))
* rename `rpc` to `activity` ([](09ed1af))
* rename `style` -> `theme` ([](b9a7b7e))
* rename `swap_images` -> `swap_icons` ([](c40b7ca))
* rename `take_str` -> `take_string` ([](c5b0a22))
* rename directory to `presence` ([](71034b2))
* replace `SessionManager::new` with `Default` derive ([](a0587fd))
* rewrite the codebase to use msgpack instead of json ([](f2228cf))
* separate process spawning logic ([](b0d46bd))
* **serialization:** move [de]serializers to their own common module; introduce a common error type ([](92102e6))
* set `opts.skip_update` back to `false` after skipping an activity update ([](fe78f7a))
* set executable directory to `nvim-data/cord/bin` ([](4e69b5b))
* split `PluginConfig` into structs with relevant fields ([](3e10a9a))
* store relevant types and constants in a separate file ([](05eb4f4))
* tweak events ([](9dfa106))
* unconditionally fetch and store the git url ([](a786053))
* update event context to include reference to Cord itself ([](30995c6))
* update log message ([](e2d16d2))
* update serialization logic ([](c17fa3e))
* use `crate::Result` type ([](8cf2bc2))
* use `Packet::empty()` ([](d4ff8fa))
* use Cargo to build the server executable ([](233b18b))
* use os-specific defaults ([](c5b9e03))
* **usercmds:** do not include stack traceback when logging on unknown command ([](46164b4))
* wrap `editor_image` in Option type ([](a59eb25))

### style

* correct error message ([](2914451))
* fix warning ([](d55a6b1))
* fix warnings ([](149cb9f))
* fix warnings ([](b5f7cee))
* fix warnings ([](791a83e))
* fix warnings ([](b22e442))
* more logging ([](a776a41))
* move autocmds to the bottom of the file ([](c42f88f))
* reformat code ([](7af31a8))
* reformat codebase ([](8e88a20))
* remove unused import ([](ed3f130))
* remove unused variables ([](d6f7a40))
* remove unused variables ([](dedec5f))
* reorder imports ([](5658ca8))
* resolve unused argument warning ([](85781a2))

### BREAKING CHANGE

* none
github-actions bot pushed a commit that referenced this issue Jan 2, 2025
# ⚙️ [v2.0.0-beta.1]

_2025-01-02_

* feat!: update semantic release's ci ([](573814d))
* fix!: bugfixes related to opts handling, workspace detection callback, button validation as well as slight changes in configuration ([](277b5b0))
* merge #147 ([](9423cf3)), closes [#147](#147)
* merge #152 ([](2b0fc96)), closes [#152](#152)
* merge #155 ([](a490466)), closes [#155](#155)
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](671f856))
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](f253296))
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](ccdd749))
* refactor!: rename `git_url` -> `repo_url` ([](5d8faf2))

### build

* bump project version ([](e4f9b71))
* bump project version ([](a6a33eb))
* bump project version ([](d56244a))
* bump project version ([](d1853f4))
* bump project version ([](6196014))
* bump project version ([](f43c94d))
* bump project version ([](9898651))
* enable incremental compilation ([](7b6bb00))
* prepare for publishing ([](9bf0821))
* set project version to `2.0.0-beta.1` ([](52ae36f))
* specify msrv ([](abaa56e))

### chore

* add `rustfmt.toml` ([](c53d928))
* add derives and reformat code ([](3d5096c))
* add relevant `mod`s ([](c51352c))
* **assets:** delete the assets directory ([](97ca959))
* bump assets version ([](14ff704))
* bump assets version ([](3e5016b))
* bump assets version ([](d573d6e))
* bump assets version ([](155638d))
* bump assets version ([](3092bbc))
* change semantic release config ([](705f0ac))
* code cleanup ([](b139bfa))
* delete redundant file `status.rs` ([](1b133d1))
* **event:** remove redundant implementations ([](800991f))
* fix clippy warnings ([](6ed0a5d))
* fix typo ([](935dce3))
* fix warnings ([](f7c9e20))
* fix warnings ([](d27ab6a))
* ignore clippy warning ([](16fa5b5))
* **lua:** fix warnings ([](8ef3177))
* **release:** 1.0.0-beta.1 [skip ci] ([](f166cfc)), closes [#53](#53) [#80](#80)
* **release:** 2.0.0-beta.1 [skip ci] ([](f3f503f)), closes [#147](#147) [#152](#152) [#155](#155) [#53](#53) [#80](#80) [#147](#147) [#152](#152) [#155](#155) [#53](#53) [#80](#80)
* **release:** 2.0.0-beta.1 [skip ci] ([](fb719c6)), closes [#147](#147) [#152](#152) [#155](#155) [#53](#53) [#80](#80)
* **release:** 2.0.0-beta.1 [skip ci] ([](1c39245))
* **release:** 2.0.0-beta.2 [skip ci] ([](371b6eb))
* remove changelog ([](c05af76))
* remove changelog ([](ca109e5))
* remove debug statement ([](67d9770))
* remove redundant code ([](baa8703))
* remove redundant file ([](755ce40))
* remove unnecessary explicit lifetimes ([](1088976))
* remove unnecessary statement ([](c12ad54))
* remove unused imports ([](0b1d6b9))
* remove unused variable ([](fef472f))
* resolve merge conflicts ([](4cd628c))
* set previous release in `.releaserc.json` ([](f398c02))
* temporarily comment out code ([](e2e2fd3))
* update `.gitignore` ([](bb07214))
* update `.luacheckrc` ([](f59f170))
* update `.luacheckrc` ([](df2f200))
* update `.luacheckrc` ([](6ce30ee))
* update `.releaserc.json` ([](9744462))
* update `util/mod.rs` ([](5ba79f4))
* update releaserc ([](5fbdd5d))
* update semantic release ([](e475c5c))
* update semantic release ([](7e9c5b0))
* update semantic release ([](8149653))

### ci

* add freebsd target ([](20d27e1))
* create release.yml ([](1d725d1))
* integrate semantic release ([](66ca7cd))
* prepare for publishing to luarocks ([](ac35d97))
* update `release.yml` ([](30c3177))
* update `release.yml` ([](9984818))
* update release workflow ([](5367491))
* update release workflow ([](f9ddd9f))
* update release workflow ([](30e98f6))
* update release.yml ([](a60ac04))
* update semantic release ([](638dadf))

### docs

* add configuration examples ([](a15b917))
* **configration:** add missing backticks ([](7958f89))
* **configuration:** add default config values ([](1aff02e))
* **configuration:** center activity options ([](de33741))
* create a configuration guide ([](e51af26))
* create a migration guide ([](debee75))
* document string templating ([](0bfc19d))
* **lua:** document exposed interfaces ([](7c23fe2))
* **migration:** fix text highlighting ([](965ee86))
* prefer `:Cord update` over `:Cord fetch` ([](7774af4))
* **readme:** add badge icons ([](63c5b08))
* **readme:** add cord's logo ([](6bd56b5))
* **readme:** add installation step for `rocks.nvim` ([](3f1dba6))
* **readme:** include a link for cord's brand new discord server ([](ce8ce56))
* **readme:** rewrite README ([](24d75e0))
* **readme:** update README ([](89ccba3))
* **readme:** update README ([](29f5f74))
* **readme:** update README ([](12b71d1))
* **readme:** update README ([](95f8167))
* **rust:** document crucial parts of the codebase ([](7f217a7))
* **templates:** remove the icon request issue template ([](2578920))
* update configuration guide ([](62b0764))
* update configuration guide ([](5eca57b))
* update configuration guide ([](cf031ff))
* update documentation ([](243898a))
* update examples ([](a1699d1))
* update examples ([](8abe529))
* update examples ([](20e02e3))
* update migration guide ([](01d1d60))
* update migration guide ([](d527f71))
* update migration guide ([](c4c6693))
* update readme ([](653c13d))
* update readme ([](e4c5621))
* update readme ([](d13991b))
* update readme ([](ccdc4dc))
* update readme ([](69d998b))
* update the configuration guide ([](cf23961))
* update the configuration guide ([](78b7ca6))
* update the configuration guide ([](9ef07b7))
* update the configuration guide ([](480d74c))
* update the configuration guide ([](fb6326f))
* update the configuration guide ([](40ec350))
* update the configuration guide ([](16b1ec3))
* update the configuration guide ([](8038675))
* update the examples ([](cf728c3))
* update the examples ([](4e67d61))
* update the examples ([](8209e21))
* update the migration guide ([](006f3a4))
* update the migration guide ([](d9ccf2e))
* update the migration guide ([](048f1d2))
* update the migration guide ([](7ba64be))
* update the migration guide ([](c5353fe))
* update the migration guide ([](7030bad))
* update the migration guide ([](8013f9b))

### feat

* **activity:** add additional fields ([](ffec9cd))
* add `:Cord restart` ([](ff7b7cf))
* add `json:Error` & `msgpack:Error` ([](0f33af2))
* add `new` function to `Packet` struct ([](fd4b201))
* add `notes` field ([](304d171))
* add `TryFrom` impl to `AssetType` ([](ca4d5d8))
* add `vim.g.cord_is_updating` to avoid multiple simultaneous updates ([](166be04))
* add a logger struct ([](d3f4fa0))
* add a macro that simplifies field deserialization ([](ada22e6))
* add cleanup logic ([](df96059))
* add explicit rich presence clearing; can be completely hidden with `force = true` ([](8e99c03))
* add message deserialization logic ([](3f7fea2))
* add message handler struct ([](e93d9c8))
* add program entry point ([](f0e8727))
* add proper serialization for `LogEvent` ([](340c504))
* add server-scoped `InitializeEvent` ([](5097ceb))
* add the `Cord` struct which is used as the entry point ([](c2f67c0))
* add unix implementation of the IPC server ([](cdc4245))
* add usercommands ([](8582099))
* add utility functions for building and fetching the executable ([](b77455b))
* add windows implementation of the IPC server ([](04192c5))
* allow parsing `client_id` from client name ([](3e7f1b3))
* allow the user to skip updates ([](381542d))
* allow users to set a custom activity ([](e9d388c))
* always fetch the executable if it's not present ([](7a18740))
* always perform the file exists check first ([](d94b5b8))
* **async:** implement Future wrappers for commonly used uv functions ([](62b133c))
* **async:** implement the concept of futures and handle async operations via coroutines ([](8638d30))
* capture build errors ([](64b1103))
* **cli:** add `--version` argument ([](1799242))
* **cli:** implement argument parsing ([](b3051db))
* **config:** add `advanced.server.build` ([](bf27f76))
* **config:** add `advanced.variables_in_functions` ([](6aae137))
* **config:** add `idle.unidle_on_focus` ([](f4e8c93))
* **config:** add `on_activity` hook ([](2695288))
* **config:** add `on_disconnect` hook ([](299882d))
* **config:** add support for string templates using the new `variables` option ([](d5ec225))
* **config:** allow users to choose between different icon styles ([](3fef850))
* **config:** custom assets' options now support function types ([](2a5122c))
* **config:** introduce `idle.smart_idle` option which lets general activities take precedence over the idle ones ([](99e9e93))
* create `Config` struct to store internal configuration and refine timeout logic ([](d5c179c))
* create a separate module for icon-related stuff ([](8b83610))
* display the most recent activity in case a client disconnects; clear the status if none are connected ([](eedc94a))
* **events:** add client event implementations ([](fcda103))
* **events:** add server events ([](52061da))
* **events:** handle client connection ([](2e7d5d4))
* **events:** notify the client about errors on their side ([](db9a2ef))
* handle automatically moving the server executable to nvim's data directory ([](ae0fb6f))
* handle the activity type ([](0bfa07c))
* **icon:** expose locals ([](15e83b3))
* implement `Default` for `Overlapped` struct ([](83d9c4e))
* implement `OnEvent` trait for all events ([](1675342))
* implement a wrapper around `curl` ([](4bb65b4))
* implement caching for workspace and repository entries ([](1dc2def))
* implement custom error type ([](ff80157))
* implement iterations - a maximum amount of time the server can idle without active connections ([](b6e8955))
* implement reconnection mechanism for Discord ([](90ba49a))
* implement sessions and session manager ([](312b924))
* improve cleanup logic ([](1b9be0c))
* introduce `PresenceContext` struct which will be used to build the rich presence ([](59ec145))
* introduce message communication system ([](19ab5c6))
* **ipc:** continuously read data from Discord pipe to detect sudden disconnects ([](807291f))
* **ipc:** use full pipe path ([](55ca5ab))
* **json:** add robust error handling ([](a6697da))
* **lockfile:** implement file locking mechanism ([](dd8fe2c))
* **logger:** handle cases in lua callbacks ([](c3ccb35))
* **lua:** automatically start the server ([](0364cfb))
* **lua:** call `on_workspace_change` hook if a workspace change is detected ([](33abe5a))
* **lua:** initial implementation of the Lua codebase ([](6f72e92))
* **lua:** switch to event-driven architecture ([](e65f015))
* make server error messages clean ([](c097bd8))
* **manager:** expose more functions for interacting with rich presence and its manager ([](c34dea1))
* **mappings:** add `cuda` filetype ([](9fdd31e))
* **mappings:** add icon for odin ([](0df0a45))
* **mappings:** add missing filetypes ([](dbfb1ad))
* **mappings:** add support for dashboard plugins ([](cd04a8c))
* **mappings:** add support for docs ([](cfe563f))
* modularize the event system and add helper macros for creating messages ([](f302fa1))
* **msgpack:** add msgpack deserialization ([](eb2e10d))
* **msgpack:** add msgpack serialization ([](1f7c2a6))
* **msgpack:** add support for STR8 header ([](cd634ea))
* **msgpack:** allow serialization of Map values ([](9dc26b4))
* **msgpack:** support owned strings ([](0679c31))
* notify client when the workspace is found in the blacklist ([](ae660bd))
* notify the client when server is ready to accept connections ([](b27d763))
* notify the clients about the server shutdown ([](e987ba0))
* prepend the messages with a length header in case they get merged ([](264fde3))
* prioritize general activities over the idle activity ([](b4a837c))
* **producer:** allow sending a shutdown request ([](354e2a6))
* provide clear error message for when the connection to Discord IPC fails ([](4828894))
* provide clearer server error messages ([](34bfe12))
* provide more data when logging the error ([](22e9ed8))
* **server:** add local `ShutdownEvent` ([](3f55760))
* **server:** improve error handling & error messages ([](9aea257))
* **server:** notify the client whether the provided client id is incorrect ([](edc9f5a))
* set style-specific default idle icons ([](c17ad89))
* specify MSRV ([](1b520ca))
* specify plugin version ([](cd8142f))
* stop any updates when connection is lost ([](dd1dd43))
* store os name and architecture ([](3f663db))
* switch to next available activity on `clear_activity` event ([](f05f126))
* tie each client to a session ([](edd2141))
* trim stderr messages ([](4ec5de9))
* update sessions' last updated time ([](9968d94))
* use newly added mapping types ([](015f7ed))
* **usercmds:** add `:Cord status` ([](47c3d6a))
* **usercmds:** add `:Cord update` ([](eba53d9))
* **util:** add additional file-related utility functions ([](36d5031))
* validate and set `editor_image` upon initialization ([](d56416a))

### fix

* `IPC:is_closing` should return true if the pipe does not exist ([](29170fd))
* `should_skip_update` should be checked right before the update ([](93636dd))
* actually update the editor image ([](b1e5deb))
* allow sending same activity updates ([](1883ba4))
* an attempt to fix intermittent ui freezes ([](e53bf20))
* **async:** avoid including debug info on regular errors and fix error propagation ([](618ce39))
* automatically retry connection on `ECONNREFUSED` & `ETIMEDOUT` ([](55452b3))
* avoid joining the handles ([](3d478f1))
* change `cfg-if` attribute ([](76ecb5c))
* close uv handles before exiting ([](1bd6bb9))
* **config:** correctly handle custom client ids ([](a4719a2))
* **config:** correctly replace config values ([](17dd6f3))
* **config:** do not override the given editor icon ([](25d31ba))
* correct the logic responsible for falling back to defaults ([](b784a74))
* correctly handle curl's stdout ([](5b44dff))
* correctly serialize activity timestamps ([](6362a2c))
* correctly serialize rich presence packet ([](3e894ee))
* correctly set `workspace_dir` & `workspace_name` ([](a56a856))
* do not queue activity updates upon losing focus ([](0b8d609))
* fallback to default activity type if not provided ([](bebea1f))
* idle timeout check ([](2e3e961))
* implement event queuing for handling events registered after the handler is run ([](46b8de4))
* imports ([](9e8819e))
* include `vim.log.levels.OFF` when parsing the log level ([](cc9ba64))
* **ipc:** cleanup the stale pipe if the server process was forcefully terminated ([](a77e86c))
* **ipc:** handle client disconnection on `ErrorKind::BrokenPipe` ([](a315118))
* **ipc:** properly cleanup on exit ([](0d5c61b))
* let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously ([](44acc10))
* **log:** correctly write to the client pipe ([](710b83e))
* **mappings:** ensure that the tooltips have a minimum length of 2 ([](e9368fa))
* **mappings:** set plugin managers' default icon to `plugin` ([](a2be431))
* normalize path before workspace lookup ([](c919c94))
* perform a nil check for usercmds interacting with the activity manager ([](8427bed))
* properly handle chunked data ([](0b8c655))
* properly handle server shutdowns ([](281a93b))
* replace method definition with a function definition ([](8d6bcf9))
* resolve autocmds errors ([](02340b1))
* resolve event serialization issues ([](7ec693e))
* resolve idle timeout related issues ([](21d9a50))
* resolve workspace issues; handle missing hooks ([](4cff958))
* return if config validation fails ([](503371d))
* schedule cleanup logic if necessary ([](9aa6578))
* schedule the callbacks to maintain compatibility with Neovim 0.6.0 ([](35428c0))
* **server:** fix logging level comparison ([](86f2a70))
* **server:** use panic-free means to write to stdout ([](23ba754))
* **sessions:** retrieve the correct session based on id instead of always returning the first available ([](6493da4))
* set executable permissions on unix systems ([](541a563))
* **spawn:** use an absolute path for server executable's fallback path ([](0ac391a))
* stop the plugin on server errors ([](20d0a48))
* update `last_activity` only if an actual update occurred ([](1dd0e20))
* update server's status to `ready` on receiving the ready event ([](8e57129))
* use `cord --version` to determine the current version of the executable and whether an update is required ([](5c31319))
* **windows:** properly handle overlapped I/O ([](296e4f4))
* **windows:** use overlapped io for named pipes to avoid deadlocks ([](2f73ce8))

### perf

* avoid unnecessary lookups ([](a4bccf4))
* avoid unnecessary lookups ([](b586eec))
* **fs:** switch to async filesystem ops ([](961ec2c))
* handle logic responsible for broadcasting the ready event more efficiently ([](a5c8ca3))
* **json:** optimize deserialization logic ([](02c233f))
* **json:** optimize serialization logic and generalize the serializer ([](3e7ab98))
* **lua:**  lazy load some modules ([](0f1ebaa))
* **lua:** lazily load other modules ([](6313f45))
* **mappings:** significant performance improvements ([](8ea0ad8))
* remove unnecessary atomics ([](85499cf))

### refactor

* **`AssetType`:** rename `Lsp` to `LspManager`, allow parsing from a string slice ([](025092d))
* `Config::buttons` should be optional ([](363fbee))
* `Packet` should not own the `Activity` ([](ca936f8))
* **activity manager:** `pause()` and `resume()` should check `is_paused` ([](d884b1d))
* add more logging ([](2e78f24))
* add new message types, rename `ServerMessage` to `LocalMessage`, resolve lifetime issues ([](9a7d0c6))
* apply clippy suggestions ([](071da49))
* call `on_ready` after initializing the activity manager ([](378ade3))
* change `'Connecting'` log level to `DEBUG` ([](f0749be))
* change `Deserialize::deserialize` to return `crate::Result` ([](28e93f0))
* change `killall -9` -> `pkill -15` ([](f993173))
* change `validate_buttons` function to accept a mutable reference ([](29938ed))
* change error messages ([](694fb96))
* change the return type of `OnEvent::on_event` to `crate::Result<()>` ([](54f69dc))
* **cli:** add a new error type for cli-related errors ([](4962a5f))
* **codebase:** ensure proper asynchronous flow and reorganize codebase ([](9f205ac))
* **config:** change default text values ([](15a8f58))
* **config:** change default values ([](3822787))
* **config:** remove `lsp` ([](178631a))
* **config:** rename `advanced.server.build` to `update` ([](8f723a5))
* **config:** rename `enable` -> `enabled` ([](849f7a9))
* **config:** set `cursor_update_mode` to `'on_hold'` by default ([](6b320e9))
* **config:** set `log_level` to `INFO` by default ([](96e9bab))
* **constants:** change assets url to the new repo; reset assets version ([](a61520e))
* **core:** simplify Rust backend by removing internal details ([](266b824))
* correct require path ([](6f6899a))
* **error:** change `CordError` type definition; add missing error types ([](cf1990d))
* **error:** include error kind when converting the error to string ([](ecfd967))
* **events:** update event implementations ([](baaa8fa))
* **events:** use the client `DisconnectEvent` instead of the local `ClientDisconnectedEvent` ([](6535683))
* fallback to `vim.uv` ([](4d7604d))
* fallback to os-specific executable path ([](19d2ef9))
* fix error message ([](7ae5966))
* force constructor initialization ([](cb81ac9))
* handle shutdowns directly ([](4e9748c))
* handle the process handle ([](edf1a1b))
* have the session store `last_activity` ([](ca34808))
* implicitly return result in main function ([](e9667f2))
* improve the way updates are skipped; expose a function in the manager class ([](7032c0d))
* **ipc:** remove `on_error` calls ([](5f3fcfe))
* **ipc:** remove unnecessary scheduling ([](3271a52))
* **ipc:** use full pipe path ([](8090ddf))
* **json:** rename value structs and move them to their own file ([](542f2f8))
* make `EventContext` mutable ([](53bae42))
* **manager:** force an update upon gaining focus ([](4e5778f))
* **mappings:** provide a constant value for default icons ([](5a93c08))
* minor changes ([](f8b7e0b))
* move `args.rs` to its own module ([](26575ef))
* move `AssetType` to `util` ([](cf9605a))
* move `types.rs` to its own module ([](aa09011))
* move autocmd for cleaning up to `plugin/cord.vim` ([](d57d2fc))
* move Discord IPC logic to a separate module ([](5915844))
* move IPC messages to their own module ([](3a70ea6))
* move usercmds to `cord.vim` ([](ca7bb9d))
* **msgpack:** make `deseralize` accept already deserialized `Value` ([](4051fa2))
* override `opts.filename` if it's empty ([](5e5dee3))
* provide debug error messages ([](64a6489))
* reduce code verbosity by using macros ([](bee4aa0))
* reflect codebase changes ([](4b03eb2))
* remove `constants.VERSION` ([](2d43373))
* remove excessive debug logging ([](414b4b2))
* remove lib.rs ([](e01274e))
* remove redundant functions ([](bc814da))
* remove server-scoped `ShutdownEvent` ([](96f3478))
* remove unnecessary events ([](e4522d6))
* rename `Config` to `PluginConfig` ([](e7d3795))
* rename `ResetTimestampEvent` -> `SetTimestampEvent` ([](f280750))
* rename `rpc` to `activity` ([](09ed1af))
* rename `style` -> `theme` ([](b9a7b7e))
* rename `swap_images` -> `swap_icons` ([](c40b7ca))
* rename `take_str` -> `take_string` ([](c5b0a22))
* rename directory to `presence` ([](71034b2))
* replace `SessionManager::new` with `Default` derive ([](a0587fd))
* rewrite the codebase to use msgpack instead of json ([](f2228cf))
* separate process spawning logic ([](b0d46bd))
* **serialization:** move [de]serializers to their own common module; introduce a common error type ([](92102e6))
* set `opts.skip_update` back to `false` after skipping an activity update ([](fe78f7a))
* set executable directory to `nvim-data/cord/bin` ([](4e69b5b))
* split `PluginConfig` into structs with relevant fields ([](3e10a9a))
* store relevant types and constants in a separate file ([](05eb4f4))
* tweak events ([](9dfa106))
* unconditionally fetch and store the git url ([](a786053))
* update event context to include reference to Cord itself ([](30995c6))
* update log message ([](e2d16d2))
* update serialization logic ([](c17fa3e))
* use `crate::Result` type ([](8cf2bc2))
* use `Packet::empty()` ([](d4ff8fa))
* use Cargo to build the server executable ([](233b18b))
* use os-specific defaults ([](c5b9e03))
* **usercmds:** do not include stack traceback when logging on unknown command ([](46164b4))
* wrap `editor_image` in Option type ([](a59eb25))

### style

* correct error message ([](2914451))
* fix warning ([](d55a6b1))
* fix warnings ([](149cb9f))
* fix warnings ([](b5f7cee))
* fix warnings ([](791a83e))
* fix warnings ([](b22e442))
* more logging ([](a776a41))
* move autocmds to the bottom of the file ([](c42f88f))
* reformat code ([](7af31a8))
* reformat codebase ([](8e88a20))
* remove unused import ([](ed3f130))
* remove unused variables ([](d6f7a40))
* remove unused variables ([](dedec5f))
* reorder imports ([](5658ca8))
* resolve unused argument warning ([](85781a2))

### BREAKING CHANGE

* none
github-actions bot pushed a commit that referenced this issue Jan 2, 2025
# ⚙️ [v2.0.0-beta.1]

_2025-01-02_

* feat!: update semantic release's ci ([](https://github.com/vyfor/cord.nvim/commit/573814db641b62a37a9bea2c6f750c6a543f136f))
* fix!: bugfixes related to opts handling, workspace detection callback, button validation as well as slight changes in configuration ([](https://github.com/vyfor/cord.nvim/commit/277b5b0517c9dfcb2a6887820005a8f3df068a14))
* merge #147 ([](https://github.com/vyfor/cord.nvim/commit/9423cf34faca901874a0d3741f867bb0babf24dc)), closes [#147](https://github.com/vyfor/cord.nvim/issues/147)
* merge #152 ([](https://github.com/vyfor/cord.nvim/commit/2b0fc960fa3927a49d89ef11c7087138ef6a311e)), closes [#152](https://github.com/vyfor/cord.nvim/issues/152)
* merge #155 ([](https://github.com/vyfor/cord.nvim/commit/a490466e5cc72e3d645d19582f63fc0070050b7d)), closes [#155](https://github.com/vyfor/cord.nvim/issues/155)
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](https://github.com/vyfor/cord.nvim/commit/671f856f92d858f95e88f53eb9749880bf4e0188))
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](https://github.com/vyfor/cord.nvim/commit/f25329618b360e673219f3a36dee508352ea0a40))
* Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ([](https://github.com/vyfor/cord.nvim/commit/ccdd74992e14face4b727b57e6b56fc66da902fb))
* refactor!: rename `git_url` -> `repo_url` ([](https://github.com/vyfor/cord.nvim/commit/5d8faf24962e1c2e4543e2f35881fc6cdebac5f0))

### build

* bump project version ([](https://github.com/vyfor/cord.nvim/commit/e4f9b715f716c7926c70543b3d0360863601a28a))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/a6a33eba2e2487f9cfe8242173bc5130fd9601b2))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/d56244a6eb59be4b8ecde0e1065e2afbe681235a))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/d1853f4f5a65bb28c3073d61d003eea5d162445d))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/6196014399171b5218cf42db0e3750cacd93f7c5))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/f43c94da6fe7b160f26638fe212ab018523b85b3))
* bump project version ([](https://github.com/vyfor/cord.nvim/commit/9898651c4f53e2011f4cc5f744789e153cad26f1))
* enable incremental compilation ([](https://github.com/vyfor/cord.nvim/commit/7b6bb0034fba7ba14a6cc8d6b831651d5e5e1b8c))
* prepare for publishing ([](https://github.com/vyfor/cord.nvim/commit/9bf0821d72d7f38cef4e39ade1979e694d431232))
* set project version to `2.0.0-beta.1` ([](https://github.com/vyfor/cord.nvim/commit/52ae36fd1162c03dbc573f6393788db2d2bccb6a))
* specify msrv ([](https://github.com/vyfor/cord.nvim/commit/abaa56eb2764c8046bf25834bb4360199c17bb6c))

### chore

* add `rustfmt.toml` ([](https://github.com/vyfor/cord.nvim/commit/c53d928d583a6c4b9a1eb465b7f5b888ff3db640))
* add derives and reformat code ([](https://github.com/vyfor/cord.nvim/commit/3d5096c99882b266a4bb4341b9ab5f154f1e6a3c))
* add relevant `mod`s ([](https://github.com/vyfor/cord.nvim/commit/c51352c31f9a8a0400c5e1407458bf9572c54652))
* **assets:** delete the assets directory ([](https://github.com/vyfor/cord.nvim/commit/97ca959d9e5ccb65a1c7aa23667cd03c45193f81))
* bump assets version ([](https://github.com/vyfor/cord.nvim/commit/14ff704001076bd00dfdbab2619cea58876b80b6))
* bump assets version ([](https://github.com/vyfor/cord.nvim/commit/3e5016bc468b7593b8d9594aa804cfcc17f4f055))
* bump assets version ([](https://github.com/vyfor/cord.nvim/commit/d573d6e0c7bf2cc44b9a18ce85e9bdfa829b9d83))
* bump assets version ([](https://github.com/vyfor/cord.nvim/commit/155638df69fe2dcf2bea268fc7d3a011382abb2f))
* bump assets version ([](https://github.com/vyfor/cord.nvim/commit/3092bbce6d7f828b78b12f57ed44287edf73329b))
* change semantic release config ([](https://github.com/vyfor/cord.nvim/commit/705f0ac11985a03323daf56fceb096259665dd65))
* code cleanup ([](https://github.com/vyfor/cord.nvim/commit/b139bfaf75a254fa75e6cef065d361658efdbc7c))
* delete redundant file `status.rs` ([](https://github.com/vyfor/cord.nvim/commit/1b133d134c09ca173e7b5e1bd2fda0068d304e8c))
* **event:** remove redundant implementations ([](https://github.com/vyfor/cord.nvim/commit/800991fd271ef536078f66242f7d340b08b95be8))
* fix clippy warnings ([](https://github.com/vyfor/cord.nvim/commit/6ed0a5d7a055bf2a77fffe4ca938a1636e90ada5))
* fix typo ([](https://github.com/vyfor/cord.nvim/commit/935dce3cce751a886c855d549be484285988b795))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/f7c9e208da73049754d0b240d147d7bdc63cb585))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/d27ab6a0fe526eb5db986f206955e72fb365a546))
* ignore clippy warning ([](https://github.com/vyfor/cord.nvim/commit/16fa5b52ca090bb3428edc10af3eabbd2b3d4c40))
* **lua:** fix warnings ([](https://github.com/vyfor/cord.nvim/commit/8ef3177695639a0223e2ce199dbbd1d4280606d2))
* prepare for publishing ([](https://github.com/vyfor/cord.nvim/commit/f555b4bc412d313656ae1980bb05babc97e016ec))
* **release:** 1.0.0-beta.1 [skip ci] ([](https://github.com/vyfor/cord.nvim/commit/f166cfc9bb51c4b912269aeca2c5bfa4c03047a3)), closes [#53](https://github.com/vyfor/cord.nvim/issues/53) [#80](https://github.com/vyfor/cord.nvim/issues/80)
* **release:** 2.0.0-beta.1 [skip ci] ([](https://github.com/vyfor/cord.nvim/commit/4792fd8d6dda376e7b950a569d257d0a834417eb)), closes [#147](https://github.com/vyfor/cord.nvim/issues/147) [#152](https://github.com/vyfor/cord.nvim/issues/152) [#155](https://github.com/vyfor/cord.nvim/issues/155) [#53](https://github.com/vyfor/cord.nvim/issues/53) [#80](https://github.com/vyfor/cord.nvim/issues/80) [#147](https://github.com/vyfor/cord.nvim/issues/147) [#152](https://github.com/vyfor/cord.nvim/issues/152) [#155](https://github.com/vyfor/cord.nvim/issues/155) [#53](https://github.com/vyfor/cord.nvim/issues/53) [#80](https://github.com/vyfor/cord.nvim/issues/80) [#147](https://github.com/vyfor/cord.nvim/issues/147) [#152](https://github.com/vyfor/cord.nvim/issues/152) [#155](https://github.com/vyfor/cord.nvim/issues/155) [#53](https://github.com/vyfor/cord.nvim/issues/53) [#80](https://github.com/vyfor/cord.nvim/issues/80) [#147](https://github.com/vyfor/cord.nvim/issues/147) [#152](https://github.com/vyfor/cord.nvim/issues/152) [#155](https://github.com/vyfor/cord.nvim/issues/155) [#53](https://github.com/vyfor/cord.nvim/issues/53) [#80](https://github.com/vyfor/cord.nvim/issues/80)
* **release:** 2.0.0-beta.1 [skip ci] ([](https://github.com/vyfor/cord.nvim/commit/f3f503f2e426d6cd32539d993f1e75be9bd46456)), closes [#147](https://github.com/vyfor/cord.nvim/issues/147) [#152](https://github.com/vyfor/cord.nvim/issues/152) [#155](https://github.com/vyfor/cord.nvim/issues/155) [#53](https://github.com/vyfor/cord.nvim/issues/53) [#80](https://github.com/vyfor/cord.nvim/issues/80) [#147](https://github.com/vyfor/cord.nvim/issues/147) [#152](https://github.com/vyfor/cord.nvim/issues/152) [#155](https://github.com/vyfor/cord.nvim/issues/155) [#53](https://github.com/vyfor/cord.nvim/issues/53) [#80](https://github.com/vyfor/cord.nvim/issues/80)
* **release:** 2.0.0-beta.1 [skip ci] ([](https://github.com/vyfor/cord.nvim/commit/fb719c6abe71dd8d5ef2e2ed524a487e5aff29ef)), closes [#147](https://github.com/vyfor/cord.nvim/issues/147) [#152](https://github.com/vyfor/cord.nvim/issues/152) [#155](https://github.com/vyfor/cord.nvim/issues/155) [#53](https://github.com/vyfor/cord.nvim/issues/53) [#80](https://github.com/vyfor/cord.nvim/issues/80)
* **release:** 2.0.0-beta.1 [skip ci] ([](https://github.com/vyfor/cord.nvim/commit/1c39245537dd7e649cb342588cf44eef7feae2dc))
* **release:** 2.0.0-beta.2 [skip ci] ([](https://github.com/vyfor/cord.nvim/commit/371b6ebe61bb31374dd5ba7bbfa08dfc377375a4))
* remove changelog ([](https://github.com/vyfor/cord.nvim/commit/c05af76e9d992b6551bce815c0e5f81a7dad7a02))
* remove changelog ([](https://github.com/vyfor/cord.nvim/commit/ca109e523157b674a94d272e86ef077f98b31af9))
* remove debug statement ([](https://github.com/vyfor/cord.nvim/commit/67d97700fc833465050f651482ce21cec0fa6c08))
* remove redundant code ([](https://github.com/vyfor/cord.nvim/commit/baa87039629f49f4a37fe5860073ecfb05710cab))
* remove redundant file ([](https://github.com/vyfor/cord.nvim/commit/755ce4024683470fbfad800751f2178c4d56763e))
* remove unnecessary explicit lifetimes ([](https://github.com/vyfor/cord.nvim/commit/10889765071d217b4431c8d274e747220fbbe5aa))
* remove unnecessary statement ([](https://github.com/vyfor/cord.nvim/commit/c12ad54f3c0eb2c6fc1f752a26edbe6fbf30cb9f))
* remove unused imports ([](https://github.com/vyfor/cord.nvim/commit/0b1d6b92a1e46756a9bec45b0f3ee179a038deeb))
* remove unused variable ([](https://github.com/vyfor/cord.nvim/commit/fef472f96113c20e3e90d33ce673027585dadfe9))
* resolve merge conflicts ([](https://github.com/vyfor/cord.nvim/commit/4cd628cce4a223173f05336692600140c7ac1f88))
* set previous release in `.releaserc.json` ([](https://github.com/vyfor/cord.nvim/commit/f398c02d5b7ec0e551706448d6eee1fb9d4ec258))
* temporarily comment out code ([](https://github.com/vyfor/cord.nvim/commit/e2e2fd3b9725b18be186992d39e1383ff26d1d66))
* update `.gitignore` ([](https://github.com/vyfor/cord.nvim/commit/bb072143f32d44139470af409a94b724da2abe7e))
* update `.luacheckrc` ([](https://github.com/vyfor/cord.nvim/commit/f59f170fe0bdb887685f94a9e7fa9935d2d59de8))
* update `.luacheckrc` ([](https://github.com/vyfor/cord.nvim/commit/df2f2000e8a6ed0ff15903b133a7b5f30360afa2))
* update `.luacheckrc` ([](https://github.com/vyfor/cord.nvim/commit/6ce30eef93d404fefd9c5d6765ae3a8e80f96aaf))
* update `.releaserc.json` ([](https://github.com/vyfor/cord.nvim/commit/97444621a631d1cd80a6ea48d1f4b1120705dcc7))
* update `util/mod.rs` ([](https://github.com/vyfor/cord.nvim/commit/5ba79f408c5baa92e20d0ea1b943aedb9bbadfa2))
* update releaserc ([](https://github.com/vyfor/cord.nvim/commit/5fbdd5dcacea85be899d031ae148da773387672a))
* update semantic release ([](https://github.com/vyfor/cord.nvim/commit/e475c5cb97c59d2309442a2100dac3df37813f15))
* update semantic release ([](https://github.com/vyfor/cord.nvim/commit/7e9c5b014c0c91fa34264b3105b8d3f7e4ee72b6))
* update semantic release ([](https://github.com/vyfor/cord.nvim/commit/8149653224aab7a69b21b79970381bbae071f135))

### ci

* add freebsd target ([](https://github.com/vyfor/cord.nvim/commit/20d27e1f1210ee0a2d91c6e2ef198e6b95809345))
* create release.yml ([](https://github.com/vyfor/cord.nvim/commit/1d725d1423629ad8562990d79bd349970f35c22a))
* integrate semantic release ([](https://github.com/vyfor/cord.nvim/commit/66ca7cdd59e35d07fe12ddbfbc059ba4348d161b))
* prepare for publishing to luarocks ([](https://github.com/vyfor/cord.nvim/commit/ac35d97651a10d2609e3aef75af7a78dee799217))
* update `release.yml` ([](https://github.com/vyfor/cord.nvim/commit/30c3177ed2145eb7a187299a6d0fcce1f814cec6))
* update `release.yml` ([](https://github.com/vyfor/cord.nvim/commit/99848180eadd4d8b3f3bd3a4b35b75e786e9deca))
* update release workflow ([](https://github.com/vyfor/cord.nvim/commit/53674918914377177f6c98514b3bf5195282e0c0))
* update release workflow ([](https://github.com/vyfor/cord.nvim/commit/f9ddd9fa0e1ced1c9d1d353bd82880acc3c47beb))
* update release workflow ([](https://github.com/vyfor/cord.nvim/commit/30e98f629e75728a195aa9e568aab77e4114a7ac))
* update release.yml ([](https://github.com/vyfor/cord.nvim/commit/a60ac049bd48dfcf86cff19d0a44986b1b2787c9))
* update semantic release ([](https://github.com/vyfor/cord.nvim/commit/638dadf8ba54619735196ab39eecb94b4c75aff1))

### docs

* add configuration examples ([](https://github.com/vyfor/cord.nvim/commit/a15b917663fdc4f1ae582b6a0cf27b53a31cadf9))
* **configration:** add missing backticks ([](https://github.com/vyfor/cord.nvim/commit/7958f89ff6266294a419849054e03d70ed1f943e))
* **configuration:** add default config values ([](https://github.com/vyfor/cord.nvim/commit/1aff02e676c4c48dfe99db9937918ff311a87cf2))
* **configuration:** center activity options ([](https://github.com/vyfor/cord.nvim/commit/de33741fd6d872523085f57a433ebd4d762cc37c))
* create a configuration guide ([](https://github.com/vyfor/cord.nvim/commit/e51af265f799826ec901f0b325d1088938b7c8e6))
* create a migration guide ([](https://github.com/vyfor/cord.nvim/commit/debee75e1bb6348e5fbdd511b5d3cfa454fb5f75))
* document string templating ([](https://github.com/vyfor/cord.nvim/commit/0bfc19d629cf1bb152cdbebd726fc5be311f2680))
* **lua:** document exposed interfaces ([](https://github.com/vyfor/cord.nvim/commit/7c23fe2d2f6400b976c9527a9fe23f304a24a09c))
* **migration:** fix text highlighting ([](https://github.com/vyfor/cord.nvim/commit/965ee867d04e6875a2b04891d9451ae060a0e598))
* prefer `:Cord update` over `:Cord fetch` ([](https://github.com/vyfor/cord.nvim/commit/7774af4bfdb065fb777a0807023b8680f877c35d))
* **readme:** add badge icons ([](https://github.com/vyfor/cord.nvim/commit/63c5b0877244ed221e47f748edf39562682af810))
* **readme:** add cord's logo ([](https://github.com/vyfor/cord.nvim/commit/6bd56b5b1b78b7190e6acfab0865c926aed78537))
* **readme:** add installation step for `rocks.nvim` ([](https://github.com/vyfor/cord.nvim/commit/3f1dba69d1e0fc73470b1ca8f23b17e5fe8c35b4))
* **readme:** include a link for cord's brand new discord server ([](https://github.com/vyfor/cord.nvim/commit/ce8ce56f190768c039668349b1d84f9f2384ffa7))
* **readme:** rewrite README ([](https://github.com/vyfor/cord.nvim/commit/24d75e0112f2cd150b97513729795fba2401b94c))
* **readme:** update README ([](https://github.com/vyfor/cord.nvim/commit/89ccba3bde8c574728a3d42adcdb60912d744c8f))
* **readme:** update README ([](https://github.com/vyfor/cord.nvim/commit/29f5f744d368f42a0779982a29189073f1b0fb68))
* **readme:** update README ([](https://github.com/vyfor/cord.nvim/commit/12b71d1c7d7ba3a432dc5e514ae5f5902ead6587))
* **readme:** update README ([](https://github.com/vyfor/cord.nvim/commit/95f8167d550254a3448ee03e4fbe6d6aec6ec67c))
* **rust:** document crucial parts of the codebase ([](https://github.com/vyfor/cord.nvim/commit/7f217a7776ed5f7662bf3a5432493c73b49f2756))
* **templates:** remove the icon request issue template ([](https://github.com/vyfor/cord.nvim/commit/257892093da816d76f781a68e62cb134f1bb7e23))
* update configuration guide ([](https://github.com/vyfor/cord.nvim/commit/62b0764f2e9d2188691ad9762eb924fadf1550e1))
* update configuration guide ([](https://github.com/vyfor/cord.nvim/commit/5eca57b6f7259a6d07a314b73f21bb1c75157689))
* update configuration guide ([](https://github.com/vyfor/cord.nvim/commit/cf031ffcf41b657c291b419ecea86e8d3b077cea))
* update documentation ([](https://github.com/vyfor/cord.nvim/commit/243898a90f0924dbe783e5b3307ce7fd43f8b1ba))
* update examples ([](https://github.com/vyfor/cord.nvim/commit/a1699d1654a66d64dab79ba1b62369118c6e5ae2))
* update examples ([](https://github.com/vyfor/cord.nvim/commit/8abe5299792a6cb11e0f7f6c45c7d38858d911eb))
* update examples ([](https://github.com/vyfor/cord.nvim/commit/20e02e308a8e7bc67615e2353d562c15bdb90c8c))
* update migration guide ([](https://github.com/vyfor/cord.nvim/commit/01d1d604c1be498f9ddba0152057b61f689e4d95))
* update migration guide ([](https://github.com/vyfor/cord.nvim/commit/d527f71872a70e8550abfb2ab3be18307925ddfc))
* update migration guide ([](https://github.com/vyfor/cord.nvim/commit/c4c66937c40ee489267ff2bc5fd0b7409d04673e))
* update readme ([](https://github.com/vyfor/cord.nvim/commit/653c13db4a638e4e6a4527f698de746b43f1cdf8))
* update readme ([](https://github.com/vyfor/cord.nvim/commit/e4c562143b8a49b155258e8e7f2005b3aae676ef))
* update readme ([](https://github.com/vyfor/cord.nvim/commit/d13991bfacf173227f01cc7c9f0168f4d46b67eb))
* update readme ([](https://github.com/vyfor/cord.nvim/commit/ccdc4dc6b5fb03a02b0289468f01bd039611b142))
* update readme ([](https://github.com/vyfor/cord.nvim/commit/69d998b1dfbe5f90dbb8141b232ca3c1e474e066))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/cf2396183003cc1c23a53ee71c818ab33769e9a6))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/78b7ca686261fd4a6669b9e9ffe3043dbec6690c))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/9ef07b7cd5fab3a5f2789ee3b2069cf3f6a7aa5c))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/480d74c866815b554a903460cb3b6429f145b749))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/fb6326f0186e131fc2f8c41188ff689de653101c))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/40ec350c0194ea9af72e97a312decb0b0ef980cf))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/16b1ec31d889ed324b3957c597b64f75ef9e04e9))
* update the configuration guide ([](https://github.com/vyfor/cord.nvim/commit/80386758639517cdbe37dd11edbecbaa54ae8801))
* update the examples ([](https://github.com/vyfor/cord.nvim/commit/cf728c3dfb00f32fc001e2f3c748820618379bfd))
* update the examples ([](https://github.com/vyfor/cord.nvim/commit/4e67d61656f8e136a4265fdedf635c31fdc5f7b6))
* update the examples ([](https://github.com/vyfor/cord.nvim/commit/8209e2189491cf068eb4f8c40a838692c7a17a2c))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/006f3a45f75f36831b405530459e1edbf6624d2e))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/d9ccf2e4d0efc991580b61624ca7a4d4d142f917))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/048f1d2b3fcc2463364ca9ab73d39030ef936e6e))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/7ba64be4903a1b827791d52ffaa94b0a43861090))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/c5353fe09dd983d3b05a250febf6c6145e5f115b))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/7030badb7e6a48f0ac3a3cc9678157d18886b196))
* update the migration guide ([](https://github.com/vyfor/cord.nvim/commit/8013f9b5ed055e337a28f69676930b5503611c86))

### feat

* **activity:** add additional fields ([](https://github.com/vyfor/cord.nvim/commit/ffec9cd47945200cbbd767bf101aae1c1f0bb9d4))
* add `:Cord restart` ([](https://github.com/vyfor/cord.nvim/commit/ff7b7cf122f8826590ad242c43b714131e897c80))
* add `json:Error` & `msgpack:Error` ([](https://github.com/vyfor/cord.nvim/commit/0f33af208828f04243190994015c29b669b0a3c9))
* add `new` function to `Packet` struct ([](https://github.com/vyfor/cord.nvim/commit/fd4b2017987e22ca0df62989b6cb9489c13a3511))
* add `notes` field ([](https://github.com/vyfor/cord.nvim/commit/304d17169eb83d47add2c3cdbb5355b77e13f73c))
* add `TryFrom` impl to `AssetType` ([](https://github.com/vyfor/cord.nvim/commit/ca4d5d86a0f50f028926dce715145ad85b801c5c))
* add `vim.g.cord_is_updating` to avoid multiple simultaneous updates ([](https://github.com/vyfor/cord.nvim/commit/166be045e0017cec72ec007e4c2d211b16f199e6))
* add a logger struct ([](https://github.com/vyfor/cord.nvim/commit/d3f4fa071b36f67a0be4ddbd96f5407b654b5419))
* add a macro that simplifies field deserialization ([](https://github.com/vyfor/cord.nvim/commit/ada22e60ee4e329cfd5f2e53aafcc3a1bfeb1692))
* add cleanup logic ([](https://github.com/vyfor/cord.nvim/commit/df96059c49580480d21f60692416e2b067ea160b))
* add explicit rich presence clearing; can be completely hidden with `force = true` ([](https://github.com/vyfor/cord.nvim/commit/8e99c030336225a983e38b3045024aa586e37842))
* add message deserialization logic ([](https://github.com/vyfor/cord.nvim/commit/3f7fea213f120fd0a6efc00432e40d8612f0d404))
* add message handler struct ([](https://github.com/vyfor/cord.nvim/commit/e93d9c8d625672834e8635a6d1bb40465b7e6136))
* add program entry point ([](https://github.com/vyfor/cord.nvim/commit/f0e8727733422e0b23230bb8eac6f27efbc892bd))
* add proper serialization for `LogEvent` ([](https://github.com/vyfor/cord.nvim/commit/340c504b1dbc4af239aed12f3deafb8a1adc6caf))
* add server-scoped `InitializeEvent` ([](https://github.com/vyfor/cord.nvim/commit/5097cebed85511547d8afdd3c1deb1bfdccc745a))
* add the `Cord` struct which is used as the entry point ([](https://github.com/vyfor/cord.nvim/commit/c2f67c02aa18c99a79ba8a2fe6422d6f7f858590))
* add unix implementation of the IPC server ([](https://github.com/vyfor/cord.nvim/commit/cdc4245030ceb3872433b5186a06442a5320dc59))
* add usercommands ([](https://github.com/vyfor/cord.nvim/commit/858209995306f9782d7d2d33dc2fdf6fb1db8386))
* add utility functions for building and fetching the executable ([](https://github.com/vyfor/cord.nvim/commit/b77455ba4878fc6563fdd1fdcc82650fb143dba6))
* add windows implementation of the IPC server ([](https://github.com/vyfor/cord.nvim/commit/04192c5a785dc08e6592007a8eee8a50e944e0b3))
* allow parsing `client_id` from client name ([](https://github.com/vyfor/cord.nvim/commit/3e7f1b36005fdec1bf5768495fbec88aa7197cc6))
* allow the user to skip updates ([](https://github.com/vyfor/cord.nvim/commit/381542d9d69badd9704285adc0349dcd69a42bb9))
* allow users to set a custom activity ([](https://github.com/vyfor/cord.nvim/commit/e9d388c84908db1c8749746b66e8333b000b8565))
* always fetch the executable if it's not present ([](https://github.com/vyfor/cord.nvim/commit/7a18740c8326b26571639d6f4712c6df88c5a982))
* always perform the file exists check first ([](https://github.com/vyfor/cord.nvim/commit/d94b5b85ee8ceae2a2dffe2fc91fe31e1796360f))
* **async:** implement Future wrappers for commonly used uv functions ([](https://github.com/vyfor/cord.nvim/commit/62b133caef3068694d24543869c80f9285782968))
* **async:** implement the concept of futures and handle async operations via coroutines ([](https://github.com/vyfor/cord.nvim/commit/8638d304f5ec003cc08aea4dda14b85ae29a9ce1))
* capture build errors ([](https://github.com/vyfor/cord.nvim/commit/64b1103ed59ce2ab145acc4e9e1a489753e861cf))
* **cli:** add `--version` argument ([](https://github.com/vyfor/cord.nvim/commit/1799242aa27426a7cf95d6a95ab0aad817edc418))
* **cli:** implement argument parsing ([](https://github.com/vyfor/cord.nvim/commit/b3051db2aad03a84494785bb6c244f0e8941302e))
* **config:** add `advanced.server.build` ([](https://github.com/vyfor/cord.nvim/commit/bf27f76d01797c8afa25ca1df76809f45fa58584))
* **config:** add `advanced.variables_in_functions` ([](https://github.com/vyfor/cord.nvim/commit/6aae1378c36d2c0c1a12e94d2a70af286709fb64))
* **config:** add `idle.unidle_on_focus` ([](https://github.com/vyfor/cord.nvim/commit/f4e8c93ba79b540e8b8afa47e1d2e597789aa916))
* **config:** add `on_activity` hook ([](https://github.com/vyfor/cord.nvim/commit/26952887fdb965ebc55cfdeebf7bcd15b2a8b629))
* **config:** add `on_disconnect` hook ([](https://github.com/vyfor/cord.nvim/commit/299882de687a89a92d003b62700acea5809340d3))
* **config:** add support for string templates using the new `variables` option ([](https://github.com/vyfor/cord.nvim/commit/d5ec225c14572f7f64fc60d40152ea0bcf83d944))
* **config:** allow users to choose between different icon styles ([](https://github.com/vyfor/cord.nvim/commit/3fef850c9b74e184778ed3b8ff4862d0b3ee446b))
* **config:** introduce `idle.smart_idle` option which lets general activities take precedence over the idle ones ([](https://github.com/vyfor/cord.nvim/commit/99e9e93ecc90b54d76b07909a00ab7a1360a60a9))
* create `Config` struct to store internal configuration and refine timeout logic ([](https://github.com/vyfor/cord.nvim/commit/d5c179cd6afb853586d929c3f075c5377b5b3a48))
* create a separate module for icon-related stuff ([](https://github.com/vyfor/cord.nvim/commit/8b8361004e1fc01dce3f0c16941da36b80cbf106))
* display the most recent activity in case a client disconnects; clear the status if none are connected ([](https://github.com/vyfor/cord.nvim/commit/eedc94a3efd09724ec5b2581a063c87608a82020))
* **events:** add client event implementations ([](https://github.com/vyfor/cord.nvim/commit/fcda10325960bf771ec074324fa08d084c96bda0))
* **events:** add server events ([](https://github.com/vyfor/cord.nvim/commit/52061da15eda88b489786e5ff7e8681f487ba331))
* **events:** handle client connection ([](https://github.com/vyfor/cord.nvim/commit/2e7d5d40a847c2caacc8129d06fbb1cd6e3b837e))
* **events:** notify the client about errors on their side ([](https://github.com/vyfor/cord.nvim/commit/db9a2efc984f6b59a6cc763bfe965645697a19d0))
* handle automatically moving the server executable to nvim's data directory ([](https://github.com/vyfor/cord.nvim/commit/ae0fb6fa6662d66d825cc3e33a05772f894cb3dc))
* handle the activity type ([](https://github.com/vyfor/cord.nvim/commit/0bfa07ca972b0de1e2e1a8ea9d0c7fcf28394300))
* **icon:** expose locals ([](https://github.com/vyfor/cord.nvim/commit/15e83b3c51a77ebcfb5491bc3bec61df9a4bbe3d))
* implement `Default` for `Overlapped` struct ([](https://github.com/vyfor/cord.nvim/commit/83d9c4e82090c2ef188d0851e996dabffe46139d))
* implement `OnEvent` trait for all events ([](https://github.com/vyfor/cord.nvim/commit/16753421aa85f755f6d613521d74594adfaf3dbb))
* implement a wrapper around `curl` ([](https://github.com/vyfor/cord.nvim/commit/4bb65b4647922e5ac6bbd23ea6778bc98b271b2a))
* implement caching for workspace and repository entries ([](https://github.com/vyfor/cord.nvim/commit/1dc2defbb9d1957617f26b0495fc2fce15aae345))
* implement custom error type ([](https://github.com/vyfor/cord.nvim/commit/ff801571c357fe5598273a59ebb78bc84df79842))
* implement iterations - a maximum amount of time the server can idle without active connections ([](https://github.com/vyfor/cord.nvim/commit/b6e8955d9c17684916a63e7a7520c3564efe7128))
* implement reconnection mechanism for Discord ([](https://github.com/vyfor/cord.nvim/commit/90ba49a927bd206b85057bd85bdd05c3ab8667ad))
* implement sessions and session manager ([](https://github.com/vyfor/cord.nvim/commit/312b924f83c51750a45ff964beb264774f02516a))
* improve cleanup logic ([](https://github.com/vyfor/cord.nvim/commit/1b9be0c48931ab443d3a219ce7eb557b1134dcea))
* introduce `PresenceContext` struct which will be used to build the rich presence ([](https://github.com/vyfor/cord.nvim/commit/59ec14566b5b47bc1eaa80d04f8887f84377174c))
* introduce message communication system ([](https://github.com/vyfor/cord.nvim/commit/19ab5c6e67878e3d2ac75f89a5fa59e7b9678b67))
* **ipc:** continuously read data from Discord pipe to detect sudden disconnects ([](https://github.com/vyfor/cord.nvim/commit/807291fa7e752ba159eb27cff15475156dc0834d))
* **ipc:** use full pipe path ([](https://github.com/vyfor/cord.nvim/commit/55ca5aba72e4a8c892ce2aa5e460456331fce9f7))
* **json:** add robust error handling ([](https://github.com/vyfor/cord.nvim/commit/a6697da80f2f8f30cf4d31fdf4374b94973f61bf))
* **lockfile:** implement file locking mechanism ([](https://github.com/vyfor/cord.nvim/commit/dd8fe2c510eba26abe06eae2cad9aabb085ebfd5))
* **logger:** handle cases in lua callbacks ([](https://github.com/vyfor/cord.nvim/commit/c3ccb35d51e741b6c48d1512d637c6f4c38780c4))
* **lua:** automatically start the server ([](https://github.com/vyfor/cord.nvim/commit/0364cfb863f41154ae69ed90595f2d1e705b9a7c))
* **lua:** call `on_workspace_change` hook if a workspace change is detected ([](https://github.com/vyfor/cord.nvim/commit/33abe5a0ba516fbd1963282587beb8f0b2b38ea9))
* **lua:** initial implementation of the Lua codebase ([](https://github.com/vyfor/cord.nvim/commit/6f72e92fd737a5c210261ef44c8e6d490d2997bb))
* **lua:** switch to event-driven architecture ([](https://github.com/vyfor/cord.nvim/commit/e65f0153ae17feab7bf8266707f99299b91e9fb9))
* make server error messages clean ([](https://github.com/vyfor/cord.nvim/commit/c097bd898279379f0585ed9f7b56a04a2eb0ad0a))
* **manager:** expose more functions for interacting with rich presence and its manager ([](https://github.com/vyfor/cord.nvim/commit/c34dea16106505febf05b68297951e9e3ff78c87))
* **mappings:** add `cuda` filetype ([](https://github.com/vyfor/cord.nvim/commit/9fdd31efc4c2e665e43a397d0085410536e5b0c6))
* **mappings:** add icon for odin ([](https://github.com/vyfor/cord.nvim/commit/0df0a4586249f9fdb8b3d53da7a73f1ee0bf0bbc))
* **mappings:** add missing filetypes ([](https://github.com/vyfor/cord.nvim/commit/dbfb1adc6aa5394e072e2d97e964602ad1a7e5f2))
* **mappings:** add support for dashboard plugins ([](https://github.com/vyfor/cord.nvim/commit/cd04a8c944bf702b1c3771845a1eb9cb0795caf1))
* **mappings:** add support for docs ([](https://github.com/vyfor/cord.nvim/commit/cfe563fae5208e30481f676433268a9f4d62b7bb))
* modularize the event system and add helper macros for creating messages ([](https://github.com/vyfor/cord.nvim/commit/f302fa165e81be81102ec573b9f45b5b318824fd))
* **msgpack:** add msgpack deserialization ([](https://github.com/vyfor/cord.nvim/commit/eb2e10d54fba0b5da77741b3d3bbaf649341d8ef))
* **msgpack:** add msgpack serialization ([](https://github.com/vyfor/cord.nvim/commit/1f7c2a61196ccdc55dc8136d84866546ea9803df))
* **msgpack:** add support for STR8 header ([](https://github.com/vyfor/cord.nvim/commit/cd634ea1ef03ae126b59a9e58626d3bfc36d23ef))
* **msgpack:** allow serialization of Map values ([](https://github.com/vyfor/cord.nvim/commit/9dc26b48e9bed0c313ea1596fa3efd63af6594ab))
* **msgpack:** support owned strings ([](https://github.com/vyfor/cord.nvim/commit/0679c31e07a36e62de90831b43534aec498a7bcb))
* notify client when the workspace is found in the blacklist ([](https://github.com/vyfor/cord.nvim/commit/ae660bdf271cd57fa7845cc4287976ee6f2c685b))
* notify the client when server is ready to accept connections ([](https://github.com/vyfor/cord.nvim/commit/b27d7636b87d1eda512b3ad23f6b6a81fcc274a5))
* notify the clients about the server shutdown ([](https://github.com/vyfor/cord.nvim/commit/e987ba045392e83dc7ef90bc1e7eb57ecbbe4556))
* prepend the messages with a length header in case they get merged ([](https://github.com/vyfor/cord.nvim/commit/264fde3b37af50c6b7d90d6a92f3e2fb957ca4da))
* prioritize general activities over the idle activity ([](https://github.com/vyfor/cord.nvim/commit/b4a837c72d32c025009d927990bd5d487cb62a21))
* **producer:** allow sending a shutdown request ([](https://github.com/vyfor/cord.nvim/commit/354e2a697b50306d9e6fa850b51d26851f2c081b))
* provide clear error message for when the connection to Discord IPC fails ([](https://github.com/vyfor/cord.nvim/commit/48288949314e7646841f589848b911f4739e191e))
* provide clearer server error messages ([](https://github.com/vyfor/cord.nvim/commit/34bfe124cf437a4251361654ca03ea4a9757caf5))
* provide more data when logging the error ([](https://github.com/vyfor/cord.nvim/commit/22e9ed8973cb22a627e728366a034a242afbce05))
* **server:** add local `ShutdownEvent` ([](https://github.com/vyfor/cord.nvim/commit/3f55760fb8f7b557e4b44fbef2b57d59e580919b))
* **server:** improve error handling & error messages ([](https://github.com/vyfor/cord.nvim/commit/9aea257233410f1107ac8b5cba6f7c3e00a86a45))
* **server:** notify the client whether the provided client id is incorrect ([](https://github.com/vyfor/cord.nvim/commit/edc9f5aa81224a01a7436ca659cff7d4892133a3))
* set style-specific default idle icons ([](https://github.com/vyfor/cord.nvim/commit/c17ad890de619724b1983b6029c23fcd91563877))
* specify MSRV ([](https://github.com/vyfor/cord.nvim/commit/1b520cab90bf3ea3e9db69ed6ae9224ed93e5c11))
* specify plugin version ([](https://github.com/vyfor/cord.nvim/commit/cd8142f72240fc3ef15aafa64a0b7e0b713948c5))
* stop any updates when connection is lost ([](https://github.com/vyfor/cord.nvim/commit/dd1dd439e9a89bd3eb7ab5e28558437e38652bcb))
* store os name and architecture ([](https://github.com/vyfor/cord.nvim/commit/3f663db719c070ccdaf0bd1deabd0f86c151d327))
* switch to next available activity on `clear_activity` event ([](https://github.com/vyfor/cord.nvim/commit/f05f12673a962d13efe9fecaa3969c8a40f77fc6))
* tie each client to a session ([](https://github.com/vyfor/cord.nvim/commit/edd2141f1f0c9ecd6d1c9b9dde4f70771cb1861a))
* trim stderr messages ([](https://github.com/vyfor/cord.nvim/commit/4ec5de9c410819a4a8bdd97ee2f87e4808e57a4a))
* update sessions' last updated time ([](https://github.com/vyfor/cord.nvim/commit/9968d94ba2a463fca466915b0715f95679707456))
* use newly added mapping types ([](https://github.com/vyfor/cord.nvim/commit/015f7ed48729abf782eebfb25193b3438311bedf))
* **usercmds:** add `:Cord status` ([](https://github.com/vyfor/cord.nvim/commit/47c3d6af8c0fc74edd2859036952c82da7870215))
* **usercmds:** add `:Cord update` ([](https://github.com/vyfor/cord.nvim/commit/eba53d977e7439c8c8a3743e2496949b9c08320d))
* **util:** add additional file-related utility functions ([](https://github.com/vyfor/cord.nvim/commit/36d5031c22ba459845e6b9e5978373680ee25172))
* validate and set `editor_image` upon initialization ([](https://github.com/vyfor/cord.nvim/commit/d56416a13a448ed59be31726c3dc22bfc659e87b))

### fix

* `IPC:is_closing` should return true if the pipe does not exist ([](https://github.com/vyfor/cord.nvim/commit/29170fda16fa179ec2bf6e0eac4454e9c7ba49b1))
* `should_skip_update` should be checked right before the update ([](https://github.com/vyfor/cord.nvim/commit/93636dd1c2a93d31782b6f7bb113ae250bbc5ad1))
* actually update the editor image ([](https://github.com/vyfor/cord.nvim/commit/b1e5deb51ce26605bfbf7cbf3a28a42114e95d9e))
* allow sending same activity updates ([](https://github.com/vyfor/cord.nvim/commit/1883ba4715f0104b8a918e20bff28dcd4bf27625))
* an attempt to fix intermittent ui freezes ([](https://github.com/vyfor/cord.nvim/commit/e53bf20a754775dfc6ee12da56a3404fb98d3207))
* **async:** avoid including debug info on regular errors and fix error propagation ([](https://github.com/vyfor/cord.nvim/commit/618ce39bce038e220542c49241a8dbacb26b61b8))
* automatically retry connection on `ECONNREFUSED` & `ETIMEDOUT` ([](https://github.com/vyfor/cord.nvim/commit/55452b306bd3a765b90f54fcf89ab91f8473a261))
* avoid joining the handles ([](https://github.com/vyfor/cord.nvim/commit/3d478f127ebb4c23d47d6d613a64485cc90bd7f9))
* change `cfg-if` attribute ([](https://github.com/vyfor/cord.nvim/commit/76ecb5c8d6b0acc647302642a4d246f8c4fe27b7))
* close uv handles before exiting ([](https://github.com/vyfor/cord.nvim/commit/1bd6bb9358d1b6387f48613f85995094845dbe05))
* **config:** correctly handle custom client ids ([](https://github.com/vyfor/cord.nvim/commit/a4719a2dadcaf3952b80165d8bfad6cdf9a14fec))
* **config:** correctly replace config values ([](https://github.com/vyfor/cord.nvim/commit/17dd6f36a11ed25068fcf5f1785ef23a7f7e6928))
* **config:** do not override the given editor icon ([](https://github.com/vyfor/cord.nvim/commit/25d31ba64e44d02bbd84a130561b1e06638678b0))
* correct the logic responsible for falling back to defaults ([](https://github.com/vyfor/cord.nvim/commit/b784a7450ca19153cc3cf444c84cab3ce8cc5dad))
* correctly handle curl's stdout ([](https://github.com/vyfor/cord.nvim/commit/5b44dff6dee59be5c7cc9ff25891c476429571c5))
* correctly serialize activity timestamps ([](https://github.com/vyfor/cord.nvim/commit/6362a2c35b3fabbe58a9211e3034ac4042052622))
* correctly serialize rich presence packet ([](https://github.com/vyfor/cord.nvim/commit/3e894ee1e6f9c2e35f610134d7022ec536998e18))
* correctly set `workspace_dir` & `workspace_name` ([](https://github.com/vyfor/cord.nvim/commit/a56a85630e7b382332fc3b3c0bd756973a5ec6b9))
* do not queue activity updates upon losing focus ([](https://github.com/vyfor/cord.nvim/commit/0b8d6099ae14e1ba9fc984e6252c3477760a015c))
* fallback to default activity type if not provided ([](https://github.com/vyfor/cord.nvim/commit/bebea1fa9b12f9ed00266b892fe9060450b9e8d5))
* idle timeout check ([](https://github.com/vyfor/cord.nvim/commit/2e3e96150cdcbb7f20640caa9ab62e362f3c5448))
* implement event queuing for handling events registered after the handler is run ([](https://github.com/vyfor/cord.nvim/commit/46b8de4512cbbc268dd0d6b4cff21483aec2f0a3))
* imports ([](https://github.com/vyfor/cord.nvim/commit/9e8819e4595b2735b7471be55aaa17c55ecf7d5f))
* include `vim.log.levels.OFF` when parsing the log level ([](https://github.com/vyfor/cord.nvim/commit/cc9ba644fa02f2646651724d6d154af444625565))
* **ipc:** cleanup the stale pipe if the server process was forcefully terminated ([](https://github.com/vyfor/cord.nvim/commit/a77e86c8381da06f28715d0bebb9e6fce5f42dda))
* **ipc:** handle client disconnection on `ErrorKind::BrokenPipe` ([](https://github.com/vyfor/cord.nvim/commit/a315118178b121a31fa37d4cbb977ea2626cefc1))
* **ipc:** properly cleanup on exit ([](https://github.com/vyfor/cord.nvim/commit/0d5c61bf3da514f4188795b18b0633a9be560567))
* let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously ([](https://github.com/vyfor/cord.nvim/commit/44acc109b3daaee104300804b5df97b8ea3ed729))
* **log:** correctly write to the client pipe ([](https://github.com/vyfor/cord.nvim/commit/710b83e2f80d05b6fc8c90ab17a0d696d9c02406))
* **mappings:** ensure that the tooltips have a minimum length of 2 ([](https://github.com/vyfor/cord.nvim/commit/e9368fa5f5f51e279a5e506305cdec8368af7ce1))
* **mappings:** set plugin managers' default icon to `plugin` ([](https://github.com/vyfor/cord.nvim/commit/a2be43130107eb1cc07faf1724d587bd659116d5))
* normalize path before workspace lookup ([](https://github.com/vyfor/cord.nvim/commit/c919c945193a583b5b4269784e81012ec8fbf873))
* perform a nil check for usercmds interacting with the activity manager ([](https://github.com/vyfor/cord.nvim/commit/8427bed4be7a2f1c481c320dfc256fa5691410e1))
* properly handle chunked data ([](https://github.com/vyfor/cord.nvim/commit/0b8c655e23e747a4d987e290f54d684a3f53982b))
* properly handle server shutdowns ([](https://github.com/vyfor/cord.nvim/commit/281a93bd2cfe71ec51620f673bfb6847a9ea30fa))
* replace method definition with a function definition ([](https://github.com/vyfor/cord.nvim/commit/8d6bcf94904160ab1035b03517e010d75b15c491))
* resolve autocmds errors ([](https://github.com/vyfor/cord.nvim/commit/02340b11391843e852182b74e8dcd085084e724f))
* resolve event serialization issues ([](https://github.com/vyfor/cord.nvim/commit/7ec693ecb0b518d8b955510ae16c239486dbd0f1))
* resolve idle timeout related issues ([](https://github.com/vyfor/cord.nvim/commit/21d9a500f2c7e0d1458388af2800ac427a582d02))
* resolve workspace issues; handle missing hooks ([](https://github.com/vyfor/cord.nvim/commit/4cff95899d4af7cce572a3d24304d0f026bb1c48))
* return if config validation fails ([](https://github.com/vyfor/cord.nvim/commit/503371da39d5bf2451a5b4a4035ccfd4b8f8eb90))
* schedule cleanup logic if necessary ([](https://github.com/vyfor/cord.nvim/commit/9aa6578e76b616db3a897df485ea09a04093afea))
* schedule the callbacks to maintain compatibility with Neovim 0.6.0 ([](https://github.com/vyfor/cord.nvim/commit/35428c0c34f8235dd3e0b1bf52e60304cd2fd078))
* **server:** fix logging level comparison ([](https://github.com/vyfor/cord.nvim/commit/86f2a704526c846a18d3ff485ac1a39427bd7961))
* **server:** use panic-free means to write to stdout ([](https://github.com/vyfor/cord.nvim/commit/23ba7546c124023f853f14bb18c7d0d06fd5a1d4))
* **sessions:** retrieve the correct session based on id instead of always returning the first available ([](https://github.com/vyfor/cord.nvim/commit/6493da41d75c05e9ba8e02cd2322ce989b290e7e))
* set executable permissions on unix systems ([](https://github.com/vyfor/cord.nvim/commit/541a563b02dad39a15481180f47e6d9f05c9ba70))
* **spawn:** use an absolute path for server executable's fallback path ([](https://github.com/vyfor/cord.nvim/commit/0ac391a48c4b98e4b809ecb29c86986cb4ed46af))
* stop the plugin on server errors ([](https://github.com/vyfor/cord.nvim/commit/20d0a48010342c709c1ec060e1cc3870ab8e6879))
* update `last_activity` only if an actual update occurred ([](https://github.com/vyfor/cord.nvim/commit/1dd0e2053a6bd357e36ce7a4c8c9b687dde2392e))
* update server's status to `ready` on receiving the ready event ([](https://github.com/vyfor/cord.nvim/commit/8e5712950566f5ccd7959483765ff2e3c9b75787))
* use `cord --version` to determine the current version of the executable and whether an update is required ([](https://github.com/vyfor/cord.nvim/commit/5c313197e0516dc717af55a0d4187970329da4af))
* **windows:** properly handle overlapped I/O ([](https://github.com/vyfor/cord.nvim/commit/296e4f4fe6c61abcbccae0cefbdf58854b45bc99))
* **windows:** use overlapped io for named pipes to avoid deadlocks ([](https://github.com/vyfor/cord.nvim/commit/2f73ce8676a59aea21619542fcefe5298da8c0e7))

### perf

* avoid unnecessary lookups ([](https://github.com/vyfor/cord.nvim/commit/a4bccf465bac46801b5e55148ef7555a330d80f7))
* avoid unnecessary lookups ([](https://github.com/vyfor/cord.nvim/commit/b586eec3e834a61e043f663b0a6a2ac8c814bcef))
* **fs:** switch to async filesystem ops ([](https://github.com/vyfor/cord.nvim/commit/961ec2cbacc9b1ad2d9da5bcb6f5c2b607de382e))
* handle logic responsible for broadcasting the ready event more efficiently ([](https://github.com/vyfor/cord.nvim/commit/a5c8ca3796b0d44ca277292d3309705cf6d1397a))
* **json:** optimize deserialization logic ([](https://github.com/vyfor/cord.nvim/commit/02c233fcdba5b3813dd057fbc3189fbd2bdd9d96))
* **json:** optimize serialization logic and generalize the serializer ([](https://github.com/vyfor/cord.nvim/commit/3e7ab98cf7b79a565746edf77f178cd366eb9970))
* **lua:**  lazy load some modules ([](https://github.com/vyfor/cord.nvim/commit/0f1ebaa90343a744b06945ee7192535f4f3b60f7))
* **lua:** lazily load other modules ([](https://github.com/vyfor/cord.nvim/commit/6313f45ed0dcb282da54ac508ca3d7d9a710a128))
* **mappings:** significant performance improvements ([](https://github.com/vyfor/cord.nvim/commit/8ea0ad8a2451efea8539e3d8c682eebe0d723d5c))
* remove unnecessary atomics ([](https://github.com/vyfor/cord.nvim/commit/85499cf441a06db1c677abf78bc9757255a9c3d1))

### refactor

* **`AssetType`:** rename `Lsp` to `LspManager`, allow parsing from a string slice ([](https://github.com/vyfor/cord.nvim/commit/025092da3d148fd0bd9f530b4102aab5c5be6413))
* `Config::buttons` should be optional ([](https://github.com/vyfor/cord.nvim/commit/363fbee799481af7b2f3898337f2a203c11d8c44))
* `Packet` should not own the `Activity` ([](https://github.com/vyfor/cord.nvim/commit/ca936f8b7787055c778a6d3ad7a8306d88273fc4))
* **activity manager:** `pause()` and `resume()` should check `is_paused` ([](https://github.com/vyfor/cord.nvim/commit/d884b1d510e73b221744d58c0aab52e7990f4022))
* add more logging ([](https://github.com/vyfor/cord.nvim/commit/2e78f244b222c57428902f94c933667e50802e31))
* add new message types, rename `ServerMessage` to `LocalMessage`, resolve lifetime issues ([](https://github.com/vyfor/cord.nvim/commit/9a7d0c62ef6db8d937f0381c980bdb062f240681))
* apply clippy suggestions ([](https://github.com/vyfor/cord.nvim/commit/071da49da52c279147cc0c2e48eee4bab2b0ffec))
* call `on_ready` after initializing the activity manager ([](https://github.com/vyfor/cord.nvim/commit/378ade36ffe95f026f59b8f2002b3dd0ed9861eb))
* change `'Connecting'` log level to `DEBUG` ([](https://github.com/vyfor/cord.nvim/commit/f0749be64d817073e37c758c434e9bbc5b680c96))
* change `Deserialize::deserialize` to return `crate::Result` ([](https://github.com/vyfor/cord.nvim/commit/28e93f039311f58fdb547697e0ecc5579188bc7f))
* change `killall -9` -> `pkill -15` ([](https://github.com/vyfor/cord.nvim/commit/f9931732e83f14e41d98d6786917b94c0e656100))
* change `validate_buttons` function to accept a mutable reference ([](https://github.com/vyfor/cord.nvim/commit/29938ed924d737bc43e6b928ccef094d6216b34b))
* change error messages ([](https://github.com/vyfor/cord.nvim/commit/694fb967fea332b80504e8cfb583772c2c6ed973))
* change the return type of `OnEvent::on_event` to `crate::Result<()>` ([](https://github.com/vyfor/cord.nvim/commit/54f69dcc8c6eb2abf70b55cf97019f659f061daf))
* **cli:** add a new error type for cli-related errors ([](https://github.com/vyfor/cord.nvim/commit/4962a5f8cc50bb6b7bf06d65240d15b073fabc82))
* **codebase:** ensure proper asynchronous flow and reorganize codebase ([](https://github.com/vyfor/cord.nvim/commit/9f205acbae0022c1d6b73d87560dbdfb53695fd9))
* **config:** change default text values ([](https://github.com/vyfor/cord.nvim/commit/15a8f58aafabf4c5f25966338d1dc3d1ae109a58))
* **config:** change default values ([](https://github.com/vyfor/cord.nvim/commit/3822787a17fc009438eea6d58a3d717cadbca3df))
* **config:** remove `lsp` ([](https://github.com/vyfor/cord.nvim/commit/178631a04e333cfd0c85eec76e84d29833384175))
* **config:** rename `advanced.server.build` to `update` ([](https://github.com/vyfor/cord.nvim/commit/8f723a500540d68ac6af1651ba1cde274223d51a))
* **config:** rename `enable` -> `enabled` ([](https://github.com/vyfor/cord.nvim/commit/849f7a9d789f36164091e168cac0e58425d6a76f))
* **config:** set `cursor_update_mode` to `'on_hold'` by default ([](https://github.com/vyfor/cord.nvim/commit/6b320e924f863fd2b6b36eec45ac3c2e404c9bab))
* **config:** set `log_level` to `INFO` by default ([](https://github.com/vyfor/cord.nvim/commit/96e9bab3b6ab7679d7127fcca20817f34dadb18e))
* **constants:** change assets url to the new repo; reset assets version ([](https://github.com/vyfor/cord.nvim/commit/a61520e4c0eb66b71b309548d4491d636b94147c))
* **core:** simplify Rust backend by removing internal details ([](https://github.com/vyfor/cord.nvim/commit/266b82452bc775fa62b2a1501bd93ecea51dbab5))
* correct require path ([](https://github.com/vyfor/cord.nvim/commit/6f6899ac1804cf5b9fad8a9427be1e9cece0d237))
* **error:** change `CordError` type definition; add missing error types ([](https://github.com/vyfor/cord.nvim/commit/cf1990d8ad15496f715c0db3a384b347408294bc))
* **error:** include error kind when converting the error to string ([](https://github.com/vyfor/cord.nvim/commit/ecfd9675bcf548cf3412e8e3b19d09468bf4241e))
* **events:** update event implementations ([](https://github.com/vyfor/cord.nvim/commit/baaa8fa62bcf7249a166545bdb63d123bded17c0))
* **events:** use the client `DisconnectEvent` instead of the local `ClientDisconnectedEvent` ([](https://github.com/vyfor/cord.nvim/commit/6535683bbfaf3774b8d33d92caf9e4650ba6b814))
* fallback to `vim.uv` ([](https://github.com/vyfor/cord.nvim/commit/4d7604da1a5e72381882807bcaa35173cc4b7dac))
* fallback to os-specific executable path ([](https://github.com/vyfor/cord.nvim/commit/19d2ef9cbfb144572d9e48cb1f4cd1601259db28))
* fix error message ([](https://github.com/vyfor/cord.nvim/commit/7ae59661360ffb5e122e46995be7f8c531677c0f))
* force constructor initialization ([](https://github.com/vyfor/cord.nvim/commit/cb81ac9e14c82b5aaceb2a1ec29da7186cd41a85))
* handle shutdowns directly ([](https://github.com/vyfor/cord.nvim/commit/4e9748c58f605819d074495e20e5c9a81fc58372))
* handle the process handle ([](https://github.com/vyfor/cord.nvim/commit/edf1a1b79577a5245f9632beb34f988b55545099))
* have the session store `last_activity` ([](https://github.com/vyfor/cord.nvim/commit/ca3480841e35653885072c0cd8de52ffb1268294))
* implicitly return result in main function ([](https://github.com/vyfor/cord.nvim/commit/e9667f26002e79b24471d5767112fb3cc1249bf0))
* improve the way updates are skipped; expose a function in the manager class ([](https://github.com/vyfor/cord.nvim/commit/7032c0dbc996cb6f0b817790d1e898787278d35f))
* **ipc:** remove `on_error` calls ([](https://github.com/vyfor/cord.nvim/commit/5f3fcfe606d34e6124db8af8748d65d2e8894192))
* **ipc:** remove unnecessary scheduling ([](https://github.com/vyfor/cord.nvim/commit/3271a527a01ecafa5215896ceea299297c261124))
* **ipc:** use full pipe path ([](https://github.com/vyfor/cord.nvim/commit/8090ddf69a141eac14ec9dd354c65c07cde79380))
* **json:** rename value structs and move them to their own file ([](https://github.com/vyfor/cord.nvim/commit/542f2f8a1b064a83aa3149b3535c1caaf56b5e61))
* make `EventContext` mutable ([](https://github.com/vyfor/cord.nvim/commit/53bae427dce0ce84e5f7c67c240a0287b2aa7bfc))
* **manager:** force an update upon gaining focus ([](https://github.com/vyfor/cord.nvim/commit/4e5778fcc743a438ac67000619974eeee828b7f7))
* **mappings:** provide a constant value for default icons ([](https://github.com/vyfor/cord.nvim/commit/5a93c0838ef22b948109a9b0e2890d871a2df3e2))
* minor changes ([](https://github.com/vyfor/cord.nvim/commit/f8b7e0b84fdc8ae29443354bcf21ecf368a8d7cc))
* move `args.rs` to its own module ([](https://github.com/vyfor/cord.nvim/commit/26575ef9e080c2c119a59fd6378c51ed7d475371))
* move `AssetType` to `util` ([](https://github.com/vyfor/cord.nvim/commit/cf9605a72e3ebb6febe95a6a74ef4fc735366ad6))
* move `types.rs` to its own module ([](https://github.com/vyfor/cord.nvim/commit/aa090112b91cdef138564c64dd8d41aa2acd58dc))
* move autocmd for cleaning up to `plugin/cord.vim` ([](https://github.com/vyfor/cord.nvim/commit/d57d2fc48869cc9674fb954a096fc041c5f76795))
* move Discord IPC logic to a separate module ([](https://github.com/vyfor/cord.nvim/commit/5915844d17546fff55742b6377e538b1a7dc4464))
* move IPC messages to their own module ([](https://github.com/vyfor/cord.nvim/commit/3a70ea636b8130228fd94e0bfe5c0f776f3720e4))
* move usercmds to `cord.vim` ([](https://github.com/vyfor/cord.nvim/commit/ca7bb9d3382b5b8d2c1ed50945b0c438da9de37f))
* **msgpack:** make `deseralize` accept already deserialized `Value` ([](https://github.com/vyfor/cord.nvim/commit/4051fa21558f164eb9e97ce9bdf24635966d5e84))
* override `opts.filename` if it's empty ([](https://github.com/vyfor/cord.nvim/commit/5e5dee3a1a8ed5b2d3738add7f159f84472d269f))
* provide debug error messages ([](https://github.com/vyfor/cord.nvim/commit/64a6489f6a01096de7581b63fe59ca41ac20ee86))
* reduce code verbosity by using macros ([](https://github.com/vyfor/cord.nvim/commit/bee4aa09211db43dfc755394b7666fc02887677d))
* reflect codebase changes ([](https://github.com/vyfor/cord.nvim/commit/4b03eb2d63e05366722cfa64cbef2689a5f1ebc6))
* remove `constants.VERSION` ([](https://github.com/vyfor/cord.nvim/commit/2d43373e2413247914de27d89ad5dc3489141fb2))
* remove excessive debug logging ([](https://github.com/vyfor/cord.nvim/commit/414b4b249146a25032271b8575a6a31c5fea3dcc))
* remove lib.rs ([](https://github.com/vyfor/cord.nvim/commit/e01274ea28ff29d76674ac381c661d70cfa6bbfa))
* remove redundant functions ([](https://github.com/vyfor/cord.nvim/commit/bc814dae5706d6c3e5106cd91cb7641d2a431568))
* remove server-scoped `ShutdownEvent` ([](https://github.com/vyfor/cord.nvim/commit/96f3478874cbf83528abbd0fcbd1a699828bb6d7))
* remove unnecessary events ([](https://github.com/vyfor/cord.nvim/commit/e4522d61c5510d511868eaf542077387362a1979))
* rename `Config` to `PluginConfig` ([](https://github.com/vyfor/cord.nvim/commit/e7d37952af1d037da11c57d39fa3959016476388))
* rename `ResetTimestampEvent` -> `SetTimestampEvent` ([](https://github.com/vyfor/cord.nvim/commit/f2807503e6001aa5f0d35bc3a2c4aae4cc6ceefb))
* rename `rpc` to `activity` ([](https://github.com/vyfor/cord.nvim/commit/09ed1af7dedaa143b863ac4e02de894d4231f77c))
* rename `style` -> `theme` ([](https://github.com/vyfor/cord.nvim/commit/b9a7b7ea9cf9a91efc59eefc116eab97911d661a))
* rename `swap_images` -> `swap_icons` ([](https://github.com/vyfor/cord.nvim/commit/c40b7ca5776151989ad5a42551b3fbe4e4d24e56))
* rename `take_str` -> `take_string` ([](https://github.com/vyfor/cord.nvim/commit/c5b0a228fc787c017c258e7deeab2662b9b15ae7))
* rename directory to `presence` ([](https://github.com/vyfor/cord.nvim/commit/71034b2243669ea5156431fd6e28b5fa21b7b54e))
* replace `SessionManager::new` with `Default` derive ([](https://github.com/vyfor/cord.nvim/commit/a0587fdf93378b705a2afeff7e38f3b47ad8e31d))
* rewrite the codebase to use msgpack instead of json ([](https://github.com/vyfor/cord.nvim/commit/f2228cfccbc5a7453d4e18bc07a66029e654b58a))
* separate process spawning logic ([](https://github.com/vyfor/cord.nvim/commit/b0d46bde3810125475912b01b46198550bc85510))
* **serialization:** move [de]serializers to their own common module; introduce a common error type ([](https://github.com/vyfor/cord.nvim/commit/92102e674ff25911eefd04e1136f519dfe67d16f))
* set `opts.skip_update` back to `false` after skipping an activity update ([](https://github.com/vyfor/cord.nvim/commit/fe78f7acd20cd93ca983dc9806011b6d31c01376))
* set executable directory to `nvim-data/cord/bin` ([](https://github.com/vyfor/cord.nvim/commit/4e69b5b79d596086381a26293cb92ade44829c60))
* split `PluginConfig` into structs with relevant fields ([](https://github.com/vyfor/cord.nvim/commit/3e10a9a0adca9748ebb8ef2241152d91113aebd5))
* store relevant types and constants in a separate file ([](https://github.com/vyfor/cord.nvim/commit/05eb4f4f9b93801855143c1b51a21d59604b5965))
* tweak events ([](https://github.com/vyfor/cord.nvim/commit/9dfa106280f21e8ba0ff57663c4f6b794584326d))
* unconditionally fetch and store the git url ([](https://github.com/vyfor/cord.nvim/commit/a78605352e20e7222d7fabae0feed1ab7caa2066))
* update event context to include reference to Cord itself ([](https://github.com/vyfor/cord.nvim/commit/30995c661c124311d22f75af0f613aeb8d5808e6))
* update log message ([](https://github.com/vyfor/cord.nvim/commit/e2d16d255e41522bfdc8f29df9949ab006131445))
* update serialization logic ([](https://github.com/vyfor/cord.nvim/commit/c17fa3ece4e05530e7f6f9473094206f947a899e))
* use `crate::Result` type ([](https://github.com/vyfor/cord.nvim/commit/8cf2bc2dbbbe541e5bb79789f9245e552fdfa37d))
* use `Packet::empty()` ([](https://github.com/vyfor/cord.nvim/commit/d4ff8faf7a26a4f64d27b920bde13a9161968611))
* use Cargo to build the server executable ([](https://github.com/vyfor/cord.nvim/commit/233b18b2e51b5aef874775d7d9dd959fcea19359))
* use os-specific defaults ([](https://github.com/vyfor/cord.nvim/commit/c5b9e03f87be8cf17a61be78bf07b1dd1504397c))
* **usercmds:** do not include stack traceback when logging on unknown command ([](https://github.com/vyfor/cord.nvim/commit/46164b4254c6e6872d483bc54e360ea2454275ae))
* wrap `editor_image` in Option type ([](https://github.com/vyfor/cord.nvim/commit/a59eb2533d283ceb03bb837f08a4ae5aca199f68))

### style

* correct error message ([](https://github.com/vyfor/cord.nvim/commit/2914451e5a61e633bb865eefa42e7a09feef13c1))
* fix warning ([](https://github.com/vyfor/cord.nvim/commit/d55a6b171ee58b400a124e29233a16c11a9e2980))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/149cb9f0a09478d73e2faa264b1bb33687a6de91))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/b5f7cee2ab210a581e11dceb3cf41872f6f71030))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/791a83e181f3f74143ddfd4047b1d7ac487d947a))
* fix warnings ([](https://github.com/vyfor/cord.nvim/commit/b22e44287952230ef28c8234bd33204b9bf06791))
* more logging ([](https://github.com/vyfor/cord.nvim/commit/a776a4161b04a8e1258aedf9490493e315313650))
* move autocmds to the bottom of the file ([](https://github.com/vyfor/cord.nvim/commit/c42f88f5f463da1822aff1b2d218319ad26c87db))
* reformat code ([](https://github.com/vyfor/cord.nvim/commit/7af31a82e01432e7e562a671fb88575609806ab4))
* reformat codebase ([](https://github.com/vyfor/cord.nvim/commit/8e88a20e01c00c96048ebed7fed925e17822d988))
* remove unused import ([](https://github.com/vyfor/cord.nvim/commit/ed3f1309d0f219391e6b5d2c4b439f00b36b7b1a))
* remove unused variables ([](https://github.com/vyfor/cord.nvim/commit/d6f7a4096bea85ac4c36a91a49e16eaf199745ea))
* remove unused variables ([](https://github.com/vyfor/cord.nvim/commit/dedec5f7dfe96daa57e153120c7f39402f2dad2b))
* reorder imports ([](https://github.com/vyfor/cord.nvim/commit/5658ca805c3bb495017d277e59367de3580fac84))
* resolve unused argument warning ([](https://github.com/vyfor/cord.nvim/commit/85781a2c862de4cbbb80b2bf35c0bfe9c3251075))

### BREAKING CHANGE

* none
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request released
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant