feat: massive update

This commit is contained in:
ange 2024-01-04 10:07:50 +01:00
parent 23f34782a8
commit 82ebb9bc4b
No known key found for this signature in database
GPG Key ID: 7A17056039D46BAB
45 changed files with 9166 additions and 1418 deletions

View File

@ -1,911 +0,0 @@
# 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. Both lines and columns
# must be non-zero for this to take effect. 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: 0
# y: 0
# 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: 0.95
# 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
# Decorations theme variant
#
# Override the variant of the System theme/GTK theme/Wayland client side
# decorations. Commonly supported values are `Dark`, `Light`, and `None` for
# auto pick-up. Set this to `None` to use the default theme variant.
#decorations_theme_variant: None
# Resize increments
#
# Prefer resizing window by discrete steps equal to cell dimensions.
#resize_increments: false
# Make `Option` key behave as `Alt` (macOS only):
# - OnlyLeft
# - OnlyRight
# - Both
# - None (default)
#option_as_alt: 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: monospace
# 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_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: 11.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
# Use built-in font for box drawing characters.
#
# If `true`, Alacritty will use a custom built-in font for box drawing
# characters (Unicode points 2500 - 259f).
#
#builtin_box_drawing: 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'
# Keyboard 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
# Footer bar
#
# Color used for the footer bar on the bottom, used by search regex input,
# hyperlink URI preview, etc.
#
#footer_bar:
# background: '#c5c8c6'
# foreground: '#1d1f21'
# 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: 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
# Time after which cursor stops blinking, in seconds.
#
# Specifying '0' will disable timeout for blinking.
#blink_timeout: 5
# 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:
# - (Linux/BSD/macOS) `$SHELL` or the user's login shell, if `$SHELL` is unset
# - (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
# 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
# Hints
#
# Terminal hints can be used to find text or hyperlink 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 any of `regex` or `hyperlinks` field and either an
# `action` or a `command` field. The fields `mouse`, `binding` and
# `post_processing` are optional.
#
# The `hyperlinks` option will cause OSC 8 escape sequence hyperlinks to be
# highlighted.
#
# 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 and applies only to
# `regex` matches.
#
# 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{-}\\^⟨⟩`]+"
# hyperlinks: true
# 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: Right, mods: Control, 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/winit/*/winit/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
# - ToggleMaximized
# - 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`.
# - CenterAroundViCursor
# Center view around vi mode cursor
#
# - 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: Z, mode: Vi|~Search, action: CenterAroundViCursor }
#- { 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: CreateNewWindow }
#- { 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
# Renderer override.
# - glsl3
# - gles2
# - gles2_pure
#renderer: None
# Print all received window events.
#print_events: false
# Highlight window damage information.
#highlight_damage: false

View File

@ -0,0 +1,2 @@
[window]
opacity = 0.95

View File

@ -0,0 +1,9 @@
output eDP
mode 1920x1080
pos 0x0
primary
rate 60.00
output HDMI-A-0
mode 1920x1080
pos 1920x0
rate 60.00

View File

@ -0,0 +1,2 @@
HDMI-A-0 00ffffffffffff004c2d200d34415743191e010380341d782a9315a655519c27115054bfef80714f81c0810081809500a9c0b3000101023a801871382d40582c450009252100001e000000fd00324b1e5111000a202020202020000000fc00533234463335300a2020202020000000ff0048345a4e3630323031370a20200114020311b14690041f13120365030c001000011d00bc52d01e20b828554009252100001e8c0ad090204031200c4055000925210000188c0ad08a20e02d10103e9600092521000018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051
eDP 00ffffffffffff0009e5d50800000000231d0104a5221378030b95935c59932a20505400000001010101010101010101010101010101043a803671381e403020360058c21000001a000000000000000000000000000000000000000000fe00424f452043510a202020202020000000fe004e5431353646484d2d4e34330a000e

View File

@ -0,0 +1,6 @@
output HDMI-A-0
off
output eDP
mode 1920x1080
pos 0x0
rate 60.00

View File

@ -0,0 +1 @@
eDP 00ffffffffffff0009e5d50800000000231d0104a5221378030b95935c59932a20505400000001010101010101010101010101010101043a803671381e403020360058c21000001a000000000000000000000000000000000000000000fe00424f452043510a202020202020000000fe004e5431353646484d2d4e34330a000e

2
.config/black Normal file
View File

@ -0,0 +1,2 @@
[tool.black]
line-length = 79

View File

@ -1,6 +1,6 @@
[user] [user]
email = ange.duhayon@epitech.eu email = ange@duhayon.com
name = AngeD name = ange
[credential] [credential]
helper = store helper = store
[diff] [diff]
@ -9,3 +9,5 @@
cmd = nvim -d -c \"wincmd l\" \"$LOCAL\" \"$REMOTE\" cmd = nvim -d -c \"wincmd l\" \"$LOCAL\" \"$REMOTE\"
[init] [init]
defaultBranch = main defaultBranch = main
[commit]
gpgsign = true

View File

@ -1,55 +0,0 @@
function! TekHeader(ft=&filetype)
let com_arr = {
\ 'c': {'top': '/*', 'mid': '**', 'bot': '*/'},
\ 'make': {'top': '##', 'mid': '##', 'bot': '##'},
\ 'haskell': {'top': '{-', 'mid': '--', 'bot': '-}'},
\ }
if (!has_key(com_arr, a:ft))
echoerr "Unsupported filetype: " . a:ft
return
endif
let top = com_arr[a:ft]['top']
let mid = com_arr[a:ft]['mid']
let bot = com_arr[a:ft]['bot']
let dir_name = fnamemodify(getcwd(), ':t')
let file_name = expand('%:t:r')
call append(0, top)
call append(1, mid . ' EPITECH PROJECT, ' . strftime('%Y'))
call append(2, mid . ' ' . dir_name)
call append(3, mid . ' File description:')
call append(4, mid . ' ' . file_name)
call append(5, bot)
endfunction
function! TekHHeader()
call TekHeader('c')
call append(6, '')
call append(7, '#pragma once')
call append(8, '')
endfunction
function! TekHppHeader()
let file_name = expand('%:t:r')
call append(0, '#pragma once')
call append(1, '')
call append(2, 'class ' .. file_name .. ' {')
call append(3, ' public:')
call append(4, ' ' .. file_name .. '(void);')
call append(5, ' ~' .. file_name .. '(void);')
call append(6, '')
call append(7, ' protected:')
call append(8, '};')
endfunction
au BufNewFile *.c call TekHeader('c')
au BufNewFile *.hs call TekHeader('haskell')
au BufNewFile Makefile call TekHeader('make')
au BufNewFile *.h call TekHHeader()
au BufNewFile *.hpp call TekHppHeader()
command Header call TekHeader()

View File

