This commit is contained in:
EvilMuffinHa 2022-01-18 01:25:46 -05:00
parent 2e1e1f38b2
commit def5ca8b9a
86 changed files with 9017 additions and 0 deletions

3
X11/Xresources Normal file
View File

@ -0,0 +1,3 @@
#include "/home/emh/.cache/wal/colors.Xresources"
Xft.dpi: 96

874
alacritty/alacritty.yml Normal file
View 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
View File

@ -0,0 +1 @@
--theme base16

82
bspwm/bspwmrc Executable file
View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load Diff

1
latexmk/latexmkrc Normal file
View File

@ -0,0 +1 @@
$pdf_previewer = "zathura %O %S";

864
neofetch/config.conf Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 KiB

BIN
neofetch/uzui.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

3
nvim/init.lua Normal file
View File

@ -0,0 +1,3 @@
-- mostly taken from https://gitlab.com/ethanwu10/dotfiles
require('plugins')
require('options')

23
nvim/lua/bootstrap.lua Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View File

@ -0,0 +1,3 @@
#!/bin/sh
sensors | grep "Package id 0:" | tr -d '+' | awk '{print $4}'

5
r2rizin/radare2rc Normal file
View 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
View 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
View File

@ -0,0 +1,2 @@
set preview_images true
set preview_images_method ueberzug

47
rofi/config.rasi Normal file
View 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/R Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
HOME=$R_HOME
/usr/bin/R "$@"

3
scripts/binaryninja Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
HOME=$XDG_CONFIG_HOME /home/emh/ctf/binaryninja/binaryninja

6
scripts/deskh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/bash
for i in {101..110};
do
bspc desktop -f $i || true
done

3
scripts/feh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
HOME=$FEH_HOME
/usr/bin/feh "$@"

5
scripts/ff-osu-open Executable file
View 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
View File

@ -0,0 +1,3 @@
#!/bin/bash
HOME=$MOZILLA_HOME
/usr/bin/firefox "$@"

2
scripts/fuck Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
ps aux | grep "$@" | awk '{print $2}' | xargs kill -9

2
scripts/krunker Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
HOME=$KRUNKER_HOME /usr/bin/krunker "$@"

5
scripts/osu-open Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
filename=$(basename -- "$1" .osz)
unzip "$@" -d "$HOME/media/games/osu/songs/$filename/"

BIN
scripts/pngtex Executable file

Binary file not shown.

2
scripts/pswrd Executable file
View 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
View File

@ -0,0 +1,2 @@
#!/bin/bash
HOME=$MOZILLA_HOME $MOZILLA_HOME/.local/bin/pywalfox "$@"

3
scripts/snapshot Executable file
View 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
View File

@ -0,0 +1,2 @@
#!/bin/bash
sg spotify -c "/usr/bin/spicetify $@"

32
scripts/spot-data Executable file
View 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
View 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
View 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
View File

@ -0,0 +1,2 @@
#!/bin/bash
HOME=$STEAM_HOME /usr/bin/steam "$@"

BIN
scripts/themectl Executable file

Binary file not shown.

3
scripts/wallpaper Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
feh --bg-fill "$1"

8
scripts/walset Executable file
View 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
View 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
View 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

View 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();
}
});
})();

View 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);
})();

View 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;
}

View 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}

View 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
View 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

View 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"
}
}

View 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"
}
}

View 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"
}
}

View 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"
}
}

View 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"
}
}

View 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"
}
}

View 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"
}
}

View 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"
}
}

View 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"
}
}

View 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"
}
}

View 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"
}
}

View 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"
}
}

View 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

File diff suppressed because it is too large Load Diff

View 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;
}}

View 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

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

BIN
wallpapers/Balloon.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

BIN
wallpapers/Celeste.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

BIN
wallpapers/Comet.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

BIN
wallpapers/Countryside.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
wallpapers/Ferris.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

BIN
wallpapers/Kendell.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 MiB

BIN
wallpapers/Mountain.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
wallpapers/Red.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
wallpapers/Road.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

BIN
wallpapers/Tanjirou.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

3
xinitrc Normal file
View 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
View 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
View 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