diff --git a/.backgrounds/originals/wallhaven-0qo2r4.jpg b/.backgrounds/originals/wallhaven-0qo2r4.jpg
new file mode 100644
index 0000000..fe42909
Binary files /dev/null and b/.backgrounds/originals/wallhaven-0qo2r4.jpg differ
diff --git a/.backgrounds/originals/wallhaven-1pegv1.png b/.backgrounds/originals/wallhaven-1pegv1.png
new file mode 100644
index 0000000..c0f76eb
Binary files /dev/null and b/.backgrounds/originals/wallhaven-1pegv1.png differ
diff --git a/.backgrounds/originals/wallhaven-1poo61.jpg b/.backgrounds/originals/wallhaven-1poo61.jpg
new file mode 100644
index 0000000..53f0b52
Binary files /dev/null and b/.backgrounds/originals/wallhaven-1poo61.jpg differ
diff --git a/.backgrounds/originals/wallhaven-48q1x1.jpg b/.backgrounds/originals/wallhaven-48q1x1.jpg
new file mode 100644
index 0000000..31757be
Binary files /dev/null and b/.backgrounds/originals/wallhaven-48q1x1.jpg differ
diff --git a/.backgrounds/originals/wallhaven-48q1x1.png b/.backgrounds/originals/wallhaven-48q1x1.png
new file mode 100644
index 0000000..114d368
Binary files /dev/null and b/.backgrounds/originals/wallhaven-48q1x1.png differ
diff --git a/.backgrounds/originals/wallhaven-4vev8n.jpg b/.backgrounds/originals/wallhaven-4vev8n.jpg
new file mode 100644
index 0000000..7a880cb
Binary files /dev/null and b/.backgrounds/originals/wallhaven-4vev8n.jpg differ
diff --git a/.backgrounds/originals/wallhaven-5757w1.jpg b/.backgrounds/originals/wallhaven-5757w1.jpg
new file mode 100644
index 0000000..5d624e4
Binary files /dev/null and b/.backgrounds/originals/wallhaven-5757w1.jpg differ
diff --git a/.backgrounds/originals/wallhaven-6dy29q.png b/.backgrounds/originals/wallhaven-6dy29q.png
new file mode 100644
index 0000000..164e461
Binary files /dev/null and b/.backgrounds/originals/wallhaven-6dy29q.png differ
diff --git a/.backgrounds/originals/wallhaven-6k93rq.jpg b/.backgrounds/originals/wallhaven-6k93rq.jpg
new file mode 100644
index 0000000..e1bde9c
Binary files /dev/null and b/.backgrounds/originals/wallhaven-6k93rq.jpg differ
diff --git a/.backgrounds/originals/wallhaven-ex2ed8.png b/.backgrounds/originals/wallhaven-ex2ed8.png
new file mode 100644
index 0000000..546f32d
Binary files /dev/null and b/.backgrounds/originals/wallhaven-ex2ed8.png differ
diff --git a/.backgrounds/originals/wallhaven-exrqrr_2256x1504.png b/.backgrounds/originals/wallhaven-exrqrr_2256x1504.png
new file mode 100644
index 0000000..4428554
Binary files /dev/null and b/.backgrounds/originals/wallhaven-exrqrr_2256x1504.png differ
diff --git a/.backgrounds/originals/wallhaven-exyw3o.jpg b/.backgrounds/originals/wallhaven-exyw3o.jpg
new file mode 100644
index 0000000..ef736c6
Binary files /dev/null and b/.backgrounds/originals/wallhaven-exyw3o.jpg differ
diff --git a/.backgrounds/originals/wallhaven-eyp3ro.png b/.backgrounds/originals/wallhaven-eyp3ro.png
new file mode 100644
index 0000000..fab8d09
Binary files /dev/null and b/.backgrounds/originals/wallhaven-eyp3ro.png differ
diff --git a/.backgrounds/originals/wallhaven-eyx75o.jpg b/.backgrounds/originals/wallhaven-eyx75o.jpg
new file mode 100644
index 0000000..4b03876
Binary files /dev/null and b/.backgrounds/originals/wallhaven-eyx75o.jpg differ
diff --git a/.backgrounds/originals/wallhaven-g7qr9l.jpg b/.backgrounds/originals/wallhaven-g7qr9l.jpg
new file mode 100644
index 0000000..6c9a0c4
Binary files /dev/null and b/.backgrounds/originals/wallhaven-g7qr9l.jpg differ
diff --git a/.backgrounds/originals/wallhaven-j5mz95.png b/.backgrounds/originals/wallhaven-j5mz95.png
new file mode 100644
index 0000000..3cd55f0
Binary files /dev/null and b/.backgrounds/originals/wallhaven-j5mz95.png differ
diff --git a/.backgrounds/originals/wallhaven-jxjklq.png b/.backgrounds/originals/wallhaven-jxjklq.png
new file mode 100644
index 0000000..672e49b
Binary files /dev/null and b/.backgrounds/originals/wallhaven-jxjklq.png differ
diff --git a/.backgrounds/originals/wallhaven-jxrz8q.png b/.backgrounds/originals/wallhaven-jxrz8q.png
new file mode 100644
index 0000000..9d5e9fb
Binary files /dev/null and b/.backgrounds/originals/wallhaven-jxrz8q.png differ
diff --git a/.backgrounds/originals/wallhaven-md6578.jpg b/.backgrounds/originals/wallhaven-md6578.jpg
new file mode 100644
index 0000000..1e8ed25
Binary files /dev/null and b/.backgrounds/originals/wallhaven-md6578.jpg differ
diff --git a/.backgrounds/originals/wallhaven-r7zm17.jpg b/.backgrounds/originals/wallhaven-r7zm17.jpg
new file mode 100644
index 0000000..a9ef192
Binary files /dev/null and b/.backgrounds/originals/wallhaven-r7zm17.jpg differ
diff --git a/.backgrounds/originals/wallhaven-rdm6km.png b/.backgrounds/originals/wallhaven-rdm6km.png
new file mode 100644
index 0000000..0d489ec
Binary files /dev/null and b/.backgrounds/originals/wallhaven-rdm6km.png differ
diff --git a/.backgrounds/originals/wallhaven-vgmk6l.jpg b/.backgrounds/originals/wallhaven-vgmk6l.jpg
new file mode 100644
index 0000000..ac47ed7
Binary files /dev/null and b/.backgrounds/originals/wallhaven-vgmk6l.jpg differ
diff --git a/.backgrounds/originals/wallhaven-x1z19v.jpg b/.backgrounds/originals/wallhaven-x1z19v.jpg
new file mode 100644
index 0000000..149247b
Binary files /dev/null and b/.backgrounds/originals/wallhaven-x1z19v.jpg differ
diff --git a/.backgrounds/originals/wallhaven-xl19lv.jpg b/.backgrounds/originals/wallhaven-xl19lv.jpg
new file mode 100644
index 0000000..cc05ac7
Binary files /dev/null and b/.backgrounds/originals/wallhaven-xl19lv.jpg differ
diff --git a/.backgrounds/wallhaven-0qo2r4.png b/.backgrounds/wallhaven-0qo2r4.png
new file mode 100644
index 0000000..ae0919f
Binary files /dev/null and b/.backgrounds/wallhaven-0qo2r4.png differ
diff --git a/.backgrounds/wallhaven-1pegv1.png b/.backgrounds/wallhaven-1pegv1.png
new file mode 100644
index 0000000..c7bd545
Binary files /dev/null and b/.backgrounds/wallhaven-1pegv1.png differ
diff --git a/.backgrounds/wallhaven-1poo61.png b/.backgrounds/wallhaven-1poo61.png
new file mode 100644
index 0000000..ff1a12c
Binary files /dev/null and b/.backgrounds/wallhaven-1poo61.png differ
diff --git a/.backgrounds/wallhaven-48q1x1.png b/.backgrounds/wallhaven-48q1x1.png
new file mode 100644
index 0000000..b49af18
Binary files /dev/null and b/.backgrounds/wallhaven-48q1x1.png differ
diff --git a/.backgrounds/wallhaven-4vev8n.png b/.backgrounds/wallhaven-4vev8n.png
new file mode 100644
index 0000000..888a482
Binary files /dev/null and b/.backgrounds/wallhaven-4vev8n.png differ
diff --git a/.backgrounds/wallhaven-5757w1.png b/.backgrounds/wallhaven-5757w1.png
new file mode 100644
index 0000000..076e281
Binary files /dev/null and b/.backgrounds/wallhaven-5757w1.png differ
diff --git a/.backgrounds/wallhaven-6dy29q.png b/.backgrounds/wallhaven-6dy29q.png
new file mode 100644
index 0000000..1e60b88
Binary files /dev/null and b/.backgrounds/wallhaven-6dy29q.png differ
diff --git a/.backgrounds/wallhaven-6k93rq.png b/.backgrounds/wallhaven-6k93rq.png
new file mode 100644
index 0000000..8d5d821
Binary files /dev/null and b/.backgrounds/wallhaven-6k93rq.png differ
diff --git a/.backgrounds/wallhaven-ex2ed8.png b/.backgrounds/wallhaven-ex2ed8.png
new file mode 100644
index 0000000..2021f70
Binary files /dev/null and b/.backgrounds/wallhaven-ex2ed8.png differ
diff --git a/.backgrounds/wallhaven-exrqrr_2256x1504.png b/.backgrounds/wallhaven-exrqrr_2256x1504.png
new file mode 100644
index 0000000..0ed094a
Binary files /dev/null and b/.backgrounds/wallhaven-exrqrr_2256x1504.png differ
diff --git a/.backgrounds/wallhaven-exyw3o.png b/.backgrounds/wallhaven-exyw3o.png
new file mode 100644
index 0000000..487b777
Binary files /dev/null and b/.backgrounds/wallhaven-exyw3o.png differ
diff --git a/.backgrounds/wallhaven-eyp3ro.png b/.backgrounds/wallhaven-eyp3ro.png
new file mode 100644
index 0000000..af5da82
Binary files /dev/null and b/.backgrounds/wallhaven-eyp3ro.png differ
diff --git a/.backgrounds/wallhaven-eyx75o.png b/.backgrounds/wallhaven-eyx75o.png
new file mode 100644
index 0000000..16ac7aa
Binary files /dev/null and b/.backgrounds/wallhaven-eyx75o.png differ
diff --git a/.backgrounds/wallhaven-g7qr9l.png b/.backgrounds/wallhaven-g7qr9l.png
new file mode 100644
index 0000000..8655866
Binary files /dev/null and b/.backgrounds/wallhaven-g7qr9l.png differ
diff --git a/.backgrounds/wallhaven-j5mz95.png b/.backgrounds/wallhaven-j5mz95.png
new file mode 100644
index 0000000..149358c
Binary files /dev/null and b/.backgrounds/wallhaven-j5mz95.png differ
diff --git a/.backgrounds/wallhaven-jxjklq.png b/.backgrounds/wallhaven-jxjklq.png
new file mode 100644
index 0000000..8aa2ec7
Binary files /dev/null and b/.backgrounds/wallhaven-jxjklq.png differ
diff --git a/.backgrounds/wallhaven-jxrz8q.png b/.backgrounds/wallhaven-jxrz8q.png
new file mode 100644
index 0000000..5fcaa47
Binary files /dev/null and b/.backgrounds/wallhaven-jxrz8q.png differ
diff --git a/.backgrounds/wallhaven-md6578.png b/.backgrounds/wallhaven-md6578.png
new file mode 100644
index 0000000..d07304d
Binary files /dev/null and b/.backgrounds/wallhaven-md6578.png differ
diff --git a/.backgrounds/wallhaven-r7zm17.png b/.backgrounds/wallhaven-r7zm17.png
new file mode 100644
index 0000000..d6019bd
Binary files /dev/null and b/.backgrounds/wallhaven-r7zm17.png differ
diff --git a/.backgrounds/wallhaven-rdm6km.png b/.backgrounds/wallhaven-rdm6km.png
new file mode 100644
index 0000000..bbc5838
Binary files /dev/null and b/.backgrounds/wallhaven-rdm6km.png differ
diff --git a/.backgrounds/wallhaven-vgmk6l.png b/.backgrounds/wallhaven-vgmk6l.png
new file mode 100644
index 0000000..c43fecd
Binary files /dev/null and b/.backgrounds/wallhaven-vgmk6l.png differ
diff --git a/.backgrounds/wallhaven-x1z19v.png b/.backgrounds/wallhaven-x1z19v.png
new file mode 100644
index 0000000..82b4076
Binary files /dev/null and b/.backgrounds/wallhaven-x1z19v.png differ
diff --git a/.backgrounds/wallhaven-xl19lv.png b/.backgrounds/wallhaven-xl19lv.png
new file mode 100644
index 0000000..3d59fda
Binary files /dev/null and b/.backgrounds/wallhaven-xl19lv.png differ
diff --git a/.bashrc b/.bashrc
new file mode 100644
index 0000000..3caeb51
--- /dev/null
+++ b/.bashrc
@@ -0,0 +1,23 @@
+#
+# ~/.bashrc
+#
+
+# If not running interactively, don't do anything
+[[ $- != *i* ]] && return
+
+alias ls='ls --color=auto'
+alias grep='grep --color=auto'
+PS1='[\u@\h \W]\$ '
+
+
+# Import colorscheme from 'wal' asynchronously
+# & # Run the process in the background.
+# ( ) # Hide shell job control messages.
+# Not supported in the "fish" shell.
+# (cat ~/.cache/wal/sequences &)
+
+# Alternative (blocks terminal for 0-3ms)
+cat ~/.cache/wal/sequences
+
+# To add support for TTYs this line can be optionally added.
+source ~/.cache/wal/colors-tty.sh
diff --git a/.config/hypr/env_var.conf b/.config/hypr/env_var.conf
new file mode 100644
index 0000000..d3f5b0a
--- /dev/null
+++ b/.config/hypr/env_var.conf
@@ -0,0 +1,66 @@
+# Amber's Dotfiles
+# __ __ ___ __
+# /\ \/\ \ /\_ \ /\ \
+# \ \ \_\ \ __ __ _____ _ __ \//\ \ __ ___ \_\ \
+# \ \ _ \ /\ \/\ \ /\ '__`\ /\`'__\ \ \ \ /'__`\ /' _ `\ /'_` \
+# \ \ \ \ \ \ \ \_\ \ \ \ \L\ \\ \ \/ \_\ \_ /\ \L\.\_ /\ \/\ \ /\ \L\ \
+# \ \_\ \_\ \/`____ \ \ \ ,__/ \ \_\ /\____\\ \__/.\_\\ \_\ \_\\ \___,_\
+# \/_/\/_/ `/___/> \ \ \ \/ \/_/ \/____/ \/__/\/_/ \/_/\/_/ \/__,_ /
+# /\___/ \ \_\
+# \/__/ \/_/
+
+#---------------------------------------------------------------------
+# Environment Variables
+# see https://wiki.hyprland.org/Configuring/Environment-variables/
+# From HyprV4
+#---------------------------------------------------------------------
+
+# Theming Related Variables
+# Set cursor size. See FAQ below for why you might want this variable set.
+# https://wiki.hyprland.org/FAQ/
+env = XCURSOR_SIZE,24
+
+# Set a GTK theme manually, for those who want to avoid appearance tools such as lxappearance or nwg-look
+# env = GTK_THEME,FlatColor
+
+# Set your cursor theme. The theme needs to be installed and readable by your user.
+#env = XCURSOR_THEME,
+
+# the line below may help with multiple monitors
+#env = WLR_EGL_NO_MODIFIERS,1
+
+#XDG Specifications
+env = XDG_CURRENT_DESKTOP,Hyprland
+env = XDG_SESSION_TYPE,wayland
+env = XDG_SESSION_DESKTOP,Hyprland
+
+# Toolkit Backend Variables
+
+# GTK: Use wayland if available, fall back to x11 if not.
+env = GDK_BACKEND,wayland,x11
+
+# QT: Use wayland if available, fall back to x11 if not.
+#env = QT_QPA_PLATFORM,wayland,xcb
+
+# Run SDL2 applications on Wayland. Remove or set to x11 if games that
+# provide older versions of SDL cause compatibility issues
+#env = SDL_VIDEODRIVER,wayland
+
+# Clutter package already has wayland enabled, this variable
+#will force Clutter applications to try and use the Wayland backend
+#env = CLUTTER_BACKEND,wayland
+
+# QT Variables
+
+# (From the QT documentation) enables automatic scaling, based on the monitor’s pixel density
+# https://doc.qt.io/qt-5/highdpi.html
+env = QT_AUTO_SCREEN_SCALE_FACTOR,1
+
+# Tell QT applications to use the Wayland backend, and fall back to x11 if Wayland is unavailable
+env = QT_QPA_PLATFORM,wayland;xcb
+
+# Disables window decorations on QT applications
+#env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
+
+#Tells QT based applications to pick your theme from qt5ct, use with Kvantum.
+env = QT_QPA_PLATFORMTHEME,qt5ct
diff --git a/.config/hypr/hypridle.conf b/.config/hypr/hypridle.conf
new file mode 100644
index 0000000..35db809
--- /dev/null
+++ b/.config/hypr/hypridle.conf
@@ -0,0 +1,52 @@
+# Amber's Dotfiles
+
+# __ __ __ ___
+# /\ \/\ \ __ /\ \ /\_ \
+# \ \ \_\ \ __ __ _____ _ __ /\_\ \_\ \\//\ \ __
+# \ \ _ \/\ \/\ \/\ '__`\/\`'__\/\ \ /'_` \ \ \ \ /'__`\
+# \ \ \ \ \ \ \_\ \ \ \L\ \ \ \/ \ \ \/\ \L\ \ \_\ \_/\ __/
+# \ \_\ \_\/`____ \ \ ,__/\ \_\ \ \_\ \___,_\/\____\ \____\
+# \/_/\/_/`/___/> \ \ \/ \/_/ \/_/\/__,_ /\/____/\/____/
+# /\___/\ \_\
+# \/__/ \/_/
+
+#---------------------------------------------------------------------
+# Hypridle Configuration
+# Primarily based on example config on the Hyprland wiki with changes
+# to accomodate hyprlock
+#---------------------------------------------------------------------
+
+general {
+ lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
+ before_sleep_cmd = hyprlock # lock before suspend.
+ after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
+}
+
+listener {
+ timeout = 150 # 2.5min.
+ on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
+ on-resume = brightnessctl -r # monitor backlight restore.
+}
+
+# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
+listener {
+ timeout = 150 # 2.5min.
+ on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
+ on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
+}
+
+listener {
+ timeout = 300 # 5min
+ on-timeout = hyprlock # lock screen when timeout has passed
+}
+
+listener {
+ timeout = 330 # 5.5min
+ on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
+ on-resume = hyprctl dispatch dpms on # screen on when activity is detected after timeout has fired.
+}
+
+listener {
+ timeout = 1800 # 30min
+ on-timeout = systemctl suspend # suspend pc
+}
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
new file mode 100644
index 0000000..13ad717
--- /dev/null
+++ b/.config/hypr/hyprland.conf
@@ -0,0 +1,225 @@
+# /\ \/\ \ /\_ \ /\ \
+# \ \ \_\ \ __ __ _____ _ __\//\ \ __ ___ \_\ \
+# \ \ _ \/\ \/\ \/\ '__`\/\`'__\\ \ \ /'__`\ /' _ `\ /'_` \
+# \ \ \ \ \ \ \_\ \ \ \L\ \ \ \/ \_\ \_/\ \L\.\_/\ \/\ \/\ \L\ \
+# \ \_\ \_\/`____ \ \ ,__/\ \_\ /\____\ \__/.\_\ \_\ \_\ \___,_\
+# \/_/\/_/`/___/> \ \ \/ \/_/ \/____/\/__/\/_/\/_/\/_/\/__,_ /
+# /\___/\ \_\
+# \/__/ \/_/
+
+#---------------------------------------------------------------------
+# Hyprland Settings
+# Custom from HyprV4 and the Wiki
+#---------------------------------------------------------------------
+
+# TODO isolate the style-related settings into an external file so they can be swapped around quickly
+
+# Default monitor settings for now
+# See https://wiki.hyprland.org/Configuring/Monitors/
+monitor=,preferred,auto,auto
+
+# See https://wiki.hyprland.org/Configuring/Keywords/ for more
+
+# Execute your favorite apps at launch
+exec-once = ./xdg-portal-hyprland
+exec-once = dbus-update-activation-environment --systemd --all
+exec-once = swww init
+exec = waybar
+exec = pipewire-pulse
+exec-once = mako
+exec-once = blueman-applet
+exec-once = nm-applet --indicator
+exec-once = hypridle
+exec-once = /usr/lib/polkit-kde-authentication-agent-1
+# For some reason clipboard seems to persist between applications and restarts already
+# exec-once = wl-clip-persist --clipboard regular
+exec-once = wl-paste --watch cliphist store
+
+# Source a file (multi-file configs)
+source = ~/.config/hypr/env_var.conf
+source = ~/.config/hypr/media-binds.conf
+
+# Set programs that you use
+$terminal = kitty
+$fileManager = thunar
+$menu = wofi --show drun
+
+# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
+input {
+exec-once = nm-applet --indicator
+ kb_layout = us
+ kb_variant =
+ kb_model =
+ kb_options =
+ kb_rules =
+
+ follow_mouse = 1
+
+ touchpad {
+ natural_scroll = yes
+ }
+
+ sensitivity = 0 # -1.0 to 1.0, 0 means no modification.
+}
+
+general {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+
+ gaps_in = 5
+ gaps_out = 10
+ border_size = 2
+ col.active_border = rgba(5bce22ee) rgba(1aad30ee) 45deg
+ col.inactive_border = rgba(375848aa)
+
+ resize_on_border = true
+
+ layout = master
+
+ # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
+ allow_tearing = false
+}
+
+xwayland {
+ force_zero_scaling = true
+}
+
+decoration {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+
+ rounding = 10
+
+ blur {
+ enabled = true
+ size = 3
+ passes = 1
+ }
+
+ blurls = lockscreen
+
+ drop_shadow = yes
+ shadow_range = 4
+ shadow_render_power = 3
+ col.shadow = rgba(1a1a1aee)
+}
+
+animations {
+ enabled = yes
+
+ # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
+
+ bezier = myBezier, 0.05, 0.9, 0.1, 1.05
+
+ animation = windows, 1, 7, myBezier
+ animation = windowsOut, 1, 7, default, popin 80%
+ animation = border, 1, 10, default
+ animation = borderangle, 1, 8, default
+ animation = fade, 1, 7, default
+ animation = workspaces, 1, 6, default
+}
+
+dwindle {
+ # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
+ pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
+ preserve_split = yes # you probably want this
+}
+
+master {
+ # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
+ new_is_master = true
+ mfact = 0.5
+}
+
+gestures {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+ workspace_swipe = on
+}
+
+misc {
+ # See https://wiki.hyprland.org/Configuring/Variables/ for more
+ force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
+ disable_hyprland_logo = true
+}
+
+# Example per-device config
+# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
+device {
+ name = epic-mouse-v1
+ sensitivity = -0.5
+}
+
+# Example windowrule v1
+# windowrule = float, ^(kitty)$
+# Example windowrule v2
+# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
+# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
+windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
+windowrulev2 = size 80% 60%, floating:(1)
+
+
+# See https://wiki.hyprland.org/Configuring/Keywords/ for more
+$mainMod = SUPER
+
+# Keybindings
+# see https://wiki.hyprland.org/Configuring/Binds/ for more
+bind = $mainMod, Q, exec, $terminal # Open default terminal emulator
+bind = $mainMod, C, killactive, # Close the active window
+bind = $mainMod, M, exit, # Kill Hyprland
+bind = $mainMod, E, exec, $fileManager # Open default graphical file browser
+bind = $mainMod, V, togglefloating, # Allow a window to float
+bind = $mainMod, SPACE, exec, $menu # Open the app launcher
+bind = $mainMod, P, pseudo, # dwindle
+bind = $mainMod, O, togglesplit, # dwindle
+bind = $mainMod SHIFT, B, exec, ~/.config/waybar/launch.sh # Script to killall waybar and restart one waybar instance
+bind = , Print, exec, grim -g "$(slurp)" - | swappy -f - # Take a screenshot with PrintScreen
+bind = ALT, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy && wl-paste # Open clipboard manager
+bind = $mainMod, N, exec, wlogout # Launch logout menu
+# TODO nChain options - eventually
+
+# Changed focus movement to Vimlike syntax
+bind = $mainMod, H, movefocus, l
+bind = $mainMod, L, movefocus, r
+bind = $mainMod, K, movefocus, u
+bind = $mainMod, J, movefocus, d
+
+# Added window movement to Vimlike syntax
+bind = $mainMod SHIFT, H, movewindow, l
+bind = $mainMod SHIFT, L, movewindow, r
+bind = $mainMod SHIFT, K, movewindow, u
+bind = $mainMod SHIFT, J, movewindow, d
+
+# Switch workspaces with mainMod + [0-9]
+# TODO Workspace 1 as a "home" workspace bound to $mainMod, ` ?
+bind = $mainMod, 1, workspace, 1
+bind = $mainMod, 2, workspace, 2
+bind = $mainMod, 3, workspace, 3
+bind = $mainMod, 4, workspace, 4
+bind = $mainMod, 5, workspace, 5
+bind = $mainMod, 6, workspace, 6
+bind = $mainMod, 7, workspace, 7
+bind = $mainMod, 8, workspace, 8
+bind = $mainMod, 9, workspace, 9
+bind = $mainMod, 0, workspace, 10
+
+# Move active window to a workspace with mainMod + SHIFT + [0-9]
+bind = $mainMod SHIFT, 1, movetoworkspace, 1
+bind = $mainMod SHIFT, 2, movetoworkspace, 2
+bind = $mainMod SHIFT, 3, movetoworkspace, 3
+bind = $mainMod SHIFT, 4, movetoworkspace, 4
+bind = $mainMod SHIFT, 5, movetoworkspace, 5
+bind = $mainMod SHIFT, 6, movetoworkspace, 6
+bind = $mainMod SHIFT, 7, movetoworkspace, 7
+bind = $mainMod SHIFT, 8, movetoworkspace, 8
+bind = $mainMod SHIFT, 9, movetoworkspace, 9
+bind = $mainMod SHIFT, 0, movetoworkspace, 10
+
+# Example special workspace (scratchpad)
+bind = $mainMod, S, togglespecialworkspace, magic
+bind = $mainMod SHIFT, S, movetoworkspace, special:magic
+
+# Scroll through existing workspaces with mainMod + scroll
+bind = $mainMod, mouse_down, workspace, e+1
+bind = $mainMod, mouse_up, workspace, e-1
+
+# Move/resize windows with mainMod + LMB/RMB and dragging
+bindm = $mainMod, mouse:272, movewindow
+bindm = $mainMod, mouse:273, resizewindow
diff --git a/.config/hypr/hyprlock.conf b/.config/hypr/hyprlock.conf
new file mode 100644
index 0000000..533c50c
--- /dev/null
+++ b/.config/hypr/hyprlock.conf
@@ -0,0 +1,90 @@
+# Amber's Dotfiles
+
+# __ __ ___ __
+# /\ \/\ \ /\_ \ /\ \
+# \ \ \_\ \ __ __ _____ _ __\//\ \ ___ ___\ \ \/'\
+# \ \ _ \/\ \/\ \/\ '__`\/\`'__\\ \ \ / __`\ /'___\ \ , <
+# \ \ \ \ \ \ \_\ \ \ \L\ \ \ \/ \_\ \_/\ \L\ \/\ \__/\ \ \\`\
+# \ \_\ \_\/`____ \ \ ,__/\ \_\ /\____\ \____/\ \____\\ \_\ \_\
+# \/_/\/_/`/___/> \ \ \/ \/_/ \/____/\/___/ \/____/ \/_/\/_/
+# /\___/\ \_\
+# \/__/ \/_/
+
+#---------------------------------------------------------------------
+# Hyprlock Configuration
+# Based on the example configuration on the Hyprland wiki
+#---------------------------------------------------------------------
+
+background {
+ monitor =
+ path = $HOME/Downloads/wallhaven-48q1x1.png # only png supported for now
+}
+
+input-field {
+ monitor =
+ size = 400, 50
+ outline_thickness = 3
+ dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8
+ dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0
+ dots_center = true
+ dots_rounding = -1 # -1 default circle, -2 follow input-field rounding
+ outer_color = rgb(5BCE22)
+ inner_color = rgb(375848)
+ font_color = rgb(FFFFFF)
+ fade_on_empty = true
+ fade_timeout = 1000 # Milliseconds before fade_on_empty is triggered.
+ placeholder_text = Password # Text rendered in the input box when it's empty.
+ hide_input = false
+ rounding = -1 # -1 means complete rounding (circle/oval)
+ check_color = rgb(204, 136, 34)
+ fail_color = rgb(204, 34, 34) # if authentication failed, changes outer_color and fail message color
+ fail_text = $FAIL ($ATTEMPTS) # can be set to empty
+ fail_transition = 300 # transition time in ms between normal outer_color and fail_color
+ capslock_color = -1
+ numlock_color = -1
+ bothlock_color = -1 # when both locks are active. -1 means don't change outer color (same for above)
+ invert_numlock = false # change color if numlock is off
+ swap_font_color = false # see below
+ position = 0, -20
+ halign = center
+ valign = center
+}
+
+label {
+ monitor =
+ text = cmd[update:1000] echo $(date '+%R')
+ color = rgba(200, 200, 200, 1.0)
+ font_size = 55
+ font_family = ZedMono NFP
+ position = -25, 10
+ halign = right
+ valign = bottom
+ shadow_passes = 5
+ shadow_size = 10
+}
+
+label {
+ monitor =
+ text = cmd[update:1000] echo $(date '+%A, %B %d, %Y')
+ color = rgba(200, 200, 200, 1.0)
+ font_size = 55
+ font_family = ZedMono NFP
+ position = -25, -75
+ halign = right
+ valign = bottom
+ shadow_passes = 5
+ shadow_size = 10
+}
+
+label {
+ monitor =
+ text = Welcome back
+ color = rgba(200, 200, 200, 1.0)
+ font_size = 48
+ font_family = ZedMono NFP
+ position = 0, 75
+ halign = center
+ valign = center
+ shadow_passes = 5
+ shadow_size = 10
+}
diff --git a/.config/hypr/media-binds.conf b/.config/hypr/media-binds.conf
new file mode 100644
index 0000000..c78c18c
--- /dev/null
+++ b/.config/hypr/media-binds.conf
@@ -0,0 +1,19 @@
+$SCRIPT = ~/.config/waybar/scripts
+
+bind = , xf86audioraisevolume, exec, $SCRIPT/volume --inc
+bind = , xf86audiolowervolume, exec, $SCRIPT/volume --dec
+# My laptop doesn't have a mic mute key; it instead has hardware switches for mic & webcam
+# bind = , xf86AudioMicMute, exec, $SCRIPT/volume --toggle-mic
+bind = , xf86AudioMute, exec, $SCRIPT/volume --toggle
+
+# My laptop doesn't have keyboard backlight keys - It's controlled at a hardware level using fn + SPACE
+# bind = , xf86KbdBrightnessDown, exec, $SCRIPT/kb-brightness --dec
+# bind = , xf86KbdBrightnessUp, exec, $SCRIPT/kb-brightness --inc
+
+bind = , xf86MonBrightnessDown, exec, $SCRIPT/brightness --dec
+bind = , xf86MonBrightnessUp, exec, $SCRIPT/brightness --inc
+
+# Added audio control keybindings
+bind = , xf86AudioPrev, exec, $SCRIPT/players --prev
+bind = , xf86AudioPlay, exec, $SCRIPT/players --toggle
+bind = , xf86AudioNext, exec, $SCRIPT/players --next
diff --git a/.config/hypr/xdg-portal-hyprland b/.config/hypr/xdg-portal-hyprland
new file mode 100644
index 0000000..064f585
--- /dev/null
+++ b/.config/hypr/xdg-portal-hyprland
@@ -0,0 +1,8 @@
+#!/bin/bash
+sleep 1
+killall xdg-desktop-portal-hyprland
+killall xdg-desktop-portal-wlr
+killall xdg-desktop-portal
+/usr/lib/xdg-desktop-portal hyprland &
+sleep 2
+/usr/lib/xdg-desktop-portal &
diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf
new file mode 100644
index 0000000..92aa7ea
--- /dev/null
+++ b/.config/kitty/kitty.conf
@@ -0,0 +1,2477 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+#: Fonts {{{
+
+#: kitty has very powerful font management. You can configure
+#: individual font faces and even specify special fonts for particular
+#: characters.
+
+font_family ZedMono NFP
+bold_font ZedMono NFP ExtraBold
+italic_font ZedMono NFP Obl
+bold_italic_font ZedMono NFP ExtraBold Obl
+
+#: You can specify different fonts for the bold/italic/bold-italic
+#: variants. To get a full list of supported fonts use the `kitty
+#: +list-fonts` command. By default they are derived automatically, by
+#: the OSes font system. When bold_font or bold_italic_font is set to
+#: auto on macOS, the priority of bold fonts is semi-bold, bold,
+#: heavy. Setting them manually is useful for font families that have
+#: many weight variants like Book, Medium, Thick, etc. For example::
+
+#: font_family Operator Mono Book
+#: bold_font Operator Mono Medium
+#: italic_font Operator Mono Book Italic
+#: bold_italic_font Operator Mono Medium Italic
+
+font_size 8.0
+
+#: Font size (in pts).
+
+# force_ltr no
+
+#: kitty does not support BIDI (bidirectional text), however, for RTL
+#: scripts, words are automatically displayed in RTL. That is to say,
+#: in an RTL script, the words "HELLO WORLD" display in kitty as
+#: "WORLD HELLO", and if you try to select a substring of an RTL-
+#: shaped string, you will get the character that would be there had
+#: the string been LTR. For example, assuming the Hebrew word ירושלים,
+#: selecting the character that on the screen appears to be ם actually
+#: writes into the selection buffer the character י. kitty's default
+#: behavior is useful in conjunction with a filter to reverse the word
+#: order, however, if you wish to manipulate RTL glyphs, it can be
+#: very challenging to work with, so this option is provided to turn
+#: it off. Furthermore, this option can be used with the command line
+#: program GNU FriBidi
+#: to get BIDI support, because it will force kitty to always treat
+#: the text as LTR, which FriBidi expects for terminals.
+
+# symbol_map
+
+#: E.g. symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols
+
+#: Map the specified Unicode codepoints to a particular font. Useful
+#: if you need special rendering for some symbols, such as for
+#: Powerline. Avoids the need for patched fonts. Each Unicode code
+#: point is specified in the form `U+`. You
+#: can specify multiple code points, separated by commas and ranges
+#: separated by hyphens. This option can be specified multiple times.
+#: The syntax is::
+
+#: symbol_map codepoints Font Family Name
+
+# narrow_symbols
+
+#: E.g. narrow_symbols U+E0A0-U+E0A3,U+E0C0-U+E0C7 1
+
+#: Usually, for Private Use Unicode characters and some symbol/dingbat
+#: characters, if the character is followed by one or more spaces,
+#: kitty will use those extra cells to render the character larger, if
+#: the character in the font has a wide aspect ratio. Using this
+#: option you can force kitty to restrict the specified code points to
+#: render in the specified number of cells (defaulting to one cell).
+#: This option can be specified multiple times. The syntax is::
+
+#: narrow_symbols codepoints [optionally the number of cells]
+
+# disable_ligatures never
+
+#: Choose how you want to handle multi-character ligatures. The
+#: default is to always render them. You can tell kitty to not render
+#: them when the cursor is over them by using cursor to make editing
+#: easier, or have kitty never render them at all by using always, if
+#: you don't like them. The ligature strategy can be set per-window
+#: either using the kitty remote control facility or by defining
+#: shortcuts for it in kitty.conf, for example::
+
+#: map alt+1 disable_ligatures_in active always
+#: map alt+2 disable_ligatures_in all never
+#: map alt+3 disable_ligatures_in tab cursor
+
+#: Note that this refers to programming ligatures, typically
+#: implemented using the calt OpenType feature. For disabling general
+#: ligatures, use the font_features option.
+
+# font_features
+
+#: E.g. font_features none
+
+#: Choose exactly which OpenType features to enable or disable. This
+#: is useful as some fonts might have features worthwhile in a
+#: terminal. For example, Fira Code includes a discretionary feature,
+#: zero, which in that font changes the appearance of the zero (0), to
+#: make it more easily distinguishable from Ø. Fira Code also includes
+#: other discretionary features known as Stylistic Sets which have the
+#: tags ss01 through ss20.
+
+#: For the exact syntax to use for individual features, see the
+#: HarfBuzz documentation .
+
+#: Note that this code is indexed by PostScript name, and not the font
+#: family. This allows you to define very precise feature settings;
+#: e.g. you can disable a feature in the italic font but not in the
+#: regular font.
+
+#: On Linux, font features are first read from the FontConfig database
+#: and then this option is applied, so they can be configured in a
+#: single, central place.
+
+#: To get the PostScript name for a font, use `kitty +list-fonts
+#: --psnames`:
+
+#: .. code-block:: sh
+
+#: $ kitty +list-fonts --psnames | grep Fira
+#: Fira Code
+#: Fira Code Bold (FiraCode-Bold)
+#: Fira Code Light (FiraCode-Light)
+#: Fira Code Medium (FiraCode-Medium)
+#: Fira Code Regular (FiraCode-Regular)
+#: Fira Code Retina (FiraCode-Retina)
+
+#: The part in brackets is the PostScript name.
+
+#: Enable alternate zero and oldstyle numerals::
+
+#: font_features FiraCode-Retina +zero +onum
+
+#: Enable only alternate zero in the bold font::
+
+#: font_features FiraCode-Bold +zero
+
+#: Disable the normal ligatures, but keep the calt feature which (in
+#: this font) breaks up monotony::
+
+#: font_features TT2020StyleB-Regular -liga +calt
+
+#: In conjunction with force_ltr, you may want to disable Arabic
+#: shaping entirely, and only look at their isolated forms if they
+#: show up in a document. You can do this with e.g.::
+
+#: font_features UnifontMedium +isol -medi -fina -init
+
+# modify_font
+
+#: Modify font characteristics such as the position or thickness of
+#: the underline and strikethrough. The modifications can have the
+#: suffix px for pixels or % for percentage of original value. No
+#: suffix means use pts. For example::
+
+#: modify_font underline_position -2
+#: modify_font underline_thickness 150%
+#: modify_font strikethrough_position 2px
+
+#: Additionally, you can modify the size of the cell in which each
+#: font glyph is rendered and the baseline at which the glyph is
+#: placed in the cell. For example::
+
+#: modify_font cell_width 80%
+#: modify_font cell_height -2px
+#: modify_font baseline 3
+
+#: Note that modifying the baseline will automatically adjust the
+#: underline and strikethrough positions by the same amount.
+#: Increasing the baseline raises glyphs inside the cell and
+#: decreasing it lowers them. Decreasing the cell size might cause
+#: rendering artifacts, so use with care.
+
+# box_drawing_scale 0.001, 1, 1.5, 2
+
+#: The sizes of the lines used for the box drawing Unicode characters.
+#: These values are in pts. They will be scaled by the monitor DPI to
+#: arrive at a pixel value. There must be four values corresponding to
+#: thin, normal, thick, and very thick lines.
+
+# undercurl_style thin-sparse
+
+#: The style with which undercurls are rendered. This option takes the
+#: form (thin|thick)-(sparse|dense). Thin and thick control the
+#: thickness of the undercurl. Sparse and dense control how often the
+#: curl oscillates. With sparse the curl will peak once per character,
+#: with dense twice.
+
+# text_composition_strategy platform
+
+#: Control how kitty composites text glyphs onto the background color.
+#: The default value of platform tries for text rendering as close to
+#: "native" for the platform kitty is running on as possible.
+
+#: A value of legacy uses the old (pre kitty 0.28) strategy for how
+#: glyphs are composited. This will make dark text on light
+#: backgrounds look thicker and light text on dark backgrounds
+#: thinner. It might also make some text appear like the strokes are
+#: uneven.
+
+#: You can fine tune the actual contrast curve used for glyph
+#: composition by specifying up to two space-separated numbers for
+#: this setting.
+
+#: The first number is the gamma adjustment, which controls the
+#: thickness of dark text on light backgrounds. Increasing the value
+#: will make text appear thicker. The default value for this is 1.0 on
+#: Linux and 1.7 on macOS. Valid values are 0.01 and above. The result
+#: is scaled based on the luminance difference between the background
+#: and the foreground. Dark text on light backgrounds receives the
+#: full impact of the curve while light text on dark backgrounds is
+#: affected very little.
+
+#: The second number is an additional multiplicative contrast. It is
+#: percentage ranging from 0 to 100. The default value is 0 on Linux
+#: and 30 on macOS.
+
+#: If you wish to achieve similar looking thickness in light and dark
+#: themes, a good way to experiment is start by setting the value to
+#: 1.0 0 and use a dark theme. Then adjust the second parameter until
+#: it looks good. Then switch to a light theme and adjust the first
+#: parameter until the perceived thickness matches the dark theme.
+
+# text_fg_override_threshold 0
+
+#: The minimum accepted difference in luminance between the foreground
+#: and background color, below which kitty will override the
+#: foreground color. It is percentage ranging from 0 to 100. If the
+#: difference in luminance of the foreground and background is below
+#: this threshold, the foreground color will be set to white if the
+#: background is dark or black if the background is light. The default
+#: value is 0, which means no overriding is performed. Useful when
+#: working with applications that use colors that do not contrast well
+#: with your preferred color scheme.
+
+#: WARNING: Some programs use characters (such as block characters)
+#: for graphics display and may expect to be able to set the
+#: foreground and background to the same color (or similar colors).
+#: If you see unexpected stripes, dots, lines, incorrect color, no
+#: color where you expect color, or any kind of graphic display
+#: problem try setting text_fg_override_threshold to 0 to see if this
+#: is the cause of the problem.
+
+#: }}}
+
+#: Cursor customization {{{
+
+# cursor #cccccc
+
+#: Default cursor color. If set to the special value none the cursor
+#: will be rendered with a "reverse video" effect. It's color will be
+#: the color of the text in the cell it is over and the text will be
+#: rendered with the background color of the cell. Note that if the
+#: program running in the terminal sets a cursor color, this takes
+#: precedence. Also, the cursor colors are modified if the cell
+#: background and foreground colors have very low contrast. Note that
+#: some themes set this value, so if you want to override it, place
+#: your value after the lines where the theme file is included.
+
+# cursor_text_color #111111
+
+#: The color of text under the cursor. If you want it rendered with
+#: the background color of the cell underneath instead, use the
+#: special keyword: `background`. Note that if cursor is set to none
+#: then this option is ignored. Note that some themes set this value,
+#: so if you want to override it, place your value after the lines
+#: where the theme file is included.
+
+# cursor_shape block
+
+#: The cursor shape can be one of block, beam, underline. Note that
+#: when reloading the config this will be changed only if the cursor
+#: shape has not been set by the program running in the terminal. This
+#: sets the default cursor shape, applications running in the terminal
+#: can override it. In particular, shell integration
+#: in kitty sets
+#: the cursor shape to beam at shell prompts. You can avoid this by
+#: setting shell_integration to no-cursor.
+
+# cursor_beam_thickness 1.5
+
+#: The thickness of the beam cursor (in pts).
+
+# cursor_underline_thickness 2.0
+
+#: The thickness of the underline cursor (in pts).
+
+# cursor_blink_interval -1
+
+#: The interval to blink the cursor (in seconds). Set to zero to
+#: disable blinking. Negative values mean use system default. Note
+#: that the minimum interval will be limited to repaint_delay.
+
+# cursor_stop_blinking_after 15.0
+
+#: Stop blinking cursor after the specified number of seconds of
+#: keyboard inactivity. Set to zero to never stop blinking.
+
+#: }}}
+
+#: Scrollback {{{
+
+# scrollback_lines 2000
+
+#: Number of lines of history to keep in memory for scrolling back.
+#: Memory is allocated on demand. Negative numbers are (effectively)
+#: infinite scrollback. Note that using very large scrollback is not
+#: recommended as it can slow down performance of the terminal and
+#: also use large amounts of RAM. Instead, consider using
+#: scrollback_pager_history_size. Note that on config reload if this
+#: is changed it will only affect newly created windows, not existing
+#: ones.
+
+# scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER
+
+#: Program with which to view scrollback in a new window. The
+#: scrollback buffer is passed as STDIN to this program. If you change
+#: it, make sure the program you use can handle ANSI escape sequences
+#: for colors and text formatting. INPUT_LINE_NUMBER in the command
+#: line above will be replaced by an integer representing which line
+#: should be at the top of the screen. Similarly CURSOR_LINE and
+#: CURSOR_COLUMN will be replaced by the current cursor position or
+#: set to 0 if there is no cursor, for example, when showing the last
+#: command output.
+
+# scrollback_pager_history_size 0
+
+#: Separate scrollback history size (in MB), used only for browsing
+#: the scrollback buffer with pager. This separate buffer is not
+#: available for interactive scrolling but will be piped to the pager
+#: program when viewing scrollback buffer in a separate window. The
+#: current implementation stores the data in UTF-8, so approximately
+#: 10000 lines per megabyte at 100 chars per line, for pure ASCII,
+#: unformatted text. A value of zero or less disables this feature.
+#: The maximum allowed size is 4GB. Note that on config reload if this
+#: is changed it will only affect newly created windows, not existing
+#: ones.
+
+# scrollback_fill_enlarged_window no
+
+#: Fill new space with lines from the scrollback buffer after
+#: enlarging a window.
+
+# wheel_scroll_multiplier 5.0
+
+#: Multiplier for the number of lines scrolled by the mouse wheel.
+#: Note that this is only used for low precision scrolling devices,
+#: not for high precision scrolling devices on platforms such as macOS
+#: and Wayland. Use negative numbers to change scroll direction. See
+#: also wheel_scroll_min_lines.
+
+# wheel_scroll_min_lines 1
+
+#: The minimum number of lines scrolled by the mouse wheel. The scroll
+#: multiplier wheel_scroll_multiplier only takes effect after it
+#: reaches this number. Note that this is only used for low precision
+#: scrolling devices like wheel mice that scroll by very small amounts
+#: when using the wheel. With a negative number, the minimum number of
+#: lines will always be added.
+
+# touch_scroll_multiplier 1.0
+
+#: Multiplier for the number of lines scrolled by a touchpad. Note
+#: that this is only used for high precision scrolling devices on
+#: platforms such as macOS and Wayland. Use negative numbers to change
+#: scroll direction.
+
+#: }}}
+
+#: Mouse {{{
+
+# mouse_hide_wait 3.0
+
+#: Hide mouse cursor after the specified number of seconds of the
+#: mouse not being used. Set to zero to disable mouse cursor hiding.
+#: Set to a negative value to hide the mouse cursor immediately when
+#: typing text. Disabled by default on macOS as getting it to work
+#: robustly with the ever-changing sea of bugs that is Cocoa is too
+#: much effort.
+
+# url_color #0087bd
+# url_style curly
+
+#: The color and style for highlighting URLs on mouse-over. url_style
+#: can be one of: none, straight, double, curly, dotted, dashed.
+
+# open_url_with default
+
+#: The program to open clicked URLs. The special value default will
+#: first look for any URL handlers defined via the open_actions
+#: facility and if non
+#: are found, it will use the Operating System's default URL handler
+#: (open on macOS and xdg-open on Linux).
+
+# url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto news sftp ssh
+
+#: The set of URL prefixes to look for when detecting a URL under the
+#: mouse cursor.
+
+# detect_urls yes
+
+#: Detect URLs under the mouse. Detected URLs are highlighted with an
+#: underline and the mouse cursor becomes a hand over them. Even if
+#: this option is disabled, URLs are still clickable. See also the
+#: underline_hyperlinks option to control how hyperlinks (as opposed
+#: to plain text URLs) are displayed.
+
+# url_excluded_characters
+
+#: Additional characters to be disallowed from URLs, when detecting
+#: URLs under the mouse cursor. By default, all characters that are
+#: legal in URLs are allowed. Additionally, newlines are allowed (but
+#: stripped). This is to accommodate programs such as mutt that add
+#: hard line breaks even for continued lines. \n can be added to this
+#: option to disable this behavior. Special characters can be
+#: specified using backslash escapes, to specify a backslash use a
+#: double backslash.
+
+# show_hyperlink_targets no
+
+#: When the mouse hovers over a terminal hyperlink, show the actual
+#: URL that will be activated when the hyperlink is clicked.
+
+# underline_hyperlinks hover
+
+#: Control how hyperlinks are underlined. They can either be
+#: underlined on mouse hover, always (i.e. permanently underlined) or
+#: never which means that kitty will not apply any underline styling
+#: to hyperlinks. Uses the url_style and url_color settings for the
+#: underline style. Note that reloading the config and changing this
+#: value to/from always will only affect text subsequently received by
+#: kitty.
+
+# copy_on_select no
+
+#: Copy to clipboard or a private buffer on select. With this set to
+#: clipboard, selecting text with the mouse will cause the text to be
+#: copied to clipboard. Useful on platforms such as macOS that do not
+#: have the concept of primary selection. You can instead specify a
+#: name such as a1 to copy to a private kitty buffer. Map a shortcut
+#: with the paste_from_buffer action to paste from this private
+#: buffer. For example::
+
+#: copy_on_select a1
+#: map shift+cmd+v paste_from_buffer a1
+
+#: Note that copying to the clipboard is a security risk, as all
+#: programs, including websites open in your browser can read the
+#: contents of the system clipboard.
+
+# paste_actions quote-urls-at-prompt,confirm
+
+#: A comma separated list of actions to take when pasting text into
+#: the terminal. The supported paste actions are:
+
+#: quote-urls-at-prompt:
+#: If the text being pasted is a URL and the cursor is at a shell prompt,
+#: automatically quote the URL (needs shell_integration).
+#: replace-dangerous-control-codes
+#: Replace dangerous control codes from pasted text, without confirmation.
+#: replace-newline
+#: Replace the newline character from pasted text, without confirmation.
+#: confirm:
+#: Confirm the paste if the text to be pasted contains any terminal control codes
+#: as this can be dangerous, leading to code execution if the shell/program running
+#: in the terminal does not properly handle these.
+#: confirm-if-large
+#: Confirm the paste if it is very large (larger than 16KB) as pasting
+#: large amounts of text into shells can be very slow.
+#: filter:
+#: Run the filter_paste() function from the file paste-actions.py in
+#: the kitty config directory on the pasted text. The text returned by the
+#: function will be actually pasted.
+#: no-op:
+#: Has no effect.
+
+# strip_trailing_spaces never
+
+#: Remove spaces at the end of lines when copying to clipboard. A
+#: value of smart will do it when using normal selections, but not
+#: rectangle selections. A value of always will always do it.
+
+# select_by_word_characters @-./_~?&=%+#
+
+#: Characters considered part of a word when double clicking. In
+#: addition to these characters any character that is marked as an
+#: alphanumeric character in the Unicode database will be matched.
+
+# select_by_word_characters_forward
+
+#: Characters considered part of a word when extending the selection
+#: forward on double clicking. In addition to these characters any
+#: character that is marked as an alphanumeric character in the
+#: Unicode database will be matched.
+
+#: If empty (default) select_by_word_characters will be used for both
+#: directions.
+
+# click_interval -1.0
+
+#: The interval between successive clicks to detect double/triple
+#: clicks (in seconds). Negative numbers will use the system default
+#: instead, if available, or fallback to 0.5.
+
+# focus_follows_mouse no
+
+#: Set the active window to the window under the mouse when moving the
+#: mouse around. On macOS, this will also cause the OS Window under
+#: the mouse to be focused automatically when the mouse enters it.
+
+# pointer_shape_when_grabbed arrow
+
+#: The shape of the mouse pointer when the program running in the
+#: terminal grabs the mouse.
+
+# default_pointer_shape beam
+
+#: The default shape of the mouse pointer.
+
+# pointer_shape_when_dragging beam
+
+#: The default shape of the mouse pointer when dragging across text.
+
+#: Mouse actions {{{
+
+#: Mouse buttons can be mapped to perform arbitrary actions. The
+#: syntax is:
+
+#: .. code-block:: none
+
+#: mouse_map button-name event-type modes action
+
+#: Where button-name is one of left, middle, right, b1 ... b8 with
+#: added keyboard modifiers. For example: ctrl+shift+left refers to
+#: holding the Ctrl+Shift keys while clicking with the left mouse
+#: button. The value b1 ... b8 can be used to refer to up to eight
+#: buttons on a mouse.
+
+#: event-type is one of press, release, doublepress, triplepress,
+#: click, doubleclick. modes indicates whether the action is performed
+#: when the mouse is grabbed by the program running in the terminal,
+#: or not. The values are grabbed or ungrabbed or a comma separated
+#: combination of them. grabbed refers to when the program running in
+#: the terminal has requested mouse events. Note that the click and
+#: double click events have a delay of click_interval to disambiguate
+#: from double and triple presses.
+
+#: You can run kitty with the kitty --debug-input command line option
+#: to see mouse events. See the builtin actions below to get a sense
+#: of what is possible.
+
+#: If you want to unmap a button, map it to nothing. For example, to
+#: disable opening of URLs with a plain click::
+
+#: mouse_map left click ungrabbed
+
+#: See all the mappable actions including mouse actions here
+#: .
+
+#: .. note::
+#: Once a selection is started, releasing the button that started it will
+#: automatically end it and no release event will be dispatched.
+
+# clear_all_mouse_actions no
+
+#: Remove all mouse action definitions up to this point. Useful, for
+#: instance, to remove the default mouse actions.
+
+#: Click the link under the mouse or move the cursor
+
+# mouse_map left click ungrabbed mouse_handle_click selection link prompt
+
+#:: First check for a selection and if one exists do nothing. Then
+#:: check for a link under the mouse cursor and if one exists, click
+#:: it. Finally check if the click happened at the current shell
+#:: prompt and if so, move the cursor to the click location. Note
+#:: that this requires shell integration
+#:: to work.
+
+#: Click the link under the mouse or move the cursor even when grabbed
+
+# mouse_map shift+left click grabbed,ungrabbed mouse_handle_click selection link prompt
+
+#:: Same as above, except that the action is performed even when the
+#:: mouse is grabbed by the program running in the terminal.
+
+#: Click the link under the mouse cursor
+
+# mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_handle_click link
+
+#:: Variant with Ctrl+Shift is present because the simple click based
+#:: version has an unavoidable delay of click_interval, to
+#:: disambiguate clicks from double clicks.
+
+#: Discard press event for link click
+
+# mouse_map ctrl+shift+left press grabbed discard_event
+
+#:: Prevent this press event from being sent to the program that has
+#:: grabbed the mouse, as the corresponding release event is used to
+#:: open a URL.
+
+#: Paste from the primary selection
+
+# mouse_map middle release ungrabbed paste_from_selection
+
+#: Start selecting text
+
+# mouse_map left press ungrabbed mouse_selection normal
+
+#: Start selecting text in a rectangle
+
+# mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle
+
+#: Select a word
+
+# mouse_map left doublepress ungrabbed mouse_selection word
+
+#: Select a line
+
+# mouse_map left triplepress ungrabbed mouse_selection line
+
+#: Select line from point
+
+# mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point
+
+#:: Select from the clicked point to the end of the line. If you
+#:: would like to select the word at the point and then extend to the
+#:: rest of the line, change `line_from_point` to
+#:: `word_and_line_from_point`.
+
+#: Extend the current selection
+
+# mouse_map right press ungrabbed mouse_selection extend
+
+#:: If you want only the end of the selection to be moved instead of
+#:: the nearest boundary, use move-end instead of extend.
+
+#: Paste from the primary selection even when grabbed
+
+# mouse_map shift+middle release ungrabbed,grabbed paste_selection
+# mouse_map shift+middle press grabbed discard_event
+
+#: Start selecting text even when grabbed
+
+# mouse_map shift+left press ungrabbed,grabbed mouse_selection normal
+
+#: Start selecting text in a rectangle even when grabbed
+
+# mouse_map ctrl+shift+alt+left press ungrabbed,grabbed mouse_selection rectangle
+
+#: Select a word even when grabbed
+
+# mouse_map shift+left doublepress ungrabbed,grabbed mouse_selection word
+
+#: Select a line even when grabbed
+
+# mouse_map shift+left triplepress ungrabbed,grabbed mouse_selection line
+
+#: Select line from point even when grabbed
+
+# mouse_map ctrl+shift+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point
+
+#:: Select from the clicked point to the end of the line even when
+#:: grabbed. If you would like to select the word at the point and
+#:: then extend to the rest of the line, change `line_from_point` to
+#:: `word_and_line_from_point`.
+
+#: Extend the current selection even when grabbed
+
+# mouse_map shift+right press ungrabbed,grabbed mouse_selection extend
+
+#: Show clicked command output in pager
+
+# mouse_map ctrl+shift+right press ungrabbed mouse_show_command_output
+
+#:: Requires shell integration
+#:: to work.
+
+#: }}}
+
+#: }}}
+
+#: Performance tuning {{{
+
+# repaint_delay 10
+
+#: Delay between screen updates (in milliseconds). Decreasing it,
+#: increases frames-per-second (FPS) at the cost of more CPU usage.
+#: The default value yields ~100 FPS which is more than sufficient for
+#: most uses. Note that to actually achieve 100 FPS, you have to
+#: either set sync_to_monitor to no or use a monitor with a high
+#: refresh rate. Also, to minimize latency when there is pending input
+#: to be processed, this option is ignored.
+
+# input_delay 3
+
+#: Delay before input from the program running in the terminal is
+#: processed (in milliseconds). Note that decreasing it will increase
+#: responsiveness, but also increase CPU usage and might cause flicker
+#: in full screen programs that redraw the entire screen on each loop,
+#: because kitty is so fast that partial screen updates will be drawn.
+#: This setting is ignored when the input buffer is almost full.
+
+# sync_to_monitor yes
+
+#: Sync screen updates to the refresh rate of the monitor. This
+#: prevents screen tearing
+#: when scrolling.
+#: However, it limits the rendering speed to the refresh rate of your
+#: monitor. With a very high speed mouse/high keyboard repeat rate,
+#: you may notice some slight input latency. If so, set this to no.
+
+#: }}}
+
+#: Terminal bell {{{
+
+# enable_audio_bell yes
+
+#: The audio bell. Useful to disable it in environments that require
+#: silence.
+
+# visual_bell_duration 0.0
+
+#: The visual bell duration (in seconds). Flash the screen when a bell
+#: occurs for the specified number of seconds. Set to zero to disable.
+
+# visual_bell_color none
+
+#: The color used by visual bell. Set to none will fall back to
+#: selection background color. If you feel that the visual bell is too
+#: bright, you can set it to a darker color.
+
+# window_alert_on_bell yes
+
+#: Request window attention on bell. Makes the dock icon bounce on
+#: macOS or the taskbar flash on Linux.
+
+# bell_on_tab "🔔 "
+
+#: Some text or a Unicode symbol to show on the tab if a window in the
+#: tab that does not have focus has a bell. If you want to use leading
+#: or trailing spaces, surround the text with quotes. See
+#: tab_title_template for how this is rendered.
+
+#: For backwards compatibility, values of yes, y and true are
+#: converted to the default bell symbol and no, n, false and none are
+#: converted to the empty string.
+
+# command_on_bell none
+
+#: Program to run when a bell occurs. The environment variable
+#: KITTY_CHILD_CMDLINE can be used to get the program running in the
+#: window in which the bell occurred.
+
+# bell_path none
+
+#: Path to a sound file to play as the bell sound. If set to none, the
+#: system default bell sound is used. Must be in a format supported by
+#: the operating systems sound API, such as WAV or OGA on Linux
+#: (libcanberra) or AIFF, MP3 or WAV on macOS (NSSound).
+
+# linux_bell_theme __custom
+
+#: The XDG Sound Theme kitty will use to play the bell sound. Defaults
+#: to the custom theme name used by GNOME and Budgie, falling back to
+#: the default freedesktop theme if it does not exist. This option may
+#: be removed if Linux ever provides desktop-agnostic support for
+#: setting system sound themes.
+
+#: }}}
+
+#: Window layout {{{
+
+# remember_window_size yes
+# initial_window_width 640
+# initial_window_height 400
+
+#: If enabled, the OS Window size will be remembered so that new
+#: instances of kitty will have the same size as the previous
+#: instance. If disabled, the OS Window will initially have size
+#: configured by initial_window_width/height, in pixels. You can use a
+#: suffix of "c" on the width/height values to have them interpreted
+#: as number of cells instead of pixels.
+
+# enabled_layouts *
+
+#: The enabled window layouts. A comma separated list of layout names.
+#: The special value all means all layouts. The first listed layout
+#: will be used as the startup layout. Default configuration is all
+#: layouts in alphabetical order. For a list of available layouts, see
+#: the layouts .
+
+# window_resize_step_cells 2
+# window_resize_step_lines 2
+
+#: The step size (in units of cell width/cell height) to use when
+#: resizing kitty windows in a layout with the shortcut
+#: start_resizing_window. The cells value is used for horizontal
+#: resizing, and the lines value is used for vertical resizing.
+
+# window_border_width 0.5pt
+
+#: The width of window borders. Can be either in pixels (px) or pts
+#: (pt). Values in pts will be rounded to the nearest number of pixels
+#: based on screen resolution. If not specified, the unit is assumed
+#: to be pts. Note that borders are displayed only when more than one
+#: window is visible. They are meant to separate multiple windows.
+
+# draw_minimal_borders yes
+
+#: Draw only the minimum borders needed. This means that only the
+#: borders that separate the window from a neighbor are drawn. Note
+#: that setting a non-zero window_margin_width overrides this and
+#: causes all borders to be drawn.
+
+# window_margin_width 0
+
+#: The window margin (in pts) (blank area outside the border). A
+#: single value sets all four sides. Two values set the vertical and
+#: horizontal sides. Three values set top, horizontal and bottom. Four
+#: values set top, right, bottom and left.
+
+# single_window_margin_width -1
+
+#: The window margin to use when only a single window is visible (in
+#: pts). Negative values will cause the value of window_margin_width
+#: to be used instead. A single value sets all four sides. Two values
+#: set the vertical and horizontal sides. Three values set top,
+#: horizontal and bottom. Four values set top, right, bottom and left.
+
+# window_padding_width 0
+
+#: The window padding (in pts) (blank area between the text and the
+#: window border). A single value sets all four sides. Two values set
+#: the vertical and horizontal sides. Three values set top, horizontal
+#: and bottom. Four values set top, right, bottom and left.
+
+# single_window_padding_width -1
+
+#: The window padding to use when only a single window is visible (in
+#: pts). Negative values will cause the value of window_padding_width
+#: to be used instead. A single value sets all four sides. Two values
+#: set the vertical and horizontal sides. Three values set top,
+#: horizontal and bottom. Four values set top, right, bottom and left.
+
+# placement_strategy center
+
+#: When the window size is not an exact multiple of the cell size, the
+#: cell area of the terminal window will have some extra padding on
+#: the sides. You can control how that padding is distributed with
+#: this option. Using a value of center means the cell area will be
+#: placed centrally. A value of top-left means the padding will be
+#: only at the bottom and right edges.
+
+# active_border_color #00ff00
+
+#: The color for the border of the active window. Set this to none to
+#: not draw borders around the active window.
+
+# inactive_border_color #cccccc
+
+#: The color for the border of inactive windows.
+
+# bell_border_color #ff5a00
+
+#: The color for the border of inactive windows in which a bell has
+#: occurred.
+
+# inactive_text_alpha 1.0
+
+#: Fade the text in inactive windows by the specified amount (a number
+#: between zero and one, with zero being fully faded).
+
+# hide_window_decorations no
+
+#: Hide the window decorations (title-bar and window borders) with
+#: yes. On macOS, titlebar-only and titlebar-and-corners can be used
+#: to only hide the titlebar and the rounded corners. Whether this
+#: works and exactly what effect it has depends on the window
+#: manager/operating system. Note that the effects of changing this
+#: option when reloading config are undefined. When using titlebar-
+#: only, it is useful to also set window_margin_width and
+#: placement_strategy to prevent the rounded corners from clipping
+#: text. Or use titlebar-and-corners.
+
+# window_logo_path none
+
+#: Path to a logo image. Must be in PNG format. Relative paths are
+#: interpreted relative to the kitty config directory. The logo is
+#: displayed in a corner of every kitty window. The position is
+#: controlled by window_logo_position. Individual windows can be
+#: configured to have different logos either using the launch action
+#: or the remote control facility.
+
+# window_logo_position bottom-right
+
+#: Where to position the window logo in the window. The value can be
+#: one of: top-left, top, top-right, left, center, right, bottom-left,
+#: bottom, bottom-right.
+
+# window_logo_alpha 0.5
+
+#: The amount the logo should be faded into the background. With zero
+#: being fully faded and one being fully opaque.
+
+# resize_debounce_time 0.1 0.5
+
+#: The time to wait (in seconds) before asking the program running in
+#: kitty to resize and redraw the screen during a live resize of the
+#: OS window, when no new resize events have been received, i.e. when
+#: resizing is either paused or finished. On platforms such as macOS,
+#: where the operating system sends events corresponding to the start
+#: and end of a live resize, the second number is used for redraw-
+#: after-pause since kitty can distinguish between a pause and end of
+#: resizing. On such systems the first number is ignored and redraw is
+#: immediate after end of resize. On other systems only the first
+#: number is used so that kitty is "ready" quickly after the end of
+#: resizing, while not also continuously redrawing, to save energy.
+
+# resize_in_steps no
+
+#: Resize the OS window in steps as large as the cells, instead of
+#: with the usual pixel accuracy. Combined with initial_window_width
+#: and initial_window_height in number of cells, this option can be
+#: used to keep the margins as small as possible when resizing the OS
+#: window. Note that this does not currently work on Wayland.
+
+# visual_window_select_characters 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
+
+#: The list of characters for visual window selection. For example,
+#: for selecting a window to focus on with focus_visible_window. The
+#: value should be a series of unique numbers or alphabets, case
+#: insensitive, from the set 0-9A-Z\-=[];',./\\`. Specify your
+#: preference as a string of characters.
+
+# confirm_os_window_close -1
+
+#: Ask for confirmation when closing an OS window or a tab with at
+#: least this number of kitty windows in it by window manager (e.g.
+#: clicking the window close button or pressing the operating system
+#: shortcut to close windows) or by the close_tab action. A value of
+#: zero disables confirmation. This confirmation also applies to
+#: requests to quit the entire application (all OS windows, via the
+#: quit action). Negative values are converted to positive ones,
+#: however, with shell_integration enabled, using negative values
+#: means windows sitting at a shell prompt are not counted, only
+#: windows where some command is currently running. Note that if you
+#: want confirmation when closing individual windows, you can map the
+#: close_window_with_confirmation action.
+
+#: }}}
+
+#: Tab bar {{{
+
+# tab_bar_edge bottom
+
+#: The edge to show the tab bar on, top or bottom.
+
+# tab_bar_margin_width 0.0
+
+#: The margin to the left and right of the tab bar (in pts).
+
+# tab_bar_margin_height 0.0 0.0
+
+#: The margin above and below the tab bar (in pts). The first number
+#: is the margin between the edge of the OS Window and the tab bar.
+#: The second number is the margin between the tab bar and the
+#: contents of the current tab.
+
+# tab_bar_style fade
+
+#: The tab bar style, can be one of:
+
+#: fade
+#: Each tab's edges fade into the background color. (See also tab_fade)
+#: slant
+#: Tabs look like the tabs in a physical file.
+#: separator
+#: Tabs are separated by a configurable separator. (See also
+#: tab_separator)
+#: powerline
+#: Tabs are shown as a continuous line with "fancy" separators.
+#: (See also tab_powerline_style)
+#: custom
+#: A user-supplied Python function called draw_tab is loaded from the file
+#: tab_bar.py in the kitty config directory. For examples of how to
+#: write such a function, see the functions named draw_tab_with_* in
+#: kitty's source code: kitty/tab_bar.py. See also
+#: this discussion
+#: for examples from kitty users.
+#: hidden
+#: The tab bar is hidden. If you use this, you might want to create
+#: a mapping for the select_tab action which presents you with a list of
+#: tabs and allows for easy switching to a tab.
+
+# tab_bar_align left
+
+#: The horizontal alignment of the tab bar, can be one of: left,
+#: center, right.
+
+# tab_bar_min_tabs 2
+
+#: The minimum number of tabs that must exist before the tab bar is
+#: shown.
+
+# tab_switch_strategy previous
+
+#: The algorithm to use when switching to a tab when the current tab
+#: is closed. The default of previous will switch to the last used
+#: tab. A value of left will switch to the tab to the left of the
+#: closed tab. A value of right will switch to the tab to the right of
+#: the closed tab. A value of last will switch to the right-most tab.
+
+# tab_fade 0.25 0.5 0.75 1
+
+#: Control how each tab fades into the background when using fade for
+#: the tab_bar_style. Each number is an alpha (between zero and one)
+#: that controls how much the corresponding cell fades into the
+#: background, with zero being no fade and one being full fade. You
+#: can change the number of cells used by adding/removing entries to
+#: this list.
+
+# tab_separator " ┇"
+
+#: The separator between tabs in the tab bar when using separator as
+#: the tab_bar_style.
+
+# tab_powerline_style angled
+
+#: The powerline separator style between tabs in the tab bar when
+#: using powerline as the tab_bar_style, can be one of: angled,
+#: slanted, round.
+
+# tab_activity_symbol none
+
+#: Some text or a Unicode symbol to show on the tab if a window in the
+#: tab that does not have focus has some activity. If you want to use
+#: leading or trailing spaces, surround the text with quotes. See
+#: tab_title_template for how this is rendered.
+
+# tab_title_max_length 0
+
+#: The maximum number of cells that can be used to render the text in
+#: a tab. A value of zero means that no limit is applied.
+
+# tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title}"
+
+#: A template to render the tab title. The default just renders the
+#: title with optional symbols for bell and activity. If you wish to
+#: include the tab-index as well, use something like: {index}:{title}.
+#: Useful if you have shortcuts mapped for goto_tab N. If you prefer
+#: to see the index as a superscript, use {sup.index}. All data
+#: available is:
+
+#: title
+#: The current tab title.
+#: index
+#: The tab index usable with goto_tab N goto_tab shortcuts.
+#: layout_name
+#: The current layout name.
+#: num_windows
+#: The number of windows in the tab.
+#: num_window_groups
+#: The number of window groups (a window group is a window and all of its overlay windows) in the tab.
+#: tab.active_wd
+#: The working directory of the currently active window in the tab
+#: (expensive, requires syscall). Use active_oldest_wd to get
+#: the directory of the oldest foreground process rather than the newest.
+#: tab.active_exe
+#: The name of the executable running in the foreground of the currently
+#: active window in the tab (expensive, requires syscall). Use
+#: active_oldest_exe for the oldest foreground process.
+#: max_title_length
+#: The maximum title length available.
+
+#: Note that formatting is done by Python's string formatting
+#: machinery, so you can use, for instance, {layout_name[:2].upper()}
+#: to show only the first two letters of the layout name, upper-cased.
+#: If you want to style the text, you can use styling directives, for
+#: example:
+#: `{fmt.fg.red}red{fmt.fg.tab}normal{fmt.bg._00FF00}greenbg{fmt.bg.tab}`.
+#: Similarly, for bold and italic:
+#: `{fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}`.
+#: Note that for backward compatibility, if {bell_symbol} or
+#: {activity_symbol} are not present in the template, they are
+#: prepended to it.
+
+# active_tab_title_template none
+
+#: Template to use for active tabs. If not specified falls back to
+#: tab_title_template.
+
+# active_tab_foreground #000
+# active_tab_background #eee
+# active_tab_font_style bold-italic
+# inactive_tab_foreground #444
+# inactive_tab_background #999
+# inactive_tab_font_style normal
+
+#: Tab bar colors and styles.
+
+# tab_bar_background none
+
+#: Background color for the tab bar. Defaults to using the terminal
+#: background color.
+
+# tab_bar_margin_color none
+
+#: Color for the tab bar margin area. Defaults to using the terminal
+#: background color for margins above and below the tab bar. For side
+#: margins the default color is chosen to match the background color
+#: of the neighboring tab.
+
+#: }}}
+
+#: Color scheme {{{
+
+# foreground #dddddd
+# background #000000
+
+#: The foreground and background colors.
+
+background_opacity 0.5
+
+#: The opacity of the background. A number between zero and one, where
+#: one is opaque and zero is fully transparent. This will only work if
+#: supported by the OS (for instance, when using a compositor under
+#: X11). Note that it only sets the background color's opacity in
+#: cells that have the same background color as the default terminal
+#: background, so that things like the status bar in vim, powerline
+#: prompts, etc. still look good. But it means that if you use a color
+#: theme with a background color in your editor, it will not be
+#: rendered as transparent. Instead you should change the default
+#: background color in your kitty config and not use a background
+#: color in the editor color scheme. Or use the escape codes to set
+#: the terminals default colors in a shell script to launch your
+#: editor. Be aware that using a value less than 1.0 is a (possibly
+#: significant) performance hit. When using a low value for this
+#: setting, it is desirable that you set the background color to a
+#: color the matches the general color of the desktop background, for
+#: best text rendering. If you want to dynamically change
+#: transparency of windows, set dynamic_background_opacity to yes
+#: (this is off by default as it has a performance cost). Changing
+#: this option when reloading the config will only work if
+#: dynamic_background_opacity was enabled in the original config.
+
+# background_blur 0
+
+#: Set to a positive value to enable background blur (blurring of the
+#: visuals behind a transparent window) on platforms that support it.
+#: Only takes effect when background_opacity is less than one. On
+#: macOS, this will also control the blur radius (amount of blurring).
+#: Setting it to too high a value will cause severe performance issues
+#: and/or rendering artifacts. Usually, values up to 64 work well.
+#: Note that this might cause performance issues, depending on how the
+#: platform implements it, so use with care. Currently supported on
+#: macOS and KDE under X11.
+
+# background_image none
+
+#: Path to a background image. Must be in PNG format.
+
+# background_image_layout tiled
+
+#: Whether to tile, scale or clamp the background image. The value can
+#: be one of tiled, mirror-tiled, scaled, clamped, centered or
+#: cscaled. The scaled and cscaled values scale the image to the
+#: window size, with cscaled preserving the image aspect ratio.
+
+# background_image_linear no
+
+#: When background image is scaled, whether linear interpolation
+#: should be used.
+
+# dynamic_background_opacity no
+
+#: Allow changing of the background_opacity dynamically, using either
+#: keyboard shortcuts (increase_background_opacity and
+#: decrease_background_opacity) or the remote control facility.
+#: Changing this option by reloading the config is not supported.
+
+# background_tint 0.0
+
+#: How much to tint the background image by the background color. This
+#: option makes it easier to read the text. Tinting is done using the
+#: current background color for each window. This option applies only
+#: if background_opacity is set and transparent windows are supported
+#: or background_image is set.
+
+# background_tint_gaps 1.0
+
+#: How much to tint the background image at the window gaps by the
+#: background color, after applying background_tint. Since this is
+#: multiplicative with background_tint, it can be used to lighten the
+#: tint over the window gaps for a *separated* look.
+
+# dim_opacity 0.4
+
+#: How much to dim text that has the DIM/FAINT attribute set. One
+#: means no dimming and zero means fully dimmed (i.e. invisible).
+
+# selection_foreground #000000
+# selection_background #fffacd
+
+#: The foreground and background colors for text selected with the
+#: mouse. Setting both of these to none will cause a "reverse video"
+#: effect for selections, where the selection will be the cell text
+#: color and the text will become the cell background color. Setting
+#: only selection_foreground to none will cause the foreground color
+#: to be used unchanged. Note that these colors can be overridden by
+#: the program running in the terminal.
+
+#: The color table {{{
+
+#: The 256 terminal colors. There are 8 basic colors, each color has a
+#: dull and bright version, for the first 16 colors. You can set the
+#: remaining 240 colors as color16 to color255.
+
+# color0 #000000
+# color8 #767676
+
+#: black
+
+# color1 #cc0403
+# color9 #f2201f
+
+#: red
+
+# color2 #19cb00
+# color10 #23fd00
+
+#: green
+
+# color3 #cecb00
+# color11 #fffd00
+
+#: yellow
+
+# color4 #0d73cc
+# color12 #1a8fff
+
+#: blue
+
+# color5 #cb1ed1
+# color13 #fd28ff
+
+#: magenta
+
+# color6 #0dcdcd
+# color14 #14ffff
+
+#: cyan
+
+# color7 #dddddd
+# color15 #ffffff
+
+#: white
+
+# mark1_foreground black
+
+#: Color for marks of type 1
+
+# mark1_background #98d3cb
+
+#: Color for marks of type 1 (light steel blue)
+
+# mark2_foreground black
+
+#: Color for marks of type 2
+
+# mark2_background #f2dcd3
+
+#: Color for marks of type 1 (beige)
+
+# mark3_foreground black
+
+#: Color for marks of type 3
+
+# mark3_background #f274bc
+
+#: Color for marks of type 3 (violet)
+
+#: }}}
+
+#: }}}
+
+#: Advanced {{{
+
+# shell .
+
+#: The shell program to execute. The default value of . means to use
+#: whatever shell is set as the default shell for the current user.
+#: Note that on macOS if you change this, you might need to add
+#: --login and --interactive to ensure that the shell starts in
+#: interactive mode and reads its startup rc files. Environment
+#: variables are expanded in this setting.
+
+# editor .
+
+#: The terminal based text editor (such as vim or nano) to use when
+#: editing the kitty config file or similar tasks.
+
+#: The default value of . means to use the environment variables
+#: VISUAL and EDITOR in that order. If these variables aren't set,
+#: kitty will run your shell ($SHELL -l -i -c env) to see if your
+#: shell startup rc files set VISUAL or EDITOR. If that doesn't work,
+#: kitty will cycle through various known editors (vim, emacs, etc.)
+#: and take the first one that exists on your system.
+
+# close_on_child_death no
+
+#: Close the window when the child process (shell) exits. With the
+#: default value no, the terminal will remain open when the child
+#: exits as long as there are still processes outputting to the
+#: terminal (for example disowned or backgrounded processes). When
+#: enabled with yes, the window will close as soon as the child
+#: process exits. Note that setting it to yes means that any
+#: background processes still using the terminal can fail silently
+#: because their stdout/stderr/stdin no longer work.
+
+# remote_control_password
+
+#: Allow other programs to control kitty using passwords. This option
+#: can be specified multiple times to add multiple passwords. If no
+#: passwords are present kitty will ask the user for permission if a
+#: program tries to use remote control with a password. A password can
+#: also *optionally* be associated with a set of allowed remote
+#: control actions. For example::
+
+#: remote_control_password "my passphrase" get-colors set-colors focus-window focus-tab
+
+#: Only the specified actions will be allowed when using this
+#: password. Glob patterns can be used too, for example::
+
+#: remote_control_password "my passphrase" set-tab-* resize-*
+
+#: To get a list of available actions, run::
+
+#: kitten @ --help
+
+#: A set of actions to be allowed when no password is sent can be
+#: specified by using an empty password. For example::
+
+#: remote_control_password "" *-colors
+
+#: Finally, the path to a python module can be specified that provides
+#: a function is_cmd_allowed that is used to check every remote
+#: control command. For example::
+
+#: remote_control_password "my passphrase" my_rc_command_checker.py
+
+#: Relative paths are resolved from the kitty configuration directory.
+#: See rc_custom_auth for details.
+
+# allow_remote_control no
+
+#: Allow other programs to control kitty. If you turn this on, other
+#: programs can control all aspects of kitty, including sending text
+#: to kitty windows, opening new windows, closing windows, reading the
+#: content of windows, etc. Note that this even works over SSH
+#: connections. The default setting of no prevents any form of remote
+#: control. The meaning of the various values are:
+
+#: password
+#: Remote control requests received over both the TTY device and the socket
+#: are confirmed based on passwords, see remote_control_password.
+
+#: socket-only
+#: Remote control requests received over a socket are accepted
+#: unconditionally. Requests received over the TTY are denied.
+#: See listen_on.
+
+#: socket
+#: Remote control requests received over a socket are accepted
+#: unconditionally. Requests received over the TTY are confirmed based on
+#: password.
+
+#: no
+#: Remote control is completely disabled.
+
+#: yes
+#: Remote control requests are always accepted.
+
+# listen_on none
+
+#: Listen to the specified socket for remote control connections. Note
+#: that this will apply to all kitty instances. It can be overridden
+#: by the kitty --listen-on command line option. For UNIX sockets,
+#: such as unix:${TEMP}/mykitty or unix:@mykitty (on Linux).
+#: Environment variables are expanded and relative paths are resolved
+#: with respect to the temporary directory. If {kitty_pid} is present,
+#: then it is replaced by the PID of the kitty process, otherwise the
+#: PID of the kitty process is appended to the value, with a hyphen.
+#: For TCP sockets such as tcp:localhost:0 a random port is always
+#: used even if a non-zero port number is specified. See the help for
+#: kitty --listen-on for more details. Note that this will be ignored
+#: unless allow_remote_control is set to either: yes, socket or
+#: socket-only. Changing this option by reloading the config is not
+#: supported.
+
+# env
+
+#: Specify the environment variables to be set in all child processes.
+#: Using the name with an equal sign (e.g. env VAR=) will set it to
+#: the empty string. Specifying only the name (e.g. env VAR) will
+#: remove the variable from the child process' environment. Note that
+#: environment variables are expanded recursively, for example::
+
+#: env VAR1=a
+#: env VAR2=${HOME}/${VAR1}/b
+
+#: The value of VAR2 will be /a/b.
+
+# watcher
+
+#: Path to python file which will be loaded for watchers
+#: . Can be
+#: specified more than once to load multiple watchers. The watchers
+#: will be added to every kitty window. Relative paths are resolved
+#: relative to the kitty config directory. Note that reloading the
+#: config will only affect windows created after the reload.
+
+# exe_search_path
+
+#: Control where kitty finds the programs to run. The default search
+#: order is: First search the system wide PATH, then ~/.local/bin and
+#: ~/bin. If still not found, the PATH defined in the login shell
+#: after sourcing all its startup files is tried. Finally, if present,
+#: the PATH specified by the env option is tried.
+
+#: This option allows you to prepend, append, or remove paths from
+#: this search order. It can be specified multiple times for multiple
+#: paths. A simple path will be prepended to the search order. A path
+#: that starts with the + sign will be append to the search order,
+#: after ~/bin above. A path that starts with the - sign will be
+#: removed from the entire search order. For example::
+
+#: exe_search_path /some/prepended/path
+#: exe_search_path +/some/appended/path
+#: exe_search_path -/some/excluded/path
+
+# update_check_interval 24
+
+#: The interval to periodically check if an update to kitty is
+#: available (in hours). If an update is found, a system notification
+#: is displayed informing you of the available update. The default is
+#: to check every 24 hours, set to zero to disable. Update checking is
+#: only done by the official binary builds. Distro packages or source
+#: builds do not do update checking. Changing this option by reloading
+#: the config is not supported.
+
+# startup_session none
+
+#: Path to a session file to use for all kitty instances. Can be
+#: overridden by using the kitty --session =none command line option
+#: for individual instances. See sessions
+#: in the kitty
+#: documentation for details. Note that relative paths are interpreted
+#: with respect to the kitty config directory. Environment variables
+#: in the path are expanded. Changing this option by reloading the
+#: config is not supported. Note that if kitty is invoked with command
+#: line arguments specifying a command to run, this option is ignored.
+
+# clipboard_control write-clipboard write-primary read-clipboard-ask read-primary-ask
+
+#: Allow programs running in kitty to read and write from the
+#: clipboard. You can control exactly which actions are allowed. The
+#: possible actions are: write-clipboard, read-clipboard, write-
+#: primary, read-primary, read-clipboard-ask, read-primary-ask. The
+#: default is to allow writing to the clipboard and primary selection
+#: and to ask for permission when a program tries to read from the
+#: clipboard. Note that disabling the read confirmation is a security
+#: risk as it means that any program, even the ones running on a
+#: remote server via SSH can read your clipboard. See also
+#: clipboard_max_size.
+
+# clipboard_max_size 512
+
+#: The maximum size (in MB) of data from programs running in kitty
+#: that will be stored for writing to the system clipboard. A value of
+#: zero means no size limit is applied. See also clipboard_control.
+
+# file_transfer_confirmation_bypass
+
+#: The password that can be supplied to the file transfer kitten
+#: to skip the
+#: transfer confirmation prompt. This should only be used when
+#: initiating transfers from trusted computers, over trusted networks
+#: or encrypted transports, as it allows any programs running on the
+#: remote machine to read/write to the local filesystem, without
+#: permission.
+
+# allow_hyperlinks yes
+
+#: Process hyperlink escape sequences (OSC 8). If disabled OSC 8
+#: escape sequences are ignored. Otherwise they become clickable
+#: links, that you can click with the mouse or by using the hints
+#: kitten . The
+#: special value of ask means that kitty will ask before opening the
+#: link when clicked.
+
+# shell_integration enabled
+
+#: Enable shell integration on supported shells. This enables features
+#: such as jumping to previous prompts, browsing the output of the
+#: previous command in a pager, etc. on supported shells. Set to
+#: disabled to turn off shell integration, completely. It is also
+#: possible to disable individual features, set to a space separated
+#: list of these values: no-rc, no-cursor, no-title, no-cwd, no-
+#: prompt-mark, no-complete, no-sudo. See Shell integration
+#: for details.
+
+# allow_cloning ask
+
+#: Control whether programs running in the terminal can request new
+#: windows to be created. The canonical example is clone-in-kitty
+#: .
+#: By default, kitty will ask for permission for each clone request.
+#: Allowing cloning unconditionally gives programs running in the
+#: terminal (including over SSH) permission to execute arbitrary code,
+#: as the user who is running the terminal, on the computer that the
+#: terminal is running on.
+
+# clone_source_strategies venv,conda,env_var,path
+
+#: Control what shell code is sourced when running clone-in-kitty in
+#: the newly cloned window. The supported strategies are:
+
+#: venv
+#: Source the file $VIRTUAL_ENV/bin/activate. This is used by the
+#: Python stdlib venv module and allows cloning venvs automatically.
+#: conda
+#: Run conda activate $CONDA_DEFAULT_ENV. This supports the virtual
+#: environments created by conda.
+#: env_var
+#: Execute the contents of the environment variable
+#: KITTY_CLONE_SOURCE_CODE with eval.
+#: path
+#: Source the file pointed to by the environment variable
+#: KITTY_CLONE_SOURCE_PATH.
+
+#: This option must be a comma separated list of the above values.
+#: Only the first valid match, in the order specified, is sourced.
+
+# notify_on_cmd_finish never
+
+#: Show a desktop notification when a long-running command finishes
+#: (needs shell_integration). The possible values are:
+
+#: never
+#: Never send a notification.
+
+#: unfocused
+#: Only send a notification when the window does not have keyboard focus.
+
+#: invisible
+#: Only send a notification when the window both is unfocused and not visible
+#: to the user, for example, because it is in an inactive tab or its OS window
+#: is not currently active.
+
+#: always
+#: Always send a notification, regardless of window state.
+
+#: There are two optional arguments:
+
+#: First, the minimum duration for what is considered a long running
+#: command. The default is 5 seconds. Specify a second argument to set
+#: the duration. For example: invisible 15. Do not set the value too
+#: small, otherwise a command that launches a new OS Window and exits
+#: will spam a notification.
+
+#: Second, the action to perform. The default is notify. The possible
+#: values are:
+
+#: notify
+#: Send a desktop notification.
+
+#: bell
+#: Ring the terminal bell.
+
+#: command
+#: Run a custom command. All subsequent arguments are the cmdline to run.
+
+#: Some more examples::
+
+#: # Send a notification when a command takes more than 5 seconds in an unfocused window
+#: notify_on_cmd_finish unfocused
+#: # Send a notification when a command takes more than 10 seconds in a invisible window
+#: notify_on_cmd_finish invisible 10.0
+#: # Ring a bell when a command takes more than 10 seconds in a invisible window
+#: notify_on_cmd_finish invisible 10.0 bell
+#: # Run 'notify-send' when a command takes more than 10 seconds in a invisible window
+#: notify_on_cmd_finish invisible 10.0 command notify-send job finished
+
+# term xterm-kitty
+
+#: The value of the TERM environment variable to set. Changing this
+#: can break many terminal programs, only change it if you know what
+#: you are doing, not because you read some advice on "Stack Overflow"
+#: to change it. The TERM variable is used by various programs to get
+#: information about the capabilities and behavior of the terminal. If
+#: you change it, depending on what programs you run, and how
+#: different the terminal you are changing it to is, various things
+#: from key-presses, to colors, to various advanced features may not
+#: work. Changing this option by reloading the config will only affect
+#: newly created windows.
+
+# forward_stdio no
+
+#: Forward STDOUT and STDERR of the kitty process to child processes
+#: as file descriptors 3 and 4. This is useful for debugging as it
+#: allows child processes to print to kitty's STDOUT directly. For
+#: example, echo hello world >&3 in a shell will print to the parent
+#: kitty's STDOUT. When enabled, this also sets the
+#: KITTY_STDIO_FORWARDED=3 environment variable so child processes
+#: know about the forwarding.
+
+# menu_map
+
+#: Specify entries for various menus in kitty. Currently only the
+#: global menubar on macOS is supported. For example::
+
+#: menu_map global "Actions::Launch something special" launch --hold --type=os-window sh -c "echo hello world"
+
+#: This will create a menu entry named "Launch something special" in
+#: an "Actions" menu in the macOS global menubar. Sub-menus can be
+#: created by adding more levels separated by the :: characters.
+
+#: }}}
+
+#: OS specific tweaks {{{
+
+# wayland_titlebar_color system
+
+#: The color of the kitty window's titlebar on Wayland systems with
+#: client side window decorations such as GNOME. A value of system
+#: means to use the default system color, a value of background means
+#: to use the background color of the currently active window and
+#: finally you can use an arbitrary color, such as #12af59 or red.
+
+# macos_titlebar_color system
+
+#: The color of the kitty window's titlebar on macOS. A value of
+#: system means to use the default system color, light or dark can
+#: also be used to set it explicitly. A value of background means to
+#: use the background color of the currently active window and finally
+#: you can use an arbitrary color, such as #12af59 or red. WARNING:
+#: This option works by using a hack when arbitrary color (or
+#: background) is configured, as there is no proper Cocoa API for it.
+#: It sets the background color of the entire window and makes the
+#: titlebar transparent. As such it is incompatible with
+#: background_opacity. If you want to use both, you are probably
+#: better off just hiding the titlebar with hide_window_decorations.
+
+# macos_option_as_alt no
+
+#: Use the Option key as an Alt key on macOS. With this set to no,
+#: kitty will use the macOS native Option+Key to enter Unicode
+#: character behavior. This will break any Alt+Key keyboard shortcuts
+#: in your terminal programs, but you can use the macOS Unicode input
+#: technique. You can use the values: left, right or both to use only
+#: the left, right or both Option keys as Alt, instead. Note that
+#: kitty itself always treats Option the same as Alt. This means you
+#: cannot use this option to configure different kitty shortcuts for
+#: Option+Key vs. Alt+Key. Also, any kitty shortcuts using
+#: Option/Alt+Key will take priority, so that any such key presses
+#: will not be passed to terminal programs running inside kitty.
+#: Changing this option by reloading the config is not supported.
+
+# macos_hide_from_tasks no
+
+#: Hide the kitty window from running tasks on macOS (⌘+Tab and the
+#: Dock). Changing this option by reloading the config is not
+#: supported.
+
+# macos_quit_when_last_window_closed no
+
+#: Have kitty quit when all the top-level windows are closed on macOS.
+#: By default, kitty will stay running, even with no open windows, as
+#: is the expected behavior on macOS.
+
+# macos_window_resizable yes
+
+#: Disable this if you want kitty top-level OS windows to not be
+#: resizable on macOS.
+
+# macos_thicken_font 0
+
+#: Draw an extra border around the font with the given width, to
+#: increase legibility at small font sizes on macOS. For example, a
+#: value of 0.75 will result in rendering that looks similar to sub-
+#: pixel antialiasing at common font sizes. Note that in modern kitty,
+#: this option is obsolete (although still supported). Consider using
+#: text_composition_strategy instead.
+
+# macos_traditional_fullscreen no
+
+#: Use the macOS traditional full-screen transition, that is faster,
+#: but less pretty.
+
+# macos_show_window_title_in all
+
+#: Control where the window title is displayed on macOS. A value of
+#: window will show the title of the currently active window at the
+#: top of the macOS window. A value of menubar will show the title of
+#: the currently active window in the macOS global menu bar, making
+#: use of otherwise wasted space. A value of all will show the title
+#: in both places, and none hides the title. See
+#: macos_menubar_title_max_length for how to control the length of the
+#: title in the menu bar.
+
+# macos_menubar_title_max_length 0
+
+#: The maximum number of characters from the window title to show in
+#: the macOS global menu bar. Values less than one means that there is
+#: no maximum limit.
+
+# macos_custom_beam_cursor no
+
+#: Use a custom mouse cursor for macOS that is easier to see on both
+#: light and dark backgrounds. Nowadays, the default macOS cursor
+#: already comes with a white border. WARNING: this might make your
+#: mouse cursor invisible on dual GPU machines. Changing this option
+#: by reloading the config is not supported.
+
+# macos_colorspace srgb
+
+#: The colorspace in which to interpret terminal colors. The default
+#: of srgb will cause colors to match those seen in web browsers. The
+#: value of default will use whatever the native colorspace of the
+#: display is. The value of displayp3 will use Apple's special
+#: snowflake display P3 color space, which will result in over
+#: saturated (brighter) colors with some color shift. Reloading
+#: configuration will change this value only for newly created OS
+#: windows.
+
+# linux_display_server auto
+
+#: Choose between Wayland and X11 backends. By default, an appropriate
+#: backend based on the system state is chosen automatically. Set it
+#: to x11 or wayland to force the choice. Changing this option by
+#: reloading the config is not supported.
+
+#: }}}
+
+#: Keyboard shortcuts {{{
+
+#: Keys are identified simply by their lowercase Unicode characters.
+#: For example: a for the A key, [ for the left square bracket key,
+#: etc. For functional keys, such as Enter or Escape, the names are
+#: present at Functional key definitions
+#: .
+#: For modifier keys, the names are ctrl (control, ⌃), shift (⇧), alt
+#: (opt, option, ⌥), super (cmd, command, ⌘).
+
+#: Simple shortcut mapping is done with the map directive. For full
+#: details on advanced mapping including modal and per application
+#: maps, see mapping . Some
+#: quick examples to illustrate common tasks::
+
+#: # unmap a keyboard shortcut, passing it to the program running in kitty
+#: map kitty_mod+space
+#: # completely ignore a keyboard event
+#: map ctrl+alt+f1 discard_event
+#: # combine multiple actions
+#: map kitty_mod+e combine : new_window : next_layout
+#: # multi-key shortcuts
+#: map ctrl+x>ctrl+y>z action
+
+#: The full list of actions that can be mapped to key presses is
+#: available here .
+
+# kitty_mod ctrl+shift
+
+#: Special modifier key alias for default shortcuts. You can change
+#: the value of this option to alter all default shortcuts that use
+#: kitty_mod.
+
+# clear_all_shortcuts no
+
+#: Remove all shortcut definitions up to this point. Useful, for
+#: instance, to remove the default shortcuts.
+
+# action_alias
+
+#: E.g. action_alias launch_tab launch --type=tab --cwd=current
+
+#: Define action aliases to avoid repeating the same options in
+#: multiple mappings. Aliases can be defined for any action and will
+#: be expanded recursively. For example, the above alias allows you to
+#: create mappings to launch a new tab in the current working
+#: directory without duplication::
+
+#: map f1 launch_tab vim
+#: map f2 launch_tab emacs
+
+#: Similarly, to alias kitten invocation::
+
+#: action_alias hints kitten hints --hints-offset=0
+
+# kitten_alias
+
+#: E.g. kitten_alias hints hints --hints-offset=0
+
+#: Like action_alias above, but specifically for kittens. Generally,
+#: prefer to use action_alias. This option is a legacy version,
+#: present for backwards compatibility. It causes all invocations of
+#: the aliased kitten to be substituted. So the example above will
+#: cause all invocations of the hints kitten to have the --hints-
+#: offset=0 option applied.
+
+#: Clipboard {{{
+
+#: Copy to clipboard
+
+# map kitty_mod+c copy_to_clipboard
+# map cmd+c copy_to_clipboard
+
+#:: There is also a copy_or_interrupt action that can be optionally
+#:: mapped to Ctrl+C. It will copy only if there is a selection and
+#:: send an interrupt otherwise. Similarly,
+#:: copy_and_clear_or_interrupt will copy and clear the selection or
+#:: send an interrupt if there is no selection.
+
+#: Paste from clipboard
+
+# map kitty_mod+v paste_from_clipboard
+# map cmd+v paste_from_clipboard
+
+#: Paste from selection
+
+# map kitty_mod+s paste_from_selection
+# map shift+insert paste_from_selection
+
+#: Pass selection to program
+
+# map kitty_mod+o pass_selection_to_program
+
+#:: You can also pass the contents of the current selection to any
+#:: program with pass_selection_to_program. By default, the system's
+#:: open program is used, but you can specify your own, the selection
+#:: will be passed as a command line argument to the program. For
+#:: example::
+
+#:: map kitty_mod+o pass_selection_to_program firefox
+
+#:: You can pass the current selection to a terminal program running
+#:: in a new kitty window, by using the @selection placeholder::
+
+#:: map kitty_mod+y new_window less @selection
+
+#: }}}
+
+#: Scrolling {{{
+
+#: Scroll line up
+
+# map kitty_mod+up scroll_line_up
+# map kitty_mod+k scroll_line_up
+# map opt+cmd+page_up scroll_line_up
+# map cmd+up scroll_line_up
+
+#: Scroll line down
+
+# map kitty_mod+down scroll_line_down
+# map kitty_mod+j scroll_line_down
+# map opt+cmd+page_down scroll_line_down
+# map cmd+down scroll_line_down
+
+#: Scroll page up
+
+# map kitty_mod+page_up scroll_page_up
+# map cmd+page_up scroll_page_up
+
+#: Scroll page down
+
+# map kitty_mod+page_down scroll_page_down
+# map cmd+page_down scroll_page_down
+
+#: Scroll to top
+
+# map kitty_mod+home scroll_home
+# map cmd+home scroll_home
+
+#: Scroll to bottom
+
+# map kitty_mod+end scroll_end
+# map cmd+end scroll_end
+
+#: Scroll to previous shell prompt
+
+# map kitty_mod+z scroll_to_prompt -1
+
+#:: Use a parameter of 0 for scroll_to_prompt to scroll to the last
+#:: jumped to or the last clicked position. Requires shell
+#:: integration
+#:: to work.
+
+#: Scroll to next shell prompt
+
+# map kitty_mod+x scroll_to_prompt 1
+
+#: Browse scrollback buffer in pager
+
+# map kitty_mod+h show_scrollback
+
+#:: You can pipe the contents of the current screen and history
+#:: buffer as STDIN to an arbitrary program using launch --stdin-
+#:: source. For example, the following opens the scrollback buffer in
+#:: less in an overlay window::
+
+#:: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R
+
+#:: For more details on piping screen and buffer contents to external
+#:: programs, see launch .
+
+#: Browse output of the last shell command in pager
+
+# map kitty_mod+g show_last_command_output
+
+#:: You can also define additional shortcuts to get the command
+#:: output. For example, to get the first command output on screen::
+
+#:: map f1 show_first_command_output_on_screen
+
+#:: To get the command output that was last accessed by a keyboard
+#:: action or mouse action::
+
+#:: map f1 show_last_visited_command_output
+
+#:: You can pipe the output of the last command run in the shell
+#:: using the launch action. For example, the following opens the
+#:: output in less in an overlay window::
+
+#:: map f1 launch --stdin-source=@last_cmd_output --stdin-add-formatting --type=overlay less +G -R
+
+#:: To get the output of the first command on the screen, use
+#:: @first_cmd_output_on_screen. To get the output of the last jumped
+#:: to command, use @last_visited_cmd_output.
+
+#:: Requires shell integration
+#:: to work.
+
+#: }}}
+
+#: Window management {{{
+
+#: New window
+
+# map kitty_mod+enter new_window
+# map cmd+enter new_window
+
+#:: You can open a new kitty window running an arbitrary program, for
+#:: example::
+
+#:: map kitty_mod+y launch mutt
+
+#:: You can open a new window with the current working directory set
+#:: to the working directory of the current window using::
+
+#:: map ctrl+alt+enter launch --cwd=current
+
+#:: You can open a new window that is allowed to control kitty via
+#:: the kitty remote control facility with launch --allow-remote-
+#:: control. Any programs running in that window will be allowed to
+#:: control kitty. For example::
+
+#:: map ctrl+enter launch --allow-remote-control some_program
+
+#:: You can open a new window next to the currently active window or
+#:: as the first window, with::
+
+#:: map ctrl+n launch --location=neighbor
+#:: map ctrl+f launch --location=first
+
+#:: For more details, see launch
+#:: .
+
+#: New OS window
+
+# map kitty_mod+n new_os_window
+# map cmd+n new_os_window
+
+#:: Works like new_window above, except that it opens a top-level OS
+#:: window. In particular you can use new_os_window_with_cwd to open
+#:: a window with the current working directory.
+
+#: Close window
+
+# map kitty_mod+w close_window
+# map shift+cmd+d close_window
+
+#: Next window
+
+# map kitty_mod+] next_window
+
+#: Previous window
+
+# map kitty_mod+[ previous_window
+
+#: Move window forward
+
+# map kitty_mod+f move_window_forward
+
+#: Move window backward
+
+# map kitty_mod+b move_window_backward
+
+#: Move window to top
+
+# map kitty_mod+` move_window_to_top
+
+#: Start resizing window
+
+# map kitty_mod+r start_resizing_window
+# map cmd+r start_resizing_window
+
+#: First window
+
+# map kitty_mod+1 first_window
+# map cmd+1 first_window
+
+#: Second window
+
+# map kitty_mod+2 second_window
+# map cmd+2 second_window
+
+#: Third window
+
+# map kitty_mod+3 third_window
+# map cmd+3 third_window
+
+#: Fourth window
+
+# map kitty_mod+4 fourth_window
+# map cmd+4 fourth_window
+
+#: Fifth window
+
+# map kitty_mod+5 fifth_window
+# map cmd+5 fifth_window
+
+#: Sixth window
+
+# map kitty_mod+6 sixth_window
+# map cmd+6 sixth_window
+
+#: Seventh window
+
+# map kitty_mod+7 seventh_window
+# map cmd+7 seventh_window
+
+#: Eighth window
+
+# map kitty_mod+8 eighth_window
+# map cmd+8 eighth_window
+
+#: Ninth window
+
+# map kitty_mod+9 ninth_window
+# map cmd+9 ninth_window
+
+#: Tenth window
+
+# map kitty_mod+0 tenth_window
+
+#: Visually select and focus window
+
+# map kitty_mod+f7 focus_visible_window
+
+#:: Display overlay numbers and alphabets on the window, and switch
+#:: the focus to the window when you press the key. When there are
+#:: only two windows, the focus will be switched directly without
+#:: displaying the overlay. You can change the overlay characters and
+#:: their order with option visual_window_select_characters.
+
+#: Visually swap window with another
+
+# map kitty_mod+f8 swap_with_window
+
+#:: Works like focus_visible_window above, but swaps the window.
+
+#: }}}
+
+#: Tab management {{{
+
+#: Next tab
+
+# map kitty_mod+right next_tab
+# map shift+cmd+] next_tab
+# map ctrl+tab next_tab
+
+#: Previous tab
+
+# map kitty_mod+left previous_tab
+# map shift+cmd+[ previous_tab
+# map ctrl+shift+tab previous_tab
+
+#: New tab
+
+# map kitty_mod+t new_tab
+# map cmd+t new_tab
+
+#: Close tab
+
+# map kitty_mod+q close_tab
+# map cmd+w close_tab
+
+#: Close OS window
+
+# map shift+cmd+w close_os_window
+
+#: Move tab forward
+
+# map kitty_mod+. move_tab_forward
+
+#: Move tab backward
+
+# map kitty_mod+, move_tab_backward
+
+#: Set tab title
+
+# map kitty_mod+alt+t set_tab_title
+# map shift+cmd+i set_tab_title
+
+
+#: You can also create shortcuts to go to specific tabs, with 1 being
+#: the first tab, 2 the second tab and -1 being the previously active
+#: tab, and any number larger than the last tab being the last tab::
+
+#: map ctrl+alt+1 goto_tab 1
+#: map ctrl+alt+2 goto_tab 2
+
+#: Just as with new_window above, you can also pass the name of
+#: arbitrary commands to run when using new_tab and new_tab_with_cwd.
+#: Finally, if you want the new tab to open next to the current tab
+#: rather than at the end of the tabs list, use::
+
+#: map ctrl+t new_tab !neighbor [optional cmd to run]
+#: }}}
+
+#: Layout management {{{
+
+#: Next layout
+
+# map kitty_mod+l next_layout
+
+
+#: You can also create shortcuts to switch to specific layouts::
+
+#: map ctrl+alt+t goto_layout tall
+#: map ctrl+alt+s goto_layout stack
+
+#: Similarly, to switch back to the previous layout::
+
+#: map ctrl+alt+p last_used_layout
+
+#: There is also a toggle_layout action that switches to the named
+#: layout or back to the previous layout if in the named layout.
+#: Useful to temporarily "zoom" the active window by switching to the
+#: stack layout::
+
+#: map ctrl+alt+z toggle_layout stack
+#: }}}
+
+#: Font sizes {{{
+
+#: You can change the font size for all top-level kitty OS windows at
+#: a time or only the current one.
+
+#: Increase font size
+
+# map kitty_mod+equal change_font_size all +2.0
+# map kitty_mod+plus change_font_size all +2.0
+# map kitty_mod+kp_add change_font_size all +2.0
+# map cmd+plus change_font_size all +2.0
+# map cmd+equal change_font_size all +2.0
+# map shift+cmd+equal change_font_size all +2.0
+
+#: Decrease font size
+
+# map kitty_mod+minus change_font_size all -2.0
+# map kitty_mod+kp_subtract change_font_size all -2.0
+# map cmd+minus change_font_size all -2.0
+# map shift+cmd+minus change_font_size all -2.0
+
+#: Reset font size
+
+# map kitty_mod+backspace change_font_size all 0
+# map cmd+0 change_font_size all 0
+
+
+#: To setup shortcuts for specific font sizes::
+
+#: map kitty_mod+f6 change_font_size all 10.0
+
+#: To setup shortcuts to change only the current OS window's font
+#: size::
+
+#: map kitty_mod+f6 change_font_size current 10.0
+#: }}}
+
+#: Select and act on visible text {{{
+
+#: Use the hints kitten to select text and either pass it to an
+#: external program or insert it into the terminal or copy it to the
+#: clipboard.
+
+#: Open URL
+
+# map kitty_mod+e open_url_with_hints
+
+#:: Open a currently visible URL using the keyboard. The program used
+#:: to open the URL is specified in open_url_with.
+
+#: Insert selected path
+
+# map kitty_mod+p>f kitten hints --type path --program -
+
+#:: Select a path/filename and insert it into the terminal. Useful,
+#:: for instance to run git commands on a filename output from a
+#:: previous git command.
+
+#: Open selected path
+
+# map kitty_mod+p>shift+f kitten hints --type path
+
+#:: Select a path/filename and open it with the default open program.
+
+#: Insert selected line
+
+# map kitty_mod+p>l kitten hints --type line --program -
+
+#:: Select a line of text and insert it into the terminal. Useful for
+#:: the output of things like: `ls -1`.
+
+#: Insert selected word
+
+# map kitty_mod+p>w kitten hints --type word --program -
+
+#:: Select words and insert into terminal.
+
+#: Insert selected hash
+
+# map kitty_mod+p>h kitten hints --type hash --program -
+
+#:: Select something that looks like a hash and insert it into the
+#:: terminal. Useful with git, which uses SHA1 hashes to identify
+#:: commits.
+
+#: Open the selected file at the selected line
+
+# map kitty_mod+p>n kitten hints --type linenum
+
+#:: Select something that looks like filename:linenum and open it in
+#:: your default editor at the specified line number.
+
+#: Open the selected hyperlink
+
+# map kitty_mod+p>y kitten hints --type hyperlink
+
+#:: Select a hyperlink (i.e. a URL that has been marked as such by
+#:: the terminal program, for example, by `ls --hyperlink=auto`).
+
+
+#: The hints kitten has many more modes of operation that you can map
+#: to different shortcuts. For a full description see hints kitten
+#: .
+#: }}}
+
+#: Miscellaneous {{{
+
+#: Show documentation
+
+# map kitty_mod+f1 show_kitty_doc overview
+
+#: Toggle fullscreen
+
+# map kitty_mod+f11 toggle_fullscreen
+# map ctrl+cmd+f toggle_fullscreen
+
+#: Toggle maximized
+
+# map kitty_mod+f10 toggle_maximized
+
+#: Toggle macOS secure keyboard entry
+
+# map opt+cmd+s toggle_macos_secure_keyboard_entry
+
+#: Unicode input
+
+# map kitty_mod+u kitten unicode_input
+# map ctrl+cmd+space kitten unicode_input
+
+#: Edit config file
+
+# map kitty_mod+f2 edit_config_file
+# map cmd+, edit_config_file
+
+#: Open the kitty command shell
+
+# map kitty_mod+escape kitty_shell window
+
+#:: Open the kitty shell in a new window / tab / overlay / os_window
+#:: to control kitty using commands.
+
+#: Increase background opacity
+
+# map kitty_mod+a>m set_background_opacity +0.1
+
+#: Decrease background opacity
+
+# map kitty_mod+a>l set_background_opacity -0.1
+
+#: Make background fully opaque
+
+# map kitty_mod+a>1 set_background_opacity 1
+
+#: Reset background opacity
+
+# map kitty_mod+a>d set_background_opacity default
+
+#: Reset the terminal
+
+# map kitty_mod+delete clear_terminal reset active
+# map opt+cmd+r clear_terminal reset active
+
+#:: You can create shortcuts to clear/reset the terminal. For
+#:: example::
+
+#:: # Reset the terminal
+#:: map f1 clear_terminal reset active
+#:: # Clear the terminal screen by erasing all contents
+#:: map f1 clear_terminal clear active
+#:: # Clear the terminal scrollback by erasing it
+#:: map f1 clear_terminal scrollback active
+#:: # Scroll the contents of the screen into the scrollback
+#:: map f1 clear_terminal scroll active
+#:: # Clear everything up to the line with the cursor or the start of the current prompt (needs shell integration)
+#:: map f1 clear_terminal to_cursor active
+#:: # Same as above except cleared lines are moved into scrollback
+#:: map f1 clear_terminal to_cursor_scroll active
+
+#:: If you want to operate on all kitty windows instead of just the
+#:: current one, use all instead of active.
+
+#:: Some useful functions that can be defined in the shell rc files
+#:: to perform various kinds of clearing of the current window:
+
+#:: .. code-block:: sh
+
+#:: clear-only-screen() {
+#:: printf "\e[H\e[2J"
+#:: }
+
+#:: clear-screen-and-scrollback() {
+#:: printf "\e[H\e[3J"
+#:: }
+
+#:: clear-screen-saving-contents-in-scrollback() {
+#:: printf "\e[H\e[22J"
+#:: }
+
+#:: For instance, using these escape codes, it is possible to remap
+#:: Ctrl+L to both scroll the current screen contents into the
+#:: scrollback buffer and clear the screen, instead of just clearing
+#:: the screen. For ZSH, in ~/.zshrc, add:
+
+#:: .. code-block:: zsh
+
+#:: ctrl_l() {
+#:: builtin print -rn -- $'\r\e[0J\e[H\e[22J' >"$TTY"
+#:: builtin zle .reset-prompt
+#:: builtin zle -R
+#:: }
+#:: zle -N ctrl_l
+#:: bindkey '^l' ctrl_l
+
+#:: Alternatively, you can just add map ctrl+l clear_terminal
+#:: to_cursor_scroll active to kitty.conf which works with no changes
+#:: to the shell rc files, but only clears up to the prompt, it does
+#:: not clear anytext at the prompt itself.
+
+#: Clear up to cursor line
+
+# map cmd+k clear_terminal to_cursor active
+
+#: Reload kitty.conf
+
+# map kitty_mod+f5 load_config_file
+# map ctrl+cmd+, load_config_file
+
+#:: Reload kitty.conf, applying any changes since the last time it
+#:: was loaded. Note that a handful of options cannot be dynamically
+#:: changed and require a full restart of kitty. Particularly, when
+#:: changing shortcuts for actions located on the macOS global menu
+#:: bar, a full restart is needed. You can also map a keybinding to
+#:: load a different config file, for example::
+
+#:: map f5 load_config /path/to/alternative/kitty.conf
+
+#:: Note that all options from the original kitty.conf are discarded,
+#:: in other words the new configuration *replace* the old ones.
+
+#: Debug kitty configuration
+
+# map kitty_mod+f6 debug_config
+# map opt+cmd+, debug_config
+
+#:: Show details about exactly what configuration kitty is running
+#:: with and its host environment. Useful for debugging issues.
+
+#: Send arbitrary text on key presses
+
+#:: E.g. map ctrl+shift+alt+h send_text all Hello World
+
+#:: You can tell kitty to send arbitrary (UTF-8) encoded text to the
+#:: client program when pressing specified shortcut keys. For
+#:: example::
+
+#:: map ctrl+alt+a send_text all Special text
+
+#:: This will send "Special text" when you press the Ctrl+Alt+A key
+#:: combination. The text to be sent decodes ANSI C escapes
+#:: so you can use escapes like \e to send control
+#:: codes or \u21fb to send Unicode characters (or you can just input
+#:: the Unicode characters directly as UTF-8 text). You can use
+#:: `kitten show_key` to get the key escape codes you want to
+#:: emulate.
+
+#:: The first argument to send_text is the keyboard modes in which to
+#:: activate the shortcut. The possible values are normal,
+#:: application, kitty or a comma separated combination of them. The
+#:: modes normal and application refer to the DECCKM cursor key mode
+#:: for terminals, and kitty refers to the kitty extended keyboard
+#:: protocol. The special value all means all of them.
+
+#:: Some more examples::
+
+#:: # Output a word and move the cursor to the start of the line (like typing and pressing Home)
+#:: map ctrl+alt+a send_text normal Word\e[H
+#:: map ctrl+alt+a send_text application Word\eOH
+#:: # Run a command at a shell prompt (like typing the command and pressing Enter)
+#:: map ctrl+alt+a send_text normal,application some command with arguments\r
+
+#: Open kitty Website
+
+# map shift+cmd+/ open_url https://sw.kovidgoyal.net/kitty/
+
+#: Hide macOS kitty application
+
+# map cmd+h hide_macos_app
+
+#: Hide macOS other applications
+
+# map opt+cmd+h hide_macos_other_apps
+
+#: Minimize macOS window
+
+# map cmd+m minimize_macos_window
+
+#: Quit kitty
+
+# map cmd+q quit
+
+#: }}}
+
+#: }}}
diff --git a/.config/mako/config b/.config/mako/config
new file mode 100644
index 0000000..a8ce865
--- /dev/null
+++ b/.config/mako/config
@@ -0,0 +1,2 @@
+default-timeout=5000
+ignore-timeout=1
diff --git a/.config/starship.toml b/.config/starship.toml
new file mode 100644
index 0000000..983acba
--- /dev/null
+++ b/.config/starship.toml
@@ -0,0 +1,144 @@
+format = """
+[](#9A348E)\
+$os\
+$username\
+[](bg:#DA627D fg:#9A348E)\
+$directory\
+[](fg:#DA627D bg:#FCA17D)\
+$git_branch\
+$git_status\
+[](fg:#FCA17D bg:#86BBD8)\
+$c\
+$elixir\
+$elm\
+$golang\
+$gradle\
+$haskell\
+$java\
+$julia\
+$nodejs\
+$nim\
+$rust\
+$scala\
+[](fg:#86BBD8 bg:#06969A)\
+$docker_context\
+[](fg:#06969A bg:#33658A)\
+$time\
+[ ](fg:#33658A)\
+"""
+
+# Disable the blank line at the start of the prompt
+# add_newline = false
+
+# You can also replace your username with a neat symbol like or disable this
+# and use the os module below
+[username]
+show_always = true
+style_user = "bg:#9A348E"
+style_root = "bg:#9A348E"
+format = '[$user ]($style)'
+disabled = false
+
+# An alternative to the username module which displays a symbol that
+# represents the current operating system
+[os]
+style = "bg:#9A348E"
+disabled = true # Disabled by default
+
+[directory]
+style = "bg:#DA627D"
+format = "[ $path ]($style)"
+truncation_length = 3
+truncation_symbol = "…/"
+
+# Here is how you can shorten some long paths by text replacement
+# similar to mapped_locations in Oh My Posh:
+[directory.substitutions]
+"Documents" = " "
+"Downloads" = " "
+"Music" = " "
+"Pictures" = " "
+# Keep in mind that the order matters. For example:
+# "Important Documents" = " "
+# will not be replaced, because "Documents" was already substituted before.
+# So either put "Important Documents" before "Documents" or use the substituted version:
+# "Important " = " "
+
+[c]
+symbol = " "
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[docker_context]
+symbol = " "
+style = "bg:#06969A"
+format = '[ $symbol $context ]($style)'
+
+[elixir]
+symbol = " "
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[elm]
+symbol = " "
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[git_branch]
+symbol = ""
+style = "bg:#FCA17D"
+format = '[ $symbol $branch ]($style)'
+
+[git_status]
+style = "bg:#FCA17D"
+format = '[$all_status$ahead_behind ]($style)'
+
+[golang]
+symbol = " "
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[gradle]
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[haskell]
+symbol = " "
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[java]
+symbol = " "
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[julia]
+symbol = " "
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[nodejs]
+symbol = ""
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[nim]
+symbol = " "
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[rust]
+symbol = ""
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[scala]
+symbol = " "
+style = "bg:#86BBD8"
+format = '[ $symbol ($version) ]($style)'
+
+[time]
+disabled = false
+time_format = "%R" # Hour:Minute Format
+style = "bg:#33658A"
+format = '[ ♥ $time ]($style)'
diff --git a/.config/swappy/config b/.config/swappy/config
new file mode 100644
index 0000000..0bd0dcb
--- /dev/null
+++ b/.config/swappy/config
@@ -0,0 +1,2 @@
+[Default]
+save_dir=$HOME/Pictures/Swappy
diff --git a/.config/wal/templates/pywal-gtk-adwaita.css b/.config/wal/templates/pywal-gtk-adwaita.css
new file mode 100644
index 0000000..7b9ac42
--- /dev/null
+++ b/.config/wal/templates/pywal-gtk-adwaita.css
@@ -0,0 +1,82 @@
+@define-color accent_color {color12};
+@define-color accent_bg_color {color12};
+@define-color accent_fg_color #{color12.lighten(70%)};
+@define-color destructive_color {color11};
+@define-color destructive_bg_color {color3};
+@define-color destructive_fg_color #{color11.lighten(70%)};
+@define-color success_color {color13};
+@define-color success_bg_color {color13};
+@define-color success_fg_color {color15};
+@define-color warning_color {color14};
+@define-color warning_bg_color {color6};
+@define-color warning_fg_color {color15};
+@define-color error_color {color11};
+@define-color error_bg_color {color3};
+@define-color error_fg_color {color15};
+@define-color window_bg_color {color0};
+@define-color window_fg_color {color15};
+@define-color view_bg_color #{color0.lighten(1%)};
+@define-color view_fg_color {color15};
+@define-color headerbar_bg_color {color0};
+@define-color headerbar_fg_color {color15};
+@define-color headerbar_border_color #{color0.lighten(3%)};
+@define-color headerbar_backdrop_color {color4};
+@define-color headerbar_shade_color #{color0.lighten(2%)};
+@define-color card_bg_color #{color0.lighten(2%)};
+@define-color card_fg_color {color15};
+@define-color card_shade_color #{color0.lighten(1%)};
+@define-color dialog_bg_color {color0};
+@define-color dialog_fg_color {color15};
+@define-color popover_bg_color {color0};
+@define-color popover_fg_color {color15};
+@define-color shade_color {color8};
+@define-color scrollbar_outline_color {color12};
+@define-color sidebar_bg_color {color0};
+@define-color sidebar_fg_color {color15};
+@define-color sidebar_backdrop_color #{color0.lighten(1%)};
+@define-color sidebar_shade_color #{color0.lighten(2%)};
+@define-color blue_1 #99c1f1;
+@define-color blue_2 #62a0ea;
+@define-color blue_3 #3584e4;
+@define-color blue_4 #1c71d8;
+@define-color blue_5 #1a5fb4;
+@define-color green_1 #8ff0a4;
+@define-color green_2 #57e389;
+@define-color green_3 #33d17a;
+@define-color green_4 #2ec27e;
+@define-color green_5 #26a269;
+@define-color yellow_1 #f9f06b;
+@define-color yellow_2 #f8e45c;
+@define-color yellow_3 #f6d32d;
+@define-color yellow_4 #f5c211;
+@define-color yellow_5 #e5a50a;
+@define-color orange_1 #ffbe6f;
+@define-color orange_2 #ffa348;
+@define-color orange_3 #ff7800;
+@define-color orange_4 #e66100;
+@define-color orange_5 #c64600;
+@define-color red_1 #f66151;
+@define-color red_2 #ed333b;
+@define-color red_3 #e01b24;
+@define-color red_4 #c01c28;
+@define-color red_5 #a51d2d;
+@define-color purple_1 #dc8add;
+@define-color purple_2 #c061cb;
+@define-color purple_3 #9141ac;
+@define-color purple_4 #813d9c;
+@define-color purple_5 #613583;
+@define-color brown_1 #cdab8f;
+@define-color brown_2 #b5835a;
+@define-color brown_3 #986a44;
+@define-color brown_4 #865e3c;
+@define-color brown_5 #63452c;
+@define-color light_1 #ffffff;
+@define-color light_2 #f6f5f4;
+@define-color light_3 #deddda;
+@define-color light_4 #c0bfbc;
+@define-color light_5 #9a9996;
+@define-color dark_1 #77767b;
+@define-color dark_2 #5e5c64;
+@define-color dark_3 #3d3846;
+@define-color dark_4 #241f31;
+@define-color dark_5 #000000;
diff --git a/.config/wal/templates/pywal.json b/.config/wal/templates/pywal.json
new file mode 100644
index 0000000..418646a
--- /dev/null
+++ b/.config/wal/templates/pywal.json
@@ -0,0 +1,113 @@
+{{
+ "name": "pywal",
+ "variables": {{
+ "accent_color": "{color12}",
+ "accent_bg_color": "{color12}",
+ "accent_fg_color": "#{color12.lighten(70%)}",
+ "destructive_color": "{color11}",
+ "destructive_bg_color": "{color3}",
+ "destructive_fg_color": "#{color11.lighten(70%)}",
+ "success_color": "{color13}",
+ "success_bg_color": "{color13}",
+ "success_fg_color": "{color15}",
+ "warning_color": "{color14}",
+ "warning_bg_color": "{color6}",
+ "warning_fg_color": "{color15}",
+ "error_color": "{color11}",
+ "error_bg_color": "{color3}",
+ "error_fg_color": "{color15}",
+ "window_bg_color": "{color0}",
+ "window_fg_color": "{color15}",
+ "view_bg_color": "#{color0.lighten(1%)}",
+ "view_fg_color": "{color15}",
+ "headerbar_bg_color": "{color0}",
+ "headerbar_fg_color": "{color15}",
+ "headerbar_border_color": "#{color0.lighten(3%)}",
+ "headerbar_backdrop_color": "{color4}",
+ "headerbar_shade_color": "#{color0.lighten(2%)}",
+ "card_bg_color": "#{color0.lighten(2%)}",
+ "card_fg_color": "{color15}",
+ "card_shade_color": "#{color0.lighten(1%)}",
+ "dialog_bg_color": "{color0}",
+ "dialog_fg_color": "{color15}",
+ "popover_bg_color": "{color0}",
+ "popover_fg_color": "{color15}",
+ "shade_color": "{color8}",
+ "scrollbar_outline_color": "{color12}",
+ "sidebar_bg_color": "{color0}",
+ "sidebar_fg_color": "{color15}",
+ "sidebar_backdrop_color": "#{color0.lighten(1%)}",
+ "sidebar_shade_color": "#{color0.lighten(2%)}"
+ }},
+ "palette": {{
+ "blue_": {{
+ "1": "#99c1f1",
+ "2": "#62a0ea",
+ "3": "#3584e4",
+ "4": "#1c71d8",
+ "5": "#1a5fb4"
+ }},
+ "green_": {{
+ "1": "#8ff0a4",
+ "2": "#57e389",
+ "3": "#33d17a",
+ "4": "#2ec27e",
+ "5": "#26a269"
+ }},
+ "yellow_": {{
+ "1": "#f9f06b",
+ "2": "#f8e45c",
+ "3": "#f6d32d",
+ "4": "#f5c211",
+ "5": "#e5a50a"
+ }},
+ "orange_": {{
+ "1": "#ffbe6f",
+ "2": "#ffa348",
+ "3": "#ff7800",
+ "4": "#e66100",
+ "5": "#c64600"
+ }},
+ "red_": {{
+ "1": "#f66151",
+ "2": "#ed333b",
+ "3": "#e01b24",
+ "4": "#c01c28",
+ "5": "#a51d2d"
+ }},
+ "purple_": {{
+ "1": "#dc8add",
+ "2": "#c061cb",
+ "3": "#9141ac",
+ "4": "#813d9c",
+ "5": "#613583"
+ }},
+ "brown_": {{
+ "1": "#cdab8f",
+ "2": "#b5835a",
+ "3": "#986a44",
+ "4": "#865e3c",
+ "5": "#63452c"
+ }},
+ "light_": {{
+ "1": "#ffffff",
+ "2": "#f6f5f4",
+ "3": "#deddda",
+ "4": "#c0bfbc",
+ "5": "#9a9996"
+ }},
+ "dark_": {{
+ "1": "#77767b",
+ "2": "#5e5c64",
+ "3": "#3d3846",
+ "4": "#241f31",
+ "5": "#000000"
+ }}
+ }},
+ "custom_css": {{
+ "gtk4": "",
+ "gtk3": ""
+ }},
+ "plugins": {{}}
+}}
+
diff --git a/.config/wal/templates/pywal.json.bak b/.config/wal/templates/pywal.json.bak
new file mode 100644
index 0000000..d5fcb56
--- /dev/null
+++ b/.config/wal/templates/pywal.json.bak
@@ -0,0 +1,112 @@
+{{
+ "name": "pywal",
+ "variables": {{
+ "accent_color": "{color12}",
+ "accent_bg_color": "{color12}",
+ "accent_fg_color": "{color12}",
+ "destructive_color": "{color11}",
+ "destructive_bg_color": "{color3}",
+ "destructive_fg_color": "{color11}",
+ "success_color": "{color13}",
+ "success_bg_color": "{color13}",
+ "success_fg_color": "{color15}",
+ "warning_color": "{color14}",
+ "warning_bg_color": "{color6}",
+ "warning_fg_color": "{color15}",
+ "error_color": "{color11}",
+ "error_bg_color": "{color3}",
+ "error_fg_color": "{color15}",
+ "window_bg_color": "{color0}",
+ "window_fg_color": "{color15}",
+ "view_bg_color": "{color0}",
+ "view_fg_color": "{color15}",
+ "headerbar_bg_color": "{color0}",
+ "headerbar_fg_color": "{color15}",
+ "headerbar_border_color": "{color0}",
+ "headerbar_backdrop_color": "{color4}",
+ "headerbar_shade_color": "{color0}",
+ "card_bg_color": "{color0}",
+ "card_fg_color": "{color15}",
+ "card_shade_color": "{color0}",
+ "dialog_bg_color": "{color0}",
+ "dialog_fg_color": "{color15}",
+ "popover_bg_color": "{color0}",
+ "popover_fg_color": "{color15}",
+ "shade_color": "{color8}",
+ "scrollbar_outline_color": "{color12}",
+ "sidebar_bg_color": "{color0}",
+ "sidebar_fg_color": "{color15}",
+ "sidebar_backdrop_color": "{color0}",
+ "sidebar_shade_color": "{color0}"
+ }},
+ "palette": {{
+ "blue_": {{
+ "1": "#99c1f1",
+ "2": "#62a0ea",
+ "3": "#3584e4",
+ "4": "#1c71d8",
+ "5": "#1a5fb4"
+ }},
+ "green_": {{
+ "1": "#8ff0a4",
+ "2": "#57e389",
+ "3": "#33d17a",
+ "4": "#2ec27e",
+ "5": "#26a269"
+ }},
+ "yellow_": {{
+ "1": "#f9f06b",
+ "2": "#f8e45c",
+ "3": "#f6d32d",
+ "4": "#f5c211",
+ "5": "#e5a50a"
+ }},
+ "orange_": {{
+ "1": "#ffbe6f",
+ "2": "#ffa348",
+ "3": "#ff7800",
+ "4": "#e66100",
+ "5": "#c64600"
+ }},
+ "red_": {{
+ "1": "#f66151",
+ "2": "#ed333b",
+ "3": "#e01b24",
+ "4": "#c01c28",
+ "5": "#a51d2d"
+ }},
+ "purple_": {{
+ "1": "#dc8add",
+ "2": "#c061cb",
+ "3": "#9141ac",
+ "4": "#813d9c",
+ "5": "#613583"
+ }},
+ "brown_": {{
+ "1": "#cdab8f",
+ "2": "#b5835a",
+ "3": "#986a44",
+ "4": "#865e3c",
+ "5": "#63452c"
+ }},
+ "light_": {{
+ "1": "#ffffff",
+ "2": "#f6f5f4",
+ "3": "#deddda",
+ "4": "#c0bfbc",
+ "5": "#9a9996"
+ }},
+ "dark_": {{
+ "1": "#77767b",
+ "2": "#5e5c64",
+ "3": "#3d3846",
+ "4": "#241f31",
+ "5": "#000000"
+ }}
+ }},
+ "custom_css": {{
+ "gtk4": "",
+ "gtk3": ""
+ }},
+ "plugins": {{}}
+}}
diff --git a/.config/wal/templates/pywal.kvconfig b/.config/wal/templates/pywal.kvconfig
new file mode 100644
index 0000000..5e98d65
--- /dev/null
+++ b/.config/wal/templates/pywal.kvconfig
@@ -0,0 +1,568 @@
+[%General]
+author=Vince Liuice, based on KvAdapta by Tsu Jan
+comment=An uncomplicated theme inspired by the Materia GTK theme
+x11drag=menubar_and_primary_toolbar
+alt_mnemonic=true
+left_tabs=false
+attach_active_tab=false
+mirror_doc_tabs=false
+group_toolbar_buttons=true
+toolbar_item_spacing=0
+toolbar_interior_spacing=2
+spread_progressbar=true
+composite=true
+menu_shadow_depth=16
+spread_menuitems=true
+tooltip_shadow_depth=0
+splitter_width=1
+scroll_width=9
+scroll_arrows=false
+scroll_min_extent=60
+slider_width=2
+slider_handle_width=23
+slider_handle_length=22
+tickless_slider_handle_size=22
+center_toolbar_handle=true
+check_size=24
+textless_progressbar=false
+progressbar_thickness=2
+menubar_mouse_tracking=true
+toolbutton_style=1
+double_click=false
+translucent_windows=false
+blurring=false
+popup_blurring=false
+vertical_spin_indicators=false
+spin_button_width=24
+fill_rubberband=false
+merge_menubar_with_toolbar=true
+small_icon_size=16
+large_icon_size=32
+button_icon_size=16
+toolbar_icon_size=16
+combo_as_lineedit=true
+animate_states=true
+button_contents_shift=false
+combo_menu=true
+hide_combo_checkboxes=true
+combo_focus_rect=false
+groupbox_top_label=true
+inline_spin_indicators=true
+joined_inactive_tabs=false
+layout_spacing=6
+layout_margin=9
+scrollbar_in_view=true
+transient_scrollbar=true
+transient_groove=true
+submenu_overlap=0
+tooltip_delay=0
+tree_branch_line=true
+no_window_pattern=false
+opaque=kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,smplayer,smplayer2,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam
+reduce_window_opacity=0
+respect_DE=true
+scrollable_menu=false
+submenu_delay=150
+no_inactiveness=false
+reduce_menu_opacity=0
+click_behavior=0
+contrast=1.00
+dialog_button_layout=0
+intensity=1.00
+saturation=1.00
+shadowless_popup=false
+drag_from_buttons=false
+menu_blur_radius=0
+tooltip_blur_radius=0
+
+[GeneralColors]
+window.color={color0}
+base.color={color0}
+alt.base.color=#{color8.lighten(10%)}
+button.color={color12}
+light.color=#{color8.darken(3%)}
+mid.light.color=#{color8.darken(5%)}
+dark.color=#{color0.lighten(2%)}
+mid.color=#{color0.lighten(3%)}
+highlight.color={color12}
+inactive.highlight.color={color12}
+text.color={color15}
+window.text.color={color15}
+button.text.color={color15}
+disabled.text.color={color8}
+tooltip.text.color={color15}
+highlight.text.color={color15}
+link.color={color2}
+link.visited.color={color2}
+progress.indicator.text.color={color15}
+
+[Hacks]
+transparent_ktitle_label=true
+transparent_dolphin_view=true
+transparent_pcmanfm_sidepane=true
+blur_translucent=false
+transparent_menutitle=true
+respect_darkness=true
+kcapacitybar_as_progressbar=true
+force_size_grip=true
+iconless_pushbutton=true
+iconless_menu=false
+disabled_icon_opacity=100
+lxqtmainmenu_iconsize=16
+normal_default_pushbutton=true
+single_top_toolbar=true
+tint_on_mouseover=0
+transparent_pcmanfm_view=true
+no_selection_tint=true
+transparent_arrow_button=true
+middle_click_scroll=false
+opaque_colors=false
+kinetic_scrolling=false
+scroll_jump_workaround=true
+centered_forms=false
+noninteger_translucency=false
+style_vertical_toolbars=false
+blur_only_active_window=true
+
+[PanelButtonCommand]
+frame=true
+frame.element=button
+frame.top=6
+frame.bottom=6
+frame.left=6
+frame.right=6
+interior=true
+interior.element=button
+indicator.size=8
+text.normal.color={color15}
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+text.shadow=0
+text.margin=4
+text.iconspacing=4
+indicator.element=arrow
+frame.expansion=0
+
+[PanelButtonTool]
+inherits=PanelButtonCommand
+text.normal.color={color15}
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+text.bold=false
+indicator.element=arrow
+indicator.size=0
+frame.expansion=0
+
+[ToolbarButton]
+frame=true
+frame.element=tbutton
+interior.element=tbutton
+frame.top=16
+frame.bottom=16
+frame.left=16
+frame.right=16
+indicator.element=tarrow
+text.normal.color={color15}
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+text.bold=false
+frame.expansion=32
+
+[Dock]
+inherits=PanelButtonCommand
+interior.element=dock
+frame.element=dock
+frame.top=1
+frame.bottom=1
+frame.left=1
+frame.right=1
+text.normal.color={color15}
+
+[DockTitle]
+inherits=PanelButtonCommand
+frame=false
+interior=false
+text.normal.color={color15}
+text.focus.color={color15}
+text.bold=false
+
+[IndicatorSpinBox]
+inherits=PanelButtonCommand
+frame=true
+interior=true
+frame.top=2
+frame.bottom=2
+frame.left=2
+frame.right=2
+indicator.element=spin
+indicator.size=8
+text.normal.color={color15}
+text.margin.top=2
+text.margin.bottom=2
+text.margin.left=2
+text.margin.right=2
+
+[RadioButton]
+inherits=PanelButtonCommand
+frame=false
+interior.element=radio
+text.normal.color={color15}
+text.focus.color={color15}
+min_width=+0.3font
+min_height=+0.3font
+
+[CheckBox]
+inherits=PanelButtonCommand
+frame=false
+interior.element=checkbox
+text.normal.color={color15}
+text.focus.color={color15}
+min_width=+0.3font
+min_height=+0.3font
+
+[Focus]
+inherits=PanelButtonCommand
+frame=true
+frame.element=focus
+frame.top=2
+frame.bottom=2
+frame.left=2
+frame.right=2
+frame.patternsize=14
+
+[GenericFrame]
+inherits=PanelButtonCommand
+frame=true
+interior=false
+frame.element=common
+interior.element=common
+frame.top=1
+frame.bottom=1
+frame.left=1
+frame.right=1
+
+[LineEdit]
+inherits=PanelButtonCommand
+frame.element=lineedit
+interior.element=lineedit
+frame.top=6
+frame.bottom=6
+frame.left=6
+frame.right=6
+text.margin.top=2
+text.margin.bottom=2
+text.margin.left=2
+text.margin.right=2
+
+[ToolbarLineEdit]
+frame.element=lineedit
+interior.element=lineedit
+
+[DropDownButton]
+inherits=PanelButtonCommand
+indicator.element=arrow-down
+
+[IndicatorArrow]
+indicator.element=arrow
+indicator.size=8
+
+[ToolboxTab]
+inherits=PanelButtonCommand
+text.normal.color={color15}
+text.press.color={color15}
+text.focus.color={color15}
+
+[Tab]
+inherits=PanelButtonCommand
+interior.element=tab
+text.margin.left=8
+text.margin.right=8
+text.margin.top=0
+text.margin.bottom=0
+frame.element=tab
+indicator.element=tab
+indicator.size=22
+frame.top=8
+frame.bottom=8
+frame.left=8
+frame.right=8
+text.normal.color={color15}
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+frame.expansion=0
+text.bold=false
+
+[TabFrame]
+inherits=PanelButtonCommand
+frame.element=tabframe
+interior.element=tabframe
+frame.top=24
+frame.bottom=24
+frame.left=24
+frame.right=24
+
+[TreeExpander]
+inherits=PanelButtonCommand
+indicator.size=8
+indicator.element=tree
+
+[HeaderSection]
+inherits=PanelButtonCommand
+interior.element=header
+frame.element=header
+frame.top=0
+frame.bottom=1
+frame.left=1
+frame.right=1
+text.normal.color={color15}
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+frame.expansion=0
+
+[SizeGrip]
+indicator.element=resize-grip
+
+[Toolbar]
+inherits=PanelButtonCommand
+indicator.element=toolbar
+indicator.size=5
+text.margin=0
+interior.element=menubar
+frame.element=menubar
+text.normal.color={color15}
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+frame.left=6
+frame.right=6
+frame.top=0
+frame.bottom=1
+frame.expansion=0
+
+[Slider]
+inherits=PanelButtonCommand
+frame.element=slider
+focusFrame=true
+interior.element=slider
+frame.top=3
+frame.bottom=3
+frame.left=3
+frame.right=3
+
+[SliderCursor]
+inherits=PanelButtonCommand
+frame=false
+interior.element=slidercursor
+
+[Progressbar]
+inherits=PanelButtonCommand
+frame.element=progress
+interior.element=progress
+text.margin=0
+text.normal.color={color15}
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+text.bold=false
+frame.expansion=8
+
+[ProgressbarContents]
+inherits=PanelButtonCommand
+frame=true
+frame.element=progress-pattern
+interior.element=progress-pattern
+
+[ItemView]
+inherits=PanelButtonCommand
+text.margin=0
+frame.element=itemview
+interior.element=itemview
+frame.top=4
+frame.bottom=4
+frame.left=4
+frame.right=4
+text.margin.top=0
+text.margin.bottom=0
+text.margin.left=8
+text.margin.right=8
+text.normal.color={color15}
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+min_width=+0.3font
+min_height=+0.3font
+frame.expansion=0
+
+[Splitter]
+interior.element=splitter
+frame=false
+indicator.size=0
+
+[Scrollbar]
+inherits=PanelButtonCommand
+indicator.element=arrow
+indicator.size=12
+
+[ScrollbarSlider]
+inherits=PanelButtonCommand
+frame.element=scrollbarslider
+interior=false
+frame.left=5
+frame.right=5
+frame.top=5
+frame.bottom=5
+indicator.element=grip
+indicator.size=12
+
+[ScrollbarGroove]
+inherits=PanelButtonCommand
+interior=false
+frame=false
+
+[Menu]
+inherits=PanelButtonCommand
+frame.top=8
+frame.bottom=8
+frame.left=8
+frame.right=8
+frame.element=menu
+interior.element=menu
+text.normal.color={color15}
+text.shadow=false
+text.bold=false
+
+[MenuItem]
+inherits=PanelButtonCommand
+frame=true
+frame.element=menuitem
+interior.element=menuitem
+indicator.element=menuitem
+text.normal.color={color15}
+text.focus.color={color15}
+text.margin.top=0
+text.margin.bottom=0
+text.margin.left=6
+text.margin.right=6
+frame.top=4
+frame.bottom=4
+frame.left=12
+frame.right=12
+text.bold=false
+frame.expansion=0
+
+[MenuBar]
+inherits=PanelButtonCommand
+frame.element=menubar
+interior.element=menubar
+frame.bottom=0
+text.normal.color={color15}
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+frame.expansion=0
+text.bold=false
+
+[MenuBarItem]
+inherits=PanelButtonCommand
+interior=true
+interior.element=menubaritem
+frame.element=menubaritem
+frame.top=2
+frame.bottom=2
+frame.left=2
+frame.right=2
+text.margin.left=4
+text.margin.right=4
+text.margin.top=0
+text.margin.bottom=0
+text.normal.color={color15}
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+text.bold=false
+min_width=+0.3font
+min_height=+0.3font
+frame.expansion=0
+
+[TitleBar]
+inherits=PanelButtonCommand
+frame=false
+text.margin.top=2
+text.margin.bottom=2
+text.margin.left=2
+text.margin.right=2
+interior.element=titlebar
+indicator.size=16
+indicator.element=mdi
+text.normal.color={color7}
+text.focus.color={color15}
+text.bold=false
+text.italic=true
+frame.expansion=0
+
+[ComboBox]
+inherits=PanelButtonCommand
+frame.element=combo
+interior.element=combo
+frame.top=6
+frame.bottom=6
+frame.left=6
+frame.right=6
+text.margin.top=2
+text.margin.bottom=2
+text.margin.left=2
+text.margin.right=2
+text.focus.color={color15}
+text.press.color={color15}
+text.toggle.color={color15}
+
+[GroupBox]
+inherits=GenericFrame
+frame=false
+text.shadow=0
+text.margin=0
+text.normal.color={color15}
+text.focus.color={color15}
+text.bold=false
+frame.expansion=0
+
+[TabBarFrame]
+inherits=GenericFrame
+frame=false
+frame.element=tabBarFrame
+interior=false
+frame.top=0
+frame.bottom=0
+frame.left=0
+frame.right=0
+
+[ToolTip]
+inherits=GenericFrame
+frame.top=6
+frame.bottom=6
+frame.left=6
+frame.right=6
+interior=true
+text.shadow=0
+text.margin=6
+interior.element=tooltip
+frame.element=tooltip
+frame.expansion=6
+
+[StatusBar]
+inherits=GenericFrame
+frame=false
+interior=false
+
+[Window]
+interior=true
+interior.element=window
+frame=true
+frame.element=window
+frame.bottom=10
+frame.top=10
diff --git a/.config/wal/templates/pywal.svg b/.config/wal/templates/pywal.svg
new file mode 100644
index 0000000..281b374
--- /dev/null
+++ b/.config/wal/templates/pywal.svg
@@ -0,0 +1,6815 @@
+
+
diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc
new file mode 100644
index 0000000..739d695
--- /dev/null
+++ b/.config/waybar/config.jsonc
@@ -0,0 +1,354 @@
+// Amber's Dotfiles
+// __ __ __
+// /\ \ __/\ \ /\ \
+// \ \ \/\ \ \ \ __ __ __\ \ \____ __ _ __
+// \ \ \ \ \ \ \ /'__`\ /\ \/\ \\ \ '__`\ /'__`\ /\`'__\
+// \ \ \_/ \_\ \/\ \L\.\_\ \ \_\ \\ \ \L\ \/\ \L\.\_\ \ \/
+// \ `\___x___/\ \__/.\_\\/`____ \\ \_,__/\ \__/.\_\\ \_\
+// '\/__//__/ \/__/\/_/ `/___/> \\/___/ \/__/\/_/ \/_/
+// /\___/
+// \/__/
+
+//--------------------------------------------------------------------
+// Waybar Configuration
+//
+// Icons are NOT wrapped in a span because I intend to use the
+// proportional variant of a nerd font for both text and icons
+//--------------------------------------------------------------------
+
+// -*- mode: jsonc -*-
+{
+ // "layer": "top", // Waybar at top layer
+ // "position": "bottom", // Waybar position (top|bottom|left|right)
+ "height": 30, // Waybar height (to be removed for auto height)
+ // "width": 1280, // Waybar width
+ "spacing": 4, // Gaps between modules (4px)
+ // Choose the order of the modules
+ "modules-left": [
+ "hyprland/window",
+ ],
+ "modules-center": [
+ "hyprland/workspaces"
+ ],
+ "modules-right": [
+ "mpris",
+ "wireplumber",
+ "group/hardware",
+ "custom/hyprpicker",
+ "backlight",
+ "battery",
+ "clock",
+ "power-profiles-daemon",
+ "custom/wlogout",
+ "tray"
+ ],
+ // Modules configuration
+ "hyprland/workspaces": {
+ // "disable-scroll": true,
+ // "all-outputs": true,
+ // "warp-on-scroll": false,
+ "persistent-workspaces": {
+ "*": [ 1, 2, 3, 4, 5 ]
+ },
+ "format": "{icon}",
+ "format-icons": {
+ "1": "",
+ "2": "",
+ "3": "",
+ "4": "",
+ "5": "",
+ "6": "6",
+ "7": "7",
+ "8": "8",
+ "9": "9",
+ "0": "0",
+ "urgent": "",
+ "focused": "",
+ "default": ""
+ }
+ },
+ "keyboard-state": {
+ "numlock": true,
+ "capslock": true,
+ "format": "{name} {icon}",
+ "format-icons": {
+ "locked": "",
+ "unlocked": ""
+ }
+ },
+ "hyprland/submap": {
+ "format": "{}"
+ },
+ "hyprland/scratchpad": {
+ "format": "{icon} {count}",
+ "show-empty": false,
+ "format-icons": ["", ""],
+ "tooltip": true,
+ "tooltip-format": "{app}: {title}"
+ },
+ "mpd": {
+ "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
+ "format-disconnected": "Disconnected ",
+ "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ",
+ "unknown-tag": "N/A",
+ "interval": 5,
+ "consume-icons": {
+ "on": " "
+ },
+ "random-icons": {
+ "off": " ",
+ "on": " "
+ },
+ "repeat-icons": {
+ "on": " "
+ },
+ "single-icons": {
+ "on": "1 "
+ },
+ "state-icons": {
+ "paused": "",
+ "playing": ""
+ },
+ "tooltip-format": "MPD (connected)",
+ "tooltip-format-disconnected": "MPD (disconnected)"
+ },
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ }
+ },
+ "tray": {
+ // "icon-size": 21,
+ "spacing": 10
+ },
+
+ "clock": {
+ // "timezone": "America/New_York",
+ "format": "{:%H:%M}",
+ "tooltip-format": "{:%B %Y}\n{calendar}",
+ "calendar": {
+ "format": {
+ "months": "",
+ "today": "{}"
+ }
+ }
+ },
+ "cpu": {
+ "format": "{icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", ""],
+ "on-click": "kitty -o font_size=7 btop",
+ "interval": 2
+ },
+ "memory": {
+ "format": "{usage}% ",
+ "states": {
+ "0": 0,
+ "1": 11,
+ "2": 22,
+ "3": 33,
+ "4": 44,
+ "5": 55,
+ "6": 66,
+ "7": 77,
+ "8": 88
+ },
+ "format-0": "",
+ "format-1": "",
+ "format-2": "",
+ "format-3": "",
+ "format-4": "",
+ "format-5": "",
+ "format-6": "",
+ "format-7": "",
+ "format-8": "",
+ "on-click": "kitty -o font_size=7 btop",
+ "tooltip-format": "{used:0.1f}GiB ({percentage}%) used of {total:0.1f}GiB"
+ },
+ "temperature": {
+ // "thermal-zone": 2,
+ "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
+ "critical-threshold": 70,
+ // "format-critical": "{temperatureC}°C {icon}",
+ "format": "{icon}",
+ "format-icons": ["", "", "", "", "", "", ""],
+ "on-click": "kitty -o font_size=7 btop"
+ },
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "{icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", ""],
+ "tooltip": true,
+ "tooltip-format": "Backlight: {percent}%"
+ },
+ "battery": {
+ "states": {
+ // "good": 95,
+ "warning": 30,
+ "critical": 15
+ },
+ "format": "{icon}",
+ "tooltip": true,
+ "tooltip-format": "{capacity}%, {timeTo}",
+ "format-time": "{H} h {m} m",
+ "format-full": "{icon}",
+ "format-charging": "{icon}",
+ "format-plugged": "{icon}",
+ // "format-good": "", // An empty format will hide the module
+ // "format-full": "",
+ "format-icons": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "interval": 15
+ },
+ "battery#bat2": {
+ "bat": "BAT2"
+ },
+ "power-profiles-daemon": {
+ "format": "{icon}",
+ "tooltip-format": "Power profile: {profile}\nDriver: {driver}",
+ "tooltip": true,
+ "format-icons": {
+ "default": "",
+ "performance": "",
+ "balanced": "",
+ "power-saver": ""
+ }
+ },
+ "network": {
+ // "interface": "wlp2*", // (Optional) To force the use of this interface
+ "format-wifi": "{icon}",
+ "format-ethernet": "{ipaddr}/{cidr} ",
+ "tooltip-format": "{essid} ({signalStrength}%)\n{ifname} via {gwaddr} ",
+ "format-linked": "{ifname} (No IP) ",
+ "format-disconnected": "",
+ // "format-alt": "{ifname}: {ipaddr}/{cidr}",
+ "format-icons": ["", "", "", "", ""],
+ "on-click": "nm-connection-editor"
+ },
+ "pulseaudio": {
+ // "scroll-step": 1, // %, can be a float
+ "format": "{volume}% {icon}",
+ "format-bluetooth": "{volume}% {icon}",
+ "format-bluetooth-muted": " {icon}",
+ "format-muted": " {format_source}",
+ "format-source": "{volume}% ",
+ "format-source-muted": "",
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ },
+ "on-click": "pavucontrol"
+ },
+ "custom/media": {
+ "format": "{icon} {}",
+ "return-type": "json",
+ "max-length": 40,
+ "format-icons": {
+ "spotify": "",
+ "default": "🎜"
+ },
+ "escape": true,
+ "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
+ // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name
+ },
+
+ "mpris": {
+ "format": "{player_icon} {status_icon} {dynamic}",
+ "dynamic-len": 20,
+ "player-icons": {
+ "default": ""
+ },
+ "status-icons": {
+ "playing": "",
+ "paused": ""
+ },
+ "interval": 1
+ // "ignored-players": ["firefox"]
+ },
+
+ "wireplumber": {
+ "format": "{icon} {volume}%",
+ "format-muted": " {volume}%",
+ "format-icons": [
+ "",
+ "",
+ ""
+ ],
+ "on-click": "pavucontrol"
+ },
+
+ "group/hardware": {
+ "orientation": "inherit",
+ /* "drawer": {
+ "transition-duration": 300,
+ "children-class": "not-memory",
+ "transition-left-to-right": false
+ }, */
+ "modules": [
+ "cpu",
+ "temperature",
+ "memory",
+ "disk"
+ ]
+ },
+
+ // Lots of extra formatting just to recreate the functionality of format-icons
+ // disk module doesn't support format-icons by default for some reason
+ "disk": {
+ "format": "{percentage_free}% ",
+ "states": {
+ "0": 0,
+ "1": 11,
+ "2": 22,
+ "3": 33,
+ "4": 44,
+ "5": 55,
+ "6": 66,
+ "7": 77,
+ "8": 88
+ },
+ "format-0": "",
+ "format-1": "",
+ "format-2": "",
+ "format-3": "",
+ "format-4": "",
+ "format-5": "",
+ "format-6": "",
+ "format-7": "",
+ "format-8": "",
+ "on-click": "kitty -o font_size=7 btop",
+ "unit": "GB",
+ "tooltip-format": "{specific_used:0.1f} GiB ({percentage_used}%) used of {specific_total:0.1f} GiB on \"{path}\"\n{specific_free:0.1f} GiB ({percentage_free}%) free"
+
+ },
+
+ "custom/hyprpicker": {
+ "format": "",
+ "on-click": "hyprpicker --autocopy --format=hex",
+ "tooltip-format": "Hyprpicker"
+ },
+
+ "custom/wlogout": {
+ "format": "",
+ "on-click": "wlogout",
+ "tooltip-format": "wlogout"
+ },
+}
diff --git a/.config/waybar/config.jsonc.backup b/.config/waybar/config.jsonc.backup
new file mode 100644
index 0000000..50e5ec0
--- /dev/null
+++ b/.config/waybar/config.jsonc.backup
@@ -0,0 +1,221 @@
+// Amber's Dotfiles
+// __ __ __
+// /\ \ __/\ \ /\ \
+// \ \ \/\ \ \ \ __ __ __\ \ \____ __ _ __
+// \ \ \ \ \ \ \ /'__`\ /\ \/\ \\ \ '__`\ /'__`\ /\`'__\
+// \ \ \_/ \_\ \/\ \L\.\_\ \ \_\ \\ \ \L\ \/\ \L\.\_\ \ \/
+// \ `\___x___/\ \__/.\_\\/`____ \\ \_,__/\ \__/.\_\\ \_\
+// '\/__//__/ \/__/\/_/ `/___/> \\/___/ \/__/\/_/ \/_/
+// /\___/
+// \/__/
+
+//--------------------------------------------------------------------
+// Waybar Configuration
+//--------------------------------------------------------------------
+
+// -*- mode: jsonc -*-
+{
+ // "layer": "top", // Waybar at top layer
+ // "position": "bottom", // Waybar position (top|bottom|left|right)
+ "height": 30, // Waybar height (to be removed for auto height)
+ // "width": 1280, // Waybar width
+ "spacing": 4, // Gaps between modules (4px)
+ // Choose the order of the modules
+ "modules-left": [
+ "hyprland/window",
+ "hyprland/submap"
+ ],
+ "modules-center": [
+ "hyprland/workspaces"
+ ],
+ "modules-right": [
+ "mpd",
+ "idle_inhibitor",
+ "pulseaudio",
+ "wireplumber",
+ "network",
+ "cpu",
+ "memory",
+ "temperature",
+ "backlight",
+ "battery",
+ "battery#bat2",
+ "clock",
+ "tray"
+ ],
+ // Modules configuration
+ "hyprland/workspaces": {
+ // "disable-scroll": true,
+ // "all-outputs": true,
+ // "warp-on-scroll": false,
+ "persistent-workspaces": {
+ "*": [ 1, 2, 3, 4, 5 ]
+ },
+ "format": "{icon}",
+ "format-icons": {
+ "1": "",
+ "2": "",
+ "3": "",
+ "4": "",
+ "5": "",
+ "6": "6",
+ "7": "7",
+ "8": "8",
+ "9": "9",
+ "0": "0",
+ "urgent": "",
+ "focused": "",
+ "default": ""
+ }
+ },
+ "keyboard-state": {
+ "numlock": true,
+ "capslock": true,
+ "format": "{name} {icon}",
+ "format-icons": {
+ "locked": "",
+ "unlocked": ""
+ }
+ },
+ "hyprland/submap": {
+ "format": "{}"
+ },
+ "hyprland/scratchpad": {
+ "format": "{icon} {count}",
+ "show-empty": false,
+ "format-icons": ["", ""],
+ "tooltip": true,
+ "tooltip-format": "{app}: {title}"
+ },
+ "mpd": {
+ "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
+ "format-disconnected": "Disconnected ",
+ "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ",
+ "unknown-tag": "N/A",
+ "interval": 5,
+ "consume-icons": {
+ "on": " "
+ },
+ "random-icons": {
+ "off": " ",
+ "on": " "
+ },
+ "repeat-icons": {
+ "on": " "
+ },
+ "single-icons": {
+ "on": "1 "
+ },
+ "state-icons": {
+ "paused": "",
+ "playing": ""
+ },
+ "tooltip-format": "MPD (connected)",
+ "tooltip-format-disconnected": "MPD (disconnected)"
+ },
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ }
+ },
+ "tray": {
+ // "icon-size": 21,
+ "spacing": 10
+ },
+ "clock": {
+ // "timezone": "America/New_York",
+ "tooltip-format": "{:%Y %B}\n{calendar}",
+ "format-alt": "{:%Y-%m-%d}"
+ },
+ "cpu": {
+ "format": "{usage}% ",
+ "tooltip": false
+ },
+ "memory": {
+ "format": "{}% "
+ },
+ "temperature": {
+ // "thermal-zone": 2,
+ // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
+ "critical-threshold": 80,
+ // "format-critical": "{temperatureC}°C {icon}",
+ "format": "{temperatureC}°C {icon}",
+ "format-icons": ["", "", ""]
+ },
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "{percent}% {icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", ""]
+ },
+ "battery": {
+ "states": {
+ // "good": 95,
+ "warning": 30,
+ "critical": 15
+ },
+ "format": "{capacity}% {icon}",
+ "format-full": "{capacity}% {icon}",
+ "format-charging": "{capacity}% ",
+ "format-plugged": "{capacity}% ",
+ "format-alt": "{time} {icon}",
+ // "format-good": "", // An empty format will hide the module
+ // "format-full": "",
+ "format-icons": ["", "", "", "", ""]
+ },
+ "battery#bat2": {
+ "bat": "BAT2"
+ },
+ "power-profiles-daemon": {
+ "format": "{icon}",
+ "tooltip-format": "Power profile: {profile}\nDriver: {driver}",
+ "tooltip": true,
+ "format-icons": {
+ "default": "",
+ "performance": "",
+ "balanced": "",
+ "power-saver": ""
+ }
+ },
+ "network": {
+ // "interface": "wlp2*", // (Optional) To force the use of this interface
+ "format-wifi": "{essid} ({signalStrength}%) ",
+ "format-ethernet": "{ipaddr}/{cidr} ",
+ "tooltip-format": "{ifname} via {gwaddr} ",
+ "format-linked": "{ifname} (No IP) ",
+ "format-disconnected": "Disconnected ⚠",
+ "format-alt": "{ifname}: {ipaddr}/{cidr}"
+ },
+ "pulseaudio": {
+ // "scroll-step": 1, // %, can be a float
+ "format": "{volume}% {icon}",
+ "format-bluetooth": "{volume}% {icon}",
+ "format-bluetooth-muted": " {icon}",
+ "format-muted": " {format_source}",
+ "format-source": "{volume}% ",
+ "format-source-muted": "",
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""]
+ },
+ "on-click": "pavucontrol"
+ },
+ "custom/media": {
+ "format": "{icon} {}",
+ "return-type": "json",
+ "max-length": 40,
+ "format-icons": {
+ "spotify": "",
+ "default": "🎜"
+ },
+ "escape": true,
+ "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
+ // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name
+ }
+}
diff --git a/.config/waybar/launch.sh b/.config/waybar/launch.sh
new file mode 100644
index 0000000..d099f05
--- /dev/null
+++ b/.config/waybar/launch.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+# Amber's Dotfiles
+# __ __ __
+# /\ \ __/\ \ /\ \
+# \ \ \/\ \ \ \ __ __ __\ \ \____ __ _ __
+# \ \ \ \ \ \ \ /'__`\ /\ \/\ \\ \ '__`\ /'__`\ /\`'__\
+# \ \ \_/ \_\ \/\ \L\.\_\ \ \_\ \\ \ \L\ \/\ \L\.\_\ \ \/
+# \ `\___x___/\ \__/.\_\\/`____ \\ \_,__/\ \__/.\_\\ \_\
+# '\/__//__/ \/__/\/_/ `/___/> \\/___/ \/__/\/_/ \/_/
+# /\___/
+# \/__/
+
+#---------------------------------------------------------------------
+# Waybar Launch Script
+# Adapted from Stephen Raabe (My Linux For Work)
+#---------------------------------------------------------------------
+
+# Kill all running Waybar instances
+killall waybar
+
+# Start a single Waybar instance
+waybar &
diff --git a/.config/waybar/modules-common.jsonc b/.config/waybar/modules-common.jsonc
new file mode 100644
index 0000000..77fb20c
--- /dev/null
+++ b/.config/waybar/modules-common.jsonc
@@ -0,0 +1,294 @@
+// Amber's Dotfiles
+// __ __ __
+// /\ \ __/\ \ /\ \
+// \ \ \/\ \ \ \ __ __ __\ \ \____ __ _ __
+// \ \ \ \ \ \ \ /'__`\ /\ \/\ \\ \ '__`\ /'__`\ /\`'__\
+// \ \ \_/ \_\ \/\ \L\.\_\ \ \_\ \\ \ \L\ \/\ \L\.\_\ \ \/
+// \ `\___x___/\ \__/.\_\\/`____ \\ \_,__/\ \__/.\_\\ \_\
+// '\/__//__/ \/__/\/_/ `/___/> \\/___/ \/__/\/_/ \/_/
+// /\___/
+// \/__/
+
+//--------------------------------------------------------------------
+// Waybar Common Modules
+//
+// Base module configuration - Waybar config allows include statements
+// that can be used to overwrite select modules as desired
+//
+// Icons are NOT wrapped in a span because I intend to use the proportional variant of a nerd font for both text and icons
+//--------------------------------------------------------------------
+
+// -*- mode: jsonc -*-
+{
+
+ //----------------------------------------------------------------
+ // Hyprland modules
+ //----------------------------------------------------------------
+
+ "hyprland/workspaces": {
+ // "disable-scroll": true,
+ // "all-outputs": true,
+ // "warp-on-scroll": false,
+ "persistent-workspaces": {
+ "*": [1, 2, 3, 4, 5]
+ },
+ "format": "{icon}",
+ "format-icons": {
+ "1": "",
+ "2": "",
+ "3": "",
+ "4": "",
+ "5": "",
+ "6": "6",
+ "7": "7",
+ "8": "8",
+ "9": "9",
+ "0": "0",
+ "urgent": "",
+ "focused": "",
+ "default": ""
+ }
+ },
+
+ "hyprland/submap": {
+ "format": "{}"
+ },
+
+ "hyprland/scratchpad": {
+ "format": "{icon} {count}",
+ "show-empty": false,
+ "format-icons": ["", ""],
+ "tooltip": true,
+ "tooltip-format": "{app}: {title}"
+ },
+
+ //----------------------------------------------------------------
+ // General informational widgets / system control
+ //----------------------------------------------------------------
+
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "{icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", ""],
+ "tooltip": true,
+ "tooltip-format": "Backlight: {percent}%"
+ },
+
+ "battery": {
+ "states": {
+ // "good": 95,
+ "warning": 30,
+ "critical": 15
+ },
+ "format": "{icon}",
+ "tooltip": true,
+ "tooltip-format": "{capacity}%, {timeTo}",
+ "format-time": "{H} h {m} m",
+ "format-full": "{icon}",
+ "format-charging": "{icon}",
+ "format-plugged": "{icon}",
+ // "format-good": "", // An empty format will hide the module
+ // "format-full": "",
+ "format-icons": ["", "", "", "", "", "", "", "", "", "", "", ""],
+ "interval": 15
+ },
+
+ "clock": {
+ // "timezone": "America/New_York",
+ "format": "{:%H:%M}",
+ "tooltip-format": "{:%B %Y}\n{calendar}",
+ "calendar": {
+ "format": {
+ "months": "",
+ "today": "{}"
+ }
+ }
+ },
+
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": ""
+ }
+ },
+
+ "keyboard-state": {
+ "numlock": true,
+ "capslock": true,
+ "format": "{name} {icon}",
+ "format-icons": {
+ "locked": "",
+ "unlocked": ""
+ }
+ },
+
+ "mpris": {
+ "format": "{player_icon} {status_icon} {dynamic}",
+ "dynamic-len": 20,
+ "player-icons": {
+ "default": ""
+ },
+ "status-icons": {
+ "playing": "",
+ "paused": ""
+ },
+ "interval": 1
+ // "ignored-players": ["firefox"]
+ },
+
+ // Use the tray applet but install an icon theme that doesn't look ugly
+ "network": {
+ // "interface": "wlp2*", // (Optional) To force the use of this interface
+ "format-wifi": "{icon}",
+ "format-ethernet": "{ipaddr}/{cidr} ",
+ "tooltip-format": "{essid} ({signalStrength}%)\n{ifname} via {gwaddr} ",
+ "format-linked": "{ifname} (No IP) ",
+ "format-disconnected": "",
+ // "format-alt": "{ifname}: {ipaddr}/{cidr}",
+ "format-icons": ["", "", "", "", ""],
+ "on-click": "nm-connection-editor"
+ },
+
+ // Needs power-profiles-daemon
+ "power-profiles-daemon": {
+ "format": "{icon}",
+ "tooltip-format": "Power profile: {profile}\nDriver: {driver}",
+ "tooltip": true,
+ "format-icons": {
+ "default": "",
+ "performance": "",
+ "balanced": "",
+ "power-saver": ""
+ }
+ },
+
+ "tray": {
+ // "icon-size": 21,
+ "spacing": 10
+ },
+
+ "wireplumber": {
+ "format": "{icon} {volume}%",
+ "format-muted": " {volume}%",
+ "format-icons": [
+ "",
+ "",
+ ""
+ ],
+ "on-click": "pavucontrol"
+ },
+
+ "custom/wlogout": {
+ "format": "",
+ "on-click": "wlogout",
+ "tooltip-format": "wlogout"
+ },
+
+ //----------------------------------------------------------------
+ // Utility Modules
+ //----------------------------------------------------------------
+
+ "custom/hyprpicker": {
+ "format": "",
+ "on-click": "hyprpicker --autocopy --format=hex",
+ "tooltip-format": "Hyprpicker"
+ },
+
+ //----------------------------------------------------------------
+ // Hardware monitors
+ //----------------------------------------------------------------
+
+ // Lots of extra formatting just to recreate the functionality of format-icons
+ // memory and disk don't support format-icons for some reason
+
+ "cpu": {
+ "format": "{icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", ""],
+ "on-click": "kitty -o font_size=7 btop",
+ "interval": 2
+ },
+
+ "memory": {
+ "format": "{usage}% ",
+ "states": {
+ "0": 0,
+ "1": 11,
+ "2": 22,
+ "3": 33,
+ "4": 44,
+ "5": 55,
+ "6": 66,
+ "7": 77,
+ "8": 88
+ },
+ "format-0": "",
+ "format-1": "",
+ "format-2": "",
+ "format-3": "",
+ "format-4": "",
+ "format-5": "",
+ "format-6": "",
+ "format-7": "",
+ "format-8": "",
+ "on-click": "kitty -o font_size=7 btop",
+ "interval": 2,
+ "tooltip-format": "{used:0.1f}GiB ({percentage}%) used of {total:0.1f}GiB"
+ },
+
+ "temperature": {
+ // "thermal-zone": 2,
+ "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
+ "critical-threshold": 70,
+ // "format-critical": "{temperatureC}°C {icon}",
+ "format": "{icon}",
+ // First icon is repeated to avoid increasing the thermometer icon
+ // at only 30C or so
+ "format-icons": ["", "", "", "", "", "", ""],
+ "on-click": "kitty -o font_size=7 btop"
+ },
+
+ "disk": {
+ "format": "{percentage_free}% ",
+ "states": {
+ "0": 0,
+ "1": 11,
+ "2": 22,
+ "3": 33,
+ "4": 44,
+ "5": 55,
+ "6": 66,
+ "7": 77,
+ "8": 88
+ },
+ "format-0": "",
+ "format-1": "",
+ "format-2": "",
+ "format-3": "",
+ "format-4": "",
+ "format-5": "",
+ "format-6": "",
+ "format-7": "",
+ "format-8": "",
+ "on-click": "kitty -o font_size=7 btop",
+ "unit": "GB",
+ "tooltip-format": "{specific_used:0.1f} GiB ({percentage_used}%) used of {specific_total:0.1f} GiB on \"{path}\"\n{specific_free:0.1f} GiB ({percentage_free}%) free"
+ },
+
+ // Group the hardware modules for convenience
+ "group/hardware": {
+ "orientation": "inherit",
+ /* "drawer": {
+ "transition-duration": 300,
+ "children-class": "not-memory",
+ "transition-left-to-right": false
+ }, */
+ "modules": [
+ "cpu",
+ "memory",
+ "temperature",
+ "disk"
+ ]
+ },
+
+}
diff --git a/.config/waybar/scripts/baraction b/.config/waybar/scripts/baraction
new file mode 100644
index 0000000..63e9a3d
--- /dev/null
+++ b/.config/waybar/scripts/baraction
@@ -0,0 +1,72 @@
+#!/bin/sh
+. ~/.config/HyprV/hyprv.conf
+
+#Check the version
+VER=$(readlink -f ~/.config/waybar/config.jsonc | cut -d '-' -f1 | cut -d '/' -f8)
+
+# Check which waybar theme is set
+THEMEIS=$(readlink -f ~/.config/waybar/style.css | cut -d '-' -f3)
+
+#if the theme is not dark then we need to switch to it
+if [[ $THEMEIS == "" ]]; then
+ SWITCHTO="-dark"
+ MODESTR="Dark"
+else
+ MODESTR="Light"
+fi
+
+#show a message
+notify-send -h string:x-canonical-private-synchronous:sys-notify -u low "switching to $MODESTR"
+
+#set the waybar theme
+ln -sf ~/.config/HyprV/waybar/style/$VER'-style'$SWITCHTO.css ~/.config/waybar/style.css
+
+#set the wofi theme
+ln -sf ~/.config/HyprV/wofi/style/$VER'-style'$SWITCHTO.css ~/.config/wofi/style.css
+
+#set the mako theme
+ln -sf ~/.config/HyprV/mako/conf/config$SWITCHTO ~/.config/mako/config
+
+#set the measuring unit
+if [[ $SET_MESU == "I" ]]; then
+ ln -sf ~/.config/HyprV/waybar/conf/mesu-imp.jsonc ~/.config/HyprV/waybar/conf/mesu.jsonc
+elif [[ $SET_MESU == "M" ]]; then
+ ln -sf ~/.config/HyprV/waybar/conf/mesu-met.jsonc ~/.config/HyprV/waybar/conf/mesu.jsonc
+fi
+
+#set the xfce and GTK theme
+if [ $VER == "v4" ]; then
+ xfconf-query -c xsettings -p /Net/IconThemeName -s "Papirus-Dark"
+ gsettings set org.gnome.desktop.interface icon-theme "Papirus-Dark"
+else
+ xfconf-query -c xsettings -p /Net/IconThemeName -s "Adwaita$SWITCHTO"
+ gsettings set org.gnome.desktop.interface icon-theme "Adwaita$SWITCHTO"
+fi
+
+xfconf-query -c xsettings -p /Net/ThemeName -s "Adwaita$SWITCHTO"
+gsettings set org.gnome.desktop.interface gtk-theme "Adwaita$SWITCHTO"
+
+
+#change the background image and be cool about it ;)
+if [ -z $SET_BG ]; then
+ swww img ~/.config/HyprV/backgrounds/$VER'-background'$SWITCHTO.jpg --transition-fps 60 --transition-type wipe --transition-duration 2
+else
+ swww img $SET_BG --transition-fps 60 --transition-type wipe --transition-duration 2
+fi
+
+#update the sddm image
+cp -f ~/.config/HyprV/backgrounds/$VER'-background'$SWITCHTO.jpg /usr/share/sddm/themes/sdt/wallpaper.jpg
+
+#reset mako
+sleep 1
+pkill mako
+mako &
+
+#restart the waybar
+#killall -SIGUSR2 waybar <-- start causing web brwsers to close so switched to below...
+pkill waybar
+waybar &
+
+if [[ $VER == "v4" ]]; then
+ waybar --config ~/.config/HyprV/waybar/conf/v4-config-bottom.jsonc
+fi
\ No newline at end of file
diff --git a/.config/waybar/scripts/brightness b/.config/waybar/scripts/brightness
new file mode 100644
index 0000000..cca1e66
--- /dev/null
+++ b/.config/waybar/scripts/brightness
@@ -0,0 +1,107 @@
+#!/usr/bin/env bash
+
+# Amber's Dotfiles
+# __ __ __
+# /\ \ __/\ \ /\ \
+# \ \ \/\ \ \ \ __ __ __\ \ \____ __ _ __
+# \ \ \ \ \ \ \ /'__`\ /\ \/\ \\ \ '__`\ /'__`\ /\`'__\
+# \ \ \_/ \_\ \/\ \L\.\_\ \ \_\ \\ \ \L\ \/\ \L\.\_\ \ \/
+# \ `\___x___/\ \__/.\_\\/`____ \\ \_,__/\ \__/.\_\\ \_\
+# '\/__//__/ \/__/\/_/ `/___/> \\/___/ \/__/\/_/ \/_/
+# /\___/
+# \/__/
+
+#---------------------------------------------------------------------
+# Waybar Scripts - Brightness Control
+# Modified from HyprV
+#
+# Modified to enable setting a specific % increment and doing additional arithmetic to ensure
+# this value is respected / compensate for rounding errors.
+#
+# I also disabled calls to get_icon() and notify_user() in preference of using a Waybar widget
+# to monitor brightness as a percentage.
+#---------------------------------------------------------------------
+
+iDIR="$HOME/.config/HyprV/mako/icons"
+# Backlight increment in percentage
+INCREMENT=5
+
+# Get brightness
+get_backlight() {
+ LIGHT=$(printf "%.0f\n" $(brightnessctl i))
+ echo "${LIGHT}%"
+}
+
+# Get icons
+get_icon() {
+ backlight="$(brightnessctl g)"
+ current="${backlight%%%}"
+ if [[ ("$current" -ge "0") && ("$current" -le "52") ]]; then
+ icon="$iDIR/brightness-20.png"
+ elif [[ ("$current" -ge "52") && ("$current" -le "103") ]]; then
+ icon="$iDIR/brightness-40.png"
+ elif [[ ("$current" -ge "103") && ("$current" -le "155") ]]; then
+ icon="$iDIR/brightness-60.png"
+ elif [[ ("$current" -ge "155") && ("$current" -le "207") ]]; then
+ icon="$iDIR/brightness-80.png"
+ elif [[ ("$current" -ge "180") && ("$current" -le "255") ]]; then
+ icon="$iDIR/brightness-100.png"
+ fi
+}
+
+# Get the numeric brightness (0 - 255) from an integer percentage, with primitive rounding
+get_numeric() {
+ local intermediate=$(( $1 * 255 ))
+ local base_value=$(( $intermediate / 100 ))
+ echo $(( $base_value + (($intermediate % 100 ) / 50) ))
+}
+
+# Get the integer percentage brightness (0 - 100) from a numeric brightness, with primitive rounding
+get_percentage() {
+ local intermediate=$(( $1 * 100 ))
+ local base_value=$(( $intermediate / 255 ))
+ echo $(( $base_value + (($intermediate % 255 ) / 128) ))
+}
+
+# Notify
+notify_user() {
+ notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -t 4000 -i "$icon" "Brightness : $(brightnessctl g)"
+}
+
+# Increase brightness
+inc_backlight() {
+ local current=$(brightnessctl g)
+ local toPct=$(get_percentage $current)
+ local toNum=$(get_numeric $(( $toPct + $INCREMENT )))
+ if [[ "$toNum" -gt "255" ]]; then
+ toNum=255
+ fi
+ brightnessctl set $toNum # && get_icon && notify_user
+}
+
+# Decrease brightness
+dec_backlight() {
+ local current=$(brightnessctl g)
+ local toPct=$(get_percentage $current)
+ local toNum=$(get_numeric $(( $toPct - $INCREMENT )))
+ if [[ "$toNum" -lt "0" ]]; then
+ toNum=0
+ fi
+ brightnessctl set $toNum # && get_icon && notify_user
+}
+
+# Execute accordingly
+if [[ "$1" == "--get" ]]; then
+ brightnessctl g
+elif [[ "$1" == "--inc" ]]; then
+ inc_backlight
+elif [[ "$1" == "--dec" ]]; then
+ dec_backlight
+# Flags for testing get_percentage and get_numeric functions provided an input value
+elif [[ "$1" == "--pct" ]]; then
+ get_percentage $2
+elif [[ "$1" == "--num" ]]; then
+ get_numeric $2
+else
+ get_backlight
+fi
diff --git a/.config/waybar/scripts/kb-brightness b/.config/waybar/scripts/kb-brightness
new file mode 100644
index 0000000..3b86ec2
--- /dev/null
+++ b/.config/waybar/scripts/kb-brightness
@@ -0,0 +1,48 @@
+#!/usr/bin/env bash
+
+iDIR="$HOME/.config/HyprV/mako/icons"
+
+# Get brightness
+get_backlight() {
+ LIGHT=$(printf "%.0f\n" $(brightnessctl -d '*::kbd_backlight' i))
+ echo "${LIGHT}%"
+}
+
+# Get icons
+get_icon() {
+ backlight="$(brightnessctl -d '*::kbd_backlight' g)"
+ current="${backlight%%%}"
+ if [[ ("$current" -ge "0") && ("$current" -le "1") ]]; then
+ icon="$iDIR/brightness-20.png"
+ elif [[ ("$current" -ge "1") && ("$current" -le "2") ]]; then
+ icon="$iDIR/brightness-60.png"
+ elif [[ ("$current" -ge "2") && ("$current" -le "3") ]]; then
+ icon="$iDIR/brightness-100.png"
+ fi
+}
+
+# Notify
+notify_user() {
+ notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "Keyboard Brightness : $(brightnessctl -d '*::kbd_backlight' g)"
+}
+
+# Increase brightness
+inc_backlight() {
+ brightnessctl -d *::kbd_backlight set 33%+ && get_icon && notify_user
+}
+
+# Decrease brightness
+dec_backlight() {
+ brightnessctl -d *::kbd_backlight set 33%- && get_icon && notify_user
+}
+
+# Execute accordingly
+if [[ "$1" == "--get" ]]; then
+ brightnessctl -d '*::kbd_backlight' g
+elif [[ "$1" == "--inc" ]]; then
+ inc_backlight
+elif [[ "$1" == "--dec" ]]; then
+ dec_backlight
+else
+ get_backlight
+fi
\ No newline at end of file
diff --git a/.config/waybar/scripts/players b/.config/waybar/scripts/players
new file mode 100644
index 0000000..3276ffa
--- /dev/null
+++ b/.config/waybar/scripts/players
@@ -0,0 +1,38 @@
+#!/bin/bash
+# Amber's Dotfiles
+
+# __ __ __
+# /\ \ __/\ \ /\ \
+# \ \ \/\ \ \ \ __ __ __\ \ \____ __ _ __
+# \ \ \ \ \ \ \ /'__`\ /\ \/\ \\ \ '__`\ /'__`\ /\`'__\
+# \ \ \_/ \_\ \/\ \L\.\_\ \ \_\ \\ \ \L\ \/\ \L\.\_\ \ \/
+# \ `\___x___/\ \__/.\_\\/`____ \\ \_,__/\ \__/.\_\\ \_\
+# '\/__//__/ \/__/\/_/ `/___/> \\/___/ \/__/\/_/ \/_/
+# /\___/
+# \/__/
+
+#---------------------------------------------------------------------
+# Waybar Scripts - Player Control
+#
+# Was going to use this to try and stop Firefox from stealing my media
+# keys but I can't find a clean way to integrate it into the Waybar
+# mpris module. Oh well.
+#
+# Script linked in to Hyprland media key binds as well as Waybar modules
+# to issue appropriate playerctl commands
+#---------------------------------------------------------------------
+
+# Comma-separated lists of players in order of priority - see playerctl -l
+# I dislike Firefox (i.e. YouTube) stealing my media keys, so if I'm using
+# a different player such as tidal-hifi for music the commands will be
+# sent in a preferential manner
+PRIORITY_HIGH=
+PRIORITY_LOW=
+
+if [[ "$1" == "--prev" ]]; then
+ playerctl --player=${PRIORITY_HIGH},%any,${PRIORITY_LOW} previous
+elif [[ "$1" == "--toggle" ]]; then
+ playerctl --player=${PRIORITY_HIGH},%any,${PRIORITY_LOW} play-pause
+elif [[ "$1" == "--next" ]]; then
+ playerctl --player=${PRIORITY_HIGH},%any,${PRIORITY_LOW} next
+fi
diff --git a/.config/waybar/scripts/power_profile b/.config/waybar/scripts/power_profile
new file mode 100644
index 0000000..792a92e
--- /dev/null
+++ b/.config/waybar/scripts/power_profile
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+get_pwr() {
+ PWR=$(asusctl profile -p | sed s:'Active profile is'::)
+}
+
+get_pwr
+
+if [ $PWR == Balanced ]; then
+ text=""
+ tooltip="Balanced"
+elif [ $PWR == Performance ]; then
+ text=""
+ tooltip="Performance"
+elif [ $PWR == Quiet ]; then
+ text=""
+ tooltip="Quiet"
+fi
+
+echo '{"text": "'$text'", "tooltip": "'$tooltip'"}'
+
+if [[ "$1" == "next" ]]; then
+ asusctl profile -n; pkill -SIGRTMIN+8 waybar
+ get_pwr
+ notify-send -h string:x-canonical-private-synchronous:sys-notify -u low "$PWR Power Profile"
+fi
\ No newline at end of file
diff --git a/.config/waybar/scripts/update-sys b/.config/waybar/scripts/update-sys
new file mode 100644
index 0000000..b577131
--- /dev/null
+++ b/.config/waybar/scripts/update-sys
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+
+# Original script by @speltriao on GitHub
+# https://github.com/speltriao/Pacman-Update-for-GNOME-Shell
+
+# If the operating system is not Arch Linux, exit the script successfully
+if [ ! -f /etc/arch-release ]; then
+ exit 0
+fi
+
+# Calculate updates for each service
+AUR=$(yay -Qua | wc -l)
+OFFICIAL=$(checkupdates | wc -l)
+
+# Case/switch for each service updates
+case $1 in
+ aur) echo " $AUR";;
+ official) echo " $OFFICIAL";;
+esac
+
+# If the parameter is "update", update all services
+if [ "$1" = "update" ]; then
+ kitty --title update-sys sh -c 'yay -Syu'
+fi
+
+# If there aren't any parameters, return the total number of updates
+if [ "$1" = "" ]; then
+ # Calculate total number of updates
+ COUNT=$((OFFICIAL+AUR))
+ # If there are updates, the script will output the following: Updates
+ # If there are no updates, the script will output nothing.
+
+ if [[ "$COUNT" = "0" ]]
+ then
+ echo ""
+ else
+ # This Update symbol is RTL. So is left-to-right override.
+ echo " $COUNT"
+ fi
+ exit 0
+fi
\ No newline at end of file
diff --git a/.config/waybar/scripts/volume b/.config/waybar/scripts/volume
new file mode 100644
index 0000000..529ef57
--- /dev/null
+++ b/.config/waybar/scripts/volume
@@ -0,0 +1,106 @@
+#!/bin/bash
+
+iDIR="$HOME/.config/HyprV/mako/icons"
+
+# Get Volume
+get_volume() {
+ volume=$(pamixer --get-volume)
+ echo "$volume"
+}
+
+# Get icons
+get_icon() {
+ current=$(get_volume)
+ if [[ "$current" -eq "0" ]]; then
+ echo "$iDIR/volume-mute.png"
+ elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then
+ echo "$iDIR/volume-low.png"
+ elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then
+ echo "$iDIR/volume-mid.png"
+ elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then
+ echo "$iDIR/volume-high.png"
+ fi
+}
+
+# Notify
+notify_user() {
+ notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -t 4000 -i "$(get_icon)" "Volume : $(get_volume) %"
+}
+
+# Increase Volume
+inc_volume() {
+ pamixer -i 5 && notify_user
+}
+
+# Decrease Volume
+dec_volume() {
+ pamixer -d 5 && notify_user
+}
+
+# Toggle Mute
+toggle_mute() {
+ if [ "$(pamixer --get-mute)" == "false" ]; then
+ pamixer -m && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -t 4000 -i "$iDIR/volume-mute.png" "Volume Switched OFF"
+ elif [ "$(pamixer --get-mute)" == "true" ]; then
+ pamixer -u && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -t 4000 -i "$(get_icon)" "Volume Switched ON"
+ fi
+}
+
+# Toggle Mic
+toggle_mic() {
+ if [ "$(pamixer --default-source --get-mute)" == "false" ]; then
+ pamixer --default-source -m && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -t 4000 -i "$iDIR/microphone-mute.png" "Microphone Switched OFF"
+ elif [ "$(pamixer --default-source --get-mute)" == "true" ]; then
+ pamixer -u --default-source u && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -t 4000 -i "$iDIR/microphone.png" "Microphone Switched ON"
+ fi
+}
+# Get icons
+get_mic_icon() {
+ current=$(pamixer --default-source --get-volume)
+ if [[ "$current" -eq "0" ]]; then
+ echo "$iDIR/microphone.png"
+ elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then
+ echo "$iDIR/microphone.png"
+ elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then
+ echo "$iDIR/microphone.png"
+ elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then
+ echo "$iDIR/microphone.png"
+ fi
+}
+# Notify
+notify_mic_user() {
+ notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -t 4000 -i "$(get_mic_icon)" "Mic-Level : $(pamixer --default-source --get-volume) %"
+}
+
+# Increase MIC Volume
+inc_mic_volume() {
+ pamixer --default-source -i 5 && notify_mic_user
+}
+
+# Decrease MIC Volume
+dec_mic_volume() {
+ pamixer --default-source -d 5 && notify_mic_user
+}
+
+# Execute accordingly
+if [[ "$1" == "--get" ]]; then
+ get_volume
+elif [[ "$1" == "--inc" ]]; then
+ inc_volume
+elif [[ "$1" == "--dec" ]]; then
+ dec_volume
+elif [[ "$1" == "--toggle" ]]; then
+ toggle_mute
+elif [[ "$1" == "--toggle-mic" ]]; then
+ toggle_mic
+elif [[ "$1" == "--get-icon" ]]; then
+ get_icon
+elif [[ "$1" == "--get-mic-icon" ]]; then
+ get_mic_icon
+elif [[ "$1" == "--mic-inc" ]]; then
+ inc_mic_volume
+elif [[ "$1" == "--mic-dec" ]]; then
+ dec_mic_volume
+else
+ get_volume
+fi
diff --git a/.config/waybar/scripts/waybar-wttr-c.py b/.config/waybar/scripts/waybar-wttr-c.py
new file mode 100644
index 0000000..87918a7
--- /dev/null
+++ b/.config/waybar/scripts/waybar-wttr-c.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python
+
+import json
+import requests
+from datetime import datetime
+
+WEATHER_CODES = {
+ '113': '☀️ ',
+ '116': '⛅ ',
+ '119': '☁️ ',
+ '122': '☁️ ',
+ '143': '☁️ ',
+ '176': '🌧️',
+ '179': '🌧️',
+ '182': '🌧️',
+ '185': '🌧️',
+ '200': '⛈️ ',
+ '227': '🌨️',
+ '230': '🌨️',
+ '248': '☁️ ',
+ '260': '☁️ ',
+ '263': '🌧️',
+ '266': '🌧️',
+ '281': '🌧️',
+ '284': '🌧️',
+ '293': '🌧️',
+ '296': '🌧️',
+ '299': '🌧️',
+ '302': '🌧️',
+ '305': '🌧️',
+ '308': '🌧️',
+ '311': '🌧️',
+ '314': '🌧️',
+ '317': '🌧️',
+ '320': '🌨️',
+ '323': '🌨️',
+ '326': '🌨️',
+ '329': '❄️ ',
+ '332': '❄️ ',
+ '335': '❄️ ',
+ '338': '❄️ ',
+ '350': '🌧️',
+ '353': '🌧️',
+ '356': '🌧️',
+ '359': '🌧️',
+ '362': '🌧️',
+ '365': '🌧️',
+ '368': '🌧️',
+ '371': '❄️',
+ '374': '🌨️',
+ '377': '🌨️',
+ '386': '🌨️',
+ '389': '🌨️',
+ '392': '🌧️',
+ '395': '❄️ '
+}
+
+data = {}
+
+
+weather = requests.get("https://wttr.in/?format=j1").json()
+
+
+def format_time(time):
+ return time.replace("00", "").zfill(2)
+
+
+def format_temp(temp):
+ return (hour['FeelsLikeC']+"°").ljust(3)
+
+
+def format_chances(hour):
+ chances = {
+ "chanceoffog": "Fog",
+ "chanceoffrost": "Frost",
+ "chanceofovercast": "Overcast",
+ "chanceofrain": "Rain",
+ "chanceofsnow": "Snow",
+ "chanceofsunshine": "Sunshine",
+ "chanceofthunder": "Thunder",
+ "chanceofwindy": "Wind"
+ }
+
+ conditions = []
+ for event in chances.keys():
+ if int(hour[event]) > 0:
+ conditions.append(chances[event]+" "+hour[event]+"%")
+ return ", ".join(conditions)
+
+tempint = int(weather['current_condition'][0]['FeelsLikeC'])
+extrachar = ''
+if tempint > 0 and tempint < 10:
+ extrachar = '+'
+
+
+data['text'] = ' '+WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \
+ " "+extrachar+weather['current_condition'][0]['FeelsLikeC']+"°"
+
+data['tooltip'] = f"{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_C']}°\n"
+data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeC']}°\n"
+data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedKmph']}Km/h\n"
+data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n"
+for i, day in enumerate(weather['weather']):
+ data['tooltip'] += f"\n"
+ if i == 0:
+ data['tooltip'] += "Today, "
+ if i == 1:
+ data['tooltip'] += "Tomorrow, "
+ data['tooltip'] += f"{day['date']}\n"
+ data['tooltip'] += f"⬆️ {day['maxtempC']}° ⬇️ {day['mintempC']}° "
+ data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n"
+ for hour in day['hourly']:
+ if i == 0:
+ if int(format_time(hour['time'])) < datetime.now().hour-2:
+ continue
+ data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeC'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n"
+
+
+print(json.dumps(data))
diff --git a/.config/waybar/scripts/waybar-wttr.py b/.config/waybar/scripts/waybar-wttr.py
new file mode 100644
index 0000000..38f1e88
--- /dev/null
+++ b/.config/waybar/scripts/waybar-wttr.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python
+
+import json
+import requests
+from datetime import datetime
+
+WEATHER_CODES = {
+ '113': '☀️ ',
+ '116': '⛅ ',
+ '119': '☁️ ',
+ '122': '☁️ ',
+ '143': '☁️ ',
+ '176': '🌧️',
+ '179': '🌧️',
+ '182': '🌧️',
+ '185': '🌧️',
+ '200': '⛈️ ',
+ '227': '🌨️',
+ '230': '🌨️',
+ '248': '☁️ ',
+ '260': '☁️ ',
+ '263': '🌧️',
+ '266': '🌧️',
+ '281': '🌧️',
+ '284': '🌧️',
+ '293': '🌧️',
+ '296': '🌧️',
+ '299': '🌧️',
+ '302': '🌧️',
+ '305': '🌧️',
+ '308': '🌧️',
+ '311': '🌧️',
+ '314': '🌧️',
+ '317': '🌧️',
+ '320': '🌨️',
+ '323': '🌨️',
+ '326': '🌨️',
+ '329': '❄️ ',
+ '332': '❄️ ',
+ '335': '❄️ ',
+ '338': '❄️ ',
+ '350': '🌧️',
+ '353': '🌧️',
+ '356': '🌧️',
+ '359': '🌧️',
+ '362': '🌧️',
+ '365': '🌧️',
+ '368': '🌧️',
+ '371': '❄️',
+ '374': '🌨️',
+ '377': '🌨️',
+ '386': '🌨️',
+ '389': '🌨️',
+ '392': '🌧️',
+ '395': '❄️ '
+}
+
+data = {}
+
+
+weather = requests.get("https://wttr.in/?format=j1").json()
+
+
+def format_time(time):
+ return time.replace("00", "").zfill(2)
+
+
+def format_temp(temp):
+ return (hour['FeelsLikeF']+"°").ljust(3)
+
+
+def format_chances(hour):
+ chances = {
+ "chanceoffog": "Fog",
+ "chanceoffrost": "Frost",
+ "chanceofovercast": "Overcast",
+ "chanceofrain": "Rain",
+ "chanceofsnow": "Snow",
+ "chanceofsunshine": "Sunshine",
+ "chanceofthunder": "Thunder",
+ "chanceofwindy": "Wind"
+ }
+
+ conditions = []
+ for event in chances.keys():
+ if int(hour[event]) > 0:
+ conditions.append(chances[event]+" "+hour[event]+"%")
+ return ", ".join(conditions)
+
+tempint = int(weather['current_condition'][0]['FeelsLikeF'])
+extrachar = ''
+if tempint > 0 and tempint < 10:
+ extrachar = '+'
+
+
+data['text'] = ' '+WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \
+ " "+extrachar+weather['current_condition'][0]['FeelsLikeF']+"°"
+
+data['tooltip'] = f"{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_F']}°\n"
+data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeF']}°\n"
+data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedKmph']}Km/h\n"
+data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n"
+for i, day in enumerate(weather['weather']):
+ data['tooltip'] += f"\n"
+ if i == 0:
+ data['tooltip'] += "Today, "
+ if i == 1:
+ data['tooltip'] += "Tomorrow, "
+ data['tooltip'] += f"{day['date']}\n"
+ data['tooltip'] += f"⬆️ {day['maxtempF']}° ⬇️ {day['mintempF']}° "
+ data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n"
+ for hour in day['hourly']:
+ if i == 0:
+ if int(format_time(hour['time'])) < datetime.now().hour-2:
+ continue
+ data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeF'])} {hour['weatherDesc'][0]['value']}, {format_chances(hour)}\n"
+
+
+print(json.dumps(data))
diff --git a/.config/waybar/scripts/wpgtk.py b/.config/waybar/scripts/wpgtk.py
new file mode 100644
index 0000000..96ba82c
--- /dev/null
+++ b/.config/waybar/scripts/wpgtk.py
@@ -0,0 +1,16 @@
+import shutil
+import subprocess
+import os
+import tempfile
+
+"""Runs xsettingsd for a short time to reload gtk3 theme"""
+if shutil.which("xsettingsd"):
+ fd, path = tempfile.mkstemp()
+ try:
+ with os.fdopen(fd, 'w+') as tmp:
+ tmp.write('Net/ThemeName "FlatColor"\n')
+ tmp.close()
+ subprocess.Popen.wait(subprocess.Popen(["timeout", "0.2s", "xsettingsd", "-c", path]))
+ finally:
+ os.remove(path)
+
diff --git a/.config/waybar/style.css b/.config/waybar/style.css
new file mode 100644
index 0000000..d74b80a
--- /dev/null
+++ b/.config/waybar/style.css
@@ -0,0 +1,317 @@
+/* TODO Fonts, color variables, etc. in external file to swap quickly? */
+
+* {
+ /* Don't need Font Awesome necessarily; using ZedMono nerd font here */
+ font-family: 'ZedMono NFP';
+ font-size: 14px;
+}
+
+
+window#waybar {
+ background-color: rgba(43, 48, 59, 0.5);
+ /* border-bottom: 3px solid rgba(100, 114, 125, 0.5); */
+ border-bottom: 3px solid rgba(55, 88, 72, 0.5);
+ color: #ffffff;
+ transition-property: background-color;
+ transition-duration: .5s;
+}
+
+window#waybar.hidden {
+ opacity: 0.2;
+}
+
+/*
+window#waybar.empty {
+ background-color: transparent;
+}
+window#waybar.solo {
+ background-color: #FFFFFF;
+}
+*/
+
+window#waybar.termite {
+ background-color: #3F3F3F;
+}
+
+window#waybar.chromium {
+ background-color: #000000;
+ border: none;
+}
+
+button {
+ /* Use box-shadow instead of border so the text isn't offset */
+ box-shadow: inset 0 -3px transparent;
+ /* Avoid rounded borders under each button name */
+ border: none;
+ border-radius: 0;
+}
+
+/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
+button:hover {
+ background: inherit;
+ box-shadow: inset 0 -3px #ffffff;
+}
+
+#workspaces button {
+ min-width: 20px;
+ padding: 0 5px;
+ background-color: transparent;
+ color: #ffffff;
+}
+
+#workspaces button.active {
+ box-shadow: inset 0 -3px #5BCE22;
+}
+
+#workspaces button:hover {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+#workspaces button.focused {
+ background-color: #64727D;
+ box-shadow: inset 0 -3px #ffffff;
+}
+
+#workspaces button.urgent {
+ background-color: #eb4d4b;
+}
+
+#mode {
+ background-color: #64727D;
+ box-shadow: inset 0 -3px #ffffff;
+}
+
+#clock,
+#battery,
+#cpu,
+#memory,
+#disk,
+#temperature,
+#backlight,
+#network,
+#pulseaudio,
+#wireplumber,
+#custom-media,
+#tray,
+#mode,
+#idle_inhibitor,
+#scratchpad,
+#power-profiles-daemon,
+#mpd,
+#custom-hyprpicker {
+ padding: 0 5px;
+ color: #ffffff;
+}
+
+#window,
+#workspaces {
+ margin: 0 4px;
+}
+
+/* If workspaces is the leftmost module, omit left margin */
+.modules-left > widget:first-child > #workspaces {
+ margin-left: 0;
+}
+
+/* If workspaces is the rightmost module, omit right margin */
+.modules-right > widget:last-child > #workspaces {
+ margin-right: 0;
+}
+
+#clock {
+}
+
+#battery {
+}
+
+#battery.warning {
+ color: #ffd700
+}
+
+#battery.critical:not(.charging) {
+ background-color: #f53c3c;
+ color: #ffffff;
+}
+
+#battery.charging, #battery.plugged {
+ background-color: #26a65b;
+}
+
+#power-profiles-daemon {
+ padding-right: 15px;
+}
+
+#power-profiles-daemon.performance {
+ background-color: #f53c3c;
+ color: #ffffff;
+}
+
+#power-profiles-daemon.balanced {
+ background-color: #2980b9;
+ color: #ffffff;
+}
+
+#power-profiles-daemon.power-saver {
+ background-color: #2ecc71;
+ color: #000000;
+}
+
+label:focus {
+ background-color: #000000;
+}
+
+#cpu {
+ min-width: 30px;
+}
+
+#memory {
+ min-width: 30px;
+}
+
+#disk {
+ min-width: 30px;
+}
+
+#backlight {
+}
+
+#network {
+}
+
+#network.disconnected {
+}
+
+#pulseaudio {
+ background-color: #f1c40f;
+ color: #000000;
+}
+
+#pulseaudio.muted {
+ background-color: #90b1b1;
+ color: #2a5c45;
+}
+
+#wireplumber {
+ transition: color .25s;
+ background-color: transparent;
+ color: #ffffff;
+}
+
+#wireplumber.muted {
+ color: #cc2014;
+}
+
+#custom-media {
+ background-color: #66cc99;
+ color: #2a5c45;
+ min-width: 80px;
+}
+
+#custom-media.custom-spotify {
+ background-color: #66cc99;
+}
+
+#custom-media.custom-vlc {
+ background-color: #ffa000;
+}
+
+#temperature {
+}
+
+#temperature.critical {
+ background-color: #eb4d4b;
+}
+
+#tray {
+}
+
+#tray > .passive {
+ -gtk-icon-effect: dim;
+}
+
+#tray > .needs-attention {
+ -gtk-icon-effect: highlight;
+ background-color: #eb4d4b;
+}
+
+#idle_inhibitor {
+ background-color: #2d3436;
+}
+
+#idle_inhibitor.activated {
+ background-color: #ecf0f1;
+ color: #2d3436;
+}
+
+#mpd {
+ background-color: #66cc99;
+ color: #2a5c45;
+}
+
+#mpd.disconnected {
+ background-color: #f53c3c;
+}
+
+#mpd.stopped {
+ background-color: #90b1b1;
+}
+
+#mpd.paused {
+ background-color: #51a37a;
+}
+
+#language {
+ background: #00b093;
+ color: #740864;
+ padding: 0 5px;
+ margin: 0 5px;
+ min-width: 16px;
+}
+
+#keyboard-state {
+ background: #97e1ad;
+ color: #000000;
+ padding: 0 0px;
+ margin: 0 5px;
+ min-width: 16px;
+}
+
+#keyboard-state > label {
+ padding: 0 5px;
+}
+
+#keyboard-state > label.locked {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+#scratchpad {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+#scratchpad.empty {
+ background-color: transparent;
+}
+
+#privacy {
+ padding: 0;
+}
+
+#privacy-item {
+ padding: 0 5px;
+ color: white;
+}
+
+#privacy-item.screenshare {
+ background-color: #cf5700;
+}
+
+#privacy-item.audio-in {
+ background-color: #1ca000;
+}
+
+#privacy-item.audio-out {
+ background-color: #0069d4;
+}
+
+#mpris {
+}
diff --git a/.config/waybar/style.css.backup b/.config/waybar/style.css.backup
new file mode 100644
index 0000000..fde356b
--- /dev/null
+++ b/.config/waybar/style.css.backup
@@ -0,0 +1,327 @@
+* {
+ /* `otf-font-awesome` is required to be installed for icons */
+ font-family: Roboto, Helvetica, Arial, sans-serif;
+ font-size: 13px;
+}
+
+window#waybar {
+ background-color: rgba(43, 48, 59, 0.5);
+ border-bottom: 3px solid rgba(100, 114, 125, 0.5);
+ color: #ffffff;
+ transition-property: background-color;
+ transition-duration: .5s;
+}
+
+window#waybar.hidden {
+ opacity: 0.2;
+}
+
+/*
+window#waybar.empty {
+ background-color: transparent;
+}
+window#waybar.solo {
+ background-color: #FFFFFF;
+}
+*/
+
+window#waybar.termite {
+ background-color: #3F3F3F;
+}
+
+window#waybar.chromium {
+ background-color: #000000;
+ border: none;
+}
+
+button {
+ /* Use box-shadow instead of border so the text isn't offset */
+ box-shadow: inset 0 -3px transparent;
+ /* Avoid rounded borders under each button name */
+ border: none;
+ border-radius: 0;
+}
+
+/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
+button:hover {
+ background: inherit;
+ box-shadow: inset 0 -3px #ffffff;
+}
+
+#workspaces button {
+ min-width: 20px;
+ padding: 0 5px;
+ background-color: transparent;
+ color: #ffffff;
+}
+
+#workspaces button.active {
+ box-shadow: inset 0 -3px #79B92D;
+}
+
+#workspaces button:hover {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+#workspaces button.focused {
+ background-color: #64727D;
+ box-shadow: inset 0 -3px #ffffff;
+}
+
+#workspaces button.urgent {
+ background-color: #eb4d4b;
+}
+
+#mode {
+ background-color: #64727D;
+ box-shadow: inset 0 -3px #ffffff;
+}
+
+#clock,
+#battery,
+#cpu,
+#memory,
+#disk,
+#temperature,
+#backlight,
+#network,
+#pulseaudio,
+#wireplumber,
+#custom-media,
+#tray,
+#mode,
+#idle_inhibitor,
+#scratchpad,
+#power-profiles-daemon,
+#mpd {
+ padding: 0 10px;
+ color: #ffffff;
+}
+
+#window,
+#workspaces {
+ margin: 0 4px;
+}
+
+/* If workspaces is the leftmost module, omit left margin */
+.modules-left > widget:first-child > #workspaces {
+ margin-left: 0;
+}
+
+/* If workspaces is the rightmost module, omit right margin */
+.modules-right > widget:last-child > #workspaces {
+ margin-right: 0;
+}
+
+#clock {
+ background-color: #64727D;
+}
+
+#battery {
+ background-color: #ffffff;
+ color: #000000;
+}
+
+#battery.charging, #battery.plugged {
+ color: #ffffff;
+ background-color: #26A65B;
+}
+
+@keyframes blink {
+ to {
+ background-color: #ffffff;
+ color: #000000;
+ }
+}
+
+/* Using steps() instead of linear as a timing function to limit cpu usage */
+#battery.critical:not(.charging) {
+ background-color: #f53c3c;
+ color: #ffffff;
+ /* animation-name: blink;
+ animation-duration: 0.5s;
+ animation-timing-function: steps(12);
+ animation-iteration-count: infinite;
+ animation-direction: alternate; */
+}
+
+#power-profiles-daemon {
+ padding-right: 15px;
+}
+
+#power-profiles-daemon.performance {
+ background-color: #f53c3c;
+ color: #ffffff;
+}
+
+#power-profiles-daemon.balanced {
+ background-color: #2980b9;
+ color: #ffffff;
+}
+
+#power-profiles-daemon.power-saver {
+ background-color: #2ecc71;
+ color: #000000;
+}
+
+label:focus {
+ background-color: #000000;
+}
+
+#cpu {
+ background-color: #2ecc71;
+ color: #000000;
+}
+
+#memory {
+ background-color: #9b59b6;
+}
+
+#disk {
+ background-color: #964B00;
+}
+
+#backlight {
+ background-color: #90b1b1;
+}
+
+#network {
+ background-color: #2980b9;
+}
+
+#network.disconnected {
+ background-color: #f53c3c;
+}
+
+#pulseaudio {
+ background-color: #f1c40f;
+ color: #000000;
+}
+
+#pulseaudio.muted {
+ background-color: #90b1b1;
+ color: #2a5c45;
+}
+
+#wireplumber {
+ background-color: #fff0f5;
+ color: #000000;
+}
+
+#wireplumber.muted {
+ background-color: #f53c3c;
+}
+
+#custom-media {
+ background-color: #66cc99;
+ color: #2a5c45;
+ min-width: 100px;
+}
+
+#custom-media.custom-spotify {
+ background-color: #66cc99;
+}
+
+#custom-media.custom-vlc {
+ background-color: #ffa000;
+}
+
+#temperature {
+ background-color: #f0932b;
+}
+
+#temperature.critical {
+ background-color: #eb4d4b;
+}
+
+#tray {
+ background-color: #2980b9;
+}
+
+#tray > .passive {
+ -gtk-icon-effect: dim;
+}
+
+#tray > .needs-attention {
+ -gtk-icon-effect: highlight;
+ background-color: #eb4d4b;
+}
+
+#idle_inhibitor {
+ background-color: #2d3436;
+}
+
+#idle_inhibitor.activated {
+ background-color: #ecf0f1;
+ color: #2d3436;
+}
+
+#mpd {
+ background-color: #66cc99;
+ color: #2a5c45;
+}
+
+#mpd.disconnected {
+ background-color: #f53c3c;
+}
+
+#mpd.stopped {
+ background-color: #90b1b1;
+}
+
+#mpd.paused {
+ background-color: #51a37a;
+}
+
+#language {
+ background: #00b093;
+ color: #740864;
+ padding: 0 5px;
+ margin: 0 5px;
+ min-width: 16px;
+}
+
+#keyboard-state {
+ background: #97e1ad;
+ color: #000000;
+ padding: 0 0px;
+ margin: 0 5px;
+ min-width: 16px;
+}
+
+#keyboard-state > label {
+ padding: 0 5px;
+}
+
+#keyboard-state > label.locked {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+#scratchpad {
+ background: rgba(0, 0, 0, 0.2);
+}
+
+#scratchpad.empty {
+ background-color: transparent;
+}
+
+#privacy {
+ padding: 0;
+}
+
+#privacy-item {
+ padding: 0 5px;
+ color: white;
+}
+
+#privacy-item.screenshare {
+ background-color: #cf5700;
+}
+
+#privacy-item.audio-in {
+ background-color: #1ca000;
+}
+
+#privacy-item.audio-out {
+ background-color: #0069d4;
+}
diff --git a/.config/wlogout/layout b/.config/wlogout/layout
new file mode 100644
index 0000000..345ff6d
--- /dev/null
+++ b/.config/wlogout/layout
@@ -0,0 +1,36 @@
+{
+ "label" : "lock",
+ "action" : "hyprlock",
+ "text" : "Lock",
+ "keybind" : "l"
+}
+{
+ "label" : "hibernate",
+ "action" : "systemctl hibernate",
+ "text" : "Hibernate",
+ "keybind" : "h"
+}
+{
+ "label" : "logout",
+ "action" : "sleep 1; hyprctl dispatch exit",
+ "text" : "Logout",
+ "keybind" : "e"
+}
+{
+ "label" : "shutdown",
+ "action" : "systemctl poweroff",
+ "text" : "Shutdown",
+ "keybind" : "s"
+}
+{
+ "label" : "suspend",
+ "action" : "systemctl suspend",
+ "text" : "Suspend",
+ "keybind" : "u"
+}
+{
+ "label" : "reboot",
+ "action" : "systemctl reboot",
+ "text" : "Reboot",
+ "keybind" : "r"
+}
diff --git a/.config/wlogout/style.css b/.config/wlogout/style.css
new file mode 100644
index 0000000..2d53cc0
--- /dev/null
+++ b/.config/wlogout/style.css
@@ -0,0 +1,52 @@
+* {
+ background-image: none;
+ box-shadow: none;
+}
+
+window {
+ background-color: rgba(12, 12, 12, 0.9);
+}
+
+button {
+ border-radius: 0;
+ border-color: black;
+ text-decoration-color: #5BCE22;
+ color: #5BCE22;
+ background-color: #1E1E1E;
+ border-radius: 5px;
+ border-style: none;
+ border-width: 1px;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: 25%;
+ margin: 2px;
+}
+
+button:focus, button:active, button:hover {
+ background-color: #375848;
+ outline-style: none;
+}
+
+#lock {
+ background-image: image(url("/usr/share/wlogout/assets/lock.svg"), url("/usr/share/wlogout/icons/lock.png"), url("/usr/local/share/wlogout/icons/lock.png"));
+}
+
+#logout {
+ background-image: image(url("/usr/share/wlogout/assets/logout.svg"), url("/usr/share/wlogout/icons/logout.png"), url("/usr/local/share/wlogout/icons/logout.png"));
+}
+
+#suspend {
+ background-image: image(url("/usr/share/wlogout/assets/suspend.svg"), url("/usr/share/wlogout/icons/suspend.png"), url("/usr/local/share/wlogout/icons/suspend.png"));
+}
+
+#hibernate {
+ background-image: image(url("/usr/share/wlogout/assets/hibernate.svg"), url("/usr/share/wlogout/icons/hibernate.png"), url("/usr/local/share/wlogout/icons/hibernate.png"));
+}
+
+#shutdown {
+ background-image: image(url("/usr/share/wlogout/assets/shutdown.svg"), url("/usr/share/wlogout/icons/shutdown.png"), url("/usr/local/share/wlogout/icons/shutdown.png"));
+}
+
+#reboot {
+ background-image: image(url("/usr/share/wlogout/assets/reboot.svg"), url("/usr/share/wlogout/icons/reboot.png"), url("/usr/local/share/wlogout/icons/reboot.png"));
+}
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..6e50d3f
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,17 @@
+# Amber's Dotfiles
+# ____ __ __ ____ ____ ____
+# /\ _`\ /\ \ __/\ \__ /\ _`\ /\ _`\ /\ _`\
+# \ \ \L\_\ \_\ \/\_\ \ ,_\ ___ _ __\ \ \/\_\\ \ \L\_\ \ \L\_\
+# \ \ _\L /'_` \/\ \ \ \/ / __`\/\`'__\ \ \/_/_\ \ _\/\ \ \L_L
+# \ \ \L\ \/\ \L\ \ \ \ \ \_/\ \L\ \ \ \/ \ \ \L\ \\ \ \/ \ \ \/, \
+# \ \____/\ \___,_\ \_\ \__\ \____/\ \_\ \ \____/ \ \_\ \ \____/
+# \/___/ \/__,_ /\/_/\/__/\/___/ \/_/ \/___/ \/_/ \/___/
+
+#---------------------------------------------------------------------
+# EditorConfig File
+#---------------------------------------------------------------------
+
+[*]
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
diff --git a/.stow-local-ignore b/.stow-local-ignore
new file mode 100644
index 0000000..0e3235e
--- /dev/null
+++ b/.stow-local-ignore
@@ -0,0 +1,5 @@
+^/*.md
+^/*.sh
+^/*.txt
+^/*.css
+sddm
diff --git a/.zshrc b/.zshrc
new file mode 100644
index 0000000..cef4a64
--- /dev/null
+++ b/.zshrc
@@ -0,0 +1,30 @@
+# Lines configured by zsh-newuser-install
+HISTFILE=~/.histfile
+HISTSIZE=1000
+SAVEHIST=1000
+bindkey -v
+# End of lines configured by zsh-newuser-install
+# The following lines were added by compinstall
+zstyle :compinstall filename '/home/amber/.zshrc'
+
+autoload -Uz compinit
+compinit
+# End of lines added by compinstall
+
+# Import colorscheme from 'wal' asynchronously
+# & # Run the process in the background.
+# ( ) # Hide shell job control messages.
+# Not supported in the "fish" shell.
+# (cat ~/.cache/wal/sequences &)
+
+# Alternative (blocks terminal for 0-3ms)
+cat ~/.cache/wal/sequences
+
+# To add support for TTYs this line can be optionally added.
+source ~/.cache/wal/colors-tty.sh
+
+# Enable syntax highlighting and autosuggestions
+source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
+source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
+
+eval "$(starship init zsh)"