update: huge style update

This commit is contained in:
2026-03-13 10:37:01 +03:00
parent 1dea8c1a69
commit c49c97d55c
55 changed files with 686 additions and 332 deletions

View File

@@ -1,3 +1,24 @@
# editor
export EDITOR=nvim
# infinite bash history
# remove '-1' in both places if your bash version < 4.3
export HISTFILESIZE=-1
export HISTSIZE=-1
# writes bash history after every command
export PROMPT_COMMAND="history -a"
# pyenv
if command -v pyenv >/dev/null 2>&1; then
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
fi
# android-sdk
export ANDROID_SDK_ROOT=/opt/android-sdk export ANDROID_SDK_ROOT=/opt/android-sdk
export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools

39
.bashrc
View File

@@ -1,21 +1,4 @@
# Configs # additional aliases
export EDITOR=nvim
# infinite bash history
# remove '-1' in both places if your bash version < 4.3
export HISTFILESIZE=-1
export HISTSIZE=-1
# writes bash history after every command
export PROMPT_COMMAND="history -a"
# pyenv
if command -v pyenv >/dev/null 2>&1; then
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
fi
if [ -f "$HOME/.bash_private" ]; then if [ -f "$HOME/.bash_private" ]; then
. "$HOME/.bash_private" . "$HOME/.bash_private"
fi fi
@@ -45,13 +28,14 @@ alias t='cd ~/tmp'
alias cleartmp='rm -r ~/tmp/*' alias cleartmp='rm -r ~/tmp/*'
# edit configs aliases # edit configs aliases
alias cfghypr='nvim ~/.config/hypr' alias cfghypr='(nvim ~/.config/hypr)'
alias cfgkitty='nvim ~/.config/kitty' alias cfgkitty='(nvim ~/.config/kitty)'
alias cfgnvim='nvim ~/.config/nvim' alias cfgnvim='(nvim ~/.config/nvim)'
alias cfgrofi='nvim ~/.config/rofi' alias cfgrofi='(nvim ~/.config/rofi)'
alias cfgwaybar='nvim ~/.config/waybar' alias cfgwaybar='(nvim ~/.config/waybar)'
alias cfgdunst='nvim ~/.config/dunst' alias cfgdunst='(nvim ~/.config/dunst)'
alias cfgyazi='nvim ~/.config/yazi' alias cfgyazi='(nvim ~/.config/yazi)'
alias cfgfastfetch='(nvim ~/.config/fastfetch)'
# utils aliases # utils aliases
alias y='yazi' alias y='yazi'
@@ -63,13 +47,16 @@ alias hload='hyprctl reload'
alias shy='start-hyprland' alias shy='start-hyprland'
alias wifi-reload='nmcli r wifi off && nmcli r wifi on' alias wifi-reload='nmcli r wifi off && nmcli r wifi on'
alias swagger-docs='sudo host-docs' alias swagger-docs='sudo host-docs'
alias share='python3 -m http.server'
alias download='aria2c -x16 -s16'
# kitty aliases # kitty aliases
alias ssh='kitty +kitten ssh' alias ssh='kitty +kitten ssh'
alias edit-in-kitty='kitten edit-in-kitty' alias edit-in-kitty='kitten edit-in-kitty'
# yay aliases # yay/pacman aliases
alias pzf='yay -Qq | fzf --preview '\''yay -Qil {}'\'' --layout reverse --bind '\''enter:execute(yay -Qil {} | less)'\'' --bind '\''ctrl-r:execute(yay -R {} | less)'\''' alias pzf='yay -Qq | fzf --preview '\''yay -Qil {}'\'' --layout reverse --bind '\''enter:execute(yay -Qil {} | less)'\'' --bind '\''ctrl-r:execute(yay -R {} | less)'\'''
alias paclean='sudo pacman -Rs '
# fun aliases # fun aliases
alias ff='fastfetch' alias ff='fastfetch'

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 MiB

View File

Before

Width:  |  Height:  |  Size: 2.5 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

View File

Before

Width:  |  Height:  |  Size: 16 MiB

After

Width:  |  Height:  |  Size: 16 MiB

View File

Before

Width:  |  Height:  |  Size: 3.6 MiB

After

Width:  |  Height:  |  Size: 3.6 MiB

View File

Before

Width:  |  Height:  |  Size: 11 MiB

After

Width:  |  Height:  |  Size: 11 MiB

View File

@@ -0,0 +1,10 @@
# Wallpaper
env = WALLPAPER,$HOME/.config/hypr/Wallpapers/Arcane/jinx-fog.png
# Lockscreen wallpaper
env = LOCK_WALLPAPER,$HOME/.config/hypr/Wallpapers/Arcane/airship.png
env = LOCK_BLUR_PASSES,0 # 0 disable blurring
# Custom env to switch between default hyprland workspace switching style and hyprnome style
env = GNOME_STYLE_WORKSPACES,true

View File

@@ -1,3 +1,6 @@
# TODO: testing
exec-once = bash -c "sleep 1 && for monitor in $(hyprctl monitors -j | jq -r '.[].name'); do hyprctl dispatch workspace 100 && hyprctl dispatch focusworkspaceoncurrentmonitor 100; done"
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = uwsm app -- /usr/lib/xdg-desktop-portal-hyprland exec-once = uwsm app -- /usr/lib/xdg-desktop-portal-hyprland
@@ -6,9 +9,8 @@ exec-once = uwsm app -- /usr/lib/xdg-desktop-portal-gtk
exec-once = uwsm app -- hypridle exec-once = uwsm app -- hypridle
# exec-once = uwsm app -- hyprpaper
exec-once = uwsm app -- swww-daemon exec-once = uwsm app -- swww-daemon
exec-once = swww img "$WALLPAPER" exec-once = uwsm app -- swww img "$WALLPAPER"
exec-once = uwsm app -- waybar exec-once = uwsm app -- waybar
exec-once = uwsm app -- dunst exec-once = uwsm app -- dunst

View File

