many things changed

This commit is contained in:
parent eefe4e4d13
commit 15babf9da3
35 changed files with 685 additions and 75 deletions

View File

@ -36,3 +36,10 @@ fi
# ──────────────────────── zoxide (cd -> zoxide) ────────────────────── # ──────────────────────── zoxide (cd -> zoxide) ──────────────────────
eval "$(zoxide init --cmd cd zsh)" eval "$(zoxide init --cmd cd zsh)"
# ──────────────────────────────── gitea ──────────────────────────────
PROG=tea _CLI_ZSH_AUTOCOMPLETE_HACK=1 source "/home/goodhumored/.config/tea/autocomplete.zsh"
if command -v tea > /dev/null; then
alias tprl="tea pr list"
alias tprl="tea pr list"
fi

View File

@ -1,4 +1,5 @@
{ {
"bitoAI.codeCompletion.enableAutoCompletion": false, "bitoAI.codeCompletion.enableAutoCompletion": false,
"bitoAI.codeCompletion.enableCommentToCode": true "bitoAI.codeCompletion.enableCommentToCode": true,
"database-client.autoSync": true
} }

View File

@ -329,33 +329,6 @@
# where there are multiple screens with very different dpi values. # where there are multiple screens with very different dpi values.
per_monitor_dpi = false 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 = "#222222"
foreground = "#888888"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_normal]
background = "#00000077"
foreground = "#ffffff"
timeout = 10
override_pause_level = 30
# Icon for notifications with normal urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_critical]
background = "#900000"
foreground = "#ffffff"
frame_color = "#ff0000"
timeout = 0
override_pause_level = 60
# Icon for notifications with critical urgency, uncomment to enable
#default_icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to # Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages. # override settings for certain messages.
# #
@ -484,10 +457,6 @@
# set_stack_tag = "volume" # set_stack_tag = "volume"
# #
[notification_sound]
summary = "*"
script = ~/.config/dunst/play-notif-sound.sh
[pomodoro] [pomodoro]
appname = "notify-send" appname = "notify-send"
summary = "Timer *" summary = "Timer *"
@ -495,16 +464,51 @@
urgency = normal urgency = normal
script = ~/.config/dunst/play-pomodoro.sh script = ~/.config/dunst/play-pomodoro.sh
[pomodoro]
summary = "Timer *"
urgency = normal
script = ~/.config/dunst/play-pomodoro.sh
[low-battery] [low-battery]
appname = "poweralertd" appname = "poweralertd"
# summary = "Timer *" # summary = "Timer *"
category = "power.low" category = "power.low"
script = ~/.config/dunst/play-low-battery-sound.sh script = ~/.config/dunst/play-low-battery-sound.sh
[proclickm]
summary = "ProClickM"
urgency = low
timeout = 1
history_ignore = yes
[critical-battery] [critical-battery]
appname = "poweralertd" appname = "poweralertd"
# summary = "Timer *" # summary = "Timer *"
urgency = critical
category = "power.critical" category = "power.critical"
script = ~/.config/dunst/play-low-battery-sound.sh script = ~/.config/dunst/play-low-battery-sound.sh
[low-urgency]
background = "#222222"
foreground = "#888888"
frame_color = "#888888"
[medium-urgency]
msg_urgency = "normal"
background = "#00000077"
foreground = "#ffffff"
frame_color = "#ff4d00"
timeout = 10
override_pause_level = 30
script = ~/.config/dunst/play-notif-sound.sh
[critical-urgency]
msg_urgency = "critical"
background = "#900000"
foreground = "#ffffff"
frame_color = "#ff0000"
timeout = 0
override_pause_level = 60
script = ~/.config/dunst/play-error-sound.sh
# vim: ft=cfg # vim: ft=cfg

View File

@ -0,0 +1 @@
paplay ~/.config/dunst/sounds/error.mp3

Binary file not shown.

View File

