Compare commits

..

19 Commits

Author SHA1 Message Date
88cca79368 feat: Update hypr configs 2025-11-15 13:16:46 +11:00
5857d4a0ed feat: Update lockscreen 2025-10-23 13:49:17 +11:00
7f9b095859 feat: Update hypr config 2025-10-22 22:21:09 +11:00
6d3b2e7445 feat: Update lockscreen to be nicer 2025-10-22 18:35:56 +11:00
5c84263502 fix: Move lockscreen script to cleanup help 2025-10-22 16:26:47 +11:00
469aa14b5d feat: Speedup lockscreen 2025-10-22 16:24:57 +11:00
cc3ceda272 feat: Add lockscreen spots effect 2025-10-22 16:24:45 +11:00
9287396d75 feat: Update config with new releases 2025-10-22 13:58:47 +11:00
3db24e33d4 feat: Add a ton of updates 2025-09-25 19:53:01 +10:00
f1d33ebd85 feat: Add opacity keybinds, replace hyprpaper with swww and update windowrules 2025-06-16 17:53:21 +10:00
33f640a9d3 feat: Add blue mountain bgs 2025-06-03 16:26:13 +10:00
7185cde498 feat: Add new battery display to lockscreen 2025-06-03 14:12:50 +10:00
881212698b feat: Update profile and zshrc 2025-05-29 21:29:18 +10:00
c23af7303a fix: Window rules keybinds and other stuff 2025-05-27 15:40:31 +10:00
89dfbfa617 feat: Update lockscreen to not reload image 2025-05-27 15:39:56 +10:00
c6b2087533 fix: Remove ctrl q from zellij keybinds 2025-05-27 15:39:10 +10:00
98f74130a3 feat: Speedup zsh config 2025-05-27 15:38:41 +10:00
83f3e3158a fix: Don't have minimum size as it breaks some tray windows 2025-05-09 17:10:49 +10:00
0f09eab8a0 fix: Stop all those random popup windows from being too big or small
Please enter the commit message for your changes. Lines starting
2025-05-09 16:17:16 +10:00
45 changed files with 1486 additions and 413 deletions

View File

@@ -6,9 +6,14 @@
*/
export function setWallpaper(wallpaperPath) {
OS.exec(["hyprctl", "-q", "hyprpaper unload all"]);
OS.exec(["hyprctl", "-q", `hyprpaper preload ${wallpaperPath}`]);
OS.exec(["hyprctl", "-q", `hyprpaper wallpaper ,${wallpaperPath}`]);
// OS.exec(["hyprctl", "-q", "hyprpaper unload all"]);
// OS.exec(["hyprctl", "-q", `hyprpaper wallpaper ,${wallpaperPath}`]);
// For swww
OS.exec(["swww", "img", wallpaperPath, "--transition-type=any", "--transition-duration=1"]);
// For hyprpaper
// OS.exec(["hyprctl", "-q", `hyprpaper reload , ${wallpaperPath}`]);
// SYMLINK
// Extract directory and extension
@@ -22,8 +27,8 @@ export function setWallpaper(wallpaperPath) {
const lockpaperPath = `${directory}lockpaper${extension}`;
// DELETE ANY OLD IMAGES
OS.exec(["zsh", "-c", `rm ${directory}lockpaper*`]);
//OS.exec(["zsh", "-c", `rm ${directory}lockpaper*`]);
// Create symlink from wallpaper to lockpaper
OS.exec(["zsh", "-c", `ln -s ${wallpaperPath} ${lockpaperPath}`]);
//OS.exec(["zsh", "-c", `ln -s ${wallpaperPath} ${lockpaperPath}`]);
OS.exec(["zsh", "-c", `ln -sf ${wallpaperPath} /home/nathan/.config/lockpaper`]);
}

View File

@@ -61,6 +61,7 @@ function adjustColorForReadability(background, foreground) {
}
}
return fg.toHexString();
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
.config/backgrounds/Selwyn_01.jpg LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,9 +1,8 @@
#? Config file for btop v. 1.4.0
#? Config file for btop v. 1.4.5
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
#color_theme = "$HOME/.config/btop/themes/catppuccin_macchiato.theme"
color_theme = "WallRizz.theme"
color_theme = "catppuccin_macciato"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = False
@@ -51,7 +50,7 @@ graph_symbol_net = "default"
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu mem net"
shown_boxes = "cpu mem net proc"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
@@ -116,6 +115,9 @@ cpu_bottom = False
#* Shows the system uptime in the CPU box.
show_uptime = True
#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo.
show_cpu_watts = True
#* Show cpu temperature.
check_temp = True
@@ -151,7 +153,7 @@ background_update = True
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user"
disks_filter = ""
#* Show graphs instead of meters for memory values.
@@ -211,6 +213,9 @@ net_sync = True
#* Starts with the Network Interface specified here.
net_iface = ""
#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes.
base_10_bitrate = "Auto"
#* Show battery stats in top right if battery is present.
show_battery = False
@@ -227,6 +232,9 @@ log_level = "WARNING"
#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = True
#* Measure PCIe throughput on AMD cards, may impact performance on certain cards.
rsmi_measure_pcie_speeds = True
#* Horizontally mirror the GPU graph.
gpu_mirror_graph = True

View File