@@ -3,17 +3,19 @@ $mainMod = SUPER
# navigation binds # navigation binds
bind = $mainMod SHIFT, C, killactive, bind = $mainMod SHIFT, C, killactive
bind = $mainMod SHIFT, M, exit, bind = $mainMod SHIFT, M, exit
bind = $mainMod SHIFT, V, togglefloating,
# window special
bind = $mainMod SHIFT, P, togglefloating
bind = $mainMod, F, fullscreen, 1 bind = $mainMod, F, fullscreen, 1
bind = $mainMod SHIFT, F, fullscreen, 0 bind = $mainMod SHIFT, F, fullscreen, 0
# dwindle # dwindle
bind = $mainMod, P, pseudo, bind = $mainMod, P, pseudo
bind = $mainMod, T, togglesplit, bind = $mainMod, T, layoutmsg, togglesplit
bind = $mainMod SHIFT, T, swapsplit, bind = $mainMod SHIFT, T, layoutmsg, swapsplit
# apps binds # apps binds
@@ -24,7 +26,7 @@ bind = $mainMod SHIFT, R, exec, .config/rofi/network-manager/run-manager.sh
# copy binds # copy binds
bind = $mainMod, V, exec, rofi -modi clipboard:/$HOME/.config/rofi/cliphist-rofi-img.sh -show clipboard -show-icon bind = $mainMod, V, exec, rofi -modi clipboard:/$HOME/.config/rofi/clipboard/cliphist-rofi-img.sh -show clipboard -show-icon -config ~/.config/rofi/clipboard-config.rasi
# -config $HOME/.config/rofi/clipboard-config.rasi # -config $HOME/.config/rofi/clipboard-config.rasi
bind = $mainMod SHIFT, S, exec, IMG=~/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%m-%s).png && grim -g "$(slurp)" $IMG && wl-copy < $IMG bind = $mainMod SHIFT, S, exec, IMG=~/Pictures/Screenshots/$(date +%Y-%m-%d_%H-%m-%s).png && grim -g "$(slurp)" $IMG && wl-copy < $IMG
bind = , PRINT, exec, grim - | wl-copy bind = , PRINT, exec, grim - | wl-copy
@@ -102,41 +104,26 @@ bindm = $mainMod, mouse:273, resizewindow
bindm = $mainMod SHIFT, mouse:272, resizewindow bindm = $mainMod SHIFT, mouse:272, resizewindow
# Resize with keyboard
bind = $mainMod CTRL, h, resizeactive, -30 0
bind = $mainMod CTRL, l, resizeactive, 30 0
bind = $mainMod CTRL, j, resizeactive, 0 30
bind = $mainMod CTRL, k, resizeactive, 0 -30
# Switch workspaces # Switch workspaces
bind = $mainMod, A, focusworkspaceoncurrentmonitor, r-1 bind = $mainMod, A, exec, .config/hypr/scripts/workspace-handler.sh change previous
bind = $mainMod, D, focusworkspaceoncurrentmonitor, r+1 bind = $mainMod, D, exec, .config/hypr/scripts/workspace-handler.sh change next
bind = $mainMod CTRL, A, focusworkspaceoncurrentmonitor, r-1
bind = $mainMod CTRL, D, focusworkspaceoncurrentmonitor, r+1
# Move active window to the next or previous workspace # Move active window between workspaces
bind = $mainMod SHIFT, A, movetoworkspace, r-1 bind = $mainMod SHIFT, A, exec, .config/hypr/scripts/workspace-handler.sh move previous
bind = $mainMod SHIFT, D, movetoworkspace, r+1 bind = $mainMod SHIFT, D, exec, .config/hypr/scripts/workspace-handler.sh move next
bind = $mainMod CTRL SHIFT, A, movetoworkspace, r-1
bind = $mainMod CTRL SHIFT, D, movetoworkspace, r+1
# Swap worlspaces between monitors # Swap worlspaces between monitors
bind = $mainMod, TAB, swapactiveworkspaces, 1 0 bind = $mainMod, TAB, swapactiveworkspaces, 1 0
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, focusworkspaceoncurrentmonitor, 1
bind = $mainMod, 2, focusworkspaceoncurrentmonitor, 2
bind = $mainMod, 3, focusworkspaceoncurrentmonitor, 3
bind = $mainMod, 4, focusworkspaceoncurrentmonitor, 4
bind = $mainMod, 5, focusworkspaceoncurrentmonitor, 5
bind = $mainMod, 6, focusworkspaceoncurrentmonitor, 6
bind = $mainMod, 7, focusworkspaceoncurrentmonitor, 7
bind = $mainMod, 8, focusworkspaceoncurrentmonitor, 8
bind = $mainMod, 9, focusworkspaceoncurrentmonitor, 9
bind = $mainMod, 0, focusworkspaceoncurrentmonitor, 0
# Move active window to a workspace with mainMod + SHIFT + [0-9]
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, 0

View File

@@ -12,6 +12,7 @@ exec = gsettings set org.gnome.desktop.interface gtk-theme "adw-gtk3-dark"
env = XCURSOR_SIZE,24 env = XCURSOR_SIZE,24
env = ELECTRON_OZONE_PLATFORM_HINT,wayland env = ELECTRON_OZONE_PLATFORM_HINT,wayland
env = MOZ_ENABLE_WAYLAND,1
# env = chrome,--enable-features=TouchpadOverscrollHistoryNavigation # env = chrome,--enable-features=TouchpadOverscrollHistoryNavigation
env = GDK_SCALE,1 env = GDK_SCALE,1

View File