@ -36,7 +36,6 @@ vim.o.grepprg = "grep -rn"
vim.o.scrolloff = 2 vim.o.scrolloff = 2
vim.wo.colorcolumn = "80" vim.wo.colorcolumn = "80"
vim.g.black_linelength = 79
vim.g.netrw_banner = 0 vim.g.netrw_banner = 0
vim.g.netrw_list_hide = "\\.o$,\\.d$,\\.gc..$" vim.g.netrw_list_hide = "\\.o$,\\.d$,\\.gc..$"
@ -59,14 +58,12 @@ require"pack-easy-align"
require"pack-lspconfig" require"pack-lspconfig"
require"pack-telescope" require"pack-telescope"
require"pack-treesitter" require"pack-treesitter"
vim.cmd("source ~/.config/nvim/epitech.vim")
----------------------- -----------------------
----- keybindings ----- ----- keybindings -----
----------------------- -----------------------
-- remove trailing whitespaces -- remove trailing whitespaces
vim.keymap.set("n", "<Leader>e", "<cmd>exe getline(line('.'))<CR>")
vim.keymap.set("n", "<Leader>f", "<cmd>%s/\\s\\+$//e<CR>") vim.keymap.set("n", "<Leader>f", "<cmd>%s/\\s\\+$//e<CR>")
vim.keymap.set("n", "n", "nzz") vim.keymap.set("n", "n", "nzz")
vim.keymap.set("n", "p", "pzz") vim.keymap.set("n", "N", "Nzz")

View File

@ -1,40 +1,40 @@
lspconfig = require"lspconfig" local lspconfig = require"lspconfig"
local servers = { local servers = {
"pyright", "pyright",
} }
local on_attach = function(client, bufnr) -- Global mappings.
-- Enable completion triggered by <c-x><c-o>
vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
-- Mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local bufopts = { noremap=true, silent=true, buffer=bufnr }
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, bufopts)
vim.keymap.set("n", "gd", vim.lsp.buf.definition, bufopts)
vim.keymap.set("n", "K", vim.lsp.buf.hover, bufopts)
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, bufopts)
vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, bufopts)
vim.keymap.set("n", "<Leader>wa", vim.lsp.buf.add_workspace_folder, bufopts)
vim.keymap.set("n", "<Leader>wr", vim.lsp.buf.remove_workspace_folder, bufopts)
vim.keymap.set("n", "<Leader>wl", function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, bufopts)
vim.keymap.set("n", "<Leader>D", vim.lsp.buf.type_definition, bufopts)
vim.keymap.set("n", "<Leader>rn", vim.lsp.buf.rename, bufopts)
vim.keymap.set("n", "<Leader>ca", vim.lsp.buf.code_action, bufopts)
vim.keymap.set("n", "gr", vim.lsp.buf.references, bufopts)
end
-- Mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions -- See `:help vim.diagnostic.*` for documentation on any of the below functions
local opts = { noremap=true, silent=true } vim.keymap.set('n', '<space>e', vim.diagnostic.open_float)
vim.keymap.set("n", "<Leader>e", vim.diagnostic.open_float, opts) vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts) vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist)
vim.keymap.set("n", "<Leader>q", vim.diagnostic.setloclist, opts)
-- Use LspAttach autocommand to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
-- Buffer local mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local opts = { buffer = ev.buf }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts)
vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts)
vim.keymap.set('n', '<space>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, opts)
vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, opts)
vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts)
vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
end
for _, server in ipairs(servers) do for _, server in ipairs(servers) do
lspconfig[server].setup {on_attach = on_attach} lspconfig[server].setup { on_attach = on_attach }
end end

View File

@ -3,3 +3,4 @@ require"nvim-treesitter.configs".setup {
auto_install = true, auto_install = true,
highlight = {enable = true}, highlight = {enable = true},
} }
vim.cmd("TSUpdate")

@ -1 +1 @@
Subproject commit b9acd92ded2ba155867ca5af9d618e933d96e3b0 Subproject commit c5476a091b0f1b4e853db91c91ff941f848a1cdd

@ -1 +1 @@
Subproject commit 50012918b2fc8357b87cff2a7f7f0446e47da174 Subproject commit 55d9fe89e33efd26f532ef20223e5f9430c8b0c0

@ -1 +1 @@
Subproject commit 20bf20500c95208c3ac0ef07245065bf94dcab15 Subproject commit 983460fb8cd864748311f4c7f0c8337091f24d59

@ -1 +1 @@
Subproject commit 075a64addc33390028ea124a1046a43497f05cd1 Subproject commit 0da349ed303bea955942f409d29059cdb89dbe2c

View File