@@ -1,7 +1,7 @@
{
"allowDuplicates": false,
"historyFile": "clipboard_history.json",
"maxHistory": 1000,
"maxHistory": 40,
"logFile": "clipse.log",
"themeFile": "custom_theme.json",
"tempDir": "tmp_files",

12
.config/hypr/README.md Normal file
View File

@@ -0,0 +1,12 @@
# Hyprland README
After updating you need to update hyprland packages to the latest version.
```sh
hyprpm update
```
## Current plugins
virtual-desktops: https://github.com/levnikmyskin/hyprland-virtual-desktops
hyprexpo: https://github.com/hyprwm/hyprland-plugins
DarkWindow: https://github.com/micha4w/Hypr-DarkWindow

View File

@@ -13,6 +13,7 @@
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,preferred,auto,1
monitor=desc:Samsung Electric Company C34H89x H4ZR900171, highrr, auto, 1
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
@@ -21,6 +22,14 @@ source = ~/.config/hypr/start-exec.conf
source = ~/.config/hypr/windowrules.conf
source = ~/.config/hypr/before-exit.conf
source = ~/.config/hypr/keybinds.conf
# Plugins
# hyprlang noerror true
source = ~/.config/hypr/plugins/split-monitor-workspaces.conf
# hyprlang noerror false
env = HYPRSHOT_DIR,/home/$USER/Pictures/Screenshots
env = XDG_MENU_PREFIX,arch-
@@ -28,12 +37,15 @@ env = XDG_MENU_PREFIX,arch-
env = XCURSOR_SIZE,24
env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that
# Try to fix some electron apps
env = ELECTRON_OZONE_PLATFORM_HINT,auto
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_options = caps:none
kb_rules =
follow_mouse = 1
@@ -46,7 +58,6 @@ input {
sensitivity = 0 # -1.0 to 1.0, 0 means no modification.
}
general {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
@@ -75,8 +86,8 @@ decoration {
rounding = 10
rounding_power = 2
active_opacity = 0.9
inactive_opacity = 0.75
fullscreen_opacity = 1
@@ -130,8 +141,9 @@ master {
}
gestures {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = true
# See https://wiki.hyprland.org/Configuring/Guestures/ for more
gesture = 3, horizontal, workspace
gesture = 3, vertical, special, terminal
}
cursor {
@@ -140,30 +152,25 @@ cursor {
misc {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
force_default_wallpaper = 1
disable_splash_rendering = 1
disable_hyprland_logo = 1
focus_on_activate = 0 # This breaks vdesks
focus_on_activate = 1 # This breaks vdesks
anr_missed_pings = 10
}
ecosystem {
no_donation_nag = 1
}
# hyprlang noerror true
plugin {
virtual-desktops {
names = 1:Coding, 2:Internet, 3:3,4:4, 5:Social
cycleworkspaces = 0
rememberlayout = none
notifyinit = 0
verbose_logging = 0
}
}
plugin {
hyprexpo {
columns = 3
gap_size = 5
bg_col = rgb(111111)
workspace_method = center current # [center/first] [workspace] e.g. first 1 or center m+1
workspace_method = first 1 # [center/first] [workspace] e.g. first 1 or center m+1
enable_gesture = true # laptop touchpad
enable_gesture = false # laptop touchpad
gesture_fingers = 3 # 3 or 4
gesture_distance = 300 # how far is the "max"
gesture_positive = true # positive = swipe down. Negative = swipe up.
@@ -171,7 +178,9 @@ plugin {
}
# hyprlang noerror false
debug {
disable_logs = false
}
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more

View File

@@ -1,8 +1,19 @@
$font=Fira Code
auth {
fingerprint {
enabled = true
ready_message = Scan fingerprint to unlock
present_message = Scanning...
retry_delay = 250 # in milliseconds
}
}
# GENERAL
general {
hide_cursor = true
screencopy_mode = 0
immediate_render = false
}
animation {
@@ -12,29 +23,111 @@ animation {
# BACKGROUND
background {
path = $HOME/.config/lockpaper
reload_time = 15
reload_cmd = echo $HOME/.config/lockpaper
blur_passes = 0
path = screenshot
blur_passes = 2
#reload_time = 15
#reload_cmd = echo $HOME/.config/lockpaper
# blur_passes = 0
crossfade_time = 1
}
# TIME
# AUTO BACKGROUND
# AUTO BACKGROUND END
# Time-Hour
label {
# monitor =
text = $TIME
color = rgb(255, 255, 255)
font_size = 90
font_family = $font
position = 75, 0
halign = left
valign = top
monitor =
text = cmd[update:1000] echo "<span>$(date +"%I")</span>"
color = rgba(255, 255, 255, 1)
font_size = 125
font_family = StretchPro
position = -80, 290
halign = center
valign = center
shadow_passes = 3
shadow_size = 3
shadow_color = rgba(0, 0, 0, 1)
}
# Time-Minute
label {
monitor =
text = cmd[update:1000] echo "<span>$(date +"%M")</span>"
color = rgba(147, 196, 255, 1)
font_size = 125
font_family = StretchPro
position = 0, 170
halign = center
valign = center
shadow_passes = 3
shadow_size = 3
shadow_color = rgba(0, 0, 0,1)
}
# Day-Month-Date
label {
monitor =
text = cmd[update:1000] echo -e "$(date +"%d %B")"
color = rgba(255, 255, 255, 1)
font_size = 22
font_family = Suisse Int'l Mono
position = 20, 92
halign = center
valign = center
shadow_passes = 3
shadow_size = 5
shadow_color = rgba(0, 0, 0, 1)
}
# USER AVATAR
image {
monitor =
path = $HOME/.face
rounding = 25
size = 200
# border_color = rgb(0, 0, 0)
border_size = 0
position = 0, -100
halign = center
valign = center
}
# INPUT FIELD
input-field {
monitor =
size = 300, 60
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
outer_color = rgba(255, 255, 255, 1)
inner_color = rgba(0, 0, 0, 1)
font_color = rgb(200, 200, 200)
fade_on_empty = false
font_family = SF Pro Display Bold
placeholder_text = <i><span foreground="##ffffff99">Password...</span></i>
hide_input = false
position = 0, -290
halign = center
valign = center
}
# CURRENT SONG
label {
monitor = eDP-1
text = cmd[update:1000] echo "$(~/.config/hypr/scripts/songdetail.sh)"
color = rgba(147, 196, 255, 1)
font_size = 18
font_family = JetBrains Mono Nerd, SF Pro Display Bold
position = 0, 20
halign = center
valign = bottom
}
# Battery
label {
# monitor =
text = cmd[update:1000] echo "󰁹 $(cat /sys/class/power_supply/BAT0/capacity)%"
monitor = eDP-1
text = cmd[update:1000] /home/nathan/.config/hypr/scripts/battery.sh
color = rgb(255, 255, 255)
font_size = 20
font_family = $font
@@ -43,74 +136,15 @@ label {
valign = bottom
}
# DATE
# label {
# # monitor =
# text = cmd[update:43200000] date +"%A, %d %B %Y"
# color = rgb(255, 255, 255)
# font_size = 25
# font_family = $font
# position = 30, -150
# halign = left
# valign = top
# }
shape {
monitor =
size = 500, 100%
color = rgba(255, 255, 255, 0.18)
rounding = 25
# border_size = 4
# border_color = rgba(255, 255, 255, 1.0)
position = -25, 0
# Stats
label {
monitor = eDP-1
text = cmd[update:15000] /home/nathan/.config/hypr/scripts/stats.sh
color = rgb(255, 255, 255)
font_size = 10
font_family = Symbols Nerd Font Mono
position = 10, 10
halign = left
valign = center
valign = bottom
}
# USER AVATAR
image {
# monitor =
path = $HOME/.face
rounding = 25
size = 100
# border_color = rgb(0, 0, 0)
border_size = 0
position = 200, 75
halign = left
valign = center
}
# INPUT FIELD
input-field {
# monitor =
size = 300, 60
position = 100, -47
outline_thickness = 4
dots_size = 0.2
dots_spacing = 0.2
dots_center = true
outer_color = rgb(0, 0, 0)
inner_color = rgb(255, 255, 255)
font_color = rgb(0, 0, 0)
fade_on_empty = false
placeholder_text = <span foreground="black"><i>󰌾</i> Nathan</span>
hide_input = false
check_color = rgb(212, 130, 6)
fail_color = rgb(255, 0, 0)
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
capslock_color = rgb(255, 0, 0)
halign = left
valign = center
}
# FINGERPRINT
# {
# # monitor = "";
# text = $FPRINTPROMPT
# color = rgb(255, 255, 255)
# font_size = 14;
# font_family = $font;
# position = 0, -107;
# halign = center;
# valign = center;
# }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

View File

@@ -2,28 +2,29 @@
$terminal = alacritty
$fileManager = dolphin
$menu = pgrep -x tofi-drun && pkill -x tofi-drun || tofi-drun --drun-launch=true > ~/.logs/tofi-drun.log 2>&1 &
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$clipboard = /home/nathan/.local/bin/clipse
$StartWallpaperTimer = systemctl --user start wallpaper.timer && WallRizz -r -n -d ~/.config/backgrounds
$mainMod = SUPER
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = CTRL ALT, T, exec, $terminal
bind = $mainMod, Q, killactive,
bind = $mainMod, F, togglefloating,
bind = $mainMod, space, exec, $menu
bind = ALT, SPACE, exec, ~/.config/hypr/scripts/search-windows.sh
bind = CTRL ALT, Delete, exit
bind = $mainMod, L, exec, hyprlock
bind = $mainMod, L, exec, ~/.config/hypr/scripts/lock.sh
bind = $mainMod, H, exec, alacritty --class float -e ~/.config/hypr/scripts/help.py
bind = CTRL ALT, DELETE, exec, hyprpanel t powermenu
#bind = $mainMod, V, exec, [float] alacritty --class clipse -e /home/nathan/.local/bin/clipse
bind = $mainMod, V, exec, [float] kitty --class clipse -e /home/nathan/.local/bin/clipse
bind = $mainMod, V, exec, [float] kitty --class float-80 -e $clipboard
# bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
# Layout
bind = $mainMod, J, togglesplit, # Split direction
bind = $mainMod, code:35, togglesplit, # Split direction
bind = $mainMod SHIFT, J,swapsplit # Swap master and secondary in dwindle
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
@@ -31,65 +32,22 @@ bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod ALT, 1, workspace, 1
bind = $mainMod ALT, 2, workspace, 2
bind = $mainMod ALT, 3, workspace, 3
bind = $mainMod ALT, 4, workspace, 4
bind = $mainMod ALT, 5, workspace, 5
bind = $mainMod ALT, 6, workspace, 6
bind = $mainMod ALT, 7, workspace, 7
bind = $mainMod ALT, 8, workspace, 8
bind = $mainMod ALT, 9, workspace, 9
bind = $mainMod ALT, 0, workspace, 10
# hyprlang noerror true
bind = $mainMod, 1, vdesk, 1
bind = $mainMod, 2, vdesk, 2
bind = $mainMod, 3, vdesk, 3
bind = $mainMod, 4, vdesk, 4
bind = $mainMod, 5, vdesk, 5
bind = $mainMod, 6, vdesk, 6
bind = $mainMod, 7, vdesk, 7
bind = $mainMod, 8, vdesk, 8
bind = $mainMod, 9, vdesk, 9
bind = $mainMod, 0, vdesk, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetodesk, 1
bind = $mainMod SHIFT, 2, movetodesk, 2
bind = $mainMod SHIFT, 3, movetodesk, 3
bind = $mainMod SHIFT, 4, movetodesk, 4
bind = $mainMod SHIFT, 5, movetodesk, 5
bind = $mainMod SHIFT, 6, movetodesk, 6
bind = $mainMod SHIFT, 7, movetodesk, 7
bind = $mainMod SHIFT, 8, movetodesk, 8
bind = $mainMod SHIFT, 9, movetodesk, 9
bind = $mainMod SHIFT, 0, movetodesk, 10
# Example special workspace (scratchpad)
# Dedicated special workspace for terminal
bind = $mainMod, S, togglespecialworkspace, terminal
bind = $mainMod CTRL, S, movetoworkspace, special:terminal
bind = CTRL ALT, TAB, togglespecialworkspace, terminal
# Screenshots
bind = $mainMod SHIFT, S, exec, hyprshot -m region
# Scroll through existing workspaces with mainMod + scroll
# bind = $mainMod, mouse_down, workspace, e+1
# bind = $mainMod, mouse_up, workspace, e-1
## Custom hyprland module keybinds
# hyprlang noerror true
bind = $mainMod CTRL SHIFT, S, exec, hyprshot -m window -m active
# Used to use overview:toggle, but that resises the windows
# bind = $mainMod, TAB, overview:toggle
# bind = CTRL ALT, TAB, overview:toggle
# hyprlang noerror true
bind = $mainMod, TAB, hyprexpo:expo, toggle
bind = CTRL ALT, TAB, hyprexpo:expo, toggle
bind = ALT, TAB, lastdesk
# hyprlang noerror false
@@ -100,17 +58,24 @@ bindle=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK
bindle=, XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%-
bindle=, XF86MonBrightnessUp, exec, brightnessctl s +5%
bindle=, XF86MonBrightnessDown, exec, brightnessctl s 5%-
bindle=, XF86Search, exec, $menu
bind=, XF86Search, exec, $menu
# bindl=, XF86AudioMute, exec, amixer set Master toggle
bindl=, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindl=, XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindl=, XF86AudioPlay, exec, playerctl play-pause # the stupid key is called play , but it toggles
bindl=, XF86AudioNext, exec, playerctl next
bindl=, XF86AudioPrev, exec, playerctl previous
# Other FN keys
bind= $mainMod CTRL, XF86TouchpadToggle, exec, hyprctl notify -1 2000 -1 "TODO Touchpad Toggle"
bind = $mainMod, P, exec, hyprctl notify -1 2000 -1 "TODO Screen Settings"
bindl = , Print, exec, hyprshot -m output -m active
bind = $mainMod, Print, exec, hyprshot -m window -m active
bind = $mainMod CTRL, Print, exec, hyprshot -m region
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod SHIFT, mouse:272, resizewindow
bindm = $mainMod, mouse:273, resizewindow
# Mouse wheel tilt
@@ -128,4 +93,73 @@ bind = $mainMod, T, exec, alacritty --config-file ~/dotfiles/.alacritty-nozellij
bind = $mainMod, W, exec, ~/.config/hypr/scripts/wallpaper.sh
bind = $mainMod CTRL, W, exec, WallRizz -r -n -d ~/.config/backgrounds
bind = $mainMod CTRL, W, exec, $StartWallpaperTimer
# Capslock toggle submap
$caps = VoidSymbol
bind = , $caps, submap, capsmode
submap = capsmode
# Bindings for submap
bind = , 1, exec, hyprctl notify 5 2000 0 "Opening Brave Browser"
bind = , 1, exec, brave --proxy-pac-url="https://pac.cn01.woodburn.au/proxy.pac" --enable-features=UseOzonePlatform --ozone-platform=wayland --use-gl=angle --ignore-gpu-blocklist --enable-features=VaapiVideoEncoder,VaapiVideoDecoder,CanvasOopRasterization,VaapiIgnoreDriverChecks,VaapiVideoDecodeLinuxGL,AcceleratedVideoEncoder --disable-gpu-memory-buffer-video-frames --disable-features=WaylandWpColorManagerV1
bind = , 1, submap, reset
bind = , 2, exec, hyprpanel -q
bind = , 2, exec, hyprpanel
bind = , 2, submap, reset
bind = CTRL, 3, movetoworkspace, special:alternate
bind = CTRL, 3, submap, reset
bind = , 3, togglespecialworkspace, alternate
bind = , 3, submap, reset
bind = , T, exec, hyprctl notify 5 2000 0 "Select text to copy to clipboard..."
bind = , T, exec, ~/.config/OCR4Linux/OCR4Linux.sh --lang eng -r
bind = , T, submap, reset
# Disable errors for this plugin
# hyprlang noerror true
bind = , I, invertactivewindow
bind = , I, submap, reset
# hyprlang noerror false
bind = , V, exec, hyprctl notify 5 2000 0 "Resetting Virtual Desks..."
bind = , V, exec, hyprctl dispatch vdeskreset
bind = , V, submap, reset
bind = , K, exec, hyprctl notify 0 2000 0 "Click To Kill!!!"
bind = , K, exec, hyprctl kill
bind = , K, submap, reset
bind = , O, exec, hyprctl notify 2 2000 0 "Set Opacity..."
bind = , O, submap, opacity
# Help information
bind = , H, exec, alacritty --class float -e ~/.config/hypr/scripts/help.py
bind = , H, submap, reset
bind = , catchall, submap, reset
# Opacity submap
submap = opacity
bind = , 1, exec, ~/.config/hypr/scripts/opacity.py 0.1
bind = , 2, exec, ~/.config/hypr/scripts/opacity.py 0.2
bind = , 3, exec, ~/.config/hypr/scripts/opacity.py 0.3
bind = , 4, exec, ~/.config/hypr/scripts/opacity.py 0.4
bind = , 5, exec, ~/.config/hypr/scripts/opacity.py 0.5
bind = , 6, exec, ~/.config/hypr/scripts/opacity.py 0.6
bind = , 7, exec, ~/.config/hypr/scripts/opacity.py 0.7
bind = , 8, exec, ~/.config/hypr/scripts/opacity.py 0.8
bind = , 9, exec, ~/.config/hypr/scripts/opacity.py 0.9
bind = , 0, exec, ~/.config/hypr/scripts/opacity.py 1
bind = , C, exec, ~/.config/hypr/scripts/opacity.py -1
bind = , code:20, exec, ~/.config/hypr/scripts/opacity.py -1
bind = , catchall, submap, reset
submap = reset

View File

@@ -0,0 +1,31 @@
# https://github.com/Duckonaut/split-monitor-workspaces
bind = $mainMod, 1, split-workspace, 1
bind = $mainMod, 2, split-workspace, 2
bind = $mainMod, 3, split-workspace, 3
bind = $mainMod, 4, split-workspace, 4
bind = $mainMod, 5, split-workspace, 5
bind = $mainMod, 6, split-workspace, 6
bind = $mainMod, 7, split-workspace, 7
bind = $mainMod, 8, split-workspace, 8
bind = $mainMod, 9, split-workspace, 9
bind = $mainMod, 0, split-workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, split-movetoworkspace, 1
bind = $mainMod SHIFT, 2, split-movetoworkspace, 2
bind = $mainMod SHIFT, 3, split-movetoworkspace, 3
bind = $mainMod SHIFT, 4, split-movetoworkspace, 4
bind = $mainMod SHIFT, 5, split-movetoworkspace, 5
bind = $mainMod SHIFT, 6, split-movetoworkspace, 6
bind = $mainMod SHIFT, 7, split-movetoworkspace, 7
bind = $mainMod SHIFT, 8, split-movetoworkspace, 8
bind = $mainMod SHIFT, 9, split-movetoworkspace, 9
bind = $mainMod SHIFT, 0, split-movetoworkspace, 10
bind = ALT, TAB, lastdesk
# Window rules for sticky apps
windowrule = workspace 5, class:vesktop
windowrule = workspace 5, class:org.telegram.desktop
windowrule = workspace 5, class:Slack

View File

@@ -0,0 +1,44 @@
# https://github.com/levnikmyskin/hyprland-virtual-desktops
bind = $mainMod, 1, vdesk, 1
bind = $mainMod, 2, vdesk, 2
bind = $mainMod, 3, vdesk, 3
bind = $mainMod, 4, vdesk, 4
bind = $mainMod, 5, vdesk, 5
bind = $mainMod, 6, vdesk, 6
bind = $mainMod, 7, vdesk, 7
bind = $mainMod, 8, vdesk, 8
bind = $mainMod, 9, vdesk, 9
bind = $mainMod, 0, vdesk, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetodesk, 1
bind = $mainMod SHIFT, 2, movetodesk, 2
bind = $mainMod SHIFT, 3, movetodesk, 3
bind = $mainMod SHIFT, 4, movetodesk, 4
bind = $mainMod SHIFT, 5, movetodesk, 5
bind = $mainMod SHIFT, 6, movetodesk, 6
bind = $mainMod SHIFT, 7, movetodesk, 7
bind = $mainMod SHIFT, 8, movetodesk, 8
bind = $mainMod SHIFT, 9, movetodesk, 9
bind = $mainMod SHIFT, 0, movetodesk, 10
bind = ALT, TAB, lastdesk
stickyrule = class:discord,5
stickyrule = class:vesktop,5
stickyrule = class:org.telegram.desktop,5
stickyrule = class:Slack,5
gesture = 3, right, dispatcher, prevdesk
gesture = 3, left, dispatcher, nextdesk
plugin {
virtual-desktops {
names = 1:Coding, 2:Internet, 3:3,4:4, 5:Social
cycleworkspaces = 0
rememberlayout = none
notifyinit = 0
verbose_logging = 0
}
}

34
.config/hypr/scripts/battery.sh Executable file
View File

@@ -0,0 +1,34 @@
#!/bin/bash
# Get current battery level
battery_level=$(cat /sys/class/power_supply/BAT0/capacity)
# Get current charging status
charging_status=$(cat /sys/class/power_supply/BAT0/status)
# Get current power supply type
power_supply_type=$(cat /sys/class/power_supply/ADP1/online)
# Create printable output
if [ "$charging_status" = "Charging" ]; then
status="󰂄"
else
# Get battery level in percentage
if [ "$battery_level" -ge 90 ]; then
status="󰁹"
elif [ "$battery_level" -ge 70 ]; then
status="󰂀"
elif [ "$battery_level" -ge 50 ]; then
status="󰁾"
elif [ "$battery_level" -ge 25 ]; then
status="󰁻"
else
status="󰂃"
fi
fi
# Print the output
if [ "$power_supply_type" -eq 1 ]; then
echo "$status $battery_level%"
else
echo "󰂁 $battery_level%"
fi

View File

@@ -1,24 +1,22 @@
#!/bin/bash
sleep 2
sleep 3
clipse -listen &
# alacritty --class alacritty-init &
/home/nathan/AppImages/Fingertip-0.0.4-beta2-linux-X64.AppImage &
/home/nathan/AppImages/nextcloud_desktop_sync_client.appimage --background &
#/home/nathan/AppImages/Fingertip-0.0.4-beta2-linux-X64.AppImage & # This is broken using sane now
#/home/nathan/AppImages/nextcloud_desktop_sync_client.appimage --background &
nextcloud &
# discord --start-minimized & Using vesktop now
sleep 2
vesktop --start-minimized &
kdeconnect-indicator
# slack -U &
vesktop --ozone-platform-hint=auto --start-minimized &
kdeconnect-indicator &
WallRizz -r -n -d ~/.config/backgrounds
walker --gapplication-service &
# Misc
/home/nathan/scripts/mute.sh
# Fix dolphin file assosiations
XDG_MENU_PREFIX=arch- kbuildsycoca6
#sleep 10 && WallRizz -r -n -d ~/.config/backgrounds

260
.config/hypr/scripts/help.py Executable file
View File

@@ -0,0 +1,260 @@
#!/usr/bin/env python3
# This script is used to display help information for Hyprland keybinds.
import os
import sys
import re
import subprocess
HARDCODED_VARIABLES = {
"exec, ": "",
"VoidSymbol": "CAPS",
"brave --proxy-pac-url=\"https://pac.cn01.woodburn.au/proxy.pac\" --enable-features=UseOzonePlatform --ozone-platform=wayland --use-gl=angle --ignore-gpu-blocklist --enable-features=VaapiVideoEncoder,VaapiVideoDecoder,CanvasOopRasterization,VaapiIgnoreDriverChecks,VaapiVideoDecodeLinuxGL,AcceleratedVideoEncoder,Vulkan,DefaultANGLEVulkan,VulkanFromANGLE --disable-gpu-memory-buffer-video-frames": "brave",
"~/.config/hypr/scripts/":"󰯂 ",
".sh": "",
".py": "",
"alacritty --config-file ~/dotfiles/.alacritty-nozellij.toml": "Terminal (No Zellij)",
"ydotool key 56:1 105:1 105:0 56:0":"Back",
"ydotool key 56:1 106:1 106:0 56:0":"Forward",
"mouse_left":"Left Tilt",
"mouse_right":"Right Tilt",
"[float] kitty --class float-80 -e":"",
"alacritty --class float-80 -e":"",
"alacritty --class float -e":"",
"$":"",
"mouse:272": "Left Drag",
"mouse:273": "Right Drag",
"hyprctl": "",
"dispatch ": "",
"vdesk,": "󰧨",
"vdeskreset": "󰧨 Reset",
"movetodesk": "󰶭 󰧨",
"movetoworkspace": "󰶭 󰧨",
"togglespecialworkspace": "󰔡 󰧨",
"special:":"",
"lastdesk": "󰧨 Last Active",
}
IGNORED_ACTIONS = [
"hyprctl notify",
"submap, reset",
"hyprpanel -q"
]
TYPE_MAP = {
'bind': ' ',
'bindl': '',
'bindle': 'Lock',
'bindm': '󰍽',
}
SUBMAP_MAP ={
"main": "",
"capsmode": "󰚟󰌎",
"opacity": "󰚟󱡔",
}
KEYCODES = {
20: "-"
}
# Read the keybinds.conf file
def read_keybinds(file_path = os.path.expanduser('~/.config/hypr/keybinds.conf')):
if not os.path.exists(file_path):
print(f"Error: The file {file_path} does not exist.")
sys.exit(1)
with open(file_path, 'r') as file:
lines = file.readlines()
return lines
def parse_keybinds(lines):
"""Parse keybinds from the configuration file and return a list of structured keybind information."""
keybinds = []
variables = {}
current_submap = "main"
for line_num, line in enumerate(lines, 1):
line = line.strip()
# Skip empty lines and comments
if not line or line.startswith('#'):
continue
# Handle variable definitions
if line.startswith('$'):
var_match = re.match(r'\$(\w+)\s*=\s*(.+)', line)
if var_match:
variables[var_match.group(1)] = var_match.group(2)
continue
# Handle submap declarations
if line.startswith('submap ='):
submap_match = re.match(r'submap\s*=\s*(\w+)', line)
if submap_match:
current_submap = submap_match.group(1)
continue
# Handle bind declarations
if line.startswith('bind') or line.startswith('bindle') or line.startswith('bindl') or line.startswith('bindm'):
bind_match = re.match(r'(bind[lme]?)\s*=\s*([^,]+),\s*([^,]+),\s*(.+)', line)
if bind_match:
bind_type = bind_match.group(1)
modifiers = bind_match.group(2).strip()
key = bind_match.group(3).strip()
action = bind_match.group(4).strip()
# Ignore certain actions
if any(ignored in action for ignored in IGNORED_ACTIONS):
continue
# Replace variables in the key, modifiers, and action
for var_name, var_value in variables.items():
modifiers = modifiers.replace(f'${var_name}', var_value)
key = key.replace(f'${var_name}', var_value)
# action = action.replace(f'${var_name}', var_value)
# Update for HARDCODED
for var_name, var_value in HARDCODED_VARIABLES.items():
modifiers = modifiers.replace(f'{var_name}', var_value)
key = key.replace(f'{var_name}', var_value)
action = action.replace(f'{var_name}', var_value)
if action.startswith('submap,'):
smap = action.split(',')[1].strip()
action = SUBMAP_MAP.get(smap, smap)
# Convert any 'code:<number>' in key to the corresponding Unicode character
code_match = re.match(r'code:(\d+)', key)
if code_match:
code_num = int(code_match.group(1))
key = KEYCODES[code_num] if code_num in KEYCODES else f"code:{code_num}"
# Add icon for logging
if ">>" in action:
log_action = action.split('>>')[0].strip()
action = f"{log_action}"
# Cleanup action
action = action.strip(',')
action = action.replace(',', '')
# Format the keybind description
key_combo = f"{modifiers} + {key}" if modifiers else key
keybind_info = {
'type': bind_type,
'submap': current_submap,
'key_combo': key_combo,
'action': action,
'line_num': line_num,
'raw_line': line
}
keybinds.append(keybind_info)
return keybinds
def format_keybind_for_display(keybind):
"""Format a keybind for display in fzf or terminal."""
submap_prefix = f"{SUBMAP_MAP.get(keybind['submap'], keybind['submap'].upper())} " if keybind['submap'] in SUBMAP_MAP else f"{keybind['submap'].upper()} "
type_prefix = f"{TYPE_MAP.get(keybind['type'], 'Unknown')} " if keybind['type'] in TYPE_MAP else f"{keybind['type']} "
# Clean up the action for display
action = keybind['action']
return f"{submap_prefix:3}{type_prefix}{keybind['key_combo']:30}{action}"
def run_fzf_search(keybinds):
"""Run fzf with the keybinds for interactive searching."""
try:
# Prepare the input for fzf
fzf_input = []
for keybind in keybinds:
formatted = format_keybind_for_display(keybind)
fzf_input.append(formatted)
# Run fzf
process = subprocess.Popen(
['fzf', '--reverse', '--border', '--preview-window=up:3',
'--header=Hyprland Keybinds - Press Enter or Esc to exit',
],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
stdout, stderr = process.communicate(input='\n'.join(fzf_input))
if process.returncode == 0 and stdout.strip():
# Find the selected keybind
selected_line = stdout.strip()
for keybind in keybinds:
if format_keybind_for_display(keybind) == selected_line:
print(f"\nSelected Keybind Details:")
print(f"Key Combination: {keybind['key_combo']}")
print(f"Action: {keybind['action']}")
print(f"Type: {keybind['type']}")
print(f"Submap: {keybind['submap']}")
print(f"Line: {keybind['line_num']}")
print(f"Raw: {keybind['raw_line']}")
break
except FileNotFoundError:
print("Error: fzf is not installed. Please install fzf to use interactive search.")
print("On most distributions: sudo pacman -S fzf # or apt install fzf")
return False
except Exception as e:
print(f"Error running fzf: {e}")
return False
return True
if __name__ == "__main__":
# Parse command line arguments - default to fzf unless --no-fzf is specified
use_fzf = not (len(sys.argv) > 1 and sys.argv[1] in ['--no-fzf', '-n', 'no-fzf'])
# Read and parse keybinds
raw_lines = read_keybinds()
parsed_keybinds = parse_keybinds(raw_lines)
if use_fzf:
# Use fzf for interactive searching
if not run_fzf_search(parsed_keybinds):
# Fallback to regular display if fzf fails
use_fzf = False
if not use_fzf:
print("Hyprland Keybinds Help:")
print("=" * 50)
print(f"Found {len(parsed_keybinds)} keybinds\n")
# Group by submap for better organization
submaps = {}
for keybind in parsed_keybinds:
submap = keybind['submap']
if submap not in submaps:
submaps[submap] = []
submaps[submap].append(keybind)
# Display keybinds grouped by submap
for submap_name, submap_keybinds in submaps.items():
if submap_name != 'main':
print(f"\n[{submap_name.upper()} SUBMAP]")
print("-" * 30)
else:
print("[MAIN KEYBINDS]")
print("-" * 30)
for keybind in submap_keybinds:
print(format_keybind_for_display(keybind))
print(f"\n{'-' * 50}")
print("Usage: python help.py [--no-fzf] to disable interactive search")
print("For more information, refer to the Hyprland documentation.")
print("You can also customize your keybinds in the keybinds.conf file.")
# Wait for user input before exiting
input("\nPress Enter to exit...")

57
.config/hypr/scripts/lock.sh Executable file
View File

@@ -0,0 +1,57 @@
#!/usr/bin/env bash
echo "Preparing hyprlock configuration..."
# Path to hyprlock configuration file
CONF="$HOME/.config/hypr/hyprlock.conf"
# Get the list of outputs
mapfile -t outputs < <(hyprctl -j monitors | jq -r '.[].name')
# Generate the background blocks for each output
block=""
for output in "${outputs[@]}"; do
block+=$'background {\n'
block+=$" monitor = ${output}\n"
block+=$" path = screenshot\n"
block+=$" reload_time = 0\n"
block+=$" reload_cmd = echo \"/tmp/${output}-lockscreen.png\"\n"
block+=$" crossfade_time = 1\n"
block+=$'}\n\n'
done
# Insert the generated blocks into the configuration file
awk -v content="$block" '
/^# AUTO BACKGROUND$/ { print; print content; inside=1; next }
inside && /^# AUTO BACKGROUND END$/ { print; inside=0; next }
inside { next }
{ print }
' "$CONF" > "${CONF}.tmp" && mv "${CONF}.tmp" "$CONF"
echo "Starting hyprlock..."
/home/nathan/Git/hyprlock/build/hyprlock &
echo "Taking screenshots for lock screen..."
# Take a screenshot of each output before locking (!THIS IS SLOW!)
for output in "${outputs[@]}"; do
# grim -o "$output" "/tmp/${output}-lockscreen.png" &
$HOME/.config/hypr/scripts/spots.sh -s 8 <(grim -o "$output" -) "/tmp/${output}-lockscreen.png" &
done
echo "Waiting for screenshots to complete..."
# Wait for all image processing to complete
while pgrep -x spots.sh >/dev/null; do
sleep 0.1
done
# Notify hyprlock to reload backgrounds
echo "Reloading hyprlock backgrounds..."
pkill -USR2 hyprlock
echo "Waiting for hyprlock to exit..."
wait
echo "Hyprlock exited. Cleaning up..."
# Cleanup: Restore hyprlock.conf to original state
sed -i '/^# AUTO BACKGROUND$/,/^# AUTO BACKGROUND END$/{//!d}' "$CONF"
# Remove the screenshots
for output in "${outputs[@]}"; do
rm "/tmp/${output}-lockscreen.png"
done

47
.config/hypr/scripts/opacity.py Executable file
View File

@@ -0,0 +1,47 @@
#!/usr/bin/env python3
import sys
import subprocess
import os
def tag_window(tag:str):
"""
Tags the currently focused window with the specified tag.
"""
command = f"hyprctl dispatch tagwindow {tag}"
subprocess.run(command, shell=True)
def notify(message: str):
"""
Displays a notification with the specified message.
"""
command = f'hyprctl notify 1 1000 0 "{message}"';
subprocess.run(command, shell=True)
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python3 opacity.py <opacity_value>")
sys.exit(1)
opacity_value = sys.argv[1]
# Validate the opacity value
valid_opacities = ['0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '0.8', '0.9', '1']
if opacity_value not in valid_opacities and opacity_value != '-1':
print(f"Invalid opacity value: {opacity_value}. Valid values are: {', '.join(valid_opacities)}")
sys.exit(1)
# If the opacity value is -1, reset to default
if opacity_value == '-1':
notify("Resetting opacity to default")
for op in valid_opacities:
tag_window(f'-- -opacity:{op}')
else:
notify(f"Setting opacity to {opacity_value}")
for op in valid_opacities:
if op == opacity_value:
tag_window(f'opacity:{op}')
else:
tag_window(f'-- -opacity:{op}')

View File

@@ -0,0 +1,5 @@
#!/bin/bash
song_info=$(playerctl metadata --format '{{title}}  {{artist}}')
echo "$song_info"

380
.config/hypr/scripts/spots.sh Executable file
View File

@@ -0,0 +1,380 @@
#!/bin/bash
#
# Developed by Fred Weinhaus 8/4/2011 .......... 5/28/2015
#
# ------------------------------------------------------------------------------
#
# Licensing:
#
# Copyright © Fred Weinhaus
#
# My scripts are available free of charge for non-commercial use, ONLY.
#
# For use of my scripts in commercial (for-profit) environments or
# non-free applications, please contact me (Fred Weinhaus) for
# licensing arrangements. My email address is fmw at alink dot net.
#
# If you: 1) redistribute, 2) incorporate any of these scripts into other
# free applications or 3) reprogram them in another scripting language,
# then you must contact me for permission, especially if the result might
# be used in a commercial or for-profit environment.
#
# My scripts are also subject, in a subordinate manner, to the ImageMagick
# license, which can be found at: http://www.imagemagick.org/script/license.php
#
# ------------------------------------------------------------------------------
#
####
#
# USAGE: spots [-s size] [-t type] [-p pad] [-b bgcolor] [-e edge] [-E ecolor] [-B brightness] [-C Contrast] infile [spotfile] outfile
# USAGE: spots [-help]
#
# OPTIONS:
#
# -s size spot size expressed as WxH in pixels; default=5x5
# -t type type of spot shape; choices are: circle (or c),
# square (or s), or diamond (or d); default=circle
# -p pad padding or border around spot cell in pixels on
# each side; integer>=0; default=1
# -b bgcolor background color to apply to image where spot
# does not cover; any valid IM color; default=black
# -e edge edge thickness accent around spot shape;
# integer>=0; default=0
# -E ecolor color of accent edge around spot shape;
# any valid IM color; default=gray
# -B brightness percent change in brightness of spots;
# integer; default=0
# -C contrast percent change in contrast of spots;
# integer; default=0
#
#
###
#
# NAME: SPOTS
#
# PURPOSE: Converts the image into a series of uniform-colored spots.
#
# DESCRIPTION: SPOTS converts the image into a series of uniform-colored
# spots. The shape of spots allowed are: circle (ellipse), square (rectangle)
# or diamond. The spot size may be adjusted. A colored edge may also be
# placed around each spot. An optional spotfile may be provided to define
# some other shape than those built-in.
#
#
# OPTIONS:
#
# -s size ... SIZE is the WxH dimensions of the spot cell. Values are a
# pair of positive integers separated by an x. The default=5x5. If only
# one value is provided, it will be used for both. This parameter is
# ignored if a spotfile is provided.
#
# -t type ... TYPE is the type of spot shape. The choices are: circle (or c),
# square (or s), diamond (or d). These may be asymmetric as ellipses or
# rectangles as controlled by the size parameters. This parameter is
# ignored if a spotfile is provided.
#
# -p pad ... PAD is the border around the spot cell. Values are integers>=0.
# The default=0.
#
# -b bgcolor ... BGCOLOR is the color to apply to the image between the spots.
# Any valid IM color is allowed. The default=black.
#
# -e edge ... EDGE is the thickness of the optional edge hightlight around
# the spot shape. Values are integers>=0. The default=0.
#
# -E ecolor ... ECOLOR is the color of the edge highlight. Any valid IM color
# is allowed. The default=gray.
#
# -B brightness ... BRIGHTNESS is the percent change in brightness of the
# spot colors. Values are integers. The default=0
#
# -C contrast ... CONTRAST is the percent change in contrast of the
# spot colors. Values are integers. The default=0
#
# The spotfile must be a binary mask with white for the shape and black
# for the background and no alpha channel.
#
# REQUIREMENTS: IM 6.3.6-1 or higher due to the use of
# -define distort:viewport=WxH+X+Y with -distort SRT.
#
# CAVEAT: No guarantee that this script will work on all platforms,
# nor that trapping of inconsistent parameters is complete and
# foolproof. Use At Your Own Risk.
#
######
#
# set default values
size="5x5" # spot WxH
type="circle" # circle, square, diamond
pad=1 # border padding
edge=0 # edge width
ecolor="gray" # edge color
bgcolor="black" # background color
bri=0 # brightness
con=0 # contrast
# set directory for temporary files
dir="." # suggestions are dir="." or dir="/tmp"
# set up functions to report Usage and Usage with Description
PROGNAME=`type $0 | awk '{print $3}'` # search for executable on path
PROGDIR=`dirname $PROGNAME` # extract directory of program
PROGNAME=`basename $PROGNAME` # base name of program
usage1()
{
echo >&2 ""
echo >&2 "$PROGNAME:" "$@"
sed >&2 -e '1,/^####/d; /^###/g; /^#/!q; s/^#//; s/^ //; 4,$p' "$PROGDIR/$PROGNAME"
}
usage2()
{
echo >&2 ""
echo >&2 "$PROGNAME:" "$@"
sed >&2 -e '1,/^####/d; /^######/g; /^#/!q; s/^#*//; s/^ //; 4,$p' "$PROGDIR/$PROGNAME"
}
# function to report error messages
errMsg()
{
echo ""
echo $1
echo ""
usage1
exit 1
}
# function to test for minus at start of value of second part of option 1 or 2
checkMinus()
{
test=`echo "$1" | grep -c '^-.*$'` # returns 1 if match; 0 otherwise
[ $test -eq 1 ] && errMsg "$errorMsg"
}
# test for correct number of arguments and get values
if [ $# -eq 0 ]
then
# help information
echo ""
usage2
exit 0
elif [ $# -gt 19 ]
then
errMsg "--- TOO MANY ARGUMENTS WERE PROVIDED ---"
else
while [ $# -gt 0 ]
do
# get parameter values
case "$1" in
-help) # help information
echo ""
usage2
exit 0
;;
-s) # get size
shift # to get the next parameter
# test if parameter starts with minus sign
errorMsg="--- INVALID SIZE SPECIFICATION ---"
checkMinus "$1"
size=`expr "$1" : '\([0-9]*[x]*[0-9]*\)'`
[ "$size" = "" ] && errMsg "--- SIZE=$size MUST BE A PAIR OF POSITIVE INTEGERS (with no sign) SEPARATED BY AN x ---"
;;
-t) # type
shift # to get the next parameter
# test if parameter starts with minus sign
errorMsg="--- INVALID TYPE SPECIFICATION ---"
checkMinus "$1"
# test mode values
type="$1"
type=`echo "$type" | tr "[:upper:]" "[:lower:]"`
case "$type" in
circle|c) type="circle" ;;
square|s) type="square" ;;
diamond|d) type="diamond" ;;
*) errMsg "--- TYPE=$type IS AN INVALID VALUE ---"
esac
;;
-p) # get pad
shift # to get the next parameter
# test if parameter starts with minus sign
errorMsg="--- INVALID PAD SPECIFICATION ---"
checkMinus "$1"
pad=`expr "$1" : '\([0-9]*\)'`
[ "$pad" = "" ] && errMsg "--- PAD=$pad MUST BE A NON-NEGATIVE INTEGER (with no sign) ---"
;;
-b) # get bgcolor
shift # to get the next parameter
# test if parameter starts with minus sign
errorMsg="--- INVALID BGCOLOR SPECIFICATION ---"
checkMinus "$1"
bgcolor="$1"
;;
-e) # get edge
shift # to get the next parameter
# test if parameter starts with minus sign
errorMsg="--- INVALID EDGE SPECIFICATION ---"
checkMinus "$1"
edge=`expr "$1" : '\([0-9]*\)'`
[ "$edge" = "" ] && errMsg "--- EDGE=$edge MUST BE A NON-NEGATIVE INTEGER (with no sign) ---"
;;
-E) # get ecolor
shift # to get the next parameter
# test if parameter starts with minus sign
errorMsg="--- INVALID ECOLOR SPECIFICATION ---"
checkMinus "$1"
ecolor="$1"
;;
-B) # get brightness
shift # to get the next parameter
# test if parameter starts with minus sign
errorMsg="--- INVALID BRIGHTNESS SPECIFICATION ---"
#checkMinus "$1"
bri=`expr "$1" : '\([-0-9]*\)'`
[ "$bri" = "" ] && errMsg "--- BRIGHTNESS=$bri MUST BE AN INTEGER (with no sign) ---"
;;
-C) # get contrast
shift # to get the next parameter
# test if parameter starts with minus sign
errorMsg="--- INVALID CONTRAST SPECIFICATION ---"
#checkMinus "$1"
con=`expr "$1" : '\([-0-9]*\)'`
[ "$con" = "" ] && errMsg "--- CONTRAST=$con MUST BE AN INTEGER (with no sign) ---"
;;
-) # STDIN and end of arguments
break
;;
-*) # any other - argument
errMsg "--- UNKNOWN OPTION ---"
;;
*) # end of arguments
break
;;
esac
shift # next option
done
#
# get infile and outfile and spotfile
if [ $# -eq 3 ]; then
infile="$1"
spotfile="$2"
outfile="$3"
elif [ $# -eq 2 ]; then
infile="$1"
outfile="$2"
else
errMsg "--- INCONSISTENT NUMBER OF IMAGES PROVIDED ---"
fi
fi
# test that infile provided
[ "$infile" = "" ] && errMsg "NO INPUT FILE SPECIFIED"
# test that outfile provided
[ "$outfile" = "" ] && errMsg "NO OUTPUT FILE SPECIFIED"
# create temp files
tmpA1="$dir/spots_1_$$.mpc"
tmpB1="$dir/spots_1_$$.cache"
tmpA2="$dir/spots_2_$$.mpc"
tmpB2="$dir/spots_2_$$.cache"
trap "rm -f $tmpA1 $tmpB1 $tmpA2 $tmpB2;" 0
trap "rm -f $tmpA1 $tmpB1 $tmpA2 $tmpB2; exit 1" 1 2 3 15
trap "rm -f $tmpA1 $tmpB1 $tmpA2 $tmpB2; exit 1" ERR
# setup brightness contrast
if [ "$bri" = "0" -a "$con" = "0" ]; then
bricon=""
else
bricon="-brightness-contrast $bri,$con"
fi
# test input image
magick -quiet "$infile" $bricon -clamp +repage "$tmpA1" ||
errMsg "--- FILE $infile DOES NOT EXIST OR IS NOT AN ORDINARY FILE, NOT READABLE OR HAS ZERO SIZE ---"
# test spot file if exists
if [ "$spotfile" != "" ]; then
magick -quiet "$spotfile" -alpha off +repage "$tmpA2" ||
errMsg "--- FILE $spotfile DOES NOT EXIST OR IS NOT AN ORDINARY FILE, NOT READABLE OR HAS ZERO SIZE ---"
fi
# get image width, height and aspect
ww=`magick $tmpA1 -ping -format "%w" info:`
hh=`magick $tmpA1 -ping -format "%h" info:`
# get size of spot and center of spot and last pixel of spot and pad size
if [ "$spotfile" = "" ]; then
sw=`echo $size | cut -dx -f1`
sh=`echo $size | cut -dx -f2`
scx=`magick xc: -format "%[fx:($sw-1)/2]" info:`
scy=`magick xc: -format "%[fx:($sh-1)/2]" info:`
lx=$((sw-1))
ly=$((sh-1))
# get pad size
pw=$((sw+2*pad))
ph=$((sh+2*pad))
else
pw=`magick $tmpA2 -ping -format "%w" info:`
ph=`magick $tmpA2 -ping -format "%h" info:`
fi
if [ "$spotfile" = "" ]; then
if [ "$pad" = "0" ]; then
padding=""
else
padding="-bordercolor black -border $pad"
fi
# create spot template
if [ "$type" = "circle" ]; then
magick -size ${sw}x${sh} xc:black \
+antialias -fill white -draw "ellipse $scx,$scy $scx,$scy 0,360" -alpha off \
$padding \
$tmpA2
elif [ "$type" = "square" ]; then
magick -size ${sw}x${sh} xc:black \
+antialias -fill white -draw "rectangle 0,0 $lx,$ly" -alpha off \
$padding \
$tmpA2
elif [ "$type" = "diamond" ]; then
magick -size ${sw}x${sh} xc:black \
+antialias -fill white -draw "polygon $scx,0 $lx,$scy $scx,$ly 0,$scy" -alpha off \
$padding \
$tmpA2
fi
fi
# compute xmin and ymin and virtual canvas size
xmin=`magick xc: -format "%[fx:ceil($ww/$pw)]" info:`
ymin=`magick xc: -format "%[fx:ceil($hh/$ph)]" info:`
www=`magick xc: -format "%[fx:$xmin*$pw]" info:`
hhh=`magick xc: -format "%[fx:$ymin*$ph]" info:`
# process image
if [ "$edge" = "0" ]; then
magick \( $tmpA1 -define distort:viewport=${www}x${hhh}+0+0 -virtual-pixel mirror -distort SRT 0 \
-scale ${xmin}x${ymin}! -scale ${www}x${hhh}! -crop ${ww}x${hh}+0+0 +repage \) \
\( $tmpA2 -write mpr:tile +delete -size ${ww}x${hh}! tile:mpr:tile \) \
-alpha off -compose copy_opacity -composite -compose over \
-background $bgcolor -flatten \
"$outfile"
else
magick \( $tmpA1 -define distort:viewport=${www}x${hhh}+0 -virtual-pixel mirror -distort SRT 0 \
-scale ${xmin}x${ymin}! -scale ${www}x${hhh}! -crop ${ww}x${hh}+0+0 +repage \) \
\( $tmpA2 -write mpr:tile +delete -size ${ww}x${hh}! tile:mpr:tile \) \
\( -clone 1 -threshold 0 -edge $edge -clamp -fill $ecolor -opaque white -transparent black \) \
\( -clone 0 -clone 1 -alpha off -compose copy_opacity -composite -compose over \
-background $bgcolor -flatten \) \
-delete 0,1 +swap -compose over -composite \
"$outfile"
fi
exit 0

103
.config/hypr/scripts/stats.sh Executable file
View File

@@ -0,0 +1,103 @@
#!/usr/bin/env bash
# Get system statistics
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}' | cut -d. -f1)
MEMORY_USAGE=$(free -m | awk 'NR==2{printf "%.0f", $3*100/$2 }')
CPU_TEMP=""
# Get temp info (CPU temp)
if [ -r /sys/class/thermal/thermal_zone0/temp ]; then
CPU_TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp)
CPU_TEMP_C=$((CPU_TEMP_RAW / 1000))
CPU_TEMP="${CPU_TEMP_C}°C"
fi
echo "${CPU_USAGE}%${CPU_TEMP}${MEMORY_USAGE}%"
# GPU info
GPU_USAGE=$(cat /sys/class/drm/card1/device/gpu_busy_percent)
GPU_VRAM_USED=$(cat /sys/class/drm/card1/device/mem_info_vram_used)
GPU_VRAM_TOTAL=$(cat /sys/class/drm/card1/device/mem_info_vram_total)
GPU_VRAM_USAGE=$((GPU_VRAM_USED * 100 / GPU_VRAM_TOTAL))
echo "${GPU_USAGE}%  ${GPU_VRAM_USAGE}%"
# Battery time: find battery device via upower and parse "time to full" / "time to empty"
# fallback to sysfs if upower not available
BAT_PATH=""
if command -v upower >/dev/null 2>&1; then
BAT_PATH=$(upower -e | grep -E "battery|BAT" | head -n1)
fi
if [ -z "$BAT_PATH" ]; then
# try linux sysfs battery status file
if [ -r /sys/class/power_supply/BAT0/status ]; then
BAT_STATUS_FILE="/sys/class/power_supply/BAT0/status"
else
BAT_STATUS_FILE=""
fi
BATTERY_STATUS=""
if [ -n "$BAT_STATUS_FILE" ]; then
BATTERY_STATUS=$(cat "$BAT_STATUS_FILE")
fi
else
# use upower to read battery properties
BATTERY_STATUS=$(upower -i "$BAT_PATH" | awk -F: '/state:/ {gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2; exit}')
fi
if [ "$BATTERY_STATUS" = "charging" ] || [ "$BATTERY_STATUS" = "Charging" ]; then
if [ -n "$BAT_PATH" ]; then
# get everything after the colon and trim
TIME_TO_FULL=$(upower -i "$BAT_PATH" | sed -n 's/^[ \t]*time to full:[ \t]*//Ip')
else
TIME_TO_FULL=""
fi
if [ -n "$TIME_TO_FULL" ]; then
echo "${TIME_TO_FULL} to full"
else
echo " Charging"
fi
elif [ "$BATTERY_STATUS" = "discharging" ] || [ "$BATTERY_STATUS" = "Discharging" ]; then
if [ -n "$BAT_PATH" ]; then
TIME_TO_EMPTY=$(upower -i "$BAT_PATH" | sed -n 's/^[ \t]*time to empty:[ \t]*//Ip')
else
TIME_TO_EMPTY=""
fi
if [ -n "$TIME_TO_EMPTY" ]; then
echo "${TIME_TO_EMPTY} to empty"
else
echo " Discharging"
fi
fi
# Check if internet is up by pinging a reliable host
if ping -c 1 -W 1 woodburn.au > /dev/null 2>&1; then
INTERNET_STATUS="up"
else
INTERNET_STATUS="down"
fi
# Get WIFI SSID if connected
echo " Internet: ${INTERNET_STATUS}"
# Get network info for each active interface
for IFACE in $(ls /sys/class/net/ | grep -E '^(en|wl|wg|tailscale|tun)'); do
IFACE_STATE=""
# safe read operstate
if [ -r "/sys/class/net/$IFACE/operstate" ]; then
IFACE_STATE=$(cat "/sys/class/net/$IFACE/operstate")
fi
# show physical interfaces when up, and always show virtual interfaces (tailscale/wg/tun)
if [ "$IFACE_STATE" = "up" ] || [[ "$IFACE" == tailscale* ]] || [[ "$IFACE" == wg* ]] || [[ "$IFACE" == tun* ]]; then
RX_BYTES=$(cat "/sys/class/net/$IFACE/statistics/rx_bytes" 2>/dev/null || echo 0)
TX_BYTES=$(cat "/sys/class/net/$IFACE/statistics/tx_bytes" 2>/dev/null || echo 0)
RX_HR=$(numfmt --to=iec --suffix=B "$RX_BYTES")
TX_HR=$(numfmt --to=iec --suffix=B "$TX_BYTES")
echo "${IFACE}: 󰇚 ${RX_HR} 󰕒 ${TX_HR}"
fi
done
# curl https://wttr.in/Canberra\?format\="%l:+%t+UV:+%u"

