inital commit

dev-docs
Moritz Böhme 2021-03-28 17:11:08 +02:00
commit 36b964da59
376 changed files with 230001 additions and 0 deletions

29
.config/bspwm/bspwmrc Executable file
View File

@ -0,0 +1,29 @@
#!/bin/sh
# MONITORS #
bspc monitor -d 1 2 3 4 5 6 7 8 9
# CONFIGURATION #
bspc config border_width 2
bspc config window_gap 10
bspc config split_ratio 0.50
bspc config borderless_monocle true
bspc config gapless_monocle true
bspc config focus_follows_pointer true
# WINDOW RULES #
# PROBLEMS WITH JAVA APPLICATIONS #
wmname LG3D
# AUTOSTART #
[[ ! $(pidof -x sxhkd) ]] && sxhkd &
[[ ! $(pidof -x picom) ]] && picom --experimental-backends &
feh --bg-tile ~/Pictures/Wallpapers/avatar.png
kdeconnect-cli --refresh && kdeconnect-cli -l >/dev/null
sh ~/.config/polybar/launch.sh &

430
.config/dunst/dunstrc Executable file
View File

@ -0,0 +1,430 @@
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = mouse
# The geometry of the window:
# [{width}]x{height}[+/-{x}+/-{y}]
# The geometry of the message window.
# The height is measured in number of notifications everything else
# in pixels. If the width is omitted but the height is given
# ("-geometry x2"), the message window expands over the whole screen
# (dmenu-like). If width is 0, the window expands to the longest
# message displayed. A positive x is measured from the left, a
# negative from the right side of the screen. Y is measured from
# the top and down respectively.
# The width can be negative. In this case the actual width is the
# screen width minus the width defined in within the geometry option.
geometry = "0x4-25+25"
# Show how many messages are currently hidden (because of geometry).
indicate_hidden = yes
# Shrink window if it's smaller than the width. Will be ignored if
# width is 0.
shrink = no
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.).
transparency = 15
# The height of the entire notification. If the height is smaller
# than the font height and padding combined, it will be raised
# to the font height and padding.
notification_height = 0
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
separator_height = 1
# Padding between text and separator.
padding = 8
# Horizontal padding.
horizontal_padding = 10
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 0
# Defines color of the frame around the notification window.
frame_color = "#282a36"
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort messages by urgency.
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
idle_threshold = 120
### Text ###
font = Monospace 10
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://developer.gnome.org/pango/stable/pango-Markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "%s %p\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Split notifications into multiple lines if they don't fit into
# geometry.
word_wrap = yes
# When word_wrap is set to no, specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Align icons left/right/off
icon_position = left
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 0
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 64
# Paths to default icons.
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = /usr/bin/firefox -new-tab
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Print a notification on startup.
# This is mainly for error detection, since dbus (re-)starts dunst
# automatically after a crash.
startup_notification = false
# Manage dunst's desire for talking
# Can be one of the following values:
# crit: Critical features. Dunst aborts
# warn: Only non-fatal warnings
# mesg: Important Messages
# info: all unimportant stuff
# debug: all less than unimportant stuff
verbosity = mesg
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 0
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: If the notification has exactly one action, or one is marked as default,
# invoke it. If there are multiple and no default, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
# These values can be strung together for each mouse event, and
# will be executed in sequence.
mouse_left_click = close_current
mouse_middle_click = do_action, close_current
mouse_right_click = close_all
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[shortcuts]
# Shortcuts are specified as [modifier+][modifier+]...key
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
# "mod3" and "mod4" (windows-key).
# Xev might be helpful to find names for keys.
# Close notification.
close = ctrl+space
# Close all notifications.
close_all = ctrl+shift+space
# Redisplay last message(s).
# On the US keyboard layout "grave" is normally above TAB and left
# of "1". Make sure this key actually exists on your keyboard layout,
# e.g. check output of 'xmodmap -pke'
history = ctrl+grave
# Context menu.
context = ctrl+shift+period
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#282a36"
foreground = "#6272a4"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#icon = /path/to/icon
[urgency_normal]
background = "#282a36"
foreground = "#bd93f9"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#icon = /path/to/icon
[urgency_critical]
background = "#ff5555"
foreground = "#f8f8f2"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# timeout
# urgency
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: if you don't want a notification to be displayed, set the format
# to "".
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# format = ""
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

59
.config/kitty/dracula.conf Executable file
View File

@ -0,0 +1,59 @@
# https://draculatheme.com/kitty
#
# Installation instructions:
#
# cp dracula.conf ~/.config/kitty/
# echo "include dracula.conf" >> ~/.config/kitty/kitty.conf
#
# Then reload kitty for the config to take affect.
# Alternatively copy paste below directly into kitty.conf
foreground #f8f8f2
#background #282a36
background #000000
selection_foreground #44475a
selection_background #f8f8f2
url_color #ffb86c
# black
color0 #21222c
color8 #6272a4
# red
color1 #ff5555
color9 #ff6e6e
# green
color2 #50fa7b
color10 #69ff94
# yellow
color3 #f1fa8c
color11 #ffffa5
# blue
color4 #bd93f9
color12 #d6acff
# magenta
color5 #ff79c6
color13 #ff92df
# cyan
color6 #8be9fd
color14 #a4ffff
# white
color7 #f8f8f2
color15 #ffffff
# Cursor colors
cursor #6272a4
cursor_text_color background
# Tab bar colors
active_tab_foreground #44475a
active_tab_background #f8f8f2
inactive_tab_foreground #282a36
inactive_tab_background #6272a4

23
.config/kitty/kitty.conf Executable file
View File

@ -0,0 +1,23 @@
font_family FiraCode Nerd Font
font_size 10
adjust_line_height 105%
cursor #32CD32
cursor_shape underline
scrollback_lines 10000
url_color #20B2AA
foreground #32CD32
background #000000
background_opacity 0.8
editor vim
close_on_child_death no
include ~/.config/kitty/dracula.conf
set preview_images_method kitty

7
.config/picom/launch.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
if ps -A | grep picom; then
killall -q picom
fi
picom --experimental-backends

516
.config/picom/picom.conf Executable file
View File

@ -0,0 +1,516 @@
#################################
# Animations #
#################################
# requires https://github.com/jonaburg/picom
# (These are also the default values)
transition-length = 300
transition-pow-x = 0.1
transition-pow-y = 0.1
transition-pow-w = 0.1
transition-pow-h = 0.1
size-transition = true
#################################
# Corners #
#################################
# requires: https://github.com/sdhand/compton or https://github.com/jonaburg/picom
corner-radius = 10.0;
rounded-corners-exclude = [
#"window_type = 'normal'",
"class_g = 'awesome'",
"class_g = 'URxvt'",
"class_g = 'XTerm'",
"class_g = 'kitty'",
"class_g = 'Alacritty'",
"class_g = 'Polybar'",
"class_g = 'code-oss'",
#"class_g = 'TelegramDesktop'",
#"class_g = 'firefox'",
"class_g = 'Thunderbird'",
"class_g = 'Rofi'",
];
round-borders = 1;
round-borders-exclude = [
#"class_g = 'TelegramDesktop'",
];
#################################
# Shadows #
#################################
# Enabled client-side shadows on windows. Note desktop windows
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
# unless explicitly requested using the wintypes option.
#
# shadow = false
shadow = true;
# The blur radius for shadows, in pixels. (defaults to 12)
# shadow-radius = 12
shadow-radius = 7;
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
# shadow-opacity = .75
# The left offset for shadows, in pixels. (defaults to -15)
# shadow-offset-x = -15
shadow-offset-x = -7;
# The top offset for shadows, in pixels. (defaults to -15)
# shadow-offset-y = -15
shadow-offset-y = -7;
# Avoid drawing shadows on dock/panel windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dock-shadow = false
# Don't draw shadows on drag-and-drop windows. This option is deprecated,
# you should use the *wintypes* option in your config file instead.
#
# no-dnd-shadow = false
# Red color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-red = 0
# Green color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-green = 0
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
# shadow-blue = 0
# Do not paint shadows on shaped windows. Note shaped windows
# here means windows setting its shape through X Shape extension.
# Those using ARGB background is beyond our control.
# Deprecated, use
# shadow-exclude = 'bounding_shaped'
# or
# shadow-exclude = 'bounding_shaped && !rounded_corners'
# instead.
#
# shadow-ignore-shaped = ''
# Specify a list of conditions of windows that should have no shadow.
#
# examples:
# shadow-exclude = "n:e:Notification";
#
# shadow-exclude = []
shadow-exclude = [
"name = 'Notification'",
"class_g = 'Conky'",
"class_g ?= 'Notify-osd'",
"class_g = 'Cairo-clock'",
"class_g = 'slop'",
"class_g = 'Polybar'",
"class_g = 'firefox'",
"_GTK_FRAME_EXTENTS@:c"
];
# Specify a X geometry that describes the region in which shadow should not
# be painted in, such as a dock window region. Use
# shadow-exclude-reg = "x10+0+0"
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
#
# shadow-exclude-reg = ""
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
# xinerama-shadow-crop = false
#################################
# Fading #
#################################
# Fade windows in/out when opening/closing and when opacity changes,
# unless no-fading-openclose is used.
# fading = false
fading = true;
# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
# fade-in-step = 0.028
fade-in-step = 0.03;
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
# fade-out-step = 0.03
fade-out-step = 0.03;
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
# fade-delta = 10
# Specify a list of conditions of windows that should not be faded.
# don't need this, we disable fading for all normal windows with wintypes: {}
fade-exclude = [
"class_g = 'slop'" # maim
]
# Do not fade on window open/close.
# no-fading-openclose = false
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
# no-fading-destroyed-argb = false
#################################
# Transparency / Opacity #
#################################
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
# inactive-opacity = 1
inactive-opacity = 0.5;
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
# frame-opacity = 1.0
frame-opacity = 0.7;
# Default opacity for dropdown menus and popup menus. (0.0 - 1.0, defaults to 1.0)
# menu-opacity = 1.0
# menu-opacity is depreciated use dropdown-menu and popup-menu instead.
#If using these 2 below change their values in line 510 & 511 aswell
popup_menu = { opacity = 0.8; }
dropdown_menu = { opacity = 0.8; }
# Let inactive opacity set by -i override the '_NET_WM_OPACITY' values of windows.
# inactive-opacity-override = true
inactive-opacity-override = false;
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
active-opacity = 1.0;
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
# inactive-dim = 0.0
# Specify a list of conditions of windows that should always be considered focused.
# focus-exclude = []
focus-exclude = [
"class_g = 'Cairo-clock'",
"class_g = 'Bar'", # lemonbar
"class_g = 'slop'" # maim
];
# Use fixed inactive dim value, instead of adjusting according to window opacity.
# inactive-dim-fixed = 1.0
# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
# like `50:name *= "Firefox"`. picom-trans is recommended over this.
# Note we don't make any guarantee about possible conflicts with other
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
# example:
# opacity-rule = [ "80:class_g = 'URxvt'" ];
#
# opacity-rule = []
opacity-rule = [
"80:class_g = 'Bar'", # lemonbar
"100:class_g = 'slop'", # maim
"100:class_g = 'XTerm'",
"100:class_g = 'URxvt'",
"100:class_g = 'kitty'",
"100:class_g = 'Alacritty'",
"80:class_g = 'Polybar'",
"100:class_g = 'code-oss'",
"100:class_g = 'Meld'",
"70:class_g = 'TelegramDesktop'",
"90:class_g = 'Joplin'",
"100:class_g = 'firefox'",
"100:class_g = 'Thunderbird'",
#"70:class_g = 'kitty' && !focused",
#"90:class_g = 'kitty' && focused",
];
#################################
# Background-Blurring #
#################################
# Parameters for background blurring, see the *BLUR* section for more information.
# blur-method =
# blur-size = 12
#
# blur-deviation = false
# Blur background of semi-transparent / ARGB windows.
# Bad in performance, with driver-dependent behavior.
# The name of the switch may change without prior notifications.
#
# blur-background = true;
# Blur background of windows when the window frame is not opaque.
# Implies:
# blur-background
# Bad in performance, with driver-dependent behavior. The name may change.
#
# blur-background-frame = false;
# Use fixed blur strength rather than adjusting according to window opacity.
# blur-background-fixed = false;
# Specify the blur convolution kernel, with the following format:
# example:
# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
#
# blur-kern = ''
# blur-kern = "3x3box";
blur: {
# requires: https://github.com/ibhagwan/picom
method = "dual_kawase";
#method = "kernel";
strength = 5;
# deviation = 1.0;
# kernel = "11x11gaussian";
background = false;
background-frame = false;
background-fixed = false;
kern = "3x3box";
}
# Exclude conditions for background blur.
blur-background-exclude = [
#"window_type = 'dock'",
#"window_type = 'desktop'",
#"class_g = 'kitty'",
#
# prevents picom from blurring the background
# when taking selection screenshot with `main`
# https://github.com/naelstrof/maim/issues/130
"class_g = 'slop'",
"_GTK_FRAME_EXTENTS@:c"
];
#################################
# General Settings #
#################################
# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
# daemon = false
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
# `xrender` is the default one.
#
experimental-backends = true;
backend = "glx";
#backend = "xrender";
# Enable/disable VSync.
# vsync = false
vsync = true
# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
# dbus = false
# Try to detect WM windows (a non-override-redirect window with no
# child that has 'WM_STATE') and mark them as active.
#
# mark-wmwin-focused = false
mark-wmwin-focused = true;
# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
# mark-ovredir-focused = false
mark-ovredir-focused = true;
# Try to detect windows with rounded corners and don't consider them
# shaped windows. The accuracy is not very high, unfortunately.
#
# detect-rounded-corners = false
detect-rounded-corners = true;
# Detect '_NET_WM_OPACITY' on client windows, useful for window managers
# not passing '_NET_WM_OPACITY' of client windows to frame windows.
#
# detect-client-opacity = false
detect-client-opacity = true;
# Specify refresh rate of the screen. If not specified or 0, picom will
# try detecting this with X RandR extension.
#
# refresh-rate = 60
refresh-rate = 0
# Limit picom to repaint at most once every 1 / 'refresh_rate' second to
# boost performance. This should not be used with
# vsync drm/opengl/opengl-oml
# as they essentially does sw-opti's job already,
# unless you wish to specify a lower refresh rate than the actual value.
#
# sw-opti =
# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
# provided that the WM supports it.
#
# use-ewmh-active-win = false
# Unredirect all windows if a full-screen opaque window is detected,
# to maximize performance for full-screen windows. Known to cause flickering
# when redirecting/unredirecting windows. paint-on-overlay may make the flickering less obvious.
#
# unredir-if-possible = false
# Delay before unredirecting the window, in milliseconds. Defaults to 0.
# unredir-if-possible-delay = 0
# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
# unredir-if-possible-exclude = []
# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
# in the same group focused at the same time.
#
# detect-transient = false
detect-transient = true
# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
# group focused at the same time. 'WM_TRANSIENT_FOR' has higher priority if
# detect-transient is enabled, too.
#
# detect-client-leader = false
detect-client-leader = true
# Resize damaged region by a specific number of pixels.
# A positive value enlarges it while a negative one shrinks it.
# If the value is positive, those additional pixels will not be actually painted
# to screen, only used in blur calculation, and such. (Due to technical limitations,
# with use-damage, those pixels will still be incorrectly painted to screen.)
# Primarily used to fix the line corruption issues of blur,
# in which case you should use the blur radius value here
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
# with a 5x5 one you use `--resize-damage 2`, and so on).
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
#
# resize-damage = 1
# Specify a list of conditions of windows that should be painted with inverted color.
# Resource-hogging, and is not well tested.
#
# invert-color-include = []
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
# Might cause incorrect opacity when rendering transparent content (but never
# practically happened) and may not work with blur-background.
# My tests show a 15% performance boost. Recommended.
#
# glx-no-stencil = false
# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes,
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
# Recommended if it works.
#
# glx-no-rebind-pixmap = false
# Disable the use of damage information.
# This cause the whole screen to be redrawn everytime, instead of the part of the screen
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
# The opposing option is use-damage
#
# no-use-damage = false
#use-damage = true (Causing Weird Black semi opaque rectangles when terminal is opened)
#Changing use-damage to false fixes the problem
use-damage = false
# Use X Sync fence to sync clients' draw calls, to make sure all draw
# calls are finished before picom starts drawing. Needed on nvidia-drivers
# with GLX backend for some users.
#
# xrender-sync-fence = false
# GLX backend: Use specified GLSL fragment shader for rendering window contents.
# See `compton-default-fshader-win.glsl` and `compton-fake-transparency-fshader-win.glsl`
# in the source tree for examples.
#
# glx-fshader-win = ''
# Force all windows to be painted with blending. Useful if you
# have a glx-fshader-win that could turn opaque pixels transparent.
#
# force-win-blend = false
# Do not use EWMH to detect fullscreen windows.
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
#
# no-ewmh-fullscreen = false
# Dimming bright windows so their brightness doesn't exceed this set value.
# Brightness of a window is estimated by averaging all pixels in the window,
# so this could comes with a performance hit.
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
#
# max-brightness = 1.0
# Make transparent windows clip other windows like non-transparent windows do,
# instead of blending on top of them.
#
# transparent-clipping = false
# Set the log level. Possible values are:
# "trace", "debug", "info", "warn", "error"
# in increasing level of importance. Case doesn't matter.
# If using the "TRACE" log level, it's better to log into a file
# using *--log-file*, since it can generate a huge stream of logs.
#
# log-level = "debug"
log-level = "info";
# Set the log file.
# If *--log-file* is never specified, logs will be written to stderr.
# Otherwise, logs will to written to the given file, though some of the early
# logs might still be written to the stderr.
# When setting this option from the config file, it is recommended to use an absolute path.
#
# log-file = '/path/to/your/log/file'
# Show all X errors (for debugging)
# show-all-xerrors = false
# Write process ID to a file.
# write-pid-path = '/path/to/your/log/file'
# Window type settings
#
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
# "tooltip", "notification", "combo", and "dnd".
#
# Following per window-type options are available: ::
#
# fade, shadow:::
# Controls window-type-specific shadow and fade settings.
#
# opacity:::
# Controls default opacity of the window type.
#
# focus:::
# Controls whether the window of this type is to be always considered focused.
# (By default, all window types except "normal" and "dialog" has this on.)
#
# full-shadow:::
# Controls whether shadow is drawn under the parts of the window that you
# normally won't be able to see. Useful when the window has parts of it
# transparent, and you want shadows in those areas.
#
# redir-ignore:::
# Controls whether this type of windows should cause screen to become
# redirected again after been unredirected. If you have unredir-if-possible
# set, and doesn't want certain window to cause unnecessary screen redirection,
# you can set this to `true`.
#
wintypes:
{
normal = { fade = false; shadow = false; }
tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
dock = { shadow = false; }
dnd = { shadow = false; }
popup_menu = { opacity = 0.8; }
dropdown_menu = { opacity = 0.8; }
};