@ -48,7 +48,9 @@ static const Layout layouts[] = {
#define MODKEY Mod1Mask #define MODKEY Mod1Mask
#define TAGKEYS(KEY,TAG) \ #define TAGKEYS(KEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \ { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
{ MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
/* helper for spawning shell commands in the pre dwm-5.0 fashion */ /* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
@ -61,16 +63,24 @@ static const Key keys[] = {
/* modifier key function argument */ /* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } }, { MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } }, { MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } }, { MODKEY, XK_k, focusstack, {.i = -1 } },
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
{ MODKEY, XK_Return, zoom, {0} }, { MODKEY, XK_Return, zoom, {0} },
{ MODKEY, XK_Tab, view, {0} }, { MODKEY, XK_Tab, view, {0} },
{ MODKEY|ShiftMask, XK_c, killclient, {0} }, { MODKEY|ShiftMask, XK_c, killclient, {0} },
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
{ MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
{ MODKEY|ShiftMask, XK_f, togglefullscr, {0} }, { MODKEY|ShiftMask, XK_f, togglefullscr, {0} },
{ MODKEY, XK_0, view, {.ui = ~0 } },
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
{ MODKEY, XK_comma, focusmon, {.i = -1 } }, { MODKEY, XK_comma, focusmon, {.i = -1 } },
{ MODKEY, XK_period, focusmon, {.i = +1 } }, { MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
@ -97,6 +107,8 @@ static const Button buttons[] = {
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} }, { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} }, { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
{ ClkTagBar, 0, Button1, view, {0} }, { ClkTagBar, 0, Button1, view, {0} },
{ ClkTagBar, 0, Button3, toggleview, {0} },
{ ClkTagBar, MODKEY, Button1, tag, {0} }, { ClkTagBar, MODKEY, Button1, tag, {0} },
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
}; };

View File

@ -5,8 +5,8 @@ dwm \- dynamic window manager
.B dwm .B dwm
.RB [ \-v ] .RB [ \-v ]
.SH DESCRIPTION .SH DESCRIPTION
dwm is a dynamic window manager for X. It manages windows in tiled, monocle and dwm is a dynamic window manager for X. It manages windows in tiled, monocle
floating layouts. Either layout can be applied dynamically, optimising the and floating layouts. Either layout can be applied dynamically, optimising the
environment for the application in use and the task performed. environment for the application in use and the task performed.
.P .P
In tiled layouts windows are managed in a master and stacking area. The master In tiled layouts windows are managed in a master and stacking area. The master
@ -17,17 +17,17 @@ maximised to the screen size. In floating layout windows can be resized and
moved freely. Dialog windows are always managed floating, regardless of the moved freely. Dialog windows are always managed floating, regardless of the
layout applied. layout applied.
.P .P
Windows are grouped by tags. Each window can be tagged with one tag. Selecting Windows are grouped by tags. Each window can be tagged with one or multiple
a tag displays all windows with this tag. tags. Selecting certain tags displays all windows with these tags.
.P .P
Each screen contains a small status bar which displays all available tags, the Each screen contains a small status bar which displays all available tags, the
layout, the title of the focused window, and the text read from the root window layout, the title of the focused window, and the text read from the root window
name property, if the screen is focused. A floating window is indicated with an name property, if the screen is focused. A floating window is indicated with an
empty square and a maximised floating window is indicated with a filled square empty square and a maximised floating window is indicated with a filled square
before the windows title. The selected tag is indicated with a different color. before the windows title. The selected tags are indicated with a different
The tag of the focused window is indicated with a filled square in the top left color. The tags of the focused window are indicated with a filled square in the
corner. The tags which are applied to one or more windows are indicated with an top left corner. The tags which are applied to one or more windows are
empty square in the top left corner. indicated with an empty square in the top left corner.
.P .P
dwm draws a small border around windows to indicate the focus state. dwm draws a small border around windows to indicate the focus state.
.SH OPTIONS .SH OPTIONS
@ -43,7 +43,17 @@ is read and displayed in the status text area. It can be set with the
command. command.
.TP .TP
.B Button1 .B Button1
click on a tag label to display all windows with that tag. click on a tag label to display all windows with that tag, click on the layout
label toggles between tiled and floating layout.
.TP
.B Button3
click on a tag label adds/removes all windows with that tag to/from the view.
.TP
.B Mod1\-Button1
click on a tag label applies that tag to the focused window.
.TP
.B Mod1\-Button3
click on a tag label adds/removes that tag to/from the focused window.
.SS Keyboard commands .SS Keyboard commands
.TP .TP
.B Mod1\-Shift\-Return .B Mod1\-Shift\-Return
@ -67,6 +77,9 @@ Send focused window to previous screen, if any.
.B Mod1\-Shift\-. .B Mod1\-Shift\-.
Send focused window to next screen, if any. Send focused window to next screen, if any.
.TP .TP
.B Mod1\-b
Toggles bar on and off.
.TP
.B Mod1\-t .B Mod1\-t
Sets tiled layout. Sets tiled layout.
.TP .TP
@ -85,6 +98,18 @@ Focus next window.
.B Mod1\-k .B Mod1\-k
Focus previous window. Focus previous window.
.TP .TP
.B Mod1\-i
Increase number of windows in master area.
.TP
.B Mod1\-d
Decrease number of windows in master area.
.TP
.B Mod1\-l
Increase master area size.
.TP
.B Mod1\-h
Decrease master area size.
.TP
.B Mod1\-Return .B Mod1\-Return
Zooms/cycles focused window to/from master area (tiled layouts only). Zooms/cycles focused window to/from master area (tiled layouts only).
.TP .TP
@ -103,9 +128,21 @@ Toggles to the previously selected tags.
.B Mod1\-Shift\-[1..n] .B Mod1\-Shift\-[1..n]
Apply nth tag to focused window. Apply nth tag to focused window.
.TP .TP
.B Mod1\-Shift\-0
Apply all tags to focused window.
.TP
.B Mod1\-Control\-Shift\-[1..n]
Add/remove nth tag to/from focused window.
.TP
.B Mod1\-[1..n] .B Mod1\-[1..n]
View all windows with nth tag. View all windows with nth tag.
.TP .TP
.B Mod1\-0
View all windows with any tag.
.TP
.B Mod1\-Control\-[1..n]
Add/remove all windows with nth tag to/from the view.
.TP
.B Mod1\-Shift\-q .B Mod1\-Shift\-q
Quit dwm. Quit dwm.
.SS Mouse commands .SS Mouse commands

View File

@ -168,12 +168,12 @@ static void focusin(XEvent *e);
static void focusmon(const Arg *arg); static void focusmon(const Arg *arg);
static void focusstack(const Arg *arg); static void focusstack(const Arg *arg);
static Atom getatomprop(Client *c, Atom prop); static Atom getatomprop(Client *c, Atom prop);
static Client *getclientptr(void);
static int getrootptr(int *x, int *y); static int getrootptr(int *x, int *y);
static long getstate(Window w); static long getstate(Window w);
static int gettextprop(Window w, Atom atom, char *text, unsigned int size); static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
static void grabbuttons(Client *c, int focused); static void grabbuttons(Client *c, int focused);
static void grabkeys(void); static void grabkeys(void);
static void incnmaster(const Arg *arg);
static void keypress(XEvent *e); static void keypress(XEvent *e);
static void killclient(const Arg *arg); static void killclient(const Arg *arg);
static void manage(Window w, XWindowAttributes *wa); static void manage(Window w, XWindowAttributes *wa);
@ -199,6 +199,7 @@ static void setclientstate(Client *c, long state);
static void setfocus(Client *c); static void setfocus(Client *c);
static void setfullscreen(Client *c, int fullscreen); static void setfullscreen(Client *c, int fullscreen);
static void setlayout(const Arg *arg); static void setlayout(const Arg *arg);
static void setmfact(const Arg *arg);
static void setup(void); static void setup(void);
static void seturgent(Client *c, int urg); static void seturgent(Client *c, int urg);
static void showhide(Client *c); static void showhide(Client *c);
@ -207,8 +208,11 @@ static void spawn(const Arg *arg);
static void tag(const Arg *arg); static void tag(const Arg *arg);
static void tagmon(const Arg *arg); static void tagmon(const Arg *arg);
static void tile(Monitor *m); static void tile(Monitor *m);
static void togglebar(const Arg *arg);
static void togglefloating(const Arg *arg); static void togglefloating(const Arg *arg);
static void togglefullscr(const Arg *arg); static void togglefullscr(const Arg *arg);
static void toggletag(const Arg *arg);
static void toggleview(const Arg *arg);
static void unfocus(Client *c, int setfocus); static void unfocus(Client *c, int setfocus);
static void unmanage(Client *c, int destroyed); static void unmanage(Client *c, int destroyed);
static void unmapnotify(XEvent *e); static void unmapnotify(XEvent *e);
@ -223,7 +227,6 @@ static void updatetitle(Client *c);
static void updatewindowtype(Client *c); static void updatewindowtype(Client *c);
static void updatewmhints(Client *c); static void updatewmhints(Client *c);
static void view(const Arg *arg); static void view(const Arg *arg);
static void warp(const Monitor *m);
static Client *wintoclient(Window w); static Client *wintoclient(Window w);
static Monitor *wintomon(Window w); static Monitor *wintomon(Window w);
static int xerror(Display *dpy, XErrorEvent *ee); static int xerror(Display *dpy, XErrorEvent *ee);
@ -821,7 +824,7 @@ focusmon(const Arg *arg)
return; return;
unfocus(selmon->sel, 0); unfocus(selmon->sel, 0);
selmon = m; selmon = m;
warp(m); focus(NULL);
} }
void void
@ -866,17 +869,6 @@ getatomprop(Client *c, Atom prop)
return atom; return atom;
} }
Client *
getclientptr(void)
{
int di;
unsigned int dui;
Window win, dummy;
XQueryPointer(dpy, root, &dummy, &win, &di, &di, &di, &di, &dui);
return wintoclient(win);
}
int int
getrootptr(int *x, int *y) getrootptr(int *x, int *y)
{ {
@ -967,6 +959,13 @@ grabkeys(void)
} }
} }
void
incnmaster(const Arg *arg)
{
selmon->nmaster = MAX(selmon->nmaster + arg->i, 0);
arrange(selmon);
}
#ifdef XINERAMA #ifdef XINERAMA
static int static int
isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info) isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info)
@ -1501,6 +1500,21 @@ setlayout(const Arg *arg)
drawbar(selmon); drawbar(selmon);
} }
/* arg > 1.0 will set mfact absolutely */
void
setmfact(const Arg *arg)
{
float f;
if (!arg || !selmon->lt[selmon->sellt]->arrange)
return;
f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
if (f < 0.05 || f > 0.95)
return;
selmon->mfact = f;
arrange(selmon);
}
void void
setup(void) setup(void)
{ {
@ -1668,6 +1682,15 @@ tile(Monitor *m)
} }
} }
void
togglebar(const Arg *arg)
{
selmon->showbar = !selmon->showbar;
updatebarpos(selmon);
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
arrange(selmon);
}
void void
togglefloating(const Arg *arg) togglefloating(const Arg *arg)
{ {
@ -1689,6 +1712,33 @@ togglefullscr(const Arg *arg)
setfullscreen(selmon->sel, !selmon->sel->isfullscreen); setfullscreen(selmon->sel, !selmon->sel->isfullscreen);
} }
void
toggletag(const Arg *arg)
{
unsigned int newtags;
if (!selmon->sel)
return;
newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
if (newtags) {
selmon->sel->tags = newtags;
focus(NULL);
arrange(selmon);
}
}
void
toggleview(const Arg *arg)
{
unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
if (newtagset) {
selmon->tagset[selmon->seltags] = newtagset;
focus(NULL);
arrange(selmon);
}
}
void void
unfocus(Client *c, int setfocus) unfocus(Client *c, int setfocus)
{ {
@ -1987,14 +2037,6 @@ view(const Arg *arg)
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
focus(NULL); focus(NULL);
arrange(selmon); arrange(selmon);
focus(getclientptr());
}
void
warp(const Monitor *m)
{
XWarpPointer(dpy, None, root, 0, 0, 0, 0, selmon->wx + selmon->ww / 2, selmon->wy + selmon->wh / 2);
focus(NULL);
} }
Client * Client *