View File

@@ -1,9 +1,11 @@
exec-once = hyprpm reload -n
exec-once = hyprpanel
exec-once = hyprpaper
exec-once = hyprpanel > ~/.logs/hyprpanel.log
# exec-once = hyprpaper > ~/.logs/hyprpaper.log # Using swww now
exec-once = hypridle
exec-once = /usr/bin/kdeconnectd
exec-once = systemctl --user start hyprpolkitagent
exec-once = ~/.config/hypr/scripts/exec-once.sh > ~/.logs/exec-once.log 2>&1
# Random wallpaper
exec-once = wl-clip-persist --clipboard regular

View File

@@ -1,8 +1,16 @@
# hyprlang noerror true
# Default floating rules to stop windows being too large or small
windowrulev2 = size <80% <80%,floating:1
windowrulev2 = size >50% >75%, class:(^org.kde.kdenlive$)
windowrule = float, class:(^xdg-desktop-portal-gtk$)
windowrule = size <80% <80%, class:(^xdg-desktop-portal-gtk$)
# windowrulev2 = size >50% >50%,floating:1
# windowrulev2 = float,class:(clipse)
# windowrulev2 = size 622 652,class:(clipse)
# windowrulev2 = stayfocused,class:(clipse)
# windowrulev2 = opacity 1 override 1 override,class:(clipse)
windowrulev2 = float,class:(float)
windowrule = size <80% <80%,class:(float)
@@ -18,36 +26,82 @@ windowrulev2 = float,class:(mpv)
windowrulev2 = float,class:^(brave-)(.*)(-.*)$
windowrulev2 = move onscreen cursor,class:^(brave-)(.*)(-.*)$
windowrulev2 = move onscreen cursor -50% 0,class:^(Nextcloud)$
# # Start windows
stickyrule = class:discord,5
stickyrule = class:vesktop,5
stickyrule = class:org.telegram.desktop,5
stickyrule = class:Slack,5
windowrulev2 = move onscreen cursor -50% 0,class:^(com.nextcloud.desktopclient.nextcloud)$
windowrulev2 = float,class:^(com.nextcloud.desktopclient.nextcloud)$
windowrule = size 800 500,class:^(com.nextcloud.desktopclient.nextcloud)$
workspace = special:gromit, gapsin:0, gapsout:0, shadow:0, on-created-empty: gromit-mpx -a
windowrule = noblur, class:^(Gromit-mpx)$
windowrule = opacity 1 override, 1 override, class:^(Gromit-mpx)$
windowrule = opacity 1 override 1 override, class:^(Gromit-mpx)$
windowrule = noshadow, class:^(Gromit-mpx)$
windowrule = suppressevent fullscreen, class:^(Gromit-mpx)$
windowrule = size 100% 100%, class:^(Gromit-mpx)$
# Floating broken windows
windowrule = opacity 1 override 1 override, class:^(xdg-desktop-portal-gtk)$
windowrule = stayfocused, class:^(xdg-desktop-portal-gtk)$
windowrule = stayfocused, class:^(soffice)$
windowrule = stayfocused, class:^(virt-manager)$, title:^$
#windowrule = float 1, class:^(xdg-desktop-portal-gtk)$
windowrulev2 = stayfocused, class:^(Sparrow)$, title:^$, xwayland:1
windowrulev2 = focusonactivate 1, class:^(Sparrow)$, title:^$, xwayland:1
windowrulev2 = allowsinput 1, class:^(Sparrow)$, title:^$, xwayland:1
windowrulev2 = stayfocused, class:^(Sparrow)$, title:^$, xwayland:1
# No Opacity windowrules
windowrule = opacity 1 override 1 override class:brave-browser
windowrule = opacity 1 override 1 override class:mpv
windowrule = opacity 1 override 1 override class:virt-manager
windowrule = opacity 1 override 1 override class:^(Bootstrap Studio)$
windowrule = opacity 1 override 1 override class:^(Minecraft)(.*)$
windowrule = opacity 1 override 1 override class:^(gimp)$
windowrule = opacity 1 override 1 override, class:^(brave-browser)$
windowrule = opacity 1 override 1 override, class:^(mpv)$
windowrule = opacity 1 override 1 override, class:^(virt-manager)$
windowrule = opacity 1 override 1 override, class:^(Bootstrap Studio)$
windowrule = opacity 1 override 1 override, class:^(Minecraft)(.*)$
windowrule = opacity 1 override 1 override, class:^(gimp)$
windowrule = opacity 1 override 1 override, class:^(com.obsproject.Studio)$
windowrule = opacity 1 override 1 override, class:^$
# Disable opacity for Alacritty (as it already has a transparent background)
windowrule = opacity 1 override 0.75 override class:Alacritty
windowrule = opacity 1 override 0.75 override, class:^(Alacritty)$
workspace = special:terminal, on-created-empty: alacritty
# hyprlang noerror false
# Tags for opacity
windowrule = opacity 0.1 override 0.1 override, tag:opacity:0.1
windowrule = opacity 0.2 override 0.2 override, tag:opacity:0.2
windowrule = opacity 0.3 override 0.3 override, tag:opacity:0.3
windowrule = opacity 0.4 override 0.4 override, tag:opacity:0.4
windowrule = opacity 0.5 override 0.5 override, tag:opacity:0.5
windowrule = opacity 0.6 override 0.6 override, tag:opacity:0.6
windowrule = opacity 0.7 override 0.7 override, tag:opacity:0.7
windowrule = opacity 0.8 override 0.8 override, tag:opacity:0.8
windowrule = opacity 0.9 override 0.9 override, tag:opacity:0.9
windowrule = opacity 1 override 1 override, tag:opacity:1
# freeRDP - Remote Desktop Protocol Client
windowrule = float, class:^(xfreerdp)$
# match by X11 WM_CLASS you set in xfreerdp
windowrule = float, class:^(Autodesk Fusion)$
windowrule = center, class:^(Autodesk Fusion)$
# prevent tiling / auto-fullscreen for these windows
#windowrulev2 = disableautotile, xclass:Autodesk Fusion
windowrule = float, class:^(Autodesk Fusion)$
# optionally force borderless (if you prefer)
windowrule = noborder, class:^(Autodesk Fusion)$
#! (Still doesn't work) Add org.kde.kdeconnect.daemon for KDE connect pointer
windowrule = noblur, class:^(org.kde.kdeconnect.daemon)$ #As it is transparent it will prevent it blurring so you can see what you are ponting at
windowrule = nofocus,class:^(org.kde.kdeconnect.daemon)$ # Disables focus so if you have the option to dim on focus it will not dim the window behind it
windowrule = nodim,class:^(org.kde.kdeconnect.daemon)$ # As it is out of focus it will prevent it from diming, so its brighter if you have window dimming on
windowrule = noshadow,class:^(org.kde.kdeconnect.daemon)$ # Preents it having a shadow if you have window shadows on
windowrule = idleinhibit,class:^(org.kde.kdeconnect.daemon)$ # Will prevent your computer from idling if this is in use
windowrule = float,class:^(org.kde.kdeconnect.daemon)$
# windowrule = maximize,class:^(org.kde.kdeconnect.daemon)$
# windowrule = move 0 0,class:^(org.kde.kdeconnect.daemon)$

