From 6b09ba52b61954cef21756e415c021411c6fe9b7 Mon Sep 17 00:00:00 2001 From: Baerspektivo Date: Mon, 22 Jun 2026 17:13:42 +0200 Subject: [PATCH] feat: sync .config dotfiles, transition Node to mise, integrate 1Password CLI/SSH Agent, and add optional AI CLI tools --- .config/btop/btop.conf | 105 ++- .config/fish/completions/docker.fish | 1 + .config/fish/completions/kubectl.fish | 1 + .config/fish/completions/nvm.fish | 21 - .config/fish/completions/orbctl.fish | 1 + .config/fish/conf.d/aliases.fish | 12 +- .config/fish/conf.d/jules.fish | 172 ++++ .config/fish/conf.d/nvm.fish | 28 - .config/fish/conf.d/paths.fish | 8 +- .config/fish/config.fish | 68 ++ .config/fish/fish_plugins | 1 - .config/fish/functions/_nvm_index_update.fish | 20 - .config/fish/functions/_nvm_list.fish | 14 - .../fish/functions/_nvm_version_activate.fish | 4 - .../functions/_nvm_version_deactivate.fish | 5 - .config/fish/functions/nvm.fish | 237 ----- .config/ghostty/themes/tokyonight_night.yml | 2 +- .config/mise/config.toml | 2 + .config/neofetch/config-backup.conf | 885 ------------------ .config/nvim/lazy-lock.json | 57 +- .config/nvim/lua/core/options.lua | 29 + .config/nvim/lua/plugins/editor.lua | 68 +- .config/nvim/lua/plugins/git.lua | 22 +- .config/nvim/lua/plugins/lsp.lua | 130 ++- .config/nvim/lua/plugins/neotree.lua | 2 +- .config/nvim/lua/plugins/oil.lua | 13 + .config/nvim/lua/plugins/telescope.lua | 2 +- .config/nvim/lua/plugins/ui.lua | 101 +- .config/starship.toml | 2 +- .config/tmux/tmux.conf | 5 + .config/yabai/yabairc | 0 README.md | 42 +- install.sh | 202 +++- 33 files changed, 837 insertions(+), 1425 deletions(-) create mode 120000 .config/fish/completions/docker.fish create mode 120000 .config/fish/completions/kubectl.fish delete mode 100644 .config/fish/completions/nvm.fish create mode 120000 .config/fish/completions/orbctl.fish create mode 100644 .config/fish/conf.d/jules.fish delete mode 100644 .config/fish/conf.d/nvm.fish delete mode 100644 .config/fish/functions/_nvm_index_update.fish delete mode 100644 .config/fish/functions/_nvm_list.fish delete mode 100644 .config/fish/functions/_nvm_version_activate.fish delete mode 100644 .config/fish/functions/_nvm_version_deactivate.fish delete mode 100644 .config/fish/functions/nvm.fish create mode 100644 .config/mise/config.toml delete mode 100644 .config/neofetch/config-backup.conf create mode 100644 .config/nvim/lua/plugins/oil.lua create mode 100644 .config/tmux/tmux.conf mode change 100755 => 100644 .config/yabai/yabairc diff --git a/.config/btop/btop.conf b/.config/btop/btop.conf index b8ed4e9..18c58f7 100644 --- a/.config/btop/btop.conf +++ b/.config/btop/btop.conf @@ -1,18 +1,18 @@ -#? Config file for btop v. 1.4.0 +#? Config file for btop v.1.4.6 #* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. #* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" color_theme = "/Users/rj/.config/btop/themes/catppuccin_mocha.theme" #* If the theme set background should be shown, set to False if you want terminal background transparency. -theme_background = False +theme_background = false #* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. -truecolor = True +truecolor = true #* Set to true to force tty mode regardless if a real tty has been detected or not. #* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. -force_tty = False +force_tty = false #* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. #* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. @@ -22,10 +22,13 @@ presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:defaul #* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. #* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. -vim_keys = True +vim_keys = true #* Rounded corners on boxes, is ignored if TTY mode is ON. -rounded_corners = True +rounded_corners = true + +#* Use terminal synchronized output sequences to reduce flickering on supported terminals. +terminal_sync = true #* Default symbols to use for graph creation, "braille", "block" or "tty". #* "braille" offers the highest resolution but might not be included in all fonts. @@ -57,37 +60,40 @@ update_ms = 2000 proc_sorting = "memory" #* Reverse sorting order, True or False. -proc_reversed = False +proc_reversed = false #* Show processes as a tree. -proc_tree = False +proc_tree = false #* Use the cpu graph colors in the process list. -proc_colors = True +proc_colors = true #* Use a darkening gradient in the process list. -proc_gradient = True +proc_gradient = true #* If process cpu usage should be of the core it's running on or usage of the total available cpu power. -proc_per_core = False +proc_per_core = false #* Show process memory as bytes instead of percent. -proc_mem_bytes = True +proc_mem_bytes = true #* Show cpu graph for each process. -proc_cpu_graphs = True +proc_cpu_graphs = true #* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) -proc_info_smaps = False +proc_info_smaps = false #* Show proc box on left side of screen instead of right. -proc_left = False +proc_left = false #* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). -proc_filter_kernel = False +proc_filter_kernel = false #* In tree-view, always accumulate child process resources in the parent process. -proc_aggregate = False +proc_aggregate = false + +#* Should cpu and memory usage display be preserved for dead processes when paused. +keep_dead_proc_usage = false #* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. #* Select from a list of detected attributes from the options menu. @@ -98,25 +104,28 @@ cpu_graph_upper = "total" cpu_graph_lower = "total" #* Toggles if the lower CPU graph should be inverted. -cpu_invert_lower = True +cpu_invert_lower = true #* Set to True to completely disable the lower CPU graph. -cpu_single_graph = False +cpu_single_graph = false #* Show cpu box at bottom of screen instead of top. -cpu_bottom = False +cpu_bottom = false #* Shows the system uptime in the CPU box. -show_uptime = True +show_uptime = true + +#* Shows the CPU package current power consumption in watts. Requires running `make setcap` or `make setuid` or running with sudo. +show_cpu_watts = true #* Show cpu temperature. -check_temp = True +check_temp = true #* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. cpu_sensor = "Auto" #* Show temperatures for cpu cores also if check_temp is True and sensors has been found. -show_coretemp = True +show_coretemp = true #* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. #* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. @@ -128,63 +137,63 @@ cpu_core_map = "" temp_scale = "celsius" #* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. -base_10_sizes = False +base_10_sizes = false #* Show CPU frequency. -show_cpu_freq = True +show_cpu_freq = true #* Draw a clock at top of screen, formatting according to strftime, empty string to disable. #* Special formatting: /host = hostname | /user = username | /uptime = system uptime clock_format = "%X" #* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. -background_update = True +background_update = true #* Custom cpu model name, empty string to disable. custom_cpu_name = "" #* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". -#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user". +#* Only disks matching the filter will be shown. Prepend exclude= to only show disks not matching the filter. Examples: disk_filter="/boot /home/user", disks_filter="exclude=/boot /home/user" disks_filter = "" #* Show graphs instead of meters for memory values. -mem_graphs = True +mem_graphs = true #* Show mem box below net box instead of above. -mem_below_net = False +mem_below_net = false #* Count ZFS ARC in cached and available memory. -zfs_arc_cached = True +zfs_arc_cached = true #* If swap memory should be shown in memory box. -show_swap = True +show_swap = true #* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. -swap_disk = True +swap_disk = true #* If mem box should be split to also show disks info. -show_disks = True +show_disks = true #* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. -only_physical = True +only_physical = true #* Read disks list from /etc/fstab. This also disables only_physical. -use_fstab = True +use_fstab = true #* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) -zfs_hide_datasets = False +zfs_hide_datasets = false #* Set to true to show available disk space for privileged users. -disk_free_priv = False +disk_free_priv = false #* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. -show_io_stat = True +show_io_stat = true #* Toggles io mode for disks, showing big graphs for disk read/write speeds. -io_mode = False +io_mode = false #* Set to True to show combined read/write io graphs in io mode. -io_graph_combined = False +io_graph_combined = false #* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". #* Example: "/mnt/media:100 /:20 /boot:1". @@ -196,23 +205,29 @@ net_download = 100 net_upload = 100 #* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. -net_auto = True +net_auto = true #* Sync the auto scaling for download and upload to whichever currently has the highest scale. -net_sync = True +net_sync = true #* Starts with the Network Interface specified here. net_iface = "" +#* "True" shows bitrates in base 10 (Kbps, Mbps). "False" shows bitrates in binary sizes (Kibps, Mibps, etc.). "Auto" uses base_10_sizes. +base_10_bitrate = "Auto" + #* Show battery stats in top right if battery is present. -show_battery = True +show_battery = true #* Which battery to use if multiple are present. "Auto" for auto detection. selected_battery = "Auto" #* Show power stats of battery next to charge indicator. -show_battery_watts = True +show_battery_watts = true -#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". +#* Set loglevel for "~/.local/state/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". #* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. log_level = "DISABLED" + +#* Automatically save current settings to config file on exit. +save_config_on_exit = true diff --git a/.config/fish/completions/docker.fish b/.config/fish/completions/docker.fish new file mode 120000 index 0000000..af586ab --- /dev/null +++ b/.config/fish/completions/docker.fish @@ -0,0 +1 @@ +/Applications/OrbStack.app/Contents/MacOS/../Resources/completions/fish/docker.fish \ No newline at end of file diff --git a/.config/fish/completions/kubectl.fish b/.config/fish/completions/kubectl.fish new file mode 120000 index 0000000..04f9499 --- /dev/null +++ b/.config/fish/completions/kubectl.fish @@ -0,0 +1 @@ +/Applications/OrbStack.app/Contents/MacOS/../Resources/completions/fish/kubectl.fish \ No newline at end of file diff --git a/.config/fish/completions/nvm.fish b/.config/fish/completions/nvm.fish deleted file mode 100644 index 14be1b7..0000000 --- a/.config/fish/completions/nvm.fish +++ /dev/null @@ -1,21 +0,0 @@ -complete --command nvm --exclusive -complete --command nvm --exclusive --long version --description "Print version" -complete --command nvm --exclusive --long help --description "Print help" -complete --command nvm --long silent --description "Suppress standard output" - -complete --command nvm --exclusive --condition __fish_use_subcommand --arguments install --description "Download and activate the specified Node version" -complete --command nvm --exclusive --condition __fish_use_subcommand --arguments use --description "Activate the specified Node version in the current shell" -complete --command nvm --exclusive --condition __fish_use_subcommand --arguments list --description "List installed Node versions" -complete --command nvm --exclusive --condition __fish_use_subcommand --arguments list-remote --description "List available Node versions to install" -complete --command nvm --exclusive --condition __fish_use_subcommand --arguments current --description "Print the currently-active Node version" -complete --command nvm --exclusive --condition "__fish_seen_subcommand_from install" --arguments "( - test -e $nvm_data && string split ' ' <$nvm_data/.index -)" -complete --command nvm --exclusive --condition "__fish_seen_subcommand_from use" --arguments "(_nvm_list | string split ' ')" -complete --command nvm --exclusive --condition __fish_use_subcommand --arguments uninstall --description "Uninstall the specified Node version" -complete --command nvm --exclusive --condition "__fish_seen_subcommand_from uninstall" --arguments "( - _nvm_list | string split ' ' | string replace system '' -)" -complete --command nvm --exclusive --condition "__fish_seen_subcommand_from use uninstall" --arguments "( - set --query nvm_default_version && echo default -)" diff --git a/.config/fish/completions/orbctl.fish b/.config/fish/completions/orbctl.fish new file mode 120000 index 0000000..19e3744 --- /dev/null +++ b/.config/fish/completions/orbctl.fish @@ -0,0 +1 @@ +/Applications/OrbStack.app/Contents/MacOS/../Resources/completions/fish/orbctl.fish \ No newline at end of file diff --git a/.config/fish/conf.d/aliases.fish b/.config/fish/conf.d/aliases.fish index 1f9a0ba..e138912 100644 --- a/.config/fish/conf.d/aliases.fish +++ b/.config/fish/conf.d/aliases.fish @@ -8,6 +8,8 @@ alias update-system="brew update && brew upgrade && npm update -g" alias do-st="docker compose" alias do-re="docker compose down && docker compose up -d" alias hetzi="ssh root@128.140.71.88" +alias hdock="ssh dockerserver-1@192.168.0.156" +alias proxi="ssh root@192.168.0.31" alias qaserv="TERM=xterm-256color ssh root@195.201.17.47" alias kc1="set -gx KUBECONFIG ~/.kube/config" alias kc2="set -gx KUBECONFIG ~/.kube/mobilistics" @@ -35,10 +37,12 @@ alias kdesc="kubectl describe" alias kpf="kubectl port-forward" # Testing -alias pw="npx playwright" -alias pwt="npx playwright test" -alias pwh="npx playwright test --headed" -alias pwr="npx playwright show-report" +alias pw="pnpm exec playwright" +alias pwt="pnpm exec playwright test" +alias pwui="pnpm exec playwright test --ui" +alias pwh="pnpm exec playwright test --headed" +alias pwr="pnpm exec playwright show-report" +alias dpwt="DEBUG=pw:api,pw:network pnpm exec playwright test" # Python/Go alias py="python3" diff --git a/.config/fish/conf.d/jules.fish b/.config/fish/conf.d/jules.fish new file mode 100644 index 0000000..e806613 --- /dev/null +++ b/.config/fish/conf.d/jules.fish @@ -0,0 +1,172 @@ +function tiffy + # --- KONFIGURATION --- + set -l SOURCE_NAME "sources/github/Baerspektivo/projectTiffy" + set -l SESSION_STORE "$HOME/.config/fish/tiffy_session" + + # Hilfsfunktion zum Auflisten der verfuegbaren Repos + if test "$argv[1]" = "--list-sources" + echo "Suche verfuegbare Jules-Quellen..." + curl -s "https://jules.googleapis.com/v1alpha/sources" -H "X-Goog-Api-Key: $JULES_API_KEY" | jq . + return + end + + # Befehl zum Abholen der letzten Session (tiffy fetch oder tiffy gib) + if test "$argv[1]" = "fetch"; or test "$argv[1]" = "gib" + if test -f "$SESSION_STORE" + read -l S_ID TARGET_FILE < "$SESSION_STORE" + echo "Pruefe letzte Session $S_ID fuer Datei $TARGET_FILE..." + set -l ACT (curl -s "https://jules.googleapis.com/v1alpha/sessions/$S_ID/activities" -H "X-Goog-Api-Key: $JULES_API_KEY") + set -l RES (echo $ACT | jq -r '.activities[]? | (.progressUpdated?.description // .agentMessaged?.agentMessage // empty)' | grep "```" | tail -n 1) + + if test -n "$RES" + set -l DETECTED_LANG (echo "$RES" | string match -r '```(\w+)' | head -n 2 | tail -n 1) + set -l EXT "ts" + switch "$DETECTED_LANG" + case "go"; set EXT "go" + case "typescript" "ts"; set EXT "ts" + case "javascript" "js"; set EXT "js" + case "python" "py"; set EXT "py" + case "html"; set EXT "html" + case "json"; set EXT "json" + end + set -l FINAL_TARGET (string replace -r '\.[^.]+$' ".$EXT" "$TARGET_FILE") + echo "$RES" | sed -n '/^```/,/^```/ p' | sed '1d;$d' > "$FINAL_TARGET" + if test ! -s "$FINAL_TARGET"; echo "$RES" > "$FINAL_TARGET"; end + echo "Code erfolgreich nachgeholt und gespeichert: $FINAL_TARGET" + else + echo "Noch kein Code in Session $S_ID gefunden." + end + return + else + echo "Keine gespeicherte Session gefunden." + return 1 + end + end + + # Befehl um eine Folgefrage mit optionalen neuen Dateien zu senden + if test "$argv[1]" = "ask" + if test -f "$SESSION_STORE" + read -l S_ID TARGET_FILE < "$SESSION_STORE" + + set -l ASSET_FILES + set -l MSG_PARTS + # Argumente ab dem zweiten (nach "ask") auf Dateien pruefen + for arg in $argv[2..-1] + if test -f "$arg" + set -a ASSET_FILES "$arg" + else + set -a MSG_PARTS "$arg" + end + end + + set -l USER_MSG (string join " " $MSG_PARTS) + set -l ADD_CONTEXT "" + for f in $ASSET_FILES + echo "Lese zusaetzliche Datei: $f" + set ADD_CONTEXT "$ADD_CONTEXT\n\n--- FILE: $f ---\n"(cat "$f") + end + + set -l FOLLOW_UP (string join "\n" "$USER_MSG" "$ADD_CONTEXT") + + if test -z (string trim "$FOLLOW_UP") + echo "Fehler: Keine Nachricht oder Datei angegeben." + return 1 + end + + echo "Sende Nachricht und Kontext an bestehende Session $S_ID..." + set -l ESCAPED_FOLLOW_UP (printf "%s" "$FOLLOW_UP" | python3 -c 'import json, sys; print(json.dumps(sys.stdin.read()), end="")') + + curl -s "https://jules.googleapis.com/v1alpha/sessions/$S_ID:sendMessage" \ + -X POST -H "Content-Type: application/json" -H "X-Goog-Api-Key: $JULES_API_KEY" \ + -d "{ \"prompt\": $ESCAPED_FOLLOW_UP }" > /dev/null + + # Polling + set -l RESULT "" + echo "Warte auf Antwort..." + for i in (seq 1 36) + sleep 5 + set -l ACT_RES (curl -s "https://jules.googleapis.com/v1alpha/sessions/$S_ID/activities" -H "X-Goog-Api-Key: $JULES_API_KEY") + set RESULT (echo $ACT_RES | jq -r '.activities[]? | (.progressUpdated?.description // .agentMessaged?.agentMessage // empty)' | grep "```" | tail -n 1) + if test -n "$RESULT"; break; end + echo -n "." + end + + if test -n "$RESULT" + echo -e "\nAntwort erhalten. Speichere..." + set -l FINAL_TARGET (string replace -r '\.[^.]+$' ".ts" "$TARGET_FILE") + echo "$RESULT" | sed -n '/^```/,/^```/ p' | sed '1d;$d' > "$FINAL_TARGET" + echo "Code aktualisiert: $FINAL_TARGET" + else + echo -e "\nKeine schnelle Antwort. Nutze 'tiffy fetch' spaeter." + end + return + else + echo "Keine aktive Session zum Fortfuehren gefunden." + return 1 + end + end + + # Resume-Modus fuer manuelle ID-Eingabe + if test (count $argv) -eq 1; and string match -r '^\d+$' "$argv[1]" > /dev/null + set -l S_ID "$argv[1]" + set -l ACT (curl -s "[https://jules.googleapis.com/v1alpha/sessions/$S_ID/activities](https://jules.googleapis.com/v1alpha/sessions/$S_ID/activities)" -H "X-Goog-Api-Key: $JULES_API_KEY") + set -l RES (echo $ACT | jq -r '.activities[]? | (.progressUpdated?.description // .agentMessaged?.agentMessage // empty)' | grep "```" | tail -n 1) + echo "$RES" + return + end + + # Normaler Session-Start (mehrere Dateien moeglich) + set -l FILES + set -l MSG_PARTS + for arg in $argv + if test -f "$arg"; set -a FILES "$arg"; else; set -a MSG_PARTS "$arg"; end + end + + if test (count $FILES) -eq 0; echo "Fehler: Datei nicht gefunden!"; return 1; end + + set -l USER_MESSAGE (string join " " $MSG_PARTS) + set -l CONTEXT "" + for f in $FILES + echo "Lese Datei: $f" + set CONTEXT "$CONTEXT\n\n--- FILE: $f ---\n"(cat "$f") + end + + set -l ESCAPED_PROMPT (printf "%s" "$USER_MESSAGE\n$CONTEXT" | python3 -c 'import json, sys; print(json.dumps(sys.stdin.read()), end="")') + + echo "Session-Start fuer $SOURCE_NAME..." + set -l PAYLOAD "{ \"prompt\": $ESCAPED_PROMPT, \"sourceContext\": { \"source\": \"$SOURCE_NAME\", \"githubRepoContext\": { \"startingBranch\": \"main\" } } }" + + set -l SESSION_RESPONSE (curl -s "https://jules.googleapis.com/v1alpha/sessions" \ + -X POST -H "Content-Type: application/json" -H "X-Goog-Api-Key: $JULES_API_KEY" -d "$PAYLOAD") + + set -l SESSION_ID (echo $SESSION_RESPONSE | jq -r '.id // empty') + if test -z "$SESSION_ID"; echo "API Fehler."; echo $SESSION_RESPONSE | jq .; return 1; end + + # Speichert die erste Datei als Referenz fuer den Zielnamen + echo "$SESSION_ID $FILES[1]" > "$SESSION_STORE" + echo "Jules arbeitet... (Session: $SESSION_ID)" + + set -l RESULT "" + for i in (seq 1 36) + sleep 5 + set -l ACT_RES (curl -s "https://jules.googleapis.com/v1alpha/sessions/$SESSION_ID/activities" -H "X-Goog-Api-Key: $JULES_API_KEY") + set RESULT (echo $ACT_RES | jq -r '.activities[]? | (.progressUpdated?.description // .agentMessaged?.agentMessage // empty)' | grep "```" | tail -n 1) + if test -n "$RESULT"; break; end + echo -n "." + end + + if test -z "$RESULT"; echo -e "\nNutze 'tiffy fetch' zum Abrufen."; return 0; end + + set -l DETECTED_LANG (echo "$RESULT" | string match -r '```(\w+)' | head -n 2 | tail -n 1) + set -l EXT "ts" + switch "$DETECTED_LANG" + case "go"; set EXT "go" + case "typescript" "ts"; set EXT "ts" + case "javascript" "js"; set EXT "js" + case "python" "py"; set EXT "py" + end + + set -l TARGET_FILE (string replace -r '\.[^.]+$' ".$EXT" "$FILES[1]") + echo "$RESULT" | sed -n '/^```/,/^```/ p' | sed '1d;$d' > "$TARGET_FILE" + echo -e "\nCode lokal gespeichert: $TARGET_FILE" +end diff --git a/.config/fish/conf.d/nvm.fish b/.config/fish/conf.d/nvm.fish deleted file mode 100644 index 7545699..0000000 --- a/.config/fish/conf.d/nvm.fish +++ /dev/null @@ -1,28 +0,0 @@ -set --query XDG_DATA_HOME || set --local XDG_DATA_HOME ~/.local/share -set --query nvm_mirror || set --global nvm_mirror https://nodejs.org/dist -set --query nvm_data || set --global nvm_data $XDG_DATA_HOME/nvm - -function _nvm_install --on-event nvm_install - test ! -d $nvm_data && command mkdir -p $nvm_data - echo "Downloading the Node distribution index..." 2>/dev/null - _nvm_index_update -end - -function _nvm_update --on-event nvm_update - set --query --universal nvm_data && set --erase --universal nvm_data - set --query --universal nvm_mirror && set --erase --universal nvm_mirror - set --query nvm_mirror || set --global nvm_mirror https://nodejs.org/dist -end - -function _nvm_uninstall --on-event nvm_uninstall - command rm -rf $nvm_data - - set --query nvm_current_version && _nvm_version_deactivate $nvm_current_version - - set --names | string replace --filter --regex -- "^nvm" "set --erase nvm" | source - functions --erase (functions --all | string match --entire --regex -- "^_nvm_") -end - -if status is-interactive && set --query nvm_default_version && ! set --query nvm_current_version - nvm use --silent $nvm_default_version -end diff --git a/.config/fish/conf.d/paths.fish b/.config/fish/conf.d/paths.fish index 5d96a3e..6d4fcd8 100644 --- a/.config/fish/conf.d/paths.fish +++ b/.config/fish/conf.d/paths.fish @@ -1,10 +1,10 @@ +# Go environment +set -gx GOPATH ~/go +set -gx GO111MODULE on + # Development paths fish_add_path /opt/homebrew/bin fish_add_path ~/.cargo/bin fish_add_path ~/.local/bin fish_add_path /usr/local/go/bin fish_add_path $GOPATH/bin - -# Go environment -set -gx GOPATH ~/go -set -gx GO111MODULE on diff --git a/.config/fish/config.fish b/.config/fish/config.fish index 0e244a1..ca7261b 100644 --- a/.config/fish/config.fish +++ b/.config/fish/config.fish @@ -2,3 +2,71 @@ # Startup commands only neofetch +if type -q mise + mise activate fish | source +end + +# Added by OrbStack: command-line tools and integration +# This won't be added again if you remove it. +source ~/.orbstack/shell/init2.fish 2>/dev/null || : + +set -g fish_key_bindings fish_default_key_bindings + +# This file was created by fish when upgrading to version 4.3, to migrate +# theme variables from universal to global scope. +# Don't edit this file, as it will be written by the web-config tool (`fish_config`). +# To customize your theme, delete this file and see +# help interactive#syntax-highlighting +# or +# man fish-interactive | less +/^SYNTAX.HIGHLIGHTING +# for appropriate commands to add to ~/.config/fish/config.fish instead. +# See also the release notes for fish 4.3.0 (run `help relnotes`). + +fish_add_path /opt/homebrew/bin +fish_add_path /Users/r.kallinich/go/bin +fish_add_path /Users/r.kallinich/.cargo/bin +fish_add_path /Applications/Ghostty.app/Contents/MacOS + + +set --global fish_color_autosuggestion brblack +set --global fish_color_cancel -r +set --global fish_color_command normal +set --global fish_color_comment red +set --global fish_color_cwd green +set --global fish_color_cwd_root red +set --global fish_color_end green +set --global fish_color_error brred +set --global fish_color_escape brcyan +set --global fish_color_history_current --bold +set --global fish_color_host normal +set --global fish_color_host_remote yellow +set --global fish_color_normal normal +set --global fish_color_operator brcyan +set --global fish_color_param cyan +set --global fish_color_quote yellow +set --global fish_color_redirection cyan --bold +set --global fish_color_search_match white --background=brblack +set --global fish_color_selection white --bold --background=brblack +set --global fish_color_status red +set --global fish_color_user brgreen +set --global fish_color_valid_path --underline +set --global fish_pager_color_completion normal +set --global fish_pager_color_description yellow -i +set --global fish_pager_color_prefix normal --bold --underline +set --global fish_pager_color_progress brwhite --background=cyan +set --global fish_pager_color_selected_background -r + +# API-Keys +set -gx GEMINI_API_KEY "AIzaSyBu-u9JIHoPR_wIsjwjelo1lGUzzxKKofQ" +set -gx JULES_API_KEY "AQ.Ab8RN6LXe33UjfpBGpityANYBO-pHUwZEG7wKoM4V7yWTAezoQ" +set -gx GCP_PROJECT_ID "gen-lang-client-0990109275" +# 1Password SSH Agent +if test -e "$HOME/.1password/agent.sock" + set -gx SSH_AUTH_SOCK "$HOME/.1password/agent.sock" +else if test -e "$HOME/Library/Group Containers/2BU85C4SUE.com.1password/t/agent.sock" + set -gx SSH_AUTH_SOCK "$HOME/Library/Group Containers/2BU85C4SUE.com.1password/t/agent.sock" +end + + +# Added by Antigravity CLI installer +set -gx PATH "/Users/r.kallinich/.local/bin" $PATH diff --git a/.config/fish/fish_plugins b/.config/fish/fish_plugins index a55e96a..08906e7 100644 --- a/.config/fish/fish_plugins +++ b/.config/fish/fish_plugins @@ -1,4 +1,3 @@ jorgebucaran/fisher -jorgebucaran/nvm.fish patrickf1/fzf.fish franciscolourenco/done diff --git a/.config/fish/functions/_nvm_index_update.fish b/.config/fish/functions/_nvm_index_update.fish deleted file mode 100644 index c66753d..0000000 --- a/.config/fish/functions/_nvm_index_update.fish +++ /dev/null @@ -1,20 +0,0 @@ -function _nvm_index_update - test ! -d $nvm_data && command mkdir -p $nvm_data - - set --local index $nvm_data/.index - - if not command curl -q --location --silent $nvm_mirror/index.tab >$index.temp - command rm -f $index.temp - echo "nvm: Can't update index, host unavailable: \"$nvm_mirror\"" >&2 - return 1 - end - - command awk -v OFS=\t ' - /v0.9.12/ { exit } # Unsupported - NR > 1 { - print $1 (NR == 2 ? " latest" : $10 != "-" ? " lts/" tolower($10) : "") - } - ' $index.temp >$index - - command rm -f $index.temp -end diff --git a/.config/fish/functions/_nvm_list.fish b/.config/fish/functions/_nvm_list.fish deleted file mode 100644 index 1623bb8..0000000 --- a/.config/fish/functions/_nvm_list.fish +++ /dev/null @@ -1,14 +0,0 @@ -function _nvm_list - set --local versions $nvm_data/* - - set --query versions[1] && - string match --entire --regex -- ( - string replace --all -- $nvm_data/ "" $versions | - string match --regex -- "v\d.+" | - string escape --style=regex | - string join "|" - ) <$nvm_data/.index - - command --all node | - string match --quiet --invert --regex -- "^$nvm_data" && echo system -end diff --git a/.config/fish/functions/_nvm_version_activate.fish b/.config/fish/functions/_nvm_version_activate.fish deleted file mode 100644 index f7dfef7..0000000 --- a/.config/fish/functions/_nvm_version_activate.fish +++ /dev/null @@ -1,4 +0,0 @@ -function _nvm_version_activate --argument-names ver - set --global --export nvm_current_version $ver - set --prepend PATH $nvm_data/$ver/bin -end diff --git a/.config/fish/functions/_nvm_version_deactivate.fish b/.config/fish/functions/_nvm_version_deactivate.fish deleted file mode 100644 index 24dd36e..0000000 --- a/.config/fish/functions/_nvm_version_deactivate.fish +++ /dev/null @@ -1,5 +0,0 @@ -function _nvm_version_deactivate --argument-names ver - test "$nvm_current_version" = "$ver" && set --erase nvm_current_version - set --local index (contains --index -- $nvm_data/$ver/bin $PATH) && - set --erase PATH[$index] -end diff --git a/.config/fish/functions/nvm.fish b/.config/fish/functions/nvm.fish deleted file mode 100644 index 64d94c5..0000000 --- a/.config/fish/functions/nvm.fish +++ /dev/null @@ -1,237 +0,0 @@ -function nvm --description "Node version manager" - for silent in --silent -s - if set --local index (contains --index -- $silent $argv) - set --erase argv[$index] && break - end - set --erase silent - end - - set --local cmd $argv[1] - set --local ver $argv[2] - - if set --query silent && ! set --query cmd[1] - echo "nvm: Version number not specified (see nvm -h for usage)" >&2 - return 1 - end - - if ! set --query ver[1] && contains -- "$cmd" install use - for file in .nvmrc .node-version - set file (_nvm_find_up $PWD $file) && read ver <$file && break - end - - if ! set --query ver[1] - echo "nvm: Invalid version or missing \".nvmrc\" file" >&2 - return 1 - end - end - - set --local their_version $ver - - switch "$cmd" - case -v --version - echo "nvm, version 2.2.18" - case "" -h --help - echo "Usage: nvm install Download and activate the specified Node version" - echo " nvm install Install the version specified in the nearest .nvmrc file" - echo " nvm use Activate the specified Node version in the current shell" - echo " nvm use Activate the version specified in the nearest .nvmrc file" - echo " nvm list List installed Node versions" - echo " nvm list-remote List available Node versions to install" - echo " nvm list-remote List Node versions matching a given regex pattern" - echo " nvm current Print the currently-active Node version" - echo " nvm uninstall Uninstall the specified Node version" - echo "Options:" - echo " -s, --silent Suppress standard output" - echo " -v, --version Print the version of nvm" - echo " -h, --help Print this help message" - echo "Variables:" - echo " nvm_arch Override architecture, e.g. x64-musl" - echo " nvm_mirror Use a mirror for downloading Node binaries" - echo " nvm_default_version Set the default version for new shells" - echo " nvm_default_packages Install a list of packages every time a Node version is installed" - echo " nvm_data Set a custom directory for storing nvm data" - echo "Examples:" - echo " nvm install latest Install the latest version of Node" - echo " nvm use 14.15.1 Use Node version 14.15.1" - echo " nvm use system Activate the system's Node version" - - case install - _nvm_index_update - - string match --entire --regex -- (_nvm_version_match $ver) <$nvm_data/.index | read ver alias - - if ! set --query ver[1] - echo "nvm: Invalid version number or alias: \"$their_version\"" >&2 - return 1 - end - - if test ! -e $nvm_data/$ver - set --local os (command uname -s | string lower) - set --local ext tar.gz - set --local arch (command uname -m) - set --local tarcmd tar - - switch $os - case aix - set arch ppc64 - case sunos - case linux - case darwin - case {msys_nt,mingw\*_nt}\* - set os win - set ext zip - set tarcmd bsdtar - case \* - echo "nvm: Unsupported operating system: \"$os\"" >&2 - return 1 - end - - switch $arch - case i\*86 - set arch x86 - case x86_64 - set arch x64 - case arm64 - string match --regex --quiet "v(?\d+)" $ver - if test "$os" = darwin -a $major -lt 16 - set arch x64 - end - case armv6 armv6l - set arch armv6l - case armv7 armv7l - set arch armv7l - case armv8 armv8l aarch64 - set arch arm64 - end - - set --query nvm_arch && set arch $nvm_arch - - set --local dir "node-$ver-$os-$arch" - set --local url $nvm_mirror/$ver/$dir.$ext - - command mkdir -p $nvm_data/$ver - - if ! set --query silent - echo -e "Installing Node \x1b[1m$ver\x1b[22m $alias" - echo -e "Fetching \x1b[4m$url\x1b[24m\x1b[7m" - end - - if ! command curl -q $silent --progress-bar --location $url | - command $tarcmd --extract --gzip --directory $nvm_data/$ver 2>/dev/null - command rm -rf $nvm_data/$ver - echo -e "\033[F\33[2K\x1b[0mnvm: Invalid mirror or host unavailable: \"$url\"" >&2 - return 1 - end - - set --query silent || echo -en "\033[F\33[2K\x1b[0m" - - if test "$os" = win - command mv $nvm_data/$ver/$dir $nvm_data/$ver/bin - else - command mv $nvm_data/$ver/$dir/* $nvm_data/$ver - command rm -rf $nvm_data/$ver/$dir - end - end - - if test $ver != "$nvm_current_version" - set --query nvm_current_version && _nvm_version_deactivate $nvm_current_version - _nvm_version_activate $ver - - set --query nvm_default_packages[1] && npm install --global $silent $nvm_default_packages - end - - set --query silent || printf "Now using Node %s (npm %s) %s\n" (_nvm_node_info) - case use - test $ver = default && set ver $nvm_default_version - _nvm_list | string match --entire --regex -- (_nvm_version_match $ver) | read ver __ - - if ! set --query ver[1] - echo "nvm: Can't use Node \"$their_version\", version must be installed first" >&2 - return 1 - end - - if test $ver != "$nvm_current_version" - set --query nvm_current_version && _nvm_version_deactivate $nvm_current_version - test $ver != system && _nvm_version_activate $ver - end - - set --query silent || printf "Now using Node %s (npm %s) %s\n" (_nvm_node_info) - case uninstall - if test -z "$ver" - echo "nvm: Not enough arguments for command: \"$cmd\"" >&2 - return 1 - end - - test $ver = default && test ! -z "$nvm_default_version" && set ver $nvm_default_version - - _nvm_list | string match --entire --regex -- (_nvm_version_match $ver) | read ver __ - - if ! set -q ver[1] - echo "nvm: Node version not installed or invalid: \"$their_version\"" >&2 - return 1 - end - - set --query silent || printf "Uninstalling Node %s %s\n" $ver (string replace ~ \~ "$nvm_data/$ver/bin/node") - - _nvm_version_deactivate $ver - - command rm -rf $nvm_data/$ver - case current - _nvm_current - case ls list - _nvm_list | _nvm_list_format (_nvm_current) $argv[2] - case lsr {ls,list}-remote - _nvm_index_update || return - _nvm_list | command awk ' - FILENAME == "-" && (is_local[$1] = FNR == NR) { next } { - print $0 (is_local[$1] ? " ✓" : "") - } - ' - $nvm_data/.index | _nvm_list_format (_nvm_current) $argv[2] - case \* - echo "nvm: Unknown command or option: \"$cmd\" (see nvm -h for usage)" >&2 - return 1 - end -end - -function _nvm_find_up --argument-names path file - test -e "$path/$file" && echo $path/$file || begin - test ! -z "$path" || return - _nvm_find_up (string replace --regex -- '/[^/]*$' "" $path) $file - end -end - -function _nvm_version_match --argument-names ver - string replace --regex -- '^v?(\d+|\d+\.\d+)$' 'v$1.' $ver | - string replace --filter --regex -- '^v?(\d+)' 'v$1' | - string escape --style=regex || string lower '\b'$ver'(?:/\w+)?$' -end - -function _nvm_list_format --argument-names current regex - command awk -v current="$current" -v regex="$regex" ' - $0 ~ regex { - aliases[versions[i++] = $1] = $2 " " $3 - pad = (n = length($1)) > pad ? n : pad - } - END { - if (!i) exit 1 - while (i--) - printf((current == versions[i] ? " ▶ " : " ") "%"pad"s %s\n", - versions[i], aliases[versions[i]]) - } - ' -end - -function _nvm_current - command --search --quiet node || return - set --query nvm_current_version && echo $nvm_current_version || echo system -end - -function _nvm_node_info - set --local npm_path (string replace bin/npm-cli.js "" (realpath (command --search npm))) - test -f $npm_path/package.json || set --local npm_version_default (command npm --version) - command node --eval " - console.log(process.version) - console.log('$npm_version_default' ? '$npm_version_default': require('$npm_path/package.json').version) - console.log(process.execPath) - " | string replace -- ~ \~ -end diff --git a/.config/ghostty/themes/tokyonight_night.yml b/.config/ghostty/themes/tokyonight_night.yml index f3d512a..90f4d25 100644 --- a/.config/ghostty/themes/tokyonight_night.yml +++ b/.config/ghostty/themes/tokyonight_night.yml @@ -21,4 +21,4 @@ palette: - "#7aa2f7" # bright blue - "#bb9af7" # bright magenta - "#7dcfff" # bright cyan - - "#c0caf5" # bright white + - "#c0caf5" # bright white \ No newline at end of file diff --git a/.config/mise/config.toml b/.config/mise/config.toml new file mode 100644 index 0000000..b3e18f2 --- /dev/null +++ b/.config/mise/config.toml @@ -0,0 +1,2 @@ +[tools] +node = "20.20.1" diff --git a/.config/neofetch/config-backup.conf b/.config/neofetch/config-backup.conf deleted file mode 100644 index 6a44721..0000000 --- a/.config/neofetch/config-backup.conf +++ /dev/null @@ -1,885 +0,0 @@ -# See this wiki page for more info: -# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info -print_info() { - info title - info underline - - # info "Host" model - # info "Packages" packages - # info "Resolution" resolution - # info "DE" de - # info "WM" wm - # info "WM Theme" wm_theme - # info "Theme" theme - # info "Icons" icons - # info "Terminal" term - # info "Terminal Font" term_font - - info "OS" distro - info "Kernel" kernel - info "Uptime" uptime - info "Shell" shell - info "CPU" cpu - info "GPU" gpu - info "Memory" memory - info "Disk" disk - - command -v docker >/dev/null && prin "Docker" "$(docker --version | cut -d' ' -f3 | tr -d ',')" - command -v kubectl >/dev/null && prin "Kubectl" "$(kubectl version --client --output=yaml 2>/dev/null | grep gitVersion | cut -d' ' -f4)" - command -v go >/dev/null && prin "Go" "$(go version | cut -d' ' -f3)" - command -v python3 >/dev/null && prin "Python" "$(python3 --version | cut -d' ' -f2)" - command -v node >/dev/null && prin "Node" "$(node --version)" - # info "GPU Driver" gpu_driver # Linux/macOS only - # info "CPU Usage" cpu_usage - # info "Disk" disk - # info "Battery" battery - # info "Font" font - # info "Song" song - # [[ "$player" ]] && prin "Music Player" "$player" - # info "Local IP" local_ip - # info "Public IP" public_ip - # info "Users" users - # info "Locale" locale # This only works on glibc systems. - - info cols -} - -# Performance optimizations -kernel_shorthand="on" -distro_shorthand="off" -os_arch="on" -uptime_shorthand="on" -memory_percent="on" -memory_unit="gib" -shell_path="off" -shell_version="on" -cpu_speed="on" -cpu_cores="logical" -cpu_temp="off" # Often not needed for DevOps -speed_shorthand="on" - -# Title - - -# Hide/Show Fully qualified domain name. -# -# Default: 'off' -# Values: 'on', 'off' -# Flag: --title_fqdn -title_fqdn="off" - - -# Kernel - - -# Shorten the output of the kernel function. -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --kernel_shorthand -# Supports: Everything except *BSDs (except PacBSD and PC-BSD) -# -# Example: -# on: '4.8.9-1-ARCH' -# off: 'Linux 4.8.9-1-ARCH' -kernel_shorthand="on" - - -# Distro - - -# Shorten the output of the distro function -# -# Default: 'off' -# Values: 'on', 'tiny', 'off' -# Flag: --distro_shorthand -# Supports: Everything except Windows and Haiku -distro_shorthand="off" - -# Show/Hide OS Architecture. -# Show 'x86_64', 'x86' and etc in 'Distro:' output. -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --os_arch -# -# Example: -# on: 'Arch Linux x86_64' -# off: 'Arch Linux' -os_arch="on" - - -# Uptime - - -# Shorten the output of the uptime function -# -# Default: 'on' -# Values: 'on', 'tiny', 'off' -# Flag: --uptime_shorthand -# -# Example: -# on: '2 days, 10 hours, 3 mins' -# tiny: '2d 10h 3m' -# off: '2 days, 10 hours, 3 minutes' -uptime_shorthand="on" - - -# Memory - - -# Show memory pecentage in output. -# -# Default: 'off' -# Values: 'on', 'off' -# Flag: --memory_percent -# -# Example: -# on: '1801MiB / 7881MiB (22%)' -# off: '1801MiB / 7881MiB' -memory_percent="off" - -# Change memory output unit. -# -# Default: 'mib' -# Values: 'kib', 'mib', 'gib' -# Flag: --memory_unit -# -# Example: -# kib '1020928KiB / 7117824KiB' -# mib '1042MiB / 6951MiB' -# gib: ' 0.98GiB / 6.79GiB' -memory_unit="mib" - - -# Packages - - -# Show/Hide Package Manager names. -# -# Default: 'tiny' -# Values: 'on', 'tiny' 'off' -# Flag: --package_managers -# -# Example: -# on: '998 (pacman), 8 (flatpak), 4 (snap)' -# tiny: '908 (pacman, flatpak, snap)' -# off: '908' -package_managers="on" - - -# Shell - - -# Show the path to $SHELL -# -# Default: 'off' -# Values: 'on', 'off' -# Flag: --shell_path -# -# Example: -# on: '/bin/bash' -# off: 'bash' -shell_path="off" - -# Show $SHELL version -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --shell_version -# -# Example: -# on: 'bash 4.4.5' -# off: 'bash' -shell_version="on" - - -# CPU - - -# CPU speed type -# -# Default: 'bios_limit' -# Values: 'scaling_cur_freq', 'scaling_min_freq', 'scaling_max_freq', 'bios_limit'. -# Flag: --speed_type -# Supports: Linux with 'cpufreq' -# NOTE: Any file in '/sys/devices/system/cpu/cpu0/cpufreq' can be used as a value. -speed_type="bios_limit" - -# CPU speed shorthand -# -# Default: 'off' -# Values: 'on', 'off'. -# Flag: --speed_shorthand -# NOTE: This flag is not supported in systems with CPU speed less than 1 GHz -# -# Example: -# on: 'i7-6500U (4) @ 3.1GHz' -# off: 'i7-6500U (4) @ 3.100GHz' -speed_shorthand="off" - -# Enable/Disable CPU brand in output. -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --cpu_brand -# -# Example: -# on: 'Intel i7-6500U' -# off: 'i7-6500U (4)' -cpu_brand="on" - -# CPU Speed -# Hide/Show CPU speed. -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --cpu_speed -# -# Example: -# on: 'Intel i7-6500U (4) @ 3.1GHz' -# off: 'Intel i7-6500U (4)' -cpu_speed="on" - -# CPU Cores -# Display CPU cores in output -# -# Default: 'logical' -# Values: 'logical', 'physical', 'off' -# Flag: --cpu_cores -# Support: 'physical' doesn't work on BSD. -# -# Example: -# logical: 'Intel i7-6500U (4) @ 3.1GHz' (All virtual cores) -# physical: 'Intel i7-6500U (2) @ 3.1GHz' (All physical cores) -# off: 'Intel i7-6500U @ 3.1GHz' -cpu_cores="logical" - -# CPU Temperature -# Hide/Show CPU temperature. -# Note the temperature is added to the regular CPU function. -# -# Default: 'off' -# Values: 'C', 'F', 'off' -# Flag: --cpu_temp -# Supports: Linux, BSD -# NOTE: For FreeBSD and NetBSD-based systems, you'll need to enable -# coretemp kernel module. This only supports newer Intel processors. -# -# Example: -# C: 'Intel i7-6500U (4) @ 3.1GHz [27.2°C]' -# F: 'Intel i7-6500U (4) @ 3.1GHz [82.0°F]' -# off: 'Intel i7-6500U (4) @ 3.1GHz' -cpu_temp="on" - - -# GPU - - -# Enable/Disable GPU Brand -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --gpu_brand -# -# Example: -# on: 'AMD HD 7950' -# off: 'HD 7950' -gpu_brand="on" - -# Which GPU to display -# -# Default: 'all' -# Values: 'all', 'dedicated', 'integrated' -# Flag: --gpu_type -# Supports: Linux -# -# Example: -# all: -# GPU1: AMD HD 7950 -# GPU2: Intel Integrated Graphics -# -# dedicated: -# GPU1: AMD HD 7950 -# -# integrated: -# GPU1: Intel Integrated Graphics -gpu_type="all" - - -# Resolution - - -# Display refresh rate next to each monitor -# Default: 'off' -# Values: 'on', 'off' -# Flag: --refresh_rate -# Supports: Doesn't work on Windows. -# -# Example: -# on: '1920x1080 @ 60Hz' -# off: '1920x1080' -refresh_rate="off" - - -# Gtk Theme / Icons / Font - - -# Shorten output of GTK Theme / Icons / Font -# -# Default: 'off' -# Values: 'on', 'off' -# Flag: --gtk_shorthand -# -# Example: -# on: 'Numix, Adwaita' -# off: 'Numix [GTK2], Adwaita [GTK3]' -gtk_shorthand="off" - - -# Enable/Disable gtk2 Theme / Icons / Font -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --gtk2 -# -# Example: -# on: 'Numix [GTK2], Adwaita [GTK3]' -# off: 'Adwaita [GTK3]' -gtk2="on" - -# Enable/Disable gtk3 Theme / Icons / Font -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --gtk3 -# -# Example: -# on: 'Numix [GTK2], Adwaita [GTK3]' -# off: 'Numix [GTK2]' -gtk3="on" - - -# IP Address - - -# Website to ping for the public IP -# -# Default: 'http://ident.me' -# Values: 'url' -# Flag: --ip_host -public_ip_host="http://ident.me" - -# Public IP timeout. -# -# Default: '2' -# Values: 'int' -# Flag: --ip_timeout -public_ip_timeout=2 - - -# Desktop Environment - - -# Show Desktop Environment version -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --de_version -de_version="on" - - -# Disk - - -# Which disks to display. -# The values can be any /dev/sdXX, mount point or directory. -# NOTE: By default we only show the disk info for '/'. -# -# Default: '/' -# Values: '/', '/dev/sdXX', '/path/to/drive'. -# Flag: --disk_show -# -# Example: -# disk_show=('/' '/dev/sdb1'): -# 'Disk (/): 74G / 118G (66%)' -# 'Disk (/mnt/Videos): 823G / 893G (93%)' -# -# disk_show=('/'): -# 'Disk (/): 74G / 118G (66%)' -# -disk_show=('/') - -# Disk subtitle. -# What to append to the Disk subtitle. -# -# Default: 'mount' -# Values: 'mount', 'name', 'dir', 'none' -# Flag: --disk_subtitle -# -# Example: -# name: 'Disk (/dev/sda1): 74G / 118G (66%)' -# 'Disk (/dev/sdb2): 74G / 118G (66%)' -# -# mount: 'Disk (/): 74G / 118G (66%)' -# 'Disk (/mnt/Local Disk): 74G / 118G (66%)' -# 'Disk (/mnt/Videos): 74G / 118G (66%)' -# -# dir: 'Disk (/): 74G / 118G (66%)' -# 'Disk (Local Disk): 74G / 118G (66%)' -# 'Disk (Videos): 74G / 118G (66%)' -# -# none: 'Disk: 74G / 118G (66%)' -# 'Disk: 74G / 118G (66%)' -# 'Disk: 74G / 118G (66%)' -disk_subtitle="mount" - -# Disk percent. -# Show/Hide disk percent. -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --disk_percent -# -# Example: -# on: 'Disk (/): 74G / 118G (66%)' -# off: 'Disk (/): 74G / 118G' -disk_percent="on" - - -# Song - - -# Manually specify a music player. -# -# Default: 'auto' -# Values: 'auto', 'player-name' -# Flag: --music_player -# -# Available values for 'player-name': -# -# amarok -# audacious -# banshee -# bluemindo -# clementine -# cmus -# deadbeef -# deepin-music -# dragon -# elisa -# exaile -# gnome-music -# gmusicbrowser -# gogglesmm -# guayadeque -# io.elementary.music -# iTunes -# juk -# lollypop -# mocp -# mopidy -# mpd -# muine -# netease-cloud-music -# olivia -# playerctl -# pogo -# pragha -# qmmp -# quodlibet -# rhythmbox -# sayonara -# smplayer -# spotify -# strawberry -# tauonmb -# tomahawk -# vlc -# xmms2d -# xnoise -# yarock -music_player="auto" - -# Format to display song information. -# -# Default: '%artist% - %album% - %title%' -# Values: '%artist%', '%album%', '%title%' -# Flag: --song_format -# -# Example: -# default: 'Song: Jet - Get Born - Sgt Major' -song_format="%artist% - %album% - %title%" - -# Print the Artist, Album and Title on separate lines -# -# Default: 'off' -# Values: 'on', 'off' -# Flag: --song_shorthand -# -# Example: -# on: 'Artist: The Fratellis' -# 'Album: Costello Music' -# 'Song: Chelsea Dagger' -# -# off: 'Song: The Fratellis - Costello Music - Chelsea Dagger' -song_shorthand="off" - -# 'mpc' arguments (specify a host, password etc). -# -# Default: '' -# Example: mpc_args=(-h HOST -P PASSWORD) -mpc_args=() - - -# Text Colors - - -# Text Colors -# -# Default: 'distro' -# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' -# Flag: --colors -# -# Each number represents a different part of the text in -# this order: 'title', '@', 'underline', 'subtitle', 'colon', 'info' -# -# Example: -# colors=(distro) - Text is colored based on Distro colors. -# colors=(4 6 1 8 8 6) - Text is colored in the order above. -colors=(distro) - - -# Text Options - - -# Toggle bold text -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --bold -bold="on" - -# Enable/Disable Underline -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --underline -underline_enabled="on" - -# Underline character -# -# Default: '-' -# Values: 'string' -# Flag: --underline_char -underline_char="-" - - -# Info Separator -# Replace the default separator with the specified string. -# -# Default: ':' -# Flag: --separator -# -# Example: -# separator="->": 'Shell-> bash' -# separator=" =": 'WM = dwm' -separator=":" - - -# Color Blocks - - -# Color block range -# The range of colors to print. -# -# Default: '0', '15' -# Values: 'num' -# Flag: --block_range -# -# Example: -# -# Display colors 0-7 in the blocks. (8 colors) -# neofetch --block_range 0 7 -# -# Display colors 0-15 in the blocks. (16 colors) -# neofetch --block_range 0 15 -block_range=(0 15) - -# Toggle color blocks -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --color_blocks -color_blocks="on" - -# Color block width in spaces -# -# Default: '3' -# Values: 'num' -# Flag: --block_width -block_width=3 - -# Color block height in lines -# -# Default: '1' -# Values: 'num' -# Flag: --block_height -block_height=1 - -# Color Alignment -# -# Default: 'auto' -# Values: 'auto', 'num' -# Flag: --col_offset -# -# Number specifies how far from the left side of the terminal (in spaces) to -# begin printing the columns, in case you want to e.g. center them under your -# text. -# Example: -# col_offset="auto" - Default behavior of neofetch -# col_offset=7 - Leave 7 spaces then print the colors -col_offset="auto" - -# Progress Bars - - -# Bar characters -# -# Default: '-', '=' -# Values: 'string', 'string' -# Flag: --bar_char -# -# Example: -# neofetch --bar_char 'elapsed' 'total' -# neofetch --bar_char '-' '=' -bar_char_elapsed="-" -bar_char_total="=" - -# Toggle Bar border -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --bar_border -bar_border="on" - -# Progress bar length in spaces -# Number of chars long to make the progress bars. -# -# Default: '15' -# Values: 'num' -# Flag: --bar_length -bar_length=15 - -# Progress bar colors -# When set to distro, uses your distro's logo colors. -# -# Default: 'distro', 'distro' -# Values: 'distro', 'num' -# Flag: --bar_colors -# -# Example: -# neofetch --bar_colors 3 4 -# neofetch --bar_colors distro 5 -bar_color_elapsed="distro" -bar_color_total="distro" - - -# Info display -# Display a bar with the info. -# -# Default: 'off' -# Values: 'bar', 'infobar', 'barinfo', 'off' -# Flags: --cpu_display -# --memory_display -# --battery_display -# --disk_display -# -# Example: -# bar: '[---=======]' -# infobar: 'info [---=======]' -# barinfo: '[---=======] info' -# off: 'info' -cpu_display="off" -memory_display="off" -battery_display="off" -disk_display="off" - - -# Backend Settings - - -# Image backend. -# -# Default: 'ascii' -# Values: 'ascii', 'caca', 'chafa', 'jp2a', 'iterm2', 'off', -# 'pot', 'termpix', 'pixterm', 'tycat', 'w3m', 'kitty' -# Flag: --backend -image_backend="ascii" - -# Image Source -# -# Which image or ascii file to display. -# -# Default: 'auto' -# Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' -# 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")' -# Flag: --source -# -# NOTE: 'auto' will pick the best image source for whatever image backend is used. -# In ascii mode, distro ascii art will be used and in an image mode, your -# wallpaper will be used. -image_source="auto" - - -# Ascii Options - - -# Ascii distro -# Which distro's ascii art to display. -# -# Default: 'auto' -# Values: 'auto', 'distro_name' -# Flag: --ascii_distro -# NOTE: AIX, Alpine, Anarchy, Android, Antergos, antiX, "AOSC OS", -# "AOSC OS/Retro", Apricity, ArcoLinux, ArchBox, ARCHlabs, -# ArchStrike, XFerience, ArchMerge, Arch, Artix, Arya, Bedrock, -# Bitrig, BlackArch, BLAG, BlankOn, BlueLight, bonsai, BSD, -# BunsenLabs, Calculate, Carbs, CentOS, Chakra, ChaletOS, -# Chapeau, Chrom*, Cleanjaro, ClearOS, Clear_Linux, Clover, -# Condres, Container_Linux, CRUX, Cucumber, Debian, Deepin, -# DesaOS, Devuan, DracOS, DarkOs, DragonFly, Drauger, Elementary, -# EndeavourOS, Endless, EuroLinux, Exherbo, Fedora, Feren, FreeBSD, -# FreeMiNT, Frugalware, Funtoo, GalliumOS, Garuda, Gentoo, Pentoo, -# gNewSense, GNOME, GNU, GoboLinux, Grombyang, Guix, Haiku, Huayra, -# Hyperbola, janus, Kali, KaOS, KDE_neon, Kibojoe, Kogaion, -# Korora, KSLinux, Kubuntu, LEDE, LFS, Linux_Lite, -# LMDE, Lubuntu, Lunar, macos, Mageia, MagpieOS, Mandriva, -# Manjaro, Maui, Mer, Minix, LinuxMint, MX_Linux, Namib, -# Neptune, NetBSD, Netrunner, Nitrux, NixOS, Nurunner, -# NuTyX, OBRevenge, OpenBSD, openEuler, OpenIndiana, openmamba, -# OpenMandriva, OpenStage, OpenWrt, osmc, Oracle, OS Elbrus, PacBSD, -# Parabola, Pardus, Parrot, Parsix, TrueOS, PCLinuxOS, Peppermint, -# popos, Porteus, PostMarketOS, Proxmox, Puppy, PureOS, Qubes, Radix, -# Raspbian, Reborn_OS, Redstar, Redcore, Redhat, Refracted_Devuan, -# Regata, Rosa, sabotage, Sabayon, Sailfish, SalentOS, Scientific, -# Septor, SereneLinux, SharkLinux, Siduction, Slackware, SliTaz, -# SmartOS, Solus, Source_Mage, Sparky, Star, SteamOS, SunOS, -# openSUSE_Leap, openSUSE_Tumbleweed, openSUSE, SwagArch, Tails, -# Trisquel, Ubuntu-Budgie, Ubuntu-GNOME, Ubuntu-MATE, Ubuntu-Studio, -# Ubuntu, Venom, Void, Obarun, windows10, Windows7, Xubuntu, Zorin, -# and IRIX have ascii logos -# NOTE: Arch, Ubuntu, Redhat, and Dragonfly have 'old' logo variants. -# Use '{distro name}_old' to use the old logos. -# NOTE: Ubuntu has flavor variants. -# Change this to Lubuntu, Kubuntu, Xubuntu, Ubuntu-GNOME, -# Ubuntu-Studio, Ubuntu-Mate or Ubuntu-Budgie to use the flavors. -# NOTE: Arcolinux, Dragonfly, Fedora, Alpine, Arch, Ubuntu, -# CRUX, Debian, Gentoo, FreeBSD, Mac, NixOS, OpenBSD, android, -# Antrix, CentOS, Cleanjaro, ElementaryOS, GUIX, Hyperbola, -# Manjaro, MXLinux, NetBSD, Parabola, POP_OS, PureOS, -# Slackware, SunOS, LinuxLite, OpenSUSE, Raspbian, -# postmarketOS, and Void have a smaller logo variant. -# Use '{distro name}_small' to use the small variants. -ascii_distro="auto" - -# Ascii Colors -# -# Default: 'distro' -# Values: 'distro', 'num' 'num' 'num' 'num' 'num' 'num' -# Flag: --ascii_colors -# -# Example: -# ascii_colors=(distro) - Ascii is colored based on Distro colors. -# ascii_colors=(4 6 1 8 8 6) - Ascii is colored using these colors. -ascii_colors=(distro) - -# Bold ascii logo -# Whether or not to bold the ascii logo. -# -# Default: 'on' -# Values: 'on', 'off' -# Flag: --ascii_bold -ascii_bold="on" - - -# Image Options - - -# Image loop -# Setting this to on will make neofetch redraw the image constantly until -# Ctrl+C is pressed. This fixes display issues in some terminal emulators. -# -# Default: 'off' -# Values: 'on', 'off' -# Flag: --loop -image_loop="off" - -# Thumbnail directory -# -# Default: '~/.cache/thumbnails/neofetch' -# Values: 'dir' -thumbnail_dir="${XDG_CACHE_HOME:-${HOME}/.cache}/thumbnails/neofetch" - -# Crop mode -# -# Default: 'normal' -# Values: 'normal', 'fit', 'fill' -# Flag: --crop_mode -# -# See this wiki page to learn about the fit and fill options. -# https://github.com/dylanaraps/neofetch/wiki/What-is-Waifu-Crop%3F -crop_mode="normal" - -# Crop offset -# Note: Only affects 'normal' crop mode. -# -# Default: 'center' -# Values: 'northwest', 'north', 'northeast', 'west', 'center' -# 'east', 'southwest', 'south', 'southeast' -# Flag: --crop_offset -crop_offset="center" - -# Image size -# The image is half the terminal width by default. -# -# Default: 'auto' -# Values: 'auto', '00px', '00%', 'none' -# Flags: --image_size -# --size -image_size="auto" - -# Gap between image and text -# -# Default: '3' -# Values: 'num', '-num' -# Flag: --gap -gap=3 - -# Image offsets -# Only works with the w3m backend. -# -# Default: '0' -# Values: 'px' -# Flags: --xoffset -# --yoffset -yoffset=0 -xoffset=0 - -# Image background color -# Only works with the w3m backend. -# -# Default: '' -# Values: 'color', 'blue' -# Flag: --bg_color -background_color= - - -# Misc Options - -# Stdout mode -# Turn off all colors and disables image backend (ASCII/Image). -# Useful for piping into another command. -# Default: 'off' -# Values: 'on', 'off' -stdout="off" diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json index b370d5c..ba50332 100644 --- a/.config/nvim/lazy-lock.json +++ b/.config/nvim/lazy-lock.json @@ -1,38 +1,39 @@ { "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, - "LuaSnip": { "branch": "master", "commit": "73813308abc2eaeff2bc0d3f2f79270c491be9d7" }, - "better-escape.nvim": { "branch": "master", "commit": "19a38aab94961016430905ebec30d272a01e9742" }, + "LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" }, "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" }, - "cmp-nvim-lsp": { "branch": "main", "commit": "bd5a7d6db125d4654b50eeae9f5217f24bb22fd3" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" }, "cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" }, "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, - "conform.nvim": { "branch": "master", "commit": "fbcb4fa7f34bfea9be702ffff481a8e336ebf6ed" }, - "fidget.nvim": { "branch": "main", "commit": "3f5475949679953af6d78654db29b944fa826e6a" }, - "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, - "gitsigns.nvim": { "branch": "main", "commit": "1ee5c1fd068c81f9dd06483e639c2aa4587dc197" }, - "harpoon": { "branch": "harpoon2", "commit": "ed1f853847ffd04b2b61c314865665e1dadf22c7" }, - "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, - "lazy.nvim": { "branch": "main", "commit": "1ea3c4085785f460fb0e46d2fe1ee895f5f9e7c1" }, - "lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "6bdb14f230de0904229ec367b410fb817e59b072" }, - "mason.nvim": { "branch": "main", "commit": "ad7146aa61dcaeb54fa900144d768f040090bff0" }, - "neo-tree.nvim": { "branch": "main", "commit": "4c60a198e3f92098778a32a1c76d2bd7ba46a3b5" }, + "conform.nvim": { "branch": "master", "commit": "619363c30309d29ffa631e67c8183f2a72caa373" }, + "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, + "fidget.nvim": { "branch": "main", "commit": "6f793b2bcd2d35e201c09520f698bb763220908a" }, + "friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" }, + "gitsigns.nvim": { "branch": "main", "commit": "2038c666bd9d8a0b7349a0b6ee00dc83104b9ecf" }, + "harpoon": { "branch": "harpoon2", "commit": "87b1a3506211538f460786c23f98ec63ad9af4e5" }, + "indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" }, + "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, + "lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "21c5b3ebeaa0412e28096bb0701434c51c1fbf76" }, + "mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" }, + "neo-tree.nvim": { "branch": "main", "commit": "83e7a2982fd12b9c3d35bc39dd5877cd91a02a61" }, "neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, - "nvim-autopairs": { "branch": "master", "commit": "7a2c97cccd60abc559344042fefb1d5a85b3e33b" }, - "nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" }, - "nvim-lspconfig": { "branch": "master", "commit": "ac98db2f9f06a56498ec890a96928774eae412c3" }, - "nvim-surround": { "branch": "main", "commit": "a868c256c861044beb9794b4dd126480dcdfbdad" }, - "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, - "nvim-treesitter-textobjects": { "branch": "master", "commit": "71385f191ec06ffc60e80e6b0c9a9d5daed4824c" }, - "nvim-ts-context-commentstring": { "branch": "main", "commit": "1b212c2eee76d787bbea6aa5e92a2b534e7b4f8f" }, - "nvim-web-devicons": { "branch": "master", "commit": "b8221e42cf7287c4dcde81f232f58d7b947c210d" }, - "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, - "schemastore.nvim": { "branch": "main", "commit": "caad5439cc80809be7475b625a5e36d1bb06cc7e" }, - "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, + "nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" }, + "nvim-cmp": { "branch": "main", "commit": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca" }, + "nvim-lspconfig": { "branch": "master", "commit": "bfcc0171a43f22afa61d927ffe9fcb6cb85dc99e" }, + "nvim-surround": { "branch": "main", "commit": "2e93e154de9ff326def6480a4358bfc149d5da2c" }, + "nvim-treesitter": { "branch": "master", "commit": "cf12346a3414fa1b06af75c79faebe7f76df080a" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" }, + "nvim-web-devicons": { "branch": "master", "commit": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c" }, + "oil.nvim": { "branch": "master", "commit": "b73018b75affd13fa38e2fc94ef753b465f770d7" }, + "plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" }, + "schemastore.nvim": { "branch": "main", "commit": "c73e2b170a4927d1dc1b48e878bba6cf0ed9b07c" }, + "telescope-fzf-native.nvim": { "branch": "main", "commit": "b25b749b9db64d375d782094e2b9dce53ad53a40" }, "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, - "tokyonight.nvim": { "branch": "main", "commit": "d14614cbfc63b6037bfccd48bb982d2ad2003352" }, - "vim-fugitive": { "branch": "master", "commit": "61b51c09b7c9ce04e821f6cf76ea4f6f903e3cf4" }, - "which-key.nvim": { "branch": "main", "commit": "b4177e3eaf15fe5eb8357ebac2286d488be1ed00" } + "tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" }, + "undotree": { "branch": "master", "commit": "6fa6b57cda8459e1e4b2ca34df702f55242f4e4d" }, + "vim-fugitive": { "branch": "master", "commit": "3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f0" }, + "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" } } diff --git a/.config/nvim/lua/core/options.lua b/.config/nvim/lua/core/options.lua index ccb8d57..4d89629 100644 --- a/.config/nvim/lua/core/options.lua +++ b/.config/nvim/lua/core/options.lua @@ -26,6 +26,7 @@ opt.ignorecase = true opt.smartcase = true opt.hlsearch = true opt.incsearch = true +opt.inccommand = 'split' -- Aussehen opt.termguicolors = true @@ -59,3 +60,31 @@ opt.completeopt = 'menu,menuone,noselect' -- Fold (erstmal aus) opt.foldenable = false + +-- ============================================================================ +-- NEU: Automatischer Wechsel für QA vs. Speed (Hybrid Line Numbers) +-- ============================================================================ +-- Normal Mode = Relative Nummern (zum schnellen Springen) +-- Insert Mode = Absolute Nummern (zum Ablesen für Tickets/Kollegen) +local augroup = vim.api.nvim_create_augroup("numbertoggle", {}) + +vim.api.nvim_create_autocmd({ "BufEnter", "FocusGained", "InsertLeave", "CmdlineLeave" }, { + group = augroup, + pattern = "*", + callback = function() + if vim.o.nu and vim.api.nvim_get_mode().mode ~= "i" then + vim.opt.relativenumber = true + end + end, +}) + +vim.api.nvim_create_autocmd({ "BufLeave", "FocusLost", "InsertEnter", "CmdlineEnter" }, { + group = augroup, + pattern = "*", + callback = function() + if vim.o.nu then + vim.opt.relativenumber = false + vim.cmd "redraw" + end + end, +}) diff --git a/.config/nvim/lua/plugins/editor.lua b/.config/nvim/lua/plugins/editor.lua index e21933d..f8b277a 100644 --- a/.config/nvim/lua/plugins/editor.lua +++ b/.config/nvim/lua/plugins/editor.lua @@ -1,67 +1,57 @@ -- ============================================================================ --- Editor - Quality of Life Plugins +-- Editor Enhancements - Comment, Surround, etc. -- ============================================================================ return { - -- Auto pairs - { - 'windwp/nvim-autopairs', - event = 'InsertEnter', - config = true, - }, - - -- Comment.nvim + -- Comment.nvim - gc zum Kommentieren { 'numToStr/Comment.nvim', - event = { 'BufReadPost', 'BufNewFile' }, - dependencies = { - 'JoosepAlviste/nvim-ts-context-commentstring', - }, + event = 'VeryLazy', config = function() require('Comment').setup({ - pre_hook = require('ts_context_commentstring.integrations.comment_nvim').create_pre_hook(), + -- LHS of toggle mappings in NORMAL mode + toggler = { + line = 'gcc', -- Line-comment toggle + block = 'gbc', -- Block-comment toggle + }, + -- LHS of operator-pending mappings in NORMAL and VISUAL mode + opleader = { + line = 'gc', -- Line-comment operator + block = 'gb', -- Block-comment operator + }, }) end, }, - -- Surround + -- Surround - ys/cs/ds für quotes, brackets, etc. { 'kylechui/nvim-surround', version = '*', event = 'VeryLazy', - config = true, + config = function() + require('nvim-surround').setup() + end, }, - -- Better escape + -- Auto-pairs { - 'max397574/better-escape.nvim', + 'windwp/nvim-autopairs', event = 'InsertEnter', config = function() - require('better_escape').setup({ - mapping = { 'jk', 'jj' }, - timeout = 200, - }) + require('nvim-autopairs').setup() end, }, - -- Which-key (zeigt Keybindings) + -- Undo-tree - Visueller Undo-Verlauf { - 'folke/which-key.nvim', - event = 'VeryLazy', - init = function() - vim.o.timeout = true - vim.o.timeoutlen = 300 - end, - opts = { - -- Deine Leader-Gruppen - spec = { - { 'f', group = 'Find' }, - { 'g', group = 'Git' }, - { 'h', group = 'Hunk' }, - { 't', group = 'Toggle' }, - { 'c', group = 'Code' }, - { 'w', group = 'Workspace' }, - }, + 'mbbill/undotree', + cmd = 'UndotreeToggle', + keys = { + { 'u', 'UndotreeToggle', desc = 'Toggle Undotree' }, }, + config = function() + vim.g.undotree_WindowLayout = 3 + vim.g.undotree_SetFocusWhenToggle = 1 + end, }, } diff --git a/.config/nvim/lua/plugins/git.lua b/.config/nvim/lua/plugins/git.lua index da1698e..1984aaa 100644 --- a/.config/nvim/lua/plugins/git.lua +++ b/.config/nvim/lua/plugins/git.lua @@ -8,6 +8,14 @@ return { 'lewis6991/gitsigns.nvim', event = { 'BufReadPre', 'BufNewFile' }, opts = { + current_line_blame = true, + current_line_blame_opts = { + virt_text = true, + virt_text_pos = 'eol', + delay = 100, + }, + current_line_blame_formatter = ' ', + signs = { add = { text = '│' }, change = { text = '│' }, @@ -41,8 +49,10 @@ return { -- Actions map('n', 'hs', gs.stage_hunk, { desc = 'Stage hunk' }) map('n', 'hr', gs.reset_hunk, { desc = 'Reset hunk' }) - map('v', 'hs', function() gs.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end, { desc = 'Stage hunk' }) - map('v', 'hr', function() gs.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end, { desc = 'Reset hunk' }) + map('v', 'hs', function() gs.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end, + { desc = 'Stage hunk' }) + map('v', 'hr', function() gs.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end, + { desc = 'Reset hunk' }) map('n', 'hS', gs.stage_buffer, { desc = 'Stage buffer' }) map('n', 'hu', gs.undo_stage_hunk, { desc = 'Undo stage hunk' }) map('n', 'hR', gs.reset_buffer, { desc = 'Reset buffer' }) @@ -61,11 +71,11 @@ return { 'tpope/vim-fugitive', cmd = { 'Git', 'G', 'Gdiffsplit', 'Gread', 'Gwrite', 'Ggrep', 'GMove', 'GDelete', 'GBrowse', 'GRemove', 'GRename', 'Glgrep', 'Gedit' }, keys = { - { 'gs', 'Git', desc = 'Git status' }, + { 'gs', 'Git', desc = 'Git status' }, { 'gc', 'Git commit', desc = 'Git commit' }, - { 'gp', 'Git push', desc = 'Git push' }, - { 'gl', 'Git log', desc = 'Git log' }, - { 'gb', 'Git blame', desc = 'Git blame' }, + { 'gp', 'Git push', desc = 'Git push' }, + { 'gl', 'Git log', desc = 'Git log' }, + { 'gb', 'Git blame', desc = 'Git blame' }, { 'gd', 'Gdiffsplit', desc = 'Git diff' }, }, }, diff --git a/.config/nvim/lua/plugins/lsp.lua b/.config/nvim/lua/plugins/lsp.lua index 86d5347..15690df 100644 --- a/.config/nvim/lua/plugins/lsp.lua +++ b/.config/nvim/lua/plugins/lsp.lua @@ -10,10 +10,10 @@ return { -- Mason: LSP Server installer 'williamboman/mason.nvim', 'williamboman/mason-lspconfig.nvim', - + -- Status updates für LSP { 'j-hui/fidget.nvim', opts = {} }, - + -- Neodev für Neovim config entwicklung { 'folke/neodev.nvim', opts = {} }, }, @@ -38,22 +38,26 @@ return { require('mason-lspconfig').setup({ ensure_installed = { -- Primary (TypeScript/Playwright) - 'ts_ls', -- TypeScript/JavaScript - + 'ts_ls', -- TypeScript/JavaScript + -- Secondary (Go) - 'gopls', -- Go - + 'gopls', -- Go + -- Python (für Scripts/Workflows) - 'pyright', -- Python - + 'pyright', -- Python + + -- LaTeX + 'texlab', + -- Supporting - 'lua_ls', -- Lua (für Neovim config) - 'html', -- HTML - 'cssls', -- CSS - 'jsonls', -- JSON - 'yamlls', -- YAML - 'dockerls', -- Dockerfile + 'lua_ls', -- Lua (für Neovim config) + 'html', -- HTML + 'cssls', -- CSS + 'jsonls', -- JSON + 'yamlls', -- YAML + 'dockerls', -- Dockerfile 'docker_compose_language_service', -- Docker Compose + 'eslint', -- Eslinter }, }) @@ -98,11 +102,25 @@ return { callback = vim.lsp.buf.clear_references, }) end - end, + + if client and client.name == 'eslint' then + vim.api.nvim_create_autocmd('BufWritePre', { + buffer = event.buf, + callback = function() + -- Statt vim.cmd('EslintFixAll') nutzen wir die direkte LSP-Aktion: + vim.lsp.buf.code_action({ + context = { only = { "source.fixAll.eslint" } }, + apply = true, + }) + end, + desc = 'ESLint: Fixe alle Probleme beim Speichern (0.11 Style)', + }) + end + end }) -- ========== Server Configurations ========== - + -- TypeScript/JavaScript (ts_ls) vim.lsp.config('ts_ls', { capabilities = capabilities, @@ -203,6 +221,43 @@ return { }, }) + -- Eslinter + vim.lsp.config('eslint', { + capabilities = capabilities, + settings = { + workingDirectory = { mode = 'auto' }, + }, + }) + vim.lsp.enable('eslint') + + + -- LaTeX (texlab) + vim.lsp.config('texlab', { + capabilities = capabilities, + settings = { + texlab = { + build = { + executable = 'pdflatex', + args = { '%f' }, + onSave = true, -- Auto-compile beim Speichern + forwardSearchAfter = false, + }, + forwardSearch = { + executable = 'open', + args = { '%p' }, + }, + chktex = { + onOpenAndSave = true, + }, + diagnosticsDelay = 300, + latexFormatter = 'latexindent', + latexindent = { + modifyLineBreaks = false, + }, + }, + }, + }) + -- JSON mit Schema Support vim.lsp.config('jsonls', { capabilities = capabilities, @@ -247,14 +302,22 @@ return { capabilities = capabilities, }) - -- ========== Diagnostics Configuration ========== - + -- ========== Diagnostics Configuration (Modern 0.11 Style) ========== + vim.diagnostic.config({ + -- Hier werden die Zeichen jetzt direkt definiert (ersetzt sign_define) + signs = { + text = { + [vim.diagnostic.severity.ERROR] = '✘', + [vim.diagnostic.severity.WARN] = '▲', + [vim.diagnostic.severity.HINT] = '⚑', + [vim.diagnostic.severity.INFO] = '»', + }, + }, virtual_text = { prefix = '●', source = 'if_many', }, - signs = true, underline = true, update_in_insert = false, severity_sort = true, @@ -266,24 +329,21 @@ return { }, }) - -- Diagnostic signs - local signs = { Error = '✘', Warn = '▲', Hint = '⚑', Info = '»' } - for type, icon in pairs(signs) do - local hl = 'DiagnosticSign' .. type - vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = '' }) + -- LSP Hover & Signature Help Styling + local handlers = { + ['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, { border = 'rounded' }), + ['textDocument/signatureHelp'] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = 'rounded' }), + } + + -- Handlers registrieren + for method, handler in pairs(handlers) do + vim.lsp.handlers[method] = handler end - -- LSP Hover border - vim.lsp.handlers['textDocument/hover'] = vim.lsp.with( - vim.lsp.handlers.hover, - { border = 'rounded' } - ) - - vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with( - vim.lsp.handlers.signature_help, - { border = 'rounded' } - ) - end, + -- Hover Popup Styling (Highlights) + vim.api.nvim_set_hl(0, 'NormalFloat', { bg = '#1e1e1e', fg = '#ffffff' }) + vim.api.nvim_set_hl(0, 'FloatBorder', { fg = '#61afef', bg = '#1e1e1e' }) + end, -- Hier endet die config-Funktion des Plugins }, -- SchemaStore für JSON/YAML diff --git a/.config/nvim/lua/plugins/neotree.lua b/.config/nvim/lua/plugins/neotree.lua index 80fa4f4..006f167 100644 --- a/.config/nvim/lua/plugins/neotree.lua +++ b/.config/nvim/lua/plugins/neotree.lua @@ -1,5 +1,5 @@ -- ============================================================================ --- Neo-tree - File Explorer (ASCII Mode - Keine Nerd Font Icons benötigt) +-- Neo-tree - File Explorer -- ============================================================================ return { diff --git a/.config/nvim/lua/plugins/oil.lua b/.config/nvim/lua/plugins/oil.lua new file mode 100644 index 0000000..dbe4a3b --- /dev/null +++ b/.config/nvim/lua/plugins/oil.lua @@ -0,0 +1,13 @@ +return { + 'stevearc/oil.nvim', + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + require("oil").setup({ + view_options = { + show_hidden = true, -- Damit du auch .husky, .env etc. siehst + }, + }) + -- Der Primeagen-Shortcut: Einfach '-' drücken um den Ordner zu öffnen + vim.keymap.set("n", "-", "Oil", { desc = "Open parent directory" }) + end, +} diff --git a/.config/nvim/lua/plugins/telescope.lua b/.config/nvim/lua/plugins/telescope.lua index 09f6631..3a44d85 100644 --- a/.config/nvim/lua/plugins/telescope.lua +++ b/.config/nvim/lua/plugins/telescope.lua @@ -17,7 +17,7 @@ return { end, }, { 'nvim-telescope/telescope-ui-select.nvim' }, - { 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font }, + { 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font }, }, config = function() local telescope = require('telescope') diff --git a/.config/nvim/lua/plugins/ui.lua b/.config/nvim/lua/plugins/ui.lua index d77aa6c..7a4ff70 100644 --- a/.config/nvim/lua/plugins/ui.lua +++ b/.config/nvim/lua/plugins/ui.lua @@ -1,59 +1,73 @@ -- ============================================================================ --- UI - Colorscheme & Statusline +-- UI Enhancements - Colorscheme, Statusline, Which-Key -- ============================================================================ return { - -- Tokyonight Theme + -- Colorscheme: Tokyo Night { 'folke/tokyonight.nvim', - lazy = false, priority = 1000, config = function() require('tokyonight').setup({ style = 'night', - transparent = true, + transparent = true, -- DEIN ALTER WERT! terminal_colors = true, styles = { - sidebars = 'transparent', - floats = 'transparent', + comments = { italic = true }, + keywords = { italic = true }, + sidebars = 'transparent', -- DEIN ALTER WERT! + floats = 'transparent', -- DEIN ALTER WERT! }, - on_colors = function(colors) - colors.bg_statusline = colors.none - end, }) vim.cmd.colorscheme('tokyonight-night') end, }, - -- Lualine Statusline + -- Statusline { 'nvim-lualine/lualine.nvim', dependencies = { 'nvim-tree/nvim-web-devicons' }, + config = function() + require('lualine').setup({ + options = { + theme = 'tokyonight', + component_separators = { left = '', right = '' }, + section_separators = { left = '', right = '' }, + }, + sections = { + lualine_a = { 'mode' }, + lualine_b = { 'branch', 'diff', 'diagnostics' }, + lualine_c = { + { + 'filename', + path = 1, -- Relativer Pfad + } + }, + lualine_x = { 'encoding', 'fileformat', 'filetype' }, + lualine_y = { 'progress' }, + lualine_z = { 'location' } + }, + }) + end, + }, + + -- Which-Key: Zeigt verfügbare Keybindings + { + 'folke/which-key.nvim', event = 'VeryLazy', opts = { - options = { - theme = 'tokyonight', - component_separators = { left = '', right = '' }, - section_separators = { left = '', right = '' }, - globalstatus = true, + preset = 'modern', + delay = 500, + win = { + border = 'rounded', }, - sections = { - lualine_a = { 'mode' }, - lualine_b = { 'branch', 'diff', 'diagnostics' }, - lualine_c = { - { - 'filename', - path = 1, -- Relativer Pfad - symbols = { - modified = '[+]', - readonly = '[-]', - unnamed = '[No Name]', - } - } - }, - lualine_x = { 'encoding', 'fileformat', 'filetype' }, - lualine_y = { 'progress' }, - lualine_z = { 'location' } + spec = { + { 'f', group = 'find' }, + { 'g', group = 'git' }, + { 'e', group = 'explorer' }, + { 'c', group = 'code' }, + { 'w', group = 'workspace' }, + { 'a', group = 'avente/ai' }, }, }, }, @@ -61,15 +75,32 @@ return { -- Indent guides { 'lukas-reineke/indent-blankline.nvim', - event = { 'BufReadPost', 'BufNewFile' }, main = 'ibl', + event = { 'BufReadPost', 'BufNewFile' }, opts = { indent = { char = '│', }, scope = { - show_start = false, - show_end = false, + enabled = true, + }, + }, + }, + + { + 'stevearc/dressing.nvim', + lazy = false, -- Wichtig, damit es sofort bereit ist + opts = { + input = { + enabled = true, + default_prompt = "➤ ", + border = "rounded", + relative = "editor", + prefer_width = 50, + }, + select = { + enabled = true, + backend = { "nui", "builtin" }, -- Telescope hier bewusst rauslassen! }, }, }, diff --git a/.config/starship.toml b/.config/starship.toml index 13bf89b..e9bd9dc 100644 --- a/.config/starship.toml +++ b/.config/starship.toml @@ -14,7 +14,7 @@ $line_break\ $character""" # Fast command execution -command_timeout = 1000 +command_timeout = 3000 [time] disabled = false diff --git a/.config/tmux/tmux.conf b/.config/tmux/tmux.conf new file mode 100644 index 0000000..ec50dc7 --- /dev/null +++ b/.config/tmux/tmux.conf @@ -0,0 +1,5 @@ +# Maus-support aktivate +set -g mouse on + +# Options: +set -g history-limit 10000 diff --git a/.config/yabai/yabairc b/.config/yabai/yabairc old mode 100755 new mode 100644 diff --git a/README.md b/README.md index 3599f91..ce2d978 100644 --- a/README.md +++ b/README.md @@ -53,15 +53,30 @@ nvim ### Manuelle Installation ```bash -# Core tools installieren -brew install git neovim fish starship fzf ripgrep fd bat btop -brew install --cask ghostty +# Custom taps hinzufügen (für Yabai) +brew tap koekeishiya/formulae + +# Core & Development tools installieren +brew install git neovim fish starship fzf ripgrep fd bat btop neofetch direnv lazygit mise yabai tmux +brew install --cask ghostty 1password-cli # Symlinks erstellen ln -sf ~/gits/dotfiles/.config/fish ~/.config/fish ln -sf ~/gits/dotfiles/.config/nvim ~/.config/nvim ln -sf ~/gits/dotfiles/.config/ghostty ~/.config/ghostty ln -sf ~/gits/dotfiles/.config/starship.toml ~/.config/starship.toml +ln -sf ~/gits/dotfiles/.config/neofetch ~/.config/neofetch +ln -sf ~/gits/dotfiles/.config/yabai ~/.config/yabai + +# Btop & Htop Konfigurationsdateien verlinken +mkdir -p ~/.config/btop ~/.config/htop +ln -sf ~/gits/dotfiles/.config/btop/btop.conf ~/.config/btop/btop.conf +ln -sf ~/gits/dotfiles/.config/htop/htoprc ~/.config/htop/htoprc + +# Tmux Konfiguration verlinken (modern & klassisch) +mkdir -p ~/.config/tmux +ln -sf ~/gits/dotfiles/.config/tmux/tmux.conf ~/.config/tmux/tmux.conf +ln -sf ~/gits/dotfiles/.config/tmux/tmux.conf ~/.tmux.conf # Fish als default shell chsh -s $(which fish) @@ -205,6 +220,25 @@ nvim --- +## 🤖 KI / AI CLI Tools (Optional) + +Das Installationsskript kann optional verschiedene KI-Kommandozeilentools für Sie einrichten: + +* **Google Antigravity CLI (`agy`)**: Das primäre AI-Agent-Werkzeug für dieses Setup. + * Installation: `curl -sS https://antigravity.google/install.sh | bash` +* **Claude Code (`@anthropic-ai/claude-code`)**: Anthropic's offizielles, agentisches Terminal-Tool für Claude. + * Installation (via Mise): `mise exec -- npm install -g @anthropic-ai/claude-code` +* **LLM CLI (`llm`)**: Simon Willison's CLI für den universellen API-Zugriff auf ChatGPT, Claude und DeepSeek über Plugins. + * Installation: `brew install llm` bzw. `pip install llm` + * Plugins: `llm install llm-claude llm-gpt3 llm-deepseek` +* **tgpt**: Ein Zero-Config Terminal ChatGPT Client (benötigt keinen API-Key). + * Installation: `brew install tgpt` +* **Ollama**: Zum lokalen Offline-Ausführen von Modellen wie `deepseek-coder`. + * Installation: `brew install --cask ollama` (macOS) bzw. `curl -fsSL https://ollama.com/install.sh | sh` (Linux) + * Ausführen: `ollama run deepseek-coder` + +--- + ## 🎨 Features ### Neovim @@ -216,7 +250,7 @@ nvim ✅ **Lazy Loading** - Schneller Start ### Fish Shell -✅ **NVM Integration** - Node Version Management +✅ **Mise Integration** - Modernes Tool- & Node-Version-Management ✅ **FZF Integration** - Fuzzy finding everywhere ✅ **Git Shortcuts** - Aliases für häufige Commands ✅ **Kubernetes** - kubectl completion diff --git a/install.sh b/install.sh index aae827d..58186ec 100644 --- a/install.sh +++ b/install.sh @@ -143,11 +143,48 @@ backup_configs() { [ -d ~/.config/btop ] && cp -r ~/.config/btop "$BACKUP_DIR/" [ -d ~/.config/htop ] && cp -r ~/.config/htop "$BACKUP_DIR/" [ -d ~/.config/yabai ] && cp -r ~/.config/yabai "$BACKUP_DIR/" + [ -d ~/.config/mise ] && cp -r ~/.config/mise "$BACKUP_DIR/" [ -f ~/.config/starship.toml ] && cp ~/.config/starship.toml "$BACKUP_DIR/" + [ -f ~/.tmux.conf ] && cp ~/.tmux.conf "$BACKUP_DIR/" + [ -d ~/.config/tmux ] && cp -r ~/.config/tmux "$BACKUP_DIR/" log "Backup created: $BACKUP_DIR" } +install_1password_cli() { + log "Installing 1Password CLI..." + + if command -v op &> /dev/null; then + log "1Password CLI is already installed." + return + fi + + case $OS in + "macos") + install_cask 1password-cli + ;; + "arch") + if command -v yay &> /dev/null; then + yay -S --noconfirm 1password-cli + else + sudo pacman -S --noconfirm 1password-cli + fi + ;; + "debian") + log "Configuring APT repository for 1Password..." + curl -sS https://downloads.1password.com/linux/keys/1password.asc | sudo gpg --dearmor --output /usr/share/keyrings/1password-archive-keyring.gpg + echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/1password-archive-keyring.gpg] https://downloads.1password.com/linux/debian/amd64 stable main' | sudo tee /etc/apt/sources.list.d/1password.list + sudo apt update && sudo apt install -y 1password-cli + ;; + "fedora") + log "Configuring DNF repository for 1Password..." + sudo rpm --import https://downloads.1password.com/linux/keys/1password.asc + sudo sh -c 'echo -e "[1password]\nname=1Password Stable Channel\nbaseurl=https://downloads.1password.com/linux/rpm/stable/\$basearch\nenabled=1\ngpgcheck=1\ngpgkey=https://downloads.1password.com/linux/keys/1password.asc" > /etc/yum.repos.d/1password.repo' + sudo dnf install -y 1password-cli + ;; + esac +} + install_core_tools() { log "Installing core development tools..." @@ -164,11 +201,12 @@ install_core_tools() { install_package bat install_package btop install_package neofetch + install_package tmux # Development install_package go install_package python3 - install_package node + install_package mise # Terminal install_cask ghostty @@ -176,6 +214,11 @@ install_core_tools() { # Optional tools install_package direnv install_package lazygit + + # Window manager + log "Tapping koekeishiya/formulae for yabai..." + brew tap koekeishiya/formulae + install_package yabai ;; "arch") # Check if yay is installed @@ -189,8 +232,8 @@ install_core_tools() { # Install via yay yay -S --noconfirm \ - git neovim fish starship fzf ripgrep fd bat btop neofetch \ - go python nodejs npm \ + git neovim fish starship fzf ripgrep fd bat btop neofetch tmux \ + go python mise \ ghostty direnv lazygit ;; "debian"|"fedora") @@ -202,6 +245,7 @@ install_core_tools() { install_package fd-find install_package bat install_package neofetch + install_package tmux # Neovim (from source if needed) if ! command -v nvim &> /dev/null; then @@ -215,12 +259,19 @@ install_core_tools() { # Development install_package golang install_package python3 - install_package nodejs + + # Install mise + if ! command -v mise &> /dev/null; then + log "Installing mise version manager..." + curl https://mise.run | sh + fi warn "Ghostty needs manual installation on $OS" ;; esac + install_1password_cli + log "Core tools installed!" } @@ -338,18 +389,145 @@ setup_other_configs() { ln -sf "$DOTFILES_DIR/.config/yabai" ~/.config/yabai fi + # Mise + if [ -d "$DOTFILES_DIR/.config/mise" ]; then + rm -rf ~/.config/mise + ln -sf "$DOTFILES_DIR/.config/mise" ~/.config/mise + fi + + # Tmux + if [ -d "$DOTFILES_DIR/.config/tmux" ]; then + rm -rf ~/.config/tmux + ln -sf "$DOTFILES_DIR/.config/tmux" ~/.config/tmux + # Symlink tmux.conf to home directory for backward compatibility + rm -f ~/.tmux.conf + ln -sf "$DOTFILES_DIR/.config/tmux/tmux.conf" ~/.tmux.conf + fi + log "Configurations symlinked!" } install_playwright() { log "Installing Playwright..." - if command -v npm &> /dev/null; then + local MISE_CMD="mise" + if [ -f "$HOME/.local/bin/mise" ]; then + MISE_CMD="$HOME/.local/bin/mise" + fi + + if command -v "$MISE_CMD" &> /dev/null; then + log "Using mise node runtime for global packages..." + "$MISE_CMD" exec -- npm install -g @playwright/test + "$MISE_CMD" exec -- npx playwright install + log "Playwright installed!" + elif command -v npm &> /dev/null; then + log "Using system npm..." npm install -g @playwright/test npx playwright install log "Playwright installed!" else - warn "npm not found, skipping Playwright" + warn "npm / mise not found, skipping Playwright" + fi +} + +install_optional_ai_tools() { + # Check if stdin is a terminal (tty) to avoid hanging in automated setups + if [ ! -t 0 ]; then + log "Non-interactive shell detected, skipping optional AI tools installation." + return 0 + fi + + log "Checking Google Antigravity CLI status..." + if ! command -v agy &> /dev/null; then + warn "Google Antigravity CLI (agy) is not installed in the PATH." + log "To install it, run the official installer: curl -sS https://antigravity.google/install.sh | bash" + else + log "Google Antigravity CLI (agy) is already installed." + fi + + echo -e "\n${YELLOW}=== Optional AI CLI Tools ===${NC}" + + # Prompt helper + prompt_yes_no() { + local prompt_msg=$1 + local response + read -p "$prompt_msg [y/N]: " response + case "$response" in + [yY][eE][sS]|[yY]) + return 0 + ;; + *) + return 1 + ;; + esac + } + + # 1. Claude Code + if prompt_yes_no "Do you want to install Claude Code (@anthropic-ai/claude-code)?"; then + log "Installing Claude Code..." + local MISE_CMD="mise" + [ -f "$HOME/.local/bin/mise" ] && MISE_CMD="$HOME/.local/bin/mise" + if command -v "$MISE_CMD" &> /dev/null; then + "$MISE_CMD" exec -- npm install -g @anthropic-ai/claude-code + elif command -v npm &> /dev/null; then + npm install -g @anthropic-ai/claude-code + else + warn "npm / mise not found, cannot install Claude Code." + fi + fi + + # 2. Simon Willison's LLM CLI (supports OpenAI, Claude, DeepSeek via plugins) + if prompt_yes_no "Do you want to install Simon Willison's LLM CLI (supports ChatGPT, Claude, DeepSeek)?"; then + log "Installing LLM CLI..." + case $PACKAGE_MANAGER in + "brew") + brew install llm + ;; + *) + if command -v pip3 &> /dev/null; then + pip3 install llm + elif command -v pip &> /dev/null; then + pip install llm + else + warn "pip not found, cannot install llm cli." + fi + ;; + esac + + # Install plugins if llm is installed + if command -v llm &> /dev/null; then + log "Installing plugins for llm (llm-claude, llm-gpt3, llm-deepseek)..." + llm install llm-claude + llm install llm-gpt3 + llm install llm-deepseek || true + fi + fi + + # 3. tgpt (Zero-config terminal GPT chat client) + if prompt_yes_no "Do you want to install tgpt (Zero-config Terminal ChatGPT)?"; then + log "Installing tgpt..." + case $PACKAGE_MANAGER in + "brew") + brew install tgpt + ;; + *) + curl -sSL https://raw.githubusercontent.com/aandrew-me/tgpt/main/install.sh | bash -s -- -y + ;; + esac + fi + + # 4. Ollama (for running DeepSeek locally offline) + if prompt_yes_no "Do you want to install Ollama (to run DeepSeek and other models locally)?"; then + log "Installing Ollama..." + case $OS in + "macos") + install_cask ollama + ;; + *) + curl -fsSL https://ollama.com/install.sh | sh + ;; + esac + log "To run DeepSeek locally after Ollama is running, execute: ollama run deepseek-coder" fi } @@ -361,7 +539,19 @@ main() { setup_fish setup_neovim setup_other_configs + + # Install runtimes via mise + local MISE_CMD="mise" + if [ -f "$HOME/.local/bin/mise" ]; then + MISE_CMD="$HOME/.local/bin/mise" + fi + if command -v "$MISE_CMD" &> /dev/null; then + log "Installing language runtimes configured in mise..." + "$MISE_CMD" install + fi + install_playwright + install_optional_ai_tools echo -e "${GREEN} ╔══════════════════════════════════════════════════════════╗