Compare commits

..

10 commits

166 changed files with 2550 additions and 6097 deletions

View file

@ -122,7 +122,6 @@ umount /mnt
```bash
mount -o subvol=root,noatime,lazytime,commit=120,compress=zstd:1 /dev/mapper/cryptfs /mnt
mount --mkdir -o subvol=snapshots,noatime,lazytime,commit=120,compress=zstd:1 /dev/mapper/cryptfs /mnt/snapshots
mount --mkdir -o subvol=home,noatime,lazytime,commit=120,compress=zstd:5 /dev/mapper/cryptfs /mnt/data
mount --mkdir -o noatime,lazytime,commit=120,compress=zstd:1 /dev/mapper/cryptfs /mnt/.btrfs
mount --mkdir -o subvol=swap /dev/mapper/cryptfs /mnt/swap
@ -166,10 +165,10 @@ cd ~/dots
./install_root.sh
```
Enter a fish shell for a better experience
Enter the ZSH shell for a better experience
```bash
fish
zsh
```
Create non-privileged user
@ -181,7 +180,6 @@ install -o itsdrike -g itsdrike -d /home/itsdrike
mv ~/dots /home/itsdrike
chown -R itsdrike:itsdrike /home/itsdrike/dots
passwd itsdrike
chsh -s /usr/bin/zsh itsdrike
su -l itsdrike
fish
```
@ -200,6 +198,13 @@ exit
su -l itsdrike
```
Setup neovim
```bash
git clone https://github.com/ItsDrike/lazyvim ~/.config/nvim
nvim --headless "+Lazy! sync" +qa
```
## Fstab adjustments
Finally, we'll want to make some slight modifications to `/etc/fstab` file, so
@ -226,7 +231,6 @@ they're way too permissive. This is how I like to structure my fstab:
# /dev/mapper/cryptfs LABEL=FS UUID=bffc7a62-0c7e-4aa9-b10e-fd68bac477e0
/dev/mapper/cryptfs / btrfs rw,noatime,lazytime,compress=zstd:1,ssd,space_cache=v2,commit=120,discard=async,subvol=/root 0 1
/dev/mapper/cryptfs /data btrfs rw,noatime,lazytime,compress=zstd:5,ssd,space_cache=v2,commit=120,discard=async,subvol=/data 0 2
/dev/mapper/cryptfs /snapshots btrfs rw,noatime,lazytime,compress=zstd:1,ssd,space_cache=v2,commit=120,discard=async,subvol=/snapshots 0 2
/dev/mapper/cryptfs /swap btrfs rw,subvol=/swap 0 0
/dev/mapper/cryptfs /.btrfs btrfs rw,noatime,lazytime,compress=zstd:1,ssd,space_cache=v2,commit=120,discard=async 0 2

View file

@ -104,6 +104,13 @@ script_name="$0"
shell="$(getent passwd "$USER" | awk -F: '{print $NF}')"
command=("$@")
# This syntax might be a bit confusing at first. It works as follows:
# 1. Replace this wrapper process with the user's login shell (through exec)
# 2. The shell is told to run 'exec $@' replacing itself with another process
# 3. The $@ in the exec above referrs to the arguments passed the shell (after -c '...')
# 4. "$script_name" is passed to the shell as $0 (process name), not included in $@
# 5. The ${command[@]} matches the $@ which this script was called with
# -> The command passed into this script as args is ran within the user's shell
exec "$shell" -c 'exec "$@"' "$script_name" "${command[@]}"
```
@ -150,3 +157,5 @@ command = "tuigreet --time --remember --remember-user-session --asterisks --gree
# in the `video` group.
user = "greeter"
```
Do note that if you're using UWSM, you'll want to run `uwsm start hyprland.desktop` instead of directly running `Hyprland`.

View file

@ -1,815 +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. 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: 6
y: 6
# 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.9
# 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: JetBrains Mono
#family: Comic Mono
#family: Source Code Pro
# The `style` can be specified to pick a specific face.
style: Medium
# 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
#family: Source Code Pro
# 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
#family: Source Code Pro
# 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
# 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: "#191919"
foreground: "#d8dee9"
#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 and 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 and 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 and CellBackground, which reference the
# affected cell, or hexadecimal colors like #ff00ff.
#matches:
# foreground: '#000000'
# background: '#ffffff'
#focused_match:
# foreground: CellBackground
# background: CellForeground
#bar:
# background: '#c5c8c6'
# foreground: '#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 and CellBackground, which reference the
# affected cell, or hexadecimal colors like #ff00ff.
#selection:
# text: CellBackground
# background: CellForeground
# Normal colors
normal:
#black: '#191919'
black: "#46494d"
red: "#b02626"
green: "#40a62f"
yellow: "#f2e635"
blue: "#314ad0"
magenta: "#b30ad0"
cyan: "#32d0fc"
white: "#acadb1"
# Bright colors
bright:
black: "#666666"
red: "#ce2727"
green: "#47c930"
yellow: "#fff138"
blue: "#2e4bea"
magenta: "#cc15ed"
cyan: "#54d9ff"
white: "#dbdbdb"
# Dim colors
dim:
black: "#676f78"
red: "#b55454"
green: "#78a670"
yellow: "#faf380"
blue: "#707fd0"
magenta: "#c583d0"
cyan: "#8adaf1"
white: "#e0e3e7"
# 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
#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
#url:
# URL launcher
#
# This program is executed when clicking on a text which is recognized as a
# URL. The URL is always added to the command as the last parameter.
#
# When set to `launcher: None`, URL launching will be disabled completely.
#
# Default:
# - (macOS) open
# - (Linux/BSD) xdg-open
# - (Windows) explorer
#launcher:
# program: xdg-open
# args: []
# URL modifiers
#
# These are the modifiers that need to be held down for opening URLs when
# clicking on them. The available modifiers are documented in the key
# binding section.
#modifiers: None
# 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
# Open URLs at the cursor location with the launcher configured in
# `url.launcher`.
# - 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: Vi|~Search, action: ScrollToBottom }
#- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode }
#- { key: Escape, mode: Vi|~Search, action: ClearSelection }
#- { key: I, mode: Vi|~Search, action: ScrollToBottom }
#- { key: I, mode: Vi|~Search, action: ToggleViMode }
#- { 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: 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

View file

@ -0,0 +1 @@
--ozone-platform-hint=auto

View file

@ -0,0 +1 @@
--ozone-platform-hint=auto

View file

@ -1,500 +0,0 @@
[global]
### Display ###
# Which monitor should the notifications be shown on
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = mouse
### Geometry ###
# Dynamic width from 0 to 300
# width = (0, 300)
# constant width of 300
# width = 300
width = 270
# The dynamic height of a single notification, excluding the frame.
height = (0, 300)
# Position the notification in the top right corner
origin = top-right
# Offset from the origin
offset = 30x30
# Scale factor. It is auto-detected if value is 0.
scale = 0
# Maximum number of notifications (0 means no limit)
notification_limit = 10
### Progress bar ###
# Turn on the progress bar. It appears when a progress hint is passed
# with for example dunstify -h int:value:12
progress_bar = true
# Set the progress bar height. This includes the frame, so make sure
# it's at least twice as big as the frame width.
progress_bar_height = 30
# Set the frame width of the progress bar
progress_bar_frame_width = 1
# Set the minimum width for the progress bar
progress_bar_min_width = 150
# Set the maximum width for the progress bar
progress_bar_max_width = 300
# Corner radius for the progress bar. 0 disables rounded corners.
progress_bar_corner_radius = 0
# Define which corners to round when drawing the progress bar. If progress_bar_corner_radius
# is set to 0 this option will be ignored.
progress_bar_corners = all
# Corner radius for the icon image.
icon_corner_radius = 0
# Define which corners to round when drawing the icon image. If icon_corner_radius
# is set to 0 this option will be ignored.
icon_corners = all
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, picom, etc.). (X11 only)
transparency = 20
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
# If gap_size is greater than 0, this setting will be ignored.
separator_height = 2
# Padding between text and separator.
padding = 10
# Horizontal padding
horizontal_padding = 10
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of fram around the notification window.
# Set to 0 to disable.
frame_width = 3
# Defines color of the frame around the notification window
frame_color = "#27292c";
# Size of gap to display between notifications - requires a compositor.
# If value is greater than 0, separator_height will be ignored and a border
# of size frame_width will be drawn around each notification instead.
# Click events on gaps do not currently propagate to applications below.
gap_size = 0
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort type.
# possible values are:
# * id: sort by id
# * urgency_ascending: sort by urgency (low then normal then critical)
# * urgency_descending: sort by urgency (critical then normal then low)
# * update: sort by update (most recent always at the top)
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
idle_threshold = 120
### Text ###
font = JetBrains Mono 11
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "<b>%a - %s</b>\n%b"
# Alignment of the message text.
# Possible values are "left", "center" and "right".
alignment = left
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Wrap longer sentences which don't fit into the horizonal size
# of the noticication. If set to no, longer sententences will be truncated
word_wrap = yes
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Merge multiple notifications with the same content
stack_duplicates = true
# Hide the count of merged notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A)
show_indicators = yes
### Icons ###
# Recursive icon lookup. You can set a single theme, instead of having to
# define all lookup paths.
enable_recursive_icon_lookup = true
# Set icon theme (only used for recursive icon lookup)
# You can also set multiple icon themes, with the leftmost one being used first.
# icon_theme = "Adwaita, breeze"
icon_theme = Papirus-Dark, Adwaita
# Align icons left/right/off
icon_position = left
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 0
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 32
# Paths to default icons (only necessary when not using recursive icon lookup)
#icon_path = /usr/share/icons/hicolor/16x16/status/:/usr/share/icons/hicolor/16x16/devices/:/usr/share/icons/hicolor/16x16/apps/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path
dmenu = /usr/local/bin/dmenu -p dunst:
# Browser for opening urls in content menu
browser = /usr/bin/xdg-open
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 0
# Define which corners to round when drawing the window. If the corner radius
# is set to 0 this option will be ignored.
#
# Comma-separated list of the corners. The accepted corner values are bottom-right,
# bottom-left, top-right, top-left, top, bottom, left, right or all.
corners = all
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Wayland ###
# These settings are Wayland-specific. They have no effect when using X11
# Uncomment this if you want to let notications appear under fullscreen
# applications (default: overlay)
# layer = top
# Set this to true to use X11 output on Wayland.
force_xwayland = false
### Legacy ###
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### Mouse ###
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: Invoke the action determined by the action_name rule. If there is no
# such action, open the context menu.
# * open_url: If the notification has exactly one url, open it. If there are multiple
# ones, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
# * context: Open context menu for the notification.
# * context_all: Open context menu for all notifications.
# These values can be strung together for each mouse event, and
# will be executed in sequence.
mouse_left_click = do_action, open_url, close_current
mouse_middle_click = context
mouse_right_click = close_current
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[urgency_low]
highlight = "#fe6c5a"
background = "#1e2137fa"
frame_color = "#27292c"
foreground = "#ffffff"
timeout = 5
# Icon for notifications with low urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_normal]
highlight = "#fe6c5a"
background = "#141c21fa"
frame_color = "#27292c"
foreground = "#ffffffff"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_critical]
highlight = "#fe6c5a"
background = "#dd130ddd"
frame_color = "#27292c"
foreground = "#ffffffff"
timeout = 0
override_pause_level = 60
icon = arbt
# Icon for notifications with critical urgency, uncomment to enable
#icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# icon_position
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
# hide_text
# override_pause_level
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# You can also allow a notification to appear even when paused. Notification will appear whenever notification's override_pause_level >= dunst's paused level.
# This can be used to set partial pause modes, where more urgent notifications get through, but less urgent stay paused. To do that, you can override the following in the rules:
# override_pause_level = X
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

View file

@ -0,0 +1 @@
--ozone-platform-hint=auto

View file

@ -1,43 +0,0 @@
$rosewater: #f5e0dc;
$flamingo: #f2cdcd;
$pink: #f5c2e7;
$mauve: #cba6f7;
$red: #f38ba8;
$maroon: #eba0ac;
$peach: #fab387;
$yellow: #f9e2af;
$gold: #efcb10;
$green: #a6e3a1;
$lime: #78db32;
$teal: #94e2d5;
$sky: #89dceb;
$sapphire: #74c7ec;
$blue: #89b4fa;
$lavender: #b4befe;
$orange: #ffa500;
$text: #cdd6f4;
$subtext1: #bac2de;
$subtext0: #a6adc8;
$overlay2: #9399b2;
$overlay1: #7f849c;
$overlay0: #6c7086;
$surface2: #585b70;
$surface1: #45475a;
$surface0: #313244;
$base-a: rgba(30, 30, 40, 0.65);
$base: rgba(30, 30, 40, 1);
$base1-a: rgba(49, 50, 68, 0.85);
$base1: rgba(49, 50, 68, 1);
$mantle: #181825;
$crust: #11111b;
$fg: $text;
$bg-a: $base-a;
$bg: $base;
$bg1: $base1;
$bg1-a: $base1-a;
$border: #28283d;
$shadow: $crust;

View file

@ -1,55 +0,0 @@
@keyframes blink {
0%{
opacity: 0;
}
50%{
opacity: 0.7;
}
100%{
opacity: 0;
}
}
// .unplugged.low {
// color: #0000ff;
// }
.battery {
.icon, .icon label {
font-family: "Material Symbols Outlined";
.extra, .extra label {
font-family: "Font Awesome 6 Free";
}
}
.critical {
.unplugged {
color: #f00;
.extra { animation: blink 1.2s linear infinite; }
}
.plugged {
.icon { color: $orange }
.extra { color: $green; }
}
}
.normal {
.unplugged {
.icon { color: $orange }
}
.plugged {
.icon { color: $green; }
}
}
.full {
.icon { color: $green; }
.extra { color: $lime; }
}
.extra { margin-right: 5px; }
.icon { margin-right: 5px; }
}

View file

@ -1,3 +0,0 @@
.bitcoin {
.icon { margin-right: 6px; color: $gold; }
}

View file

@ -1,4 +0,0 @@
.clock {
// color: $sapphire;
.icon { margin-right: 6px; color: $sapphire; }
}

View file

@ -1,3 +0,0 @@
.cpu {
.icon { color: $lime; }
}

View file

@ -1,7 +0,0 @@
.gammarelay {
.icon {
color: $peach;
margin-left: 2px;
margin-right: 2px;
}
}

View file

@ -1,3 +0,0 @@
.kernel {
.icon { color: $lavender; }
}

View file

@ -1,3 +0,0 @@
.memory {
.icon { color: $maroon; }
}

View file

@ -1,3 +0,0 @@
.uptime {
.icon { color: $green; }
}

View file

@ -1,9 +0,0 @@
.volume {
.icon { color: $peach; }
.speaker {
.icon {
margin-left: 8px;
margin-right: 5px;
}
}
}

View file

@ -1,4 +0,0 @@
.window_name {
font-family: "Monaspace Krypton";
font-size: 1.4rem;
}

View file

@ -1,29 +0,0 @@
.workspaces {
background-color: $bg1-a;
border-radius: 25px;
.icon,
.icon label {
font-family: "JetBrainsMono Nerd Font", "Material Symbols Outlined";
font-size: 1.2rem;
}
.value {
margin: 0 10px;
}
.focused {
// text-decoration: underline;
// text-decoration-color: red;
// text-decoration-style: double;
color: $fg;
}
.active {
color: #bbb;
}
.inactive {
color: #555;
}
}

View file

@ -1,32 +0,0 @@
.calendar-win {
@include window;
background-color: $bg;
border: 1px solid $border;
color: $fg;
padding: .2em;
}
calendar {
padding: 5px;
:selected {
color: $mauve;
}
.header {
color: $subtext1;
}
.highlight {
color: $maroon;
font-weight: bold;
}
.button {
color: $sapphire;
}
:indeterminate {
color: $overlay0;
}
}

View file

@ -1,46 +0,0 @@
.radio-menu-box {
@include window;
background-color: $bg;
border: 1px solid $border;
color: $text;
font-family: "Jost *", "JetBrains Mono", "Font Awesome 6 Free", sans-serif;
.icon, .icon label {
font-family: "Material Symbols Outlined";
font-size: 1.15rem;
}
.text-row {
margin: 1rem 1.5rem 0;
.title { font-size: 1.2rem; }
}
.element-row {
margin: .5rem .7rem;
label {
font-size: 1rem;
margin: 0 .1rem;
}
}
.element {
@include rounding;
background-color: $surface0;
margin: .3rem;
button {
@include rounding;
padding: .5rem;
label {
font-size: 1.5rem;
}
&:hover {
background-color: $overlay0;
}
}
}
}

View file

@ -1,114 +0,0 @@
@import "css/colors";
@mixin rounding {
border-radius: 16px;
}
@mixin window {
border: 1px solid $border;
box-shadow: 0 2px 3px $shadow;
margin: 5px 5px 10px;
@include rounding;
}
* {
all: unset;
transition: 200ms ease;
}
@import "css/windows/calendar";
@import "css/windows/radio_menu";
@import "css/modules/clock";
@import "css/modules/volume";
@import "css/modules/bitcoin";
@import "css/modules/cpu";
@import "css/modules/memory";
@import "css/modules/uptime";
@import "css/modules/kernel";
@import "css/modules/battery";
@import "css/modules/workspaces";
@import "css/modules/gammarelay";
@import "css/modules/window_name";
.bar {
background-color: $bg-a;
color: $fg;
font-family: "JetBrains Mono";
label {
font-size: 14px;
}
// TODO: Use percentages (for some reason it fails now)
min-width: 1900px;
}
tooltip {
background: $bg;
border: 1px solid $border;
border-radius: 8px;
label {
font-size: 1rem;
}
}
.icon,
.icon label {
font-family: "Font Awesome 6 Free", "Material Symbols Outlined";
}
.module {
margin: 0 5px;
}
.separ {
color: $surface0;
font-size: 1.5rem;
padding-bottom: 2px;
}
scale trough {
background-color: $bg1-a;
border-radius: 24px;
margin: 0 1rem;
min-height: 10px;
min-width: 70px;
}
.tray {
margin-right: 12px;
}
menu {
background: $bg1;
border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
border: 2px solid rgba($crust, 0.5);
padding: 0.5rem 0;
}
menu menu {
border-top-left-radius: 12px;
border-top-right-radius: 12px;
}
menu > menuitem {
padding: 0.4em 1rem;
background: transparent;
transition: 0.2s ease background;
}
menu > menuitem:hover {
background: rgba($overlay1, 0.4);
}
menu > menuitem check:checked ~ label {
color: $bg1-a;
font-weight: 600;
}
menubar > menuitem {
margin-left: 0.6rem;
}

View file