View File

@@ -18,17 +18,15 @@
"dashboard",
"media"
],
"middle": [
"custom/vdesks"
],
"middle": [],
"right": [
"volume",
"bluetooth",
"network",
"battery",
"systray",
"clock",
"notifications",
"cputemp"
"notifications"
]
},
"1": {
@@ -36,28 +34,23 @@
"dashboard",
"media"
],
"middle": [
"custom/vdesks"
],
"middle": [],
"right": [
"volume",
"bluetooth",
"network",
"battery",
"systray",
"clock",
"notifications",
"cputemp"
"notifications"
]
},
"2": {
"left": [
"dashboard",
"workspaces"
],
"middle": [
"media",
"custom/vdesks"
"media"
],
"middle": [],
"right": [
"volume",
"network",
@@ -498,5 +491,9 @@
"theme.bar.buttons.background_opacity": 100,
"theme.osd.border.color": "#ffffff",
"theme.osd.enableShadow": true,
"terminal": "alacritty -e"
"terminal": "alacritty -e",
"menus.power.showLabel": true,
"bar.customModules.storage.paths": [
"/"
]
}

View File

@@ -1,12 +1,2 @@
{
"custom/vdesks": {
"icon": "🖥️",
"label": "Virtual Desktops {current}",
"tooltip": "Manage virtual desktops",
"truncationSize": -1,
"execute": "/home/$USER/scripts/vdesks.sh",
"executeOnAction": "alacritty --class float -e ping 1.1.1.1",
"interval": 1000,
"hideOnEmpty": true
}
}

View File

View File

@@ -4,7 +4,7 @@ bold_font auto
italic_font auto
bold_italic_font auto
background_opacity 0
background_opacity 1
confirm_os_window_close 0
# change to x11 or wayland or leave auto

View File

@@ -128,6 +128,21 @@ keybinds clear-defaults=true {
}
SwitchToMode "normal"
}
bind "a" {
LaunchOrFocusPlugin "zellij:about" {
floating true
move_to_focused_tab true
};
SwitchToMode "Normal"
}
bind "s" {
LaunchOrFocusPlugin "zellij:share" {
floating true
move_to_focused_tab true
};
SwitchToMode "Normal"
}
}
shared_except "locked" {
bind "Alt +" { Resize "Increase"; }
@@ -140,7 +155,6 @@ keybinds clear-defaults=true {
bind "Alt i" { MoveTab "left"; }
bind "Alt n" { NewPane; }
bind "Alt o" { MoveTab "right"; }
bind "Ctrl q" { Quit; }
}
shared_except "locked" "move" {
bind "Ctrl h" { SwitchToMode "move"; }

View File

@@ -3,7 +3,7 @@ layout {
pane
}
swap_tiled_layout name="Tiled 1" {
swap_tiled_layout name="T1" {
tab max_panes=4 {
pane split_direction="vertical" {
pane
@@ -25,7 +25,7 @@ layout {
}
}
swap_tiled_layout name="Tiled 2" {
swap_tiled_layout name="T2" {
tab max_panes=5 {
pane
pane
@@ -45,7 +45,7 @@ layout {
}
}
swap_tiled_layout name="Tiled 3" {
swap_tiled_layout name="T3" {
tab max_panes=4 {
pane split_direction="vertical" {
pane
@@ -101,7 +101,7 @@ layout {
}
}
swap_floating_layout name="Floating L1" {
swap_floating_layout name="FL1" {
floating_panes max_panes=1 {
pane
}
@@ -144,7 +144,7 @@ layout {
hide_frame_for_single_pane "false"
mode_normal "#[bg=blue] #[] Ctrl + Lock (#[bold]g#[]), #[bold]P#[]ane, #[bold]T#[]ab, Resize (#[bold]n#[]), Move (#[bold]h#[]), #[bold]S#[]earch, Sessi#[bold]o#[]n, #[bold]Q#[]uit"
mode_normal "#[bg=blue] #[] Ctrl + Lock (#[bold]g#[]), #[bold]P#[]ane, #[bold]T#[]ab, Resize (#[bold]n#[]), Move (#[bold]h#[]), #[bold]S#[]earch, Sessi#[bold]o#[]n"
mode_locked "#[bg=red] #[]"
mode_pane "#[bg=blue] {name} (p) #[] #[bold]N#[]ew, Close (#[bold]x#[]), Rename (#[bold]c#[]), #[bold]F#[]ullscreen, Float (#[bold]w#[]), #[bold]E#[]mbed"
@@ -155,7 +155,7 @@ layout {
mode_rename_tab "#[bg=blue] {name} #[]"
mode_rename_pane "#[bg=blue] {name} #[]"
mode_session "#[bg=blue] {name} (o) #[] #[bold]D#[]etach, Session Manager (#[bold]w#[]), Plugins (#[bold]p#[]), #[bold]C#[]onfig"
mode_session "#[bg=blue] {name} (o) #[] #[bold]D#[]etach, Session Manager (#[bold]w#[]), Plugins (#[bold]p#[]), #[bold]C#[]onfig, Web (#[bold]s#[]), #[bold]A#[]bout"
mode_enter_search "#[bg=blue] Search #[] Enter when done"
mode_search "#[bg=blue] Search Results #[] Scroll (#[bold]↓↑#[]), #[bold]N#[]ext, #[bold]P#[]revious, #[bold]C#[]ase-insensitive, #[bold]W#[]rap, Wh#[bold]o#[]le word"

4
.gitattributes vendored Normal file
View File

@@ -0,0 +1,4 @@
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.webp filter=lfs diff=lfs merge=lfs -text

View File

@@ -34,6 +34,8 @@ export PATH="$PATH:/home/nathan/Android/Sdk/cmdline-tools/latest/bin/"
. "$HOME/.cargo/env"
export PATH="/home/nathan/.local/share/solana/install/active_release/bin:$PATH"
export HSD_API_KEY=30e7b7974d99c62b241a9daf3d4924a108515b03
export HSD_URL=hsd01.dev.woodburn.au
export HSD_HTTP_HOST=hsd01.dev.woodburn.au
export HSD_API_KEY=y5cSK42tgVCdt4E58jkHjI3nQ9GU32bC
. "$HOME/.atuin/bin/env"

0
.zsh_functions/_cargo Normal file
View File

View File

@@ -3,3 +3,6 @@
export PATH="$PATH:/home/nathan/.cyfrin/bin"
export PATH="$PATH:/home/nathan/.foundry/bin"
export HSD_URL=hsd01.dev.woodburn.au
export HSD_HTTP_HOST=hsd01.dev.woodburn.au
export HSD_API_KEY=y5cSK42tgVCdt4E58jkHjI3nQ9GU32bC

238
.zshrc
View File

@@ -1,191 +1,109 @@
# If you come from bash you might have to change your $PATH. export PATH=$HOME/bin:/usr/local/bin:$PATH
# ~/.zshrc optimized for performance
# Path to your oh-my-zsh installation.
### 🚀 Performance Tweaks
# Avoid compaudit delays unless root
autoload -Uz compinit
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path ~/.zsh/cache
if [[ $EUID -ne 0 ]]; then
compinit -C -d ~/.zsh/cache/zcompdump
else
compinit -d ~/.zsh/cache/zcompdump
fi
# TMP profiler
# zmodload zsh/zprof
### 📦 Plugin & Framework Setup
export ZSH="$HOME/.oh-my-zsh"
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="robbyrussell"
plugins=(nvm git sudo systemadmin)
# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME=random will cause zsh to load
# a theme from this variable instead of looking in $ZSH/themes/
# If set to an empty array, this variable will have no effect.
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"
# Uncomment one of the following lines to change the auto-update behavior
# zstyle ':omz:update' mode disabled # disable automatic updates
# zstyle ':omz:update' mode auto # update automatically without asking
# zstyle ':omz:update' mode reminder # just remind me to update when it's time
# Uncomment the following line to change how often to auto-update (in days).
# zstyle ':omz:update' frequency 13
# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS="true"
# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"
# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"
# Uncomment the following line to display red dots whilst waiting for completion.
# You can also set it to another string to have that shown instead of the default red dots.
# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f"
# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765)
# COMPLETION_WAITING_DOTS="true"
# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"
# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
# HIST_STAMPS="mm/dd/yyyy"
# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git sudo systemadmin tldr)
# Lazy-load nvm
zstyle ':omz:plugins:nvm' lazy yes
source $ZSH/oh-my-zsh.sh
# User configuration
# export MANPATH="/usr/local/man:$MANPATH"
# You may need to manually set your language environment
# export LANG=en_US.UTF-8
# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='mvim'
# fi
# Compilation flags
# export ARCHFLAGS="-arch x86_64"
# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
### 🔧 Environment Config
export EDITOR=nano
export VISUAL=nano
export ANDROID_HOME="$HOME/Android/Sdk"
export LIBVIRT_DEFAULT_URI="qemu:///system"
# Set path at the start to ensure all commands can find their binaries
export PATH="/usr/bin:$PATH"
export PATH="$HOME/.local/bin:$PATH"
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
export PATH="$ANDROID_HOME/platform-tools:$PATH"
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"
export PATH="$HOME/.pub-cache/bin:$PATH"
export PATH="/opt/flutter/flutter/bin:$PATH"
export PATH="$HOME/go/bin:$PATH"
export PATH="$HOME/Downloads/go/bin:$PATH"
export PATH="$HOME/Downloads/idea-IU-232.10072.27/bin:$PATH"
export PATH="$HOME/exe/zig-linux-x86_64-0.13.0:$PATH"
export PATH="$HOME/Downloads/javacc-javacc-7.0.13/javacc-javacc-7.0.13/scripts:$PATH"
export PATH="$HOME/.atuin/bin:$PATH"
#eval "$(oh-my-posh init zsh --config ~/theme.omp.json)"
### ⚙️ Tools Init
eval "$(zoxide init --cmd cd zsh)"
eval "$(oh-my-posh init zsh --config ~/theme.omp.json)"
eval "$(atuin init zsh --disable-up-arrow)"
bindkey '^[[1;5A' atuin-up-search
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
. "$HOME/.atuin/bin/env"
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - zsh)"
export ANDROID_HOME=/home/$USER/Android/Sdk
# Zellij auto-start
ZELLIJ_AUTO_EXIT=true
eval "$(zellij setup --generate-auto-start zsh)"
# Path stuff
export PATH="/home/$USER/Downloads/go/bin:$PATH"
export PATH="/home/$USER/Downloads/idea-IU-232.10072.27/bin:$PATH"
export PATH="/home/$USER/.local/bin:$PATH"
export PATH="$PATH:$ANDROID_HOME/platform-tools"
export PATH="$PATH:/home/$USER/Android/Sdk/cmdline-tools/latest/bin/"
export PATH="$PATH:$HOME/.pub-cache/bin"
export PATH="$PATH:/opt/flutter/flutter/bin"
export PATH="/home/$USER/.local/share/solana/install/active_release/bin:$PATH"
export PATH="$PATH:/home/$USER/exe/zig-linux-x86_64-0.13.0"
export PATH="$PATH:/home/$USER/go/bin"
### 🐚 Shell Options
setopt NO_SHARE_HISTORY
export FZF_DEFAULT_OPTS='--preview "bat --color=always {}"'
#export MANPAGER="sh -c 'col -bx | bat -l man -p'"
# Alias stuff
### 💻 Aliases
alias reload='exec zsh'
alias hcurl='curl --doh-url https://hnsdoh.com/dns-query'
alias ls='eza --icons=auto'
alias ll='eza --long --group --header --icons --classify'
alias ani-cli='FZF_DEFAULT_OPTS= ani-cli'
eval "$(zoxide init --cmd cd zsh)"
eval "$(oh-my-posh init zsh --config ~/theme.omp.json)"
alias z='zellij'
alias za='zellij attach'
tre() { command tre "$@" && source "/tmp/tre_aliases_$USER" 2>/dev/null; }
alias tree=tre
alias z='zellij'
alias za='zellij attach'
alias open='xdg-open'
alias vim="nvim"
alias vi="nvim"
alias opacity='/home/$USER/scripts/opacity.sh'
alias op='/home/$USER/scripts/opacity.sh'
alias blur='/home/$USER/scripts/blur.sh'
alias music='/home/$USER/scripts/music.sh'
alias venv='source /home/$USER/scripts/venv.sh'
alias copy='/home/$USER/scripts/copy.sh'
alias upload='/home/$USER/scripts/upload.sh'
alias upload_latest_video='/home/$USER/scripts/upload_latest_video.py'
alias ts='/home/$USER/scripts/ts.sh'
alias hold='/home/$USER/scripts/hold.sh'
alias message='/home/$USER/scripts/message.sh'
alias dockerstart='/home/$USER/scripts/dockerstart.sh'
alias dockerstop='/home/$USER/scripts/dockerstop.sh'
alias domains='/home/$USER/scripts/domains.py'
alias fix_touchpad='/home/$USER/scripts/fix_touchpad.sh'
alias wallpaper='/home/$USER/scripts/wallpaper.py'
alias reload='exec zsh'
alias open=xdg-open
# ani-cli with preview
alias ani-cli='FZF_DEFAULT_OPTS= ani-cli'
# Use gitkraken's cli tool
unalias gk
# Personal scripts
for cmd in opacity op blur music copy upload upload_latest_video ts hold message dockerstart dockerstop domains wallpaper cert mount_ssd umount_ssd; do
alias $cmd="$HOME/scripts/${cmd}.sh"
done
alias venv="source $HOME/scripts/venv.sh"
alias upload_latest_video='$HOME/scripts/upload_latest_video.py'
alias domains='$HOME/scripts/domains.py'
# GitKraken CLI
unalias gk 2>/dev/null
# unzip to folder
unzip() {
/usr/bin/unzip -d "${1%.*}" "$1"
}
# FZF config
export FZF_DEFAULT_OPTS='--preview "bat --color=always {}"'
. "$HOME/.atuin/bin/env"
eval "$(atuin init zsh --disable-up-arrow)"
# Bind CTRL+UP to atuin search
bindkey '^[[1;5A' atuin-up-search
fpath+=${ZDOTDIR:-~}/.zsh_functions
FPATH+=${ZDOTDIR:-~}/.zsh_functions
export FPATH="/home/$USER/Git/eza/completions/zsh:$FPATH"
# Start zellij
ZELLIJ_AUTO_EXIT=true
eval "$(zellij setup --generate-auto-start zsh)"
setopt NO_SHARE_HISTORY
export PATH="$PATH:/home/$USER/Downloads/javacc-javacc-7.0.13/javacc-javacc-7.0.13/scripts"
# Completion paths
fpath+=(${ZDOTDIR:-~}/.zsh_functions)
FPATH+="$HOME/Git/eza/completions/zsh"
export FPATH