@ -11,11 +11,12 @@ $mainMod = SUPER # Sets "Windows" key as main modifier
# apps # apps
bind = $mainMod, T, exec, $terminal # terminal bind = $mainMod, T, exec, $terminal # terminal
bind = $mainMod SHIFT, T, exec, ~/.config/hypr/scripts/show-crow.sh bind = $mainMod SHIFT, T, exec, crow
bind = $mainMod CTRL SHIFT, T, exec, ~/.config/hypr/scripts/translate-selection.sh bind = $mainMod CTRL SHIFT, T, exec, ~/.config/hypr/scripts/translate-selection.sh
bind = $mainMod, E, exec, $fileManager # file manager bind = $mainMod, E, exec, $fileManager # file manager
bind = $mainMod, A, exec, $toggle_menu_cmd # wofi bind = $mainMod, A, exec, $toggle_menu_cmd # wofi
bind = $mainMod CTRL ALT, V, exec, ~/.config/hypr/scripts/dnd-clipboard.sh bind = $mainMod CTRL ALT, V, exec, ~/.config/hypr/scripts/dnd-clipboard.sh
bind = $mainMod CTRL SHIFT ALT, H, exec, ~/.config/hypr/scripts/toggle_hdr.sh
# ─────────────────────────── switch wallpaper ─────────────────────────── # ─────────────────────────── switch wallpaper ───────────────────────────
bind = $mainMod SHIFT CTRL ALT, R, exec, ~/.config/hypr/scripts/cycle-wp.sh bind = $mainMod SHIFT CTRL ALT, R, exec, ~/.config/hypr/scripts/cycle-wp.sh
@ -29,7 +30,7 @@ bind = $mainMod, V, togglefloating, # toggle float
bind = $mainMod, P, pseudo, # pseudo bind = $mainMod, P, pseudo, # pseudo
bind = $mainMod, DELETE, exit, # pseudo bind = $mainMod, DELETE, exit, # pseudo
bind = $mainMod, R, togglesplit, # toggle split bind = $mainMod, R, togglesplit, # toggle split
bind = $mainMod CTRL, L, exec, hyprlock # lock screen bind = $mainMod CTRL, L, exec, ~/.config/hypr/scripts/update-hyprlock-wp.sh && hyprctl switchxkblayout all 0 && hyprlock # lock screen
# ─────────────────────────── move workspaces ───────────────────────── # ─────────────────────────── move workspaces ─────────────────────────
bind = CTRL ALT $mainMod SHIFT CTRL ALT, H, movecurrentworkspacetomonitor, l bind = CTRL ALT $mainMod SHIFT CTRL ALT, H, movecurrentworkspacetomonitor, l
@ -95,6 +96,11 @@ bind = SHIFT, Print, exec, grimblast copy screen --freeze --notify --cursor
# ───────────────────────────────── OCR ─────────────────────────────── # ───────────────────────────────── OCR ───────────────────────────────
bind = $mainMod SHIFT, C, exec, wl-copy $(grimblast save area - | magick png:- pgm:- | gocr -) bind = $mainMod SHIFT, C, exec, wl-copy $(grimblast save area - | magick png:- pgm:- | gocr -)
# ───────────────────────────────── vpn ───────────────────────────────
bind = $mainMod SHIFT CTRL ALT, V, exec, ~/.config/scripts/select-vpn.sh
# ──────────────────────────────── pass ───────────────────────────────
bind = $mainMod SHIFT CTRL ALT, p, exec, ~/.config/scripts/copy-pass.sh
# ╭──────────────────────────────────────────────────────────╮ # ╭──────────────────────────────────────────────────────────╮
# │ mediakeys │ # │ mediakeys │
@ -115,6 +121,23 @@ bindl=, XF86AudioPrev, exec, playerctl --player=$(cat ~/.config/chosen_player) p
bindl= CTRL ALT SHIFT, H, exec, playerctl --player=$(cat ~/.config/chosen_player) previous bindl= CTRL ALT SHIFT, H, exec, playerctl --player=$(cat ~/.config/chosen_player) previous
bindl= CTRL ALT SHIFT, L, exec, playerctl --player=$(cat ~/.config/chosen_player) next bindl= CTRL ALT SHIFT, L, exec, playerctl --player=$(cat ~/.config/chosen_player) next
bindl= CTRL ALT SHIFT, SPACE, exec, playerctl --player=$(cat ~/.config/chosen_player) play-pause bindl= CTRL ALT SHIFT, SPACE, exec, playerctl --player=$(cat ~/.config/chosen_player) play-pause
# ─────────────────── win + press roller = play-pause ─────────────────
bindl=$mainMod, XF86AudioMute, exec, playerctl --player=$(cat ~/.config/chosen_player) play-pause
# ────────────────────── win + roller = brightness ────────────────────
bindle=$mainMod, XF86AudioRaiseVolume, exec, ~/.config/scripts/set_brightness.sh +10%
bindle=$mainMod, XF86AudioLowerVolume, exec, ~/.config/scripts/set_brightness.sh 10%-
# ────────────────────── win + alt + roller = monitor brightness ────────────────────
bindle=$mainMod ALT, XF86AudioRaiseVolume, exec, ~/.config/scripts/set_brightness_other_monitors.sh +10
bindle=$mainMod ALT, XF86AudioLowerVolume, exec, ~/.config/scripts/set_brightness_other_monitors.sh -10
# ───────────── win + ctrl + alt + shift + roller = playback ─────────────
bindle=$mainMod ALT SHIFT CTRL, XF86AudioRaiseVolume, exec, playerctl --player=$(cat ~/.config/chosen_player) position 1+
bindle=$mainMod ALT SHIFT CTRL, XF86AudioLowerVolume, exec, playerctl --player=$(cat ~/.config/chosen_player) position 1-
# ────────────────────── alt + roller = vert scroll ──────────────────────
bindle=ALT, XF86AudioLowerVolume, exec, xdotool click 4
bindle=ALT, XF86AudioRaiseVolume, exec, xdotool click 5
# ────────────────── alt + shift + roller = hor scroll ──────────────────
bindle=ALT SHIFT, XF86AudioLowerVolume, exec, xdotool click 6
bindle=ALT SHIFT, XF86AudioRaiseVolume, exec, xdotool click 7
# ─────────────────────── select pulseaudio output ─────────────────────── # ─────────────────────── select pulseaudio output ───────────────────────
bind=CTRL ALT SHIFT, O, exec, ~/.config/hypr/scripts/wofi-pulse-output.sh bind=CTRL ALT SHIFT, O, exec, ~/.config/hypr/scripts/wofi-pulse-output.sh
@ -126,5 +149,9 @@ bind= CTRL ALT SHIFT, P, exec, ~/.config/hypr/scripts/wofi-player.sh
bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow bindm = $mainMod, mouse:273, resizewindow
# ─────────────────────────── LID MONITOR OFF ─────────────────────────
# При закрытии крышки (Lid Switch включён)
bindl = , switch:on:Lid Switch, exec, hyprctl keyword monitor "eDP-1, disable"
# При открытии крышки (Lid Switch выключён)
bindl = , switch:off:Lid Switch, exec, hyprctl keyword monitor "eDP-1, preferred, auto, 1"

View File

@ -0,0 +1,4 @@
experimental {
xx_color_management_v4 = false
}

View File

