summaryrefslogtreecommitdiff
path: root/ar/.config/rmpc
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-02-17 22:19:16 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-02-17 22:19:16 +0900
commit1864770d606c4aa8b0af5e88dd41c21caab8e851 (patch)
tree888e82c9187b6833884d45d7e424c999ce5be93b /ar/.config/rmpc
parentc58bfa168fed713821dd434632e8da4ac65df479 (diff)
updates
Diffstat (limited to 'ar/.config/rmpc')
-rw-r--r--ar/.config/rmpc/config.ron284
-rwxr-xr-xar/.config/rmpc/scripts/on_song_change61
-rwxr-xr-xar/.config/rmpc/scripts/onresize7
-rw-r--r--ar/.config/rmpc/themes/catppuccin-mocha-small.ron195
-rw-r--r--ar/.config/rmpc/themes/catppuccin-mocha.ron327
5 files changed, 874 insertions, 0 deletions
diff --git a/ar/.config/rmpc/config.ron b/ar/.config/rmpc/config.ron
new file mode 100644
index 0000000..9e4ffe5
--- /dev/null
+++ b/ar/.config/rmpc/config.ron
@@ -0,0 +1,284 @@
+#![enable(implicit_some)]
+#![enable(unwrap_newtypes)]
+#![enable(unwrap_variant_newtypes)]
+(
+ address: "/tmp/mpd_socket",
+ password: None,
+ theme: "~/.config/rmpc/themes/catppuccin-mocha.ron",
+ cache_dir: "~/.cache/rmpc",
+ lyrics_dir: "~/.local/share/lyrics",
+ on_song_change: ["~/.config/rmpc/scripts/on_song_change"],
+ on_resize: ["~/.config/rmpc/scripts/onresize"],
+ extra_yt_dlp_args: ["--audio-quality", "0"],
+ volume_step: 5,
+ max_fps: 30,
+ scrolloff: 9,
+ wrap_navigation: false,
+ enable_mouse: true,
+ scroll_amount: 1,
+ enable_config_hot_reload: true,
+ enable_lyrics_hot_reload: true,
+ 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: "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)
+ ),
+ ]
+ )
+ ),
+ ],
+ )
+ ),
+ (
+ size: "35%",
+ pane: Split(
+ direction: Vertical,
+ panes: [
+ (
+ size: "100%",
+ borders: "LEFT | RIGHT | TOP",
+ border_symbols: Rounded,
+ pane: Pane(AlbumArt)
+ ),
+ (
+ size: "7",
+ borders: "ALL",
+ border_symbols: Inherited(parent: Rounded, top_left: "├", top_right: "┤",),
+ border_title: [(kind: Text(" Lyrics "))],
+ border_title_alignment: Right,
+ pane: Pane(Lyrics)
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ (
+ 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/ar/.config/rmpc/scripts/on_song_change b/ar/.config/rmpc/scripts/on_song_change
new file mode 100755
index 0000000..72a68ae
--- /dev/null
+++ b/ar/.config/rmpc/scripts/on_song_change
@@ -0,0 +1,61 @@
+#!/usr/bin/env sh
+
+# ── dwmblocks signal ─────────────────────────────────────────────────────────
+pkill -RTMIN+21 dwmblocks
+
+# ── Desktop notification ──────────────────────────────────────────────────────
+TMP_DIR="/tmp/rmpc"
+mkdir -p "$TMP_DIR"
+ALBUM_ART_PATH="$TMP_DIR/notification_cover"
+
+if ! rmpc albumart --output "$ALBUM_ART_PATH"; then
+ ALBUM_ART_PATH=""
+fi
+
+if [ -n "$ALBUM_ART_PATH" ]; then
+ notify-send -i "$ALBUM_ART_PATH" "Now Playing" "$ARTIST - $TITLE"
+else
+ notify-send "Now Playing" "$ARTIST - $TITLE"
+fi
+
+# ── Play count ────────────────────────────────────────────────────────────────
+sticker=$(rmpc sticker get "$FILE" "playCount" 2>/dev/null | jq -r '.value')
+if [ -z "$sticker" ]; then
+ rmpc sticker set "$FILE" "playCount" "1"
+else
+ rmpc sticker set "$FILE" "playCount" "$((sticker + 1))"
+fi
+
+# ── Auto lyrics download ──────────────────────────────────────────────────────
+LRCLIB_INSTANCE="https://lrclib.net"
+
+if [ "$HAS_LRC" = "false" ]; then
+ mkdir -p "$(dirname "$LRC_FILE")"
+
+ LYRICS="$(curl -X GET -sG \
+ -H "Lrclib-Client: rmpc-$VERSION" \
+ --data-urlencode "artist_name=$ARTIST" \
+ --data-urlencode "track_name=$TITLE" \
+ --data-urlencode "album_name=$ALBUM" \
+ "$LRCLIB_INSTANCE/api/get" | jq -r '.syncedLyrics')"
+
+ if [ -z "$LYRICS" ]; then
+ rmpc remote --pid "$PID" status "Failed to download lyrics for $ARTIST - $TITLE" --level error
+ exit
+ fi
+
+ if [ "$LYRICS" = "null" ]; then
+ rmpc remote --pid "$PID" status "Lyrics for $ARTIST - $TITLE not found" --level warn
+ exit
+ fi
+
+ echo "[ar:$ARTIST]" >"$LRC_FILE"
+ {
+ echo "[al:$ALBUM]"
+ echo "[ti:$TITLE]"
+ } >>"$LRC_FILE"
+ echo "$LYRICS" | sed -E '/^\[(ar|al|ti):/d' >>"$LRC_FILE"
+
+ rmpc remote --pid "$PID" indexlrc --path "$LRC_FILE"
+ rmpc remote --pid "$PID" status "Downloaded lyrics for $ARTIST - $TITLE" --level info
+fi
diff --git a/ar/.config/rmpc/scripts/onresize b/ar/.config/rmpc/scripts/onresize
new file mode 100755
index 0000000..36462ce
--- /dev/null
+++ b/ar/.config/rmpc/scripts/onresize
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+if [[ $COLS -gt 100 ]]; then
+ rmpc remote --pid "$PID" set theme ~/.config/rmpc/themes/catppuccin-mocha.ron
+else
+ rmpc remote --pid "$PID" set theme ~/.config/rmpc/themes/catppuccin-mocha-small.ron
+fi
diff --git a/ar/.config/rmpc/themes/catppuccin-mocha-small.ron b/ar/.config/rmpc/themes/catppuccin-mocha-small.ron
new file mode 100644
index 0000000..35759fe
--- /dev/null
+++ b/ar/.config/rmpc/themes/catppuccin-mocha-small.ron
@@ -0,0 +1,195 @@
+#![enable(implicit_some)]
+#![enable(unwrap_newtypes)]
+#![enable(unwrap_variant_newtypes)]
+// Catppuccin Mocha - Small (single-line header)
+(
+ default_album_art_path: None,
+ format_tag_separator: " | ",
+ browser_column_widths: [20, 38, 42],
+ background_color: None,
+ text_color: "#cdd6f4",
+ header_background_color: None,
+ modal_background_color: None,
+ modal_backdrop: true,
+ preview_label_style: (fg: "#f9e2af"),
+ preview_metadata_group_style: (fg: "#f9e2af", modifiers: "Bold"),
+ highlighted_item_style: (fg: "#cba6f7", modifiers: "Bold"),
+ current_item_style: (fg: "#1e1e2e", bg: "#89b4fa", modifiers: "Bold"),
+ borders_style: (fg: "#45475a"),
+ highlight_border_style: (fg: "#89b4fa"),
+ symbols: (
+ song: "",
+ dir: "",
+ playlist: "",
+ marker: "",
+ ellipsis: "…",
+ song_style: (fg: "#89b4fa"),
+ dir_style: (fg: "#89dceb"),
+ playlist_style: (fg: "#cba6f7"),
+ ),
+ level_styles: (
+ info: (fg: "#89b4fa"),
+ warn: (fg: "#f9e2af"),
+ error: (fg: "#f38ba8"),
+ debug: (fg: "#a6e3a1"),
+ trace: (fg: "#cba6f7"),
+ ),
+ progress_bar: (
+ symbols: ["━", "━", "●", "─", "─"],
+ track_style: (fg: "#45475a"),
+ elapsed_style: (fg: "#cba6f7"),
+ thumb_style: (fg: "#89b4fa"),
+ use_track_when_empty: true,
+ ),
+ scrollbar: (
+ symbols: ["│", "█", "▲", "▼"],
+ track_style: (fg: "#313244"),
+ ends_style: (fg: "#45475a"),
+ thumb_style: (fg: "#89b4fa"),
+ ),
+ tab_bar: (
+ active_style: (fg: "#1e1e2e", bg: "#89b4fa", modifiers: "Bold"),
+ inactive_style: (fg: "#6c7086"),
+ ),
+ 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: "33%",
+ ),
+ (
+ prop: (kind: Property(Album), style: (fg: "#a6adc8"),
+ default: (kind: Text("Unknown Album"), style: (fg: "#a6adc8"))
+ ),
+ label_prop: (kind: Text("Album")),
+ width: "28%",
+ ),
+ (
+ prop: (kind: Property(Duration),
+ default: (kind: Text("-"))
+ ),
+ label_prop: (kind: Text("Duration")),
+ width: "12%",
+ alignment: Right,
+ ),
+ (
+ prop: (kind: Sticker("playCount"), style: (fg: "#6c7086"),
+ default: (kind: Text("0"), style: (fg: "#6c7086"))
+ ),
+ label_prop: (kind: Text("Plays")),
+ width: "7%",
+ alignment: Right,
+ ),
+ ],
+ layout: Split(
+ direction: Vertical,
+ panes: [
+ (
+ size: "1",
+ pane: Split(
+ direction: Horizontal,
+ panes: [
+ (
+ size: "10",
+ pane: Pane(Property(
+ content: [
+ (kind: Text("["), style: (fg: "#fab387", modifiers: "Bold")),
+ (kind: Property(Status(StateV2( ))), style: (fg: "#fab387", modifiers: "Bold")),
+ (kind: Text("] "), style: (fg: "#fab387", modifiers: "Bold")),
+ ],
+ align: Left,
+ )),
+ ),
+ (
+ size: "100%",
+ pane: Pane(Property(
+ content: [
+ (kind: Property(Song(Artist)), style: (fg: "#f9e2af", modifiers: "Bold"),
+ default: (kind: Text("Unknown"), style: (fg: "#6c7086"))),
+ (kind: Text(" - "), style: (fg: "#6c7086")),
+ (kind: Property(Song(Title)), style: (fg: "#cdd6f4", modifiers: "Bold"),
+ default: (kind: Text("No Song"), style: (fg: "#6c7086"))),
+ ],
+ align: Center,
+ scroll_speed: 1,
+ )),
+ ),
+ (
+ size: "8",
+ pane: Pane(Property(
+ content: [
+ (kind: Property(Status(Volume)), style: (fg: "#89b4fa")),
+ (kind: Text("%"), style: (fg: "#89b4fa")),
+ ],
+ align: Right,
+ )),
+ ),
+ ]
+ ),
+ ),
+ (
+ pane: Pane(Tabs),
+ borders: "RIGHT | LEFT | BOTTOM",
+ border_symbols: Rounded,
+ size: "2",
+ ),
+ (
+ pane: Pane(TabContent),
+ size: "100%",
+ ),
+ (
+ size: "1",
+ pane: Split(
+ direction: Horizontal,
+ panes: [
+ (
+ size: "100%",
+ pane: Pane(ProgressBar),
+ ),
+ (
+ size: "11",
+ pane: Pane(Property(
+ content: [
+ (kind: Text(" "), style: (fg: "#6c7086")),
+ (kind: Property(Status(Elapsed)), style: (fg: "#a6adc8")),
+ (kind: Text("/"), style: (fg: "#6c7086")),
+ (kind: Property(Status(Duration)), style: (fg: "#6c7086")),
+ ],
+ align: Left,
+ )),
+ ),
+ ]
+ ),
+ ),
+ ],
+ ),
+ components: {},
+)
diff --git a/ar/.config/rmpc/themes/catppuccin-mocha.ron b/ar/.config/rmpc/themes/catppuccin-mocha.ron
new file mode 100644
index 0000000..ef51d14
--- /dev/null
+++ b/ar/.config/rmpc/themes/catppuccin-mocha.ron
@@ -0,0 +1,327 @@
+#![enable(implicit_some)]
+#![enable(unwrap_newtypes)]
+#![enable(unwrap_variant_newtypes)]
+// Catppuccin Mocha
+// Base: #1e1e2e Mantle: #181825 Crust: #11111b
+// Surface0: #313244 Surface1: #45475a Surface2: #585b70
+// Overlay0: #6c7086 Overlay1: #7f849c Subtext0: #a6adc8
+// Subtext1: #bac2de Text: #cdd6f4 Lavender: #b4befe
+// Blue: #89b4fa Sapphire: #74c7ec Sky: #89dceb
+// Teal: #94e2d5 Green: #a6e3a1 Yellow: #f9e2af
+// Peach: #fab387 Mauve: #cba6f7 Pink: #f5c2e7
+// Red: #f38ba8 Maroon: #eba0ac Flamingo: #f2cdcd
+(
+ default_album_art_path: None,
+ format_tag_separator: " | ",
+ browser_column_widths: [20, 38, 42],
+ background_color: None,
+ text_color: "#cdd6f4",
+ header_background_color: None,
+ modal_background_color: None,
+ modal_backdrop: true,
+ preview_label_style: (fg: "#f9e2af"),
+ preview_metadata_group_style: (fg: "#f9e2af", modifiers: "Bold"),
+ highlighted_item_style: (fg: "#cba6f7", modifiers: "Bold"),
+ current_item_style: (fg: "#1e1e2e", bg: "#89b4fa", modifiers: "Bold"),
+ borders_style: (fg: "#45475a"),
+ highlight_border_style: (fg: "#89b4fa"),
+ symbols: (
+ song: "",
+ dir: "",
+ playlist: "",
+ marker: "",
+ ellipsis: "…",
+ song_style: (fg: "#89b4fa"),
+ dir_style: (fg: "#89dceb"),
+ playlist_style: (fg: "#cba6f7"),
+ ),
+ level_styles: (
+ info: (fg: "#89b4fa"),
+ warn: (fg: "#f9e2af"),
+ error: (fg: "#f38ba8"),
+ debug: (fg: "#a6e3a1"),
+ trace: (fg: "#cba6f7"),
+ ),
+ progress_bar: (
+ symbols: ["━", "━", "●", "─", "─"],
+ track_style: (fg: "#45475a"),
+ elapsed_style: (fg: "#cba6f7"),
+ thumb_style: (fg: "#89b4fa"),
+ use_track_when_empty: true,
+ ),
+ scrollbar: (
+ symbols: ["│", "█", "▲", "▼"],
+ track_style: (fg: "#313244"),
+ ends_style: (fg: "#45475a"),
+ thumb_style: (fg: "#89b4fa"),
+ ),
+ tab_bar: (
+ active_style: (fg: "#1e1e2e", bg: "#89b4fa", modifiers: "Bold"),
+ inactive_style: (fg: "#6c7086"),
+ ),
+ 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: "33%",
+ ),
+ (
+ prop: (kind: Property(Album), style: (fg: "#a6adc8"),
+ default: (kind: Text("Unknown Album"), style: (fg: "#a6adc8"))
+ ),
+ label_prop: (kind: Text("Album")),
+ width: "28%",
+ ),
+ (
+ prop: (kind: Property(Duration),
+ default: (kind: Text("-"))
+ ),
+ label_prop: (kind: Text("Duration")),
+ width: "12%",
+ alignment: Right,
+ ),
+ (
+ prop: (kind: Sticker("playCount"), style: (fg: "#6c7086"),
+ default: (kind: Text("0"), style: (fg: "#6c7086"))
+ ),
+ label_prop: (kind: Text("Plays")),
+ width: "7%",
+ 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: "1",
+ pane: Split(
+ direction: Horizontal,
+ panes: [
+ (
+ size: "100%",
+ pane: Pane(ProgressBar),
+ ),
+ (
+ size: "11",
+ pane: Pane(Property(
+ content: [
+ (kind: Text(" "), style: (fg: "#6c7086")),
+ (kind: Property(Status(Elapsed)), style: (fg: "#a6adc8")),
+ (kind: Text("/"), style: (fg: "#6c7086")),
+ (kind: Property(Status(Duration)), style: (fg: "#6c7086")),
+ ],
+ align: Left,
+ )),
+ ),
+ ]
+ ),
+ ),
+ ],
+ ),
+ components: {
+ "state": Pane(Property(
+ content: [
+ (kind: Text("["), style: (fg: "#fab387", modifiers: "Bold")),
+ (kind: Property(Status(StateV2( ))), style: (fg: "#fab387", modifiers: "Bold")),
+ (kind: Text("]"), style: (fg: "#fab387", modifiers: "Bold")),
+ ], align: Left,
+ )),
+ "title": Pane(Property(
+ content: [
+ (kind: Property(Song(Title)), style: (fg: "#cdd6f4", modifiers: "Bold"),
+ default: (kind: Text("No Song"), style: (fg: "#6c7086", 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: "#89b4fa"))], align: Right))),
+ (size: "2", pane: Pane(Property(content: [(kind: Text("%"), style: (fg: "#89b4fa"))]))),
+ ]
+ ),
+ "elapsed_and_bitrate": Pane(Property(
+ content: [
+ (kind: Property(Status(Elapsed)), style: (fg: "#a6adc8")),
+ (kind: Text(" / "), style: (fg: "#6c7086")),
+ (kind: Property(Status(Duration)), style: (fg: "#a6adc8")),
+ (kind: Group([
+ (kind: Text(" (")),
+ (kind: Property(Status(Bitrate))),
+ (kind: Text(" kbps)")),
+ ]), style: (fg: "#6c7086")),
+ ],
+ align: Left,
+ )),
+ "artist_and_album": Pane(Property(
+ content: [
+ (kind: Property(Song(Artist)), style: (fg: "#f9e2af", modifiers: "Bold"),
+ default: (kind: Text("Unknown"), style: (fg: "#6c7086", modifiers: "Bold"))),
+ (kind: Text(" - "), style: (fg: "#6c7086")),
+ (kind: Property(Song(Album)), style: (fg: "#bac2de"),
+ default: (kind: Text("Unknown Album"), style: (fg: "#6c7086"))),
+ ], 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: "#89b4fa"), align: Left)]))
+ ),
+ (
+ size: "6",
+ pane: Pane(Property(content: [
+ (kind: Text("["), style: (fg: "#45475a", modifiers: "Bold")),
+ (kind: Property(Status(RepeatV2(
+ on_label: "z",
+ off_label: "z",
+ on_style: (fg: "#f9e2af", modifiers: "Bold"),
+ off_style: (fg: "#45475a", modifiers: "Dim"),
+ )))),
+ (kind: Property(Status(RandomV2(
+ on_label: "x",
+ off_label: "x",
+ on_style: (fg: "#f9e2af", modifiers: "Bold"),
+ off_style: (fg: "#45475a", modifiers: "Dim"),
+ )))),
+ (kind: Property(Status(ConsumeV2(
+ on_label: "c",
+ off_label: "c",
+ oneshot_label: "c",
+ on_style: (fg: "#f9e2af", modifiers: "Bold"),
+ off_style: (fg: "#45475a", modifiers: "Dim"),
+ oneshot_style: (fg: "#f38ba8", modifiers: "Dim"),
+ )))),
+ (kind: Property(Status(SingleV2(
+ on_label: "v",
+ off_label: "v",
+ oneshot_label: "v",
+ on_style: (fg: "#f9e2af", modifiers: "Bold"),
+ off_style: (fg: "#45475a", modifiers: "Dim"),
+ oneshot_style: (fg: "#f38ba8", modifiers: "Bold"),
+ )))),
+ (kind: Text("]"), style: (fg: "#45475a", modifiers: "Bold")),
+ ],
+ align: Right
+ ))
+ ),
+ ]
+ ),
+ "input_mode": Pane(Property(
+ content: [
+ (kind: Transform(Replace(content: (kind: Property(Status(InputMode()))), replacements: [
+ (match: "Normal", replace: (kind: Text(" NORMAL "), style: (fg: "#1e1e2e", bg: "#89b4fa"))),
+ (match: "Insert", replace: (kind: Text(" INSERT "), style: (fg: "#1e1e2e", bg: "#a6e3a1"))),
+ ])))
+ ], 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())
+ ),
+ ]
+ )
+ },
+)