@ -1,94 +0,0 @@
(defvar terminal "kitty -e")
(include "./modules/variables.yuck")
(include "./modules/clock.yuck")
(include "./modules/volume.yuck")
(include "./modules/bitcoin.yuck")
(include "./modules/cpu.yuck")
(include "./modules/memory.yuck")
(include "./modules/uptime.yuck")
; (include "./modules/kernel.yuck")
(include "./modules/battery.yuck")
(include "./modules/window_name.yuck")
(include "./modules/workspaces.yuck")
(include "./modules/gammarelay.yuck")
(include "./windows/calendar.yuck")
(include "./windows/radio-menu.yuck")
(defwidget sep []
(label :class "separ module" :text "|"))
(defwidget left []
(box
:space-evenly false
:halign "start"
(gammarelay_module)
(sep)
(window_name_module)
))
(defwidget right []
(box
:space-evenly false
:halign "end"
; (kernel_module)
; (sep)
(volume_module)
(sep)
(battery_module)
(sep)
(bitcoin_module)
(sep)
(cpu_module)
(sep)
(memory_module)
(sep)
; (uptime_module)
; (sep)
(clock_module)
(sep)
(systray
:pack-direction "left"
:class "module tray"
)
))
(defwidget center []
(box
:space-evenly false
:halign "center"
(workspaces_module)
))
(defwidget bar []
(centerbox
:class "bar"
:orientation "horizontal"
(left)
(center)
(right)))
(defwindow bar0
:monitor 0
:geometry (geometry :x "0%"
:y "0%"
:width: "100%"
:height "32px"
:anchor "top center")
:stacking "fg"
:exclusive true
(bar))
(defwindow bar1
:monitor 1
:geometry (geometry :x "0%"
:y "0%"
:width: "100%"
:height "32px"
:anchor "top center")
:stacking "fg"
:exclusive true
(bar))

View file

@ -1,24 +0,0 @@
(defwidget battery_module []
(eventbox
:class "module battery"
(box
:class {battery.critical ? "critical" : battery.full ? "full" : "normal"}
(box
:space-evenly false
:class {battery.plugged ? "plugged" : "unplugged" }
(box
:class "icon"
:space-evenly false
(label
:class "extra"
:text {battery.extra_icon})
(label
:text {battery.capacity_icon}))
(label
:class "value"
:text "${battery.percent}%"
)
))))

View file

@ -1,14 +0,0 @@
(defwidget bitcoin_module []
(eventbox
:onclick "bitcoin | xargs -I{} ${EWW_CMD} update bitcoin={}"
:class "module bitcoin"
(box
:space-evenly false
(label
:class "icon"
:text "")
(label :text {bitcoin}))
)
)

View file

@ -1,18 +0,0 @@
(defwidget clock_module []
(eventbox
:tooltip {time.day}
:class "module clock"
:onclick "${EWW_CMD} open --toggle calendar"
(box
:space-evenly false
(label
:class "icon"
:text "")
(label
:class "value"
:text "${time.date} ${time.hour}:${time.minute}")
)))

View file

@ -1,15 +0,0 @@
(defwidget cpu_module []
(eventbox
:class "module cpu"
(box
:space-evenly false
(label
:class "icon"
:text " ")
(label
:class "value"
:text "${round(EWW_CPU.avg,2)}%"
)
)))

View file

@ -1,41 +0,0 @@
(defwidget gammarelay_module []
(box
:class "module gammarelay"
(eventbox
:onscroll "scripts/gammarelay temperature scroll {}"
:onclick "scripts/gammarelay temperature set toggle"
:onrightclick "scripts/gammarelay temperature set off"
:tooltip "${temperature} K"
:class "temperature"
(box
(label
:class "icon"
:text "")
))
(eventbox
:onscroll "scripts/gammarelay brightness scroll {}"
:onclick "scripts/gammarelay brightness set toggle"
:onrightclick "scripts/gammarelay brightness set off"
:tooltip "${brightness}%"
:class "brightness"
(box
(label
:class "icon"
:text "")
))
; (eventbox
; :onscroll "scripts/gammarelay gamma scroll {}"
; :onclick "scripts/gammarelay gamma set toggle"
; :onrightclick "scripts/gammarelay gamma set off"
; :tooltip "${gamma}%"
; :class "gamma"
; :valign "top"
; (box
; (label
; :class "icon"
; :text "γ")
; ))
))

View file

@ -1,15 +0,0 @@
(defwidget kernel_module []
(eventbox
:class "module kernel"
(box
:space-evenly false
(label
:class "icon"
:text " ")
(label
:class "value"
:text {kernel}
)
)))

View file

@ -1,15 +0,0 @@
(defwidget memory_module []
(eventbox
:class "module memory"
(box
:space-evenly false
(label
:class "icon"
:text " ")
(label
:class "value"
:text "${round(EWW_RAM.used_mem / 1000000000,1)}G: ${round(EWW_RAM.used_mem_perc,0)}%"
)
)))

View file

@ -1,3 +0,0 @@
(deflisten nightlight
:initial `{"running": false,"temperature": 0}`
`scripts/nightlight --state`)

View file

@ -1,15 +0,0 @@
(defwidget uptime_module []
(eventbox
:class "module uptime"
(box
:space-evenly false
(label
:class "icon"
:text " ")
(label
:class "value"
:text {uptime}
)
)))

View file

@ -1,60 +0,0 @@
(defpoll time
:interval "5s"
:initial '{"date": "01 Jan", "hour": "00", "minute": "00", "day": "Monday"}'
`date +'{"date": "%d %b", "hour": "%H", "minute": "%M", "day": "%A"}'`)
(deflisten volume
:initial '{ "speaker_vol": "100", "speaker_mute": false, "speaker_icon": "", "microphone_mute": false, "microphone_vol": "100", "microphone_icon": "" }'
`scripts/volume loop`)
(deflisten window_name
:initial `{"class":"","name":"","formatted_name":""}`
`scripts/window_name`)
(deflisten workspaces
:initial `[{"id": 1,"name": "N/A","monitor": "N/A","windows": 1,"hasfullscreen": false,"lastwindow": "N/A","lastwindowtitle": "N/A","format_name": "N/A","active": true}]`
`scripts/workspaces --loop`)
(defpoll battery
:interval "1s"
:initial '{"percent":"0","plugged":"false","status":"N/A","capacity_icon":"","extra_icon":"","manufacturer":"N/A","model_name":"N/A","technology":"N/A","energy_now":"0","enerfy_full":"0","enerfy_full_design":"0","cycle_count":"0","critical":"false","full":"false"}'
`scripts/battery`)
(defpoll uptime
:interval "1m"
:initial 'N/A'
`uptime -p | sed \\
-e 's/^up //' \\
-e 's/ years\\?,\\?/y/' \\
-e 's/ months\\?,\\?/m/' \\
-e 's/ weeks\\?,\\?/w/' \\
-e 's/ days\\?,\\?/d/' \\
-e 's/ hours\\?,\\?/h/' \\
-e 's/ minutes\\?,\\?/m/' \\
-e 's/ seconds\\?,\\?/s/' \\
| cut -d' ' -f-2`)
(defpoll bitcoin
:interval "5m"
:initial "$N/A"
`bitcoin`)
; TODO: Figure out how to store this one-time
(defpoll kernel
:interval "10000h"
:initial 'N/A'
; `uname -r | sed -r 's/(.+)-arch(.+)/\\1/'`
`uname -r`)
(deflisten temperature `scripts/gammarelay temperature watch`)
(deflisten brightness `scripts/gammarelay brightness watch`)
(deflisten gamma `scripts/gammarelay gamma watch`)
(defpoll net
:interval "3s"
:initial '{"essid":"N/A","icon":"󱛇","state":"unknown","signal":"0"}'
`scripts/net status`)
(defpoll bluetooth
:interval "3s"
:initial '{"icon":"󰂲","status":"unknown","name":"","mac":"","battery":""}'
`scripts/bluetooth status`)

View file

@ -1,40 +0,0 @@
(defvar mic_rev false)
(defwidget volume_module []
(box
:class "module volume"
:space-evenly false
(eventbox
:onscroll "scripts/volume setvol SOURCE 0.5 {}"
:onclick "scripts/volume togglemute SOURCE"
:onrightclick "${terminal} pulsemixer &"
:onhover "${EWW_CMD} update mic_rev=true"
:onhoverlost "${EWW_CMD} update mic_rev=false"
:class "microphone"
(box
(label
:class "icon"
:text {volume.microphone_icon})
(label
:visible {mic_rev && !volume.microphone_mute}
:class "value"
:text "${volume.microphone_vol}%")
))
(eventbox
:onscroll "scripts/volume setvol SINK 0.5 {}"
:onclick "scripts/volume togglemute SINK"
:onrightclick "${terminal} pulsemixer &"
:class "speaker"
(box
(label
:class "icon"
:text {volume.speaker_icon})
(label
:visible {!volume.speaker_mute}
:class "value"
:text "${volume.speaker_vol}%")
))
))

View file

@ -1,11 +0,0 @@
; Consider making the window name clickable, opening up a full window that's showing
; the selected window details (class, unformatted name, and perhaps even more, like
; xwayland status, ...)
(defwidget window_name_module []
(box
:class "module window_name"
(label
:class "value"
:text "${window_name.formatted_name}")
))

View file

@ -1,21 +0,0 @@
; (defwidget sep []
; (label :class "separ module" :text "|"))
; Consider making the window name clickable, opening up a full window that's showing
; the selected window details (class, unformatted name, and perhaps even more, like
; xwayland status, ...)
(defwidget workspaces_module []
(box
:class "module workspaces"
(for workspace in workspaces
(eventbox
:class {workspace.active ? 'focused' : workspace.windows > 0 ? 'active' : 'inactive'}
:onclick `scripts/workspaces --switch ${workspace.id}`
(label
:class "value icon"
:text {workspace.format_name}))
)
))

View file

@ -1,11 +0,0 @@
[flake8]
max-line-length=119
extend-ignore=E203
extend-select=B902,B904
exclude=.venv,.git,.cache
ignore=
ANN002, # *args annotation
ANN003, # **kwargs annotation
ANN101, # self param annotation
ANN102, # cls param annotation
ANN204, # return type annotation for special methods

View file

@ -1,85 +0,0 @@
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"
# $BATTERY and $ADAPTER env vars can be set manually, being the names of the
# devices (in /sys/class/power_supply/) i.e. BATTERY=BAT0 ADAPTER=ADP0
# or, if left unset, they will be automatically picked.
CAPACITY_ICONS=("󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹")
CHARGING_ICON=""
DISCHARGING_ICON=""
FULL_ICON="" # Plugged in, but no longer charging (fully charged)
CRITICAL_ICON=""
CRITICAL_PERCENTAGE=15
if [ -z "$BATTERY" ]; then
# shellcheck disable=SC2010
BATTERY="$(\ls -t /sys/class/power_supply | grep "BAT" | head -n 1)"
fi
if [ -z "$ADAPTER" ]; then
# shellcheck disable=SC2010
ADAPTER="$(\ls -t /sys/class/power_supply | grep -E "ADP|AC" | head -n 1)"
fi
get_bat_info() {
cat /sys/class/power_supply/"$BATTERY"/"$1"
}
get_adp_info() {
cat /sys/class/power_supply/"$ADAPTER"/"$1"
}
manufacturer="$(get_bat_info manufacturer)"
model_name="$(get_bat_info model_name)"
technology="$(get_bat_info technology)"
energy_now="$(get_bat_info energy_now)"
energy_full="$(get_bat_info energy_full)"
energy_full_design="$(get_bat_info energy_full_design)"
cycle_count="$(get_bat_info cycle_count)"
capacity="$(get_bat_info capacity)"
status="$(get_bat_info status)"
[ "$(get_adp_info online)" -eq 1 ] && adp_connected="true" || adp_connected="false"
# Quick overrides to showcase how battery works
# capacity=100
# adp_connected="true"
# status="Charging"
# status="Not charging"
# status="Discharging"
full="false"
capacity_icon="$(pick_icon "$capacity" 0 100 "${CAPACITY_ICONS[@]}")"
if [ "$status" = "Not charging" ] || [ "$status" = "Full" ] && [ "$adp_connected" = "true" ]; then
extra_icon="$FULL_ICON"
full="true"
elif [ "$status" = "Discharging" ] && [ "$capacity" -le "$CRITICAL_PERCENTAGE" ]; then
extra_icon="$CRITICAL_ICON"
elif [ "$status" = "Discharging" ]; then
extra_icon="$DISCHARGING_ICON"
elif [ "$status" = "Charging" ]; then
extra_icon="$CHARGING_ICON"
fi
[ "$capacity" -le "$CRITICAL_PERCENTAGE" ] && critical="true" || critical="false"
jq -n -c --monochrome-output \
--arg percent "$capacity" \
--arg plugged "$adp_connected" \
--arg status "$status" \
--arg capacity_icon "$capacity_icon" \
--arg extra_icon "$extra_icon" \
--arg manufacturer "$manufacturer" \
--arg model_name "$model_name" \
--arg technology "$technology" \
--arg energy_now "$energy_now" \
--arg energy_full "$energy_full" \
--arg energy_full_design "$energy_full_design" \
--arg cycle_count "$cycle_count" \
--arg critical "$critical" \
--arg full "$full" \
'$ARGS.named'

View file

@ -1,85 +0,0 @@
#!/usr/bin/env bash
ICON_IDLE="󰂯"
ICON_CONNECTED="󰂱"
ICON_OFF="󰂲"
toggle() {
status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1)
if [ "$status" = "unblocked" ]; then
rfkill block bluetooth
else
rfkill unblock bluetooth
if ! systemctl -q is-active bluetooth.service; then
# This will use polkit for privillege elevation
systemctl start bluetooth
fi
fi
}
get_report() {
status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1)
if [ "$status" = "blocked" ] || ! systemctl -q is-active bluetooth.service || ! command -v bluetoothctl >/dev/null 2>&1; then
jq -n -c --monochrome-output \
--arg icon "$ICON_OFF" \
--arg status "unknown" \
--arg name "" \
--arg mac "" \
--arg battery "" \
'$ARGS.named'
return
fi
status="$(bluetoothctl show)"
powered="$(echo "$status" | grep Powered | cut -d' ' -f 2-)"
if [ "$powered" != "yes" ]; then
jq -n -c --monochrome-output \
--arg icon "$ICON_OFF" \
--arg status "unpowered" \
--arg name "" \
--arg mac "" \
--arg battery "" \
'$ARGS.named'
return
fi
status="$(bluetoothctl info)"
if [ "$status" == "Missing device address argument" ]; then
jq -n -c --monochrome-output \
--arg icon "$ICON_IDLE" \
--arg status "idle" \
--arg name "" \
--arg mac "" \
--arg battery "" \
'$ARGS.named'
return
fi
name="$(echo "$status" | grep Name | cut -d' ' -f 2-)"
mac="$(echo "$status" | head -1 | awk '{print $2}' | tr ':' '_')"
if [ "$(echo "$status" | grep Percentage)" != "" ] && command -v upower >/dev/null 2>&1; then
battery="$(upower -i /org/freedesktop/UPower/devices/headset_dev_"$mac" | grep percentage | awk '{print $2}' | cut -f 1 -d '%')%"
else
battery=""
fi
jq -n -c --monochrome-output \
--arg icon "$ICON_CONNECTED" \
--arg status "connected" \
--arg name "$name" \
--arg mac "$mac" \
--arg battery "$battery" \
'$ARGS.named'
}
case "$1" in
"status") get_report ;;
"toggle") toggle ;;
*) >&2 echo "Invalid usage, argument '$1' not recognized."; exit 1 ;;
esac

View file

@ -1,82 +0,0 @@
#!/usr/bin/env bash
if [ "$1" = "temperature" ]; then
watch_cmd="{t}"
update_cmd="UpdateTemperature"
update_signature="n"
set_cmd="Temperature"
set_signature="q"
default_val=6500
click_val=4500
scroll_change=100
cmp_op="<"
elif [ "$1" = "brightness" ]; then
watch_cmd="{bp}"
update_cmd="UpdateBrightness"
update_signature="d"
set_cmd="Brightness"
set_signature="d"
default_val=1
click_val=0.8
scroll_change=0.02
cmp_op="<"
elif [ "$1" = "gamma" ]; then
watch_cmd="{g}"
update_cmd="UpdateGamma"
update_signature="d"
set_cmd="Gamma"
set_signature="d"
default_val=1
click_val=1.1
scroll_change=0.02
cmp_op=">"
else
>&2 echo "Invalid option, first argument must be one of: temperature, brightness, gamma"
exit 1
fi
if [ "$2" = "watch" ]; then
exec wl-gammarelay-rs watch "$watch_cmd"
elif [ "$2" = "get" ]; then
exec busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" | cut -d' ' -f2
elif [ "$2" = "scroll" ]; then
if [ "$3" = "up" ]; then
sign="+"
elif [ "$3" = "down" ]; then
sign="-"
else
>&2 echo "Invalid sign, second argument must be one of: up, down"
exit 1
fi
exec busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay "$update_cmd" "$update_signature" ${sign}${scroll_change}
elif [ "$2" = "set" ]; then
mode="$3"
if [ "$mode" = "toggle" ]; then
cur_val="$(busctl --user get-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" | cut -d' ' -f2)"
if [ "$(echo "$cur_val $cmp_op $default_val" | bc -l)" = "1" ]; then
mode="off"
else
mode="on"
fi
fi
if [ "$mode" = "on" ]; then
exec busctl --user -- set-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" "$set_signature" "$click_val"
elif [ "$mode" = "off" ]; then
exec busctl --user -- set-property rs.wl-gammarelay / rs.wl.gammarelay "$set_cmd" "$set_signature" "$default_val"
else
>&2 echo "Invalid mode, third argument, must be one of: toggle, on, off"
exit 1
fi
else
>&2 echo "Invalid operation, second argument must be one of: watch, scroll, set"
exit 1
fi

View file

@ -1,50 +0,0 @@
#!/usr/bin/env bash
# $1: Current number
# $2: Range minimum
# $3: Range maximum
# $4-: Icons as individual arguments
pick_icon() {
cur="$1"
min="$2"
max="$3"
shift 3
icons=("$@")
index="$(echo "($cur-$min)/(($max-$min)/${#icons[@]})" | bc)"
# Print the picked icon, handling overflows/underflows, i.e. if our index is <0 or >len(icons)
if [ "$index" -ge "${#icons[@]}" ]; then
index=-1
elif [ "$index" -lt 0 ]; then
index=0
fi
echo "${icons[index]}"
}
# Will block and listen to the hyprland socket messages and output them
# Generally used like: hyprland_ipc | while read line; do handle $line; done
# Read <https://wiki.hyprland.org/IPC/> for output format and available events
# Note: requires openbsd version of netcat.
# $1 - Optional event to listen for (no event filtering will be done if not provided)
hyprland_ipc() {
if [ -z "$HYPRLAND_INSTANCE_SIGNATURE" ]; then
>&2 echo "Hyprland is not running, IPC not available"
exit 1
fi
SOCKET_PATH="${XDG_RUNTIME_DIR:-/run/user/$UID}/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
#SOCKET_PATH="/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
if [ -z "$1" ]; then
nc -U "$SOCKET_PATH" | while read -r test; do
echo "$test"
done
else
nc -U "$SOCKET_PATH" | while read -r test; do
# shellcheck disable=SC2016
echo "$test" | grep --line-buffered -E "^$1>>" | stdbuf -oL awk -F '>>' '{print $2}'
done
fi
}

View file

@ -1,52 +0,0 @@
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"
STRENGTH_ICONS=("󰤫" "󰤯" "󰤟" "󰤢" "󰤥" "󰤨")
DISCONNECTED_ICON="󰤮"
WIFI_OFF="󰖪"
toggle() {
status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "wlan") | .soft' | head -1)
if [ "$status" = "unblocked" ]; then
rfkill block wlan
else
rfkill unblock wlan
fi
}
get_report() {
connection_details="$(nmcli -t -f NAME,TYPE,DEVICE connection show --active | grep wireless | head -n1)"
essid="$(echo $connection_details | cut -d':' -f1)"
device="$(echo $connection_details | cut -d':' -f3)"
if [ -n "$device" ]; then
state="$(nmcli -t -f DEVICE,STATE device status | grep "$device" | head -n1 | cut -d':' -f2)"
signal="$(nmcli -t -f in-use,signal dev wifi | grep "\*" | cut -d':' -f2)"
else
state="unknown"
signal="0"
fi
if [ "$state" = "disconnected" ] ; then
icon="$DISCONNECTED_ICON"
elif [ "$state" = "unknown" ]; then
icon="$WIFI_OFF"
else
icon="$(pick_icon "$signal" 0 100 "${STRENGTH_ICONS[@]}")"
fi
jq -n -c --monochrome-output \
--arg essid "$essid" \
--arg icon "$icon" \
--arg state "$state" \
--arg signal "$signal" \
'$ARGS.named'
}
case "$1" in
"toggle") toggle ;;
"status") get_report ;;
*) >&2 echo "Invalid usage, argument '$1' not recognized."; exit 1 ;;
esac

