From 15babf9da3446f4ea618d88dd2b8048833e19aa8 Mon Sep 17 00:00:00 2001 From: goodhumored Date: Sun, 13 Apr 2025 16:32:58 +0300 Subject: [PATCH] many things changed --- .aliases.sh | 7 + .config/Code/User/settings.json | 3 +- .config/dunst/dunstrc | 66 +++---- .config/dunst/play-error-sound.sh | 1 + .config/dunst/sounds/error.mp3 | Bin 0 -> 60186 bytes .config/hypr/conf/keybindings.conf | 35 +++- .config/hypr/experimental_features.conf | 4 + .config/hypr/hyprland.conf | 45 +++-- .config/hypr/hyprlock-bg.conf | 9 + .config/hypr/hyprlock.conf | 9 +- .config/hypr/monitors.conf | 3 +- .config/hypr/scripts/scroll.py | 36 ++++ .config/hypr/scripts/toggle_hdr.sh | 30 +++ .config/hypr/scripts/update-hyprlock-wp.sh | 40 ++++ .../code/{image.lua => image.lua.disable} | 0 .../comfort-features/folding-ufo.lua | 56 ++++++ .../nvim/lua/goodhumored/common-bindings.lua | 3 + .config/nvim/lua/goodhumored/core/dap/dap.lua | 48 +++++ .../lua/goodhumored/editing/autocomplete.lua | 3 +- .../editing/tables-(vim-table-mode).lua | 10 + .../lua/goodhumored/languages/neorg/neorg.lua | 4 +- .config/nvim/lua/goodhumored/lazy.lua | 1 + .../lua/goodhumored/snacks/snacks-nvim.lua | 175 ++++++++++++++++++ .config/nvim/luasnippets/ts.jsonc | 12 +- .config/scripts/copy-pass.sh | 32 ++++ .config/scripts/get_layout.sh | 2 +- .config/scripts/select-vpn.sh | 31 ++++ .../scripts/set_brightness_other_monitors.sh | 81 ++++++++ .config/waybar/get_layout.sh | 2 +- .config/waybar/modules.json | 4 +- .tmux.conf | 2 + .zshrc | 6 + Profile1.bcf | Bin 0 -> 13308 bytes journal/2025/03/23.norg | 0 prog.bcf | Bin 0 -> 13308 bytes 35 files changed, 685 insertions(+), 75 deletions(-) create mode 100755 .config/dunst/play-error-sound.sh create mode 100644 .config/dunst/sounds/error.mp3 create mode 100644 .config/hypr/experimental_features.conf create mode 100644 .config/hypr/hyprlock-bg.conf create mode 100644 .config/hypr/scripts/scroll.py create mode 100755 .config/hypr/scripts/toggle_hdr.sh create mode 100755 .config/hypr/scripts/update-hyprlock-wp.sh rename .config/nvim/lua/goodhumored/appearance/code/{image.lua => image.lua.disable} (100%) create mode 100644 .config/nvim/lua/goodhumored/comfort-features/folding-ufo.lua create mode 100644 .config/nvim/lua/goodhumored/editing/tables-(vim-table-mode).lua create mode 100644 .config/nvim/lua/goodhumored/snacks/snacks-nvim.lua create mode 100755 .config/scripts/copy-pass.sh create mode 100755 .config/scripts/select-vpn.sh create mode 100755 .config/scripts/set_brightness_other_monitors.sh create mode 100644 Profile1.bcf create mode 100644 journal/2025/03/23.norg create mode 100644 prog.bcf diff --git a/.aliases.sh b/.aliases.sh index 5b077de..9f3e6bd 100644 --- a/.aliases.sh +++ b/.aliases.sh @@ -36,3 +36,10 @@ fi # ──────────────────────── zoxide (cd -> zoxide) ────────────────────── 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 diff --git a/.config/Code/User/settings.json b/.config/Code/User/settings.json index f02d455..0192970 100644 --- a/.config/Code/User/settings.json +++ b/.config/Code/User/settings.json @@ -1,4 +1,5 @@ { "bitoAI.codeCompletion.enableAutoCompletion": false, - "bitoAI.codeCompletion.enableCommentToCode": true + "bitoAI.codeCompletion.enableCommentToCode": true, + "database-client.autoSync": true } \ No newline at end of file diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc index c6ddd6f..5d6ba31 100644 --- a/.config/dunst/dunstrc +++ b/.config/dunst/dunstrc @@ -329,33 +329,6 @@ # 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 = "#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 # override settings for certain messages. # @@ -484,10 +457,6 @@ # set_stack_tag = "volume" # -[notification_sound] - summary = "*" - script = ~/.config/dunst/play-notif-sound.sh - [pomodoro] appname = "notify-send" summary = "Timer *" @@ -495,16 +464,51 @@ urgency = normal script = ~/.config/dunst/play-pomodoro.sh +[pomodoro] + summary = "Timer *" + urgency = normal + script = ~/.config/dunst/play-pomodoro.sh + [low-battery] appname = "poweralertd" # summary = "Timer *" category = "power.low" script = ~/.config/dunst/play-low-battery-sound.sh +[proclickm] + summary = "ProClickM" + urgency = low + timeout = 1 + history_ignore = yes + [critical-battery] appname = "poweralertd" # summary = "Timer *" + urgency = critical category = "power.critical" 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 diff --git a/.config/dunst/play-error-sound.sh b/.config/dunst/play-error-sound.sh new file mode 100755 index 0000000..20ca73d --- /dev/null +++ b/.config/dunst/play-error-sound.sh @@ -0,0 +1 @@ +paplay ~/.config/dunst/sounds/error.mp3 diff --git a/.config/dunst/sounds/error.mp3 b/.config/dunst/sounds/error.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..937019bc8693172ef639c62a2150d9623bb416d8 GIT binary patch literal 60186 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 J|393-{{XZcxgh`m literal 0 HcmV?d00001 diff --git a/.config/hypr/conf/keybindings.conf b/.config/hypr/conf/keybindings.conf index 0482b23..1734dac 100644 --- a/.config/hypr/conf/keybindings.conf +++ b/.config/hypr/conf/keybindings.conf @@ -11,11 +11,12 @@ $mainMod = SUPER # Sets "Windows" key as main modifier # apps 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, E, exec, $fileManager # file manager bind = $mainMod, A, exec, $toggle_menu_cmd # wofi 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 ─────────────────────────── 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, DELETE, exit, # pseudo 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 ───────────────────────── 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 ─────────────────────────────── 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 │ @@ -115,9 +121,26 @@ 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, L, exec, playerctl --player=$(cat ~/.config/chosen_player) next 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 ─────────────────────── -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 # ─────────────────────── select playerctl player ───────────────────── bind= CTRL ALT SHIFT, P, exec, ~/.config/hypr/scripts/wofi-player.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: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" diff --git a/.config/hypr/experimental_features.conf b/.config/hypr/experimental_features.conf new file mode 100644 index 0000000..592df2d --- /dev/null +++ b/.config/hypr/experimental_features.conf @@ -0,0 +1,4 @@ +experimental { + xx_color_management_v4 = false +} + diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf index bb09f09..59fb1e7 100644 --- a/.config/hypr/hyprland.conf +++ b/.config/hypr/hyprland.conf @@ -21,6 +21,14 @@ $terminal = kitty $fileManager = $terminal tmux new-session -s tmp-file-manager 'yazi' $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 │ # ╰──────────────────────────────────────────────────────────╯ @@ -158,9 +166,9 @@ source = ./conf/keybindings.conf # │ WINDOWRULES │ # ╰──────────────────────────────────────────────────────────╯ # ──────────────────────────────── copyq ────────────────────────────── -windowrule = size 300 400,^(copyq)$ -windowrule = float,com.github.hluk.copyq -windowrule = move onscreen cursor,com.github.hluk.copyq +windowrule = size 300 400,class:^(copyq)$ +windowrule = float,class:com.github.hluk.copyq +windowrule = move onscreen cursor,class:com.github.hluk.copyq # ────────────────────── Browser Picture in Picture ────────────────────── windowrulev2 = float, title:^(Picture-in-Picture)$ @@ -172,25 +180,25 @@ windowrulev2 = float, title:(Media viewer) windowrulev2 = fullscreen, title:^(Media viewer)$ # different floating modals -windowrule = maxsize 400 300, (blueman|io.crow_translate.CrowTranslate) -windowrule = float, (pavucontrol|blueman-manager|wofi|rofi|imv|io.crow_translate.CrowTranslate) -windowrule = pin, (pavucontrol|blueman-manager|wofi|rofi|io.crow_translate.CrowTranslate) -windowrule = stayfocused, (pavucontrol|blueman-manager|wofi|rofi|io.crow_translate.CrowTranslate) -windowrule = move onscreen cursor,(pavucontrol|blueman-manager|imv|io.crow_translate.CrowTranslate) +windowrule = maxsize 400 300, class:(blueman|org.kde.CrowTranslate) +windowrule = float, class:(pavucontrol|blueman-manager|wofi|Rofi|imv|org.kde.CrowTranslate) +windowrule = pin, class:(pavucontrol|blueman-manager|wofi|Rofi|org.kde.CrowTranslate) +windowrule = stayfocused, class:(pavucontrol|blueman-manager|wofi|Rofi|org.kde.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 1, title:^(.*)(Firefox)(.*)$ windowrule = workspace special:music, title:(.*)((M|m)usic|(М|м)узыка)(.*) windowrule = float, title:(.*)((M|m)usic|(М|м)узыка)(.*) windowrule = size 1500 900, title:(.*)((M|m)usic|(М|м)узыка)(.*) # Example windowrule v2 -windowrulev2 = float,class:^(cursor-float)$ -windowrulev2 = move onscreen cursor,class:^(cursor-float)$ +windowrule = float,class:^(cursor-float)$ +windowrule = move onscreen cursor,class:^(cursor-float)$ -windowrulev2 = float,class:^(dmenu)$ -windowrulev2 = pin,class:^(dmenu)$ -windowrulev2 = stayfocused,class:^(dmenu)$ +windowrule = float,class:^(dmenu)$ +windowrule = pin,class:^(dmenu)$ +windowrule = stayfocused,class:^(dmenu)$ # windowrulev2 = move onscreen cursor,class:^(dmenu)$ # @@ -199,13 +207,12 @@ windowrule = tile, class:(.*)(MATLAB)(.*) windowrule = workspace 6, class:(.*)(MATLAB)(.*) windowrule = size 400 400, class:(.*)(MATLAB)(.*) -windowrule = tile, (.*)(Figure)(.*) -windowrule = workspace 6, (.*)(Figure)(.*) -windowrule = size 400 400, (.*)(Figure)(.*) +windowrule = tile, class:(.*)(Figure)(.*) +windowrule = workspace 6, class:(.*)(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 = opacity 0.5, onworkspace:name:special:music diff --git a/.config/hypr/hyprlock-bg.conf b/.config/hypr/hyprlock-bg.conf new file mode 100644 index 0000000..838a7a9 --- /dev/null +++ b/.config/hypr/hyprlock-bg.conf @@ -0,0 +1,9 @@ +background { + monitor = eDP-1 + path = /home/goodhumored/wallpapers/3.png +} +background { + monitor = DP-2 + path = /home/goodhumored/wallpapers/3.png +} + diff --git a/.config/hypr/hyprlock.conf b/.config/hypr/hyprlock.conf index 1ed284b..d0723a1 100644 --- a/.config/hypr/hyprlock.conf +++ b/.config/hypr/hyprlock.conf @@ -5,11 +5,8 @@ # |_| |_|\__, | .__/|_| |_|\___/ \___|_|\_\ # |___/|_| # - -background { - monitor = - path = $HOME/wallpapers/isaac_cathedral.jpg -} +# +source = ./hyprlock-bg.conf label { monitor = @@ -43,7 +40,7 @@ input-field { rounding = -1 # -1 means complete rounding (circle/oval) check_color = rgb(204, 136, 34) 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 capslock_color = rgb(150, 34, 34) numlock_color = -1 diff --git a/.config/hypr/monitors.conf b/.config/hypr/monitors.conf index 2e5d9bc..7fba15d 100644 --- a/.config/hypr/monitors.conf +++ b/.config/hypr/monitors.conf @@ -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: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 diff --git a/.config/hypr/scripts/scroll.py b/.config/hypr/scripts/scroll.py new file mode 100644 index 0000000..51f6510 --- /dev/null +++ b/.config/hypr/scripts/scroll.py @@ -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 ") + 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() diff --git a/.config/hypr/scripts/toggle_hdr.sh b/.config/hypr/scripts/toggle_hdr.sh new file mode 100755 index 0000000..82c8083 --- /dev/null +++ b/.config/hypr/scripts/toggle_hdr.sh @@ -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" diff --git a/.config/hypr/scripts/update-hyprlock-wp.sh b/.config/hypr/scripts/update-hyprlock-wp.sh new file mode 100755 index 0000000..7571ea8 --- /dev/null +++ b/.config/hypr/scripts/update-hyprlock-wp.sh @@ -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" diff --git a/.config/nvim/lua/goodhumored/appearance/code/image.lua b/.config/nvim/lua/goodhumored/appearance/code/image.lua.disable similarity index 100% rename from .config/nvim/lua/goodhumored/appearance/code/image.lua rename to .config/nvim/lua/goodhumored/appearance/code/image.lua.disable diff --git a/.config/nvim/lua/goodhumored/comfort-features/folding-ufo.lua b/.config/nvim/lua/goodhumored/comfort-features/folding-ufo.lua new file mode 100644 index 0000000..8c4f577 --- /dev/null +++ b/.config/nvim/lua/goodhumored/comfort-features/folding-ufo.lua @@ -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//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, +} diff --git a/.config/nvim/lua/goodhumored/common-bindings.lua b/.config/nvim/lua/goodhumored/common-bindings.lua index 79b08bd..b3b0b08 100644 --- a/.config/nvim/lua/goodhumored/common-bindings.lua +++ b/.config/nvim/lua/goodhumored/common-bindings.lua @@ -63,6 +63,9 @@ vim.keymap.set("n", "th", ":tabprev", { desc = "[T]ab left", noremap = true, vim.keymap.set("n", "tj", ":tabfirst", { desc = "[T]ab home", noremap = true, silent = true }) vim.keymap.set("n", "tk", ":tablast", { desc = "[T]ab end", noremap = true, silent = true }) +-- ───────────────────────── close other buffers ───────────────────────── +vim.keymap.set("n", "", ':%bdelete|edit #|normal `"', { noremap = true, silent = true }) + -- ╭─────────────────────────────────────────────────────────╮ -- │ Moving lines │ -- ╰─────────────────────────────────────────────────────────╯ diff --git a/.config/nvim/lua/goodhumored/core/dap/dap.lua b/.config/nvim/lua/goodhumored/core/dap/dap.lua index 83c4473..c07352f 100644 --- a/.config/nvim/lua/goodhumored/core/dap/dap.lua +++ b/.config/nvim/lua/goodhumored/core/dap/dap.lua @@ -113,6 +113,54 @@ return { protocol = "inspector", 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", request = "launch", diff --git a/.config/nvim/lua/goodhumored/editing/autocomplete.lua b/.config/nvim/lua/goodhumored/editing/autocomplete.lua index 6e4cf7f..aaa5373 100644 --- a/.config/nvim/lua/goodhumored/editing/autocomplete.lua +++ b/.config/nvim/lua/goodhumored/editing/autocomplete.lua @@ -66,6 +66,7 @@ return { -- Autocompletion -- This will auto-import if your LSP supports it. -- This will expand snippets if the LSP sent a snippet. [""] = cmp.mapping.confirm({ select = true }), + [""] = cmp.mapping.abort(), -- If you prefer more traditional completion keymaps, -- you can uncomment the following lines @@ -76,7 +77,7 @@ return { -- Autocompletion -- Manually trigger a completion from nvim-cmp. -- Generally you don't need this, because nvim-cmp will display -- completions whenever it has completion options available. - [""] = cmp.mapping.complete(), + [""] = cmp.mapping.complete(), -- Think of as moving to the right of your snippet expansion. -- So if you have a snippet that's like: diff --git a/.config/nvim/lua/goodhumored/editing/tables-(vim-table-mode).lua b/.config/nvim/lua/goodhumored/editing/tables-(vim-table-mode).lua new file mode 100644 index 0000000..b746d28 --- /dev/null +++ b/.config/nvim/lua/goodhumored/editing/tables-(vim-table-mode).lua @@ -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, +} diff --git a/.config/nvim/lua/goodhumored/languages/neorg/neorg.lua b/.config/nvim/lua/goodhumored/languages/neorg/neorg.lua index c3d5449..d9445c1 100644 --- a/.config/nvim/lua/goodhumored/languages/neorg/neorg.lua +++ b/.config/nvim/lua/goodhumored/languages/neorg/neorg.lua @@ -12,8 +12,8 @@ return { load = { ["core.defaults"] = {}, ["core.concealer"] = {}, - ["core.integrations.image"] = {}, - ["core.latex.renderer"] = {}, + -- ["core.integrations.image"] = {}, + -- ["core.latex.renderer"] = {}, ["core.export"] = { config = { -- Note that this table is optional and doesn't need to be provided -- Configuration here diff --git a/.config/nvim/lua/goodhumored/lazy.lua b/.config/nvim/lua/goodhumored/lazy.lua index 95fb260..2732d9a 100644 --- a/.config/nvim/lua/goodhumored/lazy.lua +++ b/.config/nvim/lua/goodhumored/lazy.lua @@ -16,6 +16,7 @@ local languagesPlugins = require("goodhumored.languages") require("lazy").setup({ { import = "goodhumored.appearance.code" }, { import = "goodhumored.appearance.theme" }, + { import = "goodhumored.snacks.snacks-nvim" }, { import = "goodhumored.appearance.ui" }, { import = "goodhumored.appearance.tint-unfocused" }, { import = "goodhumored.comfort-features" }, diff --git a/.config/nvim/lua/goodhumored/snacks/snacks-nvim.lua b/.config/nvim/lua/goodhumored/snacks/snacks-nvim.lua new file mode 100644 index 0000000..21be438 --- /dev/null +++ b/.config/nvim/lua/goodhumored/snacks/snacks-nvim.lua @@ -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 + 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 = { + { + "gb", + function() + require("snacks").git.blame_line() + end, + desc = "[G]it [B]lame", + }, + { + ".", + function() + require("snacks").scratch() + end, + desc = "Toggle Scratch Buffer", + }, + { + "S", + function() + require("snacks").scratch.select() + end, + desc = "Select Scratch Buffer", + }, + }, +} diff --git a/.config/nvim/luasnippets/ts.jsonc b/.config/nvim/luasnippets/ts.jsonc index 7533f7b..bb877df 100644 --- a/.config/nvim/luasnippets/ts.jsonc +++ b/.config/nvim/luasnippets/ts.jsonc @@ -67,17 +67,17 @@ ] }, "react prop": { - "scope": "typescript", + "scope": "typescriptreact", "prefix": "comp", "body": [ "import React from \"react\";", "", - "export default function ${1:name}({className}: {className?: string}) {", - " return (", - " <${2:div} className={`${className}`}>", - " $0", - " ", + "export default function ${1:name}({ className }: { className?: string }) {", + " return (", + " <${2:div} className={`\\${className}`}>", + " ", " )", + " ${0:{\/* asdf *\/}}", "}" ] }, diff --git a/.config/scripts/copy-pass.sh b/.config/scripts/copy-pass.sh new file mode 100755 index 0000000..597c428 --- /dev/null +++ b/.config/scripts/copy-pass.sh @@ -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 diff --git a/.config/scripts/get_layout.sh b/.config/scripts/get_layout.sh index a651977..3c7d191 100755 --- a/.config/scripts/get_layout.sh +++ b/.config/scripts/get_layout.sh @@ -18,7 +18,7 @@ getFlagEmoji() { } # TODO: get keyboard name dynamically 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 | tr 'a-z' 'A-Z') diff --git a/.config/scripts/select-vpn.sh b/.config/scripts/select-vpn.sh new file mode 100755 index 0000000..73ef2e7 --- /dev/null +++ b/.config/scripts/select-vpn.sh @@ -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 + + diff --git a/.config/scripts/set_brightness_other_monitors.sh b/.config/scripts/set_brightness_other_monitors.sh new file mode 100755 index 0000000..fb2d7b8 --- /dev/null +++ b/.config/scripts/set_brightness_other_monitors.sh @@ -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 diff --git a/.config/waybar/get_layout.sh b/.config/waybar/get_layout.sh index a651977..3c7d191 100755 --- a/.config/waybar/get_layout.sh +++ b/.config/waybar/get_layout.sh @@ -18,7 +18,7 @@ getFlagEmoji() { } # TODO: get keyboard name dynamically 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 | tr 'a-z' 'A-Z') diff --git a/.config/waybar/modules.json b/.config/waybar/modules.json index b0ef433..c2ed617 100644 --- a/.config/waybar/modules.json +++ b/.config/waybar/modules.json @@ -152,8 +152,8 @@ }, "custom/layout": { "exec": "~/.config/waybar/get_layout.sh", - "on-click": "hyprctl switchxkblayout at-translated-set-2-keyboard next", - "on-click-right": "hyprctl switchxkblayout at-translated-set-2-keyboard prev", + "on-click": "hyprctl switchxkblayout all next", + "on-click-right": "hyprctl switchxkblayout all prev", "interval": 1 }, // Wofi Application Launcher diff --git a/.tmux.conf b/.tmux.conf index 67335f4..2cd5786 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -5,6 +5,8 @@ unbind C-b set -g prefix C-Space +bind-key -n C-\; send-keys C-\; + # ────────────────── prefix ctrl+a for nested sessions ──────────────── bind-key -n C-a send-prefix diff --git a/.zshrc b/.zshrc index ea24341..420a990 100644 --- a/.zshrc +++ b/.zshrc @@ -43,6 +43,12 @@ case ":$PATH:" in *) export PATH="$PNPM_HOME:$PATH" ;; esac +GO_HOME="$(go env GOPATH)/bin" +case ":$PATH:" in + *":$GO_HOME:"*) ;; + *) export PATH="$GO_HOME:$PATH" ;; +esac + # fzf customization if command -v fd > /dev/null; then export FZF_DEFAULT_COMMAND="fd --hidden --strip-cwd-prefix --exclude .git" diff --git a/Profile1.bcf b/Profile1.bcf new file mode 100644 index 0000000000000000000000000000000000000000..5f8512d9dd137582f1a864f362256313acacdca3 GIT binary patch literal 13308 zcmeI1$x;+S5QhIr23g%e4K@)3L_rKdWib?R0r#CvJ*#1a;l6wD?#)N=>Rk`+FW?in z9K7ixs1camf7Uo%!7`2)N2??3>aQ}hmcO!kigvW>$&ZRl=Wz_za2e-t0T*!=J;>n_ z)F-?ISICu>aVfY;uBtM=My{zbzD{mzG`>M@Z8g40?&vVSMego4zD@4yGrmLKzTNmP zdDkxEd*prljPH|=95HSoPfr`aC8tuxCQC_)aWCzQ7aMOTS63TvA=lO#ZzZo;W6W`* ztU(vpMxA6<|{{6dH} zj1x?emn<>+D0#&S;}hh%I^%J2Q=zq18grcJrLF>w69d#iG)d!YXvqBE zllSZ~{zyJ>!1x3C7~=%Z?Jp| z9|7|W?d|5zaiOcr_#pi^Gj9Zk$b(#G!E^HPu=#%?k5YF5^A5+kPSLV0i#*b4^FK}h z@^WM5HI~I*5HL@$YL(fk3mO`Xxo@y`tuglr)~`1{9GBR{JQBPlZ(-gGUX!xgCJoeK0G(`loa32f4 zlkG0}#;2{^hXU?99OgU(oEJ`V-344XoMPSzr~{^SAL!WPELjbdj9Z>3dJ7N~2nzhO z3b_5R@1XcJ;J8KfJ*1c8hp8lYf-h%hFNMCpo-plrX=kZgIKYRSu z<1fbArl2)ynV0Kd2a}kezKRpP$YV9ecGu2dTnf5=jn2(iWk~2>>&>smv;V0kKb%!zpF8GzA;Au&ryC{;GjTIASe(N z2nrO80vq(RNWl#DKOCrjiqoS_{+E85@z;0W^N;?ilknG1dWrt^(@?_R;c@;W4Us{C zpg>R{C=e6~3Iqj$0zrYGKv1Bt6`0ZCNB`WF{p{+pOW!}TW!JfQSGriouJr5uc6@sj zmmNDByBOD2E~Sg{+jI4EmA~shS399TC=e6~3Iqj$0zrYGKv1Bt6iAn)crJ|(r!$z* zQtx_;p5sacA6?S|(`TV9jMj9aEBMT>P%iq+-@@-%qZNA)hZJZ2(=eU3{X0)nf1A%w D4SNf@ literal 0 HcmV?d00001 diff --git a/journal/2025/03/23.norg b/journal/2025/03/23.norg new file mode 100644 index 0000000..e69de29 diff --git a/prog.bcf b/prog.bcf new file mode 100644 index 0000000000000000000000000000000000000000..d642065b8be75ae609ad167d0df2621f995bed93 GIT binary patch literal 13308 zcmeI2Nlz3(6vzMb7z7kIPy@K3peTrO-y*o;&ZgpeHeO8J_k(v64_>@`^{xl^FW@I| zIe62LphkRE|5qd3F*9Rh45QTv-SwOIs_NChs(Kzh-PiEwTi4ASxPVJIkFx;I;S5&m zwd5g~oA42B#2@wb{vxjn|VG zE;MG`ShB=;Bkf&X#+%5i*{@(Tc_aM<)B!y`=Kq5BUAv5*k@xR6t|bo+8m}aej2PFE zMU02ZwX7#NPM$W+?0w`}vy2auTUv~dl3QDiPm-4|HDfVhwc_Fivcu4uT=p z@9j1Jx8&Wsjo*_G958-I9%4PgBJ#0gW@p@}sxsa|dmVKU93fAiZg%#A*|UxJ&_0*@ zK(Lp*i2Vq-&d||e{)`LV-Npy$zn1GpaEQE_^DKBu-nPyBKal&VyMXHs!<;8KZ8Mxl zK5zb~=s$U~G1oO_crOUJPB3SV*{KWW%`@h{!Q#cn+$UJJ%(&lQv6AaZ@SMDk>t67Z zyk(2|zanqnPHqJry3!u%DB!xlVXh;|0W+Pwy4sx~x(rXd!jviQ4AEgWxWY{DrQ>OJ z1hjD<3%-)=Ecn9GdhSC3_Z|8<4gtr7Bb;{u=M5*hZUxi<$8{fQY<`u@2WpPmI#2W# zAu13R_-7Re`(N)tJ{t(!CVC&zBk612>oj?iSg;JIKh)rtVVAS?M&dSp!;WZVZ16sLjUH}_?lAO zl6|}a<~<<@!TnJ5R{`_L#E0d=&+*s-E4N}sztEqi8e#qm->=qW;rq3~_I+RAj*Oja zwa~v_xuLQ*HH_%Y+}Ewv5?=Gqkwr-x?bd{ zKvW0#SjeKvW6i+*LSN+^_A0?$ovq;Ij+2WBiFU@2ihqWbGdWjW~$iX+9`EJpW+IY dqfhY`e$VP=?2fNeUHH*3pSQhPq^XJK^8=~A{FDFy literal 0 HcmV?d00001