16
.config/polybar/colors.ini Executable file
View File

@ -0,0 +1,16 @@
[colors]
background = #99282a36
background-alt = #bd93f9
foreground = #f8f8f2
foreground-alt = #ff79c6
primary = #dbdbbd
secondary = #50fa7b
alert = #ff5555
cyan = #8be9fd
green = #50fa7b
orange = #ffb86c
pink = #ff79c6
purple = #bd93f9
red = #ff5555
yellow = #f1fa8c

500
.config/polybar/config.ini Executable file
View File

@ -0,0 +1,500 @@
; Global WM Settings
[global/wm]
; Adjust the _NET_WM_STRUT_PARTIAL top value
; Used for top aligned bars
margin-bottom = 0
; Adjust the _NET_WM_STRUT_PARTIAL bottom value
; Used for bottom aligned bars
margin-top = 0
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
;; File Inclusion
; include an external file, like module file, etc.
include-file = ~/.config/polybar/colors.ini
include-file = ~/.config/polybar/modules.ini
include-file = ~/.config/polybar/custom/modules.ini
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
;; Bar Settings
[bar/top]
; Use either of the following command to list available outputs:
; If unspecified, the application will pick the first one it finds.
; $ polybar -m | cut -d ':' -f 1
; $ xrandr -q | grep " connected" | cut -d ' ' -f1
monitor = ${env:MONITOR}
; Use the specified monitor as a fallback if the main one is not found.
monitor-fallback =
; Require the monitor to be in connected state
; XRandR sometimes reports my monitor as being disconnected (when in use)
monitor-strict = false
; Tell the Window Manager not to configure the window.
; Use this to detach the bar if your WM is locking its size/position.
override-redirect = false
; Put the bar at the bottom of the screen
bottom = false
; Prefer fixed center position for the `modules-center` block
; When false, the center position will be based on the size of the other blocks.
fixed-center = true
; Dimension defined as pixel value (e.g. 35) or percentage (e.g. 50%),
; the percentage can optionally be extended with a pixel offset like so:
; 50%:-10, this will result in a width or height of 50% minus 10 pixels
width = 100%
height = 30
; Offset defined as pixel value (e.g. 35) or percentage (e.g. 50%)
; the percentage can optionally be extended with a pixel offset like so:
; 50%:-10, this will result in an offset in the x or y direction
; of 50% minus 10 pixels
offset-x = 0%
offset-y = 0%
; Background ARGB color (e.g. #f00, #ff992a, #ddff1023)
background = ${colors.background}
; Foreground ARGB color (e.g. #f00, #ff992a, #ddff1023)
foreground = ${colors.foreground}
; Background gradient (vertical steps)
; background-[0-9]+ = #aarrggbb
;;background-0 =
; Value used for drawing rounded corners
; Note: This shouldn't be used together with border-size because the border
; doesn't get rounded
; Individual top/bottom values can be defined using:
; radius-{top,bottom}
radius-top = 0.0
radius-bottom = 0.0
; Under-/overline pixel size and argb color
; Individual values can be defined using:
; {overline,underline}-size
; {overline,underline}-color
line-size = 2
line-color = ${colors.primary}
; Values applied to all borders
; Individual side values can be defined using:
; border-{left,top,right,bottom}-size
; border-{left,top,right,bottom}-color
; The top and bottom borders are added to the bar height, so the effective
; window height is:
; height + border-top-size + border-bottom-size
; Meanwhile the effective window width is defined entirely by the width key and
; the border is placed withing this area. So you effectively only have the
; following horizontal space on the bar:
; width - border-right-size - border-left-size
border-size = 0
border-bottom-color = ${colors.primary}
; Number of spaces to add at the beginning/end of the bar
; Individual side values can be defined using:
; padding-{left,right}
padding-left = 1
padding-right = 1
; Number of spaces to add before/after each module
; Individual side values can be defined using:
; module-margin-{left,right}
module-margin-left = 2
module-margin-right = 2
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
; Fonts are defined using <font-name>;<vertical-offset>
; Font names are specified using a fontconfig pattern.
; font-0 = NotoSans-Regular:size=8;2
; font-1 = MaterialIcons:size=10
; font-2 = Termsynu:size=8;-1
; font-3 = FontAwesome:size=10
; See the Fonts wiki page for more details
font-0 = "NotoSans Nerd Font:size=11;0"
font-1 = "FiraCode Nerd Font:size=11;3"
; Modules are added to one of the available blocks
; modules-left = cpu ram
; modules-center = xwindow xbacklight
; modules-right = ipc clock
modules-left = bspwm xwindow
modules-right = battery pulseaudio powermenu
modules-center = date
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
; The separator will be inserted between the output of each module
separator =
; Opacity value between 0.0 and 1.0 used on fade in/out
dim-value = 1.0
; Value to be used to set the WM_NAME atom
; If the value is empty or undefined, the atom value
; will be created from the following template: polybar-[BAR]_[MONITOR]
; NOTE: The placeholders are not available for custom values
wm-name =
; Locale used to localize various module data (e.g. date)
; Expects a valid libc locale, for example: sv_SE.UTF-8
locale =
; Position of the system tray window
; If empty or undefined, tray support will be disabled
; NOTE: A center aligned tray will cover center aligned modules
;
; Available positions:
; left
; center
; right
; none
tray-position = right
; If true, the bar will not shift its
; contents when the tray changes
tray-detached = false
; Tray icon max size
tray-maxsize = 16
; Background color for the tray container
; ARGB color (e.g. #f00, #ff992a, #ddff1023)
; By default the tray container will use the bar
; background color.
tray-background = ${colors.background}
; Tray offset defined as pixel value (e.g. 35) or percentage (e.g. 50%)
tray-offset-x = 0
tray-offset-y = 0
; Pad the sides of each tray icon
tray-padding = 2
; Scale factor for tray clients
tray-scale = 1.0
; Restack the bar window and put it above the
; selected window manager's root
;
; Fixes the issue where the bar is being drawn
; on top of fullscreen window's
;
; Currently supported WM's:
; bspwm
; i3 (requires: `override-redirect = true`)
wm-restack = bspwm
; Set a DPI values used when rendering text
; This only affects scalable fonts
; dpi =
; Enable support for inter-process messaging
; See the Messaging wiki page for more details.
enable-ipc = true
; Fallback click handlers that will be called if
; there's no matching module handler found.
click-left =
click-middle =
click-right =
;;scroll-up =
;;scroll-down =
double-click-left =
double-click-middle =
double-click-right =
; Requires polybar to be built with xcursor support (xcb-util-cursor)
; Possible values are:
; - default : The default pointer as before, can also be an empty string (default)
; - pointer : Typically in the form of a hand
; - ns-resize : Up and down arrows, can be used to indicate scrolling
cursor-click = pointer
cursor-scroll = ns-resize
;; WM Workspace Specific
; bspwm
;;scroll-up = #bspwm.next
;;scroll-down = #bspwm.prev
;;scroll-up = bspc desktop -f next.local
;;scroll-down = bspc desktop -f prev.local
;i3
;;scroll-up = i3wm-wsnext
;;scroll-down = i3wm-wspre
;;scroll-up = i3-msg workspace next_on_output
;;scroll-down = i3-msg workspace prev_on_output
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
[bar/bottom]
; Use either of the following command to list available outputs:
; If unspecified, the application will pick the first one it finds.
; $ polybar -m | cut -d ':' -f 1
; $ xrandr -q | grep " connected" | cut -d ' ' -f1
monitor = ${env:MONITOR}
; Use the specified monitor as a fallback if the main one is not found.
monitor-fallback =
; Require the monitor to be in connected state
; XRandR sometimes reports my monitor as being disconnected (when in use)
monitor-strict = false
; Tell the Window Manager not to configure the window.
; Use this to detach the bar if your WM is locking its size/position.
override-redirect = false
; Put the bar at the bottom of the screen
bottom = true
; Prefer fixed center position for the `modules-center` block
; When false, the center position will be based on the size of the other blocks.
fixed-center = true
; Dimension defined as pixel value (e.g. 35) or percentage (e.g. 50%),
; the percentage can optionally be extended with a pixel offset like so:
; 50%:-10, this will result in a width or height of 50% minus 10 pixels
width = 100%
height = 30
; Offset defined as pixel value (e.g. 35) or percentage (e.g. 50%)
; the percentage can optionally be extended with a pixel offset like so:
; 50%:-10, this will result in an offset in the x or y direction
; of 50% minus 10 pixels
offset-x = 0%
offset-y = 0%
; Background ARGB color (e.g. #f00, #ff992a, #ddff1023)
background = ${colors.background}
; Foreground ARGB color (e.g. #f00, #ff992a, #ddff1023)
foreground = ${colors.foreground}
; Background gradient (vertical steps)
; background-[0-9]+ = #aarrggbb
;;background-0 =
; Value used for drawing rounded corners
; Note: This shouldn't be used together with border-size because the border
; doesn't get rounded
; Individual top/bottom values can be defined using:
; radius-{top,bottom}
radius-top = 0.0
radius-bottom = 0.0
; Under-/overline pixel size and argb color
; Individual values can be defined using:
; {overline,underline}-size
; {overline,underline}-color
line-size = 2
line-color = ${colors.primary}
; Values applied to all borders
; Individual side values can be defined using:
; border-{left,top,right,bottom}-size
; border-{left,top,right,bottom}-color
; The top and bottom borders are added to the bar height, so the effective
; window height is:
; height + border-top-size + border-bottom-size
; Meanwhile the effective window width is defined entirely by the width key and
; the border is placed withing this area. So you effectively only have the
; following horizontal space on the bar:
; width - border-right-size - border-left-size
border-size = 0
border-bottom-color = ${colors.primary}
; Number of spaces to add at the beginning/end of the bar
; Individual side values can be defined using:
; padding-{left,right}
padding-left = 1
padding-right = 1
; Number of spaces to add before/after each module
; Individual side values can be defined using:
; module-margin-{left,right}
module-margin-left = 3
module-margin-right = 3
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
; Fonts are defined using <font-name>;<vertical-offset>
; Font names are specified using a fontconfig pattern.
; font-0 = NotoSans-Regular:size=8;2
; font-1 = MaterialIcons:size=10
; font-2 = Termsynu:size=8;-1
; font-3 = FontAwesome:size=10
; See the Fonts wiki page for more details
font-0 = "NotoSans Nerd Font:size=11;0"
; Modules are added to one of the available blocks
; modules-left = cpu ram
; modules-center = xwindow xbacklight
; modules-right = ipc clock
modules-left = cpu memory
modules-center = gme
modules-right = wlan
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
; The separator will be inserted between the output of each module
separator =
; Opacity value between 0.0 and 1.0 used on fade in/out
dim-value = 1.0
; Value to be used to set the WM_NAME atom
; If the value is empty or undefined, the atom value
; will be created from the following template: polybar-[BAR]_[MONITOR]
; NOTE: The placeholders are not available for custom values
wm-name =
; Locale used to localize various module data (e.g. date)
; Expects a valid libc locale, for example: sv_SE.UTF-8
locale =
; Position of the system tray window
; If empty or undefined, tray support will be disabled
; NOTE: A center aligned tray will cover center aligned modules
;
; Available positions:
; left
; center
; right
; none
tray-position = right
; If true, the bar will not shift its
; contents when the tray changes
tray-detached = false
; Tray icon max size
tray-maxsize = 16
; Background color for the tray container
; ARGB color (e.g. #f00, #ff992a, #ddff1023)
; By default the tray container will use the bar
; background color.
tray-background = ${colors.background}
; Tray offset defined as pixel value (e.g. 35) or percentage (e.g. 50%)
tray-offset-x = 0
tray-offset-y = 0
; Pad the sides of each tray icon
tray-padding = 2
; Scale factor for tray clients
tray-scale = 1.0
; Restack the bar window and put it above the
; selected window manager's root
;
; Fixes the issue where the bar is being drawn
; on top of fullscreen window's
;
; Currently supported WM's:
; bspwm
; i3 (requires: `override-redirect = true`)
wm-restack = bspwm
; Set a DPI values used when rendering text
; This only affects scalable fonts
; dpi =
; Enable support for inter-process messaging
; See the Messaging wiki page for more details.
enable-ipc = true
; Fallback click handlers that will be called if
; there's no matching module handler found.
click-left =
click-middle =
click-right =
scroll-up =
scroll-down =
double-click-left =
double-click-middle =
double-click-right =
; Requires polybar to be built with xcursor support (xcb-util-cursor)
; Possible values are:
; - default : The default pointer as before, can also be an empty string (default)
; - pointer : Typically in the form of a hand
; - ns-resize : Up and down arrows, can be used to indicate scrolling
cursor-click = pointer
cursor-scroll = ns-resize
;; WM Workspace Specific
; bspwm
;;scroll-up = #bspwm.next
;;scroll-down = #bspwm.prev
;;scroll-up = bspc desktop -f prev.local
;;scroll-down = bspc desktop -f next.local
;i3
;;scroll-up = i3wm-wsnext
;;scroll-down = i3wm-wsprev
;;scroll-up = i3-msg workspace next_on_output
;;scroll-down = i3-msg workspace prev_on_output
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
;; Application Settings
[settings]
; The throttle settings lets the eventloop swallow up til X events
; if they happen within Y millisecond after first event was received.
; This is done to prevent flood of update event.
;
; For example if 5 modules emit an update event at the same time, we really
; just care about the last one. But if we wait too long for events to swallow
; the bar would appear sluggish so we continue if timeout
; expires or limit is reached.
throttle-output = 5
throttle-output-for = 10
; Time in milliseconds that the input handler will wait between processing events
;throttle-input-for = 30
; Reload upon receiving XCB_RANDR_SCREEN_CHANGE_NOTIFY events
screenchange-reload = true
; Compositing operators
; @see: https://www.cairographics.org/manual/cairo-cairo-t.html#cairo-operator-t
;;compositing-background = source
;;compositing-foreground = over
;;compositing-overline = over
;;compositing-underline = over
;;compositing-border = over
; Define fallback values used by all module formats
;format-foreground =
;format-background =
;format-underline =
;format-overline =
;format-spacing =
;format-padding =
;format-margin =
;format-offset =
; Enables pseudo-transparency for the bar
; If set to true the bar can be transparent without a compositor.
pseudo-transparency = false
;; _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

View File

@ -0,0 +1,5 @@
[module/gme]
type = custom/script
exec = ~/.config/polybar/custom/scripts/gme.sh
tail = true
click-left = kill -USR1 %pid%

View File

@ -0,0 +1,55 @@
#!/bin/bash
t=0
sleep_pid=0
toggle() {
t=$(((t + 1) % 2))
if [ "$sleep_pid" -ne 0 ]; then
kill $sleep_pid >/dev/null 2>&1
fi
}
trap "toggle" USR1
while true; do
URL="https://query1.finance.yahoo.com/v8/finance/chart/GME"
res=$(curl -sf "$URL")
close=$(jq '.["chart"]["result"][0]["meta"]["previousClose"]' <<< "$res")
current=$(jq '.["chart"]["result"][0]["meta"]["regularMarketPrice"]' <<< "$res")
shares="1.650981"
buy="214"
if [[ $t -eq 0 ]]; then
percent_long=$(bc <<< "scale=10;$current/$buy*100-100")
percent=$(LC_NUMERIC="en_US.UTF8" printf "%.2f" "$percent_long")
profit_long=$(bc <<< "scale=10;$shares*$current - $shares*$buy")
profit=$(LC_NUMERIC="en_US.UTF-8" printf "%.2f" "$profit_long")
output="Overall:"
else
percent_long=$(bc <<< "scale=10;$current/$close*100-100")
percent=$(LC_NUMERIC="en_US.UTF-8" printf "%.2f" "$percent_long")
profit_long=$(bc <<< "scale=10;$shares*$current - $shares*$close")
profit=$(LC_NUMERIC="en_US.UTF-8" printf "%.2f" "$profit_long")
output="Today:"
fi
if [[ "$percent" =~ "-" ]]; then
output="$output$percent%"
else
output="$output$percent%"
fi
if [[ "$profit" =~ "-" ]]; then
output="$output Loss: $profit\$"
else
output="$output Gain: $profit\$"
fi
echo "$output"
sleep 2 &
sleep_pid=$!
wait
done

17
.config/polybar/launch.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
# Terminate already running bar instances
killall -q polybar
# Wait until the processes have been shut down
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
while ! pgrep -x bspwm >/dev/null; do sleep 1; done
# Launch Polybar
for m in $(polybar --list-monitors | cut -d":" -f1); do
MONITOR=$m polybar --reload top -c ~/.config/polybar/config.ini &
MONITOR=$m polybar --reload bottom -c ~/.config/polybar/config.ini &
done
echo "Polybar launched..."

232
.config/polybar/modules.ini Executable file
View File

@ -0,0 +1,232 @@
[module/battery]
type= internal/battery
battery= BATT
adapter= ACAD
; see "man date" for details on how to format the time string
; NOTE: if you want to use syntax tags here you need to use %%{...}
; Default: %H:%M:%S
time-format = %H:%M
; Available tags:
; <label-charging> (default)
; <bar-capacity>
; <ramp-capacity>
; <animation-charging>
format-charging = <animation-charging> <label-charging>
; Available tags:
; <label-discharging> (default)
; <bar-capacity>
; <ramp-capacity>
; <animation-discharging>
format-discharging = <ramp-capacity> <label-discharging>
; Available tags:
; <label-full> (default)
; <bar-capacity>
; <ramp-capacity>
;format-full = <ramp-capacity> <label-full>
; Available tokens:
; %percentage% (default) - is set to 100 if full-at is reached
; %percentage_raw%
; %time%
; %consumption% (shows current charge rate in watts)
label-charging = Charging %percentage%%
; Available tokens:
; %percentage% (default) - is set to 100 if full-at is reached
; %percentage_raw%
; %time%
; %consumption% (shows current discharge rate in watts)
label-discharging = Discharging %percentage%%
; Available tokens:
; %percentage% (default) - is set to 100 if full-at is reached
; %percentage_raw%
label-full = Fully charged
; Only applies if <ramp-capacity> is used
ramp-capacity-0 =
ramp-capacity-1 =
ramp-capacity-2 =
ramp-capacity-3 =
ramp-capacity-4 =
; Only applies if <bar-capacity> is used
bar-capacity-width = 10
; Only applies if <animation-charging> is used
animation-charging-0 =
animation-charging-1 =
animation-charging-2 =
animation-charging-3 =
animation-charging-4 =
; Framerate in milliseconds
animation-charging-framerate = 750
; Only applies if <animation-discharging> is used
animation-discharging-0 =
animation-discharging-1 =
animation-discharging-2 =
animation-discharging-3 =
animation-discharging-4 =
; Framerate in milliseconds
animation-discharging-framerate = 500
[module/xwindow]
type = internal/xwindow
label = %title:0:30:...%
[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-prefix-underline = ${colors.secondary}
label-layout = %layout%
label-layout-underline = ${colors.secondary}
label-indicator-padding = 2
label-indicator-margin = 1
label-indicator-background = ${colors.secondary}
label-indicator-underline = ${colors.secondary}
[module/bspwm]
type = internal/bspwm
reverse-scroll = false
label-focused = %name%
label-focused-background = ${colors.pink}
focused-foreground = ${colors.foreground}
label-focused-padding = 1
label-occupied = %name%
label-occupied-padding = 1
label-occupied-foreground = ${colors.green}
label-urgent = %name%!
label-urgent-background = ${colors.red}
label-urgent-padding = 1
label-empty = %name%
label-empty-foreground = ${colors.foreground-alt}
label-empty-padding = 1
label-separator = "|"
label-separator-padding = 0
pin-workspaces = true
[module/cpu]
type = internal/cpu
interval = 2
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.red}
label = %percentage:2%%
click-left=kitty bpytop
[module/memory]
type = internal/memory
interval = 2
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = ${colors.green}
label = %percentage_used%%
click-left=kitty bpytop
[module/wlan]
type = internal/network
interface = wlan0
interval = 3.0
format-connected-underline = ${colors.purple}
label-connected = "%{T2}%{T-}%upspeed% %{T2}%{T-}%downspeed%"
[module/date]
type = internal/date
interval = 5
date =
date-alt = " %Y-%m-%d"
time = %H:%M
time-alt = %H:%M:%S
format-prefix =
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #0a6cf5
label = %date% %time%
[module/pulseaudio]
type = internal/pulseaudio
format-volume = <label-volume> <bar-volume>
label-volume = %percentage%%
label-volume-foreground = ${root.foreground}
label-muted = "%{T2}%{T-} muted"
label-muted-foreground = ${colors.foreground-alt}
bar-volume-width = 11
bar-volume-foreground-0 = ${colors.green}
bar-volume-foreground-1 = ${colors.green}
bar-volume-foreground-2 = ${colors.green}
bar-volume-foreground-3 = ${colors.green}
bar-volume-foreground-4 = ${colors.green}
bar-volume-foreground-5 = ${colors.orange}
bar-volume-foreground-6 = ${colors.orange}
bar-volume-foreground-7 = ${colors.orange}
bar-volume-foreground-8 = ${colors.red}
bar-volume-gradient = true
bar-volume-indicator = |
bar-volume-indicator-font = 2
bar-volume-fill =
bar-volume-fill-font = 2
bar-volume-empty =
bar-volume-empty-font = 2
bar-volume-empty-foreground = ${colors.foreground}
click-middle=pavucontrol
click-right=~/bin/cycle_sinks.sh
[module/powermenu]
type = custom/menu
expand-right = true
format-spacing = 1
label-open = "%{T2}%{T-} "
label-open-foreground = ${colors.foreground-alt}
label-close = "%{T2}%{T-} cancel"
label-close-foreground = ${colors.red}
label-separator = |
label-separator-foreground = ${colors.foreground-alt}
menu-0-0 = "%{T2}%{T-} reboot"
menu-0-0-exec = menu-open-1
menu-0-1 = "%{T2}%{T-} power off"
menu-0-1-exec = menu-open-2
menu-0-2 = "%{T2}%{T-} hibernate"
menu-0-2-exec = menu-open-3
menu-1-0 = "%{T2}%{T-} reboot"
menu-1-0-exec = systemctl reboot
menu-1-1 = cancel
menu-1-1-exec = menu-open-0
menu-2-0 = "%{T2}%{T-} power off"
menu-2-0-exec = systemctl poweroff
menu-2-1 = cancel
menu-2-1-exec = menu-open-0
menu-3-0 = "%{T2}%{T-} hibernate"
menu-3-0-exec = systemctl hibernate
menu-3-1 = cancel
menu-3-1-exec = menu-open-0

6
.config/rofi/config.rasi Executable file
View File

@ -0,0 +1,6 @@
configuration {
modi: "window,drun,ssh,combi";
font: "FiraCode Nerd Font 14444";
combi-modi: "window,drun,ssh";
theme: "~/.config/rofi/dracula.rasi";
}

122
.config/rofi/dracula.rasi Executable file
View File

@ -0,0 +1,122 @@
/*Dracula theme based on the Purple official rofi theme*/
* {
font: "Jetbrains Mono 12";
foreground: #f8f8f2;
background-color: #282a36;
active-background: #6272a4;
urgent-background: #ff5555;
selected-background: @active-background;
selected-urgent-background: @urgent-background;
selected-active-background: @active-background;
separatorcolor: @active-background;
bordercolor: @active-background;
}
#window {
background-color: @background;
border: 1;
border-radius: 0;
border-color: @bordercolor;
padding: 5;
}
#mainbox {
border: 0;
padding: 0;
}
#message {
border: 1px dash 0px 0px ;
border-color: @separatorcolor;
padding: 1px ;
}
#textbox {
text-color: @foreground;
}
#listview {
fixed-height: 0;
border: 2px dash 0px 0px ;
border-color: @bordercolor;
spacing: 2px ;
scrollbar: false;
padding: 2px 0px 0px ;
}
#element {
border: 0;
padding: 1px ;
}
#element.normal.normal {
background-color: @background;
text-color: @foreground;
}
#element.normal.urgent {
background-color: @urgent-background;
text-color: @urgent-foreground;
}
#element.normal.active {
background-color: @active-background;
text-color: @foreground;
}
#element.selected.normal {
background-color: @selected-background;
text-color: @foreground;
}
#element.selected.urgent {
background-color: @selected-urgent-background;
text-color: @foreground;
}
#element.selected.active {
background-color: @selected-active-background;
text-color: @foreground;
}
#element.alternate.normal {
background-color: @background;
text-color: @foreground;
}
#element.alternate.urgent {
background-color: @urgent-background;
text-color: @foreground;
}
#element.alternate.active {
background-color: @active-background;
text-color: @foreground;
}
#scrollbar {
width: 2px ;
border: 0;
handle-width: 8px ;
padding: 0;
}
#sidebar {
border: 2px dash 0px 0px ;
border-color: @separatorcolor;
}
#button.selected {
background-color: @selected-background;
text-color: @foreground;
}
#inputbar {
spacing: 0;
text-color: @foreground;
padding: 1px ;
}
#case-indicator {
spacing: 0;
text-color: @foreground;
}
#entry {
spacing: 0;
text-color: @foreground;
}
#prompt {
spacing: 0;
text-color: @foreground;
}
#inputbar {
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
}
#textbox-prompt-colon {
expand: false;
str: ":";
margin: 0px 0.3em 0em 0em ;
text-color: @foreground;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
.config/spicetify/Backup/hub.spa Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
.config/spicetify/Backup/show.spa Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
.config/spicetify/Backup/xpui.spa Executable file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,359 @@
// Hide popover message
document.getElementById("popover-container").style.height = 0;
let appHiddenList = [];
try {
const rawList = JSON.parse(localStorage.getItem("sidebar-app-hide-list"));
if (!Array.isArray(rawList)) throw 0;
appHiddenList.push(...rawList);
} catch {
localStorage.setItem("sidebar-app-hide-list", "[]")
}
new Spicetify.ContextMenu.Item(
"Hide",
([uri]) => {
appHiddenList.push(uri.replace("spotify:special:sidebarapp:", ""));
localStorage.setItem("sidebar-app-hide-list", JSON.stringify(appHiddenList));
window.location.reload();
},
([uri]) => uri.startsWith("spotify:special:sidebarapp:")
).register();
for (const app of appHiddenList) {
new Spicetify.ContextMenu.Item(
"Show " + app.replace("spotify:app:", ""),
() => {
appHiddenList = appHiddenList.filter(item => item !== app);
localStorage.setItem("sidebar-app-hide-list", JSON.stringify(appHiddenList));
window.location.reload();
},
([uri]) => uri.startsWith("spotify:special:sidebarapp:")
).register();
}
function waitForElement(els, func, timeout = 100) {
const queries = els.map(el => document.querySelector(el));
if (queries.every(a => a)) {
func(queries);
} else if (timeout > 0) {
setTimeout(waitForElement, 300, els, func, --timeout);
}
}
waitForElement([".LeftSidebar", ".LeftSidebar__section--rootlist .SidebarList__list"], (queries) => {
/** Replace Playlist name with their pictures */
function loadPlaylistImage() {
const sidebarItem = queries[1].childNodes;
for (let i = 0; i < sidebarItem.length; i++) {
const item = sidebarItem[i];
let link = item.getElementsByTagName("a");
if (!link || !link[0]) continue;
link = link[0];
let href = link.href.replace("app:", "");
if (href.indexOf("playlist-folder") != -1) {
const button = item.getElementsByTagName("button")[0]
button.classList.add("Button", "Button--style-icon-background", "Button--size-28",);
item.setAttribute("data-tooltip", item.innerText);
link.firstChild.innerText = item.innerText.slice(0, 3);
continue;
}
if (href.indexOf("chart") != -1) {
href = href.replace("chart:", "user:spotifycharts:playlist:");
}
Spicetify.CosmosAPI.resolver.get({
url: `sp://core-playlist/v1/playlist/${href}/metadata`,
body: { policy: { picture: true } },
}, (err, res) => {
if (err) return;
const meta = res.getJSONBody().metadata;
item.firstChild.className = "playlist-picture"
item.firstChild.style.backgroundImage = `url(${meta.picture})`;
item.firstChild.setAttribute("data-tooltip", item.textContent);
});
}
}
loadPlaylistImage();
new MutationObserver(loadPlaylistImage)
.observe(queries[1], {childList: true});
/** Replace Apps name with icons */
/** List of avaiable icons to use:
addfollow filter more skipforward15
addfollowers flag newradio sort
addsuggestedsong follow notifications sortdown
album fullscreen offline sortup
artist gears pause spotifylogo
attach headphones play star
block heart playlist stations
bluetooth helpcircle plus subtitles
browse home podcasts tag
camera inbox queue time
check instagram radio track
collection lightning refresh trending
copy localfile released user
devices locked repeat video
discover lyrics repeatonce volume
download menu search watch
downloaded messages share x
edit mic shuffle helpcircle
email minimise skip
events mix skipback15
*/
function replaceTextWithIcon(el, iconName) {
const href = el.parentNode.href;
if (appHiddenList.indexOf(href) !== -1) {
let parent = el;
while (parent.tagName !== "LI") {
parent = parent.parentNode;
}
parent.remove();
return;
}
if (iconName) {
el.classList.add(`spoticon-${iconName}-24`);
}
el.parentNode.setAttribute("data-tooltip", el.innerText);
el.parentNode.setAttribute("data-contextmenu", "");
el.parentNode.setAttribute("data-uri", "spotify:special:sidebarapp:" + href);
el.innerText = "";
}
queries[0].querySelectorAll(".LeftSidebar__section:not(.LeftSidebar__section--rootlist) [href]")
.forEach(item => {
let icon = ((app) => {switch (app) {
case "genius": return "lyrics";
case "JQBX": return "addsuggestedsong";
case "bookmark": return "tag";
case "reddit": return "discover";
case "made-for-you": return "user";
case "recently-played": return "time";
case "collection-songs": return "heart";
case "collection:albums": return "album";
case "collection:artists": return "artist";
case "collection:podcasts": return "podcasts";
case "playlist:local-files": return "localfile";
case "stations": return "stations";
/**
* Uncomment 3 lines below if you're using old version of Spotify that
* does not have Home/Browse/Radio app icons by default.
*/
//case "home": return "home";
//case "browse": return "browse";
//case "radio": return "radio";
}})(item.href.replace("spotify:app:", ""));
replaceTextWithIcon(item.firstChild, icon);
});
waitForElement([`[href="spotify:app:recently-played"]`], ([query]) => {
replaceTextWithIcon(query.firstChild, "time");
});
});
waitForElement(["#search-input"], (queries) => {
queries[0].setAttribute("placeholder", "");
});
waitForElement(["#main-container"], (queries) => {
const shadow = document.createElement("div");
shadow.id = "dribbblish-back-shadow";
queries[0].prepend(shadow);
});
waitForElement([".LeftSidebar"], (queries) => {
const fade = document.createElement("div");
fade.id = "dribbblish-sidebar-fade-in";
queries[0].append(fade);
});
var big_album_cover = document.querySelector('#now-playing-image-small');
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type == "attributes") {
if(big_album_cover.getAttribute("data-log-context") === "cover-large"){
document.documentElement.style.setProperty('--move_buddy_list', "250px");
}else{
document.documentElement.style.setProperty('--move_buddy_list', "0px");
}
}
});
});
function getAlbumInfo(uri) {
return new Promise((resolve) => { Spicetify.CosmosAPI.resolver.get(`hm://album/v1/album-app/album/${uri}/desktop`, (err, raw) => {
resolve(!err && raw.getJSONBody())
})})
}
function isLight(hex) {
var [r,g,b] = hexToRgb(hex).split(',').map(Number);
const brightness = ((r * 299) + (g * 587) + (b * 114)) / 1000;
return brightness > 128;
}
function hexToRgb(hex) {
var bigint = parseInt(hex.replace("#",""), 16);
var r = (bigint >> 16) & 255;
var g = (bigint >> 8) & 255;
var b = bigint & 255;
return r + "," + g + "," + b;
}
const LightenDarkenColor = (h, p) => '#' + [1, 3, 5].map(s => parseInt(h.substr(s, 2), 16)).map(c => parseInt((c * (100 + p)) / 100)).map(c => (c < 255 ? c : 255)).map(c => c.toString(16).padStart(2, '0')).join('');
let nearArtistSpan = null
let mainColor = getComputedStyle(document.documentElement).getPropertyValue('--modspotify_main_fg')
let mainColor2 = getComputedStyle(document.documentElement).getPropertyValue('--modspotify_main_bg')
let isLightBg = isLight(mainColor2)
waitForElement([".artist"], (queries) => {
nearArtistSpan = document.createElement("span");
nearArtistSpan.id = "dribbblish-album-info";
queries[0].append(nearArtistSpan);
});
function updateColors(root) {
let colHex = mainColor
if( isLightBg ) colHex = LightenDarkenColor(colHex, -5) // vibrant color is always too bright for white bg mode
let colRGB = hexToRgb(colHex)
let darkerColHex = LightenDarkenColor(colHex, isLightBg ? 40 : -40)
let darkerColRGB = hexToRgb(darkerColHex)
root.style.setProperty('--is_light', isLightBg ? 1 : 0)
root.style.setProperty('--modspotify_main_fg', colHex)
root.style.setProperty('--modspotify_active_control_fg', colHex)
root.style.setProperty('--modspotify_secondary_bg', colHex)
//root.style.setProperty('--modspotify_pressing_button_bg', colHex)
//root.style.setProperty('--modspotify_indicator_fg_and_button_bg', colHex)
root.style.setProperty('--modspotify_pressing_fg', colHex)
root.style.setProperty('--modspotify_sidebar_indicator_and_hover_button_bg', colHex)
//root.style.setProperty('--modspotify_scrollbar_fg_and_selected_row_bg', darkerColHex)
root.style.setProperty('--modspotify_selected_button', darkerColHex)
//root.style.setProperty('--modspotify_miscellaneous_hover_bg', colHex)
root.style.setProperty('--modspotify_rgb_main_fg', colRGB)
root.style.setProperty('--modspotify_rgb_active_control_fgg', colRGB)
root.style.setProperty('--modspotify_rgb_secondary_bg', colRGB)
//root.style.setProperty('--modspotify_rgb_pressing_button_bg', colRGB)
//root.style.setProperty('--modspotify_rgb_indicator_fg_and_button_bg', colRGB)
root.style.setProperty('--modspotify_rgb_pressing_fg', colRGB)
root.style.setProperty('--modspotify_rgb_sidebar_indicator_and_hover_button_bg', colRGB)
//root.style.setProperty('--modspotify_rgb_scrollbar_fg_and_selected_row_bg', darkerColRGB)
root.style.setProperty('--modspotify_rgb_selected_button', darkerColRGB)
//root.style.setProperty('--modspotify_rgb_miscellaneous_hover_bg', colRGB)
// Also update the color of the icons for bright and white backgrounds to remain readable.
let isLightFg = isLight(colHex);
if( isLightBg ) isLightFg = !isLightFg;
iconCol = getComputedStyle(document.documentElement).getPropertyValue(isLightFg ? '--modspotify_main_bg' : '--modspotify_secondary_fg');
root.style.setProperty('--modspotify_preserve_1', iconCol);
}
function updateColorsAllIframes() {
// playing queue
if (document.querySelector("#app-queue")!=null) updateColors(document.querySelector("#app-queue").contentDocument.documentElement)
// collection (podcast, recent, etc.)
if (document.querySelector("#app-collection")!=null) updateColors(document.querySelector("#app-collection").contentDocument.documentElement)
// collection (local files)
if (document.querySelector("#app-collection-songs")!=null) updateColors(document.querySelector("#app-collection-songs").contentDocument.documentElement)
// buddy list
if (document.querySelector("#iframe-buddy-list")!=null) updateColors(document.querySelector("#iframe-buddy-list").contentDocument.documentElement)
// playlist
if (document.querySelector("#app-playlist")!=null) updateColors(document.querySelector("#app-playlist").contentDocument.documentElement)
// search
if (document.querySelector("#app-search")!=null) updateColors(document.querySelector("#app-search").contentDocument.documentElement)
// genius
if (document.querySelector("#app-genius")!=null) updateColors(document.querySelector("#app-genius").contentDocument.documentElement)
// browse
if (document.querySelector("#app-browse")!=null) updateColors(document.querySelector("#app-browse").contentDocument.documentElement)
// genre
if (document.querySelector("#app-genre")!=null) updateColors(document.querySelector("#app-genre").contentDocument.documentElement)
// artist
if (document.querySelector("#app-artist")!=null) updateColors(document.querySelector("#app-artist").contentDocument.documentElement)
// code below works but then generate many errors on page change.
frames = document.getElementsByTagName("iframe");
for (i=0; i<frames.length; ++i) {
console.log(i+". "+frames[i].id)
updateColors(frames[i].contentDocument.documentElement)
}
}
function trickHideGradient(display) {
// gradient can't be animated so hide and reshow
document.querySelector("#dribbblish-sidebar-fade-in").style.display = display
}
async function songchange() {
let album_uri = Spicetify.Player.data.track.metadata.album_uri
if (album_uri!==undefined) {
const albumInfo = await getAlbumInfo(album_uri.replace("spotify:album:", ""))
let album_date = new Date(albumInfo.year, (albumInfo.month || 1)-1, albumInfo.day|| 0)
let recent_date = new Date()
recent_date.setMonth(recent_date.getMonth() - 6)
album_date = album_date.toLocaleString('default', album_date>recent_date ? { year: 'numeric', month: 'short' } : { year: 'numeric' })
album_link = "<a title=\""+Spicetify.Player.data.track.metadata.album_title+"\" href=\""+album_uri+"\" data-uri=\""+album_uri+"\" data-interaction-target=\"album-name\" class=\"tl-cell__content\">"+Spicetify.Player.data.track.metadata.album_title+"</a>"
if (nearArtistSpan!==null)
nearArtistSpan.innerHTML = " — " + album_link + " • " + album_date
} else if (Spicetify.Player.data.track.metadata.album_track_number==0) {
// podcast
nearArtistSpan.innerText = Spicetify.Player.data.track.metadata.album_title
} else if (Spicetify.Player.data.track.metadata.is_local=="true") {
// local file
nearArtistSpan.innerText = " — " + Spicetify.Player.data.track.metadata.album_title
} else {
// When clicking a song from the homepage, songChange is fired with half empty metadata
// todo: retry only once?
setTimeout(songchange, 200)
}
document.documentElement.style.setProperty('--image_url', 'url("'+Spicetify.Player.data.track.metadata.image_url+'")')
Spicetify.colorExtractor(Spicetify.Player.data.track.uri)
.then((colors) => {
mainColor = colors['LIGHT_VIBRANT']
// Spotify returns hex colors with improper length
while( mainColor.length!=4 && mainColor.length<7 )
{ mainColor = mainColor.replace("#", "#0"); }
// main app
trickHideGradient('none') // bottom left gradient looks bad when changing color
updateColors(document.documentElement)
setTimeout(trickHideGradient, 1500, 'block') //animation lasts 1.5sec
// most pages are iframes, they need a specific color update
updateColorsAllIframes()
}, (err) => {
console.log(err)
// On startup we receive songChange too soon and colorExtractor will fail
// todo: retry only colorExtract
setTimeout(songchange, 200)
})
}
Spicetify.Player.addEventListener("songchange", songchange)
Spicetify.Player.addEventListener("appchange", ({"data": data}) => {
//console.log(data.container)
setTimeout(updateColorsAllIframes, 200)
})
// Add "About" item in profile menu
new Spicetify.Menu.Item("About", false, () => window.open("spotify:app:about")).register();

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
.about-app{display:flex;flex-direction:column;justify-content:space-between;height:100vh;width:100vw}.about-app{padding:25px 0;text-align:center}.spotify-logo{height:58px;user-select:none;-webkit-user-drag:none}.version{-webkit-user-select:text}.version{cursor:text}.upgrade-pending__download-button,.upgrade-pending__download-button:active,.upgrade-pending__download-button:focus{color:#fff;outline:none}.upgrade-pending__download-button,.upgrade-pending__download-button:active,.upgrade-pending__download-button:focus{background:none;border:0}.upgrade-prepared__restart-button,.upgrade-prepared__restart-button:active,.upgrade-prepared__restart-button:focus{color:#fff;outline:none}.upgrade-prepared__restart-button,.upgrade-prepared__restart-button:active,.upgrade-prepared__restart-button:focus{background:none;border:0}.content-providers__preamble{margin:0;padding:0}.content-providers__list{display:block;list-style:none}.content-providers__list{margin:10px 0 0}.content-providers__list-item{display:inline-block}.content-providers__list-item{padding:5px}.content-providers__provider-logo{display:block;height:30px}.content-providers__provider-logo{padding:4px}body{overflow:hidden}
/*# sourceMappingURL=about.css.map*/

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 201 61">
<path d="M48.2 27.1c-9.66-5.74-25.6-6.27-34.82-3.47-1.48.45-3.04-.4-3.5-1.87-.44-1.48.4-3.05 1.87-3.5 10.6-3.22 28.2-2.6 39.32 4 1.34.8 1.77 2.53.98 3.86-.8 1.36-2.5 1.8-3.83 1zm-3.52 9.27c-8.05-4.96-20.34-6.4-29.87-3.5-1.2.38-2.5-.32-2.9-1.55-.3-1.24.3-2.54 1.6-2.92 10.9-3.3 24.4-1.7 33.7 4 1.1.67 1.5 2.1.8 3.2s-2.13 1.45-3.23.77zm-3.02 8.02c-7.05-4.3-15.9-5.3-26.34-2.9-1 .2-2-.4-2.23-1.4-.3-1 .3-2 1.4-2.3 11.4-2.6 21.2-1.5 29.1 3.3.9.5 1.1 1.6.6 2.5-.5 1-1.7 1.24-2.6.7zM30.48.5C13.92.5.5 13.93.5 30.5s13.42 30 29.98 30c16.56 0 29.98-13.43 29.98-30 0-16.56-13.42-30-29.98-30m51.58 27.73c-5.18-1.25-6.1-2.1-6.1-3.94 0-1.8 1.62-2.9 4.03-2.9 2.3 0 4.6.9 7 2.7.1 0 .2.1.3 0 .1 0 .1-.1.2-.2l2.5-3.6c.1-.2 0-.4-.1-.5-2.9-2.3-6.2-3.5-10-3.5-5.6 0-9.5 3.3-9.5 8.1 0 5.1 3.4 7 9.2 8.4 4.9 1.2 5.8 2.2 5.8 3.9 0 1.9-1.7 3-4.4 3-3 0-5.5-1-8.3-3.4-.1-.1-.2-.1-.3-.1-.1 0-.2 0-.2.1L69.6 40c-.1.1-.1.32.04.42 3.2 2.86 7.1 4.36 11.4 4.36 6 0 9.9-3.3 9.9-8.38 0-4.3-2.6-6.67-8.9-8.2m21.3 11.98c-3.2 0-5.6-2.63-5.6-6.2 0-3.5 2.4-6.14 5.55-6.14 3.1 0 5.4 2.6 5.4 6.2.05 3.6-2.25 6.14-5.45 6.14zm-5.4-13.92v-2.4c0-.2-.2-.34-.4-.34H93c-.17 0-.33.14-.33.34v26.3c0 .2.1.35.3.35h4.6c.2 0 .3-.1.3-.3v-8.3c1.74 2 3.9 3 6.5 3 4.83 0 9.73-3.7 9.73-10.9 0-7.1-4.9-10.9-9.7-10.9-2.56 0-4.76 1.1-6.46 3.2zm22.86 7.65c0-3.6 2.5-6.2 5.8-6.2s5.9 2.6 5.9 6.2-2.42 6.1-5.8 6.2c-3.4.1-5.9-2.6-5.9-6.1zm-5.3 0c0 6 4.8 10.8 11 10.8s11.1-4.8 11.1-10.9c0-6.1-4.9-10.9-11.02-10.8-6.2.1-11.1 4.9-11.1 11zm35.4-10.6h-5v-5.2c0-.2-.2-.4-.4-.4H141c-.2 0-.35.1-.35.3v5.2h-2.24c-.1 0-.3.1-.3.3v4c0 .2.2.3.4.3h2.3v10.4c0 4.1 2 6.2 6.1 6.2 1.7 0 3.1-.3 4.4-1 .1-.1.2-.2.2-.3v-3.8c0-.1 0-.3-.1-.3-.1-.1-.3-.1-.4 0-.9.4-1.7.6-2.7.6-1.5 0-2.1-.7-2.1-2.2V28h5.1c.2 0 .3-.13.3-.3v-4c0-.2-.2-.33-.3-.33m17.78.04v-.6c0-1.9.7-2.7 2.34-2.7.93 0 1.7.2 2.6.5.1.1.2 0 .3 0 .1 0 .1-.1.1-.3v-3.9c0-.1-.1-.3-.26-.3-.93-.3-2.1-.6-3.86-.6-4.3 0-6.56 2.4-6.56 7v1h-2.24c-.2 0-.3.1-.3.3v4c0 .2.14.4.3.4h2.2v16c0 .2.2.3.4.3h4.66c.2 0 .34-.1.34-.3v-16h4.3l6.7 15.9c-.75 1.7-1.5 2-2.5 2-.8 0-1.7-.2-2.55-.7h-.3c-.1 0-.1.1-.2.2L173 49c-.07.2 0 .38.15.46 1.63.9 3.1 1.28 4.94 1.28 3.4 0 5.3-1.6 6.9-5.88l8-20.8c0-.1 0-.22-.1-.3-.1-.1-.2-.16-.3-.16H188c-.13 0-.27.1-.3.22l-4.92 14.1-5.42-14.14c-.05-.1-.18-.22-.32-.22h-7.92m-14.94 0c-.2 0-.34.14-.34.36v20.2c0 .17.15.32.34.32h4.65c.22 0 .36-.14.36-.33V23.9c0-.2-.2-.34-.4-.34zm-1-5.9c0 1.88 1.5 3.35 3.3 3.35 1.8 0 3.3-1.4 3.3-3.3 0-1.8-1.5-3.3-3.34-3.3-1.75 0-3.25 1.5-3.25 3.3zm42.9 7.95v1.1h.9c.4 0 .7-.2.7-.5s-.06-.6-.6-.6zm1.5 1.6l.9 1.3h-.7l-.9-1.2h-.8v1.2h-.67V25h1.6c.8 0 1.3.4 1.3 1.1 0 .54-.3.87-.8 1.02zM194 27c0 1.6 1.2 2.9 2.9 2.9s2.9-1.3 2.9-2.9c0-1.6-1.3-2.9-2.94-2.94C195.2 24 194 25.4 194 27zm-.4 0c0-1.8 1.16-3.34 3.26-3.33 2.03 0 3.35 1.54 3.35 3.34 0 1.8-1.5 3.4-3.3 3.4-1.9 0-3.3-1.5-3.3-3.3z" fill="#FFFFFF"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html dir="auto">
<head>
<meta charset="utf-8" />
<title>About Spotify</title>
<link rel="stylesheet" href="https://local_resource_host/css/glue.css" />
<link rel="stylesheet" href="css/about.css"><link rel="stylesheet" class="userCSS" href="https://zlink.app.spotify.com/css/user.css"></head>
<body>
<div id="root"></div>
<!-- "init.js" is served by the desktop client and provides the "window.__spotify" object. -->
<script src="init.js"></script>
<script src="about.bundle.js"></script></body>
</html>

View File

@ -0,0 +1,108 @@
{
"BundleIdentifier": "about",
"BundleType": "Application",
"BundleVersion": "1.1.55",
"VendorIdentifier": "com.spotify",
"UserInstallable": false,
"AppDescription": {
"en": "",
"ar": "",
"cs": "",
"de": "",
"el": "",
"es": "",
"es-419": "",
"fi": "",
"fr": "",
"fr-CA": "",
"he": "",
"hu": "",
"id": "",
"it": "",
"ja": "",
"ko": "",
"nl": "",
"pl": "",
"pt-BR": "",
"ru": "",
"sv": "",
"th": "",
"tr": "",
"vi": "",
"zh-Hant": "",
"ms": ""
},
"AppName": {
"en": "About",
"ar": "About",
"cs": "About",
"de": "About",
"el": "About",
"es": "About",
"es-419": "About",
"fi": "About",
"fr": "About",
"fr-CA": "About",
"he": "About",
"hu": "About",
"id": "About",
"it": "About",
"ja": "About",
"ko": "About",
"nl": "About",
"pl": "About",
"pt-BR": "About",
"ru": "About",
"sv": "About",
"th": "About",
"tr": "About",
"vi": "About",
"zh-Hant": "About",
"ms": "About"
},
"SupportedLanguages": [
"ar",
"cs",
"de",
"el",
"en",
"es",
"es-419",
"fi",
"fr",
"fr-CA",
"he",
"hu",
"id",
"it",
"ja",
"ko",
"nl",
"pl",
"pt-BR",
"ru",
"sv",
"th",
"tr",
"vi",
"zh-Hant",
"ms"
],
"SupportedDeviceClasses": [
"Desktop"
],
"BridgeDependencies": {
"bridge-desktop": "0.25.0",
"bridge-web": "2.50.0",
"bridge-zelda": "1.0.0"
},
"Dependencies": {
"api": "1.0.0"
},
"InjectScripts": false,
"InjectStylesheets": false,
"SkipLanguageValidation": true,
"SkipUnrequireValidation": true,
"SpmApp": true,
"GitRevision": "f9a83c602b2"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 46 (44423) - http://www.bohemiancoding.com/sketch -->
<title>Instagram-icon-black</title>
<desc>Created with Sketch.</desc>
<defs>
<polygon id="path-1" points="3.50109409e-05 0.0252778993 15.9747221 0.0252778993 15.9747221 15.9978993 3.50109409e-05 15.9978993"></polygon>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Instagram-icon-black">
<g id="Group-3">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-2"></g>
<path d="M7.98739606,0.0252078775 C5.81815317,0.0252078775 5.54615317,0.034345733 4.69423195,0.0732778993 C3.84402626,0.112105033 3.26340481,0.247107221 2.75539606,0.444533917 C2.23012691,0.648647702 1.78468271,0.921768053 1.34063895,1.36581182 C0.896595186,1.80985558 0.623474836,2.25533479 0.419396061,2.78056893 C0.221864333,3.2886477 0.0868621444,3.86926915 0.0481050328,4.71943982 C0.00920787746,5.57136105 3.50109409e-05,5.84332604 3.50109409e-05,8.01256893 C3.50109409e-05,10.1818818 0.00920787746,10.4538468 0.0481050328,11.3057681 C0.0868621444,12.1559387 0.221864333,12.7365602 0.419396061,13.2446389 C0.623474836,13.7698731 0.896595186,14.2153523 1.34063895,14.6593961 C1.78468271,15.1034398 2.23012691,15.3765602 2.75539606,15.580674 C3.26340481,15.7781007 3.84402626,15.9131028 4.69423195,15.95193 C5.54615317,15.9907921 5.81815317,16 7.98739606,16 C10.1566389,16 10.428674,15.9907921 11.2805952,15.95193 C12.1307659,15.9131028 12.7113873,15.7781007 13.2194311,15.580674 C13.7447002,15.3765602 14.1901094,15.1034398 14.6341532,14.6593961 C15.0781969,14.2153523 15.3513173,13.7698731 15.5554311,13.2446389 C15.7529278,12.7365602 15.88793,12.1559387 15.9267221,11.3057681 C15.9656193,10.4538468 15.9747571,10.1818818 15.9747571,8.01256893 C15.9747571,5.84332604 15.9656193,5.57136105 15.9267221,4.71943982 C15.88793,3.86926915 15.7529278,3.2886477 15.5554311,2.78056893 C15.3513173,2.25533479 15.0781969,1.80985558 14.6341532,1.36581182 C14.1901094,0.921768053 13.7447002,0.648647702 13.2194311,0.444533917 C12.7113873,0.247107221 12.1307659,0.112105033 11.2805952,0.0732778993 C10.428674,0.034345733 10.1566389,0.0252078775 7.98739606,0.0252078775 M7.98739606,1.46436761 C10.1201225,1.46436761 10.3726915,1.47249015 11.2149847,1.51089716 C11.993733,1.54643326 12.4166652,1.67660394 12.6981182,1.78594311 C13.0709847,1.93085339 13.3370678,2.10394748 13.6165252,2.38343982 C13.8960875,2.66296718 14.0691816,2.92901532 14.2140219,3.30184683 C14.3233611,3.58329978 14.4535317,4.00626696 14.4890678,4.78498031 C14.5274748,5.62727352 14.5356324,5.87984245 14.5356324,8.01256893 C14.5356324,10.1453654 14.5274748,10.3979344 14.4890678,11.2401575 C14.4535317,12.0189409 14.3233611,12.4419081 14.2140219,12.7233611 C14.0691816,13.0961575 13.8960875,13.3622407 13.6165252,13.6417681 C13.3370678,13.9212604 13.0709847,14.0943545 12.6981182,14.2392298 C12.4166652,14.3486039 11.993733,14.4787746 11.2149847,14.5142407 C10.3728315,14.5527177 10.1202976,14.5608053 7.98739606,14.5608053 C5.85449453,14.5608053 5.60196061,14.5527177 4.75980744,14.5142407 C3.98109409,14.4787746 3.55812691,14.3486039 3.27667396,14.2392298 C2.90384245,14.0943545 2.6377593,13.9212604 2.35826696,13.6417681 C2.07880963,13.3622407 1.90571554,13.0961575 1.76080525,12.7233611 C1.65143107,12.4419081 1.5212954,12.0189409 1.48572429,11.2401575 C1.4473523,10.3979344 1.43919475,10.1453654 1.43919475,8.01256893 C1.43919475,5.87984245 1.4473523,5.62727352 1.48572429,4.78498031 C1.5212954,4.00626696 1.65143107,3.58329978 1.76080525,3.30184683 C1.90571554,2.92901532 2.07880963,2.66296718 2.35826696,2.38343982 C2.6377593,2.10394748 2.90384245,1.93085339 3.27667396,1.78594311 C3.55812691,1.67660394 3.98109409,1.54643326 4.75980744,1.51089716 C5.60210066,1.47249015 5.85466958,1.46436761 7.98739606,1.46436761" id="Fill-1" fill="#b3b3b3" mask="url(#mask-2)"></path>
</g>
<path d="M7.98739606,10.675046 C6.51697155,10.675046 5.32491904,9.48302845 5.32491904,8.01256893 C5.32491904,6.54214442 6.51697155,5.35012691 7.98739606,5.35012691 C9.45785558,5.35012691 10.6498731,6.54214442 10.6498731,8.01256893 C10.6498731,9.48302845 9.45785558,10.675046 7.98739606,10.675046 M7.98739606,3.91096718 C5.72215317,3.91096718 3.88579431,5.74736105 3.88579431,8.01256893 C3.88579431,10.2778818 5.72215317,12.1142057 7.98739606,12.1142057 C10.2526389,12.1142057 12.0889978,10.2778818 12.0889978,8.01256893 C12.0889978,5.74736105 10.2526389,3.91096718 7.98739606,3.91096718" id="Fill-4" fill="#b3b3b3"></path>
<path d="M13.209593,3.74890153 C13.209593,4.27823195 12.7804639,4.70739606 12.2510985,4.70739606 C11.7217681,4.70739606 11.2926039,4.27823195 11.2926039,3.74890153 C11.2926039,3.21953611 11.7217681,2.790407 12.2510985,2.790407 C12.7804639,2.790407 13.209593,3.21953611 13.209593,3.74890153" id="Fill-5" fill="#b3b3b3"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html dir="auto">
<head>
<meta charset="utf-8" />
<meta name="google" value="notranslate" />
<link rel="stylesheet" href="https://local_resource_host/css/glue.css" />
<title>Artist</title>
<link rel="stylesheet" href="css/artist.css"><link rel="stylesheet" class="userCSS" href="https://zlink.app.spotify.com/css/user.css"></head>
<body>
<div id="artist-page" data-play-source="artist"></div>
<div id="message-container"></div>
<!-- "init.js" is served by the desktop client and provides the "window.__spotify" object. -->
<script src="init.js"></script>
<script src="artist.bundle.js"></script></body>
</html>

View File

@ -0,0 +1,108 @@
{
"BundleIdentifier": "artist",
"BundleType": "Application",
"BundleVersion": "1.1.55",
"VendorIdentifier": "com.spotify",
"UserInstallable": false,
"AppDescription": {
"en": "",
"ar": "",
"cs": "",
"de": "",
"el": "",
"es": "",
"es-419": "",
"fi": "",
"fr": "",
"fr-CA": "",
"he": "",
"hu": "",
"id": "",
"it": "",
"ja": "",
"ko": "",
"nl": "",
"pl": "",
"pt-BR": "",
"ru": "",
"sv": "",
"th": "",
"tr": "",
"vi": "",
"zh-Hant": "",
"ms": ""
},
"AppName": {
"en": "Artist",
"ar": "Artist",
"cs": "Artist",
"de": "Artist",
"el": "Artist",
"es": "Artist",
"es-419": "Artist",
"fi": "Artist",
"fr": "Artist",
"fr-CA": "Artist",
"he": "Artist",
"hu": "Artist",
"id": "Artist",
"it": "Artist",
"ja": "Artist",
"ko": "Artist",
"nl": "Artist",
"pl": "Artist",
"pt-BR": "Artist",
"ru": "Artist",
"sv": "Artist",
"th": "Artist",
"tr": "Artist",
"vi": "Artist",
"zh-Hant": "Artist",
"ms": "Artist"
},
"SupportedLanguages": [
"ar",
"cs",
"de",
"el",
"en",
"es",
"es-419",
"fi",
"fr",
"fr-CA",
"he",
"hu",
"id",
"it",
"ja",
"ko",
"nl",
"pl",
"pt-BR",
"ru",
"sv",
"th",
"tr",
"vi",
"zh-Hant",
"ms"
],
"SupportedDeviceClasses": [
"Desktop"
],
"BridgeDependencies": {
"bridge-desktop": "0.25.0",
"bridge-web": "2.50.0",
"bridge-zelda": "1.0.0"
},
"Dependencies": {
"api": "1.0.0"
},
"InjectScripts": false,
"InjectStylesheets": false,
"SkipLanguageValidation": true,
"SkipUnrequireValidation": true,
"SpmApp": true,
"GitRevision": "f9a83c602b2"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html dir="auto">
<head>
<link rel="stylesheet" href="https://local_resource_host/css/glue.css" />
<meta charset="utf-8" />
<link rel="stylesheet" href="css/browse.css"><link rel="stylesheet" class="userCSS" href="https://zlink.app.spotify.com/css/user.css"></head>
<body>
<!-- "init.js" is served by the desktop client and provides the "window.__spotify" object. -->
<script src="init.js"></script>
<script src="browse.bundle.js"></script></body>
</html>

View File

@ -0,0 +1,25 @@
<svg width="150px" height="20px" viewBox="0 0 147 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
<title>spotify spotlight svg 2</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
<rect id="Rectangle-1" fill="#FFFFFF" sketch:type="MSShapeGroup" x="70" y="5" width="1" height="11"></rect>
<g id="Imported-Layers" sketch:type="MSLayerGroup">
<path d="M10.001005,0.0447 C4.48874372,0.0447 0.0198994975,4.491 0.0198994975,9.9758 C0.0198994975,15.461 4.48874372,19.9071 10.001005,19.9071 C15.5135678,19.9071 19.9821106,15.461 19.9821106,9.9758 C19.9821106,4.491 15.5135678,0.0447 10.001005,0.0447" id="Fill-1" fill="#84BD00" sketch:type="MSShapeGroup"></path>
<path d="M15.5438191,10.6003 C12.4630151,8.7165 7.95648241,8.1864 4.33135678,9.2809 C3.92060302,9.4054 3.68844221,9.8371 3.81246231,10.2466 C3.93748744,10.6553 4.3720603,10.8861 4.78361809,10.7624 C7.95698492,9.804 12.0471357,10.2792 14.7294472,11.9197 C15.0951759,12.1435 15.5740704,12.0292 15.799799,11.6648 C16.0247236,11.3012 15.9095477,10.8244 15.5438191,10.6003" id="Fill-2" fill="#000000" sketch:type="MSShapeGroup"></path>
<path d="M16.8580905,7.2513 C13.1541709,5.0637 7.29326633,4.858 3.76753769,5.9229 C3.27396985,6.072 2.9958794,6.5906 3.14532663,7.0816 C3.29477387,7.5724 3.81628141,7.8494 4.30954774,7.7005 C7.38090452,6.773 12.6878392,6.9478 15.9051256,8.8489 C16.3477387,9.111 16.9211055,8.9655 17.1842211,8.5241 C17.4472362,8.0834 17.3017085,7.5133 16.8580905,7.2513" id="Fill-3" fill="#000000" sketch:type="MSShapeGroup"></path>
<path d="M14.3720603,13.5178 C11.7413065,11.9182 8.4798995,11.546 4.67788945,12.4108 C4.34231156,12.4868 4.13326633,12.8189 4.21005025,13.152 C4.28633166,13.485 4.62,13.6938 4.95487437,13.6174 C8.42914573,12.8277 11.3792965,13.1496 13.7231156,14.575 C14.0160804,14.7533 14.3990955,14.6616 14.5784925,14.369 C14.7577889,14.0772 14.6654271,13.696 14.3720603,13.5178" id="Fill-4" fill="#000000" sketch:type="MSShapeGroup"></path>
</g>
<g id="Imported-Layers" sketch:type="MSLayerGroup" transform="translate(25.000000, 5.000000)" fill="#FFFFFF">
<path d="M3.80616092,4.19354545 C2.22942529,3.82181818 1.9485977,3.56090909 1.9485977,3.01281818 C1.9485977,2.49481818 2.44193103,2.14636364 3.17535632,2.14636364 C3.88643678,2.14636364 4.59135632,2.411 5.33057471,2.95590909 C5.35291954,2.97236364 5.38096552,2.979 5.40845977,2.97472727 C5.43604598,2.97063636 5.46050575,2.95563636 5.47668966,2.93309091 L6.24662069,1.86009091 C6.27816092,1.816 6.2696092,1.75509091 6.22694253,1.72127273 C5.34721839,1.02336364 4.3565977,0.684090909 3.19871264,0.684090909 C1.49627586,0.684090909 0.307126437,1.69418182 0.307126437,3.13936364 C0.307126437,4.68918182 1.33287356,5.23790909 3.10556322,5.66145455 C4.61443678,6.00509091 4.86905747,6.29290909 4.86905747,6.80754545 C4.86905747,7.37772727 4.3542069,7.73227273 3.52551724,7.73227273 C2.60514943,7.73227273 1.85443678,7.42572727 1.01462069,6.70672727 C0.99383908,6.689 0.965241379,6.68081818 0.938850575,6.68236364 C0.91108046,6.68463636 0.885701149,6.69736364 0.868045977,6.71836364 L0.0047816092,7.734 C-0.0314482759,7.77618182 -0.0268505747,7.83909091 0.0149885057,7.87563636 C0.992091954,8.738 2.19374713,9.19354545 3.49057471,9.19354545 C5.32514943,9.19354545 6.51062069,8.20254545 6.51062069,6.66863636 C6.51062069,5.37236364 5.72717241,4.65545455 3.80616092,4.19354545" id="Fill-1" sketch:type="MSShapeGroup"></path>
<path d="M10.6611494,2.65618182 C9.86593103,2.65618182 9.21370115,2.96581818 8.67586207,3.60027273 L8.67586207,2.88618182 C8.67586207,2.82981818 8.6296092,2.78390909 8.5725977,2.78390909 L7.16082759,2.78390909 C7.10381609,2.78390909 7.05765517,2.82981818 7.05765517,2.88618182 L7.05765517,10.8211818 C7.05765517,10.8775455 7.10381609,10.9234545 7.16082759,10.9234545 L8.5725977,10.9234545 C8.6296092,10.9234545 8.67586207,10.8775455 8.67586207,10.8211818 L8.67586207,8.31645455 C9.2137931,8.91336364 9.86611494,9.20490909 10.6611494,9.20490909 C12.1386667,9.20490909 13.6342989,8.08045455 13.6342989,5.93090909 C13.6342989,3.78090909 12.1386667,2.65618182 10.6611494,2.65618182 L10.6611494,2.65618182 Z M11.9928276,5.93090909 C11.9928276,7.02545455 11.3108046,7.78936364 10.3343448,7.78936364 C9.36891954,7.78936364 8.64064368,6.99072727 8.64064368,5.93090909 C8.64064368,4.87118182 9.36891954,4.07254545 10.3343448,4.07254545 C11.2950805,4.07254545 11.9928276,4.85390909 11.9928276,5.93090909 L11.9928276,5.93090909 Z" id="Fill-2" sketch:type="MSShapeGroup"></path>
<path d="M17.4683218,2.65618182 C15.5654253,2.65618182 14.0747586,4.10472727 14.0747586,5.95427273 C14.0747586,7.78372727 15.5552184,9.21709091 17.4449655,9.21709091 C19.3544828,9.21709091 20.8497471,7.77336364 20.8497471,5.93090909 C20.8497471,4.09454545 19.3647816,2.65618182 17.4683218,2.65618182 L17.4683218,2.65618182 Z M17.4683218,7.80081818 C16.4561839,7.80081818 15.6931494,6.99681818 15.6931494,5.93090909 C15.6931494,4.86054545 16.4297931,4.08372727 17.4449655,4.08372727 C18.4635402,4.08372727 19.2318161,4.88763636 19.2318161,5.95427273 C19.2318161,7.02445455 18.4901149,7.80081818 17.4683218,7.80081818 L17.4683218,7.80081818 Z" id="Fill-3" sketch:type="MSShapeGroup"></path>
<path d="M24.9131954,2.78390909 L23.3595402,2.78390909 L23.3595402,1.21345455 C23.3595402,1.15709091 23.3134713,1.11127273 23.2564598,1.11127273 L21.8447816,1.11127273 C21.7876782,1.11127273 21.7413333,1.15709091 21.7413333,1.21345455 L21.7413333,2.78390909 L21.0624368,2.78390909 C21.0056092,2.78390909 20.9595402,2.82981818 20.9595402,2.88618182 L20.9595402,4.08572727 C20.9595402,4.142 21.0056092,4.188 21.0624368,4.188 L21.7413333,4.188 L21.7413333,7.292 C21.7413333,8.54636364 22.3727816,9.18236364 23.6182989,9.18236364 C24.1246897,9.18236364 24.5448276,9.079 24.9407816,8.857 C24.9729655,8.83918182 24.9930115,8.80490909 24.9930115,8.76845455 L24.9930115,7.62618182 C24.9930115,7.59090909 24.9744368,7.55763636 24.944,7.53918182 C24.9131954,7.52009091 24.8749425,7.51909091 24.8434023,7.53454545 C24.5714023,7.66981818 24.3084138,7.73227273 24.0146207,7.73227273 C23.5616552,7.73227273 23.3595402,7.52890909 23.3595402,7.07327273 L23.3595402,4.188 L24.9131954,4.188 C24.9702069,4.188 25.0161839,4.142 25.0161839,4.08572727 L25.0161839,2.88618182 C25.0161839,2.82981818 24.9702069,2.78390909 24.9131954,2.78390909" id="Fill-4" sketch:type="MSShapeGroup"></path>
<path d="M30.326069,2.79 L30.326069,2.59709091 C30.326069,2.02963636 30.546023,1.77663636 31.0397241,1.77663636 C31.333977,1.77663636 31.5703908,1.83445455 31.8352184,1.92181818 C31.8677701,1.93190909 31.9018851,1.92681818 31.9283678,1.90754545 C31.9555862,1.88827273 31.9710345,1.85736364 31.9710345,1.82454545 L31.9710345,0.648363636 C31.9710345,0.603454545 31.9417011,0.563545455 31.898023,0.550363636 C31.6182989,0.468090909 31.2604138,0.383636364 30.7245057,0.383636364 C29.4204138,0.383636364 28.7312184,1.10963636 28.7312184,2.48236364 L28.7312184,2.77781818 L28.0529655,2.77781818 C27.996046,2.77781818 27.9493333,2.82363636 27.9493333,2.88 L27.9493333,4.08572727 C27.9493333,4.142 27.996046,4.188 28.0529655,4.188 L28.7312184,4.188 L28.7312184,8.97572727 C28.7312184,9.03209091 28.7771954,9.078 28.8341149,9.078 L30.245977,9.078 C30.3029885,9.078 30.3494253,9.03209091 30.3494253,8.97572727 L30.3494253,4.188 L31.6675862,4.188 L33.6868966,8.97454545 C33.4576552,9.47745455 33.2321839,9.57754545 32.9245057,9.57754545 C32.6757701,9.57754545 32.4137931,9.50409091 32.146023,9.35918182 C32.1207356,9.34554545 32.0909425,9.34318182 32.0637241,9.35154545 C32.0367816,9.361 32.014069,9.38072727 32.0026667,9.40672727 L31.5241379,10.4446364 C31.5013333,10.4936364 31.5208276,10.5512727 31.5686437,10.5766364 C32.0681379,10.8440909 32.5191724,10.9582727 33.0764138,10.9582727 C34.1188966,10.9582727 34.6951724,10.4781818 35.2031264,9.18663636 L37.6525057,2.92927273 C37.6648276,2.89781818 37.6611494,2.86227273 37.6415632,2.83436364 C37.6222529,2.80663636 37.5908966,2.79 37.5566897,2.79 L36.0868966,2.79 C36.0429425,2.79 36.0034943,2.81763636 35.9891494,2.85845455 L34.4834943,7.11027273 L32.8342989,2.85572727 C32.8192184,2.81609091 32.7806897,2.79 32.7378391,2.79 L30.326069,2.79" id="Fill-5" sketch:type="MSShapeGroup"></path>
<path d="M27.188046,2.78390909 L25.7761839,2.78390909 C25.7191724,2.78390909 25.6727356,2.82981818 25.6727356,2.88618182 L25.6727356,8.97572727 C25.6727356,9.03209091 25.7191724,9.078 25.7761839,9.078 L27.188046,9.078 C27.2449655,9.078 27.2914943,9.03209091 27.2914943,8.97572727 L27.2914943,2.88618182 C27.2914943,2.82981818 27.2449655,2.78390909 27.188046,2.78390909" id="Fill-6" sketch:type="MSShapeGroup"></path>
<path d="M26.4892874,0.0110909091 C25.930023,0.0110909091 25.4761379,0.458727273 25.4761379,1.01172727 C25.4761379,1.565 25.930023,2.01309091 26.4892874,2.01309091 C27.0483678,2.01309091 27.5017931,1.565 27.5017931,1.01172727 C27.5017931,0.458727273 27.0483678,0.0110909091 26.4892874,0.0110909091" id="Fill-7" sketch:type="MSShapeGroup"></path>
<path d="M38.8578391,4.74172727 C38.2991264,4.74172727 37.8642759,4.29809091 37.8642759,3.75936364 C37.8642759,3.22063636 38.3048276,2.77190909 38.8630805,2.77190909 C39.4217931,2.77190909 39.8565517,3.21554545 39.8565517,3.75372727 C39.8565517,4.29254545 39.4164598,4.74172727 38.8578391,4.74172727 L38.8578391,4.74172727 Z M38.8630805,2.86963636 C38.3542069,2.86963636 37.9690115,3.26954545 37.9690115,3.75936364 C37.9690115,4.24890909 38.3513563,4.64354545 38.8578391,4.64354545 C39.3666207,4.64354545 39.7521839,4.24381818 39.7521839,3.75372727 C39.7521839,3.26427273 39.3695632,2.86963636 38.8630805,2.86963636 L38.8630805,2.86963636 Z M39.0833103,3.85481818 L39.3644138,4.24381818 L39.1274483,4.24381818 L38.8744828,3.887 L38.6569195,3.887 L38.6569195,4.24381818 L38.4585747,4.24381818 L38.4585747,3.21272727 L38.9236782,3.21272727 C39.165977,3.21272727 39.3253333,3.33527273 39.3253333,3.54163636 C39.3253333,3.71063636 39.2265747,3.81390909 39.0833103,3.85481818 L39.0833103,3.85481818 Z M38.9156782,3.38963636 L38.6569195,3.38963636 L38.6569195,3.71572727 L38.9156782,3.71572727 C39.0447816,3.71572727 39.1218391,3.65327273 39.1218391,3.55254545 C39.1218391,3.44645455 39.0447816,3.38963636 38.9156782,3.38963636 L38.9156782,3.38963636 Z" id="Fill-8" sketch:type="MSShapeGroup"></path>
</g>
<path d="M79.9,13.12 C81.7,13.12 82.27,12.09 82.27,11.23 C82.27,8.74 78.27,9.68 78.27,7.97 C78.27,7.25 78.94,6.74 79.83,6.74 C80.58,6.74 81.26,7 81.74,7.58 L82.12,7.16 C81.6,6.57 80.86,6.22 79.86,6.22 C78.65,6.22 77.67,6.91 77.67,8 C77.67,10.33 81.67,9.31 81.67,11.27 C81.67,11.84 81.28,12.6 79.91,12.6 C78.96,12.6 78.26,12.13 77.83,11.63 L77.46,12.06 C77.97,12.68 78.8,13.12 79.9,13.12 L79.9,13.12 Z M86.51,13 L86.51,10.23 L88.44,10.23 C89.71,10.23 90.45,9.33 90.45,8.28 C90.45,7.23 89.72,6.33 88.44,6.33 L85.94,6.33 L85.94,13 L86.51,13 Z M88.38,9.71 L86.51,9.71 L86.51,6.85 L88.38,6.85 C89.26,6.85 89.85,7.44 89.85,8.28 C89.85,9.12 89.26,9.71 88.38,9.71 L88.38,9.71 Z M96.9399999,13.12 C98.8899999,13.12 100.18,11.62 100.18,9.67 C100.18,7.72 98.8899999,6.22 96.9399999,6.22 C94.9799999,6.22 93.6999999,7.72 93.6999999,9.67 C93.6999999,11.62 94.9799999,13.12 96.9399999,13.12 L96.9399999,13.12 Z M96.9399999,12.6 C95.3199999,12.6 94.2999999,11.35 94.2999999,9.67 C94.2999999,7.97 95.3199999,6.74 96.9399999,6.74 C98.5399999,6.74 99.5799999,7.97 99.5799999,9.67 C99.5799999,11.35 98.5399999,12.6 96.9399999,12.6 L96.9399999,12.6 Z M105.88,13 L105.88,6.85 L108.06,6.85 L108.06,6.33 L103.12,6.33 L103.12,6.85 L105.3,6.85 L105.3,13 L105.88,13 Z M115.34,13 L115.34,12.48 L112.11,12.48 L112.11,6.33 L111.54,6.33 L111.54,13 L115.34,13 Z M119.45,13 L119.45,6.33 L118.88,6.33 L118.88,13 L119.45,13 Z M126.54,13.13 C127.59,13.13 128.48,12.68 129.07,12.02 L129.07,9.69 L125.98,9.69 L125.98,10.2 L128.5,10.2 L128.5,11.8 C128.13,12.17 127.43,12.61 126.54,12.61 C124.97,12.61 123.76,11.39 123.76,9.67 C123.76,7.93 124.97,6.74 126.54,6.74 C127.39,6.74 128.15,7.11 128.62,7.67 L129.05,7.36 C128.44,6.66 127.64,6.22 126.54,6.22 C124.67,6.22 123.16,7.61 123.16,9.67 C123.16,11.73 124.67,13.13 126.54,13.13 L126.54,13.13 Z M138.2,13 L138.2,6.33 L137.62,6.33 L137.62,9.31 L133.39,9.31 L133.39,6.33 L132.82,6.33 L132.82,13 L133.39,13 L133.39,9.83 L137.62,9.83 L137.62,13 L138.2,13 Z M144.43,13 L144.43,6.85 L146.61,6.85 L146.61,6.33 L141.67,6.33 L141.67,6.85 L143.85,6.85 L143.85,13 L144.43,13 Z" id="SPOTLIGHT" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,108 @@
{
"BundleIdentifier": "browse",
"BundleType": "Application",
"BundleVersion": "1.1.55",
"VendorIdentifier": "com.spotify",
"UserInstallable": false,
"AppDescription": {
"en": "",
"ar": "",
"cs": "",
"de": "",
"el": "",
"es": "",
"es-419": "",
"fi": "",
"fr": "",
"fr-CA": "",
"he": "",
"hu": "",
"id": "",
"it": "",
"ja": "",
"ko": "",
"nl": "",
"pl": "",
"pt-BR": "",
"ru": "",
"sv": "",
"th": "",
"tr": "",
"vi": "",
"zh-Hant": "",
"ms": ""
},
"AppName": {
"en": "Browse",
"ar": "Browse",
"cs": "Browse",
"de": "Browse",
"el": "Browse",
"es": "Browse",
"es-419": "Browse",
"fi": "Browse",
"fr": "Browse",
"fr-CA": "Browse",
"he": "Browse",
"hu": "Browse",
"id": "Browse",
"it": "Browse",
"ja": "Browse",
"ko": "Browse",
"nl": "Browse",
"pl": "Browse",
"pt-BR": "Browse",
"ru": "Browse",
"sv": "Browse",
"th": "Browse",
"tr": "Browse",
"vi": "Browse",
"zh-Hant": "Browse",
"ms": "Browse"
},
"SupportedLanguages": [
"ar",
"cs",
"de",
"el",
"en",
"es",
"es-419",
"fi",
"fr",
"fr-CA",
"he",
"hu",
"id",
"it",
"ja",
"ko",
"nl",
"pl",
"pt-BR",
"ru",
"sv",
"th",
"tr",
"vi",
"zh-Hant",
"ms"
],
"SupportedDeviceClasses": [
"Desktop"
],
"BridgeDependencies": {
"bridge-desktop": "0.25.0",
"bridge-web": "2.50.0",
"bridge-zelda": "1.0.0"
},
"Dependencies": {
"api": "1.0.0"
},
"InjectScripts": false,
"InjectStylesheets": false,
"SkipLanguageValidation": true,
"SkipUnrequireValidation": true,
"SpmApp": true,
"GitRevision": "f9a83c602b2"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<svg width="240" height="220" viewBox="0 0 240 220" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Top</title><defs><path id="a" d="M0 0h240v220H0z"/><linearGradient x1="56.316781%" y1="62.7708978%" x2="56.316781%" y2="1.40070873%" id="c"><stop stop-color="#3B3B3B" offset="0%"/><stop stop-color="#282828" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="d"><stop stop-color="#181818" stop-opacity="0" offset="0%"/><stop stop-color="#121212" offset="100%"/></linearGradient><path id="e" d="M0 0h240v220H0z"/></defs><g fill="none" fill-rule="evenodd"><g><g><g><mask id="b" fill="#fff"><use xlink:href="#a"/></mask><use fill="#121212" xlink:href="#a"/><g mask="url(#b)" fill-rule="nonzero" fill="url(#c)"><g><path d="M60.90587 36.3621233L19.747703 96.389232 128.402453-22l43.546183 39.8019165L98.429334 97.896482 225.78436-10.0296306 293 68.9958391 71.985564 256-95 211.343336 37.008146 20.0277393"/></g></g><use fill="url(#d)" xlink:href="#e"/></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<svg width="240" height="220" viewBox="0 0 240 220" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Top</title><defs><path id="a" d="M0 0h240v220H0z"/><linearGradient x1="73.2635377%" y1="72.6367393%" x2="48.7203963%" y2="27.7430646%" id="c"><stop stop-color="#3B3B3B" offset="0%"/><stop stop-color="#282828" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="d"><stop stop-color="#181818" stop-opacity="0" offset="0%"/><stop stop-color="#121212" offset="100%"/></linearGradient><path id="e" d="M0 0h240v220H0z"/></defs><g fill="none" fill-rule="evenodd"><g><g><g><mask id="b" fill="#fff"><use xlink:href="#a"/></mask><use fill="#121212" xlink:href="#a"/><g mask="url(#b)" fill-rule="nonzero" fill="url(#c)"><g><path d="M-178.34829812 203.8527919L143.43529466-20.36454385l-161.65590424 167.6815657 312.3406989-188.1828681-143.71523584 223.3508911 95.41288757-37.66380782-127.68937185 197.2808953"/></g></g><use fill="url(#d)" xlink:href="#e"/></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<svg width="240" height="220" viewBox="0 0 240 220" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>Top</title><defs><path id="a" d="M0 0h240v220H0z"/><linearGradient x1="50%" y1="-1.99203187%" x2="50%" y2="88.4462151%" id="c"><stop stop-color="#3B3B3B" offset="0%"/><stop stop-color="#282828" offset="100%"/></linearGradient><linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="d"><stop stop-color="#181818" stop-opacity="0" offset="0%"/><stop stop-color="#121212" offset="100%"/></linearGradient><path id="e" d="M0 0h240v220H0z"/></defs><g fill="none" fill-rule="evenodd"><g><g><g><mask id="b" fill="#fff"><use xlink:href="#a"/></mask><use fill="#121212" xlink:href="#a"/><g mask="url(#b)" fill-rule="nonzero" fill="url(#c)"><g><path d="M144.054419 42.9041c5.661129 0 11.014403-1.228112 15.83748-3.428478-18.505565 16.88653-30.118577 41.175842-30.118577 68.160176C129.773322 158.6535871 171.23126 200 222.3866612 200 273.5420622 200 315 158.6535871 315 107.635798c0-51.017789-41.4579378-92.364202-92.6133388-92.364202-18.0779872 0-34.9416532 5.168302-49.2056462 14.106222 5.575613-6.601098 8.927823-15.129648 8.927823-24.425768C182.108838-16.011127 165.074141-33 144.054419-33S106-16.011127 106 4.95205c0 20.963177 17.034697 37.95205 38.054419 37.95205zM19 218c34.799188 0 63-28.2008119 63-63 0-34.7991881-28.200812-63-63-63s-63 28.2008119-63 63c0 34.7991881 28.200812 63 63 63z"/></g></g><use fill="url(#d)" xlink:href="#e"/></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html dir="auto">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="https://local_resource_host/css/glue.css" />
<link rel="stylesheet" href="css/buddy-list.css"><link rel="stylesheet" class="userCSS" href="https://zlink.app.spotify.com/css/user.css"></head>
<body>
<div id="root" data-play-source="buddy-list"></div>
<!-- "init.js" is served by the desktop client and provides the "window.__spotify" object. -->
<script src="init.js"></script>
<script src="buddy-list.bundle.js"></script></body>
</html>

View File

@ -0,0 +1,108 @@
{
"BundleIdentifier": "buddy-list",
"BundleType": "Application",
"BundleVersion": "1.1.55",
"VendorIdentifier": "com.spotify",
"UserInstallable": false,
"AppDescription": {
"en": "",
"ar": "",
"cs": "",
"de": "",
"el": "",
"es": "",
"es-419": "",
"fi": "",
"fr": "",
"fr-CA": "",
"he": "",
"hu": "",
"id": "",
"it": "",
"ja": "",
"ko": "",
"nl": "",
"pl": "",
"pt-BR": "",
"ru": "",
"sv": "",
"th": "",
"tr": "",
"vi": "",
"zh-Hant": "",
"ms": ""
},
"AppName": {
"en": "Buddy List",
"ar": "Buddy List",
"cs": "Buddy List",
"de": "Buddy List",
"el": "Buddy List",
"es": "Buddy List",
"es-419": "Buddy List",
"fi": "Buddy List",
"fr": "Buddy List",
"fr-CA": "Buddy List",
"he": "Buddy List",
"hu": "Buddy List",
"id": "Buddy List",
"it": "Buddy List",
"ja": "Buddy List",
"ko": "Buddy List",
"nl": "Buddy List",
"pl": "Buddy List",
"pt-BR": "Buddy List",
"ru": "Buddy List",
"sv": "Buddy List",
"th": "Buddy List",
"tr": "Buddy List",
"vi": "Buddy List",
"zh-Hant": "Buddy List",
"ms": "Buddy List"
},
"SupportedLanguages": [
"ar",
"cs",
"de",
"el",
"en",
"es",
"es-419",
"fi",
"fr",
"fr-CA",
"he",
"hu",
"id",
"it",
"ja",
"ko",
"nl",
"pl",
"pt-BR",
"ru",
"sv",
"th",
"tr",
"vi",
"zh-Hant",
"ms"
],
"SupportedDeviceClasses": [
"Desktop"
],
"BridgeDependencies": {
"bridge-desktop": "0.25.0",
"bridge-web": "2.50.0",
"bridge-zelda": "1.0.0"
},
"Dependencies": {
"api": "1.0.0"
},
"InjectScripts": false,
"InjectStylesheets": false,
"SkipLanguageValidation": true,
"SkipUnrequireValidation": true,
"SpmApp": true,
"GitRevision": "f9a83c602b2"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
.chart-header{position:relative;z-index:3}.chart-content{position:relative;z-index:1}.tl-attention-highlight{z-index:2}#main-container{padding-bottom:20px}.new-entities{display:inline-block;font-weight:var(--glue-font-weight-bold)}.new-entities:before{content:" ";display:inline-block;line-height:.8;height:10px;width:10px}.new-entities:before{background-color:#2e77d0;border-radius:10px}.new-entities:before{margin-right:5px}.offline-sync-container{display:flex;height:56px;justify-content:flex-end;line-height:56px}.offline-sync-container{border-top:none;margin-bottom:10px}.offline-sync .slider{display:inline-block;vertical-align:middle}.offline-sync .slider{margin-left:7px}
/*# sourceMappingURL=chart.css.map*/

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html dir="auto">
<head>
<meta charset="utf-8" />
<title>Charts</title>
<link rel="stylesheet" href="https://local_resource_host/css/glue.css" />
<link rel="stylesheet" href="css/chart.css"><link rel="stylesheet" class="userCSS" href="https://zlink.app.spotify.com/css/user.css"></head>
<body>
<div id="main-container" data-play-source="chart"></div>
<div id="message-container"></div>
<!-- "init.js" is served by the desktop client and provides the "window.__spotify" object. -->
<script src="init.js"></script>
<script src="chart.bundle.js"></script></body>
</html>

View File

@ -0,0 +1,108 @@
{
"BundleIdentifier": "chart",
"BundleType": "Application",
"BundleVersion": "1.1.55",
"VendorIdentifier": "com.spotify",
"UserInstallable": false,
"AppDescription": {
"en": "",
"ar": "",
"cs": "",
"de": "",
"el": "",
"es": "",
"es-419": "",
"fi": "",
"fr": "",
"fr-CA": "",
"he": "",
"hu": "",
"id": "",
"it": "",
"ja": "",
"ko": "",
"nl": "",
"pl": "",
"pt-BR": "",
"ru": "",
"sv": "",
"th": "",
"tr": "",
"vi": "",
"zh-Hant": "",
"ms": ""
},
"AppName": {
"en": "Chart",
"ar": "Chart",
"cs": "Chart",
"de": "Chart",
"el": "Chart",
"es": "Chart",
"es-419": "Chart",
"fi": "Chart",
"fr": "Chart",
"fr-CA": "Chart",
"he": "Chart",
"hu": "Chart",
"id": "Chart",
"it": "Chart",
"ja": "Chart",
"ko": "Chart",
"nl": "Chart",
"pl": "Chart",
"pt-BR": "Chart",
"ru": "Chart",
"sv": "Chart",
"th": "Chart",
"tr": "Chart",
"vi": "Chart",
"zh-Hant": "Chart",
"ms": "Chart"
},
"SupportedLanguages": [
"ar",
"cs",
"de",
"el",
"en",
"es",
"es-419",
"fi",
"fr",
"fr-CA",
"he",
"hu",
"id",
"it",
"ja",
"ko",
"nl",
"pl",
"pt-BR",
"ru",
"sv",
"th",
"tr",
"vi",
"zh-Hant",
"ms"
],
"SupportedDeviceClasses": [
"Desktop"
],
"BridgeDependencies": {
"bridge-desktop": "0.25.0",
"bridge-web": "2.50.0",
"bridge-zelda": "1.0.0"
},
"Dependencies": {
"api": "1.0.0"
},
"InjectScripts": false,
"InjectStylesheets": false,
"SkipLanguageValidation": true,
"SkipUnrequireValidation": true,
"SpmApp": true,
"GitRevision": "f9a83c602b2"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
body.show-offline-screen{overflow:hidden}.error-and-offline{position:fixed}.throbber-container{width:100%;height:100%;position:absolute;top:0}.throbber-container{background-color:#181818}.throbber-container{left:0}.app-header{position:relative;z-index:2}.app-content{position:relative;z-index:1}.tracklist-wrapper{margin-bottom:20px}.copyrights{color:#b3b3b3}.copyrights{margin-top:20px;margin-bottom:20px}.nux-screen{padding-top:32px}.nux-screen .nux-screen__inner-box{text-align:center}.nux-screen .nux-screen__inner-box .nux-screen__albums-icon{line-height:128px}.nux-screen .nux-screen__inner-box .nux-screen__albums-icon:before{font-family:glue-spoticon;font-style:normal;font-weight:400;-webkit-font-smoothing:antialiased;display:inline-block;vertical-align:bottom;content:"\f1C2";font-size:128px;line-height:inherit}.nux-screen__title{font-size:28px;line-height:36px;letter-spacing:-.005em;font-weight:var(--glue-font-weight-black);color:#fff;text-transform:none}.collection-header-artists{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.collection-header-artists{margin-bottom:5px}
/*# sourceMappingURL=collection-album.css.map*/

View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html dir="auto">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="https://local_resource_host/css/glue.css" />
<link rel="stylesheet" href="css/collection-album.css"><link rel="stylesheet" class="userCSS" href="https://zlink.app.spotify.com/css/user.css"></head>
<body class="unlike-removes-entity">
<div
id="collection-album-wrapper"
class="collection-album"
data-play-source="library-collection-album"
></div>
<div id="error-wrapper"></div>
<!-- "init.js" is served by the desktop client and provides the "window.__spotify" object. -->
<script src="init.js"></script>
<script src="collection-album.bundle.js"></script></body>
</html>

View File

@ -0,0 +1,108 @@
{
"BundleIdentifier": "collection-album",
"BundleType": "Application",
"BundleVersion": "1.1.55",
"VendorIdentifier": "com.spotify",
"UserInstallable": false,
"AppDescription": {
"en": "",
"ar": "",
"cs": "",
"de": "",
"el": "",
"es": "",
"es-419": "",
"fi": "",
"fr": "",
"fr-CA": "",
"he": "",
"hu": "",
"id": "",
"it": "",
"ja": "",
"ko": "",
"nl": "",
"pl": "",
"pt-BR": "",
"ru": "",
"sv": "",
"th": "",
"tr": "",
"vi": "",
"zh-Hant": "",
"ms": ""
},
"AppName": {
"en": "Collection Album",
"ar": "Collection Album",
"cs": "Collection Album",
"de": "Collection Album",
"el": "Collection Album",
"es": "Collection Album",
"es-419": "Collection Album",
"fi": "Collection Album",
"fr": "Collection Album",
"fr-CA": "Collection Album",
"he": "Collection Album",
"hu": "Collection Album",
"id": "Collection Album",
"it": "Collection Album",
"ja": "Collection Album",
"ko": "Collection Album",
"nl": "Collection Album",
"pl": "Collection Album",
"pt-BR": "Collection Album",
"ru": "Collection Album",
"sv": "Collection Album",
"th": "Collection Album",
"tr": "Collection Album",
"vi": "Collection Album",
"zh-Hant": "Collection Album",
"ms": "Collection Album"
},
"SupportedLanguages": [
"ar",
"cs",
"de",
"el",
"en",
"es",
"es-419",
"fi",
"fr",
"fr-CA",
"he",
"hu",
"id",
"it",
"ja",
"ko",
"nl",
"pl",
"pt-BR",
"ru",
"sv",
"th",
"tr",
"vi",
"zh-Hant",
"ms"
],
"SupportedDeviceClasses": [
"Desktop"
],
"BridgeDependencies": {
"bridge-desktop": "0.25.0",
"bridge-web": "2.50.0",
"bridge-zelda": "1.0.0"
},
"Dependencies": {
"api": "1.0.0"
},
"InjectScripts": false,
"InjectStylesheets": false,
"SkipLanguageValidation": true,
"SkipUnrequireValidation": true,
"SpmApp": true,
"GitRevision": "f9a83c602b2"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
body.show-offline-screen{overflow:hidden}.error-and-offline{position:fixed}.app-header{position:relative;z-index:2}.app-content{position:relative;z-index:1}.nux-screen{padding-top:32px}.nux-screen .nux-screen-inner-box{text-align:center}.nux-screen .nux-screen-inner-box .nux-artists-icon{line-height:128px}.nux-screen .nux-screen-inner-box .nux-artists-icon:before{font-family:glue-spoticon;font-style:normal;font-weight:400;-webkit-font-smoothing:antialiased;display:inline-block;vertical-align:bottom;content:"\f168";font-size:128px;line-height:inherit}.nux-screen-title{font-size:28px;line-height:36px;letter-spacing:-.005em;font-weight:var(--glue-font-weight-black);color:#fff;text-transform:none}.ca-hidden,.ca-hidden *{visibility:hidden!important}.ca-removed{position:absolute;visibility:hidden;z-index:-1}.confirm-dialog{padding:15px;text-align:center}.confirm-dialog .button{margin-right:10px}.confirm-dialog-container .popover.modal{margin:0}.confirm-dialog-container .popover.modal{transform:translate(-50%,-50%)}
/*# sourceMappingURL=collection-artist.css.map*/

View File

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html dir="auto">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="https://local_resource_host/css/glue.css" />
<link rel="stylesheet" href="css/collection-artist.css"><link rel="stylesheet" class="userCSS" href="https://zlink.app.spotify.com/css/user.css"></head>
<body class="unlike-removes-entity">
<div
id="collection-artist-wrapper"
class="ca-hidden"
data-play-source="library-collection-artist"
>
<div id="header-wrapper"></div>
<div id="virtual-songs-list-wrapper" class="container app-content"></div>
</div>
<div id="error-wrapper" class="show-error-screen"></div>
<div id="nux-wrapper"></div>
<div
id="confirm-dialog-container"
class="hidden confirm-dialog-container"
></div>
<!-- "init.js" is served by the desktop client and provides the "window.__spotify" object. -->
<script src="init.js"></script>
<script src="collection-artist.bundle.js"></script></body>
</html>

View File

@ -0,0 +1,108 @@
{
"BundleIdentifier": "collection-artist",
"BundleType": "Application",
"BundleVersion": "1.1.55",
"VendorIdentifier": "com.spotify",
"UserInstallable": false,
"AppDescription": {
"en": "",
"ar": "",
"cs": "",
"de": "",
"el": "",
"es": "",
"es-419": "",
"fi": "",
"fr": "",
"fr-CA": "",
"he": "",
"hu": "",
"id": "",
"it": "",
"ja": "",
"ko": "",
"nl": "",
"pl": "",
"pt-BR": "",
"ru": "",
"sv": "",
"th": "",
"tr": "",
"vi": "",
"zh-Hant": "",
"ms": ""
},
"AppName": {
"en": "Collection Artist",
"ar": "Collection Artist",
"cs": "Collection Artist",
"de": "Collection Artist",
"el": "Collection Artist",
"es": "Collection Artist",
"es-419": "Collection Artist",
"fi": "Collection Artist",
"fr": "Collection Artist",
"fr-CA": "Collection Artist",
"he": "Collection Artist",
"hu": "Collection Artist",
"id": "Collection Artist",
"it": "Collection Artist",
"ja": "Collection Artist",
"ko": "Collection Artist",
"nl": "Collection Artist",
"pl": "Collection Artist",
"pt-BR": "Collection Artist",
"ru": "Collection Artist",
"sv": "Collection Artist",
"th": "Collection Artist",
"tr": "Collection Artist",
"vi": "Collection Artist",
"zh-Hant": "Collection Artist",
"ms": "Collection Artist"
},
"SupportedLanguages": [
"ar",
"cs",
"de",
"el",
"en",
"es",
"es-419",
"fi",
"fr",
"fr-CA",
"he",
"hu",
"id",
"it",
"ja",
"ko",
"nl",
"pl",
"pt-BR",
"ru",
"sv",
"th",
"tr",
"vi",
"zh-Hant",
"ms"
],
"SupportedDeviceClasses": [
"Desktop"
],
"BridgeDependencies": {
"bridge-desktop": "0.25.0",
"bridge-web": "2.50.0",
"bridge-zelda": "1.0.0"
},
"Dependencies": {
"api": "1.0.0"
},
"InjectScripts": false,
"InjectStylesheets": false,
"SkipLanguageValidation": true,
"SkipUnrequireValidation": true,
"SpmApp": true,
"GitRevision": "f9a83c602b2"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
.slider{height:22px;position:relative;transition:border 1.2s linear;transition:background .4s ease;width:36px}.slider{background:#000;border:2px solid #404040;border-radius:11px}.slider.enabled{background:#1db954;border-color:transparent}.slider.enabled div{background:#fff}.slider.enabled div{left:15px}.slider div{height:22px;position:absolute;top:-2px;width:22px;transition:all .4s ease}.slider div{background:#b3b3b3;border-radius:inherit;box-shadow:0 0 1px rgba(0,0,0,.75),0 0 3px rgba(0,0,0,.3)}.slider div{left:-5px}.slider:active div{width:26px}.slider:active div{background:#fff}.slider.enabled:active div{left:15px}.slider:hover div{background:#fff}.slider.disabled{pointer-events:none}.slider.disabled{background:#333;border-color:transparent}.slider.disabled div{background:#404040;box-shadow:none}.slider.disabled:active div{width:22px}.slider.disabled:active div,.slider.disabled:hover div{background:#404040}.slider.disabled.enabled:active div{left:15px}.slider:focus{outline:0}.app-header,.app-header__content{position:relative;z-index:2}.app-header__filter{position:relative;display:flex;z-index:1;align-items:center}.app-header__filter{border-top:0}.app-header__filter--search-field{flex-grow:1}.app-header__filter--search-field{margin-right:16px}.app-header__filter--offline-sync .slider{display:inline-block;vertical-align:middle}.app-header__filter--offline-sync .slider{margin-left:7px}.app-content{position:relative;z-index:1}.error-placeholder{position:absolute;width:100%;height:100%;top:0;display:none}.error-and-offline,.error-and-offline .error-content{display:block}.empty-filtered-content{padding-top:8px;padding-bottom:8px}.confirm-dialog{padding:15px;text-align:center}.confirm-dialog .button{margin-right:10px}.confirm-dialog-container .popover.modal{margin:0}.confirm-dialog-container .popover.modal{transform:translate(-50%,-50%)}
/*# sourceMappingURL=collection-songs.css.map*/

View File

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html dir="auto">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="https://local_resource_host/css/glue.css" />
<link rel="stylesheet" href="css/collection-songs.css"><link rel="stylesheet" class="userCSS" href="https://zlink.app.spotify.com/css/user.css"></head>
<body
class="unlike-removes-entity"
data-drop-target="text/x-spotify-tracks|text/x-spotify-albums"
>
<div id="content" data-play-source="library-collection">
<div
id="header-placeholder"
class="app-header"
data-interaction-context="header"
></div>
<div class="container app-content" data-interaction-context="body">
<div id="list-placeholder" data-interaction-context="tracklist"></div>
</div>
</div>
<div
id="error-placeholder"
data-ta-id="error-placeholder"
class="error-placeholder"
></div>
<div
id="confirm-delete-container"
class="hidden confirm-dialog-container"
></div>
<!-- "init.js" is served by the desktop client and provides the "window.__spotify" object. -->
<script src="init.js"></script>
<script src="collection-songs.bundle.js"></script></body>
</html>

View File

@ -0,0 +1,108 @@
{
"BundleIdentifier": "collection-songs",
"BundleType": "Application",
"BundleVersion": "1.1.55",
"VendorIdentifier": "com.spotify",
"UserInstallable": false,
"AppDescription": {
"en": "",
"ar": "",
"cs": "",
"de": "",
"el": "",
"es": "",
"es-419": "",
"fi": "",
"fr": "",
"fr-CA": "",
"he": "",
"hu": "",
"id": "",
"it": "",
"ja": "",
"ko": "",
"nl": "",
"pl": "",
"pt-BR": "",
"ru": "",
"sv": "",
"th": "",
"tr": "",
"vi": "",
"zh-Hant": "",
"ms": ""
},
"AppName": {
"en": "Collection Songs",
"ar": "Collection Songs",
"cs": "Collection Songs",
"de": "Collection Songs",
"el": "Collection Songs",
"es": "Collection Songs",
"es-419": "Collection Songs",
"fi": "Collection Songs",
"fr": "Collection Songs",
"fr-CA": "Collection Songs",
"he": "Collection Songs",
"hu": "Collection Songs",
"id": "Collection Songs",
"it": "Collection Songs",
"ja": "Collection Songs",
"ko": "Collection Songs",
"nl": "Collection Songs",
"pl": "Collection Songs",
"pt-BR": "Collection Songs",
"ru": "Collection Songs",
"sv": "Collection Songs",
"th": "Collection Songs",
"tr": "Collection Songs",
"vi": "Collection Songs",
"zh-Hant": "Collection Songs",
"ms": "Collection Songs"
},
"SupportedLanguages": [
"ar",
"cs",
"de",
"el",
"en",
"es",
"es-419",
"fi",
"fr",
"fr-CA",
"he",
"hu",
"id",
"it",
"ja",
"ko",
"nl",
"pl",
"pt-BR",
"ru",
"sv",
"th",
"tr",
"vi",
"zh-Hant",
"ms"
],
"SupportedDeviceClasses": [
"Desktop"
],
"BridgeDependencies": {
"bridge-desktop": "0.25.0",
"bridge-web": "2.50.0",
"bridge-zelda": "1.0.0"
},
"Dependencies": {
"api": "1.0.0"
},
"InjectScripts": false,
"InjectStylesheets": false,
"SkipLanguageValidation": true,
"SkipUnrequireValidation": true,
"SpmApp": true,
"GitRevision": "f9a83c602b2"
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
.GlueDropdown{color:#fff;height:28px;font-weight:var(--glue-font-weight-normal);font-size:14px;line-height:20px;letter-spacing:.015em}.GlueDropdown{background:#333;border:0}.GlueEmptyState{width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column}.GlueEmptyState__icon{line-height:1}.GlueEmptyState__icon{margin:10px}.GlueEmptyState__text{max-width:400px}.GlueEmptyState__text{text-align:center}.GlueToggle__toggle{height:22px;position:relative;transition:background .4s ease;width:36px}.GlueToggle__toggle{background:#000;border:2px solid #404040;border-radius:11px}.GlueToggle__toggle .GlueToggle__toggle-inner{height:22px;position:absolute;top:-2px;width:22px;transition:all .4s ease}.GlueToggle__toggle .GlueToggle__toggle-inner{background:#b3b3b3;border-radius:inherit;box-shadow:0 0 1px rgba(0,0,0,.75),0 0 3px rgba(0,0,0,.3)}.GlueToggle__toggle .GlueToggle__toggle-inner{left:-5px}.GlueToggle__toggle:active .GlueToggle__toggle-inner{width:26px}.GlueToggle__toggle:active .GlueToggle__toggle-inner,.GlueToggle__toggle:hover .GlueToggle__toggle-inner{background:#fff}.GlueToggle__toggle:focus{outline:0}.GlueToggle--is-active .GlueToggle__toggle{background:#1db954;border-color:transparent}.GlueToggle--is-active .GlueToggle__toggle .GlueToggle__toggle-inner{background:#fff}.GlueToggle--is-active .GlueToggle__toggle .GlueToggle__toggle-inner{left:15px}.GlueToggle--is-active .GlueToggle__toggle:active .GlueToggle__toggle-inner{left:15px}.GlueToggle--is-disabled .GlueToggle__toggle{pointer-events:none}.GlueToggle--is-disabled .GlueToggle__toggle{background:#333;border-color:transparent}.GlueToggle--is-disabled .GlueToggle__toggle .GlueToggle__toggle-inner{background:#404040;box-shadow:none}.GlueToggle--is-disabled .GlueToggle__toggle:active .GlueToggle__toggle-inner{width:22px}.GlueToggle--is-disabled .GlueToggle__toggle:active .GlueToggle__toggle-inner,.GlueToggle--is-disabled .GlueToggle__toggle:hover .GlueToggle__toggle-inner{background:#404040}.GlueToggle--is-disabled .GlueToggle__toggle.GlueToggle--is-active:active .GlueToggle__toggle-inner{left:15px}.GlueCardGrid__grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:16px}[data-min-width*=glue-md] .GlueCardGrid__grid{grid-gap:20px}[data-min-width*=glue-lg] .GlueCardGrid__grid{grid-gap:24px}.GlueSectionDivider{font-size:18px;line-height:24px;letter-spacing:-.005em;font-weight:var(--glue-font-weight-black);color:#fff;text-transform:none}.GlueSectionDivider{padding:26px 0 16px}.GlueSectionDivider__container{display:flex;justify-content:space-between;align-items:flex-end}.GlueSectionDivider__container{border-bottom:1px solid #282828;padding-bottom:4px}.GlueSectionDivider__auxiliary{flex-shrink:0}.GlueSectionDivider__title{font-size:18px;line-height:24px;letter-spacing:-.005em;font-weight:var(--glue-font-weight-black);color:#fff;text-transform:none}.GlueSectionDivider__title{margin:0}.GlueSectionDivider__description{font-size:14px;line-height:20px;letter-spacing:.015em;font-weight:var(--glue-font-weight-normal);text-transform:none;color:#b3b3b3}.GlueSectionDivider__description{margin:0}.App{display:flex;flex-direction:column;height:100vh}.App__header{position:relative;z-index:2}.App__content{position:relative;z-index:1;will-change:transform}.App__featured .bfs-debug-controls-overlay{display:none}.App__discover{padding:0 30px}.EmptyState{flex:1}.EmptyState .GlueEmptyState{height:auto}.EmptyState .GlueEmptyState{padding-top:30vh}.EmptyState .button{margin-top:24px}.section-divider .GlueDropdown{margin-left:10px}.section-divider .GlueToggle{display:inline-block;vertical-align:text-bottom}.section-divider .GlueToggle{margin-left:10px}
/*# sourceMappingURL=collection.css.map*/

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html dir="auto" lang="en">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="https://local_resource_host/css/glue.css" />
<title>Your Library</title>
<link rel="stylesheet" href="css/collection.css"><link rel="stylesheet" class="userCSS" href="https://zlink.app.spotify.com/css/user.css"></head>
<body class="unlike-removes-entity">
<div id="root"></div>
<!-- "init.js" is served by the desktop client and provides the "window.__spotify" object. -->
<script src="init.js"></script>
<script src="collection.bundle.js"></script></body>
</html>

View File

@ -0,0 +1,108 @@
{
"BundleIdentifier": "collection",
"BundleType": "Application",
"BundleVersion": "1.1.55",
"VendorIdentifier": "com.spotify",
"UserInstallable": false,
"AppDescription": {
"en": "",
"ar": "",
"cs": "",
"de": "",
"el": "",
"es": "",
"es-419": "",
"fi": "",
"fr": "",
"fr-CA": "",
"he": "",
"hu": "",
"id": "",
"it": "",
"ja": "",
"ko": "",
"nl": "",
"pl": "",
"pt-BR": "",
"ru": "",
"sv": "",
"th": "",
"tr": "",
"vi": "",
"zh-Hant": "",
"ms": ""
},
"AppName": {
"en": "Collection",
"ar": "Collection",
"cs": "Collection",
"de": "Collection",
"el": "Collection",
"es": "Collection",
"es-419": "Collection",
"fi": "Collection",
"fr": "Collection",
"fr-CA": "Collection",
"he": "Collection",
"hu": "Collection",
"id": "Collection",
"it": "Collection",
"ja": "Collection",
"ko": "Collection",
"nl": "Collection",
"pl": "Collection",
"pt-BR": "Collection",
"ru": "Collection",
"sv": "Collection",
"th": "Collection",
"tr": "Collection",
"vi": "Collection",
"zh-Hant": "Collection",
"ms": "Collection"
},
"SupportedLanguages": [
"ar",
"cs",
"de",
"el",
"en",
"es",
"es-419",
"fi",
"fr",
"fr-CA",
"he",
"hu",
"id",
"it",
"ja",
"ko",
"nl",
"pl",
"pt-BR",
"ru",
"sv",
"th",
"tr",
"vi",
"zh-Hant",
"ms"
],
"SupportedDeviceClasses": [
"Desktop"
],
"BridgeDependencies": {
"bridge-desktop": "0.25.0",
"bridge-web": "2.50.0",
"bridge-zelda": "1.0.0"
},
"Dependencies": {
"api": "1.0.0"
},
"InjectScripts": false,
"InjectStylesheets": false,
"SkipLanguageValidation": true,
"SkipUnrequireValidation": true,
"SpmApp": true,
"GitRevision": "f9a83c602b2"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More