View file

@ -1,12 +0,0 @@
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"
# Consider usning a file as a flag for whether nightlight is on or off
# as we might be in transition state and just killing the program might
# not be enough.
if [ "$1" = "toggle" ]; then
gammastep -x
fi

View file

@ -1,12 +0,0 @@
[tool.black]
line-length = 119
extend-exclude = "^/.cache"
[tool.isort]
profile = "black"
line_length = 119
atomic = true
order_by_type = false
case_sensitive = true
combine_as_imports = true
skip = [".venv", ".git", ".cache"]

View file

@ -1,35 +0,0 @@
#!/usr/bin/env bash
MOUNTPOINTS=("/" "/mnt/ext")
data="$(df -H)"
as_json() {
mountpoint="$1"
res="$2"
arr_res=($res)
jq -n -c --monochrome-output \
--arg mountpoint "$mountpoint" \
--arg size "${arr_res[0]}" \
--arg used "${arr_res[1]}" \
--arg avail "${arr_res[2]}" \
--arg percent "${arr_res[3]}" \
'$ARGS.named'
}
output_json="[]"
for mountpoint in "${MOUNTPOINTS[@]}"; do
res="$(echo "$data" | awk -v m="$mountpoint" '$6 == m {print $2 " " $3 " " $4 " " $5}')"
out="$(as_json "$mountpoint" "$res")"
# echo "$output_json $out" | jq -c -s
jq --argjson arr1 "$output_json" --argjson arr2 "[$out]" -n \
'$arr1 + $arr2'
# mount_data+=("$mountpoint" $res)
# echo "${mount_data[@]}"
done
# echo "${mount_data[@]}"

View file

@ -1,7 +0,0 @@
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"
#hyprland_ipc "workspace|createworkspace|destroyworkspace|activewindow"
hyprland_ipc

View file

@ -1,112 +0,0 @@
#!/usr/bin/env bash
# Define some icons
SPEAKER_ICONS=("" "" "")
SPEAKER_MUTED_ICON=""
MIC_ICON=""
MIC_MUTED_ICON=""
# Define some helper functions for getting/setting audio data using wireplumber (wpctl)
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
get_vol() {
wpctl get-volume "@DEFAULT_AUDIO_${1}@" | awk '{print int($2*100)}'
}
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
# #2 is the voulme (as percentage) to set the volume to
# $3 is optional, if set, it can be '+' or '-', which then adds/decreases volume, instead of setting
set_vol() {
wpctl set-volume "@DEFAULT_AUDIO_${1}@" "$(awk -v n="$2" 'BEGIN{print (n / 100)}')$3"
}
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
check_mute() {
wpctl get-volume "@DEFAULT_AUDIO_${1}@" | grep -i muted >/dev/null
echo $?
}
# $1 can either be "SINK" (speaker) or "SOURCE" (microphone)
toggle_mute() {
wpctl set-mute "@DEFAULT_AUDIO_${1}@" toggle
}
get_report() {
spkr_vol="$(get_vol "SINK")"
mic_vol="$(get_vol "SOURCE")"
if [ "$(check_mute "SINK")" == "0" ]; then
spkr_mute="true"
spkr_icon="$SPEAKER_MUTED_ICON"
else
spkr_mute="false"
index="$(awk -v n="$spkr_vol" -v m="${#SPEAKER_ICONS[@]}" 'BEGIN{print int(n/(100/m))}')"
# We might end up with an higher than the length of icons, if the volume is over 100%
# in this case, set the index to last icon
if [ "$index" -ge "${#SPEAKER_ICONS[@]}" ]; then
spkr_icon="${SPEAKER_ICONS[-1]}"
else
spkr_icon="${SPEAKER_ICONS[$index]}"
fi
fi
if [ "$(check_mute "SOURCE")" = "0" ]; then
mic_mute="true"
mic_icon="$MIC_MUTED_ICON"
else
mic_mute="false"
mic_icon="$MIC_ICON"
fi
echo "{ \"speaker_vol\": \"$spkr_vol\", \"speaker_mute\": $spkr_mute, \"speaker_icon\": \"$spkr_icon\", \"microphone_mute\": $mic_mute, \"microphone_vol\": \"$mic_vol\", \"microphone_icon\": \"$mic_icon\" }"
}
# Continually run and report every volume change (into stdout)
loop() {
get_report
pactl subscribe | grep --line-buffered "change" | while read -r _; do
get_report
done
}
case "$1" in
"loop") loop ;;
"once") get_report ;;
"togglemute")
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
>&2 echo "Invalid usage, expected second argument to be 'SINK' or 'SOURCE', got '$2'"
exit 1
fi
toggle_mute "$2"
;;
"setvol")
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
>&2 echo "Invalid usage, expected second argument to be 'SINK' or 'SOURCE', got '$2'"
exit 1
fi
if [[ "$3" =~ ^[+-]?[0-9]*\.?[0-9]+$ ]]; then
case "$4" in
"") set_vol "$2" "$3" ;;
up | +) set_vol "$2" "$3" "+" ;;
down | -) set_vol "$2" "$3" "-" ;;
*)
>&2 echo "Invalid usage, expected fourth argument to be up/down or +/-, got '$4'"
exit 1
;;
esac
else
>&2 echo "Invalid usage, exepcted third argument to be a number, got '$3'"
exit 1
fi
;;
*)
>&2 echo "Invalid usage, argument '$1' not recognized."
exit 1
;;
esac

View file

@ -1,6 +0,0 @@
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"
hyprland_ipc "activewindow" | ./scripts/window_name.py

View file

@ -1,116 +0,0 @@
#!/usr/bin/env python3
"""This is a utility script for regex remaps on window names.
This is done in python, because of the complex regex logic, which would be pretty hard to
recreate in bash. This python script is expected to be called from the bash script controlling
the window names. Window name and class are obtained from piped stdin, to prevent having to
needlessly keep restarting this program, which takes a while due to the interpreter starting
overhead.
"""
import json
import re
import sys
from typing import Iterator, Optional
class RemapRule:
__slots__ = ("name_pattern", "output_pattern", "class_pattern")
def __init__(
self,
name_pattern: str,
output_pattern: str,
class_pattern: Optional[str] = None,
):
self.name_pattern = re.compile(name_pattern)
self.output_pattern = output_pattern
self.class_pattern = re.compile(class_pattern) if class_pattern else None
def apply(self, window_name: str, window_class: str) -> str:
"""Returns new name after this remap rule was applied."""
if self.class_pattern is not None:
if not self.class_pattern.fullmatch(window_class):
# Rule doesn't apply, class mismatch, return original name
return window_name
res = self.name_pattern.fullmatch(window_name)
if not res:
# Rule doesn't apply, name mismatch, return original name
return window_name
# NOTE: This is potentially unsafe, since output_pattern might be say {0.__class__}, etc.
# meaning this allows arbitrary attribute access, however it doesn't allow running functions
# here. That said, code could still end up being run if there's some descriptor defined,
# and generally I wouldn't trust this in production. However, this code is for my personal
# use here, and all of the output patterns are hard-coded in this file, so in this case, it's
# fine. But if you see this code and you'd like to use it in your production code, maybe don't
return self.output_pattern.format(*res.groups())
# Rules will be applied in specified order
REMAP_RULES: list[RemapRule] = [
RemapRule(r"", "", ""),
RemapRule(r"(.*) — Mozilla Firefox", "{}", "firefox"),
RemapRule(r"Mozilla Firefox", " Mozilla Firefox", "firefox"),
RemapRule(r"Alacritty", " Alacritty", "Alacritty"),
RemapRule(
r"zsh;#toggleterm#1 - \(term:\/\/(.+)\/\/(\d+):(.+)\) - N?VIM",
" Terminal: {0}",
),
RemapRule(r"(.+) \+ \((.+)\) - N?VIM", "{0} ({1}) [MODIFIED]"),
RemapRule(r"(.+) \((.+)\) - N?VIM", "{0} ({1})"),
RemapRule(r"(?:\[\d+\] )?\*?WebCord - (.+)", "{}", "WebCord"),
RemapRule(r"(.+) - Discord", "{}", "discord"),
RemapRule(r"(?:\(\d+\) )?Discord \| (.+)", "{}", "vesktop"),
RemapRule(r"(.+) - mpv", "{}", "mpv"),
RemapRule(r"Stremio - (.+)", " Stremio - {}", r"(Stremio)|(com.stremio.stremio)"),
RemapRule(r"Spotify((?: Premium)?)", " Spotify{}", "[Ss]potify"),
RemapRule(r"pulsemixer", " Pulsemixer"),
RemapRule(r"(.*)", "{}", "Pcmanfm"),
RemapRule(r"(.*)", "{}", "pcmanfm-qt"),
# Needs to be last
RemapRule(r"(.*)", "{}", "kitty"),
]
MAX_LENGTH = 65
def iter_window() -> Iterator[tuple[str, str]]:
"""Listen for the window parameters from stdin/pipe, yields (window_name, window_class)."""
for line in sys.stdin:
line = line.removesuffix("\n")
els = line.split(",", maxsplit=1)
if len(els) != 2:
raise ValueError(
f"Expected 2 arguments from stdin line (name, class), but got {len(els)}"
)
yield els[1], els[0]
def main() -> None:
for window_name, window_class in iter_window():
formatted_name = window_name
for remap_rule in REMAP_RULES:
new_name = remap_rule.apply(formatted_name, window_class)
if new_name != formatted_name:
formatted_name = new_name
break
formatted_name = formatted_name.split("\n")[0]
if len(formatted_name) > MAX_LENGTH:
formatted_name = formatted_name[: MAX_LENGTH - 3] + "..."
ret = json.dumps(
{
"name": window_name,
"class": window_class,
"formatted_name": formatted_name,
}
)
print(ret)
sys.stdout.flush()
if __name__ == "__main__":
main()

View file

@ -1,12 +0,0 @@
#!/usr/bin/env bash
# shellcheck source=include
source "./scripts/include"
if [ "$1" = "--switch" ]; then
hyprctl dispatch focusworkspaceoncurrentmonitor "$2" >/dev/null
elif [ "$1" = "--loop" ]; then
hyprland_ipc "workspace|createworkspace|destroyworkspace" | ./scripts/workspaces.py "$@"
else
./scripts/workspaces.py "$@"
fi

View file

@ -1,188 +0,0 @@
#!/usr/bin/env python3
import argparse
import json
import subprocess
import sys
from typing import TypedDict, TYPE_CHECKING
if TYPE_CHECKING:
from _typeshed import SupportsRichComparison
class WorkspaceInfo(TypedDict):
id: int
name: str
monitor: str
windows: int
hasfullscreen: bool
lastwindow: str
lastwindowtitle: str
class ActiveWorkspaceInfo(TypedDict):
id: int
name: str
class MonitorInfo(TypedDict):
id: int
name: str
description: str
make: str
model: str
width: int
height: int
refreshRate: float
x: int
y: int
activeWorkspace: ActiveWorkspaceInfo
reserved: list[int]
scale: float
transform: int
focused: bool
dpmsStatus: bool
vrr: bool
class OutputWorkspaceInfo(WorkspaceInfo):
format_name: str
active: bool
monitor_id: int
# workspace id -> remapped name
REMAPS = {
1: "󰞷",
2: "󰈹",
3: "󱕂",
4: "󰭹",
5: "󰝚",
6: "󰋹",
7: "7",
8: "8",
9: "9",
}
# Skip the special (scratchpad) workspace
SKIP = {-99}
def workspace_sort(obj: OutputWorkspaceInfo) -> "SupportsRichComparison":
"""Returns a key to sort by, given the current element."""
return obj["id"]
def fill_blank_workspaces(open: list[OutputWorkspaceInfo]) -> list[OutputWorkspaceInfo]:
"""Add in the rest of the workspaces which don't have any open windows on them.
This is needed because hyprland deletes workspaces with nothing in them.
Note that this assumes all available workspaces were listed in REMAPS, and will
only fill those. These blank workspaces will have most string values set to "N/A",
and most int values set to 0.
"""
# Work on a copy, we don't want to alter the original list
lst = open.copy()
for remap_id, format_name in REMAPS.items():
# Skip for already present workspaces
if any(ws_info["id"] == remap_id for ws_info in lst):
continue
blank_ws: OutputWorkspaceInfo = {
"id": remap_id,
"name": str(remap_id),
"monitor": "N/A",
"windows": 0,
"hasfullscreen": False,
"lastwindow": "N/A",
"lastwindowtitle": "N/A",
"active": False,
"format_name": format_name,
"monitor_id": 0,
}
lst.append(blank_ws)
return lst
def get_workspaces() -> list[OutputWorkspaceInfo]:
"""Obtain workspaces from hyprctl, sort them and add format_name arg."""
proc = subprocess.run(["hyprctl", "workspaces", "-j"], stdout=subprocess.PIPE)
proc.check_returncode()
try:
workspaces: list[WorkspaceInfo] = json.loads(proc.stdout)
except json.JSONDecodeError:
sys.stderr.writelines([
"Error decoding json response from hyprctl, returning empty workspaces",
f"Actual captured output from hyprctl: {proc.stdout!r}"
])
sys.stderr.flush()
workspaces = []
proc = subprocess.run(["hyprctl", "monitors", "-j"], stdout=subprocess.PIPE)
proc.check_returncode()
monitors: list[MonitorInfo] = json.loads(proc.stdout)
active_workspaces = {monitor["activeWorkspace"]["id"] for monitor in monitors}
out: list[OutputWorkspaceInfo] = []
for workspace in workspaces:
if workspace["id"] in SKIP:
continue
format_name = REMAPS.get(workspace["id"], workspace["name"])
active = workspace["id"] in active_workspaces
try:
mon_id = [monitor["id"] for monitor in monitors if monitor["name"] == workspace["monitor"]][0]
except IndexError: # Sometimes workspace["monitor"] is "?", which doesn't match any monitor
mon_id = -1
out.append({**workspace, "format_name": format_name, "active": active, "monitor_id": mon_id})
out = fill_blank_workspaces(out)
out.sort(key=workspace_sort)
return out
def print_workspaces() -> None:
wks = get_workspaces()
ret = json.dumps(wks)
print(ret)
sys.stdout.flush()
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument(
"--oneshot",
action="store_true",
help="Don't listen to stdout for updates, only run once and quit",
)
parser.add_argument(
"--loop",
action="store_true",
help="Listen to stdout input, once something is received, re-print workspaces"
)
args = parser.parse_args()
if args.loop and args.oneshot:
print("Can't use both --oneshot and --loop", file=sys.stdout)
sys.exit(1)
if args.loop is None and args.oneshot is None:
print("No option specified!", file=sys.stdout)
sys.exit(1)
# Print workspaces here immediately, we don't want to have to wait for the first
# update from stdin as we only receive those on actual workspace change.
print_workspaces()
if args.oneshot:
# We've already printed the workspaces once, we can exit now
return
# Reprint workspaces on each stdin update (flush)
for _ in sys.stdin:
print_workspaces()
if __name__ == "__main__":
main()

View file

@ -1,14 +0,0 @@
(defwidget calendar-win []
(box
:class "calendar-win"
(calendar)))
(defwindow calendar
:monitor 0
:geometry (geometry
:x "0%"
:y "0%"
:anchor "top right"
:width "0px"
:height "0px")
(calendar-win))

View file

@ -1,78 +0,0 @@
(defwidget radio-menu-win []
(box
:class "radio-menu-box"
:space-evenly false
:orientation "v"
(box
:class "text-row"
:space-evenly false
(label
:class "title"
:text "Radio/Connections Panel"))
(box
:class "element-row"
(box
:class "wifi-box"
:space-evenly false
:orientation "v"
(box
:class "element icon"
:space-evenly false
:halign "center"
(button
:class "wifi-button"
:tooltip "${net.state} (strength: ${net.signal}%)"
:onclick "scripts/net toggle"
{net.icon})
(label
:class "separator"
:text "│")
(button
:class "wifi-arrow-btn"
:onclick "eww close radio-menu && nm-connection-editor &"
"󰅂"))
(label
:text {net.essid}
:xalign 0.5
:limit-width 15))
(box
:class "bluetooth-box"
:space-evenly false
:orientation "v"
(box
:class "element icon"
:space-evenly false
:halign "center"
(button
:class "bluetooth-button"
:onclick "scripts/bluetooth toggle"
:tooltip "${bluetooth.name} (${bluetooth.mac}) ${bluetooth.battery}"
{bluetooth.icon})
(label
:class "separator"
:text "│")
(button
:class "bluetooth-arrow-btn"
:onclick "eww close radio-menu && blueberry"
"󰅂"))
(label
:text {bluetooth.name}
:xalign 0.5
:tooltip "${bluetooth.name} (${bluetooth.mac}) ${bluetooth.battery}"
:limit-width 15)))
))
(defwindow radio-menu
:stacking "fg"
:monitor 0
:geometry (geometry
:x "0"
:y "0"
:width "0%"
:height "0%"
:anchor "right top")
(radio-menu-win))

View file

@ -0,0 +1,27 @@
# The current version of the config schema
version: 1
# What protocol to use when performing git operations. Supported values: ssh, https
git_protocol: https
# What editor gh should run when creating issues, pull requests, etc. If blank, will refer to environment.
editor:
# When to interactively prompt. This is a global config that cannot be overridden by hostname. Supported values: enabled, disabled
prompt: enabled
# Preference for editor-based interactive prompting. This is a global config that cannot be overridden by hostname. Supported values: enabled, disabled
prefer_editor_prompt: disabled
# A pager program to send command output to, e.g. "less". If blank, will refer to environment. Set the value to "cat" to disable the pager.
pager:
# Aliases allow you to create nicknames for gh commands
aliases:
co: pr checkout
# The path to a unix socket through which to send HTTP connections. If blank, HTTP traffic will be handled by net/http.DefaultTransport.
http_unix_socket:
# What web browser gh should use when opening URLs. If blank, will refer to environment.
browser:
# Whether to display labels using their RGB hex color codes in terminals that support truecolor. Supported values: enabled, disabled
color_labels: disabled
# Whether customizable, 4-bit accessible colors should be used. Supported values: enabled, disabled
accessible_colors: disabled
# Whether an accessible prompter should be used. Supported values: enabled, disabled
accessible_prompter: disabled
# Whether to use a animated spinner as a progress indicator. If disabled, a textual progress indicator is used instead. Supported values: enabled, disabled
spinner: enabled