@@ -1,3 +1,4 @@
# Splashes
ecosystem { ecosystem {
no_update_news = true no_update_news = true
no_donation_nag = true no_donation_nag = true
@@ -6,23 +7,30 @@ ecosystem {
misc { misc {
disable_hyprland_logo = true disable_hyprland_logo = true
disable_splash_rendering = true disable_splash_rendering = true
} }
# General config
general { general {
gaps_in = 3 gaps_in = 3
gaps_out = 5 gaps_out = 5
border_size = 2 border_size = 2
col.active_border = rgba(33ccffee) rgba(bd93f9ee) 45deg col.active_border = rgba(6aa0d2ff) rgba(cb7194ff) 24deg
col.inactive_border = rgba(595959aa) col.inactive_border = rgba(595959aa)
layout = dwindle layout = dwindle
} }
dwindle {
pseudotile = yes
preserve_split = yes
}
cursor { cursor {
inactive_timeout = 2 inactive_timeout = 2
} }
# Window styling
decoration { decoration {
rounding = 10 rounding = 10
blur { blur {
@@ -67,13 +75,6 @@ animations {
# animation = workspaces, 1, 6, myBezier, slide # animation = workspaces, 1, 6, myBezier, slide
} }
dwindle {
pseudotile = yes
preserve_split = yes
}
group { group {
col.border_active = rgba(33ccffee) rgba(bd93f9ee) 45deg col.border_active = rgba(33ccffee) rgba(bd93f9ee) 45deg
groupbar { groupbar {

View File

@@ -1 +0,0 @@
env = WALLPAPER_PATH,$HOME/.config/hypr/Wallpapers/kotamota2.png

View File

@@ -17,6 +17,7 @@ windowrule = tag +tools, match:class ^([Dd][Bb]eaver|[Dd][Bb]eaver-ce|[Dd][Bb]ea
windowrule = opacity 0.85 0.75, match:tag tools* windowrule = opacity 0.85 0.75, match:tag tools*
# jetbrains # jetbrains
windowrule = no_initial_focus on, match:class (jetbrains-idea), match:title ^win.* windowrule = no_initial_focus on, match:class (jetbrains-idea), match:title ^win.*
windowrule = no_initial_focus on, match:class (jetbrains-studio), match:title ^win(.*) windowrule = no_initial_focus on, match:class (jetbrains-studio), match:title ^win(.*)
@@ -24,6 +25,12 @@ windowrule = no_initial_focus on, match:class (jetbrains-goland), match:title ^
windowrule = no_initial_focus on, match:class (jetbrains-toolbox), match:float yes windowrule = no_initial_focus on, match:class (jetbrains-toolbox), match:float yes
windowrule = no_initial_focus on, match:class (jetbrains-goland), match:float yes, match:title ^$, match:initial_title ^$ windowrule = no_initial_focus on, match:class (jetbrains-goland), match:float yes, match:title ^$, match:initial_title ^$
# other # other
# windowrule = float, center, match:class ^(xfce-polkit)$ # windowrule = float, center, match:class ^(xfce-polkit)$
# windowrule = float, center, match:class ^(file-roller)$ # windowrule = float, center, match:class ^(file-roller)$
# Permanent
# windowrule = size 800 400,match:float yes
# set

View File

@@ -0,0 +1,40 @@
## Sources
https://colorscheme.ru/color-converter.html
http://maketintsandshades.com/#colors=0661b4,a9124d&hashtag=0&steps=10
https://meyerweb.com/eric/tools/color-blend/#0661B4:A9124D:4:hex
## Original colors:
### Jinx Blue
`#0661b4`
### Vi Red
`#a9124d`
## Gradients:
### Jinx Blue -> Vi Red
`#0661b4`
`#27519f`
`#47418b`
`#683276`
`#882262`
`#a9124d`
### Jinx Blue ^
`#0661b4`
`#3881c3`
`#6aa0d2`
`#9bc0e1`
`#cddff0`
### Vi Red ^
`#a9124d`
`#ba4171`
`#cb7194`
`#dda0b8`
`#eed0db`
## Most used:
Blue: `#6aa0d2`
Red: `#cb7194`

View File

@@ -1,10 +1,16 @@
# General
general { general {
fail_timeout = 300 fail_timeout = 300
} }
animations {
animation = fadeIn, 0
animation = fadeOut, 0
}
background { background {
path = $HOME/.config/hypr/Wallpapers/kita.png path = $LOCK_WALLPAPER
blur_passes = 1 # 0 disables blurring blur_passes = $LOCK_BLUR_PASSES
blur_size = 3 blur_size = 3
noise = 0.0117 noise = 0.0117
contrast = 0.8916 contrast = 0.8916
@@ -13,34 +19,50 @@ background {
vibrancy_darkness = 0.0 vibrancy_darkness = 0.0
} }
input-field {
size = 250, 60
outline_thickness = 4
dots_size = 0.2
dots_spacing = 0.2
dots_center = true
outer_color = rgba(51, 204, 255, 0.93)
inner_color = rgba(10, 0, 30, 0)
font_color = rgb(200, 200, 200)
fade_on_empty = false
font_family = JetBrains Mono Nerd Font Mono
placeholder_text = <i><span foreground="##cdd6f4">Мур Кусь</span></i>
hide_input = false
position = 0, -280
halign = center
valign = center
}
# Positioning
# Time
label { label {
text = cmd[update:1000] echo "$(date +"%R")" text = cmd[update:1000] echo "$(date +"%R")"
color = $foreground color = $foreground
font_size = 60 font_size = 60
font_family = JetBrains Mono Nerd Font Mono ExtraBold font_family = JetBrains Mono Nerd Font Mono ExtraBold
position = 0, -180 position = 210, 240
halign = center halign = left
valign = center valign = center
} }
# Date
label {
text = cmd[update:1000] echo -e "$(date +"%A, %B %d")"
color = rgba(216, 222, 233, 0.75)
font_size = 20
font_family = SF Pro Display Bold
position = 202, 175
halign = left
valign = center
}
# Input
input-field {
size = 350, 55
outline_thickness = 2
dots_size = 0.2
dots_spacing = 0.2
dots_center = true
outer_color = rgba(56, 129, 195, 0.94)
inner_color = rgba(10, 0, 30, 0.3)
font_color = rgb(200, 200, 200)
fade_on_empty = false
font_family = JetBrains Mono Nerd Font Mono
placeholder_text = <i><span foreground="##cdd6f4">Poow</span></i>
hide_input = false
position = 160, 40
halign = left
valign = center
}
# Player (TODO: fix it)
label { label {
text = cmd[update:1000] echo "$($HOME/.config/hypr/scripts/player-status.sh)" text = cmd[update:1000] echo "$($HOME/.config/hypr/scripts/player-status.sh)"
color = $foreground color = $foreground
@@ -51,7 +73,3 @@ label {
valign = bottom valign = bottom
} }
animations {
animation = fadeIn, 0
animation = fadeOut, 0
}

View File

@@ -0,0 +1,52 @@
#!/bin/bash
# Usage: workspace-handler.sh <mode> <direction>
# mode: "change" | "move"
# direction: "next" | "previous"
mode="$1"
direction="$2"
if [[ -z "$mode" || -z "$direction" ]]; then
exit 1
fi
if [[ "$mode" != "change" && "$mode" != "move" ]]; then
exit 1
fi
if [[ "$direction" != "next" && "$direction" != "previous" ]]; then
exit 1
fi
if [[ "$GNOME_STYLE_WORKSPACES" == "true" ]] && command -v hyprnome &>/dev/null; then
# Hyprnome style
if [[ "$mode" == "change" ]]; then
if [[ "$direction" == "previous" ]]; then
exec hyprnome --previous
else
exec hyprnome
fi
else
if [[ "$direction" == "previous" ]]; then
exec hyprnome --previous --move
else
exec hyprnome --move
fi
fi
else
# Hyprland style
if [[ "$mode" == "change" ]]; then
if [[ "$direction" == "previous" ]]; then
exec hyprctl dispatch focusworkspaceoncurrentmonitor r-1
else
exec hyprctl dispatch focusworkspaceoncurrentmonitor r+1
fi
else
if [[ "$direction" == "previous" ]]; then
exec hyprctl dispatch movetoworkspace r-1
else
exec hyprctl dispatch movetoworkspace r+1
fi
fi
fi

View File

@@ -1,78 +1,38 @@
linux_display_server wayland linux_display_server wayland
# wayland_titlebar_color background
# Coloring
# BEGIN_KITTY_THEME
# Catppuccin-Mocha
include current-theme.conf
# END_KITTY_THEME
# The color for highlighting URLs on mouse-over
url color #5de4c7
# Fonts
font_family JetBrainsMono Nerd Font font_family JetBrainsMono Nerd Font
bold_font auto bold_font auto
italic_font auto italic_font auto
bold_italic_font auto bold_italic_font auto
font_size 14 font_size 14
background_opacity 0.4
disable_ligatures always disable_ligatures always
# window settings
# Styling
# Opacity
background_opacity 0.4
# Curor trail
cursor_trail 4
cursor_trail_decay 0.1 0.4
# Window settings
initial_window_width 95c initial_window_width 95c
initial_window_height 35c initial_window_height 35c
window_padding_width 20 window_padding_width 20
confirm_os_window_close 0 confirm_os_window_close 0
# Upstream colors {{{
# Special
# background #14151e
# foreground #98b0d3
# Black
# color0 #151720
# color8 #4f5572
# Red
# color1 #dd6777
# color9 #e26c7c
# Green
# color2 #90ceaa
# color10 #95d3af
# Yellow
# color3 #ecd3a0
# color11 #f1d8a5
# Blue
# color4 #86aaec
# color12 #8baff1
# Magenta
# color5 #c296eb
# color13 #c79bf0
# Cyan
# color6 #93cee9
# color14 #98d3ee
# White
# color7 #cbced3
# color15 #d0d3d8
# Cursor
# cursor #cbced3
# cursor_text_color #a5b6cf
# Selection highlight
# selection_foreground #a5b6cf
# selection_background #1c1e27
# The color for highlighting URLs on mouse-over
# url_color #9ece6a
url color #5de4c7
# Window borders
# active_border_color #3d59a1
# inactive_border_color #101014
# bell_border_color #fffac2
# Tab bar # Tab bar
tab_bar_style fade tab_bar_style fade
tab_fade 1 tab_fade 1
@@ -84,18 +44,12 @@ active_tab_font_style bold
inactive_tab_font_style bold inactive_tab_font_style bold
# tab_bar_background #101014 # tab_bar_background #101014
# Title bar
# macos_titlebar_color #16161e
# Keyboard bindings
map kitty_mod+t new_tab_with_cwd
map ctrl+v paste_from_clipboard
# Binds
# Mouse bindings # Mouse bindings
mouse_map b4 press grabbed,ungrabbed send_key ctrl+o mouse_map b4 press grabbed,ungrabbed send_key ctrl+o
mouse_map b5 press grabbed,ungrabbed send_key ctrl+shift+i mouse_map b5 press grabbed,ungrabbed send_key ctrl+shift+i
# BEGIN_KITTY_THEME # Keyboard bindings
# Catppuccin-Mocha map kitty_mod+t new_tab_with_cwd
include current-theme.conf map ctrl+v paste_from_clipboard
# END_KITTY_THEME

View File

@@ -2,4 +2,4 @@ require("config.lazy")
require("config.config") require("config.config")
require("config.options") require("config.options")
require("config.key_binds") require("config.key_binds")
require("config.osc52") require("config.clipboard")

View File

@@ -0,0 +1,9 @@
vim.o.clipboard = "unnamedplus"
-- vim.api.nvim_create_autocmd("TextYankPost", {
-- callback = function()
-- local copy_to_unnamedplus = require("vim.ui.clipboard.osc52").copy("+")
-- copy_to_unnamedplus(vim.v.event.regcontents)
-- local copy_to_unnamed = require("vim.ui.clipboard.osc52").copy("*")
-- copy_to_unnamed(vim.v.event.regcontents)
-- end,
-- })

View File

@@ -1,18 +1,34 @@
-- Also check plugins/neo-tree.lua for binds
vim.cmd([[ vim.cmd([[
tnoremap <C-h> <C-\\><C-o><C-w>h tnoremap <C-h> <C-\\><C-o><C-w>h
tnoremap <C-k> <C-\\><C-o><C-w>k tnoremap <C-k> <C-\\><C-o><C-w>k
tnoremap <C-l> <C-\\><C-o><C-w>l tnoremap <C-l> <C-\\><C-o><C-w>l
tnoremap <C-j> <C-\\><C-o><C-w>j tnoremap <C-j> <C-\\><C-o><C-w>j
" Moving between windows
nnoremap <C-h> <C-w>h nnoremap <C-h> <C-w>h
nnoremap <C-k> <C-w>k nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l nnoremap <C-l> <C-w>l
nnoremap <C-j> <C-w>j nnoremap <C-j> <C-w>j
nnoremap <Space> @q " I don't remember
nnoremap <C-Space>  nnoremap <C-Space> 
vnoremap <C-Space>  vnoremap <C-Space> 
" Paste shell command output
vnoremap <leader>e :!sh<CR> vnoremap <leader>e :!sh<CR>
" Quick qq macros
nnoremap ' @q nnoremap ' @q
" Clear search
nnoremap @/ <Esc>:noh<CR>
" Copy relative path to clipboard (from infile)
nnoremap <F3> :let @+ = expand("%:f")<CR>
" Copy filename to clipboard (from infile)
nnoremap <F4> :let @+ = expand("%:t")<CR>
" Delete trailing spaces
nnoremap <leader>w :let _s=@/<Bar>:%s/\s\+$//e<Bar>:let @/=_s<Bar>:nohl<CR>
]]) ]])

View File

@@ -1,7 +1,4 @@
vim.opt.clipboard = "unnamedplus"
vim.opt.fixeol = true vim.opt.fixeol = true
vim.opt.list = true vim.opt.list = true
vim.opt.listchars = { vim.opt.listchars = {
trail = "·", trail = "·",

View File

@@ -1,27 +0,0 @@
vim.g.osc_enabled = false
vim.api.nvim_create_user_command("ToggleOsc", function(input)
if not vim.g.osc_enabled then
vim.g.clipboard = {
name = "osc 52",
copy = {
["+"] = require("vim.ui.clipboard.osc52").copy("+"),
["*"] = require("vim.ui.clipboard.osc52").copy("*"),
},
paste = {
["+"] = function()
return { vim.fn.split(vim.fn.getreg(""), "\n"), vim.fn.getregtype("") }
end,
["*"] = function()
return { vim.fn.split(vim.fn.getreg(""), "\n"), vim.fn.getregtype("") }
end,
},
}
vim.g.osc_enabled = true
vim.api.nvim_echo({ { "OSC 52 Clipboard Enabled", "Normal" } }, true, {})
else
vim.g.clipboard = nil
vim.g.osc_enabled = false
vim.api.nvim_echo({ { "OSC 52 Clipboard Disabled", "Normal" } }, true, {})
end
end, {})
vim.keymap.set("n", "<leader>H", vim.cmd.ToggleOsc, { desc = "Toggle OSC 52 clipboard" })

View File

@@ -9,6 +9,9 @@ return {
local tree = require("neo-tree") local tree = require("neo-tree")
tree.setup({ tree.setup({
clipboard = {
sync = "universal",
},
document_symbols = { document_symbols = {
custom_kinds = {}, custom_kinds = {},
}, },
@@ -19,8 +22,31 @@ return {
["h"] = "close_node", ["h"] = "close_node",
["<Right>"] = "open", ["<Right>"] = "open",
["<Left>"] = "close_node", ["<Left>"] = "close_node",
["C"] = "convert_to_directory",
}, },
}, },
commands = {
convert_to_directory = function(state)
local node = state.tree:get_node()
local path = node.path
if node.type ~= "file" then
print("Node is not a file")
return
end
local confirm = vim.fn.confirm("Convert " .. node.name .. " to directory?", "&Yes\n&No", 2)
if confirm ~= 1 then
return
end
vim.fn.delete(path)
vim.fn.mkdir(path, "p")
require("neo-tree.sources.manager").refresh(state.name)
print("Converted to directory: " .. path)
end,
},
}) })
vim.keymap.set("n", "<F2>", "<CMD>Neotree toggle<CR>") vim.keymap.set("n", "<F2>", "<CMD>Neotree toggle<CR>")
end, end,

View File

@@ -1,22 +1,26 @@
// Configuration // Configuration
configuration { configuration {
modi: "drun,run,filebrowser,window"; modi: "clipboard";
show-icons: true; show-icons: true;
display-drun: " "; display-clipboard: "󰅌 Clipboard";
display-run: " ";
display-filebrowser: " ";
display-window: " ";
drun-display-format: "{name}"; drun-display-format: "{name}";
window-format: "{w} · {c} · {t}"; window-format: "{w} · {c} · {t}";
// binds // binds
// kb-row-up: "Up,Control+k,Shift+Tab,Shift+ISO_Left_Tab"; kb-row-up: "Up,Control+k,Shift+Tab,Shift+ISO_Left_Tab";
// kb-row-down: "Down,Control+j"; kb-row-down: "Down,Control+j";
kb-accept-entry: "Control+m,Return,KP_Enter";
terminal: "mate-terminal";
kb-remove-to-eol: "Control+Shift+e";
kb-mode-complete: "Control+Shift+t";
kb-mode-next: "Shift+Right,Control+Tab,Control+l";
kb-mode-previous: "Shift+Left,Control+Shift+Tab,Control+h";
kb-remove-char-back: "BackSpace";
} }
// Global Properties // Global Properties
@import "./colors.rasi" @import "./themes/colors.rasi"
@import "./fonts.rasi" @import "./themes/fonts.rasi"
* { * {
border-color: var(border); border-color: var(border);

View File

@@ -1,10 +1,8 @@
// Configuration // Configuration
configuration { configuration {
modi: "drun,run,filebrowser,window"; modi: "drun,window";
show-icons: false; show-icons: false;
display-drun: " "; display-drun: " ";
display-run: " ";
display-filebrowser: " ";
display-window: " "; display-window: " ";
drun-display-format: "{name}"; drun-display-format: "{name}";
window-format: "{w} · {c} · {t}"; window-format: "{w} · {c} · {t}";
@@ -22,8 +20,8 @@ configuration {
} }
// Global Properties // Global Properties
@import "./colors.rasi" @import "./themes/colors.rasi"
@import "./fonts.rasi" @import "./themes/fonts.rasi"
* { * {
border-color: var(border); border-color: var(border);

View File

@@ -1,9 +0,0 @@
# rofi.kb-row-up: Up,Control+k,Shift+Tab,Shift+ISO_Left_Tab
# rofi.kb-row-down: Down,Control+j
rofi.kb-accept-entry: Control+m,Return,KP_Enter
rofi.terminal: mate-terminal
rofi.kb-remove-to-eol: Control+Shift+e
rofi.kb-mode-complete: Control+Shift+t
rofi.kb-mode-next: Shift+Right,Control+Tab,Control+l
rofi.kb-mode-previous: Shift+Left,Control+Shift+Tab,Control+h
rofi.kb-remove-char-back: BackSpace

View File

@@ -3,8 +3,8 @@
sel-foreground: #111218; sel-foreground: #111218;
background-alt: #282B3C00; background-alt: #282B3C00;
foreground: #DADAFF; foreground: #DADAFF;
selected: #87B2F6; selected: #6aa0d2;
active: #33CCFF; active: #33CCFF;
urgent: #50FA7B; urgent: #50FA7B;
border: #87B2F6; border: #0661b4;
} }

View File

@@ -1,19 +1,23 @@
{ {
"position": "bottom", "position": "bottom",
"layer": "top", "layer": "top",
"modules-left": ["group/workspaces-group", "custom/media"], "modules-left": [
"modules-center": [], "~/.config/waybar/modules/tray.jsonc",
"modules-right": [
"tray", "tray",
"custom/media",
],
"modules-center": [
"group/workspaces-group",
],
"modules-right": [
"group/pulseaudio-group", "group/pulseaudio-group",
"group/network-group",
"group/power-group", "group/power-group",
"group/network-group",
"clock", "clock",
], ],
"include": [ "include": [
"~/.config/waybar/modules/workspaces.jsonc", "~/.config/waybar/modules/workspaces.jsonc",
"~/.config/waybar/modules/network.jsonc", "~/.config/waybar/modules/network.jsonc",
"~/.config/waybar/modules/tray.jsonc",
"~/.config/waybar/modules/pulseaudio.jsonc", "~/.config/waybar/modules/pulseaudio.jsonc",
"~/.config/waybar/modules/power.jsonc", "~/.config/waybar/modules/power.jsonc",
"~/.config/waybar/modules/mediaplayer.jsonc", "~/.config/waybar/modules/mediaplayer.jsonc",

View File

@@ -1,2 +0,0 @@
#!/bin/bash
date +"%a %d"

View File

@@ -1,5 +1,23 @@
{ {
"clock": { "clock": {
"format": "{:%H:%M}", "format": "{:%H:%M}",
"tooltip-format": "<span>{calendar}</span>",
"calendar": {
"mode": "month",
"mode-mon-col": 3,
"on-scroll": 1,
"on-click-right": "mode",
"format": {
"months": "<span color='#3881c3'><b>{}</b></span>",
"weekdays": "<span color='#cb7194'><b>{}</b></span>",
"today": "<span color='#3881c3'><b>{}</b></span>"
}
},
"actions": {
"on-click": "shift_reset",
"on-click-right": "mode",
"on-scroll-up": "shift_up",
"on-scroll-down": "shift_down"
},
}, },
} }

View File

@@ -1,7 +0,0 @@
{
"hyprland/language": {
"format": " {}",
"format-en": "en",
"format-ru": "ru",
},
}

View File

@@ -5,8 +5,8 @@
}, },
"bluetooth": { "bluetooth": {
"format": "", "format": "",
"format-disabled": "Bd", "format-disabled": "󰂲",
"format-connected": "", "format-connected": "",
"on-click": "kitty bluetui", "on-click": "kitty bluetui",
"tooltip-format": "{device_enumerate}", "tooltip-format": "{device_enumerate}",
@@ -14,8 +14,8 @@
}, },
"network": { "network": {
"format": "{ifname}", "format": "{ifname}",
"format-disabled": "Wd", "format-disabled": "󰤮",
"format-wifi": "", "format-wifi": "󰖩",
"format-ethernet": "󰈀", "format-ethernet": "󰈀",
"format-disconnected": "󰖪", "format-disconnected": "󰖪",
"tooltip-format-wifi": "{essid}", "tooltip-format-wifi": "{essid}",

View File

@@ -6,15 +6,16 @@
"battery": { "battery": {
"format": "{icon}", "format": "{icon}",
"format-icons": [" ", " ", " ", " ", " "], // "format-icons": [" ", " ", " ", " ", " "],
"format-charging": " ", "format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"],
"format-charging": " {capacity}%",
"tooltip-format": "{capacity}% {timeTo}", "tooltip-format": "{capacity}% {timeTo}",
}, },
"backlight": { "backlight": {
"device": "intel_backlight", "device": "intel_backlight",
"format": "{icon}", "format": "{icon}",
"format-icons": ["", "", "", "", "", "", "", "", ""], "format-icons": ["", "", "", "", "", "", "", "", ""],
"smooth-scrolling-threshold": 1, // This value was tested using a trackpad, it should be lowered if using a mouse. "smooth-scrolling-threshold": 1,
"on-scroll-down": "brightnessctl --class='backlight' set 5%+", "on-scroll-down": "brightnessctl --class='backlight' set 5%+",
"on-scroll-up": "brightnessctl --class='backlight' set 5%-", "on-scroll-up": "brightnessctl --class='backlight' set 5%-",
"on-click": "python $HOME/.config/hypr/scripts/swww.py", "on-click": "python $HOME/.config/hypr/scripts/swww.py",

View File

@@ -2,11 +2,9 @@
"tray": { "tray": {
"icon-size": 14, "icon-size": 14,
"spacing": 10, "spacing": 10,
"show-passive-items": true,
"icons": { "icons": {
"Spotify": " ", "Spotify": " ",
"Steam": "",
"Telegram Desktop": "",
"Mattermost Desktop": "",
}, },
}, },
} }

View File

@@ -12,18 +12,18 @@
"empty": "", "empty": "",
}, },
"all-outputs": false, "all-outputs": false,
"on-scroll-up": "hyprctl dispatch focusworkspaceoncurrentmonitor r-1", "on-scroll-up": "workspace-change next",
"on-scroll-down": "hyprctl dispatch focusworkspaceoncurrentmonitor r+1", "on-scroll-down": "workspace-change previous",
"format-icons": { "format-icons": {
"active": "", "active": "󰣠", // 
"default": "", "default": "󰣇", // 
}, },
}, },
"hyprland/windowcount": { "hyprland/windowcount": {
"format": "{}", "format": "{icon}",
"format-empty": "{}", "format-empty": "{}",
"format-windowed": "{}", "format-windowed": "{}",
"separate-outputs": true, "separate-outputs": true,
"on-click": "rofi -show window", "on-click": "rofi -show",
}, },
} }

View File

@@ -1,3 +1,11 @@
/* Colors */
@define-color primary_fg rgba(205, 223, 240, 1);
@define-color primary_bg rgba(44, 44, 44, 0.42);
@define-color primary_bd rgba(205, 223, 240, 0.3);
@define-color tooltip_bg rgba(32, 33, 44, 0.6);
/* General */
* { * {
border: none; border: none;
font-family: "JetBrains Mono Nerd Font"; font-family: "JetBrains Mono Nerd Font";
@@ -5,78 +13,126 @@
font-weight: 700; font-weight: 700;
font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"'; font-feature-settings: '"zero", "ss01", "ss02", "ss03", "ss04", "ss05", "cv31"';
min-height: 20px; min-height: 20px;
color: #c0caf5; color: @primary_fg;
} }
window#waybar { window#waybar {
background: transparent; background: transparent;
} }
/* Common */
tooltip, tooltip,
#clock, #clock,
#tray, #tray,
#language,
#custom-media, #custom-media,
#network-group, #network-group,
#pulseaudio-group, #pulseaudio-group,
#workspaces-group, #workspaces-group,
#power-group { #power-group {
border: 2px solid rgba(192, 202, 245, 0.5); border: 2px solid @primary_bd;
border-radius: 11px; border-radius: 11px;
background-color: rgba(32, 33, 44, 0.42); background-color: @primary_bg;
padding-top: 1px; padding-top: 1px;
margin-bottom: 2px; margin-bottom: 2px;
margin-top: 1px; margin-top: 1px;
} }
/* Tooltip */
tooltip { tooltip {
background: rgba(32, 33, 44, 0.82); background: @tooltip_bg;
} }
tooltip label { tooltip label {
} }
#hyprland-group,
#custom-media { /* Groups */
#hyprland-group {
margin-left: 5px; margin-left: 5px;
} }
#clock, #pulseaudio-group {
#power-group,
#network-group,
#pulseaudio-group,
#tray {
margin-right: 5px; margin-right: 5px;
} }
#pulseaudio, #power-group {
#custom-media, margin-right: 5px;
#network, }
#battery,
#clock, #network-group {
#tray, margin-right: 5px;
#language, }
#backlight,
#bluetooth,
#windowcount { /* Parts */
#tray * {
/* margin-right: 5px; */
padding-left: 4px;
padding-right: 4px;
}
#tray {
margin-right: 5px;
padding-left: 8px;
padding-right: 8px;
}
#custom-media {
margin-left: 5px;
padding-left: 12px; padding-left: 12px;
padding-right: 12px; padding-right: 12px;
} }
#windowcount {
padding-left: 12px;
padding-right: 4px;
}
#workspaces button { #workspaces button {
padding-left: 4px; padding-left: 4px;
padding-left: 4px;
} }
#windowcount { #workspaces {
padding-right: 4px;
}
#network,
#battery {
padding-left: 6px;
}
#workspaces,
#pulseaudio.input,
#backlight,
#bluetooth {
padding-right: 6px; padding-right: 6px;
} }
#pulseaudio {
padding-left: 8px;
padding-right: 6px;
}
#pulseaudio.input {
padding-right: 6px;
}
#backlight {
padding-left: 12px;
padding-right: 6px;
}
#battery {
padding-right: 12px;
padding-left: 6px;
}
#bluetooth {
padding-left: 12px;
padding-right: 6px;
}
#network {
padding-left: 6px;
padding-right: 17px;
}
#clock {
margin-right: 5px;
padding-left: 12px;
padding-right: 12px;
}

