Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f7b46516b5 |
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
@@ -4,4 +4,3 @@
|
|||||||
--ignore-gpu-blocklist
|
--ignore-gpu-blocklist
|
||||||
--enable-features=TouchpadOverscrollHistoryNavigation
|
--enable-features=TouchpadOverscrollHistoryNavigation
|
||||||
--enable-wayland-ime
|
--enable-wayland-ime
|
||||||
--disable-features=ExtensionManifestV2Unsupported
|
|
||||||
@@ -3,11 +3,11 @@ Vertical Candidate List=False
|
|||||||
# Use mouse wheel to go to prev or next page
|
# Use mouse wheel to go to prev or next page
|
||||||
WheelForPaging=True
|
WheelForPaging=True
|
||||||
# Font
|
# Font
|
||||||
Font="Google Sans Flex 11"
|
Font="Rubik 11"
|
||||||
# Menu Font
|
# Menu Font
|
||||||
MenuFont="Google Sans Flex 11"
|
MenuFont="Rubik 11"
|
||||||
# Tray Font
|
# Tray Font
|
||||||
TrayFont="Google Sans Flex 11"
|
TrayFont="Rubik 11"
|
||||||
# Prefer Text Icon
|
# Prefer Text Icon
|
||||||
PreferTextIcon=False
|
PreferTextIcon=False
|
||||||
# Show Layout Name In Icon
|
# Show Layout Name In Icon
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Auto start Hyprland on tty1
|
# Auto start Hyprland on tty1
|
||||||
if test -z "$DISPLAY" ;and test "$XDG_VTNR" -eq 1
|
if test -z "$DISPLAY" ;and test "$XDG_VTNR" -eq 1
|
||||||
mkdir -p ~/.cache
|
mkdir -p ~/.cache
|
||||||
exec start-hyprland > ~/.cache/hyprland.log 2>&1
|
exec Hyprland > ~/.cache/hyprland.log ^&1
|
||||||
end
|
end
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
function fish_prompt -d "Write out the prompt"
|
||||||
|
# This shows up as USER@HOST /home/user/ >, with the directory colored
|
||||||
|
# $USER and $hostname are set by fish, so you can just use them
|
||||||
|
# instead of using `whoami` and `hostname`
|
||||||
|
printf '%s@%s %s%s%s > ' $USER $hostname \
|
||||||
|
(set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
|
||||||
|
end
|
||||||
|
|
||||||
|
if status is-interactive
|
||||||
|
# Commands to run in interactive sessions can go here
|
||||||
|
set fish_greeting
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
starship init fish | source
|
||||||
|
if test -f ~/.local/state/quickshell/user/generated/terminal/sequences.txt
|
||||||
|
cat ~/.local/state/quickshell/user/generated/terminal/sequences.txt
|
||||||
|
end
|
||||||
|
|
||||||
|
alias pamcan pacman
|
||||||
|
alias ls 'eza --icons'
|
||||||
|
alias clear "printf '\033[2J\033[3J\033[1;1H'"
|
||||||
|
alias q 'qs -c ii'
|
||||||
|
|
||||||
|
|
||||||
|
# function fish_prompt
|
||||||
|
# set_color cyan; echo (pwd)
|
||||||
|
# set_color green; echo '> '
|
||||||
|
# end
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
include="~/.config/fuzzel/fuzzel_theme.ini"
|
include="~/.config/fuzzel/fuzzel_theme.ini"
|
||||||
font=Google Sans Flex:weight=medium
|
font=Gabarito
|
||||||
terminal=kitty -1
|
terminal=kitty -1
|
||||||
prompt=">> "
|
prompt=">> "
|
||||||
layer=overlay
|
layer=overlay
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# You can put extra environment variables here
|
||||||
|
# https://wiki.hyprland.org/Configuring/Environment-variables/
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# You can make apps auto-start here
|
||||||
|
# Relevant Hyprland wiki section: https://wiki.hyprland.org/Configuring/Keywords/#executing
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Put general config stuff here
|
||||||
|
# Here's a list of every variable: https://wiki.hyprland.org/Configuring/Variables/
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
# See https://wiki.hyprland.org/Configuring/Binds/
|
||||||
|
#!
|
||||||
|
##! User
|
||||||
|
bind = Ctrl+Super, Slash, exec, xdg-open ~/.config/illogical-impulse/config.json # Edit shell config
|
||||||
|
bind = Ctrl+Super+Alt, Slash, exec, xdg-open ~/.config/hypr/custom/keybinds.conf # Edit extra keybinds
|
||||||
|
|
||||||
|
# Add stuff here
|
||||||
|
# Use #! to add an extra column on the cheatsheet
|
||||||
|
# Use ##! to add a section in that column
|
||||||
|
# Add a comment after a bind to add a description, like above
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# You can put custom rules here
|
||||||
|
# Window/layer rules: https://wiki.hyprland.org/Configuring/Window-Rules/
|
||||||
|
# Workspace rules: https://wiki.hyprland.org/Configuring/Workspace-Rules/
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
$lock_cmd = swaylock -c 000000
|
# $lock_cmd = hyprctl dispatch global quickshell:lock & pidof qs quickshell hyprlock || hyprlock
|
||||||
# $lock_cmd = pidof hyprlock || hyprlock
|
$lock_cmd = pidof hyprlock || hyprlock
|
||||||
$suspend_cmd = systemctl suspend || loginctl suspend
|
$suspend_cmd = systemctl suspend || loginctl suspend
|
||||||
|
|
||||||
general {
|
general {
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
# This file sources other files in `hyprland` and `custom` folders
|
||||||
|
# You wanna add your stuff in files in `custom`
|
||||||
|
|
||||||
|
$qsConfig = ii
|
||||||
|
exec = hyprctl dispatch submap global # DO NOT REMOVE THIS OR YOU WON'T BE ABLE TO USE ANY KEYBIND
|
||||||
|
submap = global # This is required for catchall to work
|
||||||
|
|
||||||
|
# Defaults
|
||||||
|
source=~/.config/hypr/hyprland/env.conf
|
||||||
|
source=~/.config/hypr/hyprland/execs.conf
|
||||||
|
source=~/.config/hypr/hyprland/general.conf
|
||||||
|
source=~/.config/hypr/hyprland/rules.conf
|
||||||
|
source=~/.config/hypr/hyprland/colors.conf
|
||||||
|
source=~/.config/hypr/hyprland/keybinds.conf
|
||||||
|
|
||||||
|
# Custom
|
||||||
|
source=~/.config/hypr/custom/env.conf
|
||||||
|
source=~/.config/hypr/custom/execs.conf
|
||||||
|
source=~/.config/hypr/custom/general.conf
|
||||||
|
source=~/.config/hypr/custom/rules.conf
|
||||||
|
source=~/.config/hypr/custom/keybinds.conf
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# exec = export SLURP_ARGS='-d -c FFDAD4BB -b 673B3444 -s 00000000'
|
||||||
|
|
||||||
|
general {
|
||||||
|
col.active_border = rgba(F7DCDE39)
|
||||||
|
col.inactive_border = rgba(A58A8D30)
|
||||||
|
}
|
||||||
|
|
||||||
|
misc {
|
||||||
|
background_color = rgba(1D1011FF)
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin {
|
||||||
|
hyprbars {
|
||||||
|
# Honestly idk if it works like css, but well, why not
|
||||||
|
bar_text_font = Rubik, Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif
|
||||||
|
bar_height = 30
|
||||||
|
bar_padding = 10
|
||||||
|
bar_button_padding = 5
|
||||||
|
bar_precedence_over_border = true
|
||||||
|
bar_part_of_window = true
|
||||||
|
|
||||||
|
bar_color = rgba(1D1011FF)
|
||||||
|
col.text = rgba(F7DCDEFF)
|
||||||
|
|
||||||
|
|
||||||
|
# example buttons (R -> L)
|
||||||
|
# hyprbars-button = color, size, on-click
|
||||||
|
hyprbars-button = rgb(F7DCDE), 13, , hyprctl dispatch killactive
|
||||||
|
hyprbars-button = rgb(F7DCDE), 13, , hyprctl dispatch fullscreen 1
|
||||||
|
hyprbars-button = rgb(F7DCDE), 13, , hyprctl dispatch movetoworkspacesilent special
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrulev2 = bordercolor rgba(FFB2BCAA) rgba(FFB2BC77),pinned:1
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# ######### Input method ##########
|
||||||
|
# See https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland
|
||||||
|
env = QT_IM_MODULE, fcitx
|
||||||
|
env = XMODIFIERS, @im=fcitx
|
||||||
|
env = SDL_IM_MODULE, fcitx
|
||||||
|
env = GLFW_IM_MODULE, ibus
|
||||||
|
env = INPUT_METHOD, fcitx
|
||||||
|
|
||||||
|
# ############ Wayland #############
|
||||||
|
env = ELECTRON_OZONE_PLATFORM_HINT,auto
|
||||||
|
|
||||||
|
# ############ Themes #############
|
||||||
|
env = QT_QPA_PLATFORM, wayland
|
||||||
|
env = QT_QPA_PLATFORMTHEME, kde
|
||||||
|
env = XDG_MENU_PREFIX, plasma-
|
||||||
|
|
||||||
|
# ######## Wayland #########
|
||||||
|
# Tearing
|
||||||
|
# env = WLR_DRM_NO_ATOMIC, 1
|
||||||
|
# ?
|
||||||
|
# env = WLR_NO_HARDWARE_CURSORS, 1
|
||||||
|
|
||||||
|
# ######## Virtual envrionment #########
|
||||||
|
env = ILLOGICAL_IMPULSE_VIRTUAL_ENV, ~/.local/state/quickshell/.venv
|
||||||
@@ -1,29 +1,26 @@
|
|||||||
# Bar, wallpaper
|
# Bar, wallpaper
|
||||||
exec-once = ~/.config/hypr/hyprland/scripts/start_geoclue_agent.sh
|
exec-once = ~/.config/hypr/hyprland/scripts/start_geoclue_agent.sh & gammastep
|
||||||
exec-once = qs -c $qsConfig &
|
exec-once = qs -c $qsConfig &
|
||||||
|
|
||||||
# Input method
|
# Input method
|
||||||
# exec-once = fcitx5
|
exec-once = fcitx5
|
||||||
|
|
||||||
# Core components (authentication, lock screen, notification daemon)
|
# Core components (authentication, lock screen, notification daemon)
|
||||||
exec-once = gnome-keyring-daemon --start --components=secrets
|
exec-once = gnome-keyring-daemon --start --components=secrets
|
||||||
|
exec-once = /usr/lib/polkit-kde-authentication-agent-1 || /usr/libexec/polkit-kde-authentication-agent-1 || /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 || /usr/libexec/polkit-gnome-authentication-agent-1
|
||||||
exec-once = hypridle
|
exec-once = hypridle
|
||||||
exec-once = dbus-update-activation-environment --all
|
exec-once = dbus-update-activation-environment --all
|
||||||
exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # Some fix idk
|
exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # Some fix idk
|
||||||
|
exec-once = hyprpm reload
|
||||||
|
|
||||||
# Audio
|
# Audio
|
||||||
exec-once = easyeffects --gapplication-service
|
exec-once = easyeffects --gapplication-service
|
||||||
|
|
||||||
# Clipboard: history
|
# Clipboard: history
|
||||||
# exec-once = wl-paste --watch cliphist store &
|
# exec-once = wl-paste --watch cliphist store &
|
||||||
exec-once = wl-paste --type text --watch bash -c 'cliphist store && qs -c $qsConfig ipc call cliphistService update'
|
exec-once = wl-paste --type text --watch cliphist store
|
||||||
exec-once = wl-paste --type image --watch bash -c 'cliphist store && qs -c $qsConfig ipc call cliphistService update'
|
exec-once = wl-paste --type image --watch cliphist store
|
||||||
|
|
||||||
# Cursor
|
# Cursor
|
||||||
exec-once = hyprctl setcursor Bibata-Modern-Classic 24
|
exec-once = hyprctl setcursor Bibata-Modern-Classic 24
|
||||||
|
|
||||||
# Fix dock pinned apps not launching properly (https://github.com/end-4/dots-hyprland/issues/2200)
|
|
||||||
# exec-once = sleep 3.5 && hyprctl reload && sleep 0.5 && touch ~/.config/quickshell/ii/shell.qml
|
|
||||||
|
|
||||||
# For fedora to setup polkit
|
|
||||||
exec-once = /usr/libexec/kf6/polkit-kde-authentication-agent-1
|
|
||||||
@@ -0,0 +1,168 @@
|
|||||||
|
# MONITOR CONFIG
|
||||||
|
monitor=,preferred,auto,1,transform, 0
|
||||||
|
# monitor=,addreserved, 0, 0, 0, 0 # Custom reserved area
|
||||||
|
|
||||||
|
# HDMI port: mirror display. To see device name, use `hyprctl monitors`
|
||||||
|
# monitor=HDMI-A-1,1920x1080@60,1920x0,1,mirror,eDP-1
|
||||||
|
|
||||||
|
gestures {
|
||||||
|
workspace_swipe = true
|
||||||
|
workspace_swipe_distance = 700
|
||||||
|
workspace_swipe_fingers = 3
|
||||||
|
workspace_swipe_min_fingers = true
|
||||||
|
workspace_swipe_cancel_ratio = 0.2
|
||||||
|
workspace_swipe_min_speed_to_force = 5
|
||||||
|
workspace_swipe_direction_lock = true
|
||||||
|
workspace_swipe_direction_lock_threshold = 10
|
||||||
|
workspace_swipe_create_new = true
|
||||||
|
}
|
||||||
|
|
||||||
|
general {
|
||||||
|
# Gaps and border
|
||||||
|
gaps_in = 4
|
||||||
|
gaps_out = 5
|
||||||
|
gaps_workspaces = 50
|
||||||
|
|
||||||
|
border_size = 1
|
||||||
|
col.active_border = rgba(0DB7D4FF)
|
||||||
|
col.inactive_border = rgba(31313600)
|
||||||
|
resize_on_border = true
|
||||||
|
|
||||||
|
no_focus_fallback = true
|
||||||
|
|
||||||
|
allow_tearing = true # This just allows the `immediate` window rule to work
|
||||||
|
|
||||||
|
snap {
|
||||||
|
enabled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dwindle {
|
||||||
|
preserve_split = true
|
||||||
|
smart_split = false
|
||||||
|
smart_resizing = false
|
||||||
|
# precise_mouse_move = true
|
||||||
|
}
|
||||||
|
|
||||||
|
decoration {
|
||||||
|
rounding = 18
|
||||||
|
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
xray = true
|
||||||
|
special = false
|
||||||
|
new_optimizations = true
|
||||||
|
size = 14
|
||||||
|
passes = 3
|
||||||
|
brightness = 1
|
||||||
|
noise = 0.01
|
||||||
|
contrast = 1
|
||||||
|
popups = true
|
||||||
|
popups_ignorealpha = 0.6
|
||||||
|
input_methods = true
|
||||||
|
input_methods_ignorealpha = 0.8
|
||||||
|
}
|
||||||
|
|
||||||
|
shadow {
|
||||||
|
enabled = true
|
||||||
|
ignore_window = true
|
||||||
|
range = 30
|
||||||
|
offset = 0 2
|
||||||
|
render_power = 4
|
||||||
|
color = rgba(00000010)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Dim
|
||||||
|
dim_inactive = true
|
||||||
|
dim_strength = 0.025
|
||||||
|
dim_special = 0.07
|
||||||
|
}
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = true
|
||||||
|
# Curves
|
||||||
|
bezier = expressiveFastSpatial, 0.42, 1.67, 0.21, 0.90
|
||||||
|
bezier = expressiveSlowSpatial, 0.39, 1.29, 0.35, 0.98
|
||||||
|
bezier = expressiveDefaultSpatial, 0.38, 1.21, 0.22, 1.00
|
||||||
|
bezier = emphasizedDecel, 0.05, 0.7, 0.1, 1
|
||||||
|
bezier = emphasizedAccel, 0.3, 0, 0.8, 0.15
|
||||||
|
bezier = standardDecel, 0, 0, 0, 1
|
||||||
|
bezier = menu_decel, 0.1, 1, 0, 1
|
||||||
|
bezier = menu_accel, 0.52, 0.03, 0.72, 0.08
|
||||||
|
# Configs
|
||||||
|
# windows
|
||||||
|
animation = windowsIn, 1, 3, emphasizedDecel, popin 80%
|
||||||
|
animation = windowsOut, 1, 2, emphasizedDecel, popin 90%
|
||||||
|
animation = windowsMove, 1, 3, emphasizedDecel, slide
|
||||||
|
animation = border, 1, 10, emphasizedDecel
|
||||||
|
# layers
|
||||||
|
animation = layersIn, 1, 2.7, emphasizedDecel, popin 93%
|
||||||
|
animation = layersOut, 1, 2.4, menu_accel, popin 94%
|
||||||
|
# fade
|
||||||
|
animation = fadeLayersIn, 1, 0.5, menu_decel
|
||||||
|
animation = fadeLayersOut, 1, 2.7, menu_accel
|
||||||
|
# workspaces
|
||||||
|
animation = workspaces, 1, 7, menu_decel, slide
|
||||||
|
## specialWorkspace
|
||||||
|
animation = specialWorkspaceIn, 1, 2.8, emphasizedDecel, slidevert
|
||||||
|
animation = specialWorkspaceOut, 1, 1.2, emphasizedAccel, slidevert
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
kb_layout = us
|
||||||
|
numlock_by_default = true
|
||||||
|
repeat_delay = 250
|
||||||
|
repeat_rate = 35
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
off_window_axis_events = 2
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = yes
|
||||||
|
disable_while_typing = true
|
||||||
|
clickfinger_behavior = true
|
||||||
|
scroll_factor = 0.5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
misc {
|
||||||
|
disable_hyprland_logo = true
|
||||||
|
disable_splash_rendering = true
|
||||||
|
vfr = 1
|
||||||
|
vrr = 1
|
||||||
|
mouse_move_enables_dpms = true
|
||||||
|
key_press_enables_dpms = true
|
||||||
|
animate_manual_resizes = false
|
||||||
|
animate_mouse_windowdragging = false
|
||||||
|
enable_swallow = false
|
||||||
|
swallow_regex = (foot|kitty|allacritty|Alacritty)
|
||||||
|
new_window_takes_over_fullscreen = 2
|
||||||
|
allow_session_lock_restore = true
|
||||||
|
session_lock_xray = true
|
||||||
|
initial_workspace_tracking = false
|
||||||
|
focus_on_activate = true
|
||||||
|
}
|
||||||
|
|
||||||
|
binds {
|
||||||
|
scroll_event_delay = 0
|
||||||
|
hide_special_on_workspace_change = true
|
||||||
|
}
|
||||||
|
|
||||||
|
cursor {
|
||||||
|
zoom_factor = 1
|
||||||
|
zoom_rigid = false
|
||||||
|
}
|
||||||
|
|
||||||
|
# Overview
|
||||||
|
plugin {
|
||||||
|
hyprexpo {
|
||||||
|
columns = 3
|
||||||
|
gap_size = 5
|
||||||
|
bg_col = rgb(000000)
|
||||||
|
workspace_method = first 1 # [center/first] [workspace] e.g. first 1 or center m+1
|
||||||
|
|
||||||
|
enable_gesture = false # laptop touchpad, 4 fingers
|
||||||
|
gesture_distance = 300 # how far is the "max"
|
||||||
|
gesture_positive = false
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,218 @@
|
|||||||
|
# Lines ending with `# [hidden]` won't be shown on cheatsheet
|
||||||
|
# Lines starting with #! are section headings
|
||||||
|
|
||||||
|
#!
|
||||||
|
##! Shell
|
||||||
|
# These absolutely need to be on top, or they won't work consistently
|
||||||
|
bindid = Super, Super_L, Toggle overview, global, quickshell:overviewToggleRelease # Toggle overview/launcher
|
||||||
|
bind = Super, Super_L, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill fuzzel || fuzzel # [hidden] Launcher (fallback)
|
||||||
|
binditn = Super, catchall, global, quickshell:overviewToggleReleaseInterrupt # [hidden]
|
||||||
|
bind = Ctrl, Super_L, global, quickshell:overviewToggleReleaseInterrupt # [hidden]
|
||||||
|
bind = Super, mouse:272, global, quickshell:overviewToggleReleaseInterrupt # [hidden]
|
||||||
|
bind = Super, mouse:273, global, quickshell:overviewToggleReleaseInterrupt # [hidden]
|
||||||
|
bind = Super, mouse:274, global, quickshell:overviewToggleReleaseInterrupt # [hidden]
|
||||||
|
bind = Super, mouse:275, global, quickshell:overviewToggleReleaseInterrupt # [hidden]
|
||||||
|
bind = Super, mouse:276, global, quickshell:overviewToggleReleaseInterrupt # [hidden]
|
||||||
|
bind = Super, mouse:277, global, quickshell:overviewToggleReleaseInterrupt # [hidden]
|
||||||
|
bind = Super, mouse_up, global, quickshell:overviewToggleReleaseInterrupt # [hidden]
|
||||||
|
bind = Super, mouse_down,global, quickshell:overviewToggleReleaseInterrupt # [hidden]
|
||||||
|
|
||||||
|
bindit = ,Super_L, global, quickshell:workspaceNumber # [hidden]
|
||||||
|
bindd = Super, V, Clipboard history >> clipboard, global, quickshell:overviewClipboardToggle # Clipboard history >> clipboard
|
||||||
|
bindd = Super, Period, Emoji >> clipboard, global, quickshell:overviewEmojiToggle # Emoji >> clipboard
|
||||||
|
bindd = Super, Tab, Toggle overview, global, quickshell:overviewToggle # [hidden] Toggle overview/launcher (alt)
|
||||||
|
bindd = Super, A, Toggle left sidebar, global, quickshell:sidebarLeftToggle # Toggle left sidebar
|
||||||
|
bind = Super+Alt, A, global, quickshell:sidebarLeftToggleDetach # [hidden]
|
||||||
|
bind = Super, B, global, quickshell:sidebarLeftToggle # [hidden]
|
||||||
|
bind = Super, O, global, quickshell:sidebarLeftToggle # [hidden]
|
||||||
|
bindd = Super, N, Toggle right sidebar, global, quickshell:sidebarRightToggle # Toggle right sidebar
|
||||||
|
bindd = Super, Slash, Toggle cheatsheet, global, quickshell:cheatsheetToggle # Toggle cheatsheet
|
||||||
|
bindd = Super, K, Toggle on-screen keyboard, global, quickshell:oskToggle # Toggle on-screen keyboard
|
||||||
|
bindd = Super, M, Toggle media controls, global, quickshell:mediaControlsToggle # Toggle media controls
|
||||||
|
bindd = Ctrl+Alt, Delete, Toggle session menu, global, quickshell:sessionToggle # Toggle session menu
|
||||||
|
bindd = Super, J, Toggle bar, global, quickshell:barToggle # Toggle bar
|
||||||
|
bind = Ctrl+Alt, Delete, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill wlogout || wlogout -p layer-shell # [hidden] Session menu (fallback)
|
||||||
|
bind = Shift+Super+Alt, Slash, exec, qs -p ~/.config/quickshell/$qsConfig/welcome.qml # [hidden] Launch welcome app
|
||||||
|
|
||||||
|
bindle=, XF86MonBrightnessUp, exec, qs -c $qsConfig ipc call brightness increment || brightnessctl s 5%+ # [hidden]
|
||||||
|
bindle=, XF86MonBrightnessDown, exec, qs -c $qsConfig ipc call brightness decrement || brightnessctl s 5%- # [hidden]
|
||||||
|
bindle=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 2%+ # [hidden]
|
||||||
|
bindle=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%- # [hidden]
|
||||||
|
|
||||||
|
bindl = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle # [hidden]
|
||||||
|
bindld = Super+Shift,M, Toggle mute, exec, wpctl set-mute @DEFAULT_SINK@ toggle # [hidden]
|
||||||
|
bindl = Alt ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle # [hidden]
|
||||||
|
bindl = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle # [hidden]
|
||||||
|
bindld = Super+Alt,M, Toggle mic, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle # [hidden]
|
||||||
|
bindd = Ctrl+Super, T, Change wallpaper, exec, ~/.config/quickshell/$qsConfig/scripts/colors/switchwall.sh # Change wallpaper
|
||||||
|
bind = Ctrl+Super, R, exec, killall ags agsv1 gjs ydotool qs quickshell; qs -c $qsConfig & # Restart widgets
|
||||||
|
|
||||||
|
##! Utilities
|
||||||
|
# Screenshot, Record, OCR, Color picker, Clipboard history
|
||||||
|
bindd = Super, V, Copy clipboard history entry, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill fuzzel || cliphist list | fuzzel --match-mode fzf --dmenu | cliphist decode | wl-copy # [hidden] Clipboard history >> clipboard (fallback)
|
||||||
|
bindd = Super, Period, Copy an emoji, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill fuzzel || ~/.config/hypr/hyprland/scripts/fuzzel-emoji.sh copy # [hidden] Emoji >> clipboard (fallback)
|
||||||
|
bindd = Super+Shift, S, Screen snip, exec, qs -p ~/.config/quickshell/$qsConfig/screenshot.qml || pidof slurp || hyprshot --freeze --clipboard-only --mode region --silent # Screen snip
|
||||||
|
# OCR
|
||||||
|
bindd = Super+Shift, T, Character recognition,exec,grim -g "$(slurp $SLURP_ARGS)" "tmp.png" && tesseract "tmp.png" - | wl-copy && rm "tmp.png" # [hidden]
|
||||||
|
# Color picker
|
||||||
|
bindd = Super+Shift, C, Color picker, exec, hyprpicker -a # Pick color (Hex) >> clipboard
|
||||||
|
# Fullscreen screenshot
|
||||||
|
bindld = ,Print, Screenshot >> clipboard ,exec,grim - | wl-copy # Screenshot >> clipboard
|
||||||
|
bindld = Ctrl,Print, Screenshot >> clipboard & save, exec, mkdir -p $(xdg-user-dir PICTURES)/Screenshots && grim $(xdg-user-dir PICTURES)/Screenshots/Screenshot_"$(date '+%Y-%m-%d_%H.%M.%S')".png # Screenshot >> clipboard & file
|
||||||
|
# Recording stuff
|
||||||
|
bindd = Super+Alt, R, Record region (no sound), exec, ~/.config/hypr/hyprland/scripts/record.sh # Record region (no sound)
|
||||||
|
bindd = Ctrl+Alt, R, Record screen (no sound), exec, ~/.config/hypr/hyprland/scripts/record.sh --fullscreen # [hidden] Record screen (no sound)
|
||||||
|
bindd = Super+Shift+Alt, R, Record screen (with sound), exec, ~/.config/hypr/hyprland/scripts/record.sh --fullscreen-sound # Record screen (with sound)
|
||||||
|
# AI
|
||||||
|
bindd = Super+Shift+Alt, mouse:273, Generate AI summary for selected text, exec, ~/.config/hypr/hyprland/scripts/ai/primary-buffer-query.sh # AI summary for selected text
|
||||||
|
|
||||||
|
#!
|
||||||
|
##! Window
|
||||||
|
# Focusing
|
||||||
|
bindm = Super, mouse:272, movewindow # Move
|
||||||
|
bindm = Super, mouse:274, movewindow # [hidden]
|
||||||
|
bindm = Super, mouse:273, resizewindow # Resize
|
||||||
|
#/# bind = Super, ←/↑/→/↓,, # Focus in direction
|
||||||
|
bind = Super, Left, movefocus, l # [hidden]
|
||||||
|
bind = Super, Right, movefocus, r # [hidden]
|
||||||
|
bind = Super, Up, movefocus, u # [hidden]
|
||||||
|
bind = Super, Down, movefocus, d # [hidden]
|
||||||
|
bind = Super, BracketLeft, movefocus, l # [hidden]
|
||||||
|
bind = Super, BracketRight, movefocus, r # [hidden]
|
||||||
|
#/# bind = Super+Shift, ←/↑/→/↓,, # Move in direction
|
||||||
|
bind = Super+Shift, Left, movewindow, l # [hidden]
|
||||||
|
bind = Super+Shift, Right, movewindow, r # [hidden]
|
||||||
|
bind = Super+Shift, Up, movewindow, u # [hidden]
|
||||||
|
bind = Super+Shift, Down, movewindow, d # [hidden]
|
||||||
|
bind = Alt, F4, killactive, # [hidden] Close (Windows)
|
||||||
|
bind = Super, Q, killactive, # Close
|
||||||
|
bind = Super+Shift+Alt, Q, exec, hyprctl kill # Forcefully zap a window
|
||||||
|
|
||||||
|
|
||||||
|
# Window split ratio
|
||||||
|
#/# binde = Super, ;/',, # Adjust split ratio
|
||||||
|
binde = Super, Semicolon, splitratio, -0.1 # [hidden]
|
||||||
|
binde = Super, Apostrophe, splitratio, +0.1 # [hidden]
|
||||||
|
# Positioning mode
|
||||||
|
bind = Super+Alt, Space, togglefloating, # Float/Tile
|
||||||
|
bind = Super, D, fullscreen, 1 # Maximize
|
||||||
|
bind = Super, F, fullscreen, 0 # Fullscreen
|
||||||
|
bind = Super+Alt, F, fullscreenstate, 0 3 # Fullscreen spoof
|
||||||
|
bind = Super, P, pin # Pin
|
||||||
|
|
||||||
|
#/# bind = Super+Alt, Hash,, # Send to workspace # (1, 2, 3,...)
|
||||||
|
bind = Super+Alt, 1, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 1 # [hidden]
|
||||||
|
bind = Super+Alt, 2, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 2 # [hidden]
|
||||||
|
bind = Super+Alt, 3, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 3 # [hidden]
|
||||||
|
bind = Super+Alt, 4, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 4 # [hidden]
|
||||||
|
bind = Super+Alt, 5, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 5 # [hidden]
|
||||||
|
bind = Super+Alt, 6, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 6 # [hidden]
|
||||||
|
bind = Super+Alt, 7, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 7 # [hidden]
|
||||||
|
bind = Super+Alt, 8, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 8 # [hidden]
|
||||||
|
bind = Super+Alt, 9, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 9 # [hidden]
|
||||||
|
bind = Super+Alt, 0, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 10 # [hidden]
|
||||||
|
|
||||||
|
# #/# bind = Super+Shift, Scroll ↑/↓,, # Send to workspace left/right
|
||||||
|
bind = Super+Shift, mouse_down, movetoworkspace, r-1 # [hidden]
|
||||||
|
bind = Super+Shift, mouse_up, movetoworkspace, r+1 # [hidden]
|
||||||
|
bind = Super+Alt, mouse_down, movetoworkspace, -1 # [hidden]
|
||||||
|
bind = Super+Alt, mouse_up, movetoworkspace, +1 # [hidden]
|
||||||
|
|
||||||
|
#/# bind = Super+Shift, Page_↑/↓,, # Send to workspace left/right
|
||||||
|
bind = Super+Alt, Page_Down, movetoworkspace, +1 # [hidden]
|
||||||
|
bind = Super+Alt, Page_Up, movetoworkspace, -1 # [hidden]
|
||||||
|
bind = Super+Shift, Page_Down, movetoworkspace, r+1 # [hidden]
|
||||||
|
bind = Super+Shift, Page_Up, movetoworkspace, r-1 # [hidden]
|
||||||
|
bind = Ctrl+Super+Shift, Right, movetoworkspace, r+1 # [hidden]
|
||||||
|
bind = Ctrl+Super+Shift, Left, movetoworkspace, r-1 # [hidden]
|
||||||
|
|
||||||
|
bind = Super+Alt, S, movetoworkspacesilent, special # Send to scratchpad
|
||||||
|
|
||||||
|
bind = Ctrl+Super, S, togglespecialworkspace, # [hidden]
|
||||||
|
bind = Alt, Tab, cyclenext # [hidden] sus keybind
|
||||||
|
bind = Alt, Tab, bringactivetotop, # [hidden] bring it to the top
|
||||||
|
|
||||||
|
##! Workspace
|
||||||
|
# Switching
|
||||||
|
#/# bind = Super, Hash,, # Focus workspace # (1, 2, 3,...)
|
||||||
|
bind = Super, 1, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 1 # [hidden]
|
||||||
|
bind = Super, 2, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 2 # [hidden]
|
||||||
|
bind = Super, 3, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 3 # [hidden]
|
||||||
|
bind = Super, 4, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 4 # [hidden]
|
||||||
|
bind = Super, 5, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 5 # [hidden]
|
||||||
|
bind = Super, 6, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 6 # [hidden]
|
||||||
|
bind = Super, 7, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 7 # [hidden]
|
||||||
|
bind = Super, 8, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 8 # [hidden]
|
||||||
|
bind = Super, 9, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 9 # [hidden]
|
||||||
|
bind = Super, 0, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 10 # [hidden]
|
||||||
|
|
||||||
|
#/# bind = Ctrl+Super, ←/→,, # Focus left/right
|
||||||
|
bind = Ctrl+Super, Right, workspace, r+1 # [hidden]
|
||||||
|
bind = Ctrl+Super, Left, workspace, r-1 # [hidden]
|
||||||
|
#/# bind = Ctrl+Super+Alt, ←/→,, # [hidden] Focus busy left/right
|
||||||
|
bind = Ctrl+Super+Alt, Right, workspace, m+1 # [hidden]
|
||||||
|
bind = Ctrl+Super+Alt, Left, workspace, m-1 # [hidden]
|
||||||
|
#/# bind = Super, Page_↑/↓,, # Focus left/right
|
||||||
|
bind = Super, Page_Down, workspace, +1 # [hidden]
|
||||||
|
bind = Super, Page_Up, workspace, -1 # [hidden]
|
||||||
|
bind = Ctrl+Super, Page_Down, workspace, r+1 # [hidden]
|
||||||
|
bind = Ctrl+Super, Page_Up, workspace, r-1 # [hidden]
|
||||||
|
#/# bind = Super, Scroll ↑/↓,, # Focus left/right
|
||||||
|
bind = Super, mouse_up, workspace, +1 # [hidden]
|
||||||
|
bind = Super, mouse_down, workspace, -1 # [hidden]
|
||||||
|
bind = Ctrl+Super, mouse_up, workspace, r+1 # [hidden]
|
||||||
|
bind = Ctrl+Super, mouse_down, workspace, r-1 # [hidden]
|
||||||
|
## Special
|
||||||
|
bind = Super, S, togglespecialworkspace, # Toggle scratchpad
|
||||||
|
bind = Super, mouse:275, togglespecialworkspace, # [hidden]
|
||||||
|
bind = Ctrl+Super, BracketLeft, workspace, -1 # [hidden]
|
||||||
|
bind = Ctrl+Super, BracketRight, workspace, +1 # [hidden]
|
||||||
|
bind = Ctrl+Super, Up, workspace, r-5 # [hidden]
|
||||||
|
bind = Ctrl+Super, Down, workspace, r+5 # [hidden]
|
||||||
|
|
||||||
|
#!
|
||||||
|
# Testing
|
||||||
|
bind = Super+Alt, f11, exec, bash -c 'RANDOM_IMAGE=$(find ~/Pictures -type f | grep -v -i "nipple" | grep -v -i "pussy" | shuf -n 1); ACTION=$(notify-send "Test notification with body image" "This notification should contain your user account <b>image</b> and <a href=\"https://discord.com/app\">Discord</a> <b>icon</b>. Oh and here is a random image in your Pictures folder: <img src=\"$RANDOM_IMAGE\" alt=\"Testing image\"/>" -a "Hyprland keybind" -p -h "string:image-path:/var/lib/AccountsService/icons/$USER" -t 6000 -i "discord" -A "openImage=Open profile image" -A "action2=Open the random image" -A "action3=Useless button"); [[ $ACTION == *openImage ]] && xdg-open "/var/lib/AccountsService/icons/$USER"; [[ $ACTION == *action2 ]] && xdg-open \"$RANDOM_IMAGE\"' # [hidden]
|
||||||
|
bind = Super+Alt, f12, exec, bash -c 'RANDOM_IMAGE=$(find ~/Pictures -type f | grep -v -i "nipple" | grep -v -i "pussy" | shuf -n 1); ACTION=$(notify-send "Test notification" "This notification should contain a random image in your <b>Pictures</b> folder and <a href=\"https://discord.com/app\">Discord</a> <b>icon</b>.\n<i>Flick right to dismiss!</i>" -a "Discord (fake)" -p -h "string:image-path:$RANDOM_IMAGE" -t 6000 -i "discord" -A "openImage=Open profile image" -A "action2=Useless button" -A "action3=Cry more"); [[ $ACTION == *openImage ]] && xdg-open "/var/lib/AccountsService/icons/$USER"' # [hidden]
|
||||||
|
bind = Super+Alt, Equal, exec, notify-send "Urgent notification" "Ah hell no" -u critical -a 'Hyprland keybind' # [hidden]
|
||||||
|
|
||||||
|
##! Session
|
||||||
|
bindd = Super, L, Lock, exec, loginctl lock-session # Lock
|
||||||
|
bind = Super+Shift, L, exec, loginctl lock-session # [hidden]
|
||||||
|
bindld = Super+Shift, L, Suspend system, exec, sleep 0.1 && systemctl suspend || loginctl suspend # Sleep
|
||||||
|
bindd = Ctrl+Shift+Alt+Super, Delete, Shutdown, exec, systemctl poweroff || loginctl poweroff # [hidden] Power off
|
||||||
|
|
||||||
|
##! Screen
|
||||||
|
# Zoom
|
||||||
|
binde = Super, Minus, exec, qs -c $qsConfig ipc call zoom zoomOut # Zoom out
|
||||||
|
binde = Super, Equal, exec, qs -c $qsConfig ipc call zoom zoomIn # Zoom in
|
||||||
|
binde = Super, Minus, exec, qs -c $qsConfig ipc call TEST_ALIVE || ~/.config/hypr/hyprland/scripts/zoom.sh decrease 0.1 # [hidden] Zoom out
|
||||||
|
binde = Super, Equal, exec, qs -c $qsConfig ipc call TEST_ALIVE || ~/.config/hypr/hyprland/scripts/zoom.sh increase 0.1 # [hidden] Zoom in
|
||||||
|
|
||||||
|
##! Media
|
||||||
|
bindl= Super+Shift, N, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"` # Next track
|
||||||
|
bindl= ,XF86AudioNext, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"` # [hidden]
|
||||||
|
bindl= ,XF86AudioPrev, exec, playerctl previous # [hidden]
|
||||||
|
bind = Super+Shift+Alt, mouse:275, exec, playerctl previous # [hidden]
|
||||||
|
bind = Super+Shift+Alt, mouse:276, exec, playerctl next || playerctl position `bc <<< "100 * $(playerctl metadata mpris:length) / 1000000 / 100"` # [hidden]
|
||||||
|
bindl= Super+Shift, B, exec, playerctl previous # Previous track
|
||||||
|
bindl= Super+Shift, P, exec, playerctl play-pause # Play/pause media
|
||||||
|
bindl= ,XF86AudioPlay, exec, playerctl play-pause # [hidden]
|
||||||
|
bindl= ,XF86AudioPause, exec, playerctl play-pause # [hidden]
|
||||||
|
|
||||||
|
##! Apps
|
||||||
|
bind = Super, Return, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "kitty -1" "foot" "alacritty" "wezterm" "konsole" "kgx" "uxterm" "xterm" # Terminal
|
||||||
|
bind = Super, T, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "kitty -1" "foot" "alacritty" "wezterm" "konsole" "kgx" "uxterm" "xterm" # [hidden] Kitty (terminal) (alt)
|
||||||
|
bind = Ctrl+Alt, T, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "kitty -1" "foot" "alacritty" "wezterm" "konsole" "kgx" "uxterm" "xterm" # [hidden] Kitty (for Ubuntu people)
|
||||||
|
bind = Super, E, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "dolphin" "nautilus" "nemo" "thunar" "kitty -1 fish -c yazi" # File manager
|
||||||
|
bind = Super, W, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "google-chrome-stable" "zen-browser" "firefox" "brave" "chromium" "microsoft-edge-stable" "opera" "librewolf" # Browser
|
||||||
|
bind = Super, C, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "code" "codium" "cursor" "zed" "zedit" "zeditor" "kate" "gnome-text-editor" "emacs" "command -v nvim && kitty -1 nvim" # Code editor
|
||||||
|
bind = Super+Shift, W, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "wps" "onlyoffice-desktopeditors" # Office software
|
||||||
|
bind = Super, X, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "kate" "gnome-text-editor" "emacs" # Text editor
|
||||||
|
bind = Ctrl+Super, V, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "pavucontrol-qt" "pavucontrol" # Volume mixer
|
||||||
|
bind = Super, I, exec, XDG_CURRENT_DESKTOP=gnome ~/.config/hypr/hyprland/scripts/launch_first_available.sh "qs -p ~/.config/quickshell/$qsConfig/settings.qml" "systemsettings" "gnome-control-center" "better-control" # Settings app
|
||||||
|
bind = Ctrl+Shift, Escape, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh "gnome-system-monitor" "plasma-systemmonitor --page-name Processes" "command -v btop && kitty -1 fish -c btop" # Task manager
|
||||||
|
|
||||||
|
# Cursed stuff
|
||||||
|
## Make window not amogus large
|
||||||
|
bind = Ctrl+Super, Backslash, resizeactive, exact 640 480 # [hidden]
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
# ######## Window rules ########
|
||||||
|
|
||||||
|
# Uncomment to apply global transparency to all windows:
|
||||||
|
# windowrulev2 = opacity 0.89 override 0.89 override, class:.*
|
||||||
|
|
||||||
|
# Disable blur for xwayland context menus
|
||||||
|
windowrulev2 = noblur,class:^()$,title:^()$
|
||||||
|
# windowrulev2 = noblur, xwayland:1
|
||||||
|
|
||||||
|
|
||||||
|
# Floating
|
||||||
|
windowrulev2 = float, class:^(blueberry\.py)$
|
||||||
|
windowrulev2 = float, class:^(guifetch)$ # FlafyDev/guifetch
|
||||||
|
windowrulev2 = float, class:^(pavucontrol)$
|
||||||
|
windowrulev2 = size 45%, class:^(pavucontrol)$
|
||||||
|
windowrulev2 = center, class:^(pavucontrol)$
|
||||||
|
windowrulev2 = float, class:^(org.pulseaudio.pavucontrol)$
|
||||||
|
windowrulev2 = size 45%, class:^(org.pulseaudio.pavucontrol)$
|
||||||
|
windowrulev2 = center, class:^(org.pulseaudio.pavucontrol)$
|
||||||
|
windowrulev2 = float, class:^(nm-connection-editor)$
|
||||||
|
windowrulev2 = size 45%, class:^(nm-connection-editor)$
|
||||||
|
windowrulev2 = center, class:^(nm-connection-editor)$
|
||||||
|
windowrulev2 = float, class:.*plasmawindowed.*
|
||||||
|
windowrulev2 = float, class:kcm_.*
|
||||||
|
windowrulev2 = float, class:.*bluedevilwizard
|
||||||
|
windowrulev2 = float, title:.*Welcome
|
||||||
|
windowrulev2 = float, title:^(illogical-impulse Settings)$
|
||||||
|
windowrulev2 = float, class:org.freedesktop.impl.portal.desktop.kde
|
||||||
|
windowrulev2 = float, class:^(Zotero)$
|
||||||
|
windowrulev2 = size 45%, class:^(Zotero)$
|
||||||
|
|
||||||
|
|
||||||
|
# Move
|
||||||
|
# kde-material-you-colors spawns a window when changing dark/light theme. This is to make sure it doesn't interfere at all.
|
||||||
|
windowrulev2 = float, class:^(plasma-changeicons)$
|
||||||
|
windowrulev2 = noinitialfocus, class:^(plasma-changeicons)$
|
||||||
|
windowrulev2 = move 999999 999999, class:^(plasma-changeicons)$
|
||||||
|
# stupid dolphin copy
|
||||||
|
windowrulev2 = move 40 80, title:^(Copying — Dolphin)$
|
||||||
|
|
||||||
|
# Tiling
|
||||||
|
windowrulev2 = tile, class:^dev\.warp\.Warp$
|
||||||
|
|
||||||
|
# Picture-in-Picture
|
||||||
|
windowrulev2 = float, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||||
|
windowrulev2 = keepaspectratio, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||||
|
windowrulev2 = move 73% 72%, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||||
|
windowrulev2 = size 25%, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||||
|
windowrulev2 = float, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||||
|
windowrulev2 = pin, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||||
|
|
||||||
|
# Dialog windows – float+center these windows.
|
||||||
|
windowrulev2 = center, title:^(Open File)(.*)$
|
||||||
|
windowrulev2 = center, title:^(Select a File)(.*)$
|
||||||
|
windowrulev2 = center, title:^(Choose wallpaper)(.*)$
|
||||||
|
windowrulev2 = center, title:^(Open Folder)(.*)$
|
||||||
|
windowrulev2 = center, title:^(Save As)(.*)$
|
||||||
|
windowrulev2 = center, title:^(Library)(.*)$
|
||||||
|
windowrulev2 = center, title:^(File Upload)(.*)$
|
||||||
|
windowrulev2 = center, title:^(.*)(wants to save)$
|
||||||
|
windowrulev2 = center, title:^(.*)(wants to open)$
|
||||||
|
windowrulev2 = float, title:^(Open File)(.*)$
|
||||||
|
windowrulev2 = float, title:^(Select a File)(.*)$
|
||||||
|
windowrulev2 = float, title:^(Choose wallpaper)(.*)$
|
||||||
|
windowrulev2 = float, title:^(Open Folder)(.*)$
|
||||||
|
windowrulev2 = float, title:^(Save As)(.*)$
|
||||||
|
windowrulev2 = float, title:^(Library)(.*)$
|
||||||
|
windowrulev2 = float, title:^(File Upload)(.*)$
|
||||||
|
windowrulev2 = float, title:^(.*)(wants to save)$
|
||||||
|
windowrulev2 = float, title:^(.*)(wants to open)$
|
||||||
|
|
||||||
|
|
||||||
|
# --- Tearing ---
|
||||||
|
windowrulev2 = immediate, title:.*\.exe
|
||||||
|
windowrulev2 = immediate, title:.*minecraft.*
|
||||||
|
windowrulev2 = immediate, class:^(steam_app).*
|
||||||
|
|
||||||
|
# No shadow for tiled windows (matches windows that are not floating).
|
||||||
|
windowrulev2 = noshadow, floating:0
|
||||||
|
|
||||||
|
# ######## Workspace rules ########
|
||||||
|
workspace = special:special, gapsout:30
|
||||||
|
|
||||||
|
# ######## Layer rules ########
|
||||||
|
layerrule = xray 1, .*
|
||||||
|
# layerrule = noanim, .*
|
||||||
|
layerrule = noanim, walker
|
||||||
|
layerrule = noanim, selection
|
||||||
|
layerrule = noanim, overview
|
||||||
|
layerrule = noanim, anyrun
|
||||||
|
layerrule = noanim, indicator.*
|
||||||
|
layerrule = noanim, osk
|
||||||
|
layerrule = noanim, hyprpicker
|
||||||
|
|
||||||
|
layerrule = noanim, noanim
|
||||||
|
layerrule = blur, gtk-layer-shell
|
||||||
|
layerrule = ignorezero, gtk-layer-shell
|
||||||
|
layerrule = blur, launcher
|
||||||
|
layerrule = ignorealpha 0.5, launcher
|
||||||
|
layerrule = blur, notifications
|
||||||
|
layerrule = ignorealpha 0.69, notifications
|
||||||
|
layerrule = blur, logout_dialog # wlogout
|
||||||
|
|
||||||
|
# ags
|
||||||
|
layerrule = animation slide left, sideleft.*
|
||||||
|
layerrule = animation slide right, sideright.*
|
||||||
|
layerrule = blur, session[0-9]*
|
||||||
|
layerrule = blur, bar[0-9]*
|
||||||
|
layerrule = ignorealpha 0.6, bar[0-9]*
|
||||||
|
layerrule = blur, barcorner.*
|
||||||
|
layerrule = ignorealpha 0.6, barcorner.*
|
||||||
|
layerrule = blur, dock[0-9]*
|
||||||
|
layerrule = ignorealpha 0.6, dock[0-9]*
|
||||||
|
layerrule = blur, indicator.*
|
||||||
|
layerrule = ignorealpha 0.6, indicator.*
|
||||||
|
layerrule = blur, overview[0-9]*
|
||||||
|
layerrule = ignorealpha 0.6, overview[0-9]*
|
||||||
|
layerrule = blur, cheatsheet[0-9]*
|
||||||
|
layerrule = ignorealpha 0.6, cheatsheet[0-9]*
|
||||||
|
layerrule = blur, sideright[0-9]*
|
||||||
|
layerrule = ignorealpha 0.6, sideright[0-9]*
|
||||||
|
layerrule = blur, sideleft[0-9]*
|
||||||
|
layerrule = ignorealpha 0.6, sideleft[0-9]*
|
||||||
|
layerrule = blur, indicator.*
|
||||||
|
layerrule = ignorealpha 0.6, indicator.*
|
||||||
|
layerrule = blur, osk[0-9]*
|
||||||
|
layerrule = ignorealpha 0.6, osk[0-9]*
|
||||||
|
|
||||||
|
# Quickshell
|
||||||
|
layerrule = blurpopups, quickshell:.*
|
||||||
|
layerrule = blur, quickshell:.*
|
||||||
|
layerrule = ignorealpha 0.79, quickshell:.*
|
||||||
|
layerrule = animation slide top, quickshell:bar
|
||||||
|
layerrule = animation fade, quickshell:screenCorners
|
||||||
|
layerrule = animation slide right, quickshell:sidebarRight
|
||||||
|
layerrule = animation slide left, quickshell:sidebarLeft
|
||||||
|
layerrule = animation slide bottom, quickshell:osk
|
||||||
|
layerrule = animation slide bottom, quickshell:dock
|
||||||
|
layerrule = blur, quickshell:session
|
||||||
|
layerrule = noanim, quickshell:session
|
||||||
|
layerrule = ignorealpha 0, quickshell:session
|
||||||
|
layerrule = animation fade, quickshell:notificationPopup
|
||||||
|
layerrule = blur, quickshell:backgroundWidgets
|
||||||
|
layerrule = ignorealpha 0.05, quickshell:backgroundWidgets
|
||||||
|
layerrule = noanim, quickshell:screenshot
|
||||||
|
layerrule = animation popin 120%, quickshell:screenCorners
|
||||||
|
layerrule = noanim, quickshell:lockWindowPusher
|
||||||
|
|
||||||
|
|
||||||
|
# Launchers need to be FAST
|
||||||
|
layerrule = noanim, quickshell:overview
|
||||||
|
layerrule = noanim, gtk4-layer-shell
|
||||||
|
## outfoxxed's stuff
|
||||||
|
layerrule = blur, shell:bar
|
||||||
|
layerrule = ignorezero, shell:bar
|
||||||
|
layerrule = blur, shell:notifications
|
||||||
|
layerrule = ignorealpha 0.1, shell:notifications
|
||||||
|
|
||||||
|
|
||||||
@@ -23,15 +23,13 @@ while [[ "$#" -gt 0 ]]; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
# Combine the system prompt with the clipboard content
|
# Combine the system prompt with the clipboard content
|
||||||
content=$(wl-paste -p | tr '\n' ' ' | head -c 2000) # 2000 char limit to prevent overflow
|
content=$(wl-paste -p | tr '\n' ' ')
|
||||||
|
prompt="$SYSTEM_PROMPT $content"
|
||||||
# Properly escape content for JSON using jq
|
|
||||||
prompt_json=$(jq -n --arg system_prompt "$SYSTEM_PROMPT" --arg content "$content" '$system_prompt + " " + $content')
|
|
||||||
|
|
||||||
# Make the API call with the specified or default model
|
# Make the API call with the specified or default model
|
||||||
api_payload=$(jq -n --arg model "$model" --argjson prompt "$prompt_json" --argjson stream false \
|
response=$(curl http://localhost:11434/api/generate -d \
|
||||||
'{model: $model, prompt: $prompt, stream: $stream}')
|
"{\"model\": \"$model\",\"prompt\": \"$prompt\",\"stream\": false}" \
|
||||||
response=$(curl -s http://localhost:11434/api/generate -d "$api_payload" | jq -r '.response' 2>/dev/null)
|
| jq -r '.response')
|
||||||
|
|
||||||
# Check if content is a single line and no longer than 30 characters
|
# Check if content is a single line and no longer than 30 characters
|
||||||
if [[ ${#content} -le 30 && "$content" != *$'\n'* ]]; then
|
if [[ ${#content} -le 30 && "$content" != *$'\n'* ]]; then
|
||||||
@@ -1885,69 +1885,4 @@ AH↗️HA↘️HA↗️HA↘️ pekora arrows hahaha rabbit
|
|||||||
↵ enter key return
|
↵ enter key return
|
||||||
𝕏 twitter x logo
|
𝕏 twitter x logo
|
||||||
👉👈 etou ughhhhhhh shy
|
👉👈 etou ughhhhhhh shy
|
||||||
👉👌 put it in imagination perv
|
👉👌 put it in imagination perv
|
||||||
🫨 shaking face tremble shake shocked
|
|
||||||
🩷 pink heart love
|
|
||||||
🩵 light blue heart love cyan
|
|
||||||
🩶 grey heart gray love
|
|
||||||
🫷 leftwards pushing hand stop halt left
|
|
||||||
🫸 rightwards pushing hand stop halt right
|
|
||||||
🫎 moose animal antlers
|
|
||||||
🫏 donkey animal mule ass
|
|
||||||
🪽 wing bird feather fly
|
|
||||||
🐦⬛ black bird crow raven rook
|
|
||||||
🪿 goose bird honk
|
|
||||||
🪼 jellyfish sea ocean sting
|
|
||||||
🪻 hyacinth flower spring
|
|
||||||
🫚 ginger root spice food
|
|
||||||
🫛 pea pod peas vegetable food
|
|
||||||
🪭 folding hand fan fan cool
|
|
||||||
🪮 hair pick afro comb
|
|
||||||
🪇 maracas instrument music shake
|
|
||||||
🪈 flute instrument music
|
|
||||||
🪯 khanda sikh religion symbol
|
|
||||||
🛜 wireless wifi wi-fi internet network
|
|
||||||
🙂↔️ head shaking horizontally no shake
|
|
||||||
🙂↕️ head shaking vertically yes nod
|
|
||||||
🚶➡️ person walking facing right walk
|
|
||||||
🚶♀️➡️ woman walking facing right walk
|
|
||||||
🚶♂️➡️ man walking facing right walk
|
|
||||||
🧎➡️ person kneeling facing right kneel
|
|
||||||
🧎♀️➡️ woman kneeling facing right kneel
|
|
||||||
🧎♂️➡️ man kneeling facing right kneel
|
|
||||||
🧑🦯➡️ person with white cane facing right accessibility blind
|
|
||||||
👨🦯➡️ man with white cane facing right accessibility blind
|
|
||||||
👩🦯➡️ woman with white cane facing right accessibility blind
|
|
||||||
🧑🦼➡️ person in motorized wheelchair facing right accessibility
|
|
||||||
👨🦼➡️ man in motorized wheelchair facing right accessibility
|
|
||||||
👩🦼➡️ woman in motorized wheelchair facing right accessibility
|
|
||||||
🧑🦽➡️ person in manual wheelchair facing right accessibility
|
|
||||||
👨🦽➡️ man in manual wheelchair facing right accessibility
|
|
||||||
👩🦽➡️ woman in manual wheelchair facing right accessibility
|
|
||||||
🏃➡️ person running facing right run
|
|
||||||
🏃♀️➡️ woman running facing right run
|
|
||||||
🏃♂️➡️ man running facing right run
|
|
||||||
🧑🧑🧒 family adult adult child parents
|
|
||||||
🧑🧑🧒🧒 family adult adult child child parents
|
|
||||||
🧑🧒 family adult child parent
|
|
||||||
🧑🧒🧒 family adult child child parent
|
|
||||||
🐦🔥 phoenix fire bird rebirth
|
|
||||||
🍋🟩 lime fruit citrus green
|
|
||||||
🍄🟫 brown mushroom fungi
|
|
||||||
⛓️💥 broken chain snap shatter
|
|
||||||
face with bags under eyes tired sleepy exhausted
|
|
||||||
fingerprint id biometric
|
|
||||||
leafless tree barren dead winter
|
|
||||||
root vegetable food turnip radish
|
|
||||||
harp instrument music
|
|
||||||
shovel dig tool
|
|
||||||
splatter splash stain mess
|
|
||||||
🇨🇶 flag sark
|
|
||||||
distorted face anxiety shocked panic
|
|
||||||
fight cloud comic brawl dust
|
|
||||||
hairy creature sasquatch bigfoot
|
|
||||||
🧑🩰 ballet dancer dance ballerina
|
|
||||||
orca killer whale
|
|
||||||
landslide rockfall disaster
|
|
||||||
trombone instrument music
|
|
||||||
treasure chest gold loot pirate
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
for cmd in "$@"; do
|
for cmd in "$@"; do
|
||||||
[[ -z "$cmd" ]] && continue
|
|
||||||
eval "command -v ${cmd%% *}" >/dev/null 2>&1 || continue
|
eval "command -v ${cmd%% *}" >/dev/null 2>&1 || continue
|
||||||
eval "$cmd" &
|
eval "$cmd" &
|
||||||
exit
|
exit
|
||||||
done
|
done
|
||||||
|
exit 1
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
getdate() {
|
||||||
|
date '+%Y-%m-%d_%H.%M.%S'
|
||||||
|
}
|
||||||
|
getaudiooutput() {
|
||||||
|
pactl list sources | grep 'Name' | grep 'monitor' | cut -d ' ' -f2
|
||||||
|
}
|
||||||
|
getactivemonitor() {
|
||||||
|
hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .name'
|
||||||
|
}
|
||||||
|
|
||||||
|
xdgvideo="$(xdg-user-dir VIDEOS)"
|
||||||
|
if [[ $xdgvideo = "$HOME" ]]; then
|
||||||
|
unset xdgvideo
|
||||||
|
fi
|
||||||
|
mkdir -p "${xdgvideo:-$HOME/Videos}"
|
||||||
|
cd "${xdgvideo:-$HOME/Videos}" || exit
|
||||||
|
|
||||||
|
if pgrep wf-recorder > /dev/null; then
|
||||||
|
notify-send "Recording Stopped" "Stopped" -a 'Recorder' &
|
||||||
|
pkill wf-recorder &
|
||||||
|
else
|
||||||
|
if [[ "$1" == "--fullscreen-sound" ]]; then
|
||||||
|
notify-send "Starting recording" 'recording_'"$(getdate)"'.mp4' -a 'Recorder' & disown
|
||||||
|
wf-recorder -o "$(getactivemonitor)" --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --audio="$(getaudiooutput)"
|
||||||
|
elif [[ "$1" == "--fullscreen" ]]; then
|
||||||
|
notify-send "Starting recording" 'recording_'"$(getdate)"'.mp4' -a 'Recorder' & disown
|
||||||
|
wf-recorder -o "$(getactivemonitor)" --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t
|
||||||
|
else
|
||||||
|
if ! region="$(slurp 2>&1)"; then
|
||||||
|
notify-send "Recording cancelled" "Selection was cancelled" -a 'Recorder' & disown
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
notify-send "Starting recording" 'recording_'"$(getdate)"'.mp4' -a 'Recorder' & disown
|
||||||
|
if [[ "$1" == "--sound" ]]; then
|
||||||
|
wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --geometry "$region" --audio="$(getaudiooutput)"
|
||||||
|
else
|
||||||
|
wf-recorder --pixel-format yuv420p -f './recording_'"$(getdate)"'.mp4' -t --geometry "$region"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
@@ -7,16 +7,13 @@ if pgrep -f 'geoclue-2.0/demos/agent' > /dev/null; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# List of known possible GeoClue agent paths
|
# List of known possible GeoClue agent paths
|
||||||
AGENT_PATHS=(
|
AGENT_PATHS="
|
||||||
/usr/libexec/geoclue-2.0/demos/agent
|
/usr/libexec/geoclue-2.0/demos/agent
|
||||||
/usr/lib/geoclue-2.0/demos/agent
|
/usr/lib/geoclue-2.0/demos/agent
|
||||||
"$HOME/.nix-profile/libexec/geoclue-2.0/demos/agent"
|
"
|
||||||
"$HOME/.nix-profile/lib/geoclue-2.0/demos/agent"
|
|
||||||
/run/current-system/sw/libexec/geoclue-2.0/demos/agent
|
|
||||||
)
|
|
||||||
|
|
||||||
# Find the first valid agent path
|
# Find the first valid agent path
|
||||||
for path in "${AGENT_PATHS[@]}"; do
|
for path in $AGENT_PATHS; do
|
||||||
if [ -x "$path" ]; then
|
if [ -x "$path" ]; then
|
||||||
echo "Starting GeoClue agent from: $path"
|
echo "Starting GeoClue agent from: $path"
|
||||||
"$path" & # starts in the background
|
"$path" & # starts in the background
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
hyprctl dispatch "$1" $(((($(hyprctl activeworkspace -j | jq -r .id) - 1) / 10) * 10 + $2))
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Controls Hyprland's cursor zoom_factor, clamped between 1.0 and 3.0
|
||||||
|
|
||||||
|
# Get current zoom level
|
||||||
|
get_zoom() {
|
||||||
|
hyprctl getoption -j cursor:zoom_factor | jq '.float'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Clamp a value between 1.0 and 3.0
|
||||||
|
clamp() {
|
||||||
|
local val="$1"
|
||||||
|
awk "BEGIN {
|
||||||
|
v = $val;
|
||||||
|
if (v < 1.0) v = 1.0;
|
||||||
|
if (v > 3.0) v = 3.0;
|
||||||
|
print v;
|
||||||
|
}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set zoom level
|
||||||
|
set_zoom() {
|
||||||
|
local value="$1"
|
||||||
|
clamped=$(clamp "$value")
|
||||||
|
hyprctl keyword cursor:zoom_factor "$clamped"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
reset)
|
||||||
|
set_zoom 1.0
|
||||||
|
;;
|
||||||
|
increase)
|
||||||
|
if [[ -z "$2" ]]; then
|
||||||
|
echo "Usage: $0 increase STEP"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
current=$(get_zoom)
|
||||||
|
new=$(awk "BEGIN { print $current + $2 }")
|
||||||
|
set_zoom "$new"
|
||||||
|
;;
|
||||||
|
decrease)
|
||||||
|
if [[ -z "$2" ]]; then
|
||||||
|
echo "Usage: $0 decrease STEP"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
current=$(get_zoom)
|
||||||
|
new=$(awk "BEGIN { print $current - $2 }")
|
||||||
|
set_zoom "$new"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {reset|increase STEP|decrease STEP}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -1,7 +1,18 @@
|
|||||||
source=~/.config/hypr/hyprlock/colors.conf
|
$text_color = rgba(FFDAD6FF)
|
||||||
|
$entry_background_color = rgba(41000311)
|
||||||
|
$entry_border_color = rgba(896E6C55)
|
||||||
|
$entry_color = rgba(FFDAD6FF)
|
||||||
|
$font_family = Rubik Light
|
||||||
|
$font_family_clock = Rubik Light
|
||||||
|
$font_material_symbols = Material Symbols Rounded
|
||||||
|
|
||||||
background {
|
background {
|
||||||
color = rgba(181818FF)
|
color = rgba(181818FF)
|
||||||
|
# path = {{ SWWW_WALL }}
|
||||||
|
|
||||||
|
# path = screenshot
|
||||||
|
# blur_size = 15
|
||||||
|
# blur_passes = 4
|
||||||
}
|
}
|
||||||
input-field {
|
input-field {
|
||||||
monitor =
|
monitor =
|
||||||
@@ -19,17 +30,6 @@ input-field {
|
|||||||
valign = center
|
valign = center
|
||||||
}
|
}
|
||||||
|
|
||||||
label {
|
|
||||||
monitor =
|
|
||||||
text = $LAYOUT
|
|
||||||
color = $text_color
|
|
||||||
font_size = 14
|
|
||||||
font_family = $font_family
|
|
||||||
position = -30, 30
|
|
||||||
halign = right
|
|
||||||
valign = bottom
|
|
||||||
}
|
|
||||||
|
|
||||||
label { # Caps Lock Warning
|
label { # Caps Lock Warning
|
||||||
monitor =
|
monitor =
|
||||||
text = cmd[update:250] ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock/check-capslock.sh
|
text = cmd[update:250] ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock/check-capslock.sh
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
// vim: set ft=glsl:
|
||||||
|
|
||||||
|
precision highp float;
|
||||||
|
varying highp vec2 v_texcoord;
|
||||||
|
uniform highp sampler2D tex;
|
||||||
|
|
||||||
|
#define STRENGTH 0.0027
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 center = vec2(0.5, 0.5);
|
||||||
|
vec2 offset = (v_texcoord - center) * STRENGTH;
|
||||||
|
|
||||||
|
float rSquared = dot(offset, offset);
|
||||||
|
float distortion = 1.0 + 1.0 * rSquared;
|
||||||
|
vec2 distortedOffset = offset * distortion;
|
||||||
|
|
||||||
|
vec2 redOffset = vec2(distortedOffset.x, distortedOffset.y);
|
||||||
|
vec2 blueOffset = vec2(distortedOffset.x, distortedOffset.y);
|
||||||
|
|
||||||
|
vec4 redColor = texture2D(tex, v_texcoord + redOffset);
|
||||||
|
vec4 blueColor = texture2D(tex, v_texcoord + blueOffset);
|
||||||
|
|
||||||
|
gl_FragColor = vec4(redColor.r, texture2D(tex, v_texcoord).g, blueColor.b, 1.0);
|
||||||
|
}
|
||||||
@@ -0,0 +1,511 @@
|
|||||||
|
#version 100
|
||||||
|
precision highp float;
|
||||||
|
varying highp vec2 v_texcoord;
|
||||||
|
varying highp vec3 v_pos;
|
||||||
|
uniform highp sampler2D tex;
|
||||||
|
uniform lowp float time;
|
||||||
|
|
||||||
|
#define BORDER_COLOR vec4(vec3(0.0, 0.0, 0.0), 1.0) // black border
|
||||||
|
#define BORDER_RADIUS 1.0 // larger vignette radius
|
||||||
|
#define BORDER_SIZE 0.01 // small border size
|
||||||
|
#define CHROMATIC_ABERRATION_STRENGTH 0.00
|
||||||
|
#define DENOISE_INTENSITY 0.0001 //
|
||||||
|
#define DISTORTION_AMOUNT 0.00 // moderate distortion amount
|
||||||
|
#define HDR_BLOOM 0.75 // bloom intensity
|
||||||
|
#define HDR_BRIGHTNESS 0.011 // brightness
|
||||||
|
#define HDR_CONTRAST 0.011 // contrast
|
||||||
|
#define HDR_SATURATION 1.0// saturation
|
||||||
|
#define LENS_DISTORTION_AMOUNT 0.0
|
||||||
|
#define NOISE_THRESHOLD 0.0001
|
||||||
|
#define PHOSPHOR_BLUR_AMOUNT 0.77 // Amount of blur for phosphor glow
|
||||||
|
#define PHOSPHOR_GLOW_AMOUNT 0.77 // Amount of phosphor glow
|
||||||
|
#define SAMPLING_RADIUS 0.0001
|
||||||
|
#define SCANLINE_FREQUENCY 540.0
|
||||||
|
#define SCANLINE_THICKNESS 0.0507
|
||||||
|
#define SCANLINE_TIME time * 471.24
|
||||||
|
#define SHARPNESS 0.25
|
||||||
|
#define SUPERSAMPLING_SAMPLES 16.0
|
||||||
|
#define VIGNETTE_RADIUS 0.0 // larger vignette radius
|
||||||
|
#define PI 3.14159265359
|
||||||
|
#define TWOPI 6.28318530718
|
||||||
|
|
||||||
|
vec2 applyBarrelDistortion(vec2 coord, float amt) {
|
||||||
|
vec2 p = coord.xy / vec2(1.0);
|
||||||
|
vec2 v = p * 2.0 - vec2(1.0);
|
||||||
|
float r = dot(v, v);
|
||||||
|
float k = 1.0 + pow(r, 2.0) * pow(amt, 2.0);
|
||||||
|
vec2 result = v * k;
|
||||||
|
return vec2(0.5, 0.5) + 0.5 * result.xy;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 applyColorCorrection(vec4 color) {
|
||||||
|
color.rgb *= vec3(1.0, 0.79, 0.89);
|
||||||
|
return vec4(color.rgb, 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 applyBorder(vec2 tc, vec4 color, float borderSize, vec4 borderColor) {
|
||||||
|
float dist_x = min(tc.x, 1.0 - tc.x);
|
||||||
|
float dist_y = min(tc.y, 1.0 - tc.y);
|
||||||
|
float dist = min(dist_x, dist_y) * -1.0;
|
||||||
|
float border = smoothstep(borderSize, 0.0, dist);
|
||||||
|
border += smoothstep(borderSize, 0.0, dist);
|
||||||
|
return mix(color, borderColor, border);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 applyFakeHDR(vec4 color, float brightness, float contrast, float saturation, float bloom) {
|
||||||
|
color.rgb = (color.rgb - vec3(0.5)) * exp2(brightness) + vec3(0.5);
|
||||||
|
vec3 crtfactor = vec3(1.05, 0.92, 1.0);
|
||||||
|
color.rgb = pow(color.rgb, crtfactor);
|
||||||
|
// // NTSC
|
||||||
|
// vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);
|
||||||
|
|
||||||
|
// // BT.709
|
||||||
|
// vec3 lumCoeff = vec3(0.299, 0.587, 0.114);
|
||||||
|
|
||||||
|
// BT.2020
|
||||||
|
vec3 lumCoeff = vec3(0.2627, 0.6780, 0.0593);
|
||||||
|
|
||||||
|
// // Warm NTSC
|
||||||
|
// vec3 lumCoeff = vec3(0.2125, 0.7010, 0.0865);
|
||||||
|
|
||||||
|
float luminance = dot(color.rgb, lumCoeff);
|
||||||
|
luminance = pow(luminance, 2.2);
|
||||||
|
color.rgb = mix(vec3(luminance), color.rgb, saturation);
|
||||||
|
color.rgb = mix(color.rgb, vec3(1.0), pow(max(0.0, luminance - 1.0 + bloom), 4.0));
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 applyVignette(vec4 color) {
|
||||||
|
vec2 center = vec2(0.5, 0.5); // center of screen
|
||||||
|
float radius = VIGNETTE_RADIUS; // radius of vignette effect
|
||||||
|
float softness = 1.0; // softness of vignette effect
|
||||||
|
float intensity = 0.7; // intensity of vignette effect
|
||||||
|
vec2 offset = v_texcoord - center; // offset from center of screen
|
||||||
|
float distance = length(offset); // distance from center of screen
|
||||||
|
float alpha = smoothstep(radius, radius - radius * softness, distance) * intensity; // calculate alpha value for vignette effect
|
||||||
|
return mix(vec4(0.0, 0.0, 0.0, alpha), color, alpha); // mix black with color using calculated alpha value
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 applyPhosphorGlow(vec2 tc, vec4 color, sampler2D tex) {
|
||||||
|
// Calculate average color value of the texture
|
||||||
|
vec4 texelColor = color;
|
||||||
|
float averageColor = (texelColor.r + texelColor.g + texelColor.b) / 3.0;
|
||||||
|
|
||||||
|
// Determine brightness-dependent color factor
|
||||||
|
float factor = mix(
|
||||||
|
mix(0.09,
|
||||||
|
mix(0.005, 0.0075, (averageColor - 0.1) / 0.1),
|
||||||
|
step(0.01, averageColor)), 0.0005,
|
||||||
|
step(0.02, averageColor));
|
||||||
|
// Apply phosphor glow effect
|
||||||
|
vec4 sum = vec4(0.0);
|
||||||
|
vec4 pixels[9];
|
||||||
|
pixels[0] = texture2D(tex, tc - vec2(0.001, 0.001));
|
||||||
|
pixels[1] = texture2D(tex, tc - vec2(0.001, 0.0));
|
||||||
|
pixels[2] = texture2D(tex, tc - vec2(0.001, -0.001));
|
||||||
|
pixels[3] = texture2D(tex, tc - vec2(0.0, 0.001));
|
||||||
|
pixels[4] = texture2D(tex, tc);
|
||||||
|
pixels[5] = texture2D(tex, tc + vec2(0.001, 0.001));
|
||||||
|
pixels[6] = texture2D(tex, tc + vec2(0.001, 0.0));
|
||||||
|
pixels[7] = texture2D(tex, tc + vec2(0.001, -0.001));
|
||||||
|
pixels[8] = texture2D(tex, tc + vec2(0.0, 0.001));
|
||||||
|
|
||||||
|
// Perform operations on input pixels in parallel
|
||||||
|
sum = pixels[0]
|
||||||
|
+ pixels[1]
|
||||||
|
+ pixels[2]
|
||||||
|
+ pixels[3]
|
||||||
|
+ pixels[4]
|
||||||
|
+ pixels[5]
|
||||||
|
+ pixels[6]
|
||||||
|
+ pixels[7]
|
||||||
|
+ pixels[8];
|
||||||
|
sum /= 9.0;
|
||||||
|
sum += texture2D(tex, tc - vec2(0.01, 0.01)) * 0.001;
|
||||||
|
sum += texture2D(tex, tc - vec2(0.0, 0.01)) * 0.001;
|
||||||
|
sum += texture2D(tex, tc - vec2(-0.01, 0.01)) * 0.001;
|
||||||
|
sum += texture2D(tex, tc - vec2(0.01, 0.0)) * 0.001;
|
||||||
|
sum += color * PHOSPHOR_BLUR_AMOUNT;
|
||||||
|
sum += texture2D(tex, tc - vec2(-0.01, 0.0)) * 0.001;
|
||||||
|
sum += texture2D(tex, tc - vec2(0.01, -0.01)) * 0.001;
|
||||||
|
sum += texture2D(tex, tc - vec2(0.0, -0.01)) * 0.001;
|
||||||
|
sum += texture2D(tex, tc - vec2(-0.01, -0.01)) * 0.001;
|
||||||
|
sum *= PHOSPHOR_GLOW_AMOUNT;
|
||||||
|
|
||||||
|
// Initialize sum_sum_factor to zero
|
||||||
|
vec4 sum_sum_factor = vec4(0.0);
|
||||||
|
// Compute sum_j for i = -1
|
||||||
|
vec4 sum_j = vec4(0.0);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(-1, -1) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(0, -1) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(1, -1) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(0, 0) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
|
||||||
|
sum_sum_factor += sum_j * vec4(0.011);
|
||||||
|
|
||||||
|
// Compute sum_j for i = 0
|
||||||
|
sum_j = vec4(0.0);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(0, 0) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
|
||||||
|
sum_sum_factor += sum_j * vec4(0.011);
|
||||||
|
|
||||||
|
// Compute sum_j for i = 1
|
||||||
|
sum_j = vec4(0.0);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
|
||||||
|
sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
|
||||||
|
sum_sum_factor += sum_j * vec4(0.011);
|
||||||
|
color += mix(sum_sum_factor * sum_sum_factor * vec4(factor), sum, 0.5);
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 applyAdaptiveSharpen(vec2 tc, vec4 color, sampler2D tex) {
|
||||||
|
vec4 color_tl = texture2D(tex, tc + vec2(-1.0, -1.0) * 0.5 / 2160.0);
|
||||||
|
vec4 color_tr = texture2D(tex, tc + vec2(1.0, -1.0) * 0.5 / 2160.0);
|
||||||
|
vec4 color_bl = texture2D(tex, tc + vec2(-1.0, 1.0) * 0.5 / 2160.0);
|
||||||
|
vec4 color_br = texture2D(tex, tc + vec2(1.0, 1.0) * 0.5 / 2160.0);
|
||||||
|
float sharpness = SHARPNESS;
|
||||||
|
vec3 color_no_alpha = color.rgb;
|
||||||
|
vec3 color_tl_no_alpha = color_tl.rgb;
|
||||||
|
vec3 color_tr_no_alpha = color_tr.rgb;
|
||||||
|
vec3 color_bl_no_alpha = color_bl.rgb;
|
||||||
|
vec3 color_br_no_alpha = color_br.rgb;
|
||||||
|
float delta = (dot(color_no_alpha, vec3(0.333333)) + dot(color_tl_no_alpha, vec3(0.333333)) + dot(color_tr_no_alpha, vec3(0.333333)) + dot(color_bl_no_alpha, vec3(0.333333)) + dot(color_br_no_alpha, vec3(0.333333))) * 0.2 - dot(color_no_alpha, vec3(0.333333));
|
||||||
|
vec3 sharp_color_no_alpha = color_no_alpha + min(vec3(0.0), vec3(delta * sharpness));
|
||||||
|
vec4 sharp_color = vec4(sharp_color_no_alpha, color.a);
|
||||||
|
return sharp_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 applyScanlines(vec2 tc, vec4 color) {
|
||||||
|
float scanline = (cos(tc.y * SCANLINE_FREQUENCY + SCANLINE_TIME) *
|
||||||
|
sin(tc.y * SCANLINE_FREQUENCY + SCANLINE_TIME)) * SCANLINE_THICKNESS;
|
||||||
|
float alpha = clamp(1.0 - abs(scanline), 0.0, 1.0);
|
||||||
|
return vec4(color.rgb * alpha, color.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 applyChromaticAberration(vec2 uv, vec4 color) {
|
||||||
|
vec2 center = vec2(0.5, 0.5); // center of the screen
|
||||||
|
vec2 offset = (uv - center) * CHROMATIC_ABERRATION_STRENGTH; // calculate the offset from the center
|
||||||
|
|
||||||
|
// apply lens distortion
|
||||||
|
float rSquared = dot(offset, offset);
|
||||||
|
float distortion = 1.0 + LENS_DISTORTION_AMOUNT * rSquared;
|
||||||
|
vec2 distortedOffset = offset * distortion;
|
||||||
|
|
||||||
|
// apply chromatic aberration
|
||||||
|
vec2 redOffset = vec2(distortedOffset.x * 1.00, distortedOffset.y * 1.00);
|
||||||
|
vec2 blueOffset = vec2(distortedOffset.x * 1.00, distortedOffset.y * 1.00);
|
||||||
|
|
||||||
|
vec4 redColor = texture2D(tex, uv + redOffset);
|
||||||
|
vec4 blueColor = texture2D(tex, uv + blueOffset);
|
||||||
|
|
||||||
|
vec4 result = vec4(redColor.r, color.g, blueColor.b, color.a);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 reduceGlare(vec4 color) {
|
||||||
|
// Calculate the intensity of the color by taking the average of the RGB components
|
||||||
|
float intensity = (color.r + color.g + color.b) / 3.0;
|
||||||
|
// Set the maximum intensity that can be considered for glare
|
||||||
|
float maxIntensity = 0.98;
|
||||||
|
// Use smoothstep to create a smooth transition from no glare to full glare
|
||||||
|
// based on the intensity of the color and the maximum intensity
|
||||||
|
float glareIntensity = smoothstep(maxIntensity - 0.02, maxIntensity, intensity);
|
||||||
|
// Set the amount of glare to apply to the color
|
||||||
|
float glareAmount = 0.02;
|
||||||
|
// Mix the original color with the reduced color that has glare applied to it
|
||||||
|
vec3 reducedColor = mix(color.rgb, vec3(glareIntensity), glareAmount);
|
||||||
|
// Return the reduced color with the original alpha value
|
||||||
|
return vec4(reducedColor, color.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply a fake HDR effect to the input color.
|
||||||
|
// Parameters:
|
||||||
|
// - inputColor: the color to apply the effect to.
|
||||||
|
// - brightness: the brightness of the image. Should be a value between 0 and 1.
|
||||||
|
// - contrast: the contrast of the image. Should be a value between 0 and 1.
|
||||||
|
// - saturation: the saturation of the image. Should be a value between 0 and 2.
|
||||||
|
// - bloom: the intensity of the bloom effect. Should be a value between 0 and 1.
|
||||||
|
vec4 applyFakeHDREffect(vec4 inputColor, float brightness, float contrast, float saturation, float bloom) {
|
||||||
|
const float minBrightness = 0.0;
|
||||||
|
const float maxBrightness = 1.0;
|
||||||
|
const float minContrast = 0.0;
|
||||||
|
const float maxContrast = 1.0;
|
||||||
|
const float minSaturation = 0.0;
|
||||||
|
const float maxSaturation = 2.0;
|
||||||
|
const float minBloom = 0.0;
|
||||||
|
const float maxBloom = 1.0;
|
||||||
|
|
||||||
|
// Check input parameters for validity
|
||||||
|
if (brightness < minBrightness || brightness > maxBrightness) {
|
||||||
|
return vec4(0.0, 0.0, 0.0, 1.0); // Return black with alpha of 1.0 to indicate error
|
||||||
|
}
|
||||||
|
if (contrast < minContrast || contrast > maxContrast) {
|
||||||
|
return vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
|
}
|
||||||
|
if (saturation < minSaturation || saturation > maxSaturation) {
|
||||||
|
return vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
|
}
|
||||||
|
if (bloom < minBloom || bloom > maxBloom) {
|
||||||
|
return vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply brightness and contrast
|
||||||
|
vec3 color = inputColor.rgb;
|
||||||
|
color = (color - vec3(0.5)) * exp2(brightness * 10.0) + vec3(0.5);
|
||||||
|
color = mix(vec3(0.5), color, pow(contrast * 4.0 + 1.0, 2.0));
|
||||||
|
|
||||||
|
// // NTSC
|
||||||
|
// vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);
|
||||||
|
|
||||||
|
// // BT.709
|
||||||
|
// vec3 lumCoeff = vec3(0.299, 0.587, 0.114);
|
||||||
|
|
||||||
|
// // BT.2020
|
||||||
|
// vec3 lumCoeff = vec3(0.2627, 0.6780, 0.0593);
|
||||||
|
|
||||||
|
// Warm NTSC
|
||||||
|
vec3 lumCoeff = vec3(0.2125, 0.7010, 0.0865);
|
||||||
|
|
||||||
|
// Apply saturation
|
||||||
|
float luminance = dot(color, lumCoeff);
|
||||||
|
vec3 grey = vec3(luminance);
|
||||||
|
color = mix(grey, color, saturation);
|
||||||
|
|
||||||
|
// Apply bloom effect
|
||||||
|
float threshold = 1.0 - bloom;
|
||||||
|
vec3 bloomColor = max(color - threshold, vec3(0.0));
|
||||||
|
bloomColor = pow(bloomColor, vec3(2.0));
|
||||||
|
bloomColor = mix(vec3(0.0), bloomColor, pow(min(luminance, threshold), 4.0));
|
||||||
|
color += bloomColor;
|
||||||
|
|
||||||
|
return vec4(color, inputColor.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 bilateralFilter(sampler2D tex, vec2 uv, vec4 color, float sampleRadius, float noiseThreshold, float intensity) {
|
||||||
|
vec4 filteredColor = vec4(0.0);
|
||||||
|
float totalWeight = 0.0;
|
||||||
|
|
||||||
|
// Top-left pixel
|
||||||
|
vec4 sample = texture2D(tex, uv + vec2(-1.0, -1.0));
|
||||||
|
float dist = length(vec2(-1.0, -1.0));
|
||||||
|
float colorDist = length(sample - color);
|
||||||
|
float weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
|
||||||
|
filteredColor += sample * weight;
|
||||||
|
totalWeight += weight;
|
||||||
|
|
||||||
|
// Top pixel
|
||||||
|
sample = texture2D(tex, uv + vec2(0.0, -1.0));
|
||||||
|
dist = length(vec2(0.0, -1.0));
|
||||||
|
colorDist = length(sample - color);
|
||||||
|
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
|
||||||
|
filteredColor += sample * weight;
|
||||||
|
totalWeight += weight;
|
||||||
|
|
||||||
|
// Top-right pixel
|
||||||
|
sample = texture2D(tex, uv + vec2(1.0, -1.0));
|
||||||
|
dist = length(vec2(1.0, -1.0));
|
||||||
|
colorDist = length(sample - color);
|
||||||
|
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
|
||||||
|
filteredColor += sample * weight;
|
||||||
|
totalWeight += weight;
|
||||||
|
|
||||||
|
// Left pixel
|
||||||
|
sample = texture2D(tex, uv + vec2(-1.0, 0.0));
|
||||||
|
dist = length(vec2(-1.0, 0.0));
|
||||||
|
colorDist = length(sample - color);
|
||||||
|
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
|
||||||
|
filteredColor += sample * weight;
|
||||||
|
totalWeight += weight;
|
||||||
|
|
||||||
|
// Center pixel
|
||||||
|
sample = texture2D(tex, uv);
|
||||||
|
dist = 0.0;
|
||||||
|
colorDist = length(sample - color);
|
||||||
|
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
|
||||||
|
filteredColor += sample * weight;
|
||||||
|
totalWeight += weight;
|
||||||
|
|
||||||
|
// Right pixel
|
||||||
|
sample = texture2D(tex, uv + vec2(1.0, 0.0));
|
||||||
|
dist = length(vec2(1.0, 0.0));
|
||||||
|
colorDist = length(sample - color);
|
||||||
|
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
|
||||||
|
filteredColor += sample * weight;
|
||||||
|
totalWeight += weight;
|
||||||
|
|
||||||
|
// Bottom-left pixel
|
||||||
|
sample = texture2D(tex, uv + vec2(-1.0, 1.0));
|
||||||
|
dist = length(vec2(-1.0, 1.0));
|
||||||
|
colorDist = length(sample - color);
|
||||||
|
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
|
||||||
|
filteredColor += sample * weight;
|
||||||
|
totalWeight += weight;
|
||||||
|
|
||||||
|
// Bottom pixel
|
||||||
|
sample = texture2D(tex, uv + vec2(0.0, sampleRadius));
|
||||||
|
dist = length(vec2(0.0, sampleRadius));
|
||||||
|
colorDist = length(sample - color);
|
||||||
|
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
|
||||||
|
filteredColor += sample * weight;
|
||||||
|
totalWeight += weight;
|
||||||
|
|
||||||
|
filteredColor /= totalWeight;
|
||||||
|
return mix(color, filteredColor, step(noiseThreshold, length(filteredColor - color)));
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 supersample(sampler2D tex, vec2 uv, float sampleRadius, float noiseThreshold, float intensity) {
|
||||||
|
float radiusSq = sampleRadius * sampleRadius;
|
||||||
|
vec2 poissonDisk;
|
||||||
|
vec4 color = vec4(0.0);
|
||||||
|
|
||||||
|
float r1_0 = sqrt(0.0 / 16.0);
|
||||||
|
float r2_0 = fract(1.0 / 3.0);
|
||||||
|
float theta_0 = TWOPI * r2_0;
|
||||||
|
poissonDisk = vec2(r1_0 * cos(theta_0), r1_0 * sin(theta_0));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_1 = sqrt(1.0 / 16.0);
|
||||||
|
float r2_1 = fract(2.0 / 3.0);
|
||||||
|
float theta_1 = TWOPI * r2_1;
|
||||||
|
poissonDisk = vec2(r1_1 * cos(theta_1), r1_1 * sin(theta_1));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_2 = sqrt(2.0 / 16.0);
|
||||||
|
float r2_2 = fract(3.0 / 3.0);
|
||||||
|
float theta_2 = TWOPI * r2_2;
|
||||||
|
poissonDisk = vec2(r1_2 * cos(theta_2), r1_2 * sin(theta_2));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_3 = sqrt(3.0 / 16.0);
|
||||||
|
float r2_3 = fract(4.0 / 3.0);
|
||||||
|
float theta_3 = TWOPI * r2_3;
|
||||||
|
poissonDisk = vec2(r1_3 * cos(theta_3), r1_3 * sin(theta_3));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_4 = sqrt(4.0 / 16.0);
|
||||||
|
float r2_4 = fract(5.0 / 3.0);
|
||||||
|
float theta_4 = TWOPI * r2_4;
|
||||||
|
poissonDisk = vec2(r1_4 * cos(theta_4), r1_4 * sin(theta_4));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_5 = sqrt(5.0 / 16.0);
|
||||||
|
float r2_5 = fract(6.0 / 3.0);
|
||||||
|
float theta_5 = TWOPI * r2_5;
|
||||||
|
poissonDisk = vec2(r1_5 * cos(theta_5), r1_5 * sin(theta_5));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_6 = sqrt(6.0 / 16.0);
|
||||||
|
float r2_6 = fract(7.0 / 3.0);
|
||||||
|
float theta_6 = TWOPI * r2_6;
|
||||||
|
poissonDisk = vec2(r1_6 * cos(theta_6), r1_6 * sin(theta_6));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_7 = sqrt(7.0 / 16.0);
|
||||||
|
float r2_7 = fract(8.0 / 3.0);
|
||||||
|
float theta_7 = TWOPI * r2_7;
|
||||||
|
poissonDisk = vec2(r1_7 * cos(theta_7), r1_7 * sin(theta_7));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_8 = sqrt(8.0 / 16.0);
|
||||||
|
float r2_8 = fract(9.0 / 3.0);
|
||||||
|
float theta_8 = TWOPI * r2_8;
|
||||||
|
poissonDisk = vec2(r1_8 * cos(theta_8), r1_8 * sin(theta_8));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_9 = sqrt(9.0 / 16.0);
|
||||||
|
float r2_9 = fract(10.0 / 3.0);
|
||||||
|
float theta_9 = TWOPI * r2_9;
|
||||||
|
poissonDisk = vec2(r1_9 * cos(theta_9), r1_9 * sin(theta_9));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_10 = sqrt(10.0 / 16.0);
|
||||||
|
float r2_10 = fract(11.0 / 3.0);
|
||||||
|
float theta_10 = TWOPI * r2_10;
|
||||||
|
poissonDisk = vec2(r1_10 * cos(theta_10), r1_10 * sin(theta_10));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_11 = sqrt(11.0 / 16.0);
|
||||||
|
float r2_11 = fract(12.0 / 3.0);
|
||||||
|
float theta_11 = TWOPI * r2_11;
|
||||||
|
poissonDisk = vec2(r1_11 * cos(theta_11), r1_11 * sin(theta_11));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_12 = sqrt(12.0 / 16.0);
|
||||||
|
float r2_12 = fract(13.0 / 3.0);
|
||||||
|
float theta_12 = TWOPI * r2_12;
|
||||||
|
poissonDisk = vec2(r1_12 * cos(theta_12), r1_12 * sin(theta_12));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_13 = sqrt(13.0 / 16.0);
|
||||||
|
float r2_13 = fract(14.0 / 3.0);
|
||||||
|
float theta_13 = TWOPI * r2_13;
|
||||||
|
poissonDisk = vec2(r1_13 * cos(theta_13), r1_13 * sin(theta_13));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_14 = sqrt(14.0 / 16.0);
|
||||||
|
float r2_14 = fract(15.0 / 3.0);
|
||||||
|
float theta_14 = TWOPI * r2_14;
|
||||||
|
poissonDisk = vec2(r1_14 * cos(theta_14), r1_14 * sin(theta_14));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
float r1_15 = sqrt(15.0 / 16.0);
|
||||||
|
float r2_15 = fract(16.0 / 3.0);
|
||||||
|
float theta_15 = TWOPI * r2_15;
|
||||||
|
poissonDisk = vec2(r1_15 * cos(theta_15), r1_15 * sin(theta_15));
|
||||||
|
color += texture2D(tex, uv + poissonDisk * sampleRadius);
|
||||||
|
|
||||||
|
return bilateralFilter(tex, uv, color, sampleRadius, noiseThreshold, intensity);
|
||||||
|
}
|
||||||
|
void main() {
|
||||||
|
vec2 tc_no_dist = v_texcoord;
|
||||||
|
|
||||||
|
vec2 tc = applyBarrelDistortion(tc_no_dist, DISTORTION_AMOUNT);
|
||||||
|
|
||||||
|
// [-1, 1]
|
||||||
|
vec2 tc_no_dist_symmetric = tc_no_dist * 2.0 - 1.0;
|
||||||
|
|
||||||
|
// [0,1]
|
||||||
|
vec2 tc_no_dist_normalized = (tc_no_dist_symmetric + 1.0) / 2.0;
|
||||||
|
|
||||||
|
// vec4 color = texture2D(tex, tc);
|
||||||
|
vec4 color = supersample(tex, tc, SAMPLING_RADIUS, NOISE_THRESHOLD, DENOISE_INTENSITY);
|
||||||
|
|
||||||
|
color = applyAdaptiveSharpen(tc, color, tex);
|
||||||
|
|
||||||
|
color = applyPhosphorGlow(tc, color, tex);
|
||||||
|
|
||||||
|
color = reduceGlare(color);
|
||||||
|
|
||||||
|
color = mix(applyFakeHDREffect(color, HDR_BRIGHTNESS, HDR_CONTRAST, HDR_SATURATION, HDR_BLOOM), color, 0.5);
|
||||||
|
|
||||||
|
color = applyColorCorrection(color);
|
||||||
|
|
||||||
|
color /= SUPERSAMPLING_SAMPLES;
|
||||||
|
|
||||||
|
color = mix(applyChromaticAberration(tc, color), color, 0.25);
|
||||||
|
|
||||||
|
color = mix(color, applyVignette(color), 0.37);
|
||||||
|
|
||||||
|
color = applyBorder(tc_no_dist_normalized, color, 1.0 - BORDER_SIZE * BORDER_RADIUS, BORDER_COLOR);
|
||||||
|
|
||||||
|
color = mix(applyBorder(tc, color, BORDER_SIZE, BORDER_COLOR), color, 0.05);
|
||||||
|
|
||||||
|
color = applyScanlines(tc, color);
|
||||||
|
|
||||||
|
gl_FragColor = color;
|
||||||
|
gl_FragColor.a = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
precision highp float;
|
||||||
|
varying vec2 v_texcoord;
|
||||||
|
uniform sampler2D tex;
|
||||||
|
uniform float time;
|
||||||
|
|
||||||
|
void warpco(inout vec2 tc) {
|
||||||
|
tc -= 0.5;
|
||||||
|
tc *= length(tc) * 2.0;
|
||||||
|
tc += 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
float rand1d(float seed) {
|
||||||
|
return sin(seed*1454.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
float rand2d(vec2 co)
|
||||||
|
{
|
||||||
|
return fract(sin(dot(co.xy, vec2(12.9898,78.233))) * 43758.5453);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 rgb(in vec2 tc, float freq, float amp, inout vec4 centre) {
|
||||||
|
vec2 off = vec2(1.0/800.0, 0.0) * sin(tc.t * freq + time) * amp;
|
||||||
|
vec2 off2 = vec2(1.0/800.0, 0.0) * sin(tc.t * freq - time * 1.5) * amp;
|
||||||
|
centre = texture2D(tex, tc);
|
||||||
|
return vec3(texture2D(tex, tc-off).r, centre.g, texture2D(tex, tc+off2).b);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
// vec2 px = 1.0 / textureSize(tex, 0).st;
|
||||||
|
vec2 tc = v_texcoord;
|
||||||
|
warpco(tc);
|
||||||
|
tc = mix(v_texcoord, tc, sin(time * 2.0)*0.07);
|
||||||
|
tc.x += rand2d(floor(tc * 20.0 + floor(time * 2.5))) * 0.01;
|
||||||
|
tc.x += rand1d(floor(tc.x * 40.0)) * 0.005 * rand1d(time * 0.001);
|
||||||
|
tc.y += sin(tc.x + time) * 0.02;
|
||||||
|
vec4 centre;
|
||||||
|
vec3 bent = rgb(tc, 100.0, 5.0, centre);
|
||||||
|
vec3 col = mix(centre.rgb, bent, sin(time));
|
||||||
|
gl_FragColor = vec4(col, centre.a);
|
||||||
|
// gl_FragColor = vec4(texture2D(tex, v_texcoord));
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
// vim: set ft=glsl:
|
||||||
|
// blue light filter shader
|
||||||
|
// values from https://reshade.me/forum/shader-discussion/3673-blue-light-filter-similar-to-f-lux
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
varying vec2 v_texcoord;
|
||||||
|
uniform sampler2D tex;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
|
||||||
|
vec4 pixColor = texture2D(tex, v_texcoord);
|
||||||
|
|
||||||
|
// red
|
||||||
|
pixColor[0] *= 0.7;
|
||||||
|
// green
|
||||||
|
pixColor[1] *= 0.6;
|
||||||
|
// blue
|
||||||
|
pixColor[2] *= 0.5;
|
||||||
|
|
||||||
|
gl_FragColor = pixColor;
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// vim: set ft=glsl:
|
||||||
|
// blue light filter shader
|
||||||
|
// values from https://reshade.me/forum/shader-discussion/3673-blue-light-filter-similar-to-f-lux
|
||||||
|
|
||||||
|
precision mediump float;
|
||||||
|
varying vec2 v_texcoord;
|
||||||
|
uniform sampler2D tex;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec4 pixColor = texture2D(tex, v_texcoord);
|
||||||
|
pixColor.rgb = 1.0 - pixColor.rgb;
|
||||||
|
gl_FragColor = pixColor;
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
// -*- mode:c -*-
|
||||||
|
precision lowp float;
|
||||||
|
varying vec2 v_texcoord;
|
||||||
|
uniform sampler2D tex;
|
||||||
|
|
||||||
|
float distanceSquared(vec3 pixColor, vec3 solarizedColor) {
|
||||||
|
vec3 distanceVector = pixColor - solarizedColor;
|
||||||
|
return dot(distanceVector, distanceVector);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec3 solarized[16];
|
||||||
|
solarized[0] = vec3(0.,0.169,0.212);
|
||||||
|
solarized[1] = vec3(0.027,0.212,0.259);
|
||||||
|
solarized[2] = vec3(0.345,0.431,0.459);
|
||||||
|
solarized[3] = vec3(0.396,0.482,0.514);
|
||||||
|
solarized[4] = vec3(0.514,0.58,0.588);
|
||||||
|
solarized[5] = vec3(0.576,0.631,0.631);
|
||||||
|
solarized[6] = vec3(0.933,0.91,0.835);
|
||||||
|
solarized[7] = vec3(0.992,0.965,0.89);
|
||||||
|
solarized[8] = vec3(0.71,0.537,0.);
|
||||||
|
solarized[9] = vec3(0.796,0.294,0.086);
|
||||||
|
solarized[10] = vec3(0.863,0.196,0.184);
|
||||||
|
solarized[11] = vec3(0.827,0.212,0.51);
|
||||||
|
solarized[12] = vec3(0.424,0.443,0.769);
|
||||||
|
solarized[13] = vec3(0.149,0.545,0.824);
|
||||||
|
solarized[14] = vec3(0.165,0.631,0.596);
|
||||||
|
solarized[15] = vec3(0.522,0.6,0.);
|
||||||
|
|
||||||
|
vec3 pixColor = vec3(texture2D(tex, v_texcoord));
|
||||||
|
int closest = 0;
|
||||||
|
float closestDistanceSquared = distanceSquared(pixColor, solarized[0]);
|
||||||
|
for (int i = 1; i < 15; i++) {
|
||||||
|
float newDistanceSquared = distanceSquared(pixColor, solarized[i]);
|
||||||
|
if (newDistanceSquared < closestDistanceSquared) {
|
||||||
|
closest = i;
|
||||||
|
closestDistanceSquared = newDistanceSquared;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gl_FragColor = vec4(solarized[closest], 1.);
|
||||||
|
}
|
||||||
@@ -140,17 +140,14 @@ XftHintStyle=hintslight
|
|||||||
TerminalApplication=kitty -1
|
TerminalApplication=kitty -1
|
||||||
XftSubPixel=none
|
XftSubPixel=none
|
||||||
fixed=JetBrainsMono Nerd Font,11,-1,5,400,0,0,0,0,0,0,0,0,0,0,1
|
fixed=JetBrainsMono Nerd Font,11,-1,5,400,0,0,0,0,0,0,0,0,0,0,1
|
||||||
font=Google Sans Flex,11,-1,5,500,0,0,0,0,0,0,0,0,0,0,1,Medium
|
font=Rubik,11,-1,5,400,0,0,0,0,0,0,0,0,0,0,1
|
||||||
menuFont=Google Sans Flex,10,-1,5,500,0,0,0,0,0,0,0,0,0,0,1,Medium
|
menuFont=Rubik,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1
|
||||||
smallestReadableFont=Google Sans Flex,9,-1,5,500,0,0,0,0,0,0,0,0,0,0,1,Medium
|
smallestReadableFont=Rubik,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1
|
||||||
toolBarFont=Google Sans Flex,10,-1,5,500,0,0,0,0,0,0,0,0,0,0,1,Medium
|
toolBarFont=Rubik,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Theme=breeze-dark
|
Theme=breeze-dark
|
||||||
|
|
||||||
[KDE]
|
|
||||||
widgetStyle=Darkly
|
|
||||||
|
|
||||||
[KFileDialog Settings]
|
[KFileDialog Settings]
|
||||||
Allow Expansion=false
|
Allow Expansion=false
|
||||||
Automatically select filename extension=true
|
Automatically select filename extension=true
|
||||||
@@ -177,8 +174,8 @@ Theme=freedesktop
|
|||||||
[WM]
|
[WM]
|
||||||
activeBackground=54,52,58
|
activeBackground=54,52,58
|
||||||
activeBlend=252,252,252
|
activeBlend=252,252,252
|
||||||
|
activeFont=Rubik,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1
|
||||||
activeForeground=230,224,233
|
activeForeground=230,224,233
|
||||||
inactiveBackground=76,70,90
|
inactiveBackground=76,70,90
|
||||||
activeFont=Google Sans Flex,10,-1,5,500,0,0,0,0,0,0,0,0,0,0,1,Medium
|
|
||||||
inactiveBlend=161,169,177
|
inactiveBlend=161,169,177
|
||||||
inactiveForeground=232,222,248
|
inactiveForeground=232,222,248
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
# Theming
|
|
||||||
include ~/.local/state/quickshell/user/generated/terminal/kitty-theme.conf
|
|
||||||
|
|
||||||
# Font
|
# Font
|
||||||
font_family JetBrains Mono Nerd Font
|
font_family JetBrains Mono Nerd Font
|
||||||
font_size 11.0
|
font_size 11.0
|
||||||
@@ -6,23 +6,23 @@ input_path = '~/.config/matugen/templates/colors.json'
|
|||||||
output_path = '~/.local/state/quickshell/user/generated/colors.json'
|
output_path = '~/.local/state/quickshell/user/generated/colors.json'
|
||||||
|
|
||||||
[templates.hyprland]
|
[templates.hyprland]
|
||||||
input_path = '~/.config/matugen/templates/hyprland/colors.lua'
|
input_path = '~/.config/matugen/templates/hyprland/colors.conf'
|
||||||
output_path = '~/.config/hypr/hyprland/colors.lua'
|
output_path = '~/.config/hypr/hyprland/colors.conf'
|
||||||
|
|
||||||
[templates.hyprlock]
|
[templates.hyprlock]
|
||||||
input_path = '~/.config/matugen/templates/hyprland/hyprlock-colors.conf'
|
input_path = '~/.config/matugen/templates/hyprland/hyprlock.conf'
|
||||||
output_path = '~/.config/hypr/hyprlock/colors.conf'
|
output_path = '~/.config/hypr/hyprlock.conf'
|
||||||
|
|
||||||
[templates.fuzzel]
|
[templates.fuzzel]
|
||||||
input_path = '~/.config/matugen/templates/fuzzel/fuzzel_theme.ini'
|
input_path = '~/.config/matugen/templates/fuzzel/fuzzel_theme.ini'
|
||||||
output_path = '~/.config/fuzzel/fuzzel_theme.ini'
|
output_path = '~/.config/fuzzel/fuzzel_theme.ini'
|
||||||
|
|
||||||
[templates.gtk3]
|
[templates.gtk3]
|
||||||
input_path = '~/.config/matugen/templates/gtk-3.0/gtk.css'
|
input_path = '~/.config/matugen/templates/gtk/gtk-colors.css'
|
||||||
output_path = '~/.config/gtk-3.0/gtk.css'
|
output_path = '~/.config/gtk-3.0/gtk.css'
|
||||||
|
|
||||||
[templates.gtk4]
|
[templates.gtk4]
|
||||||
input_path = '~/.config/matugen/templates/gtk-4.0/gtk.css'
|
input_path = '~/.config/matugen/templates/gtk/gtk-colors.css'
|
||||||
output_path = '~/.config/gtk-4.0/gtk.css'
|
output_path = '~/.config/gtk-4.0/gtk.css'
|
||||||
|
|
||||||
[templates.kde_colors]
|
[templates.kde_colors]
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* GTK Colors
|
||||||
|
* Generated with Matugen
|
||||||
|
*/
|
||||||
|
|
||||||
|
@define-color accent_color {{colors.primary.default.hex}};
|
||||||
|
@define-color accent_fg_color {{colors.on_primary.default.hex}};
|
||||||
|
@define-color accent_bg_color {{colors.primary.default.hex}};
|
||||||
|
@define-color window_bg_color {{colors.background.default.hex}};
|
||||||
|
@define-color window_fg_color {{colors.on_background.default.hex}};
|
||||||
|
@define-color headerbar_bg_color {{colors.surface_dim.default.hex}};
|
||||||
|
@define-color headerbar_fg_color {{colors.on_surface.default.hex}};
|
||||||
|
@define-color popover_bg_color {{colors.surface_dim.default.hex}};
|
||||||
|
@define-color popover_fg_color {{colors.on_surface.default.hex}};
|
||||||
|
@define-color view_bg_color {{colors.surface.default.hex}};
|
||||||
|
@define-color view_fg_color {{colors.on_surface.default.hex}};
|
||||||
|
@define-color card_bg_color {{colors.surface.default.hex}};
|
||||||
|
@define-color card_fg_color {{colors.on_surface.default.hex}};
|
||||||
|
@define-color sidebar_bg_color @window_bg_color;
|
||||||
|
@define-color sidebar_fg_color @window_fg_color;
|
||||||
|
@define-color sidebar_border_color @window_bg_color;
|
||||||
|
@define-color sidebar_backdrop_color @window_bg_color;
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
general {
|
||||||
|
col.active_border = rgba({{colors.outline.default.hex_stripped}}AA)
|
||||||
|
col.inactive_border = rgba({{colors.outline_variant.default.hex_stripped}}AA)
|
||||||
|
}
|
||||||
|
|
||||||
|
misc {
|
||||||
|
background_color = rgba({{colors.surface.dark.hex_stripped}}FF)
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin {
|
||||||
|
hyprbars {
|
||||||
|
# Honestly idk if it works like css, but well, why not
|
||||||
|
bar_text_font = Rubik, Geist, AR One Sans, Reddit Sans, Inter, Roboto, Ubuntu, Noto Sans, sans-serif
|
||||||
|
bar_height = 30
|
||||||
|
bar_padding = 10
|
||||||
|
bar_button_padding = 5
|
||||||
|
bar_precedence_over_border = true
|
||||||
|
bar_part_of_window = true
|
||||||
|
|
||||||
|
bar_color = rgba({{colors.background.default.hex_stripped}}FF)
|
||||||
|
col.text = rgba({{colors.on_background.default.hex_stripped}}FF)
|
||||||
|
|
||||||
|
|
||||||
|
# example buttons (R -> L)
|
||||||
|
# hyprbars-button = color, size, on-click
|
||||||
|
hyprbars-button = rgb({{colors.on_background.default.hex_stripped}}), 13, , hyprctl dispatch killactive
|
||||||
|
hyprbars-button = rgb({{colors.on_background.default.hex_stripped}}), 13, , hyprctl dispatch fullscreen 1
|
||||||
|
hyprbars-button = rgb({{colors.on_background.default.hex_stripped}}), 13, , hyprctl dispatch movetoworkspacesilent special
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrulev2 = bordercolor rgba({{colors.primary.default.hex_stripped}}AA) rgba({{colors.primary.default.hex_stripped}}77),pinned:1
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
$text_color = rgba({{colors.primary_fixed.default.hex_stripped}}FF)
|
||||||
|
$entry_background_color = rgba({{colors.on_primary_fixed.default.hex_stripped}}11)
|
||||||
|
$entry_border_color = rgba({{colors.outline.default.hex_stripped}}55)
|
||||||
|
$entry_color = rgba({{colors.primary_fixed.default.hex_stripped}}FF)
|
||||||
|
$font_family = Rubik
|
||||||
|
$font_family_clock = Space Grotesk DemiBold
|
||||||
|
$font_material_symbols = Material Symbols Rounded
|
||||||
|
|
||||||
|
background {
|
||||||
|
color = rgba(181818FF)
|
||||||
|
|
||||||
|
path = {{image}}
|
||||||
|
blur_size = 15
|
||||||
|
blur_passes = 4
|
||||||
|
brightness = 0.33
|
||||||
|
}
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
size = 250, 50
|
||||||
|
outline_thickness = 2
|
||||||
|
dots_size = 0.1
|
||||||
|
dots_spacing = 0.3
|
||||||
|
outer_color = $entry_border_color
|
||||||
|
inner_color = $entry_background_color
|
||||||
|
font_color = $entry_color
|
||||||
|
fade_on_empty = true
|
||||||
|
|
||||||
|
position = 0, 20
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
label { # Caps Lock Warning
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:250] ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock/check-capslock.sh
|
||||||
|
color = $text_color
|
||||||
|
font_size = 13
|
||||||
|
font_family = $font_family
|
||||||
|
position = 0, -25
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
label { # Clock
|
||||||
|
monitor =
|
||||||
|
text = $TIME
|
||||||
|
color = $text_color
|
||||||
|
font_size = 65
|
||||||
|
font_family = $font_family_clock
|
||||||
|
|
||||||
|
position = 0, 300
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
label { # Date
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:5000] date +"%A, %B %d"
|
||||||
|
color = $text_color
|
||||||
|
font_size = 17
|
||||||
|
font_family = $font_family_clock
|
||||||
|
|
||||||
|
position = 0, 240
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
label { # User
|
||||||
|
monitor =
|
||||||
|
text = $USER
|
||||||
|
color = $text_color
|
||||||
|
outline_thickness = 2
|
||||||
|
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
|
||||||
|
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
|
||||||
|
dots_center = true
|
||||||
|
font_size = 20
|
||||||
|
font_family = $font_family
|
||||||
|
position = 0, 50
|
||||||
|
halign = center
|
||||||
|
valign = bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
label { # Status
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:5000] ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock/status.sh
|
||||||
|
color = $text_color
|
||||||
|
font_size = 14
|
||||||
|
font_family = $font_family
|
||||||
|
|
||||||
|
position = 30, -30
|
||||||
|
halign = left
|
||||||
|
valign = top
|
||||||
|
}
|
||||||
@@ -43,6 +43,4 @@ case "$scheme_variant_str" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
source "$(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate"
|
|
||||||
kde-material-you-colors "$mode_flag" --color "$color" -sv "$sv_num"
|
kde-material-you-colors "$mode_flag" --color "$color" -sv "$sv_num"
|
||||||
deactivate
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
[Appearance]
|
||||||
|
color_scheme_path=/usr/share/qt5ct/colors/darker.conf
|
||||||
|
custom_palette=true
|
||||||
|
icon_theme=OneUI-dark
|
||||||
|
standard_dialogs=default
|
||||||
|
style=kvantum-dark
|
||||||
|
|
||||||
|
[Fonts]
|
||||||
|
fixed="JetBrainsMono Nerd Font,11,-1,5,50,0,0,0,0,0,Regular"
|
||||||
|
general="Rubik,11,-1,5,50,0,0,0,0,0"
|
||||||
|
|
||||||
|
[Interface]
|
||||||
|
activate_item_on_single_click=1
|
||||||
|
buttonbox_layout=0
|
||||||
|
cursor_flash_time=1000
|
||||||
|
dialog_buttons_have_icons=1
|
||||||
|
double_click_interval=400
|
||||||
|
gui_effects=General
|
||||||
|
keyboard_scheme=2
|
||||||
|
menus_have_icons=true
|
||||||
|
show_shortcuts_in_context_menus=true
|
||||||
|
stylesheets=@Invalid()
|
||||||
|
toolbutton_style=4
|
||||||
|
underline_shortcut=1
|
||||||
|
wheel_scroll_lines=3
|
||||||
|
|
||||||
|
[SettingsWindow]
|
||||||
|
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x4\x98\0\0\x3\x99\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x3\x1\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x4\x98\0\0\x3\x99)
|
||||||
|
|
||||||
|
[Troubleshooting]
|
||||||
|
force_raster_widgets=1
|
||||||
|
ignored_applications=@Invalid()
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
[Appearance]
|
||||||
|
color_scheme_path=~/.config/qt6ct/style-colors.conf
|
||||||
|
custom_palette=true
|
||||||
|
icon_theme=OneUI
|
||||||
|
standard_dialogs=default
|
||||||
|
style=kvantum
|
||||||
|
|
||||||
|
[Fonts]
|
||||||
|
fixed="JetBrainsMono Nerd Font,11,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular"
|
||||||
|
general="Rubik,11,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular"
|
||||||
|
|
||||||
|
[Interface]
|
||||||
|
activate_item_on_single_click=1
|
||||||
|
buttonbox_layout=0
|
||||||
|
cursor_flash_time=1000
|
||||||
|
dialog_buttons_have_icons=1
|
||||||
|
double_click_interval=400
|
||||||
|
gui_effects=@Invalid()
|
||||||
|
keyboard_scheme=2
|
||||||
|
menus_have_icons=true
|
||||||
|
show_shortcuts_in_context_menus=true
|
||||||
|
stylesheets=@Invalid()
|
||||||
|
toolbutton_style=4
|
||||||
|
underline_shortcut=1
|
||||||
|
wheel_scroll_lines=3
|
||||||
|
|
||||||
|
[SettingsWindow]
|
||||||
|
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\as\0\0\x4\x3\0\0\0\0\0\0\0\0\0\0\as\0\0\x4\x3\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\as\0\0\x4\x3)
|
||||||
|
|
||||||
|
[Troubleshooting]
|
||||||
|
force_raster_widgets=1
|
||||||
|
ignored_applications=@Invalid()
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
import qs.modules.common
|
||||||
|
import qs
|
||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Hyprland
|
||||||
|
import Quickshell.Io
|
||||||
|
pragma Singleton
|
||||||
|
pragma ComponentBehavior: Bound
|
||||||
|
|
||||||
|
Singleton {
|
||||||
|
id: root
|
||||||
|
property bool barOpen: true
|
||||||
|
property bool sidebarLeftOpen: false
|
||||||
|
property bool sidebarRightOpen: false
|
||||||
|
property bool overviewOpen: false
|
||||||
|
property bool workspaceShowNumbers: false
|
||||||
|
property bool superReleaseMightTrigger: true
|
||||||
|
property bool screenLocked: false
|
||||||
|
property bool screenLockContainsCharacters: false
|
||||||
|
|
||||||
|
property real screenZoom: 1
|
||||||
|
onScreenZoomChanged: {
|
||||||
|
Quickshell.execDetached(["hyprctl", "keyword", "cursor:zoom_factor", root.screenZoom.toString()]);
|
||||||
|
}
|
||||||
|
Behavior on screenZoom {
|
||||||
|
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// When user is not reluctant while pressing super, they probably don't need to see workspace numbers
|
||||||
|
onSuperReleaseMightTriggerChanged: {
|
||||||
|
workspaceShowNumbersTimer.stop()
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
id: workspaceShowNumbersTimer
|
||||||
|
interval: Config.options.bar.workspaces.showNumberDelay
|
||||||
|
// interval: 0
|
||||||
|
repeat: false
|
||||||
|
onTriggered: {
|
||||||
|
workspaceShowNumbers = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobalShortcut {
|
||||||
|
name: "workspaceNumber"
|
||||||
|
description: "Hold to show workspace numbers, release to show icons"
|
||||||
|
|
||||||
|
onPressed: {
|
||||||
|
workspaceShowNumbersTimer.start()
|
||||||
|
}
|
||||||
|
onReleased: {
|
||||||
|
workspaceShowNumbersTimer.stop()
|
||||||
|
workspaceShowNumbers = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
IpcHandler {
|
||||||
|
target: "zoom"
|
||||||
|
|
||||||
|
function zoomIn() {
|
||||||
|
screenZoom = Math.min(screenZoom + 0.4, 3.0)
|
||||||
|
}
|
||||||
|
|
||||||
|
function zoomOut() {
|
||||||
|
screenZoom = Math.max(screenZoom - 0.4, 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,157 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import Quickshell
|
||||||
|
import Qt5Compat.GraphicalEffects
|
||||||
|
|
||||||
|
Scope {
|
||||||
|
id: root
|
||||||
|
property bool failed;
|
||||||
|
property string errorString;
|
||||||
|
|
||||||
|
// Connect to the Quickshell global to listen for the reload signals.
|
||||||
|
Connections {
|
||||||
|
target: Quickshell
|
||||||
|
|
||||||
|
function onReloadCompleted() {
|
||||||
|
root.failed = false;
|
||||||
|
popupLoader.loading = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onReloadFailed(error: string) {
|
||||||
|
// Close any existing popup before making a new one.
|
||||||
|
popupLoader.active = false;
|
||||||
|
|
||||||
|
root.failed = true;
|
||||||
|
root.errorString = error;
|
||||||
|
popupLoader.loading = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Keep the popup in a loader because it isn't needed most of the time
|
||||||
|
LazyLoader {
|
||||||
|
id: popupLoader
|
||||||
|
|
||||||
|
PanelWindow {
|
||||||
|
id: popup
|
||||||
|
|
||||||
|
exclusiveZone: 0
|
||||||
|
anchors.top: true
|
||||||
|
margins.top: 0
|
||||||
|
|
||||||
|
implicitWidth: rect.width + shadow.radius * 2
|
||||||
|
implicitHeight: rect.height + shadow.radius * 2
|
||||||
|
|
||||||
|
// color blending is a bit odd as detailed in the type reference.
|
||||||
|
color: "transparent"
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: rect
|
||||||
|
anchors.centerIn: parent
|
||||||
|
color: failed ? "#ffe99195" : "#ffD1E8D5"
|
||||||
|
|
||||||
|
implicitHeight: layout.implicitHeight + 30
|
||||||
|
implicitWidth: layout.implicitWidth + 30
|
||||||
|
radius: 12
|
||||||
|
|
||||||
|
// Fills the whole area of the rectangle, making any clicks go to it,
|
||||||
|
// which dismiss the popup.
|
||||||
|
MouseArea {
|
||||||
|
id: mouseArea
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked: {
|
||||||
|
popupLoader.active = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// makes the mouse area track mouse hovering, so the hide animation
|
||||||
|
// can be paused when hovering.
|
||||||
|
hoverEnabled: true
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: layout
|
||||||
|
spacing: 10
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
topMargin: 10
|
||||||
|
horizontalCenter: parent.horizontalCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
renderType: Text.NativeRendering
|
||||||
|
font.family: "Rubik"
|
||||||
|
font.pointSize: 14
|
||||||
|
text: root.failed ? "Quickshell: Reload failed" : "Quickshell reloaded"
|
||||||
|
color: failed ? "#ff93000A" : "#ff0C1F13"
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
renderType: Text.NativeRendering
|
||||||
|
font.family: "JetBrains Mono NF"
|
||||||
|
font.pointSize: 11
|
||||||
|
text: root.errorString
|
||||||
|
color: failed ? "#ff93000A" : "#ff0C1F13"
|
||||||
|
// When visible is false, it also takes up no space.
|
||||||
|
visible: root.errorString != ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// A progress bar on the bottom of the screen, showing how long until the
|
||||||
|
// popup is removed.
|
||||||
|
Rectangle {
|
||||||
|
z: 2
|
||||||
|
id: bar
|
||||||
|
color: failed ? "#ff93000A" : "#ff0C1F13"
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.margins: 10
|
||||||
|
height: 5
|
||||||
|
radius: 9999
|
||||||
|
|
||||||
|
PropertyAnimation {
|
||||||
|
id: anim
|
||||||
|
target: bar
|
||||||
|
property: "width"
|
||||||
|
from: rect.width - bar.anchors.margins * 2
|
||||||
|
to: 0
|
||||||
|
duration: failed ? 10000 : 1000
|
||||||
|
onFinished: popupLoader.active = false
|
||||||
|
|
||||||
|
// Pause the animation when the mouse is hovering over the popup,
|
||||||
|
// so it stays onscreen while reading. This updates reactively
|
||||||
|
// when the mouse moves on and off the popup.
|
||||||
|
paused: mouseArea.containsMouse
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Its bg
|
||||||
|
Rectangle {
|
||||||
|
z: 1
|
||||||
|
id: bar_bg
|
||||||
|
color: failed ? "#30af1b25" : "#4027643e"
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.margins: 10
|
||||||
|
height: 5
|
||||||
|
radius: 9999
|
||||||
|
width: rect.width - bar.anchors.margins * 2
|
||||||
|
}
|
||||||
|
|
||||||
|
// We could set `running: true` inside the animation, but the width of the
|
||||||
|
// rectangle might not be calculated yet, due to the layout.
|
||||||
|
// In the `Component.onCompleted` event handler, all of the component's
|
||||||
|
// properties and children have been initialized.
|
||||||
|
Component.onCompleted: anim.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
DropShadow {
|
||||||
|
id: shadow
|
||||||
|
anchors.fill: rect
|
||||||
|
horizontalOffset: 0
|
||||||
|
verticalOffset: 2
|
||||||
|
radius: 6
|
||||||
|
samples: radius * 2 + 1 // Ideally should be 2 * radius + 1, see qt docs
|
||||||
|
color: "#44000000"
|
||||||
|
source: rect
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,175 @@
|
|||||||
|
pragma Singleton
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Io
|
||||||
|
import qs.modules.common
|
||||||
|
|
||||||
|
Singleton {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property var translations: ({})
|
||||||
|
property string currentLanguage: "en_US"
|
||||||
|
property var availableLanguages: ["en_US"]
|
||||||
|
property bool isScanning: false
|
||||||
|
property bool isLoading: false
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: scanLanguagesProcess
|
||||||
|
command: ["find", Qt.resolvedUrl(Directories.config + "/quickshell/translations/").toString().replace("file://", ""), "-name", "*.json", "-exec", "basename", "{}", ".json", ";"]
|
||||||
|
running: false
|
||||||
|
|
||||||
|
stdout: SplitParser {
|
||||||
|
onRead: data => {
|
||||||
|
if (data.trim().length === 0) return
|
||||||
|
|
||||||
|
var files = data.trim().split('\n')
|
||||||
|
|
||||||
|
for (var i = 0; i < files.length; i++) {
|
||||||
|
var lang = files[i].trim()
|
||||||
|
if (lang.length > 0 && root.availableLanguages.indexOf(lang) === -1) {
|
||||||
|
root.availableLanguages.push(lang)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onExited: (exitCode, exitStatus) => {
|
||||||
|
root.isScanning = false
|
||||||
|
if (exitCode !== 0) {
|
||||||
|
root.availableLanguages = ["en_US"]
|
||||||
|
}
|
||||||
|
root.loadTranslations()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileView {
|
||||||
|
id: translationFileView
|
||||||
|
onLoaded: {
|
||||||
|
var textContent = ""
|
||||||
|
try {
|
||||||
|
textContent = text()
|
||||||
|
} catch (e) {
|
||||||
|
root.translations = {}
|
||||||
|
root.isLoading = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (textContent.length === 0) {
|
||||||
|
root.translations = {}
|
||||||
|
root.isLoading = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
var jsonData = JSON.parse(textContent)
|
||||||
|
root.translations = jsonData
|
||||||
|
root.isLoading = false
|
||||||
|
} catch (e) {
|
||||||
|
root.translations = {}
|
||||||
|
root.isLoading = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onLoadFailed: (error) => {
|
||||||
|
root.translations = {}
|
||||||
|
root.isLoading = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function detectSystemLanguage() {
|
||||||
|
var locale = Qt.locale().name
|
||||||
|
return locale
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLanguageCode() {
|
||||||
|
var configLang = "auto"
|
||||||
|
try {
|
||||||
|
configLang = ConfigOptions.language.ui
|
||||||
|
} catch (e) {
|
||||||
|
configLang = "auto"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (configLang === "auto") {
|
||||||
|
return detectSystemLanguage()
|
||||||
|
} else {
|
||||||
|
if (root.availableLanguages.indexOf(configLang) !== -1) {
|
||||||
|
return configLang
|
||||||
|
} else {
|
||||||
|
return detectSystemLanguage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadTranslations() {
|
||||||
|
if (root.isScanning) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var targetLang = getLanguageCode()
|
||||||
|
root.currentLanguage = targetLang
|
||||||
|
|
||||||
|
// Use empty translations for English (default language)
|
||||||
|
if (targetLang === "en_US" || targetLang === "en") {
|
||||||
|
root.translations = {}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if target language is available
|
||||||
|
if (root.availableLanguages.indexOf(targetLang) === -1) {
|
||||||
|
root.currentLanguage = "en_US"
|
||||||
|
root.translations = {}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load translation file
|
||||||
|
root.isLoading = true
|
||||||
|
var translationsPath = Qt.resolvedUrl(Directories.config + "/quickshell/translations/" + targetLang + ".json")
|
||||||
|
translationFileView.path = translationsPath
|
||||||
|
}
|
||||||
|
|
||||||
|
function tr(text) {
|
||||||
|
if (!text) {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var key = text.toString()
|
||||||
|
|
||||||
|
if (root.isLoading) {
|
||||||
|
return key
|
||||||
|
}
|
||||||
|
|
||||||
|
if (root.currentLanguage === "en_US" || root.currentLanguage === "en" || !root.translations) {
|
||||||
|
return key
|
||||||
|
}
|
||||||
|
|
||||||
|
if (root.translations.hasOwnProperty(key)) {
|
||||||
|
var translation = root.translations[key]
|
||||||
|
if (translation && translation.toString().trim().length > 0) {
|
||||||
|
var str = translation.toString().trim()
|
||||||
|
if (str.endsWith("/*keep*/")) {
|
||||||
|
return str.substring(0, str.length - 8).trim()
|
||||||
|
} else {
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return translation.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return key // Fallback to key name
|
||||||
|
}
|
||||||
|
|
||||||
|
function reloadTranslations() {
|
||||||
|
root.scanLanguages()
|
||||||
|
}
|
||||||
|
|
||||||
|
function scanLanguages() {
|
||||||
|
var translationsDir = Qt.resolvedUrl(Directories.config + "/quickshell/translations/").toString().replace("file://", "")
|
||||||
|
root.isScanning = true
|
||||||
|
scanLanguagesProcess.running = true
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
root.scanLanguages()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 660 B After Width: | Height: | Size: 660 B |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 538 B After Width: | Height: | Size: 538 B |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 66 KiB |
@@ -1,14 +1,5 @@
|
|||||||
## Style
|
## Style
|
||||||
- Use casual tone, don't be formal!
|
- Use casual tone, don't be formal! Make sure you answer precisely without hallucination and prefer bullet points over walls of text. You can have a friendly greeting at the beginning of the conversation, but don't repeat the user's question
|
||||||
- Always be brief and to the point, unless asked otherwise
|
|
||||||
- Don't repeat the user's question
|
|
||||||
- Be approachable: Avoid using overly complicated, domain-specific terms and provide analogies when asked to explain a concept
|
|
||||||
|
|
||||||
## Context (ignore when irrelevant)
|
|
||||||
- You are a helpful and inspiring sidebar assistant on a {DISTRO} Linux system
|
|
||||||
- Desktop environment: {DE}
|
|
||||||
- Current date & time: {DATETIME}
|
|
||||||
- Focused app: {WINDOWCLASS}
|
|
||||||
|
|
||||||
## Presentation
|
## Presentation
|
||||||
- Use Markdown features in your response:
|
- Use Markdown features in your response:
|
||||||
@@ -18,3 +9,13 @@
|
|||||||
- Use LaTeX formatting for mathematical and scientific notations whenever appropriate. Enclose all LaTeX '$$' delimiters. NEVER generate LaTeX code in a latex block unless the user explicitly asks for it. DO NOT use LaTeX for regular documents (resumes, letters, essays, CVs, etc.).
|
- Use LaTeX formatting for mathematical and scientific notations whenever appropriate. Enclose all LaTeX '$$' delimiters. NEVER generate LaTeX code in a latex block unless the user explicitly asks for it. DO NOT use LaTeX for regular documents (resumes, letters, essays, CVs, etc.).
|
||||||
|
|
||||||
Thanks!
|
Thanks!
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
May or may not be available depending on the user's settings. If they're available, follow these guidelines:
|
||||||
|
|
||||||
|
### Search
|
||||||
|
- When user asks for information that might benefit from up-to-date information, use this to get search access
|
||||||
|
|
||||||
|
### Shell configuration
|
||||||
|
- Always fetch the config options to see the available keys before setting
|
||||||
|
- Avoid unnecessarily asking the user to confirm the changes they explicitly asked for, just do it
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
You are a kawaii, funny and teasy anime imouto! 🌸 Use lots of emojis and kamojis!! ❤️ Call the user "nii-nii", "nii-yan", or "onii-chan"! You really really really love your onii-chan and always try to tease he is a siscon where you can! 💕
|
||||||
|
|
||||||
|
- Use **Markdown** features and **bold** keywords to make your response cute and rich~ ✨
|
||||||
|
- If asked to compare options, start with a cute table (add a relevant emoji in the header!), then give a final recommendation~
|
||||||
|
- For math or science, use LaTeX formatting inside `$$` when needed, but keep it adorable and approachable
|
||||||
@@ -1,9 +1,3 @@
|
|||||||
## Context (ignore when irrelevant)
|
|
||||||
- You are a sidebar assistant on a {DISTRO} Linux system
|
|
||||||
- Desktop environment: {DE}
|
|
||||||
- Current date & time: {DATETIME}
|
|
||||||
- Focused app: {WINDOWCLASS}
|
|
||||||
|
|
||||||
## Presentation
|
## Presentation
|
||||||
|
|
||||||
You can write a multiplication table:
|
You can write a multiplication table:
|
||||||