View file

@ -0,0 +1,5 @@
github.com:
git_protocol: https
users:
ItsDrike:
user: ItsDrike

View file

@ -1,5 +0,0 @@
/**
* GTK 4 reads the theme configured by gtk-theme-name, but ignores it.
* It does however respect user CSS, so import the theme from here.
**/
@import url("file:///usr/share/themes/Tokyonight-Dark/gtk-4.0/gtk.css");

View file

@ -1,22 +1,9 @@
general {
# cursor_inactive_timeout = 10
# no_cursor_warps = true
}
debug {
overlay = false
#disable_logs = false
enable_stdout_logs = true
}
source = ~/.config/hypr/hyprland.d/exec.conf
source = ~/.config/hypr/hyprland.d/layout.conf
source = ~/.config/hypr/hyprland.d/permissions.conf
source = ~/.config/hypr/hyprland.d/keybinds.conf
source = ~/.config/hypr/hyprland.d/input.conf
source = ~/.config/hypr/hyprland.d/style.conf
source = ~/.config/hypr/hyprland.d/keybinds.conf
source = ~/.config/hypr/hyprland.d/window_rules.conf
source = ~/.config/hypr/hyprland.d/gestures.conf
source = ~/.config/hypr/hyprland.d/misc.conf
source = ~/.config/hypr/hyprland.d/plugins.conf
source = ~/.config/hypr/hyprland.d/debug.conf
# vi: ft=hyprlang
exec-once = uwsm finalize

View file

@ -0,0 +1,7 @@
debug {
overlay = false
#disable_logs = false
enable_stdout_logs = true
}

View file

@ -1,4 +0,0 @@
exec-once = uwsm finalize
exec-once = sleep 3 && uwsm app vesktop
# vi: ft=hyprlang

View file

@ -1,11 +0,0 @@
gestures {
workspace_swipe = true
workspace_swipe_fingers = 3
workspace_swipe_distance = 300
workspace_swipe_invert = false
workspace_swipe_min_speed_to_force = 20
workspace_swipe_cancel_ratio = 0.650000
}
# vi: ft=hyprlang

View file

@ -3,11 +3,14 @@
# ################
# Should be configured per-profile
monitor = desc:Microstep MSI MAG 256F BC1H174600235, 1920x1080@120, 1920x0, 1 # left
monitor = desc:AOC 2260WG5 KBEH81A000795, 1920x1080@60, 1920x0, 1, # left
# Primary (laptop)
monitor = eDP-1, 1920x1200@60, 0x0, 1
# Externals
monitor = desc:Microstep MSI MAG 256F BC1H174600235, 1920x1080@120, 1920x0, 1 # right
monitor = desc:AOC 2260WG5 KBEH81A000795, 1920x1080@60, 1920x0, 1, # right
# Mirror the primary (laptop) monitor on externals
#monitor= , preferred, auto, 1, mirror, eDP-1
# Extend on externals
@ -34,3 +37,4 @@ input {
}
# vi: ft=hyprlang

View file

@ -12,34 +12,65 @@ $XF86Favorites = 164
bind = SUPER, W, killactive,
bind = SUPER, F, togglefloating,
bind = SUPER, Space, fullscreen, 0 # regular fullscreen
bind = SUPER_SHIFT, Space, fullscreen, 1 # maximize without client fullscreen
bind = SUPER_CTRL, Space, fullscreenstate, 2, 0 # fullscreen without client knowing
bind = SUPER_CTRL_SHIFT, Space, fullscreenstate, 1, 2 # maximize with client being full-screen
bind = CTRL_SHIFT, Space, exec, toggle-fake-fullscreen # fake fullscreen + custom border
bind = SUPER_SHIFT, S, layoutmsg, togglesplit
# ################
# ### PROGRAMS ###
# ################
bind = SUPER, R, exec, uwsm app -- $(uwsm app -- wofi --show drun --define=drun-print_desktop_file=true)
bind = SUPER_SHIFT, V, exec, uwsm app -- clipman pick -t wofi
bind = SUPER, Return, exec, uwsm app -- kitty
bind = SUPER, X, exec, uwsm app -- pcmanfm-qt
bind = SUPER, B, exec, uwsm app -- firefox
bind = SUPER, C, exec, uwsm app -- qalculate-gtk
bind = , XF86Calculator, exec, uwsm app -- qalculate-gtk
bind = SUPER SHIFT, S, layoutmsg, togglesplit
bind = SUPER, P, pseudo
# #####################
# ### DE/WM CONTROL ###
# #####################
bind = SUPER_SHIFT, Q, exec, uwsm app -- menuquit
bind = SUPER_CTRL, L, exec, loginctl lock-session
bind = SUPER_SHIFT, L, exec, uwsm app -- wlogout -p layer-shell
bind = SUPER_SHIFT, T, exec, toggle-idle
bind = SUPER CTRL, L, exec, loginctl lock-session
bind = SUPER SHIFT, L, exec, uwsm app -- wlogout -p layer-shell
bind = SUPER SHIFT, T, exec, toggle-idle
#
# ################
# ### PROGRAMS ###
# ################
bind = SUPER, R, exec, uwsm app -- walker
bind = SUPER, Return, exec, uwsm app -- kitty
bind = SUPER, X, exec, uwsm app -- pcmanfm-qt
bind = SUPER, B, exec, uwsm app -- firefox
bind = SUPER, C, exec, uwsm app -- qalculate-gtk
bind = , XF86Calculator, exec, uwsm app -- qalculate-gtk
bind = SUPER SHIFT, V, exec, uwsm app -- cliphist list | walker -d | cliphist decode | wl-copy
# ###################
# ### FULL-SCREEN ###
# ###################
bind = SUPER, Space, fullscreen, 0 # regular fullscreen
bind = SUPER SHIFT, Space, fullscreen, 1 # maximize without client fullscreen
bind = SUPER CTRL, Space, fullscreenstate, 2, 0 # fullscreen without client knowing
bind = SUPER CTRL SHIFT, Space, fullscreenstate, 1, 2 # maximize with client being full-screen
bind = CTRL SHIFT, Space, exec, toggle-fake-fullscreen # fake fullscreen + custom border
# ############################
# ### AUDIO/VOLUME CONTROL ###
# ############################
bindel = SUPER, Down, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-
bindel = SUPER, Up, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindl = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
# ##########################
# ### BRIGHTNESS CONTROL ###
# ##########################
bindel = SUPER, Right, exec, brightnessctl -n2 set 5%+
bindel = SUPER, Left, exec, brightnessctl -n2 set 5%-
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -n2 set 5%-
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -n2 set 5%+
# ###################
# ### SCREENSHOTS ###
@ -50,58 +81,28 @@ $SCREENSHOT_FORMAT = "${XDG_SCREENSHOTS_DIR:-$HOME/Media/Pictures/Screenshots}/S
$SCREENSHOT_DELAY = 2000
$PRINTSCR_KEY = Print #Menu # Print
#bind = ALT, $PRINTSCR_KEY, exec, wl-copy --type image/png "$(hyprpicker)" && notify-send 'Picked color' "$(wl-paste) (saved to clipboard)"
bind = , $PRINTSCR_KEY, exec, hyprland-screenshot --notify --copy --target area
#bindl = , $PRINTSCR_KEY, exec, hyprland-screenshot --notify --copy --target all # lockscreen screenshot (only enable when needed)
#bindl = , $PRINTSCR_KEY, exec, hyprland-screenshot --notify --copy --target all # lockscreen screenshot (only enable when needed, dangerous)
bind = SUPER, $PRINTSCR_KEY, exec, hyprland-screenshot --notify --copy --target area --edit
bind = SHIFT, $PRINTSCR_KEY, exec, hyprland-screenshot --notify --save $SCREENSHOT_FORMAT --target area
bind = CTRL, $PRINTSCR_KEY, exec, hyprland-screenshot --notify --copy --target area --delay $SCREENSHOT_DELAY
bind = SUPER_SHIFT, $PRINTSCR_KEY, exec, hyprland-screenshot --notify --save $SCREENSHOT_FORMAT --target area --edit
bind = SUPER_CTRL, $PRINTSCR_KEY, exec, hyprland-screenshot --notify --copy --target area --delay $SCREENSHOT_DELAY --edit
bind = SUPER_SHIFT_CTRL, $PRINTSCR_KEY, exec, hyprland-screenshot --notify --save $SCREENSHOT_FORMAT --target area --delay $SCREENSHOT_DELAY --edit
bind = SUPER_ALT, $PRINTSCR_KEY, exec, ocr && notify-send "OCR" "Text copied to clipboard"
bind = SUPER SHIFT, $PRINTSCR_KEY, exec, hyprland-screenshot --notify --save $SCREENSHOT_FORMAT --target area --edit
bind = SUPER CTRL, $PRINTSCR_KEY, exec, hyprland-screenshot --notify --copy --target area --delay $SCREENSHOT_DELAY --edit
bind = SUPER SHIFT CTRL, $PRINTSCR_KEY, exec, hyprland-screenshot --notify --save $SCREENSHOT_FORMAT --target area --delay $SCREENSHOT_DELAY --edit
bind = SUPER ALT, $PRINTSCR_KEY, exec, ocr && notify-send "OCR" "Text copied to clipboard"
bind = ALT, $PRINTSCR_KEY, exec, wl-copy --type image/png "$(hyprpicker)" && notify-send 'Picked color' "$(wl-paste) (saved to clipboard)"
# XF86Favorites key for recording
# (don't question me, I had it free)
bind = , 164, exec, uwsm app -- quick-record --notify toggle
bind = SUPER, 164, exec, uwsm -- app quick-record toggle
# #####################
# ### NOTIFICATIONS ###
# #####################
bind = CTRL, grave, exec, swaync-client --close-latest
bind = CTRL_SHIFT, grave, exec, swaync-client --close-all
bind = CTRL_ALT, grave, exec, swaync-client --hide-latest
bind = CTRL, period, exec, swaync-client --toggle-panel
bind = SUPER_SHIFT, D, exec, toggle-notifications
# ############################
# ### AUDIO/VOLUME CONTROL ###
# ############################
binde = SUPER, Down, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-
binde = SUPER, Up, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+
binde = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05-
binde = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+
bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bind = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
# ##########################
# ### BRIGHTNESS CONTROL ###
# ##########################
binde = SUPER, Right, exec, brightness -i 5% -n
binde = SUPER, Left, exec, brightness -d 5% -n
binde = , XF86MonBrightnessUp, exec, brightness -i 5% -n
binde = , XF86MonBrightnessDown, exec, brightness -d 5% -n
# #####################
# ### WINDOW GROUPS ###
# #####################
bind = SUPER, G, togglegroup,
bind = SUPER_SHIFT, G, lockactivegroup, toggle
bind = SUPER SHIFT, G, lockactivegroup, toggle
bind = ALT, tab, changegroupactive, f
bind = ALT, grave, changegroupactive, b
@ -122,33 +123,14 @@ bind = SUPER, k, movefocus, u
bind = SUPER, j, movefocus, d
# #######################################
# ### MOVE ACTIVE WINDOW IN DIRECTION ###
# ### MOVE FLOATING OR ACTIVE WINDOWS ###
# #######################################
bind = SUPER_ALT, h, movewindow, l
bind = SUPER_ALT, l, movewindow, r
bind = SUPER_ALT, k, movewindow, u
bind = SUPER_ALT, j, movewindow, d
# #######################################
# ### MOVE FLOATING WINDOWS ###
# #######################################
$myMoveSize = 100
bind = SUPER_ALT, left, exec, hyprland-move-window $myMoveSiez l
bind = SUPER_ALT, right, exec, hyprland-move-window $myMoveSize r
bind = SUPER_ALT, up, exec, hyprland-move-window $myMoveSize u
bind = SUPER_ALT, down, exec, hyprland-move-window $myMoveSize d
# ################################################################
# ### OVERRIDE SPLIT DIRECTION FOR NEXT WINDOW (MANUAL TILING) ###
# ################################################################
bind = SUPER_ALT, left, layoutmsg, preselect l
bind = SUPER_ALT, right, layoutmsg, preselect r
bind = SUPER_ALT, up, layoutmsg, preselect u
bind = SUPER_ALT, down, layoutmsg, preselect d
$floatMoveSize = 100
bind = SUPER ALT, h, exec, hyprland-move-window $floatMoveSize l
bind = SUPER ALT, l, exec, hyprland-move-window $floatMoveSize r
bind = SUPER ALT, k, exec, hyprland-move-window $floatMoveSize u
bind = SUPER ALT, j, exec, hyprland-move-window $floatMoveSize d
# ######################################################
# ### SWITCH WORKSPACE (SWAPPING TO CURRENT MONITOR) ###
@ -168,15 +150,15 @@ bind = SUPER, 9, focusworkspaceoncurrentmonitor, 9
# ### MOVE WINDOW TO WORKSPACE ###
# ################################
bind = SUPER_SHIFT, 1, movetoworkspacesilent, 1
bind = SUPER_SHIFT, 2, movetoworkspacesilent, 2
bind = SUPER_SHIFT, 3, movetoworkspacesilent, 3
bind = SUPER_SHIFT, 4, movetoworkspacesilent, 4
bind = SUPER_SHIFT, 5, movetoworkspacesilent, 5
bind = SUPER_SHIFT, 6, movetoworkspacesilent, 6
bind = SUPER_SHIFT, 7, movetoworkspacesilent, 7
bind = SUPER_SHIFT, 8, movetoworkspacesilent, 8
bind = SUPER_SHIFT, 9, movetoworkspacesilent, 9
bind = SUPER SHIFT, 1, movetoworkspacesilent, 1
bind = SUPER SHIFT, 2, movetoworkspacesilent, 2
bind = SUPER SHIFT, 3, movetoworkspacesilent, 3
bind = SUPER SHIFT, 4, movetoworkspacesilent, 4
bind = SUPER SHIFT, 5, movetoworkspacesilent, 5
bind = SUPER SHIFT, 6, movetoworkspacesilent, 6
bind = SUPER SHIFT, 7, movetoworkspacesilent, 7
bind = SUPER SHIFT, 8, movetoworkspacesilent, 8
bind = SUPER SHIFT, 9, movetoworkspacesilent, 9
# ###########################################
# ### MOVE WINDOW TO WORKSPACE + FOCUS IT ###
@ -196,18 +178,15 @@ bind = ALT, 9, movetoworkspace, 9
# ### CYCLE WORKSPACES (RELATIVE MOVEMENT) ###
# ############################################
bind = SUPER, mouse_down, workspace, +1
bind = SUPER, mouse_up, workspace, -1
bind = SUPER, bracketleft, workspace, -1
bind = SUPER, bracketright, workspace, +1
# ##########################################
# ### CYCLE MONITORS (RELATIVE MOVEMENT) ###
# ##########################################
bind = SUPER_SHIFT, bracketleft, focusmonitor, -1
bind = SUPER_SHIFT, bracketright, focusmonitor, +1
bind = SUPER SHIFT, bracketleft, focusmonitor, -1
bind = SUPER SHIFT, bracketright, focusmonitor, +1
# #######################
# ### WINDOW RESIZING ###
@ -222,54 +201,11 @@ binde = ALT, right, resizeactive, 10 0
binde = ALT, left, resizeactive, -10 0
binde = ALT, up, resizeactive, 0 -10
binde = ALT, down, resizeactive, 0 10
binde = ALT, H, resizeactive, -10 0
binde = ALT, K, resizeactive, 0 -10
binde = ALT, J, resizeactive, 0 10
binde = ALT, L, resizeactive, 10 0
## Precise keyboard resizing (submap)
bind = SUPER, slash, submap, resize
submap = resize
binde = , right, resizeactive, 10 0
binde = , left, resizeactive, -10 0
binde = , up, resizeactive, 0 -10
binde = , down, resizeactive, 0 10
binde = SUPER, right, resizeactive, 30 0
binde = SUPER, left, resizeactive, -30 0
binde = SUPER, up, resizeactive, 0 -30
binde = SUPER, down, resizeactive, 0 30
binde = SHIFT, right, resizeactive, 1 0
binde = SHIFT, left, resizeactive, -1 0
binde = SHIFT, up, resizeactive, 0 -1
binde = SHIFT, down, resizeactive, 0 1
binde = , H, resizeactive, -10 0
binde = , K, resizeactive, 0 -10
binde = , J, resizeactive, 0 10
binde = , L, resizeactive, 10 0
binde = , right, resizeactive, 10 0
binde = , left, resizeactive, -10 0
binde = , up, resizeactive, 0 -10
binde = , down, resizeactive, 0 10
binde = SUPER, H, resizeactive, -30 0
binde = SUPER, K, resizeactive, 0 -30
binde = SUPER, J, resizeactive, 0 30
binde = SUPER, L, resizeactive, 30 0
binde = SHIFT, H, resizeactive, -1 0
binde = SHIFT, K, resizeactive, 0 -1
binde = SHIFT, J, resizeactive, 0 1
binde = SHIFT, L, resizeactive, 1 0
bind = , escape, submap, reset
bind = , return, submap, reset
bind = SUPER, slash, submap, reset
submap = reset
binde = ALT, h, resizeactive, -10 0
binde = ALT, k, resizeactive, 0 -10
binde = ALT, j, resizeactive, 0 10
binde = ALT, l, resizeactive, 10 0
# ########################################################
# ### GLOBAL KEYBINDS (PASSING KEYS TO OTHER PROGRAMS) ###
@ -288,4 +224,3 @@ submap = isolate
bind = SUPER, End, exec, hyprctl dispatch submap reset && notify-send "Keybind isolation" "Keybind isolation off"
submap = reset
# vi: ft=hyprlang

View file

@ -1,23 +0,0 @@
general {
layout = dwindle
}
dwindle {
# Don't change the split (side/top) regardless
# of what happens to the container
preserve_split = true
# Scale down special workspaces (bigger borders)
special_scale_factor = 0.9
}
group {
# Add new windows in the group after the current window
# rather than after the group tail window
insert_after_current = true
# Focus the window that was just moved out of the group
focus_removed_window = true
}
# vi: ft=hyprlang

View file

@ -1,14 +1,12 @@
misc {
# Disable redundant renders (covered by wallpaper)
disable_hyprland_logo = true
disable_splash_rendering = true
# follow requests from windows to be focused
# Follow requests from windows to be focused
focus_on_activate = true
# Enable DPMS on these actions
mouse_move_enables_dpms = true
key_press_enables_dpms = true
}
# vi: ft=hyprlang
# Disable the primary clipboard (everyone uses Ctrl+C: unnamedplus,
# primary is not needed and can get annoying sometimes)
middle_click_paste = false
}

