Major rewrite (new install)

This commit is contained in:
ItsDrike 2025-09-02 22:38:05 +02:00
parent 4e89803237
commit e78b421565
Signed by: ItsDrike
GPG key ID: FA2745890B7048C0
158 changed files with 2542 additions and 5238 deletions

View file

@ -122,7 +122,6 @@ umount /mnt
```bash ```bash
mount -o subvol=root,noatime,lazytime,commit=120,compress=zstd:1 /dev/mapper/cryptfs /mnt 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 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 noatime,lazytime,commit=120,compress=zstd:1 /dev/mapper/cryptfs /mnt/.btrfs
mount --mkdir -o subvol=swap /dev/mapper/cryptfs /mnt/swap mount --mkdir -o subvol=swap /dev/mapper/cryptfs /mnt/swap
@ -166,10 +165,10 @@ cd ~/dots
./install_root.sh ./install_root.sh
``` ```
Enter a fish shell for a better experience Enter the ZSH shell for a better experience
```bash ```bash
fish zsh
``` ```
Create non-privileged user Create non-privileged user
@ -181,7 +180,6 @@ install -o itsdrike -g itsdrike -d /home/itsdrike
mv ~/dots /home/itsdrike mv ~/dots /home/itsdrike
chown -R itsdrike:itsdrike /home/itsdrike/dots chown -R itsdrike:itsdrike /home/itsdrike/dots
passwd itsdrike passwd itsdrike
chsh -s /usr/bin/zsh itsdrike
su -l itsdrike su -l itsdrike
fish fish
``` ```
@ -200,6 +198,13 @@ exit
su -l itsdrike su -l itsdrike
``` ```
Setup neovim
```bash
git clone https://github.com/ItsDrike/lazyvim ~/.config/nvim
nvim --headless "+Lazy! sync" +qa
```
## Fstab adjustments ## Fstab adjustments
Finally, we'll want to make some slight modifications to `/etc/fstab` file, so 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 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 / 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 /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 /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 /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}')" shell="$(getent passwd "$USER" | awk -F: '{print $NF}')"
command=("$@") 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[@]}" exec "$shell" -c 'exec "$@"' "$script_name" "${command[@]}"
``` ```
@ -150,3 +157,5 @@ command = "tuigreet --time --remember --remember-user-session --asterisks --gree
# in the `video` group. # in the `video` group.
user = "greeter" 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 { source = ~/.config/hypr/hyprland.d/permissions.conf
# cursor_inactive_timeout = 10 source = ~/.config/hypr/hyprland.d/keybinds.conf
# 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/input.conf source = ~/.config/hypr/hyprland.d/input.conf
source = ~/.config/hypr/hyprland.d/style.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/window_rules.conf
source = ~/.config/hypr/hyprland.d/gestures.conf
source = ~/.config/hypr/hyprland.d/misc.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 # 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 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 # Mirror the primary (laptop) monitor on externals
#monitor= , preferred, auto, 1, mirror, eDP-1 #monitor= , preferred, auto, 1, mirror, eDP-1
# Extend on externals # Extend on externals
@ -34,3 +37,4 @@ input {
} }
# vi: ft=hyprlang # vi: ft=hyprlang

View file

