@chojs23/concord 2.3.5 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [2.4.0] - 2026-07-14
6
+
7
+ ### Bug Fixes
8
+
9
+ - Fix invalid token warning when fresh login by @chojs23
10
+
11
+ ### Features
12
+
13
+ - Configurable themes (#248) in [#248](https://github.com/chojs23/concord/pull/248) by @neurosysgg
14
+
15
+ ### New Contributors
16
+
17
+ - @neurosysgg made their first contribution in [#248](https://github.com/chojs23/concord/pull/248)
18
+
5
19
  ## [2.3.5] - 2026-07-12
6
20
 
7
21
  ### Bug Fixes
@@ -1029,17 +1043,8 @@ All notable changes to this project will be documented in this file.
1029
1043
 
1030
1044
  ### Bug Fixes
1031
1045
 
1032
- - Keep original image width:height ratio (#6) in [#6](https://github.com/chojs23/concord/pull/6) by @chojs23
1033
-
1034
- ### Cd
1035
-
1036
- - Chain crates publish after release by @chojs23
1037
-
1038
- ## [1.1.0] - 2026-05-09
1039
-
1040
- ### Bug Fixes
1041
-
1042
1046
  - _(flake)_ Use crane (#4) in [#4](https://github.com/chojs23/concord/pull/4) by @M4jor-Tom
1047
+ - Keep original image width:height ratio (#6) in [#6](https://github.com/chojs23/concord/pull/6) by @chojs23
1043
1048
 
1044
1049
  ### Documentation
1045
1050
 
@@ -1055,6 +1060,10 @@ All notable changes to this project will be documented in this file.
1055
1060
 
1056
1061
  - Enable generated github release notes by @chojs23
1057
1062
 
1063
+ ### Cd
1064
+
1065
+ - Chain crates publish after release by @chojs23
1066
+
1058
1067
  ### New Contributors
1059
1068
 
1060
1069
  - @M4jor-Tom made their first contribution in [#4](https://github.com/chojs23/concord/pull/4)
package/README.md CHANGED
@@ -462,7 +462,7 @@ When the composer input starts with a slash `/`, the command suggestion popup
462
462
  ## Configuration
463
463
 
464
464
  Concord options are stored under Concord's config directory. If
465
- `XDG_CONFIG_HOME` is set, Concord uses `config.toml` for app options and `keymap.toml` for key settings.
465
+ `XDG_CONFIG_HOME` is set, Concord uses `config.toml` for app options, `keymap.toml` for key settings, and `theme.toml` for colors.
466
466
  Otherwise it uses the platform config directory.
467
467
 
468
468
  Local UI state and plaintext fallback credentials are stored under Concord's
@@ -473,7 +473,7 @@ state directory instead. If `XDG_STATE_HOME` is set, Concord uses
473
473
  `~/.local/state/concord/credentials.toml`.
474
474
 
475
475
  You can change some configuration from the in-app Options menu, and Concord saves them back
476
- to `config.toml`. Key settings are read from `keymap.toml`.
476
+ to `config.toml`. Key settings are read from `keymap.toml`, and colors are read from `theme.toml`.
477
477
 
478
478
  <details>
479
479
  <summary>Default config</summary>
@@ -707,6 +707,433 @@ ToggleReplyPing = "<A-p>"
707
707
 
708
708
  You can customize key bindings. Check the [Keymap options](./docs/keymap-options.md) for the config format, supported actions.
709
709
 
710
+ You can customize Concord's named UI Highlight Groups and border shapes in
711
+ `theme.toml`. A Highlight Group may set foreground, background, bold, italic,
712
+ dim, underline, and strikethrough, or link to another group and inherit its
713
+ unset fields. Every group and field is optional.
714
+
715
+ <details>
716
+ <summary>Default theme config</summary>
717
+
718
+ <!-- default-theme-config:start -->
719
+ ```toml
720
+ # Complete Highlight Group reference with Concord's built-in defaults.
721
+ # Copy this configuration to `theme.toml` in the Concord config directory,
722
+ # then keep only the groups you want to override.
723
+ #
724
+ # A group accepts `link`, `foreground`, `background`, `bold`, `italic`, `dim`,
725
+ # `underline`, and `strikethrough`. Colors accept `none`, `terminal_default`, a
726
+ # canonical lowercase ANSI name, or six-digit RGB such as `#39ff14`. `none`
727
+ # clears that color channel after inheritance. A linked group inherits fields
728
+ # it does not set. Use `link = "none"` to detach a built-in link.
729
+
730
+ # Border shapes are UI geometry rather than Highlight Group styles. An omitted
731
+ # surface uses `default`. These values reproduce Concord's built-in layout.
732
+ [ui.border]
733
+ default = "plain"
734
+ composer = "rounded"
735
+ message = "rounded"
736
+ forum = "rounded"
737
+
738
+ [highlight.Normal]
739
+ foreground = "terminal_default"
740
+ background = "terminal_default"
741
+
742
+ [highlight.Strong]
743
+ bold = true
744
+
745
+ [highlight.Emphasis]
746
+ italic = true
747
+
748
+ [highlight.Muted]
749
+ dim = true
750
+
751
+ [highlight.Title]
752
+ link = "Strong"
753
+
754
+ [highlight.Heading]
755
+ link = "Strong"
756
+
757
+ [highlight.Decoration]
758
+ link = "Muted"
759
+
760
+ [highlight.Hint]
761
+ link = "Muted"
762
+
763
+ [highlight.Description]
764
+ link = "Muted"
765
+
766
+ [highlight.Shortcut]
767
+ link = "Muted"
768
+
769
+ [highlight.Activity]
770
+ link = "Muted"
771
+
772
+ [highlight.ChannelTypeMarker]
773
+ link = "Muted"
774
+
775
+ [highlight.FieldLabel]
776
+ link = "Muted"
777
+
778
+ [highlight.SearchContext]
779
+ link = "Muted"
780
+
781
+ [highlight.Timestamp]
782
+ link = "Muted"
783
+
784
+ [highlight.Placeholder]
785
+ link = "Muted"
786
+
787
+ [highlight.Disabled]
788
+ link = "Muted"
789
+
790
+ [highlight.Loading]
791
+ link = "Muted"
792
+
793
+ [highlight.Edited]
794
+ link = "Muted"
795
+ italic = true
796
+
797
+ [highlight.Unavailable]
798
+ link = "Muted"
799
+ strikethrough = true
800
+
801
+ [highlight.LoginTitle]
802
+ link = "Title"
803
+ foreground = "cyan"
804
+
805
+ [highlight.LoginHint]
806
+ link = "Muted"
807
+
808
+ [highlight.PaneTitle]
809
+ link = "Title"
810
+
811
+ [highlight.ModalTitle]
812
+ link = "Title"
813
+
814
+ [highlight.ComposerTitle]
815
+ link = "Title"
816
+
817
+ [highlight.HeaderTitle]
818
+ link = "Title"
819
+ foreground = "cyan"
820
+
821
+ [highlight.HeaderLabel]
822
+ link = "Muted"
823
+
824
+ [highlight.MessageAuthor]
825
+ link = "Strong"
826
+
827
+ [highlight.MessageTimestamp]
828
+ link = "Timestamp"
829
+
830
+ [highlight.CategoryHeading]
831
+ link = "Heading"
832
+
833
+ [highlight.MemberGroupHeading]
834
+ link = "Heading"
835
+
836
+ [highlight.MessageSecondary]
837
+ link = "Muted"
838
+
839
+ [highlight.ForumSecondary]
840
+ link = "Muted"
841
+
842
+ [highlight.EmbedAuthor]
843
+ link = "Emphasis"
844
+
845
+ [highlight.EmbedTitle]
846
+ link = "Strong"
847
+ foreground = "blue"
848
+
849
+ [highlight.EmbedFieldName]
850
+ link = "Strong"
851
+ underline = true
852
+
853
+ [highlight.EmbedFooter]
854
+ link = "Muted"
855
+ italic = true
856
+
857
+ [highlight.CodeBlockBorder]
858
+ link = "Border"
859
+ dim = true
860
+
861
+ [highlight.ScrollbarTrack]
862
+ link = "ScrollbarThumb"
863
+ dim = true
864
+
865
+ [highlight.UnavailableEmoji]
866
+ link = "Unavailable"
867
+
868
+ [highlight.HeaderError]
869
+ link = "Error"
870
+ bold = true
871
+
872
+ [highlight.HeaderWarning]
873
+ link = "Warning"
874
+ bold = true
875
+
876
+ [highlight.Border]
877
+ foreground = "dark_gray"
878
+
879
+ [highlight.FocusBorder]
880
+ foreground = "cyan"
881
+
882
+ [highlight.Selection]
883
+ foreground = "cyan"
884
+ background = "none"
885
+ bold = true
886
+ dim = false
887
+
888
+ [highlight.SelectionBorder]
889
+ foreground = "green"
890
+ bold = true
891
+
892
+ [highlight.PaneBorder]
893
+ link = "Border"
894
+
895
+ [highlight.FocusedPaneBorder]
896
+ link = "FocusBorder"
897
+ bold = true
898
+
899
+ [highlight.LoginBorder]
900
+ link = "FocusBorder"
901
+
902
+ [highlight.ComposerBorder]
903
+ link = "Border"
904
+
905
+ [highlight.ActiveComposerBorder]
906
+ link = "FocusBorder"
907
+ bold = true
908
+
909
+ [highlight.ModalBorder]
910
+ link = "FocusBorder"
911
+ bold = true
912
+
913
+ [highlight.ComposerPickerBorder]
914
+ link = "FocusBorder"
915
+
916
+ [highlight.SelectedRow]
917
+ link = "Selection"
918
+
919
+ [highlight.SelectionMarker]
920
+ link = "Selection"
921
+
922
+ [highlight.ActiveField]
923
+ foreground = "cyan"
924
+ bold = true
925
+
926
+ [highlight.ActiveTab]
927
+ link = "Selection"
928
+
929
+ [highlight.MessageSelectedBorder]
930
+ link = "SelectionBorder"
931
+
932
+ [highlight.ForumBorder]
933
+ link = "FocusBorder"
934
+
935
+ [highlight.ForumSelectedBorder]
936
+ link = "SelectionBorder"
937
+
938
+ [highlight.ScrollbarThumb]
939
+ foreground = "#AAAAAA"
940
+
941
+ [highlight.UnreadNotice]
942
+ foreground = "cyan"
943
+ bold = true
944
+
945
+ [highlight.Editing]
946
+ foreground = "yellow"
947
+
948
+ [highlight.Reaction]
949
+ foreground = "cyan"
950
+
951
+ [highlight.SelfReaction]
952
+ foreground = "yellow"
953
+
954
+ [highlight.PresenceOnline]
955
+ foreground = "green"
956
+
957
+ [highlight.PresenceIdle]
958
+ foreground = "#B48C00"
959
+
960
+ [highlight.PresenceDnd]
961
+ foreground = "red"
962
+
963
+ [highlight.PresenceOffline]
964
+ link = "Normal"
965
+ dim = true
966
+
967
+ [highlight.VoiceDisabled]
968
+ foreground = "yellow"
969
+
970
+ [highlight.VoiceConnection]
971
+ foreground = "yellow"
972
+ bold = true
973
+
974
+ [highlight.FolderFallback]
975
+ foreground = "cyan"
976
+
977
+ [highlight.NavigationActive]
978
+ foreground = "green"
979
+ bold = true
980
+
981
+ [highlight.NavigationMentioned]
982
+ foreground = "#FFA500"
983
+
984
+ [highlight.NavigationNotified]
985
+ foreground = "terminal_default"
986
+
987
+ [highlight.NavigationUnread]
988
+ foreground = "terminal_default"
989
+
990
+ [highlight.MentionBadge]
991
+ foreground = "#FFA500"
992
+
993
+ [highlight.NotificationBadge]
994
+ foreground = "terminal_default"
995
+
996
+ [highlight.JoinedVoiceChannel]
997
+ foreground = "yellow"
998
+ bold = true
999
+
1000
+ [highlight.VoiceSpeaking]
1001
+ foreground = "green"
1002
+ bold = true
1003
+
1004
+ [highlight.ReplyPingEnabled]
1005
+ foreground = "cyan"
1006
+
1007
+ [highlight.Tag]
1008
+ foreground = "cyan"
1009
+
1010
+ [highlight.RelationshipFriend]
1011
+ foreground = "green"
1012
+
1013
+ [highlight.RelationshipIncoming]
1014
+ foreground = "yellow"
1015
+
1016
+ [highlight.RelationshipOutgoing]
1017
+ foreground = "yellow"
1018
+
1019
+ [highlight.RelationshipBlocked]
1020
+ foreground = "red"
1021
+
1022
+ [highlight.RelationshipNone]
1023
+ foreground = "terminal_default"
1024
+ dim = true
1025
+
1026
+ [highlight.GaugeFill]
1027
+ foreground = "cyan"
1028
+
1029
+ [highlight.MessageBody]
1030
+ foreground = "terminal_default"
1031
+
1032
+ [highlight.MarkdownHeading1]
1033
+ link = "Heading"
1034
+ foreground = "cyan"
1035
+
1036
+ [highlight.MarkdownHeading2]
1037
+ link = "Heading"
1038
+ underline = true
1039
+
1040
+ [highlight.MarkdownHeading3]
1041
+ link = "Heading"
1042
+
1043
+ [highlight.MarkdownQuote]
1044
+ foreground = "dark_gray"
1045
+
1046
+ [highlight.MarkdownMarker]
1047
+ foreground = "dark_gray"
1048
+
1049
+ [highlight.MessageAttachment]
1050
+ foreground = "cyan"
1051
+
1052
+ [highlight.ImageOverflow]
1053
+ link = "MessageAttachment"
1054
+ bold = true
1055
+
1056
+ [highlight.InlineCode]
1057
+ foreground = "#FFA500"
1058
+
1059
+ [highlight.MessageLink]
1060
+ foreground = "cyan"
1061
+ underline = true
1062
+
1063
+ [highlight.MentionSelf]
1064
+ foreground = "yellow"
1065
+ background = "#5C4C23"
1066
+
1067
+ [highlight.MentionOther]
1068
+ foreground = "#C1CEF7"
1069
+ background = "#28325C"
1070
+
1071
+ [highlight.MentionRole]
1072
+ # Discord supplies the foreground and a darker role-color background by default.
1073
+ # This group controls colored role mentions that do not notify the current user.
1074
+ # Notifying role mentions use MentionSelf with the Discord role foreground.
1075
+
1076
+ [highlight.MentionPickerRole]
1077
+ foreground = "magenta"
1078
+
1079
+ [highlight.EmbedGutter]
1080
+ foreground = "red"
1081
+
1082
+ [highlight.EmbedLink]
1083
+ foreground = "blue"
1084
+ underline = true
1085
+
1086
+ [highlight.CommandName]
1087
+ link = "MessageSecondary"
1088
+ foreground = "#5865F2"
1089
+
1090
+ [highlight.SystemThreadName]
1091
+ foreground = "cyan"
1092
+ bold = true
1093
+
1094
+ [highlight.PollAnswerSelected]
1095
+ foreground = "terminal_default"
1096
+ bold = true
1097
+
1098
+ [highlight.PollWinner]
1099
+ foreground = "terminal_default"
1100
+ bold = true
1101
+
1102
+ [highlight.UnreadBanner]
1103
+ foreground = "terminal_default"
1104
+ background = "#5865F2"
1105
+
1106
+ [highlight.UnreadDivider]
1107
+ foreground = "#ED4245"
1108
+
1109
+ [highlight.ForumPinnedBadge]
1110
+ foreground = "yellow"
1111
+ bold = true
1112
+
1113
+ [highlight.BotBadge]
1114
+ link = "Normal"
1115
+ background = "#5865F2"
1116
+ bold = true
1117
+
1118
+ [highlight.Error]
1119
+ foreground = "red"
1120
+
1121
+ [highlight.Warning]
1122
+ foreground = "yellow"
1123
+
1124
+ [highlight.Success]
1125
+ foreground = "green"
1126
+
1127
+ [highlight.Info]
1128
+ foreground = "cyan"
1129
+ ```
1130
+ <!-- default-theme-config:end -->
1131
+
1132
+ </details><br>
1133
+
1134
+ Check [Theme options](./docs/theme-options.md) for the complete group list,
1135
+ accepted values, links, exact defaults, and warning behavior.
1136
+
710
1137
  ## Performance
711
1138
 
712
1139
  Concord is designed to stay lightweight in normal terminal use. In observed
@@ -23,7 +23,7 @@
23
23
  "hasInstallScript": true,
24
24
  "license": "GPL-3.0-only",
25
25
  "name": "@chojs23/concord",
26
- "version": "2.3.5"
26
+ "version": "2.4.0"
27
27
  },
28
28
  "node_modules/@isaacs/cliui": {
29
29
  "engines": {
@@ -542,5 +542,5 @@
542
542
  }
543
543
  },
544
544
  "requires": true,
545
- "version": "2.3.5"
545
+ "version": "2.4.0"
546
546
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "artifactDownloadUrls": [
3
- "https://github.com/chojs23/concord/releases/download/v2.3.5"
3
+ "https://github.com/chojs23/concord/releases/download/v2.4.0"
4
4
  ],
5
5
  "bin": {
6
6
  "concord": "run-concord.js"
@@ -93,7 +93,7 @@
93
93
  "zipExt": ".tar.xz"
94
94
  }
95
95
  },
96
- "version": "2.3.5",
96
+ "version": "2.4.0",
97
97
  "volta": {
98
98
  "node": "18.14.1",
99
99
  "npm": "9.5.0"