View file

@ -0,0 +1,11 @@
ecosystem {
enforce_permissions = true
}
permission = /usr/(lib|lib64)/xdg-portal-hyprland, screencopy, allow
permission = /usr/bin/grim, screencopy, allow
permission = /usr/bin/wf-recorder, screencopy, allow
permission = /usr/bin/hyprlock, screencopy, allow
# permission = /usr/(bin)/hyprpm, plugin, allow

View file

@ -1,28 +0,0 @@
# #######################
# ### LOADING PLUGINS ###
# #######################
exec-once=hyprpm reload -n
#exec-once=hyprctl plugin load $HOME/.local/share/hyprload/plugins/bin/dwindle-autogroup.so
# ################
# ### HYPRBARS ###
# ################
plugin {
hyprbars {
bar_height = 20
bar_color = rgb(505152)
col.text = rgb(ff0000)
bar_text_size = 10
# example buttons (R -> L)
# hyprbars-button = color, size, on-click
hyprbars-button = rgb(ff4040), 10, 󰖭, hyprctl dispatch killactive
hyprbars-button = rgb(eeee11), 10, , hyprctl dispatch fullscreen 1
}
}
# vi: ft=hyprlang

View file

@ -1,10 +1,34 @@
# ##############
# ### LAYOUT ###
# ##############
general {
layout = dwindle
}
dwindle {
# Allow pseudo-tiling (tiled window that retains it's floating size)
pseudotile = true
# Don't change the split regardless of what happens to the container
preserve_split = true
# Scale down special workspaces (bigger borders)
special_scale_factor = 0.95
}
group {
# Don't auto-insert newly created windows into a group
auto_group = false
}
# ###################
# ### WINDOW GAPS ###
# ###################
general {
gaps_in = 5
gaps_out = 8
gaps_out = 10
}
# ###############
@ -13,29 +37,29 @@ general {
decoration {
rounding = 8
rounding_power = 2
}
general {
border_size = 2
# Regular windows
col.active_border = rgba(FFA500FF) # orange
#col.active_border = rgba(FFFFFFEE) # white
col.inactive_border = rgba(666666AA) # transparent gray
col.active_border = rgba(ffa500ff) # orange
col.inactive_border = rgba(666666aa) # transparent gray
# Windows with nogroup property
col.nogroup_border_active = rgba(FF00FFFF) # purple
col.nogroup_border = rgba(FF00FFAA) # transparent purple
col.nogroup_border_active = rgba(ff00ffff) # purple
col.nogroup_border = rgba(ff00ffaa) # transparent purple
}
group {
# Groupped windows
col.border_active = rgba(00A500FF) # green
col.border_inactive = rgba(5AA500FF) # transparent green
col.border_active = rgba(00a500ff) # green
col.border_inactive = rgba(5aa500ff) # transparent green
# Locked groupped windows
col.border_locked_active = rgba(A0A500FF) # yellow
col.border_locked_inactive = rgba(A0A500AA) # transparent yellow
col.border_locked_active = rgba(a0a500ff) # yellow
col.border_locked_inactive = rgba(a0a500aa) # transparent yellow
}
# #################
@ -46,7 +70,7 @@ group {
groupbar {
# Title box above window
render_titles = false # disable, looks kinda bad
font_family = Monaspace Krypton
#font_family = Monaspace Krypton
font_size = 11
text_color = rgba(FFFFFFFF) # white
@ -71,12 +95,13 @@ group {
decoration {
shadow {
enabled = true # enable drop shadow
range = 20
render_power = 2
color = rgba(0F0F0FE6)
#color = rgba(FFA500FF)
color_inactive = rgba(0F0F0F99)
# I don't really need drop shadow, it just consumes more battery
# and I honestly don't see a huge difference with it on.
enabled = false
range = 4
render_power = 3
color = rgba(0f0f0fe6)
color_inactive = rgba(0f0f0f99)
}
}
@ -87,44 +112,49 @@ decoration {
decoration {
blur {
enabled = true
size = 8
size = 6
passes = 1
}
}
# ########################
# ### INACTIVE WINDOWS ###
# ########################
decoration {
#dim_inactive = true
dim_strength = 0.05
dim_special = 0.2
# inactive_opacity = 0.9
}
# ##################
# ### ANIMATIONS ###
# ##################
animations {
enabled = true
first_launch_animation = true # fade in on first launch
animation = windows, 1, 3, default, popin 50%
animation = border, 1, 4, default
animation = fade, 1, 4, default
animation = workspaces, 1, 3, default
bezier = easeOutQuint,0.23,1,0.32,1
bezier = easeInOutCubic,0.65,0.05,0.36,1
bezier = linear,0,0,1,1
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
animation = global, 1, 10, default
animation = border, 1, 5.39, easeOutQuint
animation = windows, 1, 4.79, easeOutQuint
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
animation = windowsOut, 1, 1.49, linear, popin 87%
animation = fadeIn, 1, 1.73, almostLinear
animation = fadeOut, 1, 1.46, almostLinear
animation = fade, 1, 3.03, quick
animation = layers, 1, 3.81, easeOutQuint
animation = layersIn, 1, 4, easeOutQuint, fade
animation = layersOut, 1, 1.5, linear, fade
animation = fadeLayersIn, 1, 1.79, almostLinear
animation = fadeLayersOut, 1, 1.39, almostLinear
animation = workspaces, 1, 1.94, almostLinear, fade
animation = workspacesIn, 1, 1.21, almostLinear, fade
animation = workspacesOut, 1, 1.94, almostLinear, fade
animation = specialWorkspace, 1, 2, default, slidefadevert
}
misc {
animate_manual_resizes = true
}
# #################
# ### WALLPAPER ###
# #################
# vi: ft=hyprlang
misc {
disable_hyprland_logo = true
disable_splash_rendering = true
force_default_wallpaper = -1
}

View file

@ -10,53 +10,20 @@ windowrulev2 = workspace 5, class:^(Spotify)$
windowrulev2 = workspace 6, class:^(Stremio)$
windowrulev2 = workspace 6, class:^(com.stremio.stremio)$
# #######################
# ### IDLE INHIBITION ###
# #######################
# #############################################
# ### CORRECT SIZE / AUTO TILE / AUTO FLOAT ###
# ############################################
windowrulev2 = idleinhibit focus, class:^(Stremio)$
windowrulev2 = idleinhibit focus, class:^(com.stremio.stremio)$
windowrulev2 = idleinhibit focus, class:^(mpv)$
windowrulev2 = idleinhibit focus, class:^(firefox)$,title:^(.+ - YouTube — Mozilla Firefox)$
windowrulev2 = idleinhibit focus, class:^(firefox)$,title:^(Picture-in-Picture)$
# ################################
# ### CORRECT SIZE / AUTO TILE ###
# ################################
windowrulev2 = size 800 550, class:^(qalculate-gtk)$
windowrulev2 = tile, class:^(Spotify)$
# ##################
# ### AUTO FLOAT ###
# ##################
windowrulev2 = float, class:^(Lxappearance)$
windowrulev2 = float, class:^(Rofi)$
windowrulev2 = float, class:^(feh)$
windowrulev2 = float, class:^(pavucontrol-qt)$
windowrulev2 = float, class:^(pavucontrol)$
windowrulev2 = float, class:^(file-roller)$
# Float and properly size qualculate
windowrulev2 = float, class:^(qalculate-gtk)$
windowrulev2 = float, class:^(com.github.wwmm.easyeffects)
windowrulev2 = float, class:^(opensnitch_ui)$
windowrulev2 = float, class:^(Brave-browser)$,title:^(_crx_.+)$
windowrulev2 = size 800 550, class:^(qalculate-gtk)$
## Float hyprland-share-picker & some extra actions
# Float hyprland-share-picker & some extra actions
windowrulev2 = float, class:^(hyprland-share-picker)$
windowrulev2 = center, class:^(hyprland-share-picker)$
windowrulev2 = animation slide, class:^(hyprland-share-picker)$
## Float firefox windows (like bookmark menus, or some extension windows)
windowrulev2 = float, class:^(firefox)$,title:^(Revert Bookmarks)$
windowrulev2 = float, class:^(firefox)$,title:^(Library)$
windowrulev2 = float, class:^(firefox)$,title:^(Extension: \(uBlock Origin\))
windowrulev2 = float, class:^(firefox)$,title:^(Extension: \(Bitwarden Password Manager\) - Bitwarden — Mozilla Firefox)$
windowrulev2 = float, class:^(firefox)$,title:^(Firefox — Sharing Indicator)$
windowrulev2 = float, class:^(firefox)$,title:^(Opening .+)$
windowrulev2 = float, class:^(firefox)$,title:^$
## Float some pcmanfm windows
# Float some pcmanfm windows
windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Mount)$
windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Preferences)$
windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Move files)$
@ -65,45 +32,21 @@ windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Copy Files)$
windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Confirm to replace files)$
windowrulev2 = float, class:^(pcmanfm-qt|)$,title:^(Choose an Application)$
## Float some qimgv windows
windowrulev2 = float, class:^(qimgv)$,title:^(Add shortcut)$
windowrulev2 = float, class:^(qimgv)$,title:^(Preferences — qimgv)$
## Float some windows from other apps
windowrulev2 = float, class:^(Spotify)$,title:^(Ozone X11)$
windowrulev2 = float, class:^(python3)$,title:^(Tor Browser Launcher Settings)$
windowrulev2 = float, class:^(python3)$,title:^(Tor Browser)$
## General float rules
windowrulev2 = float, class:^(file_progress)$
windowrulev2 = float, class:^(confirm)$
windowrulev2 = float, class:^(dialog)$
windowrulev2 = float, class:^(download)$
windowrulev2 = float, class:^(notification)$
windowrulev2 = float, class:^(error)$
windowrulev2 = float, class:^(splash)$
windowrulev2 = float, class:^(confirmreset)$
windowrulev2 = float, class:^(floating)$
## Float all windows that don't have a title nor a class
# Float all windows that don't have a title nor a class
windowrulev2 = float, class:^$,title:^$
# #############
# ### FIXES ###
# #############
# Other apps
windowrulev2 = float, class:^(file-roller)$
windowrulev2 = float, class:^(opensnitch_ui)$
windowrulev2 = float, class:^(Brave-browser)$,title:^(_crx_.+)$
windowrulev2 = float, class:^(qimgv)$,title:^(Add shortcut)$
# jetbrains
# ############
# ### MISC ###
# ############
windowrulev2 = center, class:^(jetbrains-.*)$,title:^(splash)$,floating:1
windowrulev2 = nofocus, class:^(jetbrains-.*)$,title:^(splash)$,floating:1
windowrulev2 = noborder, class:^(jetbrains-.*)$,title:^(splash)$,floating:1
windowrulev2 = center, class:^(jetbrains-.*)$,title:^( )$,floating:1
windowrulev2 = stayfocused, class:^(jetbrains-.*)$,title:^( )$,floating:1
windowrulev2 = noborder, class:^(jetbrains-.*)$,title:^( )$,floating:1
windowrulev2 = nofocus, class:^(jetbrains-.*)$,title:^(win.*)$,floating:1
windowrulev2 = noinitialfocus, class:^(jetbrains-.*)$,title:^(win.*)$
# Ignore maximize requests from apps.
windowrule = suppressevent maximize, class:.*
# Don't add borders to grim selections when taking screenshots
layerrule = noanim, ^(selection)$
# vi: ft=hyprlang
# Fix some dragging issues with XWayland
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0

View file