@ -12,34 +12,65 @@ $XF86Favorites = 164
bind = SUPER, W, killactive, bind = SUPER, W, killactive,
bind = SUPER, F, togglefloating, bind = SUPER, F, togglefloating,
bind = SUPER, Space, fullscreen, 0 # regular fullscreen bind = SUPER SHIFT, S, layoutmsg, togglesplit
bind = SUPER_SHIFT, Space, fullscreen, 1 # maximize without client fullscreen bind = SUPER, P, pseudo
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
# ##################### # #####################
# ### DE/WM CONTROL ### # ### DE/WM CONTROL ###
# ##################### # #####################
bind = SUPER_SHIFT, Q, exec, uwsm app -- menuquit bind = SUPER CTRL, L, exec, loginctl lock-session
bind = SUPER_CTRL, L, exec, loginctl lock-session bind = SUPER SHIFT, L, exec, uwsm app -- wlogout -p layer-shell
bind = SUPER_SHIFT, L, exec, uwsm app -- wlogout -p layer-shell bind = SUPER SHIFT, T, exec, toggle-idle
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 ### # ### SCREENSHOTS ###
@ -50,58 +81,28 @@ $SCREENSHOT_FORMAT = "${XDG_SCREENSHOTS_DIR:-$HOME/Media/Pictures/Screenshots}/S
$SCREENSHOT_DELAY = 2000 $SCREENSHOT_DELAY = 2000
$PRINTSCR_KEY = Print #Menu # Print $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 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 = 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 = 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 = 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 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 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 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 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 # XF86Favorites key for recording
# (don't question me, I had it free) # (don't question me, I had it free)
bind = , 164, exec, uwsm app -- quick-record --notify toggle bind = , 164, exec, uwsm app -- quick-record --notify toggle
bind = SUPER, 164, exec, uwsm -- app quick-record 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 ### # ### WINDOW GROUPS ###
# ##################### # #####################
bind = SUPER, G, togglegroup, bind = SUPER, G, togglegroup,
bind = SUPER_SHIFT, G, lockactivegroup, toggle bind = SUPER SHIFT, G, lockactivegroup, toggle
bind = ALT, tab, changegroupactive, f bind = ALT, tab, changegroupactive, f
bind = ALT, grave, changegroupactive, b bind = ALT, grave, changegroupactive, b
@ -122,33 +123,14 @@ bind = SUPER, k, movefocus, u
bind = SUPER, j, movefocus, d bind = SUPER, j, movefocus, d
# ####################################### # #######################################
# ### MOVE ACTIVE WINDOW IN DIRECTION ### # ### MOVE FLOATING OR ACTIVE WINDOWS ###
# ####################################### # #######################################
bind = SUPER_ALT, h, movewindow, l $floatMoveSize = 100
bind = SUPER_ALT, l, movewindow, r bind = SUPER ALT, h, exec, hyprland-move-window $floatMoveSize l
bind = SUPER_ALT, k, movewindow, u bind = SUPER ALT, l, exec, hyprland-move-window $floatMoveSize r
bind = SUPER_ALT, j, movewindow, d bind = SUPER ALT, k, exec, hyprland-move-window $floatMoveSize u
bind = SUPER ALT, j, exec, hyprland-move-window $floatMoveSize 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
# ###################################################### # ######################################################
# ### SWITCH WORKSPACE (SWAPPING TO CURRENT MONITOR) ### # ### SWITCH WORKSPACE (SWAPPING TO CURRENT MONITOR) ###
@ -168,15 +150,15 @@ bind = SUPER, 9, focusworkspaceoncurrentmonitor, 9
# ### MOVE WINDOW TO WORKSPACE ### # ### MOVE WINDOW TO WORKSPACE ###
# ################################ # ################################
bind = SUPER_SHIFT, 1, movetoworkspacesilent, 1 bind = SUPER SHIFT, 1, movetoworkspacesilent, 1
bind = SUPER_SHIFT, 2, movetoworkspacesilent, 2 bind = SUPER SHIFT, 2, movetoworkspacesilent, 2
bind = SUPER_SHIFT, 3, movetoworkspacesilent, 3 bind = SUPER SHIFT, 3, movetoworkspacesilent, 3
bind = SUPER_SHIFT, 4, movetoworkspacesilent, 4 bind = SUPER SHIFT, 4, movetoworkspacesilent, 4
bind = SUPER_SHIFT, 5, movetoworkspacesilent, 5 bind = SUPER SHIFT, 5, movetoworkspacesilent, 5
bind = SUPER_SHIFT, 6, movetoworkspacesilent, 6 bind = SUPER SHIFT, 6, movetoworkspacesilent, 6
bind = SUPER_SHIFT, 7, movetoworkspacesilent, 7 bind = SUPER SHIFT, 7, movetoworkspacesilent, 7
bind = SUPER_SHIFT, 8, movetoworkspacesilent, 8 bind = SUPER SHIFT, 8, movetoworkspacesilent, 8
bind = SUPER_SHIFT, 9, movetoworkspacesilent, 9 bind = SUPER SHIFT, 9, movetoworkspacesilent, 9
# ########################################### # ###########################################
# ### MOVE WINDOW TO WORKSPACE + FOCUS IT ### # ### MOVE WINDOW TO WORKSPACE + FOCUS IT ###
@ -196,18 +178,15 @@ bind = ALT, 9, movetoworkspace, 9
# ### CYCLE WORKSPACES (RELATIVE MOVEMENT) ### # ### CYCLE WORKSPACES (RELATIVE MOVEMENT) ###
# ############################################ # ############################################
bind = SUPER, mouse_down, workspace, +1
bind = SUPER, mouse_up, workspace, -1
bind = SUPER, bracketleft, workspace, -1 bind = SUPER, bracketleft, workspace, -1
bind = SUPER, bracketright, workspace, +1 bind = SUPER, bracketright, workspace, +1
# ########################################## # ##########################################
# ### CYCLE MONITORS (RELATIVE MOVEMENT) ### # ### CYCLE MONITORS (RELATIVE MOVEMENT) ###
# ########################################## # ##########################################
bind = SUPER_SHIFT, bracketleft, focusmonitor, -1 bind = SUPER SHIFT, bracketleft, focusmonitor, -1
bind = SUPER_SHIFT, bracketright, focusmonitor, +1 bind = SUPER SHIFT, bracketright, focusmonitor, +1
# ####################### # #######################
# ### WINDOW RESIZING ### # ### WINDOW RESIZING ###
@ -222,54 +201,11 @@ binde = ALT, right, resizeactive, 10 0
binde = ALT, left, resizeactive, -10 0 binde = ALT, left, resizeactive, -10 0
binde = ALT, up, resizeactive, 0 -10 binde = ALT, up, resizeactive, 0 -10
binde = ALT, down, 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) binde = ALT, h, resizeactive, -10 0
bind = SUPER, slash, submap, resize binde = ALT, k, resizeactive, 0 -10
submap = resize binde = ALT, j, resizeactive, 0 10
binde = ALT, 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, 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
# ######################################################## # ########################################################
# ### GLOBAL KEYBINDS (PASSING KEYS TO OTHER PROGRAMS) ### # ### 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" bind = SUPER, End, exec, hyprctl dispatch submap reset && notify-send "Keybind isolation" "Keybind isolation off"
submap = reset 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 { misc {
# Disable redundant renders (covered by wallpaper) # Follow requests from windows to be focused
disable_hyprland_logo = true
disable_splash_rendering = true
# follow requests from windows to be focused
focus_on_activate = true focus_on_activate = true
# Enable DPMS on these actions # Enable DPMS on these actions
mouse_move_enables_dpms = true mouse_move_enables_dpms = true
key_press_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 ### # ### WINDOW GAPS ###
# ################### # ###################
general { general {
gaps_in = 5 gaps_in = 5
gaps_out = 8 gaps_out = 10
} }
# ############### # ###############
@ -13,29 +37,29 @@ general {
decoration { decoration {
rounding = 8 rounding = 8
rounding_power = 2
} }
general { general {
border_size = 2 border_size = 2
# Regular windows # Regular windows
col.active_border = rgba(FFA500FF) # orange col.active_border = rgba(ffa500ff) # orange
#col.active_border = rgba(FFFFFFEE) # white col.inactive_border = rgba(666666aa) # transparent gray
col.inactive_border = rgba(666666AA) # transparent gray
# Windows with nogroup property # Windows with nogroup property
col.nogroup_border_active = rgba(FF00FFFF) # purple col.nogroup_border_active = rgba(ff00ffff) # purple
col.nogroup_border = rgba(FF00FFAA) # transparent purple col.nogroup_border = rgba(ff00ffaa) # transparent purple
} }
group { group {
# Groupped windows # Groupped windows
col.border_active = rgba(00A500FF) # green col.border_active = rgba(00a500ff) # green
col.border_inactive = rgba(5AA500FF) # transparent green col.border_inactive = rgba(5aa500ff) # transparent green
# Locked groupped windows # Locked groupped windows
col.border_locked_active = rgba(A0A500FF) # yellow col.border_locked_active = rgba(a0a500ff) # yellow
col.border_locked_inactive = rgba(A0A500AA) # transparent yellow col.border_locked_inactive = rgba(a0a500aa) # transparent yellow
} }
# ################# # #################
@ -46,7 +70,7 @@ group {
groupbar { groupbar {
# Title box above window # Title box above window
render_titles = false # disable, looks kinda bad render_titles = false # disable, looks kinda bad
font_family = Monaspace Krypton #font_family = Monaspace Krypton
font_size = 11 font_size = 11
text_color = rgba(FFFFFFFF) # white text_color = rgba(FFFFFFFF) # white
@ -71,12 +95,13 @@ group {
decoration { decoration {
shadow { shadow {
enabled = true # enable drop shadow # I don't really need drop shadow, it just consumes more battery
range = 20 # and I honestly don't see a huge difference with it on.
render_power = 2 enabled = false
color = rgba(0F0F0FE6) range = 4
#color = rgba(FFA500FF) render_power = 3
color_inactive = rgba(0F0F0F99) color = rgba(0f0f0fe6)
color_inactive = rgba(0f0f0f99)
} }
} }
@ -87,44 +112,49 @@ decoration {
decoration { decoration {
blur { blur {
enabled = true enabled = true
size = 8 size = 6
passes = 1 passes = 1
} }
} }
# ########################
# ### INACTIVE WINDOWS ###
# ########################
decoration {
#dim_inactive = true
dim_strength = 0.05
dim_special = 0.2
# inactive_opacity = 0.9
}
# ################## # ##################
# ### ANIMATIONS ### # ### ANIMATIONS ###
# ################## # ##################
animations { animations {
enabled = true enabled = true
first_launch_animation = true # fade in on first launch
animation = windows, 1, 3, default, popin 50% bezier = easeOutQuint,0.23,1,0.32,1
animation = border, 1, 4, default bezier = easeInOutCubic,0.65,0.05,0.36,1
animation = fade, 1, 4, default bezier = linear,0,0,1,1
animation = workspaces, 1, 3, default 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 animation = specialWorkspace, 1, 2, default, slidefadevert
} }
misc {
animate_manual_resizes = true
}
# ################# # #################
# ### WALLPAPER ### # ### 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:^(Stremio)$
windowrulev2 = workspace 6, class:^(com.stremio.stremio)$ windowrulev2 = workspace 6, class:^(com.stremio.stremio)$
# ####################### # #############################################
# ### IDLE INHIBITION ### # ### CORRECT SIZE / AUTO TILE / AUTO FLOAT ###
# ####################### # ############################################
windowrulev2 = idleinhibit focus, class:^(Stremio)$ # Float and properly size qualculate
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)$
windowrulev2 = float, class:^(qalculate-gtk)$ windowrulev2 = float, class:^(qalculate-gtk)$
windowrulev2 = float, class:^(com.github.wwmm.easyeffects) windowrulev2 = size 800 550, class:^(qalculate-gtk)$
windowrulev2 = float, class:^(opensnitch_ui)$
windowrulev2 = float, class:^(Brave-browser)$,title:^(_crx_.+)$
## Float hyprland-share-picker & some extra actions # Float hyprland-share-picker & some extra actions
windowrulev2 = float, class:^(hyprland-share-picker)$ windowrulev2 = float, class:^(hyprland-share-picker)$
windowrulev2 = center, class:^(hyprland-share-picker)$ windowrulev2 = center, class:^(hyprland-share-picker)$
windowrulev2 = animation slide, class:^(hyprland-share-picker)$ windowrulev2 = animation slide, class:^(hyprland-share-picker)$
## Float firefox windows (like bookmark menus, or some extension windows) # Float some pcmanfm 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
windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Mount)$ windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Mount)$
windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Preferences)$ windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Preferences)$
windowrulev2 = float, class:^(pcmanfm-qt)$,title:^(Move files)$ 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:^(Confirm to replace files)$
windowrulev2 = float, class:^(pcmanfm-qt|)$,title:^(Choose an Application)$ windowrulev2 = float, class:^(pcmanfm-qt|)$,title:^(Choose an Application)$
## Float some qimgv windows # Float all windows that don't have a title nor a class
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
windowrulev2 = float, class:^$,title:^$ windowrulev2 = float, class:^$,title:^$
# ############# # Other apps
# ### FIXES ### 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 # Ignore maximize requests from apps.
windowrulev2 = nofocus, class:^(jetbrains-.*)$,title:^(splash)$,floating:1 windowrule = suppressevent maximize, class:.*
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.*)$
# Don't add borders to grim selections when taking screenshots # Fix some dragging issues with XWayland
layerrule = noanim, ^(selection)$ windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
# vi: ft=hyprlang

View file

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

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

View file

@ -53,7 +53,7 @@ select_by_word_characters :@-./_~?&=%+#
# Keybindings # Keybindings
map ctrl+alt+c copy_to_clipboard map ctrl+alt+c copy_to_clipboard
map ctrl+alt+v paste_from_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_backward
map ctrl+shift+. move_tab_forward map ctrl+shift+. move_tab_forward
map ctrl+shift+0 tenth_window 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

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

View file

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

View file

@ -14,6 +14,7 @@ if [ -d "$HOME/.local/bin" ]; then
PATH+=":$(find -L ~/.local/bin -type d | tr '\n' ':' | sed 's/:$//')" PATH+=":$(find -L ~/.local/bin -type d | tr '\n' ':' | sed 's/:$//')"
fi fi
# Add all NPM global binaries to PATH
if [ -d "$HOME/.local/share/npm/bin" ]; then if [ -d "$HOME/.local/share/npm/bin" ]; then
PATH+=":$HOME/.local/share/npm/bin" PATH+=":$HOME/.local/share/npm/bin"
fi fi
@ -30,7 +31,7 @@ uid="$(id -u)"
# Default programs # Default programs
export EDITOR="nvim" export EDITOR="nvim"
export BROWSER="firefox" export BROWSER="firefox"
export TERMINAL="alacritty" export TERMINAL="kitty"
export DIFFPROG="nvim -d" export DIFFPROG="nvim -d"
export FILEMANAGER="pcmanfm-qt" export FILEMANAGER="pcmanfm-qt"
@ -43,7 +44,7 @@ export XDG_STATE_HOME="$HOME/.local/state"
export XDG_BIN_HOME="$HOME/.local/bin" export XDG_BIN_HOME="$HOME/.local/bin"
# XDG User directories (should match ~/.config/user-dirs.dirs) # 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_DOWNLOAD_DIR="$HOME/Downloads"
export XDG_TEMPLATES_DIR="$XDG_DATA_HOME/templates" export XDG_TEMPLATES_DIR="$XDG_DATA_HOME/templates"
export XDG_PUBLICSHARE_DIR="$XDG_DATA_HOME/public" 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_VIDEOS_DIR="$HOME/Media/Videos"
export XDG_SCREENSHOTS_DIR="$HOME/Media/Pictures/Screenshots" export XDG_SCREENSHOTS_DIR="$HOME/Media/Pictures/Screenshots"
# ZSH dirs # ZSH settings
export ZDOTDIR="$XDG_CONFIG_HOME/zsh" export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
export ZSH_CACHE="$HOME/.cache/zsh" export ZSH_CACHE="$HOME/.cache/zsh"
export HISTFILE="$ZSH_CACHE/history" export HISTFILE="$ZSH_CACHE/history"
export ZSH_COMPDUMP="$ZSH_CACHE/zcompdump-${ZSH_VERSION:-}" export ZSH_COMPDUMP="$ZSH_CACHE/zcompdump-${ZSH_VERSION:-}"
# Per-Application XDG settings # 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 LESSHISTFILE="-"
export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc":"$XDG_CONFIG_HOME/gtk-2.0/gtkrc.mine" 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" 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 PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc.py"
export PYTHONPYCACHEPREFIX="$XDG_CACHE_HOME/python" export PYTHONPYCACHEPREFIX="$XDG_CACHE_HOME/python"
export PYTHONUSERBASE="$XDG_DATA_HOME/python" export PYTHONUSERBASE="$XDG_DATA_HOME/python"
export _ZL_DATA="$XDG_DATA_HOME/zlua"
export SQLITE_HISTORY="$XDG_DATA_HOME/sqlite_history" export SQLITE_HISTORY="$XDG_DATA_HOME/sqlite_history"
export WAKATIME_HOME="$XDG_CONFIG_HOME/wakatime" export WAKATIME_HOME="$XDG_CONFIG_HOME/wakatime"
export IPYTHONDIR="$XDG_CONFIG_HOME/ipython" export IPYTHONDIR="$XDG_CONFIG_HOME/ipython"
@ -140,8 +138,6 @@ fi
export HISTTIMEFORMAT="%Y-%m-%d %T " export HISTTIMEFORMAT="%Y-%m-%d %T "
export SUDO_ASKPASS="$HOME/.local/bin/scripts/gui/prompt/menupass" 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 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 # Remove irrelevant variables added for posix compatibility
unset posix unset posix

View file

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

View file

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

View file

@ -1,18 +0,0 @@
[Unit]
Description=Open %I eww window
After=graphical-session.target
After=eww.service
PartOf=eww.service
[Service]
Type=oneshot
ExecStartPre=/usr/bin/eww ping
ExecStart=/usr/bin/eww open %i
ExecStop=/usr/bin/eww close %i
RemainAfterExit=true
Restart=on-failure
RestartSec=3s
Slice=background-graphical.slice
[Install]
WantedBy=graphical-session.target

View file

@ -1,14 +0,0 @@
[Unit]
Description=Eww daemon
After=graphical-session.target
After=pipewire.service
Requires=graphical-session.target
Requires=pipewire.service
[Service]
ExecStart=/usr/bin/eww daemon --no-daemonize
Restart=always
Slice=background-graphical.slice
[Install]
WantedBy=graphical-session.target

View file

@ -1,14 +0,0 @@
[Unit]
Description=Show unread GitHub notifications
Requires=graphical-session.target
[Service]
Type=oneshot
ExecStart=%h/.local/bin/scripts/gui/gh-notification -vv
RemainAfterExit=false
Restart=on-failure
Slice=background-graphical.slice
[Install]
WantedBy=graphical-session.target

View file

@ -1,13 +0,0 @@
[Unit]
Description=Timer for GitHub notification sendout
After=graphical-session.target
Requires=graphical-session.target
PartOf=graphical-session.target
[Timer]
OnUnitActiveSec=1m
Unit=gh-notification.service
[Install]
WantedBy=graphical-session.target

View file

@ -0,0 +1,2 @@
[Service]
Slice=session-graphical.slice

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