View File

@@ -1,29 +1,85 @@
[mgr] [[mgr.prepend_keymap]]
prepend_keymap = [ on = [ ";" ]
{on = [ ";" ], run = 'shell "$SHELL" --block --confirm', desc = "Open shell here"}, run = 'shell "$SHELL" --block --confirm'
desc = "Open shell here"
{on = [ ":","q","a","<Enter>" ], run = 'quit', desc = "Close the current tab"}, [[mgr.prepend_keymap]]
{on = [ ":","q","<Enter>" ], run = 'close', desc = "Close the current tab"}, on = [ ":","q","a","<Enter>" ]
run = 'quit'
desc = "Close the current tab"
[[mgr.prepend_keymap]]
on = [ ":","q","<Enter>" ]
run = 'close'
desc = "Close the current tab"
# Makes "Enter" key necessary to press # Makes "Enter" key necessary to press
{on = [ ":","q","a","<Esc>" ], run = 'echo meow', desc = ""}, [[mgr.prepend_keymap]]
on = [ ":","q","a","<Esc>" ]
run = 'echo meow'
desc = ""
{on = [ "q" ], run = 'noop'}, [[mgr.prepend_keymap]]
on = [ "q" ]
run = 'noop'
{on = [ "g","e" ], run = 'cd /etc', desc = "Go to /etc"},
{on = [ "g","r" ], run = 'cd /', desc = "Go to /"},
{on = [ "g","s" ], run = 'cd /srv', desc = "Go to /srv"},
{on = [ "g","u" ], run = 'cd /usr', desc = "Go to /usr"},
{on = [ "g","v" ], run = 'cd /var', desc = "Go to /var"},
{on = [ "g","c" ], run = 'cd ~/.config', desc = "Go to .config"},
{on = [ "v" ], run = 'select_all --state=true', desc = "Select all files"}, [[mgr.prepend_keymap]]
{on = [ "V" ], run = 'visual_mode', desc = "Enter visual mode"}, on = [ "g","r" ]
run = 'cd /'
desc = "Go to /"
[[mgr.prepend_keymap]]
on = [ "g","u" ]
run = 'cd /usr'
desc = "Go to /usr"
[[mgr.prepend_keymap]]
on = [ "g","e" ]
run = 'cd /etc'
desc = "Go to /etc"
[[mgr.prepend_keymap]]
on = [ "g","v" ]
run = 'cd /var'
desc = "Go to /var"
{on = [ "y" ], run = [ [[mgr.prepend_keymap]]
on = [ "g","a" ]
run = 'cd /run/media/eugenebee'
desc = "Go to attached devices"
[[mgr.prepend_keymap]]
on = [ "g","c" ]
run = 'cd ~/.config'
desc = "Go to .config"
[[mgr.prepend_keymap]]
on = [ "g","d" ]
run = 'cd ~/Downloads'
desc = "Go to Downloads"
[[mgr.prepend_keymap]]
on = [ "g","p" ]
run = 'cd ~/Pictures'
desc = "Go to Pictures"
[[mgr.prepend_keymap]]
on = [ "v" ]
run = 'select_all --state=true'
desc = "Select all files"
[[mgr.prepend_keymap]]
on = [ "V" ]
run = 'visual_mode'
desc = "Enter visual mode"
[[mgr.prepend_keymap]]
on = [ "y" ]
run = [
'shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list', 'shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list',
"yank" "yank"
]},
{on = [ "D", "<Enter>" ], run = 'remove --force --permanently', desc = "Permanently delete"},
] ]
[[mgr.prepend_keymap]]
on = "<C-y>"
run = ["plugin wl-clipboard"]
[[mgr.prepend_keymap]]
on = [ "D", "<Enter>" ]
run = 'remove --force --permanently'
desc = "Permanently delete"

