diff --git a/Splitkeyboard/split.vil b/Splitkeyboard/split.vil
new file mode 100644
index 0000000..1a006a5
--- /dev/null
+++ b/Splitkeyboard/split.vil
@@ -0,0 +1 @@
+{"version": 1, "uid": 5010774632021243529, "layout": [[["KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_PGUP"], ["KC_CAPSLOCK", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_PGDOWN"], ["KC_NO", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", -1], [-1, -1, -1, "M4", "MO(1)", "KC_SPACE", -1], ["KC_LBRACKET", "KC_P", "KC_O", "KC_I", "KC_U", "KC_Y", "KC_BSPACE"], ["KC_QUOTE", "KC_SCOLON", "KC_L", "KC_K", "KC_J", "KC_H", "M5"], ["KC_MINUS", "KC_SLASH", "KC_DOT", "KC_COMMA", "KC_M", "KC_N", -1], [-1, -1, -1, "KC_BSPACE", "MO(2)", "KC_ENTER", -1]], [["KC_TAB", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_LCTRL"], ["KC_CAPSLOCK", "KC_NO", "TD(0)", "KC_NO", "M0", "M8", "KC_LALT"], ["M3", "KC_NONUS_BSLASH", "KC_NO", "KC_NO", "M1", "M2", -1], [-1, -1, -1, "M4", "MO(1)", "KC_SPACE", -1], ["KC_BSPACE", "KC_0", "KC_9", "KC_8", "KC_7", "KC_6", "KC_RCTRL"], ["KC_NONUS_HASH", "KC_NO", "KC_RIGHT", "KC_UP", "KC_DOWN", "KC_LEFT", "M6"], ["LSFT(KC_RBRACKET)", "KC_MINUS", "KC_EQUAL", "KC_NO", "KC_NO", "KC_NO", -1], [-1, -1, -1, "KC_TRNS", "MO(2)", "KC_ENTER", -1]], [["KC_TAB", "LSFT(KC_1)", "LSFT(KC_2)", "LSFT(KC_3)", "LSFT(KC_4)", "LSFT(KC_5)", "KC_LCTRL"], ["KC_CAPSLOCK", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_LALT"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO", -1], [-1, -1, -1, "M4", "MO(1)", "KC_SPACE", -1], ["KC_BSPACE", "LSFT(KC_0)", "LSFT(KC_9)", "LSFT(KC_8)", "LSFT(KC_7)", "LSFT(KC_6)", "KC_RCTRL"], ["KC_GRAVE", "KC_BSLASH", "KC_RBRACKET", "KC_LBRACKET", "KC_EQUAL", "KC_MINUS", "M7"], ["LSFT(KC_GRAVE)", "LSFT(KC_BSLASH)", "LSFT(KC_RBRACKET)", "LSFT(KC_LBRACKET)", "LSFT(KC_EQUAL)", "LSFT(KC_MINUS)", -1], [-1, -1, -1, "KC_TRNS", "MO(2)", "KC_ENTER", -1]], [["RGB_HUI", "RGB_MOD", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "QK_BOOT"], ["KC_CAPSLOCK", "RGB_TOG", "RGB_SAI", "RGB_VAI", "KC_NO", "KC_NO", "QK_REBOOT"], ["RGB_HUD", "RGB_RMOD", "RGB_SAD", "RGB_VAD", "KC_NO", "KC_NO", -1], [-1, -1, -1, "M4", "KC_TRNS", "KC_SPACE", -1], ["KC_NO", "KC_KP_ASTERISK", "KC_KP_SLASH", "KC_KP_9", "KC_KP_8", "KC_KP_7", "KC_NUMLOCK"], ["KC_NO", "KC_KP_PLUS", "KC_KP_MINUS", "KC_KP_6", "KC_KP_5", "KC_KP_4", "M4"], ["KC_NO", "KC_KP_EQUAL", "KC_KP_COMMA", "KC_KP_3", "KC_KP_2", "KC_KP_1", -1], [-1, -1, -1, "KC_KP_DOT", "KC_KP_0", "KC_ENTER", -1]], [["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", -1], [-1, -1, -1, "KC_TRNS", "KC_TRNS", "KC_TRNS", -1], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", -1], [-1, -1, -1, "KC_TRNS", "KC_TRNS", "KC_TRNS", -1]], [["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", -1], [-1, -1, -1, "KC_TRNS", "KC_TRNS", "KC_TRNS", -1], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", -1], [-1, -1, -1, "KC_TRNS", "KC_TRNS", "KC_TRNS", -1]]], "encoder_layout": [[["RGB_MOD", "RGB_RMOD"], ["RGB_HUI", "RGB_HUD"], ["RGB_VAI", "RGB_VAD"], ["RGB_SAI", "RGB_SAD"]], [["RGB_MOD", "RGB_RMOD"], ["RGB_HUI", "RGB_HUD"], ["RGB_VAI", "RGB_VAD"], ["RGB_SAI", "RGB_SAD"]], [["RGB_MOD", "RGB_RMOD"], ["RGB_HUI", "RGB_HUD"], ["RGB_VAI", "RGB_VAD"], ["RGB_SAI", "RGB_SAD"]], [["RGB_MOD", "RGB_RMOD"], ["RGB_HUI", "RGB_HUD"], ["RGB_VAI", "RGB_VAD"], ["RGB_SAI", "RGB_SAD"]], [["KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS"]], [["KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS"], ["KC_TRNS", "KC_TRNS"]]], "layout_options": 0, "macro": [[["down", "KC_LGUI"], ["delay", 10], ["down", "KC_LCTRL"], ["tap", "KC_4"], ["up", "KC_LCTRL"], ["delay", 10], ["up", "KC_LGUI"]], [["down", "KC_LGUI"], ["delay", 10], ["down", "KC_LCTRL"], ["tap", "KC_5"], ["up", "KC_LCTRL"], ["delay", 10], ["up", "KC_LGUI"]], [["down", "KC_LGUI"], ["delay", 10], ["down", "KC_LCTRL"], ["tap", "KC_6"], ["up", "KC_LCTRL"], ["delay", 10], ["up", "KC_LGUI"]], [["down", "KC_LGUI"], ["delay", 10], ["down", "KC_LCTRL"], ["tap", "KC_8"], ["up", "KC_LCTRL"], ["delay", 10], ["up", "KC_LGUI"]], [["down", "KC_LGUI"], ["delay", 10], ["down", "KC_LCTRL"], ["tap", "KC_0"], ["up", "KC_LCTRL"], ["delay", 10], ["up", "KC_LGUI"], ["delay", 20], ["tap", "DF(0)"]], [["down", "KC_LGUI"], ["delay", 10], ["down", "KC_LCTRL"], ["tap", "KC_1"], ["up", "KC_LCTRL"], ["delay", 10], ["up", "KC_LGUI"], ["delay", 10], ["tap", "DF(1)"]], [["down", "KC_LGUI"], ["delay", 10], ["down", "KC_LCTRL"], ["tap", "KC_2"], ["up", "KC_LCTRL"], ["delay", 10], ["up", "KC_LGUI"], ["delay", 20], ["tap", "DF(2)"]], [["down", "KC_LGUI"], ["delay", 10], ["down", "KC_LCTRL"], ["tap", "KC_3"], ["up", "KC_LCTRL"], ["delay", 10], ["up", "KC_LGUI"], ["delay", 20], ["tap", "DF(3)"]], [["down", "KC_LGUI"], ["delay", 10], ["down", "KC_LCTRL"], ["tap", "KC_7"], ["up", "KC_LCTRL"], ["delay", 10], ["up", "KC_LGUI"]], [], [], [], [], [], [], []], "vial_protocol": 6, "via_protocol": 9, "tap_dance": [["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", 200]], "combo": [["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], ["KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_NO"]], "key_override": [{"trigger": "KC_NO", "replacement": "LSFT(KC_NO)", "layers": 65535, "trigger_mods": 64, "negative_mod_mask": 240, "suppressed_mods": 0, "options": 135}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}, {"trigger": "KC_NO", "replacement": "KC_NO", "layers": 65535, "trigger_mods": 0, "negative_mod_mask": 0, "suppressed_mods": 0, "options": 7}], "alt_repeat_key": [], "settings": {"1": 0, "2": 50, "3": 0, "4": 175, "5": 5, "6": 5000, "7": 200, "8": 0, "9": 10, "10": 20, "11": 8, "12": 10, "13": 30, "14": 10, "15": 80, "16": 8, "17": 40, "18": 0, "19": 80, "20": 7, "21": 0}}
\ No newline at end of file
diff --git a/backgrounds/.config/backgrounds/unviverse/blue_universe.jpg b/backgrounds/.config/backgrounds/unviverse/blue_universe.jpg
new file mode 100644
index 0000000..4c675f8
Binary files /dev/null and b/backgrounds/.config/backgrounds/unviverse/blue_universe.jpg differ
diff --git a/backgrounds/.config/backgrounds/unviverse/magenta.jpg b/backgrounds/.config/backgrounds/unviverse/magenta.jpg
new file mode 100644
index 0000000..7e76e64
Binary files /dev/null and b/backgrounds/.config/backgrounds/unviverse/magenta.jpg differ
diff --git a/backgrounds/.config/backgrounds/unviverse/universe.jpg b/backgrounds/.config/backgrounds/unviverse/universe.jpg
new file mode 100644
index 0000000..ecaca0a
Binary files /dev/null and b/backgrounds/.config/backgrounds/unviverse/universe.jpg differ
diff --git a/ghostty/.config/ghostty/config b/ghostty/.config/ghostty/config
new file mode 100644
index 0000000..4f38d13
--- /dev/null
+++ b/ghostty/.config/ghostty/config
@@ -0,0 +1,86 @@
+theme = catppuccin-mocha
+# font-size = 12
+# background-blur-radius = 20
+# mouse-hide-while-typing = true
+# window-decoration = true
+# keybind = global:cmd+/=toggle_quick_terminal
+# macos-option-as-alt = true
+# background-opacity = 0.7
+# background-blur-radius = 20
+
+# By default Reload config with shft + cmd + ,
+
+# config-file = themes/rosepine
+# background = #000000
+# background-opacity = 0.85
+# background-blur-radius = 20
+
+# font-family = JetBrainsMonoNL Nerd Font
+# font-size = 12
+cursor-style = block
+cursor-style-blink = false
+cursor-invert-fg-bg = true
+
+# macos-titlebar-style = hidden
+macos-option-as-alt = true
+# mouse-hide-while-typing = true
+
+#confirm-close-surface = false
+#window-decoration = true
+window-padding-x = 10
+window-padding-y = 10
+window-padding-balance = true
+
+auto-update = check
+auto-update-channel = stable
+
+# extras
+# shell-integration-features = no-cursor
+copy-on-select = clipboard
+
+# Custom Keybinds & Config (super represents cmd key on mac)
+# For Simple Keybinds
+# keybind = super+r=reload_config
+keybind = super+i=inspector:toggle
+keybind = super+b>,=toggle_quick_terminal
+
+# Similar Tmux but with Ghostty
+# (ctrl b for tmux -> cmb b for ghostty)
+keybind = super+b>r=reload_config
+keybind = super+b>x=close_surface
+# this only works if you have `macos-titlebar-style = tabs or native or transparent`
+# else it behaves like new window
+keybind = super+b>c=new_tab
+keybind = super+b>n=new_window
+
+# tab nav
+#keybind = super+b>1=goto_tab:1
+#keybind = super+b>2=goto_tab:2
+#keybind = super+b>3=goto_tab:3
+#keybind = super+b>4=goto_tab:4
+#keybind = super+b>5=goto_tab:5
+#keybind = super+b>6=goto_tab:6
+#keybind = super+b>7=goto_tab:7
+#keybind = super+b>8=goto_tab:8
+#keybind = super+b>9=goto_tab:9
+
+# splitting
+#keybind = super+a>\=new_split:right
+#keybind = super+a>-=new_split:down
+#keybind = super+a>e=equalize_splits
+
+# split nav (setting this to control will not work if tmux already uses it)
+#keybind = super+a>h=goto_split:left
+#keybind = super+a>j=goto_split:bottom
+#keybind = super+a>k=goto_split:top
+#keybind = super+a>l=goto_split:right
+
+# typecraft
+theme = catppuccin-mocha
+# theme = GruvboxDark
+font-family = CaskaydiaCove Nerd Font
+font-size = 12
+background-opacity = 0.95
+gtk-titlebar = false
+# custom-shader = /home/chris/bloom.glsl
+#custom-shader = /home/chris/crt.glsl
diff --git a/hypridle/.config/hypr/hypridle.conf b/hypridle/.config/hypr/hypridle.conf
new file mode 100644
index 0000000..c52b3aa
--- /dev/null
+++ b/hypridle/.config/hypr/hypridle.conf
@@ -0,0 +1,24 @@
+general {
+ lock_cmd = pidof hyprlock || hyprlock
+ before_sleep_cmd = loginctl lock-session
+ after_sleep_cmd = hyprctl dispatch dpms on
+}
+
+# locks screen after 5min
+listener {
+ timeout = 300
+ on-timeout = loginctl lock-session
+}
+
+# turn of screen after 10min
+listener {
+ timeout = 600
+ on-timeout = hyptrctl dispatch dpms off
+ on-resume = hyprctl dispatch dpms on
+}
+
+# turns of pc after 60min of non use
+listener {
+ timeout = 3600
+ on-timeout = systemctl suspend
+}
diff --git a/hyprland/.config/hypr/hyprland.conf b/hyprland/.config/hypr/hyprland.conf
new file mode 100644
index 0000000..13cdafb
--- /dev/null
+++ b/hyprland/.config/hypr/hyprland.conf
@@ -0,0 +1,348 @@
+
+# #######################################################################################
+# AUTOGENERATED HYPRLAND CONFIG.
+# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hyprland.conf AND EDIT IT,
+# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
+# #######################################################################################
+
+# autogenerated = 1 # remove this line to remove the warning
+
+# This is an example Hyprland config file.
+# Refer to the wiki for more information.
+# https://wiki.hyprland.org/Configuring/
+
+# Please note not all available settings / options are set here.
+# For a full list, see the wiki
+
+# You can split this configuration into multiple files
+# Create your files separately and then link them to this file like this:
+# source = ~/.config/hypr/myColors.conf
+
+# Wallpaper
+env = WALLPAPER, ~/.config/backgrounds/unviverse/magenta.jpg
+
+################
+### MONITORS ###
+################
+
+# See https://wiki.hyprland.org/Configuring/Monitors/
+monitor=,preferred,auto,1.5
+
+
+###################
+### MY PROGRAMS ###
+###################
+
+# See https://wiki.hyprland.org/Configuring/Keywords/
+
+# Set programs that you use
+$terminal = kitty
+$fileManager = dolphin
+$menu = wofi --show drun
+$browser = librewolf
+$mail = betterbird
+
+#################
+### AUTOSTART ###
+#################
+
+# Autostart necessary processes (like notifications daemons, status bars, etc.)
+# Or execute your favorite apps at launch like this:
+
+# exec-once = $terminal
+# exec-once = nm-applet &
+# exec-once = waybar & hyprpaper & firefox
+exec-once = waybar & hyprpaper & hypridle
+#exec-once = /usr/lib/polkit-kde-authentication-agent-1
+exec-once = protonmail-bridge --no-window
+exec-once = dbus-update-activation-environment --all
+exec-once = gnome-keyring-daemon --start --components=secrets
+exec-once = swaync
+# add banana
+#exec-once = hyprctl setcursor "Banana-Catppuccin-Mocha" 48
+#exec = gsettings set org.gnome.desktop.interface cursor-the "Banana-Catppuccin-Mocha"
+#exec = gsettings set org.gnome.desktop.interface cursor-size 48
+
+############################
+### ENVIRONMENT VARIABLES ###
+#############################
+
+# See https://wiki.hyprland.org/Configuring/Environment-variables/
+
+env = XCURSOR_SIZE,24
+env = HYPRCURSOR_SIZE,24
+
+
+#####################
+### LOOK AND FEEL ###
+#####################
+
+# Refer to https://wiki.hyprland.org/Configuring/Variables/
+
+# https://wiki.hyprland.org/Configuring/Variables/#general
+general {
+ gaps_in = 2
+ gaps_out = 2
+
+ border_size = 1
+
+ # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
+ col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
+ col.inactive_border = rgba(595959aa)
+
+ # Set to true enable resizing windows by clicking and dragging on borders and gaps
+ resize_on_border = false
+
+ # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
+ allow_tearing = false
+
+ layout = dwindle
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#decoration
+decoration {
+ rounding = 3
+
+ # Change transparency of focused and unfocused windows
+ active_opacity = 1.0
+ inactive_opacity = 1.0
+
+ shadow {
+ enabled = true
+ range = 4
+ render_power = 3
+ color = rgba(1a1a1aee)
+ }
+
+ # https://wiki.hyprland.org/Configuring/Variables/#blur
+ blur {
+ enabled = true
+ size = 3
+ passes = 1
+
+ vibrancy = 0.1696
+ }
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#animations
+animations {
+ enabled = yes, please :)
+
+ # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
+
+ bezier = easeOutQuint,0.23,1,0.32,1
+ bezier = easeInOutCubic,0.65,0.05,0.36,1
+ bezier = linear,0,0,1,1
+ bezier = almostLinear,0.5,0.5,0.75,1.0
+ bezier = quick,0.15,0,0.1,1
+
+ animation = global, 1, 10, default
+ animation = border, 1, 5.39, easeOutQuint
+ animation = windows, 1, 4.79, easeOutQuint
+ animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
+ animation = windowsOut, 1, 1.49, linear, popin 87%
+ animation = fadeIn, 1, 1.73, almostLinear
+ animation = fadeOut, 1, 1.46, almostLinear
+ animation = fade, 1, 3.03, quick
+ animation = layers, 1, 3.81, easeOutQuint
+ animation = layersIn, 1, 4, easeOutQuint, fade
+ animation = layersOut, 1, 1.5, linear, fade
+ animation = fadeLayersIn, 1, 1.79, almostLinear
+ animation = fadeLayersOut, 1, 1.39, almostLinear
+ animation = workspaces, 1, 1.94, almostLinear, fade
+ animation = workspacesIn, 1, 1.21, almostLinear, fade
+ animation = workspacesOut, 1, 1.94, almostLinear, fade
+}
+
+# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
+# "Smart gaps" / "No gaps when only"
+# uncomment all if you wish to use that.
+# workspace = w[tv1], gapsout:0, gapsin:0
+# workspace = f[1], gapsout:0, gapsin:0
+# windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1]
+# windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1]
+# windowrulev2 = bordersize 0, floating:0, onworkspace:f[1]
+# windowrulev2 = rounding 0, floating:0, onworkspace:f[1]
+
+# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
+dwindle {
+ pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
+ preserve_split = true # You probably want this
+}
+
+# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
+master {
+ new_status = master
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#misc
+#misc {
+# force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
+# disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
+#}
+
+
+#############
+### INPUT ###
+#############
+
+# https://wiki.hyprland.org/Configuring/Variables/#input
+input {
+ kb_layout = ch
+ kb_variant = de_mac
+ kb_model = apple
+ kb_options =
+ kb_rules =
+
+ follow_mouse = 1
+
+ sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
+
+ touchpad {
+ natural_scroll = false
+ }
+}
+
+# https://wiki.hyprland.org/Configuring/Variables/#gestures
+#gestures {
+# workspace_swipe = false
+#}
+
+# 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
+}
+
+
+###################
+### KEYBINDINGS ###
+###################
+
+# See https://wiki.hyprland.org/Configuring/Keywords/
+$mainMod = SUPER # Sets "Windows" key as main modifier
+
+# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
+bind = $mainMod, return, exec, $terminal
+bind = $SUPER_SHIFT, c, killactive,
+bind = $mainMod, !, exit,
+bind = $mainMod, E, exec, $fileManager
+bind = $mainMod, V, togglefloating,
+bind = $mainMod, space, exec, $menu
+bind = $mainMod, P, exec, [workspace 5 silent] bitwarden-desktop
+bind = $mainMod, J, togglesplit, # dwindle
+bind = $mainMod, M, exec, [workspace 3 silent] $mail
+bind = $mainMod, I, exec, [workspace 4 silent] claude-desktop
+bind = $mainMod, T, exec, [workspace 5 silent] tidal-hifi
+bind = $mainMod, Z, exec, [workspace 2 silent] $browser
+bind = $mainMod, O, exec, [workspace 6 silent] onlyoffice-desktopeditors
+bind = $mainMod, B, exec, [workspace 5 silent] obsidian
+
+# Layer Indicator
+bind = SUPER CTRL, 0, exec, ~/scripts/layer_notify.sh 0
+bind = SUPER CTRL, 1, exec, ~/scripts/layer_notify.sh 1
+bind = SUPER CTRL, 2, exec, ~/scripts/layer_notify.sh 2
+bind = SUPER CTRL, 3, exec, ~/scripts/layer_notify.sh 3
+
+# Brightness controls
+bind = SUPER CTRL, 4, exec, ~/scripts/br_up.sh
+bind = SUPER CTRL, 5, exec, ~/scripts/br_down.sh
+
+# Blue light filter toggle
+bind = SUPER CTRL, 6, exec, ~/scripts/br_blue.sh
+
+# Filter Reset
+bind = SUPER CTRL, 7, exec, ~/scripts/br_reset.sh
+
+# Toggle Swaync Control center
+bind = SUPER CTRL, 8, exec, swaync-client -t
+
+# hyprlock
+bind = $SUPER_SHIFT, l, exec, hyprlock
+
+# hyprshot
+bind = $mainMod ALT, 5, exec, hyprshot -m window
+bind = $mainMod ALT, 4, exec, hyprshot -m region
+
+# Move focus with mainMod + arrow keys
+bind = $mainMod, h, movefocus, l
+bind = $mainMod, j, movefocus, d
+bind = $mainMod, k, movefocus, u
+bind = $mainMod, l, movefocus, r
+
+# Switch workspaces with mainMod + [0-9]
+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
+
+# Laptop multimedia keys for volume and LCD brightness
+bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
+bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
+bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
+bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
+bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
+bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
+
+# Requires playerctl
+bindl = , XF86AudioNext, exec, playerctl next
+bindl = , XF86AudioPause, exec, playerctl play-pause
+bindl = , XF86AudioPlay, exec, playerctl play-pause
+bindl = , XF86AudioPrev, exec, playerctl previous
+
+# brightness adjustment
+#bind = , code:232, exec, ~/.scripts/brightness.sh dec
+#bind = , code:233, exec, ~/.scripts/brightness.sh inc
+
+##############################
+### WINDOWS AND WORKSPACES ###
+##############################
+
+# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
+# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
+
+# Example windowrule v1
+# windowrule = float, ^(kitty)$
+
+# Example windowrule v2
+# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
+
+# Ignore maximize requests from apps. You'll probably like this.
+windowrulev2 = suppressevent maximize, class:.*
+
+# Fix some dragging issues with XWayland
+#windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
+#decoration {
+# screen_shader = ~/.config/hypr/shaders/bluelight.frag
+#}
diff --git a/hyprlock/.config/hypr/hyprlock.conf b/hyprlock/.config/hypr/hyprlock.conf
new file mode 100644
index 0000000..3215643
--- /dev/null
+++ b/hyprlock/.config/hypr/hyprlock.conf
@@ -0,0 +1,79 @@
+source = $HOME/.config/hypr/mocha.conf
+
+$accent = $mauve
+$accentAlpha = $mauveAlpha
+$font = JetBrainsMono Nerd Font
+
+# GENERAL
+general {
+ disable_loading_bar = true
+ hide_cursor = true
+}
+
+# BACKGROUND
+background {
+ monitor =
+ path = $WALLPAPER
+ blur_passes = 2
+ color = $base
+}
+
+# TIME
+label {
+ monitor =
+ text = cmd[update:30000] echo "$(date +"%R")"
+ color = $text
+ font_size = 90
+ font_family = $font
+ position = -30, 0
+ halign = right
+ valign = top
+}
+
+# DATE
+label {
+ monitor =
+ text = cmd[update:43200000] echo "$(date +"%A, %d %B %Y")"
+ color = $text
+ font_size = 25
+ font_family = $font
+ position = -30, -150
+ halign = right
+ valign = top
+}
+
+# USER AVATAR
+
+image {
+ monitor =
+ path = ~/.face
+ size = 100
+ border_color = $accent
+
+ position = 0, 75
+ halign = center
+ valign = center
+}
+
+# INPUT FIELD
+input-field {
+ monitor =
+ size = 300, 60
+ outline_thickness = 4
+ dots_size = 0.2
+ dots_spacing = 0.2
+ dots_center = true
+ outer_color = $accent
+ inner_color = $surface0
+ font_color = $text
+ fade_on_empty = false
+ placeholder_text = Logged in as $USER
+ hide_input = false
+ check_color = $accent
+ fail_color = $red
+ fail_text = $FAIL ($ATTEMPTS)
+ capslock_color = $yellow
+ position = 0, -35
+ halign = center
+ valign = center
+}
diff --git a/hyprmocha/.config/hypr/mocha.conf b/hyprmocha/.config/hypr/mocha.conf
new file mode 100644
index 0000000..8ccb56a
--- /dev/null
+++ b/hyprmocha/.config/hypr/mocha.conf
@@ -0,0 +1,78 @@
+
+$rosewater = rgb(f5e0dc)
+$rosewaterAlpha = f5e0dc
+
+$flamingo = rgb(f2cdcd)
+$flamingoAlpha = f2cdcd
+
+$pink = rgb(f5c2e7)
+$pinkAlpha = f5c2e7
+
+$mauve = rgb(cba6f7)
+$mauveAlpha = cba6f7
+
+$red = rgb(f38ba8)
+$redAlpha = f38ba8
+
+$maroon = rgb(eba0ac)
+$maroonAlpha = eba0ac
+
+$peach = rgb(fab387)
+$peachAlpha = fab387
+
+$yellow = rgb(f9e2af)
+$yellowAlpha = f9e2af
+
+$green = rgb(a6e3a1)
+$greenAlpha = a6e3a1
+
+$teal = rgb(94e2d5)
+$tealAlpha = 94e2d5
+
+$sky = rgb(89dceb)
+$skyAlpha = 89dceb
+
+$sapphire = rgb(74c7ec)
+$sapphireAlpha = 74c7ec
+
+$blue = rgb(89b4fa)
+$blueAlpha = 89b4fa
+
+$lavender = rgb(b4befe)
+$lavenderAlpha = b4befe
+
+$text = rgb(cdd6f4)
+$textAlpha = cdd6f4
+
+$subtext1 = rgb(bac2de)
+$subtext1Alpha = bac2de
+
+$subtext0 = rgb(a6adc8)
+$subtext0Alpha = a6adc8
+
+$overlay2 = rgb(9399b2)
+$overlay2Alpha = 9399b2
+
+$overlay1 = rgb(7f849c)
+$overlay1Alpha = 7f849c
+
+$overlay0 = rgb(6c7086)
+$overlay0Alpha = 6c7086
+
+$surface2 = rgb(585b70)
+$surface2Alpha = 585b70
+
+$surface1 = rgb(45475a)
+$surface1Alpha = 45475a
+
+$surface0 = rgb(313244)
+$surface0Alpha = 313244
+
+$base = rgb(1e1e2e)
+$baseAlpha = 1e1e2e
+
+$mantle = rgb(181825)
+$mantleAlpha = 181825
+
+$crust = rgb(11111b)
+$crustAlpha = 11111b
diff --git a/hyprpaper/.config/hypr/hyprpaper.conf b/hyprpaper/.config/hypr/hyprpaper.conf
new file mode 100644
index 0000000..46e9853
--- /dev/null
+++ b/hyprpaper/.config/hypr/hyprpaper.conf
@@ -0,0 +1,2 @@
+preload = $WALLPAPER
+wallpaper = , $WALLPAPER
diff --git a/kanata/.config/kanata/config.kbd b/kanata/.config/kanata/config.kbd
new file mode 100644
index 0000000..a6850ff
--- /dev/null
+++ b/kanata/.config/kanata/config.kbd
@@ -0,0 +1,28 @@
+;; defsrc is still necessary
+(defcfg
+ process-unmapped-keys yes
+)
+
+(defsrc
+ caps a s d f j k l ;
+)
+(defvar
+ tap-time 250
+ hold-time 250
+)
+
+(defalias
+ escctrl (tap-hold 250 250 esc lctrl)
+ a (multi f24 (tap-hold $tap-time $hold-time a lmet))
+ s (multi f24 (tap-hold $tap-time $hold-time s lalt))
+ d (multi f24 (tap-hold $tap-time $hold-time d lsft))
+ f (multi f24 (tap-hold $tap-time $hold-time f lctl))
+ j (multi f24 (tap-hold $tap-time $hold-time j rctl))
+ k (multi f24 (tap-hold $tap-time $hold-time k rsft))
+ l (multi f24 (tap-hold $tap-time $hold-time l ralt))
+ ; (multi f24 (tap-hold $tap-time $hold-time ; rmet))
+)
+
+(deflayer base
+ @escctrl @a @s @d @f @j @k @l @;
+)
diff --git a/kanata/.config/systemd/user/kanata.service b/kanata/.config/systemd/user/kanata.service
new file mode 100644
index 0000000..5d62194
--- /dev/null
+++ b/kanata/.config/systemd/user/kanata.service
@@ -0,0 +1,22 @@
+[Unit]
+Description=Kanata keyboard remapper
+Documentation=https://github.com/jtroo/kanata
+
+[Service]
+Environment=PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:${HOME}/.local/bin
+Environment=DISPLAY=:0
+# Uncomment the 4 lines beneath this to increase process priority
+# of Kanata in case you encounter lagginess when resource constrained.
+# WARNING: doing so will require the service to run as an elevated user such as root.
+# Implementing least privilege access is an exercise left to the reader.
+#
+CPUSchedulingPolicy=rr
+CPUSchedulingPriority=99
+IOSchedulingClass=realtime
+Nice=-20
+Type=simple
+ExecStart=/usr/bin/sh -c "exec $$(which kanata) --cfg $$HOME/.config/kanata/config.kbd"
+Restart=no
+
+[Install]
+WantedBy=default.target
diff --git a/kitty/.config/kitty/current-theme.conf b/kitty/.config/kitty/current-theme.conf
new file mode 100644
index 0000000..77800ed
--- /dev/null
+++ b/kitty/.config/kitty/current-theme.conf
@@ -0,0 +1,80 @@
+# vim:ft=kitty
+
+## name: Catppuccin-Mocha
+## author: Pocco81 (https://github.com/Pocco81)
+## license: MIT
+## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf
+## blurb: Soothing pastel theme for the high-spirited!
+
+window_padding_width 5 10
+
+# The basic colors
+foreground #CDD6F4
+background #1E1E2E
+selection_foreground #1E1E2E
+selection_background #F5E0DC
+
+# Cursor colors
+cursor #F5E0DC
+cursor_text_color #1E1E2E
+
+# URL underline color when hovering with mouse
+url_color #F5E0DC
+
+# Kitty window border colors
+active_border_color #B4BEFE
+inactive_border_color #6C7086
+bell_border_color #F9E2AF
+
+# OS Window titlebar colors
+wayland_titlebar_color system
+macos_titlebar_color system
+
+# Tab bar colors
+active_tab_foreground #11111B
+active_tab_background #CBA6F7
+inactive_tab_foreground #CDD6F4
+inactive_tab_background #181825
+tab_bar_background #11111B
+
+# Colors for marks (marked text in the terminal)
+mark1_foreground #1E1E2E
+mark1_background #B4BEFE
+mark2_foreground #1E1E2E
+mark2_background #CBA6F7
+mark3_foreground #1E1E2E
+mark3_background #74C7EC
+
+# The 16 terminal colors
+
+# black
+color0 #45475A
+color8 #585B70
+
+# red
+color1 #F38BA8
+color9 #F38BA8
+
+# green
+color2 #A6E3A1
+color10 #A6E3A1
+
+# yellow
+color3 #F9E2AF
+color11 #F9E2AF
+
+# blue
+color4 #89B4FA
+color12 #89B4FA
+
+# magenta
+color5 #F5C2E7
+color13 #F5C2E7
+
+# cyan
+color6 #94E2D5
+color14 #94E2D5
+
+# white
+color7 #BAC2DE
+color15 #A6ADC8
diff --git a/kitty/.config/kitty/kitty.conf b/kitty/.config/kitty/kitty.conf
new file mode 100644
index 0000000..217979e
--- /dev/null
+++ b/kitty/.config/kitty/kitty.conf
@@ -0,0 +1,14 @@
+# BEGIN_KITTY_THEME
+# Catppuccin-Mocha
+include current-theme.conf
+# END_KITTY_THEME
+#
+
+font_family Inconsolata Nerd Font
+bold_font auto
+italic_font auto
+bold_italic_font auto
+
+font_size 14
+
+background_opacity 0.9
diff --git a/nushell/.config/nushell/config.nu b/nushell/.config/nushell/config.nu
new file mode 100644
index 0000000..a83dac7
--- /dev/null
+++ b/nushell/.config/nushell/config.nu
@@ -0,0 +1,186 @@
+# config.nu
+#
+# Installed by:
+# version = "0.103.0"
+#
+# This file is used to override default Nushell settings, define
+# (or import) custom commands, or run any other startup tasks.
+# See https://www.nushell.sh/book/configuration.html
+#
+# This file is loaded after env.nu and before login.nu
+#
+# You can open this file in your default editor using:
+# config nu
+#
+# See `help config nu` for more options
+#
+# You can remove these comments if you want or leave
+# them for future reference.
+
+# https://github.com/nushell/nu_scripts/tree/main/themes
+let dark_theme = {
+ # color for nushell primitives
+ separator: white
+ leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
+ header: green_bold
+ empty: blue
+ # Closures can be used to choose colors for specific values.
+ # The value (in this case, a bool) is piped into the closure.
+ # eg) {|| if $in { 'light_cyan' } else { 'light_gray' } }
+ bool: light_cyan
+ int: white
+ filesize: cyan
+ duration: white
+ date: purple
+ range: white
+ float: white
+ string: white
+ nothing: white
+ binary: white
+ cell-path: white
+ row_index: green_bold
+ record: white
+ list: white
+ block: white
+ hints: dark_gray
+ search_result: { bg: red fg: white }
+ shape_and: purple_bold
+ shape_binary: purple_bold
+ shape_block: blue_bold
+ shape_bool: light_cyan
+ shape_closure: green_bold
+ shape_custom: green
+ shape_datetime: cyan_bold
+ shape_directory: cyan
+ shape_external: cyan
+ shape_externalarg: green_bold
+ shape_external_resolved: light_yellow_bold
+ shape_filepath: cyan
+ shape_flag: blue_bold
+ shape_float: purple_bold
+ # shapes are used to change the cli syntax highlighting
+ shape_garbage: { fg: white bg: red attr: b}
+ shape_glob_interpolation: cyan_bold
+ shape_globpattern: cyan_bold
+ shape_int: purple_bold
+ shape_internalcall: cyan_bold
+ shape_keyword: cyan_bold
+ shape_list: cyan_bold
+ shape_literal: blue
+ shape_match_pattern: green
+ shape_matching_brackets: { attr: u }
+ shape_nothing: light_cyan
+ shape_operator: yellow
+ shape_or: purple_bold
+ shape_pipe: purple_bold
+ shape_range: yellow_bold
+ shape_record: cyan_bold
+ shape_redirection: purple_bold
+ shape_signature: green_bold
+ shape_string: green
+ shape_string_interpolation: cyan_bold
+ shape_table: blue_bold
+ shape_variable: purple
+ shape_vardecl: purple
+ shape_raw_string: light_purple
+}
+
+let light_theme = {
+ # color for nushell primitives
+ separator: dark_gray
+ leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off
+ header: green_bold
+ empty: blue
+ # Closures can be used to choose colors for specific values.
+ # The value (in this case, a bool) is piped into the closure.
+ # eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } }
+ bool: dark_cyan
+ int: dark_gray
+ filesize: cyan_bold
+ duration: dark_gray
+ date: purple
+ range: dark_gray
+ float: dark_gray
+ string: dark_gray
+ nothing: dark_gray
+ binary: dark_gray
+ cell-path: dark_gray
+ row_index: green_bold
+ record: dark_gray
+ list: dark_gray
+ block: dark_gray
+ hints: dark_gray
+ search_result: { fg: white bg: red }
+ shape_and: purple_bold
+ shape_binary: purple_bold
+ shape_block: blue_bold
+ shape_bool: light_cyan
+ shape_closure: green_bold
+ shape_custom: green
+ shape_datetime: cyan_bold
+ shape_directory: cyan
+ shape_external: cyan
+ shape_externalarg: green_bold
+ shape_external_resolved: light_purple_bold
+ shape_filepath: cyan
+ shape_flag: blue_bold
+ shape_float: purple_bold
+ # shapes are used to change the cli syntax highlighting
+ shape_garbage: { fg: white bg: red attr: b}
+ shape_globpattern: cyan_bold
+ shape_int: purple_bold
+ shape_internalcall: cyan_bold
+ shape_keyword: cyan_bold
+ shape_list: cyan_bold
+ shape_literal: blue
+ shape_match_pattern: green
+ shape_matching_brackets: { attr: u }
+ shape_nothing: light_cyan
+ shape_operator: yellow
+ shape_or: purple_bold
+ shape_pipe: purple_bold
+ shape_range: yellow_bold
+ shape_record: cyan_bold
+ shape_redirection: purple_bold
+ shape_signature: green_bold
+ shape_string: green
+ shape_string_interpolation: cyan_bold
+ shape_table: blue_bold
+ shape_variable: purple
+ shape_vardecl: purple
+ shape_raw_string: light_purple
+}
+
+# Example prompt with Nerd Font icons
+def create_left_prompt [] {
+ let dir = ([
+ (char -u "e0b1"),
+ ($env.PWD | str replace $nu.home-path "~")
+ ] | str join)
+
+ let git_branch = (do -i { git rev-parse --abbrev-ref HEAD } | default "")
+
+ $"(ansi green)($dir)(ansi reset) (ansi purple) ($git_branch)(ansi reset)"
+}
+
+$env.PROMPT_COMMAND = { create_left_prompt }
+
+$env.GIT_DISCOVERY_ACROSS_FILESYSTEM = "1" # Allows Git to check parent dirs
+
+def --wrapped git [...args] {
+ ^git ...$args err> /dev/null
+}
+
+## Alias
+source ~/.alias.nu
+
+### autocompletion
+## zoxide
+#$env.ZOXIDE_HOOK = true
+
+#$env.config.completions.quick = true # Show completions immediately
+#$env.config.completions.partial = true # Complete on partial matches
+#$env.config.completions.case_sensitive = false
+
+#~/.config/nushell/config.nu
+source ~/.cache/carapace/init.nu
diff --git a/nushell/.config/nushell/env.nu b/nushell/.config/nushell/env.nu
new file mode 100644
index 0000000..39b3915
--- /dev/null
+++ b/nushell/.config/nushell/env.nu
@@ -0,0 +1,29 @@
+# env.nu
+#
+# Installed by:
+# version = "0.103.0"
+#
+# Previously, environment variables were typically configured in `env.nu`.
+# In general, most configuration can and should be performed in `config.nu`
+# or one of the autoload directories.
+#
+# This file is generated for backwards compatibility for now.
+# It is loaded before config.nu and login.nu
+#
+# See https://www.nushell.sh/book/configuration.html
+#
+# Also see `help config env` for more options.
+#
+# You can remove these comments if you want or leave
+# them for future reference.
+
+$env.GIT_DISCOVERY_ACROSS_FILESYSTEM = "1" # Allows Git to check parent dire
+
+# Add after the last line
+# https://carapace-sh.github.io/carapace-bin/setup.html#nushell
+
+$env.FZF_DEFAULT_OPTS = "--ansi --preview-window 'right:60%' --preview 'bat --color=always --style=header,grid --line-range :300 {}'"
+
+mkdir ~/.cache/carapace
+carapace _carapace nushell | save --force ~/.cache/carapace/init.nu
+
diff --git a/nushell/.config/nushell/history.txt b/nushell/.config/nushell/history.txt
new file mode 100644
index 0000000..538e3d2
--- /dev/null
+++ b/nushell/.config/nushell/history.txt
@@ -0,0 +1,363 @@
+y
+yazi
+y
+yazi
+exit
+y
+yazi
+tn
+y
+yazi
+lt
+ltree
+ls
+cld
+exit
+ffcbmp
+y
+exit
+nu
+exit
+nu
+ls
+ltree
+ripp
+ripp 'radiohead'
+ffcbmp
+ffcmp
+y
+ltree
+y
+cl
+exit
+nu
+exit
+nu
+y
+$env.config.buffer_editor =
+$env.config.buffer_editor =
+$env.config.buffer_editor = neovim
+$env.config.buffer_editor = nvim
+$env.config.buffer_editor = "neovim"
+config nu --doc | nu-highlight | less -R
+vpnr
+nmst
+nmwi
+vpnr
+ys starship
+starship
+starship config
+mkdir -p ~/.config/starship && touch ~/.config/starship/starship.toml
+mkdir -p ~/.config/starship ; touch ~/.config/starship/starship.toml
+mkdir ~/.config/starship ; touch ~/.config/starship/starship.toml
+y
+which starhip
+starship --version
+y
+exit
+$nu.config-path
+ys nushell-bin-0.96.0
+ys nushell-bin-0.96
+exit
+cd dotfiles
+y
+cd dotfiles
+exit
+cd dotfiles
+cd
+exit
+cd dotfiles
+starship config
+y
+which starhip
+where starhip.conf
+where starhip.toml
+starship config
+q
+cd
+cd podman
+cd arr_stack/config/lidarr/
+cd arr_stack/
+cd ..
+cd essentials_stack/data/movies/
+cd
+cd programming/
+cd
+cd podman/
+cd dot
+cd
+cd dotfiles/
+cd nvim/.config/nvim/lua/plugins/catppuccin.lua
+cd nvim/.config/nvim/lua/plugins
+exit
+y
+cd dotfiles/
+cd programming/
+cd
+cd programming/
+sudo pacman -S ttf-nerd-fonts-symbols
+exit
+cd programming/
+starship config
+cd
+ys ttf-firecode-nerd
+ys ttf-firacode
+y
+cd programming/
+y
+cd programming/
+y
+exit
+cd programming/
+config reset
+exit
+cd programming/
+starship preset nerd-font-symbols -o ~/.config/starship.toml
+starship config
+exit
+cd programming/
+exit
+cd programming/
+exi
+exit
+cd programming/
+y
+exit
+cd programming/
+starship config
+cd
+cd dotfiles/nvim/.config/nvim/lua/plugins/
+cd
+cd podman
+cd arr_stack/
+cd config/radarr/
+cd config/
+cd config
+cd ..
+cd
+cd dotfiles/
+cd ~/.config/lazygit/
+cd
+cd Downloads/lebara.pdf
+starship config
+exit
+cd dotfiles/
+exit
+cd dotfiles/
+exit
+cd dotfiles/
+exit
+cd dotfiles/
+cd
+cd dotfiles/
+exit
+test
+cd dotfiles
+cd Downloads/lebara.pdf
+cd Downloads
+cd
+cd Downloads/
+cd
+cd programming/
+y
+cd dotfiles
+cd
+cd programming/
+ys carapace-bin
+y
+which carapace
+cd scripts
+fzf
+ys carapace-bin
+starship config
+rebo
+reboot
+cd programming/
+cd
+y
+yazi
+exit
+nu
+exit
+cd
+ys protonmail
+y
+let carapace_completer = {|spans|<\n> carapace $spans.0 nushell ...$spans | from json<\n>}
+let fish_completer = {|spans|<\n> fish --command $'complete "--do-complete=($spans | str join " ")"'<\n> | from tsv --flexible --noheaders --no-infer<\n> | rename value description<\n> | update value {<\n> if ($in | path exists) {$'"($in | str replace "\"" "\\\"" )"'} else {$in}<\n> }<\n>}
+fzf
+exit
+ls | get name | str join "\n" | fzf
+$env.config.completions.algorithm = "Fuzzy"
+cd StreamripDownloads/
+cd
+# I found the code below here: https://discord.com/channels/601130461678272522/615253963645911060/1209827461496569876<\n>$env.config.keybindings ++= [<\n> {<\n> name: fzf_files<\n> modifier: control<\n> keycode: char_t<\n> mode: [emacs, vi_normal, vi_insert]<\n> event: [<\n> {<\n> send: executehostcommand<\n> cmd: "<\n> let fzf_ctrl_t_command = \"fd --type=file | fzf --preview 'bat --color=always --style=full --line-range=:500 {}'\";<\n> let result = nu -c $fzf_ctrl_t_command;<\n> commandline edit --append $result;<\n> commandline set-cursor --end<\n> "<\n> }<\n> ]<\n> }<\n>]
+let $config_path = $env.XDG_CONFIG_HOME? | default '~/.config' | path join broot select.toml<\n>mkdir ($config_path | path dirname) <\n><\n>{<\n> verbs: [<\n> [invocation, key, leave_broot, execution, apply_to];<\n> [ok, enter, true, ":print_path", file ],<\n> [ok, alt-enter, true, ":print_path", any ]<\n> ]<\n>} | save -f $config_path
+exit
+ls | get name | str join "\n" | fzf
+ls
+exit
+nu
+cld
+y
+cld
+cd pod
+exit
+ls | get name | str join "\n" | fzf
+ls Downloads/
+exit
+ls podman/
+ls podman/arr_stack/
+lt podman/essentials_stack/
+ls podman/essentials_stack/
+ls podman/essentials_stack/data/tv/
+ls `podman/essentials_stack/data/tv/The Last of Us/`
+exit
+ls podman/essentials_stack/
+exit
+ls Downloads/
+source ~/.config/nushell/config.nu
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/config.nu
+cld
+exit
+eit
+exit
+exir
+exit
+cd programming/
+cld
+cd
+cd podman/
+cl
+cd
+cl
+$env.GIT_DISCOVERY_ACROSS_FILESYSTEM = "1" # Allows Git to check parent dirs
+$env.GIT_DISCOVERY_ACROSS_FILESYSTEM = "1"
+cl
+cd
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/config.nu
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/config.nu
+exit
+nvim ~/.config/nushell/config.nu
+git init
+exit
+source ~/.config/nushell/config.nu
+exit
+source ~/.config/nushell/config.nu
+exit
+source ~/.config/nushell/config.nu
+do -i { git status } | ignore
+exit
+git status 2> /dev/null
+exit
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/config.nu
+exit
+ls Downloads/
+cl
+clear
+exit
+source ~/.config/nushell/config.nu
+ls
+clear
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/config.nu
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/config.nu
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/config.nu
+exit
+source ~/.config/nushell/config.nu
+exir
+exit
+source ~/.config/nushell/config.nu
+exit
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/config.nu
+carapace _carapace nushell
+nvim ~/.config/nushell/env.nu
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/config.nu
+exit
+nvim ~/.config/nushell/env.nu
+exit
+carapace --run nu
+--packages nushell carapace --run nu
+bash --packages nushell carapace --run nu
+exit
+cd dotfiles
+nvim ~/.config/nushell/env.nu
+source ~/.config/nushell/config.nu
+source ~/.config/nushell/env.nu
+exit
+carapace paru
+carapace --init
+carapace --help
+carapace --run
+carapace --run --help
+carapace --run -h
+carapace --run paru
+carapace -h
+carapace chmod nushell
+carapace -h
+carapace --run nushell
+carapace nushell
+carpace -h
+carapace -h
+carapace _carapace nushell
+cd podman/monitoring_stack/data/influxdb
+cd podman/monitoring_stack/data/influxdb/
+carapace --makros
+carapace --macro
+cd dotfiles/
+git status --
+cd
+nvim ~/.config/nushell/env.nu
+bat ~/.config/nushell/env.nu
+nvim ~/.config/nushell/env.nu
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/env.nu
+source ~/.config/nushell/config.nu
+exit
+cld
+exit
+ls programming/
+ls programming/Algo/
+lt podman/essentials_stack/
+ls Downloads/
+exit
+ls Downloads/
+nvim ~/.config/nushell/config.nu
+source ~/.config/nushell/config.nu
+ls Downloads/
+exit
+ls Downloads/
+lt podman/essentials_stack/
+exit
+cld
+source ~/.config/nushell/config.nu
+exit
+test
+cld
+exit
+ys
+cld
+duaa
+dfh
+duf
+cld
+exit
+ls ~/.config/hypr/
+ls ~/.config/hypr/hypridle.conf
+bat ~/.config/hypr/hypridle.conf
+cat ~/.config/hypr/hypridle.conf
+exit
+fzf
+source ~/.config/nushell/env.nu
+fzf
+cld
+exit
+bat ~/.ssh/id_ed25519.pub
+exit
diff --git a/nvim/.config/nvim/.luarc.json b/nvim/.config/nvim/.luarc.json
new file mode 100644
index 0000000..aad784f
--- /dev/null
+++ b/nvim/.config/nvim/.luarc.json
@@ -0,0 +1,11 @@
+{
+ "diagnostics.globals": [
+ "vim",
+ " false",
+ " "
+ ],
+ "runtime.unicodeName": true,
+ "diagnostics.disable": [
+ "undefined-doc-name"
+ ]
+}
\ No newline at end of file
diff --git a/nvim/.config/nvim/init.lua b/nvim/.config/nvim/init.lua
new file mode 100644
index 0000000..238356a
--- /dev/null
+++ b/nvim/.config/nvim/init.lua
@@ -0,0 +1,41 @@
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not vim.loop.fs_stat(lazypath) then
+ vim.fn.system({
+ "git",
+ "clone",
+ "--filter=blob:none",
+ "https://github.com/folke/lazy.nvim.git",
+ "--branch=stable", -- latest stable release
+ lazypath,
+ })
+end
+vim.opt.rtp:prepend(lazypath)
+
+-- Only enable spell checking for specific filetypes
+vim.api.nvim_create_autocmd("FileType", {
+ pattern = { "markdown", "text", "gitcommit", "tex" },
+ callback = function()
+ vim.opt_local.spell = true
+ vim.opt_local.spelllang = "en_us,de"
+ end,
+})
+require("vim-options")
+require("lazy").setup("plugins")
+require("lualine").setup({
+ sections = {
+ lualine_x = {
+ {
+ require("noice").api.statusline.mode.get,
+ cond = require("noice").api.statusline.mode.has,
+ color = { fg = "#ff9e64" },
+ },
+ },
+ },
+})
+require("lazy").setup({
+ {
+ "tzachar/cmp-tabnine",
+ build = "./install.sh",
+ dependencies = "hrsh7th/nvim-cmp",
+ },
+})
diff --git a/nvim/.config/nvim/init.lua.bak b/nvim/.config/nvim/init.lua.bak
new file mode 100644
index 0000000..0b45ed4
--- /dev/null
+++ b/nvim/.config/nvim/init.lua.bak
@@ -0,0 +1,35 @@
+vim.cmd("set expandtab")
+vim.cmd("set tabstop=2")
+vim.cmd("set softtabstop=2")
+vim.cmd("set shiftwidth=2")
+vim.g.mapleader = " "
+
+-- Bootstrap lazy.nvim
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not (vim.uv or vim.loop).fs_stat(lazypath) then
+ local lazyrepo = "https://github.com/folke/lazy.nvim.git"
+ local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
+ if vim.v.shell_error ~= 0 then
+ vim.api.nvim_echo({
+ { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
+ { out, "WarningMsg" },
+ { "\nPress any key to exit..." },
+ }, true, {})
+ vim.fn.getchar()
+ os.exit(1)
+ end
+end
+vim.opt.rtp:prepend(lazypath)
+
+-- Make sure to setup `mapleader` and `maplocalleader` before
+-- loading lazy.nvim so that mappings are correct.
+-- This is also a good place to setup other settings (vim.opt)
+vim.g.mapleader = " "
+vim.g.maplocalleader = "\\"
+
+-- Setup lazy.nvim
+require("vim-options")
+require("lazy").setup("plugins")
+
+
+
diff --git a/nvim/.config/nvim/lazy-lock.json b/nvim/.config/nvim/lazy-lock.json
new file mode 100644
index 0000000..4cff3bb
--- /dev/null
+++ b/nvim/.config/nvim/lazy-lock.json
@@ -0,0 +1,54 @@
+{
+ "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
+ "LuaSnip": { "branch": "master", "commit": "fb525166ccc30296fb3457441eb979113de46b00" },
+ "alpha-nvim": { "branch": "main", "commit": "3979b01cb05734331c7873049001d3f2bb8477f4" },
+ "barbecue": { "branch": "main", "commit": "cd7e7da622d68136e13721865b4d919efd6325ed" },
+ "catppuccin": { "branch": "main", "commit": "ce8d176faa4643e026e597ae3c31db59b63cef09" },
+ "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
+ "cmp-cmdline": { "branch": "main", "commit": "d126061b624e0af6c3a556428712dd4d4194ec6d" },
+ "cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
+ "cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
+ "cmp-tabnine": { "branch": "main", "commit": "c0167cdc86c15e782c5461ee62aebee89231c2ed" },
+ "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
+ "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
+ "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" },
+ "flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" },
+ "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
+ "fzf-lua": { "branch": "main", "commit": "9d579feab4d3035627150e5e9b6e8fbf5e814ef6" },
+ "gitsigns.nvim": { "branch": "main", "commit": "5813e4878748805f1518cee7abb50fd7205a3a48" },
+ "grapple.nvim": { "branch": "main", "commit": "b41ddfc1c39f87f3d1799b99c2f0f1daa524c5f7" },
+ "harpoon": { "branch": "harpoon2", "commit": "87b1a3506211538f460786c23f98ec63ad9af4e5" },
+ "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
+ "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
+ "lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
+ "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
+ "luvit-meta": { "branch": "main", "commit": "0ea4ff636c5bb559ffa78108561d0976f4de9682" },
+ "mason-lspconfig.nvim": { "branch": "main", "commit": "3b3571b4dadbcb464804466e9872e7246c316af7" },
+ "mason.nvim": { "branch": "main", "commit": "57e5a8addb8c71fb063ee4acda466c7cf6ad2800" },
+ "neo-tree.nvim": { "branch": "v3.x", "commit": "f3df514fff2bdd4318127c40470984137f87b62e" },
+ "neogit": { "branch": "master", "commit": "d8bf9102692250193b855acd9025a826f1af2729" },
+ "noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
+ "none-ls.nvim": { "branch": "main", "commit": "5abf61927023ea83031753504adb19630ba80eef" },
+ "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
+ "nvim-autopairs": { "branch": "master", "commit": "c2a0dd0d931d0fb07665e1fedb1ea688da3b80b4" },
+ "nvim-cmp": { "branch": "main", "commit": "d97d85e01339f01b842e6ec1502f639b080cb0fc" },
+ "nvim-lspconfig": { "branch": "master", "commit": "c4f67bf85b01a57e3c130352c0a0e453ab8cd5b9" },
+ "nvim-navic": { "branch": "master", "commit": "7d914a39a1ef8f4e22c2c4381abeef7c556f5a13" },
+ "nvim-notify": { "branch": "master", "commit": "8701bece920b38ea289b457f902e2ad184131a5d" },
+ "nvim-spectre": { "branch": "master", "commit": "72f56f7585903cd7bf92c665351aa585e150af0f" },
+ "nvim-tmux-navigation": { "branch": "main", "commit": "4898c98702954439233fdaf764c39636681e2861" },
+ "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
+ "nvim-ts-context-commentstring": { "branch": "main", "commit": "1b212c2eee76d787bbea6aa5e92a2b534e7b4f8f" },
+ "nvim-web-devicons": { "branch": "master", "commit": "8dcb311b0c92d460fac00eac706abd43d94d68af" },
+ "obsidian.nvim": { "branch": "main", "commit": "ae1f76a75c7ce36866e1d9342a8f6f5b9c2caf9b" },
+ "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
+ "portal.nvim": { "branch": "main", "commit": "77d9d53fec945bfa407d5fd7120f1b4f117450ed" },
+ "projections.nvim": { "branch": "main", "commit": "f18a8505f84f45a0fe024cafca5b969447f63cd5" },
+ "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
+ "telescope.nvim": { "branch": "master", "commit": "3d757e586ff0bfc85bdb7b46c9d3d932147a0cde" },
+ "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
+ "vim-test": { "branch": "master", "commit": "1eeb12774a0f251571700ccf68da27789b2f0852" },
+ "vimux": { "branch": "master", "commit": "614f0bb1fb598f97accdcea71d5f7b18d7d62436" },
+ "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" },
+ "yazi.nvim": { "branch": "main", "commit": "275c195596c857955f4627a8b48b68144d79478f" }
+}
diff --git a/nvim/.config/nvim/lua/plugins.inactive/cmp.lua.bak b/nvim/.config/nvim/lua/plugins.inactive/cmp.lua.bak
new file mode 100644
index 0000000..b423a4e
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins.inactive/cmp.lua.bak
@@ -0,0 +1,9 @@
+return {
+ {
+ "hrsh7th/cmp-path", -- file and folders
+ "hrsh7th/cmp-buffer", -- words from the current buffer
+ "hrsh7th/cmp-nvim-lsp", -- LSP-based autocompletions
+ "hrsh7th/cmp-cmdline", -- Command-line autocompletions
+ "tzachar/cmp-tabnine"--, build = "./install.sh",
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins.inactive/lsp-config.lua b/nvim/.config/nvim/lua/plugins.inactive/lsp-config.lua
new file mode 100644
index 0000000..96d869a
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins.inactive/lsp-config.lua
@@ -0,0 +1,60 @@
+return {
+ {
+ "williamboman/mason.nvim",
+ lazy = false,
+ config = function()
+ require("mason").setup()
+ end,
+ },
+ {
+ "williamboman/mason-lspconfig.nvim",
+ lazy = false,
+ opts = {
+ auto_install = true,
+ },
+ },
+ {
+ "neovim/nvim-lspconfig",
+ lazy = false,
+ config = function()
+ local capabilities = require('cmp_nvim_lsp').default_capabilities()
+
+ -- Define server configurations
+ local servers = {
+ ts_ls = {},
+ solargraph = {},
+ html = {},
+ lua_ls = {},
+ pyright = {},
+ -- ltex = {
+ -- cmd_env = {
+ -- JAVA_TOOL_OPTIONS = "-Djdk.xml.totalEntitySizeLimit=0 -Djdk.xml.entityExpansionLimit=0"
+ -- },
+ -- filetypes = { "markdown", "text", "tex", "gitcommit" },
+ -- settings = {
+ -- ltex = {
+ -- language = "en-US",
+ -- additionalRules = {
+ -- enablePickyRules = true,
+ -- motherTongue = "de-DE",
+ -- },
+ -- }
+ -- }
+ -- },
+ }
+
+ -- Setup each server with the new API
+ for server, config in pairs(servers) do
+ config.capabilities = capabilities
+ vim.lsp.config[server] = config
+ vim.lsp.enable(server)
+ end
+
+ -- LSP keymaps
+ vim.keymap.set("n", "K", vim.lsp.buf.hover, {})
+ vim.keymap.set("n", "gd", vim.lsp.buf.definition, {})
+ vim.keymap.set("n", "gr", vim.lsp.buf.references, {})
+ vim.keymap.set("n", "ca", vim.lsp.buf.code_action, {})
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins.inactive/lsp-config.lua.bak b/nvim/.config/nvim/lua/plugins.inactive/lsp-config.lua.bak
new file mode 100644
index 0000000..d434a8c
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins.inactive/lsp-config.lua.bak
@@ -0,0 +1,46 @@
+return {
+ {
+ "williamboman/mason.nvim",
+ lazy = false,
+ config = function()
+ require("mason").setup()
+ end,
+ },
+ {
+ "williamboman/mason-lspconfig.nvim",
+ lazy = false,
+ opts = {
+ auto_install = true,
+ },
+ },
+ {
+ "neovim/nvim-lspconfig",
+ lazy = false,
+ config = function()
+ local capabilities = require('cmp_nvim_lsp').default_capabilities()
+
+ local lspconfig = require("lspconfig")
+ lspconfig.ts_ls.setup({
+ capabilities = capabilities
+ })
+ lspconfig.solargraph.setup({
+ capabilities = capabilities
+ })
+ lspconfig.html.setup({
+ capabilities = capabilities
+ })
+ lspconfig.lua_ls.setup({
+ capabilities = capabilities
+ })
+ lspconfig.pyright.setup({
+ capabilities = capabilities
+ })
+
+ vim.keymap.set("n", "K", vim.lsp.buf.hover, {})
+ vim.keymap.set("n", "gd", vim.lsp.buf.definition, {})
+ vim.keymap.set("n", "gr", vim.lsp.buf.references, {})
+ vim.keymap.set("n", "ca", vim.lsp.buf.code_action, {})
+ end,
+ },
+}
+
diff --git a/nvim/.config/nvim/lua/plugins.inactive/markdown-preview.lua b/nvim/.config/nvim/lua/plugins.inactive/markdown-preview.lua
new file mode 100644
index 0000000..3fd1a0b
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins.inactive/markdown-preview.lua
@@ -0,0 +1,84 @@
+return {
+ {
+ "iamcco/markdown-preview.nvim",
+ cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
+ ft = { "markdown" },
+ build = function()
+ vim.fn["mkdp#util#install"]()
+ end,
+ config = function()
+ -- Set to 1 to open preview in browser automatically when entering markdown buffer
+ vim.g.mkdp_auto_start = 0
+
+ -- Set to 1 to auto close preview when switching away from markdown buffer
+ vim.g.mkdp_auto_close = 1
+
+ -- Set to 1 to refresh on save only, 0 to refresh on every change
+ vim.g.mkdp_refresh_slow = 0
+
+ -- Specify browser to open preview page
+ -- Can be 'firefox', 'chrome', etc. or leave empty for default
+ vim.g.mkdp_browser = ""
+
+ -- Set to 1 to echo preview page URL in command line
+ vim.g.mkdp_echo_preview_url = 0
+
+ -- Options for markdown rendering
+ -- mkit: markdown-it options for rendering
+ -- katex: KaTeX options for math typesetting
+ -- uml: markdown-it-plantuml options
+ vim.g.mkdp_preview_options = {
+ mkit = {},
+ katex = {},
+ uml = {},
+ maid = {},
+ disable_sync_scroll = 0,
+ sync_scroll_type = "middle",
+ hide_yaml_meta = 1,
+ sequence_diagrams = {},
+ flowchart_diagrams = {},
+ content_editable = false,
+ disable_filename = 0,
+ toc = {},
+ }
+
+ -- Use custom markdown style (absolute path or URL)
+ vim.g.mkdp_markdown_css = ""
+
+ -- Use custom highlight style (absolute path or URL)
+ vim.g.mkdp_highlight_css = ""
+
+ -- Custom port for preview server (empty = auto select)
+ vim.g.mkdp_port = ""
+
+ -- Theme: 'dark' or 'light'
+ vim.g.mkdp_theme = "dark"
+
+ -- Combine preview window (set to 1 to combine multiple markdown preview windows)
+ vim.g.mkdp_combine_preview = 0
+
+ -- Auto-start preview when entering markdown buffer
+ vim.g.mkdp_auto_start = 0
+ end,
+ keys = {
+ {
+ "mp",
+ "MarkdownPreviewToggle",
+ desc = "Markdown Preview Toggle",
+ ft = "markdown",
+ },
+ {
+ "ms",
+ "MarkdownPreview",
+ desc = "Markdown Preview Start",
+ ft = "markdown",
+ },
+ {
+ "mS",
+ "MarkdownPreviewStop",
+ desc = "Markdown Preview Stop",
+ ft = "markdown",
+ },
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins.inactive/none-ls.lua.bak b/nvim/.config/nvim/lua/plugins.inactive/none-ls.lua.bak
new file mode 100644
index 0000000..d28120e
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins.inactive/none-ls.lua.bak
@@ -0,0 +1,21 @@
+return {
+ "nvimtools/none-ls.nvim",
+ config = function()
+ local null_ls = require("null-ls")
+ null_ls.setup({
+ sources = {
+ null_ls.builtins.formatting.stylua,
+ null_ls.builtins.formatting.prettier,
+ -- null_ls.builtins.diagnostics.eslint_d,
+ null_ls.builtins.diagnostics.rubocop,
+ null_ls.builtins.formatting.rubocop,
+ null_ls.builtins.formatting.black,
+ null_ls.builtins.formatting.isort,
+ null_ls.builtins.diagnostics.pylint,
+ },
+ })
+
+ vim.keymap.set("n", "gf", vim.lsp.buf.format, {})
+ end,
+}
+
diff --git a/nvim/.config/nvim/lua/plugins.inactive/oil.lua b/nvim/.config/nvim/lua/plugins.inactive/oil.lua
new file mode 100644
index 0000000..4acbe58
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins.inactive/oil.lua
@@ -0,0 +1,8 @@
+-- return {
+-- "stevearc/oil.nvim",
+-- config = function()
+-- local oil = require("oil")
+-- oil.setup()
+-- vim.keymap.set("n", "-", oil.toggle_float, {})
+-- end,
+--}
diff --git a/nvim/.config/nvim/lua/plugins.inactive/swagger-preview.lua b/nvim/.config/nvim/lua/plugins.inactive/swagger-preview.lua
new file mode 100644
index 0000000..513df78
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins.inactive/swagger-preview.lua
@@ -0,0 +1,5 @@
+return {
+ "vinnymeller/swagger-preview.nvim",
+ build = "npm install -g swagger-ui-watcher",
+ config = true,
+}
diff --git a/nvim/.config/nvim/lua/plugins.inactive/telescope.lua.bak b/nvim/.config/nvim/lua/plugins.inactive/telescope.lua.bak
new file mode 100644
index 0000000..ddb60ab
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins.inactive/telescope.lua.bak
@@ -0,0 +1,26 @@
+return {
+ {
+ "nvim-telescope/telescope-ui-select.nvim",
+ },
+ {
+ "nvim-telescope/telescope.nvim",
+ tag = "0.1.5",
+ dependencies = { "nvim-lua/plenary.nvim" },
+ config = function()
+ require("telescope").setup({
+ extensions = {
+ ["ui-select"] = {
+ require("telescope.themes").get_dropdown({}),
+ },
+ },
+ })
+ local builtin = require("telescope.builtin")
+ vim.keymap.set("n", "", builtin.find_files, {})
+ vim.keymap.set("n", "fg", builtin.live_grep, {})
+ vim.keymap.set("n", "", builtin.oldfiles, {})
+
+ require("telescope").load_extension("ui-select")
+ require("telescope").load_extension("noice")
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins.lua b/nvim/.config/nvim/lua/plugins.lua
new file mode 100644
index 0000000..a564707
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins.lua
@@ -0,0 +1 @@
+return {}
diff --git a/nvim/.config/nvim/lua/plugins/alpha.lua b/nvim/.config/nvim/lua/plugins/alpha.lua
new file mode 100644
index 0000000..d6638ae
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/alpha.lua
@@ -0,0 +1,31 @@
+return {
+ "goolord/alpha-nvim",
+ dependencies = {
+ "nvim-tree/nvim-web-devicons",
+ },
+
+ config = function()
+ local alpha = require("alpha")
+ local dashboard = require("alpha.themes.startify")
+
+ dashboard.section.header.val = {
+ [[ ]],
+ [[ ]],
+ [[ ]],
+ [[ ]],
+ [[ ]],
+ [[ ████ ██████ █████ ██ ]],
+ [[ ███████████ █████ ]],
+ [[ █████████ ███████████████████ ███ ███████████ ]],
+ [[ █████████ ███ █████████████ █████ ██████████████ ]],
+ [[ █████████ ██████████ █████████ █████ █████ ████ █████ ]],
+ [[ ███████████ ███ ███ █████████ █████ █████ ████ █████ ]],
+ [[ ██████ █████████████████████ ████ █████ █████ ████ ██████ ]],
+ [[ ]],
+ [[ ]],
+ [[ ]],
+ }
+
+ alpha.setup(dashboard.opts)
+ end,
+}
diff --git a/nvim/.config/nvim/lua/plugins/autopairs.lua b/nvim/.config/nvim/lua/plugins/autopairs.lua
new file mode 100644
index 0000000..4a214ed
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/autopairs.lua
@@ -0,0 +1,96 @@
+return {
+ {
+ "windwp/nvim-autopairs",
+ event = "InsertEnter",
+ dependencies = {
+ "hrsh7th/nvim-cmp",
+ },
+ config = function()
+ local autopairs = require("nvim-autopairs")
+ local cmp_autopairs = require("nvim-autopairs.completion.cmp")
+ local cmp = require("cmp")
+
+ autopairs.setup({
+ check_ts = true, -- Enable treesitter
+ ts_config = {
+ lua = { "string" }, -- Don't add pairs in lua string treesitter nodes
+ javascript = { "template_string" }, -- Don't add pairs in JS template strings
+ java = false, -- Don't check treesitter on java
+ },
+ disable_filetype = { "TelescopePrompt", "vim" },
+ disable_in_macro = true, -- Disable when recording or executing a macro
+ disable_in_visualblock = false, -- Disable when in visual block mode
+ disable_in_replace_mode = true,
+ ignored_next_char = [=[[%w%%%'%[%"%.%`%$]]=],
+ enable_moveright = true,
+ enable_afterquote = true, -- Add bracket pairs after quote
+ enable_check_bracket_line = true, -- Check bracket in same line
+ enable_bracket_in_quote = true,
+ enable_abbr = false, -- Trigger abbreviation
+ break_undo = true, -- Switch for basic rule break undo sequence
+ check_comma = true,
+ map_cr = true,
+ map_bs = true, -- Map the key
+ map_c_h = false, -- Map the key to delete a pair
+ map_c_w = false, -- Map to delete a pair if possible
+ })
+
+ -- Integration with nvim-cmp
+ cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done())
+
+ -- Treesitter rules
+ local ts_conds = require("nvim-autopairs.ts-conds")
+
+ -- Press % => %% only while inside a comment or string
+ autopairs.add_rules({
+ require("nvim-autopairs.rule")("%", "%", "lua")
+ :with_pair(ts_conds.is_ts_node({ "string", "comment" })),
+ require("nvim-autopairs.rule")("$", "$", "lua")
+ :with_pair(ts_conds.is_not_ts_node({ "function" })),
+ })
+
+ -- Add spaces between parentheses
+ local Rule = require("nvim-autopairs.rule")
+ local cond = require("nvim-autopairs.conds")
+
+ autopairs.add_rules({
+ Rule(" ", " ")
+ :with_pair(function(opts)
+ local pair = opts.line:sub(opts.col - 1, opts.col)
+ return vim.tbl_contains({ "()", "[]", "{}" }, pair)
+ end)
+ :with_move(cond.none())
+ :with_cr(cond.none())
+ :with_del(function(opts)
+ local col = vim.api.nvim_win_get_cursor(0)[2]
+ local context = opts.line:sub(col - 1, col + 2)
+ return vim.tbl_contains({ "( )", "[ ]", "{ }" }, context)
+ end),
+ Rule("", " )")
+ :with_pair(cond.none())
+ :with_move(function(opts)
+ return opts.char == ")"
+ end)
+ :with_cr(cond.none())
+ :with_del(cond.none())
+ :use_key(")"),
+ Rule("", " }")
+ :with_pair(cond.none())
+ :with_move(function(opts)
+ return opts.char == "}"
+ end)
+ :with_cr(cond.none())
+ :with_del(cond.none())
+ :use_key("}"),
+ Rule("", " ]")
+ :with_pair(cond.none())
+ :with_move(function(opts)
+ return opts.char == "]"
+ end)
+ :with_cr(cond.none())
+ :with_del(cond.none())
+ :use_key("]"),
+ })
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/barbeque.lua b/nvim/.config/nvim/lua/plugins/barbeque.lua
new file mode 100644
index 0000000..ec7e57e
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/barbeque.lua
@@ -0,0 +1,99 @@
+return {
+ {
+ "utilyre/barbecue.nvim",
+ name = "barbecue",
+ version = "*",
+ dependencies = {
+ "SmiteshP/nvim-navic",
+ "nvim-tree/nvim-web-devicons",
+ },
+ event = { "BufReadPost", "BufNewFile" },
+ config = function()
+ require("barbecue").setup({
+ -- Create autocmd to attach to LSP
+ attach_navic = true,
+
+ -- Create user commands
+ create_autocmd = true,
+
+ -- Whether to show/use file icons
+ show_modified = false,
+
+ -- Whether to show file path
+ show_dirname = true,
+
+ -- Whether to show basename
+ show_basename = true,
+
+ -- Filetypes to exclude
+ exclude_filetypes = { "netrw", "toggleterm", "alpha", "NvimTree" },
+
+ -- Modifiers to apply to dirname
+ modifiers = {
+ dirname = ":~:.",
+ basename = "",
+ },
+
+ -- Whether to display path to file
+ show_navic = true,
+
+ -- Custom section
+ custom_section = function()
+ return " "
+ end,
+
+ -- Theme configuration
+ theme = "auto", -- 'auto', 'tokyonight', 'catppuccin', etc.
+
+ -- Symbols for different node kinds
+ kinds = {
+ File = "",
+ Module = "",
+ Namespace = "",
+ Package = "",
+ Class = "",
+ Method = "",
+ Property = "",
+ Field = "",
+ Constructor = "",
+ Enum = "",
+ Interface = "",
+ Function = "",
+ Variable = "",
+ Constant = "",
+ String = "",
+ Number = "",
+ Boolean = "",
+ Array = "",
+ Object = "",
+ Key = "",
+ Null = "",
+ EnumMember = "",
+ Struct = "",
+ Event = "",
+ Operator = "",
+ TypeParameter = "",
+ },
+ })
+ end,
+ },
+ {
+ "SmiteshP/nvim-navic",
+ dependencies = {
+ "neovim/nvim-lspconfig",
+ },
+ opts = {
+ lsp = {
+ auto_attach = true,
+ preference = nil,
+ },
+ highlight = true,
+ separator = " > ",
+ depth_limit = 0,
+ depth_limit_indicator = "..",
+ safe_output = true,
+ lazy_update_context = false,
+ click = false,
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/catppuccin.lua b/nvim/.config/nvim/lua/plugins/catppuccin.lua
new file mode 100644
index 0000000..988b00f
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/catppuccin.lua
@@ -0,0 +1,11 @@
+return {
+ {
+ "catppuccin/nvim",
+ lazy = false,
+ name = "catppuccin",
+ priority = 1000,
+ config = function()
+ vim.cmd.colorscheme "catppuccin-mocha"
+ end
+ }
+}
diff --git a/nvim/.config/nvim/lua/plugins/cmp.lua b/nvim/.config/nvim/lua/plugins/cmp.lua
new file mode 100644
index 0000000..5e54c38
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/cmp.lua
@@ -0,0 +1,24 @@
+return {
+ {
+ "hrsh7th/cmp-nvim-lsp",
+ },
+ {
+ "L3MON4D3/LuaSnip",
+ dependencies = {
+ "saadparwaiz1/cmp_luasnip",
+ "rafamadriz/friendly-snippets",
+ },
+ },
+ {
+ "hrsh7th/nvim-cmp",
+ dependencies = {
+ "hrsh7th/cmp-path",
+ "hrsh7th/cmp-buffer",
+ "hrsh7th/cmp-cmdline",
+ },
+ },
+ {
+ "tzachar/cmp-tabnine",
+ build = "./install.sh",
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/comment.lua b/nvim/.config/nvim/lua/plugins/comment.lua
new file mode 100644
index 0000000..b25f4d0
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/comment.lua
@@ -0,0 +1,56 @@
+return {
+ {
+ "numToStr/Comment.nvim",
+ event = { "BufReadPre", "BufNewFile" },
+ dependencies = {
+ "JoosepAlviste/nvim-ts-context-commentstring",
+ },
+ config = function()
+ local comment = require("Comment")
+ local ts_context_commentstring = require("ts_context_commentstring.integrations.comment_nvim")
+
+ comment.setup({
+ -- Add a space between comment and the line
+ padding = true,
+
+ -- Whether the cursor should stay at its position
+ sticky = true,
+
+ -- Lines to be ignored while (un)comment
+ ignore = "^$",
+
+ -- LHS of toggle mappings in NORMAL mode
+ toggler = {
+ line = "gcc", -- Line-comment toggle keymap
+ block = "gbc", -- Block-comment toggle keymap
+ },
+
+ -- LHS of operator-pending mappings in NORMAL and VISUAL mode
+ opleader = {
+ line = "gc", -- Line-comment keymap
+ block = "gb", -- Block-comment keymap
+ },
+
+ -- LHS of extra mappings
+ extra = {
+ above = "gcO", -- Add comment on the line above
+ below = "gco", -- Add comment on the line below
+ eol = "gcA", -- Add comment at the end of line
+ },
+
+ -- Enable keybindings
+ -- NOTE: If given `false` then the plugin won't create any mappings
+ mappings = {
+ basic = true,
+ extra = true,
+ },
+
+ -- Function to call before (un)comment
+ pre_hook = ts_context_commentstring.create_pre_hook(),
+
+ -- Function to call after (un)comment
+ post_hook = nil,
+ })
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/completions.lua b/nvim/.config/nvim/lua/plugins/completions.lua
new file mode 100644
index 0000000..0008aa7
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/completions.lua
@@ -0,0 +1,45 @@
+return {
+ {
+ "hrsh7th/cmp-nvim-lsp",
+ },
+ {
+ "L3MON4D3/LuaSnip",
+ -- follow latest release.
+ version = "v2.*", -- Replace by the latest released major (first number of latest release)
+ -- install jsregexp (optional!).
+ build = "make install_jsregexp"
+ },
+ {
+ "hrsh7th/nvim-cmp",
+ config = function()
+ local cmp = require("cmp")
+ require("luasnip.loaders.from_vscode").lazy_load()
+
+ cmp.setup({
+ snippet = {
+ expand = function(args)
+ require("luasnip").lsp_expand(args.body)
+ end,
+ },
+ window = {
+ completion = cmp.config.window.bordered(),
+ documentation = cmp.config.window.bordered(),
+ },
+ mapping = cmp.mapping.preset.insert({
+ [""] = cmp.mapping.scroll_docs(-4),
+ [""] = cmp.mapping.scroll_docs(4),
+ [""] = cmp.mapping.complete(),
+ [""] = cmp.mapping.abort(),
+ [""] = cmp.mapping.confirm({ select = true }),
+ }),
+ sources = cmp.config.sources({
+ { name = "nvim_lsp" },
+ { name = "luasnip" }, -- For luasnip users.
+ { name = "buffer" },
+ { name = "path" },
+ { name = "cmp_tabnine" }, -- ai powerde suggestions
+ }),
+ })
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/dressing.lua b/nvim/.config/nvim/lua/plugins/dressing.lua
new file mode 100644
index 0000000..772d8cf
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/dressing.lua
@@ -0,0 +1,44 @@
+return {
+ {
+ "stevearc/dressing.nvim",
+ event = "VeryLazy",
+ opts = {
+ input = {
+ enabled = true,
+ default_prompt = "Input:",
+ trim_prompt = true,
+ title_pos = "left",
+ start_in_insert = true,
+ border = "rounded",
+ relative = "cursor",
+ prefer_width = 40,
+ win_options = {
+ winblend = 0,
+ },
+ mappings = {
+ n = {
+ [""] = "Close",
+ [""] = "Confirm",
+ },
+ i = {
+ [""] = "Close",
+ [""] = "Confirm",
+ [""] = "HistoryPrev",
+ [""] = "HistoryNext",
+ },
+ },
+ },
+ select = {
+ enabled = true,
+ backend = { "telescope", "builtin" },
+ trim_prompt = true,
+ telescope = require("telescope.themes").get_dropdown({
+ layout_config = {
+ width = 0.8,
+ height = 0.8,
+ },
+ }),
+ },
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/flash-nvim.lua b/nvim/.config/nvim/lua/plugins/flash-nvim.lua
new file mode 100644
index 0000000..7e7f638
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/flash-nvim.lua
@@ -0,0 +1,50 @@
+return {
+ {
+ "folke/flash.nvim",
+ event = "VeryLazy",
+ ---@type Flash.Config
+ opts = {},
+ keys = {
+ {
+ "w",
+ mode = { "n", "x", "o" },
+ function()
+ require("flash").jump()
+ end,
+ desc = "Flash",
+ },
+ {
+ "W",
+ mode = { "n", "x", "o" },
+ function()
+ require("flash").treesitter()
+ end,
+ desc = "Flash Treesitter",
+ },
+ {
+ "r",
+ mode = "o",
+ function()
+ require("flash").remote()
+ end,
+ desc = "Remote Flash",
+ },
+ {
+ "R",
+ mode = { "o", "x" },
+ function()
+ require("flash").treesitter_search()
+ end,
+ desc = "Treesitter Search",
+ },
+ {
+ "",
+ mode = { "c" },
+ function()
+ require("flash").toggle()
+ end,
+ desc = "Toggle Flash Search",
+ },
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/fzf.lua b/nvim/.config/nvim/lua/plugins/fzf.lua
new file mode 100644
index 0000000..0dee574
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/fzf.lua
@@ -0,0 +1,14 @@
+return {
+ {
+ "ibhagwan/fzf-lua",
+ -- optional for icon support
+ dependencies = { "nvim-tree/nvim-web-devicons" },
+ -- or if using mini.icons/mini.nvim
+ -- dependencies = { "nvim-mini/mini.icons" },
+ ---@module "fzf-lua"
+ ---@type fzf-lua.Config|{}
+ ---@diagnostics disable: missing-fields
+ opts = {},
+ ---@diagnostics enable: missing-fields
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/git-signs.lua b/nvim/.config/nvim/lua/plugins/git-signs.lua
new file mode 100644
index 0000000..7ac67c2
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/git-signs.lua
@@ -0,0 +1,86 @@
+return {
+ {
+ "lewis6991/gitsigns.nvim",
+ event = { "BufReadPre", "BufNewFile" },
+ config = function()
+ require("gitsigns").setup({
+ signs = {
+ add = { text = "│" },
+ change = { text = "│" },
+ delete = { text = "_" },
+ topdelete = { text = "‾" },
+ changedelete = { text = "~" },
+ untracked = { text = "┆" },
+ },
+ signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
+ numhl = false, -- Toggle with `:Gitsigns toggle_numhl`
+ linehl = false, -- Toggle with `:Gitsigns toggle_linehl`
+ word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
+ watch_gitdir = {
+ follow_files = true
+ },
+ attach_to_untracked = true,
+ current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
+ current_line_blame_opts = {
+ virt_text = true,
+ virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align'
+ delay = 1000,
+ ignore_whitespace = false,
+ virt_text_priority = 100,
+ },
+ current_line_blame_formatter = ", - ",
+ sign_priority = 6,
+ update_debounce = 100,
+ status_formatter = nil,
+ max_file_length = 40000,
+ preview_config = {
+ border = "rounded",
+ style = "minimal",
+ relative = "cursor",
+ row = 0,
+ col = 1
+ },
+ on_attach = function(bufnr)
+ local gs = package.loaded.gitsigns
+
+ local function map(mode, l, r, opts)
+ opts = opts or {}
+ opts.buffer = bufnr
+ vim.keymap.set(mode, l, r, opts)
+ end
+
+ -- Navigation
+ map("n", "]c", function()
+ if vim.wo.diff then return "]c" end
+ vim.schedule(function() gs.next_hunk() end)
+ return ""
+ end, { expr = true, desc = "Next hunk" })
+
+ map("n", "[c", function()
+ if vim.wo.diff then return "[c" end
+ vim.schedule(function() gs.prev_hunk() end)
+ return ""
+ end, { expr = true, desc = "Previous hunk" })
+
+ -- Actions
+ map("n", "hs", gs.stage_hunk, { desc = "Stage hunk" })
+ map("n", "hr", gs.reset_hunk, { desc = "Reset hunk" })
+ map("v", "hs", function() gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, { desc = "Stage hunk" })
+ map("v", "hr", function() gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, { desc = "Reset hunk" })
+ map("n", "hS", gs.stage_buffer, { desc = "Stage buffer" })
+ map("n", "hu", gs.undo_stage_hunk, { desc = "Undo stage hunk" })
+ map("n", "hR", gs.reset_buffer, { desc = "Reset buffer" })
+ map("n", "hp", gs.preview_hunk, { desc = "Preview hunk" })
+ map("n", "hb", function() gs.blame_line({ full = true }) end, { desc = "Blame line" })
+ map("n", "tb", gs.toggle_current_line_blame, { desc = "Toggle line blame" })
+ map("n", "hd", gs.diffthis, { desc = "Diff this" })
+ map("n", "hD", function() gs.diffthis("~") end, { desc = "Diff this ~" })
+ map("n", "td", gs.toggle_deleted, { desc = "Toggle deleted" })
+
+ -- Text object
+ map({ "o", "x" }, "ih", ":Gitsigns select_hunk", { desc = "Select hunk" })
+ end
+ })
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/harpoon.lua b/nvim/.config/nvim/lua/plugins/harpoon.lua
new file mode 100644
index 0000000..4f98022
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/harpoon.lua
@@ -0,0 +1,68 @@
+return {
+ {
+ "ThePrimeagen/harpoon",
+ branch = "harpoon2",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ "nvim-telescope/telescope.nvim",
+ },
+ config = function()
+ local harpoon = require("harpoon")
+
+ -- Setup harpoon
+ harpoon:setup({
+ settings = {
+ save_on_toggle = true,
+ sync_on_ui_close = true,
+ key = function()
+ return vim.loop.cwd()
+ end,
+ },
+ })
+
+ -- Basic keymaps
+ vim.keymap.set("n", "a", function() harpoon:list():add() end,
+ { desc = "Harpoon: Add file" })
+
+ vim.keymap.set("n", "", function() harpoon.ui:toggle_quick_menu(harpoon:list()) end,
+ { desc = "Harpoon: Toggle menu" })
+
+ -- Navigate to files 1-4
+ vim.keymap.set("n", "1", function() harpoon:list():select(1) end,
+ { desc = "Harpoon: Go to file 1" })
+ vim.keymap.set("n", "2", function() harpoon:list():select(2) end,
+ { desc = "Harpoon: Go to file 2" })
+ vim.keymap.set("n", "3", function() harpoon:list():select(3) end,
+ { desc = "Harpoon: Go to file 3" })
+ vim.keymap.set("n", "4", function() harpoon:list():select(4) end,
+ { desc = "Harpoon: Go to file 4" })
+
+ -- Navigate to previous & next buffers
+ vim.keymap.set("n", "", function() harpoon:list():prev() end,
+ { desc = "Harpoon: Previous file" })
+ vim.keymap.set("n", "", function() harpoon:list():next() end,
+ { desc = "Harpoon: Next file" })
+
+ -- Telescope integration
+ local conf = require("telescope.config").values
+ local function toggle_telescope(harpoon_files)
+ local file_paths = {}
+ for _, item in ipairs(harpoon_files.items) do
+ table.insert(file_paths, item.value)
+ end
+
+ require("telescope.pickers").new({}, {
+ prompt_title = "Harpoon",
+ finder = require("telescope.finders").new_table({
+ results = file_paths,
+ }),
+ previewer = conf.file_previewer({}),
+ sorter = conf.generic_sorter({}),
+ }):find()
+ end
+
+ vim.keymap.set("n", "h", function() toggle_telescope(harpoon:list()) end,
+ { desc = "Open harpoon window with Telescope" })
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/indent-blankline.lua b/nvim/.config/nvim/lua/plugins/indent-blankline.lua
new file mode 100644
index 0000000..1e6140d
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/indent-blankline.lua
@@ -0,0 +1,18 @@
+return {
+ {
+ "lukas-reineke/indent-blankline.nvim",
+ main = "ibl",
+ config = function()
+ require("ibl").setup({
+ indent = {
+ char = "│",
+ },
+ scope = {
+ enabled = true,
+ show_start = true,
+ show_end = false,
+ },
+ })
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/lazydev.lua b/nvim/.config/nvim/lua/plugins/lazydev.lua
new file mode 100644
index 0000000..9b9ab4d
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/lazydev.lua
@@ -0,0 +1,38 @@
+return {
+ {
+ "folke/lazydev.nvim",
+ ft = "lua",
+ dependencies = {
+ "Bilal2453/luvit-meta",
+ },
+ opts = {
+ library = {
+ -- Load luvit types when the `vim.uv` word is found
+ { path = "luvit-meta/library", words = { "vim%.uv" } },
+ -- Load LazyVim types when the `LazyVim` word is found
+ { path = "LazyVim", words = { "LazyVim" } },
+ -- Add nvim-navic to library for completions
+ { path = "nvim-navic", words = { "navic" } },
+ -- Add barbecue to library
+ { path = "barbecue.nvim", words = { "barbecue" } },
+ },
+ -- Enable type checking
+ enabled = function(root_dir)
+ return vim.g.lazydev_enabled == nil and true or vim.g.lazydev_enabled
+ end,
+ -- Disable integration with cmp
+ integrations = {
+ -- Enable lspconfig integration
+ lspconfig = true,
+ -- Enable cmp integration
+ cmp = true,
+ -- Enable coq integration
+ coq = false,
+ },
+ },
+ },
+ {
+ "Bilal2453/luvit-meta",
+ lazy = true,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/lsp-config.lua b/nvim/.config/nvim/lua/plugins/lsp-config.lua
new file mode 100644
index 0000000..6ea86da
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/lsp-config.lua
@@ -0,0 +1,71 @@
+return {
+ {
+ "williamboman/mason.nvim",
+ lazy = false,
+ config = function()
+ require("mason").setup()
+ end,
+ },
+ {
+ "williamboman/mason-lspconfig.nvim",
+ lazy = false,
+ opts = {
+ auto_install = true,
+ },
+ },
+ {
+ "neovim/nvim-lspconfig",
+ lazy = false,
+ dependencies = {
+ "SmiteshP/nvim-navic", -- Add this dependency
+ },
+ config = function()
+ local capabilities = require('cmp_nvim_lsp').default_capabilities()
+ local navic = require("nvim-navic")
+
+ -- Define server configurations
+ local servers = {
+ ts_ls = {},
+ solargraph = {},
+ html = {},
+ lua_ls = {
+ settings = {
+ Lua = {
+ diagnostics = {
+ globals = { "vim" },
+ },
+ workspace = {
+ checkThirdParty = false,
+ },
+ telemetry = {
+ enable = false,
+ },
+ },
+ },
+ },
+ pyright = {},
+ }
+
+ -- Setup each server with the new API
+ for server, config in pairs(servers) do
+ config.capabilities = capabilities
+
+ -- Add navic on_attach for breadcrumbs
+ config.on_attach = function(client, bufnr)
+ if client.server_capabilities.documentSymbolProvider then
+ navic.attach(client, bufnr)
+ end
+ end
+
+ vim.lsp.config[server] = config
+ vim.lsp.enable(server)
+ end
+
+ -- LSP keymaps
+ vim.keymap.set("n", "K", vim.lsp.buf.hover, {})
+ vim.keymap.set("n", "gd", vim.lsp.buf.definition, {})
+ vim.keymap.set("n", "gr", vim.lsp.buf.references, {})
+ vim.keymap.set("n", "ca", vim.lsp.buf.code_action, {})
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/lualine.lua b/nvim/.config/nvim/lua/plugins/lualine.lua
new file mode 100644
index 0000000..ad3617a
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/lualine.lua
@@ -0,0 +1,10 @@
+return {
+ "nvim-lualine/lualine.nvim",
+ config = function ()
+ require('lualine').setup({
+ options = {
+ theme = 'dracula'
+ }
+ })
+ end
+}
diff --git a/nvim/.config/nvim/lua/plugins/neo-tree.lua b/nvim/.config/nvim/lua/plugins/neo-tree.lua
new file mode 100644
index 0000000..3acf6dd
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/neo-tree.lua
@@ -0,0 +1,13 @@
+return {
+ "nvim-neo-tree/neo-tree.nvim",
+ branch = "v3.x",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ "nvim-tree/nvim-web-devicons",
+ "MunifTanjim/nui.nvim",
+ },
+ config = function()
+ vim.keymap.set("n", "ee", ":Neotree filesystem reveal left", {})
+ vim.keymap.set("n", "bf", ":Neotree buffers reveal float", {})
+ end,
+}
diff --git a/nvim/.config/nvim/lua/plugins/neogit.lua b/nvim/.config/nvim/lua/plugins/neogit.lua
new file mode 100644
index 0000000..b530202
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/neogit.lua
@@ -0,0 +1,24 @@
+return {
+ {
+ "NeogitOrg/neogit",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ "sindrets/diffview.nvim",
+ "nvim-telescope/telescope.nvim",
+ },
+ opts = {
+ integrations = {
+ telescope = true,
+ diffview = true,
+ },
+ kind = "tab",
+ },
+ keys = {
+ { "gs", "Neogit", desc = "Neogit Status" },
+ { "gc", "Neogit commit", desc = "Neogit Commit" },
+ { "gp", "Neogit pull", desc = "Neogit Pull" },
+ { "gP", "Neogit push", desc = "Neogit Push" },
+ { "gb", "Neogit branch", desc = "Neogit Branch" },
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/noice.lua b/nvim/.config/nvim/lua/plugins/noice.lua
new file mode 100644
index 0000000..ab7f611
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/noice.lua
@@ -0,0 +1,17 @@
+return { -- lazy.nvim
+ {
+ "folke/noice.nvim",
+ event = "VeryLazy",
+ opts = {
+ -- add any options here
+ },
+ dependencies = {
+ -- if you lazy-load any plugin below, make sure to add proper `module="..."` entries
+ "MunifTanjim/nui.nvim",
+ -- OPTIONAL:
+ -- `nvim-notify` is only needed, if you want to use the notification view.
+ -- If not available, we use `mini` as the fallback
+ "rcarriga/nvim-notify",
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/none-ls.lua b/nvim/.config/nvim/lua/plugins/none-ls.lua
new file mode 100644
index 0000000..77dfa25
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/none-ls.lua
@@ -0,0 +1,23 @@
+return {
+ "nvimtools/none-ls.nvim",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ },
+ event = { "BufReadPre", "BufNewFile" },
+ config = function()
+ local null_ls = require("null-ls")
+ null_ls.setup({
+ sources = {
+ null_ls.builtins.formatting.stylua,
+ null_ls.builtins.formatting.prettier,
+ -- null_ls.builtins.diagnostics.eslint_d,
+ null_ls.builtins.diagnostics.rubocop,
+ null_ls.builtins.formatting.rubocop,
+ null_ls.builtins.formatting.black,
+ null_ls.builtins.formatting.isort,
+ null_ls.builtins.diagnostics.pylint,
+ },
+ })
+ vim.keymap.set("n", "gf", vim.lsp.buf.format, {})
+ end,
+}
diff --git a/nvim/.config/nvim/lua/plugins/nvim-spectre.lua b/nvim/.config/nvim/lua/plugins/nvim-spectre.lua
new file mode 100644
index 0000000..8098071
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/nvim-spectre.lua
@@ -0,0 +1,159 @@
+return {
+ {
+ "nvim-pack/nvim-spectre",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ },
+ config = function()
+ require("spectre").setup({
+ -- Optional: customize colors
+ color_devicons = true,
+ open_cmd = "vnew",
+ live_update = false, -- auto execute search again when you write any file
+ line_sep_start = "┌-----------------------------------------",
+ result_padding = "¦ ",
+ line_sep = "└-----------------------------------------",
+ highlight = {
+ ui = "String",
+ search = "DiffChange",
+ replace = "DiffDelete",
+ },
+ mapping = {
+ ["toggle_line"] = {
+ map = "dd",
+ cmd = "lua require('spectre').toggle_line()",
+ desc = "toggle item",
+ },
+ ["enter_file"] = {
+ map = "",
+ cmd = "lua require('spectre.actions').select_entry()",
+ desc = "open file",
+ },
+ ["send_to_qf"] = {
+ map = "q",
+ cmd = "lua require('spectre.actions').send_to_qf()",
+ desc = "send all items to quickfix",
+ },
+ ["replace_cmd"] = {
+ map = "c",
+ cmd = "lua require('spectre.actions').replace_cmd()",
+ desc = "input replace command",
+ },
+ ["show_option_menu"] = {
+ map = "o",
+ cmd = "lua require('spectre').show_options()",
+ desc = "show options",
+ },
+ ["run_current_replace"] = {
+ map = "rc",
+ cmd = "lua require('spectre.actions').run_current_replace()",
+ desc = "replace current line",
+ },
+ ["run_replace"] = {
+ map = "R",
+ cmd = "lua require('spectre.actions').run_replace()",
+ desc = "replace all",
+ },
+ ["change_view_mode"] = {
+ map = "v",
+ cmd = "lua require('spectre').change_view()",
+ desc = "change result view mode",
+ },
+ ["change_replace_sed"] = {
+ map = "trs",
+ cmd = "lua require('spectre').change_engine_replace('sed')",
+ desc = "use sed to replace",
+ },
+ ["change_replace_oxi"] = {
+ map = "tro",
+ cmd = "lua require('spectre').change_engine_replace('oxi')",
+ desc = "use oxi to replace",
+ },
+ ["toggle_live_update"] = {
+ map = "tu",
+ cmd = "lua require('spectre').toggle_live_update()",
+ desc = "update when vim writes to file",
+ },
+ ["toggle_ignore_case"] = {
+ map = "ti",
+ cmd = "lua require('spectre').change_options('ignore-case')",
+ desc = "toggle ignore case",
+ },
+ ["toggle_ignore_hidden"] = {
+ map = "th",
+ cmd = "lua require('spectre').change_options('hidden')",
+ desc = "toggle search hidden",
+ },
+ ["resume_last_search"] = {
+ map = "l",
+ cmd = "lua require('spectre').resume_last_search()",
+ desc = "resume last search",
+ },
+ },
+ find_engine = {
+ ["rg"] = {
+ cmd = "rg",
+ args = {
+ "--color=never",
+ "--no-heading",
+ "--with-filename",
+ "--line-number",
+ "--column",
+ },
+ options = {
+ ["ignore-case"] = {
+ value = "--ignore-case",
+ icon = "[I]",
+ desc = "ignore case",
+ },
+ ["hidden"] = {
+ value = "--hidden",
+ desc = "hidden file",
+ icon = "[H]",
+ },
+ },
+ },
+ },
+ replace_engine = {
+ ["sed"] = {
+ cmd = "sed",
+ args = nil,
+ options = {
+ ["ignore-case"] = {
+ value = "--ignore-case",
+ icon = "[I]",
+ desc = "ignore case",
+ },
+ },
+ },
+ },
+ default = {
+ find = {
+ cmd = "rg",
+ options = { "ignore-case" },
+ },
+ replace = {
+ cmd = "sed",
+ },
+ },
+ })
+
+ -- Global keymaps
+ vim.keymap.set("n", "S", 'lua require("spectre").toggle()', {
+ desc = "Toggle Spectre",
+ })
+
+ vim.keymap.set("n", "sw", 'lua require("spectre").open_visual({select_word=true})', {
+ desc = "Search current word",
+ })
+
+ vim.keymap.set("v", "sw", 'lua require("spectre").open_visual()', {
+ desc = "Search current word",
+ })
+
+ vim.keymap.set("n", "sp", 'lua require("spectre").open_file_search({select_word=true})', {
+ desc = "Search in current file",
+ })
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/nvim-tmux-navigation.lua b/nvim/.config/nvim/lua/plugins/nvim-tmux-navigation.lua
new file mode 100644
index 0000000..867d0e8
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/nvim-tmux-navigation.lua
@@ -0,0 +1,10 @@
+return {
+ "alexghergh/nvim-tmux-navigation",
+ config = function()
+ require('nvim-tmux-navigation').setup({})
+ vim.keymap.set("n", "", "NvimTmuxNavigateLeft", {})
+ vim.keymap.set("n", "", "NvimTmuxNavigateDown", {})
+ vim.keymap.set("n", "", "NvimTmuxNavigateUp", {})
+ vim.keymap.set("n", "", "NvimTmuxNavigateRight", {})
+ end,
+}
diff --git a/nvim/.config/nvim/lua/plugins/nvim-web-devicons.lua b/nvim/.config/nvim/lua/plugins/nvim-web-devicons.lua
new file mode 100644
index 0000000..2b5b575
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/nvim-web-devicons.lua
@@ -0,0 +1,88 @@
+return {
+ {
+ "nvim-tree/nvim-web-devicons",
+ lazy = true,
+ config = function()
+ require("nvim-web-devicons").setup({
+ -- Globally enable/disable all icons
+ override = {
+ -- Override specific file type icons
+ zsh = {
+ icon = "",
+ color = "#428850",
+ cterm_color = "65",
+ name = "Zsh"
+ },
+ -- Add custom icons
+ ["Dockerfile"] = {
+ icon = "",
+ color = "#384d54",
+ name = "Dockerfile"
+ },
+ [".env"] = {
+ icon = "",
+ color = "#faf743",
+ name = "Env"
+ },
+ [".gitignore"] = {
+ icon = "",
+ color = "#f1502f",
+ name = "GitIgnore"
+ },
+ },
+ -- Override by file extension
+ override_by_extension = {
+ ["log"] = {
+ icon = "",
+ color = "#81e043",
+ name = "Log"
+ },
+ ["rs"] = {
+ icon = "",
+ color = "#dea584",
+ name = "Rust"
+ },
+ ["md"] = {
+ icon = "",
+ color = "#519aba",
+ name = "Markdown"
+ },
+ },
+ -- Override by filename
+ override_by_filename = {
+ ["makefile"] = {
+ icon = "",
+ color = "#6d8086",
+ name = "Makefile"
+ },
+ ["dockerfile"] = {
+ icon = "",
+ color = "#384d54",
+ name = "Dockerfile"
+ },
+ [".dockerignore"] = {
+ icon = "",
+ color = "#384d54",
+ name = "DockerIgnore"
+ },
+ ["package.json"] = {
+ icon = "",
+ color = "#e8274b",
+ name = "PackageJson"
+ },
+ ["package-lock.json"] = {
+ icon = "",
+ color = "#7a0d21",
+ name = "PackageLockJson"
+ },
+ },
+ -- Use colors by default
+ color_icons = true,
+ -- Globally enable default icons (if icon not found)
+ default = true,
+ -- Use strict mode (throw error if icon not found)
+ strict = false,
+ })
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/obsidian.lua b/nvim/.config/nvim/lua/plugins/obsidian.lua
new file mode 100644
index 0000000..6a3537a
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/obsidian.lua
@@ -0,0 +1,110 @@
+return {
+ {
+ "epwalsh/obsidian.nvim",
+ version = "*",
+ lazy = true,
+ ft = "markdown",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ },
+ opts = {
+ workspaces = {
+ {
+ name = "nvim",
+ path = "~/Documents/obsidian/vault", -- Change to your vault path
+ },
+ -- {
+ -- name = "work",
+ -- path = "~/obsidian/work", -- Optional: add more vaults
+ -- },
+ },
+
+ -- Daily notes
+ daily_notes = {
+ folder = "daily",
+ date_format = "%Y-%m-%d",
+ template = nil,
+ },
+
+ -- Templates
+ templates = {
+ folder = "templates",
+ date_format = "%Y-%m-%d",
+ time_format = "%H:%M",
+ },
+
+ -- Completion
+ completion = {
+ nvim_cmp = true,
+ min_chars = 2,
+ },
+
+ -- Use note title as filename
+ note_id_func = function(title)
+ if title ~= nil then
+ return title
+ else
+ return tostring(os.time())
+ end
+ end,
+
+ -- Disable UI features if you don't want them
+ ui = {
+ enable = true, -- Set to false to disable and suppress warning
+ },
+
+ -- Mappings (only active in markdown files)
+ mappings = {
+ -- Follow link under cursor
+ ["gf"] = {
+ action = function()
+ return require("obsidian").util.gf_passthrough()
+ end,
+ opts = { noremap = false, expr = true, buffer = true },
+ },
+ -- Toggle checkbox
+ ["ch"] = {
+ action = function()
+ return require("obsidian").util.toggle_checkbox()
+ end,
+ opts = { buffer = true },
+ },
+ -- Smart action (follow link or toggle checkbox)
+ [""] = {
+ action = function()
+ return require("obsidian").util.smart_action()
+ end,
+ opts = { buffer = true, expr = true },
+ },
+ },
+ },
+
+ config = function(_, opts)
+ require("obsidian").setup(opts)
+
+ -- Set conceallevel for markdown files (for UI features)
+ vim.api.nvim_create_autocmd("FileType", {
+ pattern = "markdown",
+ callback = function()
+ vim.opt_local.conceallevel = 2
+ end,
+ })
+ end,
+
+ -- Global keymaps
+ keys = {
+ { "on", "ObsidianNew", desc = "New Obsidian note" },
+ { "oo", "ObsidianQuickSwitch", desc = "Quick switch notes" },
+ { "os", "ObsidianSearch", desc = "Search notes" },
+ { "ot", "ObsidianToday", desc = "Today's note" },
+ { "oy", "ObsidianYesterday", desc = "Yesterday's note" },
+ { "ob", "ObsidianBacklinks", desc = "Show backlinks" },
+ { "og", "ObsidianTags", desc = "Search tags" },
+ { "ol", "ObsidianLink", mode = "v", desc = "Link selection" },
+ { "oL", "ObsidianLinkNew", mode = "v", desc = "Link to new note" },
+ { "of", "ObsidianFollowLink", desc = "Follow link" },
+ { "oT", "ObsidianTemplate", desc = "Insert template" },
+ { "op", "ObsidianOpen", desc = "Open in Obsidian app" },
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/portal.lua b/nvim/.config/nvim/lua/plugins/portal.lua
new file mode 100644
index 0000000..6ed8469
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/portal.lua
@@ -0,0 +1,72 @@
+return {
+ {
+ "cbochs/portal.nvim",
+ dependencies = {
+ "cbochs/grapple.nvim", -- Optional: for grapple integration
+ "ThePrimeagen/harpoon", -- Optional: for harpoon integration
+ },
+ config = function()
+ -- Setup portal
+ require("portal").setup({
+ labels = { "j", "k", "h", "l" },
+ escape = {
+ [""] = true,
+ },
+ })
+
+ -- Basic navigation keymaps
+ vim.keymap.set("n", "u", "Portal jumplist backward", { desc = "Portal: Jump backward" })
+
+ vim.keymap.set("n", "i", "Portal jumplist forward", { desc = "Portal: Jump forward" })
+
+ -- Changelist navigation
+ vim.keymap.set(
+ "n",
+ "po",
+ "Portal changelist backward",
+ { desc = "Portal: Jump backward (changelist)" }
+ )
+
+ vim.keymap.set(
+ "n",
+ "pi",
+ "Portal changelist forward",
+ { desc = "Portal: Jump forward (changelist)" }
+ )
+
+ -- Quickfix navigation
+ vim.keymap.set(
+ "n",
+ "qo",
+ "Portal quickfix backward",
+ { desc = "Portal: Jump backward (quickfix)" }
+ )
+
+ vim.keymap.set(
+ "n",
+ "qi",
+ "Portal quickfix forward",
+ { desc = "Portal: Jump forward (quickfix)" }
+ )
+
+ -- Optional: Harpoon integration
+ vim.keymap.set(
+ "n",
+ "ho",
+ "Portal harpoon backward",
+ { desc = "Portal: Jump backward (harpoon)" }
+ )
+
+ vim.keymap.set(
+ "n",
+ "hi",
+ "Portal harpoon forward",
+ { desc = "Portal: Jump forward (harpoon)" }
+ )
+ end,
+ keys = {
+ { "u", desc = "Portal: Jump backward" },
+ { "i", desc = "Portal: Jump forward" },
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/projections.lua b/nvim/.config/nvim/lua/plugins/projections.lua
new file mode 100644
index 0000000..5153e24
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/projections.lua
@@ -0,0 +1,38 @@
+return {
+ {
+ "gnikdroy/projections.nvim",
+ dependencies = {
+ "nvim-telescope/telescope.nvim",
+ },
+ config = function()
+ require("projections").setup({
+ workspaces = {
+ "~/projects",
+ "~/obsidian",
+ "~/.config",
+ },
+ patterns = { ".git", "package.json", "Cargo.toml", "go.mod" },
+ })
+
+ require("telescope").load_extension("projections")
+
+ -- Auto-store session on VimExit
+ local Session = require("projections.session")
+ vim.api.nvim_create_autocmd({ "VimLeavePre" }, {
+ callback = function() Session.store(vim.loop.cwd()) end,
+ })
+
+ -- Auto-restore session
+ vim.api.nvim_create_autocmd({ "VimEnter" }, {
+ callback = function()
+ if vim.fn.argc() == 0 then
+ Session.restore(vim.loop.cwd())
+ end
+ end,
+ })
+ end,
+ keys = {
+ { "fp", "Telescope projections", desc = "Find Projects" },
+ },
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/telescope.lua b/nvim/.config/nvim/lua/plugins/telescope.lua
new file mode 100644
index 0000000..5af98a1
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/telescope.lua
@@ -0,0 +1,28 @@
+return {
+ {
+ "nvim-telescope/telescope-ui-select.nvim",
+ },
+ {
+ "nvim-telescope/telescope.nvim",
+ -- tag = "0.1.5",
+ dependencies = { "nvim-lua/plenary.nvim" },
+ config = function()
+ require("telescope").setup({
+ extensions = {
+ ["ui-select"] = {
+ require("telescope.themes").get_dropdown({}),
+ },
+ },
+ })
+ local builtin = require("telescope.builtin")
+ vim.keymap.set("n", "", builtin.find_files, {})
+ vim.keymap.set("n", "fg", builtin.live_grep, {})
+ vim.keymap.set("n", "", builtin.oldfiles, {})
+ vim.keymap.set("n", "z=", function()
+ builtin.spell_suggest(require("telescope.themes").get_cursor({}))
+ end, {})
+ require("telescope").load_extension("ui-select")
+ require("telescope").load_extension("noice")
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/treesitter.lua b/nvim/.config/nvim/lua/plugins/treesitter.lua
new file mode 100644
index 0000000..d722213
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/treesitter.lua
@@ -0,0 +1,14 @@
+return {
+ {
+ "nvim-treesitter/nvim-treesitter",
+ build = ":TSUpdate",
+ config = function()
+ local config = require("nvim-treesitter.configs")
+ config.setup({
+ auto_install = true,
+ highlight = { enable = true },
+ indent = { enable = true },
+ })
+ end,
+ },
+}
diff --git a/nvim/.config/nvim/lua/plugins/trouble.lua b/nvim/.config/nvim/lua/plugins/trouble.lua
new file mode 100644
index 0000000..d6e434f
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/trouble.lua
@@ -0,0 +1,39 @@
+return {
+{
+ "folke/trouble.nvim",
+ opts = {}, -- for default options, refer to the configuration section for custom setup.
+ cmd = "Trouble",
+ keys = {
+ {
+ "xx",
+ "Trouble diagnostics toggle",
+ desc = "Diagnostics (Trouble)",
+ },
+ {
+ "xX",
+ "Trouble diagnostics toggle filter.buf=0",
+ desc = "Buffer Diagnostics (Trouble)",
+ },
+ {
+ "cs",
+ "Trouble symbols toggle focus=false",
+ desc = "Symbols (Trouble)",
+ },
+ {
+ "cl",
+ "Trouble lsp toggle focus=false win.position=right",
+ desc = "LSP Definitions / references / ... (Trouble)",
+ },
+ {
+ "xL",
+ "Trouble loclist toggle",
+ desc = "Location List (Trouble)",
+ },
+ {
+ "xQ",
+ "Trouble qflist toggle",
+ desc = "Quickfix List (Trouble)",
+ },
+ },
+}
+}
diff --git a/nvim/.config/nvim/lua/plugins/vim-test.lua b/nvim/.config/nvim/lua/plugins/vim-test.lua
new file mode 100644
index 0000000..500e95c
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/vim-test.lua
@@ -0,0 +1,14 @@
+return {
+ "vim-test/vim-test",
+ dependencies = {
+ "preservim/vimux"
+ },
+ config = function()
+ vim.keymap.set("n", "t", ":TestNearest", {})
+ vim.keymap.set("n", "T", ":TestFile", {})
+ vim.keymap.set("n", "a", ":TestSuite", {})
+ vim.keymap.set("n", "l", ":TestLast", {})
+ vim.keymap.set("n", "g", ":TestVisit