@ -21,6 +21,14 @@ $terminal = kitty
$fileManager = $terminal tmux new-session -s tmp-file-manager 'yazi' $fileManager = $terminal tmux new-session -s tmp-file-manager 'yazi'
$toggle_menu_cmd = pgrep wofi >/dev/null 2>&1 && killall wofi || wofi --show drun $toggle_menu_cmd = pgrep wofi >/dev/null 2>&1 && killall wofi || wofi --show drun
# experimental features (HDR)
source = ./experimental_features.conf
render {
cm_fs_passthrough = 1
cm_enabled = true
}
# ╭──────────────────────────────────────────────────────────╮ # ╭──────────────────────────────────────────────────────────╮
# │ AUTOSTART │ # │ AUTOSTART │
# ╰──────────────────────────────────────────────────────────╯ # ╰──────────────────────────────────────────────────────────╯
@ -158,9 +166,9 @@ source = ./conf/keybindings.conf
# │ WINDOWRULES │ # │ WINDOWRULES │
# ╰──────────────────────────────────────────────────────────╯ # ╰──────────────────────────────────────────────────────────╯
# ──────────────────────────────── copyq ────────────────────────────── # ──────────────────────────────── copyq ──────────────────────────────
windowrule = size 300 400,^(copyq)$ windowrule = size 300 400,class:^(copyq)$
windowrule = float,com.github.hluk.copyq windowrule = float,class:com.github.hluk.copyq
windowrule = move onscreen cursor,com.github.hluk.copyq windowrule = move onscreen cursor,class:com.github.hluk.copyq
# ────────────────────── Browser Picture in Picture ────────────────────── # ────────────────────── Browser Picture in Picture ──────────────────────
windowrulev2 = float, title:^(Picture-in-Picture)$ windowrulev2 = float, title:^(Picture-in-Picture)$
@ -172,25 +180,25 @@ windowrulev2 = float, title:(Media viewer)
windowrulev2 = fullscreen, title:^(Media viewer)$ windowrulev2 = fullscreen, title:^(Media viewer)$
# different floating modals # different floating modals
windowrule = maxsize 400 300, (blueman|io.crow_translate.CrowTranslate) windowrule = maxsize 400 300, class:(blueman|org.kde.CrowTranslate)
windowrule = float, (pavucontrol|blueman-manager|wofi|rofi|imv|io.crow_translate.CrowTranslate) windowrule = float, class:(pavucontrol|blueman-manager|wofi|Rofi|imv|org.kde.CrowTranslate)
windowrule = pin, (pavucontrol|blueman-manager|wofi|rofi|io.crow_translate.CrowTranslate) windowrule = pin, class:(pavucontrol|blueman-manager|wofi|Rofi|org.kde.CrowTranslate)
windowrule = stayfocused, (pavucontrol|blueman-manager|wofi|rofi|io.crow_translate.CrowTranslate) windowrule = stayfocused, class:(pavucontrol|blueman-manager|wofi|Rofi|org.kde.CrowTranslate)
windowrule = move onscreen cursor,(pavucontrol|blueman-manager|imv|io.crow_translate.CrowTranslate) windowrule = move onscreen cursor,class:(pavucontrol|blueman-manager|imv|org.kde.CrowTranslate)
windowrule = center, (wofi) windowrule = center, class:(wofi)
windowrule = workspace 3, title:^(.*)(Telegram)(.*)$ windowrule = workspace 3, title:^(.*)(Telegram)(.*)$
windowrule = workspace 1, title:^(.*)(Firefox)(.*)$ windowrule = workspace 1, title:^(.*)(Firefox)(.*)$
windowrule = workspace special:music, title:(.*)((M|m)usic|(М|м)узыка)(.*) windowrule = workspace special:music, title:(.*)((M|m)usic|(М|м)узыка)(.*)
windowrule = float, title:(.*)((M|m)usic|(М|м)узыка)(.*) windowrule = float, title:(.*)((M|m)usic|(М|м)узыка)(.*)
windowrule = size 1500 900, title:(.*)((M|m)usic|(М|м)узыка)(.*) windowrule = size 1500 900, title:(.*)((M|m)usic|(М|м)узыка)(.*)
# Example windowrule v2 # Example windowrule v2
windowrulev2 = float,class:^(cursor-float)$ windowrule = float,class:^(cursor-float)$
windowrulev2 = move onscreen cursor,class:^(cursor-float)$ windowrule = move onscreen cursor,class:^(cursor-float)$
windowrulev2 = float,class:^(dmenu)$ windowrule = float,class:^(dmenu)$
windowrulev2 = pin,class:^(dmenu)$ windowrule = pin,class:^(dmenu)$
windowrulev2 = stayfocused,class:^(dmenu)$ windowrule = stayfocused,class:^(dmenu)$
# windowrulev2 = move onscreen cursor,class:^(dmenu)$ # windowrulev2 = move onscreen cursor,class:^(dmenu)$
# #
@ -199,13 +207,12 @@ windowrule = tile, class:(.*)(MATLAB)(.*)
windowrule = workspace 6, class:(.*)(MATLAB)(.*) windowrule = workspace 6, class:(.*)(MATLAB)(.*)
windowrule = size 400 400, class:(.*)(MATLAB)(.*) windowrule = size 400 400, class:(.*)(MATLAB)(.*)
windowrule = tile, (.*)(Figure)(.*) windowrule = tile, class:(.*)(Figure)(.*)
windowrule = workspace 6, (.*)(Figure)(.*) windowrule = workspace 6, class:(.*)(Figure)(.*)
windowrule = size 400 400, (.*)(Figure)(.*) windowrule = size 400 400, class:(.*)(Figure)(.*)
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. windowrule = suppressevent maximize, class:.* # You'll probably like this.
workspace = special:music, opacity:0.5 workspace = special:music, opacity:0.5
workspace = opacity 0.5, onworkspace:name:special:music workspace = opacity 0.5, onworkspace:name:special:music