@ -3,9 +3,8 @@
# ######################
general {
disable_loading_bar = false
hide_cursor = true
grace = 3
fail_timeout = 2000
}
auth {
@ -13,9 +12,8 @@ auth {
#fingerprint:enabled = true
}
background {
path = ~/Media/Pictures/Wallpapers/Categories/Extra/origami.png
path = ~/Media/Pictures/Wallpapers/hyprlock-bg
blur_passes = 3
blur_size = 6
#contrast = 0.7
@ -222,5 +220,3 @@ label {
halign = left
valign = bottom
}
# vi: ft=hyprlang

View file

@ -1,4 +1,4 @@
$bg = $HOME/Media/Pictures/Wallpapers/active
$bg = $HOME/Media/Pictures/Wallpapers/active-bg
preload=$bg
wallpaper=,$bg # same wallpaper on all monitors

View file

@ -0,0 +1,9 @@
profile {
time = 7:30
identity = true
}
profile {
time = 23:30
temperature = 2700
}

View file

@ -1,3 +0,0 @@
screencopy {
allow_token_by_default = true
}

View file

@ -1,9 +0,0 @@
#!/bin/bash
set -euo pipefail
MONITOR_ID="$1"
MONITOR_NAME="$2"
MONITOR_DESCRIPTION="$3"
systemctl --user start eww-window@bar1.service
#eww open bar1

View file

@ -1,26 +0,0 @@
#!/bin/bash
set -euo pipefail
MONITORS_AMT="$(hyprctl monitors -j | jq length)"
if [ "$MONITORS_AMT" -lt 1 ]; then
>&2 echo "You seem to have 0 monitors..."
exit 1
fi
if [ "$MONITORS_AMT" -eq 2 ]; then
systemctl --user start eww-window@bar1.service
#eww open bar1
fi
if [ "$MONITORS_AMT" -eq 1 ]; then
if eww active-windows | grep "bar1"; then
systemctl --user stop eww-window@bar1.service
#eww close bar1
fi
fi
if [ "$MONITORS_AMT" -gt 2 ]; then
>&2 echo "Unexpected monitor configuration (more than 2 monitors)"
exit 1
fi

View file

@ -1,7 +0,0 @@
#!/bin/bash
set -euo pipefail
MONITOR_NAME="$1"
systemctl --user stop eww-window@bar1.service
# eww close bar1

View file

@ -53,7 +53,7 @@ select_by_word_characters :@-./_~?&=%+#
# Keybindings
map ctrl+alt+c copy_to_clipboard
map ctrl+alt+v paste_from_clipboard
map ctrl+c copy_or_interrupt
#map ctrl+c copy_or_interrupt
map ctrl+shift+, move_tab_backward
map ctrl+shift+. move_tab_forward
map ctrl+shift+0 tenth_window

View file

@ -1,6 +0,0 @@
#!/bin/sh
readonly PREVIEW_ID="preview"
printf '{"action": "remove", "identifier": "%s"}\n' "$PREVIEW_ID" > "$FIFO_UEBERZUG"

View file

@ -1,21 +0,0 @@
#!/bin/sh
path="$1"
x="$2"
y="$3"
width="$4"
height="$5"
PREVIEW_ID="preview"
if [ -n "$FIFO_UEBERZUG" ]; then
printf '{"action": "add", "identifier": "%s", "x": %d, "y": %d, "width": %d, "height": %d, "scaler": "contain", "scaling_position_x": 0.5, "scaling_position_y": 0.5, "path": "%s"}\n' \
"$PREVIEW_ID" "$x" "$y" "$width" "$height" "$path" > "$FIFO_UEBERZUG"
else
# Ueberzug isn't avialable, try to use pixterm
if command -v pixterm > /dev/null; then
pixterm -s 2 -tr "$x" -tc "$width" "$path"
else
>&2 echo "ueberzug not running, pixterm fallback not found!"
exit 1
fi
fi

View file

@ -1,144 +0,0 @@
# Basic settings
set previewer ~/.config/lf/previewer.sh
set cleaner ~/.config/lf/clear_img.sh
set preview true
set hidden true
set drawbox true
set icons true
set ignorecase true
set scrolloff 5
# Use $EDITOR for text
cmd open ${{
case $(file --mime-type "$f" -bL) in
text/*|application/json) $EDITOR "$f";;
*) devour xdg-open "$f" ;;
esac
}}
# File/Directory control functions
cmd mkdir %{{
printf "Directory Name: "
read ans
mkdir $ans
}}
cmd mkfile %{{
printf "File Name: "
read ans
touch $ans
}}
cmd chmod %{{
printf "Mode Bits: "
read ans
for file in "$fx"; do
chmod $ans $file
done
lf -remote 'send reload'
}}
# Add z.lua functionality for easy autojumps
cmd zlua %{{
printf "z.lua input: "
read ans
/usr/local/src/z.lua/z.lua $ans
}}
# Archive bindings
cmd unarchive ${{
case "$f" in
*.zip) unzip "$f" ;;
*.tar.gz) tar -xzvf "$f" ;;
*.tar.bz2) tar -xjvf "$f" ;;
*.tar) tar -xvf "$f" ;;
*) echo "Unsuported format" ;;
esac
}}
cmd zip %zip -r "$f" "$f"
cmd tar %tar cvf "$f.tar" "$f"
cmd targz %tar cvzf "%f.tar.gz" "$f"
cmd tarbz2 %tar cjvf "$f.tar.bz2" "$f"
# Trash-cli bindings
cmd trash ${{
files=$(printf "$fx" | tr '\n' ':')
while [ "$files" ]; do
# extract the substring from start of string up to delimeter.
# this is the first "element" of the string
file=${files%%:*}
trash-put "$(basename "$file")"
# if there's only one element left, set `files` to an empty string.
# this causes us to exit this `while` loop.
# else, we delete the first "element" of the string from files, and
# move onto the next.
if [ "$files" = "$file" ]; then
files=''
else
files="${files#*;}"
fi
done
}}
cmd clear_trash %trash-empty
cmd restore_trash ${{
trash-restore
}}
# Bindings
# Remove some defaults
map m
map n
map "'"
map '"'
map d
map c
# Archive mappings
map az zip
map at tar
map ag targz
map au unarchive
# Trash mappings
map dd trash
map tc clear_trash
map tr restore_trash
# Basic functions
map . set hidden!
map DD delete
map p paste
map x cut
map y copy
map <enter> open
map md mkdir
map mf mkfile
map ch chmod
map r rename
map H top
map L bottom
map R reload
map C clear
map z zlua
# Movement
map gh cd ~
map gc cd ~/.config
map gl cd ~/.local
map gs cd ~/.local/bin/scripts
map gtr cd ~/.local/share/Trash/files
map gE. cd /etc
map gEp cd /etc/portage
map gU. cd /usr
map gUs cd /usr/share
map gUl cd /usr/local
map gM cd /mnt

View file

@ -1,162 +0,0 @@
#!/bin/sh
# This script handles showing file-previews within lf.
# It can also show image previews using ueberzug, however
# that requires lf to be started with a script that also starts
# ueberzug alongside of it.
# (In my dotfiles, this script is in '~/.local/bin/scripts/lfu')
# Alternatively, we could also handle ANSI previews with pixterms
# this will be in a pretty low quiality, but it will work without
# ueberzug. To enable this, change PIXTERM_ENABLED to 1.
# if both ueberzug and pixterm are enabled, ueberzug takes precedence.
PIXTERM_ENABLED=1
run_cmd() {
# Try to run given command, if it is installed.
# If it isn't try to fallback to text_handle,
# otherwise fail completely.
cmd="$1"
shift
if command -v "$cmd" > /dev/null; then
$cmd $@
else
# If we didn't found the requested command, check if
# the file is text-like and try to use the text_handle
# to show the preview, this may not be ideal for given
# file-format, but at least we won't fail.
case $(file --mime-type "$1" -bL) in
# TODO: Consider checking for UTF-8 formatting instead,
# or show previews for any file-type
text/*|application/json)
echo "@@PREVIEW FALLBACK: Using text handle, $cmd command not found!"
text_handle "$1"
;;
*)
echo "@@PREVIEW ERROR: Preview failed, $cmd command not found!"
;;
esac
fi
}
draw_image() {
# Draw passed image with use of given draw_script.
# If the image contains EXIF (metadata) orientation info,
# handle it and draw the rotated image.
draw_script="$1"
file="$2"
shift
shift
# Calculate where the image should be placed on the screen.
num=$(printf "%0.f\n" "`echo "$(tput cols) / 2" | bc`")
numb=$(printf "%0.f\n" "`echo "$(tput cols) - $num - 1" | bc`")
numc=$(printf "%0.f\n" "`echo "$(tput lines) - 2" | bc`")
# Handle EXIF (metadata) orientation.
exif_orientation="$(identify -format '%[EXIF:Orientation]\n' -- "$file")"
if [ -n "$exif_orientation" ] && [ "$exif_orientation" != 1 ]; then
# In case `convert` command isn't aviable, ignore EXIF rotation
if command -v convert > /dev/null; then
cache=$(mktemp /tmp/thumbcache.XXXXX)
convert -- "$file" -auto-orient "$cache"
$draw_script "$cache" $num 1 $numb $numc
else
$draw_script "$file" $num 1 $numb $numc
fi
else
$draw_script "$file" $num 1 $numb $numc
fi
# Exit with status code 1 to signal lf that the function
# should be re-ran next time instead of caching the result.
exit 1
}
media_handle() {
# Handle media type files (videos, photos). These types of
# files are usually not stored in any form of textually readable
# format and they require a special way of displaying them.
# This mostly uses ueberzug (if available) for this.
draw_script="${XDG_CONFIG_HOME:-$HOME/.config}/lf/draw_img.sh"
file="$1"
shift
# Set ENABLED=1 if ueberzug or pixterm is enabled
command -v pixterm > /dev/null && [ "$PIXTERM_ENABLED" = 1 ] && ENABLED=1
[ -n "$FIFO_UEBERZUG" ] && [ -f "$draw_script" ] && ENABLED=1
case "$file" in
*.bmp|*.jpg|*.jpeg|*.png|*.xpm)
if [ -n "$ENABLED" ]; then
draw_image $draw_script "$file"
else
echo "@@PREVIEW FALLBACK: Using mediainfo, ueberzug isn't available."
run_cmd mediainfo "$file"
fi
;;
*.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|\
*.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx)
if [ -n "$ENABLED" ]; then
cache="$(mktemp /tmp/thumbcache.XXXXX)"
ffmpegthumbnailer -i "$file" -o "$cache" -s 0
draw_image $draw_script "$cache"
else
echo "@@PREVIEW FALLBACK: Using exiftool, ueberzug isn't aviable."
run_cmd exiftool "$file"
fi
;;
*.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.flac)
# These types can't make use of ueberzug easily, so simply use eixftool
run_cmd exiftool "$file"
;;
*)
echo "@@PREVIEW FALLBACK: Unrecognized media file, falling back to text handle."
text_handle "$file"
;;
esac
}
text_handle() {
# Handle all other formats as text and cat them
# if highlighting tools are aviable, try to use them
if command -v bat > /dev/null; then
num=$(printf "%0.f\n" "`echo "$(tput cols) / 2" | bc`")
numb=$(printf "%d\n" "`echo "$(tput cols) - $num - 3" | bc`")
bat -pp --color=always --wrap=character --terminal-width="$numb" "$1"
elif command -v highlight > /dev/null; then
highlight "$1" --out-format ansi --force
else
cat "$1"
fi
}
# Capture all directories at first, since they could
# potentionally match one of the file case statements
if [ -d "$1" ]; then
tree "$1" -La 1
elif [ -f "$1" ]; then
case "$1" in
*.tgz|*.tar.gz) run_cmd tar tzf "$1";;
*.tar.bz2|*.tbz2) run_cmd tar tjf "$1";;
*.tar.txz|*.txz) run_cmd xz --list "$1";;
*.tar) run_cmd tar tf "$1";;
*.zip|*.jar|*.war|*.ear|*.oxt) run_cmd unzip -l "$1";;
*.rar) run_cmd unrar l "$1";;
*.7z) run_cmd 7z l "$1";;
*.iso) run_cmd iso-info --no-header -l "$1";;
*.o) run_cmd nm "$1" | less ;;
*.csv) cat "$1" | sed s/,/\\n/g ;;
*odt,*.ods,*.odp,*.sxw) run_cmd odt2txt "$1";;
*.doc) run_cmd catdoc "$1" ;;
*.docx) run_cmd docx2txt "$1" - ;;
*.torrent) run_cmd transmission-show "$1";;
*.pdf) run_cmd pdftotext "$1";;
*.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.flac|\
*.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|\
*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx|\
*.bmp|*.jpg|*.jpeg|*.png|*.xpm) media_handle "$1" ;;
*) text_handle "$1" ;;
esac
fi

View file

@ -1,832 +0,0 @@
print_info() {
prin "$(color 16)┌─────────────────────$(color 12)SOFTWARE$(color 16)─────────────────────┐"
info "$(color 9)  OS" distro
info "$(color 9)  Kernel" kernel
info "$(color 9) 󰏗 Packages" packages
info "$(color 3)  Terminal" term
info "$(color 3)  Font" term_font
info "$(color 3)  Shell" shell
info "$(color 2)  DE/WM" de
info "$(color 2) 󰉼 Theme" theme
info "$(color 2) 󰀻 Icons" icons
prin "$(color 16)└──────────────────────────────────────────────────┘"
prin "$(color 16)┌─────────────────────$(color 12)HARDWARE$(color 16)─────────────────────┐"
info "$(color 5)  PC " model
info "$(color 4) 󰍛 CPU" cpu
info "$(color 4) 󰍹 GPU" gpu
info "$(color 4)  RAM" memory
# info "$(color 6)  Disk" disk
# info "$(color 6) 󱈑 BAT" battery
info "$(color 2) 󰅐 Uptime" uptime
info "$(color 2)  Resolution" resolution
prin "$(color 16)└──────────────────────────────────────────────────┘"
echo
prin "$(color 1)${dot}$(color 2)${dot}$(color 3)${dot}$(color 4)${dot}$(color 5)${dot}$(color 6)${dot}$(color 7)${dot}$(color 8)${dot}\n \n $(color 9)${dot}$(color 10)${dot}$(color 11)${dot}$(color 12)${dot}$(color 13)${dot}$(color 14)${dot}$(color 15)${dot}$(color 16)${dot}"
# prin "$(color 1) 1 $(color 2) 2 $(color 3) 3 $(color 4) 4 $(color 5) 5 $(color 6) 6 $(color 7) 7 $(color 8) 8 \n \n $(color 9) \n 9 $(color 10) 10 $(color 11) 11 $(color 12) 12 $(color 13) 13 $(color 14) 14 $(color 15) 15 $(color 16) 16 "
# prin "$(color 5) Eat  , $(color 3)Sleep  , $(color 6)Linux  ."
}
dot=" ⬤ "
##--------- Title
# Hide/Show Fully qualified domain name.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --title_fqdn
title_fqdn="off"
##--------- Kernel
# Shorten the output of the kernel function.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --kernel_shorthand
# Supports: Everything except *BSDs (except PacBSD and PC-BSD)
#
# Example:
# on: '4.8.9-1-ARCH'
# off: 'Linux 4.8.9-1-ARCH'
kernel_shorthand="on"
##--------- Distro
# Shorten the output of the distro function
#
# Default: 'off'
# Values: 'on', 'tiny', 'off'
# Flag: --distro_shorthand
# Supports: Everything except Windows and Haiku
distro_shorthand="off"
# Show/Hide OS Architecture.
# Show 'x86_64', 'x86' and etc in 'Distro:' output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --os_arch
#
# Example:
# on: 'Arch Linux x86_64'
# off: 'Arch Linux'
os_arch="on"
##--------- Uptime
# Shorten the output of the uptime function
#
# Default: 'on'
# Values: 'on', 'tiny', 'off'
# Flag: --uptime_shorthand
#
# Example:
# on: '2 days, 10 hours, 3 mins'
# tiny: '2d 10h 3m'
# off: '2 days, 10 hours, 3 minutes'
uptime_shorthand="on"
##--------- Memory
# Show memory pecentage in output.
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --memory_percent
#
# Example:
# on: '1801MiB / 7881MiB (22%)'
# off: '1801MiB / 7881MiB'
memory_percent="off"
# Change memory output unit.
#
# Default: 'mib'
# Values: 'kib', 'mib', 'gib'
# Flag: --memory_unit
#
# Example:
# kib '1020928KiB / 7117824KiB'
# mib '1042MiB / 6951MiB'
# gib: ' 0.98GiB / 6.79GiB'
memory_unit="mib"
##--------- Packages
# Show/Hide Package Manager names.
#
# Default: 'tiny'
# Values: 'on', 'tiny' 'off'
# Flag: --package_managers
#
# Example:
# on: '998 (pacman), 8 (flatpak), 4 (snap)'
# tiny: '908 (pacman, flatpak, snap)'
# off: '908'
package_managers="on"
##--------- Shell
# Show the path to $SHELL
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --shell_path
#
# Example:
# on: '/bin/bash'
# off: 'bash'
shell_path="off"
# Show $SHELL version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --shell_version
#
# Example:
# on: 'bash 4.4.5'
# off: 'bash'
shell_version="on"
##--------- CPU
# CPU speed type
#
# Default: 'bios_limit'
# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'.
# Flag: --speed_type
# Supports: Linux with 'cpufreq'
# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value.
speed_type="bios_limit"
# CPU speed shorthand
#
# Default: 'off'
# Values: 'on', 'off'.
# Flag: --speed_shorthand
# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz
#
# Example:
# on: 'i7-6500U (4) @ 3.1GHz'
# off: 'i7-6500U (4) @ 3.100GHz'
speed_shorthand="off"
# Enable/Disable CPU brand in output.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_brand
#
# Example:
# on: 'Intel i7-6500U'
# off: 'i7-6500U (4)'
cpu_brand="on"
# CPU Speed
# Hide/Show CPU speed.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --cpu_speed
#
# Example:
# on: 'Intel i7-6500U (4) @ 3.1GHz'
# off: 'Intel i7-6500U (4)'
cpu_speed="on"
# CPU Cores
# Display CPU cores in output
#
# Default: 'logical'
# Values: 'logical', 'physical', 'off'
# Flag: --cpu_cores
# Support: 'physical' doesn't work on BSD.
#
# Example:
# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores)
# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores)
# off: 'Intel i7-6500U @ 3.1GHz'
cpu_cores="logical"
# CPU Temperature
# Hide/Show CPU temperature.
# Note the temperature is added to the regular CPU function.
#
# Default: 'off'
# Values: 'C', 'F', 'off'
# Flag: --cpu_temp
# Supports: Linux, BSD
# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable
# coretemp kernel module. This only supports newer Intel processors.
#
# Example:
# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]'
# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]'
# off: 'Intel i7-6500U (4) @ 3.1GHz'
cpu_temp="on"
##--------- GPU
# Enable/Disable GPU Brand
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gpu_brand
#
# Example:
# on: 'AMD HD 7950'
# off: 'HD 7950'
gpu_brand="on"
# Which GPU to display
#
# Default: 'all'
# Values: 'all', 'dedicated', 'integrated'
# Flag: --gpu_type
# Supports: Linux
#
# Example:
# all:
# GPU1: AMD HD 7950
# GPU2: Intel Integrated Graphics
#
# dedicated:
# GPU1: AMD HD 7950
#
# integrated:
# GPU1: Intel Integrated Graphics
gpu_type="all"
##--------- Resolution
# Display refresh rate next to each monitor
# Default: 'off'
# Values: 'on', 'off'
# Flag: --refresh_rate
# Supports: Doesn't work on Windows.
#
# Example:
# on: '1920x1080 @ 60Hz'
# off: '1920x1080'
refresh_rate="off"
##--------- Gtk Theme / Icons / Font
# Shorten output of GTK Theme / Icons / Font
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --gtk_shorthand
#
# Example:
# on: 'Numix, Adwaita'
# off: 'Numix [GTK2], Adwaita [GTK3]'
gtk_shorthand="off"
# Enable/Disable gtk2 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk2
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Adwaita [GTK3]'
gtk2="on"
# Enable/Disable gtk3 Theme / Icons / Font
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --gtk3
#
# Example:
# on: 'Numix [GTK2], Adwaita [GTK3]'
# off: 'Numix [GTK2]'
gtk3="on"
##--------- IP Address
# Website to ping for the public IP
#
# Default: 'http://ident.me'
# Values: 'url'
# Flag: --ip_host
public_ip_host="http://ident.me"
# Public IP timeout.
#
# Default: '2'
# Values: 'int'
# Flag: --ip_timeout
public_ip_timeout=2
# Desktop Environment
# Show Desktop Environment version
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --de_version
de_version="on"
##--------- Disk
# Which disks to display.
# The values can be any /dev/sdXX, mount point or directory.
# NOTE: By default we only show the disk info for '/'.
#
# Default: '/'
# Values: '/', '/dev/sdXX', '/path/to/drive'.
# Flag: --disk_show
#
# Example:
# disk_show=('/' '/dev/sdb1'):
# 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 823G / 893G (93%)'
#
# disk_show=('/'):
# 'Disk (/): 74G / 118G (66%)'
#
disk_show=('/')
# Disk subtitle.
# What to append to the Disk subtitle.
#
# Default: 'mount'
# Values: 'mount', 'name', 'dir', 'none'
# Flag: --disk_subtitle
#
# Example:
# name: 'Disk (/dev/sda1): 74G / 118G (66%)'
# 'Disk (/dev/sdb2): 74G / 118G (66%)'
#
# mount: 'Disk (/): 74G / 118G (66%)'
# 'Disk (/mnt/Local Disk): 74G / 118G (66%)'
# 'Disk (/mnt/Videos): 74G / 118G (66%)'
#
# dir: 'Disk (/): 74G / 118G (66%)'
# 'Disk (Local Disk): 74G / 118G (66%)'
# 'Disk (Videos): 74G / 118G (66%)'
#
# none: 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
# 'Disk: 74G / 118G (66%)'
disk_subtitle="mount"
# Disk percent.
# Show/Hide disk percent.
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --disk_percent
#
# Example:
# on: 'Disk (/): 74G / 118G (66%)'
# off: 'Disk (/): 74G / 118G'
disk_percent="on"
##--------- Song
# Manually specify a music player.
#
# Default: 'auto'
# Values: 'auto', 'player-name'
# Flag: --music_player
#
# Available values for 'player-name':
#
# amarok
# audacious
# banshee
# bluemindo
# clementine
# cmus
# deadbeef
# deepin-music
# dragon
# elisa
# exaile
# gnome-music
# gmusicbrowser
# gogglesmm
# guayadeque
# io.elementary.music
# iTunes
# juk
# lollypop
# mocp
# mopidy
# mpd
# muine
# netease-cloud-music
# olivia
# playerctl
# pogo
# pragha
# qmmp
# quodlibet
# rhythmbox
# sayonara
# smplayer
# spotify
# strawberry
# tauonmb
# tomahawk
# vlc
# xmms2d
# xnoise
# yarock
music_player="auto"
# Format to display song information.
#
# Default: '%artist% - %album% - %title%'
# Values: '%artist%', '%album%', '%title%'
# Flag: --song_format
#
# Example:
# default: 'Song: Jet - Get Born - Sgt Major'
song_format="%artist% - %album% - %title%"
# Print the Artist, Album and Title on separate lines
#
# Default: 'off'
# Values: 'on', 'off'
# Flag: --song_shorthand
#
# Example:
# on: 'Artist: The Fratellis'
# 'Album: Costello Music'
# 'Song: Chelsea Dagger'
#
# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger'
song_shorthand="off"
# 'mpc' arguments (specify a host, password etc).
#
# Default: ''
# Example: mpc_args=(-h HOST -P PASSWORD)
mpc_args=()
##--------- Text Colors
# Text Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --colors
#
# Each number represents a different part of the text in
# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info'
#
# Example:
# colors=(distro) - Text is colored based on Distro colors.
# colors=(4 6 1 8 8 6) - Text is colored in the order above.
colors=(distro)
##--------- Text Options
# Toggle bold text
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bold
bold="on"
# Enable/Disable Underline
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --underline
underline_enabled="on"
# Underline character
#
# Default: '-'
# Values: 'string'
# Flag: --underline_char
underline_char="󰍴"
# Info Separator
# Replace the default separator with the specified string.
#
# Default: ':'
# Flag: --separator
#
# Example:
# separator="->": 'Shell-> bash'
# separator=" =": 'WM = dwm'
separator="$(color 8) ➜" #
##--------- Color Blocks
# Color block range
# The range of colors to print.
#
# Default: '0', '15'
# Values: 'num'
# Flag: --block_range
#
# Example:
#
# Display colors 0-7 in the blocks. (8 colors)
# neofetch --block_range 0 7
#
# Display colors 0-15 in the blocks. (16 colors)
# neofetch --block_range 0 15
block_range=(0 15)
# Toggle color blocks
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --color_blocks
color_blocks="on"
# Color block width in spaces
#
# Default: '3'
# Values: 'num'
# Flag: --block_width
block_width=3
# Color block height in lines
#
# Default: '1'
# Values: 'num'
# Flag: --block_height
block_height=1
# Color Alignment
#
# Default: 'auto'
# Values: 'auto', 'num'
# Flag: --col_offset
#
# Number specifies how far from the left side of the terminal (in spaces) to
# begin printing the columns, in case you want to e.g. center them under your
# text.
# Example:
# col_offset="auto" - Default behavior of neofetch
# col_offset=7 - Leave 7 spaces then print the colors
col_offset="auto"
##--------- Progress Bars
# Bar characters
#
# Default: '-', '='
# Values: 'string', 'string'
# Flag: --bar_char
#
# Example:
# neofetch --bar_char 'elapsed' 'total'
# neofetch --bar_char '-' '='
bar_char_elapsed="-"
bar_char_total="="
# Toggle Bar border
#
# Default: 'on'
# Values: 'on', 'off'
# Flag: --bar_border
bar_border="on"
# Progress bar length in spaces
# Number of chars long to make the progress bars.
#
# Default: '15'
# Values: 'num'
# Flag: --bar_length
bar_length=15
# Progress bar colors
# When set to distro, uses your distro's logo colors.
#
# Default: 'distro', 'distro'
# Values: 'distro', 'num'
# Flag: --bar_colors
#
# Example:
# neofetch --bar_colors 3 4
# neofetch --bar_colors distro 5
bar_color_elapsed="distro"
bar_color_total="distro"
# Info display
# Display a bar with the info.
#
# Default: 'off'
# Values: 'bar', 'infobar', 'barinfo', 'off'
# Flags: --cpu_display
# --memory_display
# --battery_display
# --disk_display
#
# Example:
# bar: '[---=======]'
# infobar: 'info [---=======]'
# barinfo: '[---=======] info'
# off: 'info'
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
##--------- Backend Settings
# Image backend.
#
# Default: 'ascii'
# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off',
# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty'
# Flag: --backend
image_backend="ascii"
# Image Source
#
# Which image or ascii file to display.
#
# Default: 'auto'
# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/'
# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")'
# Flag: --source
#
# NOTE: 'auto' will pick the best image source for whatever image backend is used.
# In ascii mode, distro ascii art will be used and in an image mode, your
# wallpaper will be used.
image_source="auto"
##--------- Ascii Options
# Ascii distro
# Which distro's ascii art to display.
#
# Default: 'auto'
# Values: 'auto', 'distro_name'
# Flag: --ascii_distro
# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS",
# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs,
# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock,
# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD,
# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS,
# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover,
# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin,
# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary,
# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD,
# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo,
# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra,
# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion,
# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite,
# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva,
# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib,
# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner,
# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba,
# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD,
# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint,
# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix,
# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan,
# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific,
# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz,
# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS,
# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails,
# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio,
# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin,
# and IRIX have ascii logos
# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants.
# Use '{distro name}_old' to use the old logos.
# NOTE: Ubuntu has flavor variants.
# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME,
# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors.
# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu,
# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android,
# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola,
# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS,
# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian,
# postmarketOS, and Void have a smaller logo variant.
# Use '{distro name}_small' to use the small variants.
ascii_distro="auto"
# Ascii Colors
#
# Default: 'distro'
# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num'
# Flag: --ascii_colors
#
# Example:
# ascii_colors=(distro) - Ascii is colored based on Distro colors.
# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors.
# ascii_colors=(1 2 3 4 5 6 7 8)
# 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=2
# 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"

View file

@ -19,7 +19,7 @@ DesktopCellMargins=@Size(3 1)
DesktopIconSize=48
DesktopShortcuts=@Invalid()
FgColor=#ffffff
Font="Sans Serif,9,-1,5,50,0,0,0,0,0"
Font="Sans Serif,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
HideItems=false
LastSlide=
OpenWithDefaultFileManager=false
@ -84,7 +84,7 @@ SIUnit=false
SuCommand=lxqt-sudo %s
TemplateRunApp=false
TemplateTypeOnce=false
Terminal=alacritty
Terminal=kitty
[Thumbnail]
MaxExternalThumbnailFileSize=-1
@ -102,9 +102,9 @@ MountRemovable=true
AlwaysShowTabs=true
FixedHeight=480
FixedWidth=640
LastWindowHeight=657
LastWindowHeight=571
LastWindowMaximized=true
LastWindowWidth=962
LastWindowWidth=466
PathBarButtons=true
RememberWindowSize=true
ReopenLastTabs=false
@ -113,6 +113,7 @@ ShowTabClose=true
SidePaneMode=places
SidePaneVisible=true
SplitView=false
SplitViewTabsNum=0
SplitterPos=150
SwitchToNewTab=false
TabPaths=@Invalid()

View file

@ -1,844 +0,0 @@
[General]
version=5.0.1
allow_multiple_instances=-1
width=800
always_on_top=0
enable_tooltips=1
keep_function_dialog_open=0
error_info_shown=1
save_mode_on_exit=1
save_definitions_on_exit=1
clear_history_on_exit=0
save_history_separately=0
history_expression_type=2
ignore_locale=0
load_global_definitions=1
auto_update_exchange_rates=-1
local_currency_conversion=1
use_binary_prefixes=0
check_version=0
show_keypad=1
show_history=0
history_height=318
minimal_width=500
show_stack=1
show_convert=0
persistent_keypad=0
minimal_mode=0
show_bases_keypad=1
continuous_conversion=1
set_missing_prefixes=0
rpn_keys=1
display_expression_status=1
parsed_expression_in_resultview=0
enable_completion=1
enable_completion2=1
completion_min=1
completion_min2=1
completion_delay=0
calculate_as_you_type_history_delay=2000
use_unicode_signs=1
lower_case_numbers=0
duodecimal_symbols=0
exp_display=3
imaginary_j=0
base_display=1
twos_complement=1
hexadecimal_twos_complement=0
twos_complement_input=0
hexadecimal_twos_complement_input=0
programming_outbase=10
programming_inbase=10
spell_out_logical_operators=1
caret_as_xor=0
close_with_esc=-1
digit_grouping=1
copy_ascii=0
copy_ascii_without_units=0
decimal_comma=-1
dot_as_separator=-1
comma_as_separator=0
gtk_theme=1
vertical_button_padding=-1
horizontal_button_padding=-1
use_custom_result_font=0
use_custom_expression_font=0
use_custom_status_font=0
use_custom_keypad_font=0
use_custom_history_font=0
use_custom_application_font=0
multiplication_sign=2
division_sign=1
automatic_number_fraction_format=1
expression_history=95czk
expression_history=135czk
expression_history=127czk
expression_history=127
expression_history=comb(30,2)×comb(25,2)×comb(20,1)
expression_history=8!/(5!×3!)×8
expression_history=comb(8, 3)×8
expression_history=comb(8, 3)
expression_history=4!×2
expression_history=9×9×8×7×6×5
expression_history=6!
expression_history=2520/7!
expression_history=7!
expression_history=comb(45, 2)
expression_history=(comb(64, 3))comb(8,3)×8
expression_history=(comb(64, 3))comb(8,3)
expression_history=(comb(64, 3))
expression_history=(comb(56, 2)×comb(8, 1))×(comb(56, 1)×comb(8, 2))
expression_history=(comb(56, 2)×comb(8, 1))+(comb(56, 1)×comb(8, 2))
expression_history=comb(32, 2)×comb(32, 1)×2
expression_history=4!×3!×2!×3!
expression_history=8!
expression_history=5×4
expression_history=5×4×3
expression_history=3!×3×2×2
expression_history=5!×2
expression_history=4!
expression_history=4!×2×2
expression_history=(5!)×2
expression_history=5!
expression_history=6×5×4×3×2×1
expression_history=6×5×4×6×2×1
expression_history=10!/(8!)
expression_history=comb(8, 2)×comb(10, 4)+comb(8, 1)×comb(10, 5)+comb(10, 6)
expression_history=comb(10,2)×comb(8,4)
expression_history=comb(10,2)+comb(8,4)
expression_history=comb(10,2)+comb(16,4)
expression_history=10×9×16×15×14×13
expression_history=4×4×3×2
expression_history=3×4×3×2
expression_history=3×4×3
expression_history=2×4×3×2
expression_history=2×4×3×2×1
expression_history=comb(8, 2)
expression_history=8C2
expression_history=8×7
expression_history=10!/(5!×5!)
expression_history=10!/5!
expression_history=7!/((75)!×5!)
expression_history=8!/((85)!×5!)
expression_history=8!/((85)!)
expression_history=8!/(85)!
expression_history=8×7×6
expression_history=4!×3!
expression_history=172669722332860×15×1000
expression_history=172669722344860×2
expression_history=500/280
expression_history=498/280
expression_history=480×2
expression_history=1280480
expression_history=((86400000/1000)/60)/60
expression_history=(86400000/1000)/60
expression_history=86400000/1000
expression_history=34.8usd
expression_history=5015
expression_history=22usd
expression_history=180/20
expression_history=log2(652618)
expression_history=652618
expression_history=bin(652618)
expression_history=14500/4
expression_history=80/8
expression_history=324×25
expression_history=300×25
expression_history=638/7
expression_history=2××7
expression_history=(15000×300)/3.6
expression_history=15000×300
expression_history=250czk
expression_history=5000czk
expression_history=5czk
expression_history=5k
expression_history=1504.32/60
expression_history=1504.32czk/60eur
expression_history=30eur/1504.32czk
expression_history=183.75czk
expression_history=735/4
expression_history=(3688czk)3625czk
expression_history=(3688czk)3625
expression_history=3688czk
expression_history=14500czk/4
expression_history=14500czk
expression_history=184czk
expression_history=735czk/4
expression_history=735czk
expression_history=35000czk
expression_history=20000czk
expression_history=29×3
expression_history=(60×20)/60
expression_history=60×20
history_time=1727342283
history_expression=95czk
history_parse=95CZK to EUR
history_result_approximate=€3.781395534
history_time=1727342267
history_expression=135czk
history_parse=135CZK to EUR
history_result_approximate=€5.373562075
history_time=1727342265
history_expression=127czk
history_parse=127CZK to EUR
history_result_approximate=€5.055128766
history_time=1727342263
history_expression=127
history_parse=127
history_result=127
history_time=1727342256
history_expression=135czk
history_parse=135CZK
history_result_approximate=$6.015165386
history_time=1727342258
history_result_approximate=CVE 592.5426900
history_result_approximate=537.3562075eurocents
history_time=1727342259
history_result_approximate=€5.373562075
history_time=1727292570
history_expression=comb(30,2)×comb(25,2)×comb(20,1)
history_parse=comb(30, 2) × comb(25, 2) × comb(20, 1)
history_result=2610000
history_time=1727292525
history_expression=8!/(5!×3!)×8
history_parse=(factorial(8) (factorial(5) × factorial(3))) × 8
history_result=448
history_time=1727292493
history_expression=comb(8, 3)×8
history_parse=comb(8, 3) × 8
history_result=448
history_time=1727292489
history_expression=comb(8, 3)
history_parse=comb(8, 3)
history_result=56
history_time=1727292470
history_expression=4!×2
history_parse=factorial(4) × 2
history_result=48
history_time=1727292259
history_expression=9×9×8×7×6×5
history_parse=9 × 9 × 8 × 7 × 6 × 5
history_result=136080
history_time=1727292219
history_expression=6!
history_parse=factorial(6)
history_result=720
history_time=1727281361
history_expression=2520/7!
history_parse=2520 factorial(7)
history_result=0.5
history_time=1727281337
history_expression=7!
history_parse=factorial(7)
history_result=5040
history_time=1727280771
history_expression=comb(45, 2)
history_parse=comb(45, 2)
history_result=990
history_time=1727280717
history_expression=(comb(64, 3))comb(8,3)×8
history_parse=comb(64, 3) (comb(8, 3) × 8)
history_result=41216
history_time=1727280688
history_expression=(comb(64, 3))comb(8,3)
history_parse=comb(64, 3) comb(8, 3)
history_result=41608
history_time=1727280639
history_expression=(comb(64, 3))
history_parse=comb(64, 3)
history_result=41664
history_time=1727280572
history_expression=(comb(56, 2)×comb(8, 1))×(comb(56, 1)×comb(8, 2))
history_parse=(comb(56, 2) × comb(8, 1)) × (comb(56, 1) × comb(8, 2))
history_result=19317760
history_time=1727280500
history_expression=(comb(56, 2)×comb(8, 1))+(comb(56, 1)×comb(8, 2))
history_parse=(comb(56, 2) × comb(8, 1)) + (comb(56, 1) × comb(8, 2))
history_result=13888
history_time=1727280492
history_expression=(comb(56, 2)×comb(8, 1))×(comb(56, 1)×comb(8, 2))
history_parse=(comb(56, 2) × comb(8, 1)) × (comb(56, 1) × comb(8, 2))
history_result=19317760
history_time=1727280408
history_expression=comb(32, 2)×comb(32, 1)×2
history_parse=comb(32, 2) × comb(32, 1) × 2
history_result=31744
history_time=1727280364
history_expression=4!×3!×2!×3!
history_parse=factorial(4) × factorial(3) × factorial(2) × factorial(3)
history_result=1728
history_time=1727280317
history_expression=8!
history_parse=factorial(8)
history_result=40320
history_time=1727280292
history_expression=5×4
history_parse=5 × 4
history_result=20
history_time=1727280285
history_expression=5×4×3
history_parse=5 × 4 × 3
history_result=60
history_time=1727280190
history_expression=3!×3×2×2
history_parse=factorial(3) × 3 × 2 × 2
history_result=72
history_time=1727279907
history_expression=5!×2
history_parse=factorial(5) × 2
history_result=240
history_time=1727279831
history_expression=4!
history_parse=factorial(4)
history_result=24
history_time=1727279830
history_expression=4!×2
history_parse=factorial(4) × 2
history_result=48
history_time=1727279778
history_expression=4!×2×2
history_parse=factorial(4) × 2 × 2
history_result=96
history_time=1727279719
history_expression=(5!)×2
history_parse=factorial(5) × 2
history_result=240
history_time=1727279715
history_expression=5!
history_parse=factorial(5)
history_result=120
history_time=1727279713
history_expression=6!
history_parse=factorial(6)
history_result=720
history_time=1727279701
history_expression=5!
history_parse=factorial(5)
history_result=120
history_time=1727279632
history_expression=6×5×4×3×2×1
history_parse=6 × 5 × 4 × 3 × 2 × 1
history_result=720
history_time=1727279622
history_expression=6×5×4×6×2×1
history_parse=6 × 5 × 4 × 6 × 2 × 1
history_result=1440
history_time=1727279485
history_expression=6×5×4×6×2×1
history_parse=6 × 5 × 4 × 6 × 2 × 1
history_result=1440
history_time=1727279609
history_result=(8 × 10<sup>29</sup> 89009813) × √(α) × q<sub>P</sub>
history_time=1727279432
history_expression=10!/(8!)
history_parse=factorial(10) factorial(8)
history_result=90
history_time=1727279388
history_expression=comb(8, 2)×comb(10, 4)+comb(8, 1)×comb(10, 5)+comb(10, 6)
history_parse=(comb(8, 2) × comb(10, 4)) + (comb(8, 1) × comb(10, 5)) + comb(10, 6)
history_result=8106
history_time=1727279314
history_expression=comb(10,2)×comb(8,4)
history_parse=comb(10, 2) × comb(8, 4)
history_result=3150
history_time=1727279296
history_expression=comb(10,2)+comb(8,4)
history_parse=comb(10, 2) + comb(8, 4)
history_result=115
history_time=1727279276
history_expression=comb(10,2)+comb(16,4)
history_parse=comb(10, 2) + comb(16, 4)
history_result=1865
history_time=1727279232
history_expression=10×9×16×15×14×13
history_parse=10 × 9 × 16 × 15 × 14 × 13
history_result=3931200
history_time=1727279148
history_expression=4×4×3×2
history_parse=4 × 4 × 3 × 2
history_result=96
history_time=1727279136
history_expression=3×4×3×2
history_parse=3 × 4 × 3 × 2
history_result=72
history_time=1727279114
history_expression=3×4×3
history_parse=3 × 4 × 3
history_result=36
history_time=1727278893
history_expression=2×4×3×2
history_parse=2 × 4 × 3 × 2
history_result=48
history_time=1727278843
history_expression=2×4×3×2×1
history_parse=2 × 4 × 3 × 2 × 1
history_result=48
history_time=1727278684
history_expression=comb(8, 2)
history_parse=comb(8, 2)
history_result=28
history_time=1727278667
history_expression=8C2
history_parse=8coulomb<sup>2</sup>
history_result=8C<sup>2</sup>
history_time=1727278616
history_expression=8×7
history_parse=8 × 7
history_result=56
history_time=1727278554
history_expression=10!/(5!×5!)
history_parse=factorial(10) (factorial(5) × factorial(5))
history_result=252
history_time=1727278540
history_expression=10!/5!
history_parse=factorial(10) factorial(5)
history_result=30240
history_time=1727278512
history_expression=7!/((75)!×5!)
history_parse=factorial(7) (factorial(7 5) × factorial(5))
history_result=21
history_time=1727278486
history_expression=8!/((85)!×5!)
history_parse=factorial(8) (factorial(8 5) × factorial(5))
history_result=56
history_time=1727278425
history_expression=8!/(85)!
history_parse=factorial(8) factorial(8 5)
history_result=6720
history_time=1727278231
history_expression=8×7×6
history_parse=8 × 7 × 6
history_result=336
history_time=1727276103
history_expression=4!×3!
history_parse=factorial(4) × factorial(3)
history_result=144
history_time=1726696097
history_expression=172669722332860×15×1000
history_parse=1726697223328 (60 × 15 × 1000)
history_result=1726696323328
history_time=1726696068
history_expression=172669722344860×2
history_parse=1726697223448 (60 × 2)
history_result=1726697223328
history_time=1726619113
history_expression=500/280
history_parse=500 280
history_result=25 14
history_time=1726619106
history_expression=498/280
history_parse=498 280
history_result=249 140
history_time=1726593466
history_expression=480×2
history_parse=480 × 2
history_result=960
history_time=1726592811
history_expression=1280480
history_parse=1280 480
history_result=800
history_time=1726523587
history_expression=((86400000/1000)/60)/60
history_parse=((86400000 1000) 60) 60
history_result=24
history_time=1726523579
history_expression=(86400000/1000)/60
history_parse=(86400000 1000) 60
history_result=1440
history_time=1726523576
history_expression=86400000/1000
history_parse=86400000 1000
history_result=86400
history_time=1726496554
history_expression=34.8usd
history_parse=34.8USD
history_result=$34.8
history_time=1726496555
history_result_approximate=CVE 3449.034694
history_result_approximate=3127.808736eurocents
history_time=1726496556
history_result_approximate=€31.27808736
history_time=1726234180
history_expression=5015
history_parse=50 15
history_result=35
history_time=1726162266
history_expression=22usd
history_parse=22USD
history_result=$22
history_time=1726162273
history_result_approximate=CVE 2202.196805
history_result_approximate=1997.095134eurocents
history_time=1726162274
history_result_approximate=€19.97095134
history_time=1726060907
history_expression=180/20
history_parse=180 20
history_result=9
history_time=1726046557
history_expression=log2(652618)
history_parse=log<sub>2</sub>(652618)
history_result_approximate=19.31587925
history_time=1726046521
history_expression=652618
history_parse=652618
history_result=652618
history_time=1726046530
history_result=0000 0000 0000 1001 1111 0101 0100 1010<sub><small>2</small></sub>
history_time=1726046551
history_result=652618
history_time=1726046517
history_expression=bin(652618)
history_parse=bin(<i>"652618"</i>)
history_error=Character '6' was ignored in the number "652618" with base 2.
history_error=Character '5' was ignored in the number "652618" with base 2.
history_error=Character '2' was ignored in the number "652618" with base 2.
history_error=Character '8' was ignored in the number "652618" with base 2.
history_result=1
history_time=1726046512
history_expression=652618
history_parse=652618
history_result=652618
history_time=1725978858
history_expression=14500/4
history_parse=14500 4
history_result=3625
history_time=1725574098
history_expression=80/8
history_parse=80 8
history_result=10
history_time=1725463240
history_expression=324×25
history_parse=324 × 25
history_result=8100
history_time=1725463233
history_expression=300×25
history_parse=300 × 25
history_result=7500
history_time=1725105187
history_expression=638/7
history_parse=638 7
history_result_approximate=91.14285714
history_time=1725104792
history_expression=2××7
history_parse=2<sup>7</sup>
history_result=128
history_time=1724192718
history_expression=(15000×300)/3.6
history_parse=(15000 × 300) 3.6
history_result=1250000
history_time=1724192715
history_expression=15000×300
history_parse=15000 × 300
history_result=4500000
history_time=1724173179
history_expression=250czk
history_parse=250CZK
history_result_approximate=$11.01438906
history_time=1724173180
history_result_approximate=CVE 1095.774704
history_result_approximate=993.7196915eurocents
history_time=1724173181
history_result_approximate=€9.937196915
history_time=1724172274
history_expression=5000czk
history_parse=5000CZK
history_result_approximate=$220.2877812
history_time=1724172276
history_result_approximate=CDF 630288.4268
history_time=1724172277
history_result_approximate=CVE 21915.49408
history_result_approximate=19874.39383eurocents
history_time=1724172278
history_result_approximate=€198.7439383
history_time=1724172270
history_expression=5czk
history_parse=5CZK
history_result_approximate=$0.2202877812
history_time=1724172207
history_expression=5k
history_parse=5 × 1000
history_result=5000
history_time=1724171979
history_expression=1504.32/60
history_parse=1504.32 60
history_result=25.072
history_time=1724171974
history_expression=1504.32czk/60eur
history_parse=(1504.32CZK) (60EUR)
history_result_approximate=0.9965816043
history_time=1724171966
history_expression=30eur/1504.32czk
history_parse=(30EUR) (1504.32CZK)
history_result_approximate=0.5017150606
history_time=1724171791
history_expression=5000czk
history_parse=5000CZK
history_result_approximate=$220.2877812
history_time=1724167931
history_expression=183.75czk
history_parse=183.75CZK
history_result_approximate=$8.095575960
history_time=1724167933
history_result_approximate=CVE 805.3944073
history_result_approximate=730.3839733eurocents
history_time=1724167935
history_result_approximate=€7.303839733
history_time=1724167917
history_expression=735/4
history_parse=735 4
history_result=183.75
history_time=1724167611
history_expression=(3688czk)3625czk
history_parse=(3688CZK) (3625CZK) to EUR
history_result_approximate=€2.504173623
history_time=1724167609
history_expression=(3688czk)3625
history_parse=(3688CZK) 3625 to EUR
history_result_approximate=€146.5935289 3625.000000
history_time=1724167603
history_expression=3688czk
history_parse=3688CZK to EUR
history_result_approximate=€146.5935289
history_time=1724167540
history_expression=14500czk/4
history_parse=(14500CZK) 4 to EUR
history_result_approximate=€144.0893553
history_time=1724167532
history_expression=14500czk
history_parse=14500CZK
history_result_approximate=$638.8345655
history_time=1724167534
history_result_approximate=CVE 63554.93282
history_result_approximate=57635.74211eurocents
history_time=1724167535
history_result_approximate=€576.3574211
history_time=1724167230
history_expression=183.75czk
history_parse=183.75CZK
history_result_approximate=$8.095575960
history_time=1724167237
history_result_approximate=CVE 805.3944073
history_result_approximate=730.3839733eurocents
history_time=1724167238
history_result_approximate=€7.303839733
history_time=1724167225
history_expression=735/4
history_parse=735 4
history_result=183.75
history_time=1724167222
history_expression=184czk
history_parse=184CZK
history_result_approximate=$8.106590349
history_time=1724167207
history_expression=735/4
history_parse=735 4
history_result=183.75
history_time=1724167172
history_expression=735czk/4
history_parse=(735CZK) 4
history_result_approximate=$8.095575960
history_time=1724167168
history_expression=735czk
history_parse=735CZK
history_result_approximate=$32.38230384
history_time=1724166888
history_expression=14500/4
history_parse=14500 4
history_result=3625
history_time=1724080135
history_expression=35000czk
history_parse=35000CZK
history_result_approximate=$1534.629284
history_time=1724080106
history_expression=20000czk
history_parse=20000CZK
history_result_approximate=$876.9310194
history_time=1724013854
history_expression=29×3
history_parse=29 × 3
history_result=87
history_time=1724013476
history_expression=(60×20)/60
history_parse=(60 × 20) 60
history_result=20
history_time=1724013473
history_expression=60×20
history_parse=60 × 20
history_result=1200
history_time=1724013442
history_expression=24+24+12
history_parse=24 + 24 + 12
history_result=60
history_time=1723541887
history_expression=38+15
history_parse=38 + 15
history_result=53
history_time=1723541880
history_expression=(4333)+5
history_parse=(43 33) + 5
history_result=15
history_time=1723541879
history_expression=4333
history_parse=43 33
history_result=10
history_time=1723319641
history_expression=11mA×1kohm
history_parse=(11milliamperes) × (1kiloohm)
history_result=11V
history_time=1723319554
history_expression=220ohm×54mA
history_parse=(220ohms) × (54milliamperes)
history_result=11.88V
history_time=1723317250
history_expression=1.5k×7mA
history_parse=(1.5 × 1000) × (7milliamperes)
history_result=10.5A
history_time=1723317195
history_expression=12.5V/5mA
history_parse=(12.5volts) (5milliamperes)
history_result=2.5
history_time=1723317115
history_expression=11k×7×10^3
history_parse=(11 × 1000) × 7 × 10<sup>3</sup>
history_result=77
history_time=1723317084
history_expression=11k×7m
history_parse=(11 × 1000) × (7meters)
history_result=77km
history_time=1723317016
history_expression=12/(1×10^3)
history_parse=12 (1 × 10<sup>3</sup>)
history_result=12000
history_time=1723316369
history_expression=12V/200ohm
history_parse=(12volts) (200ohms)
history_result=60mA
history_time=1723316359
history_expression=12v/200ohm
history_parse=12 (200ohms)
history_error=Trailing characters "v" (not a valid variable/function/unit) in number "12v" were ignored.
history_result=60mS
history_time=1723232596
history_expression=190ml/8.3s
history_parse=(190milliliters) (8.3seconds)
history_result_approximate=22.89156627mL s
history_time=1723059809
history_expression=(10800/60)/60
history_parse=(10800 60) 60
history_result=3
history_time=1723059807
history_expression=10800/60
history_parse=10800 60
history_result=180
history_time=1722970501
history_expression=0.98××30
history_parse=0.98<sup>30</sup>
history_result_approximate=0.5454843194
history_time=1722855354
history_expression=10cad
history_parse=10CAD to EUR
history_result_approximate=€6.651147323
history_time=1722855343
history_expression=10×52
history_parse=10 × 52
history_result=520
history_time=1722855320
history_expression=43×52
history_parse=43 × 52
history_result=2236
history_time=1722855280
history_expression=65.7cad
history_parse=65.7CAD
history_result_approximate=$47.34682408
history_time=1722855292
history_result_approximate=CVE 4818.582640
history_time=1722855293
history_result_approximate=4369.803791eurocents
history_time=1722855294
history_result_approximate=€43.69803791
history_time=1722855269
history_expression=42.85+22.85
history_parse=42.85 + 22.85
history_result=65.7
recent_functions=
recent_variables=
recent_units=
latest_button_currency=USD
[Mode]
min_deci=0
use_min_deci=0
max_deci=2
use_max_deci=0
precision=10
interval_arithmetic=1
interval_display=0
min_exp=-1
negative_exponents=0
sort_minus_last=1
number_fraction_format=1
complex_number_form=0
use_prefixes=1
use_prefixes_for_all_units=0
use_prefixes_for_currencies=0
abbreviate_names=1
all_prefixes_enabled=0
denominator_prefix_enabled=1
place_units_separately=1
auto_post_conversion=3
mixed_units_conversion=3
number_base=10
number_base_expression=10
read_precision=0
assume_denominators_nonzero=1
warn_about_denominators_assumed_nonzero=1
structuring=1
angle_unit=1
functions_enabled=1
variables_enabled=1
calculate_functions=1
calculate_variables=1
variable_units_enabled=1
sync_units=1
unknownvariables_enabled=0
units_enabled=1
allow_complex=1
allow_infinite=1
indicate_infinite_series=0
show_ending_zeroes=1
rounding_mode=0
approximation=0
interval_calculation=1
concise_uncertainty_input=0
calculate_as_you_type=0
in_rpn_mode=0
chain_mode=0
limit_implicit_multiplication=0
parsing_mode=0
simplified_percentage=1
implicit_question_asked=1
spacious=1
excessive_parenthesis=0
visible_keypad=0
short_multiplication=1
default_assumption_type=4
default_assumption_sign=0
[Plotting]
plot_legend_placement=2
plot_style=0
plot_smoothing=0
plot_display_grid=1
plot_full_border=0
plot_min=0
plot_max=10
plot_step=1
plot_sampling_rate=1001
plot_use_sampling_rate=1
plot_variable=x
plot_rows=0
plot_type=0
plot_color=1
plot_linewidth=2

View file

@ -18,13 +18,14 @@ expandLimit=2
firstRun=false
focusPointIn1to1Mode=1
folderEndAction=0
folderViewIconSize=120
imageScrolling=1
infoBarFullscreen=true
infoBarWindowed=false
jxlAnimation=false
keepFitMode=false
lastVerMajor=1
lastVerMicro=2
lastVerMicro=3
lastVerMinor=0
loopSlideshow=false
mpvBinary=/nix/store/sz3h6s8p2r22v76m0yr6fn3m663sms7r-mpv-with-scripts-0.37.0/bin/mpv

View file

@ -9,5 +9,6 @@ overlay=#1a1a1a
overlay_text=#d2d2d2
scrollbar=#5a5a5a
text=#b6b6b6
tid=-1
widget=#252525
widget_border=#2c2c2c

View file

@ -1,2 +0,0 @@
[default]
license = "GPL-3.0-or-later"

View file

@ -9,10 +9,9 @@ alias suod='sudo '
alias sduo='sudo '
# Replacements (adding flags)
alias cp='cp -iv' # Ask before overwriting, verbose
alias mv='mv -iv' # Ask before overwriting, verbose
alias cp='cp -i' # Ask before overwriting
alias mv='mv -i' # Ask before overwriting
alias rmt='trash-put' # Use trash-cli instead of true removal
alias rm='rm -v' # Verbose rm (asking before deleting is too annoying here)
alias rmr='rm -r'
alias rmrf='rm -rf'
alias wget='wget -c' # Resume wget by default
@ -69,7 +68,6 @@ alias cfnvim='vim ~/.config/nvim'
alias cfvim='cfnvim'
alias cfgit='vim ~/.config/git/config'
alias cfhypr='vim ~/.config/hypr'
alias cfsway='vim ~/.config/sway/config'
# zoxide shortcuts
alias j='z' # for the sake of old habits from autojump
@ -138,7 +136,6 @@ alias iptlistfw='iptables -L FORWARD -n -v --line-numbers' # FORWARD rules
alias ufw-log='journalctl -f -n 100 -g ufw' # Show UFW log entries in system journal
# System actions
alias sv='systemctl'
alias pacnew="find / -name '*.pacnew' 2>/dev/null" # Search for all new configurations after pacman update
alias backup="rsync -avHAXS --delete --filter='dir-merge /.rsync-filter'" # Make full rsync backup, respecting .rsync-filter files for exclusions
#alias upload='curl -F "f:1=<-" ix.io' # ix.io was offline for about 10 months now...
@ -149,7 +146,6 @@ alias auth-log='journalctl SYSLOG_FACILITY=10 -r'
alias cpu-stress='for i in $(seq $(getconf _NPROCESSORS_ONLN)); do yes > /dev/null & done' # Run `yes > /dev/null` on all cores as stress test
alias cpu-power='sudo turbostat --Summary --quiet --show PkgWatt --interval 1'
alias nvidia='__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia' # Run app with nvidia (on hybrid mode with optimus)
alias swapout='sudo swapoff -a; sudo swapon -a' # Reset swap (move everything to RAM)
alias mount-ram='mount -t tmpfs tmpfs' # Mount RAM disk for fast filesystem
alias screenlock='xset s activate' # Use DPMS to trigger xss-lock and handle screen locking
@ -231,11 +227,9 @@ alias vimwiki='vim -c VimwikiIndex' # Open vimwiki index
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias tty-clock='tty-clock -Ssc' # Terminal clock screensaver
alias rick='curl -s -L https://raw.githubusercontent.com/ItsDrike/rickrollrc/master/roll.sh| bash' # Terminal rickroll
alias nf='neofetch'
alias hist='fc -lt "$HISTTIMEFORMAT" 1'
alias sudovim='sudoedit'
alias cls='clear'
alias wh='which'
# Kitty terminal kitten shorthands
if [ "$TERM" = "xterm=kitty" ]; then

View file

@ -14,6 +14,7 @@ if [ -d "$HOME/.local/bin" ]; then
PATH+=":$(find -L ~/.local/bin -type d | tr '\n' ':' | sed 's/:$//')"
fi
# Add all NPM global binaries to PATH
if [ -d "$HOME/.local/share/npm/bin" ]; then
PATH+=":$HOME/.local/share/npm/bin"
fi
@ -30,7 +31,7 @@ uid="$(id -u)"
# Default programs
export EDITOR="nvim"
export BROWSER="firefox"
export TERMINAL="alacritty"
export TERMINAL="kitty"
export DIFFPROG="nvim -d"
export FILEMANAGER="pcmanfm-qt"
@ -43,7 +44,7 @@ export XDG_STATE_HOME="$HOME/.local/state"
export XDG_BIN_HOME="$HOME/.local/bin"
# XDG User directories (should match ~/.config/user-dirs.dirs)
#export XDG_DESKTOP_DIR="$HOME/Desktop"
export XDG_DESKTOP_DIR="$HOME/Desktop"
export XDG_DOWNLOAD_DIR="$HOME/Downloads"
export XDG_TEMPLATES_DIR="$XDG_DATA_HOME/templates"
export XDG_PUBLICSHARE_DIR="$XDG_DATA_HOME/public"
@ -53,15 +54,13 @@ export XDG_PICTURES_DIR="$HOME/Media/Pictures"
export XDG_VIDEOS_DIR="$HOME/Media/Videos"
export XDG_SCREENSHOTS_DIR="$HOME/Media/Pictures/Screenshots"
# ZSH dirs
# ZSH settings
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
export ZSH_CACHE="$HOME/.cache/zsh"
export HISTFILE="$ZSH_CACHE/history"
export ZSH_COMPDUMP="$ZSH_CACHE/zcompdump-${ZSH_VERSION:-}"
# Per-Application XDG settings
export XINITRC="$XDG_CONFIG_HOME/x11/xinitrc"
#export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority" # This line will break some DMs.
export LESSHISTFILE="-"
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc":"$XDG_CONFIG_HOME/gtk-2.0/gtkrc.mine"
export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc"
@ -81,7 +80,6 @@ export RANDFILE="$XDG_CACHE_HOME/rnd"
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc.py"
export PYTHONPYCACHEPREFIX="$XDG_CACHE_HOME/python"
export PYTHONUSERBASE="$XDG_DATA_HOME/python"
export _ZL_DATA="$XDG_DATA_HOME/zlua"
export SQLITE_HISTORY="$XDG_DATA_HOME/sqlite_history"
export WAKATIME_HOME="$XDG_CONFIG_HOME/wakatime"
export IPYTHONDIR="$XDG_CONFIG_HOME/ipython"
@ -140,8 +138,6 @@ fi
export HISTTIMEFORMAT="%Y-%m-%d %T "
export SUDO_ASKPASS="$HOME/.local/bin/scripts/gui/prompt/menupass"
export PIPENV_VENV_IN_PROJECT=1 # Force pipenv to create new environments within projects ./.venv
export XSECURELOCK_SHOW_HOSTNAME=0 # Don't show hostname in xsecurelock
export XSECURELOCK_SHOW_DATETIME=1 # Show current date and time in xsecurelock
# Remove irrelevant variables added for posix compatibility
unset posix

View file

@ -0,0 +1 @@
--ozone-platform-hint=auto

View file

@ -5,12 +5,12 @@
"layer": "overlay",
"control-center-layer": "top",
"layer-shell": true,
"cssPriority": "application",
"cssPriority": "user",
"control-center-margin-top": 0,
"control-center-margin-bottom": 0,
"control-center-margin-right": 0,
"control-center-margin-left": 0,
"notification-2fa-action": true,
"notification-2fa-action": false,
"notification-inline-replies": false,
"notification-icon-size": 48,
"notification-body-image-height": 100,

View file

@ -1,14 +0,0 @@
[Unit]
Description=Show a notification when the battery is low
Requires=graphical-session.target
[Service]
Type=oneshot
ExecStart=%h/.local/bin/scripts/gui/battery-notification
RemainAfterExit=false
Restart=on-failure
Slice=background-graphical.slice
[Install]
WantedBy=graphical-session.target

View file

@ -1,12 +0,0 @@
[Unit]
Description=Timer for low battery notification sendout
After=graphical-session.target
Requires=graphical-session.target
PartOf=graphical-session.target
[Timer]
OnUnitActiveSec=20s
[Install]
WantedBy=graphical-session.target

View file

@ -0,0 +1,34 @@
[Unit]
Description=Clipboard history "manager" for Wayland
After=graphical-session.target
PartOf=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/wl-paste --watch /usr/bin/cliphist -max-items 10 store
Restart=on-failure
# Use the background slice rather than the session slice. Cliphist isn't
# a fundamental part of the graphical session experience.
Slice=background-graphical.slice
CPUQuota=2%
# Cliphist allows storng up to 5 MB per item entries, with 10 entries
# limit, this means 50 MB. Annoyingly, it seems to load all entries
# even when it's just writing a single new one (during `cliphist store`),
# so we need to account for this. See:
# https://github.com/sentriz/cliphist/issues/155 to understand
#
# If the above issue gets addressed, these limits can likely be lowered.
MemoryHigh=60M
MemoryMax=120M
# Because of the issue above, significantly increase the likelihood of
# this process getting terminated during OOM I don't really care that
# much about a clipboard manager staying up anyways.
OOMScoreAdjust=300
[Install]
WantedBy=graphical-session.target

View file

@ -1,13 +0,0 @@
[Unit]
Description=Clipman clipboard manager
After=graphical-session.target
Requires=graphical-session.target
[Service]
ExecStart=/usr/bin/wl-paste -t text --watch /usr/bin/clipman store --no-persist
Restart=on-failure
Slice=background-graphical.slice
[Install]
WantedBy=graphical-session.target

View file

@ -0,0 +1,14 @@
[Service]
# Place dconf in session.slice instead of the default app.slice.
#
# Do not use session-graphical.slice here: it is tied to
# graphical-session.target, which dconf should not have to wait for,
# since it can be used outside of graphical sessions as well.
#
# Some compositors read certain gsettings values early in their
# initialization. These compositors are themselves a requirement for
# graphical-session.target. If dconf were in session-graphical.slice,
# systemd would delay starting it until graphical-session.target was
# reached, meaning dconf would not respond in time and compositor
# startup might stall, or even fail.
Slice=session.slice

View file

@ -1 +0,0 @@
/usr/lib/systemd/user/systemd-lock-handler.service

View file

@ -0,0 +1,15 @@
[Unit]
Description=Elephant data provider and executor backend for application launchers
Documentation=https://github.com/abenz1267/elephant
After=graphical-session.target
PartOf=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/elephant
Restart=on-failure
Slice=session-graphical.slice
[Install]
WantedBy=graphical-session.target

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