From 59a0540f85759d3551167e8d5a34c587f31710ba Mon Sep 17 00:00:00 2001 From: Salyrus Date: Tue, 30 Nov 2021 08:34:10 +0100 Subject: [PATCH] new file: alacritty/alacritty.yml new file: bspwm/bspwmrc new file: neofetch/config.conf new file: nvim/init.vim new file: polybar/config new file: polybar/launch.sh new file: polybar/scripts/bat_toggle.sh new file: polybar/scripts/brightnessctl.sh new file: polybar/scripts/bt-status.sh new file: polybar/scripts/coins.svg new file: polybar/scripts/openvpn-status.sh new file: polybar/scripts/pcrypto.py new file: polybar/scripts/pulseaudio-control.bash new file: polybar/scripts/spotify_status.py new file: polybar/scripts/xbps-updates.sh new file: polybar/scripts/xbps-updates.sh.bkp --- alacritty/alacritty.yml | 854 +++++++++++++++++++++++ bspwm/bspwmrc | 26 + neofetch/config.conf | 860 ++++++++++++++++++++++++ nvim/init.vim | 17 + polybar/config | 177 +++++ polybar/launch.sh | 11 + polybar/scripts/bat_toggle.sh | 9 + polybar/scripts/brightnessctl.sh | 3 + polybar/scripts/bt-status.sh | 3 + polybar/scripts/coins.svg | 304 +++++++++ polybar/scripts/openvpn-status.sh | 4 + polybar/scripts/pcrypto.py | 63 ++ polybar/scripts/pulseaudio-control.bash | 515 ++++++++++++++ polybar/scripts/spotify_status.py | 141 ++++ polybar/scripts/xbps-updates.sh | 9 + polybar/scripts/xbps-updates.sh.bkp | 11 + 16 files changed, 3007 insertions(+) create mode 100644 alacritty/alacritty.yml create mode 100755 bspwm/bspwmrc create mode 100644 neofetch/config.conf create mode 100644 nvim/init.vim create mode 100644 polybar/config create mode 100755 polybar/launch.sh create mode 100755 polybar/scripts/bat_toggle.sh create mode 100755 polybar/scripts/brightnessctl.sh create mode 100755 polybar/scripts/bt-status.sh create mode 100644 polybar/scripts/coins.svg create mode 100644 polybar/scripts/openvpn-status.sh create mode 100755 polybar/scripts/pcrypto.py create mode 100755 polybar/scripts/pulseaudio-control.bash create mode 100644 polybar/scripts/spotify_status.py create mode 100755 polybar/scripts/xbps-updates.sh create mode 100755 polybar/scripts/xbps-updates.sh.bkp diff --git a/alacritty/alacritty.yml b/alacritty/alacritty.yml new file mode 100644 index 0000000..8c8c467 --- /dev/null +++ b/alacritty/alacritty.yml @@ -0,0 +1,854 @@ +# 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: 4 + y: 4 + + # 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 + + # 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: RobotoMono + + # 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: RobotoMono + + # 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: RobotoMono + + # The `style` can be specified to pick a specific face. + style: Italic + + # Bold italic font face + #bold_italic: + # 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: 12.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' + # background: '#1c2833' + background: '#0c181d' + # 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: [] + +# 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 + +# 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. +background_opacity: 0.95 + +#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: Block + + # 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/bash +# 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 + +#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) +# +# And optionally: +# +# - `mods` (see key bindings) +#mouse_bindings: +# - { mouse: Middle, 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. +# - 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: false diff --git a/bspwm/bspwmrc b/bspwm/bspwmrc new file mode 100755 index 0000000..a0a31fe --- /dev/null +++ b/bspwm/bspwmrc @@ -0,0 +1,26 @@ +#! /bin/sh + +pgrep -x sxhkd > /dev/null || sxhkd & +$HOME/.config/polybar/launch.sh + +nitrogen --set-zoom-fill ~/.wallpapers/sf.jpg + +bspc monitor -d I II III IV V VI + +bspc config border_width 2 +bspc config window_gap 10 + +bspc config split_ratio 0.52 +bspc config borderless_monocle true +bspc config gapless_monocle true + +bspc rule -a Gimp desktop='^8' state=floating follow=on +bspc rule -a Chromium desktop='^2' +bspc rule -a mplayer2 state=floating +bspc rule -a Kupfer.py focus=on +bspc rule -a Screenkey manage=off +bspc rule -a Pavucontrol state=floating +bspc rule -a Lxappearance state=floating +bspc rule -a blueman-manager state=floating +bspc rule -a virt-manager state=floating +bspc rule -a Nextcloud state=floating diff --git a/neofetch/config.conf b/neofetch/config.conf new file mode 100644 index 0000000..6742530 --- /dev/null +++ b/neofetch/config.conf @@ -0,0 +1,860 @@ +# 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 "WM" wm + 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="on" + +# 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="dedicated" + + +# 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="on" + + +# 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="pot" + +# 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" diff --git a/nvim/init.vim b/nvim/init.vim new file mode 100644 index 0000000..3ada7a8 --- /dev/null +++ b/nvim/init.vim @@ -0,0 +1,17 @@ +call plug#begin('~/.local/share/nvim/plugged') +Plug 'vimsence/vimsence' +Plug 'lervag/vimtex' +Plug 'python-mode/python-mode' +Plug 'rust-lang/rust.vim' +Plug 'glepnir/dashboard-nvim' +Plug 'Gavinok/vim-troff' +call plug#end() + +:set number + +let g:tex_flavor='latex' +let g:vimtex_view_method='zathura' +let g:vimtex_quickfix_mode=0 +let g:vimtex_view_general_viewer = 'zathura' + +highlight LineNr ctermfg=8 diff --git a/polybar/config b/polybar/config new file mode 100644 index 0000000..e7e8e06 --- /dev/null +++ b/polybar/config @@ -0,0 +1,177 @@ +[colors] +;background = ${xrdb:color0:#222} +background = +background-alt = #444 +;foreground = ${xrdb:color7:#222} +foreground = #dfdfdf +foreground-alt = #555 +primary = #ffb52a +secondary = #e60053 +alert = #bd2c40 + +[bar/top] +width = 1900 +height = 30 + +#background = #df1D1F21 +background = #ee0c181d +foreground = #ccffffff + +border-color = #00000000 + +offset-y = 10 +offset-x = 10 + +padding-left = 0 +padding-right = 1 + +spacing = 1 +module-margin = 1 + +font-0 = RobotoMono:size=10;1 +font-1 = coins:style=Regular;1 +font-2 = FontAwesome;1 +font-3 = MaterialIcons;1 + +modules-left = bspwm +modules-right = xbps-updates pulseaudio-control brightnessctl bt-status wireless-network wired-network battery date +;modules-center = bspwm +fixed-center = true + +[module/bt-status] +type = custom/script +exec = ~/.config/polybar/scripts/bt-status.sh +click-left = blueman-manager +format-prefix = " " + +[module/xbps-updates] +type = custom/script +exec = ~/.config/polybar/scripts/xbps-updates.sh +interval = 60 +label-foreground = ${colors.foreground} + +[module/pulseaudio-control] +type = custom/script +tail = true +label-foreground = ${colors.foreground} + +exec = ~/.config/polybar/scripts/pulseaudio-control.bash --icons-volume " , " --icon-muted " " --sink-nicknames-from "alsa.card_name" --sink-nickname "usb-Topping_D30-00.analog-stereo:  D30" --sink-nickname "alsa_output.pci-0000_00_1f.3.analog-stereo.monitor: Speakers" listen +click-right = exec pavucontrol & +click-left = ~/.config/polybar/scripts/pulseaudio-control.bash togmute +click-middle = ~/.config/polybar/scripts/pulseaudio-control.bash --sink-blacklist "alsa_output.pci-0000_00_1f.3.analog-stereo.monitor" next-sink +scroll-up = ~/.config/polybar/scripts/pulseaudio-control.bash --volume-max 130 up +scroll-down = ~/.config/polybar/scripts/pulseaudio-control.bash --volume-max 130 down + +[module/brightnessctl] +type = custom/script +exec = ~/.config/polybar/scripts/brightnessctl.sh + +scroll-up = exec brightnessctl set +5% +scroll-down = exec brightnessctl set 5%- +interval = 1 + +format-prefix = " " +label = %output% +label-foreground = ${colors.foreground} + +[module/xwindow] +type = internal/xwindow + +[module/crypto] +type = custom/script +interval = 60 +exec = ~/.config/polybar/scripts/pcrypto.py --base USD --coins btc eth ada --apikey coinranking667e22ef80713a74e538696d841e19ade62f38679290e928 + +[module/battery] +type = internal/battery +battery = BAT1 +adapter = ACAD +full-at = 98 + +click-left = ~/.config/polybar/scripts/bat_toggle.sh +format-charging =  +format-discharging = +format-full = + +format-charging-foreground = #90C2E7 + +ramp-capacity-0 =  +ramp-capacity-0-foreground = #DB5461 +ramp-capacity-1 =  +ramp-capacity-1-foreground = #E9C46A +ramp-capacity-2 =  +ramp-capacity-2-foreground = #E9C46A +ramp-capacity-3 =  +ramp-capacity-3-foreground = #169873 +ramp-capacity-4 =  +ramp-capacity-4-foreground = #169873 + +bar-capacity-width = 10 +bar-capacity-format = %{+u}%{+o}%fill%%empty%%{-u}%{-o} +bar-capacity-fill = █ +bar-capacity-fill-foreground = #ddffffff +bar-capacity-fill-font = 3 +bar-capacity-empty = █ +bar-capacity-empty-font = 3 +bar-capacity-empty-foreground = #44ffffff + +[module/bspwm] +type = internal/bspwm + +label-focused = "" +label-focused-background= ${colors.foreground-alt} +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 = ${colors.foreground-alt} +label-empty-padding = 1 + +[module/date] +type = internal/date +date = %Y-%m-%d %H:%M:%S + +[module/wireless-network] +type = internal/network +interface = wlp8s0 +interval = 5.0 +ping-interval = 10 + +format-connected = +label-disconnected =  +label-disconnected-foreground = #66 + +ramp-signal-0 =  +ramp-signal-1 =  +ramp-signal-2 =  +ramp-signal-3 =  +ramp-signal-4 =  + +animation-packetloss-0 =  +animation-packetloss-0-foreground = #ffa64c +animation-packetloss-1 =  +animation-packetloss-1-foreground = ${bar/top.foreground} +animation-packetloss-framerate = 500 + +[module/volume] +type = internal/volume +speaker-mixer = Speaker +headphone-mixer = Headphone +headphone-id = 9 + +format-volume = +label-muted =  muted +label-muted-foreground = #66 + +ramp-volume-0 =  +ramp-volume-1 =  +ramp-volume-2 =  +ramp-volume-3 =  + +; vim:ft=dosini diff --git a/polybar/launch.sh b/polybar/launch.sh new file mode 100755 index 0000000..75b9b29 --- /dev/null +++ b/polybar/launch.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# Terminate already running bar instances +pkill polybar +# If all your bars have ipc enabled, you can also use +# polybar-msg cmd quit + +# Launch Polybar, using default config location ~/.config/polybar/config +polybar top | tee -a /tmp/polybar.log & disown + +echo "Polybar launched..." diff --git a/polybar/scripts/bat_toggle.sh b/polybar/scripts/bat_toggle.sh new file mode 100755 index 0000000..2602539 --- /dev/null +++ b/polybar/scripts/bat_toggle.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +updates=$(xbps-install -Mun 2> /dev/null | wc -l) + +if [ -n "$updates" ] && [ "$updates" -gt 0 ]; then + echo " $updates" +else + echo "" +fi diff --git a/polybar/scripts/brightnessctl.sh b/polybar/scripts/brightnessctl.sh new file mode 100755 index 0000000..79301a9 --- /dev/null +++ b/polybar/scripts/brightnessctl.sh @@ -0,0 +1,3 @@ +#!/bin/bash +echo "$(brightnessctl | grep -o "(.*" | tr -d "()")" + diff --git a/polybar/scripts/bt-status.sh b/polybar/scripts/bt-status.sh new file mode 100755 index 0000000..d01ef2e --- /dev/null +++ b/polybar/scripts/bt-status.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +echo bluetoothctl paired-devices | wc -l diff --git a/polybar/scripts/coins.svg b/polybar/scripts/coins.svg new file mode 100644 index 0000000..6d3b73f --- /dev/null +++ b/polybar/scripts/coins.svg @@ -0,0 +1,304 @@ +e900:1st +e901:ada +e902:adc +e903:adx +e904:aeon +e905:amp +e906:anc +e907:ant +e908:arch +e909:ardr +e90a:aur +e90b:banx +e90c:bat +e90d:bay +e90e:bc +e90f:bch +e910:bcn +e911:bft +e912:bnb +e913:bnt +e914:brk +e915:brx +e916:bsd +e917:bta +e918:btc +e919:btcd +e91a:btg +e91b:btm +e91c:bts +e91d:clam +e91e:clo +e91f:cloak +e920:cvc +e921:dao +e922:dash +e923:dcr +e924:dct +e925:dent +e926:dgb +e927:dgd +e928:dgx +e929:dmd +e92a:dnt +e92b:doge +e92c:edg +e92d:emc +e92e:eos +e92f:erc +e930:etc +e931:eth +e932:exp +e933:fc2 +e934:fcn +e935:fct +e936:flo +e937:frk +e938:ftc +e939:fun +e93a:game +e93b:gbg +e93c:gbyte +e93d:gdc +e93e:gemz +e93f:gld +e940:gno +e941:gnt +e942:golos +e943:grc +e944:grs +e945:gup +e946:awc +e947:hmq +e948:icn +e949:ifc +e94a:incnt +e94b:ioc +e94c:cnd +e94d:ixt +e94e:jbs +e94f:kmd +e950:kore +e951:lbc +e952:ldoge +e953:lsk +e954:ltc +e955:lun +e956:maid +e957:mco +e958:mint +e959:mln +e95a:mona +e95b:mrc +e95c:msc +e95d:msp +e95e:mtl +e95f:mtr +e960:mue +e961:nano +e962:nav +e963:nbt +e964:neo +e965:neos +e966:neu +e967:nlg +e968:nmc +e969:note +e96a:nvc +e96b:nxt +e96c:oax +e96d:ok +e96e:omg +e96f:omni +e970:opal +e971:part +e972:pay +e973:piggy +e974:pink +e975:pivx +e976:plbt +e977:plr +e978:plu +e979:pot +e97a:ppc +e97b:ptoy +e97c:qcn +e97d:qrk +e97e:qtum +e97f:rads +e980:rbies +e981:rbt +e982:rby +e983:rdd +e984:rep +e985:rise +e986:rlc +e987:salt +e988:sar +e989:scot +e98a:sdc +e98b:sia +e98c:sjcx +e98d:slg +e98e:sls +e98f:sngls +e990:snrg +e991:snt +e992:start +e993:steem +e994:storj +e995:str +e996:strat +e997:swift +e998:swt +e999:sync +e99a:sys +e99b:time +e99c:tkn +e99d:trig +e99e:trst +e99f:trx +e9a0:tx +e9a1:ubq +e9a2:unity +e9a3:usdt +e9a4:ven +e9a5:vior +e9a6:vnl +e9a7:vpn +e9a8:vrc +e9a9:vtc +e9aa:waves +e9ab:wings +e9ac:xai +e9ad:xaur +e9ae:xbs +e9af:xcp +e9b0:xdn +e9b1:xem +e9b2:xmr +e9b3:xpm +e9b4:xrp +e9b5:xtz +e9b7:xzc +e9b8:ybc +e9b9:zec +e9ba:zeit +e9bb:zrx +e9bc:stx +e9bd:sbtc +e9be:rcn +e9bf:nmr +e9c0:zil +e9c1:vib +e9c2:xnn +e9c3:viu +e9c4:veri +e9c5:sc +e9c6:rhoc +e9c7:kcs +e9c8:icx +e9c9:ark +e9ca:ae +e9cb:tip +e9cc:crpt +e9cd:via +e9ce:myst +e9cf:miota +e9d0:adt +e9d1:eng +e9d2:cfi +e9d3:dsh +e9d4:xlm +e9d5:fsbt +e9d6:atl +e9d7:ath +e9d8:arn +e9d9:arc +e9da:apt +e9db:aidoc +e9dc:amis +e9dd:adst +e9de:300 +e9df:ngc +e9e0:srn +e9e1:wax +e9e2:dcn +e9e3:powr +e9e4:dkk +e9e5:gbp +e9e6:eur +e9e7:usd +e9e8:ukg +e9e9:lrc +e9ea:brd +e9eb:mana +e9ec:mer +e9ed:tix +e9ee:xel +e9ef:zen +e9f0:btcp +e9f1:ebst +e9f2:elf +e9f3:hsr +e9f4:iost +e9f5:loom +e9f6:mkr +e9f7:nas +e9f8:now +e9f9:snm +e9fa:synx +e9fb:wan +e9fd:ely +e9fe:ela +e9ff:smart +ea00:aion +ea01:tusd +ea02:usdc +ea03:vet +ea04:pax +ea05:joys +ea06:bchsv +ea07:bsv +ea08:bth +ea09:trezor +ea0a:ledger +ea0b:r +ea0c:npxs +ea0d:dai +ea0e:link +ea0f:hot +ea10:gusd +ea11:eurs +ea12:vtho +ea13:kin +ea14:ont +ea15:atom +ea16:ankr +ea17:erd +ea18:ftm +ea19:lto +ea1a:und +ea1b:vera +ea1c:yec +ea1d:aya +ea1e:ethplo +ea1f:iotx +ea20:enj +ea21:rvn +ea22:xns +ea23:pyn +ea24:ncash +ea25:loki +ea26:knc +ea27:job +ea28:chz +ea29:btu +ea2a:apis +ea2b:gas +ea2c:busd +ea2d:iq +ea2e:lst +ea2f:ong +ea30:nut +ea31:eosdt \ No newline at end of file diff --git a/polybar/scripts/openvpn-status.sh b/polybar/scripts/openvpn-status.sh new file mode 100644 index 0000000..64be915 --- /dev/null +++ b/polybar/scripts/openvpn-status.sh @@ -0,0 +1,4 @@ + +#!/bin/sh + +printf "VPN: " && (pgrep -a openvpn$ | head -n 1 | awk '{print $NF }' | cut -d '.' -f 1 && echo down) | head -n 1 diff --git a/polybar/scripts/pcrypto.py b/polybar/scripts/pcrypto.py new file mode 100755 index 0000000..991e94f --- /dev/null +++ b/polybar/scripts/pcrypto.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 + +import requests +import argparse +import json +import sys +import os + +parser = argparse.ArgumentParser(description="Display currencies on polybar") +parser.add_argument("--coins", type=str, + nargs="+", help="Select coins to display") +parser.add_argument("--base", type=str, + nargs="?", default="USD", help="Currency base to convert against") +parser.add_argument("--decimals", type=int, + nargs="?", default=2, help="How many decimals to show") +parser.add_argument("--display", type=str, + nargs="?", default="price", choices=["price", "percentage", "both"], help="Display mode") +parser.add_argument("--apikey", type=str, + nargs="?",default=None, help="Visit https://developers.coinranking.com/create-account to make an account and generate a free API key.") + +args = parser.parse_args() +home = os.path.expanduser("~/") + +unicode_dict = {} +with open(f"{home}.config/polybar/scripts/coins.svg", "r", encoding="utf-8") as icons: + for line in icons: + unicode, coin = line.strip().split(":") + unicode_dict[unicode] = coin + +if not (args.coins and args.apikey): + parser.print_help() + parser.exit() + +coin_args_list = map(lambda x: f'symbols[]={x}', args.coins) +coin_args_str = "&".join(coin_args_list) + +get_base = requests.get( + f"https://api.coinranking.com/v2/reference-currencies?search={args.base}", + headers={'x-access-token': args.apikey}).json()["data"] + +get_base = get_base['currencies'][0] + +get_coin = requests.get( + f"https://api.coinranking.com/v2/coins?{coin_args_str}&referenceCurrencyUuid={get_base['uuid']}", + headers={'x-access-token': args.apikey}).json()['data'] + +for n in range(len(args.coins)): + coin = get_coin['coins'][n] + price_float = round(float(coin['price']), args.decimals) + delta = coin['change'] + + for _unicode, _coin in unicode_dict.items(): + if _coin == coin['symbol'].lower(): + icon = chr(int(_unicode, 16)) if len(_unicode) > 1 else _unicode + + current_price = get_base['sign'] + str(price_float) + + if args.display == "price": + sys.stdout.write(f" {icon} {current_price} ") + elif args.display == "percentage": + sys.stdout.write(f" {icon} {delta:+}% ") + elif args.display == "both": + sys.stdout.write(f" {icon} {current_price} | {delta:+}% ") diff --git a/polybar/scripts/pulseaudio-control.bash b/polybar/scripts/pulseaudio-control.bash new file mode 100755 index 0000000..1c0b784 --- /dev/null +++ b/polybar/scripts/pulseaudio-control.bash @@ -0,0 +1,515 @@ +#!/usr/bin/env bash + +################################################################## +# Polybar Pulseaudio Control # +# https://github.com/marioortizmanero/polybar-pulseaudio-control # +################################################################## + +# Defaults for configurable values, expected to be set by command-line arguments +AUTOSYNC="no" +COLOR_MUTED="%{F#6b6b6b}" +ICON_MUTED= +ICON_SINK= +NOTIFICATIONS="no" +OSD="no" +SINK_NICKNAMES_PROP= +VOLUME_STEP=2 +VOLUME_MAX=130 +# shellcheck disable=SC2016 +FORMAT='$VOL_ICON ${VOL_LEVEL}% $ICON_SINK $SINK_NICKNAME' +declare -A SINK_NICKNAMES +declare -a ICONS_VOLUME +declare -a SINK_BLACKLIST + +# Environment & global constants for the script +export LANG=en_US # Some calls depend on English outputs of pactl +END_COLOR="%{F-}" # For Polybar colors + + +# Saves the currently default sink into a variable named `curSink`. It will +# return an error code when pulseaudio isn't running. +function getCurSink() { + if ! pactl info &>/dev/null; then return 1; fi + local curSinkName + + curSinkName=$(pactl info | awk '/Default Sink: / {print $3}') + curSink=$(pactl list sinks | grep -B 4 -E "Name: $curSinkName\$" | sed -nE 's/^Sink #([0-9]+)$/\1/p') +} + + +# Saves the sink passed by parameter's volume into a variable named `VOL_LEVEL`. +function getCurVol() { + VOL_LEVEL=$(pactl list sinks | grep -A 15 -E "^Sink #$1\$" | grep 'Volume:' | grep -E -v 'Base Volume:' | awk -F : '{print $3; exit}' | grep -o -P '.{0,3}%' | sed 's/.$//' | tr -d ' ') +} + + +# Saves the name of the sink passed by parameter into a variable named +# `sinkName`. +function getSinkName() { + sinkName=$(pactl list sinks short | awk -v sink="$1" '{ if ($1 == sink) {print $2} }') + portName=$(pactl list sinks | grep -e 'Sink #' -e 'Active Port: ' | sed -n "/^Sink #$1\$/,+1p" | awk '/Active Port: / {print $3}') +} + + +# Saves the name to be displayed for the sink passed by parameter into a +# variable called `SINK_NICKNAME`. +# If a mapping for the sink name exists, that is used. Otherwise, the string +# "Sink #" is used. +function getNickname() { + getSinkName "$1" + unset SINK_NICKNAME + + if [ -n "$sinkName" ] && [ -n "$portName" ] && [ -n "${SINK_NICKNAMES[$sinkName/$portName]}" ]; then + SINK_NICKNAME="${SINK_NICKNAMES[$sinkName/$portName]}" + elif [ -n "$sinkName" ] && [ -n "${SINK_NICKNAMES[$sinkName]}" ]; then + SINK_NICKNAME="${SINK_NICKNAMES[$sinkName]}" + elif [ -n "$sinkName" ] && [ -n "$SINK_NICKNAMES_PROP" ]; then + getNicknameFromProp "$SINK_NICKNAMES_PROP" "$sinkName" + # Cache that result for next time + SINK_NICKNAMES["$sinkName"]="$SINK_NICKNAME" + fi + + if [ -z "$SINK_NICKNAME" ]; then + SINK_NICKNAME="Sink #$1" + fi +} + +# Gets sink nickname based on a given property. +function getNicknameFromProp() { + local nickname_prop="$1" + local for_name="$2" + + SINK_NICKNAME= + while read -r property value; do + case "$property" in + Name:) + sink_name="$value" + unset sink_desc + ;; + "$nickname_prop") + if [ "$sink_name" != "$for_name" ]; then + continue + fi + SINK_NICKNAME="${value:3:-1}" + break + ;; + esac + done < <(pactl list sinks) +} + +# Saves the status of the sink passed by parameter into a variable named +# `isMuted`. +function getIsMuted() { + isMuted=$(pactl list sinks | grep -E "^Sink #$1\$" -A 15 | awk '/Mute: / {print $2}') +} + + +# Saves all the sink inputs of the sink passed by parameter into a string +# named `sinkInputs`. +function getSinkInputs() { + sinkInputs=$(pactl list sink-inputs | grep -B 4 "Sink: $1" | sed -nE 's/^Sink Input #([0-9]+)$/\1/p') +} + + +function volUp() { + # Obtaining the current volume from pulseaudio into $VOL_LEVEL. + if ! getCurSink; then + echo "PulseAudio not running" + return 1 + fi + getCurVol "$curSink" + local maxLimit=$((VOLUME_MAX - VOLUME_STEP)) + + # Checking the volume upper bounds sothat if VOLUME_MAX was 100% and the + # increase percentage was 3%, a 99% volume would top at 100% instead + # of 102%. If the volume is above the maximum limit, nothing is done. + if [ "$VOL_LEVEL" -le "$VOLUME_MAX" ] && [ "$VOL_LEVEL" -ge "$maxLimit" ]; then + pactl set-sink-volume "$curSink" "$VOLUME_MAX%" + elif [ "$VOL_LEVEL" -lt "$maxLimit" ]; then + pactl set-sink-volume "$curSink" "+$VOLUME_STEP%" + fi + + if [ $OSD = "yes" ]; then showOSD "$curSink"; fi + if [ $AUTOSYNC = "yes" ]; then volSync; fi +} + + +function volDown() { + # Pactl already handles the volume lower bounds so that negative values + # are ignored. + if ! getCurSink; then + echo "PulseAudio not running" + return 1 + fi + pactl set-sink-volume "$curSink" "-$VOLUME_STEP%" + + if [ $OSD = "yes" ]; then showOSD "$curSink"; fi + if [ $AUTOSYNC = "yes" ]; then volSync; fi +} + + +function volSync() { + if ! getCurSink; then + echo "PulseAudio not running" + return 1 + fi + getSinkInputs "$curSink" + getCurVol "$curSink" + + # Every output found in the active sink has their volume set to the + # current one. This will only be called if $AUTOSYNC is `yes`. + for each in $sinkInputs; do + pactl set-sink-input-volume "$each" "$VOL_LEVEL%" + done +} + + +function volMute() { + # Switch to mute/unmute the volume with pactl. + if ! getCurSink; then + echo "PulseAudio not running" + return 1 + fi + if [ "$1" = "toggle" ]; then + getIsMuted "$curSink" + if [ "$isMuted" = "yes" ]; then + pactl set-sink-mute "$curSink" "no" + else + pactl set-sink-mute "$curSink" "yes" + fi + elif [ "$1" = "mute" ]; then + pactl set-sink-mute "$curSink" "yes" + elif [ "$1" = "unmute" ]; then + pactl set-sink-mute "$curSink" "no" + fi + + if [ $OSD = "yes" ]; then showOSD "$curSink"; fi +} + + +function nextSink() { + # The final sinks list, removing the blacklisted ones from the list of + # currently available sinks. + if ! getCurSink; then + echo "PulseAudio not running" + return 1 + fi + + # Obtaining a tuple of sink indexes after removing the blacklisted devices + # with their name. + sinks=() + local i=0 + while read -r line; do + index=$(echo "$line" | cut -f1) + name=$(echo "$line" | cut -f2) + + # If it's in the blacklist, continue the main loop. Otherwise, add + # it to the list. + for sink in "${SINK_BLACKLIST[@]}"; do + if [ "$sink" = "$name" ]; then + continue 2 + fi + done + + sinks[$i]="$index" + i=$((i + 1)) + done < <(pactl list short sinks | sort -n) + + # If the resulting list is empty, nothing is done + if [ ${#sinks[@]} -eq 0 ]; then return; fi + + # If the current sink is greater or equal than last one, pick the first + # sink in the list. Otherwise just pick the next sink avaliable. + local newSink + if [ "$curSink" -ge "${sinks[-1]}" ]; then + newSink=${sinks[0]} + else + for sink in "${sinks[@]}"; do + if [ "$curSink" -lt "$sink" ]; then + newSink=$sink + break + fi + done + fi + + # The new sink is set + pactl set-default-sink "$newSink" + + # Move all audio threads to new sink + local inputs + inputs="$(pactl list short sink-inputs | cut -f 1)" + for i in $inputs; do + pactl move-sink-input "$i" "$newSink" + done + + if [ $NOTIFICATIONS = "yes" ]; then + getNickname "$newSink" + + if command -v dunstify &>/dev/null; then + notify="dunstify --replace 201839192" + else + notify="notify-send" + fi + $notify "PulseAudio" "Changed output to $SINK_NICKNAME" --icon=audio-headphones-symbolic & + fi +} + + +# This function assumes that PulseAudio is already running. It only supports +# KDE OSDs for now. It will show a system message with the status of the +# sink passed by parameter, or the currently active one by default. +function showOSD() { + if [ -z "$1" ]; then + curSink="$1" + else + getCurSink + fi + getCurVol "$curSink" + getIsMuted "$curSink" + qdbus org.kde.kded /modules/kosd showVolume "$VOL_LEVEL" "$isMuted" +} + + +function listen() { + local firstRun=0 + + # Listen for changes and immediately create new output for the bar. + # This is faster than having the script on an interval. + pactl subscribe 2>/dev/null | { + while true; do + { + # If this is the first time just continue and print the current + # state. Otherwise wait for events. This is to prevent the + # module being empty until an event occurs. + if [ $firstRun -eq 0 ]; then + firstRun=1 + else + read -r event || break + # Avoid double events + if ! echo "$event" | grep -e "on card" -e "on sink" -e "on server"; then + continue + fi + fi + } &>/dev/null + output + done + } +} + + +function output() { + if ! getCurSink; then + echo "PulseAudio not running" + return 1 + fi + getCurVol "$curSink" + getIsMuted "$curSink" + + # Fixed volume icons over max volume + local iconsLen=${#ICONS_VOLUME[@]} + if [ "$iconsLen" -ne 0 ]; then + local volSplit=$((VOLUME_MAX / iconsLen)) + for i in $(seq 1 "$iconsLen"); do + if [ $((i * volSplit)) -ge "$VOL_LEVEL" ]; then + VOL_ICON="${ICONS_VOLUME[$((i-1))]}" + break + fi + done + else + VOL_ICON="" + fi + + getNickname "$curSink" + + # Showing the formatted message + if [ "$isMuted" = "yes" ]; then + # shellcheck disable=SC2034 + VOL_ICON=$ICON_MUTED + echo "${COLOR_MUTED}$(eval echo "$FORMAT")${END_COLOR}" + else + eval echo "$FORMAT" + fi +} + + +function usage() { + echo "\ +Usage: $0 [OPTION...] ACTION +Options: + --autosync | --no-autosync + Whether to maintain same volume for all programs. + Default: $AUTOSYNC + --color-muted + Color in which to format when muted. + Default: ${COLOR_MUTED:4:-1} + --notifications | --no-notifications + Whether to show notifications when changing sinks. + Default: $NOTIFICATIONS + --osd | --no-osd + Whether to display KDE's OSD message. + Default: $OSD + --icon-muted + Icon to use when muted. + Default: none + --icon-sink + Icon to use for sink. + Default: none + --format + Use a format string to control the output. + Available variables: + * \$VOL_ICON + * \$VOL_LEVEL + * \$ICON_SINK + * \$SINK_NICKNAME + Default: $FORMAT + --icons-volume [,...] + Icons for volume, from lower to higher. + Default: none + --volume-max + Maximum volume to which to allow increasing. + Default: $VOLUME_MAX + --volume-step + Step size when inc/decrementing volume. + Default: $VOLUME_STEP + --sink-blacklist [,...] + Sinks to ignore when switching. + Default: none + --sink-nicknames-from + pactl property to use for sink names, unless overriden by + --sink-nickname. Its possible values are listed under the 'Properties' + key in the output of \`pactl list sinks\` + Default: none + --sink-nickname : + Nickname to assign to given sink name, taking priority over + --sink-nicknames-from. May be given multiple times, and 'name' is + exactly as listed in the output of \`pactl list sinks short | cut -f2\`. + Note that you can also specify a port name for the sink with + \`/\`. + Default: none +Actions: + help display this message and exit + output print the PulseAudio status once + listen listen for changes in PulseAudio to automatically update + this script's output + up, down increase or decrease the default sink's volume + mute, unmute mute or unmute the default sink's audio + togmute switch between muted and unmuted + next-sink switch to the next available sink + sync synchronize all the output streams volume to be the same as + the current sink's volume +Author: + Mario Ortiz Manero +More info on GitHub: + https://github.com/marioortizmanero/polybar-pulseaudio-control" +} + +while [[ "$1" = --* ]]; do + unset arg + unset val + if [[ "$1" = *=* ]]; then + arg="${1//=*/}" + val="${1//*=/}" + shift + else + arg="$1" + # Support space-separated values, but also value-less flags + if [[ "$2" != --* ]]; then + val="$2" + shift + fi + shift + fi + + case "$arg" in + --autosync) + AUTOSYNC=yes + ;; + --no-autosync) + AUTOSYNC=no + ;; + --color-muted|--colour-muted) + COLOR_MUTED="%{F#$val}" + ;; + --notifications) + NOTIFICATIONS=yes + ;; + --no-notifications) + NOTIFICATIONS=no + ;; + --osd) + OSD=yes + ;; + --no-osd) + OSD=no + ;; + --icon-muted) + ICON_MUTED="$val" + ;; + --icon-sink) + # shellcheck disable=SC2034 + ICON_SINK="$val" + ;; + --icons-volume) + IFS=, read -r -a ICONS_VOLUME <<< "${val//[[:space:]]/}" + ;; + --volume-max) + VOLUME_MAX="$val" + ;; + --volume-step) + VOLUME_STEP="$val" + ;; + --sink-blacklist) + IFS=, read -r -a SINK_BLACKLIST <<< "${val//[[:space:]]/}" + ;; + --sink-nicknames-from) + SINK_NICKNAMES_PROP="$val" + ;; + --sink-nickname) + SINK_NICKNAMES["${val//:*/}"]="${val//*:}" + ;; + --format) + FORMAT="$val" + ;; + *) + echo "Unrecognised option: $arg" >&2 + exit 1 + ;; + esac +done + +case "$1" in + up) + volUp + ;; + down) + volDown + ;; + togmute) + volMute toggle + ;; + mute) + volMute mute + ;; + unmute) + volMute unmute + ;; + sync) + volSync + ;; + listen) + listen + ;; + next-sink) + nextSink + ;; + output) + output + ;; + help) + usage + ;; + *) + echo "Unrecognised action: $1" >&2 + exit 1 + ;; +esac diff --git a/polybar/scripts/spotify_status.py b/polybar/scripts/spotify_status.py new file mode 100644 index 0000000..7199f4e --- /dev/null +++ b/polybar/scripts/spotify_status.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python + +import sys +import dbus +import argparse + +parser = argparse.ArgumentParser() +parser.add_argument( + '-t', + '--trunclen', + type=int, + metavar='trunclen' +) +parser.add_argument( + '-f', + '--format', + type=str, + metavar='custom format', + dest='custom_format' +) +parser.add_argument( + '-p', + '--playpause', + type=str, + metavar='play-pause indicator', + dest='play_pause' +) +parser.add_argument( + '--font', + type=str, + metavar='the index of the font to use for the main label', + dest='font' +) +parser.add_argument( + '--playpause-font', + type=str, + metavar='the index of the font to use to display the playpause indicator', + dest='play_pause_font' +) +parser.add_argument( + '-q', + '--quiet', + action='store_true', + help="if set, don't show any output when the current song is paused", + dest='quiet', +) + +args = parser.parse_args() + + +def fix_string(string): + # corrects encoding for the python version used + if sys.version_info.major == 3: + return string + else: + return string.encode('utf-8') + + +def truncate(name, trunclen): + if len(name) > trunclen: + name = name[:trunclen] + name += '...' + if ('(' in name) and (')' not in name): + name += ')' + return name + + + +# Default parameters +output = fix_string(u'{play_pause} {artist}: {song}') +trunclen = 35 +play_pause = fix_string(u'\u25B6,\u23F8') # first character is play, second is paused + +label_with_font = '%{{T{font}}}{label}%{{T-}}' +font = args.font +play_pause_font = args.play_pause_font + +quiet = args.quiet + +# parameters can be overwritten by args +if args.trunclen is not None: + trunclen = args.trunclen +if args.custom_format is not None: + output = args.custom_format +if args.play_pause is not None: + play_pause = args.play_pause + +try: + session_bus = dbus.SessionBus() + spotify_bus = session_bus.get_object( + 'org.mpris.MediaPlayer2.spotify', + '/org/mpris/MediaPlayer2' + ) + + spotify_properties = dbus.Interface( + spotify_bus, + 'org.freedesktop.DBus.Properties' + ) + + metadata = spotify_properties.Get('org.mpris.MediaPlayer2.Player', 'Metadata') + status = spotify_properties.Get('org.mpris.MediaPlayer2.Player', 'PlaybackStatus') + + # Handle play/pause label + + play_pause = play_pause.split(',') + + if status == 'Playing': + play_pause = play_pause[0] + elif status == 'Paused': + play_pause = play_pause[1] + else: + play_pause = str() + + if play_pause_font: + play_pause = label_with_font.format(font=play_pause_font, label=play_pause) + + # Handle main label + + artist = fix_string(metadata['xesam:artist'][0]) if metadata['xesam:artist'] else '' + song = fix_string(metadata['xesam:title']) if metadata['xesam:title'] else '' + album = fix_string(metadata['xesam:album']) if metadata['xesam:album'] else '' + + if (quiet and status == 'Paused') or (not artist and not song and not album): + print('') + else: + if font: + artist = label_with_font.format(font=font, label=artist) + song = label_with_font.format(font=font, label=song) + album = label_with_font.format(font=font, label=album) + + # Add 4 to trunclen to account for status symbol, spaces, and other padding characters + print(truncate(output.format(artist=artist, + song=song, + play_pause=play_pause, + album=album), trunclen + 4)) + +except Exception as e: + if isinstance(e, dbus.exceptions.DBusException): + print('') + else: + print(e) diff --git a/polybar/scripts/xbps-updates.sh b/polybar/scripts/xbps-updates.sh new file mode 100755 index 0000000..2602539 --- /dev/null +++ b/polybar/scripts/xbps-updates.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +updates=$(xbps-install -Mun 2> /dev/null | wc -l) + +if [ -n "$updates" ] && [ "$updates" -gt 0 ]; then + echo " $updates" +else + echo "" +fi diff --git a/polybar/scripts/xbps-updates.sh.bkp b/polybar/scripts/xbps-updates.sh.bkp new file mode 100755 index 0000000..d2ae63e --- /dev/null +++ b/polybar/scripts/xbps-updates.sh.bkp @@ -0,0 +1,11 @@ +#!/bin/sh + +updates=$(xbps-install -Mun 2> /dev/null | wc -l) + +if [ -n "$updates" ] && [ "$updates" -eq 1 ]; then + echo "$updates XBPS update available" +elif [ -n "$updates" ] && [ "$updates" -gt 1 ]; then + echo "$updates XBPS updates available" +else + echo "" +fi