View File

@ -0,0 +1,9 @@
background {
monitor = eDP-1
path = /home/goodhumored/wallpapers/3.png
}
background {
monitor = DP-2
path = /home/goodhumored/wallpapers/3.png
}

View File

@ -5,11 +5,8 @@
# |_| |_|\__, | .__/|_| |_|\___/ \___|_|\_\ # |_| |_|\__, | .__/|_| |_|\___/ \___|_|\_\
# |___/|_| # |___/|_|
# #
#
background { source = ./hyprlock-bg.conf
monitor =
path = $HOME/wallpapers/isaac_cathedral.jpg
}
label { label {
monitor = monitor =
@ -43,7 +40,7 @@ input-field {
rounding = -1 # -1 means complete rounding (circle/oval) rounding = -1 # -1 means complete rounding (circle/oval)
check_color = rgb(204, 136, 34) check_color = rgb(204, 136, 34)
fail_color = rgb(204, 34, 34) # if authentication failed, changes outer_color and fail message color fail_color = rgb(204, 34, 34) # if authentication failed, changes outer_color and fail message color
fail_text = Неправильно, попробуй ещё раз! (попыток осталось: $ATTEMPTS) # can be set to empty fail_text = Неправильно, попробуй ещё раз! (Попытка $ATTEMPTS из 3) # can be set to empty
fail_transition = 300 # transition time in ms between normal outer_color and fail_color fail_transition = 300 # transition time in ms between normal outer_color and fail_color
capslock_color = rgb(150, 34, 34) capslock_color = rgb(150, 34, 34)
numlock_color = -1 numlock_color = -1

View File

@ -21,4 +21,5 @@ monitor=desc:Iiyama North America PL3270Q 1155103721286,2560x1440@59.95,-640x-14
# Домашний монитор # Домашний монитор
monitor=desc:BNQ BenQ G925HDA 29A01966019,prefered,auto,1.0 monitor=desc:BNQ BenQ G925HDA 29A01966019,prefered,auto,1.0
monitor=desc:HJW MACROSILICON 0x0002E842,prefered,320x-720,1.0 monitor=desc:HJW MACROSILICON 0x0002E842,prefered,320x-720,1.0
monitor=desc:Huawei Technologies Co. Inc. ZQE-CBA 0xC080F622,3440x1440@99.98Hz,-760x-1440,1,bitdepth monitor=desc:Huawei Technologies Co. Inc. ZQE-CBA 0xC080F622,3440x1440@100Hz,-760x-1440,1,bitdepth,10, cm, hdr
monitor=desc:Huawei Technologies Co. Inc. ZQE-CBA 0xC080F622,3440x1440@100Hz,-760x-1440,1,bitdepth,10

View File

@ -0,0 +1,36 @@
#!/usr/bin/env python3
from evdev import UInput, ecodes as e
import sys
# Определяем возможности устройства
capabilities = {
e.EV_REL: [e.REL_WHEEL, e.REL_HWHEEL], # Список кодов для EV_REL
e.EV_SYN: [e.SYN_REPORT], # Список кодов для EV_SYN
}
# Создаём виртуальное устройство
ui = UInput(capabilities, name="virtual-scroll-device")
def scroll(direction, horizontal=False):
if horizontal:
ui.write(e.EV_REL, e.REL_HWHEEL, direction)
else:
ui.write(e.EV_REL, e.REL_WHEEL, direction)
ui.syn()
# Обработка аргументов
if len(sys.argv) < 2:
print("Usage: scroll.py <up|down|left|right>")
sys.exit(1)
cmd = sys.argv[1]
if cmd == "up":
scroll(1)
elif cmd == "down":
scroll(-1)
elif cmd == "left":
scroll(-1, horizontal=True)
elif cmd == "right":
scroll(1, horizontal=True)
ui.close()

View File

@ -0,0 +1,30 @@
#!/bin/bash
# Path to the file storing the variables
SETTINGS_FILE="$HOME/.config/hypr/experimental_features.conf"
# Read the current values from the file
HDR=$(grep -oP 'hdr\s*=\s*\K(true|false)' "$SETTINGS_FILE")
WIDE_COLOR=$(grep -oP 'wide_color_gamut\s*=\s*\K(true|false)' "$SETTINGS_FILE")
XX_COLOR=$(grep -oP 'xx_color_management_v4\s*=\s*\K(true|false)' "$SETTINGS_FILE")
# Toggle the values
TOGGLE() {
if [ "$1" == "true" ]; then
echo "false"
else
echo "true"
fi
}
NEW_HDR=$(TOGGLE "$HDR")
NEW_WIDE_COLOR=$(TOGGLE "$WIDE_COLOR")
NEW_XX_COLOR=$(TOGGLE "$XX_COLOR")
# Update the file with the new values
sed -i "s/hdr\s*=\s*$HDR/hdr = $NEW_HDR/" "$SETTINGS_FILE"
sed -i "s/wide_color_gamut\s*=\s*$WIDE_COLOR/wide_color_gamut = $NEW_WIDE_COLOR/" "$SETTINGS_FILE"
sed -i "s/xx_color_management_v4\s*=\s*$XX_COLOR/xx_color_management_v4 = $NEW_XX_COLOR/" "$SETTINGS_FILE"
# Optional: Notify the user of the new values
notify-send "Experimental Settings Toggled" "hdr = $NEW_HDR\nwide_color_gamut = $NEW_WIDE_COLOR\nxx_color_management_v4 = $NEW_XX_COLOR"

View File

@ -0,0 +1,40 @@
#!/bin/bash
# Get the wallpaper information from hyprctl
hyprctl_output=$(hyprctl hyprpaper listactive)
echo "$hyprctl_output"
# Read the lines into an array and reverse their order
mapfile -t lines <<< "$hyprctl_output"
reversed_lines=()
for ((i=${#lines[@]}-1; i>=0; i--)); do
reversed_lines+=("${lines[i]}")
done
# Generate the config content
config_content=""
for line in "${reversed_lines[@]}"; do
# Split line into monitor and path parts
IFS='=' read -r monitor_part path_part <<< "$line"
# Trim whitespace from both parts
monitor=$(echo "$monitor_part" | xargs)
path=$(echo "$path_part" | xargs)
# Skip entries with empty monitor names
[[ -z "$monitor" ]] && continue
# Append to the config content
config_content+="background {
monitor = $monitor
path = $path
}
"
done
# Write to the configuration file
config_file="$HOME/.config/hypr/hyprlock-bg.conf"
echo "$config_content" > "$config_file"
echo "Generated hyprlock background config at: $config_file"

View File

@ -0,0 +1,56 @@
return {
"kevinhwang91/nvim-ufo",
dependencies = { "kevinhwang91/promise-async" },
config = function()
vim.o.foldcolumn = "1" -- '0' is not bad
vim.o.foldlevel = 99 -- Using ufo provider need a large value, feel free to decrease the value
vim.o.foldlevelstart = 99
vim.o.foldenable = true
-- Using ufo provider need remap `zR` and `zM`. If Neovim is 0.6.1, remap yourself
vim.keymap.set("n", "zR", require("ufo").openAllFolds)
vim.keymap.set("n", "zM", require("ufo").closeAllFolds)
-- Option 1: coc.nvim as LSP client
-- use({ "neoclide/coc.nvim", branch = "master", run = "yarn install --frozen-lockfile" })
-- require("ufo").setup()
--
-- Option 2: nvim lsp as LSP client
-- Tell the server the capability of foldingRange,
-- Neovim hasn't added foldingRange to default capabilities, users must add it manually
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.foldingRange = {
dynamicRegistration = false,
lineFoldingOnly = true,
}
local language_servers = vim.lsp.get_clients() -- or list servers manually like {'gopls', 'clangd'}
for _, ls in ipairs(language_servers) do
require("lspconfig")[ls].setup({
capabilities = capabilities,
-- you can add other fields for setting up lsp server in this table
})
end
require("ufo").setup()
--
-- Option 3: treesitter as a main provider instead
-- (Note: the `nvim-treesitter` plugin is *not* needed.)
-- ufo uses the same query files for folding (queries/<lang>/folds.scm)
-- performance and stability are better than `foldmethod=nvim_treesitter#foldexpr()`
-- require("ufo").setup({
-- provider_selector = function(bufnr, filetype, buftype)
-- return { "treesitter", "indent" }
-- end,
-- })
--
-- Option 4: disable all providers for all buffers
-- Not recommend, AFAIK, the ufo's providers are the best performance in Neovim
-- require("ufo").setup({
-- provider_selector = function(bufnr, filetype, buftype)
-- return ""
-- end,
-- })
end,
}

View File

@ -63,6 +63,9 @@ vim.keymap.set("n", "th", ":tabprev<CR>", { desc = "[T]ab left", noremap = true,
vim.keymap.set("n", "tj", ":tabfirst<CR>", { desc = "[T]ab home", noremap = true, silent = true }) vim.keymap.set("n", "tj", ":tabfirst<CR>", { desc = "[T]ab home", noremap = true, silent = true })
vim.keymap.set("n", "tk", ":tablast<CR>", { desc = "[T]ab end", noremap = true, silent = true }) vim.keymap.set("n", "tk", ":tablast<CR>", { desc = "[T]ab end", noremap = true, silent = true })
-- ───────────────────────── close other buffers ─────────────────────────
vim.keymap.set("n", "<A-S-c>", ':%bdelete|edit #|normal `"<CR>', { noremap = true, silent = true })
-- ╭─────────────────────────────────────────────────────────╮ -- ╭─────────────────────────────────────────────────────────╮
-- │ Moving lines │ -- │ Moving lines │
-- ╰─────────────────────────────────────────────────────────╯ -- ╰─────────────────────────────────────────────────────────╯

View File

@ -113,6 +113,54 @@ return {
protocol = "inspector", protocol = "inspector",
console = "integratedTerminal", console = "integratedTerminal",
}, },
{
type = "pwa-node",
request = "launch",
name = "Launch NestJS App (Watch Mode with Pino)",
runtimeExecutable = "sh",
runtimeArgs = {
"-c",
"ts-node-dev --respawn --watch ${workspaceFolder}/src ${workspaceFolder}/src/main.ts | npx pino-pretty",
},
envFile = "${workspaceFolder}/.env",
trace = true,
cwd = "${workspaceFolder}",
sourceMaps = true,
protocol = "inspector",
console = "integratedTerminal",
},
{
type = "pwa-node",
request = "launch",
name = "Launch NestJS App (Watch Mode with Pino) no crash",
runtimeExecutable = "sh",
runtimeArgs = {
"-c",
"ts-node-dev --respawn --watch ${workspaceFolder}/src ${workspaceFolder}/src/main.ts | npx pino-pretty",
},
envFile = "${workspaceFolder}/.env",
trace = true,
cwd = "${workspaceFolder}",
sourceMaps = true,
protocol = "inspector",
console = "integratedTerminal",
restart = true,
autoContinue = false,
outputCapture = "std",
},
{
type = "pwa-node",
request = "attach",
name = "Attach to NestJS App (Watch Mode)",
port = 9229, -- Порт по умолчанию для --inspect
address = "localhost",
cwd = "${workspaceFolder}",
sourceMaps = true,
protocol = "inspector",
restart = true, -- Переподключение при рестарте процесса
trace = true,
console = "integratedTerminal",
},
{ {
type = "pwa-node", type = "pwa-node",
request = "launch", request = "launch",

View File

@ -66,6 +66,7 @@ return { -- Autocompletion
-- This will auto-import if your LSP supports it. -- This will auto-import if your LSP supports it.
-- This will expand snippets if the LSP sent a snippet. -- This will expand snippets if the LSP sent a snippet.
["<C-y>"] = cmp.mapping.confirm({ select = true }), ["<C-y>"] = cmp.mapping.confirm({ select = true }),
["<C-e>"] = cmp.mapping.abort(),
-- If you prefer more traditional completion keymaps, -- If you prefer more traditional completion keymaps,
-- you can uncomment the following lines -- you can uncomment the following lines
@ -76,7 +77,7 @@ return { -- Autocompletion
-- Manually trigger a completion from nvim-cmp. -- Manually trigger a completion from nvim-cmp.
-- Generally you don't need this, because nvim-cmp will display -- Generally you don't need this, because nvim-cmp will display
-- completions whenever it has completion options available. -- completions whenever it has completion options available.
["<C-;>"] = cmp.mapping.complete(), ["<C-k>"] = cmp.mapping.complete(),
-- Think of <c-l> as moving to the right of your snippet expansion. -- Think of <c-l> as moving to the right of your snippet expansion.
-- So if you have a snippet that's like: -- So if you have a snippet that's like:

View File

@ -0,0 +1,10 @@
return {
"dhruvasagar/vim-table-mode",
config = function()
-- -- Set table_mode_corner_corner to '+'
-- vim.g.table_mode_corner_corner = "+"
--
-- -- Set table_mode_header_fillchar to '='
-- vim.g.table_mode_header_fillchar = "="
end,
}

View File

@ -12,8 +12,8 @@ return {
load = { load = {
["core.defaults"] = {}, ["core.defaults"] = {},
["core.concealer"] = {}, ["core.concealer"] = {},
["core.integrations.image"] = {}, -- ["core.integrations.image"] = {},
["core.latex.renderer"] = {}, -- ["core.latex.renderer"] = {},
["core.export"] = { ["core.export"] = {
config = { -- Note that this table is optional and doesn't need to be provided config = { -- Note that this table is optional and doesn't need to be provided
-- Configuration here -- Configuration here

View File

@ -16,6 +16,7 @@ local languagesPlugins = require("goodhumored.languages")
require("lazy").setup({ require("lazy").setup({
{ import = "goodhumored.appearance.code" }, { import = "goodhumored.appearance.code" },
{ import = "goodhumored.appearance.theme" }, { import = "goodhumored.appearance.theme" },
{ import = "goodhumored.snacks.snacks-nvim" },
{ import = "goodhumored.appearance.ui" }, { import = "goodhumored.appearance.ui" },
{ import = "goodhumored.appearance.tint-unfocused" }, { import = "goodhumored.appearance.tint-unfocused" },
{ import = "goodhumored.comfort-features" }, { import = "goodhumored.comfort-features" },

View File

@ -0,0 +1,175 @@
return {
"folke/snacks.nvim",
priority = 1000,
lazy = false,
---@type snacks.Config
opts = {
-- your configuration comes here
-- or leave it empty to use the default settings
-- refer to the configuration section below
bigfile = { enabled = true },
bufdelete = { enabled = true },
dashboard = { enabled = true },
debug = { enabled = true },
image = {
enabled = true,
formats = {
"png",
"jpg",
"jpeg",
"gif",
"bmp",
"webp",
"tiff",
"heic",
"avif",
"mp4",
"mov",
"avi",
"mkv",
"webm",
"pdf",
},
force = false, -- try displaying the image, even if the terminal does not support it
doc = {
-- enable image viewer for documents
-- a treesitter parser must be available for the enabled languages.
enabled = true,
-- render the image inline in the buffer
-- if your env doesn't support unicode placeholders, this will be disabled
-- takes precedence over `opts.float` on supported terminals
inline = true,
-- render the image in a floating window
-- only used if `opts.inline` is disabled
float = true,
max_width = 80,
max_height = 40,
-- Set to `true`, to conceal the image text when rendering inline.
conceal = false, -- (experimental)
},
img_dirs = { "img", "images", "assets", "static", "public", "media", "attachments" },
-- window options applied to windows displaying image buffers
-- an image buffer is a buffer with `filetype=image`
wo = {
wrap = false,
number = false,
relativenumber = false,
cursorcolumn = false,
signcolumn = "no",
foldcolumn = "0",
list = false,
spell = false,
statuscolumn = "",
},
cache = vim.fn.stdpath("cache") .. "/snacks/image",
debug = {
request = false,
convert = false,
placement = false,
},
env = {},
---@class snacks.image.convert.Config
convert = {
notify = true, -- show a notification on error
---@type snacks.image.args
mermaid = function()
local theme = vim.o.background == "light" and "neutral" or "dark"
return { "-i", "{src}", "-o", "{file}", "-b", "transparent", "-t", theme, "-s", "{scale}" }
end,
---@type table<string,snacks.image.args>
magick = {
default = { "{src}[0]", "-scale", "1920x1080>" }, -- default for raster images
vector = { "-density", 192, "{src}[0]" }, -- used by vector images like svg
math = { "-density", 192, "{src}[0]", "-trim" },
pdf = { "-density", 192, "{src}[0]", "-background", "white", "-alpha", "remove", "-trim" },
},
},
math = {
enabled = true, -- enable math expression rendering
-- in the templates below, `${header}` comes from any section in your document,
-- between a start/end header comment. Comment syntax is language-specific.
-- * start comment: `// snacks: header start`
-- * end comment: `// snacks: header end`
typst = {
tpl = [[
#set page(width: auto, height: auto, margin: (x: 2pt, y: 2pt))
#show math.equation.where(block: false): set text(top-edge: "bounds", bottom-edge: "bounds")
#set text(size: 12pt, fill: rgb("${color}"))
${header}
${content}]],
},
latex = {
font_size = "Large", -- see https://www.sascha-frank.com/latex-font-size.html
-- for latex documents, the doc packages are included automatically,
-- but you can add more packages here. Useful for markdown documents.
packages = { "amsmath", "amssymb", "amsfonts", "amscd", "mathtools" },
tpl = [[
\documentclass[preview,border=2pt,varwidth,12pt]{standalone}
\usepackage{${packages}}
\begin{document}
${header}
{ \${font_size} \selectfont
\color[HTML]{${color}}
${content}}
\end{document}]],
},
},
},
explorer = { enabled = true },
git = { enabled = true },
indent = { enabled = true },
-- input = { enabled = true },
-- picker = { enabled = true },
-- notifier = { enabled = true },
-- quickfile = { enabled = true },
-- scope = { enabled = true },
scratch = { enabled = true }, -- https://github.com/folke/snacks.nvim/blob/main/docs/scratch.md
win = { enabled = true },
terminal = { enabled = true }, -- https://github.com/folke/snacks.nvim/blob/main/docs/terminal.md
animate = { enabled = true },
scroll = {
enabled = true,
animate = {
duration = { step = 5, total = 50 },
easing = "linear",
},
-- faster animation when repeating scroll after delay
animate_repeat = {
delay = 100, -- delay in ms before using the repeat animation
duration = { step = 1, total = 25 },
easing = "linear",
},
-- what buffers to animate
filter = function(buf)
return vim.g.snacks_scroll ~= false
and vim.b[buf].snacks_scroll ~= false
and vim.bo[buf].buftype ~= "terminal"
end,
},
-- statuscolumn = { enabled = true },
words = { enabled = true },
},
keys = {
{
"<leader>gb",
function()
require("snacks").git.blame_line()
end,
desc = "[G]it [B]lame",
},
{
"<leader>.",
function()
require("snacks").scratch()
end,
desc = "Toggle Scratch Buffer",
},
{
"<leader>S",
function()
require("snacks").scratch.select()
end,
desc = "Select Scratch Buffer",
},
},
}

View File

@ -67,17 +67,17 @@
] ]
}, },
"react prop": { "react prop": {
"scope": "typescript", "scope": "typescriptreact",
"prefix": "comp", "prefix": "comp",
"body": [ "body": [
"import React from \"react\";", "import React from \"react\";",
"", "",
"export default function ${1:name}({ className }: { className?: string }) {", "export default function ${1:name}({ className }: { className?: string }) {",
" return (", " return (",
" <${2:div} className={`${className}`}>", " <${2:div} className={`\\${className}`}>",
" $0",
" </${2:div}>", " </${2:div}>",
" )", " )",
" ${0:{\/* asdf *\/}}",
"}" "}"
] ]
}, },

32
.config/scripts/copy-pass.sh Executable file
View File

@ -0,0 +1,32 @@
#!/bin/bash
# Проверяем, установлена ли утилита pass
if ! command -v pass &> /dev/null; then
notify-send "Password Manager" "pass utility not found"
exit 1
fi
# Получаем список паролей (убираем расширение .gpg и путь до password-store)
password_list=$(find ~/.password-store/ -type f -name "*.gpg" | sed "s|$HOME/.password-store/||g" | sed 's/\.gpg$//')
# Проверяем, есть ли пароли
if [ -z "$password_list" ]; then
notify-send "Password Manager" "No passwords found"
exit 1
fi
# Показываем меню rofi и получаем выбор пользователя
selected_pass=$(echo "$password_list" | rofi -dmenu -p "Select Password:")
# Если пользователь что-то выбрал
if [ -n "$selected_pass" ]; then
# Получаем пароль и копируем его в буфер обмена
error_output=$(pass show -c "$selected_pass" 2>&1)
# Проверяем статус выполнения
if [ $? -eq 0 ]; then
notify-send "Password Manager" "Password for $selected_pass copied to clipboard"
else
notify-send "Password Manager" "Failed to get password for $selected_pass: \n\n$error_output" -u critical
fi
fi

View File

@ -18,7 +18,7 @@ getFlagEmoji() {
} }
# TODO: get keyboard name dynamically # TODO: get keyboard name dynamically
countryCode=$(hyprctl devices -j | countryCode=$(hyprctl devices -j |
jq -r '.keyboards[] | select(.name == "at-translated-set-2-keyboard") | .active_keymap' | jq -r '.keyboards[] | select(.main == true) | .active_keymap' |
cut -c1-2 | cut -c1-2 |
tr 'a-z' 'A-Z') tr 'a-z' 'A-Z')

31
.config/scripts/select-vpn.sh Executable file
View File

@ -0,0 +1,31 @@
#!/bin/bash
# Получаем список VPN соединений
vpn_list=$(nmcli -t -f NAME,TYPE connection show | grep vpn | cut -d':' -f1)
# Проверяем, есть ли VPN соединения
if [ -z "$vpn_list" ]; then
notify-send "VPN" "No VPN connections found"
exit 1
fi
# Преобразуем список в формат, подходящий для rofi (каждая строка отдельно)
# vpn_options=$(echo "$vpn_list" | tr ' ' '\n')
# Показываем меню rofi и получаем выбор пользователя
selected_vpn=$(echo "$vpn_list" | rofi -dmenu -p "Select VPN:")
# Если пользователь что-то выбрал
if [ -n "$selected_vpn" ]; then
# Активируем выбранное VPN соединение
error_output=$(nmcli connection up "$selected_vpn" 2>&1)
# Проверяем статус выполнения
if [ $? -eq 0 ]; then
notify-send "VPN" "Connected to $selected_vpn successfully"
else
notify-send "VPN" "Failed to connect to $selected_vpn: \n\n$error_output"
fi
fi

View File

@ -0,0 +1,81 @@
#!/bin/bash
# Проверяем, передан ли аргумент (например, +10, -10 или абсолютное значение)
if [ -z "$1" ]; then
echo "Ошибка: укажи изменение яркости (например, +10, -10 или 50)"
exit 1
fi
# Временный файл для хранения значения яркости
TEMP_FILE="/tmp/ddc_brightness_value"
DEBOUNCE_FILE="/tmp/ddc_brightness_debounce"
# Функция для получения текущей яркости
get_current_brightness() {
ddcutil getvcp 10 | grep -oP '(?<=current value = )\s*\d+' | tr -d ' '
}
# Читаем текущее значение из файла или получаем с монитора, если файла нет
if [ -f "$TEMP_FILE" ]; then
CURRENT_VALUE=$(cat "$TEMP_FILE")
else
CURRENT_VALUE=$(get_current_brightness)
echo "$CURRENT_VALUE" > "$TEMP_FILE"
fi
# Вычисляем новое значение
if [[ "$1" =~ ^[+-] ]]; then
NEW_VALUE=$((CURRENT_VALUE + $1))
else
NEW_VALUE="$1"
fi
# Ограничиваем значение в пределах 0-100
if [ "$NEW_VALUE" -lt 0 ]; then
NEW_VALUE=0
elif [ "$NEW_VALUE" -gt 100 ]; then
NEW_VALUE=100
fi
# Записываем новое значение во временный файл
echo "$NEW_VALUE" > "$TEMP_FILE"
echo "$NEW_VALUE" >> /tmp/wobpipe
# Обновляем метку времени для debounce
touch "$DEBOUNCE_FILE"
# Функция для установки яркости с debounce
apply_brightness() {
# Ждём 0.5 секунды после последнего изменения
sleep 0.5
# Проверяем, не изменился ли файл с тех пор
NOW=$(date +%s%3N)
LAST_CHANGE=$(cat "$TIMESTAMP_FILE" 2>/dev/null || echo 0)
# Проверяем, прошло ли 500 мс (0.5 с) с последнего изменения
if [ $((NOW - LAST_CHANGE)) -lt 500 ]; then
exit 0
fi
# Читаем финальное значение из файла
FINAL_VALUE=$(cat "$TEMP_FILE")
# Устанавливаем яркость
ddcutil setvcp 10 "$FINAL_VALUE" > /tmp/ddcutil_output 2>&1
# Получаем текущую яркость для вывода
RESULT="$(ddcutil getvcp 10)"
CURRENT_PERC="$(echo "$RESULT" | grep -oP '(?<=current value = )\s*\d+' | tr -d ' ')"
# Выводим результат и записываем в wobpipe
echo "$RESULT"
echo "\"$CURRENT_PERC\""
}
# Запускаем применение яркости в фоновом режиме, если ещё не запущено
if ! pgrep -f "apply_brightness" > /dev/null; then
apply_brightness &
fi
exit 0

View File

@ -18,7 +18,7 @@ getFlagEmoji() {
} }
# TODO: get keyboard name dynamically # TODO: get keyboard name dynamically
countryCode=$(hyprctl devices -j | countryCode=$(hyprctl devices -j |
jq -r '.keyboards[] | select(.name == "at-translated-set-2-keyboard") | .active_keymap' | jq -r '.keyboards[] | select(.main == true) | .active_keymap' |
cut -c1-2 | cut -c1-2 |
tr 'a-z' 'A-Z') tr 'a-z' 'A-Z')

View File

@ -152,8 +152,8 @@
}, },
"custom/layout": { "custom/layout": {
"exec": "~/.config/waybar/get_layout.sh", "exec": "~/.config/waybar/get_layout.sh",
"on-click": "hyprctl switchxkblayout at-translated-set-2-keyboard next", "on-click": "hyprctl switchxkblayout all next",
"on-click-right": "hyprctl switchxkblayout at-translated-set-2-keyboard prev", "on-click-right": "hyprctl switchxkblayout all prev",
"interval": 1 "interval": 1
}, },
// Wofi Application Launcher // Wofi Application Launcher

View File

@ -5,6 +5,8 @@
unbind C-b unbind C-b
set -g prefix C-Space set -g prefix C-Space
bind-key -n C-\; send-keys C-\;
# ────────────────── prefix ctrl+a for nested sessions ──────────────── # ────────────────── prefix ctrl+a for nested sessions ────────────────
bind-key -n C-a send-prefix bind-key -n C-a send-prefix

6
.zshrc
View File

@ -43,6 +43,12 @@ case ":$PATH:" in
*) export PATH="$PNPM_HOME:$PATH" ;; *) export PATH="$PNPM_HOME:$PATH" ;;
esac esac
GO_HOME="$(go env GOPATH)/bin"
case ":$PATH:" in
*":$GO_HOME:"*) ;;
*) export PATH="$GO_HOME:$PATH" ;;
esac
# fzf customization # fzf customization
if command -v fd > /dev/null; then if command -v fd > /dev/null; then
export FZF_DEFAULT_COMMAND="fd --hidden --strip-cwd-prefix --exclude .git" export FZF_DEFAULT_COMMAND="fd --hidden --strip-cwd-prefix --exclude .git"

BIN
Profile1.bcf Normal file

Binary file not shown.

0
journal/2025/03/23.norg Normal file
View File

BIN
prog.bcf Normal file

Binary file not shown.