From ef91c646f7d7ce5a2547ce9badae64572d6fa1f4 Mon Sep 17 00:00:00 2001 From: José Juan Loeza Sierra Date: Fri, 13 Jun 2025 01:02:52 -0700 Subject: move all into one single .config directory Moves of the config files into a single dot-config directory, simplifying the structure and the usage of stow. dot-config gets processed into .config by stow. See the `--dotfiles` option at https://www.gnu.org/software/stow/manual/stow.html#Invoking-Stow for more information --- dot-config/aerospace/aerospace.toml | 120 ++++++++++++ dot-config/alacritty/alacritty.toml | 38 ++++ dot-config/alacritty/themes/kanagawa_dragon.toml | 38 ++++ dot-config/emacs/config.org | 230 +++++++++++++++++++++++ dot-config/emacs/init.el | 1 + dot-config/fish/config.fish | 43 +++++ dot-config/ghostty/config | 44 +++++ dot-config/ghostty/themes/iceberg-dark | 22 +++ dot-config/git/config | 10 + dot-config/git/ignore | 2 + dot-config/helix/config.toml | 42 +++++ dot-config/helix/languages.toml | 54 ++++++ dot-config/helix/themes/ayu_darkk.toml | 4 + dot-config/nvim/.gitignore | 8 + dot-config/nvim/.neoconf.json | 15 ++ dot-config/nvim/LICENSE | 201 ++++++++++++++++++++ dot-config/nvim/README.md | 4 + dot-config/nvim/init.lua | 2 + dot-config/nvim/lazy-lock.json | 36 ++++ dot-config/nvim/lazyvim.json | 10 + dot-config/nvim/lua/config/autocmds.lua | 8 + dot-config/nvim/lua/config/keymaps.lua | 3 + dot-config/nvim/lua/config/lazy.lua | 53 ++++++ dot-config/nvim/lua/config/options.lua | 3 + dot-config/nvim/lua/plugins/example.lua | 197 +++++++++++++++++++ dot-config/nvim/lua/plugins/hardtime.lua | 7 + dot-config/nvim/lua/plugins/theme.lua | 19 ++ dot-config/nvim/stylua.toml | 3 + dot-config/sketchybar/plugins/aerospace.sh | 10 + dot-config/sketchybar/plugins/battery.sh | 28 +++ dot-config/sketchybar/plugins/clock.sh | 8 + dot-config/sketchybar/plugins/front_app.sh | 10 + dot-config/sketchybar/plugins/network.sh | 20 ++ dot-config/sketchybar/plugins/space.sh | 7 + dot-config/sketchybar/plugins/volume.sh | 20 ++ dot-config/sketchybar/sketchybarrc | 92 +++++++++ dot-config/starship.toml | 31 +++ 37 files changed, 1443 insertions(+) create mode 100644 dot-config/aerospace/aerospace.toml create mode 100644 dot-config/alacritty/alacritty.toml create mode 100644 dot-config/alacritty/themes/kanagawa_dragon.toml create mode 100644 dot-config/emacs/config.org create mode 100644 dot-config/emacs/init.el create mode 100644 dot-config/fish/config.fish create mode 100644 dot-config/ghostty/config create mode 100644 dot-config/ghostty/themes/iceberg-dark create mode 100644 dot-config/git/config create mode 100644 dot-config/git/ignore create mode 100644 dot-config/helix/config.toml create mode 100644 dot-config/helix/languages.toml create mode 100644 dot-config/helix/themes/ayu_darkk.toml create mode 100644 dot-config/nvim/.gitignore create mode 100644 dot-config/nvim/.neoconf.json create mode 100644 dot-config/nvim/LICENSE create mode 100644 dot-config/nvim/README.md create mode 100644 dot-config/nvim/init.lua create mode 100644 dot-config/nvim/lazy-lock.json create mode 100644 dot-config/nvim/lazyvim.json create mode 100644 dot-config/nvim/lua/config/autocmds.lua create mode 100644 dot-config/nvim/lua/config/keymaps.lua create mode 100644 dot-config/nvim/lua/config/lazy.lua create mode 100644 dot-config/nvim/lua/config/options.lua create mode 100644 dot-config/nvim/lua/plugins/example.lua create mode 100644 dot-config/nvim/lua/plugins/hardtime.lua create mode 100644 dot-config/nvim/lua/plugins/theme.lua create mode 100644 dot-config/nvim/stylua.toml create mode 100755 dot-config/sketchybar/plugins/aerospace.sh create mode 100755 dot-config/sketchybar/plugins/battery.sh create mode 100755 dot-config/sketchybar/plugins/clock.sh create mode 100755 dot-config/sketchybar/plugins/front_app.sh create mode 100755 dot-config/sketchybar/plugins/network.sh create mode 100755 dot-config/sketchybar/plugins/space.sh create mode 100755 dot-config/sketchybar/plugins/volume.sh create mode 100755 dot-config/sketchybar/sketchybarrc create mode 100644 dot-config/starship.toml (limited to 'dot-config') 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 + { + "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", "co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) + vim.keymap.set("n", "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 + 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" -- cgit v1.3