first
3
X11/Xresources
Normal file
|
@ -0,0 +1,3 @@
|
|||
#include "/home/emh/.cache/wal/colors.Xresources"
|
||||
|
||||
Xft.dpi: 96
|
874
alacritty/alacritty.yml
Normal file
|
@ -0,0 +1,874 @@
|
|||
# Configuration for Alacritty, the GPU enhanced terminal emulator.
|
||||
|
||||
# Import additional configuration files
|
||||
#
|
||||
# Imports are loaded in order, skipping all missing files, with the importing
|
||||
# file being loaded last. If a field is already present in a previous import, it
|
||||
# will be replaced.
|
||||
#
|
||||
# All imports must either be absolute paths starting with `/`, or paths relative
|
||||
# to the user's home directory starting with `~/`.
|
||||
#import:
|
||||
# - /path/to/alacritty.yml
|
||||
|
||||
# Any items in the `env` entry below will be added as
|
||||
# environment variables. Some entries may override variables
|
||||
# set by alacritty itself.
|
||||
env:
|
||||
# TERM variable
|
||||
#
|
||||
# This value is used to set the `$TERM` environment variable for
|
||||
# each instance of Alacritty. If it is not present, alacritty will
|
||||
# check the local terminfo database and use `alacritty` if it is
|
||||
# available, otherwise `xterm-256color` is used.
|
||||
TERM: alacritty
|
||||
|
||||
window:
|
||||
# Window dimensions (changes require restart)
|
||||
#
|
||||
# Number of lines/columns (not pixels) in the terminal. The number of columns
|
||||
# must be at least `2`, while using a value of `0` for columns and lines will
|
||||
# fall back to the window manager's recommended size.
|
||||
#dimensions:
|
||||
# columns: 0
|
||||
# lines: 0
|
||||
|
||||
# Window position (changes require restart)
|
||||
#
|
||||
# Specified in number of pixels.
|
||||
# If the position is not set, the window manager will handle the placement.
|
||||
#position:
|
||||
# x: 0
|
||||
# y: 0
|
||||
|
||||
# Window padding (changes require restart)
|
||||
#
|
||||
# Blank space added around the window in pixels. This padding is scaled
|
||||
# by DPI and the specified value is always added at both opposing sides.
|
||||
padding:
|
||||
x: 5
|
||||
y: 5
|
||||
|
||||
# Spread additional padding evenly around the terminal content.
|
||||
#dynamic_padding: false
|
||||
|
||||
# Window decorations
|
||||
#
|
||||
# Values for `decorations`:
|
||||
# - full: Borders and title bar
|
||||
# - none: Neither borders nor title bar
|
||||
#
|
||||
# Values for `decorations` (macOS only):
|
||||
# - transparent: Title bar, transparent background and title bar buttons
|
||||
# - buttonless: Title bar, transparent background and no title bar buttons
|
||||
#decorations: full
|
||||
|
||||
# Background opacity
|
||||
#
|
||||
# Window opacity as a floating point number from `0.0` to `1.0`.
|
||||
# The value `0.0` is completely transparent and `1.0` is opaque.
|
||||
# opacity: .9
|
||||
|
||||
# Startup Mode (changes require restart)
|
||||
#
|
||||
# Values for `startup_mode`:
|
||||
# - Windowed
|
||||
# - Maximized
|
||||
# - Fullscreen
|
||||
#
|
||||
# Values for `startup_mode` (macOS only):
|
||||
# - SimpleFullscreen
|
||||
#startup_mode: Windowed
|
||||
|
||||
# Window title
|
||||
#title: Alacritty
|
||||
|
||||
# Allow terminal applications to change Alacritty's window title.
|
||||
#dynamic_title: true
|
||||
|
||||
# Window class (Linux/BSD only):
|
||||
#class:
|
||||
# Application instance name
|
||||
#instance: Alacritty
|
||||
# General application class
|
||||
#general: Alacritty
|
||||
|
||||
# GTK theme variant (Linux/BSD only)
|
||||
#
|
||||
# Override the variant of the GTK theme. Commonly supported values are `dark`
|
||||
# and `light`. Set this to `None` to use the default theme variant.
|
||||
#gtk_theme_variant: None
|
||||
|
||||
#scrolling:
|
||||
# Maximum number of lines in the scrollback buffer.
|
||||
# Specifying '0' will disable scrolling.
|
||||
#history: 10000
|
||||
|
||||
# Scrolling distance multiplier.
|
||||
#multiplier: 3
|
||||
|
||||
# Font configuration
|
||||
font:
|
||||
# Normal (roman) font face
|
||||
normal:
|
||||
# Font family
|
||||
#
|
||||
# Default:
|
||||
# - (macOS) Menlo
|
||||
# - (Linux/BSD) monospace
|
||||
# - (Windows) Consolas
|
||||
family: FiraCode Nerd Font Mono
|
||||
|
||||
# The `style` can be specified to pick a specific face.
|
||||
#style: Regular
|
||||
|
||||
# Bold font face
|
||||
#bold:
|
||||
# Font family
|
||||
#
|
||||
# If the bold family is not specified, it will fall back to the
|
||||
# value specified for the normal font.
|
||||
#family: monospace
|
||||
|
||||
# The `style` can be specified to pick a specific face.
|
||||
#style: Bold
|
||||
|
||||
# Italic font face
|
||||
#italic:
|
||||
# Font family
|
||||
#
|
||||
# If the italic family is not specified, it will fall back to the
|
||||
# value specified for the normal font.
|
||||
#family: monospace
|
||||
|
||||
# The `style` can be specified to pick a specific face.
|
||||
#style: Italic
|
||||
|
||||
# Bold italic font face
|
||||
#bold_itali:
|
||||
# Font family
|
||||
#
|
||||
# If the bold italic family is not specified, it will fall back to the
|
||||
# value specified for the normal font.
|
||||
#family: monospace
|
||||
|
||||
# The `style` can be specified to pick a specific face.
|
||||
#style: Bold Italic
|
||||
|
||||
# Point size
|
||||
size: 13.0
|
||||
|
||||
# Offset is the extra space around each character. `offset.y` can be thought
|
||||
# of as modifying the line spacing, and `offset.x` as modifying the letter
|
||||
# spacing.
|
||||
#offset:
|
||||
# x: 0
|
||||
# y: 0
|
||||
|
||||
# Glyph offset determines the locations of the glyphs within their cells with
|
||||
# the default being at the bottom. Increasing `x` moves the glyph to the
|
||||
# right, increasing `y` moves the glyph upward.
|
||||
#glyph_offset:
|
||||
# x: 0
|
||||
# y: 0
|
||||
|
||||
# Thin stroke font rendering (macOS only)
|
||||
#
|
||||
# Thin strokes are suitable for retina displays, but for non-retina screens
|
||||
# it is recommended to set `use_thin_strokes` to `false`.
|
||||
#use_thin_strokes: true
|
||||
|
||||
# If `true`, bold text is drawn using the bright color variants.
|
||||
#draw_bold_text_with_bright_colors: false
|
||||
|
||||
# Colors (Tomorrow Night)
|
||||
#colors:
|
||||
# Default colors
|
||||
#primary:
|
||||
# background: '#1d1f21'
|
||||
# foreground: '#c5c8c6'
|
||||
|
||||
# Bright and dim foreground colors
|
||||
#
|
||||
# The dimmed foreground color is calculated automatically if it is not
|
||||
# present. If the bright foreground color is not set, or
|
||||
# `draw_bold_text_with_bright_colors` is `false`, the normal foreground
|
||||
# color will be used.
|
||||
#dim_foreground: '#828482'
|
||||
#bright_foreground: '#eaeaea'
|
||||
|
||||
# Cursor colors
|
||||
#
|
||||
# Colors which should be used to draw the terminal cursor.
|
||||
#
|
||||
# Allowed values are CellForeground/CellBackground, which reference the
|
||||
# affected cell, or hexadecimal colors like #ff00ff.
|
||||
#cursor:
|
||||
# text: CellBackground
|
||||
# cursor: CellForeground
|
||||
|
||||
# Vi mode cursor colors
|
||||
#
|
||||
# Colors for the cursor when the vi mode is active.
|
||||
#
|
||||
# Allowed values are CellForeground/CellBackground, which reference the
|
||||
# affected cell, or hexadecimal colors like #ff00ff.
|
||||
#vi_mode_cursor:
|
||||
# text: CellBackground
|
||||
# cursor: CellForeground
|
||||
|
||||
# Search colors
|
||||
#
|
||||
# Colors used for the search bar and match highlighting.
|
||||
#search:
|
||||
# Allowed values are CellForeground/CellBackground, which reference the
|
||||
# affected cell, or hexadecimal colors like #ff00ff.
|
||||
#matches:
|
||||
# foreground: '#000000'
|
||||
# background: '#ffffff'
|
||||
#focused_match:
|
||||
# foreground: '#ffffff'
|
||||
# background: '#000000'
|
||||
|
||||
#bar:
|
||||
# background: '#c5c8c6'
|
||||
# foreground: '#1d1f21'
|
||||
|
||||
# Keyboard regex hints
|
||||
#hints:
|
||||
# First character in the hint label
|
||||
#
|
||||
# Allowed values are CellForeground/CellBackground, which reference the
|
||||
# affected cell, or hexadecimal colors like #ff00ff.
|
||||
#start:
|
||||
# foreground: '#1d1f21'
|
||||
# background: '#e9ff5e'
|
||||
|
||||
# All characters after the first one in the hint label
|
||||
#
|
||||
# Allowed values are CellForeground/CellBackground, which reference the
|
||||
# affected cell, or hexadecimal colors like #ff00ff.
|
||||
#end:
|
||||
# foreground: '#e9ff5e'
|
||||
# background: '#1d1f21'
|
||||
|
||||
# Line indicator
|
||||
#
|
||||
# Color used for the indicator displaying the position in history during
|
||||
# search and vi mode.
|
||||
#
|
||||
# By default, these will use the opposing primary color.
|
||||
#line_indicator:
|
||||
# foreground: None
|
||||
# background: None
|
||||
|
||||
# Selection colors
|
||||
#
|
||||
# Colors which should be used to draw the selection area.
|
||||
#
|
||||
# Allowed values are CellForeground/CellBackground, which reference the
|
||||
# affected cell, or hexadecimal colors like #ff00ff.
|
||||
#selection:
|
||||
# text: CellBackground
|
||||
# background: CellForeground
|
||||
|
||||
# Normal colors
|
||||
#normal:
|
||||
# black: '#1d1f21'
|
||||
# red: '#cc6666'
|
||||
# green: '#b5bd68'
|
||||
# yellow: '#f0c674'
|
||||
# blue: '#81a2be'
|
||||
# magenta: '#b294bb'
|
||||
# cyan: '#8abeb7'
|
||||
# white: '#c5c8c6'
|
||||
|
||||
# Bright colors
|
||||
#bright:
|
||||
# black: '#666666'
|
||||
# red: '#d54e53'
|
||||
# green: '#b9ca4a'
|
||||
# yellow: '#e7c547'
|
||||
# blue: '#7aa6da'
|
||||
# magenta: '#c397d8'
|
||||
# cyan: '#70c0b1'
|
||||
# white: '#eaeaea'
|
||||
|
||||
# Dim colors
|
||||
#
|
||||
# If the dim colors are not set, they will be calculated automatically based
|
||||
# on the `normal` colors.
|
||||
#dim:
|
||||
# black: '#131415'
|
||||
# red: '#864343'
|
||||
# green: '#777c44'
|
||||
# yellow: '#9e824c'
|
||||
# blue: '#556a7d'
|
||||
# magenta: '#75617b'
|
||||
# cyan: '#5b7d78'
|
||||
# white: '#828482'
|
||||
|
||||
# Indexed Colors
|
||||
#
|
||||
# The indexed colors include all colors from 16 to 256.
|
||||
# When these are not set, they're filled with sensible defaults.
|
||||
#
|
||||
# Example:
|
||||
# `- { index: 16, color: '#ff00ff' }`
|
||||
#
|
||||
#indexed_colors: []
|
||||
|
||||
# Transparent cell backgrounds
|
||||
#
|
||||
# Whether or not `window.opacity` applies to all cell backgrounds or only to
|
||||
# the default background. When set to `true` all cells will be transparent
|
||||
# regardless of their background color.
|
||||
#transparent_background_colors: false
|
||||
|
||||
# Bell
|
||||
#
|
||||
# The bell is rung every time the BEL control character is received.
|
||||
#bell:
|
||||
# Visual Bell Animation
|
||||
#
|
||||
# Animation effect for flashing the screen when the visual bell is rung.
|
||||
#
|
||||
# Values for `animation`:
|
||||
# - Ease
|
||||
# - EaseOut
|
||||
# - EaseOutSine
|
||||
# - EaseOutQuad
|
||||
# - EaseOutCubic
|
||||
# - EaseOutQuart
|
||||
# - EaseOutQuint
|
||||
# - EaseOutExpo
|
||||
# - EaseOutCirc
|
||||
# - Linear
|
||||
#animation: EaseOutExpo
|
||||
|
||||
# Duration of the visual bell flash in milliseconds. A `duration` of `0` will
|
||||
# disable the visual bell animation.
|
||||
#duration: 0
|
||||
|
||||
# Visual bell animation color.
|
||||
#color: '#ffffff'
|
||||
|
||||
# Bell Command
|
||||
#
|
||||
# This program is executed whenever the bell is rung.
|
||||
#
|
||||
# When set to `command: None`, no command will be executed.
|
||||
#
|
||||
# Example:
|
||||
# command:
|
||||
# program: notify-send
|
||||
# args: ["Hello, World!"]
|
||||
#
|
||||
#command: None
|
||||
|
||||
#selection:
|
||||
# This string contains all characters that are used as separators for
|
||||
# "semantic words" in Alacritty.
|
||||
#semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
|
||||
|
||||
# When set to `true`, selected text will be copied to the primary clipboard.
|
||||
#save_to_clipboard: false
|
||||
|
||||
cursor:
|
||||
# Cursor style
|
||||
style:
|
||||
# Cursor shape
|
||||
#
|
||||
# Values for `shape`:
|
||||
# - ▇ Block
|
||||
# - _ Underline
|
||||
# - | Beam
|
||||
shape: Beam
|
||||
|
||||
# Cursor blinking state
|
||||
#
|
||||
# Values for `blinking`:
|
||||
# - Never: Prevent the cursor from ever blinking
|
||||
# - Off: Disable blinking by default
|
||||
# - On: Enable blinking by default
|
||||
# - Always: Force the cursor to always blink
|
||||
#blinking: Off
|
||||
|
||||
# Vi mode cursor style
|
||||
#
|
||||
# If the vi mode cursor style is `None` or not specified, it will fall back to
|
||||
# the style of the active value of the normal cursor.
|
||||
#
|
||||
# See `cursor.style` for available options.
|
||||
#vi_mode_style: None
|
||||
|
||||
# Cursor blinking interval in milliseconds.
|
||||
#blink_interval: 750
|
||||
|
||||
# If this is `true`, the cursor will be rendered as a hollow box when the
|
||||
# window is not focused.
|
||||
#unfocused_hollow: true
|
||||
|
||||
# Thickness of the cursor relative to the cell width as floating point number
|
||||
# from `0.0` to `1.0`.
|
||||
#thickness: 0.15
|
||||
|
||||
# Live config reload (changes require restart)
|
||||
#live_config_reload: true
|
||||
|
||||
# Shell
|
||||
#
|
||||
# You can set `shell.program` to the path of your favorite shell, e.g.
|
||||
# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the
|
||||
# shell.
|
||||
#
|
||||
# Default:
|
||||
# - (macOS) /bin/bash --login
|
||||
# - (Linux/BSD) user login shell
|
||||
# - (Windows) powershell
|
||||
shell:
|
||||
program: /bin/zsh
|
||||
args:
|
||||
- --login
|
||||
|
||||
# Startup directory
|
||||
#
|
||||
# Directory the shell is started in. If this is unset, or `None`, the working
|
||||
# directory of the parent process will be used.
|
||||
#working_directory: None
|
||||
|
||||
# Send ESC (\x1b) before characters when alt is pressed.
|
||||
#alt_send_esc: true
|
||||
|
||||
# Offer IPC using `alacritty msg` (unix only)
|
||||
#ipc_socket: true
|
||||
|
||||
#mouse:
|
||||
# Click settings
|
||||
#
|
||||
# The `double_click` and `triple_click` settings control the time
|
||||
# alacritty should wait for accepting multiple clicks as one double
|
||||
# or triple click.
|
||||
#double_click: { threshold: 300 }
|
||||
#triple_click: { threshold: 300 }
|
||||
|
||||
# If this is `true`, the cursor is temporarily hidden when typing.
|
||||
#hide_when_typing: false
|
||||
|
||||
# Regex hints
|
||||
#
|
||||
# Terminal hints can be used to find text in the visible part of the terminal
|
||||
# and pipe it to other applications.
|
||||
#hints:
|
||||
# Keys used for the hint labels.
|
||||
#alphabet: "jfkdls;ahgurieowpq"
|
||||
|
||||
# List with all available hints
|
||||
#
|
||||
# Each hint must have a `regex` and either an `action` or a `command` field.
|
||||
# The fields `mouse`, `binding` and `post_processing` are optional.
|
||||
#
|
||||
# The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and
|
||||
# `mouse.mods` accept the same values as they do in the `key_bindings` section.
|
||||
#
|
||||
# The `mouse.enabled` field controls if the hint should be underlined while
|
||||
# the mouse with all `mouse.mods` keys held or the vi mode cursor is above it.
|
||||
#
|
||||
# If the `post_processing` field is set to `true`, heuristics will be used to
|
||||
# shorten the match if there are characters likely not to be part of the hint
|
||||
# (e.g. a trailing `.`). This is most useful for URIs.
|
||||
#
|
||||
# Values for `action`:
|
||||
# - Copy
|
||||
# Copy the hint's text to the clipboard.
|
||||
# - Paste
|
||||
# Paste the hint's text to the terminal or search.
|
||||
# - Select
|
||||
# Select the hint's text.
|
||||
# - MoveViModeCursor
|
||||
# Move the vi mode cursor to the beginning of the hint.
|
||||
#enabled:
|
||||
# - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\
|
||||
# [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+"
|
||||
# command: xdg-open
|
||||
# post_processing: true
|
||||
# mouse:
|
||||
# enabled: true
|
||||
# mods: None
|
||||
# binding:
|
||||
# key: U
|
||||
# mods: Control|Shift
|
||||
|
||||
# Mouse bindings
|
||||
#
|
||||
# Mouse bindings are specified as a list of objects, much like the key
|
||||
# bindings further below.
|
||||
#
|
||||
# To trigger mouse bindings when an application running within Alacritty
|
||||
# captures the mouse, the `Shift` modifier is automatically added as a
|
||||
# requirement.
|
||||
#
|
||||
# Each mouse binding will specify a:
|
||||
#
|
||||
# - `mouse`:
|
||||
#
|
||||
# - Middle
|
||||
# - Left
|
||||
# - Right
|
||||
# - Numeric identifier such as `5`
|
||||
#
|
||||
# - `action` (see key bindings for actions not exclusive to mouse mode)
|
||||
#
|
||||
# - Mouse exclusive actions:
|
||||
#
|
||||
# - ExpandSelection
|
||||
# Expand the selection to the current mouse cursor location.
|
||||
#
|
||||
# And optionally:
|
||||
#
|
||||
# - `mods` (see key bindings)
|
||||
#mouse_bindings:
|
||||
# - { mouse: Right, action: ExpandSelection }
|
||||
# - { mouse: Middle, mode: ~Vi, action: PasteSelection }
|
||||
|
||||
# Key bindings
|
||||
#
|
||||
# Key bindings are specified as a list of objects. For example, this is the
|
||||
# default paste binding:
|
||||
#
|
||||
# `- { key: V, mods: Control|Shift, action: Paste }`
|
||||
#
|
||||
# Each key binding will specify a:
|
||||
#
|
||||
# - `key`: Identifier of the key pressed
|
||||
#
|
||||
# - A-Z
|
||||
# - F1-F24
|
||||
# - Key0-Key9
|
||||
#
|
||||
# A full list with available key codes can be found here:
|
||||
# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants
|
||||
#
|
||||
# Instead of using the name of the keys, the `key` field also supports using
|
||||
# the scancode of the desired key. Scancodes have to be specified as a
|
||||
# decimal number. This command will allow you to display the hex scancodes
|
||||
# for certain keys:
|
||||
#
|
||||
# `showkey --scancodes`.
|
||||
#
|
||||
# Then exactly one of:
|
||||
#
|
||||
# - `chars`: Send a byte sequence to the running application
|
||||
#
|
||||
# The `chars` field writes the specified string to the terminal. This makes
|
||||
# it possible to pass escape sequences. To find escape codes for bindings
|
||||
# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside
|
||||
# of tmux. Note that applications use terminfo to map escape sequences back
|
||||
# to keys. It is therefore required to update the terminfo when changing an
|
||||
# escape sequence.
|
||||
#
|
||||
# - `action`: Execute a predefined action
|
||||
#
|
||||
# - ToggleViMode
|
||||
# - SearchForward
|
||||
# Start searching toward the right of the search origin.
|
||||
# - SearchBackward
|
||||
# Start searching toward the left of the search origin.
|
||||
# - Copy
|
||||
# - Paste
|
||||
# - IncreaseFontSize
|
||||
# - DecreaseFontSize
|
||||
# - ResetFontSize
|
||||
# - ScrollPageUp
|
||||
# - ScrollPageDown
|
||||
# - ScrollHalfPageUp
|
||||
# - ScrollHalfPageDown
|
||||
# - ScrollLineUp
|
||||
# - ScrollLineDown
|
||||
# - ScrollToTop
|
||||
# - ScrollToBottom
|
||||
# - ClearHistory
|
||||
# Remove the terminal's scrollback history.
|
||||
# - Hide
|
||||
# Hide the Alacritty window.
|
||||
# - Minimize
|
||||
# Minimize the Alacritty window.
|
||||
# - Quit
|
||||
# Quit Alacritty.
|
||||
# - ToggleFullscreen
|
||||
# - SpawnNewInstance
|
||||
# Spawn a new instance of Alacritty.
|
||||
# - CreateNewWindow
|
||||
# Create a new Alacritty window from the current process.
|
||||
# - ClearLogNotice
|
||||
# Clear Alacritty's UI warning and error notice.
|
||||
# - ClearSelection
|
||||
# Remove the active selection.
|
||||
# - ReceiveChar
|
||||
# - None
|
||||
#
|
||||
# - Vi mode exclusive actions:
|
||||
#
|
||||
# - Open
|
||||
# Perform the action of the first matching hint under the vi mode cursor
|
||||
# with `mouse.enabled` set to `true`.
|
||||
# - ToggleNormalSelection
|
||||
# - ToggleLineSelection
|
||||
# - ToggleBlockSelection
|
||||
# - ToggleSemanticSelection
|
||||
# Toggle semantic selection based on `selection.semantic_escape_chars`.
|
||||
#
|
||||
# - Vi mode exclusive cursor motion actions:
|
||||
#
|
||||
# - Up
|
||||
# One line up.
|
||||
# - Down
|
||||
# One line down.
|
||||
# - Left
|
||||
# One character left.
|
||||
# - Right
|
||||
# One character right.
|
||||
# - First
|
||||
# First column, or beginning of the line when already at the first column.
|
||||
# - Last
|
||||
# Last column, or beginning of the line when already at the last column.
|
||||
# - FirstOccupied
|
||||
# First non-empty cell in this terminal row, or first non-empty cell of
|
||||
# the line when already at the first cell of the row.
|
||||
# - High
|
||||
# Top of the screen.
|
||||
# - Middle
|
||||
# Center of the screen.
|
||||
# - Low
|
||||
# Bottom of the screen.
|
||||
# - SemanticLeft
|
||||
# Start of the previous semantically separated word.
|
||||
# - SemanticRight
|
||||
# Start of the next semantically separated word.
|
||||
# - SemanticLeftEnd
|
||||
# End of the previous semantically separated word.
|
||||
# - SemanticRightEnd
|
||||
# End of the next semantically separated word.
|
||||
# - WordLeft
|
||||
# Start of the previous whitespace separated word.
|
||||
# - WordRight
|
||||
# Start of the next whitespace separated word.
|
||||
# - WordLeftEnd
|
||||
# End of the previous whitespace separated word.
|
||||
# - WordRightEnd
|
||||
# End of the next whitespace separated word.
|
||||
# - Bracket
|
||||
# Character matching the bracket at the cursor's location.
|
||||
# - SearchNext
|
||||
# Beginning of the next match.
|
||||
# - SearchPrevious
|
||||
# Beginning of the previous match.
|
||||
# - SearchStart
|
||||
# Start of the match to the left of the vi mode cursor.
|
||||
# - SearchEnd
|
||||
# End of the match to the right of the vi mode cursor.
|
||||
#
|
||||
# - Search mode exclusive actions:
|
||||
# - SearchFocusNext
|
||||
# Move the focus to the next search match.
|
||||
# - SearchFocusPrevious
|
||||
# Move the focus to the previous search match.
|
||||
# - SearchConfirm
|
||||
# - SearchCancel
|
||||
# - SearchClear
|
||||
# Reset the search regex.
|
||||
# - SearchDeleteWord
|
||||
# Delete the last word in the search regex.
|
||||
# - SearchHistoryPrevious
|
||||
# Go to the previous regex in the search history.
|
||||
# - SearchHistoryNext
|
||||
# Go to the next regex in the search history.
|
||||
#
|
||||
# - macOS exclusive actions:
|
||||
# - ToggleSimpleFullscreen
|
||||
# Enter fullscreen without occupying another space.
|
||||
#
|
||||
# - Linux/BSD exclusive actions:
|
||||
#
|
||||
# - CopySelection
|
||||
# Copy from the selection buffer.
|
||||
# - PasteSelection
|
||||
# Paste from the selection buffer.
|
||||
#
|
||||
# - `command`: Fork and execute a specified command plus arguments
|
||||
#
|
||||
# The `command` field must be a map containing a `program` string and an
|
||||
# `args` array of command line parameter strings. For example:
|
||||
# `{ program: "alacritty", args: ["-e", "vttest"] }`
|
||||
#
|
||||
# And optionally:
|
||||
#
|
||||
# - `mods`: Key modifiers to filter binding actions
|
||||
#
|
||||
# - Command
|
||||
# - Control
|
||||
# - Option
|
||||
# - Super
|
||||
# - Shift
|
||||
# - Alt
|
||||
#
|
||||
# Multiple `mods` can be combined using `|` like this:
|
||||
# `mods: Control|Shift`.
|
||||
# Whitespace and capitalization are relevant and must match the example.
|
||||
#
|
||||
# - `mode`: Indicate a binding for only specific terminal reported modes
|
||||
#
|
||||
# This is mainly used to send applications the correct escape sequences
|
||||
# when in different modes.
|
||||
#
|
||||
# - AppCursor
|
||||
# - AppKeypad
|
||||
# - Search
|
||||
# - Alt
|
||||
# - Vi
|
||||
#
|
||||
# A `~` operator can be used before a mode to apply the binding whenever
|
||||
# the mode is *not* active, e.g. `~Alt`.
|
||||
#
|
||||
# Bindings are always filled by default, but will be replaced when a new
|
||||
# binding with the same triggers is defined. To unset a default binding, it can
|
||||
# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
|
||||
# a no-op if you do not wish to receive input characters for that binding.
|
||||
#
|
||||
# If the same trigger is assigned to multiple actions, all of them are executed
|
||||
# in the order they were defined in.
|
||||
#key_bindings:
|
||||
#- { key: Paste, action: Paste }
|
||||
#- { key: Copy, action: Copy }
|
||||
#- { key: L, mods: Control, action: ClearLogNotice }
|
||||
#- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" }
|
||||
#- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp, }
|
||||
#- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown }
|
||||
#- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop, }
|
||||
#- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom }
|
||||
|
||||
# Vi Mode
|
||||
#- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode }
|
||||
#- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom }
|
||||
#- { key: Escape, mode: Vi|~Search, action: ClearSelection }
|
||||
#- { key: I, mode: Vi|~Search, action: ToggleViMode }
|
||||
#- { key: I, mode: Vi|~Search, action: ScrollToBottom }
|
||||
#- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode }
|
||||
#- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp }
|
||||
#- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown }
|
||||
#- { key: G, mode: Vi|~Search, action: ScrollToTop }
|
||||
#- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom }
|
||||
#- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp }
|
||||
#- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown }
|
||||
#- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp }
|
||||
#- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown }
|
||||
#- { key: Y, mode: Vi|~Search, action: Copy }
|
||||
#- { key: Y, mode: Vi|~Search, action: ClearSelection }
|
||||
#- { key: Copy, mode: Vi|~Search, action: ClearSelection }
|
||||
#- { key: V, mode: Vi|~Search, action: ToggleNormalSelection }
|
||||
#- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection }
|
||||
#- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection }
|
||||
#- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection }
|
||||
#- { key: Return, mode: Vi|~Search, action: Open }
|
||||
#- { key: K, mode: Vi|~Search, action: Up }
|
||||
#- { key: J, mode: Vi|~Search, action: Down }
|
||||
#- { key: H, mode: Vi|~Search, action: Left }
|
||||
#- { key: L, mode: Vi|~Search, action: Right }
|
||||
#- { key: Up, mode: Vi|~Search, action: Up }
|
||||
#- { key: Down, mode: Vi|~Search, action: Down }
|
||||
#- { key: Left, mode: Vi|~Search, action: Left }
|
||||
#- { key: Right, mode: Vi|~Search, action: Right }
|
||||
#- { key: Key0, mode: Vi|~Search, action: First }
|
||||
#- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last }
|
||||
#- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied }
|
||||
#- { key: H, mods: Shift, mode: Vi|~Search, action: High }
|
||||
#- { key: M, mods: Shift, mode: Vi|~Search, action: Middle }
|
||||
#- { key: L, mods: Shift, mode: Vi|~Search, action: Low }
|
||||
#- { key: B, mode: Vi|~Search, action: SemanticLeft }
|
||||
#- { key: W, mode: Vi|~Search, action: SemanticRight }
|
||||
#- { key: E, mode: Vi|~Search, action: SemanticRightEnd }
|
||||
#- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft }
|
||||
#- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight }
|
||||
#- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd }
|
||||
#- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket }
|
||||
#- { key: Slash, mode: Vi|~Search, action: SearchForward }
|
||||
#- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward }
|
||||
#- { key: N, mode: Vi|~Search, action: SearchNext }
|
||||
#- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious }
|
||||
|
||||
# Search Mode
|
||||
#- { key: Return, mode: Search|Vi, action: SearchConfirm }
|
||||
#- { key: Escape, mode: Search, action: SearchCancel }
|
||||
#- { key: C, mods: Control, mode: Search, action: SearchCancel }
|
||||
#- { key: U, mods: Control, mode: Search, action: SearchClear }
|
||||
#- { key: W, mods: Control, mode: Search, action: SearchDeleteWord }
|
||||
#- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious }
|
||||
#- { key: N, mods: Control, mode: Search, action: SearchHistoryNext }
|
||||
#- { key: Up, mode: Search, action: SearchHistoryPrevious }
|
||||
#- { key: Down, mode: Search, action: SearchHistoryNext }
|
||||
#- { key: Return, mode: Search|~Vi, action: SearchFocusNext }
|
||||
#- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious }
|
||||
|
||||
# (Windows, Linux, and BSD only)
|
||||
#- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste }
|
||||
#- { key: C, mods: Control|Shift, action: Copy }
|
||||
#- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward }
|
||||
#- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward }
|
||||
#- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection }
|
||||
#- { key: Insert, mods: Shift, action: PasteSelection }
|
||||
#- { key: Key0, mods: Control, action: ResetFontSize }
|
||||
#- { key: Equals, mods: Control, action: IncreaseFontSize }
|
||||
#- { key: Plus, mods: Control, action: IncreaseFontSize }
|
||||
#- { key: NumpadAdd, mods: Control, action: IncreaseFontSize }
|
||||
#- { key: Minus, mods: Control, action: DecreaseFontSize }
|
||||
#- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize }
|
||||
|
||||
# (Windows only)
|
||||
#- { key: Return, mods: Alt, action: ToggleFullscreen }
|
||||
|
||||
# (macOS only)
|
||||
#- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" }
|
||||
#- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory }
|
||||
#- { key: Key0, mods: Command, action: ResetFontSize }
|
||||
#- { key: Equals, mods: Command, action: IncreaseFontSize }
|
||||
#- { key: Plus, mods: Command, action: IncreaseFontSize }
|
||||
#- { key: NumpadAdd, mods: Command, action: IncreaseFontSize }
|
||||
#- { key: Minus, mods: Command, action: DecreaseFontSize }
|
||||
#- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize }
|
||||
#- { key: V, mods: Command, action: Paste }
|
||||
#- { key: C, mods: Command, action: Copy }
|
||||
#- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection }
|
||||
#- { key: H, mods: Command, action: Hide }
|
||||
#- { key: H, mods: Command|Alt, action: HideOtherApplications }
|
||||
#- { key: M, mods: Command, action: Minimize }
|
||||
#- { key: Q, mods: Command, action: Quit }
|
||||
#- { key: W, mods: Command, action: Quit }
|
||||
#- { key: N, mods: Command, action: SpawnNewInstance }
|
||||
#- { key: F, mods: Command|Control, action: ToggleFullscreen }
|
||||
#- { key: F, mods: Command, mode: ~Search, action: SearchForward }
|
||||
#- { key: B, mods: Command, mode: ~Search, action: SearchBackward }
|
||||
|
||||
#debug:
|
||||
# Display the time it takes to redraw each frame.
|
||||
#render_timer: false
|
||||
|
||||
# Keep the log file after quitting Alacritty.
|
||||
#persistent_logging: false
|
||||
|
||||
# Log level
|
||||
#
|
||||
# Values for `log_level`:
|
||||
# - Off
|
||||
# - Error
|
||||
# - Warn
|
||||
# - Info
|
||||
# - Debug
|
||||
# - Trace
|
||||
#log_level: Warn
|
||||
|
||||
# Print all received window events.
|
||||
#print_events: falsec
|
||||
|
||||
|
||||
import:
|
||||
- ~/.cache/wal/colors-alacritty.yml
|
1
bat/config
Normal file
|
@ -0,0 +1 @@
|
|||
--theme base16
|
82
bspwm/bspwmrc
Executable file
|
@ -0,0 +1,82 @@
|
|||
#! /bin/sh
|
||||
|
||||
# monitor setup
|
||||
if [[ $(cat /etc/hostname) == "gojou" ]]; then
|
||||
bspc monitor DP-1 -d 1 2 3 4 5 101
|
||||
bspc monitor HDMI-1 -d 6 7 8 9 102
|
||||
elif [[ $(cat /etc/hostname) == "uzui" ]]; then
|
||||
bspc monitor -d 1 2 3 4 5 6 7 8 9 101
|
||||
else
|
||||
bspc monitor -d 1 101
|
||||
fi
|
||||
|
||||
bspc wm -O DP-1 HDMI-1
|
||||
|
||||
|
||||
# change window settings
|
||||
bspc config border_width 2
|
||||
bspc config window_gap 12
|
||||
|
||||
# change tiling settings
|
||||
bspc config split_ratio 0.52
|
||||
bspc config borderless_monocle true
|
||||
bspc config gapless_monocle true
|
||||
|
||||
|
||||
# sxhkd shortcut start
|
||||
pgrep -x sxhkd > /dev/null || sxhkd &
|
||||
|
||||
# get env vars
|
||||
. "${HOME}/.zshenv"
|
||||
|
||||
# set background
|
||||
. "${FEH_HOME}/.fehbg"
|
||||
|
||||
# launch polybar
|
||||
$HOME/.config/polybar/launch.sh
|
||||
|
||||
|
||||
# source wal colors
|
||||
. "${HOME}/.cache/wal/colors.sh"
|
||||
|
||||
# launch picom
|
||||
picom -b
|
||||
|
||||
# fix intelliJ kekw
|
||||
wmname LG3D
|
||||
|
||||
# change pointer config to super
|
||||
bspc config pointer_modifier mod4
|
||||
|
||||
# pointer actions on untiled windows
|
||||
bspc config pointer_action1 move
|
||||
bspc config pointer_action2 resize_side
|
||||
|
||||
# change color of border to the bright red
|
||||
bspc config normal_border_color "$color15"
|
||||
bspc config active_border_color "$color2"
|
||||
bspc config focused_border_color "$color1"
|
||||
bspc config presel_feedback_color "$color4"
|
||||
|
||||
# set window rules
|
||||
bspc rule -a feh state=floating
|
||||
bspc rule -a mpv state=floating
|
||||
bspc rule -a discord desktop='8'
|
||||
bspc rule -a helvum desktop='9' focus=on follow=on state=floating
|
||||
bspc rule -a Pavucontrol desktop='9' focus=on follow=on state=floating
|
||||
bspc rule -a obs desktop='9' focus=on follow=on
|
||||
|
||||
# spotify smh
|
||||
bspc config external_rules_command "$XDG_CONFIG_HOME/bspwm/nprogs.sh"
|
||||
|
||||
|
||||
# starting programs
|
||||
udiskie &
|
||||
dunst &
|
||||
|
||||
# lock screen
|
||||
xset s on
|
||||
xset s 600
|
||||
xss-lock -n /usr/lib/xsecurelock/dimmer -l -- xsec &
|
||||
|
||||
|
25
bspwm/nprogs.sh
Executable file
|
@ -0,0 +1,25 @@
|
|||
#!/bin/sh
|
||||
|
||||
id="${1?}" \
|
||||
instance="$3" \
|
||||
class="$2";
|
||||
|
||||
case "$class" in
|
||||
(foo)
|
||||
bar;;
|
||||
("")
|
||||
unset -v _NET_WM_PID;
|
||||
. /dev/fd/0 2>/dev/null <<IN
|
||||
: \"\${$(
|
||||
xprop \
|
||||
-id "$id" \
|
||||
-notype \
|
||||
-f _NET_WM_PID 32c '=$0' \
|
||||
_NET_WM_PID;
|
||||
)}\";
|
||||
IN
|
||||
case "$(ps -p "${_NET_WM_PID:?}" -o comm= 2>/dev/null)" in
|
||||
(spotify)
|
||||
echo desktop=7 follow=on focus=on;;
|
||||
esac;;
|
||||
esac;
|
15
install
Executable file
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
CONFIG="install.conf.yaml"
|
||||
DOTBOT_DIR="dotbot"
|
||||
|
||||
DOTBOT_BIN="bin/dotbot"
|
||||
BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
cd "${BASEDIR}"
|
||||
git -C "${DOTBOT_DIR}" submodule sync --quiet --recursive
|
||||
git submodule update --init --recursive "${DOTBOT_DIR}"
|
||||
|
||||
"${BASEDIR}/${DOTBOT_DIR}/${DOTBOT_BIN}" -d "${BASEDIR}" -c "${CONFIG}" "${@}"
|
47
install.conf.yaml
Normal file
|
@ -0,0 +1,47 @@
|
|||
- defaults:
|
||||
link:
|
||||
relink: true
|
||||
|
||||
- clean: ['~']
|
||||
|
||||
- create:
|
||||
- ~/.config/zsh
|
||||
- ~/.config/X11
|
||||
- ~/.config/alacritty
|
||||
- ~/.config/latexmk
|
||||
- ~/media/spotify
|
||||
- ~/media/games/krunker
|
||||
- ~/media/games/minecraft
|
||||
- ~/.local/share/mozilla
|
||||
- ~/.config/feh
|
||||
- ~/.config/radare2
|
||||
- ~/.config/rizin
|
||||
- ~/.config/spicetify
|
||||
- ~/.config/bat
|
||||
|
||||
- link:
|
||||
~/.config/zsh/.zshrc: zsh/zshrc
|
||||
~/.config/nvim/init.lua: nvim/init.lua
|
||||
~/.config/nvim/lua: nvim/lua
|
||||
~/.config/X11/Xresources: X11/Xresources
|
||||
~/.config/bspwm: bspwm
|
||||
~/.config/sxhkd: sxhkd
|
||||
~/.config/bin: scripts
|
||||
~/.config/wal: wal
|
||||
~/.config/picom.conf: picom/picom.conf
|
||||
~/.config/alacritty/alacritty.yml: alacritty/alacritty.yml
|
||||
~/.config/latexmk/latexmkrc: latexmk/latexmkrc
|
||||
~/.config/polybar: polybar
|
||||
~/.config/ranger: ranger
|
||||
~/.config/rofi: rofi
|
||||
~/.xinitrc: xinitrc
|
||||
~/.zshenv: zshenv
|
||||
~/.config/wallpapers: wallpapers
|
||||
~/.config/radare2/radare2rc: r2rizin/radare2rc
|
||||
~/.config/rizin/rizinrc: r2rizin/rizinrc
|
||||
~/.config/kitty: kitty
|
||||
~/.config/neofetch: neofetch
|
||||
~/.config/spicetify/config-xpui.ini: spicetify/config.ini
|
||||
~/.config/spicetify/Themes: spicetify/themes
|
||||
~/.config/spicetify/Extensions: spicetify/extensions
|
||||
~/.config/bat/config: bat/config
|
2013
kitty/kitty.conf
Normal file
1
latexmk/latexmkrc
Normal file
|
@ -0,0 +1 @@
|
|||
$pdf_previewer = "zathura %O %S";
|
864
neofetch/config.conf
Normal file
|
@ -0,0 +1,864 @@
|
|||
# See this wiki page for more info:
|
||||
# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
|
||||
print_info() {
|
||||
info title
|
||||
info underline
|
||||
|
||||
info "OS" distro
|
||||
info "Host" model
|
||||
info "Kernel" kernel
|
||||
info "Uptime" uptime
|
||||
info "Packages" packages
|
||||
info "Shell" shell
|
||||
info "Resolution" resolution
|
||||
# info "DE" de
|
||||
info "WM" de
|
||||
# info "WM Theme" wm_theme
|
||||
info "Theme" theme
|
||||
info "Icons" icons
|
||||
info "Terminal" term
|
||||
# info "Terminal Font" term_font
|
||||
info "CPU" cpu
|
||||
info "GPU" gpu
|
||||
info "Memory" memory
|
||||
|
||||
# info "GPU Driver" gpu_driver # Linux/macOS only
|
||||
# info "CPU Usage" cpu_usage
|
||||
# info "Disk" disk
|
||||
# info "Battery" battery
|
||||
# info "Font" font
|
||||
# info "Song" song
|
||||
# [[ "$player" ]] && prin "Music Player" "$player"
|
||||
# info "Local IP" local_ip
|
||||
# info "Public IP" public_ip
|
||||
# info "Users" users
|
||||
# info "Locale" locale # This only works on glibc systems.
|
||||
|
||||
info cols
|
||||
}
|
||||
|
||||
# Title
|
||||
|
||||
|
||||
# Hide/Show Fully qualified domain name.
|
||||
#
|
||||
# Default: 'off'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --title_fqdn
|
||||
title_fqdn="off"
|
||||
|
||||
|
||||
# Kernel
|
||||
|
||||
|
||||
# Shorten the output of the kernel function.
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --kernel_shorthand
|
||||
# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
|
||||
#
|
||||
# Example:
|
||||
# on: '4.8.9-1-ARCH'
|
||||
# off: 'Linux 4.8.9-1-ARCH'
|
||||
kernel_shorthand="on"
|
||||
|
||||
|
||||
# Distro
|
||||
|
||||
|
||||
# Shorten the output of the distro function
|
||||
#
|
||||
# Default: 'off'
|
||||
# Values: 'on', 'tiny', 'off'
|
||||
# Flag: --distro_shorthand
|
||||
# Supports: Everything except Windows and Haiku
|
||||
distro_shorthand="off"
|
||||
|
||||
# Show/Hide OS Architecture.
|
||||
# Show 'x86_64', 'x86' and etc in 'Distro:' output.
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --os_arch
|
||||
#
|
||||
# Example:
|
||||
# on: 'Arch Linux x86_64'
|
||||
# off: 'Arch Linux'
|
||||
os_arch="on"
|
||||
|
||||
|
||||
# Uptime
|
||||
|
||||
|
||||
# Shorten the output of the uptime function
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'tiny', 'off'
|
||||
# Flag: --uptime_shorthand
|
||||
#
|
||||
# Example:
|
||||
# on: '2 days, 10 hours, 3 mins'
|
||||
# tiny: '2d 10h 3m'
|
||||
# off: '2 days, 10 hours, 3 minutes'
|
||||
uptime_shorthand="on"
|
||||
|
||||
|
||||
# Memory
|
||||
|
||||
|
||||
# Show memory pecentage in output.
|
||||
#
|
||||
# Default: 'off'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --memory_percent
|
||||
#
|
||||
# Example:
|
||||
# on: '1801MiB / 7881MiB (22%)'
|
||||
# off: '1801MiB / 7881MiB'
|
||||
memory_percent="off"
|
||||
|
||||
# Change memory output unit.
|
||||
#
|
||||
# Default: 'mib'
|
||||
# Values: 'kib', 'mib', 'gib'
|
||||
# Flag: --memory_unit
|
||||
#
|
||||
# Example:
|
||||
# kib '1020928KiB / 7117824KiB'
|
||||
# mib '1042MiB / 6951MiB'
|
||||
# gib: ' 0.98GiB / 6.79GiB'
|
||||
memory_unit="mib"
|
||||
|
||||
|
||||
# Packages
|
||||
|
||||
|
||||
# Show/Hide Package Manager names.
|
||||
#
|
||||
# Default: 'tiny'
|
||||
# Values: 'on', 'tiny' 'off'
|
||||
# Flag: --package_managers
|
||||
#
|
||||
# Example:
|
||||
# on: '998 (pacman), 8 (flatpak), 4 (snap)'
|
||||
# tiny: '908 (pacman, flatpak, snap)'
|
||||
# off: '908'
|
||||
package_managers="on"
|
||||
|
||||
|
||||
# Shell
|
||||
|
||||
|
||||
# Show the path to $SHELL
|
||||
#
|
||||
# Default: 'off'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --shell_path
|
||||
#
|
||||
# Example:
|
||||
# on: '/bin/bash'
|
||||
# off: 'bash'
|
||||
shell_path="off"
|
||||
|
||||
# Show $SHELL version
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --shell_version
|
||||
#
|
||||
# Example:
|
||||
# on: 'bash 4.4.5'
|
||||
# off: 'bash'
|
||||
shell_version="on"
|
||||
|
||||
|
||||
# CPU
|
||||
|
||||
|
||||
# CPU speed type
|
||||
#
|
||||
# Default: 'bios_limit'
|
||||
# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
|
||||
# Flag: --speed_type
|
||||
# Supports: Linux with 'cpufreq'
|
||||
# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
|
||||
speed_type="bios_limit"
|
||||
|
||||
# CPU speed shorthand
|
||||
#
|
||||
# Default: 'off'
|
||||
# Values: 'on', 'off'.
|
||||
# Flag: --speed_shorthand
|
||||
# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
|
||||
#
|
||||
# Example:
|
||||
# on: 'i7-6500U (4) @ 3.1GHz'
|
||||
# off: 'i7-6500U (4) @ 3.100GHz'
|
||||
speed_shorthand="off"
|
||||
|
||||
# Enable/Disable CPU brand in output.
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --cpu_brand
|
||||
#
|
||||
# Example:
|
||||
# on: 'Intel i7-6500U'
|
||||
# off: 'i7-6500U (4)'
|
||||
cpu_brand="on"
|
||||
|
||||
# CPU Speed
|
||||
# Hide/Show CPU speed.
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --cpu_speed
|
||||
#
|
||||
# Example:
|
||||
# on: 'Intel i7-6500U (4) @ 3.1GHz'
|
||||
# off: 'Intel i7-6500U (4)'
|
||||
cpu_speed="on"
|
||||
|
||||
# CPU Cores
|
||||
# Display CPU cores in output
|
||||
#
|
||||
# Default: 'logical'
|
||||
# Values: 'logical', 'physical', 'off'
|
||||
# Flag: --cpu_cores
|
||||
# Support: 'physical' doesn't work on BSD.
|
||||
#
|
||||
# Example:
|
||||
# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
|
||||
# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
|
||||
# off: 'Intel i7-6500U @ 3.1GHz'
|
||||
cpu_cores="logical"
|
||||
|
||||
# CPU Temperature
|
||||
# Hide/Show CPU temperature.
|
||||
# Note the temperature is added to the regular CPU function.
|
||||
#
|
||||
# Default: 'off'
|
||||
# Values: 'C', 'F', 'off'
|
||||
# Flag: --cpu_temp
|
||||
# Supports: Linux, BSD
|
||||
# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
|
||||
# coretemp kernel module. This only supports newer Intel processors.
|
||||
#
|
||||
# Example:
|
||||
# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
|
||||
# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
|
||||
# off: 'Intel i7-6500U (4) @ 3.1GHz'
|
||||
cpu_temp="off"
|
||||
|
||||
|
||||
# GPU
|
||||
|
||||
|
||||
# Enable/Disable GPU Brand
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --gpu_brand
|
||||
#
|
||||
# Example:
|
||||
# on: 'AMD HD 7950'
|
||||
# off: 'HD 7950'
|
||||
gpu_brand="on"
|
||||
|
||||
# Which GPU to display
|
||||
#
|
||||
# Default: 'all'
|
||||
# Values: 'all', 'dedicated', 'integrated'
|
||||
# Flag: --gpu_type
|
||||
# Supports: Linux
|
||||
#
|
||||
# Example:
|
||||
# all:
|
||||
# GPU1: AMD HD 7950
|
||||
# GPU2: Intel Integrated Graphics
|
||||
#
|
||||
# dedicated:
|
||||
# GPU1: AMD HD 7950
|
||||
#
|
||||
# integrated:
|
||||
# GPU1: Intel Integrated Graphics
|
||||
gpu_type="all"
|
||||
|
||||
|
||||
# Resolution
|
||||
|
||||
|
||||
# Display refresh rate next to each monitor
|
||||
# Default: 'off'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --refresh_rate
|
||||
# Supports: Doesn't work on Windows.
|
||||
#
|
||||
# Example:
|
||||
# on: '1920x1080 @ 60Hz'
|
||||
# off: '1920x1080'
|
||||
refresh_rate="off"
|
||||
|
||||
|
||||
# Gtk Theme / Icons / Font
|
||||
|
||||
|
||||
# Shorten output of GTK Theme / Icons / Font
|
||||
#
|
||||
# Default: 'off'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --gtk_shorthand
|
||||
#
|
||||
# Example:
|
||||
# on: 'Numix, Adwaita'
|
||||
# off: 'Numix [GTK2], Adwaita [GTK3]'
|
||||
gtk_shorthand="off"
|
||||
|
||||
|
||||
# Enable/Disable gtk2 Theme / Icons / Font
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --gtk2
|
||||
#
|
||||
# Example:
|
||||
# on: 'Numix [GTK2], Adwaita [GTK3]'
|
||||
# off: 'Adwaita [GTK3]'
|
||||
gtk2="on"
|
||||
|
||||
# Enable/Disable gtk3 Theme / Icons / Font
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --gtk3
|
||||
#
|
||||
# Example:
|
||||
# on: 'Numix [GTK2], Adwaita [GTK3]'
|
||||
# off: 'Numix [GTK2]'
|
||||
gtk3="on"
|
||||
|
||||
|
||||
# IP Address
|
||||
|
||||
|
||||
# Website to ping for the public IP
|
||||
#
|
||||
# Default: 'http://ident.me'
|
||||
# Values: 'url'
|
||||
# Flag: --ip_host
|
||||
public_ip_host="http://ident.me"
|
||||
|
||||
# Public IP timeout.
|
||||
#
|
||||
# Default: '2'
|
||||
# Values: 'int'
|
||||
# Flag: --ip_timeout
|
||||
public_ip_timeout=2
|
||||
|
||||
|
||||
# Desktop Environment
|
||||
|
||||
|
||||
# Show Desktop Environment version
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --de_version
|
||||
de_version="on"
|
||||
|
||||
|
||||
# Disk
|
||||
|
||||
|
||||
# Which disks to display.
|
||||
# The values can be any /dev/sdXX, mount point or directory.
|
||||
# NOTE: By default we only show the disk info for '/'.
|
||||
#
|
||||
# Default: '/'
|
||||
# Values: '/', '/dev/sdXX', '/path/to/drive'.
|
||||
# Flag: --disk_show
|
||||
#
|
||||
# Example:
|
||||
# disk_show=('/' '/dev/sdb1'):
|
||||
# 'Disk (/): 74G / 118G (66%)'
|
||||
# 'Disk (/mnt/Videos): 823G / 893G (93%)'
|
||||
#
|
||||
# disk_show=('/'):
|
||||
# 'Disk (/): 74G / 118G (66%)'
|
||||
#
|
||||
disk_show=('/')
|
||||
|
||||
# Disk subtitle.
|
||||
# What to append to the Disk subtitle.
|
||||
#
|
||||
# Default: 'mount'
|
||||
# Values: 'mount', 'name', 'dir', 'none'
|
||||
# Flag: --disk_subtitle
|
||||
#
|
||||
# Example:
|
||||
# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
|
||||
# 'Disk (/dev/sdb2): 74G / 118G (66%)'
|
||||
#
|
||||
# mount: 'Disk (/): 74G / 118G (66%)'
|
||||
# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
|
||||
# 'Disk (/mnt/Videos): 74G / 118G (66%)'
|
||||
#
|
||||
# dir: 'Disk (/): 74G / 118G (66%)'
|
||||
# 'Disk (Local Disk): 74G / 118G (66%)'
|
||||
# 'Disk (Videos): 74G / 118G (66%)'
|
||||
#
|
||||
# none: 'Disk: 74G / 118G (66%)'
|
||||
# 'Disk: 74G / 118G (66%)'
|
||||
# 'Disk: 74G / 118G (66%)'
|
||||
disk_subtitle="mount"
|
||||
|
||||
# Disk percent.
|
||||
# Show/Hide disk percent.
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --disk_percent
|
||||
#
|
||||
# Example:
|
||||
# on: 'Disk (/): 74G / 118G (66%)'
|
||||
# off: 'Disk (/): 74G / 118G'
|
||||
disk_percent="on"
|
||||
|
||||
|
||||
# Song
|
||||
|
||||
|
||||
# Manually specify a music player.
|
||||
#
|
||||
# Default: 'auto'
|
||||
# Values: 'auto', 'player-name'
|
||||
# Flag: --music_player
|
||||
#
|
||||
# Available values for 'player-name':
|
||||
#
|
||||
# amarok
|
||||
# audacious
|
||||
# banshee
|
||||
# bluemindo
|
||||
# clementine
|
||||
# cmus
|
||||
# deadbeef
|
||||
# deepin-music
|
||||
# dragon
|
||||
# elisa
|
||||
# exaile
|
||||
# gnome-music
|
||||
# gmusicbrowser
|
||||
# gogglesmm
|
||||
# guayadeque
|
||||
# io.elementary.music
|
||||
# iTunes
|
||||
# juk
|
||||
# lollypop
|
||||
# mocp
|
||||
# mopidy
|
||||
# mpd
|
||||
# muine
|
||||
# netease-cloud-music
|
||||
# olivia
|
||||
# playerctl
|
||||
# pogo
|
||||
# pragha
|
||||
# qmmp
|
||||
# quodlibet
|
||||
# rhythmbox
|
||||
# sayonara
|
||||
# smplayer
|
||||
# spotify
|
||||
# strawberry
|
||||
# tauonmb
|
||||
# tomahawk
|
||||
# vlc
|
||||
# xmms2d
|
||||
# xnoise
|
||||
# yarock
|
||||
music_player="auto"
|
||||
|
||||
# Format to display song information.
|
||||
#
|
||||
# Default: '%artist% - %album% - %title%'
|
||||
# Values: '%artist%', '%album%', '%title%'
|
||||
# Flag: --song_format
|
||||
#
|
||||
# Example:
|
||||
# default: 'Song: Jet - Get Born - Sgt Major'
|
||||
song_format="%artist% - %album% - %title%"
|
||||
|
||||
# Print the Artist, Album and Title on separate lines
|
||||
#
|
||||
# Default: 'off'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --song_shorthand
|
||||
#
|
||||
# Example:
|
||||
# on: 'Artist: The Fratellis'
|
||||
# 'Album: Costello Music'
|
||||
# 'Song: Chelsea Dagger'
|
||||
#
|
||||
# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
|
||||
song_shorthand="off"
|
||||
|
||||
# 'mpc' arguments (specify a host, password etc).
|
||||
#
|
||||
# Default: ''
|
||||
# Example: mpc_args=(-h HOST -P PASSWORD)
|
||||
mpc_args=()
|
||||
|
||||
|
||||
# Text Colors
|
||||
|
||||
|
||||
# Text Colors
|
||||
#
|
||||
# Default: 'distro'
|
||||
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
|
||||
# Flag: --colors
|
||||
#
|
||||
# Each number represents a different part of the text in
|
||||
# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
|
||||
#
|
||||
# Example:
|
||||
# colors=(distro) - Text is colored based on Distro colors.
|
||||
# colors=(4 6 1 8 8 6) - Text is colored in the order above.
|
||||
colors=(distro)
|
||||
|
||||
|
||||
# Text Options
|
||||
|
||||
|
||||
# Toggle bold text
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --bold
|
||||
bold="on"
|
||||
|
||||
# Enable/Disable Underline
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --underline
|
||||
underline_enabled="on"
|
||||
|
||||
# Underline character
|
||||
#
|
||||
# Default: '-'
|
||||
# Values: 'string'
|
||||
# Flag: --underline_char
|
||||
underline_char="-"
|
||||
|
||||
|
||||
# Info Separator
|
||||
# Replace the default separator with the specified string.
|
||||
#
|
||||
# Default: ':'
|
||||
# Flag: --separator
|
||||
#
|
||||
# Example:
|
||||
# separator="->": 'Shell-> bash'
|
||||
# separator=" =": 'WM = dwm'
|
||||
separator=":"
|
||||
|
||||
|
||||
# Color Blocks
|
||||
|
||||
|
||||
# Color block range
|
||||
# The range of colors to print.
|
||||
#
|
||||
# Default: '0', '15'
|
||||
# Values: 'num'
|
||||
# Flag: --block_range
|
||||
#
|
||||
# Example:
|
||||
#
|
||||
# Display colors 0-7 in the blocks. (8 colors)
|
||||
# neofetch --block_range 0 7
|
||||
#
|
||||
# Display colors 0-15 in the blocks. (16 colors)
|
||||
# neofetch --block_range 0 15
|
||||
block_range=(0 15)
|
||||
|
||||
# Toggle color blocks
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --color_blocks
|
||||
color_blocks="on"
|
||||
|
||||
# Color block width in spaces
|
||||
#
|
||||
# Default: '3'
|
||||
# Values: 'num'
|
||||
# Flag: --block_width
|
||||
block_width=3
|
||||
|
||||
# Color block height in lines
|
||||
#
|
||||
# Default: '1'
|
||||
# Values: 'num'
|
||||
# Flag: --block_height
|
||||
block_height=1
|
||||
|
||||
# Color Alignment
|
||||
#
|
||||
# Default: 'auto'
|
||||
# Values: 'auto', 'num'
|
||||
# Flag: --col_offset
|
||||
#
|
||||
# Number specifies how far from the left side of the terminal (in spaces) to
|
||||
# begin printing the columns, in case you want to e.g. center them under your
|
||||
# text.
|
||||
# Example:
|
||||
# col_offset="auto" - Default behavior of neofetch
|
||||
# col_offset=7 - Leave 7 spaces then print the colors
|
||||
col_offset="auto"
|
||||
|
||||
# Progress Bars
|
||||
|
||||
|
||||
# Bar characters
|
||||
#
|
||||
# Default: '-', '='
|
||||
# Values: 'string', 'string'
|
||||
# Flag: --bar_char
|
||||
#
|
||||
# Example:
|
||||
# neofetch --bar_char 'elapsed' 'total'
|
||||
# neofetch --bar_char '-' '='
|
||||
bar_char_elapsed="-"
|
||||
bar_char_total="="
|
||||
|
||||
# Toggle Bar border
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --bar_border
|
||||
bar_border="on"
|
||||
|
||||
# Progress bar length in spaces
|
||||
# Number of chars long to make the progress bars.
|
||||
#
|
||||
# Default: '15'
|
||||
# Values: 'num'
|
||||
# Flag: --bar_length
|
||||
bar_length=15
|
||||
|
||||
# Progress bar colors
|
||||
# When set to distro, uses your distro's logo colors.
|
||||
#
|
||||
# Default: 'distro', 'distro'
|
||||
# Values: 'distro', 'num'
|
||||
# Flag: --bar_colors
|
||||
#
|
||||
# Example:
|
||||
# neofetch --bar_colors 3 4
|
||||
# neofetch --bar_colors distro 5
|
||||
bar_color_elapsed="distro"
|
||||
bar_color_total="distro"
|
||||
|
||||
|
||||
# Info display
|
||||
# Display a bar with the info.
|
||||
#
|
||||
# Default: 'off'
|
||||
# Values: 'bar', 'infobar', 'barinfo', 'off'
|
||||
# Flags: --cpu_display
|
||||
# --memory_display
|
||||
# --battery_display
|
||||
# --disk_display
|
||||
#
|
||||
# Example:
|
||||
# bar: '[---=======]'
|
||||
# infobar: 'info [---=======]'
|
||||
# barinfo: '[---=======] info'
|
||||
# off: 'info'
|
||||
cpu_display="off"
|
||||
memory_display="off"
|
||||
battery_display="off"
|
||||
disk_display="off"
|
||||
|
||||
|
||||
# Backend Settings
|
||||
|
||||
|
||||
# Image backend.
|
||||
#
|
||||
# Default: 'ascii'
|
||||
# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
|
||||
# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
|
||||
# Flag: --backend
|
||||
image_backend="ascii"
|
||||
|
||||
# Image Source
|
||||
#
|
||||
# Which image or ascii file to display.
|
||||
#
|
||||
# Default: 'auto'
|
||||
# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
|
||||
# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
|
||||
# Flag: --source
|
||||
#
|
||||
# NOTE: 'auto' will pick the best image source for whatever image backend is used.
|
||||
# In ascii mode, distro ascii art will be used and in an image mode, your
|
||||
# wallpaper will be used.
|
||||
image_source="auto"
|
||||
|
||||
|
||||
# Ascii Options
|
||||
|
||||
|
||||
# Ascii distro
|
||||
# Which distro's ascii art to display.
|
||||
#
|
||||
# Default: 'auto'
|
||||
# Values: 'auto', 'distro_name'
|
||||
# Flag: --ascii_distro
|
||||
# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS",
|
||||
# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs,
|
||||
# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock,
|
||||
# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
|
||||
# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
|
||||
# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
|
||||
# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
|
||||
# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary,
|
||||
# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
|
||||
# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo,
|
||||
# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
|
||||
# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
|
||||
# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
|
||||
# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
|
||||
# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
|
||||
# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
|
||||
# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba,
|
||||
# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD,
|
||||
# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint,
|
||||
# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix,
|
||||
# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan,
|
||||
# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific,
|
||||
# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz,
|
||||
# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS,
|
||||
# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails,
|
||||
# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio,
|
||||
# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin,
|
||||
# and IRIX have ascii logos
|
||||
# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
|
||||
# Use '{distro name}_old' to use the old logos.
|
||||
# NOTE: Ubuntu has flavor variants.
|
||||
# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
|
||||
# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors.
|
||||
# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
|
||||
# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
|
||||
# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
|
||||
# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
|
||||
# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
|
||||
# postmarketOS, and Void have a smaller logo variant.
|
||||
# Use '{distro name}_small' to use the small variants.
|
||||
ascii_distro="auto"
|
||||
|
||||
# Ascii Colors
|
||||
#
|
||||
# Default: 'distro'
|
||||
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
|
||||
# Flag: --ascii_colors
|
||||
#
|
||||
# Example:
|
||||
# ascii_colors=(distro) - Ascii is colored based on Distro colors.
|
||||
# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
|
||||
ascii_colors=(distro)
|
||||
|
||||
# Bold ascii logo
|
||||
# Whether or not to bold the ascii logo.
|
||||
#
|
||||
# Default: 'on'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --ascii_bold
|
||||
ascii_bold="on"
|
||||
|
||||
|
||||
# Image Options
|
||||
|
||||
|
||||
# Image loop
|
||||
# Setting this to on will make neofetch redraw the image constantly until
|
||||
# Ctrl+C is pressed. This fixes display issues in some terminal emulators.
|
||||
#
|
||||
# Default: 'off'
|
||||
# Values: 'on', 'off'
|
||||
# Flag: --loop
|
||||
image_loop="off"
|
||||
|
||||
# Thumbnail directory
|
||||
#
|
||||
# Default: '~/.cache/thumbnails/neofetch'
|
||||
# Values: 'dir'
|
||||
thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch"
|
||||
|
||||
# Crop mode
|
||||
#
|
||||
# Default: 'normal'
|
||||
# Values: 'normal', 'fit', 'fill'
|
||||
# Flag: --crop_mode
|
||||
#
|
||||
# See this wiki page to learn about the fit and fill options.
|
||||
# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F
|
||||
crop_mode="normal"
|
||||
|
||||
# Crop offset
|
||||
# Note: Only affects 'normal' crop mode.
|
||||
#
|
||||
# Default: 'center'
|
||||
# Values: 'northwest', 'north', 'northeast', 'west', 'center'
|
||||
# 'east', 'southwest', 'south', 'southeast'
|
||||
# Flag: --crop_offset
|
||||
crop_offset="center"
|
||||
|
||||
# Image size
|
||||
# The image is half the terminal width by default.
|
||||
#
|
||||
# Default: 'auto'
|
||||
# Values: 'auto', '00px', '00%', 'none'
|
||||
# Flags: --image_size
|
||||
# --size
|
||||
image_size="auto"
|
||||
|
||||
# Gap between image and text
|
||||
#
|
||||
# Default: '3'
|
||||
# Values: 'num', '-num'
|
||||
# Flag: --gap
|
||||
gap=3
|
||||
|
||||
# Image offsets
|
||||
# Only works with the w3m backend.
|
||||
#
|
||||
# Default: '0'
|
||||
# Values: 'px'
|
||||
# Flags: --xoffset
|
||||
# --yoffset
|
||||
yoffset=0
|
||||
xoffset=0
|
||||
|
||||
# Image background color
|
||||
# Only works with the w3m backend.
|
||||
#
|
||||
# Default: ''
|
||||
# Values: 'color', 'blue'
|
||||
# Flag: --bg_color
|
||||
background_color=
|
||||
|
||||
|
||||
# Misc Options
|
||||
|
||||
# Stdout mode
|
||||
# Turn off all colors and disables image backend (ASCII/Image).
|
||||
# Useful for piping into another command.
|
||||
# Default: 'off'
|
||||
# Values: 'on', 'off'
|
||||
stdout="off"
|
BIN
neofetch/gojou.png
Normal file
After Width: | Height: | Size: 675 KiB |
BIN
neofetch/uzui.png
Normal file
After Width: | Height: | Size: 1.0 MiB |
3
nvim/init.lua
Normal file
|
@ -0,0 +1,3 @@
|
|||
-- mostly taken from https://gitlab.com/ethanwu10/dotfiles
|
||||
require('plugins')
|
||||
require('options')
|
23
nvim/lua/bootstrap.lua
Normal file
|
@ -0,0 +1,23 @@
|
|||
local fn = vim.fn
|
||||
|
||||
local is_bootstrawp = false
|
||||
local bootstrap_output = ''
|
||||
|
||||
local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim'
|
||||
|
||||
if fn.empty(fn.glob(install_path)) > 0 then
|
||||
bootstrap_output = fn.system({
|
||||
'git',
|
||||
'clone',
|
||||
'--depth', '1',
|
||||
'https://github.com/wbthomason/packer.nvim',
|
||||
install_path
|
||||
})
|
||||
is_bootstrap = true
|
||||
vim.cmd 'packloadall'
|
||||
end
|
||||
|
||||
return {
|
||||
is_bootstrap = is_bootstrap,
|
||||
bootstrap_output = bootstrap_output,
|
||||
}
|
130
nvim/lua/lsp.lua
Normal file
|
@ -0,0 +1,130 @@
|
|||
vim.g.coq_settings = {
|
||||
auto_start = 'shut-up',
|
||||
}
|
||||
|
||||
local coq = require('coq')
|
||||
|
||||
local lspstatus = require('lsp-status')
|
||||
lspstatus.register_progress()
|
||||
|
||||
local lsp_confs = {
|
||||
sumneko_lua = {
|
||||
settings = {
|
||||
Lua = {
|
||||
-- Settings for working with nvim (copied from https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#sumneko_lua)
|
||||
runtime = {
|
||||
version = 'LuaJIT',
|
||||
path = runtime_path,
|
||||
},
|
||||
diagnostics = {
|
||||
globals = {'vim'},
|
||||
},
|
||||
workspace = {
|
||||
library = vim.api.nvim_get_runtime_file("", true),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
rust_analyzer = {
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
checkOnSave = {
|
||||
command = "clippy",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
ccls = {},
|
||||
pyright = {},
|
||||
gopls = {},
|
||||
|
||||
}
|
||||
|
||||
local lsp_special_setup = {
|
||||
}
|
||||
|
||||
local lspconfig = require('lspconfig')
|
||||
|
||||
for server, conf in pairs(lsp_confs) do
|
||||
local source_on_attach = conf.on_attach
|
||||
if source_on_attach == nil then
|
||||
conf.on_attach = on_attach
|
||||
else
|
||||
conf.on_attach = function(client, bufnr)
|
||||
on_attach(client, bufnr)
|
||||
source_on_attach(client, bufnr)
|
||||
end
|
||||
end
|
||||
|
||||
conf.capabilities = vim.tbl_deep_extend(
|
||||
"keep",
|
||||
conf.capabilities or {},
|
||||
lspstatus.capabilities
|
||||
)
|
||||
|
||||
local final_config = coq.lsp_ensure_capabilities(conf)
|
||||
|
||||
local special_setup = lsp_special_setup[server]
|
||||
if special_setup then
|
||||
special_setup(final_config)
|
||||
else
|
||||
lspconfig[server].setup(final_config)
|
||||
end
|
||||
end
|
||||
|
||||
local null_ls = require('null-ls')
|
||||
null_ls.setup({
|
||||
sources = {
|
||||
null_ls.builtins.diagnostics.chktex,
|
||||
null_ls.builtins.diagnostics.cppcheck,
|
||||
null_ls.builtins.diagnostics.shellcheck,
|
||||
|
||||
null_ls.builtins.code_actions.gitsigns,
|
||||
},
|
||||
})
|
||||
|
||||
vim.diagnostic.config({
|
||||
severity_sort = true,
|
||||
update_in_insert = true,
|
||||
float = {
|
||||
source = true,
|
||||
},
|
||||
})
|
||||
|
||||
do -- signs
|
||||
local signs = {
|
||||
{'DiagnosticSignError', text='×', texthl='DiagnosticSignError'},
|
||||
{'DiagnosticSignWarn', text='>', texthl='DiagnosticSignWarn'},
|
||||
{'DiagnosticSignInfo', text='I', texthl='DiagnosticSignInfo'},
|
||||
{'DiagnosticSignHint', text='H', texthl='DiagnosticSignHint'},
|
||||
}
|
||||
for _, sign in pairs(signs) do
|
||||
local name = sign[1]
|
||||
local opts = sign
|
||||
opts[1] = nil
|
||||
vim.fn.sign_define(name, opts)
|
||||
end
|
||||
end
|
||||
|
||||
local map = vim.api.nvim_set_keymap
|
||||
map(
|
||||
'n',
|
||||
'K',
|
||||
[[luaeval('next(vim.lsp.buf_get_clients()) == nil') ? 'K' : '<Cmd>lua vim.lsp.buf.hover()<CR>']],
|
||||
{noremap = true, expr = true}
|
||||
)
|
||||
map(
|
||||
'n',
|
||||
'<C-]>',
|
||||
[[luaeval('next(vim.lsp.buf_get_clients()) == nil') ? '<C-]>' : '<Cmd>lua vim.lsp.buf.definition()<CR>']],
|
||||
{noremap = true, expr = true}
|
||||
)
|
||||
|
||||
vim.cmd [[
|
||||
augroup lspconfig
|
||||
au!
|
||||
" diagnostic on hover
|
||||
au CursorHold * lua vim.diagnostic.open_float({focus = false})
|
||||
augroup END
|
||||
]]
|
||||
|
51
nvim/lua/options.lua
Normal file
|
@ -0,0 +1,51 @@
|
|||
local o = vim.opt
|
||||
local map = vim.api.nvim_set_keymap
|
||||
|
||||
vim.g.mapleader = ","
|
||||
vim.g.maplocalleader = ","
|
||||
o.modeline = true
|
||||
o.number = true
|
||||
o.relativenumber = true
|
||||
o.clipboard = "unnamedplus"
|
||||
o.viminfo = ""
|
||||
-- why viminfo not work
|
||||
o.tabstop = 4
|
||||
o.viminfo = ''
|
||||
|
||||
o.termguicolors = false
|
||||
vim.cmd('colorscheme wal')
|
||||
vim.g.airline_theme='wal'
|
||||
|
||||
map('n', '<Leader>s', ':%s//g<Left><Left>', {})
|
||||
map('n', '<Leader>e', ':make!<CR>', {noremap = true})
|
||||
map('n', '<C-o>', ':cclose<CR>', {noremap = true})
|
||||
map('n', '<C-L>', ':nohlsearch<CR><C-L>', {noremap = true, silent = true})
|
||||
map('n', ';', ':', {noremap = true})
|
||||
map('v', ';', ':', {noremap = true})
|
||||
|
||||
for i = 1,9,1 do
|
||||
map('', '<Leader>' .. tostring(i), tostring(i) .. 'gt', {noremap = true})
|
||||
end
|
||||
|
||||
map('n', '<C-Left>', ':tabprevious<CR>', {noremap = true})
|
||||
map('n', '<C-Right>', ':tabnext<CR>', {noremap = true})
|
||||
map('', '<Leader>0', ':tablast<CR>', {noremap = true})
|
||||
map('n', 'ZX', '<Cmd>q<CR>', {noremap = true, silent = true})
|
||||
|
||||
map('t', '<Esc>', '<C-\\><C-n>', {noremap = true})
|
||||
|
||||
o.list=true
|
||||
o.listchars = {
|
||||
tab = '▸ ',
|
||||
eol = '¬',
|
||||
trail = '·',
|
||||
extends = '›'
|
||||
}
|
||||
|
||||
vim.cmd [[
|
||||
augroup options_guicursor
|
||||
au!
|
||||
" Reset to underscore cursor for terminal nvim (https://github.com/neovim/neovim/issues/4867#issuecomment-291249173)
|
||||
au VimLeave * set guicursor=a:ver90
|
||||
augroup END
|
||||
]]
|
144
nvim/lua/plugins.lua
Normal file
|
@ -0,0 +1,144 @@
|
|||
local bootstrap = require('bootstrap')
|
||||
|
||||
local function import(name)
|
||||
return ([[require '%s']]):format(name)
|
||||
end
|
||||
|
||||
return require('packer').startup({function(use)
|
||||
use 'wbthomason/packer.nvim'
|
||||
|
||||
use {
|
||||
'vim-airline/vim-airline',
|
||||
requires = {
|
||||
'ryanoasis/vim-devicons',
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
use {
|
||||
'tpope/vim-fugitive',
|
||||
config = function()
|
||||
local map = vim.api.nvim_set_keymap
|
||||
map('n', '<Leader>g', '<Cmd>Git<CR>', {noremap = true})
|
||||
end,
|
||||
}
|
||||
|
||||
use {
|
||||
'lewis6991/gitsigns.nvim',
|
||||
requires = {
|
||||
'nvim-lua/plenary.nvim'
|
||||
},
|
||||
config = function()
|
||||
require('gitsigns').setup {
|
||||
signs = {
|
||||
add = {hl = 'GitSignsAdd' , text = '│', numhl='GitSignsAddNr' , linehl='GitSignsAddLn'},
|
||||
change = {hl = 'GitSignsChange', text = '│', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'},
|
||||
delete = {hl = 'GitSignsDelete', text = '_', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'},
|
||||
topdelete = {hl = 'GitSignsDelete', text = '‾', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'},
|
||||
changedelete = {hl = 'GitSignsChange', text = '~', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'},
|
||||
},
|
||||
}
|
||||
end
|
||||
}
|
||||
|
||||
use {
|
||||
'numToStr/Comment.nvim',
|
||||
config = function()
|
||||
local map = vim.api.nvim_set_keymap
|
||||
require('Comment').setup({})
|
||||
|
||||
map('n', '<C-_>',
|
||||
'<Cmd>lua require("Comment.api").toggle_linewise_op(vim.fn.visualmode())<CR>',
|
||||
{noremap = true, silent = true})
|
||||
end
|
||||
}
|
||||
|
||||
use {
|
||||
'nvim-telescope/telescope.nvim',
|
||||
requires = {
|
||||
'nvim-lua/plenary.nvim',
|
||||
{
|
||||
'nvim-telescope/telescope-fzf-native.nvim',
|
||||
run = 'make',
|
||||
},
|
||||
'nvim-telescope/telescope-symbols.nvim',
|
||||
},
|
||||
config = import('tel'),
|
||||
}
|
||||
|
||||
use {
|
||||
'stevearc/dressing.nvim',
|
||||
config = function()
|
||||
require('dressing').setup({
|
||||
input = {
|
||||
default_prompt = '❯',
|
||||
winhighlight = 'NormalFloat:Normal',
|
||||
},
|
||||
})
|
||||
vim.cmd [[highlight link FloatTitle NonText]]
|
||||
vim.cmd [[highlight link DressingInputText Normal]]
|
||||
end,
|
||||
}
|
||||
|
||||
use {
|
||||
'antoinemadec/FixCursorHold.nvim',
|
||||
config = function()
|
||||
vim.g.cursorhold_updatetime = 500
|
||||
end,
|
||||
}
|
||||
|
||||
use {
|
||||
'neovim/nvim-lspconfig',
|
||||
requires = {
|
||||
'nvim-lua/lsp-status.nvim',
|
||||
{
|
||||
'ms-jpq/coq_nvim',
|
||||
run = ':COQdeps',
|
||||
requires = {
|
||||
'ms-jpq/coq.artifacts',
|
||||
},
|
||||
},
|
||||
{
|
||||
'jose-elias-alvarez/null-ls.nvim',
|
||||
requires = {
|
||||
'nvim-lua/plenary.nvim',
|
||||
},
|
||||
},
|
||||
},
|
||||
config = import('lsp'),
|
||||
}
|
||||
|
||||
use {
|
||||
'lervag/vimtex',
|
||||
config = function()
|
||||
vim.g.vimtex_view_general_viewer = 'zathura'
|
||||
vim.g.vimtex_view_general_options = '--unique file:@pdf\\#src:@line@tex'
|
||||
vim.g.vimtex_quickfix_enabled = 0
|
||||
vim.g.Tex_GotoError = 0
|
||||
vim.g.Tex_ShowErrorContext = 0
|
||||
end,
|
||||
}
|
||||
use {
|
||||
'iamcco/markdown-preview.nvim',
|
||||
run = "cd app && npm install",
|
||||
setup = function() vim.g.mkdp_filetypes = { "markdown" } end, ft = { "markdown" },
|
||||
config = function()
|
||||
local map = vim.api.nvim_set_keymap
|
||||
map('n', '<C-m>', '<Plug>MarkdownPreviewToggle', {})
|
||||
map('n', '<Leader>m', '<Plug>MarkdownPreviewToggle', {})
|
||||
end
|
||||
}
|
||||
|
||||
use {
|
||||
'https://github.com/dylanaraps/wal.vim',
|
||||
as = 'wal'
|
||||
}
|
||||
|
||||
if bootstrap.is_bootstrap then
|
||||
require('packer').sync()
|
||||
end
|
||||
end,
|
||||
config = {
|
||||
compile_path = require('packer.util').join_paths(vim.fn.stdpath('data'), 'site', 'plugin', 'packer_compiled.lua'),
|
||||
}})
|
||||
|
73
nvim/lua/tel.lua
Normal file
|
@ -0,0 +1,73 @@
|
|||
|
||||
local telescope = require('telescope')
|
||||
|
||||
telescope.setup({
|
||||
defaults = {
|
||||
file_ignore_patterns = {'.git'},
|
||||
mappings = {
|
||||
i = {
|
||||
['<C-o>'] = { '<Esc>', type = 'command' },
|
||||
['<Esc>'] = 'close',
|
||||
|
||||
['<C-s>'] = 'select_horizontal',
|
||||
},
|
||||
n = {
|
||||
q = 'close',
|
||||
|
||||
['<C-o>'] = { '<Nop>', type = 'command' },
|
||||
|
||||
['<C-s>'] = 'select_horizontal',
|
||||
},
|
||||
},
|
||||
sorting_strategy = 'ascending',
|
||||
layout_config = {
|
||||
prompt_position = 'top',
|
||||
},
|
||||
prompt_prefix = '❯ ',
|
||||
selection_caret = '❯ ',
|
||||
multi_icon = '●',
|
||||
},
|
||||
pickers = {
|
||||
buffers = {
|
||||
mappings = {
|
||||
n = {
|
||||
dd = 'delete_buffer',
|
||||
},
|
||||
},
|
||||
},
|
||||
find_files = {
|
||||
hidden = true,
|
||||
},
|
||||
lsp_code_actions = {
|
||||
initial_mode = 'normal',
|
||||
},
|
||||
lsp_range_code_actions = {
|
||||
initial_mode = 'normal',
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
telescope.load_extension('fzf')
|
||||
|
||||
local map = vim.api.nvim_set_keymap
|
||||
|
||||
map('n', '<Leader>pf', '<Cmd>Telescope find_files<CR>', {noremap = true})
|
||||
map('n', '<Leader>pb', '<Cmd>Telescope buffers<CR>', {noremap = true})
|
||||
map('n', '<Leader>po', '<Cmd>Telescope lsp_document_symbols<CR>', {noremap = true})
|
||||
map('n', '<Leader>p', ':Telescope ', {noremap = true})
|
||||
map('n', '<Leader>p ', ':Telescope ', {noremap = true})
|
||||
|
||||
map('n', '<Leader>.', '<Cmd>Telescope lsp_code_actions<CR>', {noremap = true})
|
||||
|
||||
-- vim.cmd [[
|
||||
-- function! s:telescope_hlsetup() abort
|
||||
-- highlight link TelescopeBorder NonText
|
||||
-- highlight link TelescopeTitle NonText
|
||||
-- endfunction
|
||||
-- call s:telescope_hlsetup()
|
||||
-- augroup telescope_hlsetup
|
||||
-- au!
|
||||
-- au ColorScheme * call s:telescope_hlsetup()
|
||||
-- augroup END
|
||||
-- ]]
|
||||
|
431
picom/picom.conf
Normal file
|
@ -0,0 +1,431 @@
|
|||
#################################
|
||||
# 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'",
|
||||
# "_GTK_FRAME_EXTENTS@:c"
|
||||
#];
|
||||
|
||||
shadow-rule = [ "100:fullscreen", "95:!fullscreen" ];
|
||||
shadow-exclude = [
|
||||
"name = 'Notification'",
|
||||
"_NET_WM_STATE@:32a *= '_NET_WM_STATE_FULLSCREEN'",
|
||||
]
|
||||
|
||||
|
||||
# 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.08;
|
||||
|
||||
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
|
||||
# fade-out-step = 0.03
|
||||
fade-out-step = 0.08;
|
||||
|
||||
# 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.
|
||||
# fade-exclude = []
|
||||
|
||||
# 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.8;
|
||||
|
||||
# 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
|
||||
|
||||
# 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 = []
|
||||
|
||||
# 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 = []
|
||||
|
||||
|
||||
#################################
|
||||
# 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 = false
|
||||
|
||||
# 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";
|
||||
|
||||
|
||||
# Exclude conditions for background blur.
|
||||
# blur-background-exclude = []
|
||||
blur-background-exclude = [
|
||||
"window_type = 'dock'",
|
||||
"window_type = 'desktop'",
|
||||
"_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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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
|
||||
|
||||
# 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 = "warn";
|
||||
|
||||
# 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`.
|
||||
|
||||
detect-client-opacity = true;
|
||||
wintypes:
|
||||
{
|
||||
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; }
|
||||
};
|
||||
|
493
polybar/config
Normal file
|
@ -0,0 +1,493 @@
|
|||
;==========================================================
|
||||
;
|
||||
;
|
||||
; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
|
||||
; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
|
||||
; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
|
||||
; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
|
||||
; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
|
||||
; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
|
||||
;
|
||||
;
|
||||
; To learn more about how to configure Polybar
|
||||
; go to https://github.com/polybar/polybar
|
||||
;
|
||||
; The README contains a lot of information
|
||||
;
|
||||
;==========================================================
|
||||
|
||||
[colors]
|
||||
;background = ${xrdb:color0:#222}
|
||||
;background = #222
|
||||
;background-alt = #444
|
||||
;foreground = ${xrdb:color7:#222}
|
||||
;foreground = #dfdfdf
|
||||
;foreground-alt = #555
|
||||
;primary = #ffb52a
|
||||
;secondary = #e60053
|
||||
;alert = #bd2c40
|
||||
background = ${xrdb:color0:#222}
|
||||
foreground = ${xrdb:color7:#dfdfdf}
|
||||
foreground-alt = ${xrdb:color7:#555}
|
||||
primary = ${xrdb:color1:#ffb52a}
|
||||
secondary = ${xrdb:color2:#e60053}
|
||||
alert = ${xrdb:color3:#bd2c40}
|
||||
|
||||
[bar/gojou]
|
||||
monitor = ${env:MONITOR:}
|
||||
width = 100%
|
||||
height = 30
|
||||
radius = 0
|
||||
fixed-center = false
|
||||
bottom = false
|
||||
|
||||
wm-restack = bspwm
|
||||
|
||||
background = ${colors.background}
|
||||
foreground = ${colors.foreground}
|
||||
|
||||
line-size = 3
|
||||
line-color = #f00
|
||||
|
||||
border-size = 0
|
||||
border-color = #00000000
|
||||
|
||||
padding-left = 0
|
||||
padding-right = 2
|
||||
|
||||
module-margin-left = 1
|
||||
module-margin-right = 2
|
||||
|
||||
font-0 = Fira Code Nerd Font:size=12;3
|
||||
font-1 = Fira Code Nerd Font:fontformat=truetype:size=10:heavy;2
|
||||
font-2 = "Material Icons:size=13;7:antialias=false"
|
||||
font-3 = Noto Sans CJK JP:size=10:antialias=true;0
|
||||
|
||||
modules-left = bspwm
|
||||
; modules-center = winname
|
||||
modules-right = xwindow spotify pulseaudio cpu cputemp date
|
||||
|
||||
;override-redirect = true
|
||||
|
||||
;scroll-up = bspwm-desknext
|
||||
;scroll-down = bspwm-deskprev
|
||||
|
||||
;tray-position=right
|
||||
|
||||
cursor-click = pointer
|
||||
cursor-scroll = ns-resize
|
||||
|
||||
separator = "|"
|
||||
|
||||
|
||||
[bar/uzui]
|
||||
monitor = ${env:MONITOR:}
|
||||
width = 100%
|
||||
height = 30
|
||||
radius = 0
|
||||
fixed-center = false
|
||||
bottom = false
|
||||
|
||||
wm-restack = bspwm
|
||||
|
||||
background = ${colors.background}
|
||||
foreground = ${colors.foreground}
|
||||
|
||||
line-size = 3
|
||||
line-color = #f00
|
||||
|
||||
border-size = 0
|
||||
border-color = #00000000
|
||||
|
||||
padding-left = 0
|
||||
padding-right = 2
|
||||
|
||||
module-margin-left = 1
|
||||
module-margin-right = 2
|
||||
|
||||
font-0 = Fira Code Nerd Font:size=12;3
|
||||
font-1 = Fira Code Nerd Font:fontformat=truetype:size=10:heavy;2
|
||||
font-2 = "Material Icons:size=13;7:antialias=false"
|
||||
font-3 = Noto Sans CJK JP:size=10:antialias=true;0
|
||||
|
||||
modules-left = bspwm_small
|
||||
; modules-center = winname
|
||||
modules-right = xwindow spotify pulseaudio battery wlan cpu cputemp date
|
||||
|
||||
;wm-restack = bspwm
|
||||
|
||||
;override-redirect = true
|
||||
|
||||
;scroll-up = bspwm-desknext
|
||||
;scroll-down = bspwm-deskprev
|
||||
|
||||
;tray-position=right
|
||||
|
||||
cursor-click = pointer
|
||||
cursor-scroll = ns-resize
|
||||
|
||||
separator = "|"
|
||||
|
||||
|
||||
[module/cputemp]
|
||||
type = custom/script
|
||||
exec = ~/.config/polybar/scripts/cputemp.sh
|
||||
format-prefix = " "
|
||||
interval = 2
|
||||
|
||||
[module/xwindow]
|
||||
type = internal/xwindow
|
||||
label = %title:0:25:...%
|
||||
|
||||
[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/filesystem]
|
||||
type = internal/fs
|
||||
interval = 25
|
||||
|
||||
mount-0 = /
|
||||
|
||||
label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %percentage_used%%
|
||||
label-unmounted = %mountpoint% not mounted
|
||||
label-unmounted-foreground = ${colors.foreground-alt}
|
||||
|
||||
[module/bspwm]
|
||||
type = internal/bspwm
|
||||
|
||||
label-focused =
|
||||
label-focused-background = ${colors.background}
|
||||
label-focused-foreground = ${colors.primary}
|
||||
label-focused-padding = 2
|
||||
|
||||
label-occupied =
|
||||
label-occupied-padding = 2
|
||||
|
||||
label-urgent =
|
||||
label-urgent-background = ${colors.alert}
|
||||
label-urgent-padding = 2
|
||||
|
||||
label-empty =
|
||||
label-empty-foreground = ${xrdb:color8}
|
||||
label-empty-padding = 2
|
||||
|
||||
; Separator in between workspaces
|
||||
; label-separator = |
|
||||
|
||||
[module/bspwm_small]
|
||||
type = internal/bspwm
|
||||
|
||||
label-focused =
|
||||
label-focused-background = ${colors.background}
|
||||
label-focused-foreground = ${colors.primary}
|
||||
label-focused-padding = 1
|
||||
|
||||
label-occupied =
|
||||
label-occupied-padding = 1
|
||||
|
||||
label-urgent =
|
||||
label-urgent-background = ${colors.alert}
|
||||
label-urgent-padding = 1
|
||||
|
||||
label-empty =
|
||||
label-empty-foreground = ${xrdb:color8}
|
||||
label-empty-padding = 1
|
||||
|
||||
; Separator in between workspaces
|
||||
; label-separator = |
|
||||
|
||||
|
||||
|
||||
; [module/mpd]
|
||||
; type = internal/mpd
|
||||
; format-online = <label-song> <icon-prev> <icon-stop> <toggle> <icon-next>
|
||||
;
|
||||
; icon-prev =
|
||||
; icon-stop =
|
||||
; icon-play =
|
||||
; icon-pause =
|
||||
; icon-next =
|
||||
;
|
||||
; label-song-maxlen = 25
|
||||
; label-song-ellipsis = true
|
||||
|
||||
[module/xbacklight]
|
||||
type = internal/xbacklight
|
||||
|
||||
format = <label> <bar>
|
||||
label = BL
|
||||
|
||||
bar-width = 10
|
||||
bar-indicator = |
|
||||
bar-indicator-foreground = #fff
|
||||
bar-indicator-font = 2
|
||||
bar-fill = ─
|
||||
bar-fill-font = 2
|
||||
bar-fill-foreground = #9f78e1
|
||||
bar-empty = ─
|
||||
bar-empty-font = 2
|
||||
bar-empty-foreground = ${colors.foreground-alt}
|
||||
|
||||
[module/backlight-acpi]
|
||||
inherit = module/xbacklight
|
||||
type = internal/backlight
|
||||
card = intel_backlight
|
||||
|
||||
[module/cpu]
|
||||
type = internal/cpu
|
||||
interval = 2
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colors.foreground-alt}
|
||||
format-underline = ${xrdb:color1:#ff0069}
|
||||
label = %percentage:2%%
|
||||
|
||||
[module/memory]
|
||||
type = internal/memory
|
||||
interval = 2
|
||||
format-prefix = " "
|
||||
format-prefix-foreground = ${colors.foreground-alt}
|
||||
format-underline = ${xrdb:color3:#4bffdc}
|
||||
label = %percentage_used%%
|
||||
|
||||
[module/wlan]
|
||||
type = internal/network
|
||||
interface = wlp45s0
|
||||
interval = 3.0
|
||||
|
||||
format-connected = <ramp-signal> <label-connected>
|
||||
format-connected-underline = ${xrdb:color3:#9f78e1}
|
||||
label-connected = %essid%
|
||||
|
||||
format-disconnected =
|
||||
;format-disconnected = <label-disconnected>
|
||||
;format-disconnected-underline = ${self.format-connected-underline}
|
||||
;label-disconnected = %ifname% disconnected
|
||||
;label-disconnected-foreground = ${colors.foreground-alt}
|
||||
|
||||
ramp-signal-0 =
|
||||
ramp-signal-0-foreground = ${xrdb:color0}
|
||||
ramp-signal-1 =
|
||||
ramp-signal-1-foreground = ${xrdb:color1}
|
||||
ramp-signal-2 =
|
||||
ramp-signal-2-foreground = ${xrdb:color11}
|
||||
ramp-signal-3 =
|
||||
ramp-signal-3-foreground = ${xrdb:color3}
|
||||
ramp-signal-4 =
|
||||
ramp-signal-4-foreground = ${xrdb:color2}
|
||||
ramp-signal-foreground = ${colors.foreground-alt}
|
||||
|
||||
[module/eth]
|
||||
type = internal/network
|
||||
interface = enp2s0
|
||||
interval = 3.0
|
||||
|
||||
format-connected-underline = ${xrdb:color2:#55aa55}
|
||||
format-connected-prefix = " "
|
||||
format-connected-prefix-foreground = ${colors.foreground-alt}
|
||||
label-connected = %local_ip%
|
||||
|
||||
format-disconnected =
|
||||
;format-disconnected = <label-disconnected>
|
||||
;format-disconnected-underline = ${self.format-connected-underline}
|
||||
;label-disconnected = %ifname% disconnected
|
||||
;label-disconnected-foreground = ${colors.foreground-alt}
|
||||
|
||||
[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 = ${xrdb:color4:#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 = " 婢 muted"
|
||||
label-muted-foreground = #666
|
||||
|
||||
bar-volume-width = 10
|
||||
bar-volume-foreground-0 = ${xrdb:color2:#55aa55}
|
||||
bar-volume-foreground-1 = ${xrdb:color2:#55aa55}
|
||||
bar-volume-foreground-2 = ${xrdb:color2:#55aa55}
|
||||
bar-volume-foreground-3 = ${xrdb:color2:#55aa55}
|
||||
bar-volume-foreground-4 = ${xrdb:color2:#55aa55}
|
||||
bar-volume-foreground-5 = ${xrdb:color3:#f5a70a}
|
||||
bar-volume-foreground-6 = ${xrdb:color1:#ff0069}
|
||||
bar-volume-gradient = false
|
||||
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-alt}
|
||||
|
||||
[module/alsa]
|
||||
type = internal/alsa
|
||||
|
||||
format-volume = <label-volume> <bar-volume>
|
||||
label-volume = VOL
|
||||
label-volume-foreground = ${root.foreground}
|
||||
|
||||
format-muted-prefix = " "
|
||||
format-muted-foreground = ${colors.foreground-alt}
|
||||
label-muted = sound muted
|
||||
|
||||
bar-volume-width = 10
|
||||
bar-volume-foreground-0 = ${xrdb:color2:#55aa55}
|
||||
bar-volume-foreground-1 = ${xrdb:color2:#55aa55}
|
||||
bar-volume-foreground-2 = ${xrdb:color2:#55aa55}
|
||||
bar-volume-foreground-3 = ${xrdb:color2:#55aa55}
|
||||
bar-volume-foreground-4 = ${xrdb:color2:#55aa55}
|
||||
bar-volume-foreground-5 = ${xrdb:color3:#f5a70a}
|
||||
bar-volume-foreground-6 = ${xrdb:color1:#ff0069}
|
||||
bar-volume-gradient = false
|
||||
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-alt}
|
||||
|
||||
[module/battery]
|
||||
type = internal/battery
|
||||
battery = BAT1
|
||||
adapter = ADP1
|
||||
full-at = 98
|
||||
|
||||
time-format = %H:%M
|
||||
|
||||
format-charging = <animation-charging> <label-charging>
|
||||
format-charging-underline = ${xrdb:color3:#ffb52a}
|
||||
format-discharging = <ramp-capacity> <label-discharging>
|
||||
format-discharging-underline = ${self.format-charging-underline}
|
||||
|
||||
label-charging = %percentage%
|
||||
label-discharging = %percentage%
|
||||
|
||||
|
||||
ramp-capacity-0 =
|
||||
ramp-capacity-1 =
|
||||
ramp-capacity-2 =
|
||||
ramp-capacity-3 =
|
||||
ramp-capacity-4 =
|
||||
# ramp-capacity-foreground = ${colors.foreground-alt}
|
||||
bar-capacity-width = 10
|
||||
|
||||
animation-charging-0 =
|
||||
animation-charging-1 =
|
||||
animation-charging-2 =
|
||||
animation-charging-3 =
|
||||
animation-charging-4 =
|
||||
# animation-charging-foreground = ${colors.foreground-alt}
|
||||
animation-charging-framerate = 750
|
||||
|
||||
animation-discharging-0 =
|
||||
animation-discharging-1 =
|
||||
animation-discharging-2 =
|
||||
animation-discharging-3 =
|
||||
animation-discharging-4 =
|
||||
# animation-discharging-foreground = ${colors.foreground-alt}
|
||||
animation-discharging-framerate = 750
|
||||
|
||||
[module/temperature]
|
||||
type = internal/temperature
|
||||
thermal-zone = 0
|
||||
warn-temperature = 60
|
||||
|
||||
format = <ramp> <label>
|
||||
format-underline = #f50a4d
|
||||
format-warn = <ramp> <label-warn>
|
||||
format-warn-underline = ${self.format-underline}
|
||||
|
||||
label = %temperature-c%
|
||||
label-warn = %temperature-c%
|
||||
label-warn-foreground = ${colors.secondary}
|
||||
|
||||
ramp-0 =
|
||||
ramp-1 =
|
||||
ramp-2 =
|
||||
ramp-foreground = ${colors.foreground-alt}
|
||||
|
||||
[module/powermenu]
|
||||
type = custom/menu
|
||||
|
||||
expand-right = true
|
||||
|
||||
format-spacing = 1
|
||||
|
||||
label-open =
|
||||
label-open-foreground = ${colors.secondary}
|
||||
label-close = cancel
|
||||
label-close-foreground = ${colors.secondary}
|
||||
label-separator = |
|
||||
label-separator-foreground = ${colors.foreground-alt}
|
||||
|
||||
menu-0-0 = reboot
|
||||
menu-0-0-exec = menu-open-1
|
||||
menu-0-1 = power off
|
||||
menu-0-1-exec = menu-open-2
|
||||
|
||||
menu-1-0 = cancel
|
||||
menu-1-0-exec = menu-open-0
|
||||
menu-1-1 = reboot
|
||||
menu-1-1-exec = sudo reboot
|
||||
|
||||
menu-2-0 = power off
|
||||
menu-2-0-exec = sudo poweroff
|
||||
menu-2-1 = cancel
|
||||
menu-2-1-exec = menu-open-0
|
||||
|
||||
[module/spotify]
|
||||
type = custom/script
|
||||
interval = 1
|
||||
format = <label>
|
||||
exec = spot-data
|
||||
|
||||
[module/winname]
|
||||
type = custom/script
|
||||
interval = 1
|
||||
format = <label>
|
||||
exec = winname
|
||||
|
||||
|
||||
[settings]
|
||||
screenchange-reload = true
|
||||
;compositing-background = xor
|
||||
;compositing-background = screen
|
||||
;compositing-foreground = source
|
||||
;compositing-border = over
|
||||
;pseudo-transparency = false
|
||||
|
||||
[global/wm]
|
||||
margin-top = 0
|
||||
margin-bottom = 0
|
||||
|
||||
; vim:ft=dosini
|
8
polybar/launch.sh
Executable file
|
@ -0,0 +1,8 @@
|
|||
if type "xrandr"; then
|
||||
for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do
|
||||
MONITOR=$m polybar --reload $(cat /etc/hostname) &
|
||||
|
||||
done
|
||||
else
|
||||
polybar --reload $(cat /etc/hostname) &
|
||||
fi
|
3
polybar/scripts/cputemp.sh
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
sensors | grep "Package id 0:" | tr -d '+' | awk '{print $4}'
|
5
r2rizin/radare2rc
Normal file
|
@ -0,0 +1,5 @@
|
|||
e asm.cmtright=true
|
||||
e asm.pseudo=true
|
||||
e asm.syntax=intel
|
||||
e scr.utf8=true
|
||||
e scr.color=1
|
4
r2rizin/rizinrc
Normal file
|
@ -0,0 +1,4 @@
|
|||
e asm.pseudo=true
|
||||
e asm.syntax=intel
|
||||
e scr.utf8=true
|
||||
e scr.color=1
|
2
ranger/rc.conf
Normal file
|
@ -0,0 +1,2 @@
|
|||
set preview_images true
|
||||
set preview_images_method ueberzug
|
47
rofi/config.rasi
Normal file
|
@ -0,0 +1,47 @@
|
|||
/* vim: ft=css
|
||||
|
||||
* */
|
||||
configuration {
|
||||
font: "Fira Code Nerd Font Mono 13";
|
||||
modi: "drun,window";
|
||||
display-drun: "❯";
|
||||
display-window: "⬜";
|
||||
sidebar-mode: true;
|
||||
|
||||
}
|
||||
|
||||
@import "~/.cache/wal/colors-rofi.rasi"
|
||||
|
||||
window {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
|
||||
inputbar {
|
||||
spacing: 8px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
listview {
|
||||
lines: 8;
|
||||
spacing: 3px;
|
||||
padding: 16px 0;
|
||||
}
|
||||
|
||||
element {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @hl;
|
||||
text-color: @bg;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 5px;
|
||||
border: 0 0 2px 0;
|
||||
}
|
||||
|
||||
button selected {
|
||||
border-color: @hl;
|
||||
}
|
3
scripts/binaryninja
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
HOME=$XDG_CONFIG_HOME /home/emh/ctf/binaryninja/binaryninja
|
6
scripts/deskh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
for i in {101..110};
|
||||
do
|
||||
bspc desktop -f $i || true
|
||||
done
|
3
scripts/feh
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
HOME=$FEH_HOME
|
||||
/usr/bin/feh "$@"
|
5
scripts/ff-osu-open
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
filename=$(basename -- "$1" .osz)
|
||||
|
||||
unzip "$@" -d "/home/emh/media/games/osu/songs/$filename/"
|
3
scripts/firefox
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
HOME=$MOZILLA_HOME
|
||||
/usr/bin/firefox "$@"
|
2
scripts/fuck
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
ps aux | grep "$@" | awk '{print $2}' | xargs kill -9
|
2
scripts/krunker
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
HOME=$KRUNKER_HOME /usr/bin/krunker "$@"
|
5
scripts/osu-open
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
filename=$(basename -- "$1" .osz)
|
||||
|
||||
unzip "$@" -d "$HOME/media/games/osu/songs/$filename/"
|
BIN
scripts/pngtex
Executable file
2
scripts/pswrd
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
cat /dev/urandom | tr -dc "a-zA-Z0-9_" | head -c 50; echo
|
2
scripts/pywalfox
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
HOME=$MOZILLA_HOME $MOZILLA_HOME/.local/bin/pywalfox "$@"
|
3
scripts/snapshot
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
sudo btrfs subvolume snapshot / /.snapshots/root-$(date +%F)
|
||||
sudo btrfs subvolume snapshot /home /.snapshots/home-$(date +%F)
|
2
scripts/spicetify
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
sg spotify -c "/usr/bin/spicetify $@"
|
32
scripts/spot-data
Executable file
|
@ -0,0 +1,32 @@
|
|||
#!/usr/bin/env python
|
||||
# vim: ft=python
|
||||
|
||||
import dbus
|
||||
try:
|
||||
sess = dbus.SessionBus()
|
||||
spotify = sess.get_object('org.mpris.MediaPlayer2.spotify', '/org/mpris/MediaPlayer2')
|
||||
properties = dbus.Interface(spotify, 'org.freedesktop.DBus.Properties')
|
||||
|
||||
metadata = properties.Get("org.mpris.MediaPlayer2.Player", "Metadata")
|
||||
status = properties.Get("org.mpris.MediaPlayer2.Player", "PlaybackStatus")
|
||||
|
||||
|
||||
artist = metadata['xesam:artist'][0] if metadata['xesam:artist'] else ''
|
||||
song = metadata['xesam:title'] if metadata['xesam:title'] else ''
|
||||
album = metadata['xesam:album'] if metadata['xesam:album'] else ''
|
||||
|
||||
pause_symbol = " "
|
||||
play_symbol = " "
|
||||
|
||||
if (not song and not artist):
|
||||
print("")
|
||||
if (song == "Advertisement" or not artist):
|
||||
print(pause_symbol + "Advertisement")
|
||||
else:
|
||||
symbol = pause_symbol
|
||||
if status == "Playing":
|
||||
symbol = play_symbol
|
||||
print(f"{symbol} {song}: {artist}"[:25] + "...")
|
||||
|
||||
except dbus.exceptions.DBusException:
|
||||
print("")
|
3
scripts/spotify
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
HOME=$SPOTIFY_HOME
|
||||
LD_PRELOAD=/usr/lib/spotify-adblock.so /usr/bin/spotify "$@"
|
3
scripts/sshot
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
scrot -s -f -F $SCREENSHOT_HOME/$(date +%F-%H%M%S).png -e 'xclip -sel clipboard -t image/png -i $f'
|
||||
|
2
scripts/steam
Executable file
|
@ -0,0 +1,2 @@
|
|||
#!/bin/bash
|
||||
HOME=$STEAM_HOME /usr/bin/steam "$@"
|
BIN
scripts/themectl
Executable file
3
scripts/wallpaper
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
feh --bg-fill "$1"
|
8
scripts/walset
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/bash
|
||||
fuck polybar
|
||||
pywal-discord &
|
||||
pywalfox update &
|
||||
spicetify update &
|
||||
bspc wm -r &
|
||||
killall dunst
|
||||
dunst &
|
5
scripts/xsec
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/bash
|
||||
source "$HOME"/.cache/wal/colors.sh
|
||||
|
||||
|
||||
XSECURELOCK_AUTH_BACKGROUND_COLOR=$background XSECURELOCK_AUTH_FOREGROUND_COLOR=$foreground XSECURELOCK_NO_COMPOSITE=1 xsecurelock
|
33
spicetify/config.ini
Normal file
|
@ -0,0 +1,33 @@
|
|||
[AdditionalOptions]
|
||||
extensions = autoSkipVideo.js|fullAppDisplay.js|keyboardShortcut.js
|
||||
custom_apps =
|
||||
sidebar_config = 1
|
||||
home_config = 1
|
||||
experimental_features = 1
|
||||
|
||||
[Patch]
|
||||
|
||||
[Setting]
|
||||
inject_css = 1
|
||||
check_spicetify_upgrade = 0
|
||||
current_theme = wal
|
||||
color_scheme = wal
|
||||
replace_colors = 1
|
||||
overwrite_assets = 0
|
||||
spotify_launch_flags =
|
||||
spotify_path = /opt/spotify
|
||||
prefs_path = /home/emh/.config/spotify/prefs
|
||||
|
||||
[Preprocesses]
|
||||
disable_upgrade_check = 1
|
||||
disable_sentry = 1
|
||||
disable_ui_logging = 1
|
||||
remove_rtl_rule = 1
|
||||
expose_apis = 1
|
||||
|
||||
; DO NOT CHANGE!
|
||||
[Backup]
|
||||
version = 1.1.72.439.gc253025e
|
||||
with = 2.8.4
|
||||
|
||||
|
20
spicetify/extensions/autoSkipVideo.js
Normal file
|
@ -0,0 +1,20 @@
|
|||
// @ts-check
|
||||
|
||||
// NAME: Auto Skip Video
|
||||
// AUTHOR: khanhas
|
||||
// DESCRIPTION: Auto skip video
|
||||
|
||||
/// <reference path="../globals.d.ts" />
|
||||
|
||||
(function SkipVideo() {
|
||||
Spicetify.Player.addEventListener("songchange", () => {
|
||||
const data = Spicetify.Player.data || Spicetify.Queue;
|
||||
if (!data) return;
|
||||
|
||||
const meta = data.track.metadata;
|
||||
// Ads are also video media type so I need to exclude them out.
|
||||
if (meta["media.type"] === "video" && meta.is_advertisement !== "true") {
|
||||
Spicetify.Player.next();
|
||||
}
|
||||
});
|
||||
})();
|
764
spicetify/extensions/fullAppDisplay.js
Normal file
|
@ -0,0 +1,764 @@
|
|||
// @ts-check
|
||||
// NAME: Full App Display
|
||||
// AUTHOR: khanhas
|
||||
// VERSION: 1.0
|
||||
// DESCRIPTION: Fancy artwork and track status display.
|
||||
|
||||
/// <reference path="../globals.d.ts" />
|
||||
(function FullAppDisplay() {
|
||||
if (!Spicetify.Keyboard || !Spicetify.React || !Spicetify.ReactDOM) {
|
||||
setTimeout(FullAppDisplay, 200);
|
||||
return;
|
||||
}
|
||||
|
||||
const { React: react, ReactDOM: reactDOM } = Spicetify;
|
||||
const { useState, useEffect } = react;
|
||||
|
||||
const CONFIG = getConfig();
|
||||
let updateVisual;
|
||||
|
||||
const style = document.createElement("style");
|
||||
const styleBase = `
|
||||
#full-app-display {
|
||||
display: none;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
cursor: default;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
#fad-header {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 80px;
|
||||
-webkit-app-region: drag;
|
||||
}
|
||||
#fad-body {
|
||||
height: 100vh;
|
||||
}
|
||||
#fad-foreground {
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transform: scale(var(--fad-scale));
|
||||
}
|
||||
#fad-art-image {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding-bottom: 100%;
|
||||
border-radius: 15px;
|
||||
background-size: cover;
|
||||
}
|
||||
#fad-art-inner {
|
||||
position: absolute;
|
||||
left: 3%;
|
||||
bottom: 0;
|
||||
width: 94%;
|
||||
height: 94%;
|
||||
z-index: -1;
|
||||
backface-visibility: hidden;
|
||||
transform: translateZ(0);
|
||||
filter: blur(6px);
|
||||
backdrop-filter: blur(6px);
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
#fad-progress-container {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
#fad-progress {
|
||||
width: 100%;
|
||||
height: 6px;
|
||||
border-radius: 6px;
|
||||
background-color: #ffffff50;
|
||||
overflow: hidden;
|
||||
}
|
||||
#fad-progress-inner {
|
||||
height: 100%;
|
||||
border-radius: 6px;
|
||||
background-color: #ffffff;
|
||||
box-shadow: 4px 0 12px rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
#fad-duration {
|
||||
margin-left: 10px;
|
||||
}
|
||||
#fad-background {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -2;
|
||||
}
|
||||
body.fad-activated #full-app-display {
|
||||
display: block
|
||||
}
|
||||
.fad-background-fade {
|
||||
transition: background-image 1s linear;
|
||||
}
|
||||
body.video-full-screen.video-full-screen--hide-ui {
|
||||
cursor: auto;
|
||||
}
|
||||
#fad-controls button {
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
color: currentColor;
|
||||
padding: 0 5px;
|
||||
}
|
||||
#fad-artist svg, #fad-album svg {
|
||||
display: inline-block;
|
||||
}
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
}
|
||||
`;
|
||||
|
||||
const styleChoices = [
|
||||
`
|
||||
#fad-foreground {
|
||||
flex-direction: row;
|
||||
text-align: left;
|
||||
}
|
||||
#fad-art {
|
||||
width: calc(100vw - 840px);
|
||||
min-width: 200px;
|
||||
max-width: 340px;
|
||||
}
|
||||
#fad-details {
|
||||
padding-left: 50px;
|
||||
line-height: initial;
|
||||
max-width: 70%;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
#fad-title {
|
||||
font-size: 87px;
|
||||
font-weight: var(--glue-font-weight-black);
|
||||
}
|
||||
#fad-artist, #fad-album {
|
||||
font-size: 54px;
|
||||
font-weight: var(--glue-font-weight-medium);
|
||||
}
|
||||
#fad-artist svg, #fad-album svg {
|
||||
margin-right: 5px;
|
||||
}
|
||||
#fad-status {
|
||||
display: flex;
|
||||
min-width: 400px;
|
||||
max-width: 400px;
|
||||
align-items: center;
|
||||
}
|
||||
#fad-status.active {
|
||||
margin-top: 20px;
|
||||
}
|
||||
#fad-controls {
|
||||
display: flex;
|
||||
margin-right: 10px;
|
||||
}
|
||||
#fad-elapsed {
|
||||
min-width: 52px;
|
||||
}`,
|
||||
`
|
||||
#fad-art {
|
||||
width: calc(100vh - 400px);
|
||||
max-width: 340px;
|
||||
}
|
||||
#fad-foreground {
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
}
|
||||
#fad-details {
|
||||
padding-top: 50px;
|
||||
line-height: initial;
|
||||
max-width: 70%;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
#fad-title {
|
||||
font-size: 54px;
|
||||
font-weight: var(--glue-font-weight-black);
|
||||
}
|
||||
#fad-artist, #fad-album {
|
||||
font-size: 33px;
|
||||
font-weight: var(--glue-font-weight-medium);
|
||||
}
|
||||
#fad-artist svg, #fad-album svg {
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
#fad-status {
|
||||
display: flex;
|
||||
min-width: 400px;
|
||||
max-width: 400px;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
#fad-status.active {
|
||||
margin: 20px auto 0;
|
||||
}
|
||||
#fad-controls {
|
||||
margin-top: 20px;
|
||||
order: 2
|
||||
}
|
||||
#fad-elapsed {
|
||||
min-width: 56px;
|
||||
margin-right: 10px;
|
||||
text-align: right;
|
||||
}`,
|
||||
];
|
||||
|
||||
const lyricsPlusBase = `
|
||||
#fad-body {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
#fad-foreground {
|
||||
padding: 0 50px 0 100px;
|
||||
width: 50vw;
|
||||
}
|
||||
#fad-lyrics-plus-container {
|
||||
width: 50vw;
|
||||
}
|
||||
`;
|
||||
const lyricsPlusStyleChoices = [
|
||||
`
|
||||
#fad-title {
|
||||
font-size: 54px;
|
||||
}
|
||||
#fad-art {
|
||||
max-width: 210px;
|
||||
margin-left: 50px;
|
||||
}`,
|
||||
``,
|
||||
];
|
||||
updateStyle();
|
||||
|
||||
const DisplayIcon = ({ icon, size }) => {
|
||||
return react.createElement("svg", {
|
||||
width: size,
|
||||
height: size,
|
||||
viewBox: "0 0 16 16",
|
||||
fill: "currentColor",
|
||||
dangerouslySetInnerHTML: {
|
||||
__html: icon,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const SubInfo = ({ text, id, icon }) => {
|
||||
return react.createElement(
|
||||
"div",
|
||||
{
|
||||
id,
|
||||
},
|
||||
CONFIG.icons && react.createElement(DisplayIcon, { icon, size: 35 }),
|
||||
react.createElement("span", null, text)
|
||||
);
|
||||
};
|
||||
|
||||
const ButtonIcon = ({ icon, onClick }) => {
|
||||
return react.createElement(
|
||||
"button",
|
||||
{
|
||||
onClick,
|
||||
},
|
||||
react.createElement(DisplayIcon, { icon, size: 20 })
|
||||
);
|
||||
};
|
||||
|
||||
const ProgressBar = () => {
|
||||
const [value, setValue] = useState(Spicetify.Player.getProgress());
|
||||
useEffect(() => {
|
||||
const update = ({ data }) => setValue(data);
|
||||
Spicetify.Player.addEventListener("onprogress", update);
|
||||
return () => Spicetify.Player.removeEventListener("onprogress", update);
|
||||
});
|
||||
const duration = Spicetify.Platform.PlayerAPI._state.duration;
|
||||
return react.createElement(
|
||||
"div",
|
||||
{ id: "fad-progress-container" },
|
||||
react.createElement("span", { id: "fad-elapsed" }, Spicetify.Player.formatTime(value)),
|
||||
react.createElement(
|
||||
"div",
|
||||
{ id: "fad-progress" },
|
||||
react.createElement("div", {
|
||||
id: "fad-progress-inner",
|
||||
style: {
|
||||
width: (value / duration) * 100 + "%",
|
||||
},
|
||||
})
|
||||
),
|
||||
react.createElement("span", { id: "fad-duration" }, Spicetify.Player.formatTime(duration))
|
||||
);
|
||||
};
|
||||
|
||||
const PlayerControls = () => {
|
||||
const [value, setValue] = useState(Spicetify.Player.isPlaying());
|
||||
useEffect(() => {
|
||||
const update = ({ data }) => setValue(!data.is_paused);
|
||||
Spicetify.Player.addEventListener("onplaypause", update);
|
||||
return () => Spicetify.Player.removeEventListener("onplaypause", update);
|
||||
});
|
||||
return react.createElement(
|
||||
"div",
|
||||
{ id: "fad-controls" },
|
||||
react.createElement(ButtonIcon, {
|
||||
icon: Spicetify.SVGIcons["skip-back"],
|
||||
onClick: Spicetify.Player.back,
|
||||
}),
|
||||
react.createElement(ButtonIcon, {
|
||||
icon: Spicetify.SVGIcons[value ? "pause" : "play"],
|
||||
onClick: Spicetify.Player.togglePlay,
|
||||
}),
|
||||
react.createElement(ButtonIcon, {
|
||||
icon: Spicetify.SVGIcons["skip-forward"],
|
||||
onClick: Spicetify.Player.next,
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
class FAD extends react.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
title: "",
|
||||
artist: "",
|
||||
album: "",
|
||||
cover: "",
|
||||
};
|
||||
this.currTrackImg = new Image();
|
||||
this.nextTrackImg = new Image();
|
||||
this.mousetrap = new Spicetify.Mousetrap();
|
||||
}
|
||||
|
||||
async getAlbumDate(uri) {
|
||||
const id = uri.replace("spotify:album:", "");
|
||||
const albumInfo = await Spicetify.CosmosAsync.get(`hm://album/v1/album-app/album/${id}/desktop`);
|
||||
|
||||
const albumDate = new Date(albumInfo.year, (albumInfo.month || 1) - 1, albumInfo.day || 0);
|
||||
const recentDate = new Date();
|
||||
recentDate.setMonth(recentDate.getMonth() - 6);
|
||||
return albumDate.toLocaleString("default", albumDate > recentDate ? { year: "numeric", month: "short" } : { year: "numeric" });
|
||||
}
|
||||
|
||||
async fetchInfo() {
|
||||
const meta = Spicetify.Player.data.track.metadata;
|
||||
|
||||
// prepare title
|
||||
let rawTitle = meta.title;
|
||||
if (CONFIG.trimTitle) {
|
||||
rawTitle = rawTitle
|
||||
.replace(/\(.+?\)/g, "")
|
||||
.replace(/\[.+?\]/g, "")
|
||||
.replace(/\s\-\s.+?$/, "")
|
||||
.trim();
|
||||
}
|
||||
|
||||
// prepare artist
|
||||
let artistName;
|
||||
if (CONFIG.showAllArtists) {
|
||||
artistName = Object.keys(meta)
|
||||
.filter((key) => key.startsWith("artist_name"))
|
||||
.sort()
|
||||
.map((key) => meta[key])
|
||||
.join(", ");
|
||||
} else {
|
||||
artistName = meta.artist_name;
|
||||
}
|
||||
|
||||
// prepare album
|
||||
let albumText = meta.album_title || "";
|
||||
if (CONFIG.showAlbum) {
|
||||
const albumURI = meta.album_uri;
|
||||
if (albumURI?.startsWith("spotify:album:")) {
|
||||
albumText += " • " + (await this.getAlbumDate(albumURI));
|
||||
}
|
||||
}
|
||||
|
||||
if (meta.image_xlarge_url === this.currTrackImg.src) {
|
||||
this.setState({
|
||||
title: rawTitle || "",
|
||||
artist: artistName || "",
|
||||
album: albumText || "",
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: Pre-load next track
|
||||
// Wait until next track image is downloaded then update UI text and images
|
||||
const previousImg = this.currTrackImg.cloneNode();
|
||||
this.currTrackImg.src = meta.image_xlarge_url;
|
||||
this.currTrackImg.onload = () => {
|
||||
const bgImage = `url("${this.currTrackImg.src}")`;
|
||||
|
||||
this.animateCanvas(previousImg, this.currTrackImg);
|
||||
this.setState({
|
||||
title: rawTitle || "",
|
||||
artist: artistName || "",
|
||||
album: albumText || "",
|
||||
cover: bgImage,
|
||||
});
|
||||
};
|
||||
this.currTrackImg.onerror = () => {
|
||||
// Placeholder
|
||||
this.currTrackImg.src =
|
||||
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCI+CiAgPHJlY3Qgc3R5bGU9ImZpbGw6I2ZmZmZmZiIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB4PSIwIiB5PSIwIiAvPgogIDxwYXRoIGZpbGw9IiNCM0IzQjMiIGQ9Ik0yNi4yNSAxNi4xNjJMMjEuMDA1IDEzLjEzNEwyMS4wMTIgMjIuNTA2QzIwLjU5NCAyMi4xOTIgMjAuMDgxIDIxLjk5OSAxOS41MTkgMjEuOTk5QzE4LjE0MSAyMS45OTkgMTcuMDE5IDIzLjEyMSAxNy4wMTkgMjQuNDk5QzE3LjAxOSAyNS44NzggMTguMTQxIDI2Ljk5OSAxOS41MTkgMjYuOTk5QzIwLjg5NyAyNi45OTkgMjIuMDE5IDI1Ljg3OCAyMi4wMTkgMjQuNDk5QzIyLjAxOSAyNC40MjIgMjIuMDA2IDE0Ljg2NyAyMi4wMDYgMTQuODY3TDI1Ljc1IDE3LjAyOUwyNi4yNSAxNi4xNjJaTTE5LjUxOSAyNS45OThDMTguNjkyIDI1Ljk5OCAxOC4wMTkgMjUuMzI1IDE4LjAxOSAyNC40OThDMTguMDE5IDIzLjY3MSAxOC42OTIgMjIuOTk4IDE5LjUxOSAyMi45OThDMjAuMzQ2IDIyLjk5OCAyMS4wMTkgMjMuNjcxIDIxLjAxOSAyNC40OThDMjEuMDE5IDI1LjMyNSAyMC4zNDYgMjUuOTk4IDE5LjUxOSAyNS45OThaIi8+Cjwvc3ZnPgo=";
|
||||
};
|
||||
}
|
||||
|
||||
animateCanvas(prevImg, nextImg) {
|
||||
const { innerWidth: width, innerHeight: height } = window;
|
||||
this.back.width = width;
|
||||
this.back.height = height;
|
||||
const dim = width > height ? width : height;
|
||||
|
||||
const ctx = this.back.getContext("2d");
|
||||
ctx.imageSmoothingEnabled = false;
|
||||
ctx.filter = `blur(30px) brightness(0.6)`;
|
||||
const blur = 30;
|
||||
|
||||
if (!CONFIG.enableFade) {
|
||||
ctx.globalAlpha = 1;
|
||||
ctx.drawImage(nextImg, -blur * 2, -blur * 2 - (width - height) / 2, dim + 4 * blur, dim + 4 * blur);
|
||||
return;
|
||||
}
|
||||
|
||||
let factor = 0.0;
|
||||
const animate = () => {
|
||||
ctx.globalAlpha = 1;
|
||||
ctx.drawImage(prevImg, -blur * 2, -blur * 2 - (width - height) / 2, dim + 4 * blur, dim + 4 * blur);
|
||||
ctx.globalAlpha = Math.sin((Math.PI / 2) * factor);
|
||||
ctx.drawImage(nextImg, -blur * 2, -blur * 2 - (width - height) / 2, dim + 4 * blur, dim + 4 * blur);
|
||||
|
||||
if (factor < 1.0) {
|
||||
factor += 0.016;
|
||||
requestAnimationFrame(animate);
|
||||
}
|
||||
};
|
||||
|
||||
requestAnimationFrame(animate);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.updateInfo = this.fetchInfo.bind(this);
|
||||
Spicetify.Player.addEventListener("songchange", this.updateInfo);
|
||||
this.updateInfo();
|
||||
|
||||
updateVisual = () => {
|
||||
updateStyle();
|
||||
this.fetchInfo();
|
||||
};
|
||||
|
||||
this.onQueueChange = async (queue) => {
|
||||
queue = queue.data;
|
||||
let nextTrack;
|
||||
if (queue.queued.length) {
|
||||
nextTrack = queue.queued[0];
|
||||
} else {
|
||||
nextTrack = queue.nextUp[0];
|
||||
}
|
||||
this.nextTrackImg.src = nextTrack.metadata.image_xlarge_url;
|
||||
};
|
||||
|
||||
const scaleLimit = { min: 0.1, max: 4, step: 0.05 };
|
||||
this.onScaleChange = (event) => {
|
||||
if (!event.ctrlKey) return;
|
||||
let dir = event.deltaY < 0 ? 1 : -1;
|
||||
let temp = (CONFIG["scale"] || 1) + dir * scaleLimit.step;
|
||||
if (temp < scaleLimit.min) {
|
||||
temp = scaleLimit.min;
|
||||
} else if (temp > scaleLimit.max) {
|
||||
temp = scaleLimit.max;
|
||||
}
|
||||
CONFIG["scale"] = temp;
|
||||
saveConfig();
|
||||
updateVisual();
|
||||
};
|
||||
|
||||
Spicetify.Platform.PlayerAPI._events.addListener("queue_update", this.onQueueChange);
|
||||
this.mousetrap.bind("esc", deactivate);
|
||||
window.dispatchEvent(new Event("fad-request"));
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
Spicetify.Player.removeEventListener("songchange", this.updateInfo);
|
||||
Spicetify.Platform.PlayerAPI._events.removeListener("queue_update", this.onQueueChange);
|
||||
this.mousetrap.unbind("esc");
|
||||
}
|
||||
|
||||
render() {
|
||||
return react.createElement(
|
||||
"div",
|
||||
{
|
||||
id: "full-app-display",
|
||||
className: "Video VideoPlayer--fullscreen VideoPlayer--landscape",
|
||||
onDoubleClick: deactivate,
|
||||
onContextMenu: openConfig,
|
||||
},
|
||||
react.createElement("canvas", {
|
||||
id: "fad-background",
|
||||
ref: (el) => (this.back = el),
|
||||
}),
|
||||
react.createElement("div", { id: "fad-header" }),
|
||||
react.createElement(
|
||||
"div",
|
||||
{ id: "fad-body" },
|
||||
react.createElement(
|
||||
"div",
|
||||
{
|
||||
id: "fad-foreground",
|
||||
style: {
|
||||
"--fad-scale": CONFIG["scale"] || 1,
|
||||
},
|
||||
ref: (el) => {
|
||||
if (!el) return;
|
||||
el.onmousewheel = this.onScaleChange;
|
||||
},
|
||||
},
|
||||
react.createElement(
|
||||
"div",
|
||||
{ id: "fad-art" },
|
||||
react.createElement(
|
||||
"div",
|
||||
{
|
||||
id: "fad-art-image",
|
||||
className: CONFIG.enableFade && "fad-background-fade",
|
||||
style: {
|
||||
backgroundImage: this.state.cover,
|
||||
},
|
||||
},
|
||||
react.createElement("div", { id: "fad-art-inner" })
|
||||
)
|
||||
),
|
||||
react.createElement(
|
||||
"div",
|
||||
{ id: "fad-details" },
|
||||
react.createElement("div", { id: "fad-title" }, this.state.title),
|
||||
react.createElement(SubInfo, {
|
||||
id: "fad-artist",
|
||||
text: this.state.artist,
|
||||
icon: Spicetify.SVGIcons.artist,
|
||||
}),
|
||||
CONFIG.showAlbum &&
|
||||
react.createElement(SubInfo, {
|
||||
id: "fad-album",
|
||||
text: this.state.album,
|
||||
icon: Spicetify.SVGIcons.album,
|
||||
}),
|
||||
react.createElement(
|
||||
"div",
|
||||
{
|
||||
id: "fad-status",
|
||||
className: (CONFIG.enableControl || CONFIG.enableProgress) && "active",
|
||||
},
|
||||
CONFIG.enableControl && react.createElement(PlayerControls),
|
||||
CONFIG.enableProgress && react.createElement(ProgressBar)
|
||||
)
|
||||
)
|
||||
),
|
||||
CONFIG.lyricsPlus &&
|
||||
react.createElement("div", {
|
||||
id: "fad-lyrics-plus-container",
|
||||
style: {
|
||||
"--lyrics-color-active": "#ffffff",
|
||||
"--lyrics-color-inactive": "#ffffff50",
|
||||
},
|
||||
})
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const classes = ["video", "video-full-screen", "video-full-window", "video-full-screen--hide-ui", "fad-activated"];
|
||||
|
||||
const container = document.createElement("div");
|
||||
container.id = "fad-main";
|
||||
let lastApp;
|
||||
|
||||
async function toggleFullscreen() {
|
||||
if (CONFIG.enableFullscreen) {
|
||||
await document.documentElement.requestFullscreen();
|
||||
} else if (document.webkitIsFullScreen) {
|
||||
await document.exitFullscreen();
|
||||
}
|
||||
}
|
||||
|
||||
async function activate() {
|
||||
await toggleFullscreen();
|
||||
|
||||
document.body.classList.add(...classes);
|
||||
document.body.append(style, container);
|
||||
reactDOM.render(react.createElement(FAD), container);
|
||||
|
||||
requestLyricsPlus();
|
||||
}
|
||||
|
||||
function deactivate() {
|
||||
if (CONFIG.enableFullscreen || document.webkitIsFullScreen) {
|
||||
document.exitFullscreen();
|
||||
}
|
||||
document.body.classList.remove(...classes);
|
||||
reactDOM.unmountComponentAtNode(container);
|
||||
style.remove();
|
||||
container.remove();
|
||||
window.dispatchEvent(new Event("fad-request"));
|
||||
|
||||
if (lastApp && lastApp !== "/lyrics-plus") {
|
||||
Spicetify.Platform.History.push(lastApp);
|
||||
}
|
||||
}
|
||||
|
||||
function toggleFad() {
|
||||
if (document.body.classList.contains("fad-activated")) {
|
||||
deactivate();
|
||||
} else {
|
||||
activate();
|
||||
}
|
||||
}
|
||||
|
||||
function updateStyle() {
|
||||
style.innerHTML =
|
||||
styleBase +
|
||||
styleChoices[CONFIG.vertical ? 1 : 0] +
|
||||
(CONFIG.lyricsPlus ? lyricsPlusBase + lyricsPlusStyleChoices[CONFIG.vertical ? 1 : 0] : "");
|
||||
}
|
||||
|
||||
function requestLyricsPlus() {
|
||||
if (CONFIG.lyricsPlus) {
|
||||
lastApp = Spicetify.Platform.History.location.pathname;
|
||||
if (lastApp !== "/lyrics-plus") {
|
||||
Spicetify.Platform.History.push("/lyrics-plus");
|
||||
}
|
||||
}
|
||||
window.dispatchEvent(new Event("fad-request"));
|
||||
}
|
||||
|
||||
function getConfig() {
|
||||
try {
|
||||
const parsed = JSON.parse(Spicetify.LocalStorage.get("full-app-display-config"));
|
||||
if (parsed && typeof parsed === "object") {
|
||||
return parsed;
|
||||
}
|
||||
throw "";
|
||||
} catch {
|
||||
Spicetify.LocalStorage.set("full-app-display-config", "{}");
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
function saveConfig() {
|
||||
Spicetify.LocalStorage.set("full-app-display-config", JSON.stringify(CONFIG));
|
||||
}
|
||||
|
||||
const ConfigItem = ({ name, field, func }) => {
|
||||
const [value, setValue] = useState(CONFIG[field]);
|
||||
return react.createElement(
|
||||
"div",
|
||||
{ className: "setting-row" },
|
||||
react.createElement("label", { className: "col description" }, name),
|
||||
react.createElement(
|
||||
"div",
|
||||
{ className: "col action" },
|
||||
react.createElement(
|
||||
"button",
|
||||
{
|
||||
className: "switch" + (value ? "" : " disabled"),
|
||||
onClick: () => {
|
||||
const state = !value;
|
||||
CONFIG[field] = state;
|
||||
setValue(state);
|
||||
saveConfig();
|
||||
func();
|
||||
},
|
||||
},
|
||||
react.createElement(DisplayIcon, { icon: Spicetify.SVGIcons.check, size: 16 })
|
||||
)
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
function openConfig(event) {
|
||||
event.preventDefault();
|
||||
const style = react.createElement("style", {
|
||||
dangerouslySetInnerHTML: {
|
||||
__html: `
|
||||
.setting-row::after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
.setting-row .col {
|
||||
display: flex;
|
||||
padding: 10px 0;
|
||||
align-items: center;
|
||||
}
|
||||
.setting-row .col.description {
|
||||
float: left;
|
||||
padding-right: 15px;
|
||||
}
|
||||
.setting-row .col.action {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
button.switch {
|
||||
align-items: center;
|
||||
border: 0px;
|
||||
border-radius: 50%;
|
||||
background-color: rgba(var(--spice-rgb-shadow), .7);
|
||||
color: var(--spice-text);
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
margin-inline-start: 12px;
|
||||
padding: 8px;
|
||||
}
|
||||
button.switch.disabled {
|
||||
color: rgba(var(--spice-rgb-text), .3);
|
||||
}
|
||||
`,
|
||||
},
|
||||
});
|
||||
let configContainer = react.createElement(
|
||||
"div",
|
||||
null,
|
||||
style,
|
||||
react.createElement(ConfigItem, {
|
||||
name: "Enable Lyrics Plus integration",
|
||||
field: "lyricsPlus",
|
||||
func: () => {
|
||||
updateVisual();
|
||||
requestLyricsPlus();
|
||||
},
|
||||
}),
|
||||
react.createElement(ConfigItem, { name: "Enable progress bar", field: "enableProgress", func: updateVisual }),
|
||||
react.createElement(ConfigItem, { name: "Enable controls", field: "enableControl", func: updateVisual }),
|
||||
react.createElement(ConfigItem, { name: "Trim title", field: "trimTitle", func: updateVisual }),
|
||||
react.createElement(ConfigItem, { name: "Show album", field: "showAlbum", func: updateVisual }),
|
||||
react.createElement(ConfigItem, { name: "Show all artists", field: "showAllArtists", func: updateVisual }),
|
||||
react.createElement(ConfigItem, { name: "Show icons", field: "icons", func: updateVisual }),
|
||||
react.createElement(ConfigItem, { name: "Vertical mode", field: "vertical", func: updateStyle }),
|
||||
react.createElement(ConfigItem, { name: "Enable fullscreen", field: "enableFullscreen", func: toggleFullscreen }),
|
||||
react.createElement(ConfigItem, { name: "Enable song change animation", field: "enableFade", func: updateVisual })
|
||||
);
|
||||
Spicetify.PopupModal.display({
|
||||
title: "Full App Display",
|
||||
content: configContainer,
|
||||
});
|
||||
}
|
||||
|
||||
// Add activator on top bar
|
||||
new Spicetify.Topbar.Button(
|
||||
"Full App Display",
|
||||
`<svg role="img" height="16" width="16" viewBox="0 0 16 16" fill="currentColor">${Spicetify.SVGIcons.projector}</svg>`,
|
||||
activate
|
||||
);
|
||||
|
||||
Spicetify.Mousetrap.bind("f11", toggleFad);
|
||||
})();
|
460
spicetify/extensions/keyboardShortcut.js
Normal file
|
@ -0,0 +1,460 @@
|
|||
//@ts-check
|
||||
|
||||
// NAME: Keyboard Shortcut
|
||||
// AUTHOR: khanhas
|
||||
// DESCRIPTION: Register a few more keybinds to support keyboard-driven navigation in Spotify client.
|
||||
|
||||
/// <reference path="../globals.d.ts" />
|
||||
|
||||
(function KeyboardShortcut() {
|
||||
if (!Spicetify.Keyboard) {
|
||||
setTimeout(KeyboardShortcut, 1000);
|
||||
return;
|
||||
}
|
||||
|
||||
const SCROLL_STEP = 50;
|
||||
|
||||
/**
|
||||
* Register your own keybind with function `registerBind`
|
||||
*
|
||||
* Syntax:
|
||||
* registerBind(keyName, ctrl, shift, alt, callback)
|
||||
*
|
||||
* ctrl, shift and alt are boolean, true or false
|
||||
*
|
||||
* Valid keyName:
|
||||
* - BACKSPACE - C - Y - F3
|
||||
* - TAB - D - Z - F4
|
||||
* - ENTER - E - WINDOW_LEFT - F5
|
||||
* - SHIFT - F - WINDOW_RIGHT - F6
|
||||
* - CTRL - G - SELECT - F7
|
||||
* - ALT - H - NUMPAD_0 - F8
|
||||
* - PAUSE/BREAK - I - NUMPAD_1 - F9
|
||||
* - CAPS - J - NUMPAD_2 - F10
|
||||
* - ESCAPE - K - NUMPAD_3 - F11
|
||||
* - SPACE - L - NUMPAD_4 - F12
|
||||
* - PAGE_UP - M - NUMPAD_5 - NUM_LOCK
|
||||
* - PAGE_DOWN - N - NUMPAD_6 - SCROLL_LOCK
|
||||
* - END - O - NUMPAD_7 - ;
|
||||
* - HOME - P - NUMPAD_8 - =
|
||||
* - ARROW_LEFT - Q - NUMPAD_9 - ,
|
||||
* - ARROW_UP - R - MULTIPLY - -
|
||||
* - ARROW_RIGHT - S - ADD - /
|
||||
* - ARROW_DOWN - T - SUBTRACT - `
|
||||
* - INSERT - U - DECIMAL_POINT - [
|
||||
* - DELETE - V - DIVIDE - \
|
||||
* - A - W - F1 - ]
|
||||
* - B - X - F2 - "
|
||||
*
|
||||
* Use one of keyName as a string. If key that you want isn't in that list,
|
||||
* you can also put its keycode number in keyName as a number.
|
||||
*
|
||||
* callback is name of function you want your shortcut to bind to. It also
|
||||
* returns one KeyboardEvent parameter.
|
||||
*
|
||||
* Following are my default keybinds, use them as examples.
|
||||
*/
|
||||
|
||||
// Ctrl + Tab and Ctrl + Shift + Tab to switch sidebar items
|
||||
registerBind("TAB", true, false, false, rotateSidebarDown);
|
||||
registerBind("TAB", true, true, false, rotateSidebarUp);
|
||||
|
||||
// Ctrl + Q to open Queue page
|
||||
registerBind("Q", true, false, false, clickQueueButton);
|
||||
|
||||
// Shift + H and Shift + L to go back and forward page
|
||||
registerBind("H", false, true, false, clickNavigatingBackButton);
|
||||
registerBind("L", false, true, false, clickNavigatingForwardButton);
|
||||
|
||||
// PageUp, PageDown to focus on iframe app before scrolling
|
||||
registerBind("PAGE_UP", false, true, false, focusOnApp);
|
||||
registerBind("PAGE_DOWN", false, true, false, focusOnApp);
|
||||
|
||||
// J and K to vertically scroll app
|
||||
registerBind("J", false, false, false, appScrollDown);
|
||||
registerBind("K", false, false, false, appScrollUp);
|
||||
|
||||
// G and Shift + G to scroll to top and to bottom
|
||||
registerBind("G", false, false, false, appScrollTop);
|
||||
registerBind("G", false, true, false, appScrollBottom);
|
||||
|
||||
// M to Like/Unlike track
|
||||
registerBind("M", false, false, false, Spicetify.Player.toggleHeart);
|
||||
|
||||
// Forward Slash to open search page
|
||||
registerBind("/", false, false, false, openSearchPage);
|
||||
|
||||
if (window.navigator.userAgent.indexOf("Win") === -1) {
|
||||
// CTRL + Arrow Left Next and CTRL + Arrow Right Previous Song
|
||||
registerBind("ARROW_RIGHT", true, false, false, nextSong);
|
||||
registerBind("ARROW_LEFT", true, false, false, previousSong);
|
||||
|
||||
// CTRL + Arrow Up Increase Volume CTRL + Arrow Down Decrease Volume
|
||||
registerBind("ARROW_UP", true, false, false, increaseVolume);
|
||||
registerBind("ARROW_DOWN", true, false, false, decreaseVolume);
|
||||
}
|
||||
|
||||
// F to activate Link Follow function
|
||||
const vim = new VimBind();
|
||||
registerBind("F", false, false, false, vim.activate.bind(vim));
|
||||
// Esc to cancel Link Follow
|
||||
vim.setCancelKey("ESCAPE");
|
||||
|
||||
function rotateSidebarDown() {
|
||||
rotateSidebar(1);
|
||||
}
|
||||
|
||||
function rotateSidebarUp() {
|
||||
rotateSidebar(-1);
|
||||
}
|
||||
|
||||
function clickQueueButton() {
|
||||
document.querySelector(".control-button-wrapper .spoticon-queue-16").click();
|
||||
}
|
||||
|
||||
function clickNavigatingBackButton() {
|
||||
document.querySelector(".main-topBar-historyButtons .main-topBar-back").click();
|
||||
}
|
||||
|
||||
function clickNavigatingForwardButton() {
|
||||
document.querySelector(".main-topBar-historyButtons .main-topBar-forward").click();
|
||||
}
|
||||
|
||||
function appScrollDown() {
|
||||
const app = focusOnApp();
|
||||
if (app) {
|
||||
app.scrollBy(0, SCROLL_STEP);
|
||||
}
|
||||
}
|
||||
|
||||
function appScrollUp() {
|
||||
const app = focusOnApp();
|
||||
if (app) {
|
||||
app.scrollBy(0, -SCROLL_STEP);
|
||||
}
|
||||
}
|
||||
|
||||
function appScrollBottom() {
|
||||
const app = focusOnApp();
|
||||
app.scroll(0, app.scrollHeight);
|
||||
}
|
||||
|
||||
function appScrollTop() {
|
||||
const app = focusOnApp();
|
||||
app.scroll(0, 0);
|
||||
}
|
||||
|
||||
function nextSong() {
|
||||
document.querySelector(".main-skipForwardButton-button").click();
|
||||
}
|
||||
|
||||
function previousSong() {
|
||||
document.querySelector(".main-skipBackButton-button").click();
|
||||
}
|
||||
|
||||
function increaseVolume() {
|
||||
Spicetify.Player.origin.setVolume(Spicetify.Player.getVolume() + 0.1);
|
||||
}
|
||||
|
||||
function decreaseVolume() {
|
||||
Spicetify.Player.origin.setVolume(Spicetify.Player.getVolume() - 0.1);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {KeyboardEvent} event
|
||||
*/
|
||||
function openSearchPage(event) {
|
||||
const searchInput = document.querySelector(".main-topBar-topbarContentWrapper input");
|
||||
if (searchInput) {
|
||||
searchInput.focus();
|
||||
} else {
|
||||
const sidebarItem = document.querySelector(`.main-navBar-navBar a[href="/search"]`);
|
||||
if (sidebarItem) {
|
||||
sidebarItem.click();
|
||||
}
|
||||
}
|
||||
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {Spicetify.Keyboard.ValidKey} keyName
|
||||
* @param {boolean} ctrl
|
||||
* @param {boolean} shift
|
||||
* @param {boolean} alt
|
||||
* @param {(event: KeyboardEvent) => void} callback
|
||||
*/
|
||||
function registerBind(keyName, ctrl, shift, alt, callback) {
|
||||
const key = Spicetify.Keyboard.KEYS[keyName];
|
||||
|
||||
Spicetify.Keyboard.registerShortcut(
|
||||
{
|
||||
key,
|
||||
ctrl,
|
||||
shift,
|
||||
alt,
|
||||
},
|
||||
(event) => {
|
||||
if (!vim.isActive) {
|
||||
callback(event);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function focusOnApp() {
|
||||
return document.querySelector("main .os-viewport");
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {number}
|
||||
*/
|
||||
function findActiveIndex(allItems) {
|
||||
const active = document.querySelector(
|
||||
".main-navBar-navBarLinkActive, .main-collectionLinkButton-selected, .main-rootlist-rootlistItemLinkActive"
|
||||
);
|
||||
if (!active) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
let index = 0;
|
||||
for (const item of allItems) {
|
||||
if (item === active) {
|
||||
return index;
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {1 | -1} direction
|
||||
*/
|
||||
function rotateSidebar(direction) {
|
||||
const allItems = document.querySelectorAll(
|
||||
".main-navBar-navBarLink, .main-collectionLinkButton-collectionLinkButton, .main-rootlist-rootlistItemLink"
|
||||
);
|
||||
const maxIndex = allItems.length - 1;
|
||||
let index = findActiveIndex(allItems) + direction;
|
||||
|
||||
if (index < 0) index = maxIndex;
|
||||
else if (index > maxIndex) index = 0;
|
||||
|
||||
let toClick = allItems[index];
|
||||
if (!toClick.hasAttribute("href")) {
|
||||
toClick = toClick.querySelector(".main-rootlist-rootlistItemLink");
|
||||
}
|
||||
|
||||
toClick.click();
|
||||
}
|
||||
})();
|
||||
|
||||
function VimBind() {
|
||||
const elementQuery = ["[href]", "button", "td.tl-play", "td.tl-number", "tr.TableRow"].join(",");
|
||||
|
||||
const keyList = "qwertasdfgzxcvyuiophjklbnm".split("");
|
||||
|
||||
const lastKeyIndex = keyList.length - 1;
|
||||
|
||||
this.isActive = false;
|
||||
|
||||
const vimOverlay = document.createElement("div");
|
||||
vimOverlay.id = "vim-overlay";
|
||||
vimOverlay.style.zIndex = "9999";
|
||||
vimOverlay.style.position = "absolute";
|
||||
vimOverlay.style.width = "100%";
|
||||
vimOverlay.style.height = "100%";
|
||||
vimOverlay.style.display = "none";
|
||||
vimOverlay.innerHTML = `<style>
|
||||
.vim-key {
|
||||
position: fixed;
|
||||
padding: 3px 6px;
|
||||
background-color: black;
|
||||
border-radius: 3px;
|
||||
border: solid 2px white;
|
||||
color: white;
|
||||
text-transform: lowercase;
|
||||
line-height: normal;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
}
|
||||
</style>`;
|
||||
document.body.append(vimOverlay);
|
||||
|
||||
const mousetrap = new Spicetify.Mousetrap(document);
|
||||
mousetrap.bind(keyList, listenToKeys.bind(this), "keypress");
|
||||
// Pause mousetrap event emitter
|
||||
const orgStopCallback = mousetrap.stopCallback;
|
||||
mousetrap.stopCallback = () => true;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {KeyboardEvent} event
|
||||
*/
|
||||
this.activate = function (event) {
|
||||
vimOverlay.style.display = "block";
|
||||
|
||||
const vimkey = getVims();
|
||||
if (vimkey.length > 0) {
|
||||
vimkey.forEach((e) => e.remove());
|
||||
return;
|
||||
}
|
||||
|
||||
let firstKey = 0;
|
||||
let secondKey = 0;
|
||||
|
||||
getLinks().forEach((e) => {
|
||||
if (e.style.display === "none" || e.style.visibility === "hidden" || e.style.opacity === "0") {
|
||||
return;
|
||||
}
|
||||
|
||||
const bound = e.getBoundingClientRect();
|
||||
let owner = document.body;
|
||||
|
||||
let top = bound.top;
|
||||
let left = bound.left;
|
||||
|
||||
if (
|
||||
bound.bottom > owner.clientHeight ||
|
||||
bound.left > owner.clientWidth ||
|
||||
bound.right < 0 ||
|
||||
bound.top < 0 ||
|
||||
bound.width === 0 ||
|
||||
bound.height === 0
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
vimOverlay.append(createKey(e, keyList[firstKey] + keyList[secondKey], top, left));
|
||||
|
||||
secondKey++;
|
||||
if (secondKey > lastKeyIndex) {
|
||||
secondKey = 0;
|
||||
firstKey++;
|
||||
}
|
||||
});
|
||||
|
||||
this.isActive = true;
|
||||
setTimeout(() => (mousetrap.stopCallback = orgStopCallback.bind(mousetrap)), 100);
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {KeyboardEvent} event
|
||||
*/
|
||||
this.deactivate = function (event) {
|
||||
mousetrap.stopCallback = () => true;
|
||||
this.isActive = false;
|
||||
vimOverlay.style.display = "none";
|
||||
getVims().forEach((e) => e.remove());
|
||||
};
|
||||
|
||||
function getLinks() {
|
||||
const elements = Array.from(document.querySelectorAll(elementQuery));
|
||||
return elements;
|
||||
}
|
||||
|
||||
function getVims() {
|
||||
return Array.from(vimOverlay.getElementsByClassName("vim-key"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {KeyboardEvent} event
|
||||
*/
|
||||
function listenToKeys(event) {
|
||||
if (!this.isActive) {
|
||||
return;
|
||||
}
|
||||
|
||||
const vimkey = getVims();
|
||||
|
||||
if (vimkey.length === 0) {
|
||||
this.deactivate(event);
|
||||
return;
|
||||
}
|
||||
|
||||
for (const div of vimkey) {
|
||||
const text = div.innerText.toLowerCase();
|
||||
if (text[0] !== event.key) {
|
||||
div.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
const newText = text.slice(1);
|
||||
if (newText.length === 0) {
|
||||
click(div.target);
|
||||
this.deactivate(event);
|
||||
return;
|
||||
}
|
||||
|
||||
div.innerText = newText;
|
||||
}
|
||||
|
||||
if (vimOverlay.childNodes.length === 1) {
|
||||
this.deactivate(event);
|
||||
}
|
||||
}
|
||||
|
||||
function click(element) {
|
||||
if (element.hasAttribute("href") || element.tagName === "BUTTON") {
|
||||
element.click();
|
||||
return;
|
||||
}
|
||||
|
||||
const findButton = element.querySelector(`button[data-ta-id="play-button"]`) || element.querySelector(`button[data-button="play"]`);
|
||||
if (findButton) {
|
||||
findButton.click();
|
||||
return;
|
||||
}
|
||||
alert("Let me know where you found this button, please. I can't click this for you without that information.");
|
||||
return;
|
||||
// TableCell case where play button is hidden
|
||||
// Index number is in first column
|
||||
const index = parseInt(element.firstChild.innerText) - 1;
|
||||
const context = getContextUri();
|
||||
if (index >= 0 && context) {
|
||||
console.log(index);
|
||||
console.log(context);
|
||||
|
||||
//Spicetify.PlaybackControl.playFromResolver(context, { index }, () => {});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
function createKey(target, key, top, left) {
|
||||
const div = document.createElement("span");
|
||||
div.classList.add("vim-key");
|
||||
div.innerText = key;
|
||||
div.style.top = top + "px";
|
||||
div.style.left = left + "px";
|
||||
div.target = target;
|
||||
return div;
|
||||
}
|
||||
|
||||
function getContextUri() {
|
||||
const username = __spotify.username;
|
||||
const activeApp = localStorage.getItem(username + ":activeApp");
|
||||
if (activeApp) {
|
||||
try {
|
||||
return JSON.parse(activeApp).uri.replace("app:", "");
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {Spicetify.Keyboard.ValidKey} key
|
||||
*/
|
||||
this.setCancelKey = function (key) {
|
||||
mousetrap.bind(Spicetify.Keyboard.KEYS[key], this.deactivate.bind(this));
|
||||
};
|
||||
|
||||
return this;
|
||||
}
|
33
spicetify/themes/wal/color.ini
Normal file
|
@ -0,0 +1,33 @@
|
|||
[Base]
|
||||
text = ${xrdb:foreground}
|
||||
subtext = ${xrdb:color8}
|
||||
main = ${xrdb:background}
|
||||
sidebar = ${xrdb:color0}
|
||||
player = ${xrdb:background}
|
||||
card = ${xrdb:color4}
|
||||
shadow = ${xrdb:color0}
|
||||
selected-row = ${xrdb:color15}
|
||||
button = ${xrdb:color1}
|
||||
button-active = ${xrdb:color9}
|
||||
button-disabled = ${xrdb:color0}
|
||||
tab-active = ${xrdb:color0}
|
||||
notification = ${xrdb:color4}
|
||||
notification-error = ${xrdb:color1}
|
||||
misc = ${xrdb:color5}
|
||||
|
||||
[wal]
|
||||
text = ${xrdb:foreground}
|
||||
subtext = ${xrdb:color15}
|
||||
main = ${xrdb:background}
|
||||
sidebar = ${xrdb:color0}
|
||||
player = ${xrdb:background}
|
||||
card = ${xrdb:color4}
|
||||
shadow = ${xrdb:color0}
|
||||
selected-row = ${xrdb:color15}
|
||||
button = ${xrdb:color1}
|
||||
button-active = ${xrdb:color9}
|
||||
button-disabled = ${xrdb:color8}
|
||||
tab-active = ${xrdb:color0}
|
||||
notification = ${xrdb:color4}
|
||||
notification-error = ${xrdb:color1}
|
||||
misc = ${xrdb:color5}
|
11
spicetify/themes/wal/user.css
Normal file
|
@ -0,0 +1,11 @@
|
|||
.main-leaderboardComponent-container {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.main-home-content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.main-home-homeHeader {
|
||||
display: none;
|
||||
}
|
223
sxhkd/sxhkdrc
Normal file
|
@ -0,0 +1,223 @@
|
|||
#
|
||||
# wm independent hotkeys
|
||||
|
||||
|
||||
# terminal emulator
|
||||
super + Return
|
||||
kitty
|
||||
|
||||
# tmux
|
||||
super + shift + Return
|
||||
kitty -e tmux
|
||||
|
||||
# program launcher
|
||||
super + @space
|
||||
rofi -show-icons -show
|
||||
|
||||
# toggle compositing
|
||||
super + ctrl + space
|
||||
{pkill picom ,\
|
||||
picom -f }
|
||||
|
||||
# make sxhkd reload its configuration files:
|
||||
super + Escape
|
||||
pkill -USR1 -x sxhkd
|
||||
|
||||
# prntscrn
|
||||
Print
|
||||
source ~/.zshenv && sshot
|
||||
|
||||
# audio keys
|
||||
|
||||
XF86AudioPlay
|
||||
playerctl play-pause
|
||||
|
||||
XF86AudioNext
|
||||
playerctl next
|
||||
|
||||
XF86AudioRaiseVolume
|
||||
pactl set-sink-volume @DEFAULT_SINK@ +5%
|
||||
|
||||
XF86AudioLowerVolume
|
||||
pactl set-sink-volume @DEFAULT_SINK@ -5%
|
||||
|
||||
XF86AudioPlay
|
||||
if ! dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause; then spotify; fi
|
||||
|
||||
XF86AudioStop
|
||||
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Stop
|
||||
|
||||
XF86AudioNext
|
||||
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next
|
||||
|
||||
XF86AudioPrev
|
||||
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous
|
||||
|
||||
XF86MonBrightnessUp
|
||||
brightnessctl s 32+
|
||||
|
||||
XF86MonBrightnessDown
|
||||
brightnessctl s 32-
|
||||
|
||||
# spotify
|
||||
super + ctrl + alt + Up
|
||||
if ! dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause; then spotify; fi
|
||||
|
||||
super + ctrl + alt + Right
|
||||
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next
|
||||
|
||||
super + ctrl + alt + Left
|
||||
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous
|
||||
|
||||
# dunst
|
||||
ctrl + space
|
||||
dunstctl close-all
|
||||
|
||||
ctrl + shift + space
|
||||
dunstctl history-pop
|
||||
|
||||
ctrl + grave
|
||||
dunstctl context
|
||||
|
||||
|
||||
|
||||
#
|
||||
# applications
|
||||
#
|
||||
|
||||
super + w
|
||||
firefox
|
||||
|
||||
super + d
|
||||
discord
|
||||
|
||||
super + m
|
||||
spotify
|
||||
|
||||
super + e
|
||||
kitty -e nvim
|
||||
|
||||
super + f
|
||||
kitty -e ranger
|
||||
|
||||
#
|
||||
# bspwm hotkeys
|
||||
#
|
||||
|
||||
# quit/restart bspwm
|
||||
super + alt + {Escape,r}
|
||||
bspc {quit,wm -r}
|
||||
|
||||
super + {_,shift + }q
|
||||
bspc node -{c,k}
|
||||
|
||||
# alternate between the tiled and monocle layout
|
||||
super + a
|
||||
bspc desktop -l next
|
||||
|
||||
# send the newest marked node to the newest preselected node
|
||||
super + y
|
||||
bspc node newest.marked.local -n newest.!automatic.local
|
||||
|
||||
# swap the current node and the biggest window
|
||||
super + g
|
||||
bspc node -s biggest.window
|
||||
|
||||
#
|
||||
# state/flags
|
||||
#
|
||||
|
||||
# set the window state
|
||||
super + {t,shift + t,s,r}
|
||||
bspc node -t {tiled,pseudo_tiled,floating,fullscreen}
|
||||
|
||||
# set the node flags
|
||||
super + ctrl + {m,l,s,p}
|
||||
bspc node -g {marked,locked,sticky,private}
|
||||
|
||||
#
|
||||
# focus/swap
|
||||
#
|
||||
|
||||
# focus the node in the given direction
|
||||
super + {_,shift + }{h,j,k,l}
|
||||
bspc node -{f,s} {west,south,north,east}
|
||||
|
||||
# focus the node for the given path jump
|
||||
super + {p,b,comma,period}
|
||||
bspc node -f @{parent,brother,first,second}
|
||||
|
||||
# focus the next/previous window in the current desktop
|
||||
super + {_,shift + }n
|
||||
bspc node -f {next,prev}.local.!hidden.window
|
||||
|
||||
# focus the next/previous desktop in the current monitor
|
||||
super + bracket{left,right}
|
||||
bspc desktop -f {prev,next}.local
|
||||
|
||||
# focus the last node/desktop
|
||||
super + {grave,Tab}
|
||||
bspc {node,desktop} -f last
|
||||
|
||||
# focus the older or newer node in the focus history
|
||||
super + {o,i}
|
||||
bspc wm -h off; \
|
||||
bspc node {older,newer} -f; \
|
||||
bspc wm -h on
|
||||
|
||||
# focus or send to the given desktop
|
||||
super + {_,shift + }{1-5}
|
||||
bspc {desktop -f,node -d} {1-5}
|
||||
|
||||
super + {_,shift + }{z,x,c,v}
|
||||
bspc {desktop -f,node -d} {6-9}
|
||||
|
||||
super + semicolon
|
||||
deskh
|
||||
|
||||
#
|
||||
# preselect
|
||||
#
|
||||
|
||||
# preselect the direction
|
||||
super + ctrl + {h,j,k,l}
|
||||
bspc node -p {west,south,north,east}
|
||||
|
||||
# preselect the ratio
|
||||
super + ctrl + {1-9}
|
||||
bspc node -o 0.{1-9}
|
||||
|
||||
# cancel the preselection for the focused node
|
||||
super + ctrl + space
|
||||
bspc node -p cancel
|
||||
|
||||
# cancel the preselection for the focused desktop
|
||||
super + ctrl + shift + space
|
||||
bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel
|
||||
|
||||
#
|
||||
# move/resize
|
||||
#
|
||||
|
||||
# expand a window by moving one of its side outward
|
||||
super + alt + {h,j,k,l}
|
||||
bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}
|
||||
|
||||
# contract a window by moving one of its side inward
|
||||
super + alt + shift + {h,j,k,l}
|
||||
bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}
|
||||
|
||||
# move a floating window
|
||||
super + {Left,Down,Up,Right}
|
||||
bspc node -v {-20 0,0 20,0 -20,20 0}
|
||||
|
||||
# selections
|
||||
super + alt + 1
|
||||
echo "ツ" | xclip -sel c
|
||||
|
||||
super + alt + 2
|
||||
echo "Chemical Action behind Olfaction, the Sensation that built Humanity's Memorization" | xclip -sel c
|
||||
|
||||
super + alt + 3
|
||||
echo "ඞ" | xclip -sel c
|
||||
|
25
wal/colorschemes/dark/ashes.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"special":{
|
||||
"background":"#1c2023",
|
||||
"foreground":"#c7ccd1",
|
||||
"cursor":"#c7ae95"
|
||||
},
|
||||
"colors":{
|
||||
"color0":"#1c2023",
|
||||
"color1":"#c7ae95",
|
||||
"color2":"#95c7ae",
|
||||
"color3":"#aec795",
|
||||
"color4":"#ae95c7",
|
||||
"color5":"#c795ae",
|
||||
"color6":"#95aec7",
|
||||
"color7":"#c7ccd1",
|
||||
"color8":"#747c84",
|
||||
"color9":"#c7ae95",
|
||||
"color10":"#95c7ae",
|
||||
"color11":"#aec795",
|
||||
"color12":"#ae95c7",
|
||||
"color13":"#c795ae",
|
||||
"color14":"#95aec7",
|
||||
"color15":"#f3f4f5"
|
||||
}
|
||||
}
|
26
wal/colorschemes/dark/blood.json
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"special": {
|
||||
"background":"#250f0f",
|
||||
"foreground":"#f6e6e6",
|
||||
"cursor":"#f6e6e6"
|
||||
},
|
||||
"colors": {
|
||||
"color0":"#2f1818",
|
||||
"color1":"#bb1e22",
|
||||
"color2":"#f6e6e6",
|
||||
"color3":"#f6e6e6",
|
||||
"color4":"#f54f4f",
|
||||
"color5":"#f6e6e6",
|
||||
"color6":"#f6e6e6",
|
||||
"color7":"#f9b5a7",
|
||||
"color8":"#725c5c",
|
||||
"color9":"#d4001c",
|
||||
"color10":"#f6e6e6",
|
||||
"color11":"#f6e6e6",
|
||||
"color12":"#f42f2f",
|
||||
"color13":"#f6e6e6",
|
||||
"color14":"#f6e6e6",
|
||||
"color15":"#f9b5a7"
|
||||
}
|
||||
}
|
||||
|
25
wal/colorschemes/dark/cryptohack.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"special":{
|
||||
"background":"#0c1221",
|
||||
"foreground":"#f8f8f2",
|
||||
"cursor":"#f8f8f2"
|
||||
},
|
||||
"colors":{
|
||||
"color0":"#0c111d",
|
||||
"color1":"#ff5555",
|
||||
"color2":"#50fa7b",
|
||||
"color3":"#f1fa8c",
|
||||
"color4":"#e85154",
|
||||
"color5":"#feb32b",
|
||||
"color6":"#8be9fd",
|
||||
"color7":"#f8f8f2",
|
||||
"color8":"#6272a4",
|
||||
"color9":"#ff6e6e",
|
||||
"color10":"#69ff94",
|
||||
"color11":"#ffffa5",
|
||||
"color12":"#d6acff",
|
||||
"color13":"#ff92df",
|
||||
"color14":"#a4ffff",
|
||||
"color15":"#ffffff"
|
||||
}
|
||||
}
|
25
wal/colorschemes/dark/dracula.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"special":{
|
||||
"background":"#282936",
|
||||
"foreground":"#e9e9f4",
|
||||
"cursor":"#e9e9f4"
|
||||
},
|
||||
"colors":{
|
||||
"color0":"#282936",
|
||||
"color1":"#ea51b2",
|
||||
"color2":"#00f769",
|
||||
"color3":"#ebff87",
|
||||
"color4":"#62d6e8",
|
||||
"color5":"#b45bcf",
|
||||
"color6":"#a1efe4",
|
||||
"color7":"#e9e9f4",
|
||||
"color8":"#4d4f68",
|
||||
"color9":"#ea51b2",
|
||||
"color10":"#00f769",
|
||||
"color11":"#ebff87",
|
||||
"color12":"#62d6e8",
|
||||
"color13":"#b45bcf",
|
||||
"color14":"#a1efe4",
|
||||
"color15":"#f7f7fb"
|
||||
}
|
||||
}
|
26
wal/colorschemes/dark/emh.json
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"special": {
|
||||
"background":"#262830",
|
||||
"foreground":"#e7e6f6",
|
||||
"cursor":"#e7e6f6"
|
||||
},
|
||||
"colors": {
|
||||
"color0":"#262830",
|
||||
"color1":"#ff0069",
|
||||
"color2":"#95ddbc",
|
||||
"color3":"#e8d368",
|
||||
"color4":"#4079b8",
|
||||
"color5":"#9561f3",
|
||||
"color6":"#7fbfc9",
|
||||
"color7":"#f3f3e9",
|
||||
"color8":"#576665",
|
||||
"color9":"#ff0069",
|
||||
"color10":"#95ddbc",
|
||||
"color11":"#e8d368",
|
||||
"color12":"#4079b8",
|
||||
"color13":"#9561f3",
|
||||
"color14":"#7fbfc9",
|
||||
"color15":"#fbfbfb"
|
||||
}
|
||||
}
|
||||
|
26
wal/colorschemes/dark/everforest.json
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"special": {
|
||||
"background":"#2b3339",
|
||||
"foreground":"#d3c6aa",
|
||||
"cursor":"#d3c6aa"
|
||||
},
|
||||
"colors": {
|
||||
"color0":"#2b3339",
|
||||
"color1":"#e67e80",
|
||||
"color2":"#a7c080",
|
||||
"color3":"#dbbc7f",
|
||||
"color4":"#7fbbb3",
|
||||
"color5":"#d699b6",
|
||||
"color6":"#83c092",
|
||||
"color7":"#9da9a0",
|
||||
"color8":"#859289",
|
||||
"color9":"#e69875",
|
||||
"color10":"#a7c080",
|
||||
"color11":"#dbbc7f",
|
||||
"color12":"#7fbbb3",
|
||||
"color13":"#d699b6",
|
||||
"color14":"#83c092",
|
||||
"color15":"#d3c6aa"
|
||||
}
|
||||
}
|
||||
|
25
wal/colorschemes/dark/gruvbox-medium.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"special":{
|
||||
"background":"#282828",
|
||||
"foreground":"#d5c4a1",
|
||||
"cursor":"#d5c4a1"
|
||||
},
|
||||
"colors":{
|
||||
"color0":"#282828",
|
||||
"color1":"#fb4934",
|
||||
"color2":"#b8bb26",
|
||||
"color3":"#fabd2f",
|
||||
"color4":"#83a598",
|
||||
"color5":"#d3869b",
|
||||
"color6":"#8ec07c",
|
||||
"color7":"#d5c4a1",
|
||||
"color8":"#665c54",
|
||||
"color9":"#fb4934",
|
||||
"color10":"#b8bb26",
|
||||
"color11":"#fabd2f",
|
||||
"color12":"#83a598",
|
||||
"color13":"#d3869b",
|
||||
"color14":"#8ec07c",
|
||||
"color15":"#fbf1c7"
|
||||
}
|
||||
}
|
25
wal/colorschemes/dark/oceanicnext.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"special":{
|
||||
"background":"#1B2B34",
|
||||
"foreground":"#C0C5CE",
|
||||
"cursor":"#C0C5CE"
|
||||
},
|
||||
"colors":{
|
||||
"color0":"#1B2B34",
|
||||
"color1":"#EC5f67",
|
||||
"color2":"#99C794",
|
||||
"color3":"#FAC863",
|
||||
"color4":"#6699CC",
|
||||
"color5":"#C594C5",
|
||||
"color6":"#5FB3B3",
|
||||
"color7":"#C0C5CE",
|
||||
"color8":"#65737E",
|
||||
"color9":"#EC5f67",
|
||||
"color10":"#99C794",
|
||||
"color11":"#FAC863",
|
||||
"color12":"#6699CC",
|
||||
"color13":"#C594C5",
|
||||
"color14":"#5FB3B3",
|
||||
"color15":"#D8DEE9"
|
||||
}
|
||||
}
|
25
wal/colorschemes/dark/onedark.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"special":{
|
||||
"background":"#282c34",
|
||||
"foreground":"#abb2bf",
|
||||
"cursor":"#abb2bf"
|
||||
},
|
||||
"colors":{
|
||||
"color0":"#282c34",
|
||||
"color1":"#e06c75",
|
||||
"color2":"#98c379",
|
||||
"color3":"#e5c07b",
|
||||
"color4":"#61afef",
|
||||
"color5":"#c678dd",
|
||||
"color6":"#56b6c2",
|
||||
"color7":"#abb2bf",
|
||||
"color8":"#545862",
|
||||
"color9":"#e06c75",
|
||||
"color10":"#98c379",
|
||||
"color11":"#e5c07b",
|
||||
"color12":"#61afef",
|
||||
"color13":"#c678dd",
|
||||
"color14":"#56b6c2",
|
||||
"color15":"#c8ccd4"
|
||||
}
|
||||
}
|
26
wal/colorschemes/dark/passionfruit-hard.json
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"special": {
|
||||
"background":"#282828",
|
||||
"foreground":"#d5c4a1",
|
||||
"cursor":"#d5c4a1"
|
||||
},
|
||||
"colors": {
|
||||
"color0":"#282828",
|
||||
"color1":"#f66655",
|
||||
"color2":"#89b843",
|
||||
"color3":"#d4bb6f",
|
||||
"color4":"#83a598",
|
||||
"color5":"#846e96",
|
||||
"color6":"#8ec07c",
|
||||
"color7":"#d5c4a1",
|
||||
"color8":"#665c54",
|
||||
"color9":"#f66655",
|
||||
"color10":"#89b843",
|
||||
"color11":"#d4bb6f",
|
||||
"color12":"#83a598",
|
||||
"color13":"#846e96",
|
||||
"color14":"#8ec07c",
|
||||
"color15":"#fbf1c7"
|
||||
}
|
||||
}
|
||||
|
26
wal/colorschemes/dark/passionfruit.json
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"special": {
|
||||
"background":"#282828",
|
||||
"foreground":"#d5c4a1",
|
||||
"cursor":"#d5c4a1"
|
||||
},
|
||||
"colors": {
|
||||
"color0":"#282828",
|
||||
"color1":"#f66655",
|
||||
"color2":"#89b843",
|
||||
"color3":"#d4bb6f",
|
||||
"color4":"#83a598",
|
||||
"color5":"#7f7d88",
|
||||
"color6":"#8ec07c",
|
||||
"color7":"#d5c4a1",
|
||||
"color8":"#665c54",
|
||||
"color9":"#f66655",
|
||||
"color10":"#89b843",
|
||||
"color11":"#d4bb6f",
|
||||
"color12":"#83a598",
|
||||
"color13":"#7f7d88",
|
||||
"color14":"#8ec07c",
|
||||
"color15":"#fbf1c7"
|
||||
}
|
||||
}
|
||||
|
25
wal/colorschemes/dark/vscode.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"special":{
|
||||
"background":"#1e1e1e",
|
||||
"foreground":"#d4d4d4",
|
||||
"cursor":"#f44747"
|
||||
},
|
||||
"colors":{
|
||||
"color0":"#1e1e1e",
|
||||
"color1":"#f44747",
|
||||
"color2":"#d7ba7d",
|
||||
"color3":"#608b4e",
|
||||
"color4":"#569cd6",
|
||||
"color5":"#4ec9b0",
|
||||
"color6":"#c586c0",
|
||||
"color7":"#d4d4d4",
|
||||
"color8":"#808080",
|
||||
"color9":"#f44747",
|
||||
"color10":"#d7ba7d",
|
||||
"color11":"#608b4e",
|
||||
"color12":"#569cd6",
|
||||
"color13":"#4ec9b0",
|
||||
"color14":"#c586c0",
|
||||
"color15":"#d4d4d4"
|
||||
}
|
||||
}
|
25
wal/templates/colors-alacritty.yml
Normal file
|
@ -0,0 +1,25 @@
|
|||
colors:
|
||||
primary:
|
||||
background: '{background}'
|
||||
foreground: '{foreground}'
|
||||
cursor:
|
||||
text: CellForeground
|
||||
cursor: '{cursor}'
|
||||
bright:
|
||||
black: '{color0}'
|
||||
red: '{color1}'
|
||||
green: '{color2}'
|
||||
yellow: '{color3}'
|
||||
blue: '{color4}'
|
||||
magenta: '{color5}'
|
||||
cyan: '{color6}'
|
||||
white: '{color7}'
|
||||
normal:
|
||||
black: '{color8}'
|
||||
red: '{color9}'
|
||||
green: '{color10}'
|
||||
yellow: '{color11}'
|
||||
blue: '{color12}'
|
||||
magenta: '{color13}'
|
||||
cyan: '{color14}'
|
||||
white: '{color15}'
|
1009
wal/templates/colors-obs.qss
Normal file
166
wal/templates/colors-rofi.rasi
Normal file
|
@ -0,0 +1,166 @@
|
|||
* {{
|
||||
active-background: {color4};
|
||||
active-foreground: @foreground;
|
||||
normal-background: @background;
|
||||
normal-foreground: @foreground;
|
||||
urgent-background: {color1};
|
||||
urgent-foreground: @foreground;
|
||||
|
||||
alternate-active-background: @background;
|
||||
alternate-active-foreground: @foreground;
|
||||
alternate-normal-background: @background;
|
||||
alternate-normal-foreground: @foreground;
|
||||
alternate-urgent-background: @background;
|
||||
alternate-urgent-foreground: @foreground;
|
||||
|
||||
selected-active-background: {color1};
|
||||
selected-active-foreground: @foreground;
|
||||
selected-normal-background: {color4};
|
||||
selected-normal-foreground: @foreground;
|
||||
selected-urgent-background: {color3};
|
||||
selected-urgent-foreground: @foreground;
|
||||
|
||||
background-color: @background;
|
||||
background: {background};
|
||||
foreground: {foreground};
|
||||
border-color: @background;
|
||||
spacing: 2;
|
||||
}}
|
||||
|
||||
#window {{
|
||||
background-color: @background;
|
||||
border: 0;
|
||||
padding: 2.5ch;
|
||||
}}
|
||||
|
||||
#mainbox {{
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}}
|
||||
|
||||
#message {{
|
||||
border: 2px 0px 0px;
|
||||
border-color: @border-color;
|
||||
padding: 1px;
|
||||
}}
|
||||
|
||||
#textbox {{
|
||||
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: @normal-foreground;
|
||||
}}
|
||||
|
||||
#listview {{
|
||||
fixed-height: 0;
|
||||
border: 2px 0px 0px;
|
||||
border-color: @border-color;
|
||||
spacing: 2px;
|
||||
scrollbar: true;
|
||||
padding: 2px 0px 0px;
|
||||
}}
|
||||
|
||||
#element {{
|
||||
border: 0;
|
||||
padding: 1px;
|
||||
}}
|
||||
|
||||
#element-text, element-icon {{
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}}
|
||||
|
||||
#element.normal.normal {{
|
||||
background-color: @normal-background;
|
||||
text-color: @normal-foreground;
|
||||
}}
|
||||
|
||||
#element.normal.urgent {{
|
||||
background-color: @urgent-background;
|
||||
text-color: @urgent-foreground;
|
||||
}}
|
||||
|
||||
#element.normal.active {{
|
||||
background-color: @active-background;
|
||||
text-color: @active-foreground;
|
||||
}}
|
||||
|
||||
#element.selected.normal {{
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}}
|
||||
|
||||
#element.selected.urgent {{
|
||||
background-color: @selected-urgent-background;
|
||||
text-color: @selected-urgent-foreground;
|
||||
}}
|
||||
|
||||
#element.selected.active {{
|
||||
background-color: @selected-active-background;
|
||||
text-color: @selected-active-foreground;
|
||||
}}
|
||||
|
||||
#element.alternate.normal {{
|
||||
background-color: @alternate-normal-background;
|
||||
text-color: @alternate-normal-foreground;
|
||||
}}
|
||||
|
||||
#element.alternate.urgent {{
|
||||
background-color: @alternate-urgent-background;
|
||||
text-color: @alternate-urgent-foreground;
|
||||
}}
|
||||
|
||||
#element.alternate.active {{
|
||||
background-color: @alternate-active-background;
|
||||
text-color: @alternate-active-foreground;
|
||||
}}
|
||||
|
||||
#scrollbar {{
|
||||
width: 4px;
|
||||
border: 0;
|
||||
handle-width: 8px;
|
||||
padding: 0;
|
||||
}}
|
||||
|
||||
#sidebar {{
|
||||
border: 2px 0px 0px;
|
||||
border-color: @border-color;
|
||||
}}
|
||||
|
||||
#button {{
|
||||
text-color: @normal-foreground;
|
||||
}}
|
||||
|
||||
#button.selected {{
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}}
|
||||
|
||||
#inputbar {{
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
padding: 1px;
|
||||
}}
|
||||
|
||||
#case-indicator {{
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}}
|
||||
|
||||
#entry {{
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}}
|
||||
|
||||
#prompt {{
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}}
|
443
wal/templates/colors.dunstrc
Normal file
|
@ -0,0 +1,443 @@
|
|||
# See dunst(5) for all configuration options
|
||||
|
||||
[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 = none
|
||||
|
||||
### Geometry ###
|
||||
|
||||
# dynamic width from 0 to 300
|
||||
# width = (0, 300)
|
||||
# constant width of 300
|
||||
width = 500
|
||||
|
||||
# The maximum height of a single notification, excluding the frame.
|
||||
height = 300
|
||||
|
||||
# Position the notification in the top right corner
|
||||
origin = top-right
|
||||
|
||||
# Offset from the origin
|
||||
offset = 10x50
|
||||
|
||||
# Scale factor. It is auto-detected if value is 0.
|
||||
scale = 0.8
|
||||
|
||||
# Maximum number of notification (0 means no limit)
|
||||
notification_limit = 3
|
||||
|
||||
### Progress bar ###
|
||||
|
||||
# Turn on the progess bar. It appears when a progress hint is passed with
|
||||
# for example dunstify -h int:value:12
|
||||
progress_bar = true
|
||||
|
||||
# Set the progress bar height. This includes the frame, so make sure
|
||||
# it's at least twice as big as the frame width.
|
||||
progress_bar_height = 10
|
||||
|
||||
# Set the frame width of the progress bar
|
||||
progress_bar_frame_width = 1
|
||||
|
||||
# Set the minimum width for the progress bar
|
||||
progress_bar_min_width = 150
|
||||
|
||||
# Set the maximum width for the progress bar
|
||||
progress_bar_max_width = 300
|
||||
|
||||
|
||||
# Show how many messages are currently hidden (because of
|
||||
# notification_limit).
|
||||
indicate_hidden = yes
|
||||
|
||||
# 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.). (X11 only)
|
||||
transparency = 0
|
||||
|
||||
# Draw a line of "separator_height" pixel height between two
|
||||
# notifications.
|
||||
# Set to 0 to disable.
|
||||
separator_height = 2
|
||||
|
||||
# Padding between text and separator.
|
||||
padding = 8
|
||||
|
||||
# Horizontal padding.
|
||||
horizontal_padding = 8
|
||||
|
||||
# Padding between text and icon.
|
||||
text_icon_padding = 0
|
||||
|
||||
# Defines width in pixels of frame around the notification window.
|
||||
# Set to 0 to disable.
|
||||
frame_width = 3
|
||||
|
||||
# Defines color of the frame around the notification window.
|
||||
frame_color = "{color1}"
|
||||
|
||||
# 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 = Fira Code Nerd Font 12
|
||||
|
||||
# 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://docs.gtk.org/Pango/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 = "<b>%s</b>\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
|
||||
|
||||
# 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 = 32
|
||||
|
||||
# Paths to default icons.
|
||||
# icon_path = /usr/share/icons/Papirus/16x16/status/:/usr/share/icons/Papirus/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/xdg-open
|
||||
|
||||
# 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
|
||||
|
||||
# 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
|
||||
|
||||
### Wayland ###
|
||||
# These settings are Wayland-specific. They have no effect when using X11
|
||||
|
||||
# Uncomment this if you want to let notications appear under fullscreen
|
||||
# applications (default: overlay)
|
||||
# layer = top
|
||||
|
||||
# Set this to true to use X11 output on Wayland.
|
||||
force_xwayland = 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: Invoke the action determined by the action_name rule. If there is no
|
||||
# such action, open the context menu.
|
||||
# * open_url: If the notification has exactly one url, open it. If there are multiple
|
||||
# ones, open the context menu.
|
||||
# * close_current: Close current notification.
|
||||
# * close_all: Close all notifications.
|
||||
# * context: Open context menu for the notification.
|
||||
# * context_all: Open context menu for 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]
|
||||
close = ctrl+space
|
||||
close_all = ctrl+shift+space
|
||||
history = ctrl+grave
|
||||
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 = "{background}"
|
||||
foreground = "{foreground}"
|
||||
timeout = 10
|
||||
# Icon for notifications with low urgency, uncomment to enable
|
||||
#default_icon = /path/to/icon
|
||||
|
||||
[urgency_normal]
|
||||
background = "{background}"
|
||||
foreground = "{foreground}"
|
||||
timeout = 10
|
||||
# Icon for notifications with normal urgency, uncomment to enable
|
||||
#default_icon = /path/to/icon
|
||||
|
||||
[urgency_critical]
|
||||
background = "{background}"
|
||||
foreground = "{color1}"
|
||||
frame_color = "{color1}"
|
||||
timeout = 0
|
||||
# Icon for notifications with critical urgency, uncomment to enable
|
||||
#default_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
|
||||
# set_category
|
||||
# timeout
|
||||
# urgency
|
||||
# skip_display
|
||||
# history_ignore
|
||||
# action_name
|
||||
# word_wrap
|
||||
# ellipsize
|
||||
# alignment
|
||||
#
|
||||
# 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: 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"
|
||||
# skip_display = true
|
||||
|
||||
#[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
|
29
wal/templates/colors.zathura
Normal file
|
@ -0,0 +1,29 @@
|
|||
set recolor "true"
|
||||
set completion-bg "{background}"
|
||||
set completion-fg "{foreground}"
|
||||
set completion-group-bg "{background}"
|
||||
set completion-group-fg "{color2}"
|
||||
set completion-highlight-bg "{foreground}"
|
||||
set completion-highlight-fg "{background}"
|
||||
set recolor-lightcolor "{background}"
|
||||
set recolor-darkcolor "{foreground}"
|
||||
set default-bg "{background}"
|
||||
set inputbar-bg "{background}"
|
||||
set inputbar-fg "{foreground}"
|
||||
set notification-bg "{background}"
|
||||
set notification-fg "{foreground}"
|
||||
set notification-error-bg "{color1}"
|
||||
set notification-error-fg "{foreground}"
|
||||
set notification-warning-bg "{color1}"
|
||||
set notification-warning-fg "{foreground}"
|
||||
set statusbar-bg "{background}"
|
||||
set statusbar-fg "{foreground}"
|
||||
set index-bg "{background}"
|
||||
set index-fg "{foreground}"
|
||||
set index-active-bg "{foreground}"
|
||||
set index-active-fg "{background}"
|
||||
set render-loading-bg "{background}"
|
||||
set render-loading-fg "{foreground}"
|
||||
set window-title-home-tilde true
|
||||
set statusbar-basename true
|
||||
set selection-clipboard clipboard
|
BIN
wallpapers/Akatsuki.jpg
Normal file
After Width: | Height: | Size: 233 KiB |
BIN
wallpapers/Balloon.jpg
Normal file
After Width: | Height: | Size: 3.2 MiB |
BIN
wallpapers/Celeste.jpg
Normal file
After Width: | Height: | Size: 195 KiB |
BIN
wallpapers/Comet.jpg
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
wallpapers/Countryside.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
wallpapers/Ferris.png
Normal file
After Width: | Height: | Size: 2.9 MiB |
BIN
wallpapers/Kendell.jpg
Normal file
After Width: | Height: | Size: 7.3 MiB |
BIN
wallpapers/Mountain.jpg
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
wallpapers/Red.png
Normal file
After Width: | Height: | Size: 1.0 MiB |
BIN
wallpapers/Road.jpg
Normal file
After Width: | Height: | Size: 399 KiB |
BIN
wallpapers/Tanjirou.png
Normal file
After Width: | Height: | Size: 1.8 MiB |
3
xinitrc
Normal file
|
@ -0,0 +1,3 @@
|
|||
xrandr --output DP-1 --primary
|
||||
xrdb -merge -I/home/emh ~/.config/X11/Xresources
|
||||
exec dbus-launch bspwm
|
17
zsh/zshrc
Normal file
|
@ -0,0 +1,17 @@
|
|||
export PATH=$HOME/.config/bin:$PATH:$HOME/.local/bin:$HOME/.local/share/texlive/2021/bin/x86_64-linux
|
||||
export MANPATH=$MANPATH:$HOME/.local/share/texlive/2021/texmf-dist/doc/man
|
||||
export INFOPATH=$INFOPATH:$HOME/.local/share/texlive/2021/texmf-dist/doc/info
|
||||
|
||||
alias wal='wal -o "$HOME/.config/bin/walset"'
|
||||
alias gef='gdb --eval-command="source /usr/share/gef/gef.py"'
|
||||
alias pwndbg='gdb --eval-command="source /usr/share/pwndbg/gdbinit.py"'
|
||||
alias wget='wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"'
|
||||
alias neofetch='neofetch --kitty $XDG_CONFIG_HOME/neofetch/$(hostname).png --size 400px'
|
||||
alias la='exa -lah --icons'
|
||||
alias ll='exa -lah --icons'
|
||||
alias xsecurelock='XSECURELOCK_NO_COMPOSITE=1 XSECURELOCK_AUTH_BACKGROUND_COLOR=$background XSECURELOCK_AUTH_FOREGROUND_COLOR=$foreground xsecurelock'
|
||||
|
||||
source ~/.zshenv
|
||||
|
||||
source ~/.cache/wal/colors.sh
|
||||
(cat ~/.cache/wal/sequences &)
|
37
zshenv
Normal file
|
@ -0,0 +1,37 @@
|
|||
# https://wiki.archlinux.org/title/XDG_Base_Directory
|
||||
export BROWSER=firefox
|
||||
export EDITOR=nvim
|
||||
export TERMINAL="alacritty"
|
||||
export XDG_CONFIG_HOME="$HOME"/.config
|
||||
export XDG_DATA_HOME="$HOME"/.local/share
|
||||
export XDG_CACHE_HOME="$HOME"/.cache
|
||||
|
||||
export ZDOTDIR=~/.config/zsh
|
||||
export RUSTUP_HOME="$XDG_DATA_HOME"/rustup
|
||||
export CARGO_HOME="$XDG_DATA_HOME"/cargo
|
||||
export DOT_SAGE="$XDG_CONFIG_HOME"/sage
|
||||
export LESSHISTFILE="$XDG_DATA_HOME"/less/history
|
||||
export HISTFILE="$XDG_DATA_HOME"/zsh/history
|
||||
export GNUPGHOME="$XDG_CONFIG_HOME"/gnupg
|
||||
export NUGET_PACKAGES="$XDG_CACHE_HOME"/nuget
|
||||
export GDBHISTFILE="$XDG_DATA_HOME"/gdb/history
|
||||
export VIMDOTDIR="$XDG_CONFIG_HOME/vim"
|
||||
export IPYTHONDIR="$XDG_CONFIG_HOME"/ipython
|
||||
export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME"/jupyter
|
||||
export GOPATH="$XDG_DATA_HOME"/go
|
||||
export LESSKEY="$XDG_DATA_HOME"/less/keys
|
||||
export RANDFILE="$XDG_DATA_HOME"/rnd
|
||||
export PYTHONSTARTUP="$XDG_CONFIG_HOME"/python/pythonrc
|
||||
|
||||
export STEAM_HOME="$HOME"/media/games
|
||||
export MC_HOME="$HOME"/media/games/minecraft
|
||||
export MOZILLA_HOME="$XDG_DATA_HOME"/mozilla
|
||||
export SPOTIFY_HOME="$HOME"/media/spotify
|
||||
export KRUNKER_HOME="$HOME"/media/games/krunker
|
||||
export FEH_HOME="$HOME"/.config/feh/
|
||||
export R_HOME="$HOME"/.local/share/R
|
||||
export R_HOME_DIR="$HOME"/.local/share/R
|
||||
export SCREENSHOT_HOME="$HOME"/media/images
|
||||
|
||||
|
||||
export TERM=xterm-256color
|