View File

@@ -0,0 +1,29 @@
[mgr]
prepend_keymap = [
{on = [ ";" ], run = 'shell "$SHELL" --block --confirm', desc = "Open shell here"},
{on = [ ":","q","a","<Enter>" ], run = 'quit', desc = "Close the current tab"},
{on = [ ":","q","<Enter>" ], run = 'close', desc = "Close the current tab"},
# Makes "Enter" key necessary to press
{on = [ ":","q","a","<Esc>" ], run = 'echo meow', desc = ""},
{on = [ "q" ], run = 'noop'},
{on = [ "g","e" ], run = 'cd /etc', desc = "Go to /etc"},
{on = [ "g","r" ], run = 'cd /', desc = "Go to /"},
{on = [ "g","s" ], run = 'cd /srv', desc = "Go to /srv"},
{on = [ "g","u" ], run = 'cd /usr', desc = "Go to /usr"},
{on = [ "g","v" ], run = 'cd /var', desc = "Go to /var"},
{on = [ "g","c" ], run = 'cd ~/.config', desc = "Go to .config"},
{on = [ "v" ], run = 'select_all --state=true', desc = "Select all files"},
{on = [ "V" ], run = 'visual_mode', desc = "Enter visual mode"},
{on = [ "y" ], run = [
'shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list',
"yank"
]},
{on = [ "D", "<Enter>" ], run = 'remove --force --permanently', desc = "Permanently delete"},
]

