summaryrefslogtreecommitdiff
path: root/dot-config
diff options
context:
space:
mode:
Diffstat (limited to 'dot-config')
-rw-r--r--dot-config/aerospace/aerospace.toml120
-rw-r--r--dot-config/alacritty/alacritty.toml38
-rw-r--r--dot-config/alacritty/themes/kanagawa_dragon.toml38
-rw-r--r--dot-config/emacs/config.org230
-rw-r--r--dot-config/emacs/init.el1
-rw-r--r--dot-config/fish/config.fish43
-rw-r--r--dot-config/ghostty/config44
-rw-r--r--dot-config/ghostty/themes/iceberg-dark22
-rw-r--r--dot-config/git/config10
-rw-r--r--dot-config/git/ignore2
-rw-r--r--dot-config/helix/config.toml42
-rw-r--r--dot-config/helix/languages.toml54
-rw-r--r--dot-config/helix/themes/ayu_darkk.toml4
-rw-r--r--dot-config/nvim/.gitignore8
-rw-r--r--dot-config/nvim/.neoconf.json15
-rw-r--r--dot-config/nvim/LICENSE201
-rw-r--r--dot-config/nvim/README.md4
-rw-r--r--dot-config/nvim/init.lua2
-rw-r--r--dot-config/nvim/lazy-lock.json36
-rw-r--r--dot-config/nvim/lazyvim.json10
-rw-r--r--dot-config/nvim/lua/config/autocmds.lua8
-rw-r--r--dot-config/nvim/lua/config/keymaps.lua3
-rw-r--r--dot-config/nvim/lua/config/lazy.lua53
-rw-r--r--dot-config/nvim/lua/config/options.lua3
-rw-r--r--dot-config/nvim/lua/plugins/example.lua197
-rw-r--r--dot-config/nvim/lua/plugins/hardtime.lua7
-rw-r--r--dot-config/nvim/lua/plugins/theme.lua19
-rw-r--r--dot-config/nvim/stylua.toml3
-rwxr-xr-xdot-config/sketchybar/plugins/aerospace.sh10
-rwxr-xr-xdot-config/sketchybar/plugins/battery.sh28
-rwxr-xr-xdot-config/sketchybar/plugins/clock.sh8
-rwxr-xr-xdot-config/sketchybar/plugins/front_app.sh10
-rwxr-xr-xdot-config/sketchybar/plugins/network.sh20
-rwxr-xr-xdot-config/sketchybar/plugins/space.sh7
-rwxr-xr-xdot-config/sketchybar/plugins/volume.sh20
-rwxr-xr-xdot-config/sketchybar/sketchybarrc92
-rw-r--r--dot-config/starship.toml31
37 files changed, 1443 insertions, 0 deletions
diff --git a/dot-config/aerospace/aerospace.toml b/dot-config/aerospace/aerospace.toml
new file mode 100644
index 0000000..8cbcf75
--- /dev/null
+++ b/dot-config/aerospace/aerospace.toml
@@ -0,0 +1,120 @@
+# Available commands: https://nikitabobko.github.io/AeroSpace/commands
+after-login-command = []
+
+# Available commands : https://nikitabobko.github.io/AeroSpace/commands
+after-startup-command = ['exec-and-forget sketchybar']
+
+# Start AeroSpace at login
+start-at-login = true
+
+# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
+enable-normalization-flatten-containers = true
+enable-normalization-opposite-orientation-for-nested-containers = true
+
+# See: https://nikitabobko.github.io/AeroSpace/guide#layouts
+accordion-padding = 30
+
+# Possible values: tiles|accordion
+default-root-container-layout = 'tiles'
+
+# Possible values: horizontal|vertical|auto
+default-root-container-orientation = 'auto'
+
+# See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
+# See https://nikitabobko.github.io/AeroSpace/commands#move-mouse
+on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
+
+# You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag
+# Also see: https://nikitabobko.github.io/AeroSpace/goodies#disable-hide-app
+automatically-unhide-macos-hidden-apps = true
+
+# Notify Sketchybar about workspace change
+exec-on-workspace-change = ['/bin/bash', '-c',
+ 'sketchybar --trigger aerospace_workspace_change FOCUSED_WORKSPACE=$AEROSPACE_FOCUSED_WORKSPACE'
+]
+
+
+# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
+[key-mapping]
+preset = 'qwerty'
+
+
+# Gaps between windows (inner-*) and between monitor edges (outer-*).
+# See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
+[gaps]
+inner.horizontal = 0
+inner.vertical = 0
+outer.left = 0
+outer.bottom = 0
+outer.top = 30 # SketchyBar height
+outer.right = 0
+
+
+# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
+[mode.main.binding]
+# All possible commands: https://nikitabobko.github.io/AeroSpace/commands
+# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget
+
+# See: https://nikitabobko.github.io/AeroSpace/commands#layout
+alt-slash = 'layout tiles horizontal vertical'
+alt-comma = 'layout accordion horizontal vertical'
+
+# See: https://nikitabobko.github.io/AeroSpace/commands#focus
+alt-h = 'focus left'
+alt-j = 'focus down'
+alt-k = 'focus up'
+alt-l = 'focus right'
+
+# See: https://nikitabobko.github.io/AeroSpace/commands#move
+alt-shift-h = 'move left'
+alt-shift-j = 'move down'
+alt-shift-k = 'move up'
+alt-shift-l = 'move right'
+
+# See: https://nikitabobko.github.io/AeroSpace/commands#resize
+alt-shift-minus = 'resize smart -50'
+alt-shift-equal = 'resize smart +50'
+
+# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
+alt-1 = 'workspace 1'
+alt-2 = 'workspace 2'
+alt-3 = 'workspace 3'
+alt-4 = 'workspace 4'
+alt-5 = 'workspace 5'
+
+# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
+alt-shift-1 = 'move-node-to-workspace 1'
+alt-shift-2 = 'move-node-to-workspace 2'
+alt-shift-3 = 'move-node-to-workspace 3'
+alt-shift-4 = 'move-node-to-workspace 4'
+alt-shift-5 = 'move-node-to-workspace 5'
+
+# See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth
+alt-tab = 'workspace-back-and-forth'
+# See: https://nikitabobko.github.io/AeroSpace/commands#move-workspace-to-monitor
+alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
+
+# See: https://nikitabobko.github.io/AeroSpace/commands#mode
+alt-shift-semicolon = 'mode service'
+
+
+# 'service' binding mode declaration.
+# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
+[mode.service.binding]
+esc = ['reload-config', 'mode main']
+r = ['flatten-workspace-tree', 'mode main'] # reset layout
+f = ['layout floating tiling', 'mode main'] # Toggle between floating and tiling layout
+backspace = ['close-all-windows-but-current', 'mode main']
+
+# sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2
+#s = ['layout sticky tiling', 'mode main']
+
+alt-shift-h = ['join-with left', 'mode main']
+alt-shift-j = ['join-with down', 'mode main']
+alt-shift-k = ['join-with up', 'mode main']
+alt-shift-l = ['join-with right', 'mode main']
+
+down = 'volume down'
+up = 'volume up'
+shift-down = ['volume set 0', 'mode main']
+
diff --git a/dot-config/alacritty/alacritty.toml b/dot-config/alacritty/alacritty.toml
new file mode 100644
index 0000000..090208b
--- /dev/null
+++ b/dot-config/alacritty/alacritty.toml
@@ -0,0 +1,38 @@
+[font]
+size = 17
+[font.bold]
+style = "Heavy"
+
+[font.normal]
+family = "iosevka nerd font"
+style = "Regular"
+
+[general]
+import = ["./themes/kanagawa_dragon.toml"]
+
+[[keyboard.bindings]]
+action = "SpawnNewInstance"
+key = "N"
+mods = "Command|Shift"
+
+[[keyboard.bindings]]
+action = "None"
+key = "W"
+mods = "Command"
+
+[window]
+blur = true
+decorations = "Full"
+decorations_theme_variant = "Dark"
+dynamic_title = false
+opacity = 0.88
+option_as_alt = "OnlyLeft"
+title = "☯︎"
+
+[window.dimensions]
+columns = 99
+lines = 33
+
+[window.padding]
+x = 20
+y = 20
diff --git a/dot-config/alacritty/themes/kanagawa_dragon.toml b/dot-config/alacritty/themes/kanagawa_dragon.toml
new file mode 100644
index 0000000..a3dc784
--- /dev/null
+++ b/dot-config/alacritty/themes/kanagawa_dragon.toml
@@ -0,0 +1,38 @@
+# Colors (Kanagawa Dragon)
+# Source https//github.com/rebelot/kanagawa.nvim
+
+[colors.primary]
+background = '#181616'
+foreground = '#c5c9c5'
+
+[colors.normal]
+black = '#0d0c0c'
+blue = '#8ba4b0'
+cyan = '#8ea4a2'
+green = '#8a9a7b'
+magenta = '#a292a3'
+red = '#c4746e'
+white = '#C8C093'
+yellow = '#c4b28a'
+
+[colors.bright]
+black = '#a6a69c'
+blue = '#7FB4CA'
+cyan = '#7AA89F'
+green = '#87a987'
+magenta = '#938AA9'
+red = '#E46876'
+white = '#c5c9c5'
+yellow = '#E6C384'
+
+[colors.selection]
+background = '#2d4f67'
+foreground = '#c8c093'
+
+[[colors.indexed_colors]]
+index = 16
+color = '#ffa066'
+
+[[colors.indexed_colors]]
+index = 17
+color = '#ff5d62'
diff --git a/dot-config/emacs/config.org b/dot-config/emacs/config.org
new file mode 100644
index 0000000..2632869
--- /dev/null
+++ b/dot-config/emacs/config.org
@@ -0,0 +1,230 @@
+#+TITLE: Jose's Emacs Config
+
+Setup property for all code-blocks to tangle by default
+#+PROPERTY: header-args:emacs-lisp :tangle yes
+
+* Init
+** Package and sources and init
+Add MELPA and the https version of elps to the package sources.
+
+This should preferrably be done in the init-file, before this file is loaded to allow for byte-compiling.
+#+BEGIN_SRC emacs-lisp :tangle no
+(require 'package)
+(setq-default package-archives
+ '(("gnu" . "https://elpa.gnu.org/packages/")
+ ("melpa" . "https://melpa.org/packages/")))
+
+(setq-default package-enable-at-startup nil)
+(package-initialize)
+#+END_SRC
+
+** Set up use-package and install if missing
+This should preferrably be done in the init-file, before this file is loaded to allow for byte-compiling.
+#+BEGIN_SRC emacs-lisp :tangle no
+(unless (package-installed-p 'use-package)
+ (progn
+ (package-refresh-contents)
+ (package-install 'use-package)))
+
+(require 'use-package)
+#+END_SRC
+
+* Utils
+** Evil
+Because I'm a vimmer.
+Install the evil package if it is not installed, and call it once it has loaded.
+`evil-want-C-i-jump` to 'nil fixes an issue where evil breaks tabs in org-mode src code
+Thank you to this article for the fix: https://jeffkreeftmeijer.com/emacs-evil-org-tab/
+#+BEGIN_SRC emacs-lisp
+(use-package evil
+ :ensure t
+ :init
+ ;; set this to nil because it breaks tabs in org-mode
+ (setq evil-want-C-i-jump 'nil)
+ :config
+ (evil-mode))
+#+END_SRC
+
+** pdf-tools
+for viewing PDFs in emacs
+#+begin_src emacs-lisp
+(use-package pdf-tools
+ :ensure t
+ :config
+ (pdf-tools-install))
+
+(add-hook 'pdf-view-mode-hook
+ (lambda ()
+ ;; Disable line numbers for pdfs
+ (display-line-numbers-mode -1)
+ ;; Enable midnight mode (dark mode) by default
+ (pdf-view-midnight-minor-mode 1)))
+#+end_src
+
+* Modes
+** markdown
+Major mode for editing Markdown files
+#+begin_src emacs-lisp
+(use-package markdown-mode
+ :ensure)
+#+end_src
+
+** nov.el
+Major mode for reading EPUBs
+#+begin_src emacs-lisp
+(use-package nov
+ :ensure)
+#+end_src
+
+* Fixes
+** Org Source Code Auto-Indent
+By default, src-blocks are auto-indented 2 spaces. This breaks certain languages, as org-mode will continuously add 2 spaces on enter inside of some expressions.
+Setting indentation to 0 fixes the issue.
+#+BEGIN_SRC emacs-lisp
+(setq org-edit-src-content-indentation 0)
+#+END_SRC
+
+** Org Inline Images
+By default, Org mode displays inline images according to their actual width. By changing this value to nil, org will try to get the width from an ‘#+ATTR.*’ keyword and fall back on the original width if none is found.
+#+begin_src emacs-lisp
+(setq org-image-actual-width 'nil)
+#+end_src
+
+By default, inline images are not displayed, and must be toggled on with *C-c C-x C-v (org-toggle-inline-images)*.
+With this we ask for inline images to be displayed at startup.
+#+begin_src emacs-lisp
+(setq org-startup-with-inline-images t)
+#+end_src
+
+** Org Latex Preview
+The org latex preview from within org files is too small by default.
+#+begin_src emacs-lisp
+(setq org-format-latex-options
+ (plist-put org-format-latex-options
+ :scale 2))
+#+end_src
+
+Org latex preview uses 'divpng by default, which is blurry.
+Here we switch to 'dvivgm
+#+begin_src emacs-lisp
+(setq org-latex-create-formula-image-program 'dvisvgm)
+#+end_src
+
+* Looks
+** Theme
+#+BEGIN_SRC emacs-lisp
+(use-package gruvbox-theme
+ :ensure
+ :demand)
+
+(use-package ef-themes
+ :ensure
+ :demand)
+
+;; overrides just to make it a little less purple-y
+(setq ef-winter-palette-overrides
+ '((bg-main "#101010")
+ (bg-mode-line bg-tab-bar)))
+
+(use-package modus-themes
+ :ensure
+ :demand)
+
+(setq modus-themes-common-palette-overrides modus-themes-preset-overrides-faint)
+
+(setq modus-vivendi-palette-overrides
+ '((bg-main "#1E1E1E")
+ (fg-main "#DCDCDC")
+ (fg-heading-1 blue-faint)
+ (fg-heading-2 magenta-faint)
+ (fg-heading-3 cyan-faint)
+ (fg-heading-4 gold)
+ (fg-heading-5 olive)
+ (fg-heading-6 slate)
+ (fg-heading-7 indigo)
+ (fg-heading-8 pink)
+ (bg-prose-block-contents "#323232")
+ (bg-prose-block-delimiter "#323232")
+ (border-mode-line-active "#000000")
+ (border-mode-line-inactive "#000000")))
+
+(setq modus-themes-bold-constructs t)
+(setq modus-themes-italic-constructs t)
+
+(load-theme 'modus-vivendi)
+#+END_SRC
+
+** Font
+#+BEGIN_SRC emacs-lisp
+(add-to-list 'default-frame-alist
+ '(font . "iosevka nerd font-16"))
+#+END_SRC
+
+* UI
+** Starutp Screen
+Disable the startup screen
+#+BEGIN_SRC emacs-lisp
+(setq inhibit-startup-screen t)
+(setq inhibit-startup-message t)
+(setq inhibit-startup-echo-area-message t)
+#+END_SRC
+
+** Bars
+Disable the menu bar, tool bar, and scroll bar.
+#+BEGIN_SRC emacs-lisp
+(menu-bar-mode -1)
+(tool-bar-mode -1)
+(scroll-bar-mode -1)
+#+END_SRC
+
+** Cursor
+Disable the blinking cursor
+#+BEGIN_SRC emacs-lisp
+(blink-cursor-mode -1)
+#+END_SRC
+
+** Scrolling
+Scroll only one line (instead of jumping like it does by default)
+#+BEGIN_SRC emacs-lisp
+(setq scroll-conservatively most-positive-fixnum)
+#+END_SRC
+
+** Line Numbers
+Display line numbers, and let the current line be 0 instead of its actual value
+#+BEGIN_SRC emacs-lisp
+(setq display-line-numbers-type 'relative
+ display-line-numbers-current-absolute 'nil)
+(global-display-line-numbers-mode t)
+#+END_SRC
+
+** Bell
+The bell sound is so annoying to me. Disable it.
+Future consideration: visible bell is available, but it is big and ugly. Maybe customize in the future.
+#+BEGIN_SRC emacs-lisp
+(setq ring-bell-function 'ignore)
+#+END_SRC
+
+* UX
+** Org Agenda
+Custom org agenda views
+#+begin_src emacs-lisp
+(setq org-agenda-custom-commands
+ '(("w" "my weekly" agenda ""
+ ((org-agenda-span 365)
+ (org-agenda-time-grid nil)
+ (org-agenda-repeating-timestamp-show-all t)
+ (org-agenda-entry-types '(:timestamp :sexp))))
+ ))
+#+end_src
+* Languages
+#+BEGIN_SRC emacs-lisp
+(org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((python . t)))
+#+END_SRC
+
+configure python
+#+begin_src emacs-lisp
+(setq python-indent-offset 4
+ python-indent-guess-indent-offset 'nil)
+#+end_src
diff --git a/dot-config/emacs/init.el b/dot-config/emacs/init.el
new file mode 100644
index 0000000..f12efca
--- /dev/null
+++ b/dot-config/emacs/init.el
@@ -0,0 +1 @@
+(org-babel-load-file (expand-file-name "config.org" user-emacs-directory))
diff --git a/dot-config/fish/config.fish b/dot-config/fish/config.fish
new file mode 100644
index 0000000..f8fcc91
--- /dev/null
+++ b/dot-config/fish/config.fish
@@ -0,0 +1,43 @@
+# Setup Homebrew
+# Source of code: https://github.com/orgs/Homebrew/discussions/4412#discussioncomment-8651316
+if test -d /home/linuxbrew/.linuxbrew # Linux
+ set -gx HOMEBREW_PREFIX "/home/linuxbrew/.linuxbrew"
+ set -gx HOMEBREW_CELLAR "$HOMEBREW_PREFIX/Cellar"
+ set -gx HOMEBREW_REPOSITORY "$HOMEBREW_PREFIX/Homebrew"
+else if test -d /opt/homebrew # MacOS
+ set -gx HOMEBREW_PREFIX /opt/homebrew
+ set -gx HOMEBREW_CELLAR "$HOMEBREW_PREFIX/Cellar"
+ set -gx HOMEBREW_REPOSITORY "$HOMEBREW_PREFIX/homebrew"
+ # Add SSH key to ssh-agent and store passphrase
+ # see https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
+ ssh-add --apple-use-keychain ~/.ssh/id_ed25519
+end
+fish_add_path -gP "$HOMEBREW_PREFIX/bin" "$HOMEBREW_PREFIX/sbin"
+! set -q MANPATH; and set MANPATH ''
+set -gx MANPATH "$HOMEBREW_PREFIX/share/man" $MANPATH
+! set -q INFOPATH; and set INFOPATH ''
+set -gx INFOPATH "$HOMEBREW_PREFIX/share/info" $INFOPATH
+
+# Hook direnv
+# Source: https://direnv.net/docs/hook.html
+direnv hook fish | source
+
+# the reverse of fish_remove_path
+# fish doesn't provide this out of the box, so we provide our own
+# see https://fishshell.com/docs/current/cmds/fish_add_path.html#index-8 for fish_add_path
+# source: https://github.com/fish-shell/fish-shell/issues/8604#issuecomment-1169638533
+function fish_remove_path
+ if set -l index (contains -i "$argv" $fish_user_paths)
+ set -e fish_user_paths[$index]
+ echo "Removed $argv from the path"
+ end
+end
+
+# Kitty shell alias
+alias ks="kitten ssh"
+
+# Nvim alias
+alias v="nvim"
+
+# Starship
+starship init fish | source
diff --git a/dot-config/ghostty/config b/dot-config/ghostty/config
new file mode 100644
index 0000000..9246382
--- /dev/null
+++ b/dot-config/ghostty/config
@@ -0,0 +1,44 @@
+# Ghostty config
+
+font-family = "PragmataPro Mono Liga"
+
+font-style = Regular
+font-style-bold = Bold
+font-style-italic = Italic
+font-style-bold-italic = Bold Italic
+
+font-size = 19
+
+# theme from https://terminalcolors.com/themes/iceberg/dark/
+theme = "iceberg-dark"
+background = #0f1419
+foreground = #c5c9c5
+
+title = "󰊠"
+
+macos-titlebar-style = "tabs"
+
+window-padding-x = 20
+window-padding-y = 20
+
+# Split keybinds
+keybind = super+ctrl+h=new_split:left
+keybind = super+ctrl+j=new_split:down
+keybind = super+ctrl+k=new_split:up
+keybind = super+ctrl+l=new_split:right
+
+keybind = super+shift+h=goto_split:left
+keybind = super+shift+j=goto_split:bottom
+keybind = super+shift+k=goto_split:top
+keybind = super+shift+l=goto_split:right
+
+keybind = super+alt+h=resize_split:left,10
+keybind = super+alt+j=resize_split:down,10
+keybind = super+alt+k=resize_split:up,10
+keybind = super+alt+l=resize_split:right,10
+
+keybind = super+left_bracket=goto_split:previous
+keybind = super+right_bracket=goto_split:next
+
+keybind = super+shift+enter=toggle_split_zoom
+keybind = super+alt+equal=equalize_splits
diff --git a/dot-config/ghostty/themes/iceberg-dark b/dot-config/ghostty/themes/iceberg-dark
new file mode 100644
index 0000000..d2c41d3
--- /dev/null
+++ b/dot-config/ghostty/themes/iceberg-dark
@@ -0,0 +1,22 @@
+background = #161821
+foreground = #c6c8d1
+selection-background = #272c42
+selection-foreground = #c6c8d1
+cursor-color = #c6c8d1
+cursor-text = #161821
+palette = 0=#1e2132
+palette = 1=#e27878
+palette = 2=#b4be82
+palette = 3=#e2a478
+palette = 4=#84a0c6
+palette = 5=#a093c7
+palette = 6=#89b8c2
+palette = 7=#c6c8d1
+palette = 8=#6b7089
+palette = 9=#e98989
+palette = 10=#c0ca8e
+palette = 11=#e9b189
+palette = 12=#91acd1
+palette = 13=#ada0d3
+palette = 14=#95c4ce
+palette = 15=#d2d4de
diff --git a/dot-config/git/config b/dot-config/git/config
new file mode 100644
index 0000000..8387076
--- /dev/null
+++ b/dot-config/git/config
@@ -0,0 +1,10 @@
+
+[core]
+ editor = "vim"
+
+[init]
+ defaultBranch = "main"
+
+[user]
+ email = "yo@joseloeza.dev"
+ name = "José Loeza"
diff --git a/dot-config/git/ignore b/dot-config/git/ignore
new file mode 100644
index 0000000..143e502
--- /dev/null
+++ b/dot-config/git/ignore
@@ -0,0 +1,2 @@
+**/.DS_Store
+**/._.DS_Store
diff --git a/dot-config/helix/config.toml b/dot-config/helix/config.toml
new file mode 100644
index 0000000..4d08cd8
--- /dev/null
+++ b/dot-config/helix/config.toml
@@ -0,0 +1,42 @@
+theme = "ayu_darkk"
+
+[editor]
+"line-number" = "relative"
+
+[editor.soft-wrap]
+enable = true
+
+[editor.lsp]
+"display-messages" = false
+"display-inlay-hints" = false
+
+[keys.normal]
+# Use system clipboard
+p = "paste_clipboard_after"
+P = "paste_clipboard_before"
+y = "yank_to_clipboard"
+Y = "yank_joined_to_clipboard"
+R = "replace_selections_with_clipboard"
+d = "delete_selection_noyank"
+"A-d" = ["yank_to_clipboard", "delete_selection_noyank"]
+
+"0" = "goto_line_start"
+"C-," = "remove_primary_selection"
+
+[keys.select]
+# Use system clipboard
+p = "paste_clipboard_after"
+P = "paste_clipboard_before"
+y = "yank_to_clipboard"
+Y = "yank_joined_to_clipboard"
+R = "replace_selections_with_clipboard"
+d = "delete_selection_noyank"
+"A-d" = ["yank_to_clipboard", "delete_selection_noyank"]
+
+"0" = "goto_line_start"
+
+[keys.normal." "]
+y = "yank"
+p = "paste_after"
+P = "paste_before"
+R = "replace_with_yanked"
diff --git a/dot-config/helix/languages.toml b/dot-config/helix/languages.toml
new file mode 100644
index 0000000..d0bcab0
--- /dev/null
+++ b/dot-config/helix/languages.toml
@@ -0,0 +1,54 @@
+[[language]]
+name = "rust"
+formatter = { command = "rustfmt" }
+rulers = [80, 100]
+
+[[language]]
+name = "nix"
+formatter = { command = "nixfmt" }
+auto-format = true
+
+[[language]]
+name = "typst"
+formatter = { command="typstyle" }
+auto-format = true
+rulers = [80]
+
+[[language]]
+name = "astro"
+language-servers = [ "astro-ls" ]
+formatter = { command = "prettier", args = ["--plugin", "prettier-plugin-astro", "--parser", "astro"] }
+auto-format = true
+
+[language-server.astro-ls]
+command = "astro-ls"
+args = ["--stdio"]
+# because astro-ls requires the path to typescript,
+# hx must be started within the Astro project root for this to work
+# see https://github.com/helix-editor/helix/discussions/4743
+config = { "typescript" = { "tsdk" = "./node_modules/typescript/lib" } }
+
+[[language]]
+name = "html"
+formatter = { command="prettier", args = ["--parser", "html"] }
+auto-format = true
+
+[[language]]
+name = "css"
+formatter = { command="prettier", args = ["--parser", "css"] }
+auto-format = true
+
+[[language]]
+name = "javascript"
+formatter = { command="prettier", args = ["--parser", "babel"] }
+auto-format = true
+
+[[language]]
+name = "typescript"
+formatter = { command="prettier", args = ["--parser", "typescript"] }
+auto-format = true
+
+[[language]]
+name = "jsx"
+formatter = { command="prettier", args = ["--parser", "babel"] }
+auto-format = true
diff --git a/dot-config/helix/themes/ayu_darkk.toml b/dot-config/helix/themes/ayu_darkk.toml
new file mode 100644
index 0000000..7a2373c
--- /dev/null
+++ b/dot-config/helix/themes/ayu_darkk.toml
@@ -0,0 +1,4 @@
+inherits = "ayu_dark"
+
+# Remove background color
+"ui.background" = {}
diff --git a/dot-config/nvim/.gitignore b/dot-config/nvim/.gitignore
new file mode 100644
index 0000000..cc5457a
--- /dev/null
+++ b/dot-config/nvim/.gitignore
@@ -0,0 +1,8 @@
+tt.*
+.tests
+doc/tags
+debug
+.repro
+foo.*
+*.log
+data
diff --git a/dot-config/nvim/.neoconf.json b/dot-config/nvim/.neoconf.json
new file mode 100644
index 0000000..7c48087
--- /dev/null
+++ b/dot-config/nvim/.neoconf.json
@@ -0,0 +1,15 @@
+{
+ "neodev": {
+ "library": {
+ "enabled": true,
+ "plugins": true
+ }
+ },
+ "neoconf": {
+ "plugins": {
+ "lua_ls": {
+ "enabled": true
+ }
+ }
+ }
+}
diff --git a/dot-config/nvim/LICENSE b/dot-config/nvim/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/dot-config/nvim/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/dot-config/nvim/README.md b/dot-config/nvim/README.md
new file mode 100644
index 0000000..185280b
--- /dev/null
+++ b/dot-config/nvim/README.md
@@ -0,0 +1,4 @@
+# 💤 LazyVim
+
+A starter template for [LazyVim](https://github.com/LazyVim/LazyVim).
+Refer to the [documentation](https://lazyvim.github.io/installation) to get started.
diff --git a/dot-config/nvim/init.lua b/dot-config/nvim/init.lua
new file mode 100644
index 0000000..2514f9e
--- /dev/null
+++ b/dot-config/nvim/init.lua
@@ -0,0 +1,2 @@
+-- bootstrap lazy.nvim, LazyVim and your plugins
+require("config.lazy")
diff --git a/dot-config/nvim/lazy-lock.json b/dot-config/nvim/lazy-lock.json
new file mode 100644
index 0000000..44cb924
--- /dev/null
+++ b/dot-config/nvim/lazy-lock.json
@@ -0,0 +1,36 @@
+{
+ "LazyVim": { "branch": "main", "commit": "25abbf546d564dc484cf903804661ba12de45507" },
+ "blink.cmp": { "branch": "main", "commit": "022521a8910a5543b0251b21c9e1a1e989745796" },
+ "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
+ "catppuccin": { "branch": "main", "commit": "fa42eb5e26819ef58884257d5ae95dd0552b9a66" },
+ "conform.nvim": { "branch": "master", "commit": "8132ec733eed3bf415b97b76797ca41b59f51d7d" },
+ "flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" },
+ "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
+ "gitsigns.nvim": { "branch": "main", "commit": "731b581428ec6c1ccb451b95190ebbc6d7006db7" },
+ "grug-far.nvim": { "branch": "main", "commit": "1a85fba510c6086b396be5a3c7c77ab32829d7df" },
+ "gruvbox-material": { "branch": "master", "commit": "f5f912fbc7cf2d45da6928b792d554f85c7aa89a" },
+ "hardtime.nvim": { "branch": "main", "commit": "145b930954a3146cfb5b8a73cdcad42eb7d2740c" },
+ "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
+ "lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
+ "lualine.nvim": { "branch": "master", "commit": "a94fc68960665e54408fe37dcf573193c4ce82c9" },
+ "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" },
+ "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
+ "mini.ai": { "branch": "main", "commit": "95e9d77e58bdf633c4d0c6b8c72892dd10eada51" },
+ "mini.icons": { "branch": "main", "commit": "397ed3807e96b59709ef3292f0a3e253d5c1dc0a" },
+ "mini.pairs": { "branch": "main", "commit": "69864a2efb36c030877421634487fd90db1e4298" },
+ "noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" },
+ "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
+ "nvim-lint": { "branch": "master", "commit": "cc26ae6a620298bb3f33b0e0681f99a10ae57781" },
+ "nvim-lspconfig": { "branch": "master", "commit": "f6d31b1c17f1a338ddcf56aaa930a8c88e904662" },
+ "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
+ "nvim-treesitter-textobjects": { "branch": "master", "commit": "0f051e9813a36481f48ca1f833897210dbcfffde" },
+ "nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
+ "persistence.nvim": { "branch": "main", "commit": "166a79a55bfa7a4db3e26fc031b4d92af71d0b51" },
+ "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
+ "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
+ "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
+ "tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" },
+ "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" },
+ "ts-comments.nvim": { "branch": "main", "commit": "1bd9d0ba1d8b336c3db50692ffd0955fe1bb9f0c" },
+ "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
+}
diff --git a/dot-config/nvim/lazyvim.json b/dot-config/nvim/lazyvim.json
new file mode 100644
index 0000000..6206f7e
--- /dev/null
+++ b/dot-config/nvim/lazyvim.json
@@ -0,0 +1,10 @@
+{
+ "extras": [
+
+ ],
+ "install_version": 8,
+ "news": {
+ "NEWS.md": "10960"
+ },
+ "version": 8
+} \ No newline at end of file
diff --git a/dot-config/nvim/lua/config/autocmds.lua b/dot-config/nvim/lua/config/autocmds.lua
new file mode 100644
index 0000000..4221e75
--- /dev/null
+++ b/dot-config/nvim/lua/config/autocmds.lua
@@ -0,0 +1,8 @@
+-- Autocmds are automatically loaded on the VeryLazy event
+-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
+--
+-- Add any additional autocmds here
+-- with `vim.api.nvim_create_autocmd`
+--
+-- Or remove existing autocmds by their group name (which is prefixed with `lazyvim_` for the defaults)
+-- e.g. vim.api.nvim_del_augroup_by_name("lazyvim_wrap_spell")
diff --git a/dot-config/nvim/lua/config/keymaps.lua b/dot-config/nvim/lua/config/keymaps.lua
new file mode 100644
index 0000000..2c134f7
--- /dev/null
+++ b/dot-config/nvim/lua/config/keymaps.lua
@@ -0,0 +1,3 @@
+-- Keymaps are automatically loaded on the VeryLazy event
+-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
+-- Add any additional keymaps here
diff --git a/dot-config/nvim/lua/config/lazy.lua b/dot-config/nvim/lua/config/lazy.lua
new file mode 100644
index 0000000..d73bfa1
--- /dev/null
+++ b/dot-config/nvim/lua/config/lazy.lua
@@ -0,0 +1,53 @@
+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)
+
+require("lazy").setup({
+ spec = {
+ -- add LazyVim and import its plugins
+ { "LazyVim/LazyVim", import = "lazyvim.plugins" },
+ -- import/override with your plugins
+ { import = "plugins" },
+ },
+ defaults = {
+ -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
+ -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
+ lazy = false,
+ -- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
+ -- have outdated releases, which may break your Neovim install.
+ version = false, -- always use the latest git commit
+ -- version = "*", -- try installing the latest stable version for plugins that support semver
+ },
+ install = { colorscheme = { "tokyonight", "habamax" } },
+ checker = {
+ enabled = true, -- check for plugin updates periodically
+ notify = false, -- notify on update
+ }, -- automatically check for plugin updates
+ performance = {
+ rtp = {
+ -- disable some rtp plugins
+ disabled_plugins = {
+ "gzip",
+ -- "matchit",
+ -- "matchparen",
+ -- "netrwPlugin",
+ "tarPlugin",
+ "tohtml",
+ "tutor",
+ "zipPlugin",
+ },
+ },
+ },
+})
diff --git a/dot-config/nvim/lua/config/options.lua b/dot-config/nvim/lua/config/options.lua
new file mode 100644
index 0000000..3ea1454
--- /dev/null
+++ b/dot-config/nvim/lua/config/options.lua
@@ -0,0 +1,3 @@
+-- Options are automatically loaded before lazy.nvim startup
+-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
+-- Add any additional options here
diff --git a/dot-config/nvim/lua/plugins/example.lua b/dot-config/nvim/lua/plugins/example.lua
new file mode 100644
index 0000000..17f53d6
--- /dev/null
+++ b/dot-config/nvim/lua/plugins/example.lua
@@ -0,0 +1,197 @@
+-- since this is just an example spec, don't actually load anything here and return an empty spec
+-- stylua: ignore
+if true then return {} end
+
+-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim
+--
+-- In your plugin files, you can:
+-- * add extra plugins
+-- * disable/enabled LazyVim plugins
+-- * override the configuration of LazyVim plugins
+return {
+ -- add gruvbox
+ { "ellisonleao/gruvbox.nvim" },
+
+ -- Configure LazyVim to load gruvbox
+ {
+ "LazyVim/LazyVim",
+ opts = {
+ colorscheme = "gruvbox",
+ },
+ },
+
+ -- change trouble config
+ {
+ "folke/trouble.nvim",
+ -- opts will be merged with the parent spec
+ opts = { use_diagnostic_signs = true },
+ },
+
+ -- disable trouble
+ { "folke/trouble.nvim", enabled = false },
+
+ -- override nvim-cmp and add cmp-emoji
+ {
+ "hrsh7th/nvim-cmp",
+ dependencies = { "hrsh7th/cmp-emoji" },
+ ---@param opts cmp.ConfigSchema
+ opts = function(_, opts)
+ table.insert(opts.sources, { name = "emoji" })
+ end,
+ },
+
+ -- change some telescope options and a keymap to browse plugin files
+ {
+ "nvim-telescope/telescope.nvim",
+ keys = {
+ -- add a keymap to browse plugin files
+ -- stylua: ignore
+ {
+ "<leader>fp",
+ function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end,
+ desc = "Find Plugin File",
+ },
+ },
+ -- change some options
+ opts = {
+ defaults = {
+ layout_strategy = "horizontal",
+ layout_config = { prompt_position = "top" },
+ sorting_strategy = "ascending",
+ winblend = 0,
+ },
+ },
+ },
+
+ -- add pyright to lspconfig
+ {
+ "neovim/nvim-lspconfig",
+ ---@class PluginLspOpts
+ opts = {
+ ---@type lspconfig.options
+ servers = {
+ -- pyright will be automatically installed with mason and loaded with lspconfig
+ pyright = {},
+ },
+ },
+ },
+
+ -- add tsserver and setup with typescript.nvim instead of lspconfig
+ {
+ "neovim/nvim-lspconfig",
+ dependencies = {
+ "jose-elias-alvarez/typescript.nvim",
+ init = function()
+ require("lazyvim.util").lsp.on_attach(function(_, buffer)
+ -- stylua: ignore
+ vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" })
+ vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer })
+ end)
+ end,
+ },
+ ---@class PluginLspOpts
+ opts = {
+ ---@type lspconfig.options
+ servers = {
+ -- tsserver will be automatically installed with mason and loaded with lspconfig
+ tsserver = {},
+ },
+ -- you can do any additional lsp server setup here
+ -- return true if you don't want this server to be setup with lspconfig
+ ---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
+ setup = {
+ -- example to setup with typescript.nvim
+ tsserver = function(_, opts)
+ require("typescript").setup({ server = opts })
+ return true
+ end,
+ -- Specify * to use this function as a fallback for any server
+ -- ["*"] = function(server, opts) end,
+ },
+ },
+ },
+
+ -- for typescript, LazyVim also includes extra specs to properly setup lspconfig,
+ -- treesitter, mason and typescript.nvim. So instead of the above, you can use:
+ { import = "lazyvim.plugins.extras.lang.typescript" },
+
+ -- add more treesitter parsers
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = {
+ ensure_installed = {
+ "bash",
+ "html",
+ "javascript",
+ "json",
+ "lua",
+ "markdown",
+ "markdown_inline",
+ "python",
+ "query",
+ "regex",
+ "tsx",
+ "typescript",
+ "vim",
+ "yaml",
+ },
+ },
+ },
+
+ -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above
+ -- would overwrite `ensure_installed` with the new value.
+ -- If you'd rather extend the default config, use the code below instead:
+ {
+ "nvim-treesitter/nvim-treesitter",
+ opts = function(_, opts)
+ -- add tsx and treesitter
+ vim.list_extend(opts.ensure_installed, {
+ "tsx",
+ "typescript",
+ })
+ end,
+ },
+
+ -- the opts function can also be used to change the default opts:
+ {
+ "nvim-lualine/lualine.nvim",
+ event = "VeryLazy",
+ opts = function(_, opts)
+ table.insert(opts.sections.lualine_x, {
+ function()
+ return "😄"
+ end,
+ })
+ end,
+ },
+
+ -- or you can return new options to override all the defaults
+ {
+ "nvim-lualine/lualine.nvim",
+ event = "VeryLazy",
+ opts = function()
+ return {
+ --[[add your custom lualine config here]]
+ }
+ end,
+ },
+
+ -- use mini.starter instead of alpha
+ { import = "lazyvim.plugins.extras.ui.mini-starter" },
+
+ -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc
+ { import = "lazyvim.plugins.extras.lang.json" },
+
+ -- add any tools you want to have installed below
+ {
+ "williamboman/mason.nvim",
+ opts = {
+ ensure_installed = {
+ "stylua",
+ "shellcheck",
+ "shfmt",
+ "flake8",
+ },
+ },
+ },
+}
diff --git a/dot-config/nvim/lua/plugins/hardtime.lua b/dot-config/nvim/lua/plugins/hardtime.lua
new file mode 100644
index 0000000..7e6837b
--- /dev/null
+++ b/dot-config/nvim/lua/plugins/hardtime.lua
@@ -0,0 +1,7 @@
+-- https://github.com/m4xshen/hardtime.nvim
+return {
+ "m4xshen/hardtime.nvim",
+ lazy = false,
+ dependencies = { "MunifTanjim/nui.nvim" },
+ opts = {},
+}
diff --git a/dot-config/nvim/lua/plugins/theme.lua b/dot-config/nvim/lua/plugins/theme.lua
new file mode 100644
index 0000000..2969c42
--- /dev/null
+++ b/dot-config/nvim/lua/plugins/theme.lua
@@ -0,0 +1,19 @@
+return {
+ -- gruvbox material
+ -- https://github.com/sainnhe/gruvbox-material
+ {
+ "sainnhe/gruvbox-material",
+ lazy = false,
+ priority = 1000,
+ config = function()
+ vim.g.gruvbox_material_transparent_background = 2
+ end,
+ },
+
+ {
+ "LazyVim/LazyVim",
+ opts = {
+ colorscheme = "gruvbox-material",
+ },
+ },
+}
diff --git a/dot-config/nvim/stylua.toml b/dot-config/nvim/stylua.toml
new file mode 100644
index 0000000..5d6c50d
--- /dev/null
+++ b/dot-config/nvim/stylua.toml
@@ -0,0 +1,3 @@
+indent_type = "Spaces"
+indent_width = 2
+column_width = 120 \ No newline at end of file
diff --git a/dot-config/sketchybar/plugins/aerospace.sh b/dot-config/sketchybar/plugins/aerospace.sh
new file mode 100755
index 0000000..6114c3d
--- /dev/null
+++ b/dot-config/sketchybar/plugins/aerospace.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+# make sure it's executable with:
+# chmod +x ~/.config/sketchybar/plugins/aerospace.sh
+
+if [ "$1" = "$FOCUSED_WORKSPACE" ]; then
+ sketchybar --set $NAME background.drawing=on
+else
+ sketchybar --set $NAME background.drawing=off
+fi
diff --git a/dot-config/sketchybar/plugins/battery.sh b/dot-config/sketchybar/plugins/battery.sh
new file mode 100755
index 0000000..9dd9627
--- /dev/null
+++ b/dot-config/sketchybar/plugins/battery.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+PERCENTAGE="$(pmset -g batt | grep -Eo "\d+%" | cut -d% -f1)"
+CHARGING="$(pmset -g batt | grep 'AC Power')"
+
+if [ "$PERCENTAGE" = "" ]; then
+ exit 0
+fi
+
+case "${PERCENTAGE}" in
+ 9[0-9]|100) ICON=""
+ ;;
+ [6-8][0-9]) ICON=""
+ ;;
+ [3-5][0-9]) ICON=""
+ ;;
+ [1-2][0-9]) ICON=""
+ ;;
+ *) ICON=""
+esac
+
+if [[ "$CHARGING" != "" ]]; then
+ ICON=""
+fi
+
+# The item invoking this script (name $NAME) will get its icon and label
+# updated with the current battery status
+sketchybar --set "$NAME" icon="$ICON" label="${PERCENTAGE}%"
diff --git a/dot-config/sketchybar/plugins/clock.sh b/dot-config/sketchybar/plugins/clock.sh
new file mode 100755
index 0000000..edb27d5
--- /dev/null
+++ b/dot-config/sketchybar/plugins/clock.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# The $NAME variable is passed from sketchybar and holds the name of
+# the item invoking this script:
+# https://felixkratz.github.io/SketchyBar/config/events#events-and-scripting
+
+sketchybar --set "$NAME" label="$(date '+%a %b %d %I:%M %p')"
+
diff --git a/dot-config/sketchybar/plugins/front_app.sh b/dot-config/sketchybar/plugins/front_app.sh
new file mode 100755
index 0000000..fb6d0b3
--- /dev/null
+++ b/dot-config/sketchybar/plugins/front_app.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# Some events send additional information specific to the event in the $INFO
+# variable. E.g. the front_app_switched event sends the name of the newly
+# focused application in the $INFO variable:
+# https://felixkratz.github.io/SketchyBar/config/events#events-and-scripting
+
+if [ "$SENDER" = "front_app_switched" ]; then
+ sketchybar --set "$NAME" label="$INFO"
+fi
diff --git a/dot-config/sketchybar/plugins/network.sh b/dot-config/sketchybar/plugins/network.sh
new file mode 100755
index 0000000..e1790ae
--- /dev/null
+++ b/dot-config/sketchybar/plugins/network.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+NETWORK="$(scutil --nwi | awk -F': ' '/Network interfaces/ {print $2;}')"
+
+# Split devices into array
+IFS=' ' read -ra SERVICES <<< "$NETWORK"
+
+# Check the first device
+case "${SERVICES}" in
+ # check if no devices
+ "") ICON="󰤯"
+ ;;
+ # if en0, then wifi
+ "en0") ICON=""
+ ;;
+ # else, must be hardwired
+ *) ICON=""
+esac
+
+sketchybar --set "$NAME" icon="$ICON"
diff --git a/dot-config/sketchybar/plugins/space.sh b/dot-config/sketchybar/plugins/space.sh
new file mode 100755
index 0000000..b8602b5
--- /dev/null
+++ b/dot-config/sketchybar/plugins/space.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# The $SELECTED variable is available for space components and indicates if
+# the space invoking this script (with name: $NAME) is currently selected:
+# https://felixkratz.github.io/SketchyBar/config/components#space----associate-mission-control-spaces-with-an-item
+
+sketchybar --set "$NAME" background.drawing="$SELECTED"
diff --git a/dot-config/sketchybar/plugins/volume.sh b/dot-config/sketchybar/plugins/volume.sh
new file mode 100755
index 0000000..6e69a5d
--- /dev/null
+++ b/dot-config/sketchybar/plugins/volume.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# The volume_change event supplies a $INFO variable in which the current volume
+# percentage is passed to the script.
+
+if [ "$SENDER" = "volume_change" ]; then
+ VOLUME="$INFO"
+
+ case "$VOLUME" in
+ [6-9][0-9]|100) ICON="󰕾"
+ ;;
+ [3-5][0-9]) ICON="󰖀"
+ ;;
+ [1-9]|[1-2][0-9]) ICON="󰕿"
+ ;;
+ *) ICON="󰖁"
+ esac
+
+ sketchybar --set "$NAME" icon="$ICON" label="$VOLUME%"
+fi
diff --git a/dot-config/sketchybar/sketchybarrc b/dot-config/sketchybar/sketchybarrc
new file mode 100755
index 0000000..3f120c6
--- /dev/null
+++ b/dot-config/sketchybar/sketchybarrc
@@ -0,0 +1,92 @@
+PLUGIN_DIR="$CONFIG_DIR/plugins"
+
+# https://felixkratz.github.io/SketchyBar/config/bar
+bar=(
+ position=top
+ height=30
+ blur_radius=30
+ color=0x10000000
+ sticky=on
+ font_smoothing=on
+ sticky=true
+ margin=0
+)
+
+# https://felixkratz.github.io/SketchyBar/config/items
+default=(
+ padding_left=5
+ padding_right=5
+ icon.font="Iosevka Nerd Font:Bold:18.0"
+ label.font="Atkinson Hyperlegible:Regular:17.0"
+ icon.color=0xffffffff
+ label.color=0xffffffff
+ icon.padding_left=4
+ icon.padding_right=4
+ label.padding_left=4
+ label.padding_right=4
+)
+
+sketchybar --default "${default[@]}" --bar "${bar[@]}"
+
+
+##### Adding Mission Control Space Indicators #####
+# Let's add some mission control spaces:
+# https://felixkratz.github.io/SketchyBar/config/components#space----associate-mission-control-spaces-with-an-item
+# to indicate active and available mission control spaces.
+
+##### Adding Left Items #####
+# We add some regular items to the left side of the bar, where
+# only the properties deviating from the current defaults need to be set
+
+sketchybar --add item apple left \
+ --set apple icon= label.drawing=off \
+
+##### Adding Right Items #####
+# In the same way as the left items we can add items to the right side.
+# Additional position (e.g. center) are available, see:
+# https://felixkratz.github.io/SketchyBar/config/items#adding-items-to-sketchybar
+
+# Some items refresh on a fixed cycle, e.g. the clock runs its script once
+# every 10s. Other items respond to events they subscribe to, e.g. the
+# volume.sh script is only executed once an actual change in system audio
+# volume is registered. More info about the event system can be found here:
+# https://felixkratz.github.io/SketchyBar/config/events
+
+sketchybar --add item clock right \
+ --set clock update_freq=1 script="$PLUGIN_DIR/clock.sh" \
+ --add item volume right \
+ --set volume script="$PLUGIN_DIR/volume.sh" \
+ --subscribe volume volume_change \
+ --add item battery right \
+ --set battery update_freq=120 script="$PLUGIN_DIR/battery.sh" \
+ --subscribe battery system_woke power_source_change
+
+## Network
+sketchybar --add item network right \
+ --set network script="$PLUGIN_DIR/network.sh" \
+ --subscribe network wifi_change
+
+## Aerospace
+sketchybar --add event aerospace_workspace_change
+
+for sid in $(aerospace list-workspaces --all); do
+ sketchybar --add item space.$sid left \
+ --subscribe space.$sid aerospace_workspace_change \
+ --set space.$sid \
+ background.color=0x44ffffff \
+ background.corner_radius=5 \
+ background.height=20 \
+ background.drawing=off \
+ label="$sid" \
+ click_script="aerospace workspace $sid" \
+ script="$CONFIG_DIR/plugins/aerospace.sh $sid"
+done
+
+## Current app
+sketchybar --add item front_app left \
+ --set front_app icon.drawing=off script="$PLUGIN_DIR/front_app.sh" \
+ --subscribe front_app front_app_switched
+
+##### Force all scripts to run the first time (never do this in a script) #####
+sketchybar --hotload true
+sketchybar --update
diff --git a/dot-config/starship.toml b/dot-config/starship.toml
new file mode 100644
index 0000000..8ccb289
--- /dev/null
+++ b/dot-config/starship.toml
@@ -0,0 +1,31 @@
+format = "$username$hostname$directory$git_branch$git_commit$git_state$git_status$cmd_duration$line_break$character"
+[character]
+error_symbol = "[\\$ ](bold red)"
+format = "$symbol"
+success_symbol = "[\\$ ](bold yellow)"
+
+[git_branch]
+format = "[$symbol$branch(:$remote_branch)]($style) "
+only_attached = false
+style = "bold green"
+symbol = " "
+
+[git_commit]
+format = "[( $hash $tag)]($style) "
+style = "bold green"
+tag_disabled = false
+tag_symbol = " "
+
+[git_status]
+format = "[($all_status$ahead_behind)]($style)"
+style = "bold red"
+
+[hostname]
+format = "[$ssh_symbol$hostname]($style) "
+ssh_only = false
+style = "italic purple"
+
+[username]
+format = "[$user@]($style)"
+show_always = true
+style_user = "bold purple"