feat: Initial commit

This commit is contained in:
deytenit committed 2025-05-03 01:00:40 +03:00
commit 331396b361
88 files changed
+5246

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
# BEGIN_ALACRITTY_THEME
general.import = [ "~/.config/alacritty/dark.toml" ]
# END_ALACRITTY_THEME
+25
View File
@@ -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
+22
View File
@@ -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"
+65
View File
@@ -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"
+66
View File
@@ -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"
+19
View File
@@ -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
+3
View File
@@ -0,0 +1,3 @@
lat: 59.6
lng: 30.2
dbusserver: true
+6
View File
@@ -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
+4
View File
@@ -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'
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
pkill -f hyprpaper-random.sh
~/.config/hypr/scripts/hyprpaper-random.sh 300 ~/Pictures/Wallpapers/Dark &
+3
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
spicetify backup apply
spicetify config current_theme catppuccin color_scheme mocha
spicetify apply
+4
View File
@@ -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
+6
View File
@@ -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
+6
View File
@@ -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
+4
View File
@@ -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'
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
pkill -f hyprpaper-random.sh
~/.config/hypr/scripts/hyprpaper-random.sh 300 ~/Pictures/Wallpapers/Light &
+3
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
spicetify backup apply
spicetify config current_theme catppuccin color_scheme latte
spicetify apply
+4
View File
@@ -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
+6
View File
@@ -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
+491
View File
@@ -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
+21
View File
@@ -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
+9
View File
@@ -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"
+78
View File
@@ -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
+36
View File
@@ -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
}
+255
View File
@@ -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')"
+59
View File
@@ -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
}
+14
View File
@@ -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
+42
View File
@@ -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
+54
View File
@@ -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"
+106
View File
@@ -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
+8
View File
@@ -0,0 +1,8 @@
tt.*
.tests
doc/tags
debug
.repro
foo.*
*.log
data
+15
View File
@@ -0,0 +1,15 @@
{
"neodev": {
"library": {
"enabled": true,
"plugins": true
}
},
"neoconf": {
"plugins": {
"lua_ls": {
"enabled": true
}
}
}
}
+201
View File
@@ -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.
+4
View File
@@ -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.
+8
View File
@@ -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"
+2
View File
@@ -0,0 +1,2 @@
-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")
+52
View File
@@ -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" }
}
+12
View File
@@ -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
}
+3
View File
@@ -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
+27
View File
@@ -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>")
+61
View File
@@ -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",
},
},
},
})
+11
View File
@@ -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
+37
View File
@@ -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",
}
}
}
+64
View File
@@ -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,
},
}
+193
View File
@@ -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",
},
},
},
}
+2
View File
@@ -0,0 +1,2 @@
return {
}
+117
View File
@@ -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",
},
},
}
+3
View File
@@ -0,0 +1,3 @@
indent_type = "Spaces"
indent_width = 2
column_width = 120
+11
View File
@@ -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
+89
View File
@@ -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
+6
View File
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
rofi \
-show run \
-scroll-method 0 \
-terminal kitty \
-theme "$HOME"/.config/rofi/config/runner.rasi
+85
View File
@@ -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
+8
View File
@@ -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"
+3
View File
@@ -0,0 +1,3 @@
/*BEGIN_ROFI_THEME*/
@import "./dark.rasi"
/*END_ROFI_THEME*/
+24
View File
@@ -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;
}
+151
View File
@@ -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;
}
+24
View File
@@ -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;
}
+12
View File
@@ -0,0 +1,12 @@
* {
BG: #262626;
BGA: #EFFBFC;
FG: #F6F6F6;
FGA: #9D3017;
BDR: #1D38B0;
SEL: #262626;
UGT: #442EA5;
IMG: #265464;
OFF: #9A3B12;
ON: #44551F;
}
+3
View File
@@ -0,0 +1,3 @@
* {
font: "NotoSans Nerd Font Regular 10";
}
+149
View File
@@ -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;
}
+12
View File
@@ -0,0 +1,12 @@
* {
BG: #F6F6F6;
BGA: #265464;
FG: #262626;
FGA: #FFD2C8;
BDR: #1D38B0;
SEL: #F6F6F6;
UGT: #BDC2FF;
IMG: #BFD8FE;
OFF: #FEDBAA;
ON: #DDEBAB;
}
+152
View File
@@ -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;
}
+150
View File
@@ -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;
}
+151
View File
@@ -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;
}
+153
View File
@@ -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;
}
+147
View File
@@ -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;
}
+153
View File
@@ -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;
}
+61
View File
@@ -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
+8
View File
@@ -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"
+193
View File
@@ -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": ["", "", "", "", ""]
}
}
+18
View File
@@ -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;
+18
View File
@@ -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;
+199
View File
@@ -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()
+9
View File
@@ -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
+116
View File
@@ -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))
+223
View File
@@ -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;
}
}
+7
View File
@@ -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"
+2
View File
@@ -0,0 +1,2 @@
[preferred]
org.freedesktop.impl.portal.Settings=darkman
+34
View File
@@ -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
+452
View File
@@ -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
View File
@@ -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
View File
@@ -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/**/*
+1
View File
@@ -0,0 +1 @@
![Preview](./assets/preview.png)
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

+16
View File
@@ -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
View File
@@ -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"