View File

@@ -0,0 +1,7 @@
[[plugin.deps]]
use = "grappas/wl-clipboard"
rev = "e9a38e4"
hash = "6b8e5d6b09626facec713923d3ddb54b"
[flavor]
deps = []

View File

@@ -0,0 +1,7 @@
Copyright 2024 grappas
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,34 @@
# wl-clipboard.yazi
Forked from: [orhnk/system-clipboard.yazi](https://github.com/orhnk/system-clipboard.yazi) to work with wayland compositors.
## Demo
<https://github.com/user-attachments/assets/74d59f49-266a-497e-b67e-d77e64209026>
## Config
> [!NOTE]
> You need yazi 3.x for this plugin to work.
> [!Important]
> This plugin utilizes ["wl-clipboard" project](https://github.com/bugaevc/wl-clipboard).
> You need to have it installed on your system. (Make sure that It's on your $PATH)
## Installation
```bash
ya pkg add grappas/wl-clipboard
```
## Configuration
Copy or install this plugin and add the following keymap to your `manager.prepend_keymap`:
```toml
on = "<C-y>"
run = ["plugin wl-clipboard"]
```
> [!Tip]
> If you want to use this plugin with yazi's default yanking behaviour you should use `cx.yanked` instead of `tab.selected` in `init.lua` (See [#1487](https://github.com/sxyazi/yazi/issues/1487))

View File

@@ -0,0 +1,60 @@
-- Meant to run at async context. (yazi system-clipboard)
local selected_or_hovered = ya.sync(function()
local tab, paths = cx.active, {}
for _, u in pairs(tab.selected) do
paths[#paths + 1] = tostring(u)
end
if #paths == 0 and tab.current.hovered then
paths[1] = tostring(tab.current.hovered.url)
end
return paths
end)
return {
entry = function()
ya.manager_emit("escape", { visual = true })
local urls = selected_or_hovered()
if #urls == 0 then
return ya.notify({ title = "System Clipboard", content = "No file selected", level = "warn", timeout = 5 })
end
-- ya.notify({ title = #urls, content = table.concat(urls, " "), level = "info", timeout = 5 })
-- Format the URLs for `text/uri-list` specification
local function encode_uri(uri)
return uri:gsub("([^%w%-%._~:/])", function(c)
return string.format("%%%02X", string.byte(c))
end)
end
local file_list_formatted = ""
for _, path in ipairs(urls) do
-- Each file path must be URI-encoded and prefixed with "file://"
file_list_formatted = file_list_formatted .. "file://" .. encode_uri(path) .. "\r\n"
end
local status, err =
Command("wl-copy"):arg("--type"):arg("text/uri-list"):arg(file_list_formatted):spawn():wait()
if status or status.succes then
ya.notify({
title = "System Clipboard",
content = "Succesfully copied the file(s) to system clipboard",
level = "info",
timeout = 5,
})
end
if not status or not status.success then
ya.notify({
title = "System Clipboard",
content = string.format("Could not copy selected file(s) %s", status and status.code or err),
level = "error",
timeout = 5,
})
end
end,
}