View File

@ -1,40 +0,0 @@
diff --git a/dwm.c b/dwm.c
index e5efb6a..750783a 100644
--- a/dwm.c
+++ b/dwm.c
@@ -170,6 +170,7 @@ static void focusin(XEvent *e);
static void focusmon(const Arg *arg);
static void focusstack(const Arg *arg);
static Atom getatomprop(Client *c, Atom prop);
+static Client *getclientptr(void);
static int getrootptr(int *x, int *y);
static long getstate(Window w);
static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
@@ -878,6 +879,17 @@ getatomprop(Client *c, Atom prop)
return atom;
}
+Client *
+getclientptr(void)
+{
+ int di;
+ unsigned int dui;
+ Window win, dummy;
+
+ XQueryPointer(dpy, root, &dummy, &win, &di, &di, &di, &di, &dui);
+ return wintoclient(win);
+}
+
int
getrootptr(int *x, int *y)
{
@@ -2040,8 +2052,8 @@ view(const Arg *arg)
selmon->seltags ^= 1; /* toggle sel tagset */
if (arg->ui & TAGMASK)
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
- focus(NULL);
arrange(selmon);
+ focus(getclientptr());
}
Client *

View File

@ -1,273 +0,0 @@
diff --git a/config.def.h b/config.def.h
index 061ad66..5c548df 100644
--- a/config.def.h
+++ b/config.def.h
@@ -48,9 +48,7 @@ static const Layout layouts[] = {
#define MODKEY Mod1Mask
#define TAGKEYS(KEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
- { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
{ MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
- { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
/* helper for spawning shell commands in the pre dwm-5.0 fashion */
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
@@ -63,23 +61,15 @@ static const Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
- { MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },
- { MODKEY, XK_i, incnmaster, {.i = +1 } },
- { MODKEY, XK_d, incnmaster, {.i = -1 } },
- { MODKEY, XK_h, setmfact, {.f = -0.05} },
- { MODKEY, XK_l, setmfact, {.f = +0.05} },
{ MODKEY, XK_Return, zoom, {0} },
{ MODKEY, XK_Tab, view, {0} },
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
- { MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
- { MODKEY, XK_0, view, {.ui = ~0 } },
- { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
{ MODKEY, XK_comma, focusmon, {.i = -1 } },
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
@@ -108,8 +98,6 @@ static const Button buttons[] = {
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
{ ClkClientWin, MODKEY, Button3, resizemouse, {0} },
{ ClkTagBar, 0, Button1, view, {0} },
- { ClkTagBar, 0, Button3, toggleview, {0} },
{ ClkTagBar, MODKEY, Button1, tag, {0} },
- { ClkTagBar, MODKEY, Button3, toggletag, {0} },
};
diff --git a/dwm.1 b/dwm.1
index ddc8321..b8ced05 100644
--- a/dwm.1
+++ b/dwm.1
@@ -5,8 +5,8 @@ dwm \- dynamic window manager
.B dwm
.RB [ \-v ]
.SH DESCRIPTION
-dwm is a dynamic window manager for X. It manages windows in tiled, monocle
-and floating layouts. Either layout can be applied dynamically, optimising the
+dwm is a dynamic window manager for X. It manages windows in tiled, monocle and
+floating layouts. Either layout can be applied dynamically, optimising the
environment for the application in use and the task performed.
.P
In tiled layouts windows are managed in a master and stacking area. The master
@@ -17,17 +17,17 @@ maximised to the screen size. In floating layout windows can be resized and
moved freely. Dialog windows are always managed floating, regardless of the
layout applied.
.P
-Windows are grouped by tags. Each window can be tagged with one or multiple
-tags. Selecting certain tags displays all windows with these tags.
+Windows are grouped by tags. Each window can be tagged with one tag. Selecting
+a tag displays all windows with this tag.
.P
Each screen contains a small status bar which displays all available tags, the
layout, the title of the focused window, and the text read from the root window
name property, if the screen is focused. A floating window is indicated with an
empty square and a maximised floating window is indicated with a filled square
-before the windows title. The selected tags are indicated with a different
-color. The tags of the focused window are indicated with a filled square in the
-top left corner. The tags which are applied to one or more windows are
-indicated with an empty square in the top left corner.
+before the windows title. The selected tag is indicated with a different color.
+The tag of the focused window is indicated with a filled square in the top left
+corner. The tags which are applied to one or more windows are indicated with an
+empty square in the top left corner.
.P
dwm draws a small border around windows to indicate the focus state.
.SH OPTIONS
@@ -43,17 +43,7 @@ is read and displayed in the status text area. It can be set with the
command.
.TP
.B Button1
-click on a tag label to display all windows with that tag, click on the layout
-label toggles between tiled and floating layout.
-.TP
-.B Button3
-click on a tag label adds/removes all windows with that tag to/from the view.
-.TP
-.B Mod1\-Button1
-click on a tag label applies that tag to the focused window.
-.TP
-.B Mod1\-Button3
-click on a tag label adds/removes that tag to/from the focused window.
+click on a tag label to display all windows with that tag.
.SS Keyboard commands
.TP
.B Mod1\-Shift\-Return
@@ -77,9 +67,6 @@ Send focused window to previous screen, if any.
.B Mod1\-Shift\-.
Send focused window to next screen, if any.
.TP
-.B Mod1\-b
-Toggles bar on and off.
-.TP
.B Mod1\-t
Sets tiled layout.
.TP
@@ -98,18 +85,6 @@ Focus next window.
.B Mod1\-k
Focus previous window.
.TP
-.B Mod1\-i
-Increase number of windows in master area.
-.TP
-.B Mod1\-d
-Decrease number of windows in master area.
-.TP
-.B Mod1\-l
-Increase master area size.
-.TP
-.B Mod1\-h
-Decrease master area size.
-.TP
.B Mod1\-Return
Zooms/cycles focused window to/from master area (tiled layouts only).
.TP
@@ -125,21 +100,9 @@ Toggles to the previously selected tags.
.B Mod1\-Shift\-[1..n]
Apply nth tag to focused window.
.TP
-.B Mod1\-Shift\-0
-Apply all tags to focused window.
-.TP
-.B Mod1\-Control\-Shift\-[1..n]
-Add/remove nth tag to/from focused window.
-.TP
.B Mod1\-[1..n]
View all windows with nth tag.
.TP
-.B Mod1\-0
-View all windows with any tag.
-.TP
-.B Mod1\-Control\-[1..n]
-Add/remove all windows with nth tag to/from the view.
-.TP
.B Mod1\-Shift\-q
Quit dwm.
.SS Mouse commands
diff --git a/dwm.c b/dwm.c
index e5efb6a..8f63c64 100644
--- a/dwm.c
+++ b/dwm.c
@@ -175,7 +175,6 @@ static long getstate(Window w);
static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
static void grabbuttons(Client *c, int focused);
static void grabkeys(void);
-static void incnmaster(const Arg *arg);
static void keypress(XEvent *e);
static void killclient(const Arg *arg);
static void manage(Window w, XWindowAttributes *wa);
@@ -201,7 +200,6 @@ static void setclientstate(Client *c, long state);
static void setfocus(Client *c);
static void setfullscreen(Client *c, int fullscreen);
static void setlayout(const Arg *arg);
-static void setmfact(const Arg *arg);
static void setup(void);
static void seturgent(Client *c, int urg);
static void showhide(Client *c);
@@ -210,10 +208,7 @@ static void spawn(const Arg *arg);
static void tag(const Arg *arg);
static void tagmon(const Arg *arg);
static void tile(Monitor *m);
-static void togglebar(const Arg *arg);
static void togglefloating(const Arg *arg);
-static void toggletag(const Arg *arg);
-static void toggleview(const Arg *arg);
static void unfocus(Client *c, int setfocus);
static void unmanage(Client *c, int destroyed);
static void unmapnotify(XEvent *e);
@@ -968,13 +963,6 @@ grabkeys(void)
}
}
-void
-incnmaster(const Arg *arg)
-{
- selmon->nmaster = MAX(selmon->nmaster + arg->i, 0);
- arrange(selmon);
-}
-
#ifdef XINERAMA
static int
isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info)
@@ -1512,21 +1500,6 @@ setlayout(const Arg *arg)
drawbar(selmon);
}
-/* arg > 1.0 will set mfact absolutely */
-void
-setmfact(const Arg *arg)
-{
- float f;
-
- if (!arg || !selmon->lt[selmon->sellt]->arrange)
- return;
- f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
- if (f < 0.05 || f > 0.95)
- return;
- selmon->mfact = f;
- arrange(selmon);
-}
-
void
setup(void)
{
@@ -1694,15 +1667,6 @@ tile(Monitor *m)
}
}
-void
-togglebar(const Arg *arg)
-{
- selmon->showbar = !selmon->showbar;
- updatebarpos(selmon);
- XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
- arrange(selmon);
-}
-
void
togglefloating(const Arg *arg)
{
@@ -1717,33 +1681,6 @@ togglefloating(const Arg *arg)
arrange(selmon);
}
-void
-toggletag(const Arg *arg)
-{
- unsigned int newtags;
-
- if (!selmon->sel)
- return;
- newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
- if (newtags) {
- selmon->sel->tags = newtags;
- focus(NULL);
- arrange(selmon);
- }
-}
-
-void
-toggleview(const Arg *arg)
-{
- unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
-
- if (newtagset) {
- selmon->tagset[selmon->seltags] = newtagset;
- focus(NULL);
- arrange(selmon);
- }
-}
-
void
unfocus(Client *c, int setfocus)
{

View File

@ -1,8 +1,6 @@
if ! pgrep -u "$USER" ssh-agent > /dev/null; then export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
ssh-agent > "$XDG_RUNTIME_DIR/ssh-agent.env" gpgconf --launch gpg-agent
fi gpg-connect-agent updatestartuptty /bye
. "$XDG_RUNTIME_DIR/ssh-agent.env"
[ "$XDG_VTNR" = 1 ] && { [ "$XDG_VTNR" = 1 ] && {
GUILOG="$HOME/.local/share/gui.log" GUILOG="$HOME/.local/share/gui.log"
@ -12,14 +10,6 @@ fi
export XDG_CURRENT_DESKTOP=Unity export XDG_CURRENT_DESKTOP=Unity
exec startx > "$GUILOG" 2>&1 exec startx > "$GUILOG" 2>&1
#export SDL_VIDEODRIVER=wayland \
# _JAVA_AWT_WM_NONREPARENTING=1 \
# QT_QPA_PLATFORM=wayland \
# XDG_CURRENT_DESKTOP=sway \
# XDG_SESSION_DESKTOP=sway \
# MOZ_ENABLE_WAYLAND=1
#exec sway > "$GUILOG" 2>&1
} }
# vim: ft=zsh # vim: ft=zsh

View File

@ -23,12 +23,15 @@ setopt COMPLETE_IN_WORD
unsetopt FLOW_CONTROL unsetopt FLOW_CONTROL
setopt AUTO_CD setopt AUTO_CD
setopt RM_STAR_SILENT
setopt HIST_IGNORE_DUPS setopt HIST_IGNORE_DUPS
setopt HIST_IGNORE_SPACE setopt HIST_IGNORE_SPACE
setopt SHARE_HISTORY setopt SHARE_HISTORY
setopt EXTENDED_HISTORY setopt EXTENDED_HISTORY
setopt EXTENDED_GLOB
export PAGER=less export PAGER=less
export LESS_TERMCAP_mb="${fg_bold[red]}" export LESS_TERMCAP_mb="${fg_bold[red]}"
export LESS_TERMCAP_md="${fg_bold[red]}" export LESS_TERMCAP_md="${fg_bold[red]}"

View File

@ -1,3 +1,5 @@
alias docker='sudo docker'
alias docker-compose='sudo docker-compose'
alias dk='docker' alias dk='docker'
## container ## container

View File

@ -40,19 +40,18 @@ alias -g ...='../..' \
alias cp="cp -vi" \ alias cp="cp -vi" \
mv="mv -vi" \ mv="mv -vi" \
rm="rm -v" \ rm="rm -i" \
mkdir="mkdir -v" \ mkdir="mkdir -v" \
rsync="rsync -P" rsync="rsync -P"
alias ls='ls --color=tty' \ alias ls='ls --color=tty' \
l='ls -lah' \
ll='ls -lh' \ ll='ls -lh' \
la='ls -lAh' l='ll -a' \
la='ll -A'
alias diff='diff --color' alias diff='diff --color'
alias grep="grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox}" \ alias grep="grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox}" \
egrep="grep -E --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox}" \ egrep="grep -E"
fgrep="grep -F --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn,.idea,.tox}"
# vim: ft=zsh # vim: ft=zsh

8503
.config/zsh/completions/_git Normal file

File diff suppressed because it is too large Load Diff

@ -1 +1 @@
Subproject commit 174ce9bf0166c657404a21f4dc9608da935f7325 Subproject commit cc6ed4be416b70fe4e3f97d17061c751abaca04f

2
.gnupg/gpg-agent.conf Normal file
View File

@ -0,0 +1,2 @@
enable-ssh-support
pinentry-program /usr/bin/pinentry-tty

1
.gnupg/sshcontrol Normal file
View File

@ -0,0 +1 @@
8B64484EC42A914650DD8960BF3D9BBD9FE71327

View File

@ -0,0 +1,4 @@
#unified-extensions-button, #unified-extensions-button > .toolbarbutton-icon{
width: 0px !important;
padding: 0px !important;
}

View File

@ -0,0 +1,37 @@
user_pref("app.shield.optoutstudies.enabled", true);
user_pref("browser.aboutConfig.showWarning", false);
user_pref("browser.contentblocking.category", "strict");
user_pref("browser.download.useDownloadDir", false);
user_pref("browser.formfill.enable", false);
user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
user_pref("browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.searchEngines", "");
user_pref("browser.newtabpage.enabled", false);
user_pref("browser.preferences.moreFromMozilla", false);
user_pref("browser.privatebrowsing.vpnpromourl", "");
user_pref("browser.startup.homepage", "chrome://browser/content/blanktab.html");
user_pref("browser.tabs.tabmanager.enabled", false);
user_pref("browser.topsites.contile.cachedTiles", "");
user_pref("datareporting.healthreport.uploadEnabled", false);
user_pref("datareporting.policy.dataSubmissionEnabled", false);
user_pref("dom.security.https_only_mode", true);
user_pref("extensions.formautofill.addresses.enabled", false);
user_pref("extensions.formautofill.creditCards.enabled", false);
user_pref("extensions.pocket.enabled", false);
user_pref("findbar.highlightAll", true);
user_pref("identity.fxaccounts.enabled", false);
user_pref("media.videocontrols.picture-in-picture.video-toggle.enabled", false);
user_pref("network.proxy.socks_remote_dns", true);
user_pref("signon.rememberSignons", false);
user_pref("startup.homepage_override_url", "");
user_pref("startup.homepage_welcome_url", "");
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
user_pref("toolkit.telemetry.archive.enabled", false);
// user preferences
user_pref("browser.startup.page", 3);
user_pref("browser.tabs.inTitlebar", 0);
user_pref("browser.toolbars.bookmarks.visibility", "newtab");
user_pref("browser.uiCustomization.state", "{\"placements\":{\"widget-overflow-fixed-list\":[],\"unified-extensions-area\":[],\"nav-bar\":[\"back-button\",\"forward-button\",\"stop-reload-button\",\"urlbar-container\",\"downloads-button\",\"fxa-toolbar-menu-button\",\"unified-extensions-button\",\"ublock0_raymondhill_net-browser-action\"],\"toolbar-menubar\":[\"menubar-items\"],\"TabsToolbar\":[\"tabbrowser-tabs\",\"alltabs-button\"],\"PersonalToolbar\":[\"personal-bookmarks\"]},\"currentVersion\":20,\"newElementCount\":3}");
user_pref("browser.zoom.siteSpecific", false);
user_pref("media.autoplay.default", 5);

View File

@ -0,0 +1,11 @@
[General]
Version=2
[Install4F96D1932A9F858E]
Default=ange
Locked=1
[Profile0]
Name=ange
IsRelative=1
Path=ange

View File

@ -8,7 +8,7 @@ xss-lock -n screensaver -- lock &
/usr/libexec/polkit-gnome-authentication-agent-1 & # fedora /usr/libexec/polkit-gnome-authentication-agent-1 & # fedora
picom & picom &
gammastep 2> /dev/null & gammastep 2> /dev/null &
sbar & sbar.py &
"$HOME/keepass/keepassxc" & "$HOME/keepass/keepassxc" &
exec dbus-launch .config/suckless/dwm-6.4/dwm exec dbus-launch dwm

10
.zshenv
View File

@ -14,7 +14,15 @@ export ZSH_CUSTOM="$ZDOTDIR/custom"
export ZLE_RPROMPT_INDENT=0 export ZLE_RPROMPT_INDENT=0
export LESSHISTFILE='-' export LESSHISTFILE='-'
path=("$HOME/bin" "$HOME/.local/bin" "$XDG_DATA_HOME/flatpak/exports/bin" /var/lib/flatpak/exports/bin $path) export PYTHONPYCACHEPREFIX="$XDG_CACHE_HOME/python"
path=(
"$HOME/bin"
"$HOME/.local/bin"
"$XDG_DATA_HOME/flatpak/exports/bin"
/var/lib/flatpak/exports/bin
$path
)
export BROWSER=firefox export BROWSER=firefox
export EDITOR=nvim export EDITOR=nvim

View File

@ -1 +0,0 @@
Downloads

View File

@ -1,9 +1,9 @@
# dotfiles # dotfiles
See (https://git.maby.dev/ange/archinstall.git) for installation
To clone the repo : To clone the repo :
```console ```console
pacman -Syu --needed zsh sway firefox alacritty neovim
git clone --bare https://git.maby.dev/ange/.dotfiles.git ~/.dotfiles git clone --bare https://git.maby.dev/ange/.dotfiles.git ~/.dotfiles
alias config='git --git-dir=$HOME/.dotfiles --work-tree=$HOME' alias config='git --git-dir=$HOME/.dotfiles --work-tree=$HOME'

View File

@ -1,6 +1,6 @@
#!/bin/bash -e #!/bin/bash -e
CRI=(podman) CRI=(sudo docker)
REPORTS="$(mktemp -d)" REPORTS="$(mktemp -d)"
LOGS="$REPORTS/coding-style-reports.log" LOGS="$REPORTS/coding-style-reports.log"

View File

@ -1,37 +1,50 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import http.client as http
import json import json
import http.client as http # curl -sS https://api.coingecko.com/api/v3/coins/list
# curl https://api.coingecko.com/api/v3/coins/list
COINS = [ COINS = [
# [id, symbol] # [id, symbol]
["bitcoin", "BTC"], ["bitcoin", "BTC"],
["monero", "XMR"], ["ordinals", "ORDI"],
] ]
CURRENCY = "eur" CURRENCY = "usd"
FORMAT = "{coin}={price:.0f}" FORMAT = "{coin}=${price:.0f}"
def main(): def get_btc_fees() -> str:
coin_ids = ",".join([coin[0] for coin in COINS]) url = "mempool.space"
url = "api.coingecko.com" path = "/api/v1/fees/mempool-blocks"
path = f"/api/v3/simple/price?ids={coin_ids}&vs_currencies={CURRENCY}"
client = http.HTTPSConnection(url) client = http.HTTPSConnection(url)
client.request("GET", path) client.request("GET", path)
# {'bitcoin': {'usd': 69420}} # https://mempool.space/docs/api/rest#get-mempool-blocks-fees
response = json.loads(client.getresponse().read())
return f"{int(response[0]['medianFee'])} sat/vB"
def get_coins_values() -> str:
ids = ",".join([coin[0] for coin in COINS])
url = "api.coingecko.com"
path = f"/api/v3/simple/price?ids={ids}&vs_currencies={CURRENCY}"
client = http.HTTPSConnection(url)
client.request("GET", path)
# https://www.coingecko.com/api/documentation
prices = json.loads(client.getresponse().read()) prices = json.loads(client.getresponse().read())
print( return " ".join(
*[
FORMAT.format(coin=coin[1], price=prices[coin[0]][CURRENCY]) FORMAT.format(coin=coin[1], price=prices[coin[0]][CURRENCY])
for coin in COINS for coin in COINS
]
) )
def main():
print(f"{get_btc_fees()} {get_coins_values()}")
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -1,5 +1,5 @@
#!/bin/bash -e #!/bin/bash -e
CRI=(podman) CRI=(sudo docker)
"${CRI[@]}" run --rm -it -v "$PWD:/mnt/" -w /mnt/ docker.io/debian:12-slim "${CRI[@]}" run --rm -it -v "$PWD:/mnt/" -w /mnt/ docker.io/debian:12-slim

View File

@ -1,6 +1,6 @@
#!/bin/bash -e #!/bin/bash -e
CRI=(podman) CRI=(sudo docker)
CRI_OPT=() CRI_OPT=()
if [ -z "$WAYLAND_DISPLAY" ]; then if [ -z "$WAYLAND_DISPLAY" ]; then

View File

@ -5,22 +5,24 @@ echo "$$" > "$HOME/.cache/pidofbar"
# MODULES # MODULES
update_crypto() { update_crypto() {
crypto="$(crypto)" local c="$(crypto)"
[ -n c ] && crypto="$c |"
} }
update_cpu() { update_cpu() {
cpu=" $(grep -o "^[^ ]*" /proc/loadavg)" cpu=" $(grep -o "^[^ ]*" /proc/loadavg) |"
} }
update_memory() { update_memory() {
memory=" $(free -h | sed -n '2s/\([^ ]* *\)\{2\}\([^ ]*\).*/\2/p')" memory=" $(free -h | sed -n '2s/\([^ ]* *\)\{2\}\([^ ]*\).*/\2/p') |"
} }
update_bat() { update_bat() {
local dir; dir="$(echo /sys/class/power_supply/BAT*/ | sort -n | tail -n1)" local dir; dir="$(echo /sys/class/power_supply/BAT*/ | sort -n | tail -n1)"
bat="$(grep -q Charging "$dir/status" && printf '' || printf '')" bat="$(grep -q Charging "$dir/status" && printf '' || printf '')"
bat="$bat $(cat "$dir/capacity")%" bat="$bat $(cat "$dir/capacity")% |"
} }
update_vol() { update_vol() {
@ -31,11 +33,12 @@ update_vol() {
else else
vol=" $((10#$(tr -dc '0-9' <<< "$v")))" vol=" $((10#$(tr -dc '0-9' <<< "$v")))"
fi fi
vol="$vol |"
} }
update_wlp() { update_wlp() {
local sig; sig="$(grep wlp /proc/net/wireless | awk '{print $3 * 100}')" local sig; sig="$(grep wlp /proc/net/wireless | awk '{print $3 * 100}')"
local ssid; ssid="$(nmcli -t -f name,device connection show --active | grep wlp | cut -d: -f1)" local ssid; ssid="$(nmcli device wifi show-password | grep SSID | sed 's/SSID: //')"
[ -z "$ssid" ] && wlp='⚠' && return [ -z "$ssid" ] && wlp='⚠' && return
[ -z "$sig" ] && sig=0 [ -z "$sig" ] && sig=0
@ -46,19 +49,13 @@ update_wlp() {
{ [ "$sig" -gt 1650 ] && wlp="▂▄__ $ssid"; } || { [ "$sig" -gt 1650 ] && wlp="▂▄__ $ssid"; } ||
{ [ "$sig" -gt 275 ] && wlp="▂___ $ssid"; } || { [ "$sig" -gt 275 ] && wlp="▂___ $ssid"; } ||
{ wlp="____ $ssid"; } { wlp="____ $ssid"; }
wlp="$wlp |"
} }
update_time() { update_time() {
time="$(date "+%a %m/%d %R")" time="$(date "+%a %m/%d %R")"
} }
# For calcurse users, refer https://github.com/pystardust/automeet
#update_event () {
# event="$(calcurse -n | sed 1d | \
# sed -E "s_^ *\[(.*):(.*)\] ([^\t]*)\t?.*_[\1h \2m->\3]_")"
# [ "[]" = "$event" ] && event=""
#}
# modules that don't update on their own need to be run at the start for getting their initial value # modules that don't update on their own need to be run at the start for getting their initial value
while [ -z "$(wpctl get-volume '@DEFAULT_AUDIO_SINK@' 2> /dev/null)" ]; do while [ -z "$(wpctl get-volume '@DEFAULT_AUDIO_SINK@' 2> /dev/null)" ]; do
sleep 1 sleep 1
@ -70,7 +67,7 @@ reload_bar() {
} }
display() { display() {
"${DISPLAYCMD[@]}" "$crypto | $cpu | $memory | $vol | $wlp | $bat | $time" "${DISPLAYCMD[@]}" "$crypto $cpu $memory $vol $wlp $bat $time"
} }
# SIGNALING # SIGNALING
@ -88,10 +85,12 @@ else
DISPLAYCMD=(xsetroot -name) DISPLAYCMD=(xsetroot -name)
fi fi
# crypto & > /tmp
# sleep 5 && cat /tmp
sec=0 sec=0
while true; do while true; do
[ "$((sec % 300))" = 0 ] && update_crypto [ "$((sec % 300))" = 0 ] && update_crypto
[ "$((sec % 5 ))" = 0 ] && { [ "$((sec % 10))" = 0 ] && {
update_time update_time
update_cpu update_cpu
update_memory update_memory
@ -100,6 +99,6 @@ while true; do
display display
} }
sleep 1 & wait sleep "$(awk "BEGIN {s=$(date '+%S.%N'); print 10 - s % 10}")" & wait
sec="$((sec + 1))" sec="$((sec + 10))"
done done

167
bin/sbar.py Executable file
View File

@ -0,0 +1,167 @@
#!/usr/bin/env python3
import runpy
from datetime import datetime
from os import getenv, getpid
from signal import signal
from subprocess import CalledProcessError, check_output, run
from time import sleep, time
crypto = runpy.run_path(getenv("HOME", "") + "/bin/crypto")
def get_stdout(command: list[str]) -> str:
try:
return check_output(command).decode().rstrip()
except CalledProcessError:
return ""
def update_crypto():
try:
fees = crypto["get_btc_fees"]()
coins = crypto["get_coins_values"]()
except:
OUT["cryto"] = ""
return
OUT["crypto"] = f"{fees} {coins}"
def update_cpu():
loadavg: str
with open("/proc/loadavg") as f:
loadavg = f.read().split()[0]
OUT["cpu"] = f"{loadavg}"
def update_memory():
kbtot: int
kbavail: int
gbused: float
lines: list[str]
with open("/proc/meminfo") as f:
lines = f.read().split("\n")
kbtot = int(lines[0].split()[1])
kbavail = int(lines[2].split()[1])
gbused = (kbtot - kbavail) / 1024 / 1024
OUT["ram"] = f"{gbused:.1f}G"
def update_bat():
dir = "/sys/class/power_supply/BAT0"
status: str
capacity: str
with open(dir + "/status") as f:
status = "" if f.read() == "Charging\n" else ""
with open(dir + "/capacity") as f:
capacity = f.read().rstrip()
OUT["bat"] = f"{status} {capacity}%"
def update_vol():
vol = get_stdout(["wpctl", "get-volume", "@DEFAULT_AUDIO_SINK@"])
while not vol:
vol = get_stdout(["wpctl", "get-volume", "@DEFAULT_AUDIO_SINK@"])
sleep(1)
if "MUTED" in vol:
OUT["vol"] = "🔇"
else:
OUT["vol"] = f"{int(float(vol.split()[1]) * 100)}"
def update_wlp():
sig = 0
ssid = ""
lines: list[str]
with open("/proc/net/wireless") as f:
lines = f.read().split("\n")
for l in lines:
if l.startswith("wlp"):
sig = float(l.split()[2])
break
lines = get_stdout(["nmcli", "device", "wifi", "show-password"]).split("\n")
for l in lines:
if l.startswith("SSID: "):
ssid = l[6:]
break
# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/d9b06a95/src/libnmc-base/nm-client-utils.c#L628
if sig > 56: # 70 is max
OUT["wlp"] = f"▂▄▆█ {ssid}"
elif sig > 38:
OUT["wlp"] = f"▂▄▆_ {ssid}"
elif sig > 21:
OUT["wlp"] = f"▂▄__ {ssid}"
elif sig > 3:
OUT["wlp"] = f"▂___ {ssid}"
else:
OUT["wlp"] = f"____ {ssid}"
def update_time():
OUT["time"] = datetime.now().strftime("%a %m/%d %R")
def display():
s = f"{OUT.get('crypto')} | {OUT.get('cpu')} | {OUT.get('ram')} | {OUT.get('vol')} | {OUT.get('wlp')} | {OUT.get('bat')} | {OUT.get('time')}"
if getenv("XDG_SESSION_TYPE") == "wayland":
print(s)
else:
run(["xsetroot", "-name", s])
def handler(signum: int, _):
if signum == 34:
update_vol()
# elif signum == 35:
# pass
display()
def setup_sig():
cache_dir = getenv("XDG_CACHE_HOME") or f"{getenv('HOME')}/.cache"
with open(cache_dir + "/pidofbar", "w") as f:
f.write(str(getpid()))
# kill -m "$(cat ~/.cache/pidofbar)"
signal(34, handler)
OUT = dict()
def main():
sec = 0
setup_sig()
# modules that don't update on their own need to be run at the start for
# getting their initial value
update_vol()
# TODO async?
while True:
if not sec % 300:
update_crypto()
if not sec % 10:
update_time()
update_cpu()
update_memory()
update_bat()
update_wlp()
display()
sec += 10
sleep(10 - time() % 10)
if __name__ == "__main__":
main()

177
bin/sbar_async.py Executable file
View File

@ -0,0 +1,177 @@
#!/usr/bin/env python3
import asyncio
import runpy
from datetime import datetime
from os import getenv, getpid
from signal import signal
from subprocess import CalledProcessError, check_output, run
from time import sleep, time
def get_stdout(command: list[str]) -> str:
try:
return check_output(command).decode().rstrip()
except CalledProcessError:
return ""
async def update_crypto():
crypto = runpy.run_path(getenv("HOME", "") + "/bin/crypto")
try:
fees = crypto["get_btc_fees"]()
coins = crypto["get_coins_values"]()
except:
return ""
return f"{fees} {coins}"
async def update_cpu():
loadavg: str
with open("/proc/loadavg") as f:
loadavg = f.read().split()[0]
return f"{loadavg}"
async def update_memory():
kbtot: int
kbavail: int
gbused: float
lines: list[str]
with open("/proc/meminfo") as f:
lines = f.read().split("\n")
kbtot = int(lines[0].split()[1])
kbavail = int(lines[2].split()[1])
gbused = (kbtot - kbavail) / 1024 / 1024
return f"{gbused:.1f}G"
async def update_bat():
dir = "/sys/class/power_supply/BAT0"
status: str
capacity: str
with open(dir + "/status") as f:
status = "" if f.read() == "Charging\n" else ""
with open(dir + "/capacity") as f:
capacity = f.read().rstrip()
return f"{status} {capacity}%"
async def update_vol():
vol = get_stdout(["wpctl", "get-volume", "@DEFAULT_AUDIO_SINK@"])
while not vol:
vol = get_stdout(["wpctl", "get-volume", "@DEFAULT_AUDIO_SINK@"])
sleep(1)
if "MUTED" in vol:
return "🔇"
return f"{int(float(vol.split()[1]) * 100)}"
async def update_wlp():
sig = 0
ssid = ""
lines: list[str]
with open("/proc/net/wireless") as f:
lines = f.read().split("\n")
for l in lines:
if l.startswith("wlp"):
sig = float(l.split()[2])
break
lines = get_stdout(
[
"nmcli",
"-t",
"-f",
"device,name",
"connection",
"show",
"--active",
]
).split("\n")
for l in lines:
if l.startswith("wlp"):
ssid = l.split(":")[1]
# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/d9b06a95/src/libnmc-base/nm-client-utils.c#L628
if sig > 56: # 70 is max
return f"▂▄▆█ {ssid}"
if sig > 38:
return f"▂▄▆_ {ssid}"
if sig > 21:
return f"▂▄__ {ssid}"
if sig > 3:
return f"▂___ {ssid}"
return f"____ {ssid}"
async def update_time():
return datetime.now().strftime("%a %m/%d %R")
async def display(*args):
res = []
for arg in args:
try:
res += arg.result()
except:
res += ""
print(res)
s = " | ".join(res)
if getenv("XDG_SESSION_TYPE") == "wayland":
print(s)
else:
run(["xsetroot", "-name", s])
def handler(signum: int, _):
if signum == 34:
asyncio.run(update_vol())
# elif signum == 35:
# pass
asyncio.run(display())
def setup_sig():
cache_dir = getenv("XDG_CACHE_HOME") or f"{getenv('HOME')}/.cache"
with open(cache_dir + "/pidofbar", "w") as f:
f.write(str(getpid()))
# kill -m "$(cat ~/.cache/pidofbar)"
signal(34, handler)
async def main():
sec = 0
crypto = asyncio.create_task(update_crypto())
date = asyncio.create_task(update_time())
cpu = asyncio.create_task(update_cpu())
mem = asyncio.create_task(update_memory())
vol = asyncio.create_task(update_vol())
bat = asyncio.create_task(update_bat())
wlp = asyncio.create_task(update_wlp())
setup_sig()
while True:
if not sec % 300:
crypto = asyncio.create_task(update_crypto())
if not sec % 10:
date = asyncio.create_task(update_time())
cpu = asyncio.create_task(update_cpu())
mem = asyncio.create_task(update_memory())
bat = asyncio.create_task(update_bat())
wlp = asyncio.create_task(update_wlp())
await display(crypto, cpu, mem, vol, wlp, bat, date)
sec += 10
sleep(10 - time() % 10)
if __name__ == "__main__":
asyncio.run(main())

View File

@ -40,4 +40,4 @@ else
fi fi
# update sbar # update sbar
kill -35 "$(cat "$HOME/.cache/pidofbar")" kill -34 "$(cat "$HOME/.cache/pidofbar")"

View File

@ -47,7 +47,6 @@ function connect() {
return 1 return 1
;; ;;
esac esac
kill -36 "$(cat "$HOME/.cache/pidofbar")"
exit exit
} }