aboutsummaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorRubén Beltrán del Río <jj@r.bdr.sh>2026-07-14 15:02:51 +0200
committerRubén Beltrán del Río <jj@r.bdr.sh>2026-09-02 23:39:51 +0200
commit01745ca8b870d87894673b778c01a04bca841caa (patch)
treed8a62362d0977352d0d3a098199cf91cc2ea4173 /config
parent51b27719a444764872f018a56e36ff406e892b27 (diff)
Add rmpc config
Diffstat (limited to 'config')
-rw-r--r--config/rmpc/config.ron273
-rw-r--r--config/rmpc/themes/rbdr.ron330
2 files changed, 603 insertions, 0 deletions
diff --git a/config/rmpc/config.ron b/config/rmpc/config.ron
new file mode 100644
index 0000000..ce99cc0
--- /dev/null
+++ b/config/rmpc/config.ron
@@ -0,0 +1,273 @@
+#![enable(implicit_some)]
+#![enable(unwrap_newtypes)]
+#![enable(unwrap_variant_newtypes)]
+(
+ address: "music.bdr.place:6600",
+ password: None,
+ theme: Some("rbdr"),
+ cache_dir: None,
+ on_song_change: None,
+ volume_step: 5,
+ max_fps: 30,
+ scrolloff: 0,
+ wrap_navigation: false,
+ enable_mouse: true,
+ scroll_amount: 1,
+ enable_config_hot_reload: true,
+ enable_lyrics_hot_reload: false,
+ status_update_interval_ms: 1000,
+ rewind_to_start_sec: None,
+ keep_state_on_song_change: true,
+ reflect_changes_to_playlist: false,
+ select_current_song_on_change: false,
+ ignore_leading_the: false,
+ browser_song_sort: [Disc, Track, Artist, Title],
+ directories_sort: SortFormat(group_by_type: true, reverse: false),
+ auto_open_downloads: true,
+ album_art: (
+ method: Auto,
+ max_size_px: (width: 1200, height: 1200),
+ disabled_protocols: ["http://", "https://"],
+ vertical_align: Center,
+ horizontal_align: Center,
+ ),
+ keybinds: (
+ global: {
+ "q": Quit,
+ "?": ShowHelp,
+ ":": CommandMode,
+ "oI": ShowCurrentSongInfo,
+ "oo": ShowOutputs,
+ "op": ShowDecoders,
+ "od": ShowDownloads,
+ "oP": Partition(),
+ "z": ToggleRepeat,
+ "x": ToggleRandom,
+ "c": ToggleConsume,
+ "v": ToggleSingle,
+ "p": TogglePause,
+ "s": Stop,
+ ">": NextTrack,
+ "<": PreviousTrack,
+ "f": SeekForward,
+ "b": SeekBack,
+ ".": VolumeUp,
+ ",": VolumeDown,
+ "<Tab>": NextTab,
+ "gt": NextTab,
+ "<S-Tab>": PreviousTab,
+ "gT": PreviousTab,
+ "1": SwitchToTab("Queue"),
+ "2": SwitchToTab("Directories"),
+ "3": SwitchToTab("Artists"),
+ "4": SwitchToTab("Album Artists"),
+ "5": SwitchToTab("Albums"),
+ "6": SwitchToTab("Playlists"),
+ "7": SwitchToTab("Search"),
+ "<C-u>": Update,
+ "<C-U>": Rescan,
+ "R": AddRandom,
+ },
+ navigation: {
+ "<C-c>": Close,
+ "<Esc>": Close,
+ "<CR>": Confirm,
+ "k": Up,
+ "<Up>": Up,
+ "j": Down,
+ "<Down>": Down,
+ "h": Left,
+ "<Left>": Left,
+ "l": Right,
+ "<Right>": Right,
+ "<C-w>k": PaneUp,
+ "<C-Up>": PaneUp,
+ "<C-w>j": PaneDown,
+ "<C-Down>": PaneDown,
+ "<C-w>h": PaneLeft,
+ "<C-Left>": PaneLeft,
+ "<C-w>l": PaneRight,
+ "<C-Right>": PaneRight,
+ "K": MoveUp,
+ "J": MoveDown,
+ "<C-u>": UpHalf,
+ "<C-d>": DownHalf,
+ "<C-b>": PageUp,
+ "<PageUp>": PageUp,
+ "<C-f>": PageDown,
+ "<PageDown>": PageDown,
+ "gg": Top,
+ "G": Bottom,
+ "<Space>": Select,
+ "<C-Space>": InvertSelection,
+ "/": EnterSearch,
+ "n": NextResult,
+ "N": PreviousResult,
+ "a": Add,
+ "A": AddAll,
+ "D": Delete,
+ "<C-r>": Rename,
+ "i": FocusInput,
+ "oi": ShowInfo,
+ "<C-z>": ContextMenu(),
+ "<C-s>s": Save(kind: Modal(all: false, duplicates_strategy: Ask)),
+ "<C-s>a": Save(kind: Modal(all: true, duplicates_strategy: Ask)),
+ "r": Rate(),
+ },
+ queue: {
+ "d": Delete,
+ "D": DeleteAll,
+ "<CR>": Play,
+ "C": JumpToCurrent,
+ "X": Shuffle,
+ },
+ ),
+ search: (
+ case_sensitive: false,
+ ignore_diacritics: false,
+ search_button: false,
+ mode: Contains,
+ tags: [
+ (value: "any", label: "Any Tag"),
+ (value: "artist", label: "Artist"),
+ (value: "album", label: "Album"),
+ (value: "albumartist", label: "Album Artist"),
+ (value: "title", label: "Title"),
+ (value: "filename", label: "Filename"),
+ (value: "genre", label: "Genre"),
+ ],
+ ),
+ artists: (
+ album_display_mode: SplitByDate,
+ album_sort_by: Date,
+ album_date_tags: [Date],
+ ),
+ tabs: [
+ (
+ name: "Queue",
+ pane: Split(
+ direction: Horizontal,
+ panes: [
+ (
+ size: "25%",
+ pane: Split(
+ direction: Vertical,
+ panes: [
+ (
+ size: "100%",
+ borders: "NONE",
+ border_symbols: Rounded,
+ pane: Pane(AlbumArt)
+ )
+ ],
+ ),
+ ),
+ (
+ size: "65%",
+ pane: Split(
+ direction: Vertical,
+ panes: [
+ (
+ size: "3",
+ borders: "ALL",
+ border_symbols: Inherited(parent: Rounded, bottom_left: "├", bottom_right: "┤",),
+ pane: Split(
+ direction: Horizontal,
+ panes: [
+ (
+ size: "1",
+ pane: Pane(Empty())
+ ),
+ (
+ size: "100%",
+ pane: Pane(QueueHeader())
+ ),
+ ]
+ )
+ ),
+ (
+ size: "100%",
+ borders: "LEFT | RIGHT | BOTTOM",
+ border_symbols: Rounded,
+ pane: Split(
+ direction: Horizontal,
+ panes: [
+ (
+ size: "1",
+ pane: Pane(Empty())
+ ),
+ (
+ size: "100%",
+ pane: Pane(Queue)
+ ),
+ ]
+ )
+ ),
+ ],
+ )
+ ),
+ ],
+ ),
+ ),
+ (
+ name: "Directories",
+ borders: "ALL",
+ border_symbols: Rounded,
+ pane: Split(
+ size: "100%",
+ direction: Vertical,
+ panes: [(pane: Pane(Directories), size: "100%", borders: "ALL", border_symbols: Rounded)],
+ )
+ ),
+ (
+ name: "Artists",
+ borders: "ALL",
+ border_symbols: Rounded,
+ pane: Split(
+ size: "100%",
+ direction: Vertical,
+ panes: [(pane: Pane(Artists), size: "100%", borders: "ALL", border_symbols: Rounded)],
+ )
+ ),
+ (
+ name: "Album Artists",
+ borders: "ALL",
+ border_symbols: Rounded,
+ pane: Split(
+ size: "100%",
+ direction: Vertical,
+ panes: [(pane: Pane(AlbumArtists), size: "100%", borders: "ALL", border_symbols: Rounded)],
+ )
+ ),
+ (
+ name: "Albums",
+ borders: "ALL",
+ border_symbols: Rounded,
+ pane: Split(
+ size: "100%",
+ direction: Vertical,
+ panes: [(pane: Pane(Albums), size: "100%", borders: "ALL", border_symbols: Rounded)],
+ )
+ ),
+ (
+ name: "Playlists",
+ borders: "ALL",
+ border_symbols: Rounded,
+ pane: Split(
+ size: "100%",
+ direction: Vertical,
+ panes: [(pane: Pane(Playlists), size: "100%", borders: "ALL", border_symbols: Rounded)],
+ )
+ ),
+ (
+ name: "Search",
+ borders: "ALL",
+ border_symbols: Rounded,
+ pane: Split(
+ size: "100%",
+ direction: Vertical,
+ panes: [(pane: Pane(Search), size: "100%", borders: "ALL", border_symbols: Rounded)],
+ )
+ ),
+ ],
+)
diff --git a/config/rmpc/themes/rbdr.ron b/config/rmpc/themes/rbdr.ron
new file mode 100644
index 0000000..e38c492
--- /dev/null
+++ b/config/rmpc/themes/rbdr.ron
@@ -0,0 +1,330 @@
+#![enable(implicit_some)]
+#![enable(unwrap_newtypes)]
+#![enable(unwrap_variant_newtypes)]
+(
+ default_album_art_path: None,
+ format_tag_separator: " | ",
+ browser_column_widths: [20, 38, 42],
+ background_color: "#ffffff",
+ text_color: "black",
+ header_background_color: "#ffffff",
+ modal_background_color: None,
+ modal_backdrop: false,
+ preview_label_style: (fg: "yellow"),
+ preview_metadata_group_style: (fg: "yellow", modifiers: "Bold"),
+ highlighted_item_style: (fg: "blue", modifiers: "Bold"),
+ current_item_style: (fg: "#ffffff", bg: "blue", modifiers: "Bold"),
+ borders_style: (fg: "white"),
+ border_symbol_sets: {
+ "rbdr": (
+ top_left: "a",
+ top_right: "b",
+ bottom_left: "c",
+ bottom_right: "d",
+ vertical_left: "|",
+ vertical_right: "|",
+ horizontal_top: "─",
+ horizontal_bottom: "-",
+ ),
+ },
+ highlight_border_style: (fg: "blue"),
+ symbols: (
+ song: "♬",
+ dir: " ",
+ playlist: "",
+ marker: "✳",
+ ellipsis: "…",
+ song_style: None,
+ dir_style: None,
+ playlist_style: None,
+ ),
+ level_styles: (
+ info: (fg: "blue", bg: "black"),
+ warn: (fg: "yellow", bg: "black"),
+ error: (fg: "red", bg: "black"),
+ debug: (fg: "light_green", bg: "black"),
+ trace: (fg: "magenta", bg: "black"),
+ ),
+ progress_bar: (
+ symbols: ["◖", "█", "◗", " ", "◗"],
+ track_style: None,
+ elapsed_style: (fg: "blue"),
+ thumb_style: (fg: "blue"),
+ use_track_when_empty: true,
+ ),
+ scrollbar: (
+ symbols: ["│", "█", "▲", "▼"],
+ track_style: (),
+ ends_style: (),
+ thumb_style: (fg: "blue"),
+ ),
+ tab_bar: (
+ active_style: (fg: "#ffffff", bg: "blue", modifiers: "Bold"),
+ inactive_style: (),
+ ),
+ lyrics: (
+ timestamp: false
+ ),
+ browser_song_format: [
+ (
+ kind: Group([
+ (kind: Property(Track)),
+ (kind: Text(" ")),
+ ])
+ ),
+ (
+ kind: Group([
+ (kind: Property(Artist)),
+ (kind: Text(" - ")),
+ (kind: Property(Title)),
+ ]),
+ default: (kind: Property(Filename))
+ ),
+ ],
+ song_table_format: [
+ (
+ prop: (kind: Property(Artist),
+ default: (kind: Text("Unknown"))
+ ),
+ label_prop: (kind: Text("Artist")),
+ width: "20%",
+ ),
+ (
+ prop: (kind: Property(Title),
+ default: (kind: Text("Unknown"))
+ ),
+ label_prop: (kind: Text("Title")),
+ width: "35%",
+ ),
+ (
+ prop: (kind: Property(Album), style: (fg: "cyan"),
+ default: (kind: Text("Unknown Album"), style: (fg: "white"))
+ ),
+ label_prop: (kind: Text("Album")),
+ width: "30%",
+ ),
+ (
+ prop: (kind: Property(Duration), style: (fg: "dark_gray"),
+ default: (kind: Text("-"))
+ ),
+ label_prop: (kind: Text("Duration")),
+ width: "15%",
+ alignment: Right,
+ ),
+ ],
+ layout: Split(
+ direction: Vertical,
+ panes: [
+ (
+ size: "4",
+ pane: Split(
+ direction: Horizontal,
+ panes: [
+ (
+ size: "35",
+ borders: "LEFT | TOP | BOTTOM",
+ border_symbols: Inherited(parent: Rounded, bottom_left: "├"),
+ pane: Component("header_left")
+ ),
+ (
+ size: "100%",
+ borders: "ALL",
+ border_symbols: Inherited(parent: Rounded, top_left: "┬", top_right: "┬", bottom_left: "┴", bottom_right: "┴"),
+ pane: Component("header_center")
+ ),
+ (
+ size: "35",
+ borders: "RIGHT | TOP | BOTTOM",
+ border_symbols: Inherited(parent: Rounded, bottom_right: "┤"),
+ pane: Component("header_right")
+ ),
+ ]
+ )
+ ),
+ (
+ pane: Pane(Tabs),
+ borders: "RIGHT | LEFT | BOTTOM",
+ border_symbols: Rounded,
+ size: "2",
+ ),
+ (
+ pane: Pane(TabContent),
+ size: "100%",
+ ),
+ (
+ size: "3",
+ borders: "TOP",
+ border_symbols: Library("rbdr"),
+ pane: Split(
+ direction: Horizontal,
+ panes: [
+ (
+ size: "4",
+ borders: "NONE",
+ pane: Component("input_mode")
+ ),
+ (
+ size: "100%",
+ borders: "NONE",
+ pane: Component("progress_bar"),
+ ),
+ (
+ size: "20",
+ borders: "NONE",
+ pane: Component("queue_status"),
+ ),
+ ]
+ ),
+ ),
+ ],
+ ),
+ components: {
+ "state": Pane(Property(
+ content: [
+ (kind: Text("["), style: (fg: "yellow", modifiers: "Bold")),
+ (kind: Property(Status(StateV2( ))), style: (fg: "yellow", modifiers: "Bold")),
+ (kind: Text("]"), style: (fg: "yellow", modifiers: "Bold")),
+ ], align: Left,
+ )),
+ "title": Pane(Property(
+ content: [
+ (kind: Property(Song(Title)), style: (modifiers: "Bold"),
+ default: (kind: Text("No Song"), style: (modifiers: "Bold"))),
+ ], align: Center, scroll_speed: 1
+ )),
+ "volume": Split(
+ direction: Horizontal,
+ panes: [
+ (size: "1", pane: Pane(Property(content: [(kind: Text(""))]))),
+ (size: "100%", pane: Pane(Volume(kind: Slider(symbols: (filled: "─", thumb: "●", track: "─"))))),
+ (size: "3", pane: Pane(Property(content: [(kind: Property(Status(Volume)), style: (fg: "blue"))], align: Right))),
+ (size: "2", pane: Pane(Property(content: [(kind: Text("%"), style: (fg: "blue"))]))),
+ ]
+ ),
+ "elapsed_and_bitrate": Pane(Property(
+ content: [
+ (kind: Property(Status(Elapsed))),
+ (kind: Text(" / ")),
+ (kind: Property(Status(Duration))),
+ (kind: Group([
+ (kind: Text(" (")),
+ (kind: Property(Status(Bitrate))),
+ (kind: Text(" kbps)")),
+ ])),
+ ],
+ align: Left,
+ )),
+ "artist_and_album": Pane(Property(
+ content: [
+ (kind: Property(Song(Artist)), style: (fg: "yellow", modifiers: "Bold"),
+ default: (kind: Text("Unknown"), style: (fg: "yellow", modifiers: "Bold"))),
+ (kind: Text(" - ")),
+ (kind: Property(Song(Album)), default: (kind: Text("Unknown Album"))),
+ ], align: Center, scroll_speed: 1
+ )),
+ "states": Split(
+ direction: Horizontal,
+ panes: [
+ (
+ size: "1",
+ pane: Pane(Empty())
+ ),
+ (
+ size: "100%",
+ pane: Pane(Property(content: [(kind: Property(Status(InputBuffer())), style: (fg: "blue"), align: Left)]))
+ ),
+ (
+ size: "6",
+ pane: Pane(Property(content: [
+ (kind: Text("["), style: (fg: "blue", modifiers: "Bold")),
+ (kind: Property(Status(RepeatV2(
+ on_label: "z",
+ off_label: "z",
+ on_style: (fg: "yellow", modifiers: "Bold"),
+ off_style: (fg: "blue", modifiers: "Dim"),
+ )))),
+ (kind: Property(Status(RandomV2(
+ on_label: "x",
+ off_label: "x",
+ on_style: (fg: "yellow", modifiers: "Bold"),
+ off_style: (fg: "blue", modifiers: "Dim"),
+ )))),
+ (kind: Property(Status(ConsumeV2(
+ on_label: "c",
+ off_label: "c",
+ oneshot_label: "c",
+ on_style: (fg: "yellow", modifiers: "Bold"),
+ off_style: (fg: "blue", modifiers: "Dim"),
+ oneshot_style: (fg: "red", modifiers: "Dim"),
+ )))),
+ (kind: Property(Status(SingleV2(
+ on_label: "v",
+ off_label: "v",
+ oneshot_label: "v",
+ on_style: (fg: "yellow", modifiers: "Bold"),
+ off_style: (fg: "blue", modifiers: "Dim"),
+ oneshot_style: (fg: "red", modifiers: "Bold"),
+ )))),
+ (kind: Text("]"), style: (fg: "blue", modifiers: "Bold")),
+ ],
+ align: Right
+ ))
+ ),
+ ]
+ ),
+ "input_mode": Pane(Property(
+ content: [
+ (kind: Transform(Replace(content: (kind: Property(Status(InputMode()))), replacements: [
+ (match: "Normal", replace: (kind: Text(" N "), style: (fg: "blue", bg: "#ffffff"))),
+ (match: "Insert", replace: (kind: Text(" I "), style: (fg: "green", bg: "#ffffff"))),
+ ])))
+ ], align: Center
+ )),
+ "header_left": Split(
+ direction: Vertical,
+ panes: [
+ (size: "1", pane: Component("state")),
+ (size: "1", pane: Component("elapsed_and_bitrate")),
+ ]
+ ),
+ "header_center": Split(
+ direction: Vertical,
+ panes: [
+ (size: "1", pane: Component("title")),
+ (size: "1", pane: Component("artist_and_album")),
+ ]
+ ),
+ "header_right": Split(
+ direction: Vertical,
+ panes: [
+ (size: "1", pane: Component("volume")),
+ (size: "1", pane: Component("states")),
+ ]
+ ),
+ "progress_bar": Split(
+ direction: Horizontal,
+ panes: [
+ (
+ size: "1",
+ pane: Pane(Empty())
+ ),
+ (
+ size: "100%",
+ pane: Pane(ProgressBar)
+ ),
+ (
+ size: "1",
+ pane: Pane(Empty())
+ ),
+ ]
+ ),
+ "queue_status": Pane(Property(
+ content: [
+ (kind: Text("♬ ")),
+ (kind: Property(Status(QueueLength()))),
+ (kind: Text(" 󰥔 ")),
+ (kind: Property(Status(QueueTimeTotal()))),
+ ],
+ )),
+ },
+)