feat: Initial commit
This commit is contained in:
88 files changed
+5246
No files matched your search
@@ -0,0 +1,3 @@
|
||||
# BEGIN_ALACRITTY_THEME
|
||||
general.import = [ "~/.config/alacritty/dark.toml" ]
|
||||
# END_ALACRITTY_THEME
|
||||
@@ -0,0 +1,25 @@
|
||||
general.import = [
|
||||
"~/.config/alacritty/.theme.toml"
|
||||
]
|
||||
|
||||
[env]
|
||||
TERM = "xterm-256color"
|
||||
|
||||
[font]
|
||||
size = 10.0
|
||||
offset.y = 20
|
||||
offset.x = 1
|
||||
glyph_offset.y = 10
|
||||
|
||||
[font.normal]
|
||||
family = "CaskaydiaCove NFM"
|
||||
style = "Regular"
|
||||
|
||||
[window]
|
||||
opacity = 0.8
|
||||
blur = true
|
||||
option_as_alt = "Both"
|
||||
|
||||
[window.padding]
|
||||
x = 8
|
||||
y = 8
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Ensure destination directory exists
|
||||
dest="$HOME/.config/alacritty"
|
||||
mkdir -p "$dest"
|
||||
|
||||
# Link theme files
|
||||
declare -A files=(
|
||||
[alacritty.toml]="alacritty.toml"
|
||||
[dark.toml]="dark.toml"
|
||||
[light.toml]="light.toml"
|
||||
)
|
||||
|
||||
for src in "${!files[@]}"; do
|
||||
tgt="$dest/${files[$src]}"
|
||||
ln -sf "$PWD/$src" "$tgt"
|
||||
echo "Linked $src -> $tgt"
|
||||
done
|
||||
|
||||
cp "$PWD/.theme.toml" "$dest/.theme.toml"
|
||||
echo "Copied .theme.toml -> $dest/.theme.toml"
|
||||
@@ -0,0 +1,65 @@
|
||||
[colors.primary]
|
||||
background = "#262626"
|
||||
foreground = "#f6f6f6"
|
||||
dim_foreground = "#4f4f4f"
|
||||
bright_foreground = "#b0b0b0"
|
||||
|
||||
[colors.cursor]
|
||||
text = "#451203"
|
||||
cursor = "#feecc7"
|
||||
|
||||
[colors.vi_mode_cursor]
|
||||
text = "#172254"
|
||||
cursor = "#dbe8fe"
|
||||
|
||||
[colors.search.matches]
|
||||
foreground = "#231a4c"
|
||||
background = "#dfe3ff"
|
||||
|
||||
[colors.search.focused_match]
|
||||
foreground = "#1e280b"
|
||||
background = "#edf4d3"
|
||||
|
||||
[colors.footer_bar]
|
||||
foreground = "#122e3a"
|
||||
background = "#d7f2f6"
|
||||
|
||||
[colors.hints.start]
|
||||
foreground = "#422406"
|
||||
background = "#fefdc3"
|
||||
|
||||
[colors.hints.end]
|
||||
foreground = "#122e3a"
|
||||
background = "#d7f2f6"
|
||||
|
||||
[colors.selection]
|
||||
text = "#471408"
|
||||
background = "#ffe7e1"
|
||||
|
||||
[colors.normal]
|
||||
black = "#3d3d3d"
|
||||
red = "#fd876c"
|
||||
green = "#b6d167"
|
||||
yellow = "#f9db16"
|
||||
blue = "#5f9efb"
|
||||
magenta = "#837ffa"
|
||||
cyan = "#45b6cb"
|
||||
white = "#d1d1d1"
|
||||
|
||||
[colors.bright]
|
||||
black = "#454545"
|
||||
red = "#ffb4a3"
|
||||
green = "#c4dc7a"
|
||||
yellow = "#fdec47"
|
||||
blue = "#a2c9fe"
|
||||
magenta = "#a3a8fe"
|
||||
cyan = "#81d3e0"
|
||||
white = "#e7e7e7"
|
||||
|
||||
[[colors.indexed_colors]]
|
||||
index = 16
|
||||
color = "#fcd88b"
|
||||
|
||||
[[colors.indexed_colors]]
|
||||
index = 17
|
||||
color = "#ffd2c8"
|
||||
@@ -0,0 +1,66 @@
|
||||
[colors.primary]
|
||||
background = "#f6f6f6"
|
||||
foreground = "#262626"
|
||||
dim_foreground = "#3d3d3d"
|
||||
bright_foreground = "#4f4f4f"
|
||||
|
||||
[colors.cursor]
|
||||
text = "#feecc7"
|
||||
cursor = "#451203"
|
||||
|
||||
[colors.vi_mode_cursor]
|
||||
text = "#dbe8fe"
|
||||
cursor = "#172254"
|
||||
|
||||
[colors.search.matches]
|
||||
foreground = "#dfe3ff"
|
||||
background = "#231a4c"
|
||||
|
||||
[colors.search.focused_match]
|
||||
foreground = "#edf4d3"
|
||||
background = "#1e280b"
|
||||
|
||||
[colors.footer_bar]
|
||||
foreground = "#d7f2f6"
|
||||
background = "#122e3a"
|
||||
|
||||
[colors.hints.start]
|
||||
foreground = "#fefdc3"
|
||||
background = "#422406"
|
||||
|
||||
[colors.hints.end]
|
||||
foreground = "#d7f2f6"
|
||||
background = "#122e3a"
|
||||
|
||||
[colors.selection]
|
||||
background = "#ffe7e1"
|
||||
text = "#471408"
|
||||
|
||||
[colors.normal]
|
||||
black = "#3d3d3d"
|
||||
red = "#9d3017"
|
||||
green = "#44551f"
|
||||
yellow = "#85550e"
|
||||
blue = "#1d38b0"
|
||||
magenta = "#442ea5"
|
||||
cyan = "#265464"
|
||||
white = "#b0b0b0"
|
||||
|
||||
[colors.bright]
|
||||
black = "#454545"
|
||||
red = "#e24420"
|
||||
green = "#6e8b25"
|
||||
yellow = "#ca9704"
|
||||
blue = "#2358ed"
|
||||
magenta = "#6043e8"
|
||||
cyan = "#257d95"
|
||||
white = "#d1d1d1"
|
||||
|
||||
[[colors.indexed_colors]]
|
||||
index = 16
|
||||
color = "#fcd88b"
|
||||
|
||||
[[colors.indexed_colors]]
|
||||
index = 17
|
||||
color = "#9d3017"
|
||||
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Config
|
||||
cfg_src="$PWD/config.yaml"
|
||||
cfg_dest="$HOME/.config/darkman/config.yaml"
|
||||
mkdir -p "$(dirname "$cfg_dest")"
|
||||
ln -sf "$cfg_src" "$cfg_dest"
|
||||
echo "Linked config.yaml -> $cfg_dest"
|
||||
|
||||
# Modes
|
||||
for mode in dark-mode.d light-mode.d; do
|
||||
src_dir="$PWD/$mode"
|
||||
dest_dir="$HOME/.local/share/$mode"
|
||||
rm -rf "$dest_dir"
|
||||
mkdir -p "$(dirname "$dest_dir")"
|
||||
ln -s "$src_dir" "$dest_dir"
|
||||
echo "Linked $mode -> $dest_dir"
|
||||
done
|
||||
@@ -0,0 +1,3 @@
|
||||
lat: 59.6
|
||||
lng: 30.2
|
||||
dbusserver: true
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sed -i '/# BEGIN_ALACRITTY_THEME/,/# END_ALACRITTY_THEME/c\
|
||||
# BEGIN_ALACRITTY_THEME\
|
||||
general.import = [ "~/.config/alacritty/dark.toml" ]\
|
||||
# END_ALACRITTY_THEME' ~/.config/alacritty/.theme.toml
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'
|
||||
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
pkill -f hyprpaper-random.sh
|
||||
~/.config/hypr/scripts/hyprpaper-random.sh 300 ~/Pictures/Wallpapers/Dark &
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sed -i '/\/\*BEGIN_ROFI_THEME\*\//,/\/*END_ROFI_THEME\*\//c\/*BEGIN_ROFI_THEME*/\n@import "./dark.rasi"\n/*END_ROFI_THEME*/' ~/.config/rofi/config/.theme.rasi
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
spicetify backup apply
|
||||
spicetify config current_theme catppuccin color_scheme mocha
|
||||
spicetify apply
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sed -i '/\/\*BEGIN_WAYBAR_THEME\*\//,/\/*END_WAYBAR_THEME\*\//c\/*BEGIN_WAYBAR_THEME*/\n@import url("./dark.css");\n/*END_WAYBAR_THEME*/' ~/.config/waybar/.theme.css
|
||||
pkill -SIGUSR2 waybar
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sed -i '/\/\/ BEGIN_ZELLIJ_THEME/,/\/\/ END_ZELLIJ_THEME/c\
|
||||
\/\/ BEGIN_ZELLIJ_THEME\
|
||||
theme "rainby-dark"\
|
||||
\/\/ END_ZELLIJ_THEME' ~/.config/zellij/config.kdl
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sed -i '/# BEGIN_ALACRITTY_THEME/,/# END_ALACRITTY_THEME/c\
|
||||
# BEGIN_ALACRITTY_THEME\
|
||||
general.import = [ "~/.config/alacritty/light.toml" ]\
|
||||
# END_ALACRITTY_THEME' ~/.config/alacritty/.theme.toml
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita'
|
||||
gsettings set org.gnome.desktop.interface color-scheme 'prefer-light'
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
pkill -f hyprpaper-random.sh
|
||||
~/.config/hypr/scripts/hyprpaper-random.sh 300 ~/Pictures/Wallpapers/Light &
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sed -i '/\/\*BEGIN_ROFI_THEME\*\//,/\/*END_ROFI_THEME\*\//c\/*BEGIN_ROFI_THEME*/\n@import "./light.rasi"\n/*END_ROFI_THEME*/' ~/.config/rofi/config/.theme.rasi
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
spicetify backup apply
|
||||
spicetify config current_theme catppuccin color_scheme latte
|
||||
spicetify apply
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sed -i '/\/\*BEGIN_WAYBAR_THEME\*\//,/\/*END_WAYBAR_THEME\*\//c\/*BEGIN_WAYBAR_THEME*/\n@import url("./light.css");\n/*END_WAYBAR_THEME*/' ~/.config/waybar/.theme.css
|
||||
pkill -SIGUSR2 waybar
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
sed -i '/\/\/ BEGIN_ZELLIJ_THEME/,/\/\/ END_ZELLIJ_THEME/c\
|
||||
\/\/ BEGIN_ZELLIJ_THEME\
|
||||
theme "rainby-light"\
|
||||
\/\/ END_ZELLIJ_THEME' ~/.config/zellij/config.kdl
|
||||
@@ -0,0 +1,491 @@
|
||||
# See dunst(5) for all configuration options
|
||||
|
||||
[global]
|
||||
### Display ###
|
||||
|
||||
# Which monitor should the notifications be displayed on.
|
||||
monitor = 0
|
||||
|
||||
# Display notification on focused monitor. Possible modes are:
|
||||
# mouse: follow mouse pointer
|
||||
# keyboard: follow window with keyboard focus
|
||||
# none: don't follow anything
|
||||
#
|
||||
# "keyboard" needs a window manager that exports the
|
||||
# _NET_ACTIVE_WINDOW property.
|
||||
# This should be the case for almost all modern window managers.
|
||||
#
|
||||
# If this option is set to mouse or keyboard, the monitor option
|
||||
# will be ignored.
|
||||
follow = none
|
||||
|
||||
### Geometry ###
|
||||
|
||||
# dynamic width from 0 to 300
|
||||
# width = (0, 300)
|
||||
# constant width of 300
|
||||
width = 420
|
||||
|
||||
# The maximum 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 = (16, 16)
|
||||
|
||||
# Scale factor. It is auto-detected if value is 0.
|
||||
scale = 0
|
||||
|
||||
# Maximum number of notification (0 means no limit)
|
||||
notification_limit = 20
|
||||
|
||||
### 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 = 10
|
||||
|
||||
# Set the frame width of the progress bar
|
||||
progress_bar_frame_width = 1
|
||||
|
||||
# Set the minimum width for the progress bar
|
||||
progress_bar_min_width = 150
|
||||
|
||||
# Set the maximum width for the progress bar
|
||||
progress_bar_max_width = 400
|
||||
|
||||
# Corner radius for the progress bar. 0 disables rounded corners.
|
||||
progress_bar_corner_radius = 4
|
||||
|
||||
# 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, etc.). (X11 only)
|
||||
transparency = 0
|
||||
|
||||
# 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 = 0
|
||||
|
||||
# Padding between text and separator.
|
||||
padding = 8
|
||||
|
||||
# Horizontal padding.
|
||||
horizontal_padding = 8
|
||||
|
||||
# Padding between text and icon.
|
||||
text_icon_padding = 14
|
||||
|
||||
# Defines width in pixels of frame around the notification window.
|
||||
# Set to 0 to disable.
|
||||
frame_width = 2
|
||||
|
||||
# Defines color of the frame around the notification window.
|
||||
frame_color = "#1e66f5"
|
||||
|
||||
# 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 = 4
|
||||
|
||||
# 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 = NotoSans Nerd Font 12
|
||||
|
||||
# The spacing between lines. If the height is smaller than the
|
||||
# font height, it will get raised to the font height.
|
||||
|
||||
line_height = 0
|
||||
# Possible values are:
|
||||
# full: Allow a small subset of html markup in notifications:
|
||||
# <b>bold</b>
|
||||
# <i>italic</i>
|
||||
# <s>strikethrough</s>
|
||||
# <u>underline</u>
|
||||
#
|
||||
# For a complete reference see
|
||||
# <https://docs.gtk.org/Pango/pango_markup.html>.
|
||||
#
|
||||
# strip: This setting is provided for compatibility with some broken
|
||||
# clients that send markup even though it's not enabled on the
|
||||
# server. Dunst will try to strip the markup but the parsing is
|
||||
# simplistic so using this option outside of matching rules for
|
||||
# specific applications *IS GREATLY DISCOURAGED*.
|
||||
#
|
||||
# no: Disable markup parsing, incoming notifications will be treated as
|
||||
# plain text. Dunst will not advertise that it has the body-markup
|
||||
# capability if this is set as a global setting.
|
||||
#
|
||||
# It's important to note that markup inside the format option will be parsed
|
||||
# regardless of what this is set to.
|
||||
markup = full
|
||||
|
||||
# The format of the message. Possible variables are:
|
||||
# %a appname
|
||||
# %s summary
|
||||
# %b body
|
||||
# %i iconname (including its path)
|
||||
# %I iconname (without its path)
|
||||
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||
# %n progress value if set without any extra characters
|
||||
# %% Literal %
|
||||
# Markup is allowed
|
||||
|
||||
format = "<b> %a</b>\n%s\n<i>%b</i>"
|
||||
# Alignment of message text.
|
||||
# Possible values are "left", "center" and "right".
|
||||
alignment = left
|
||||
|
||||
# Vertical alignment of message text and icon.
|
||||
# Possible values are "top", "center" and "bottom".
|
||||
vertical_alignment = top
|
||||
|
||||
# Show age of message if message is older than show_age_threshold
|
||||
# seconds.
|
||||
# Set to -1 to disable.
|
||||
show_age_threshold = 60
|
||||
|
||||
# Specify where to make an ellipsis in long lines.
|
||||
# Possible values are "start", "middle" and "end".
|
||||
ellipsize = middle
|
||||
|
||||
# Ignore newlines '\n' in notifications.
|
||||
ignore_newline = no
|
||||
|
||||
# Stack together notifications with the same content
|
||||
stack_duplicates = true
|
||||
|
||||
# Hide the count of stacked notifications with the same content
|
||||
hide_duplicate_count = false
|
||||
|
||||
# Display indicators for URLs (U) and actions (A).
|
||||
show_indicators = no
|
||||
|
||||
### 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)
|
||||
icon_theme = Papirus-Dark
|
||||
# You can also set multiple icon themes, with the leftmost one being used first.
|
||||
# icon_theme = "Adwaita, breeze"
|
||||
|
||||
# Align icons left/right/top/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 = 64
|
||||
|
||||
# Scale larger icons down to this size, set to 0 to disable
|
||||
max_icon_size = 64
|
||||
|
||||
# Paths to default icons (only necessary when not using recursive icon lookup)
|
||||
icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
|
||||
|
||||
### History ###
|
||||
|
||||
# Should a notification popped up from history be sticky or timeout
|
||||
# as if it would normally do.
|
||||
sticky_history = yes
|
||||
|
||||
# Maximum amount of notifications kept in history
|
||||
history_length = 20
|
||||
|
||||
### Misc/Advanced ###
|
||||
|
||||
# dmenu path.
|
||||
dmenu = /usr/bin/dmenu -p dunst:
|
||||
|
||||
# Browser for opening urls in context menu.
|
||||
browser = /usr/bin/xdg-open
|
||||
|
||||
# Always run rule-defined scripts, even if the notification is suppressed
|
||||
always_run_script = true
|
||||
|
||||
# Define the title of the windows spawned by dunst (X11 only)
|
||||
title = Dunst
|
||||
|
||||
# Define the class of the windows spawned by dunst (X11 only)
|
||||
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 = 8
|
||||
# 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 notifications 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, close_current
|
||||
mouse_middle_click = close_all
|
||||
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]
|
||||
# IMPORTANT: colors have to be defined in quotation marks.
|
||||
# Otherwise the "#" and following would be interpreted as a comment.
|
||||
background = "#E7E7E7EA"
|
||||
foreground = "#262626"
|
||||
timeout = 10
|
||||
# Icon for notifications with low urgency, uncomment to enable
|
||||
#default_icon = /path/to/icon
|
||||
|
||||
[urgency_normal]
|
||||
background = "#E7E7E7EA"
|
||||
foreground = "#262626"
|
||||
frame_color = "#5F9EFBEA"
|
||||
timeout = 10
|
||||
override_pause_level = 30
|
||||
# Icon for notifications with normal urgency, uncomment to enable
|
||||
#default_icon = /path/to/icon
|
||||
|
||||
[urgency_critical]
|
||||
background = "#E7E7E7EA"
|
||||
foreground = "#262626"
|
||||
frame_color = "#FD876CEA"
|
||||
timeout = 0
|
||||
override_pause_level = 60
|
||||
# Icon for notifications with critical urgency, uncomment to enable
|
||||
default_icon = /usr/share/icons/Papirus-Dark/32x32/status/dialog-error.svg
|
||||
|
||||
# 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"
|
||||
|
||||
[alert]
|
||||
summary = "*"
|
||||
script = $HOME/.config/dunst/scripts/alert.sh
|
||||
|
||||
# vim: ft=cfg
|
||||
@@ -0,0 +1,21 @@
|
||||
set fish_greeting ""
|
||||
|
||||
set -gx FZF_DEFAULT_COMMAND 'fd --type f --hidden --follow --exclude .git --exclude .arc'
|
||||
|
||||
set -gx GPG_TTY $(tty)
|
||||
|
||||
if type -q nvim
|
||||
alias vim nvim
|
||||
set -gx EDITOR nvim
|
||||
end
|
||||
|
||||
if status is-interactive
|
||||
# Commands to run in interactive sessions can go here
|
||||
if type -q eza
|
||||
alias l "eza -l -g -a --icons --group-directories-first"
|
||||
else
|
||||
alias l "ls -la"
|
||||
end
|
||||
end
|
||||
|
||||
set -q GHCUP_INSTALL_BASE_PREFIX[1]; or set GHCUP_INSTALL_BASE_PREFIX $HOME ; set -gx PATH $HOME/.cabal/bin /home/deytenit/.ghcup/bin $PATH # ghcup-env
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Link entire hypr directory
|
||||
dest="$HOME/.config/hypr"
|
||||
rm -rf "$dest"
|
||||
mkdir -p "$(dirname "$dest")"
|
||||
ln -s "$PWD" "$dest"
|
||||
echo "Linked .config/hypr -> $dest"
|
||||
@@ -0,0 +1,78 @@
|
||||
|
||||
$rosewater = rgb(dc8a78)
|
||||
$rosewaterAlpha = dc8a78
|
||||
|
||||
$flamingo = rgb(dd7878)
|
||||
$flamingoAlpha = dd7878
|
||||
|
||||
$pink = rgb(ea76cb)
|
||||
$pinkAlpha = ea76cb
|
||||
|
||||
$mauve = rgb(8839ef)
|
||||
$mauveAlpha = 8839ef
|
||||
|
||||
$red = rgb(d20f39)
|
||||
$redAlpha = d20f39
|
||||
|
||||
$maroon = rgb(e64553)
|
||||
$maroonAlpha = e64553
|
||||
|
||||
$peach = rgb(fe640b)
|
||||
$peachAlpha = fe640b
|
||||
|
||||
$yellow = rgb(df8e1d)
|
||||
$yellowAlpha = df8e1d
|
||||
|
||||
$green = rgb(40a02b)
|
||||
$greenAlpha = 40a02b
|
||||
|
||||
$teal = rgb(179299)
|
||||
$tealAlpha = 179299
|
||||
|
||||
$sky = rgb(04a5e5)
|
||||
$skyAlpha = 04a5e5
|
||||
|
||||
$sapphire = rgb(209fb5)
|
||||
$sapphireAlpha = 209fb5
|
||||
|
||||
$blue = rgb(1e66f5)
|
||||
$blueAlpha = 1e66f5
|
||||
|
||||
$lavender = rgb(7287fd)
|
||||
$lavenderAlpha = 7287fd
|
||||
|
||||
$text = rgb(4c4f69)
|
||||
$textAlpha = 4c4f69
|
||||
|
||||
$subtext1 = rgb(5c5f77)
|
||||
$subtext1Alpha = 5c5f77
|
||||
|
||||
$subtext0 = rgb(6c6f85)
|
||||
$subtext0Alpha = 6c6f85
|
||||
|
||||
$overlay2 = rgb(7c7f93)
|
||||
$overlay2Alpha = 7c7f93
|
||||
|
||||
$overlay1 = rgb(8c8fa1)
|
||||
$overlay1Alpha = 8c8fa1
|
||||
|
||||
$overlay0 = rgb(9ca0b0)
|
||||
$overlay0Alpha = 9ca0b0
|
||||
|
||||
$surface2 = rgb(acb0be)
|
||||
$surface2Alpha = acb0be
|
||||
|
||||
$surface1 = rgb(bcc0cc)
|
||||
$surface1Alpha = bcc0cc
|
||||
|
||||
$surface0 = rgb(ccd0da)
|
||||
$surface0Alpha = ccd0da
|
||||
|
||||
$base = rgb(eff1f5)
|
||||
$baseAlpha = eff1f5
|
||||
|
||||
$mantle = rgb(e6e9ef)
|
||||
$mantleAlpha = e6e9ef
|
||||
|
||||
$crust = rgb(dce0e8)
|
||||
$crustAlpha = dce0e8
|
||||
@@ -0,0 +1,36 @@
|
||||
general {
|
||||
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
|
||||
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
||||
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
|
||||
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
|
||||
ignore_systemd_inhibit = false # whether to ignore systemd-inhibit --what=idle inhibitors
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 150 # 2.5min.
|
||||
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||
on-resume = brightnessctl -r # monitor backlight restore.
|
||||
}
|
||||
|
||||
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
||||
# listener {
|
||||
# timeout = 150 # 2.5min.
|
||||
# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
|
||||
# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
|
||||
# }
|
||||
|
||||
listener {
|
||||
timeout = 300 # 5min
|
||||
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 330 # 5.5min
|
||||
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
|
||||
on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired.
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 1800 # 30min
|
||||
on-timeout = systemctl suspend # suspend pc
|
||||
}
|
||||
@@ -0,0 +1,255 @@
|
||||
|
||||
# #######################################################################################
|
||||
# AUTOGENERATED HYPR CONFIG.
|
||||
# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT,
|
||||
# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
|
||||
# #######################################################################################
|
||||
|
||||
#
|
||||
# Please note not all available settings / options are set here.
|
||||
# For a full list, see the wiki
|
||||
#
|
||||
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||
monitor=eDP-1,3072x1920@120,0x0,1.5
|
||||
monitor=HEADLESS-2,1920x1080@60,3072x0,1.0
|
||||
|
||||
xwayland {
|
||||
force_zero_scaling = true
|
||||
}
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||
# Some default env vars.
|
||||
env = XCURSOR_THEME,phinger-cursors-dark
|
||||
env = HYPRCURSOR_THEME,phinger-cursors-dark
|
||||
env = XCURSOR_SIZE,24
|
||||
env = QT_QPA_PLATFORMTHEME,qt6ct # change to qt6ct if you have that
|
||||
env = QT_STYLE_OVERRIDE,kvantum
|
||||
env = GDK_BACKEND,wayland
|
||||
|
||||
env = XDG_DATA_HOME,$HOME/.local/share
|
||||
|
||||
# Sorcery for screen recording
|
||||
exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||
|
||||
# Execute your favorite apps at launch
|
||||
# exec-once = waybar & hyprpaper & firefox
|
||||
|
||||
exec-once = hypridle & hyprpaper & dunst & /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & waybar
|
||||
|
||||
exec-once = nm-applet & $HOME/.config/hypr/scripts/blueman-applet.sh
|
||||
|
||||
exec-once = sleep 5 && darkman run
|
||||
|
||||
exec-once = thunderbird
|
||||
|
||||
# Source a file (multi-file configs)
|
||||
source = $HOME/.config/hypr/colors.conf
|
||||
|
||||
# Set programs that you use
|
||||
$terminal = alacritty
|
||||
$browser = firefox-beta
|
||||
$explorer = nautilus
|
||||
$launcher = sh $HOME/.config/rofi/bin/launcher
|
||||
$powermenu = sh $HOME/.config/rofi/bin/powermenu
|
||||
$screenshot = sh $HOME/.config/rofi/bin/screenshot
|
||||
|
||||
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
||||
input {
|
||||
kb_layout = us,ru
|
||||
kb_variant =
|
||||
kb_model =
|
||||
kb_options = grp:win_space_toggle
|
||||
kb_rules =
|
||||
|
||||
follow_mouse = 1
|
||||
|
||||
touchpad {
|
||||
natural_scroll = true
|
||||
}
|
||||
|
||||
sensitivity = 0 # -1.0 to 1.0, 0 means no modification.
|
||||
}
|
||||
|
||||
general {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
|
||||
gaps_in = 3 # 5
|
||||
gaps_out = 7 # 20
|
||||
border_size = 3 # 2
|
||||
col.active_border = $lavender $sapphire 45deg
|
||||
col.inactive_border = $surface0
|
||||
|
||||
layout = dwindle
|
||||
|
||||
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||
allow_tearing = false
|
||||
}
|
||||
|
||||
decoration {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
|
||||
rounding = 8 # 10
|
||||
|
||||
blur {
|
||||
enabled = true
|
||||
size = 16
|
||||
passes = 2
|
||||
}
|
||||
|
||||
shadow {
|
||||
enabled = true
|
||||
range = 4
|
||||
render_power = 3
|
||||
color = rgba(1a1a1aee)
|
||||
}
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = yes
|
||||
|
||||
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||
|
||||
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||
|
||||
animation = windows, 1, 7, myBezier
|
||||
animation = windowsOut, 1, 7, default, popin 80%
|
||||
animation = border, 1, 10, default
|
||||
animation = borderangle, 1, 8, default
|
||||
animation = fade, 1, 7, default
|
||||
animation = workspaces, 1, 6, default
|
||||
}
|
||||
|
||||
dwindle {
|
||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = yes # you probably want this
|
||||
}
|
||||
|
||||
master {
|
||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||
new_status = master
|
||||
}
|
||||
|
||||
gestures {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
workspace_swipe = on
|
||||
workspace_swipe_fingers = 3
|
||||
}
|
||||
|
||||
misc {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||
}
|
||||
|
||||
# Example per-device config
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||
device {
|
||||
name = epic-mouse-v1
|
||||
sensitivity = -0.5
|
||||
}
|
||||
|
||||
# Example windowrule v1
|
||||
# windowrule = float, ^(kitty)$
|
||||
# Example windowrule v2
|
||||
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
|
||||
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
|
||||
windowrulev2 = idleinhibit fullscreen, fullscreen:1
|
||||
# Picture-in-Picture
|
||||
windowrulev2 = float, class:((f|F)irefox.*), title:(Picture-in-Picture)
|
||||
windowrulev2 = suppressevent fullscreen, class:((f|F)irefox.*), title:(Picture-in-Picture)
|
||||
windowrulev2 = suppressevent maximize, class:((f|F)irefox.*), title:(Picture-in-Picture)
|
||||
windowrulev2 = pin, class:((f|F)irefox.*), title:(Picture-in-Picture)
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||
$mainMod = SUPER
|
||||
|
||||
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||
bind = $mainMod, Q, exec, $terminal
|
||||
bind = $mainMod, W, exec, $browser
|
||||
bind = $mainMod, E, exec, $explorer
|
||||
bind = $mainMod, R, exec, $launcher
|
||||
bind = $mainMod, M, exec, $powermenu
|
||||
bind = $mainMod, print, exec, $screenshot
|
||||
bind = $mainMod, C, killactive,
|
||||
bind = $mainMod, ESCAPE, exit,
|
||||
bind = $mainMod, D, pseudo, # dwindle
|
||||
bind = $mainMod, F, togglefloating,
|
||||
bind = $mainMod, S, togglesplit, # dwindle
|
||||
bind = $mainMod, V, fullscreen
|
||||
|
||||
# Move focus with mainMod + arrow keys
|
||||
bind = $mainMod, left, movefocus, l
|
||||
bind = $mainMod, right, movefocus, r
|
||||
bind = $mainMod, up, movefocus, u
|
||||
bind = $mainMod, down, movefocus, d
|
||||
|
||||
bind = $mainMod, H, movefocus, l
|
||||
bind = $mainMod, L, movefocus, r
|
||||
bind = $mainMod, K, movefocus, u
|
||||
bind = $mainMod, J, movefocus, d
|
||||
|
||||
# Switch workspaces with mainMod + [0-9]
|
||||
bind = $mainMod, 1, workspace, 1
|
||||
bind = $mainMod, 2, workspace, 2
|
||||
bind = $mainMod, 3, workspace, 3
|
||||
bind = $mainMod, 4, workspace, 4
|
||||
bind = $mainMod, 5, workspace, 5
|
||||
bind = $mainMod, 6, workspace, 6
|
||||
bind = $mainMod, 7, workspace, 7
|
||||
bind = $mainMod, 8, workspace, 8
|
||||
bind = $mainMod, 9, workspace, 9
|
||||
bind = $mainMod, 0, workspace, 10
|
||||
|
||||
|
||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
|
||||
bind = $mainMod SHIFT, n, movetoworkspace, e+1
|
||||
bind = $mainMod SHIFT, p, movetoworkspace, e-1
|
||||
|
||||
# Example special workspace (scratchpad)
|
||||
bind = $mainMod, A, togglespecialworkspace, magic
|
||||
bind = $mainMod SHIFT, A, movetoworkspace, special:magic
|
||||
|
||||
# Scroll through existing workspaces with mainMod + scroll
|
||||
bind = $mainMod, mouse_down, workspace, e+1
|
||||
bind = $mainMod, mouse_up, workspace, e-1
|
||||
|
||||
bind = $mainMod, TAB, workspace, e+1
|
||||
bind = $mainMod SHIFT, TAB, workspace, e-1
|
||||
|
||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
||||
# Brightness control
|
||||
bind = , XF86MonBrightnessUp, exec, brightnessctl s +5%
|
||||
bind = , XF86MonBrightnessDown, exec, brightnessctl s 5%-
|
||||
|
||||
# Volume and Media Control
|
||||
bind = , XF86AudioRaiseVolume, exec, pamixer -i 5
|
||||
bind = , XF86AudioLowerVolume, exec, pamixer -d 5
|
||||
bind = , XF86AudioMicMute, exec, pamixer --default-source -t
|
||||
bind = , XF86AudioMute, exec, pamixer -t
|
||||
bind = , XF86AudioPlay, exec, playerctl play-pause
|
||||
bind = , XF86AudioPause, exec, playerctl play-pause
|
||||
bind = , XF86AudioNext, exec, playerctl next
|
||||
bind = , XF86AudioPrev, exec, playerctl previous
|
||||
|
||||
# Color picker
|
||||
bind = $mainMod, X, exec, hyprpicker -a
|
||||
|
||||
# Basic screenshot
|
||||
bind = , print, exec, grimblast --notify copysave screen "$HOME/Pictures/Screenshots/$(date +'%Y-%m-%d-%H%M%S.%3N.png')"
|
||||
@@ -0,0 +1,59 @@
|
||||
background {
|
||||
monitor =
|
||||
path = screenshot # supports png, jpg, webp (no animations, though)
|
||||
color = rgba(25, 20, 20, 1.0)
|
||||
|
||||
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
|
||||
blur_passes = 3 # 0 disables blurring
|
||||
blur_size = 8
|
||||
noise = 0.0117
|
||||
contrast = 1.0916
|
||||
brightness = 0.3
|
||||
vibrancy = 0.9696
|
||||
vibrancy_darkness = 0.0
|
||||
}
|
||||
|
||||
input-field {
|
||||
monitor =
|
||||
size = 200, 50
|
||||
outline_thickness = 3
|
||||
dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
|
||||
dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
|
||||
dots_center = false
|
||||
dots_rounding = -1 # -1 default circle, -2 follow input-field rounding
|
||||
outer_color = rgba(255, 255, 255, 0)
|
||||
inner_color = rgba(255, 255, 255, 0)
|
||||
font_color = rgb(200, 200, 200)
|
||||
fade_on_empty = true
|
||||
fade_timeout = 1000 # Milliseconds before fade_on_empty is triggered.
|
||||
placeholder_text =
|
||||
hide_input = false
|
||||
rounding = 8 # -1 means complete rounding (circle/oval)
|
||||
check_color = rgba(255, 255, 255, 0)
|
||||
fail_color = rgba(204, 34, 34, 0) # if authentication failed, changes outer_color and fail message color
|
||||
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> # can be set to empty
|
||||
fail_transition = 300 # transition time in ms between normal outer_color and fail_color
|
||||
capslock_color = -1
|
||||
numlock_color = -1
|
||||
bothlock_color = -1 # when both locks are active. -1 means don't change outer color (same for above)
|
||||
invert_numlock = false # change color if numlock is off
|
||||
swap_font_color = false # see below
|
||||
|
||||
position = 0, 45
|
||||
halign = center
|
||||
valign = bottom
|
||||
}
|
||||
|
||||
label {
|
||||
monitor =
|
||||
text = Hi, $USER!
|
||||
text_align = center # center/right or any value for default left. multi-line text alignment inside label container
|
||||
color = rgba(200, 200, 200, 1.0)
|
||||
font_size = 25
|
||||
font_family = Noto Sans Semibold
|
||||
rotate = 0 # degrees, counter-clockwise
|
||||
|
||||
position = 0, -45
|
||||
halign = center
|
||||
valign = top
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
#if more than one preload is desired then continue to preload other backgrounds
|
||||
# preload = /path/to/next_image.png
|
||||
# .. more preloads
|
||||
|
||||
#set the default wallpaper(s) seen on initial workspace(s) --depending on the number of monitors used
|
||||
#if more than one monitor in use, can load a 2nd image
|
||||
# wallpaper = monitor2,/path/to/next_image.png
|
||||
# .. more monitors
|
||||
|
||||
#enable splash text rendering over the wallpaper
|
||||
splash = true
|
||||
|
||||
#fully disable ipc
|
||||
# ipc = off
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
|
||||
# By @tom-gora at https://github.com/blueman-project/blueman/issues/2282
|
||||
|
||||
# Initial attempt to start the blueman-applet
|
||||
blueman-applet &
|
||||
# Sleep for 5 seconds to make sure attempt executed
|
||||
sleep 5
|
||||
# Do the first check and kill the first instance that fails to draw icon
|
||||
if pgrep -x "blueman-applet" >/dev/null; then
|
||||
pkill -x "blueman-applet"
|
||||
sleep 2
|
||||
fi
|
||||
# tragain
|
||||
blueman-applet &
|
||||
# Check if ok and if ok exit before the loop
|
||||
if pgrep -x "blueman-applet" >/dev/null; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Init the counter to not loop indefinitely but do max of 10 attrempts
|
||||
counter=0
|
||||
# Loop to try and start the blueman-applet
|
||||
while [ $counter -lt 10 ]; do
|
||||
# Try to start blueman-applet
|
||||
blueman-applet &
|
||||
# Sleep for 2 seconds before the next check...
|
||||
sleep 2
|
||||
# Check if success
|
||||
if pgrep -x "blueman-applet" >/dev/null; then
|
||||
exit 0
|
||||
# ... and prompt if attempt failed.
|
||||
else
|
||||
notify-send -u normal "Attempt $((counter + 1)) to start bluetooth tray applet failed."
|
||||
fi
|
||||
((counter++))
|
||||
done
|
||||
|
||||
# Final check and if all fails then prompt
|
||||
if ! pgrep -x "blueman-applet" >/dev/null; then
|
||||
notify-send -u critical "Couldn't start bluetooth tray applet!"
|
||||
fi
|
||||
Executable
+54
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
INTERVAL=$1
|
||||
DIR=$2
|
||||
|
||||
if [[ -z "$INTERVAL" || -z "$DIR" ]]; then
|
||||
echo "Usage: $0 <INTERVAL> <DIR>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
LOCK="$HOME/.lock/hyprpaper-random.lock"
|
||||
|
||||
# Terminate any existing instance of this script
|
||||
if pids=$(lsof -t "$LOCK"); then
|
||||
kill -15 $pids
|
||||
fi
|
||||
|
||||
(
|
||||
flock -n 100 || exit
|
||||
MONITOR=($(hyprctl -i 0 monitors | grep Monitor | awk '{print $2}'))
|
||||
wallpapers=()
|
||||
used_wallpapers=()
|
||||
|
||||
# Function to populate the wallpapers array if empty
|
||||
load_wallpapers() {
|
||||
wallpapers=($(find "${DIR}" -type f | shuf))
|
||||
}
|
||||
|
||||
# Initial load of wallpapers
|
||||
load_wallpapers
|
||||
|
||||
while true; do
|
||||
# Refill wallpapers list if all have been used
|
||||
if [ ${#wallpapers[@]} -eq 0 ]; then
|
||||
load_wallpapers
|
||||
used_wallpapers=()
|
||||
fi
|
||||
|
||||
# Pick and remove the first wallpaper from the list
|
||||
wallpaper="${wallpapers[0]}"
|
||||
wallpapers=("${wallpapers[@]:1}")
|
||||
used_wallpapers+=("$wallpaper")
|
||||
|
||||
# Set the wallpaper on all monitors
|
||||
hyprctl -i 0 -q hyprpaper unload all
|
||||
hyprctl -i 0 -q hyprpaper preload "$wallpaper"
|
||||
for m in "${MONITOR[@]}"; do
|
||||
hyprctl -i 0 -q hyprpaper wallpaper "$m,$wallpaper"
|
||||
done
|
||||
|
||||
sleep "$INTERVAL"
|
||||
done
|
||||
) 100> "$LOCK"
|
||||
|
||||
Executable
+106
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
iDIR="$HOME/.config/mako/icons"
|
||||
|
||||
# Get Volume
|
||||
get_volume() {
|
||||
volume=$(pamixer --get-volume)
|
||||
echo "$volume"
|
||||
}
|
||||
|
||||
# Get icons
|
||||
get_icon() {
|
||||
current=$(get_volume)
|
||||
if [[ "$current" -eq "0" ]]; then
|
||||
echo "$iDIR/volume-mute.png"
|
||||
elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then
|
||||
echo "$iDIR/volume-low.png"
|
||||
elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then
|
||||
echo "$iDIR/volume-mid.png"
|
||||
elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then
|
||||
echo "$iDIR/volume-high.png"
|
||||
fi
|
||||
}
|
||||
|
||||
# Notify
|
||||
notify_user() {
|
||||
notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_icon)" "Volume : $(get_volume) %"
|
||||
}
|
||||
|
||||
# Increase Volume
|
||||
inc_volume() {
|
||||
pamixer -i 5 && notify_user
|
||||
}
|
||||
|
||||
# Decrease Volume
|
||||
dec_volume() {
|
||||
pamixer -d 5 && notify_user
|
||||
}
|
||||
|
||||
# Toggle Mute
|
||||
toggle_mute() {
|
||||
if [ "$(pamixer --get-mute)" == "false" ]; then
|
||||
pamixer -m && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/volume-mute.png" "Volume Switched OFF"
|
||||
elif [ "$(pamixer --get-mute)" == "true" ]; then
|
||||
pamixer -u && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_icon)" "Volume Switched ON"
|
||||
fi
|
||||
}
|
||||
|
||||
# Toggle Mic
|
||||
toggle_mic() {
|
||||
if [ "$(pamixer --default-source --get-mute)" == "false" ]; then
|
||||
pamixer --default-source -m && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/microphone-mute.png" "Microphone Switched OFF"
|
||||
elif [ "$(pamixer --default-source --get-mute)" == "true" ]; then
|
||||
pamixer -u --default-source u && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/microphone.png" "Microphone Switched ON"
|
||||
fi
|
||||
}
|
||||
# Get icons
|
||||
get_mic_icon() {
|
||||
current=$(pamixer --default-source --get-volume)
|
||||
if [[ "$current" -eq "0" ]]; then
|
||||
echo "$iDIR/microphone.png"
|
||||
elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then
|
||||
echo "$iDIR/microphone.png"
|
||||
elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then
|
||||
echo "$iDIR/microphone.png"
|
||||
elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then
|
||||
echo "$iDIR/microphone.png"
|
||||
fi
|
||||
}
|
||||
# Notify
|
||||
notify_mic_user() {
|
||||
notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$(get_mic_icon)" "Mic-Level : $(pamixer --default-source --get-volume) %"
|
||||
}
|
||||
|
||||
# Increase MIC Volume
|
||||
inc_mic_volume() {
|
||||
pamixer --default-source -i 5 && notify_mic_user
|
||||
}
|
||||
|
||||
# Decrease MIC Volume
|
||||
dec_mic_volume() {
|
||||
pamixer --default-source -d 5 && notify_mic_user
|
||||
}
|
||||
|
||||
# Execute accordingly
|
||||
if [[ "$1" == "--get" ]]; then
|
||||
get_volume
|
||||
elif [[ "$1" == "--inc" ]]; then
|
||||
inc_volume
|
||||
elif [[ "$1" == "--dec" ]]; then
|
||||
dec_volume
|
||||
elif [[ "$1" == "--toggle" ]]; then
|
||||
toggle_mute
|
||||
elif [[ "$1" == "--toggle-mic" ]]; then
|
||||
toggle_mic
|
||||
elif [[ "$1" == "--get-icon" ]]; then
|
||||
get_icon
|
||||
elif [[ "$1" == "--get-mic-icon" ]]; then
|
||||
get_mic_icon
|
||||
elif [[ "$1" == "--mic-inc" ]]; then
|
||||
inc_mic_volume
|
||||
elif [[ "$1" == "--mic-dec" ]]; then
|
||||
dec_mic_volume
|
||||
else
|
||||
get_volume
|
||||
fi
|
||||
@@ -0,0 +1,8 @@
|
||||
tt.*
|
||||
.tests
|
||||
doc/tags
|
||||
debug
|
||||
.repro
|
||||
foo.*
|
||||
*.log
|
||||
data
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"neodev": {
|
||||
"library": {
|
||||
"enabled": true,
|
||||
"plugins": true
|
||||
}
|
||||
},
|
||||
"neoconf": {
|
||||
"plugins": {
|
||||
"lua_ls": {
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -0,0 +1,4 @@
|
||||
# 💤 LazyVim
|
||||
|
||||
A starter template for [LazyVim](https://github.com/LazyVim/LazyVim).
|
||||
Refer to the [documentation](https://lazyvim.github.io/installation) to get started.
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
dest="$HOME/.config/nvim"
|
||||
rm -rf "$dest"
|
||||
mkdir -p "$(dirname "$dest")"
|
||||
ln -s "$PWD" "$dest"
|
||||
echo "Linked .config/nvim -> $dest"
|
||||
@@ -0,0 +1,2 @@
|
||||
-- bootstrap lazy.nvim, LazyVim and your plugins
|
||||
require("config.lazy")
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"LazyVim": { "branch": "main", "commit": "3f034d0a7f58031123300309f2efd3bb0356ee21" },
|
||||
"LuaSnip": { "branch": "master", "commit": "c9b9a22904c97d0eb69ccb9bab76037838326817" },
|
||||
"SchemaStore.nvim": { "branch": "main", "commit": "442901b78dca4da1078b32e25e1afb32460e0082" },
|
||||
"auto-dark-mode.nvim": { "branch": "master", "commit": "c31de126963ffe9403901b4b0990dde0e6999cc6" },
|
||||
"blink.cmp": { "branch": "main", "commit": "cb5e346d9e0efa7a3eee7fd4da0b690c48d2a98e" },
|
||||
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
|
||||
"catppuccin": { "branch": "main", "commit": "5b5e3aef9ad7af84f463d17b5479f06b87d5c429" },
|
||||
"clangd_extensions.nvim": { "branch": "main", "commit": "db28f29be928d18cbfb86fbfb9f83f584f658feb" },
|
||||
"conform.nvim": { "branch": "master", "commit": "372fc521f8421b7830ea6db4d6ea3bae1c77548c" },
|
||||
"flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" },
|
||||
"friendly-snippets": { "branch": "main", "commit": "fc8f183479a472df60aa86f00e295462f2308178" },
|
||||
"fzf-lua": { "branch": "main", "commit": "b11467c3fbfe48e4a815e4909f5c4e5b413ce6d0" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "140ac646db125904e456e42ab8b538d28f9607d7" },
|
||||
"grug-far.nvim": { "branch": "main", "commit": "631331f9c6611b1a47e887f50b92b7cf450f51e7" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
|
||||
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
|
||||
"lualine.nvim": { "branch": "master", "commit": "15884cee63a8c205334ab13ab1c891cd4d27101a" },
|
||||
"markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" },
|
||||
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
|
||||
"mini.ai": { "branch": "main", "commit": "e139eb1101beb0250fea322f8c07a42f0f175688" },
|
||||
"mini.animate": { "branch": "main", "commit": "9b518c39c0e25b7b5e4e61db3f1407f7b4889f4e" },
|
||||
"mini.comment": { "branch": "main", "commit": "fb867a9246f9b892cf51a8c84a3f8479cdf1558c" },
|
||||
"mini.files": { "branch": "main", "commit": "432142ada983ec5863ba480f0e4891b7d64ce3f6" },
|
||||
"mini.hipatterns": { "branch": "main", "commit": "e5083df391171dc9d8172645606f8496d9443374" },
|
||||
"mini.icons": { "branch": "main", "commit": "397ed3807e96b59709ef3292f0a3e253d5c1dc0a" },
|
||||
"mini.pairs": { "branch": "main", "commit": "69864a2efb36c030877421634487fd90db1e4298" },
|
||||
"mini.surround": { "branch": "main", "commit": "5aab42fcdcf31fa010f012771eda5631c077840a" },
|
||||
"neo-tree.nvim": { "branch": "main", "commit": "206241e451c12f78969ff5ae53af45616ffc9b72" },
|
||||
"noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" },
|
||||
"nui.nvim": { "branch": "main", "commit": "8d5b0b568517935d3c84f257f272ef004d9f5a59" },
|
||||
"nvim-cmp": { "branch": "main", "commit": "c27370703e798666486e3064b64d59eaf4bdc6d5" },
|
||||
"nvim-lint": { "branch": "master", "commit": "9dfb77ef6c5092a19502883c02dc5a02ec648729" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "48f4475eb71638b69c984557169dc3826603d37e" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "3b308861a8d7d7bfbe9be51d52e54dcfd9fe3d38" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "ed373482db797bbf71bdff37a15c7555a84dce47" },
|
||||
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
|
||||
"nvim-ts-context-commentstring": { "branch": "main", "commit": "1b212c2eee76d787bbea6aa5e92a2b534e7b4f8f" },
|
||||
"omnisharp-extended-lsp.nvim": { "branch": "main", "commit": "ec1a2431f8872f650a85ed71c24f0715df2e49c2" },
|
||||
"persistence.nvim": { "branch": "main", "commit": "166a79a55bfa7a4db3e26fc031b4d92af71d0b51" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
|
||||
"refactoring.nvim": { "branch": "master", "commit": "2be7ea3f10b7e59658f5abf6dffc50b5d61964d6" },
|
||||
"render-markdown.nvim": { "branch": "main", "commit": "78ffe3b0500bbc7e37fabde723d96661538e8b32" },
|
||||
"sixty.nvim": { "branch": "main", "commit": "1eb9a11002cc2444d017e6acc7808c140f2d0172" },
|
||||
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
|
||||
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
|
||||
"tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" },
|
||||
"trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" },
|
||||
"ts-comments.nvim": { "branch": "main", "commit": "1bd9d0ba1d8b336c3db50692ffd0955fe1bb9f0c" },
|
||||
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"extras": [
|
||||
"lazyvim.plugins.extras.lang.clangd",
|
||||
"lazyvim.plugins.extras.lang.omnisharp",
|
||||
"lazyvim.plugins.extras.lang.tailwind"
|
||||
],
|
||||
"install_version": 7,
|
||||
"news": {
|
||||
"NEWS.md": "10960"
|
||||
},
|
||||
"version": 8
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
-- Autocmds are automatically loaded on the VeryLazy event
|
||||
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
|
||||
-- Add any additional autocmds here
|
||||
@@ -0,0 +1,27 @@
|
||||
-- Keymaps are automatically loaded on the VeryLazy event
|
||||
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
|
||||
-- Add any additional keymaps here
|
||||
|
||||
local keymap = vim.keymap
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
-- base
|
||||
keymap.set("n", "x", '"_x')
|
||||
|
||||
-- (inc/dec)rement
|
||||
keymap.set("n", "+", "<C-a>")
|
||||
keymap.set("n", "-", "<C-x>")
|
||||
|
||||
-- windows
|
||||
keymap.set("n", "<Leader>-", "<cmd>split<CR><C-w>j", opts)
|
||||
keymap.set("n", "<Leader>\\", "<cmd>vsplit<CR><C-w>l", opts)
|
||||
|
||||
keymap.set("n", "<C-M-h>", "<C-w><")
|
||||
keymap.set("n", "<C-M-j>", "<C-w>+")
|
||||
keymap.set("n", "<C-M-k>", "<C-w>-")
|
||||
keymap.set("n", "<C-M-l>", "<C-w>>")
|
||||
|
||||
-- sixty.nvim
|
||||
local sixty = require("sixty")
|
||||
sixty.set("n", "<Up>")
|
||||
sixty.set("n", "<Down>")
|
||||
@@ -0,0 +1,61 @@
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
|
||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||
-- bootstrap lazy.nvim
|
||||
-- stylua: ignore
|
||||
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
require("lazy").setup({
|
||||
spec = {
|
||||
-- add LazyVim and import its plugins
|
||||
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
||||
-- add extras of lazyvim
|
||||
-- coding
|
||||
{ import = "lazyvim.plugins.extras.coding.mini-comment" },
|
||||
{ import = "lazyvim.plugins.extras.coding.mini-surround" },
|
||||
-- editor
|
||||
{ import = "lazyvim.plugins.extras.editor.refactoring" },
|
||||
{ import = "lazyvim.plugins.extras.editor.mini-files" },
|
||||
-- formatting
|
||||
{ import = "lazyvim.plugins.extras.formatting.prettier" },
|
||||
-- lang
|
||||
{ import = "lazyvim.plugins.extras.lang.typescript" },
|
||||
{ import = "lazyvim.plugins.extras.lang.astro" },
|
||||
{ import = "lazyvim.plugins.extras.lang.json" },
|
||||
{ import = "lazyvim.plugins.extras.lang.markdown" },
|
||||
-- ui
|
||||
{ import = "lazyvim.plugins.extras.ui.mini-animate" },
|
||||
-- util
|
||||
{ import = "lazyvim.plugins.extras.util.mini-hipatterns" },
|
||||
-- import/override with your plugins
|
||||
{ import = "plugins" },
|
||||
},
|
||||
defaults = {
|
||||
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
|
||||
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
|
||||
lazy = false,
|
||||
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
|
||||
-- have outdated releases, which may break your Neovim install.
|
||||
version = false, -- always use the latest git commit
|
||||
-- version = "*", -- try installing the latest stable version for plugins that support semver
|
||||
},
|
||||
install = { colorscheme = { "tokyonight", "habamax" } },
|
||||
checker = { enabled = true }, -- automatically check for plugin updates
|
||||
performance = {
|
||||
rtp = {
|
||||
-- disable some rtp plugins
|
||||
disabled_plugins = {
|
||||
"gzip",
|
||||
-- "matchit",
|
||||
-- "matchparen",
|
||||
-- "netrwPlugin",
|
||||
"tarPlugin",
|
||||
"tohtml",
|
||||
"tutor",
|
||||
"zipPlugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,11 @@
|
||||
-- Options are automatically loaded before lazy.nvim startup
|
||||
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
|
||||
-- Add any additional options here
|
||||
--
|
||||
|
||||
vim.opt.backup = false
|
||||
vim.opt.wrap = false
|
||||
vim.opt.mouse = ""
|
||||
|
||||
vim.g.autoformat = false
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
return {
|
||||
{
|
||||
"hrsh7th/nvim-cmp",
|
||||
opts = function(_, opts)
|
||||
opts.window = {
|
||||
completion = {
|
||||
winhighlight = "Normal:Pmenu,FloatBorder:PmenuThumb,Search:None",
|
||||
col_offset = -3,
|
||||
side_padding = 0,
|
||||
},
|
||||
documentation = {
|
||||
border = "rounded",
|
||||
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
|
||||
},
|
||||
}
|
||||
opts.formatting = {
|
||||
fields = { "kind", "abbr", "menu" },
|
||||
format = function(_, item)
|
||||
local icons = require("lazyvim.config").icons.kinds
|
||||
item.menu = " (" .. (item.kind or "unknown") .. ")"
|
||||
item.kind = " " .. (icons[item.kind] or " ")
|
||||
return item
|
||||
end,
|
||||
}
|
||||
return opts
|
||||
end,
|
||||
},
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
opts = {
|
||||
history = true,
|
||||
region_check_events = "CursorHold,InsertLeave",
|
||||
-- those are for removing deleted snippets, also a common problem
|
||||
delete_check_events = "TextChanged,InsertEnter",
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
return {
|
||||
{
|
||||
"telescope.nvim",
|
||||
keys = {
|
||||
{
|
||||
"<leader>sg",
|
||||
LazyVim.pick("live_grep", { root = false }),
|
||||
desc = "Grep (cwd)"
|
||||
},
|
||||
{
|
||||
"<leader>sG",
|
||||
LazyVim.pick("live_grep", { cwd = vim.fn.expand("%:p:h") }),
|
||||
desc = "Grep (cwd)"
|
||||
},
|
||||
{
|
||||
"<leader>ff",
|
||||
LazyVim.pick("files", { root = false }),
|
||||
desc = "Find Files (cwd)"
|
||||
},
|
||||
{
|
||||
"<leader>fF",
|
||||
LazyVim.pick("files", { cwd = vim.fn.expand("%:p:h") }),
|
||||
desc = "Find Files (Directory of Current File)"
|
||||
},
|
||||
{
|
||||
"<leader><space>",
|
||||
LazyVim.pick("files", { root = false }),
|
||||
desc = "Find Files (cwd)"
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"deytenit/sixty.nvim",
|
||||
config = function()
|
||||
require("sixty").setup()
|
||||
end,
|
||||
},
|
||||
{
|
||||
"echasnovski/mini.files",
|
||||
options = {
|
||||
use_as_default_explorer = true,
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
"<leader>fE",
|
||||
function()
|
||||
require("mini.files").open(vim.api.nvim_buf_get_name(0), true)
|
||||
end,
|
||||
desc = "Open mini.files (Directory of Current File)",
|
||||
},
|
||||
{
|
||||
"<leader>fe",
|
||||
function()
|
||||
require("mini.files").open(vim.uv.cwd(), true)
|
||||
end,
|
||||
desc = "Open mini.files (cwd)",
|
||||
},
|
||||
}
|
||||
},
|
||||
{
|
||||
"nvim-neo-tree/neo-tree.nvim",
|
||||
enabled = false,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
-- since this is just an example spec, don't actually load anything here and return an empty spec
|
||||
-- stylua: ignore
|
||||
if true then return {} end
|
||||
|
||||
-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
|
||||
--
|
||||
-- In your plugin files, you can:
|
||||
-- * add extra plugins
|
||||
-- * disable/enabled LazyVim plugins
|
||||
-- * override the configuration of LazyVim plugins
|
||||
return {
|
||||
-- add gruvbox
|
||||
{ "ellisonleao/gruvbox.nvim" },
|
||||
|
||||
-- Configure LazyVim to load gruvbox
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
opts = {
|
||||
colorscheme = "gruvbox",
|
||||
},
|
||||
},
|
||||
|
||||
-- change trouble config
|
||||
{
|
||||
"folke/trouble.nvim",
|
||||
-- opts will be merged with the parent spec
|
||||
opts = { use_diagnostic_signs = true },
|
||||
},
|
||||
|
||||
-- disable trouble
|
||||
{ "folke/trouble.nvim", enabled = false },
|
||||
|
||||
-- override nvim-cmp and add cmp-emoji
|
||||
{
|
||||
"hrsh7th/nvim-cmp",
|
||||
dependencies = { "hrsh7th/cmp-emoji" },
|
||||
---@param opts cmp.ConfigSchema
|
||||
opts = function(_, opts)
|
||||
table.insert(opts.sources, { name = "emoji" })
|
||||
end,
|
||||
},
|
||||
|
||||
-- change some telescope options and a keymap to browse plugin files
|
||||
{
|
||||
"nvim-telescope/telescope.nvim",
|
||||
keys = {
|
||||
-- add a keymap to browse plugin files
|
||||
-- stylua: ignore
|
||||
{
|
||||
"<leader>fp",
|
||||
function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
|
||||
desc = "Find Plugin File",
|
||||
},
|
||||
},
|
||||
-- change some options
|
||||
opts = {
|
||||
defaults = {
|
||||
layout_strategy = "horizontal",
|
||||
layout_config = { prompt_position = "top" },
|
||||
sorting_strategy = "ascending",
|
||||
winblend = 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- add pyright to lspconfig
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
---@class PluginLspOpts
|
||||
opts = {
|
||||
---@type lspconfig.options
|
||||
servers = {
|
||||
-- pyright will be automatically installed with mason and loaded with lspconfig
|
||||
pyright = {},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- add tsserver and setup with typescript.nvim instead of lspconfig
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
dependencies = {
|
||||
"jose-elias-alvarez/typescript.nvim",
|
||||
init = function()
|
||||
require("lazyvim.util").lsp.on_attach(function(_, buffer)
|
||||
-- stylua: ignore
|
||||
vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
|
||||
vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
|
||||
end)
|
||||
end,
|
||||
},
|
||||
---@class PluginLspOpts
|
||||
opts = {
|
||||
---@type lspconfig.options
|
||||
servers = {
|
||||
-- tsserver will be automatically installed with mason and loaded with lspconfig
|
||||
tsserver = {},
|
||||
},
|
||||
-- you can do any additional lsp server setup here
|
||||
-- return true if you don't want this server to be setup with lspconfig
|
||||
---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
|
||||
setup = {
|
||||
-- example to setup with typescript.nvim
|
||||
tsserver = function(_, opts)
|
||||
require("typescript").setup({ server = opts })
|
||||
return true
|
||||
end,
|
||||
-- Specify * to use this function as a fallback for any server
|
||||
-- ["*"] = function(server, opts) end,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
|
||||
-- treesitter, mason and typescript.nvim. So instead of the above, you can use:
|
||||
{ import = "lazyvim.plugins.extras.lang.typescript" },
|
||||
|
||||
-- add more treesitter parsers
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"bash",
|
||||
"html",
|
||||
"javascript",
|
||||
"json",
|
||||
"lua",
|
||||
"markdown",
|
||||
"markdown_inline",
|
||||
"python",
|
||||
"query",
|
||||
"regex",
|
||||
"tsx",
|
||||
"typescript",
|
||||
"vim",
|
||||
"yaml",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
|
||||
-- would overwrite `ensure_installed` with the new value.
|
||||
-- If you'd rather extend the default config, use the code below instead:
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = function(_, opts)
|
||||
-- add tsx and treesitter
|
||||
vim.list_extend(opts.ensure_installed, {
|
||||
"tsx",
|
||||
"typescript",
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- the opts function can also be used to change the default opts:
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = function(_, opts)
|
||||
table.insert(opts.sections.lualine_x, "😄")
|
||||
end,
|
||||
},
|
||||
|
||||
-- or you can return new options to override all the defaults
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = function()
|
||||
return {
|
||||
--[[add your custom lualine config here]]
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- use mini.starter instead of alpha
|
||||
{ import = "lazyvim.plugins.extras.ui.mini-starter" },
|
||||
|
||||
-- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
|
||||
{ import = "lazyvim.plugins.extras.lang.json" },
|
||||
|
||||
-- add any tools you want to have installed below
|
||||
{
|
||||
"williamboman/mason.nvim",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"stylua",
|
||||
"shellcheck",
|
||||
"shfmt",
|
||||
"flake8",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
return {
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
return {
|
||||
{
|
||||
"akinsho/bufferline.nvim",
|
||||
keys = {
|
||||
{ "<tab>", "<cmd>BufferLineCycleNext<cr>", desc = "Next Buffer" },
|
||||
{ "<s-tab>", "<cmd>BufferLineCyclePrev<cr>", desc = "Prev Buffer" },
|
||||
},
|
||||
opts = {
|
||||
options = {
|
||||
show_buffer_close_icons = false,
|
||||
show_close_icon = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"folke/snacks.nvim",
|
||||
event = "VimEnter",
|
||||
opts = function(_, opts)
|
||||
local header = [[
|
||||
__ __ ____ __ __ ____ ____ __ __ __ __
|
||||
| | || || | || | / || |__| || |__| |
|
||||
| ~ | | | | ~ | | | | o || | | || | | |
|
||||
|___, | | | |___, | | | | _ |\ ` ' /\ ` ' /
|
||||
|____/ |____||____/ |____||__|__| \_/\_/ \_/\_/
|
||||
]]
|
||||
|
||||
opts.dashboard.preset.header = header
|
||||
opts.dashboard.sections = {
|
||||
{ section = "header" },
|
||||
{ section = "keys", gap = 1, padding = 1 },
|
||||
{ pane = 2, icon = " ", title = "Recent Files", section = "recent_files", indent = 2, padding = 1 },
|
||||
{ pane = 2, icon = " ", title = "Projects", section = "projects", indent = 2, padding = 1 },
|
||||
{
|
||||
pane = 2,
|
||||
icon = " ",
|
||||
title = "Git Status",
|
||||
section = "terminal",
|
||||
enabled = function()
|
||||
return Snacks.git.get_root() ~= nil
|
||||
end,
|
||||
cmd = "hub status --short --branch --renames",
|
||||
height = 5,
|
||||
padding = 1,
|
||||
ttl = 5 * 60,
|
||||
indent = 3,
|
||||
},
|
||||
{ section = "startup" }
|
||||
}
|
||||
end,
|
||||
},
|
||||
{
|
||||
"catppuccin/nvim",
|
||||
lazy = true,
|
||||
name = "catppuccin",
|
||||
opts = {
|
||||
flavour = "auto", -- latte, frappe, macchiato, mocha
|
||||
background = { -- :h background
|
||||
light = "latte",
|
||||
dark = "mocha",
|
||||
},
|
||||
transparent_background = true,
|
||||
integrations = {
|
||||
aerial = true,
|
||||
alpha = true,
|
||||
cmp = true,
|
||||
dashboard = true,
|
||||
flash = true,
|
||||
gitsigns = true,
|
||||
headlines = true,
|
||||
illuminate = true,
|
||||
indent_blankline = { enabled = true },
|
||||
leap = true,
|
||||
lsp_trouble = true,
|
||||
mason = true,
|
||||
markdown = true,
|
||||
mini = true,
|
||||
native_lsp = {
|
||||
enabled = true,
|
||||
underlines = {
|
||||
errors = { "undercurl" },
|
||||
hints = { "undercurl" },
|
||||
warnings = { "undercurl" },
|
||||
information = { "undercurl" },
|
||||
},
|
||||
},
|
||||
navic = { enabled = true, custom_bg = "lualine" },
|
||||
neotest = true,
|
||||
neotree = true,
|
||||
noice = true,
|
||||
notify = true,
|
||||
semantic_tokens = true,
|
||||
telescope = true,
|
||||
treesitter = true,
|
||||
treesitter_context = true,
|
||||
which_key = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"f-person/auto-dark-mode.nvim",
|
||||
opts = {
|
||||
update_interval = 1000,
|
||||
set_dark_mode = function()
|
||||
vim.api.nvim_set_option_value("background", "dark", {})
|
||||
end,
|
||||
set_light_mode = function()
|
||||
vim.api.nvim_set_option_value("background", "light", {})
|
||||
end,
|
||||
},
|
||||
},
|
||||
{
|
||||
"LazyVim/LazyVim",
|
||||
opts = {
|
||||
colorscheme = "catppuccin",
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
indent_type = "Spaces"
|
||||
indent_width = 2
|
||||
column_width = 120
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
rofi \
|
||||
-show drun \
|
||||
-modi run,drun,ssh \
|
||||
-scroll-method 0 \
|
||||
-drun-match-fields all \
|
||||
-drun-display-format "{name}" \
|
||||
-no-drun-show-actions \
|
||||
-terminal kitty \
|
||||
-kb-cancel Escape \
|
||||
-theme "$HOME"/.config/rofi/config/launcher.rasi
|
||||
Executable
+89
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env bash
|
||||
rofi_command="rofi -theme $HOME/.config/rofi/config/powermenu.rasi"
|
||||
|
||||
uptime=$(uptime -p | sed -e 's/up //g')
|
||||
|
||||
# Options
|
||||
if [[ "$DIR" == "powermenus" ]]; then
|
||||
shutdown=""
|
||||
reboot=""
|
||||
lock=""
|
||||
logout=""
|
||||
ddir="$HOME/.config/rofi/config"
|
||||
else
|
||||
|
||||
# For some reason the Icons are mess up I don't know why but to fix it uncomment section 2 and comment section 1 but if the section 1 icons are mess up uncomment section 2 and comment section 1
|
||||
|
||||
# Buttons
|
||||
layout=`cat $HOME/.config/rofi/config/powermenu.rasi | grep BUTTON | cut -d'=' -f2 | tr -d '[:blank:],*/'`
|
||||
if [[ "$layout" == "TRUE" ]]; then
|
||||
# Section 1
|
||||
shutdown=""
|
||||
reboot=""
|
||||
lock=""
|
||||
logout=""
|
||||
|
||||
else
|
||||
# Section 1
|
||||
shutdown=""
|
||||
reboot=""
|
||||
lock=""
|
||||
logout=""
|
||||
fi
|
||||
ddir="$HOME/.config/rofi/config"
|
||||
fi
|
||||
|
||||
# Ask for confirmation
|
||||
rdialog () {
|
||||
rofi -dmenu\
|
||||
-i\
|
||||
-no-fixed-num-lines\
|
||||
-p "Are You Sure? : "\
|
||||
-theme "$ddir/confirm.rasi"
|
||||
}
|
||||
|
||||
# Display Help
|
||||
show_msg() {
|
||||
rofi -theme "$ddir/askpass.rasi" -e "Options : yes / no / y / n"
|
||||
}
|
||||
|
||||
# Variable passed to rofi
|
||||
options="$lock\n$logout\n$reboot\n$shutdown"
|
||||
|
||||
chosen="$(echo -e "$options" | $rofi_command -p "UP - $uptime" -dmenu -selected-row 0)"
|
||||
case $chosen in
|
||||
$shutdown)
|
||||
ans=$(rdialog &)
|
||||
if [[ $ans == "yes" ]] || [[ $ans == "YES" ]] || [[ $ans == "y" ]]; then
|
||||
systemctl poweroff
|
||||
elif [[ $ans == "no" ]] || [[ $ans == "NO" ]] || [[ $ans == "n" ]]; then
|
||||
exit
|
||||
else
|
||||
show_msg
|
||||
fi
|
||||
;;
|
||||
$reboot)
|
||||
ans=$(rdialog &)
|
||||
if [[ $ans == "yes" ]] || [[ $ans == "YES" ]] || [[ $ans == "y" ]]; then
|
||||
systemctl reboot
|
||||
elif [[ $ans == "no" ]] || [[ $ans == "NO" ]] || [[ $ans == "n" ]]; then
|
||||
exit
|
||||
else
|
||||
show_msg
|
||||
fi
|
||||
;;
|
||||
$lock)
|
||||
hyprlock
|
||||
;;
|
||||
$logout)
|
||||
ans=$(rdialog &)
|
||||
if [[ $ans == "yes" ]] || [[ $ans == "YES" ]] || [[ $ans == "y" ]]; then
|
||||
hyprctl dispatch exit
|
||||
elif [[ $ans == "no" ]] || [[ $ans == "NO" ]] || [[ $ans == "n" ]]; then
|
||||
exit
|
||||
else
|
||||
show_msg
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
rofi \
|
||||
-show run \
|
||||
-scroll-method 0 \
|
||||
-terminal kitty \
|
||||
-theme "$HOME"/.config/rofi/config/runner.rasi
|
||||
Executable
+85
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env bash
|
||||
rofi_command="rofi -theme $HOME/.config/rofi/config/screenshot.rasi"
|
||||
|
||||
time=`date -u +%Y-%m-%d-%H%M%S.%3N`
|
||||
dir="$HOME/Pictures/Screenshots"
|
||||
file="$HOME/Pictures/Screenshots/${time}.png"
|
||||
|
||||
# Icons
|
||||
icon1="$HOME/.config/dunst/icons/collections.svg"
|
||||
icon2="$HOME/.config/dunst/icons/timer.svg"
|
||||
|
||||
# Buttons
|
||||
layout=`cat $HOME/.config/rofi/config/screenshot.rasi | grep BUTTON | cut -d'=' -f2 | tr -d '[:blank:],*/'`
|
||||
if [[ "$layout" == "TRUE" ]]; then
|
||||
screen=""
|
||||
area=""
|
||||
window=""
|
||||
infive=""
|
||||
inten=""
|
||||
else
|
||||
screen=" Capture Desktop"
|
||||
area=" Capture Area"
|
||||
window=" Capture Window"
|
||||
infive=" Take in 3s"
|
||||
inten=" Take in 10s"
|
||||
fi
|
||||
|
||||
# countdown
|
||||
countdown () {
|
||||
for sec in `seq $1 -1 1`; do
|
||||
dunstify -t 1000 --replace=699 -i $icon2 "Taking screenshot in : $sec"
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
# take shots
|
||||
shotnow () {
|
||||
sleep 0.5 && grimblast --notify copysave screen "$file"
|
||||
}
|
||||
|
||||
shot5 () {
|
||||
countdown '3'
|
||||
sleep 1 && grimblast --notify copysave screen "$file"
|
||||
}
|
||||
|
||||
shot10 () {
|
||||
countdown '10'
|
||||
sleep 1 && grimblast --notify copysave screen "$file"
|
||||
notify_view
|
||||
}
|
||||
|
||||
shotwin () {
|
||||
grimblast --notify copysave active "$file"
|
||||
}
|
||||
|
||||
shotarea () {
|
||||
grimblast --notify copysave area "$file"
|
||||
}
|
||||
|
||||
if [[ ! -d "$dir" ]]; then
|
||||
mkdir -p "$dir"
|
||||
fi
|
||||
|
||||
# Variable passed to rofi
|
||||
options="$screen\n$area\n$window\n$infive\n$inten"
|
||||
|
||||
chosen="$(echo -e "$options" | $rofi_command -p 'Take A Shot' -dmenu -selected-row 0)"
|
||||
case $chosen in
|
||||
$screen)
|
||||
shotnow
|
||||
;;
|
||||
$area)
|
||||
shotarea
|
||||
;;
|
||||
$window)
|
||||
shotwin
|
||||
;;
|
||||
$infive)
|
||||
shot5
|
||||
;;
|
||||
$inten)
|
||||
shot10
|
||||
;;
|
||||
esac
|
||||
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
dest="$HOME/.config/rofi"
|
||||
rm -rf "$dest"
|
||||
mkdir -p "$(dirname "$dest")"
|
||||
ln -s "$PWD" "$dest"
|
||||
echo "Linked .config/rofi -> $dest"
|
||||
@@ -0,0 +1,3 @@
|
||||
/*BEGIN_ROFI_THEME*/
|
||||
@import "./dark.rasi"
|
||||
/*END_ROFI_THEME*/
|
||||
@@ -0,0 +1,24 @@
|
||||
@import ".theme.rasi"
|
||||
@import "font.rasi"
|
||||
|
||||
* {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
}
|
||||
|
||||
window {
|
||||
width: 250px;
|
||||
padding: 20px;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-radius: 8px;
|
||||
border-color: @BDR;
|
||||
location: 0;
|
||||
x-offset: 0;
|
||||
y-offset: -4%;
|
||||
}
|
||||
|
||||
entry {
|
||||
expand: true;
|
||||
width: 150px;
|
||||
text-color: @BDR;
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
configuration {
|
||||
show-icons: false;
|
||||
display-drun: "";
|
||||
drun-display-format: "{icon} {name}";
|
||||
disable-history: false;
|
||||
click-to-exit: true;
|
||||
location: 0;
|
||||
}
|
||||
|
||||
@import "font.rasi"
|
||||
@import ".theme.rasi"
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 2px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
width: 300px;
|
||||
anchor: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
margin: 0px 8px 0px 8px;
|
||||
padding: 8px;
|
||||
background-color: @IMG;
|
||||
text-color: @BG;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: "";
|
||||
border-radius: 100%;
|
||||
background-color: @SEL;
|
||||
text-color: @FG;
|
||||
padding: 8px 12px 8px 12px;
|
||||
font: "Iosevka Nerd Font 10";
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
placeholder-color: @FG;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "";
|
||||
blink: true;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon, prompt, entry ];
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
expand: false;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @BDR;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px;
|
||||
position: center;
|
||||
}
|
||||
|
||||
case-indicator {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
listview {
|
||||
background-color: @BG;
|
||||
columns: 1;
|
||||
lines: 7;
|
||||
spacing: 4px;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @BG;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 15px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
orientation: horizontal;
|
||||
border-radius: 4px;
|
||||
padding: 6px 6px 6px 6px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
size: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0.5;
|
||||
margin: 2px 0px 2px 6px;
|
||||
}
|
||||
|
||||
element normal.urgent,
|
||||
element alternate.urgent {
|
||||
background-color: @UGT;
|
||||
text-color: @FG;
|
||||
border-radius: 9px;
|
||||
}
|
||||
|
||||
element normal.active,
|
||||
element alternate.active {
|
||||
background-color: @BGA;
|
||||
text-color: @FG;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @BGA;
|
||||
text-color: @SEL;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 10px;
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element selected.urgent {
|
||||
background-color: @UGT;
|
||||
text-color: @FG;
|
||||
}
|
||||
|
||||
element selected.active {
|
||||
background-color: @BGA;
|
||||
color: @FG;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
@import ".theme.rasi"
|
||||
@import "font.rasi"
|
||||
|
||||
* {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
}
|
||||
|
||||
window {
|
||||
width: 200px;
|
||||
padding: 20px;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-radius: 8px;
|
||||
border-color: @BDR;
|
||||
location: 0;
|
||||
x-offset: 0;
|
||||
y-offset: -4%;
|
||||
}
|
||||
|
||||
entry {
|
||||
expand: true;
|
||||
width: 150px;
|
||||
text-color: @BDR;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
* {
|
||||
BG: #262626;
|
||||
BGA: #EFFBFC;
|
||||
FG: #F6F6F6;
|
||||
FGA: #9D3017;
|
||||
BDR: #1D38B0;
|
||||
SEL: #262626;
|
||||
UGT: #442EA5;
|
||||
IMG: #265464;
|
||||
OFF: #9A3B12;
|
||||
ON: #44551F;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
* {
|
||||
font: "NotoSans Nerd Font Regular 10";
|
||||
}
|
||||
@@ -0,0 +1,149 @@
|
||||
configuration {
|
||||
show-icons: true;
|
||||
display-drun: "";
|
||||
drun-display-format: "{icon} {name}";
|
||||
disable-history: false;
|
||||
click-to-exit: true;
|
||||
location: 0;
|
||||
}
|
||||
|
||||
@import "font.rasi"
|
||||
@import ".theme.rasi"
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 2px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
width: 500px;
|
||||
anchor: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
padding: 8px;
|
||||
background-color: @BG;
|
||||
text-color: @IMG;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: "";
|
||||
border-radius: 100%;
|
||||
background-color: @SEL;
|
||||
text-color: @FG;
|
||||
padding: 8px 12px 8px 12px;
|
||||
font: "Iosevka Nerd Font 10";
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
placeholder-color: @FG;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Search...";
|
||||
blink: true;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon, prompt, entry ];
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
expand: false;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @BDR;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px;
|
||||
position: center;
|
||||
}
|
||||
|
||||
case-indicator {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
listview {
|
||||
background-color: @BG;
|
||||
columns: 1;
|
||||
lines: 7;
|
||||
spacing: 4px;
|
||||
cycle: false;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @BG;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 15px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
orientation: horizontal;
|
||||
border-radius: 4px;
|
||||
padding: 6px 6px 6px 6px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
horizontal-align: 0.5;
|
||||
vertical-align: 0.5;
|
||||
size: 24px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0.5;
|
||||
margin: 2px 0px 2px 2px;
|
||||
}
|
||||
|
||||
element normal.urgent,
|
||||
element alternate.urgent {
|
||||
background-color: @UGT;
|
||||
text-color: @FG;
|
||||
border-radius: 9px;
|
||||
}
|
||||
|
||||
element normal.active,
|
||||
element alternate.active {
|
||||
background-color: @BGA;
|
||||
text-color: @FG;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @BGA;
|
||||
text-color: @SEL;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 10px;
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element selected.urgent {
|
||||
background-color: @UGT;
|
||||
text-color: @FG;
|
||||
}
|
||||
|
||||
element selected.active {
|
||||
background-color: @BGA;
|
||||
color: @FG;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
* {
|
||||
BG: #F6F6F6;
|
||||
BGA: #265464;
|
||||
FG: #262626;
|
||||
FGA: #FFD2C8;
|
||||
BDR: #1D38B0;
|
||||
SEL: #F6F6F6;
|
||||
UGT: #BDC2FF;
|
||||
IMG: #BFD8FE;
|
||||
OFF: #FEDBAA;
|
||||
ON: #DDEBAB;
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
configuration {
|
||||
show-icons: false;
|
||||
display-drun: "";
|
||||
drun-display-format: "{icon} {name}";
|
||||
disable-history: false;
|
||||
click-to-exit: true;
|
||||
location: 0;
|
||||
}
|
||||
|
||||
@import "font.rasi"
|
||||
@import ".theme.rasi"
|
||||
|
||||
/* Line Responsible For Button Layouts */
|
||||
/* BUTTON = FALSE */
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 2px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
width: 400px;
|
||||
anchor: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
margin: 0px 0px 0px 8px;
|
||||
padding: 8px;
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: "";
|
||||
border-radius: 100%;
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
padding: 8px 12px 8px 12px;
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
placeholder-color: @FG;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Search...";
|
||||
blink: true;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon, prompt ];
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
expand: false;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @BDR;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px;
|
||||
position: center;
|
||||
}
|
||||
|
||||
case-indicator {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
listview {
|
||||
background-color: @BG;
|
||||
columns: 3;
|
||||
lines: 2;
|
||||
spacing: 15px;
|
||||
cycle: false;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @BG;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 15px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @BGA;
|
||||
text-color: @SEL;
|
||||
orientation: horizontal;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
size: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0.5;
|
||||
vertical-align: 0.5;
|
||||
margin: 2px 0px 0px 0px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @IMG;
|
||||
text-color: @BG;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 10px;
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element.active,
|
||||
element.selected.urgent {
|
||||
background-color: @ON;
|
||||
text-color: @BG;
|
||||
border-color: @ON;
|
||||
}
|
||||
|
||||
element.selected.urgent {
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element.urgent,
|
||||
element.selected.active {
|
||||
background-color: @OFF;
|
||||
text-color: @BG;
|
||||
border-color: @OFF;
|
||||
}
|
||||
|
||||
element.selected.active {
|
||||
border-color: @BDR;
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
configuration {
|
||||
show-icons: false;
|
||||
display-drun: "";
|
||||
drun-display-format: "{icon} {name}";
|
||||
disable-history: false;
|
||||
click-to-exit: true;
|
||||
location: 0;
|
||||
}
|
||||
|
||||
@import "font.rasi"
|
||||
@import ".theme.rasi"
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 2px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
width: 300px;
|
||||
anchor: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
margin: 0px 0px 0px 8px;
|
||||
padding: 8px;
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: "";
|
||||
border-radius: 100%;
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
padding: 8px 12px 8px 12px;
|
||||
font: "Iosevka Nerd Font 10";
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
placeholder-color: @FG;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Search...";
|
||||
blink: true;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [textbox-prompt-colon, prompt ];
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
expand: false;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @BDR;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px;
|
||||
position: center;
|
||||
}
|
||||
|
||||
case-indicator {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
listview {
|
||||
background-color: @BG;
|
||||
columns: 1;
|
||||
lines: 4;
|
||||
spacing: 4px;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @BG;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 15px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
orientation: horizontal;
|
||||
border-radius: 10px;
|
||||
padding: 6px 6px 6px 6px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
size: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0.5;
|
||||
margin: 2px 0px 2px 6px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @IMG;
|
||||
text-color: @BG;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 10px;
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element.active,
|
||||
element.selected.urgent {
|
||||
background-color: @ON;
|
||||
text-color: @BG;
|
||||
border-color: @ON;
|
||||
}
|
||||
|
||||
element.selected.urgent {
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element.urgent,
|
||||
element.selected.active {
|
||||
background-color: @OFF;
|
||||
text-color: @BG;
|
||||
border-color: @OFF;
|
||||
}
|
||||
|
||||
element.selected.active {
|
||||
border-color: @BDR;
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
configuration {
|
||||
show-icons: false;
|
||||
display-drun: "";
|
||||
drun-display-format: "{icon} {name}";
|
||||
disable-history: false;
|
||||
click-to-exit: true;
|
||||
location: 0;
|
||||
}
|
||||
|
||||
@import "font.rasi"
|
||||
@import ".theme.rasi"
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 2px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
width: 400px;
|
||||
anchor: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
margin: 0px 8px 0px 8px;
|
||||
padding: 8px;
|
||||
background-color: @IMG;
|
||||
text-color: @BG;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: "";
|
||||
border-radius: 100%;
|
||||
background-color: @SEL;
|
||||
text-color: @FG;
|
||||
padding: 8px 12px 8px 12px;
|
||||
font: "Iosevka Nerd Font 10";
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
placeholder-color: @FG;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "";
|
||||
blink: true;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon, prompt, entry ];
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
expand: false;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @BDR;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px;
|
||||
position: center;
|
||||
}
|
||||
|
||||
case-indicator {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
listview {
|
||||
background-color: @BG;
|
||||
columns: 1;
|
||||
lines: 7;
|
||||
spacing: 4px;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @BG;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 15px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
orientation: horizontal;
|
||||
border-radius: 4px;
|
||||
padding: 6px 6px 6px 6px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
size: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0.5;
|
||||
margin: 2px 0px 2px 6px;
|
||||
}
|
||||
|
||||
element normal.urgent,
|
||||
element alternate.urgent {
|
||||
background-color: @UGT;
|
||||
text-color: @FG;
|
||||
border-radius: 9px;
|
||||
}
|
||||
|
||||
element normal.active,
|
||||
element alternate.active {
|
||||
background-color: @BGA;
|
||||
text-color: @FG;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @BGA;
|
||||
text-color: @SEL;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 10px;
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element selected.urgent {
|
||||
background-color: @UGT;
|
||||
text-color: @FG;
|
||||
}
|
||||
|
||||
element selected.active {
|
||||
background-color: @BGA;
|
||||
color: @FG;
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
configuration {
|
||||
show-icons: true;
|
||||
display-drun: "";
|
||||
drun-display-format: "{icon} {name}";
|
||||
disable-history: false;
|
||||
click-to-exit: true;
|
||||
location: 4;
|
||||
}
|
||||
|
||||
@import "font.rasi"
|
||||
@import ".theme.rasi"
|
||||
|
||||
/* Line Responsible For Button Layouts */
|
||||
/* BUTTON = TRUE */
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 2px;
|
||||
border-color: @BGA;
|
||||
border-radius: 10px;
|
||||
width: 110px;
|
||||
x-offset: -1%;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
margin: 0px 0px 0px 8px;
|
||||
padding: 8px;
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: "";
|
||||
border-radius: 100%;
|
||||
background-color: @BG;
|
||||
text-color: @BG;
|
||||
padding: 8px 12px 8px 12px;
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
placeholder-color: @FG;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Search...";
|
||||
blink: true;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon ];
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
expand: false;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @BDR;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px;
|
||||
position: center;
|
||||
}
|
||||
|
||||
case-indicator {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
listview {
|
||||
background-color: @BG;
|
||||
columns: 1;
|
||||
lines: 4;
|
||||
spacing: 15px;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @BG;
|
||||
children: [ listview ];
|
||||
spacing: 15px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
orientation: horizontal;
|
||||
border-radius: 10px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
horizontal-align: 0.5;
|
||||
vertical-align: 0.5;
|
||||
size: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0.5;
|
||||
vertical-align: 0.5;
|
||||
margin: 0px 0px 0px 0px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @BGA;
|
||||
text-color: @SEL;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 10px;
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element.active,
|
||||
element.selected.urgent {
|
||||
background-color: @ON;
|
||||
text-color: @BG;
|
||||
border-color: @ON;
|
||||
}
|
||||
|
||||
element.selected.urgent {
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element.urgent,
|
||||
element.selected.active {
|
||||
background-color: @OFF;
|
||||
text-color: @BG;
|
||||
border-color: @OFF;
|
||||
}
|
||||
|
||||
element.selected.active {
|
||||
border-color: @BDR;
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
configuration {
|
||||
show-icons: false;
|
||||
display-run: "";
|
||||
disable-history: false;
|
||||
click-to-exit: true;
|
||||
location: 0;
|
||||
}
|
||||
|
||||
@import "font.rasi"
|
||||
@import ".theme.rasi"
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 2px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
width: 350px;
|
||||
location: center;
|
||||
anchor: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
padding: 8px;
|
||||
background-color: @BG;
|
||||
text-color: @IMG;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: "";
|
||||
border-radius: 100%;
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
padding: 8px 12px 8px 12px;
|
||||
font: "Iosevka Nerd Font 10";
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
placeholder-color: @FG;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Run...";
|
||||
blink: true;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon, prompt, entry ];
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
expand: false;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @BDR;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px;
|
||||
position: center;
|
||||
}
|
||||
|
||||
case-indicator {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
listview {
|
||||
background-color: @BG;
|
||||
columns: 1;
|
||||
lines: 5;
|
||||
spacing: 4px;
|
||||
cycle: false;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @BG;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 15px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
orientation: horizontal;
|
||||
border-radius: 4px;
|
||||
padding: 6px 6px 6px 6px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
size: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0.5;
|
||||
margin: 2px 0px 2px 2px;
|
||||
}
|
||||
|
||||
element normal.urgent,
|
||||
element alternate.urgent {
|
||||
background-color: @UGT;
|
||||
text-color: @FG;
|
||||
border-radius: 9px;
|
||||
}
|
||||
|
||||
element normal.active,
|
||||
element alternate.active {
|
||||
background-color: @BGA;
|
||||
text-color: @FG;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @BGA;
|
||||
text-color: @SEL;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 10px;
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element selected.urgent {
|
||||
background-color: @UGT;
|
||||
text-color: @FG;
|
||||
}
|
||||
|
||||
element selected.active {
|
||||
background-color: @BGA;
|
||||
color: @FG;
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
configuration {
|
||||
show-icons: false;
|
||||
display-drun: "";
|
||||
drun-display-format: "{icon} {name}";
|
||||
disable-history: false;
|
||||
click-to-exit: true;
|
||||
location: 0;
|
||||
}
|
||||
|
||||
@import "font.rasi"
|
||||
@import ".theme.rasi"
|
||||
|
||||
/* Line Responsible For Button Layouts */
|
||||
/* BUTTON = FALSE */
|
||||
|
||||
window {
|
||||
transparency: "real";
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 2px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
width: 300px;
|
||||
anchor: center;
|
||||
x-offset: 0;
|
||||
y-offset: 0;
|
||||
}
|
||||
|
||||
prompt {
|
||||
enabled: true;
|
||||
margin: 0px 0px 0px 8px;
|
||||
padding: 8px;
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: "";
|
||||
border-radius: 100%;
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
padding: 8px 12px 8px 12px;
|
||||
font: "Iosevka Nerd Font 10";
|
||||
}
|
||||
|
||||
entry {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
placeholder-color: @FG;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
placeholder: "Search...";
|
||||
blink: true;
|
||||
border: 0px 0px 2px 0px;
|
||||
border-color: @BDR;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [ textbox-prompt-colon, prompt ];
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
expand: false;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 0px;
|
||||
border-color: @BDR;
|
||||
margin: 0px 0px 0px 0px;
|
||||
padding: 0px;
|
||||
position: center;
|
||||
}
|
||||
|
||||
case-indicator {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
|
||||
listview {
|
||||
background-color: @BG;
|
||||
columns: 1;
|
||||
lines: 5;
|
||||
spacing: 4px;
|
||||
cycle: true;
|
||||
dynamic: true;
|
||||
layout: vertical;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @BG;
|
||||
children: [ inputbar, listview ];
|
||||
spacing: 15px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
element {
|
||||
background-color: @BG;
|
||||
text-color: @FG;
|
||||
orientation: horizontal;
|
||||
border-radius: 10px;
|
||||
padding: 6px 6px 6px 6px;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
size: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
expand: true;
|
||||
horizontal-align: 0;
|
||||
vertical-align: 0.5;
|
||||
margin: 2px 0px 2px 6px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @BGA;
|
||||
text-color: @SEL;
|
||||
border: 0px 0px 0px 0px;
|
||||
border-radius: 10px;
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element.active,
|
||||
element.selected.urgent {
|
||||
background-color: @ON;
|
||||
text-color: @BG;
|
||||
border-color: @ON;
|
||||
}
|
||||
|
||||
element.selected.urgent {
|
||||
border-color: @BDR;
|
||||
}
|
||||
|
||||
element.urgent,
|
||||
element.selected.active {
|
||||
background-color: @OFF;
|
||||
text-color: @BG;
|
||||
border-color: @OFF;
|
||||
}
|
||||
|
||||
element.selected.active {
|
||||
border-color: @BDR;
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
# change window focus within space
|
||||
alt - j : yabai -m window --focus south
|
||||
alt - k : yabai -m window --focus north
|
||||
alt - h : yabai -m window --focus west
|
||||
alt - l : yabai -m window --focus east
|
||||
|
||||
#change focus between external displays (left and right)
|
||||
alt - s: yabai -m display --focus west
|
||||
alt - g: yabai -m display --focus east
|
||||
|
||||
# rotate layout clockwise
|
||||
shift + alt - r : yabai -m space --rotate 270
|
||||
|
||||
# flip along y-axis
|
||||
shift + alt - y : yabai -m space --mirror y-axis
|
||||
|
||||
# flip along x-axis
|
||||
shift + alt - x : yabai -m space --mirror x-axis
|
||||
|
||||
# toggle window float
|
||||
shift + alt - f : yabai -m window --toggle float --grid 4:4:1:1:2:2
|
||||
|
||||
# maximize a window
|
||||
shift + alt - b : yabai -m window --toggle zoom-fullscreen
|
||||
|
||||
# balance out tree of windows (resize to occupy same area)
|
||||
shift + alt - m : yabai -m space --balance
|
||||
|
||||
# swap windows
|
||||
shift + alt - j : yabai -m window --swap south
|
||||
shift + alt - k : yabai -m window --swap north
|
||||
shift + alt - h : yabai -m window --swap west
|
||||
shift + alt - l : yabai -m window --swap east
|
||||
|
||||
# move window and split
|
||||
ctrl + alt - j : yabai -m window --warp south
|
||||
ctrl + alt - k : yabai -m window --warp north
|
||||
ctrl + alt - h : yabai -m window --warp west
|
||||
ctrl + alt - l : yabai -m window --warp east
|
||||
|
||||
# move window to display left and right
|
||||
shift + alt - s : yabai -m window --display west; yabai -m display --focus west;
|
||||
shift + alt - g : yabai -m window --display east; yabai -m display --focus east;
|
||||
|
||||
#move window to prev and next space
|
||||
shift + alt - p : yabai -m window --space prev;
|
||||
shift + alt - n : yabai -m window --space next;
|
||||
|
||||
# move window to space #
|
||||
shift + alt - 1 : yabai -m window --space 1;
|
||||
shift + alt - 2 : yabai -m window --space 2;
|
||||
shift + alt - 3 : yabai -m window --space 3;
|
||||
shift + alt - 4 : yabai -m window --space 4;
|
||||
shift + alt - 5 : yabai -m window --space 5;
|
||||
shift + alt - 6 : yabai -m window --space 6;
|
||||
shift + alt - 7 : yabai -m window --space 7;
|
||||
|
||||
# stop/start/restart yabai
|
||||
ctrl + alt - q : yabai --stop-service
|
||||
ctrl + alt - s : yabai --start-service
|
||||
ctrl + alt - r : yabai --restart-service
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
dest="$HOME/.config/waybar"
|
||||
rm -rf "$dest"
|
||||
mkdir -p "$(dirname "$dest")"
|
||||
ln -s "$PWD" "$dest"
|
||||
echo "Linked .config/waybar -> $dest"
|
||||
@@ -0,0 +1,193 @@
|
||||
// -*- mode: jsonc -*-
|
||||
{
|
||||
"height": 30,
|
||||
"spacing": 0,
|
||||
"margin": "8 8 0 8",
|
||||
"modules-left": ["group/system", "group/irl", "group/keyboard"],
|
||||
"modules-center": ["group/workspace"],
|
||||
"modules-right": ["tray", "group/media", "group/hardware"],
|
||||
|
||||
// Modules configuration
|
||||
// System
|
||||
"group/system": {
|
||||
"orientation": "inherit",
|
||||
// "drawer": {
|
||||
// "transition-duration": 300,
|
||||
// "children-class": "group-system",
|
||||
// "transition-left-to-right": true,
|
||||
// },
|
||||
"modules": [
|
||||
"custom/pacman"
|
||||
]
|
||||
},
|
||||
"custom/pacman": {
|
||||
"format": "{}",
|
||||
"interval": 3600, // Run every hour
|
||||
"exec": "$HOME/.config/waybar/scripts/custom-pacman.sh", // Fetch number of outdate packages
|
||||
"exec-if": "exit 0", // Always run
|
||||
"tooltip": false
|
||||
},
|
||||
|
||||
// IRL
|
||||
"group/irl": {
|
||||
"orientation": "inherit",
|
||||
"modules": ["clock", "custom/weather"]
|
||||
},
|
||||
"clock": {
|
||||
// "timezone": "America/New_York",
|
||||
"format": "<b>{:%H:%M</b>\t%Y %B %d}",
|
||||
"on-click": "thunderbird -calendar",
|
||||
"tooltip": false
|
||||
},
|
||||
"custom/weather": {
|
||||
"format": "<b>{}</b>",
|
||||
"tooltip": true,
|
||||
"interval": 1800,
|
||||
"exec": "$HOME/.config/waybar/scripts/custom-weather.py",
|
||||
"return-type": "json"
|
||||
},
|
||||
|
||||
// keyboard
|
||||
"group/keyboard": {
|
||||
"orientation": "inherit",
|
||||
"modules": ["hyprland/language", "keyboard-state"]
|
||||
},
|
||||
"hyprland/language": {
|
||||
"format-en": "🇺🇸¹",
|
||||
"format-ru": "🇷🇺²",
|
||||
"min-length": 5,
|
||||
"tooltip": false
|
||||
},
|
||||
"keyboard-state": {
|
||||
"capslock": true,
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"locked": "",
|
||||
"unlocked": ""
|
||||
}
|
||||
},
|
||||
|
||||
// Workspace
|
||||
"group/workspace": {
|
||||
"orientation": "inherit",
|
||||
"modules": ["hyprland/window", "custom/dunst", "custom/darkman"]
|
||||
},
|
||||
// "hyprland/workspaces": {
|
||||
// "disable-scroll": true,
|
||||
// "persistent-workspaces": {
|
||||
// "1": [],
|
||||
// "2": [],
|
||||
// "3": [],
|
||||
// "4": []
|
||||
// }
|
||||
// },
|
||||
"hyprland/window": {
|
||||
"max-length": 56,
|
||||
"rewrite": {
|
||||
"": "Hyprland"
|
||||
},
|
||||
"separate-outputs": true
|
||||
},
|
||||
"custom/dunst": {
|
||||
"format": "{}",
|
||||
"exec": "sleep 1 && [[ `dunstctl is-paused` == \"true\" ]] && echo \"\" || echo \"\"",
|
||||
"on-click": "dunstctl set-paused toggle",
|
||||
"interval": "once",
|
||||
"exec-on-event": true,
|
||||
"tooltip": false
|
||||
},
|
||||
"custom/darkman": {
|
||||
"format": "{}",
|
||||
"exec": "sleep 1 && [[ `darkman get` == 'dark' ]] && echo '' || echo ''",
|
||||
"on-click": "darkman toggle",
|
||||
"interval": "once",
|
||||
"exec-on-event": true,
|
||||
"tooltip": false
|
||||
},
|
||||
|
||||
// Tray
|
||||
"tray": {
|
||||
// "icon-size": 21,
|
||||
"spacing": 12
|
||||
},
|
||||
|
||||
// Media
|
||||
"group/media": {
|
||||
"orientation": "inherit",
|
||||
"modules": ["custom/mediaplayer", "group/audio"]
|
||||
},
|
||||
"custom/mediaplayer": {
|
||||
"format": "{icon} {text}",
|
||||
"format-icons": {
|
||||
"spotify": "",
|
||||
"firefox": ""
|
||||
},
|
||||
"escape": true,
|
||||
"return-type": "json",
|
||||
"max-length": 36,
|
||||
"on-click": "playerctl play-pause",
|
||||
"on-click-right": "playerctl stop",
|
||||
"smooth-scrolling-threshold": 10, // This value was tested using a trackpad, it should be lowered if using a mouse.
|
||||
"on-scroll-up": "playerctl next",
|
||||
"on-scroll-down": "playerctl previous",
|
||||
"exec": "$HOME/.config/waybar/scripts/custom-mediaplayer.py 2> /dev/null"
|
||||
},
|
||||
"group/audio": {
|
||||
"orientation": "inherit",
|
||||
"drawer": {
|
||||
"transition-duration": 300,
|
||||
"children-class": "group-audio",
|
||||
"transition-left-to-right": false
|
||||
},
|
||||
"modules": ["wireplumber"]
|
||||
},
|
||||
"wireplumber": {
|
||||
"format": "{volume}% {icon}",
|
||||
"format-muted": "",
|
||||
"on-click": "pwvucontrol",
|
||||
"format-icons": ["", "", ""]
|
||||
},
|
||||
// Hardware
|
||||
"group/hardware": {
|
||||
"orientation": "inherit",
|
||||
"drawer": {
|
||||
"transition-duration": "300",
|
||||
"children-class": "group-hardware",
|
||||
"transition-left-to-right": false
|
||||
},
|
||||
"modules": ["battery", "idle_inhibitor", "power-profiles-daemon"]
|
||||
},
|
||||
"idle_inhibitor": {
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"activated": "",
|
||||
"deactivated": ""
|
||||
},
|
||||
"tooltip-format-activated": "Idle: Disabled",
|
||||
"tooltip-format-deactivated": "Idle: Normal"
|
||||
},
|
||||
"power-profiles-daemon": {
|
||||
"format": "{icon}",
|
||||
"tooltip-format": "Profile: {profile}",
|
||||
"tooltip": true,
|
||||
"format-icons": {
|
||||
"default": "",
|
||||
"performance": "",
|
||||
"balanced": "",
|
||||
"power-saver": ""
|
||||
}
|
||||
},
|
||||
"battery": {
|
||||
"states": {
|
||||
// "good": 95,
|
||||
"warning": 30,
|
||||
"critical": 15
|
||||
},
|
||||
"interval": 15,
|
||||
"format": "{icon}",
|
||||
"format-full": "{icon}",
|
||||
"format-charging": "",
|
||||
"format-plugged": "",
|
||||
"format-icons": ["", "", "", "", ""]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
@define-color red-blur #9D3017;
|
||||
@define-color orange-blur #9A3B12;
|
||||
@define-color yellow-blur #85550E;
|
||||
@define-color green-blur #44551F;
|
||||
@define-color cyan-blur #265464;
|
||||
@define-color blue-blur #1D38B0;
|
||||
@define-color violet-blur #442EA5;
|
||||
|
||||
@define-color red-focus #FEF4F2;
|
||||
@define-color orange-focus #FFF8ED;
|
||||
@define-color yellow-focus #FEFDE8;
|
||||
@define-color green-focus #F8FAEB;
|
||||
@define-color cyan-focus #EFFBFC;
|
||||
@define-color blue-focus #EFF5FF;
|
||||
@define-color violet-focus #EEF0FF;
|
||||
|
||||
@define-color text #F6F6F6;
|
||||
@define-color base #262626;
|
||||
@@ -0,0 +1,18 @@
|
||||
@define-color red-blur #FFD2C8;
|
||||
@define-color orange-blur #FEDBAA;
|
||||
@define-color yellow-blur #FEF9A3;
|
||||
@define-color green-blur #DDEBAB;
|
||||
@define-color cyan-blur #B4E6ED;
|
||||
@define-color blue-blur #BFD8FE;
|
||||
@define-color violet-blur #BDC2FF;
|
||||
|
||||
@define-color red-focus #471408;
|
||||
@define-color orange-focus #431707;
|
||||
@define-color yellow-focus #422406;
|
||||
@define-color green-focus #1E280B;
|
||||
@define-color cyan-focus #122E3A;
|
||||
@define-color blue-focus #172254;
|
||||
@define-color violet-focus #231A4C;
|
||||
|
||||
@define-color text #262626;
|
||||
@define-color base #F6F6F6;
|
||||
Executable
+199
@@ -0,0 +1,199 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Made by github.com/Alexays on github.com/Alexays/Waybar
|
||||
|
||||
import gi
|
||||
gi.require_version("Playerctl", "2.0")
|
||||
from gi.repository import Playerctl, GLib
|
||||
from gi.repository.Playerctl import Player
|
||||
import argparse
|
||||
import logging
|
||||
import sys
|
||||
import signal
|
||||
import gi
|
||||
import json
|
||||
import os
|
||||
from typing import List
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def signal_handler(sig, frame):
|
||||
logger.info("Received signal to stop, exiting")
|
||||
sys.stdout.write("\n")
|
||||
sys.stdout.flush()
|
||||
# loop.quit()
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
class PlayerManager:
|
||||
def __init__(self, selected_player=None, excluded_player=[]):
|
||||
self.manager = Playerctl.PlayerManager()
|
||||
self.loop = GLib.MainLoop()
|
||||
self.manager.connect(
|
||||
"name-appeared", lambda *args: self.on_player_appeared(*args))
|
||||
self.manager.connect(
|
||||
"player-vanished", lambda *args: self.on_player_vanished(*args))
|
||||
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
||||
self.selected_player = selected_player
|
||||
self.excluded_player = excluded_player.split(',') if excluded_player else []
|
||||
|
||||
self.init_players()
|
||||
|
||||
def init_players(self):
|
||||
for player in self.manager.props.player_names:
|
||||
if player.name in self.excluded_player:
|
||||
continue
|
||||
if self.selected_player is not None and self.selected_player != player.name:
|
||||
logger.debug(f"{player.name} is not the filtered player, skipping it")
|
||||
continue
|
||||
self.init_player(player)
|
||||
|
||||
def run(self):
|
||||
logger.info("Starting main loop")
|
||||
self.loop.run()
|
||||
|
||||
def init_player(self, player):
|
||||
logger.info(f"Initialize new player: {player.name}")
|
||||
player = Playerctl.Player.new_from_name(player)
|
||||
player.connect("playback-status",
|
||||
self.on_playback_status_changed, None)
|
||||
player.connect("metadata", self.on_metadata_changed, None)
|
||||
self.manager.manage_player(player)
|
||||
self.on_metadata_changed(player, player.props.metadata)
|
||||
|
||||
def get_players(self) -> List[Player]:
|
||||
return self.manager.props.players
|
||||
|
||||
def write_output(self, text, status, player):
|
||||
logger.debug(f"Writing output: {text}")
|
||||
|
||||
if status == "idle":
|
||||
self.clear_output()
|
||||
return
|
||||
|
||||
output = {"text": text,
|
||||
"class": status,
|
||||
"alt": player.props.player_name if status != "idle" else ""}
|
||||
|
||||
|
||||
sys.stdout.write(json.dumps(output) + "\n")
|
||||
sys.stdout.flush()
|
||||
|
||||
def clear_output(self):
|
||||
sys.stdout.write("\n")
|
||||
sys.stdout.flush()
|
||||
|
||||
def on_playback_status_changed(self, player, status, _=None):
|
||||
logger.debug(f"Playback status changed for player {player.props.player_name}: {status}")
|
||||
self.on_metadata_changed(player, player.props.metadata)
|
||||
|
||||
def get_first_playing_player(self):
|
||||
players = self.get_players()
|
||||
logger.debug(f"Getting first playing player from {len(players)} players")
|
||||
if len(players) > 0:
|
||||
# if any are playing, show the first one that is playing
|
||||
# reverse order, so that the most recently added ones are preferred
|
||||
for player in players[::-1]:
|
||||
if player.props.status == "Playing":
|
||||
return player
|
||||
# if none are playing, show the first one
|
||||
return players[0]
|
||||
else:
|
||||
logger.debug("No players found")
|
||||
return None
|
||||
|
||||
def show_most_important_player(self):
|
||||
logger.debug("Showing most important player")
|
||||
# show the currently playing player
|
||||
# or else show the first paused player
|
||||
# or else show nothing
|
||||
current_player = self.get_first_playing_player()
|
||||
if current_player is not None:
|
||||
self.on_metadata_changed(current_player, current_player.props.metadata)
|
||||
else:
|
||||
self.clear_output()
|
||||
|
||||
def on_metadata_changed(self, player, metadata, _=None):
|
||||
logger.debug(f"Metadata changed for player {player.props.player_name}")
|
||||
player_name = player.props.player_name
|
||||
artist = player.get_artist()
|
||||
title = player.get_title()
|
||||
|
||||
track_info = ""
|
||||
if player_name == "spotify" and "mpris:trackid" in metadata.keys() and ":ad:" in player.props.metadata["mpris:trackid"]:
|
||||
track_info = "Advertisement"
|
||||
elif artist is not None and artist.strip() and title is not None:
|
||||
track_info = f"{artist} - {title}"
|
||||
else:
|
||||
track_info = title
|
||||
|
||||
player_status = "idle"
|
||||
if track_info:
|
||||
if player.props.status == "Playing":
|
||||
player_status = "playing"
|
||||
else:
|
||||
player_status = "paused"
|
||||
# only print output if no other player is playing
|
||||
current_playing = self.get_first_playing_player()
|
||||
if current_playing is None or current_playing.props.player_name == player.props.player_name:
|
||||
self.write_output(track_info, player_status, player)
|
||||
else:
|
||||
logger.debug(f"Other player {current_playing.props.player_name} is playing, skipping")
|
||||
|
||||
def on_player_appeared(self, _, player):
|
||||
logger.info(f"Player has appeared: {player.name}")
|
||||
if player is not None and (self.selected_player is None or player.name == self.selected_player):
|
||||
self.init_player(player)
|
||||
else:
|
||||
logger.debug(
|
||||
"New player appeared, but it's not the selected player, skipping")
|
||||
|
||||
def on_player_vanished(self, _, player):
|
||||
logger.info(f"Player {player.props.player_name} has vanished")
|
||||
self.show_most_important_player()
|
||||
|
||||
def parse_arguments():
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
# Increase verbosity with every occurrence of -v
|
||||
parser.add_argument("-v", "--verbose", action="count", default=0)
|
||||
|
||||
parser.add_argument("-x", "--exclude", "- Comma-separated list of excluded player")
|
||||
|
||||
# Define for which player we"re listening
|
||||
parser.add_argument("--player")
|
||||
|
||||
parser.add_argument("--enable-logging", action="store_true")
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
arguments = parse_arguments()
|
||||
|
||||
# Initialize logging
|
||||
if arguments.enable_logging:
|
||||
logfile = os.path.join(os.path.dirname(
|
||||
os.path.realpath(__file__)), "media-player.log")
|
||||
logging.basicConfig(filename=logfile, level=logging.DEBUG,
|
||||
format="%(asctime)s %(name)s %(levelname)s:%(lineno)d %(message)s")
|
||||
|
||||
# Logging is set by default to WARN and higher.
|
||||
# With every occurrence of -v it's lowered by one
|
||||
logger.setLevel(max((3 - arguments.verbose) * 10, 0))
|
||||
|
||||
logger.info("Creating player manager")
|
||||
if arguments.player:
|
||||
logger.info(f"Filtering for player: {arguments.player}")
|
||||
if arguments.exclude:
|
||||
logger.info(f"Exclude player {arguments.exclude}")
|
||||
|
||||
player = PlayerManager(arguments.player, arguments.exclude)
|
||||
player.run()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
OUTDATED=$(pacman -Qu | wc -l)
|
||||
|
||||
if [[ "$OUTDATED" -ne 0 ]]; then
|
||||
echo " <b>$OUTDATED</b> <sup></sup>"
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
Executable
+116
@@ -0,0 +1,116 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Made by github.com/unites on github.com/unites/bin
|
||||
|
||||
import json
|
||||
import requests
|
||||
from datetime import datetime
|
||||
|
||||
WEATHER_CODES = {
|
||||
'113': '☀️',
|
||||
'116': '⛅️',
|
||||
'119': '☁️',
|
||||
'122': '☁️',
|
||||
'143': '🌫',
|
||||
'176': '🌦',
|
||||
'179': '🌧',
|
||||
'182': '🌧',
|
||||
'185': '🌧',
|
||||
'200': '⛈',
|
||||
'227': '🌨',
|
||||
'230': '❄️',
|
||||
'248': '🌫',
|
||||
'260': '🌫',
|
||||
'263': '🌦',
|
||||
'266': '🌦',
|
||||
'281': '🌧',
|
||||
'284': '🌧',
|
||||
'293': '🌦',
|
||||
'296': '🌦',
|
||||
'299': '🌧',
|
||||
'302': '🌧',
|
||||
'305': '🌧',
|
||||
'308': '🌧',
|
||||
'311': '🌧',
|
||||
'314': '🌧',
|
||||
'317': '🌧',
|
||||
'320': '🌨',
|
||||
'323': '🌨',
|
||||
'326': '🌨',
|
||||
'329': '❄️',
|
||||
'332': '❄️',
|
||||
'335': '❄️',
|
||||
'338': '❄️',
|
||||
'350': '🌧',
|
||||
'353': '🌦',
|
||||
'356': '🌧',
|
||||
'359': '🌧',
|
||||
'362': '🌧',
|
||||
'365': '🌧',
|
||||
'368': '🌨',
|
||||
'371': '❄️',
|
||||
'374': '🌧',
|
||||
'377': '🌧',
|
||||
'386': '⛈',
|
||||
'389': '🌩',
|
||||
'392': '⛈',
|
||||
'395': '❄️'
|
||||
}
|
||||
|
||||
data = {}
|
||||
|
||||
|
||||
weather = requests.get("https://wttr.in/?format=j1").json()
|
||||
|
||||
|
||||
def format_time(time):
|
||||
return time.replace("00", "").zfill(2)
|
||||
|
||||
|
||||
def format_temp(temp):
|
||||
return (hour['FeelsLikeF']+"°").ljust(3)
|
||||
|
||||
|
||||
def format_chances(hour):
|
||||
chances = {
|
||||
"chanceoffog": "Fog",
|
||||
"chanceoffrost": "Frost",
|
||||
"chanceofovercast": "Overcast",
|
||||
"chanceofrain": "Rain",
|
||||
"chanceofsnow": "Snow",
|
||||
"chanceofsunshine": "Sunshine",
|
||||
"chanceofthunder": "Thunder",
|
||||
"chanceofwindy": "Wind"
|
||||
}
|
||||
|
||||
conditions = []
|
||||
for event in chances.keys():
|
||||
if int(hour[event]) > 0:
|
||||
conditions.append(chances[event]+" "+hour[event]+"%")
|
||||
return ", ".join(conditions)
|
||||
|
||||
|
||||
data['text'] = WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \
|
||||
" "+weather['current_condition'][0]['FeelsLikeC']+"°"
|
||||
|
||||
data['tooltip'] = f"<b>{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_C']}°</b>\n"
|
||||
data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeC']}°\n"
|
||||
data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedKmph']}Km/h\n"
|
||||
data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n"
|
||||
for i, day in enumerate(weather['weather']):
|
||||
data['tooltip'] += f"\n<b>"
|
||||
if i == 0:
|
||||
data['tooltip'] += "Today, "
|
||||
if i == 1:
|
||||
data['tooltip'] += "Tomorrow, "
|
||||
data['tooltip'] += f"{day['date']}</b>\n"
|
||||
data['tooltip'] += f"⬆️ {day['maxtempC']}° ⬇️ {day['mintempC']}° "
|
||||
data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n"
|
||||
for hour in day['hourly']:
|
||||
if i == 0:
|
||||
if int(format_time(hour['time'])) < datetime.now().hour-2:
|
||||
continue
|
||||
data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeF'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n"
|
||||
|
||||
|
||||
print(json.dumps(data))
|
||||
@@ -0,0 +1,223 @@
|
||||
@import url("./.theme.css");
|
||||
|
||||
* {
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-family: "NotoSans Nerd Font Propo";
|
||||
min-height: 30px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
window#waybar.hidden {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
#system {
|
||||
background: @base;
|
||||
}
|
||||
|
||||
#system #custom-pacman {
|
||||
padding: 0 12px;
|
||||
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#irl {
|
||||
margin-left: 8px;
|
||||
|
||||
background: @base;
|
||||
}
|
||||
|
||||
#irl #clock {
|
||||
padding: 0 12px;
|
||||
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#irl #custom-weather {
|
||||
padding: 0 12px;
|
||||
|
||||
color: @cyan-focus;
|
||||
background: @cyan-blur;
|
||||
}
|
||||
|
||||
#keyboard {
|
||||
margin-left: 8px;
|
||||
|
||||
color: @text;
|
||||
background: @base;
|
||||
}
|
||||
|
||||
#keyboard #language {
|
||||
padding: 0 12px;
|
||||
}
|
||||
|
||||
#keyboard #keyboard-state {
|
||||
padding: 0 12px;
|
||||
|
||||
color: @red-focus;
|
||||
background: @red-blur;
|
||||
}
|
||||
|
||||
/*
|
||||
#workspace #workspaces {
|
||||
transition: none;
|
||||
}
|
||||
|
||||
#workspace #workspaces button {
|
||||
transition: 300ms;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
#workspace #workspaces button.persistent {
|
||||
color: @text;
|
||||
font-size: 12px;
|
||||
}
|
||||
*/
|
||||
|
||||
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
|
||||
/*
|
||||
#workspace #workspaces button:hover {
|
||||
box-shadow: inherit;
|
||||
text-shadow: inherit;
|
||||
border-radius: 8px;
|
||||
color: @base;
|
||||
background: @text;
|
||||
}
|
||||
|
||||
#workspace #workspaces button.focused {
|
||||
color: white;
|
||||
}
|
||||
*/
|
||||
|
||||
#workspace #window {
|
||||
padding: 0 12px;
|
||||
|
||||
background: @base;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#workspace #custom-dunst {
|
||||
margin-left: 8px;
|
||||
padding: 0 12px;
|
||||
|
||||
background: @base;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#workspace #custom-darkman {
|
||||
margin-left: 8px;
|
||||
padding: 0 12px;
|
||||
|
||||
background: @base;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#tray {
|
||||
margin-right: 8px;
|
||||
padding: 0 12px;
|
||||
transition: none;
|
||||
|
||||
background: #11111b;
|
||||
}
|
||||
|
||||
#media {
|
||||
margin-right: 8px;
|
||||
|
||||
color: @text;
|
||||
background: @base;
|
||||
}
|
||||
|
||||
#media #custom-mediaplayer {
|
||||
padding: 0 8px;
|
||||
transition: 300ms;
|
||||
}
|
||||
|
||||
#media .playing {
|
||||
color: @green-focus;
|
||||
background: @green-blur;
|
||||
}
|
||||
|
||||
#media .paused {
|
||||
color: @yellow-focus;
|
||||
background: @yellow-blur;
|
||||
}
|
||||
|
||||
#media .idle {
|
||||
background: @base;
|
||||
}
|
||||
|
||||
#media #audio {
|
||||
}
|
||||
|
||||
#media #audio #wireplumber {
|
||||
padding: 0 12px;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
#hardware {
|
||||
background: @base;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#hardware * {
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
#hardware #idle_inhibitor {
|
||||
padding: 0 12px;
|
||||
transition: 300ms;
|
||||
}
|
||||
|
||||
#hardware #idle_inhibitor:hover {
|
||||
background: @text;
|
||||
color: @base;
|
||||
}
|
||||
|
||||
#hardware #power-profiles-daemon {
|
||||
padding: 0 12px;
|
||||
transition: 300ms;
|
||||
}
|
||||
|
||||
#hardware #power-profiles-daemon:hover {
|
||||
background: @text;
|
||||
color: @base;
|
||||
}
|
||||
|
||||
#hardware #battery {
|
||||
padding: 0 12px;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
#hardware #battery.charging {
|
||||
color: @blue-focus;
|
||||
background-color: @blue-blur;
|
||||
}
|
||||
|
||||
#hardware #battery.warning:not(.charging) {
|
||||
color: @orange-focus;
|
||||
background-color: @orange-blur;
|
||||
}
|
||||
|
||||
#hardware #battery.critical:not(.charging) {
|
||||
color: @red-focus;
|
||||
background-color: @red-blur;
|
||||
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: @text;
|
||||
color: @base;
|
||||
}
|
||||
}
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
dest_dir="$HOME/.config/xdg-desktop-portal"
|
||||
mkdir -p "$dest_dir"
|
||||
ln -sf "$PWD/portals.conf" "$dest_dir/portals.conf"
|
||||
echo "Linked portals.conf -> $dest_dir/portals.conf"
|
||||
@@ -0,0 +1,2 @@
|
||||
[preferred]
|
||||
org.freedesktop.impl.portal.Settings=darkman
|
||||
@@ -0,0 +1,34 @@
|
||||
# for this to work you must configure sudo such that
|
||||
# it will be able to run the command without password
|
||||
|
||||
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
|
||||
sudo yabai --load-sa
|
||||
|
||||
# exclude from manager
|
||||
yabai -m rule --add app="^System Settings$" manage=off
|
||||
yabai -m rule --add app="^Calculator$" manage=off
|
||||
yabai -m rule --add app="^Karabiner-Elements$" manage=off
|
||||
|
||||
# default layout
|
||||
yabai -m config layout bsp
|
||||
|
||||
# New window spawns to the right if vertical split, or bottom if horizontal split
|
||||
yabai -m config window_placement second_child
|
||||
|
||||
# padding
|
||||
yabai -m config top_padding 8
|
||||
yabai -m config bottom_padding 8
|
||||
yabai -m config left_padding 8
|
||||
yabai -m config right_padding 8
|
||||
yabai -m config window_gap 8
|
||||
|
||||
# modifier for clicking and dragging with mouse
|
||||
yabai -m config mouse_modifier alt
|
||||
# set drag to move window
|
||||
yabai -m config mouse_action1 move
|
||||
# set drag to resize window
|
||||
yabai -m config mouse_action2 resize
|
||||
|
||||
# when window is dropped in center of another window, swap them (on edges it will split it)
|
||||
yabai -m mouse_drop_action swap
|
||||
|
||||
@@ -0,0 +1,452 @@
|
||||
keybinds clear-defaults=true {
|
||||
normal {
|
||||
// uncomment this and adjust key if using copy_on_select=false
|
||||
// bind "Alt c" { Copy; }
|
||||
}
|
||||
locked {
|
||||
bind "Alt g" { SwitchToMode "Normal"; }
|
||||
}
|
||||
resize {
|
||||
bind "Alt n" { SwitchToMode "Normal"; }
|
||||
bind "h" "Left" { Resize "Increase Left"; }
|
||||
bind "j" "Down" { Resize "Increase Down"; }
|
||||
bind "k" "Up" { Resize "Increase Up"; }
|
||||
bind "l" "Right" { Resize "Increase Right"; }
|
||||
bind "H" { Resize "Decrease Left"; }
|
||||
bind "J" { Resize "Decrease Down"; }
|
||||
bind "K" { Resize "Decrease Up"; }
|
||||
bind "L" { Resize "Decrease Right"; }
|
||||
bind "=" "+" { Resize "Increase"; }
|
||||
bind "-" { Resize "Decrease"; }
|
||||
}
|
||||
pane {
|
||||
bind "Alt p" { SwitchToMode "Normal"; }
|
||||
bind "h" "Left" { MoveFocus "Left"; }
|
||||
bind "l" "Right" { MoveFocus "Right"; }
|
||||
bind "j" "Down" { MoveFocus "Down"; }
|
||||
bind "k" "Up" { MoveFocus "Up"; }
|
||||
bind "p" { SwitchFocus; }
|
||||
bind "n" { NewPane; SwitchToMode "Normal"; }
|
||||
bind "d" { NewPane "Down"; SwitchToMode "Normal"; }
|
||||
bind "r" { NewPane "Right"; SwitchToMode "Normal"; }
|
||||
bind "x" { CloseFocus; SwitchToMode "Normal"; }
|
||||
bind "f" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
|
||||
bind "z" { TogglePaneFrames; SwitchToMode "Normal"; }
|
||||
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
|
||||
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
|
||||
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
|
||||
}
|
||||
move {
|
||||
bind "Alt m" { SwitchToMode "Normal"; }
|
||||
bind "n" "Tab" { MovePane; }
|
||||
bind "p" { MovePaneBackwards; }
|
||||
bind "h" "Left" { MovePane "Left"; }
|
||||
bind "j" "Down" { MovePane "Down"; }
|
||||
bind "k" "Up" { MovePane "Up"; }
|
||||
bind "l" "Right" { MovePane "Right"; }
|
||||
}
|
||||
tab {
|
||||
bind "Alt t" { SwitchToMode "Normal"; }
|
||||
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
|
||||
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
|
||||
bind "l" "Right" "Down" "j" { GoToNextTab; }
|
||||
bind "n" { NewTab; SwitchToMode "Normal"; }
|
||||
bind "x" { CloseTab; SwitchToMode "Normal"; }
|
||||
bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; }
|
||||
bind "b" { BreakPane; SwitchToMode "Normal"; }
|
||||
bind "]" { BreakPaneRight; SwitchToMode "Normal"; }
|
||||
bind "[" { BreakPaneLeft; SwitchToMode "Normal"; }
|
||||
bind "1" { GoToTab 1; SwitchToMode "Normal"; }
|
||||
bind "2" { GoToTab 2; SwitchToMode "Normal"; }
|
||||
bind "3" { GoToTab 3; SwitchToMode "Normal"; }
|
||||
bind "4" { GoToTab 4; SwitchToMode "Normal"; }
|
||||
bind "5" { GoToTab 5; SwitchToMode "Normal"; }
|
||||
bind "6" { GoToTab 6; SwitchToMode "Normal"; }
|
||||
bind "7" { GoToTab 7; SwitchToMode "Normal"; }
|
||||
bind "8" { GoToTab 8; SwitchToMode "Normal"; }
|
||||
bind "9" { GoToTab 9; SwitchToMode "Normal"; }
|
||||
bind "Tab" { ToggleTab; }
|
||||
}
|
||||
scroll {
|
||||
bind "Alt s" { SwitchToMode "Normal"; }
|
||||
bind "e" { EditScrollback; SwitchToMode "Normal"; }
|
||||
bind "s" { SwitchToMode "EnterSearch"; SearchInput 0; }
|
||||
bind "Alt c" { ScrollToBottom; SwitchToMode "Normal"; }
|
||||
bind "j" "Down" { ScrollDown; }
|
||||
bind "k" "Up" { ScrollUp; }
|
||||
bind "Alt f" "PageDown" "Right" "l" { PageScrollDown; }
|
||||
bind "Alt b" "PageUp" "Left" "h" { PageScrollUp; }
|
||||
bind "d" { HalfPageScrollDown; }
|
||||
bind "u" { HalfPageScrollUp; }
|
||||
// uncomment this and adjust key if using copy_on_select=false
|
||||
// bind "Alt c" { Copy; }
|
||||
}
|
||||
search {
|
||||
bind "Alt s" { SwitchToMode "Normal"; }
|
||||
bind "Alt c" { ScrollToBottom; SwitchToMode "Normal"; }
|
||||
bind "j" "Down" { ScrollDown; }
|
||||
bind "k" "Up" { ScrollUp; }
|
||||
bind "Alt u" "PageDown" "Right" "l" { PageScrollDown; }
|
||||
bind "Alt d" "PageUp" "Left" "h" { PageScrollUp; }
|
||||
bind "d" { HalfPageScrollDown; }
|
||||
bind "u" { HalfPageScrollUp; }
|
||||
bind "n" { Search "down"; }
|
||||
bind "p" { Search "up"; }
|
||||
bind "c" { SearchToggleOption "CaseSensitivity"; }
|
||||
bind "w" { SearchToggleOption "Wrap"; }
|
||||
bind "o" { SearchToggleOption "WholeWord"; }
|
||||
}
|
||||
entersearch {
|
||||
bind "Alt c" "Esc" { SwitchToMode "Scroll"; }
|
||||
bind "Enter" { SwitchToMode "Search"; }
|
||||
}
|
||||
renametab {
|
||||
bind "Alt c" { SwitchToMode "Normal"; }
|
||||
bind "Esc" { UndoRenameTab; SwitchToMode "Tab"; }
|
||||
}
|
||||
renamepane {
|
||||
bind "Alt c" { SwitchToMode "Normal"; }
|
||||
bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; }
|
||||
}
|
||||
session {
|
||||
bind "Alt o" { SwitchToMode "Normal"; }
|
||||
bind "Alt s" { SwitchToMode "Scroll"; }
|
||||
bind "d" { Detach; }
|
||||
bind "w" {
|
||||
LaunchOrFocusPlugin "session-manager" {
|
||||
floating true
|
||||
move_to_focused_tab true
|
||||
};
|
||||
SwitchToMode "Normal"
|
||||
}
|
||||
}
|
||||
shared_except "locked" {
|
||||
bind "Alt g" { SwitchToMode "Locked"; }
|
||||
bind "Alt q" { Quit; }
|
||||
bind "Alt n" { NewPane; }
|
||||
bind "Alt i" { MoveTab "Left"; }
|
||||
bind "Alt o" { MoveTab "Right"; }
|
||||
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
|
||||
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
|
||||
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
|
||||
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
|
||||
bind "Alt =" "Alt +" { Resize "Increase"; }
|
||||
bind "Alt -" { Resize "Decrease"; }
|
||||
bind "Alt [" { PreviousSwapLayout; }
|
||||
bind "Alt ]" { NextSwapLayout; }
|
||||
}
|
||||
shared_except "normal" "locked" {
|
||||
bind "Enter" "Esc" { SwitchToMode "Normal"; }
|
||||
}
|
||||
shared_except "pane" "locked" {
|
||||
bind "Alt p" { SwitchToMode "Pane"; }
|
||||
}
|
||||
shared_except "resize" "locked" {
|
||||
bind "Alt n" { SwitchToMode "Resize"; }
|
||||
}
|
||||
shared_except "scroll" "locked" {
|
||||
bind "Alt s" { SwitchToMode "Scroll"; }
|
||||
}
|
||||
shared_except "session" "locked" {
|
||||
bind "Alt o" { SwitchToMode "Session"; }
|
||||
}
|
||||
shared_except "tab" "locked" {
|
||||
bind "Alt t" { SwitchToMode "Tab"; }
|
||||
}
|
||||
shared_except "move" "locked" {
|
||||
bind "Alt m" { SwitchToMode "Move"; }
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
tab-bar location="zellij:tab-bar"
|
||||
status-bar location="zellij:status-bar"
|
||||
strider location="zellij:strider"
|
||||
compact-bar location="zellij:compact-bar"
|
||||
session-manager location="zellij:session-manager"
|
||||
welcome-screen location="zellij:session-manager" {
|
||||
welcome_screen true
|
||||
}
|
||||
filepicker location="zellij:strider" {
|
||||
cwd "/"
|
||||
}
|
||||
}
|
||||
|
||||
on_force_close "quit"
|
||||
simplified_ui false
|
||||
// default_shell "$SHELL"
|
||||
// default_cwd ""
|
||||
pane_frames false
|
||||
auto_layout true
|
||||
session_serialization true
|
||||
serialize_pane_viewport false
|
||||
scrollback_lines_to_serialize 10000
|
||||
|
||||
default_layout "compact"
|
||||
default_mode "normal"
|
||||
mouse_mode true
|
||||
scroll_buffer_size 10000
|
||||
|
||||
// copy_command "xclip -selection clipboard" // x11
|
||||
copy_command "wl-copy" // wayland
|
||||
// copy_command "pbcopy" // osx
|
||||
|
||||
copy_clipboard "system"
|
||||
copy_on_select true
|
||||
|
||||
scrollback_editor "$EDITOR"
|
||||
|
||||
mirror_session false
|
||||
|
||||
// layout_dir "~/.config/zellij/layouts"
|
||||
// theme_dir "~/.config/zellij/themes"
|
||||
|
||||
styled_underlines true
|
||||
|
||||
disable_session_metadata false
|
||||
show_startup_tips false
|
||||
|
||||
|
||||
themes {
|
||||
rainby-light {
|
||||
text_unselected {
|
||||
base "#454545"
|
||||
background "#f6f6f6"
|
||||
emphasis_0 "#257d95"
|
||||
emphasis_1 "#2358ed"
|
||||
emphasis_2 "#6e8b25"
|
||||
emphasis_3 "#e24420"
|
||||
}
|
||||
text_selected {
|
||||
base "#454545"
|
||||
background "#d1d1d1"
|
||||
emphasis_0 "#257d95"
|
||||
emphasis_1 "#2358ed"
|
||||
emphasis_2 "#6e8b25"
|
||||
emphasis_3 "#6043e8"
|
||||
}
|
||||
ribbon_selected {
|
||||
base "#f6f6f6"
|
||||
background "#6e8b25"
|
||||
emphasis_0 "#e24420"
|
||||
emphasis_1 "#257d95"
|
||||
emphasis_2 "#6043e8"
|
||||
emphasis_3 "#1e66f5"
|
||||
}
|
||||
ribbon_unselected {
|
||||
base "#f6f6f6"
|
||||
background "#454545"
|
||||
emphasis_0 "#6043e8"
|
||||
emphasis_1 "#454545"
|
||||
emphasis_2 "#1e66f5"
|
||||
emphasis_3 "#6043e8"
|
||||
}
|
||||
table_title {
|
||||
base "#6e8b25"
|
||||
background 0
|
||||
emphasis_0 "#257d95"
|
||||
emphasis_1 "#2358ed"
|
||||
emphasis_2 "#6e8b25"
|
||||
emphasis_3 "#6043e8"
|
||||
}
|
||||
table_cell_selected {
|
||||
base "#454545"
|
||||
background "#d1d1d1"
|
||||
emphasis_0 "#257d95"
|
||||
emphasis_1 "#2358ed"
|
||||
emphasis_2 "#6e8b25"
|
||||
emphasis_3 "#6043e8"
|
||||
}
|
||||
table_cell_unselected {
|
||||
base "#454545"
|
||||
background "#f6f6f6"
|
||||
emphasis_0 "#257d95"
|
||||
emphasis_1 "#2358ed"
|
||||
emphasis_2 "#6e8b25"
|
||||
emphasis_3 "#6043e8"
|
||||
}
|
||||
list_selected {
|
||||
base "#454545"
|
||||
background "#d1d1d1"
|
||||
emphasis_0 "#257d95"
|
||||
emphasis_1 "#2358ed"
|
||||
emphasis_2 "#6e8b25"
|
||||
emphasis_3 "#6043e8"
|
||||
}
|
||||
list_unselected {
|
||||
base "#454545"
|
||||
background "#f6f6f6"
|
||||
emphasis_0 "#257d95"
|
||||
emphasis_1 "#2358ed"
|
||||
emphasis_2 "#6e8b25"
|
||||
emphasis_3 "#6043e8"
|
||||
}
|
||||
frame_selected {
|
||||
base "#6e8b25"
|
||||
background 0
|
||||
emphasis_0 "#257d95"
|
||||
emphasis_1 "#2358ed"
|
||||
emphasis_2 "#6043e8"
|
||||
emphasis_3 0
|
||||
}
|
||||
frame_highlight {
|
||||
base "#257d95"
|
||||
background 0
|
||||
emphasis_0 "#e24420"
|
||||
emphasis_1 "#6043e8"
|
||||
emphasis_2 "#257d95"
|
||||
emphasis_3 "#257d95"
|
||||
}
|
||||
exit_code_success {
|
||||
base "#6e8b25"
|
||||
background 0
|
||||
emphasis_0 "#2358ed"
|
||||
emphasis_1 "#f6f6f6"
|
||||
emphasis_2 "#6043e8"
|
||||
emphasis_3 "#1e66f5"
|
||||
}
|
||||
exit_code_error {
|
||||
base "#e24420"
|
||||
background 0
|
||||
emphasis_0 "#ca9704"
|
||||
emphasis_1 0
|
||||
emphasis_2 0
|
||||
emphasis_3 0
|
||||
}
|
||||
multiplayer_user_colors {
|
||||
player_1 "#6043e8"
|
||||
player_2 "#1e66f5"
|
||||
player_3 0
|
||||
player_4 "#ca9704"
|
||||
player_5 "#2358ed"
|
||||
player_6 0
|
||||
player_7 "#e24420"
|
||||
player_8 0
|
||||
player_9 0
|
||||
player_10 0
|
||||
}
|
||||
}
|
||||
|
||||
rainby-dark {
|
||||
text_unselected {
|
||||
base "#f6f6f6"
|
||||
background "#262626"
|
||||
emphasis_0 "#fdec47"
|
||||
emphasis_1 "#81d3e0"
|
||||
emphasis_2 "#c4dc7a"
|
||||
emphasis_3 "#a3a8fe"
|
||||
}
|
||||
text_selected {
|
||||
base "#f6f6f6"
|
||||
background "#4f4f4f"
|
||||
emphasis_0 "#fdec47"
|
||||
emphasis_1 "#81d3e0"
|
||||
emphasis_2 "#c4dc7a"
|
||||
emphasis_3 "#a3a8fe"
|
||||
}
|
||||
ribbon_selected {
|
||||
base "#454545"
|
||||
background "#c4dc7a"
|
||||
emphasis_0 "#ffb4a3"
|
||||
emphasis_1 "#fdec47"
|
||||
emphasis_2 "#a3a8fe"
|
||||
emphasis_3 "#a2c9fe"
|
||||
}
|
||||
ribbon_unselected {
|
||||
base "#454545"
|
||||
background "#f6f6f6"
|
||||
emphasis_0 "#ffb4a3"
|
||||
emphasis_1 "#f6f6f6"
|
||||
emphasis_2 "#a2c9fe"
|
||||
emphasis_3 "#a3a8fe"
|
||||
}
|
||||
table_title {
|
||||
base "#c4dc7a"
|
||||
background 0
|
||||
emphasis_0 "#fdec47"
|
||||
emphasis_1 "#81d3e0"
|
||||
emphasis_2 "#c4dc7a"
|
||||
emphasis_3 "#a3a8fe"
|
||||
}
|
||||
table_cell_selected {
|
||||
base "#f6f6f6"
|
||||
background "#4f4f4f"
|
||||
emphasis_0 "#fdec47"
|
||||
emphasis_1 "#81d3e0"
|
||||
emphasis_2 "#c4dc7a"
|
||||
emphasis_3 "#a3a8fe"
|
||||
}
|
||||
table_cell_unselected {
|
||||
base "#f6f6f6"
|
||||
background "#454545"
|
||||
emphasis_0 "#fdec47"
|
||||
emphasis_1 "#81d3e0"
|
||||
emphasis_2 "#c4dc7a"
|
||||
emphasis_3 "#a3a8fe"
|
||||
}
|
||||
list_selected {
|
||||
base "#f6f6f6"
|
||||
background "#4f4f4f"
|
||||
emphasis_0 "#fdec47"
|
||||
emphasis_1 "#81d3e0"
|
||||
emphasis_2 "#c4dc7a"
|
||||
emphasis_3 "#a3a8fe"
|
||||
}
|
||||
list_unselected {
|
||||
base "#f6f6f6"
|
||||
background "#454545"
|
||||
emphasis_0 "#fdec47"
|
||||
emphasis_1 "#81d3e0"
|
||||
emphasis_2 "#c4dc7a"
|
||||
emphasis_3 "#a3a8fe"
|
||||
}
|
||||
frame_selected {
|
||||
base "#c4dc7a"
|
||||
background 0
|
||||
emphasis_0 "#fdec47"
|
||||
emphasis_1 "#81d3e0"
|
||||
emphasis_2 "#a3a8fe"
|
||||
emphasis_3 0
|
||||
}
|
||||
frame_highlight {
|
||||
base "#fdec47"
|
||||
background 0
|
||||
emphasis_0 "#a3a8fe"
|
||||
emphasis_1 "#fdec47"
|
||||
emphasis_2 "#fdec47"
|
||||
emphasis_3 "#fdec47"
|
||||
}
|
||||
exit_code_success {
|
||||
base "#c4dc7a"
|
||||
background 0
|
||||
emphasis_0 "#81d3e0"
|
||||
emphasis_1 "#454545"
|
||||
emphasis_2 "#a3a8fe"
|
||||
emphasis_3 "#a2c9fe"
|
||||
}
|
||||
exit_code_error {
|
||||
base "#ffb4a3"
|
||||
background 0
|
||||
emphasis_0 "#fcd88b"
|
||||
emphasis_1 0
|
||||
emphasis_2 0
|
||||
emphasis_3 0
|
||||
}
|
||||
multiplayer_user_colors {
|
||||
player_1 "#a3a8fe"
|
||||
player_2 "#a2c9fe"
|
||||
player_3 0
|
||||
player_4 "#fcd88b"
|
||||
player_5 "#81d3e0"
|
||||
player_6 0
|
||||
player_7 "#ffb4a3"
|
||||
player_8 0
|
||||
player_9 0
|
||||
player_10 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BEGIN_ZELLIJ_THEME
|
||||
theme "rainby-dark"
|
||||
// END_ZELLIJ_THEME
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
[include]
|
||||
path = ~/.gitconfig.local
|
||||
[core]
|
||||
editor = nvim
|
||||
ignorecase = false
|
||||
[user]
|
||||
name = Vladimir Eremin
|
||||
email = personal@ermnvldmr.com
|
||||
signingkey = A823B39D0A24B37E
|
||||
[filter "lfs"]
|
||||
clean = git-lfs clean -- %f
|
||||
smudge = git-lfs smudge -- %f
|
||||
process = git-lfs filter-process
|
||||
required = true
|
||||
[credential]
|
||||
helper = /home/deytenit/.dotnet/tools/git-credential-manager
|
||||
credentialStore = gpg
|
||||
[credential "https://dev.azure.com"]
|
||||
useHttpPath = true
|
||||
[commit]
|
||||
gpgsign = true
|
||||
[init]
|
||||
defaultBranch = main
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
# Ignore everything by default.
|
||||
|
||||
|
||||
# Root
|
||||
!README.md
|
||||
|
||||
# Git
|
||||
!.gitconfig
|
||||
!.gitignore
|
||||
|
||||
# Assets
|
||||
!assets/
|
||||
assets/**
|
||||
!assets/**/*
|
||||
|
||||
# Config
|
||||
!.config/
|
||||
.config/*
|
||||
|
||||
## Dunst
|
||||
!.config/dunst
|
||||
.config/dunst/**
|
||||
!.config/dunst/dunstrc
|
||||
|
||||
## Fish
|
||||
!.config/fish
|
||||
.config/fish/**
|
||||
!.config/fish/config.fish
|
||||
|
||||
## Hyprland
|
||||
!.config/hypr
|
||||
.config/hypr/**
|
||||
!.config/hypr/**/*
|
||||
|
||||
## Neovim
|
||||
!.config/nvim
|
||||
.config/nvim/**
|
||||
!.config/nvim/**/*
|
||||
|
||||
## Rofi
|
||||
!.config/rofi
|
||||
.config/rofi/**
|
||||
!.config/rofi/**/*
|
||||
|
||||
# Waybar
|
||||
!.config/waybar
|
||||
.config/waybar/**
|
||||
!.config/waybar/**/*
|
||||
.config/waybar/.*
|
||||
|
||||
# Zellij
|
||||
!.config/zellij
|
||||
.config/zellij/**
|
||||
!.config/zellij/config.kdl
|
||||
|
||||
# Darkman
|
||||
!.config/darkman
|
||||
.config/darkman/**
|
||||
!.config/darkman/**/*
|
||||
|
||||
# Skhd
|
||||
!.config/skhd
|
||||
.config/skhd/*
|
||||
!.config/skhd/skhdrc
|
||||
|
||||
# Yabai
|
||||
!.config/yabai
|
||||
.config/yabai/*
|
||||
!.config/yabai/yabairc
|
||||
|
||||
## Alacritty
|
||||
!.config/alacritty
|
||||
.config/alacritty/**
|
||||
!.config/alacritty/**/*
|
||||
|
||||
## XDG desktop portal
|
||||
!.config/xdg-desktop-portal
|
||||
.config/xdg-desktop-portal/**
|
||||
!.config/xdg-desktop-portal/**/*
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.5 MiB |
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#
|
||||
# Root-level dotfile linker for global files
|
||||
#
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
#----------------------------------------
|
||||
# Link .gitconfig
|
||||
#----------------------------------------
|
||||
src="$PWD/.gitconfig"
|
||||
dest="$HOME/.gitconfig"
|
||||
|
||||
echo "Linking .gitconfig → $dest"
|
||||
ln -sf "$src" "$dest"
|
||||
Executable
+52
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#
|
||||
# Root-level bootstrapper
|
||||
# Recursively finds & runs any bootstrap.sh scripts in subdirs.
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
#----------------------------------------
|
||||
# Configuration
|
||||
#----------------------------------------
|
||||
|
||||
FIND_OPTS=( -type f -name 'bootstrap.sh' -not -path './bootstrap.sh' )
|
||||
|
||||
#----------------------------------------
|
||||
# Helpers
|
||||
#----------------------------------------
|
||||
|
||||
log() {
|
||||
echo -e "\e[1;34m[bootstrap]\e[0m $*"
|
||||
}
|
||||
|
||||
#----------------------------------------
|
||||
# Main
|
||||
#----------------------------------------
|
||||
|
||||
log "Starting root bootstrap at $(pwd)"
|
||||
|
||||
# 1) Find all bootstrap.sh except this one (./bootstrap.sh)
|
||||
# 2) Sort so order is stable
|
||||
# 3) For each, cd into its dir and run it
|
||||
while IFS= read -r script; do
|
||||
dir=$(dirname "$script")
|
||||
log "Bootstrapping in '$dir'"
|
||||
|
||||
pushd "$dir" > /dev/null
|
||||
bash bootstrap.sh
|
||||
popd > /dev/null
|
||||
|
||||
done < <( find . "${FIND_OPTS[@]}" | sort )
|
||||
|
||||
|
||||
dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
log "Bootstrapping in '$dir'"
|
||||
|
||||
pushd "$dir" > /dev/null
|
||||
bash bootstrap.root.sh
|
||||
popd > /dev/null
|
||||
|
||||
log "All bootstrap jobs completed"
|
||||
Reference in new issue
Block a user