diff --git a/README.md b/README.md --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ #### Install dotfiles ``` rm -rf ~/.config/fish -stow -d dotfiles bin cpupower direnv fish git gtk neofetch nvim pacman ripgrep mise starship stow terminator wayland yay +stow -d dotfiles bin cpupower direnv fish git gtk neofetch nvim pacman ripgrep mise starship stow wayland yay ghostty ``` #### Use systemd-resolved diff --git a/alacritty/.config/alacritty/alacritty.toml b/alacritty/.config/alacritty/alacritty.toml new file mode 100644 --- /dev/null +++ b/alacritty/.config/alacritty/alacritty.toml @@ -0,0 +1,28 @@ +[general] +import = ["/usr/share/alacritty/themes/nord.toml"] + +[window] +padding = { x = 8, y = 10 } +dynamic_padding = true + +[font] +normal = { family = "Hack Nerd Font", style = "Regular" } +bold = { family = "Hack Nerd Font", style = "Bold" } +italic = { family = "Hack Nerd Font", style = "Italic" } +bold_italic = { family = "Hack Nerd Font", style = "Bold Italic" } +size = 10 +offset = { x = 0, y = 0 } +builtin_box_drawing = true + +[env] +# TERM = "alacritty-direct" + +[terminal] +osc52 = "CopyPaste" + +[keyboard] +bindings = [ + { key = "M", mods = "Control", chars = "\u001b[109;5u" }, + { key = "V", mods = "Control|Shift", action = "Paste" }, + { key = "C", mods = "Control|Shift", action = "Copy" }, +] diff --git a/arch-desktop-packages b/arch-desktop-packages --- a/arch-desktop-packages +++ b/arch-desktop-packages @@ -11,7 +11,6 @@ audacity bitwarden bluez-tools bluez-utils -chromium cjdns cups customizepkg-git @@ -41,6 +40,7 @@ gnome-browser-connector gnome-epub-thumbnailer gnome-firmware gnome-themes-extra +gnome-shell-extensions google-chrome google-chrome-dev gparted @@ -104,7 +104,7 @@ osu-lazer-tachyon-bin otf-latin-modern otf-latinmodern-math pavucontrol -piper +solaar pipewire pipewire-alsa pipewire-jack @@ -144,6 +144,7 @@ tetrio-desktop throttled torbrowser-launcher tosu +tosu-overlay trezor-suite-appimage ttf-arphic-uming ttf-hack @@ -183,3 +184,5 @@ ddcutil qadwaitadecorations-qt5 qadwaitadecorations-qt6 keylightd-bin +prismlauncher +btrfs-desktop-notification diff --git a/arch-installed-aur b/arch-installed-aur new file mode 100644 --- /dev/null +++ b/arch-installed-aur @@ -0,0 +1,161 @@ +adwsteamgtk +air-bin +albert +all-ways-egpu-git +android-sdk-platform-tools +android-studio +aoc-cli +archiso-systemd-boot +arrpc +ast-grep-bin +audacity-plugins +bfg +bifrost-bin +browser-vacuum +c_formatter_42 +carapace-bin +carps-cups-git +claude-desktop-bin +cpuid2cpuflags +curl-impersonate-bin +customizepkg-git +datagrip +datagrip-jre +dbgate-bin +ddcui +discord-chat-exporter-gui +docker-credential-secretservice-bin +dotnet-runtime-9.0-bin +dumbpipe-bin +easyeffects-bundy01-presets +electron30-bin +electron34-bin +ffmpeg-audio-thumbnailer +figma-agent-linux-bin +figma-linux-bin +ghostmirror +git-backdate-git +git-cola +gitbutler-bin +glfw-wayland-minecraft-cursorfix +gnome-egpu-git +gnome-shell-extension-argos-git +gnu-netcat +goat-cli +google-chrome +google-chrome-dev +graphite-cli +httptap-bin +inotify-info +java21-openjfx-bin +jdk24-graalvm-ce-bin +jj-spr-git +jsonnet +k0sctl-bin +keybase-bin +keylight-commander-bin +keylight-control +keylight-systray +keylightd-bin +lazydocker-bin +libdeep_filter_ladspa-bin +libinput-gestures +librespeed-cli-bin +linux-apfs-rw-dkms-git +locale-en-nl-git +losslesscut-bin +mailspring-bin +mcaselector +mcat-bin +mcomix +miunlocktool-git +modrinth-app-bin +mpv-thumbfast-git +mpv-uosc +mullvad-vpn-bin +nautilus-bluetooth +neosu-bin +neovim-plenary-git +netpeek +odin4-cli +opencode-bin +osu +osu-lazer-tachyon-bin +p7zip-gui +pacoloco-git +pandoc-bin +pdfjumbler +pkgdu +plex-desktop +plex-mpv-shim +plexamp-appimage +plzip +posy-improved-cursors +powerofforreboot.efi +powershell-bin +powerstat +px_ptop +python-curl-cffi +python-ping3 +python-plexapi +python-pylspci +python-trezor-agent-git +q-dns-bin +qadwaitadecorations-qt5 +qadwaitadecorations-qt6 +quickemu-git +r-quick-share-bin +raw-thumbnailer +rgain3 +rslsync +ruby-neovim +rust-nightly-bin +rustdesk-bin +sendme-bin +sequin-bin +sfxr +sfxr-qt-bin +smem +smemstat +soar-bin +somo +spacedrive-bin +spectre-meltdown-checker +speedtest-go +spicetify-cli +spicetify-marketplace-bin +sptlrx-bin +stormy +subtitleedit +sunshine-bin +tana +teamviewer +tetrio-desktop +tosu +tre-command +trezor-suite-appimage +trezor-udev +ttf-hackgen +ttf-twemoji +tuios-bin +twitch-cli-bin +uad-ng-bin +v2rayn +vdu_controls +vencord-hook +vencord-installer-bin +via-bin +vial-appimage +vulkan-caps-viewer-wayland +wait4x-bin +watchman-bin +wget2 +woeusb-ng +xcaddy-bin +xiaomitool-v2 +xmousepasteblock +xq +yaak-bin +yaycache +ytsubconverter-bin +zswap-cli-git diff --git a/arch-installed-not-saved b/arch-installed-not-saved new file mode 100644 --- /dev/null +++ b/arch-installed-not-saved @@ -0,0 +1,516 @@ +accountsservice +act +adobe-source-han-sans-cn-fonts +adobe-source-han-sans-jp-fonts +adobe-source-han-sans-kr-fonts +adwaita-icon-theme +albert +all-ways-egpu-git +alsa-firmware +alsa-plugins +alsa-utils +amberol +android-studio +aria2 +ark +arrpc +asciidoc +atop +audacity-plugins +audio-sharing +authenticator +awesome-terminal-fonts +baobab +bash-completion +bat-extras +bc +betterbird-bin +birdfont +bluez +bluez-hid2hci +bluez-libs +bpftune-git +browser-vacuum +btop +btrfs-assistant +btrfs-progs +bun-bin +cachyos-fish-config +cachyos-gaming-applications +cachyos-gaming-meta +cachyos-hello +cachyos-kdump-tools +cachyos-kernel-manager +cachyos-keyring +cachyos-ksm-settings +cachyos-micro-settings +cachyos-mirrorlist +cachyos-packageinstaller +cachyos-rate-mirrors +cachyos-settings +cachyos-v3-mirrorlist +cachyos-v4-mirrorlist +cachyos-wallpapers +cachyos-zsh-config +cachy-update +calf +carapace-bin +carps-cups-git +chafa +cheese +chntpw +chwd +citations +clairvoyant +clamav +claude-code +claude-desktop-bin +clinfo +cmake +collision +compsize +corectrl +cppdap +cpuid2cpuflags +crash +cryptsetup +csvlens +cups-browsed +cups-filters +cups-pdf +curlie +ddcui +ddcutil +decoder +delve +devhelp +device-mapper +devtools +dhclient +diffutils +discord-chat-exporter-gui +distcc +dmraid +dnsmasq +docker-buildx +docker-credential-secretservice-bin +dosfstools +dotnet-host-bin +dotnet-runtime-9.0-bin +drgn +d-spy +duf +dumbpipe-bin +e2fsprogs +easyeffects +easyeffects-bundy01-presets +efitools +electron30-bin +electron34-bin +elvish +emblem +epiphany +ethtool +evince +evolution +extra-cmake-modules +eyedropper +f2fs-tools +ffmpeg-audio-thumbnailer +file-roller +five-or-more +flameshot +foomatic-db +foomatic-db-engine +foomatic-db-gutenprint-ppds +foomatic-db-nonfree +foomatic-db-nonfree-ppds +foomatic-db-ppds +four-in-a-row +fragments +fretboard +fsarchiver +gdm +gdu +geary +gedit +gemini-cli +geoip +geoip-database +ghex +ghostmirror +ghostscript +git-branchless +gitbutler-bin +git-cola +glade +glances +glfw-wayland-minecraft-cursorfix +gn +gnome-2048 +gnome-backgrounds +gnome-boxes +gnome-builder +gnome-calculator +gnome-calendar +gnome-characters +gnome-chess +gnome-clocks +gnome-color-manager +gnome-connections +gnome-contacts +gnome-control-center +gnome-dictionary +gnome-disk-utility +gnome-egpu-git +gnome-font-viewer +gnome-games +gnome-keyring +gnome-klotski +gnome-logs +gnome-mahjongg +gnome-maps +gnome-menus +gnome-mines +gnome-multi-writer +gnome-music +gnome-nettool +gnome-nibbles +gnome-photos +gnome-podcasts +gnome-power-manager +gnome-remote-desktop +gnome-robots +gnome-screenshot +gnome-session +gnome-settings-daemon +gnome-shell +gnome-shell-extension-argos-git +gnome-shell-extensions +gnome-software +gnome-sudoku +gnome-system-monitor +gnome-taquin +gnome-tetravex +gnome-text-editor +gnome-tour +gnome-tweaks +gnome-usage +gnome-user-docs +gnome-user-share +goat-cli +graphite-cli +graphs +grilo-plugins +gsfonts +gst-plugins-bad +gst-plugin-va +gutenprint +gvfs +gvfs-afc +gvfs-dnssd +gvfs-goa +gvfs-google +gvfs-gphoto2 +gvfs-mtp +gvfs-nfs +gvfs-onedrive +gvfs-smb +gvfs-wsdd +handbrake +haveged +hdparm +health +help2man +heroic-games-launcher-bin +hexyl +hieroglyphic +hitori +hping +hplip +httpie +httptap-bin +hwdetect +hwinfo +iagno +identity +impression +intel-graphics-compiler +intltool +iotop +iperf3 +iptables-nft +iwd +java21-openjfx-bin +jdk21-openjdk +jdk24-graalvm-ce-bin +jfsutils +jj-spr-git +jujutsu +jumpy +kexec-tools +keylight-commander-bin +keylight-control +keylightd-bin +keylight-systray +lact +lapce +less +level-zero-loader +lib32-mesa +lib32-opencl-mesa +lib32-zlib-ng-compat +libdeep_filter_ladspa-bin +libdvdcss +libgsf +libnma +libopenraw +librespeed-cli-bin +libvips +libwnck3 +lightsoff +linux-cachyos +linux-cachyos-dbg +linux-cachyos-headers +linux-firmware +linux-firmware-amdgpu +lldb +logrotate +lorem +lsb-release +lsscsi +lua-luv +lvm2 +malcontent +mangohud +mangojuice +masscan +mcaselector +mcat-bin +mdadm +meld +mesa +mesa-utils +micro +miunlocktool-git +mkinitcpio +mkinitcpio-firmware +modemmanager +modrinth-app-bin +mokutil +monero-gui +mousai +mtr +mutter +nano +nano-syntax-highlighting +nautilus +neosu-bin +netctl +nethogs +netpeek +netscanner +networkmanager +networkmanager-openvpn +newsflash +nfs-utils +nicotine+ +nilfs-utils +noto-color-emoji-fontconfig +nss-mdns +ntp +nvchecker +obfuscate +octopi +oil +onlyoffice-bin +opencl-headers +opencl-mesa +opencode-bin +opendesktop-fonts +openssh +opus-tools +orca +p7zip-gui +pacman-contrib +pacoloco-git +pandoc-bin +paper-clip +papers +paru +patchelf +pdfjumbler +perl +pika-backup +pipewire-libcamera +pkgdu +playerctl +polari +poppler-glib +powershell-bin +powerstat +powertop +prismlauncher +profile-cleaner +profile-sync-daemon +px_ptop +python +python2 +python-curl-cffi +python-defusedxml +python-packaging +python-ping3 +python-plexapi +python-pylspci +python-pynvim +python-pyqt5 +python-pyqt6-3d +python-pyqt6-charts +python-pyqt6-datavisualization +python-pyqt6-graphs +python-pyqt6-networkauth +python-pyqt6-webengine +python-reportlab +qadwaitadecorations-qt5 +qadwaitadecorations-qt6 +q-dns-bin +qemu-full +qsv +quadrapassel +quickemu-git +railway +realtime-privileges +rebuild-detector +rtkit +ruby-neovim +rustdesk-bin +rust-nightly-bin +rygel +satty +scrcpy +sg3_utils +share-preview +shortwave +simple-scan +skopeo +smem +smemstat +s-nail +snapper +snapshot +soar-bin +sof-firmware +solaar +solanum +somo +spectre-meltdown-checker +splix +sptlrx-bin +squashfs-tools +squashfuse +stormy +subtitleedit +sudo +sushi +swell-foop +swig +switcheroo +switcheroo-control +sysfsutils +systemd-bootchart +systemd-boot-manager +tali +tana +teamtype +tecla +telegram-desktop +texinfo +textpieces +time +totem +tree-sitter-cli +trezor-udev +ttf-bitstream-vera +ttf-dejavu +ttf-liberation +ttf-meslo-nerd +tuba +tuios-bin +turbostat +twitch-cli-bin +typos +uad-ng-bin +udisks2-btrfs +ufw +upower +usb_modeswitch +usbutils +v2rayn +vdu_controls +ventoy-bin +vi +video-trimmer +vivaldi +vivaldi-ffmpeg-codecs +vivid +vulkan-caps-viewer-wayland +vulkan-swrast +wait4x-bin +warp +watchman-bin +which +wimlib +wireless-regdb +wpa_supplicant +wrangler +xdg-desktop-portal-gnome +xdg-user-dirs +xdg-user-dirs-gtk +xf86-input-libinput +xf86-video-amdgpu +xf86-video-vesa +xfsprogs +xiaomitool-v2 +xl2tpd +xmousepasteblock +xorg-bdftopcf +xorg-iceauth +xorg-mkfontscale +xorg-server +xorg-sessreg +xorg-smproxy +xorg-x11perf +xorg-xbacklight +xorg-xcmsdb +xorg-xcursorgen +xorg-xdpyinfo +xorg-xdriinfo +xorg-xev +xorg-xgamma +xorg-xhost +xorg-xinit +xorg-xinput +xorg-xkbevd +xorg-xkbprint +xorg-xkbutils +xorg-xkill +xorg-xlsatoms +xorg-xlsclients +xorg-xlsfonts +xorg-xpr +xorg-xrandr +xorg-xrefresh +xorg-xsetroot +xorg-xvinfo +xorg-xwd +xorg-xwininfo +xorg-xwud +yaak-bin +yarn +yay +yelp +yubikey-personalization-gui +yubikey-touch-detector +zed +zlib-ng-compat +zswap-cli-git diff --git a/arch-installed-repo b/arch-installed-repo new file mode 100644 --- /dev/null +++ b/arch-installed-repo @@ -0,0 +1,659 @@ +accountsservice +act +adobe-source-code-pro-fonts +adobe-source-han-sans-cn-fonts +adobe-source-han-sans-jp-fonts +adobe-source-han-sans-kr-fonts +adobe-source-sans-fonts +adw-gtk-theme +adwaita-icon-theme +aegisub +alacarte +alsa-firmware +alsa-plugins +alsa-utils +amberol +amdgpu_top +arandr +aria2 +ark +asciidoc +atop +audacity +audio-sharing +authenticator +awesome-terminal-fonts +baobab +base +base-devel +bash-completion +bat-extras +bc +betterbird-bin +bind +birdfont +bitwarden +bluez +bluez-hid2hci +bluez-libs +bluez-tools +bluez-utils +bpftune-git +breezy +btop +btrfs-assistant +btrfs-progs +bun-bin +cachy-update +cachyos-fish-config +cachyos-gaming-applications +cachyos-gaming-meta +cachyos-hello +cachyos-kdump-tools +cachyos-kernel-manager +cachyos-keyring +cachyos-ksm-settings +cachyos-micro-settings +cachyos-mirrorlist +cachyos-packageinstaller +cachyos-rate-mirrors +cachyos-settings +cachyos-v3-mirrorlist +cachyos-v4-mirrorlist +cachyos-wallpapers +cachyos-zsh-config +caddy +calf +ccache +chafa +cheese +chntpw +chromium +chwd +citations +cjdns +clairvoyant +clamav +claude-code +clinfo +cmake +collision +compsize +corectrl +cppdap +crash +cryptsetup +csvlens +cups +cups-browsed +cups-filters +cups-pdf +curlie +d-spy +davinci-resolve +dconf-editor +ddcutil +decoder +delve +deno +devhelp +device-mapper +devtools +dhclient +difftastic +diffutils +direnv +discord +distcc +dmidecode +dmraid +dnsmasq +docker +docker-buildx +docker-compose +dos2unix +dosfstools +dotnet-host-bin +downgrade +drgn +duf +e2fsprogs +easyeffects +efibootmgr +efitools +elvish +emblem +entr +eog +epiphany +ethtool +evince +evolution +exfatprogs +extra-cmake-modules +eyedropper +f2fs-tools +f3d +ffmpegthumbnailer +file-roller +firefox-developer-edition +five-or-more +flameshot +flite +foliate +foomatic-db +foomatic-db-engine +foomatic-db-gutenprint-ppds +foomatic-db-nonfree +foomatic-db-nonfree-ppds +foomatic-db-ppds +four-in-a-row +fragments +fretboard +fsarchiver +fwupd +gdm +gdm-settings +gdu +geary +gedit +gemini-cli +geoip +geoip-database +ghex +ghostscript +ghostty +gifsicle +gifski +gimp +git +git-branchless +git-delta +git-filter-repo +git-lfs +github-cli +glade +glances +glow +gn +gnome-2048 +gnome-backgrounds +gnome-boxes +gnome-browser-connector +gnome-builder +gnome-calculator +gnome-calendar +gnome-characters +gnome-chess +gnome-clocks +gnome-color-manager +gnome-connections +gnome-contacts +gnome-control-center +gnome-dictionary +gnome-disk-utility +gnome-epub-thumbnailer +gnome-firmware +gnome-font-viewer +gnome-games +gnome-keyring +gnome-klotski +gnome-logs +gnome-mahjongg +gnome-maps +gnome-menus +gnome-mines +gnome-multi-writer +gnome-music +gnome-nettool +gnome-nibbles +gnome-photos +gnome-podcasts +gnome-power-manager +gnome-remote-desktop +gnome-robots +gnome-screenshot +gnome-session +gnome-settings-daemon +gnome-shell +gnome-shell-extensions +gnome-software +gnome-sudoku +gnome-system-monitor +gnome-taquin +gnome-tetravex +gnome-text-editor +gnome-themes-extra +gnome-tour +gnome-tweaks +gnome-usage +gnome-user-docs +gnome-user-share +gparted +gpu-screen-recorder +gpu-screen-recorder-gtk +graphs +grilo-plugins +gsfonts +gst-libav +gst-plugin-pipewire +gst-plugin-va +gst-plugins-bad +gst-plugins-ugly +gthumb +gtk3-demos +gtk4-demos +gum +gutenprint +gvfs +gvfs-afc +gvfs-dnssd +gvfs-goa +gvfs-google +gvfs-gphoto2 +gvfs-mtp +gvfs-nfs +gvfs-onedrive +gvfs-smb +gvfs-wsdd +handbrake +haveged +hdparm +health +help2man +heroic-games-launcher-bin +hexyl +hieroglyphic +hitori +hping +hplip +htop +httpie +hunspell-en_us +hunspell-nl +hwdetect +hwinfo +hyperfine +iagno +identity +ijq +impression +inetutils +inferno +inkscape +inotify-tools +intel-gpu-tools +intel-graphics-compiler +intel-media-driver +intel-ucode +intel-undervolt +inter-font +intltool +iotop +iperf3 +iptables-nft +iwd +jdk21-openjdk +jfsutils +jujutsu +jumpy +kdenlive +kernel-modules-hook +kexec-tools +kompose +kooha +kruler +kubectl +lact +lapce +lazygit +lbzip2 +less +level-zero-loader +lib32-mesa +lib32-opencl-mesa +lib32-vulkan-intel +lib32-vulkan-mesa-layers +lib32-vulkan-radeon +lib32-zlib-ng-compat +libdvdcss +libfido2 +libgda6 +libgsf +libnma +libopenraw +libotr +libva-utils +libvips +libwnck3 +lightsoff +linux-cachyos +linux-cachyos-dbg +linux-cachyos-headers +linux-docs +linux-firmware +linux-firmware-amdgpu +lldb +logrotate +lorem +lostfiles +loupe +lsb-release +lshw +lsix +lsscsi +lua-luv +lvm2 +malcontent +man-db +man-pages +mangohud +mangojuice +masscan +mdadm +mediainfo +meld +mesa +mesa-utils +metasploit +micro +mise +mitmproxy +mkcert +mkinitcpio +mkinitcpio-firmware +mkvtoolnix-cli +mkvtoolnix-gui +modemmanager +mokutil +mold +monero-gui +moreutils +mosh +mousai +mpv +mpv-mpris +msr-tools +mtr +mutter +nano +nano-syntax-highlighting +nautilus +nautilus-image-converter +nautilus-python +ncdu +neofetch +neovim-git +netctl +nethogs +netscanner +networkmanager +networkmanager-openvpn +newsflash +nfs-utils +nginx +nicotine+ +nilfs-utils +nload +nmap +noto-color-emoji-fontconfig +noto-fonts +noto-fonts-cjk +noto-fonts-emoji +noto-fonts-extra +npm +nss-mdns +ntp +nvchecker +nvtop +obfuscate +octopi +oil +onlyoffice-bin +opencl-headers +opencl-mesa +opendesktop-fonts +openslide +openssh +optipng +opus-tools +orca +otf-latin-modern +otf-latinmodern-math +pacman-contrib +paper-clip +papers +paru +patchelf +pavucontrol +perf +perl +perl-image-exiftool +perl-rename +pgcli +pigz +pika-backup +piper +pipewire-alsa +pipewire-jack +pipewire-libcamera +pipewire-pulse +playerctl +plocate +pngquant +pnpm +podman +podman-compose +polari +poppler-glib +postgresql +power-profiles-daemon +powertop +prismlauncher +profile-cleaner +profile-sync-daemon +progress +pulumi +pv +python +python-defusedxml +python-packaging +python-pynvim +python-pyqt5 +python-pyqt6-3d +python-pyqt6-charts +python-pyqt6-datavisualization +python-pyqt6-graphs +python-pyqt6-networkauth +python-pyqt6-webengine +python-reportlab +python2 +qbittorrent +qemu-full +qsv +qt5ct +qt6-wayland +qt6ct +quadrapassel +railway +rclone +realtime-privileges +rebuild-detector +reflector +resources +ripgrep +ripgrep-all +rpi-imager +rsync +rtkit +rygel +s-nail +s-tui +sad +satty +scrcpy +seahorse +seahorse-nautilus +sg3_utils +share-preview +shortwave +shutter +signal-desktop +simple-scan +skopeo +smartmontools +snapper +snapshot +socat +sof-firmware +solaar +solanum +sox +speedtest-cli +splix +spotify-launcher +squashfs-tools +squashfuse +starship +stow +strace +streamlink +stress +sudo +sushi +swell-foop +swig +switcheroo +switcheroo-control +syncthing +sysfsutils +sysstat +system-config-printer +systemd-boot-manager +systemd-bootchart +tailscale +tali +tcpdump +tcpflow +teamtype +tecla +telegram-desktop +terminator +terraform +texinfo +textpieces +throttled +tig +time +tmux +torbrowser-launcher +totem +traceroute +tree +tree-sitter-cli +ttf-arphic-uming +ttf-bitstream-vera +ttf-dejavu +ttf-hack +ttf-hack-nerd +ttf-ibm-plex +ttf-indic-otf +ttf-jetbrains-mono +ttf-liberation +ttf-meslo-nerd +ttf-opensans +ttf-roboto +tuba +turbostat +typos +udisks2-btrfs +ufw +unrar +unzip +upower +usb_modeswitch +usbutils +uv +ventoy-bin +vesktop-bin +vi +video-trimmer +vim +visualvm +vivaldi +vivaldi-ffmpeg-codecs +vivid +vulkan-intel +vulkan-mesa-layers +vulkan-radeon +vulkan-swrast +vulkan-tools +warp +wavegain +websocat +wezterm +wget +which +wimlib +wireguard-tools +wireless-regdb +wireplumber +wireshark-cli +wireshark-qt +wl-clipboard +wpa_supplicant +wrangler +x86_energy_perf_policy +xclip +xdg-desktop-portal-gnome +xdg-user-dirs +xdg-user-dirs-gtk +xf86-input-libinput +xf86-video-amdgpu +xf86-video-vesa +xfsprogs +xl2tpd +xorg-bdftopcf +xorg-iceauth +xorg-mkfontscale +xorg-server +xorg-sessreg +xorg-smproxy +xorg-x11perf +xorg-xbacklight +xorg-xcmsdb +xorg-xcursorgen +xorg-xdpyinfo +xorg-xdriinfo +xorg-xev +xorg-xgamma +xorg-xhost +xorg-xinit +xorg-xinput +xorg-xkbevd +xorg-xkbprint +xorg-xkbutils +xorg-xkill +xorg-xlsatoms +xorg-xlsclients +xorg-xlsfonts +xorg-xpr +xorg-xrandr +xorg-xrefresh +xorg-xsetroot +xorg-xvinfo +xorg-xwd +xorg-xwininfo +xorg-xwud +yarn +yay +yazi +ydotool +yelp +yt-dlp +yubikey-personalization-gui +yubikey-touch-detector +zed +zip +zlib-ng-compat +zoxide diff --git a/arch-shell-packages b/arch-shell-packages --- a/arch-shell-packages +++ b/arch-shell-packages @@ -77,6 +77,7 @@ ncdu neofetch neovim-git neovim-plenary-git +tree-sitter-cli nginx nload nmap @@ -163,3 +164,16 @@ atuin fnox expect goat-cli +wait4x-bin +cmake +zig +lld +patchelf +vulkan-headers +valgrind +tesseract-data-eng +upterm +ethtool +whosthere-bin +xh +rebuild-detector diff --git a/discord/.local/share/applications/discord.desktop b/discord/.local/share/applications/discord.desktop --- a/discord/.local/share/applications/discord.desktop +++ b/discord/.local/share/applications/discord.desktop @@ -4,7 +4,8 @@ StartupWMClass=discord Comment=All-in-one voice and text chat for gamers that's free, secure, and works on both your desktop and phone. GenericName=Internet Messenger # Exec=/usr/bin/discord --enable-features=WebRTCPipeWireCapturer,VaapiVideoDecoder --ozone-platform-hint=auto --enable-blink-features=MiddleClickAutoScroll --ignore-gpu-blocklist -Exec=/usr/bin/discord --enable-features=WaylandWindowDecorations,AcceleratedVideoDecodeLinuxZeroCopyGL,AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder,TouchpadOverscrollHistoryNavigation,PlatformHEVCDecoderSupport,CanvasOopRasterization --ozone-platform-hint=auto --enable-blink-features=MiddleClickAutoscroll --ignore-gpu-blocklist --enable-gpu-rasterization +# Exec=/usr/bin/discord --enable-features=WaylandWindowDecorations,AcceleratedVideoDecodeLinuxZeroCopyGL,AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder,TouchpadOverscrollHistoryNavigation,PlatformHEVCDecoderSupport,CanvasOopRasterization --ozone-platform-hint=auto --enable-blink-features=MiddleClickAutoscroll --ignore-gpu-blocklist --enable-gpu-rasterization +Exec=prlimit --core=0 -- fish -c 'exec /usr/bin/discord (grep "^[^#]" ~/.config/discord-flags.conf)' Icon=discord Type=Application Categories=Network;InstantMessaging; diff --git a/etc/bluetooth/main.conf b/etc/bluetooth/main.conf new file mode 100644 --- /dev/null +++ b/etc/bluetooth/main.conf @@ -0,0 +1,383 @@ +[General] + +# Default adapter name +# Defaults to 'BlueZ X.YZ' +#Name = BlueZ + +# Default device class. Only the major and minor device class bits are +# considered. Defaults to '0x000000'. +#Class = 0x000100 + +# How long to stay in discoverable mode before going back to non-discoverable +# The value is in seconds. Default is 180, i.e. 3 minutes. +# 0 = disable timer, i.e. stay discoverable forever +#DiscoverableTimeout = 0 + +# Always allow pairing even if there are no agent registered +# Possible values: true, false +# Default: false +#AlwaysPairable = false + +# How long to stay in pairable mode before going back to non-discoverable +# The value is in seconds. Default is 0. +# 0 = disable timer, i.e. stay pairable forever +#PairableTimeout = 0 + +# Use vendor id source (assigner), vendor, product and version information for +# DID profile support. The values are separated by ":" and assigner, VID, PID +# and version. +# Possible vendor id source values: bluetooth, usb (default) or false (disabled) +#DeviceID = bluetooth:1234:5678:abcd + +# Do reverse service discovery for previously unknown devices that connect to +# us. For BR/EDR this option is really only needed for qualification since the +# BITE tester doesn't like us doing reverse SDP for some test cases, for LE +# this disables the GATT client functionally so it can be used in system which +# can only operate as peripheral (see also GATT Client option). +# Defaults to 'true'. +#ReverseServiceDiscovery = true + +# Enable name resolving after inquiry. Set it to 'false' if you don't need +# remote devices name and want shorter discovery cycle. Defaults to 'true'. +#NameResolving = true + +# Enable runtime persistency of debug link keys. Default is false which +# makes debug link keys valid only for the duration of the connection +# that they were created for. +#DebugKeys = false + +# Restricts all controllers to the specified transport. Default value +# is "dual", i.e. both BR/EDR and LE enabled (when supported by the HW). +# Possible values: "dual", "bredr", "le" +#ControllerMode = dual + +# Maximum number of controllers allowed to be exposed to the system. +# Default=0 (unlimited) +#MaxControllers=0 + +# Enables Multi Profile Specification support. This allows to specify if +# system supports only Multiple Profiles Single Device (MPSD) configuration +# or both Multiple Profiles Single Device (MPSD) and Multiple Profiles Multiple +# Devices (MPMD) configurations. +# Possible values: "off", "single", "multiple" +#MultiProfile = off + +# Permanently enables the Fast Connectable setting for adapters that +# support it. When enabled other devices can connect faster to us, +# however the tradeoff is increased power consumptions. This feature +# will fully work only on kernel version 4.1 and newer. Defaults to +# 'false'. +FastConnectable = true + +# Default privacy setting. +# Enables use of private address. +# Possible values for LE mode: "off", "network/on", "device" +# Possible values for Dual mode: "off", "network/on", "device", +# "limited-network", "limited-device" +# +# - off: Local privacy disabled. +# +# - network/on: A device will only accept advertising packets from peer +# devices that contain private addresses. It may not be compatible with some +# legacy devices since it requires the use of RPA(s) all the time. +# +# - device: A device in device privacy mode is only concerned about the +# privacy of the device and will accept advertising packets from peer devices +# that contain their Identity Address as well as ones that contain a private +# address, even if the peer device has distributed its IRK in the past. + +# - limited-network: Apply Limited Discoverable Mode to advertising, which +# follows the same policy as to BR/EDR that publishes the identity address when +# discoverable, and Network Privacy Mode for scanning. +# +# - limited-device: Apply Limited Discoverable Mode to advertising, which +# follows the same policy as to BR/EDR that publishes the identity address when +# discoverable, and Device Privacy Mode for scanning. +# +# Defaults to "off" +#Privacy = off + +# Specify the policy to the JUST-WORKS repairing initiated by peer +# Possible values: "never", "confirm", "always" +# Defaults to "never" +#JustWorksRepairing = never + +# How long to keep temporary devices around +# The value is in seconds. Default is 30. +# 0 = disable timer, i.e. temporary devices stay around forever +#TemporaryTimeout = 30 + +# Enables the device to issue an SDP request to update known services when +# profile is connected. Defaults to true. +#RefreshDiscovery = true + +# Default Secure Connections setting. +# Enables the Secure Connections setting for adapters that support it. It +# provides better crypto algorithms for BT links and also enables CTKD (cross +# transport key derivation) during pairing on any link. +# Possible values: "off", "on", "only" +# - "off": Secure Connections are disabled +# - "on": Secure Connections are enabled when peer device supports them +# - "only": we allow only Secure Connections +# Defaults to "on" +#SecureConnections = on + +# Enables D-Bus experimental interfaces +# Possible values: true or false +#Experimental = false + +# Enables D-Bus testing interfaces +# Possible values: true or false +#Testing = false + +# Enables kernel experimental features, alternatively a list of UUIDs +# can be given. +# Possible values: true,false, +# Possible UUIDS: +# d4992530-b9ec-469f-ab01-6c481c47da1c (BlueZ Experimental Debug) +# 671b10b5-42c0-4696-9227-eb28d1b049d6 (BlueZ Experimental Simultaneous Central and Peripheral) +# 15c0a148-c273-11ea-b3de-0242ac130004 (BlueZ Experimental LL privacy) +# 330859bc-7506-492d-9370-9a6f0614037f (BlueZ Experimental Bluetooth Quality Report) +# a6695ace-ee7f-4fb9-881a-5fac66c629af (BlueZ Experimental Offload Codecs) +# 6fbaf188-05e0-496a-9885-d6ddfdb4e03e (BlueZ Experimental ISO socket) +# Defaults to false. +#KernelExperimental = false + +# The duration to avoid retrying to resolve a peer's name, if the previous +# try failed. +# The value is in seconds. Default is 300, i.e. 5 minutes. +#RemoteNameRequestRetryDelay = 300 + +# Filter out non-discoverable devices based on discoverable flags (General or +# Limited). +# Defaults to true +# Setting to false is only recommended for an use-case where non-discoverable +# device must be enumerated due to some requirement (e.g. not using GAP +# discoverable modes for some odd reason which seems to be the behavior of +# some stacks) or when testing bad/unintended behavior. +#FilterDiscoverable = true + +[BR] +# The following values are used to load default adapter parameters for BR/EDR. +# BlueZ loads the values into the kernel before the adapter is powered if the +# kernel supports the MGMT_LOAD_DEFAULT_PARAMETERS command. If a value isn't +# provided, the kernel will be initialized to it's default value. The actual +# value will vary based on the kernel version and thus aren't provided here. +# The Bluetooth Core Specification should be consulted for the meaning and valid +# domain of each of these values. + +# BR/EDR Page scan activity configuration +#PageScanType= +#PageScanInterval= +#PageScanWindow= + +# BR/EDR Inquiry scan activity configuration +#InquiryScanType= +#InquiryScanInterval= +#InquiryScanWindow= + +# BR/EDR Link supervision timeout +#LinkSupervisionTimeout= + +# BR/EDR Page Timeout +#PageTimeout= + +# BR/EDR Connection Idle Timeout +#IdleTimeout= + +# BR/EDR Sniff Intervals +#MinSniffInterval= +#MaxSniffInterval= + +[LE] +# Enable/Disable Central Address Resolution. +# 0: disable +# 1: enable +# Defaults to 1 +#CentralAddressResolution = 1 + +# The following values are used to load default adapter parameters for LE. +# BlueZ loads the values into the kernel before the adapter is powered if the +# kernel supports the MGMT_LOAD_DEFAULT_PARAMETERS command. If a value isn't +# provided, the kernel will be initialized to it's default value. The actual +# value will vary based on the kernel version and thus aren't provided here. +# The Bluetooth Core Specification should be consulted for the meaning and valid +# domain of each of these values. +# LE advertisement interval (used for legacy advertisement interface only) +#MinAdvertisementInterval= +#MaxAdvertisementInterval= +#MultiAdvertisementRotationInterval= + +# LE scanning parameters used for passive scanning supporting auto connect +# scenarios +#ScanIntervalAutoConnect= +#ScanWindowAutoConnect= + +# LE scanning parameters used for passive scanning supporting wake from suspend +# scenarios +#ScanIntervalSuspend= +#ScanWindowSuspend= + +# LE scanning parameters used for active scanning supporting discovery +# procedure +#ScanIntervalDiscovery= +#ScanWindowDiscovery= + +# LE scanning parameters used for passive scanning supporting the advertisement +# monitor Apis +#ScanIntervalAdvMonitor= +#ScanWindowAdvMonitor= + +# LE scanning parameters used for connection establishment. +#ScanIntervalConnect= +#ScanWindowConnect= + +# LE default connection parameters. These values are superseded by any +# specific values provided via the Load Connection Parameters interface +#MinConnectionInterval= +#MaxConnectionInterval= +#ConnectionLatency= +#ConnectionSupervisionTimeout= +#Autoconnecttimeout= + +# Scan duration during interleaving scan. Only used when scanning for ADV +# monitors. The units are msec. +# Default: 300 +#AdvMonAllowlistScanDuration= +# Default: 500 +#AdvMonNoFilterScanDuration= + +# Enable/Disable Advertisement Monitor interleave scan for power saving. +# 0: disable +# 1: enable +# Defaults to 1 +#EnableAdvMonInterleaveScan= + +[GATT] +# GATT attribute cache. +# Possible values: +# always: Always cache attributes even for devices not paired, this is +# recommended as it is best for interoperability, with more consistent +# reconnection times and enables proper tracking of notifications for all +# devices. +# yes: Only cache attributes of paired devices. +# no: Never cache attributes +# Default: always +#Cache = always + +# This enables the GATT client functionally, so it can be disabled in system +# which can only operate as a peripheral. +# Defaults to 'true'. +#Client = true + +# Minimum required Encryption Key Size for accessing secured characteristics. +# Possible values: 0 and 7-16. 0 means don't care. +# Defaults to 0 +#KeySize = 0 + +# Exchange MTU size. +# Possible values: 23-517 +# Defaults to 517 +#ExchangeMTU = 517 + +# Number of ATT channels, 1 is mandatory since it is used for ATT fixed channel +# index 2-6 are used for EATT which is optional. +# Possible values: 1-6 (1 disables EATT) +# Default to 1 +#Channels = 1 + +# Export claimed services by plugins +# Possible values: no, read-only, read-write +# Default: read-only +#ExportClaimedServices = read-only + +[CSIS] +# SIRK - Set Identification Resolution Key which is common for all the +# sets. They SIRK key is used to identify its sets. This can be any +# 128 bit value or a string value (e.g. product name) which is then hashed. +# Possible Values: +# 16 byte hexadecimal value: 861FAE703ED681F0C50B34155B6434FB +# String value: "My Product Name" +# Defaults to none +#SIRK = + +# SIRK Encryption +# Possible values: +# true: Encrypt SIRK when read +# false: Do not encrypt SIRK when read. (plaintext) +# Defaults to true +#Encryption = true + +# Total no of sets belongs to this Profile +# Defaults to 0 +#Size = 0 + +# Rank for the device +# Defaults to 0 +#Rank = 0 + +[AVDTP] +# AVDTP L2CAP Signalling Channel Mode. +# Possible values: +# basic: Use L2CAP Basic Mode +# ertm: Use L2CAP Enhanced Retransmission Mode +#SessionMode = basic + +# AVDTP L2CAP Transport Channel Mode. +# Possible values: +# basic: Use L2CAP Basic Mode +# streaming: Use L2CAP Streaming Mode +#StreamMode = basic + +[AVRCP] +# Allow SetAbsoluteVolume calls to a peer device that does not advertise the +# AVRCP remote control target profile. If it does advertise this profile, the +# version is ignored. +#VolumeWithoutTarget = false + +# Validate that remote AVRCP profiles advertise the category-2 bit before +# allowing SetAbsoluteVolume calls or registering for EVENT_VOLUME_CHANGED +# notifications. +#VolumeCategory = true + +[Policy] +# +# The ReconnectUUIDs defines the set of remote services that should try +# to be reconnected to in case of a link loss (link supervision +# timeout). The policy plugin should contain a sane set of values by +# default, but this list can be overridden here. By setting the list to +# empty the reconnection feature gets disabled. +#ReconnectUUIDs=00001112-0000-1000-8000-00805f9b34fb,0000111f-0000-1000-8000-00805f9b34fb,0000110a-0000-1000-8000-00805f9b34fb,0000110b-0000-1000-8000-00805f9b34fb + +# ReconnectAttempts define the number of attempts to reconnect after a link +# lost. Setting the value to 0 disables reconnecting feature. +#ReconnectAttempts=7 + +# ReconnectIntervals define the set of intervals in seconds to use in between +# attempts. +# If the number of attempts defined in ReconnectAttempts is bigger than the +# set of intervals the last interval is repeated until the last attempt. +#ReconnectIntervals=1,2,4,8,16,32,64 + +# AutoEnable defines option to enable all controllers when they are found. +# This includes adapters present on start as well as adapters that are plugged +# in later on. Defaults to 'true'. +#AutoEnable=true + +# Audio devices that were disconnected due to suspend will be reconnected on +# resume. ResumeDelay determines the delay between when the controller +# resumes from suspend and a connection attempt is made. A longer delay is +# better for better co-existence with Wi-Fi. +# The value is in seconds. +# Default: 2 +#ResumeDelay = 2 + +[AdvMon] +# Default RSSI Sampling Period. This is used when a client registers an +# advertisement monitor and leaves the RSSISamplingPeriod unset. +# Possible values: +# 0x00 Report all advertisements +# N = 0xXX Report advertisements every N x 100 msec (range: 0x01 to 0xFE) +# 0xFF Report only one advertisement per device during monitoring period +# Default: 0xFF +#RSSISamplingPeriod=0xFF diff --git a/etc/fstab b/etc/fstab new file mode 100644 --- /dev/null +++ b/etc/fstab @@ -0,0 +1,17 @@ +# /etc/fstab: static file system information. +# +# Use 'blkid' to print the universally unique identifier for a device; this may +# be used with UUID= as a more robust way to name devices that works even if +# disks are added and removed. See fstab(5). +# +# +UUID=2D39-9861 /boot vfat defaults,umask=0022 0 2 +UUID=37680aff-b9f4-40f0-aa2f-11e1bf9453c0 / btrfs subvol=/@,defaults,noatime,compress=zstd,space_cache=v2,commit=120 0 0 +UUID=37680aff-b9f4-40f0-aa2f-11e1bf9453c0 /home btrfs subvol=/@home,defaults,noatime,compress=zstd,space_cache=v2,commit=120 0 0 +UUID=37680aff-b9f4-40f0-aa2f-11e1bf9453c0 /root btrfs subvol=/@root,defaults,noatime,compress=zstd,space_cache=v2,commit=120 0 0 +UUID=37680aff-b9f4-40f0-aa2f-11e1bf9453c0 /srv btrfs subvol=/@srv,defaults,noatime,compress=zstd,space_cache=v2,commit=120 0 0 +UUID=37680aff-b9f4-40f0-aa2f-11e1bf9453c0 /var/cache btrfs subvol=/@cache,defaults,noatime,compress=zstd,space_cache=v2,commit=120 0 0 +UUID=37680aff-b9f4-40f0-aa2f-11e1bf9453c0 /var/tmp btrfs subvol=/@tmp,defaults,noatime,compress=zstd,space_cache=v2,commit=120 0 0 +UUID=37680aff-b9f4-40f0-aa2f-11e1bf9453c0 /var/log btrfs subvol=/@log,defaults,noatime,compress=zstd,space_cache=v2,commit=120 0 0 +tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 +/swap/swapfile none swap defaults 0 0 diff --git a/etc/makepkg.conf b/etc/makepkg.conf new file mode 100644 --- /dev/null +++ b/etc/makepkg.conf @@ -0,0 +1,170 @@ +#!/usr/bin/env bash +# +# /etc/makepkg.conf +# + +chrt -iap 0 $$ + +######################################################################### +# SOURCE ACQUISITION +######################################################################### +# +#-- The download utilities that makepkg should use to acquire sources +# Format: 'protocol::agent' +# DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u' +# 'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u' +# 'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u' +# 'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u' +# 'rsync::/usr/bin/rsync --no-motd -z %u %o' +# 'scp::/usr/bin/scp -C %u %o') +DLAGENTS=('ftp::/usr/bin/aria2c -UWget -s4 -x4 %u -o %o --follow-metalink=mem' + 'http::/usr/bin/aria2c -UWget -s4 -x4 %u -o %o --follow-metalink=mem' + 'https::/usr/bin/aria2c -UWget -s4 -x4 %u -o %o --follow-metalink=mem' + 'rsync::/usr/bin/rsync --no-motd -z %u %o' + 'scp::/usr/bin/scp -C %u %o') + +# Other common tools: +# /usr/bin/snarf +# /usr/bin/lftpget -c +# /usr/bin/wget + +#-- The package required by makepkg to download VCS sources +# Format: 'protocol::package' +VCSCLIENTS=('bzr::breezy' + 'fossil::fossil' + 'git::git' + 'hg::mercurial' + 'svn::subversion') + +######################################################################### +# ARCHITECTURE, COMPILE FLAGS +######################################################################### +# +CARCH="x86_64" +CHOST="x86_64-pc-linux-gnu" + +#-- Compiler and Linker Flags +#CPPFLAGS="" +CFLAGS="-march=native -O2 -pipe -fno-plt -fexceptions \ + -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security \ + -fstack-clash-protection -fcf-protection \ + -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer" +CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS" +LDFLAGS="-Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now \ + -Wl,-z,pack-relative-relocs -fuse-ld=mold -Wl,--separate-debug-file" +LTOFLAGS="-flto=auto" +#-- Make Flags: change this for DistCC/SMP systems +MAKEFLAGS="-j8" +#-- Debugging flags +DEBUG_CFLAGS="-g" +DEBUG_CXXFLAGS="$DEBUG_CFLAGS" + +######################################################################### +# BUILD ENVIRONMENT +######################################################################### +# +# Makepkg defaults: BUILDENV=(!distcc !color !ccache check !sign) +# A negated environment option will do the opposite of the comments below. +# +#-- distcc: Use the Distributed C/C++/ObjC compiler +#-- color: Colorize output messages +#-- ccache: Use ccache to cache compilation +#-- check: Run the check() function if present in the PKGBUILD +#-- sign: Generate PGP signature file +# +BUILDENV=(!distcc color ccache check !sign) +# +#-- If using DistCC, your MAKEFLAGS will also need modification. In addition, +#-- specify a space-delimited list of hosts running in the DistCC cluster. +#DISTCC_HOSTS="bas@haring.bas.sh,cpp,lzo" +# +#-- Specify a directory for package building. +#BUILDDIR=/tmp/makepkg + +######################################################################### +# GLOBAL PACKAGE OPTIONS +# These are default values for the options=() settings +######################################################################### +# +# Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto !autodeps) +# A negated option will do the opposite of the comments below. +# +#-- strip: Strip symbols from binaries/libraries +#-- docs: Save doc directories specified by DOC_DIRS +#-- libtool: Leave libtool (.la) files in packages +#-- staticlibs: Leave static library (.a) files in packages +#-- emptydirs: Leave empty directories in packages +#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip +#-- purge: Remove files specified by PURGE_TARGETS +#-- debug: Add debugging flags as specified in DEBUG_* variables +#-- lto: Add compile flags for building with link time optimization +#-- autodeps: Automatically add depends/provides +# +OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge debug lto) + +#-- File integrity checks to use. Valid: md5, sha1, sha224, sha256, sha384, sha512, b2 +INTEGRITY_CHECK=(sha256) +#-- Options to be used when stripping binaries. See `man strip' for details. +STRIP_BINARIES="--strip-all" +#-- Options to be used when stripping shared libraries. See `man strip' for details. +STRIP_SHARED="--strip-unneeded" +#-- Options to be used when stripping static libraries. See `man strip' for details. +STRIP_STATIC="--strip-debug" +#-- Manual (man and info) directories to compress (if zipman is specified) +MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info}) +#-- Doc directories to remove (if !docs is specified) +DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc}) +#-- Files to be removed from all packages (if purge is specified) +PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod) +#-- Directory to store source code in for debug packages +DBGSRCDIR="/usr/src/debug" +#-- Prefix and directories for library autodeps +LIB_DIRS=('lib:usr/lib' 'lib32:usr/lib32') + +######################################################################### +# PACKAGE OUTPUT +######################################################################### +# +# Default: put built package and cached source in build directory +# +#-- Destination: specify a fixed directory where all packages will be placed +#PKGDEST=/home/packages +#-- Source cache: specify a fixed directory where source files will be cached +#SRCDEST=/home/sources +#-- Source packages: specify a fixed directory where all src packages will be placed +#SRCPKGDEST=/home/srcpackages +#-- Log files: specify a fixed directory where all log files will be placed +#LOGDEST=/home/makepkglogs +#-- Packager: name/email of the person or organization building packages +#PACKAGER="John Doe " +#-- Specify a key to use for package signing +#GPGKEY="" + +######################################################################### +# COMPRESSION DEFAULTS +######################################################################### +# +COMPRESSGZ=(pigz -c -f -n) +COMPRESSBZ2=(lbzip2 -c -f) +COMPRESSXZ=(xz -c -z -) +COMPRESSZST=(zstd -c -T0 --auto-threads=logical -9 -) +COMPRESSLRZ=(lrzip -q) +COMPRESSLZO=(lzop -q) +COMPRESSZ=(compress -c -f) +COMPRESSLZ4=(lz4 -q) +COMPRESSLZ=(plzip -c -f) + +######################################################################### +# EXTENSION DEFAULTS +######################################################################### +# +PKGEXT='.pkg.tar.zst' +SRCEXT='.src.tar.gz' + +######################################################################### +# OTHER +######################################################################### +# +#-- Command used to run pacman as root, instead of trying sudo and su +#PACMAN_AUTH=() +# vim: set ft=sh ts=2 sw=2 et: diff --git a/etc/makepkg.conf.d/rust.conf b/etc/makepkg.conf.d/rust.conf new file mode 100644 --- /dev/null +++ b/etc/makepkg.conf.d/rust.conf @@ -0,0 +1,19 @@ +#!/hint/bash +# shellcheck disable=2034 + +# +# /etc/makepkg.conf.d/rust.conf +# + +######################################################################### +# RUST LANGUAGE SUPPORT +######################################################################### + +# Flags used for the Rust compiler, similar in spirit to CFLAGS. Read +# linkman:rustc[1] for more details on the available flags. +RUSTFLAGS="-C opt-level=2 -C target-cpu=native -C force-frame-pointers=yes -C link-arg=-fuse-ld=mold" + +# Additional compiler flags appended to `RUSTFLAGS` for use in debugging. +# Usually this would include: ``-C debuginfo=2''. Read linkman:rustc[1] for +# more details on the available flags. +DEBUG_RUSTFLAGS="-C debuginfo=2" diff --git a/etc/pacman.conf b/etc/pacman.conf new file mode 100644 --- /dev/null +++ b/etc/pacman.conf @@ -0,0 +1,101 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#XferCommand = /usr/bin/aria2c -UWget -s4 -x4 %u -o %o --allow-overwrite=true --continue=true --file-allocation=none --log-level=error --max-tries=3 --max-file-not-found=5 --min-split-size=5M --no-conf --remote-time=true --timeout=5 --dir=/ +#CleanMethod = KeepInstalled +Architecture = auto + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +Color +#NoProgressBar +CheckSpace +#VerbosePkgLists +ParallelDownloads = 10 +DownloadUser = alpm +#DisableSandbox +ILoveCandy + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[core-testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +#[extra-testing] +#Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +# If you want to run 32 bit applications on your x86_64 system, +# enable the multilib repositories as required here. + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +[multilib] +Include = /etc/pacman.d/mirrorlist + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/etc/systemd/resolved.conf b/etc/systemd/resolved.conf new file mode 100644 --- /dev/null +++ b/etc/systemd/resolved.conf @@ -0,0 +1,44 @@ +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation; either version 2.1 of the License, or (at your option) +# any later version. +# +# Entries in this file show the compile time defaults. Local configuration +# should be created by either modifying this file (or a copy of it placed in +# /etc/ if the original file is shipped in /usr/), or by creating "drop-ins" in +# the /etc/systemd/resolved.conf.d/ directory. The latter is generally +# recommended. Defaults can be restored by simply deleting the main +# configuration file and all drop-ins located in /etc/. +# +# Use 'systemd-analyze cat-config systemd/resolved.conf' to display the full config. +# +# See resolved.conf(5) for details. + +[Resolve] +# Some examples of DNS servers which may be used for DNS= and FallbackDNS=: +# Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com +# Google: 8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google +# Quad9: 9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net +# +# Using DNS= configures global DNS servers and does not suppress link-specific +# configuration. Parallel requests will be sent to per-link DNS servers +# configured automatically by systemd-networkd.service(8), NetworkManager(8), or +# similar management services, or configured manually via resolvectl(1). See +# resolved.conf(5) and systemd-resolved(8) for more details. +DNS=1.1.1.1#cloudflare-dns.com 8.8.8.8#dns.google 2606:4700:4700::1111#cloudflare-dns.com 2001:4860:4860::8888#dns.google 9.9.9.9#dns.quad9.net 2620:fe::9#dns.quad9.net +FallbackDNS=9.9.9.9#dns.quad9.net 2620:fe::9#dns.quad9.net 1.1.1.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 8.8.8.8#dns.google 2001:4860:4860::8888#dns.google +#Domains= +DNSSEC=yes +DNSOverTLS=yes +#MulticastDNS=yes +#LLMNR=yes +Cache=yes +#CacheFromLocalhost=no +DNSStubListener=yes +#DNSStubListenerExtra= +ReadEtcHosts=yes +#ResolveUnicastSingleLabel=no +#StaleRetentionSec=0 +#RefuseRecordTypes= diff --git a/etc/udev/rules.d/10-trim.rules b/etc/udev/rules.d/10-trim.rules new file mode 100644 --- /dev/null +++ b/etc/udev/rules.d/10-trim.rules @@ -0,0 +1,1 @@ +ACTION=="add|change", ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="4001", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap" diff --git a/fish/.config/fish/completions/bun.fish b/fish/.config/fish/completions/bun.fish --- a/fish/.config/fish/completions/bun.fish +++ b/fish/.config/fish/completions/bun.fish @@ -35,8 +35,8 @@ set -l bun_install_boolean_flags yarn production optional development no-save dry-run force no-cache silent verbose global set -l bun_install_boolean_flags_descriptions "Write a yarn.lock file (yarn v1)" "Don't install devDependencies" "Add dependency to optionalDependencies" "Add dependency to devDependencies" "Don't update package.json or save a lockfile" "Don't install anything" "Always request the latest versions from the registry & reinstall all dependencies" "Ignore manifest cache entirely" "Don't output anything" "Excessively verbose logging" "Use global folder" -set -l bun_builtin_cmds_without_run dev create help bun upgrade discord install remove add init pm x -set -l bun_builtin_cmds_accepting_flags create help bun upgrade discord run init link unlink pm x +set -l bun_builtin_cmds_without_run dev create help bun upgrade discord install remove add update init pm x +set -l bun_builtin_cmds_accepting_flags create help bun upgrade discord run init link unlink pm x update function __bun_complete_bins_scripts --inherit-variable bun_builtin_cmds_without_run -d "Emit bun completions for bins and scripts" # Do nothing if we already have a builtin subcommand, @@ -143,14 +143,14 @@ -n __fish_use_subcommand -a remove -F -d 'Remove a package from package.json' for i in (seq (count $bun_install_boolean_flags)) complete -c bun \ - -n "__fish_seen_subcommand_from install add remove" -l "$bun_install_boolean_flags[$i]" -d "$bun_install_boolean_flags_descriptions[$i]" + -n "__fish_seen_subcommand_from install add remove update" -l "$bun_install_boolean_flags[$i]" -d "$bun_install_boolean_flags_descriptions[$i]" end complete -c bun \ - -n "__fish_seen_subcommand_from install add remove" -l cwd -d 'Change working directory' + -n "__fish_seen_subcommand_from install add remove update" -l cwd -d 'Change working directory' complete -c bun \ - -n "__fish_seen_subcommand_from install add remove" -l cache-dir -d 'Choose a cache directory (default: $HOME/.bun/install/cache)' + -n "__fish_seen_subcommand_from install add remove update" -l cache-dir -d 'Choose a cache directory (default: $HOME/.bun/install/cache)' complete -c bun \ -n "__fish_seen_subcommand_from add" -d Popular -a '(__fish__get_bun_packages)' @@ -165,17 +165,18 @@ complete -c bun \ -n "__fish_seen_subcommand_from pm; and __fish_seen_subcommand_from cache; and not __fish_seen_subcommand_from (__fish__get_bun_bins) (__fish__get_bun_scripts);" -a rm -f # Add built-in subcommands with descriptions. -complete -c bun -n __fish_use_subcommand -a create -f -d "Create a new project from a template" +complete -c bun -n __fish_use_subcommand -a "create c" -f -d "Create a new project from a template" complete -c bun -n __fish_use_subcommand -a "build bun" --require-parameter -F -d "Transpile and bundle one or more files" complete -c bun -n __fish_use_subcommand -a upgrade -d "Upgrade Bun" complete -c bun -n __fish_use_subcommand -a run -d "Run a script or package binary" -complete -c bun -n __fish_use_subcommand -a install -d "Install dependencies from package.json" -f -complete -c bun -n __fish_use_subcommand -a remove -d "Remove a dependency from package.json" -f -complete -c bun -n __fish_use_subcommand -a add -d "Add a dependency to package.json" -f +complete -c bun -n __fish_use_subcommand -a "install i" -d "Install dependencies from package.json" -f +complete -c bun -n __fish_use_subcommand -a "remove rm r" -d "Remove a dependency from package.json" -f +complete -c bun -n __fish_use_subcommand -a "add a" -d "Add a dependency to package.json" -f complete -c bun -n __fish_use_subcommand -a init -d "Initialize a Bun project in this directory" -f complete -c bun -n __fish_use_subcommand -a link -d "Register or link a local npm package" -f complete -c bun -n __fish_use_subcommand -a unlink -d "Unregister a local npm package" -f complete -c bun -n __fish_use_subcommand -a pm -d "Additional package management utilities" -f complete -c bun -n __fish_use_subcommand -a x -d "Execute a package binary, installing if needed" -f complete -c bun -n __fish_use_subcommand -a outdated -d "Display the latest versions of outdated dependencies" -f +complete -c bun -n __fish_use_subcommand -a update -d "Update dependencies to their latest versions" -f complete -c bun -n __fish_use_subcommand -a publish -d "Publish your package from local to npm" -f diff --git a/fish/.config/fish/completions/pnpm.fish b/fish/.config/fish/completions/pnpm.fish --- a/fish/.config/fish/completions/pnpm.fish +++ b/fish/.config/fish/completions/pnpm.fish @@ -1,23 +1,94 @@ -###-begin-pnpm-completion-### -function _pnpm_completion - set cmd (commandline -o) - set cursor (commandline -C) - set words (count $cmd) +set -g __fish_pnpm_cmdline +set -g __fish_pnpm_remove_cmdline + +set -l deps_commands remove rm why update upgrade up +set -l up_commands update upgrade up +set -l install_commands install i + +complete -c pnpm -f +complete -c pnpm -a "(__get_scripts)" +complete -c pnpm -f -l filter -s F -r -a "$(FEATURE=filter pnpm-shell-completion)" -d 'Select specified packages' +complete -c pnpm -n "__fish_use_subcommand; or __has_filter" -f -a 'add remove install update publish' +complete -c pnpm -n "not __fish_use_subcommand" -F + +# add relative options +complete -c pnpm -n __could_add_global -l global -s g -d 'Install a global package' +complete -c pnpm -n "__fish_seen_subcommand_from add" -l save-dev -s D -d 'Save package to your `devDependencies`' +complete -c pnpm -n "__fish_seen_subcommand_from add" -l save-peer -d 'Save package to your `peerDependencies` and `devDependencies`' + +complete -c pnpm -n "__fish_seen_subcommand_from $deps_commands" -f -a "(__get_deps)" + +complete -c pnpm -n "__fish_seen_subcommand_from $install_commands" -l dev -s D -d 'Only `devDependencies` are installed regardless of the `NODE_ENV`' +complete -c pnpm -n "__fish_seen_subcommand_from $install_commands" -l fix-lockfile -d 'Fix broken lockfile entries automatically' +complete -c pnpm -n "__fish_seen_subcommand_from $install_commands" -l force -d 'Force reinstall dependencies' +complete -c pnpm -n "__fish_seen_subcommand_from $install_commands" -l ignore-scripts -d "Don't run lifecycle scripts" +complete -c pnpm -n "__fish_seen_subcommand_from $install_commands" -l lockfile-only -d 'Dependencies are not downloaded. Only `pnpm-lock.yaml` is updated' +complete -c pnpm -n "__fish_seen_subcommand_from $install_commands" -l no-optional -d '`optionalDependencies` are not installed' +complete -c pnpm -n "__fish_seen_subcommand_from $install_commands" -l offline -d 'Trigger an error if any required dependencies are not available in local store' +complete -c pnpm -n "__fish_seen_subcommand_from $install_commands" -l prefer-offline -d 'Skip staleness checks for cached data, but request missing data from the server' +complete -c pnpm -n "__fish_seen_subcommand_from $install_commands" -l prod -s D -d "Packages in `devDependencies` won't be installed" + +complete -c pnpm -n "__fish_seen_subcommand_from $up_commands" -l save-dev -s D -d 'Update packages only in "devDependencies"' +complete -c pnpm -n "__fish_seen_subcommand_from $up_commands" -l interactive -s i -d 'Show outdated dependencies and select which ones to update' +complete -c pnpm -n "__fish_seen_subcommand_from $up_commands" -l latest -s L -d 'Ignore version ranges in package.json' +complete -c pnpm -n "__fish_seen_subcommand_from $up_commands" -l no-optional -d "Don't update packages in `optionalDependencies`" +complete -c pnpm -n "__fish_seen_subcommand_from $up_commands" -l prod -s P -d 'Update packages only in "dependencies" and "optionalDependencies"' +complete -c pnpm -n "__fish_seen_subcommand_from $up_commands" -l recursive -s r -d 'Update in every package found in subdirectories or every workspace package' + +complete -c pnpm -n "__fish_seen_subcommand_from publish" -l access -x -a 'public restricted' -d 'Tells the registry whether this package should be published as public or restricted' +complete -c pnpm -n "__fish_seen_subcommand_from publish" -l dry-run -d 'Does everything a publish would do except actually publishing to the registry' +complete -c pnpm -n "__fish_seen_subcommand_from publish" -l force -d 'Packages are proceeded to be published even if their current version is already in the registry' +complete -c pnpm -n "__fish_seen_subcommand_from publish" -l ignore-scripts -d 'Ignores any publish related lifecycle scripts (prepublishOnly, postpublish, and the like)' +complete -c pnpm -n "__fish_seen_subcommand_from publish" -l no-git-checks -d "Don't check if current branch is your publish branch, clean, and up to date" +complete -c pnpm -n "__fish_seen_subcommand_from publish" -l otp -d 'Specify a one-time password' +complete -c pnpm -n "__fish_seen_subcommand_from publish" -l publish-branch -d 'Sets branch name to publish' +complete -c pnpm -n "__fish_seen_subcommand_from publish" -l recursive -s r -d 'Publish all packages from the workspace' +complete -c pnpm -n "__fish_seen_subcommand_from publish" -l tag -x -d 'Registers the published package with the given tag' + +function __get_scripts + set -l cmdline (commandline -c) + if set -q __fish_pnpm_cmdline; and test "$cmdline" = "$__fish_pnpm_cmdline" + return 0 + end + + set -g __fish_pnpm_cmdline $cmdline - set completions (eval env DEBUG=\"" \"" COMP_CWORD=\""$words\"" COMP_LINE=\""$cmd \"" COMP_POINT=\""$cursor\"" SHELL=fish pnpm completion-server -- $cmd) + set -l tokens (commandline -opc) + set -e tokens[1] # assume the first token is `pnpm` + argparse 'F/filter=' -- $tokens 2>/dev/null + TARGET_PKG=$_flag_filter FEATURE=scripts pnpm-shell-completion +end - if [ "$completions" = "__tabtab_complete_files__" ] - set -l matches (commandline -ct)* - if [ -n "$matches" ] - __fish_complete_path (commandline -ct) - end - else - for completion in $completions - echo -e $completion - end +function __get_deps + set -l cmdline (commandline -c) + if set -q __fish_pnpm_remove_cmdline; and test "$cmdline" = "$__fish_pnpm_remove_cmdline" + return 0 end + + set -g __fish_pnpm_remove_cmdline $cmdline + + set -l tokens (commandline -opc) + set -e tokens[1] # assume the first token is `pnpm` + argparse 'F/filter=' -- $tokens 2>/dev/null + TARGET_PKG=$_flag_filter FEATURE=deps pnpm-shell-completion end -complete -f -d 'pnpm' -c pnpm -a "(_pnpm_completion)" -###-end-pnpm-completion-### +function __has_filter + set -l tokens (commandline -opc) + set -e tokens[1] # assume the first token is `pnpm` + argparse 'F/filter=' -- $tokens 2>/dev/null + if not count $_flag_filter + return 1 + end + return 0 +end +function __could_add_global + if __has_filter + return 1 + end + if __fish_seen_subcommand_from add + return 0 + end + return 1 +end diff --git a/fish/.config/fish/conf.d/fish_frozen_key_bindings.fish b/fish/.config/fish/conf.d/fish_frozen_key_bindings.fish new file mode 100644 --- /dev/null +++ b/fish/.config/fish/conf.d/fish_frozen_key_bindings.fish @@ -0,0 +1,14 @@ +# This file was created by fish when upgrading to version 4.3, to migrate +# the 'fish_key_bindings' variable from its old default scope (universal) +# to its new default scope (global). We recommend you delete this file +# and configure key bindings in ~/.config/fish/config.fish if needed. + +set --global fish_key_bindings fish_hybrid_key_bindings + +# Prior to version 4.3, fish shipped an event handler that runs +# `set --universal fish_key_bindings fish_default_key_bindings` +# whenever the fish_key_bindings variable is erased. +# This means that as long as any fish < 4.3 is still running on this system, +# we cannot complete the migration. +# As a workaround, erase the universal variable at every shell startup. +set --erase --universal fish_key_bindings diff --git a/fish/.config/fish/conf.d/fish_frozen_theme.fish b/fish/.config/fish/conf.d/fish_frozen_theme.fish new file mode 100644 --- /dev/null +++ b/fish/.config/fish/conf.d/fish_frozen_theme.fish @@ -0,0 +1,48 @@ +# 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`). + +set --global fish_color_autosuggestion 4c566a +set --global fish_color_cancel --reverse +set --global fish_color_command 88c0d0 +set --global fish_color_comment 4c566a --italics +set --global fish_color_cwd 5e81ac +set --global fish_color_cwd_root bf616a +set --global fish_color_end 81a1c1 +set --global fish_color_error bf616a +set --global fish_color_escape ebcb8b +set --global fish_color_history_current e5e9f0 --bold +set --global fish_color_host a3be8c +set --global fish_color_host_remote +set --global fish_color_keyword +set --global fish_color_match --background=brblue +set --global fish_color_normal normal +set --global fish_color_operator 81a1c1 +set --global fish_color_option +set --global fish_color_param d8dee9 +set --global fish_color_quote a3be8c +set --global fish_color_redirection b48ead --bold +set --global fish_color_search_match --bold --background=434c5e +set --global fish_color_selection d8dee9 --bold --background=434c5e +set --global fish_color_status red +set --global fish_color_user a3be8c +set --global fish_color_valid_path --underline +set --global fish_pager_color_background +set --global fish_pager_color_completion e5e9f0 +set --global fish_pager_color_description ebcb8b --italics +set --global fish_pager_color_prefix normal --bold --underline +set --global fish_pager_color_progress 3b4252 --background=d08770 +set --global fish_pager_color_secondary_background +set --global fish_pager_color_secondary_completion +set --global fish_pager_color_secondary_description +set --global fish_pager_color_secondary_prefix +set --global fish_pager_color_selected_background --background=434c5e +set --global fish_pager_color_selected_completion +set --global fish_pager_color_selected_description +set --global fish_pager_color_selected_prefix diff --git a/fish/.config/fish/config.fish b/fish/.config/fish/config.fish --- a/fish/.config/fish/config.fish +++ b/fish/.config/fish/config.fish @@ -53,11 +53,32 @@ type -q starship && starship init fish | source type -q atuin && atuin init fish --disable-up-arrow | source type -q keylightctl && keylightctl completion fish | source +# why does this break autocomplete for the tmux command +# test ! -e "$HOME/.x-cmd.root/local/data/fish/rc.fish" || source "$HOME/.x-cmd.root/local/data/fish/rc.fish" + +# functions -c fish_prompt __fish_prompt +# function fish_prompt +# set _status $status +# echo "check $(date +%s%3N) $did_tmux_restore" | systemd-cat +# if set -q did_tmux_restore +# # functions -e fish_prompt +# # functions -c __fish_prompt fish_prompt +# # functions -e __fish_prompt +# # printf '\e[u' +# return +# else +# # forwarding the original $status to the actual prompt +# test $_status -eq 0 +# __fish_prompt +# # printf '\e[s' +# end +# end + if test -e $__fish_user_data_dir/plugins/plug.fish/conf.d/plugin_load.fish source $__fish_user_data_dir/plugins/plug.fish/conf.d/plugin_load.fish else if not set -q plugins - set -U plugins https://github.com/kidonng/plug.fish + set -Ux plugins https://github.com/kidonng/plug.fish end curl -L https://github.com/kidonng/plug.fish/raw/v3/conf.d/plugin_load.fish | source end @@ -80,3 +101,11 @@ break end end +function last_history_item + echo $history[1] +end +abbr -a !! --position anywhere --function last_history_item + +# TODO: fix empty line on suspending again +# bind -M insert \cz 'functions -c fish_job_summary _fish_job_summary; function fish_job_summary; end; fg 2>/dev/null; commandline -f repaint; functions -e fish_job_summary; functions -c _fish_job_summary fish_job_summary; functions -e _fish_job_summary' +bind -M insert \cz 'fg; commandline -f repaint' diff --git a/fish/.config/fish/fish_variables b/fish/.config/fish/fish_variables --- a/fish/.config/fish/fish_variables +++ b/fish/.config/fish/fish_variables @@ -3,6 +3,9 @@ # VERSION: 3.0 SETUVAR --export ABBR_TIPS_PROMPT:\x5cn\U0001f4a1\x20\x5ce\x5b1m\x7b\x7b\x20\x2eabbr\x20\x7d\x7d\x5ce\x5b0m\x20\x3d\x3e\x20\x7b\x7b\x20\x2ecmd\x20\x7d\x7d SETUVAR --export ABBR_TIPS_REGEXES:\x28\x5e\x28\x5cw\x2b\x5cs\x2b\x29\x2b\x28\x2d\x7b1\x2c2\x7d\x29\x5cw\x2b\x29\x28\x5cs\x5cS\x2b\x29\x1e\x28\x5e\x28\x5cs\x3f\x28\x5cw\x2d\x3f\x29\x2b\x29\x7b3\x7d\x29\x2e\x2a\x1e\x28\x5e\x28\x5cs\x3f\x28\x5cw\x2d\x3f\x29\x2b\x29\x7b2\x7d\x29\x2e\x2a\x1e\x28\x5e\x28\x5cs\x3f\x28\x5cw\x2d\x3f\x29\x2b\x29\x7b1\x7d\x29\x2e\x2a SETUVAR --export ANDROID_HOME:/home/bas/Android/Sdk +SETUVAR --export ANDROID_NDK:/opt/android\x2dndk +SETUVAR --export ANDROID_NDK_HOME:/opt/android\x2dndk +SETUVAR --export ANDROID_NDK_ROOT:/opt/android\x2dndk SETUVAR --export BAT_THEME:Nord SETUVAR --export CARAPACE_BRIDGES:cobra\x2czsh\x2cfish\x2cbash\x2cinshellisense SETUVAR --export CARAPACE_UNFILTERED:1 @@ -21,6 +24,12 @@ SETUVAR --export LESS:\x2dj5\x20\x2d\x2dmouse\x20\x2d\x2dwheel\x2dlines\x203\x20\x2digRF\x20\x2d\x2dincsearch\x1e\x2d\x2dsearch\x2doptions\x3dW SETUVAR --export LIBVA_DRIVER_NAME:iHD SETUVAR --export LS_COLORS:no\x3d00\x3ars\x3d0\x3afi\x3d00\x3adi\x3d01\x3b34\x3aln\x3d36\x3amh\x3d04\x3b36\x3api\x3d04\x3b01\x3b36\x3aso\x3d04\x3b33\x3ado\x3d04\x3b01\x3b36\x3abd\x3d01\x3b33\x3acd\x3d33\x3aor\x3d31\x3ami\x3d01\x3b37\x3b41\x3aex\x3d01\x3b36\x3asu\x3d01\x3b04\x3b37\x3asg\x3d01\x3b04\x3b37\x3aca\x3d01\x3b37\x3atw\x3d01\x3b37\x3b44\x3aow\x3d01\x3b04\x3b34\x3ast\x3d04\x3b37\x3b44\x3a\x2a\x2e7z\x3d01\x3b32\x3a\x2a\x2eace\x3d01\x3b32\x3a\x2a\x2ealz\x3d01\x3b32\x3a\x2a\x2earc\x3d01\x3b32\x3a\x2a\x2earj\x3d01\x3b32\x3a\x2a\x2ebz\x3d01\x3b32\x3a\x2a\x2ebz2\x3d01\x3b32\x3a\x2a\x2ecab\x3d01\x3b32\x3a\x2a\x2ecpio\x3d01\x3b32\x3a\x2a\x2edeb\x3d01\x3b32\x3a\x2a\x2edz\x3d01\x3b32\x3a\x2a\x2eear\x3d01\x3b32\x3a\x2a\x2egz\x3d01\x3b32\x3a\x2a\x2ejar\x3d01\x3b32\x3a\x2a\x2elha\x3d01\x3b32\x3a\x2a\x2elrz\x3d01\x3b32\x3a\x2a\x2elz\x3d01\x3b32\x3a\x2a\x2elz4\x3d01\x3b32\x3a\x2a\x2elzh\x3d01\x3b32\x3a\x2a\x2elzma\x3d01\x3b32\x3a\x2a\x2elzo\x3d01\x3b32\x3a\x2a\x2erar\x3d01\x3b32\x3a\x2a\x2erpm\x3d01\x3b32\x3a\x2a\x2erz\x3d01\x3b32\x3a\x2a\x2esar\x3d01\x3b32\x3a\x2a\x2et7z\x3d01\x3b32\x3a\x2a\x2etar\x3d01\x3b32\x3a\x2a\x2etaz\x3d01\x3b32\x3a\x2a\x2etbz\x3d01\x3b32\x3a\x2a\x2etbz2\x3d01\x3b32\x3a\x2a\x2etgz\x3d01\x3b32\x3a\x2a\x2etlz\x3d01\x3b32\x3a\x2a\x2etxz\x3d01\x3b32\x3a\x2a\x2etz\x3d01\x3b32\x3a\x2a\x2etzo\x3d01\x3b32\x3a\x2a\x2etzst\x3d01\x3b32\x3a\x2a\x2ewar\x3d01\x3b32\x3a\x2a\x2exz\x3d01\x3b32\x3a\x2a\x2ez\x3d01\x3b32\x3a\x2a\x2eZ\x3d01\x3b32\x3a\x2a\x2ezip\x3d01\x3b32\x3a\x2a\x2ezoo\x3d01\x3b32\x3a\x2a\x2ezst\x3d01\x3b32\x3a\x2a\x2eaac\x3d32\x3a\x2a\x2eau\x3d32\x3a\x2a\x2eflac\x3d32\x3a\x2a\x2em4a\x3d32\x3a\x2a\x2emid\x3d32\x3a\x2a\x2emidi\x3d32\x3a\x2a\x2emka\x3d32\x3a\x2a\x2emp3\x3d32\x3a\x2a\x2empa\x3d32\x3a\x2a\x2empeg\x3d32\x3a\x2a\x2empg\x3d32\x3a\x2a\x2eogg\x3d32\x3a\x2a\x2eopus\x3d32\x3a\x2a\x2era\x3d32\x3a\x2a\x2ewav\x3d32\x3a\x2a\x2e3des\x3d01\x3b35\x3a\x2a\x2eaes\x3d01\x3b35\x3a\x2a\x2egpg\x3d01\x3b35\x3a\x2a\x2epgp\x3d01\x3b35\x3a\x2a\x2edoc\x3d32\x3a\x2a\x2edocx\x3d32\x3a\x2a\x2edot\x3d32\x3a\x2a\x2eodg\x3d32\x3a\x2a\x2eodp\x3d32\x3a\x2a\x2eods\x3d32\x3a\x2a\x2eodt\x3d32\x3a\x2a\x2eotg\x3d32\x3a\x2a\x2eotp\x3d32\x3a\x2a\x2eots\x3d32\x3a\x2a\x2eott\x3d32\x3a\x2a\x2epdf\x3d32\x3a\x2a\x2eppt\x3d32\x3a\x2a\x2epptx\x3d32\x3a\x2a\x2exls\x3d32\x3a\x2a\x2exlsx\x3d32\x3a\x2a\x2eapp\x3d01\x3b36\x3a\x2a\x2ebat\x3d01\x3b36\x3a\x2a\x2ebtm\x3d01\x3b36\x3a\x2a\x2ecmd\x3d01\x3b36\x3a\x2a\x2ecom\x3d01\x3b36\x3a\x2a\x2eexe\x3d01\x3b36\x3a\x2a\x2ereg\x3d01\x3b36\x3a\x2a\x7e\x3d02\x3b37\x3a\x2a\x2ebak\x3d02\x3b37\x3a\x2a\x2eBAK\x3d02\x3b37\x3a\x2a\x2elog\x3d02\x3b37\x3a\x2a\x2elog\x3d02\x3b37\x3a\x2a\x2eold\x3d02\x3b37\x3a\x2a\x2eOLD\x3d02\x3b37\x3a\x2a\x2eorig\x3d02\x3b37\x3a\x2a\x2eORIG\x3d02\x3b37\x3a\x2a\x2eswo\x3d02\x3b37\x3a\x2a\x2eswp\x3d02\x3b37\x3a\x2a\x2ebmp\x3d32\x3a\x2a\x2ecgm\x3d32\x3a\x2a\x2edl\x3d32\x3a\x2a\x2edvi\x3d32\x3a\x2a\x2eemf\x3d32\x3a\x2a\x2eeps\x3d32\x3a\x2a\x2egif\x3d32\x3a\x2a\x2ejpeg\x3d32\x3a\x2a\x2ejpg\x3d32\x3a\x2a\x2eJPG\x3d32\x3a\x2a\x2emng\x3d32\x3a\x2a\x2epbm\x3d32\x3a\x2a\x2epcx\x3d32\x3a\x2a\x2epgm\x3d32\x3a\x2a\x2epng\x3d32\x3a\x2a\x2ePNG\x3d32\x3a\x2a\x2eppm\x3d32\x3a\x2a\x2epps\x3d32\x3a\x2a\x2eppsx\x3d32\x3a\x2a\x2eps\x3d32\x3a\x2a\x2esvg\x3d32\x3a\x2a\x2esvgz\x3d32\x3a\x2a\x2etga\x3d32\x3a\x2a\x2etif\x3d32\x3a\x2a\x2etiff\x3d32\x3a\x2a\x2exbm\x3d32\x3a\x2a\x2excf\x3d32\x3a\x2a\x2expm\x3d32\x3a\x2a\x2exwd\x3d32\x3a\x2a\x2exwd\x3d32\x3a\x2a\x2eyuv\x3d32\x3a\x2a\x2eanx\x3d32\x3a\x2a\x2easf\x3d32\x3a\x2a\x2eavi\x3d32\x3a\x2a\x2eaxv\x3d32\x3a\x2a\x2eflc\x3d32\x3a\x2a\x2efli\x3d32\x3a\x2a\x2eflv\x3d32\x3a\x2a\x2egl\x3d32\x3a\x2a\x2em2v\x3d32\x3a\x2a\x2em4v\x3d32\x3a\x2a\x2emkv\x3d32\x3a\x2a\x2emov\x3d32\x3a\x2a\x2eMOV\x3d32\x3a\x2a\x2emp4\x3d32\x3a\x2a\x2empeg\x3d32\x3a\x2a\x2empg\x3d32\x3a\x2a\x2enuv\x3d32\x3a\x2a\x2eogm\x3d32\x3a\x2a\x2eogv\x3d32\x3a\x2a\x2eogx\x3d32\x3a\x2a\x2eqt\x3d32\x3a\x2a\x2erm\x3d32\x3a\x2a\x2ermvb\x3d32\x3a\x2a\x2eswf\x3d32\x3a\x2a\x2evob\x3d32\x3a\x2a\x2ewebm\x3d32\x3a\x2a\x2ewmv\x3d32\x3a SETUVAR --export MANPAGER:nvim\x20\x2bMan\x21 +SETUVAR --export MISE_DISABLE_TOOLS:java +SETUVAR --export OPENJFX_JAVA_OPTIONS:\x2dDjava\x2elibrary\x2epath\x3d/usr/lib/java\x2dopenjfx\x20\x2d\x2dmodule\x2dpath\x3d/usr/share/java/java\x2dopenjfx +SETUVAR --export --path OPENJFX_LIBRARY_PATH:/usr/lib/java\x2dopenjfx +SETUVAR --export --path OPENJFX_MODULES_PATH:/usr/share/java/java\x2dopenjfx +SETUVAR --export PULUMI_ENABLE_JOURNALING:true +SETUVAR --export PYTHONBREAKPOINT:ipdb\x2eset_trace SETUVAR --export QT_API:pyqt6 SETUVAR --export QT_QPA_PLATFORM:wayland SETUVAR --export QT_QUICK_BACKEND:opengl @@ -31,58 +40,19 @@ SETUVAR --export SUDO_EDITOR:nvim SETUVAR --export SYSTEMD_EDITOR:nvim SETUVAR --export TERMINAL:ghostty SETUVAR --export ZSTD_NBTHREADS:8 -SETUVAR --export __ABBR_TIPS_KEYS:a__\x3aq\x1ea__but\x1ea__choco\x1ea__fastboot\x1ea__fish_vi_dec\x1ea__fish_vi_inc\x1ea__gsudo\x1ea__ip\x1ea__jj\x2dstack\x1ea__jst\x1ea__keybase\x1ea__paco\x1ea__rg\x1ea__t\x1ea__winget\x1ea__z\x1ea__zi -SETUVAR --export __ABBR_TIPS_VALUES:exit\x1egitbutler\x2dtauri\x1echoco\x2eexe\x1efastboot\x2eexe\x1efish_vi_inc_dec\x20dec\x1efish_vi_inc_dec\x20inc\x1esudo\x2eexe\x1eip\x20\x2d\x2dcolor\x3dauto\x1ebunx\x20jj\x2dstack\x1ebunx\x20jj\x2dstack\x1ekeybase\x2eexe\x1e/Volumes/T7/francinette/tester\x2esh\x1erg\x20\x2dS\x1etmux\x1ecmd\x2eexe\x20/c\x20winget\x2eexe\x1e__zoxide_z\x1e__zoxide_zi -SETUVAR __fish_initialized:3800 +SETUVAR --export __ABBR_TIPS_KEYS:a__\x2c\x1ea__\x2c\x2c\x1ea__\x3aq\x1ea__but\x1ea__choco\x1ea__diff\x1ea__fastboot\x1ea__gsudo\x1ea__ip\x1ea__jj\x2dstack\x1ea__jst\x1ea__keybase\x1ea__paco\x1ea__rg\x1ea__t\x1ea__winget\x1ea__z\x1ea__zi\x1ea__\uff0c\x1ea__\uff0c\uff0c +SETUVAR --export __ABBR_TIPS_VALUES:___x_cmd\x20fish\x20\x2d\x2dsysco\x1e___x_cmd\x20fish\x20\x2d\x2dsyscoco\x1eexit\x1egitbutler\x2dtauri\x1echoco\x2eexe\x1ediff\x20\x2d\x2dwidth\x3d\x28tput\x20cols\x29\x1efastboot\x2eexe\x1esudo\x2eexe\x1eip\x20\x2d\x2dcolor\x3dauto\x1ebunx\x20jj\x2dstack\x1ebunx\x20jj\x2dstack\x1ekeybase\x2eexe\x1e/Volumes/T7/francinette/tester\x2esh\x1erg\x20\x2dS\x1etmux\x1ecmd\x2eexe\x20/c\x20winget\x2eexe\x1e__zoxide_z\x1e__zoxide_zi\x1e___x_cmd\x20fish\x20\x2d\x2dsysco\x1e___x_cmd\x20fish\x20\x2d\x2dsyscoco +SETUVAR __fish_initialized:4300 SETUVAR _fisher_upgraded_to_4_4:\x1d SETUVAR _usage_spec_mise_2024_11_12:min_usage_version\x20\x221\x2e3\x22\x0aname\x20\x22mise\x22\x0abin\x20\x22mise\x22\x0aabout\x20\x22The\x20front\x2dend\x20to\x20your\x20dev\x20env\x22\x0along_about\x20r\x22mise\x20is\x20a\x20tool\x20for\x20managing\x20runtime\x20versions\x2e\x20https\x3a//github\x2ecom/jdx/mise\x0a\x0aIt\x27s\x20a\x20replacement\x20for\x20tools\x20like\x20nvm\x2c\x20nodenv\x2c\x20rbenv\x2c\x20rvm\x2c\x20chruby\x2c\x20pyenv\x2c\x20etc\x2e\x0athat\x20works\x20for\x20any\x20language\x2e\x20It\x27s\x20also\x20great\x20for\x20managing\x20linters/tools\x20like\x0ajq\x20and\x20shellcheck\x2e\x0a\x0aIt\x20is\x20inspired\x20by\x20asdf\x20and\x20uses\x20asdf\x27s\x20plugin\x20ecosystem\x20under\x20the\x20hood\x3a\x0ahttps\x3a//asdf\x2dvm\x2ecom/\x22\x0ausage\x20\x22Usage\x3a\x20mise\x20\x5bOPTIONS\x5d\x20\x3cCOMMAND\x3e\x22\x0aflag\x20\x22\x2dC\x20\x2d\x2dcd\x22\x20help\x3d\x22Change\x20directory\x20before\x20running\x20command\x22\x20global\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20arg\x20\x22\x3cDIR\x3e\x22\x0a\x7d\x0aflag\x20\x22\x2d\x2ddebug\x22\x20help\x3d\x22Sets\x20log\x20level\x20to\x20debug\x22\x20hide\x3dtrue\x20global\x3dtrue\x0aflag\x20\x22\x2d\x2dlog\x2dlevel\x22\x20help\x3d\x22Set\x20the\x20log\x20output\x20verbosity\x22\x20hide\x3dtrue\x20global\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20arg\x20\x22\x3cLEVEL\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22error\x22\x20\x22warn\x22\x20\x22info\x22\x20\x22debug\x22\x20\x22trace\x22\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0aflag\x20\x22\x2dP\x20\x2d\x2dprofile\x22\x20help\x3d\x22Set\x20the\x20profile\x20\x28environment\x29\x22\x20global\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20arg\x20\x22\x3cPROFILE\x3e\x22\x0a\x7d\x0aflag\x20\x22\x2dq\x20\x2d\x2dquiet\x22\x20help\x3d\x22Suppress\x20non\x2derror\x20messages\x22\x20global\x3dtrue\x0aflag\x20\x22\x2d\x2dtrace\x22\x20help\x3d\x22Sets\x20log\x20level\x20to\x20trace\x22\x20hide\x3dtrue\x20global\x3dtrue\x0aflag\x20\x22\x2dv\x20\x2d\x2dverbose\x22\x20help\x3d\x22Show\x20extra\x20output\x20\x28use\x20\x2dvv\x20for\x20even\x20more\x29\x22\x20var\x3dtrue\x20global\x3dtrue\x20count\x3dtrue\x0aflag\x20\x22\x2dy\x20\x2d\x2dyes\x22\x20help\x3d\x22Answer\x20yes\x20to\x20all\x20confirmation\x20prompts\x22\x20global\x3dtrue\x0acmd\x20\x22activate\x22\x20help\x3d\x22Initializes\x20mise\x20in\x20the\x20current\x20shell\x20session\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x23\x22Initializes\x20mise\x20in\x20the\x20current\x20shell\x20session\x0a\x0aThis\x20should\x20go\x20into\x20your\x20shell\x27s\x20rc\x20file\x2e\x0aOtherwise\x2c\x20it\x20will\x20only\x20take\x20effect\x20in\x20the\x20current\x20session\x2e\x0a\x28e\x2eg\x2e\x20\x7e/\x2ezshrc\x2c\x20\x7e/\x2ebashrc\x29\x0a\x0aThis\x20is\x20only\x20intended\x20to\x20be\x20used\x20in\x20interactive\x20sessions\x2c\x20not\x20scripts\x2e\x0amise\x20is\x20only\x20capable\x20of\x20updating\x20PATH\x20when\x20the\x20prompt\x20is\x20displayed\x20to\x20the\x20user\x2e\x0aFor\x20non\x2dinteractive\x20use\x2dcases\x2c\x20use\x20shims\x20instead\x2e\x0a\x0aTypically\x20this\x20can\x20be\x20added\x20with\x20something\x20like\x20the\x20following\x3a\x0a\x0a\x20\x20\x20\x20echo\x20\x27eval\x20\x22\x24\x28mise\x20activate\x29\x22\x27\x20\x3e\x3e\x20\x7e/\x2ezshrc\x0a\x0aHowever\x2c\x20this\x20requires\x20that\x20\x22mise\x22\x20is\x20in\x20your\x20PATH\x2e\x20If\x20it\x20is\x20not\x2c\x20you\x20need\x20to\x0aspecify\x20the\x20full\x20path\x20like\x20this\x3a\x0a\x0a\x20\x20\x20\x20echo\x20\x27eval\x20\x22\x24\x28/path/to/mise\x20activate\x29\x22\x27\x20\x3e\x3e\x20\x7e/\x2ezshrc\x0a\x0aCustomize\x20status\x20output\x20with\x20\x60status\x60\x20settings\x2e\x22\x23\x0a\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20eval\x20\x22\x24\x28mise\x20activate\x20bash\x29\x22\x0a\x20\x20\x20\x20\x24\x20eval\x20\x22\x24\x28mise\x20activate\x20zsh\x29\x22\x0a\x20\x20\x20\x20\x24\x20mise\x20activate\x20fish\x20\x7c\x20source\x0a\x20\x20\x20\x20\x24\x20execx\x28\x24\x28mise\x20activate\x20xonsh\x29\x29\x0a\x22\x23\x0a\x20\x20\x20\x20flag\x20\x22\x2ds\x20\x2d\x2dshell\x22\x20help\x3d\x22Shell\x20type\x20to\x20generate\x20the\x20script\x20for\x22\x20hide\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSHELL\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22bash\x22\x20\x22elvish\x22\x20\x22fish\x22\x20\x22nu\x22\x20\x22xonsh\x22\x20\x22zsh\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dstatus\x22\x20help\x3d\x22Show\x20\x5c\x22mise\x3a\x20\x3cPLUGIN\x3e\x40\x3cVERSION\x3e\x5c\x22\x20message\x20when\x20changing\x20directories\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dshims\x22\x20help\x3d\x22Use\x20shims\x20instead\x20of\x20modifying\x20PATH\x5cnEffectively\x20the\x20same\x20as\x3a\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22Use\x20shims\x20instead\x20of\x20modifying\x20PATH\x5cnEffectively\x20the\x20same\x20as\x3a\x5cn\x5cn\x20\x20\x20\x20PATH\x3d\x5c\x22\x24HOME/\x2elocal/share/mise/shims\x3a\x24PATH\x5c\x22\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dq\x20\x2d\x2dquiet\x22\x20help\x3d\x22Suppress\x20non\x2derror\x20messages\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bSHELL_TYPE\x5d\x22\x20help\x3d\x22Shell\x20type\x20to\x20generate\x20the\x20script\x20for\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22bash\x22\x20\x22elvish\x22\x20\x22fish\x22\x20\x22nu\x22\x20\x22xonsh\x22\x20\x22zsh\x22\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22alias\x22\x20help\x3d\x22Manage\x20aliases\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22a\x22\x0a\x20\x20\x20\x20alias\x20\x22aliases\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20flag\x20\x22\x2dp\x20\x2d\x2dplugin\x22\x20help\x3d\x22filter\x20aliases\x20by\x20plugin\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cPLUGIN\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dno\x2dheader\x22\x20help\x3d\x22Don\x27t\x20show\x20table\x20header\x22\x0a\x20\x20\x20\x20cmd\x20\x22get\x22\x20help\x3d\x22Show\x20an\x20alias\x20for\x20a\x20plugin\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Show\x20an\x20alias\x20for\x20a\x20plugin\x0a\x0aThis\x20is\x20the\x20contents\x20of\x20an\x20alias\x2e\x3cPLUGIN\x3e\x20entry\x20in\x20\x7e/\x2econfig/mise/config\x2etoml\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20alias\x20get\x20node\x20lts\x2dhydrogen\x0a\x20\x20\x20\x2020\x2e0\x2e0\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cPLUGIN\x3e\x22\x20help\x3d\x22The\x20plugin\x20to\x20show\x20the\x20alias\x20for\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cALIAS\x3e\x22\x20help\x3d\x22The\x20alias\x20to\x20show\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22ls\x22\x20help\x3d\x22List\x20aliases\x5cnShows\x20the\x20aliases\x20that\x20can\x20be\x20specified\x2e\x5cnThese\x20can\x20come\x20from\x20user\x20config\x20or\x20from\x20plugins\x20in\x20\x60bin/list\x2daliases\x60\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22list\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x23\x22List\x20aliases\x0aShows\x20the\x20aliases\x20that\x20can\x20be\x20specified\x2e\x0aThese\x20can\x20come\x20from\x20user\x20config\x20or\x20from\x20plugins\x20in\x20\x60bin/list\x2daliases\x60\x2e\x0a\x0aFor\x20user\x20config\x2c\x20aliases\x20are\x20defined\x20like\x20the\x20following\x20in\x20\x60\x7e/\x2econfig/mise/config\x2etoml\x60\x3a\x0a\x0a\x20\x20\x20\x20\x5balias\x2enode\x2eversions\x5d\x0a\x20\x20\x20\x20lts\x20\x3d\x20\x2222\x2e0\x2e0\x22\x22\x23\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20aliases\x0a\x20\x20\x20\x20node\x20\x20lts\x2djod\x20\x20\x20\x20\x20\x2022\x20\x20\x20\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dno\x2dheader\x22\x20help\x3d\x22Don\x27t\x20show\x20table\x20header\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x5d\x22\x20help\x3d\x22Show\x20aliases\x20for\x20\x3cTOOL\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22set\x22\x20help\x3d\x22Add/update\x20an\x20alias\x20for\x20a\x20plugin\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22add\x22\x20\x22create\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Add/update\x20an\x20alias\x20for\x20a\x20plugin\x0a\x0aThis\x20modifies\x20the\x20contents\x20of\x20\x7e/\x2econfig/mise/config\x2etoml\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20alias\x20set\x20node\x20lts\x2djod\x2022\x2e0\x2e0\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cPLUGIN\x3e\x22\x20help\x3d\x22The\x20plugin\x20to\x20set\x20the\x20alias\x20for\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cALIAS\x3e\x22\x20help\x3d\x22The\x20alias\x20to\x20set\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cVALUE\x3e\x22\x20help\x3d\x22The\x20value\x20to\x20set\x20the\x20alias\x20to\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22unset\x22\x20help\x3d\x22Clears\x20an\x20alias\x20for\x20a\x20plugin\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22rm\x22\x20\x22remove\x22\x20\x22delete\x22\x20\x22del\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Clears\x20an\x20alias\x20for\x20a\x20plugin\x0a\x0aThis\x20modifies\x20the\x20contents\x20of\x20\x7e/\x2econfig/mise/config\x2etoml\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20alias\x20unset\x20node\x20lts\x2djod\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cPLUGIN\x3e\x22\x20help\x3d\x22The\x20plugin\x20to\x20remove\x20the\x20alias\x20from\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cALIAS\x3e\x22\x20help\x3d\x22The\x20alias\x20to\x20remove\x22\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22asdf\x22\x20hide\x3dtrue\x20help\x3d\x22\x5binternal\x5d\x20simulates\x20asdf\x20for\x20plugins\x20that\x20call\x20\x5c\x22asdf\x5c\x22\x20internally\x22\x20\x7b\x0a\x20\x20\x20\x20arg\x20\x22\x5bARGS\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22all\x20arguments\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22backends\x22\x20help\x3d\x22Manage\x20backends\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22b\x22\x0a\x20\x20\x20\x20alias\x20\x22backend\x22\x20\x22backend\x2dlist\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20cmd\x20\x22ls\x22\x20help\x3d\x22List\x20built\x2din\x20backends\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22list\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20backends\x20ls\x0a\x20\x20\x20\x20cargo\x0a\x20\x20\x20\x20go\x0a\x20\x20\x20\x20npm\x0a\x20\x20\x20\x20pipx\x0a\x20\x20\x20\x20spm\x0a\x20\x20\x20\x20ubi\x0a\x22\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22bin\x2dpaths\x22\x20help\x3d\x22List\x20all\x20the\x20active\x20runtime\x20bin\x20paths\x22\x0acmd\x20\x22cache\x22\x20help\x3d\x22Manage\x20the\x20mise\x20cache\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Manage\x20the\x20mise\x20cache\x0a\x0aRun\x20\x60mise\x20cache\x60\x20with\x20no\x20args\x20to\x20view\x20the\x20current\x20cache\x20directory\x2e\x22\x0a\x20\x20\x20\x20cmd\x20\x22clear\x22\x20help\x3d\x22Deletes\x20all\x20cache\x20files\x20in\x20mise\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22c\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22clean\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2doutdate\x22\x20help\x3d\x22Mark\x20all\x20cache\x20files\x20as\x20old\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bPLUGIN\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Plugin\x28s\x29\x20to\x20clear\x20cache\x20for\x20e\x2eg\x2e\x3a\x20node\x2c\x20python\x22\x20var\x3dtrue\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22prune\x22\x20help\x3d\x22Removes\x20stale\x20mise\x20cache\x20files\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22p\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Removes\x20stale\x20mise\x20cache\x20files\x0a\x0aBy\x20default\x2c\x20this\x20command\x20will\x20remove\x20files\x20that\x20have\x20not\x20been\x20accessed\x20in\x2030\x20days\x2e\x0aChange\x20this\x20with\x20the\x20MISE_CACHE_PRUNE_AGE\x20environment\x20variable\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2ddry\x2drun\x22\x20help\x3d\x22Just\x20show\x20what\x20would\x20be\x20pruned\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dv\x20\x2d\x2dverbose\x22\x20help\x3d\x22Show\x20pruned\x20files\x22\x20var\x3dtrue\x20count\x3dtrue\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bPLUGIN\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Plugin\x28s\x29\x20to\x20clear\x20cache\x20for\x20e\x2eg\x2e\x3a\x20node\x2c\x20python\x22\x20var\x3dtrue\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22completion\x22\x20help\x3d\x22Generate\x20shell\x20completions\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22complete\x22\x20\x22completions\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20completion\x20bash\x20\x3e\x20/etc/bash_completion\x2ed/mise\x0a\x20\x20\x20\x20\x24\x20mise\x20completion\x20zsh\x20\x20\x3e\x20/usr/local/share/zsh/site\x2dfunctions/_mise\x0a\x20\x20\x20\x20\x24\x20mise\x20completion\x20fish\x20\x3e\x20\x7e/\x2econfig/fish/completions/mise\x2efish\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2ds\x20\x2d\x2dshell\x22\x20help\x3d\x22Shell\x20type\x20to\x20generate\x20completions\x20for\x22\x20hide\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSHELL_TYPE\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22bash\x22\x20\x22fish\x22\x20\x22zsh\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dusage\x22\x20help\x3d\x22Always\x20use\x20usage\x20for\x20completions\x2e\x5cnCurrently\x2c\x20usage\x20is\x20the\x20default\x20for\x20fish\x20and\x20bash\x20but\x20not\x20zsh\x20since\x20it\x20has\x20a\x20few\x20quirks\x5cnto\x20work\x20out\x20first\x2e\x22\x20hide\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22Always\x20use\x20usage\x20for\x20completions\x2e\x5cnCurrently\x2c\x20usage\x20is\x20the\x20default\x20for\x20fish\x20and\x20bash\x20but\x20not\x20zsh\x20since\x20it\x20has\x20a\x20few\x20quirks\x5cnto\x20work\x20out\x20first\x2e\x5cn\x5cnThis\x20requires\x20the\x20\x60usage\x60\x20CLI\x20to\x20be\x20installed\x2e\x5cnhttps\x3a//usage\x2ejdx\x2edev\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20arg\x20\x22\x5bSHELL\x5d\x22\x20help\x3d\x22Shell\x20type\x20to\x20generate\x20completions\x20for\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22bash\x22\x20\x22fish\x22\x20\x22zsh\x22\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22config\x22\x20help\x3d\x22Manage\x20config\x20files\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22cfg\x22\x0a\x20\x20\x20\x20alias\x20\x22toml\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dno\x2dheader\x22\x20help\x3d\x22Do\x20not\x20print\x20table\x20header\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dJ\x20\x2d\x2djson\x22\x20help\x3d\x22Output\x20in\x20JSON\x20format\x22\x0a\x20\x20\x20\x20cmd\x20\x22generate\x22\x20help\x3d\x22\x5bexperimental\x5d\x20Generate\x20a\x20mise\x2etoml\x20file\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22g\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20cf\x20generate\x20\x3e\x20mise\x2etoml\x0a\x20\x20\x20\x20\x24\x20mise\x20cf\x20generate\x20\x2d\x2doutput\x3dmise\x2etoml\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2do\x20\x2d\x2doutput\x22\x20help\x3d\x22Output\x20to\x20file\x20instead\x20of\x20stdout\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cOUTPUT\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22get\x22\x20help\x3d\x22Display\x20the\x20value\x20of\x20a\x20setting\x20in\x20a\x20mise\x2etoml\x20file\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20toml\x20get\x20tools\x2epython\x0a\x20\x20\x20\x203\x2e12\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dfile\x22\x20help\x3d\x22The\x20path\x20to\x20the\x20mise\x2etoml\x20file\x20to\x20edit\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22The\x20path\x20to\x20the\x20mise\x2etoml\x20file\x20to\x20edit\x5cn\x5cnIf\x20not\x20provided\x2c\x20the\x20nearest\x20mise\x2etoml\x20file\x20will\x20be\x20used\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cFILE\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bKEY\x5d\x22\x20help\x3d\x22The\x20path\x20of\x20the\x20config\x20to\x20display\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22ls\x22\x20help\x3d\x22List\x20config\x20files\x20currently\x20in\x20use\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20config\x20ls\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dno\x2dheader\x22\x20help\x3d\x22Do\x20not\x20print\x20table\x20header\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dJ\x20\x2d\x2djson\x22\x20help\x3d\x22Output\x20in\x20JSON\x20format\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22set\x22\x20help\x3d\x22Set\x20the\x20value\x20of\x20a\x20setting\x20in\x20a\x20mise\x2etoml\x20file\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20config\x20set\x20tools\x2epython\x203\x2e12\x0a\x20\x20\x20\x20\x24\x20mise\x20config\x20set\x20settings\x2ealways_keep_download\x20true\x0a\x20\x20\x20\x20\x24\x20mise\x20config\x20set\x20env\x2eTEST_ENV_VAR\x20ABC\x0a\x20\x20\x20\x20\x24\x20mise\x20config\x20set\x20settings\x2edisable_tools\x20\x2d\x2dtype\x20list\x20node\x2crust\x0a\x0a\x20\x20\x20\x20\x23\x20Type\x20for\x20\x60settings\x60\x20is\x20inferred\x0a\x20\x20\x20\x20\x24\x20mise\x20config\x20set\x20settings\x2ejobs\x204\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dfile\x22\x20help\x3d\x22The\x20path\x20to\x20the\x20mise\x2etoml\x20file\x20to\x20edit\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22The\x20path\x20to\x20the\x20mise\x2etoml\x20file\x20to\x20edit\x5cn\x5cnIf\x20not\x20provided\x2c\x20the\x20nearest\x20mise\x2etoml\x20file\x20will\x20be\x20used\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cFILE\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dt\x20\x2d\x2dtype\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cTYPE\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22infer\x22\x20\x22string\x22\x20\x22integer\x22\x20\x22float\x22\x20\x22bool\x22\x20\x22list\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cKEY\x3e\x22\x20help\x3d\x22The\x20path\x20of\x20the\x20config\x20to\x20display\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cVALUE\x3e\x22\x20help\x3d\x22The\x20value\x20to\x20set\x20the\x20key\x20to\x22\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22current\x22\x20hide\x3dtrue\x20help\x3d\x22Shows\x20current\x20active\x20and\x20installed\x20runtime\x20versions\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Shows\x20current\x20active\x20and\x20installed\x20runtime\x20versions\x0a\x0aThis\x20is\x20similar\x20to\x20\x60mise\x20ls\x20\x2d\x2dcurrent\x60\x2c\x20but\x20this\x20only\x20shows\x20the\x20runtime\x0aand/or\x20version\x2e\x20It\x27s\x20designed\x20to\x20fit\x20into\x20scripts\x20more\x20easily\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x23\x20outputs\x20\x60\x2etool\x2dversions\x60\x20compatible\x20format\x0a\x20\x20\x20\x20\x24\x20mise\x20current\x0a\x20\x20\x20\x20python\x203\x2e11\x2e0\x203\x2e10\x2e0\x0a\x20\x20\x20\x20shfmt\x203\x2e6\x2e0\x0a\x20\x20\x20\x20shellcheck\x200\x2e9\x2e0\x0a\x20\x20\x20\x20node\x2020\x2e0\x2e0\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20current\x20node\x0a\x20\x20\x20\x2020\x2e0\x2e0\x0a\x0a\x20\x20\x20\x20\x23\x20can\x20output\x20multiple\x20versions\x0a\x20\x20\x20\x20\x24\x20mise\x20current\x20python\x0a\x20\x20\x20\x203\x2e11\x2e0\x203\x2e10\x2e0\x0a\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bPLUGIN\x5d\x22\x20help\x3d\x22Plugin\x20to\x20show\x20versions\x20of\x20e\x2eg\x2e\x3a\x20ruby\x2c\x20node\x2c\x20cargo\x3aeza\x2c\x20npm\x3aprettier\x2c\x20etc\x22\x0a\x7d\x0acmd\x20\x22deactivate\x22\x20help\x3d\x22Disable\x20mise\x20for\x20current\x20shell\x20session\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Disable\x20mise\x20for\x20current\x20shell\x20session\x0a\x0aThis\x20can\x20be\x20used\x20to\x20temporarily\x20disable\x20mise\x20in\x20a\x20shell\x20session\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20deactivate\x0a\x22\x0a\x7d\x0acmd\x20\x22direnv\x22\x20help\x3d\x22Output\x20direnv\x20function\x20to\x20use\x20mise\x20inside\x20direnv\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Output\x20direnv\x20function\x20to\x20use\x20mise\x20inside\x20direnv\x0a\x0aSee\x20https\x3a//mise\x2ejdx\x2edev/direnv\x2ehtml\x20for\x20more\x20information\x0a\x0aBecause\x20this\x20generates\x20the\x20legacy\x20files\x20based\x20on\x20currently\x20installed\x20plugins\x2c\x0ayou\x20should\x20run\x20this\x20command\x20after\x20installing\x20new\x20plugins\x2e\x20Otherwise\x0adirenv\x20may\x20not\x20know\x20to\x20update\x20environment\x20variables\x20when\x20legacy\x20file\x20versions\x20change\x2e\x22\x0a\x20\x20\x20\x20cmd\x20\x22envrc\x22\x20hide\x3dtrue\x20help\x3d\x22\x5binternal\x5d\x20This\x20is\x20an\x20internal\x20command\x20that\x20writes\x20an\x20envrc\x20file\x5cnfor\x20direnv\x20to\x20consume\x2e\x22\x0a\x20\x20\x20\x20cmd\x20\x22exec\x22\x20hide\x3dtrue\x20help\x3d\x22\x5binternal\x5d\x20This\x20is\x20an\x20internal\x20command\x20that\x20writes\x20an\x20envrc\x20file\x5cnfor\x20direnv\x20to\x20consume\x2e\x22\x0a\x20\x20\x20\x20cmd\x20\x22activate\x22\x20help\x3d\x22Output\x20direnv\x20function\x20to\x20use\x20mise\x20inside\x20direnv\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Output\x20direnv\x20function\x20to\x20use\x20mise\x20inside\x20direnv\x0a\x0aSee\x20https\x3a//mise\x2ejdx\x2edev/direnv\x2ehtml\x20for\x20more\x20information\x0a\x0aBecause\x20this\x20generates\x20the\x20legacy\x20files\x20based\x20on\x20currently\x20installed\x20plugins\x2c\x0ayou\x20should\x20run\x20this\x20command\x20after\x20installing\x20new\x20plugins\x2e\x20Otherwise\x0adirenv\x20may\x20not\x20know\x20to\x20update\x20environment\x20variables\x20when\x20legacy\x20file\x20versions\x20change\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20direnv\x20activate\x20\x3e\x20\x7e/\x2econfig/direnv/lib/use_mise\x2esh\x0a\x20\x20\x20\x20\x24\x20echo\x20\x27use\x20mise\x27\x20\x3e\x20\x2eenvrc\x0a\x20\x20\x20\x20\x24\x20direnv\x20allow\x0a\x22\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22doctor\x22\x20help\x3d\x22Check\x20mise\x20installation\x20for\x20possible\x20problems\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22dr\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20doctor\x0a\x20\x20\x20\x20\x5bWARN\x5d\x20plugin\x20node\x20is\x20not\x20installed\x0a\x22\x0a\x7d\x0acmd\x20\x22env\x22\x20help\x3d\x22Exports\x20env\x20vars\x20to\x20activate\x20mise\x20a\x20single\x20time\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22e\x22\x0a\x20\x20\x20\x20long_help\x20r\x22Exports\x20env\x20vars\x20to\x20activate\x20mise\x20a\x20single\x20time\x0a\x0aUse\x20this\x20if\x20you\x20don\x27t\x20want\x20to\x20permanently\x20install\x20mise\x2e\x20It\x27s\x20not\x20necessary\x20to\x0ause\x20this\x20if\x20you\x20have\x20\x60mise\x20activate\x60\x20in\x20your\x20shell\x20rc\x20file\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20eval\x20\x22\x24\x28mise\x20env\x20\x2ds\x20bash\x29\x22\x0a\x20\x20\x20\x20\x24\x20eval\x20\x22\x24\x28mise\x20env\x20\x2ds\x20zsh\x29\x22\x0a\x20\x20\x20\x20\x24\x20mise\x20env\x20\x2ds\x20fish\x20\x7c\x20source\x0a\x20\x20\x20\x20\x24\x20execx\x28\x24\x28mise\x20env\x20\x2ds\x20xonsh\x29\x29\x0a\x22\x23\x0a\x20\x20\x20\x20flag\x20\x22\x2dJ\x20\x2d\x2djson\x22\x20help\x3d\x22Output\x20in\x20JSON\x20format\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2ds\x20\x2d\x2dshell\x22\x20help\x3d\x22Shell\x20type\x20to\x20generate\x20environment\x20variables\x20for\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSHELL\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22bash\x22\x20\x22elvish\x22\x20\x22fish\x22\x20\x22nu\x22\x20\x22xonsh\x22\x20\x22zsh\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x40VERSION\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20use\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22exec\x22\x20help\x3d\x22Execute\x20a\x20command\x20with\x20tool\x28s\x29\x20set\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22x\x22\x0a\x20\x20\x20\x20long_help\x20r\x23\x22Execute\x20a\x20command\x20with\x20tool\x28s\x29\x20set\x0a\x0ause\x20this\x20to\x20avoid\x20modifying\x20the\x20shell\x20session\x20or\x20running\x20ad\x2dhoc\x20commands\x20with\x20mise\x20tools\x20set\x2e\x0a\x0aTools\x20will\x20be\x20loaded\x20from\x20mise\x2etoml\x2c\x20though\x20they\x20can\x20be\x20overridden\x20with\x20\x3cRUNTIME\x3e\x20args\x0aNote\x20that\x20only\x20the\x20plugin\x20specified\x20will\x20be\x20overridden\x2c\x20so\x20if\x20a\x20\x60mise\x2etoml\x60\x20file\x0aincludes\x20\x22node\x2020\x22\x20but\x20you\x20run\x20\x60mise\x20exec\x20python\x403\x2e11\x60\x3b\x20it\x20will\x20still\x20load\x20node\x4020\x2e\x0a\x0aThe\x20\x22\x2d\x2d\x22\x20separates\x20runtimes\x20from\x20the\x20commands\x20to\x20pass\x20along\x20to\x20the\x20subprocess\x2e\x22\x23\x0a\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20exec\x20node\x4020\x20\x2d\x2d\x20node\x20\x2e/app\x2ejs\x20\x20\x23\x20launch\x20app\x2ejs\x20using\x20node\x2d20\x2ex\x0a\x20\x20\x20\x20\x24\x20mise\x20x\x20node\x4020\x20\x2d\x2d\x20node\x20\x2e/app\x2ejs\x20\x20\x20\x20\x20\x23\x20shorter\x20alias\x0a\x0a\x20\x20\x20\x20\x23\x20Specify\x20command\x20as\x20a\x20string\x3a\x0a\x20\x20\x20\x20\x24\x20mise\x20exec\x20node\x4020\x20python\x403\x2e11\x20\x2d\x2dcommand\x20\x22node\x20\x2dv\x20\x26\x26\x20python\x20\x2dV\x22\x0a\x0a\x20\x20\x20\x20\x23\x20Run\x20a\x20command\x20in\x20a\x20different\x20directory\x3a\x0a\x20\x20\x20\x20\x24\x20mise\x20x\x20\x2dC\x20/path/to/project\x20node\x4020\x20\x2d\x2d\x20node\x20\x2e/app\x2ejs\x0a\x22\x23\x0a\x20\x20\x20\x20flag\x20\x22\x2dc\x20\x2d\x2dcommand\x22\x20help\x3d\x22Command\x20string\x20to\x20execute\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cC\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dj\x20\x2d\x2djobs\x22\x20help\x3d\x22Number\x20of\x20jobs\x20to\x20run\x20in\x20parallel\x5cn\x5bdefault\x3a\x204\x5d\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cJOBS\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2draw\x22\x20help\x3d\x22Directly\x20pipe\x20stdin/stdout/stderr\x20from\x20plugin\x20to\x20user\x20Sets\x20\x2d\x2djobs\x3d1\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x40VERSION\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20start\x20e\x2eg\x2e\x3a\x20node\x4020\x20python\x403\x2e10\x22\x20var\x3dtrue\x0a\x20\x20\x20\x20arg\x20\x22\x5bCOMMAND\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Command\x20string\x20to\x20execute\x20\x28same\x20as\x20\x2d\x2dcommand\x29\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22generate\x22\x20subcommand_required\x3dtrue\x20help\x3d\x22\x5bexperimental\x5d\x20Generate\x20files\x20for\x20various\x20tools/services\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22gen\x22\x0a\x20\x20\x20\x20alias\x20\x22g\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20cmd\x20\x22git\x2dpre\x2dcommit\x22\x20help\x3d\x22\x5bexperimental\x5d\x20Generate\x20a\x20git\x20pre\x2dcommit\x20hook\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22pre\x2dcommit\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22\x5bexperimental\x5d\x20Generate\x20a\x20git\x20pre\x2dcommit\x20hook\x0a\x0aThis\x20command\x20generates\x20a\x20git\x20pre\x2dcommit\x20hook\x20that\x20runs\x20a\x20mise\x20task\x20like\x20\x60mise\x20run\x20pre\x2dcommit\x60\x0awhen\x20you\x20commit\x20changes\x20to\x20your\x20repository\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20generate\x20git\x2dpre\x2dcommit\x20\x2d\x2dwrite\x20\x2d\x2dtask\x3dpre\x2dcommit\x0a\x20\x20\x20\x20\x24\x20git\x20commit\x20\x2dm\x20\x22feat\x3a\x20add\x20new\x20feature\x22\x20\x23\x20runs\x20\x60mise\x20run\x20pre\x2dcommit\x60\x0a\x22\x23\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dhook\x22\x20help\x3d\x22Which\x20hook\x20to\x20generate\x20\x28saves\x20to\x20\x2egit/hooks/\x24hook\x29\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cHOOK\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dt\x20\x2d\x2dtask\x22\x20help\x3d\x22The\x20task\x20to\x20run\x20when\x20the\x20pre\x2dcommit\x20hook\x20is\x20triggered\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cTASK\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dw\x20\x2d\x2dwrite\x22\x20help\x3d\x22write\x20to\x20\x2egit/hooks/pre\x2dcommit\x20and\x20make\x20it\x20executable\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22github\x2daction\x22\x20help\x3d\x22\x5bexperimental\x5d\x20Generate\x20a\x20GitHub\x20Action\x20workflow\x20file\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22\x5bexperimental\x5d\x20Generate\x20a\x20GitHub\x20Action\x20workflow\x20file\x0a\x0aThis\x20command\x20generates\x20a\x20GitHub\x20Action\x20workflow\x20file\x20that\x20runs\x20a\x20mise\x20task\x20like\x20\x60mise\x20run\x20ci\x60\x0awhen\x20you\x20push\x20changes\x20to\x20your\x20repository\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20generate\x20github\x2daction\x20\x2d\x2dwrite\x20\x2d\x2dtask\x3dci\x0a\x20\x20\x20\x20\x24\x20git\x20commit\x20\x2dm\x20\x22feat\x3a\x20add\x20new\x20feature\x22\x0a\x20\x20\x20\x20\x24\x20git\x20push\x20\x23\x20runs\x20\x60mise\x20run\x20ci\x60\x20on\x20GitHub\x0a\x22\x23\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dn\x20\x2d\x2dname\x22\x20help\x3d\x22the\x20name\x20of\x20the\x20workflow\x20to\x20generate\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cNAME\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dt\x20\x2d\x2dtask\x22\x20help\x3d\x22The\x20task\x20to\x20run\x20when\x20the\x20workflow\x20is\x20triggered\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cTASK\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dw\x20\x2d\x2dwrite\x22\x20help\x3d\x22write\x20to\x20\x2egithub/workflows/\x24name\x2eyml\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22task\x2ddocs\x22\x20help\x3d\x22Generate\x20documentation\x20for\x20tasks\x20in\x20a\x20project\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20generate\x20task\x2ddocs\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dI\x20\x2d\x2dindex\x22\x20help\x3d\x22write\x20only\x20an\x20index\x20of\x20tasks\x2c\x20intended\x20for\x20use\x20with\x20\x60\x2d\x2dmulti\x60\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2di\x20\x2d\x2dinject\x22\x20help\x3d\x22inserts\x20the\x20documentation\x20into\x20an\x20existing\x20file\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22inserts\x20the\x20documentation\x20into\x20an\x20existing\x20file\x5cn\x5cnThis\x20will\x20look\x20for\x20a\x20special\x20comment\x2c\x20\x3c\x21\x2d\x2d\x20mise\x2dtasks\x20\x2d\x2d\x3e\x2c\x20and\x20replace\x20it\x20with\x20the\x20generated\x20documentation\x2e\x5cnIt\x20will\x20replace\x20everything\x20between\x20the\x20comment\x20and\x20the\x20next\x20comment\x2c\x20\x3c\x21\x2d\x2d\x20/mise\x2dtasks\x20\x2d\x2d\x3e\x20so\x20it\x20can\x20be\x5cnrun\x20multiple\x20times\x20on\x20the\x20same\x20file\x20to\x20update\x20the\x20documentation\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dm\x20\x2d\x2dmulti\x22\x20help\x3d\x22render\x20each\x20task\x20as\x20a\x20separate\x20document\x2c\x20requires\x20\x60\x2d\x2doutput\x60\x20to\x20be\x20a\x20directory\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2do\x20\x2d\x2doutput\x22\x20help\x3d\x22writes\x20the\x20generated\x20docs\x20to\x20a\x20file/directory\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cOUTPUT\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dr\x20\x2d\x2droot\x22\x20help\x3d\x22root\x20directory\x20to\x20search\x20for\x20tasks\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cROOT\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2ds\x20\x2d\x2dstyle\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSTYLE\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22simple\x22\x20\x22detailed\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22global\x22\x20hide\x3dtrue\x20help\x3d\x22Sets/gets\x20the\x20global\x20tool\x20version\x28s\x29\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Sets/gets\x20the\x20global\x20tool\x20version\x28s\x29\x0a\x0aDisplays\x20the\x20contents\x20of\x20global\x20config\x20after\x20writing\x2e\x0aThe\x20file\x20is\x20\x60\x24HOME/\x2econfig/mise/config\x2etoml\x60\x20by\x20default\x2e\x20It\x20can\x20be\x20changed\x20with\x20\x60\x24MISE_GLOBAL_CONFIG_FILE\x60\x2e\x0aIf\x20\x60\x24MISE_GLOBAL_CONFIG_FILE\x60\x20is\x20set\x20to\x20anything\x20that\x20ends\x20in\x20\x60\x2etoml\x60\x2c\x20it\x20will\x20be\x20parsed\x20as\x20\x60mise\x2etoml\x60\x2e\x0aOtherwise\x2c\x20it\x20will\x20be\x20parsed\x20as\x20a\x20\x60\x2etool\x2dversions\x60\x20file\x2e\x0a\x0aUse\x20MISE_ASDF_COMPAT\x3d1\x20to\x20default\x20the\x20global\x20config\x20to\x20\x7e/\x2etool\x2dversions\x0a\x0aUse\x20\x60mise\x20local\x60\x20to\x20set\x20a\x20tool\x20version\x20locally\x20in\x20the\x20current\x20directory\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x20\x20\x20\x20\x23\x20set\x20the\x20current\x20version\x20of\x20node\x20to\x2020\x2ex\x0a\x20\x20\x20\x20\x23\x20will\x20use\x20a\x20fuzzy\x20version\x20\x28e\x2eg\x2e\x3a\x2020\x29\x20in\x20\x2etool\x2dversions\x20file\x0a\x20\x20\x20\x20\x24\x20mise\x20global\x20\x2d\x2dfuzzy\x20node\x4020\x0a\x0a\x20\x20\x20\x20\x23\x20set\x20the\x20current\x20version\x20of\x20node\x20to\x2020\x2ex\x0a\x20\x20\x20\x20\x23\x20will\x20use\x20a\x20precise\x20version\x20\x28e\x2eg\x2e\x3a\x2020\x2e0\x2e0\x29\x20in\x20\x2etool\x2dversions\x20file\x0a\x20\x20\x20\x20\x24\x20mise\x20global\x20\x2d\x2dpin\x20node\x4020\x0a\x0a\x20\x20\x20\x20\x23\x20show\x20the\x20current\x20version\x20of\x20node\x20in\x20\x7e/\x2etool\x2dversions\x0a\x20\x20\x20\x20\x24\x20mise\x20global\x20node\x0a\x20\x20\x20\x2020\x2e0\x2e0\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dpin\x22\x20help\x3d\x22Save\x20exact\x20version\x20to\x20\x60\x7e/\x2etool\x2dversions\x60\x5cne\x2eg\x2e\x3a\x20\x60mise\x20global\x20\x2d\x2dpin\x20node\x4020\x60\x20will\x20save\x20\x60node\x2020\x2e0\x2e0\x60\x20to\x20\x7e/\x2etool\x2dversions\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dfuzzy\x22\x20help\x3d\x22Save\x20fuzzy\x20version\x20to\x20\x60\x7e/\x2etool\x2dversions\x60\x5cne\x2eg\x2e\x3a\x20\x60mise\x20global\x20\x2d\x2dfuzzy\x20node\x4020\x60\x20will\x20save\x20\x60node\x2020\x60\x20to\x20\x7e/\x2etool\x2dversions\x5cnthis\x20is\x20the\x20default\x20behavior\x20unless\x20MISE_ASDF_COMPAT\x3d1\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dremove\x22\x20help\x3d\x22Remove\x20the\x20plugin\x28s\x29\x20from\x20\x7e/\x2etool\x2dversions\x22\x20var\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cPLUGIN\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dpath\x22\x20help\x3d\x22Get\x20the\x20path\x20of\x20the\x20global\x20config\x20file\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x40VERSION\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20add\x20to\x20\x2etool\x2dversions\x5cne\x2eg\x2e\x3a\x20node\x4020\x5cnIf\x20this\x20is\x20a\x20single\x20tool\x20with\x20no\x20version\x2c\x20the\x20current\x20value\x20of\x20the\x20global\x5cn\x2etool\x2dversions\x20will\x20be\x20displayed\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22hook\x2denv\x22\x20hide\x3dtrue\x20help\x3d\x22\x5binternal\x5d\x20called\x20by\x20activate\x20hook\x20to\x20update\x20env\x20vars\x20directory\x20change\x22\x20\x7b\x0a\x20\x20\x20\x20flag\x20\x22\x2ds\x20\x2d\x2dshell\x22\x20help\x3d\x22Shell\x20type\x20to\x20generate\x20script\x20for\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSHELL\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22bash\x22\x20\x22elvish\x22\x20\x22fish\x22\x20\x22nu\x22\x20\x22xonsh\x22\x20\x22zsh\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dstatus\x22\x20help\x3d\x22Show\x20\x5c\x22mise\x3a\x20\x3cPLUGIN\x3e\x40\x3cVERSION\x3e\x5c\x22\x20message\x20when\x20changing\x20directories\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20flag\x20\x22\x2dq\x20\x2d\x2dquiet\x22\x20help\x3d\x22Hide\x20warnings\x20such\x20as\x20when\x20a\x20tool\x20is\x20not\x20installed\x22\x0a\x7d\x0acmd\x20\x22hook\x2dnot\x2dfound\x22\x20hide\x3dtrue\x20help\x3d\x22\x5binternal\x5d\x20called\x20by\x20shell\x20when\x20a\x20command\x20is\x20not\x20found\x22\x20\x7b\x0a\x20\x20\x20\x20flag\x20\x22\x2ds\x20\x2d\x2dshell\x22\x20help\x3d\x22Shell\x20type\x20to\x20generate\x20script\x20for\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSHELL\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22bash\x22\x20\x22elvish\x22\x20\x22fish\x22\x20\x22nu\x22\x20\x22xonsh\x22\x20\x22zsh\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20arg\x20\x22\x3cBIN\x3e\x22\x20help\x3d\x22Attempted\x20bin\x20to\x20run\x22\x0a\x7d\x0acmd\x20\x22implode\x22\x20help\x3d\x22Removes\x20mise\x20CLI\x20and\x20all\x20related\x20data\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Removes\x20mise\x20CLI\x20and\x20all\x20related\x20data\x0a\x0aSkips\x20config\x20directory\x20by\x20default\x2e\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dconfig\x22\x20help\x3d\x22Also\x20remove\x20config\x20directory\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dn\x20\x2d\x2ddry\x2drun\x22\x20help\x3d\x22List\x20directories\x20that\x20would\x20be\x20removed\x20without\x20actually\x20removing\x20them\x22\x0a\x7d\x0acmd\x20\x22install\x22\x20help\x3d\x22Install\x20a\x20tool\x20version\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22i\x22\x0a\x20\x20\x20\x20long_help\x20r\x22Install\x20a\x20tool\x20version\x0a\x0aInstalls\x20a\x20tool\x20version\x20to\x20\x60\x7e/\x2elocal/share/mise/installs/\x3cPLUGIN\x3e/\x3cVERSION\x3e\x60\x0aInstalling\x20alone\x20will\x20not\x20activate\x20the\x20tools\x20so\x20they\x20won\x27t\x20be\x20in\x20PATH\x2e\x0aTo\x20install\x20and/or\x20activate\x20in\x20one\x20command\x2c\x20use\x20\x60mise\x20use\x60\x20which\x20will\x20create\x20a\x20\x60mise\x2etoml\x60\x20file\x0ain\x20the\x20current\x20directory\x20to\x20activate\x20this\x20tool\x20when\x20inside\x20the\x20directory\x2e\x0aAlternatively\x2c\x20run\x20\x60mise\x20exec\x20\x3cTOOL\x3e\x40\x3cVERSION\x3e\x20\x2d\x2d\x20\x3cCOMMAND\x3e\x60\x20to\x20execute\x20a\x20tool\x20without\x20creating\x20config\x20files\x2e\x0a\x0aTools\x20will\x20be\x20installed\x20in\x20parallel\x2e\x20To\x20disable\x2c\x20set\x20\x60\x2d\x2djobs\x3d1\x60\x20or\x20\x60MISE_JOBS\x3d1\x60\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20install\x20node\x4020\x2e0\x2e0\x20\x20\x23\x20install\x20specific\x20node\x20version\x0a\x20\x20\x20\x20\x24\x20mise\x20install\x20node\x4020\x20\x20\x20\x20\x20\x20\x23\x20install\x20fuzzy\x20node\x20version\x0a\x20\x20\x20\x20\x24\x20mise\x20install\x20node\x20\x20\x20\x20\x20\x20\x20\x20\x20\x23\x20install\x20version\x20specified\x20in\x20mise\x2etoml\x0a\x20\x20\x20\x20\x24\x20mise\x20install\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x23\x20installs\x20everything\x20specified\x20in\x20mise\x2etoml\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dforce\x22\x20help\x3d\x22Force\x20reinstall\x20even\x20if\x20already\x20installed\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dj\x20\x2d\x2djobs\x22\x20help\x3d\x22Number\x20of\x20jobs\x20to\x20run\x20in\x20parallel\x5cn\x5bdefault\x3a\x204\x5d\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cJOBS\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2draw\x22\x20help\x3d\x22Directly\x20pipe\x20stdin/stdout/stderr\x20from\x20plugin\x20to\x20user\x20Sets\x20\x2d\x2djobs\x3d1\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dv\x20\x2d\x2dverbose\x22\x20help\x3d\x22Show\x20installation\x20output\x22\x20var\x3dtrue\x20count\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22Show\x20installation\x20output\x5cn\x5cnThis\x20argument\x20will\x20print\x20plugin\x20output\x20such\x20as\x20download\x2c\x20configuration\x2c\x20and\x20compilation\x20output\x2e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x40VERSION\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20install\x20e\x2eg\x2e\x3a\x20node\x4020\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22latest\x22\x20help\x3d\x22Gets\x20the\x20latest\x20available\x20version\x20for\x20a\x20plugin\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Gets\x20the\x20latest\x20available\x20version\x20for\x20a\x20plugin\x0a\x0aSupports\x20prefixes\x20such\x20as\x20\x60node\x4020\x60\x20to\x20get\x20the\x20latest\x20version\x20of\x20node\x2020\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20latest\x20node\x4020\x20\x20\x23\x20get\x20the\x20latest\x20version\x20of\x20node\x2020\x0a\x20\x20\x20\x2020\x2e0\x2e0\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20latest\x20node\x20\x20\x20\x20\x20\x23\x20get\x20the\x20latest\x20stable\x20version\x20of\x20node\x0a\x20\x20\x20\x2020\x2e0\x2e0\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2di\x20\x2d\x2dinstalled\x22\x20help\x3d\x22Show\x20latest\x20installed\x20instead\x20of\x20available\x20version\x22\x0a\x20\x20\x20\x20arg\x20\x22\x3cTOOL\x40VERSION\x3e\x22\x20help\x3d\x22Tool\x20to\x20get\x20the\x20latest\x20version\x20of\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bASDF_VERSION\x5d\x22\x20help\x3d\x22The\x20version\x20prefix\x20to\x20use\x20when\x20querying\x20the\x20latest\x20version\x20same\x20as\x20the\x20first\x20argument\x20after\x20the\x20\x5c\x22\x40\x5c\x22\x20used\x20for\x20asdf\x20compatibility\x22\x20hide\x3dtrue\x0a\x7d\x0acmd\x20\x22link\x22\x20help\x3d\x22Symlinks\x20a\x20tool\x20version\x20into\x20mise\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22ln\x22\x0a\x20\x20\x20\x20long_help\x20r\x22Symlinks\x20a\x20tool\x20version\x20into\x20mise\x0a\x0aUse\x20this\x20for\x20adding\x20installs\x20either\x20custom\x20compiled\x20outside\x20mise\x20or\x20built\x20with\x20a\x20different\x20tool\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x23\x20build\x20node\x2d20\x2e0\x2e0\x20with\x20node\x2dbuild\x20and\x20link\x20it\x20into\x20mise\x0a\x20\x20\x20\x20\x24\x20node\x2dbuild\x2020\x2e0\x2e0\x20\x7e/\x2enodes/20\x2e0\x2e0\x0a\x20\x20\x20\x20\x24\x20mise\x20link\x20node\x4020\x2e0\x2e0\x20\x7e/\x2enodes/20\x2e0\x2e0\x0a\x0a\x20\x20\x20\x20\x23\x20have\x20mise\x20use\x20the\x20python\x20version\x20provided\x20by\x20Homebrew\x0a\x20\x20\x20\x20\x24\x20brew\x20install\x20node\x0a\x20\x20\x20\x20\x24\x20mise\x20link\x20node\x40brew\x20\x24\x28brew\x20\x2d\x2dprefix\x20node\x29\x0a\x20\x20\x20\x20\x24\x20mise\x20use\x20node\x40brew\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dforce\x22\x20help\x3d\x22Overwrite\x20an\x20existing\x20tool\x20version\x20if\x20it\x20exists\x22\x0a\x20\x20\x20\x20arg\x20\x22\x3cTOOL\x40VERSION\x3e\x22\x20help\x3d\x22Tool\x20name\x20and\x20version\x20to\x20create\x20a\x20symlink\x20for\x22\x0a\x20\x20\x20\x20arg\x20\x22\x3cPATH\x3e\x22\x20help\x3d\x22The\x20local\x20path\x20to\x20the\x20tool\x20version\x5cne\x2eg\x2e\x3a\x20\x7e/\x2envm/versions/node/v20\x2e0\x2e0\x22\x0a\x7d\x0acmd\x20\x22local\x22\x20hide\x3dtrue\x20help\x3d\x22Sets/gets\x20tool\x20version\x20in\x20local\x20\x2etool\x2dversions\x20or\x20mise\x2etoml\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22l\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20long_help\x20r\x22Sets/gets\x20tool\x20version\x20in\x20local\x20\x2etool\x2dversions\x20or\x20mise\x2etoml\x0a\x0aUse\x20this\x20to\x20set\x20a\x20tool\x27s\x20version\x20when\x20within\x20a\x20directory\x0aUse\x20\x60mise\x20global\x60\x20to\x20set\x20a\x20tool\x20version\x20globally\x0aThis\x20uses\x20\x60\x2etool\x2dversion\x60\x20by\x20default\x20unless\x20there\x20is\x20a\x20\x60mise\x2etoml\x60\x20file\x20or\x20if\x20\x60MISE_USE_TOML\x60\x0ais\x20set\x2e\x20A\x20future\x20v2\x20release\x20of\x20mise\x20will\x20default\x20to\x20using\x20\x60mise\x2etoml\x60\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x20\x20\x20\x20\x23\x20set\x20the\x20current\x20version\x20of\x20node\x20to\x2020\x2ex\x20for\x20the\x20current\x20directory\x0a\x20\x20\x20\x20\x23\x20will\x20use\x20a\x20precise\x20version\x20\x28e\x2eg\x2e\x3a\x2020\x2e0\x2e0\x29\x20in\x20\x2etool\x2dversions\x20file\x0a\x20\x20\x20\x20\x24\x20mise\x20local\x20node\x4020\x0a\x0a\x20\x20\x20\x20\x23\x20set\x20node\x20to\x2020\x2ex\x20for\x20the\x20current\x20project\x20\x28recurses\x20up\x20to\x20find\x20\x2etool\x2dversions\x29\x0a\x20\x20\x20\x20\x24\x20mise\x20local\x20\x2dp\x20node\x4020\x0a\x0a\x20\x20\x20\x20\x23\x20set\x20the\x20current\x20version\x20of\x20node\x20to\x2020\x2ex\x20for\x20the\x20current\x20directory\x0a\x20\x20\x20\x20\x23\x20will\x20use\x20a\x20fuzzy\x20version\x20\x28e\x2eg\x2e\x3a\x2020\x29\x20in\x20\x2etool\x2dversions\x20file\x0a\x20\x20\x20\x20\x24\x20mise\x20local\x20\x2d\x2dfuzzy\x20node\x4020\x0a\x0a\x20\x20\x20\x20\x23\x20removes\x20node\x20from\x20\x2etool\x2dversions\x0a\x20\x20\x20\x20\x24\x20mise\x20local\x20\x2d\x2dremove\x3dnode\x0a\x0a\x20\x20\x20\x20\x23\x20show\x20the\x20current\x20version\x20of\x20node\x20in\x20\x2etool\x2dversions\x0a\x20\x20\x20\x20\x24\x20mise\x20local\x20node\x0a\x20\x20\x20\x2020\x2e0\x2e0\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dp\x20\x2d\x2dparent\x22\x20help\x3d\x22Recurse\x20up\x20to\x20find\x20a\x20\x2etool\x2dversions\x20file\x20rather\x20than\x20using\x20the\x20current\x20directory\x20only\x5cnby\x20default\x20this\x20command\x20will\x20only\x20set\x20the\x20tool\x20in\x20the\x20current\x20directory\x20\x28\x5c\x22\x24PWD/\x2etool\x2dversions\x5c\x22\x29\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dpin\x22\x20help\x3d\x22Save\x20exact\x20version\x20to\x20\x60\x2etool\x2dversions\x60\x5cne\x2eg\x2e\x3a\x20\x60mise\x20local\x20\x2d\x2dpin\x20node\x4020\x60\x20will\x20save\x20\x60node\x2020\x2e0\x2e0\x60\x20to\x20\x2etool\x2dversions\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dfuzzy\x22\x20help\x3d\x22Save\x20fuzzy\x20version\x20to\x20\x60\x2etool\x2dversions\x60\x20e\x2eg\x2e\x3a\x20\x60mise\x20local\x20\x2d\x2dfuzzy\x20node\x4020\x60\x20will\x20save\x20\x60node\x2020\x60\x20to\x20\x2etool\x2dversions\x20This\x20is\x20the\x20default\x20behavior\x20unless\x20MISE_ASDF_COMPAT\x3d1\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dremove\x22\x20help\x3d\x22Remove\x20the\x20plugin\x28s\x29\x20from\x20\x2etool\x2dversions\x22\x20var\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cPLUGIN\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dpath\x22\x20help\x3d\x22Get\x20the\x20path\x20of\x20the\x20config\x20file\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x40VERSION\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20add\x20to\x20\x2etool\x2dversions/mise\x2etoml\x5cne\x2eg\x2e\x3a\x20node\x4020\x5cnif\x20this\x20is\x20a\x20single\x20tool\x20with\x20no\x20version\x2c\x5cnthe\x20current\x20value\x20of\x20\x2etool\x2dversions/mise\x2etoml\x20will\x20be\x20displayed\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22ls\x22\x20help\x3d\x22List\x20installed\x20and\x20active\x20tool\x20versions\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22list\x22\x0a\x20\x20\x20\x20long_help\x20r\x23\x22List\x20installed\x20and\x20active\x20tool\x20versions\x0a\x0aThis\x20command\x20lists\x20tools\x20that\x20mise\x20\x22knows\x20about\x22\x2e\x0aThese\x20may\x20be\x20tools\x20that\x20are\x20currently\x20installed\x2c\x20or\x20those\x0athat\x20are\x20in\x20a\x20config\x20file\x20\x28active\x29\x20but\x20may\x20or\x20may\x20not\x20be\x20installed\x2e\x0a\x0aIt\x27s\x20a\x20useful\x20command\x20to\x20get\x20the\x20current\x20state\x20of\x20your\x20tools\x2e\x22\x23\x0a\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20ls\x0a\x20\x20\x20\x20node\x20\x20\x20\x2020\x2e0\x2e0\x20\x7e/src/myapp/\x2etool\x2dversions\x20latest\x0a\x20\x20\x20\x20python\x20\x203\x2e11\x2e0\x20\x7e/\x2etool\x2dversions\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x203\x2e10\x0a\x20\x20\x20\x20python\x20\x203\x2e10\x2e0\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20ls\x20\x2d\x2dcurrent\x0a\x20\x20\x20\x20node\x20\x20\x20\x2020\x2e0\x2e0\x20\x7e/src/myapp/\x2etool\x2dversions\x2020\x0a\x20\x20\x20\x20python\x20\x203\x2e11\x2e0\x20\x7e/\x2etool\x2dversions\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x203\x2e11\x2e0\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20ls\x20\x2d\x2djson\x0a\x20\x20\x20\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x22node\x22\x3a\x20\x5b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22version\x22\x3a\x20\x2220\x2e0\x2e0\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22install_path\x22\x3a\x20\x22/Users/jdx/\x2emise/installs/node/20\x2e0\x2e0\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22source\x22\x3a\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22type\x22\x3a\x20\x22mise\x2etoml\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x22path\x22\x3a\x20\x22/Users/jdx/mise\x2etoml\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x5d\x2c\x0a\x20\x20\x20\x20\x20\x20\x22python\x22\x3a\x20\x5b\x2e\x2e\x2e\x5d\x0a\x20\x20\x20\x20\x7d\x0a\x22\x23\x0a\x20\x20\x20\x20flag\x20\x22\x2dp\x20\x2d\x2dplugin\x22\x20hide\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cPLUGIN_FLAG\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dc\x20\x2d\x2dcurrent\x22\x20help\x3d\x22Only\x20show\x20tool\x20versions\x20currently\x20specified\x20in\x20a\x20mise\x2etoml\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dg\x20\x2d\x2dglobal\x22\x20help\x3d\x22Only\x20show\x20tool\x20versions\x20currently\x20specified\x20in\x20the\x20global\x20mise\x2etoml\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2di\x20\x2d\x2dinstalled\x22\x20help\x3d\x22Only\x20show\x20tool\x20versions\x20that\x20are\x20installed\x20\x28Hides\x20tools\x20defined\x20in\x20mise\x2etoml\x20but\x20not\x20installed\x29\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2do\x20\x2d\x2doffline\x22\x20help\x3d\x22Don\x27t\x20fetch\x20information\x20such\x20as\x20outdated\x20versions\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dparseable\x22\x20help\x3d\x22Output\x20in\x20an\x20easily\x20parseable\x20format\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20flag\x20\x22\x2dJ\x20\x2d\x2djson\x22\x20help\x3d\x22Output\x20in\x20JSON\x20format\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dm\x20\x2d\x2dmissing\x22\x20help\x3d\x22Display\x20missing\x20tool\x20versions\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dprefix\x22\x20help\x3d\x22Display\x20versions\x20matching\x20this\x20prefix\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cPREFIX\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dno\x2dheader\x22\x20help\x3d\x22Don\x27t\x20display\x20headers\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bPLUGIN\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Only\x20show\x20tool\x20versions\x20from\x20\x5bPLUGIN\x5d\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22ls\x2dremote\x22\x20help\x3d\x22List\x20runtime\x20versions\x20available\x20for\x20install\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22list\x2dall\x22\x20\x22list\x2dremote\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20long_help\x20r\x22List\x20runtime\x20versions\x20available\x20for\x20install\x2e\x0a\x0aNote\x20that\x20the\x20results\x20may\x20be\x20cached\x2c\x20run\x20\x60mise\x20cache\x20clean\x60\x20to\x20clear\x20the\x20cache\x20and\x20get\x20fresh\x20results\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20ls\x2dremote\x20node\x0a\x20\x20\x20\x2018\x2e0\x2e0\x0a\x20\x20\x20\x2020\x2e0\x2e0\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20ls\x2dremote\x20node\x4020\x0a\x20\x20\x20\x2020\x2e0\x2e0\x0a\x20\x20\x20\x2020\x2e1\x2e0\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20ls\x2dremote\x20node\x2020\x0a\x20\x20\x20\x2020\x2e0\x2e0\x0a\x20\x20\x20\x2020\x2e1\x2e0\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dall\x22\x20help\x3d\x22Show\x20all\x20installed\x20plugins\x20and\x20versions\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x40VERSION\x5d\x22\x20help\x3d\x22Tool\x20to\x20get\x20versions\x20for\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bPREFIX\x5d\x22\x20help\x3d\x22The\x20version\x20prefix\x20to\x20use\x20when\x20querying\x20the\x20latest\x20version\x5cnsame\x20as\x20the\x20first\x20argument\x20after\x20the\x20\x5c\x22\x40\x5c\x22\x22\x0a\x7d\x0acmd\x20\x22outdated\x22\x20help\x3d\x22Shows\x20outdated\x20tool\x20versions\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Shows\x20outdated\x20tool\x20versions\x0a\x0aSee\x20\x60mise\x20upgrade\x60\x20to\x20upgrade\x20these\x20versions\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20outdated\x0a\x20\x20\x20\x20Plugin\x20\x20Requested\x20\x20Current\x20\x20Latest\x0a\x20\x20\x20\x20python\x20\x203\x2e11\x20\x20\x20\x20\x20\x20\x203\x2e11\x2e0\x20\x20\x203\x2e11\x2e1\x0a\x20\x20\x20\x20node\x20\x20\x20\x2020\x20\x20\x20\x20\x20\x20\x20\x20\x2020\x2e0\x2e0\x20\x20\x2020\x2e1\x2e0\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20outdated\x20node\x0a\x20\x20\x20\x20Plugin\x20\x20Requested\x20\x20Current\x20\x20Latest\x0a\x20\x20\x20\x20node\x20\x20\x20\x2020\x20\x20\x20\x20\x20\x20\x20\x20\x2020\x2e0\x2e0\x20\x20\x2020\x2e1\x2e0\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20outdated\x20\x2d\x2djson\x0a\x20\x20\x20\x20\x7b\x22python\x22\x3a\x20\x7b\x22requested\x22\x3a\x20\x223\x2e11\x22\x2c\x20\x22current\x22\x3a\x20\x223\x2e11\x2e0\x22\x2c\x20\x22latest\x22\x3a\x20\x223\x2e11\x2e1\x22\x7d\x2c\x20\x2e\x2e\x2e\x7d\x0a\x22\x23\x0a\x20\x20\x20\x20flag\x20\x22\x2dl\x20\x2d\x2dbump\x22\x20help\x3d\x22Compares\x20against\x20the\x20latest\x20versions\x20available\x2c\x20not\x20what\x20matches\x20the\x20current\x20config\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22Compares\x20against\x20the\x20latest\x20versions\x20available\x2c\x20not\x20what\x20matches\x20the\x20current\x20config\x5cn\x5cnFor\x20example\x2c\x20if\x20you\x20have\x20\x60node\x20\x3d\x20\x5c\x2220\x5c\x22\x60\x20in\x20your\x20config\x20by\x20default\x20\x60mise\x20outdated\x60\x20will\x20only\x5cnshow\x20other\x2020\x2ex\x20versions\x2c\x20not\x2021\x2ex\x20or\x2022\x2ex\x20versions\x2e\x5cn\x5cnUsing\x20this\x20flag\x2c\x20if\x20there\x20are\x2021\x2ex\x20or\x20newer\x20versions\x20it\x20will\x20display\x20those\x20instead\x20of\x2020\x2ex\x2e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dJ\x20\x2d\x2djson\x22\x20help\x3d\x22Output\x20in\x20JSON\x20format\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dno\x2dheader\x22\x20help\x3d\x22Don\x27t\x20show\x20table\x20header\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x40VERSION\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20show\x20outdated\x20versions\x20for\x5cne\x2eg\x2e\x3a\x20node\x4020\x20python\x403\x2e10\x5cnIf\x20not\x20specified\x2c\x20all\x20tools\x20in\x20global\x20and\x20local\x20configs\x20will\x20be\x20shown\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22plugins\x22\x20help\x3d\x22Manage\x20plugins\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22p\x22\x0a\x20\x20\x20\x20alias\x20\x22plugin\x22\x20\x22plugin\x2dlist\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20flag\x20\x22\x2da\x20\x2d\x2dall\x22\x20help\x3d\x22list\x20all\x20available\x20remote\x20plugins\x22\x20hide\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22list\x20all\x20available\x20remote\x20plugins\x5cn\x5cnsame\x20as\x20\x60mise\x20plugins\x20ls\x2dremote\x60\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dc\x20\x2d\x2dcore\x22\x20help\x3d\x22The\x20built\x2din\x20plugins\x20only\x5cnNormally\x20these\x20are\x20not\x20shown\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2duser\x22\x20help\x3d\x22List\x20installed\x20plugins\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22List\x20installed\x20plugins\x5cn\x5cnThis\x20is\x20the\x20default\x20behavior\x20but\x20can\x20be\x20used\x20with\x20\x2d\x2dcore\x5cnto\x20show\x20core\x20and\x20user\x20plugins\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2du\x20\x2d\x2durls\x22\x20help\x3d\x22Show\x20the\x20git\x20url\x20for\x20each\x20plugin\x5cne\x2eg\x2e\x3a\x20https\x3a//github\x2ecom/asdf\x2dvm/asdf\x2dnodejs\x2egit\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2drefs\x22\x20help\x3d\x22Show\x20the\x20git\x20refs\x20for\x20each\x20plugin\x5cne\x2eg\x2e\x3a\x20main\x201234abc\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20cmd\x20\x22install\x22\x20help\x3d\x22Install\x20a\x20plugin\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22i\x22\x20\x22a\x22\x20\x22add\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Install\x20a\x20plugin\x0a\x0anote\x20that\x20mise\x20automatically\x20can\x20install\x20plugins\x20when\x20you\x20install\x20a\x20tool\x0ae\x2eg\x2e\x3a\x20\x60mise\x20install\x20node\x4020\x60\x20will\x20autoinstall\x20the\x20node\x20plugin\x0a\x0aThis\x20behavior\x20can\x20be\x20modified\x20in\x20\x7e/\x2econfig/mise/config\x2etoml\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20install\x20the\x20node\x20via\x20shorthand\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20install\x20node\x0a\x0a\x20\x20\x20\x20\x23\x20install\x20the\x20node\x20plugin\x20using\x20a\x20specific\x20git\x20url\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20install\x20node\x20https\x3a//github\x2ecom/mise\x2dplugins/rtx\x2dnodejs\x2egit\x0a\x0a\x20\x20\x20\x20\x23\x20install\x20the\x20node\x20plugin\x20using\x20the\x20git\x20url\x20only\x0a\x20\x20\x20\x20\x23\x20\x28node\x20is\x20inferred\x20from\x20the\x20url\x29\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20install\x20https\x3a//github\x2ecom/mise\x2dplugins/rtx\x2dnodejs\x2egit\x0a\x0a\x20\x20\x20\x20\x23\x20install\x20the\x20node\x20plugin\x20using\x20a\x20specific\x20ref\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20install\x20node\x20https\x3a//github\x2ecom/mise\x2dplugins/rtx\x2dnodejs\x2egit\x23v1\x2e0\x2e0\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dforce\x22\x20help\x3d\x22Reinstall\x20even\x20if\x20plugin\x20exists\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2da\x20\x2d\x2dall\x22\x20help\x3d\x22Install\x20all\x20missing\x20plugins\x5cnThis\x20will\x20only\x20install\x20plugins\x20that\x20have\x20matching\x20shorthands\x2e\x5cni\x2ee\x2e\x3a\x20they\x20don\x27t\x20need\x20the\x20full\x20git\x20repo\x20url\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dv\x20\x2d\x2dverbose\x22\x20help\x3d\x22Show\x20installation\x20output\x22\x20var\x3dtrue\x20count\x3dtrue\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bNEW_PLUGIN\x5d\x22\x20help\x3d\x22The\x20name\x20of\x20the\x20plugin\x20to\x20install\x5cne\x2eg\x2e\x3a\x20node\x2c\x20ruby\x5cnCan\x20specify\x20multiple\x20plugins\x3a\x20\x60mise\x20plugins\x20install\x20node\x20ruby\x20python\x60\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bGIT_URL\x5d\x22\x20help\x3d\x22The\x20git\x20url\x20of\x20the\x20plugin\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bREST\x5d\x2e\x2e\x2e\x22\x20var\x3dtrue\x20hide\x3dtrue\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22link\x22\x20help\x3d\x22Symlinks\x20a\x20plugin\x20into\x20mise\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22ln\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Symlinks\x20a\x20plugin\x20into\x20mise\x0a\x0aThis\x20is\x20used\x20for\x20developing\x20a\x20plugin\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20essentially\x20just\x20\x60ln\x20\x2ds\x20\x2e/mise\x2dnode\x20\x7e/\x2elocal/share/mise/plugins/node\x60\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20link\x20node\x20\x2e/mise\x2dnode\x0a\x0a\x20\x20\x20\x20\x23\x20infer\x20plugin\x20name\x20as\x20\x22node\x22\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20link\x20\x2e/mise\x2dnode\x0a\x22\x23\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dforce\x22\x20help\x3d\x22Overwrite\x20existing\x20plugin\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cNAME\x3e\x22\x20help\x3d\x22The\x20name\x20of\x20the\x20plugin\x5cne\x2eg\x2e\x3a\x20node\x2c\x20ruby\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bDIR\x5d\x22\x20help\x3d\x22The\x20local\x20path\x20to\x20the\x20plugin\x5cne\x2eg\x2e\x3a\x20\x2e/mise\x2dnode\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22ls\x22\x20help\x3d\x22List\x20installed\x20plugins\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22list\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22List\x20installed\x20plugins\x0a\x0aCan\x20also\x20show\x20remotely\x20available\x20plugins\x20to\x20install\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20ls\x0a\x20\x20\x20\x20node\x0a\x20\x20\x20\x20ruby\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20ls\x20\x2d\x2durls\x0a\x20\x20\x20\x20node\x20\x20\x20\x20https\x3a//github\x2ecom/asdf\x2dvm/asdf\x2dnodejs\x2egit\x0a\x20\x20\x20\x20ruby\x20\x20\x20\x20https\x3a//github\x2ecom/asdf\x2dvm/asdf\x2druby\x2egit\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2da\x20\x2d\x2dall\x22\x20help\x3d\x22List\x20all\x20available\x20remote\x20plugins\x5cnSame\x20as\x20\x60mise\x20plugins\x20ls\x2dremote\x60\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dc\x20\x2d\x2dcore\x22\x20help\x3d\x22The\x20built\x2din\x20plugins\x20only\x5cnNormally\x20these\x20are\x20not\x20shown\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2duser\x22\x20help\x3d\x22List\x20installed\x20plugins\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22List\x20installed\x20plugins\x5cn\x5cnThis\x20is\x20the\x20default\x20behavior\x20but\x20can\x20be\x20used\x20with\x20\x2d\x2dcore\x5cnto\x20show\x20core\x20and\x20user\x20plugins\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2du\x20\x2d\x2durls\x22\x20help\x3d\x22Show\x20the\x20git\x20url\x20for\x20each\x20plugin\x5cne\x2eg\x2e\x3a\x20https\x3a//github\x2ecom/asdf\x2dvm/asdf\x2dnodejs\x2egit\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2drefs\x22\x20help\x3d\x22Show\x20the\x20git\x20refs\x20for\x20each\x20plugin\x5cne\x2eg\x2e\x3a\x20main\x201234abc\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22ls\x2dremote\x22\x20help\x3d\x22List\x20all\x20available\x20remote\x20plugins\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22list\x2dremote\x22\x20\x22list\x2dall\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22\x0aList\x20all\x20available\x20remote\x20plugins\x0a\x0aThe\x20full\x20list\x20is\x20here\x3a\x20https\x3a//github\x2ecom/jdx/mise/blob/main/registry\x2etoml\x0a\x0aExamples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20ls\x2dremote\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2du\x20\x2d\x2durls\x22\x20help\x3d\x22Show\x20the\x20git\x20url\x20for\x20each\x20plugin\x20e\x2eg\x2e\x3a\x20https\x3a//github\x2ecom/mise\x2dplugins/mise\x2dpoetry\x2egit\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2donly\x2dnames\x22\x20help\x3d\x22Only\x20show\x20the\x20name\x20of\x20each\x20plugin\x20by\x20default\x20it\x20will\x20show\x20a\x20\x5c\x22\x2a\x5c\x22\x20next\x20to\x20installed\x20plugins\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22uninstall\x22\x20help\x3d\x22Removes\x20a\x20plugin\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22remove\x22\x20\x22rm\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20uninstall\x20node\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dp\x20\x2d\x2dpurge\x22\x20help\x3d\x22Also\x20remove\x20the\x20plugin\x27s\x20installs\x2c\x20downloads\x2c\x20and\x20cache\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2da\x20\x2d\x2dall\x22\x20help\x3d\x22Remove\x20all\x20plugins\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bPLUGIN\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Plugin\x28s\x29\x20to\x20remove\x22\x20var\x3dtrue\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22update\x22\x20help\x3d\x22Updates\x20a\x20plugin\x20to\x20the\x20latest\x20version\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22up\x22\x20\x22upgrade\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Updates\x20a\x20plugin\x20to\x20the\x20latest\x20version\x0a\x0anote\x3a\x20this\x20updates\x20the\x20plugin\x20itself\x2c\x20not\x20the\x20runtime\x20versions\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20update\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x23\x20update\x20all\x20plugins\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20update\x20node\x20\x20\x20\x20\x20\x20\x20\x23\x20update\x20only\x20node\x0a\x20\x20\x20\x20\x24\x20mise\x20plugins\x20update\x20node\x23beta\x20\x20\x23\x20specify\x20a\x20ref\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dj\x20\x2d\x2djobs\x22\x20help\x3d\x22Number\x20of\x20jobs\x20to\x20run\x20in\x20parallel\x5cnDefault\x3a\x204\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cJOBS\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bPLUGIN\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Plugin\x28s\x29\x20to\x20update\x22\x20var\x3dtrue\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22prune\x22\x20help\x3d\x22Delete\x20unused\x20versions\x20of\x20tools\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Delete\x20unused\x20versions\x20of\x20tools\x0a\x0amise\x20tracks\x20which\x20config\x20files\x20have\x20been\x20used\x20in\x20\x7e/\x2elocal/state/mise/tracked\x2dconfigs\x0aVersions\x20which\x20are\x20no\x20longer\x20the\x20latest\x20specified\x20in\x20any\x20of\x20those\x20configs\x20are\x20deleted\x2e\x0aVersions\x20installed\x20only\x20with\x20environment\x20variables\x20\x60MISE_\x3cPLUGIN\x3e_VERSION\x60\x20will\x20be\x20deleted\x2c\x0aas\x20will\x20versions\x20only\x20referenced\x20on\x20the\x20command\x20line\x20\x60mise\x20exec\x20\x3cPLUGIN\x3e\x40\x3cVERSION\x3e\x60\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20prune\x20\x2d\x2ddry\x2drun\x0a\x20\x20\x20\x20rm\x20\x2drf\x20\x7e/\x2elocal/share/mise/versions/node/20\x2e0\x2e0\x0a\x20\x20\x20\x20rm\x20\x2drf\x20\x7e/\x2elocal/share/mise/versions/node/20\x2e0\x2e1\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dn\x20\x2d\x2ddry\x2drun\x22\x20help\x3d\x22Do\x20not\x20actually\x20delete\x20anything\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dconfigs\x22\x20help\x3d\x22Prune\x20only\x20tracked\x20and\x20trusted\x20configuration\x20links\x20that\x20point\x20to\x20non\x2dexistent\x20configurations\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dtools\x22\x20help\x3d\x22Prune\x20only\x20unused\x20versions\x20of\x20tools\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bPLUGIN\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Prune\x20only\x20versions\x20from\x20this\x20plugin\x28s\x29\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22registry\x22\x20help\x3d\x22List\x20available\x20tools\x20to\x20install\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22List\x20available\x20tools\x20to\x20install\x0a\x0aThis\x20command\x20lists\x20the\x20tools\x20available\x20in\x20the\x20registry\x20as\x20shorthand\x20names\x2e\x0a\x0aFor\x20example\x2c\x20\x60poetry\x60\x20is\x20shorthand\x20for\x20\x60asdf\x3amise\x2dplugins/mise\x2dpoetry\x60\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20registry\x0a\x20\x20\x20\x20node\x20\x20\x20\x20core\x3anode\x0a\x20\x20\x20\x20poetry\x20\x20asdf\x3amise\x2dplugins/mise\x2dpoetry\x0a\x20\x20\x20\x20ubi\x20\x20\x20\x20\x20cargo\x3aubi\x2dcli\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20registry\x20poetry\x0a\x20\x20\x20\x20asdf\x3amise\x2dplugins/mise\x2dpoetry\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2db\x20\x2d\x2dbackend\x22\x20help\x3d\x22Show\x20only\x20tools\x20for\x20this\x20backend\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cBACKEND\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20arg\x20\x22\x5bNAME\x5d\x22\x20help\x3d\x22Show\x20only\x20the\x20specified\x20tool\x27s\x20full\x20name\x22\x0a\x7d\x0acmd\x20\x22reshim\x22\x20help\x3d\x22Creates\x20new\x20shims\x20based\x20on\x20bin\x20paths\x20from\x20currently\x20installed\x20tools\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x23\x22Creates\x20new\x20shims\x20based\x20on\x20bin\x20paths\x20from\x20currently\x20installed\x20tools\x2e\x0a\x0aThis\x20creates\x20new\x20shims\x20in\x20\x7e/\x2elocal/share/mise/shims\x20for\x20CLIs\x20that\x20have\x20been\x20added\x2e\x0amise\x20will\x20try\x20to\x20do\x20this\x20automatically\x20for\x20commands\x20like\x20\x60npm\x20i\x20\x2dg\x60\x20but\x20there\x20are\x0aother\x20ways\x20to\x20install\x20things\x20\x28like\x20using\x20yarn\x20or\x20pnpm\x20for\x20node\x29\x20that\x20mise\x20does\x0anot\x20know\x20about\x20and\x20so\x20it\x20will\x20be\x20necessary\x20to\x20call\x20this\x20explicitly\x2e\x0a\x0aIf\x20you\x20think\x20mise\x20should\x20automatically\x20call\x20this\x20for\x20a\x20particular\x20command\x2c\x20please\x0aopen\x20an\x20issue\x20on\x20the\x20mise\x20repo\x2e\x20You\x20can\x20also\x20setup\x20a\x20shell\x20function\x20to\x20reshim\x0aautomatically\x20\x28it\x27s\x20really\x20fast\x20so\x20you\x20don\x27t\x20need\x20to\x20worry\x20about\x20overhead\x29\x3a\x0a\x0a\x20\x20\x20\x20npm\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20command\x20npm\x20\x22\x24\x40\x22\x0a\x20\x20\x20\x20\x20\x20mise\x20reshim\x0a\x20\x20\x20\x20\x7d\x0a\x0aNote\x20that\x20this\x20creates\x20shims\x20for\x20_all_\x20installed\x20tools\x2c\x20not\x20just\x20the\x20ones\x20that\x20are\x0acurrently\x20active\x20in\x20mise\x2etoml\x2e\x22\x23\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20reshim\x0a\x20\x20\x20\x20\x24\x20\x7e/\x2elocal/share/mise/shims/node\x20\x2dv\x0a\x20\x20\x20\x20v20\x2e0\x2e0\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dforce\x22\x20help\x3d\x22Removes\x20all\x20shims\x20before\x20reshimming\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bPLUGIN\x5d\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20arg\x20\x22\x5bVERSION\x5d\x22\x20hide\x3dtrue\x0a\x7d\x0acmd\x20\x22run\x22\x20help\x3d\x22Run\x20task\x28s\x29\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22r\x22\x0a\x20\x20\x20\x20long_help\x20r\x23\x22Run\x20task\x28s\x29\x0a\x0aThis\x20command\x20will\x20run\x20a\x20tasks\x2c\x20or\x20multiple\x20tasks\x20in\x20parallel\x2e\x0aTasks\x20may\x20have\x20dependencies\x20on\x20other\x20tasks\x20or\x20on\x20source\x20files\x2e\x0aIf\x20source\x20is\x20configured\x20on\x20a\x20tasks\x2c\x20it\x20will\x20only\x20run\x20if\x20the\x20source\x0afiles\x20have\x20changed\x2e\x0a\x0aTasks\x20can\x20be\x20defined\x20in\x20mise\x2etoml\x20or\x20as\x20standalone\x20scripts\x2e\x0aIn\x20mise\x2etoml\x2c\x20tasks\x20take\x20this\x20form\x3a\x0a\x0a\x20\x20\x20\x20\x5btasks\x2ebuild\x5d\x0a\x20\x20\x20\x20run\x20\x3d\x20\x22npm\x20run\x20build\x22\x0a\x20\x20\x20\x20sources\x20\x3d\x20\x5b\x22src/\x2a\x2a/\x2a\x2ets\x22\x5d\x0a\x20\x20\x20\x20outputs\x20\x3d\x20\x5b\x22dist/\x2a\x2a/\x2a\x2ejs\x22\x5d\x0a\x0aAlternatively\x2c\x20tasks\x20can\x20be\x20defined\x20as\x20standalone\x20scripts\x2e\x0aThese\x20must\x20be\x20located\x20in\x20\x60mise\x2dtasks\x60\x2c\x20\x60\x2emise\x2dtasks\x60\x2c\x20\x60\x2emise/tasks\x60\x2c\x20\x60mise/tasks\x60\x20or\x0a\x60\x2econfig/mise/tasks\x60\x2e\x0aThe\x20name\x20of\x20the\x20script\x20will\x20be\x20the\x20name\x20of\x20the\x20tasks\x2e\x0a\x0a\x20\x20\x20\x20\x24\x20cat\x20\x2emise/tasks/build\x3c\x3cEOF\x0a\x20\x20\x20\x20\x23\x21/usr/bin/env\x20bash\x0a\x20\x20\x20\x20npm\x20run\x20build\x0a\x20\x20\x20\x20EOF\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20build\x22\x23\x0a\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20Runs\x20the\x20\x22lint\x22\x20tasks\x2e\x20This\x20needs\x20to\x20either\x20be\x20defined\x20in\x20mise\x2etoml\x0a\x20\x20\x20\x20\x23\x20or\x20as\x20a\x20standalone\x20script\x2e\x20See\x20the\x20project\x20README\x20for\x20more\x20information\x2e\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20lint\x0a\x0a\x20\x20\x20\x20\x23\x20Forces\x20the\x20\x22build\x22\x20tasks\x20to\x20run\x20even\x20if\x20its\x20sources\x20are\x20up\x2dto\x2ddate\x2e\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20build\x20\x2d\x2dforce\x0a\x0a\x20\x20\x20\x20\x23\x20Run\x20\x22test\x22\x20with\x20stdin/stdout/stderr\x20all\x20connected\x20to\x20the\x20current\x20terminal\x2e\x0a\x20\x20\x20\x20\x23\x20This\x20forces\x20\x60\x2d\x2djobs\x3d1\x60\x20to\x20prevent\x20interleaving\x20of\x20output\x2e\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20test\x20\x2d\x2draw\x0a\x0a\x20\x20\x20\x20\x23\x20Runs\x20the\x20\x22lint\x22\x2c\x20\x22test\x22\x2c\x20and\x20\x22check\x22\x20tasks\x20in\x20parallel\x2e\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20lint\x20\x3a\x3a\x3a\x20test\x20\x3a\x3a\x3a\x20check\x0a\x0a\x20\x20\x20\x20\x23\x20Execute\x20multiple\x20tasks\x20each\x20with\x20their\x20own\x20arguments\x2e\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20cmd1\x20arg1\x20arg2\x20\x3a\x3a\x3a\x20cmd2\x20arg1\x20arg2\x0a\x22\x23\x0a\x20\x20\x20\x20flag\x20\x22\x2dC\x20\x2d\x2dcd\x22\x20help\x3d\x22Change\x20to\x20this\x20directory\x20before\x20executing\x20the\x20command\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cCD\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dn\x20\x2d\x2ddry\x2drun\x22\x20help\x3d\x22Don\x27t\x20actually\x20run\x20the\x20tasks\x28s\x29\x2c\x20just\x20print\x20them\x20in\x20order\x20of\x20execution\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dforce\x22\x20help\x3d\x22Force\x20the\x20tasks\x20to\x20run\x20even\x20if\x20outputs\x20are\x20up\x20to\x20date\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dp\x20\x2d\x2dprefix\x22\x20help\x3d\x22Print\x20stdout/stderr\x20by\x20line\x2c\x20prefixed\x20with\x20the\x20tasks\x27s\x20label\x5cnDefaults\x20to\x20true\x20if\x20\x2d\x2djobs\x20\x3e\x201\x5cnConfigure\x20with\x20\x60task_output\x60\x20config\x20or\x20\x60MISE_TASK_OUTPUT\x60\x20env\x20var\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2di\x20\x2d\x2dinterleave\x22\x20help\x3d\x22Print\x20directly\x20to\x20stdout/stderr\x20instead\x20of\x20by\x20line\x5cnDefaults\x20to\x20true\x20if\x20\x2d\x2djobs\x20\x3d\x3d\x201\x5cnConfigure\x20with\x20\x60task_output\x60\x20config\x20or\x20\x60MISE_TASK_OUTPUT\x60\x20env\x20var\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dt\x20\x2d\x2dtool\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20also\x20add\x20e\x2eg\x2e\x3a\x20node\x4020\x20python\x403\x2e10\x22\x20var\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cTOOL\x40VERSION\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dj\x20\x2d\x2djobs\x22\x20help\x3d\x22Number\x20of\x20tasks\x20to\x20run\x20in\x20parallel\x5cn\x5bdefault\x3a\x204\x5d\x5cnConfigure\x20with\x20\x60jobs\x60\x20config\x20or\x20\x60MISE_JOBS\x60\x20env\x20var\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cJOBS\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dr\x20\x2d\x2draw\x22\x20help\x3d\x22Read/write\x20directly\x20to\x20stdin/stdout/stderr\x20instead\x20of\x20by\x20line\x5cnConfigure\x20with\x20\x60raw\x60\x20config\x20or\x20\x60MISE_RAW\x60\x20env\x20var\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dtimings\x22\x20help\x3d\x22Shows\x20elapsed\x20time\x20after\x20each\x20task\x20completes\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22Shows\x20elapsed\x20time\x20after\x20each\x20task\x20completes\x5cn\x5cnDefault\x20to\x20always\x20show\x20with\x20\x60MISE_TASK_TIMINGS\x3d1\x60\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20mount\x20run\x3d\x22mise\x20tasks\x20\x2d\x2dusage\x22\x0a\x7d\x0acmd\x20\x22self\x2dupdate\x22\x20help\x3d\x22Updates\x20mise\x20itself\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Updates\x20mise\x20itself\x2e\x0a\x0aUses\x20the\x20GitHub\x20Releases\x20API\x20to\x20find\x20the\x20latest\x20release\x20and\x20binary\x2e\x0aBy\x20default\x2c\x20this\x20will\x20also\x20update\x20any\x20installed\x20plugins\x2e\x0aUses\x20the\x20\x60GITHUB_API_TOKEN\x60\x20environment\x20variable\x20if\x20set\x20for\x20higher\x20rate\x20limits\x2e\x0a\x0aThis\x20command\x20is\x20not\x20available\x20if\x20mise\x20is\x20installed\x20via\x20a\x20package\x20manager\x2e\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dforce\x22\x20help\x3d\x22Update\x20even\x20if\x20already\x20up\x20to\x20date\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dno\x2dplugins\x22\x20help\x3d\x22Disable\x20auto\x2dupdating\x20plugins\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dy\x20\x2d\x2dyes\x22\x20help\x3d\x22Skip\x20confirmation\x20prompt\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bVERSION\x5d\x22\x20help\x3d\x22Update\x20to\x20a\x20specific\x20version\x22\x0a\x7d\x0acmd\x20\x22set\x22\x20help\x3d\x22Set\x20environment\x20variables\x20in\x20mise\x2etoml\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22ev\x22\x20\x22env\x2dvars\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20long_help\x20r\x22Set\x20environment\x20variables\x20in\x20mise\x2etoml\x0a\x0aBy\x20default\x2c\x20this\x20command\x20modifies\x20\x60mise\x2etoml\x60\x20in\x20the\x20current\x20directory\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20set\x20NODE_ENV\x3dproduction\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20set\x20NODE_ENV\x0a\x20\x20\x20\x20production\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20set\x0a\x20\x20\x20\x20key\x20\x20\x20\x20\x20\x20\x20value\x20\x20\x20\x20\x20\x20\x20source\x0a\x20\x20\x20\x20NODE_ENV\x20\x20production\x20\x20\x7e/\x2econfig/mise/config\x2etoml\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dfile\x22\x20help\x3d\x22The\x20TOML\x20file\x20to\x20update\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22The\x20TOML\x20file\x20to\x20update\x5cn\x5cnDefaults\x20to\x20MISE_DEFAULT_CONFIG_FILENAME\x20environment\x20variable\x2c\x20or\x20\x60mise\x2etoml\x60\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cFILE\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dg\x20\x2d\x2dglobal\x22\x20help\x3d\x22Set\x20the\x20environment\x20variable\x20in\x20the\x20global\x20config\x20file\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dremove\x22\x20help\x3d\x22Remove\x20the\x20environment\x20variable\x20from\x20config\x20file\x22\x20var\x3dtrue\x20hide\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22Remove\x20the\x20environment\x20variable\x20from\x20config\x20file\x5cn\x5cnCan\x20be\x20used\x20multiple\x20times\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cENV_VAR\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20arg\x20\x22\x5bENV_VARS\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Environment\x20variable\x28s\x29\x20to\x20set\x5cne\x2eg\x2e\x3a\x20NODE_ENV\x3dproduction\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22settings\x22\x20help\x3d\x22Manage\x20settings\x22\x20\x7b\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dkeys\x22\x20help\x3d\x22Only\x20display\x20key\x20names\x20for\x20each\x20setting\x22\x0a\x20\x20\x20\x20cmd\x20\x22add\x22\x20help\x3d\x22Adds\x20a\x20setting\x20to\x20the\x20configuration\x20file\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Adds\x20a\x20setting\x20to\x20the\x20configuration\x20file\x0a\x0aUsed\x20with\x20an\x20array\x20setting\x2c\x20this\x20will\x20append\x20the\x20value\x20to\x20the\x20array\x2e\x0aThis\x20modifies\x20the\x20contents\x20of\x20\x7e/\x2econfig/mise/config\x2etoml\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20settings\x20add\x20disable_hints\x20python_multi\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSETTING\x3e\x22\x20help\x3d\x22The\x20setting\x20to\x20set\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cVALUE\x3e\x22\x20help\x3d\x22The\x20value\x20to\x20set\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22get\x22\x20help\x3d\x22Show\x20a\x20current\x20setting\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Show\x20a\x20current\x20setting\x0a\x0aThis\x20is\x20the\x20contents\x20of\x20a\x20single\x20entry\x20in\x20\x7e/\x2econfig/mise/config\x2etoml\x0a\x0aNote\x20that\x20aliases\x20are\x20also\x20stored\x20in\x20this\x20file\x0abut\x20managed\x20separately\x20with\x20\x60mise\x20aliases\x20get\x60\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20settings\x20get\x20legacy_version_file\x0a\x20\x20\x20\x20true\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSETTING\x3e\x22\x20help\x3d\x22The\x20setting\x20to\x20show\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22ls\x22\x20help\x3d\x22Show\x20current\x20settings\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22list\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Show\x20current\x20settings\x0a\x0aThis\x20is\x20the\x20contents\x20of\x20\x7e/\x2econfig/mise/config\x2etoml\x0a\x0aNote\x20that\x20aliases\x20are\x20also\x20stored\x20in\x20this\x20file\x0abut\x20managed\x20separately\x20with\x20\x60mise\x20aliases\x60\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20settings\x0a\x20\x20\x20\x20legacy_version_file\x20\x3d\x20false\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dkeys\x22\x20help\x3d\x22Only\x20display\x20key\x20names\x20for\x20each\x20setting\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22set\x22\x20help\x3d\x22Add/update\x20a\x20setting\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22create\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Add/update\x20a\x20setting\x0a\x0aThis\x20modifies\x20the\x20contents\x20of\x20\x7e/\x2econfig/mise/config\x2etoml\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20settings\x20set\x20legacy_version_file\x20true\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSETTING\x3e\x22\x20help\x3d\x22The\x20setting\x20to\x20set\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cVALUE\x3e\x22\x20help\x3d\x22The\x20value\x20to\x20set\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22unset\x22\x20help\x3d\x22Clears\x20a\x20setting\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22rm\x22\x20\x22remove\x22\x20\x22delete\x22\x20\x22del\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Clears\x20a\x20setting\x0a\x0aThis\x20modifies\x20the\x20contents\x20of\x20\x7e/\x2econfig/mise/config\x2etoml\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20settings\x20unset\x20legacy_version_file\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSETTING\x3e\x22\x20help\x3d\x22The\x20setting\x20to\x20remove\x22\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22shell\x22\x20help\x3d\x22Sets\x20a\x20tool\x20version\x20for\x20the\x20current\x20session\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22sh\x22\x0a\x20\x20\x20\x20long_help\x20r\x23\x22Sets\x20a\x20tool\x20version\x20for\x20the\x20current\x20session\x2e\x0a\x0aOnly\x20works\x20in\x20a\x20session\x20where\x20mise\x20is\x20already\x20activated\x2e\x0a\x0aThis\x20works\x20by\x20setting\x20environment\x20variables\x20for\x20the\x20current\x20shell\x20session\x0asuch\x20as\x20\x60MISE_NODE_VERSION\x3d20\x60\x20which\x20is\x20\x22eval\x22ed\x20as\x20a\x20shell\x20function\x20created\x20by\x20\x60mise\x20activate\x60\x2e\x22\x23\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20shell\x20node\x4020\x0a\x20\x20\x20\x20\x24\x20node\x20\x2dv\x0a\x20\x20\x20\x20v20\x2e0\x2e0\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dj\x20\x2d\x2djobs\x22\x20help\x3d\x22Number\x20of\x20jobs\x20to\x20run\x20in\x20parallel\x5cn\x5bdefault\x3a\x204\x5d\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cJOBS\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2draw\x22\x20help\x3d\x22Directly\x20pipe\x20stdin/stdout/stderr\x20from\x20plugin\x20to\x20user\x20Sets\x20\x2d\x2djobs\x3d1\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2du\x20\x2d\x2dunset\x22\x20help\x3d\x22Removes\x20a\x20previously\x20set\x20version\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x40VERSION\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20use\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22sync\x22\x20subcommand_required\x3dtrue\x20help\x3d\x22Add\x20tool\x20versions\x20from\x20external\x20tools\x20to\x20mise\x22\x20\x7b\x0a\x20\x20\x20\x20cmd\x20\x22node\x22\x20help\x3d\x22Symlinks\x20all\x20tool\x20versions\x20from\x20an\x20external\x20tool\x20into\x20mise\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Symlinks\x20all\x20tool\x20versions\x20from\x20an\x20external\x20tool\x20into\x20mise\x0a\x0aFor\x20example\x2c\x20use\x20this\x20to\x20import\x20all\x20Homebrew\x20node\x20installs\x20into\x20mise\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20brew\x20install\x20node\x4018\x20node\x4020\x0a\x20\x20\x20\x20\x24\x20mise\x20sync\x20node\x20\x2d\x2dbrew\x0a\x20\x20\x20\x20\x24\x20mise\x20use\x20\x2dg\x20node\x4018\x20\x2d\x20uses\x20Homebrew\x2dprovided\x20node\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dbrew\x22\x20help\x3d\x22Get\x20tool\x20versions\x20from\x20Homebrew\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dnvm\x22\x20help\x3d\x22Get\x20tool\x20versions\x20from\x20nvm\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dnodenv\x22\x20help\x3d\x22Get\x20tool\x20versions\x20from\x20nodenv\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22python\x22\x20help\x3d\x22Symlinks\x20all\x20tool\x20versions\x20from\x20an\x20external\x20tool\x20into\x20mise\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Symlinks\x20all\x20tool\x20versions\x20from\x20an\x20external\x20tool\x20into\x20mise\x0a\x0aFor\x20example\x2c\x20use\x20this\x20to\x20import\x20all\x20pyenv\x20installs\x20into\x20mise\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20pyenv\x20install\x203\x2e11\x2e0\x0a\x20\x20\x20\x20\x24\x20mise\x20sync\x20python\x20\x2d\x2dpyenv\x0a\x20\x20\x20\x20\x24\x20mise\x20use\x20\x2dg\x20python\x403\x2e11\x2e0\x20\x2d\x20uses\x20pyenv\x2dprovided\x20python\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dpyenv\x22\x20help\x3d\x22Get\x20tool\x20versions\x20from\x20pyenv\x22\x20required\x3dtrue\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22tasks\x22\x20help\x3d\x22Manage\x20tasks\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22t\x22\x0a\x20\x20\x20\x20alias\x20\x22task\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20ls\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dno\x2dheader\x22\x20help\x3d\x22Do\x20not\x20print\x20table\x20header\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dx\x20\x2d\x2dextended\x22\x20help\x3d\x22Show\x20all\x20columns\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dhidden\x22\x20help\x3d\x22Show\x20hidden\x20tasks\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dsort\x22\x20help\x3d\x22Sort\x20by\x20column\x2e\x20Default\x20is\x20name\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cCOLUMN\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22name\x22\x20\x22alias\x22\x20\x22description\x22\x20\x22source\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dsort\x2dorder\x22\x20help\x3d\x22Sort\x20order\x2e\x20Default\x20is\x20asc\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSORT_ORDER\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22asc\x22\x20\x22desc\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dJ\x20\x2d\x2djson\x22\x20help\x3d\x22Output\x20in\x20JSON\x20format\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dusage\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20cmd\x20\x22deps\x22\x20help\x3d\x22Display\x20a\x20tree\x20visualization\x20of\x20a\x20dependency\x20graph\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20Show\x20dependencies\x20for\x20all\x20tasks\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20deps\x0a\x0a\x20\x20\x20\x20\x23\x20Show\x20dependencies\x20for\x20the\x20\x22lint\x22\x2c\x20\x22test\x22\x20and\x20\x22check\x22\x20tasks\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20deps\x20lint\x20test\x20check\x0a\x0a\x20\x20\x20\x20\x23\x20Show\x20dependencies\x20in\x20DOT\x20format\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20deps\x20\x2d\x2ddot\x0a\x22\x23\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dhidden\x22\x20help\x3d\x22Show\x20hidden\x20tasks\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2ddot\x22\x20help\x3d\x22Display\x20dependencies\x20in\x20DOT\x20format\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bTASKS\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tasks\x20to\x20show\x20dependencies\x20for\x5cnCan\x20specify\x20multiple\x20tasks\x20by\x20separating\x20with\x20spaces\x5cne\x2eg\x2e\x3a\x20mise\x20tasks\x20deps\x20lint\x20test\x20check\x22\x20var\x3dtrue\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22edit\x22\x20help\x3d\x22Edit\x20a\x20tasks\x20with\x20\x24EDITOR\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22Edit\x20a\x20tasks\x20with\x20\x24EDITOR\x0a\x0aThe\x20tasks\x20will\x20be\x20created\x20as\x20a\x20standalone\x20script\x20if\x20it\x20does\x20not\x20already\x20exist\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20edit\x20build\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20edit\x20test\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dp\x20\x2d\x2dpath\x22\x20help\x3d\x22Display\x20the\x20path\x20to\x20the\x20tasks\x20instead\x20of\x20editing\x20it\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cTASK\x3e\x22\x20help\x3d\x22Tasks\x20to\x20edit\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22info\x22\x20help\x3d\x22Get\x20information\x20about\x20a\x20task\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20info\x0a\x20\x20\x20\x20Name\x3a\x20test\x0a\x20\x20\x20\x20Aliases\x3a\x20t\x0a\x20\x20\x20\x20Description\x3a\x20Test\x20the\x20application\x0a\x20\x20\x20\x20Source\x3a\x20\x7e/src/myproj/mise\x2etoml\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20info\x20test\x20\x2d\x2djson\x0a\x20\x20\x20\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x22name\x22\x3a\x20\x22test\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x22aliases\x22\x3a\x20\x22t\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x22description\x22\x3a\x20\x22Test\x20the\x20application\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x22source\x22\x3a\x20\x22\x7e/src/myproj/mise\x2etoml\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x22depends\x22\x3a\x20\x5b\x5d\x2c\x0a\x20\x20\x20\x20\x20\x20\x22env\x22\x3a\x20\x7b\x7d\x2c\x0a\x20\x20\x20\x20\x20\x20\x22dir\x22\x3a\x20null\x2c\x0a\x20\x20\x20\x20\x20\x20\x22hide\x22\x3a\x20false\x2c\x0a\x20\x20\x20\x20\x20\x20\x22raw\x22\x3a\x20false\x2c\x0a\x20\x20\x20\x20\x20\x20\x22sources\x22\x3a\x20\x5b\x5d\x2c\x0a\x20\x20\x20\x20\x20\x20\x22outputs\x22\x3a\x20\x5b\x5d\x2c\x0a\x20\x20\x20\x20\x20\x20\x22run\x22\x3a\x20\x5b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x22echo\x20\x5c\x22testing\x21\x5c\x22\x22\x0a\x20\x20\x20\x20\x20\x20\x5d\x2c\x0a\x20\x20\x20\x20\x20\x20\x22file\x22\x3a\x20null\x2c\x0a\x20\x20\x20\x20\x20\x20\x22usage_spec\x22\x3a\x20\x7b\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x22\x23\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dJ\x20\x2d\x2djson\x22\x20help\x3d\x22Output\x20in\x20JSON\x20format\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cTASK\x3e\x22\x20help\x3d\x22Name\x20of\x20the\x20task\x20to\x20get\x20information\x20about\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22ls\x22\x20help\x3d\x22List\x20available\x20tasks\x20to\x20execute\x5cnThese\x20may\x20be\x20included\x20from\x20the\x20config\x20file\x20or\x20from\x20the\x20project\x27s\x20\x2emise/tasks\x20directory\x5cnmise\x20will\x20merge\x20all\x20tasks\x20from\x20all\x20parent\x20directories\x20into\x20this\x20list\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x22List\x20available\x20tasks\x20to\x20execute\x0aThese\x20may\x20be\x20included\x20from\x20the\x20config\x20file\x20or\x20from\x20the\x20project\x27s\x20\x2emise/tasks\x20directory\x0amise\x20will\x20merge\x20all\x20tasks\x20from\x20all\x20parent\x20directories\x20into\x20this\x20list\x2e\x0a\x0aSo\x20if\x20you\x20have\x20global\x20tasks\x20in\x20\x60\x7e/\x2econfig/mise/tasks/\x2a\x60\x20and\x20project\x2dspecific\x20tasks\x20in\x0a\x7e/myproject/\x2emise/tasks/\x2a\x2c\x20then\x20they\x27ll\x20both\x20be\x20available\x20but\x20the\x20project\x2dspecific\x0atasks\x20will\x20override\x20the\x20global\x20ones\x20if\x20they\x20have\x20the\x20same\x20name\x2e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20ls\x0a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dno\x2dheader\x22\x20help\x3d\x22Do\x20not\x20print\x20table\x20header\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dx\x20\x2d\x2dextended\x22\x20help\x3d\x22Show\x20all\x20columns\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dhidden\x22\x20help\x3d\x22Show\x20hidden\x20tasks\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dsort\x22\x20help\x3d\x22Sort\x20by\x20column\x2e\x20Default\x20is\x20name\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cCOLUMN\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22name\x22\x20\x22alias\x22\x20\x22description\x22\x20\x22source\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dsort\x2dorder\x22\x20help\x3d\x22Sort\x20order\x2e\x20Default\x20is\x20asc\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cSORT_ORDER\x3e\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20choices\x20\x22asc\x22\x20\x22desc\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dJ\x20\x2d\x2djson\x22\x20help\x3d\x22Output\x20in\x20JSON\x20format\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dusage\x22\x20hide\x3dtrue\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20cmd\x20\x22run\x22\x20help\x3d\x22Run\x20task\x28s\x29\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20alias\x20\x22r\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20r\x23\x22Run\x20task\x28s\x29\x0a\x0aThis\x20command\x20will\x20run\x20a\x20tasks\x2c\x20or\x20multiple\x20tasks\x20in\x20parallel\x2e\x0aTasks\x20may\x20have\x20dependencies\x20on\x20other\x20tasks\x20or\x20on\x20source\x20files\x2e\x0aIf\x20source\x20is\x20configured\x20on\x20a\x20tasks\x2c\x20it\x20will\x20only\x20run\x20if\x20the\x20source\x0afiles\x20have\x20changed\x2e\x0a\x0aTasks\x20can\x20be\x20defined\x20in\x20mise\x2etoml\x20or\x20as\x20standalone\x20scripts\x2e\x0aIn\x20mise\x2etoml\x2c\x20tasks\x20take\x20this\x20form\x3a\x0a\x0a\x20\x20\x20\x20\x5btasks\x2ebuild\x5d\x0a\x20\x20\x20\x20run\x20\x3d\x20\x22npm\x20run\x20build\x22\x0a\x20\x20\x20\x20sources\x20\x3d\x20\x5b\x22src/\x2a\x2a/\x2a\x2ets\x22\x5d\x0a\x20\x20\x20\x20outputs\x20\x3d\x20\x5b\x22dist/\x2a\x2a/\x2a\x2ejs\x22\x5d\x0a\x0aAlternatively\x2c\x20tasks\x20can\x20be\x20defined\x20as\x20standalone\x20scripts\x2e\x0aThese\x20must\x20be\x20located\x20in\x20\x60mise\x2dtasks\x60\x2c\x20\x60\x2emise\x2dtasks\x60\x2c\x20\x60\x2emise/tasks\x60\x2c\x20\x60mise/tasks\x60\x20or\x0a\x60\x2econfig/mise/tasks\x60\x2e\x0aThe\x20name\x20of\x20the\x20script\x20will\x20be\x20the\x20name\x20of\x20the\x20tasks\x2e\x0a\x0a\x20\x20\x20\x20\x24\x20cat\x20\x2emise/tasks/build\x3c\x3cEOF\x0a\x20\x20\x20\x20\x23\x21/usr/bin/env\x20bash\x0a\x20\x20\x20\x20npm\x20run\x20build\x0a\x20\x20\x20\x20EOF\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20build\x22\x23\x0a\x20\x20\x20\x20\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20Runs\x20the\x20\x22lint\x22\x20tasks\x2e\x20This\x20needs\x20to\x20either\x20be\x20defined\x20in\x20mise\x2etoml\x0a\x20\x20\x20\x20\x23\x20or\x20as\x20a\x20standalone\x20script\x2e\x20See\x20the\x20project\x20README\x20for\x20more\x20information\x2e\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20lint\x0a\x0a\x20\x20\x20\x20\x23\x20Forces\x20the\x20\x22build\x22\x20tasks\x20to\x20run\x20even\x20if\x20its\x20sources\x20are\x20up\x2dto\x2ddate\x2e\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20build\x20\x2d\x2dforce\x0a\x0a\x20\x20\x20\x20\x23\x20Run\x20\x22test\x22\x20with\x20stdin/stdout/stderr\x20all\x20connected\x20to\x20the\x20current\x20terminal\x2e\x0a\x20\x20\x20\x20\x23\x20This\x20forces\x20\x60\x2d\x2djobs\x3d1\x60\x20to\x20prevent\x20interleaving\x20of\x20output\x2e\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20test\x20\x2d\x2draw\x0a\x0a\x20\x20\x20\x20\x23\x20Runs\x20the\x20\x22lint\x22\x2c\x20\x22test\x22\x2c\x20and\x20\x22check\x22\x20tasks\x20in\x20parallel\x2e\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20lint\x20\x3a\x3a\x3a\x20test\x20\x3a\x3a\x3a\x20check\x0a\x0a\x20\x20\x20\x20\x23\x20Execute\x20multiple\x20tasks\x20each\x20with\x20their\x20own\x20arguments\x2e\x0a\x20\x20\x20\x20\x24\x20mise\x20tasks\x20cmd1\x20arg1\x20arg2\x20\x3a\x3a\x3a\x20cmd2\x20arg1\x20arg2\x0a\x22\x23\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dC\x20\x2d\x2dcd\x22\x20help\x3d\x22Change\x20to\x20this\x20directory\x20before\x20executing\x20the\x20command\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cCD\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dn\x20\x2d\x2ddry\x2drun\x22\x20help\x3d\x22Don\x27t\x20actually\x20run\x20the\x20tasks\x28s\x29\x2c\x20just\x20print\x20them\x20in\x20order\x20of\x20execution\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dforce\x22\x20help\x3d\x22Force\x20the\x20tasks\x20to\x20run\x20even\x20if\x20outputs\x20are\x20up\x20to\x20date\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dp\x20\x2d\x2dprefix\x22\x20help\x3d\x22Print\x20stdout/stderr\x20by\x20line\x2c\x20prefixed\x20with\x20the\x20tasks\x27s\x20label\x5cnDefaults\x20to\x20true\x20if\x20\x2d\x2djobs\x20\x3e\x201\x5cnConfigure\x20with\x20\x60task_output\x60\x20config\x20or\x20\x60MISE_TASK_OUTPUT\x60\x20env\x20var\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2di\x20\x2d\x2dinterleave\x22\x20help\x3d\x22Print\x20directly\x20to\x20stdout/stderr\x20instead\x20of\x20by\x20line\x5cnDefaults\x20to\x20true\x20if\x20\x2d\x2djobs\x20\x3d\x3d\x201\x5cnConfigure\x20with\x20\x60task_output\x60\x20config\x20or\x20\x60MISE_TASK_OUTPUT\x60\x20env\x20var\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dt\x20\x2d\x2dtool\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20also\x20add\x20e\x2eg\x2e\x3a\x20node\x4020\x20python\x403\x2e10\x22\x20var\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cTOOL\x40VERSION\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dj\x20\x2d\x2djobs\x22\x20help\x3d\x22Number\x20of\x20tasks\x20to\x20run\x20in\x20parallel\x5cn\x5bdefault\x3a\x204\x5d\x5cnConfigure\x20with\x20\x60jobs\x60\x20config\x20or\x20\x60MISE_JOBS\x60\x20env\x20var\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cJOBS\x3e\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2dr\x20\x2d\x2draw\x22\x20help\x3d\x22Read/write\x20directly\x20to\x20stdin/stdout/stderr\x20instead\x20of\x20by\x20line\x5cnConfigure\x20with\x20\x60raw\x60\x20config\x20or\x20\x60MISE_RAW\x60\x20env\x20var\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20flag\x20\x22\x2d\x2dtimings\x22\x20help\x3d\x22Shows\x20elapsed\x20time\x20after\x20each\x20task\x20completes\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22Shows\x20elapsed\x20time\x20after\x20each\x20task\x20completes\x5cn\x5cnDefault\x20to\x20always\x20show\x20with\x20\x60MISE_TASK_TIMINGS\x3d1\x60\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bTASK\x5d\x22\x20help\x3d\x22Tasks\x20to\x20run\x5cnCan\x20specify\x20multiple\x20tasks\x20by\x20separating\x20with\x20\x60\x3a\x3a\x3a\x60\x5cne\x2eg\x2e\x3a\x20mise\x20run\x20task1\x20arg1\x20arg2\x20\x3a\x3a\x3a\x20task2\x20arg1\x20arg2\x22\x20default\x3d\x22default\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x5bARGS\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Arguments\x20to\x20pass\x20to\x20the\x20tasks\x2e\x20Use\x20\x5c\x22\x3a\x3a\x3a\x5c\x22\x20to\x20separate\x20tasks\x22\x20var\x3dtrue\x0a\x20\x20\x20\x20\x20\x20\x20\x20mount\x20run\x3d\x22mise\x20tasks\x20\x2d\x2dusage\x22\x0a\x20\x20\x20\x20\x7d\x0a\x7d\x0acmd\x20\x22trust\x22\x20help\x3d\x22Marks\x20a\x20config\x20file\x20as\x20trusted\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Marks\x20a\x20config\x20file\x20as\x20trusted\x0a\x0aThis\x20means\x20mise\x20will\x20parse\x20the\x20file\x20with\x20potentially\x20dangerous\x0afeatures\x20enabled\x2e\x0a\x0aThis\x20includes\x3a\x0a\x2d\x20environment\x20variables\x0a\x2d\x20templates\x0a\x2d\x20\x60path\x3a\x60\x20plugin\x20versions\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20trusts\x20\x7e/some_dir/mise\x2etoml\x0a\x20\x20\x20\x20\x24\x20mise\x20trust\x20\x7e/some_dir/mise\x2etoml\x0a\x0a\x20\x20\x20\x20\x23\x20trusts\x20mise\x2etoml\x20in\x20the\x20current\x20or\x20parent\x20directory\x0a\x20\x20\x20\x20\x24\x20mise\x20trust\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2da\x20\x2d\x2dall\x22\x20help\x3d\x22Trust\x20all\x20config\x20files\x20in\x20the\x20current\x20directory\x20and\x20its\x20parents\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2duntrust\x22\x20help\x3d\x22No\x20longer\x20trust\x20this\x20config\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dshow\x22\x20help\x3d\x22Show\x20the\x20trusted\x20status\x20of\x20config\x20files\x20from\x20the\x20current\x20directory\x20and\x20its\x20parents\x2e\x5cnDoes\x20not\x20trust\x20or\x20untrust\x20any\x20files\x2e\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bCONFIG_FILE\x5d\x22\x20help\x3d\x22The\x20config\x20file\x20to\x20trust\x22\x0a\x7d\x0acmd\x20\x22uninstall\x22\x20help\x3d\x22Removes\x20installed\x20tool\x20versions\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22remove\x22\x20\x22rm\x22\x0a\x20\x20\x20\x20long_help\x20r\x22Removes\x20installed\x20tool\x20versions\x0a\x0aThis\x20only\x20removes\x20the\x20installed\x20version\x2c\x20it\x20does\x20not\x20modify\x20mise\x2etoml\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20will\x20uninstall\x20specific\x20version\x0a\x20\x20\x20\x20\x24\x20mise\x20uninstall\x20node\x4018\x2e0\x2e0\x0a\x0a\x20\x20\x20\x20\x23\x20will\x20uninstall\x20the\x20current\x20node\x20version\x20\x28if\x20only\x20one\x20version\x20is\x20installed\x29\x0a\x20\x20\x20\x20\x24\x20mise\x20uninstall\x20node\x0a\x0a\x20\x20\x20\x20\x23\x20will\x20uninstall\x20all\x20installed\x20versions\x20of\x20node\x0a\x20\x20\x20\x20\x24\x20mise\x20uninstall\x20\x2d\x2dall\x20node\x4018\x2e0\x2e0\x20\x23\x20will\x20uninstall\x20all\x20node\x20versions\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2da\x20\x2d\x2dall\x22\x20help\x3d\x22Delete\x20all\x20installed\x20versions\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dn\x20\x2d\x2ddry\x2drun\x22\x20help\x3d\x22Do\x20not\x20actually\x20delete\x20anything\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bINSTALLED_TOOL\x40VERSION\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20remove\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22unset\x22\x20help\x3d\x22Remove\x20environment\x20variable\x28s\x29\x20from\x20the\x20config\x20file\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Remove\x20environment\x20variable\x28s\x29\x20from\x20the\x20config\x20file\x2e\x0a\x0aBy\x20default\x2c\x20this\x20command\x20modifies\x20\x60mise\x2etoml\x60\x20in\x20the\x20current\x20directory\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20Remove\x20NODE_ENV\x20from\x20the\x20current\x20directory\x27s\x20config\x0a\x20\x20\x20\x20\x24\x20mise\x20unset\x20NODE_ENV\x0a\x0a\x20\x20\x20\x20\x23\x20Remove\x20NODE_ENV\x20from\x20the\x20global\x20config\x0a\x20\x20\x20\x20\x24\x20mise\x20unset\x20NODE_ENV\x20\x2dg\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dfile\x22\x20help\x3d\x22Specify\x20a\x20file\x20to\x20use\x20instead\x20of\x20\x60mise\x2etoml\x60\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cFILE\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dg\x20\x2d\x2dglobal\x22\x20help\x3d\x22Use\x20the\x20global\x20config\x20file\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bKEYS\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Environment\x20variable\x28s\x29\x20to\x20remove\x5cne\x2eg\x2e\x3a\x20NODE_ENV\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22upgrade\x22\x20help\x3d\x22Upgrades\x20outdated\x20tools\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22up\x22\x0a\x20\x20\x20\x20long_help\x20r\x22Upgrades\x20outdated\x20tools\x0a\x0aBy\x20default\x2c\x20this\x20keeps\x20the\x20range\x20specified\x20in\x20mise\x2etoml\x2e\x20So\x20if\x20you\x20have\x20node\x4020\x20set\x2c\x20it\x20will\x0aupgrade\x20to\x20the\x20latest\x2020\x2ex\x2ex\x20version\x20available\x2e\x20See\x20the\x20\x60\x2d\x2dbump\x60\x20flag\x20to\x20use\x20the\x20latest\x20version\x0aand\x20bump\x20the\x20version\x20in\x20mise\x2etoml\x2e\x0a\x0aThis\x20will\x20update\x20mise\x2elock\x20if\x20it\x20is\x20enabled\x2c\x20see\x20https\x3a//mise\x2ejdx\x2edev/configuration/settings\x2ehtml\x23lockfile\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20Upgrades\x20node\x20to\x20the\x20latest\x20version\x20matching\x20the\x20range\x20in\x20mise\x2etoml\x0a\x20\x20\x20\x20\x24\x20mise\x20upgrade\x20node\x0a\x0a\x20\x20\x20\x20\x23\x20Upgrades\x20node\x20to\x20the\x20latest\x20version\x20and\x20bumps\x20the\x20version\x20in\x20mise\x2etoml\x0a\x20\x20\x20\x20\x24\x20mise\x20upgrade\x20node\x20\x2d\x2dbump\x0a\x0a\x20\x20\x20\x20\x23\x20Upgrades\x20all\x20tools\x20to\x20the\x20latest\x20versions\x0a\x20\x20\x20\x20\x24\x20mise\x20upgrade\x0a\x0a\x20\x20\x20\x20\x23\x20Upgrades\x20all\x20tools\x20to\x20the\x20latest\x20versions\x20and\x20bumps\x20the\x20version\x20in\x20mise\x2etoml\x0a\x20\x20\x20\x20\x24\x20mise\x20upgrade\x20\x2d\x2dbump\x0a\x0a\x20\x20\x20\x20\x23\x20Just\x20print\x20what\x20would\x20be\x20done\x2c\x20don\x27t\x20actually\x20do\x20it\x0a\x20\x20\x20\x20\x24\x20mise\x20upgrade\x20\x2d\x2ddry\x2drun\x0a\x0a\x20\x20\x20\x20\x23\x20Upgrades\x20node\x20and\x20python\x20to\x20the\x20latest\x20versions\x0a\x20\x20\x20\x20\x24\x20mise\x20upgrade\x20node\x20python\x0a\x0a\x20\x20\x20\x20\x23\x20Show\x20a\x20multiselect\x20menu\x20to\x20choose\x20which\x20tools\x20to\x20upgrade\x0a\x20\x20\x20\x20\x24\x20mise\x20upgrade\x20\x2d\x2dinteractive\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dn\x20\x2d\x2ddry\x2drun\x22\x20help\x3d\x22Just\x20print\x20what\x20would\x20be\x20done\x2c\x20don\x27t\x20actually\x20do\x20it\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2di\x20\x2d\x2dinteractive\x22\x20help\x3d\x22Display\x20multiselect\x20menu\x20to\x20choose\x20which\x20tools\x20to\x20upgrade\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dj\x20\x2d\x2djobs\x22\x20help\x3d\x22Number\x20of\x20jobs\x20to\x20run\x20in\x20parallel\x5cn\x5bdefault\x3a\x204\x5d\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cJOBS\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dl\x20\x2d\x2dbump\x22\x20help\x3d\x22Upgrades\x20to\x20the\x20latest\x20version\x20available\x2c\x20bumping\x20the\x20version\x20in\x20mise\x2etoml\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22Upgrades\x20to\x20the\x20latest\x20version\x20available\x2c\x20bumping\x20the\x20version\x20in\x20mise\x2etoml\x5cn\x5cnFor\x20example\x2c\x20if\x20you\x20have\x20\x60node\x20\x3d\x20\x5c\x2220\x2e0\x2e0\x5c\x22\x60\x20in\x20your\x20mise\x2etoml\x20but\x2022\x2e1\x2e0\x20is\x20the\x20latest\x20available\x2c\x5cnthis\x20will\x20install\x2022\x2e1\x2e0\x20and\x20set\x20\x60node\x20\x3d\x20\x5c\x2222\x2e1\x2e0\x5c\x22\x60\x20in\x20your\x20config\x2e\x5cn\x5cnIt\x20keeps\x20the\x20same\x20precision\x20as\x20what\x20was\x20there\x20before\x2c\x20so\x20if\x20you\x20instead\x20had\x20\x60node\x20\x3d\x20\x5c\x2220\x5c\x22\x60\x2c\x20it\x5cnwould\x20change\x20your\x20config\x20to\x20\x60node\x20\x3d\x20\x5c\x2222\x5c\x22\x60\x2e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2draw\x22\x20help\x3d\x22Directly\x20pipe\x20stdin/stdout/stderr\x20from\x20plugin\x20to\x20user\x20Sets\x20\x2d\x2djobs\x3d1\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x40VERSION\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20upgrade\x5cne\x2eg\x2e\x3a\x20node\x4020\x20python\x403\x2e10\x5cnIf\x20not\x20specified\x2c\x20all\x20current\x20tools\x20will\x20be\x20upgraded\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22usage\x22\x20hide\x3dtrue\x20help\x3d\x22Generate\x20a\x20usage\x20CLI\x20spec\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Generate\x20a\x20usage\x20CLI\x20spec\x0a\x0aSee\x20https\x3a//usage\x2ejdx\x2edev\x20for\x20more\x20information\x20on\x20this\x20specification\x2e\x22\x0a\x7d\x0acmd\x20\x22use\x22\x20help\x3d\x22Installs\x20a\x20tool\x20and\x20adds\x20the\x20version\x20it\x20to\x20mise\x2etoml\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22u\x22\x0a\x20\x20\x20\x20long_help\x20r\x22Installs\x20a\x20tool\x20and\x20adds\x20the\x20version\x20it\x20to\x20mise\x2etoml\x2e\x0a\x0aThis\x20will\x20install\x20the\x20tool\x20version\x20if\x20it\x20is\x20not\x20already\x20installed\x2e\x0aBy\x20default\x2c\x20this\x20will\x20use\x20a\x20\x60mise\x2etoml\x60\x20file\x20in\x20the\x20current\x20directory\x2e\x0a\x0aUse\x20the\x20\x60\x2d\x2dglobal\x60\x20flag\x20to\x20use\x20the\x20global\x20config\x20file\x20instead\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20set\x20the\x20current\x20version\x20of\x20node\x20to\x2020\x2ex\x20in\x20mise\x2etoml\x20of\x20current\x20directory\x0a\x20\x20\x20\x20\x23\x20will\x20write\x20the\x20fuzzy\x20version\x20\x28e\x2eg\x2e\x3a\x2020\x29\x0a\x20\x20\x20\x20\x24\x20mise\x20use\x20node\x4020\x0a\x0a\x20\x20\x20\x20\x23\x20set\x20the\x20current\x20version\x20of\x20node\x20to\x2020\x2ex\x20in\x20\x7e/\x2econfig/mise/config\x2etoml\x0a\x20\x20\x20\x20\x23\x20will\x20write\x20the\x20precise\x20version\x20\x28e\x2eg\x2e\x3a\x2020\x2e0\x2e0\x29\x0a\x20\x20\x20\x20\x24\x20mise\x20use\x20\x2dg\x20\x2d\x2dpin\x20node\x4020\x0a\x0a\x20\x20\x20\x20\x23\x20sets\x20\x2emise\x2elocal\x2etoml\x20\x28which\x20is\x20intended\x20not\x20to\x20be\x20committed\x20to\x20a\x20project\x29\x0a\x20\x20\x20\x20\x24\x20mise\x20use\x20\x2d\x2denv\x20local\x20node\x4020\x0a\x0a\x20\x20\x20\x20\x23\x20sets\x20\x2emise\x2estaging\x2etoml\x20\x28which\x20is\x20used\x20if\x20MISE_ENV\x3dstaging\x29\x0a\x20\x20\x20\x20\x24\x20mise\x20use\x20\x2d\x2denv\x20staging\x20node\x4020\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2df\x20\x2d\x2dforce\x22\x20help\x3d\x22Force\x20reinstall\x20even\x20if\x20already\x20installed\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dfuzzy\x22\x20help\x3d\x22Save\x20fuzzy\x20version\x20to\x20config\x20file\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22Save\x20fuzzy\x20version\x20to\x20config\x20file\x5cn\x5cne\x2eg\x2e\x3a\x20\x60mise\x20use\x20\x2d\x2dfuzzy\x20node\x4020\x60\x20will\x20save\x2020\x20as\x20the\x20version\x5cnthis\x20is\x20the\x20default\x20behavior\x20unless\x20\x60MISE_PIN\x3d1\x60\x20or\x20\x60MISE_ASDF_COMPAT\x3d1\x60\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dg\x20\x2d\x2dglobal\x22\x20help\x3d\x22Use\x20the\x20global\x20config\x20file\x20\x28\x60\x7e/\x2econfig/mise/config\x2etoml\x60\x29\x20instead\x20of\x20the\x20local\x20one\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2de\x20\x2d\x2denv\x22\x20help\x3d\x22Modify\x20an\x20environment\x2dspecific\x20config\x20file\x20like\x20\x2emise\x2e\x3cenv\x3e\x2etoml\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cENV\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dj\x20\x2d\x2djobs\x22\x20help\x3d\x22Number\x20of\x20jobs\x20to\x20run\x20in\x20parallel\x5cn\x5bdefault\x3a\x204\x5d\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cJOBS\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2draw\x22\x20help\x3d\x22Directly\x20pipe\x20stdin/stdout/stderr\x20from\x20plugin\x20to\x20user\x20Sets\x20\x60\x2d\x2djobs\x3d1\x60\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dremove\x22\x20help\x3d\x22Remove\x20the\x20plugin\x28s\x29\x20from\x20config\x20file\x22\x20var\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cPLUGIN\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dp\x20\x2d\x2dpath\x22\x20help\x3d\x22Specify\x20a\x20path\x20to\x20a\x20config\x20file\x20or\x20directory\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20long_help\x20\x22Specify\x20a\x20path\x20to\x20a\x20config\x20file\x20or\x20directory\x5cn\x5cnIf\x20a\x20directory\x20is\x20specified\x2c\x20it\x20will\x20look\x20for\x20\x60mise\x2etoml\x60\x20\x28default\x29\x20or\x20\x60\x2etool\x2dversions\x60\x20if\x20\x60MISE_ASDF_COMPAT\x3d1\x60\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cPATH\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dpin\x22\x20help\x3d\x22Save\x20exact\x20version\x20to\x20config\x20file\x5cne\x2eg\x2e\x3a\x20\x60mise\x20use\x20\x2d\x2dpin\x20node\x4020\x60\x20will\x20save\x2020\x2e0\x2e0\x20as\x20the\x20version\x5cnSet\x20\x60MISE_PIN\x3d1\x60\x20or\x20\x60MISE_ASDF_COMPAT\x3d1\x60\x20to\x20make\x20this\x20the\x20default\x20behavior\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bTOOL\x40VERSION\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20add\x20to\x20config\x20file\x22\x20help_long\x3d\x22Tool\x28s\x29\x20to\x20add\x20to\x20config\x20file\x5cn\x5cne\x2eg\x2e\x3a\x20node\x4020\x2c\x20cargo\x3aripgrep\x40latest\x20npm\x3aprettier\x403\x5cnIf\x20no\x20version\x20is\x20specified\x2c\x20it\x20will\x20default\x20to\x20\x40latest\x5cn\x5cnTool\x20options\x20can\x20be\x20set\x20with\x20this\x20syntax\x3a\x5cn\x5cn\x20\x20\x20\x20mise\x20use\x20ubi\x3aBurntSushi/ripgrep\x5bexe\x3drg\x5d\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22version\x22\x20help\x3d\x22Display\x20the\x20version\x20of\x20mise\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22v\x22\x0a\x20\x20\x20\x20long_help\x20r\x22Display\x20the\x20version\x20of\x20mise\x0a\x0aDisplays\x20the\x20version\x2c\x20os\x2c\x20architecture\x2c\x20and\x20the\x20date\x20of\x20the\x20build\x2e\x0a\x0aIf\x20the\x20version\x20is\x20out\x20of\x20date\x2c\x20it\x20will\x20display\x20a\x20warning\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20version\x0a\x20\x20\x20\x20\x24\x20mise\x20\x2d\x2dversion\x0a\x20\x20\x20\x20\x24\x20mise\x20\x2dv\x0a\x20\x20\x20\x20\x24\x20mise\x20\x2dV\x0a\x22\x0a\x7d\x0acmd\x20\x22watch\x22\x20help\x3d\x22Run\x20task\x28s\x29\x20and\x20watch\x20for\x20changes\x20to\x20rerun\x20it\x22\x20\x7b\x0a\x20\x20\x20\x20alias\x20\x22w\x22\x0a\x20\x20\x20\x20long_help\x20r\x22Run\x20task\x28s\x29\x20and\x20watch\x20for\x20changes\x20to\x20rerun\x20it\x0a\x0aThis\x20command\x20uses\x20the\x20\x60watchexec\x60\x20tool\x20to\x20watch\x20for\x20changes\x20to\x20files\x20and\x20rerun\x20the\x20specified\x20task\x28s\x29\x2e\x0aIt\x20must\x20be\x20installed\x20for\x20this\x20command\x20to\x20work\x2c\x20but\x20you\x20can\x20install\x20it\x20with\x20\x60mise\x20use\x20\x2dg\x20watchexec\x40latest\x60\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x23\x22Examples\x3a\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x24\x20mise\x20watch\x20\x2dt\x20build\x0a\x20\x20\x20\x20Runs\x20the\x20\x22build\x22\x20tasks\x2e\x20Will\x20re\x2drun\x20the\x20tasks\x20when\x20any\x20of\x20its\x20sources\x20change\x2e\x0a\x20\x20\x20\x20Uses\x20\x22sources\x22\x20from\x20the\x20tasks\x20definition\x20to\x20determine\x20which\x20files\x20to\x20watch\x2e\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20watch\x20\x2dt\x20build\x20\x2d\x2dglob\x20src/\x2a\x2a/\x2a\x2ers\x0a\x20\x20\x20\x20Runs\x20the\x20\x22build\x22\x20tasks\x20but\x20specify\x20the\x20files\x20to\x20watch\x20with\x20a\x20glob\x20pattern\x2e\x0a\x20\x20\x20\x20This\x20overrides\x20the\x20\x22sources\x22\x20from\x20the\x20tasks\x20definition\x2e\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20run\x20\x2dt\x20build\x20\x2d\x2dclear\x0a\x20\x20\x20\x20Extra\x20arguments\x20are\x20passed\x20to\x20watchexec\x2e\x20See\x20\x60watchexec\x20\x2d\x2dhelp\x60\x20for\x20details\x2e\x0a\x22\x23\x0a\x20\x20\x20\x20flag\x20\x22\x2dt\x20\x2d\x2dtask\x22\x20help\x3d\x22Tasks\x20to\x20run\x22\x20var\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cTASK\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20flag\x20\x22\x2dg\x20\x2d\x2dglob\x22\x20help\x3d\x22Files\x20to\x20watch\x5cnDefaults\x20to\x20sources\x20from\x20the\x20tasks\x28s\x29\x22\x20var\x3dtrue\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cGLOB\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20arg\x20\x22\x5bARGS\x5d\x2e\x2e\x2e\x22\x20help\x3d\x22Extra\x20arguments\x22\x20var\x3dtrue\x0a\x7d\x0acmd\x20\x22where\x22\x20help\x3d\x22Display\x20the\x20installation\x20path\x20for\x20a\x20tool\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Display\x20the\x20installation\x20path\x20for\x20a\x20tool\x0a\x0aThe\x20tool\x20must\x20be\x20installed\x20for\x20this\x20to\x20work\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x23\x20Show\x20the\x20latest\x20installed\x20version\x20of\x20node\x0a\x20\x20\x20\x20\x23\x20If\x20it\x20is\x20is\x20not\x20installed\x2c\x20errors\x0a\x20\x20\x20\x20\x24\x20mise\x20where\x20node\x4020\x0a\x20\x20\x20\x20/home/jdx/\x2elocal/share/mise/installs/node/20\x2e0\x2e0\x0a\x0a\x20\x20\x20\x20\x23\x20Show\x20the\x20current\x2c\x20active\x20install\x20directory\x20of\x20node\x0a\x20\x20\x20\x20\x23\x20Errors\x20if\x20node\x20is\x20not\x20referenced\x20in\x20any\x20\x2etool\x2dversion\x20file\x0a\x20\x20\x20\x20\x24\x20mise\x20where\x20node\x0a\x20\x20\x20\x20/home/jdx/\x2elocal/share/mise/installs/node/20\x2e0\x2e0\x0a\x22\x0a\x20\x20\x20\x20arg\x20\x22\x3cTOOL\x40VERSION\x3e\x22\x20help\x3d\x22Tool\x28s\x29\x20to\x20look\x20up\x5cne\x2eg\x2e\x3a\x20ruby\x403\x5cnif\x20\x5c\x22\x40\x3cPREFIX\x3e\x5c\x22\x20is\x20specified\x2c\x20it\x20will\x20show\x20the\x20latest\x20installed\x20version\x5cnthat\x20matches\x20the\x20prefix\x5cnotherwise\x2c\x20it\x20will\x20show\x20the\x20current\x2c\x20active\x20installed\x20version\x22\x0a\x20\x20\x20\x20arg\x20\x22\x5bASDF_VERSION\x5d\x22\x20help\x3d\x22the\x20version\x20prefix\x20to\x20use\x20when\x20querying\x20the\x20latest\x20version\x5cnsame\x20as\x20the\x20first\x20argument\x20after\x20the\x20\x5c\x22\x40\x5c\x22\x5cnused\x20for\x20asdf\x20compatibility\x22\x20hide\x3dtrue\x0a\x7d\x0acmd\x20\x22which\x22\x20help\x3d\x22Shows\x20the\x20path\x20that\x20a\x20tool\x27s\x20bin\x20points\x20to\x2e\x22\x20\x7b\x0a\x20\x20\x20\x20long_help\x20r\x22Shows\x20the\x20path\x20that\x20a\x20tool\x27s\x20bin\x20points\x20to\x2e\x0a\x0aUse\x20this\x20to\x20figure\x20out\x20what\x20version\x20of\x20a\x20tool\x20is\x20currently\x20active\x2e\x22\x0a\x20\x20\x20\x20after_long_help\x20r\x22Examples\x3a\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20which\x20node\x0a\x20\x20\x20\x20/home/username/\x2elocal/share/mise/installs/node/20\x2e0\x2e0/bin/node\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20which\x20node\x20\x2d\x2dplugin\x0a\x20\x20\x20\x20node\x0a\x0a\x20\x20\x20\x20\x24\x20mise\x20which\x20node\x20\x2d\x2dversion\x0a\x20\x20\x20\x2020\x2e0\x2e0\x0a\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dplugin\x22\x20help\x3d\x22Show\x20the\x20plugin\x20name\x20instead\x20of\x20the\x20path\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2d\x2dversion\x22\x20help\x3d\x22Show\x20the\x20version\x20instead\x20of\x20the\x20path\x22\x0a\x20\x20\x20\x20flag\x20\x22\x2dt\x20\x2d\x2dtool\x22\x20help\x3d\x22Use\x20a\x20specific\x20tool\x40version\x5cne\x2eg\x2e\x3a\x20\x60mise\x20which\x20npm\x20\x2d\x2dtool\x3dnode\x4020\x60\x22\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20arg\x20\x22\x3cTOOL\x40VERSION\x3e\x22\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20arg\x20\x22\x3cBIN_NAME\x3e\x22\x20help\x3d\x22The\x20bin\x20to\x20look\x20up\x22\x0a\x7d\x0a\x0asource_code_link_template\x20\x22https\x3a//github\x2ecom/jdx/mise/blob/main/src/cli/\x7b\x7bpath\x7d\x7d\x2ers\x22\x0a\x0acomplete\x20\x22alias\x22\x20run\x3d\x22mise\x20alias\x20ls\x20\x7b\x7bwords\x5bPREV\x5d\x7d\x7d\x20\x7c\x20awk\x20\x27\x7bprint\x20\x242\x7d\x27\x22\x0acomplete\x20\x22config_file\x22\x20type\x3d\x22file\x22\x0acomplete\x20\x22new_plugin\x22\x20run\x3d\x22mise\x20plugins\x20\x2d\x2dall\x22\x0acomplete\x20\x22plugin\x22\x20run\x3d\x22mise\x20plugins\x20\x2d\x2dcore\x20\x2d\x2duser\x22\x0acomplete\x20\x22prefix\x22\x20run\x3d\x22mise\x20ls\x2dremote\x20\x7b\x7bwords\x5bPREV\x5d\x7d\x7d\x22\x0acomplete\x20\x22setting\x22\x20run\x3d\x22mise\x20settings\x20\x2d\x2dkeys\x22\x0acomplete\x20\x22task\x22\x20run\x3d\x22mise\x20tasks\x20\x7c\x20awk\x20\x27\x7bprint\x20\x241\x7d\x27\x22\x0a\x0acomplete\x20\x22tool\x40version\x22\x20run\x3dr\x23\x22\x0acur\x3d\x22\x7b\x7bwords\x5bCURRENT\x5d\x7d\x7d\x22\x0acase\x20\x24cur\x20in\x0a\x20\x20\x2a\x40\x2a\x29\x0a\x20\x20\x20\x20tool\x3d\x22\x24\x28echo\x20\x22\x24cur\x22\x20\x7c\x20cut\x20\x2dd\x27\x40\x27\x20\x2df1\x29\x22\x0a\x20\x20\x20\x20prefix\x3d\x22\x24\x28echo\x20\x22\x24cur\x22\x20\x7c\x20cut\x20\x2dd\x27\x40\x27\x20\x2df2\x29\x22\x0a\x0a\x20\x20\x20\x20versions\x3d\x24\x28mise\x20ls\x2dremote\x20\x24tool\x20\x24prefix\x20\x7c\x20sed\x20\x271\x21G\x3bh\x3b\x24\x21d\x27\x29\x0a\x0a\x20\x20\x20\x20for\x20version\x20in\x20\x24versions\x3b\x20do\x0a\x20\x20\x20\x20\x20\x20echo\x20\x22\x24tool\x40\x24version\x22\x0a\x20\x20\x20\x20done\x0a\x20\x20\x20\x20\x3b\x3b\x0a\x20\x20\x2a\x29\x0a\x20\x20\x20\x20plugins\x3d\x24\x28mise\x20plugins\x20\x2d\x2dall\x29\x0a\x20\x20\x20\x20for\x20plugin\x20in\x20\x24plugins\x3b\x20do\x0a\x20\x20\x20\x20\x20\x20echo\x20\x22\x24plugin\x40\x22\x0a\x20\x20\x20\x20done\x0a\x20\x20\x20\x20\x3b\x3b\x0aesac\x0a\x22\x23\x0a\x0acomplete\x20\x22installed_tool\x40version\x22\x20run\x3dr\x23\x22\x0acur\x3d\x22\x7b\x7bwords\x5bCURRENT\x5d\x7d\x7d\x22\x0acase\x20\x24cur\x20in\x0a\x20\x20\x2a\x40\x2a\x29\x0a\x20\x20\x20\x20tool\x3d\x22\x24\x28echo\x20\x22\x24cur\x22\x20\x7c\x20cut\x20\x2dd\x27\x40\x27\x20\x2df1\x29\x22\x0a\x20\x20\x20\x20prefix\x3d\x22\x24\x28echo\x20\x22\x24cur\x22\x20\x7c\x20cut\x20\x2dd\x27\x40\x27\x20\x2df2\x29\x22\x0a\x0a\x20\x20\x20\x20if\x20\x5b\x20\x21\x20\x2dz\x20\x22\x24prefix\x22\x20\x5d\x3b\x20then\x0a\x20\x20\x20\x20\x20\x20prefix\x3d\x22\x2d\x2dprefix\x20\x24prefix\x22\x0a\x20\x20\x20\x20fi\x0a\x20\x20\x20\x20versions\x3d\x24\x28mise\x20ls\x20\x2d\x2dinstalled\x20\x24tool\x20\x24prefix\x20\x7c\x20awk\x20\x27\x7bprint\x20\x242\x7d\x27\x20\x7c\x20sed\x20\x271\x21G\x3bh\x3b\x24\x21d\x27\x29\x0a\x0a\x20\x20\x20\x20for\x20version\x20in\x20\x24versions\x3b\x20do\x0a\x20\x20\x20\x20\x20\x20echo\x20\x22\x24tool\x40\x24version\x22\x0a\x20\x20\x20\x20done\x0a\x20\x20\x20\x20\x3b\x3b\x0a\x20\x20\x2a\x29\x0a\x20\x20\x20\x20plugins\x3d\x24\x28mise\x20ls\x20\x2d\x2dinstalled\x20\x7c\x20awk\x20\x27\x7bprint\x20\x241\x7d\x27\x20\x7c\x20sed\x20\x271\x21G\x3bh\x3b\x24\x21d\x27\x29\x0a\x20\x20\x20\x20for\x20plugin\x20in\x20\x24plugins\x3b\x20do\x0a\x20\x20\x20\x20\x20\x20echo\x20\x22\x24plugin\x40\x22\x0a\x20\x20\x20\x20done\x0a\x20\x20\x20\x20\x3b\x3b\x0aesac\x0a\x22\x23 SETUVAR --export fifc_editor:nvim SETUVAR fifc_keybinding:\x06 SETUVAR fifc_open_keybinding:ctrl\x2do -SETUVAR fish_color_autosuggestion:4c566a -SETUVAR fish_color_cancel:\x2d\x2dreverse -SETUVAR fish_color_command:88c0d0 -SETUVAR fish_color_comment:4c566a\x1e\x2d\x2ditalics -SETUVAR fish_color_cwd:5e81ac -SETUVAR fish_color_cwd_root:bf616a -SETUVAR fish_color_end:81a1c1 -SETUVAR fish_color_error:bf616a -SETUVAR fish_color_escape:ebcb8b -SETUVAR fish_color_history_current:e5e9f0\x1e\x2d\x2dbold -SETUVAR fish_color_host:a3be8c -SETUVAR fish_color_host_remote:\x1d -SETUVAR fish_color_keyword:\x1d -SETUVAR fish_color_match:\x2d\x2dbackground\x3dbrblue -SETUVAR fish_color_normal:normal -SETUVAR fish_color_operator:81a1c1 -SETUVAR fish_color_option:\x1d -SETUVAR fish_color_param:d8dee9 -SETUVAR fish_color_quote:a3be8c -SETUVAR fish_color_redirection:b48ead\x1e\x2d\x2dbold -SETUVAR fish_color_search_match:\x2d\x2dbold\x1e\x2d\x2dbackground\x3d434c5e -SETUVAR fish_color_selection:d8dee9\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3d434c5e -SETUVAR fish_color_status:red -SETUVAR fish_color_user:a3be8c -SETUVAR fish_color_valid_path:\x2d\x2dunderline SETUVAR fish_cursor_insert:block\x1eblink SETUVAR fish_cursor_unknown:block\x1eblink SETUVAR fish_greeting:\x1d -SETUVAR fish_key_bindings:fish_default_key_bindings -SETUVAR fish_pager_color_background:\x1d -SETUVAR fish_pager_color_completion:e5e9f0 -SETUVAR fish_pager_color_description:ebcb8b\x1e\x2d\x2ditalics -SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline -SETUVAR fish_pager_color_progress:3b4252\x1e\x2d\x2dbackground\x3dd08770 -SETUVAR fish_pager_color_secondary_background:\x1d -SETUVAR fish_pager_color_secondary_completion:\x1d -SETUVAR fish_pager_color_secondary_description:\x1d -SETUVAR fish_pager_color_secondary_prefix:\x1d -SETUVAR fish_pager_color_selected_background:\x2d\x2dbackground\x3d434c5e -SETUVAR fish_pager_color_selected_completion:\x1d -SETUVAR fish_pager_color_selected_description:\x1d -SETUVAR fish_pager_color_selected_prefix:\x1d -SETUVAR --export fish_user_paths:/home/bas/\x2ebun/bin\x1e/home/bas/\x2edotnet/tools\x1e/opt/android\x2dsdk/platform\x2dtools\x1e/usr/lib/ccache/bin\x1e/home/bas/\x2elocal/share/soar/bin\x1e/home/bas/\x2epulumi/bin\x1e/home/bas/\x2ecargo/bin\x1e/home/bas/\x2elocal/bin\x1e/home/bas/bin\x1e/usr/bin/ -SETUVAR --export plugins:https\x3a//github\x2ecom/kidonng/plug\x2efish\x1ehttps\x3a//github\x2ecom/gazorby/fish\x2dabbreviation\x2dtips\x1ehttps\x3a//github\x2ecom/jorgebucaran/autopair\x2efish\x1ehttps\x3a//github\x2ecom/jorgebucaran/replay\x2efish\x1ehttps\x3a//github\x2ecom/franciscolourenco/done\x1ehttps\x3a//github\x2ecom/g\x2dplane/pnpm\x2dshell\x2dcompletion +SETUVAR --export fish_user_paths:/opt/android\x2dndk\x1e/home/bas/\x2ebun/bin\x1e/home/bas/\x2edotnet/tools\x1e/opt/android\x2dsdk/platform\x2dtools\x1e/usr/lib/ccache/bin\x1e/home/bas/\x2elocal/share/soar/bin\x1e/home/bas/\x2epulumi/bin\x1e/home/bas/\x2ecargo/bin\x1e/home/bas/\x2elocal/bin\x1e/home/bas/bin\x1e/usr/bin/ +SETUVAR --export plugins:https\x3a//github\x2ecom/kidonng/plug\x2efish\x1ehttps\x3a//github\x2ecom/gazorby/fish\x2dabbreviation\x2dtips\x1ehttps\x3a//github\x2ecom/jorgebucaran/autopair\x2efish\x1ehttps\x3a//github\x2ecom/jorgebucaran/replay\x2efish\x1ehttps\x3a//github\x2ecom/franciscolourenco/done\x1ehttps\x3a//github\x2ecom/g\x2dplane/pnpm\x2dshell\x2dcompletion\x1ehttps\x3a//github\x2ecom/PatrickF1/fzf\x2efish SETUVAR pure_begin_prompt_with_current_directory:true SETUVAR pure_check_for_new_release:false SETUVAR pure_color_at_sign:pure_color_mute diff --git a/fish/.config/fish/functions/but.fish b/fish/.config/fish/functions/but.fish new file mode 100644 --- /dev/null +++ b/fish/.config/fish/functions/but.fish @@ -0,0 +1,3 @@ +function but --wraps=gitbutler-tauri --description 'alias but gitbutler-tauri' + gitbutler-tauri $argv +end diff --git a/fish/.config/fish/functions/diff.fish b/fish/.config/fish/functions/diff.fish new file mode 100644 --- /dev/null +++ b/fish/.config/fish/functions/diff.fish @@ -0,0 +1,3 @@ +function diff --description 'alias diff diff --width=(tput cols)' + command diff --width=(tput cols) --color $argv +end diff --git a/fish/.config/fish/functions/dotfiles_add.fish b/fish/.config/fish/functions/dotfiles_add.fish new file mode 100644 --- /dev/null +++ b/fish/.config/fish/functions/dotfiles_add.fish @@ -0,0 +1,32 @@ +# TODO: prompt to update/add existing files/directories + +function dotfiles_add --description 'Move directory to the dotfiles repo and stow it' + if not test -d ~/dotfiles + echo "~/dotfiles does not exist." + return 1 + end + + if count $argv >/dev/null && test $argv[1] != -h && test $argv[1] != --help + set source $argv[1] + else + echo "Usage: dotfiles_add " + return 1 + end + + if test -d $source + set package (path basename $source) + set target ~/dotfiles/$package/$(realpath -s --relative-to=$HOME $source) + + if test -d $target + echo "Directory $target already exists." + return 1 + end + else + echo "$source does not exist." + return 1 + end + + echo "Moving $source to $target" + mv $source $target + stow $package +end diff --git a/fish/.config/fish/functions/fish_load_sudo_alias.fish b/fish/.config/fish/functions/fish_load_sudo_alias.fish new file mode 100644 --- /dev/null +++ b/fish/.config/fish/functions/fish_load_sudo_alias.fish @@ -0,0 +1,32 @@ +# from https://gist.github.com/NotTheDr01ds/6357e48b511735c42b94c4cc081ac5dc +# from https://stackoverflow.com/a/70491301/5082094 +function fish_load_sudo_alias + function sudo + if functions -q -- "$argv[1]" + # Create a string which quotes each of the original arguments + # so that they can be safely passed into the new fish + # instance that is called by sudo. + set cmdline ( + for arg in $argv + printf "\"%s\" " $arg + end + ) + # We need to pass the function source to another fish instance. + # Since it is multi-line, any attempt to store the function in a + # variable results in an array, which also can't be passed to + # another fish instance. + # + # So first we escape the existing function (mostly in case it + # has '\n' literals in it, then we join it on "\n". + # + # After passing it into fish, the new shell splits it, + # unescapes it, and passes the function declaration to + # `source`, which loads it into memory in the new shell. + set -x function_src (string join "\n" (string escape --style=var (functions "$argv[1]"))) + set argv fish -c 'string unescape --style=var (string split "\n" $function_src) | source; '$cmdline + command sudo -E $argv + else + command sudo $argv + end + end +end diff --git a/fish/.config/fish/functions/fish_remove_list.fish b/fish/.config/fish/functions/fish_remove_list.fish --- a/fish/.config/fish/functions/fish_remove_list.fish +++ b/fish/.config/fish/functions/fish_remove_list.fish @@ -3,14 +3,14 @@ set list_name $argv[1] set list $$list_name set target (printf %s\n $list | fzf -1 -q "$argv[2]") - test -n $target || return 1 + test -n "$target" || return 1 - if not set -l index (contains -i "$target" $fish_user_paths) + if not set index (contains -i "$target" $list) echo "'$target' was not found in $list_name" return 1 end if confirm "Remove '$target' from $list_name?" - set -e $list_name[1][$index] && echo -e "\033[2KRemoved '$target' from \$fish_user_paths" + set -e $list_name[1][$index] && echo -e "\033[2KRemoved '$target' from \$$list_name" end end diff --git a/fish/.config/fish/functions/jj-stack.fish b/fish/.config/fish/functions/jj-stack.fish new file mode 100644 --- /dev/null +++ b/fish/.config/fish/functions/jj-stack.fish @@ -0,0 +1,3 @@ +function jj-stack --wraps='bunx jjstack' --description 'alias jj-stack bunx jj-stack' + bunx jj-stack $argv +end diff --git a/fish/.config/fish/functions/jst.fish b/fish/.config/fish/functions/jst.fish new file mode 100644 --- /dev/null +++ b/fish/.config/fish/functions/jst.fish @@ -0,0 +1,3 @@ +function jst --wraps='bunx jjstack' --wraps='bunx jj-stack' --description 'alias jst bunx jj-stack' + bunx jj-stack $argv +end diff --git a/fish/.config/fish/functions/rga-fzf.fish b/fish/.config/fish/functions/rga-fzf.fish new file mode 100644 --- /dev/null +++ b/fish/.config/fish/functions/rga-fzf.fish @@ -0,0 +1,16 @@ +function rga-fzf + set RG_PREFIX 'rga --files-with-matches' + if test (count $argv) -gt 1 + set RG_PREFIX "$RG_PREFIX $argv[1..-2]" + end + set -l file $file + set file ( + FZF_DEFAULT_COMMAND="$RG_PREFIX '$argv[-1]'" \ + fzf --sort \ + --preview='test ! -z {} && \ + rga --pretty --context 5 {q} {}' \ + --phony -q "$argv[-1]" \ + --bind "change:reload:$RG_PREFIX {q}" \ + --preview-window='50%:wrap' + ) && echo "opening $file" && open "$file" +end diff --git a/fish/.config/fish/functions/set-font.fish b/fish/.config/fish/functions/set-font.fish new file mode 100644 --- /dev/null +++ b/fish/.config/fish/functions/set-font.fish @@ -0,0 +1,4 @@ +function set-font + gsettings set org.gnome.desktop.interface font-name $argv + gsettings set org.gnome.desktop.interface document-font-name $argv +end diff --git a/fish/.config/fish/functions/yay.fish b/fish/.config/fish/functions/yay.fish --- a/fish/.config/fish/functions/yay.fish +++ b/fish/.config/fish/functions/yay.fish @@ -1,3 +1,26 @@ function yay - command yay --config /home/bas/.config/pacman/pacman.conf $argv + # if type -q paru + # paru $argv + # return $status + # end + + if not command -q yay + fish_command_not_found yay + return 1 + end + + if command -q mise && mise deactivate 2>/dev/null + function __yay_reactivate_mise --on-event fish_prompt + functions -e __yay_reactivate_mise + mise activate | source + end + end + + command yay $argv + + # if test -f $HOME/.config/pacman/pacman.conf + # command yay --config $HOME/.config/pacman/pacman.conf $argv + # else + # command yay $argv + # end end diff --git a/fontconfig/.config/fontconfig/conf.d/53-cjk.conf b/fontconfig/.config/fontconfig/conf.d/53-cjk.conf new file mode 100644 --- /dev/null +++ b/fontconfig/.config/fontconfig/conf.d/53-cjk.conf @@ -0,0 +1,481 @@ + + + + + + + + + serif + + + Noto Serif + + + + + + + ja + + + serif + + + Noto Serif CJK JP + + + + + + + ko + + + serif + + + Noto Serif CJK KR + + + + + + + zh + + + serif + + + Noto Serif CJK SC + + + + + + zh-hans + + + serif + + + Noto Serif CJK SC + + + + + + zh-hant + + + serif + + + Noto Serif CJK TC + + + + + + + zh-cn + + + serif + + + Noto Serif CJK SC + + + + + + zh-tw + + + serif + + + Noto Serif CJK TC + + + + + + + + sans-serif + + + Noto Sans + + + + + + + ja + + + sans-serif + + + Noto Sans CJK JP + + + + + + + ko + + + sans-serif + + + Noto Sans CJK KR + + + + + + + zh + + + sans-serif + + + Noto Sans CJK SC + + + + + + zh-hans + + + sans-serif + + + Noto Sans CJK SC + + + + + + zh-hant + + + sans-serif + + + Noto Sans CJK TC + + + + + + zh-hant-hk + + + sans-serif + + + Noto Sans CJK HK + + + + + + + zh-cn + + + sans-serif + + + Noto Sans CJK SC + + + + + + zh-tw + + + sans-serif + + + Noto Sans CJK TC + + + + + + zh-hk + + + sans-serif + + + Noto Sans CJK HK + + + + + + + + + + + + + + + + + + ja + + + monospace + + + Hack Nerd Font + + + + + + + + ko + + + monospace + + + Hack Nerd Font + + + + + + + + zh + + + monospace + + + Hack Nerd Font + + + + + + + zh-hans + + + monospace + + + Hack Nerd Font + + + + + + + zh-hant + + + monospace + + + Hack Nerd Font + + + + + + + zh-hant-hk + + + monospace + + + Hack Nerd Font + + + + + + + + zh-cn + + + monospace + + + Hack Nerd Font + + + + + + + zh-tw + + + monospace + + + Hack Nerd Font + + + + + + + zh-hk + + + monospace + + + Hack Nerd Font + + + + + + + + + system-ui + + + Noto Sans + + + + + + + ja + + + system-ui + + + Noto Sans CJK JP + + + + + + + ko + + + system-ui + + + Noto Sans CJK KR + + + + + + + zh + + + system-ui + + + Noto Sans CJK SC + + + + + + zh-hans + + + system-ui + + + Noto Sans CJK SC + + + + + + zh-hant + + + system-ui + + + Noto Sans CJK TC + + + + + + zh-hant-hk + + + system-ui + + + Noto Sans CJK HK + + + + + + + zh-cn + + + system-ui + + + Noto Sans CJK SC + + + + + + zh-tw + + + system-ui + + + Noto Sans CJK TC + + + + + + zh-hk + + + system-ui + + + Noto Sans CJK HK + + + diff --git a/fontconfig/.config/fontconfig/conf.d/70-freetype-envision-droid-sans.conf b/fontconfig/.config/fontconfig/conf.d/70-freetype-envision-droid-sans.conf new file mode 100644 --- /dev/null +++ b/fontconfig/.config/fontconfig/conf.d/70-freetype-envision-droid-sans.conf @@ -0,0 +1,26 @@ + + + + Tweaks for the Droid Sans fonts with the hieroglyphic typefaces + + + + + + Droid Sans Fallback + + + + + Droid Sans Japanese + + + + + diff --git a/gh/.config/gh/config.yml b/gh/.config/gh/config.yml new file mode 100644 --- /dev/null +++ b/gh/.config/gh/config.yml @@ -0,0 +1,17 @@ +# The current version of the config schema +version: 1 +# What protocol to use when performing git operations. Supported values: ssh, https +git_protocol: ssh +# What editor gh should run when creating issues, pull requests, etc. If blank, will refer to environment. +editor: +# When to interactively prompt. This is a global config that cannot be overridden by hostname. Supported values: enabled, disabled +prompt: enabled +# A pager program to send command output to, e.g. "less". Set the value to "cat" to disable the pager. +pager: +# Aliases allow you to create nicknames for gh commands +aliases: + co: pr checkout +# The path to a unix socket through which send HTTP connections. If blank, HTTP traffic will be handled by net/http.DefaultTransport. +http_unix_socket: +# What web browser gh should use when opening URLs. If blank, will refer to environment. +browser: diff --git a/gh/.config/gh/hosts.yml b/gh/.config/gh/hosts.yml new file mode 100644 --- /dev/null +++ b/gh/.config/gh/hosts.yml @@ -0,0 +1,5 @@ +github.com: + git_protocol: ssh + users: + brw: + user: brw diff --git a/ghostty/.config/ghostty/config b/ghostty/.config/ghostty/config new file mode 100644 --- /dev/null +++ b/ghostty/.config/ghostty/config @@ -0,0 +1,40 @@ +quit-after-last-window-closed = false +maximize = true + +font-size = 10.5 +font-feature = "-calt" + +# font: Google Sans Code +#font-family = "Google Sans Code NF" +#adjust-underline-position = 1 +#adjust-underline-thickness = -1 + +# font: Hack +font-family = "Hack Nerd Font" +adjust-cell-height = 1 + +# fallbacks +font-family = "Noto Sans Mono" +font-family = "Noto Sans Mono CJK JP" + +theme = "Nord" + +# now handled by fish? kinda? seems like I still need these settings though +#shell-integration-features = "no-cursor" +shell-integration = "fish" +shell-integration-features = "no-cursor,sudo,ssh-env,ssh-terminfo" +cursor-style = "block" + +# tmux? +cursor-click-to-move = true + +# TODO: figure out why scroll speed is different between Ghostty and tmux +mouse-scroll-multiplier = 1 + +keybind = clear +keybind = ctrl+shift+c=copy_to_clipboard +keybind = ctrl+shift+v=paste_from_clipboard +keybind = ctrl+equal=increase_font_size:1 +keybind = ctrl+plus=increase_font_size:1 +keybind = ctrl+minus=decrease_font_size:1 +keybind = ctrl+zero=reset_font_size diff --git a/ghostty/.config/systemd/user/ghostty-auto-reload-config.service b/ghostty/.config/systemd/user/ghostty-auto-reload-config.service new file mode 100644 --- /dev/null +++ b/ghostty/.config/systemd/user/ghostty-auto-reload-config.service @@ -0,0 +1,7 @@ +[Unit] +Description=Ghostty automatic config reload using entr +BindsTo=app-com.mitchellh.ghostty.service + +[Service] +Type=simple +ExecStart=/usr/bin/sh -c "echo ~/.config/ghostty/config | /usr/bin/entr -np pkill -SIGUSR2 ghostty" diff --git a/git/.gitconfig b/git/.gitconfig --- a/git/.gitconfig +++ b/git/.gitconfig @@ -1,18 +1,29 @@ [user] email = hi@bas.sh name = Bas van den Wollenberg + signingkey = /home/bas/.ssh/id_ed25519_bas [core] autocrlf = input editor = nvim pager = delta + difftool = true + +[pager] + difftool = true + ; diff = diffnav [alias] - showext = show --ext-diff - logext = log --ext-diff + showt = show --ext-diff + logt = log --ext-diff + difft = difftool + diffn = -c pager.diff=diffnav diff + prune-local = !git branch -vv | awk '/: gone]/{print $1}' | xargs git branch -d + cd = "!fish -c \"if test -d $1 && read -p 'echo -n \"Directory exists. Delete first? Y/n \"' | grep -v '[yY ]'; exit 1; else rm -rf (path basename $1); end; git clone $1 && cd (path basename $1)\"" + bl = branchless [credential] - helper = store + helper = /usr/lib/git-core/git-credential-libsecret [filter "lfs"] clean = git-lfs clean -- %f @@ -27,27 +38,43 @@ [interactive] diffFilter = delta --color-only [delta] - syntax-theme = Nord navigate = true + syntax-theme = Nord + +[diff] + colorMoved = default + ; external = difft "$LOCAL" "$REMOTE" + tool = difftastic + algorithm = histogram [difftool] prompt = false - external = difft --display inline + +[difftool "difftastic"] + cmd = difft "$LOCAL" "$REMOTE" + +[difftool "diffnav"] + cmd = diffnav "$LOCAL" "$REMOTE" [init] - defaultBranch = main + defaultBranch = main [pull] rebase = true [rebase] autostash = true + updaterefs = true [merge] autoStash = true + conflictstyle = zdiff3 + summary = true + ff = only [commit] verbose = true + gpgsign = true [submodule] recurse = true @@ -56,7 +83,35 @@ [push] autoSetupRemote = true [rerere] - enabled = true + enabled = true [protocol "file"] - allow = always + allow = always + +[gpg] + format = ssh + +[tag] + gpgSign = true + sort = -version:refname + +[url "git@github.com:"] + insteadOf = git://github.com/ +; insteadOf = http://github.com/ +; insteadOf = https://github.com/ + +[url "git+ssh://brw@git.launchpad.net/"] + insteadof = lp: + +[fetch] + prune = true + +[cola] + theme = default + icontheme = dark + expandtab = true + refreshonfocus = true + resizebrowsercolumns = true + +[gui] + editor = nvim diff --git a/glow/.config/glow/glow.yml b/glow/.config/glow/glow.yml new file mode 100644 --- /dev/null +++ b/glow/.config/glow/glow.yml @@ -0,0 +1,8 @@ +# style name or JSON path (default "auto") +style: "auto" +# mouse support (TUI-mode only) +mouse: true +# use pager to display markdown +pager: true +# word-wrap at width +width: 80 diff --git a/gtk/.config/gtk-3.0/gtk.css b/gtk/.config/gtk-3.0/gtk.css --- a/gtk/.config/gtk-3.0/gtk.css +++ b/gtk/.config/gtk-3.0/gtk.css @@ -1,3 +1,9 @@ -VteTerminal, vte-terminal { +VteTerminal, +vte-terminal { padding: 10px; } + +treeview { + padding: 2px; + -gtktreeview-horizontal-separator: 5; +} diff --git a/htop/.config/htop/htoprc b/htop/.config/htop/htoprc new file mode 100644 --- /dev/null +++ b/htop/.config/htop/htoprc @@ -0,0 +1,64 @@ +# Beware! This file is rewritten by htop when settings are changed in the interface. +# The parser is also very primitive, and not human-friendly. +htop_version=3.4.1-3.4.1 +config_reader_min_version=3 +fields=13 14 0 48 17 18 38 39 40 119 2 46 47 132 49 20 53 1 +hide_kernel_threads=1 +hide_userland_threads=1 +hide_running_in_container=0 +shadow_other_users=0 +show_thread_names=1 +show_program_path=1 +highlight_base_name=1 +highlight_deleted_exe=1 +shadow_distribution_path_prefix=0 +highlight_megabytes=1 +highlight_threads=1 +highlight_changes=0 +highlight_changes_delay_secs=5 +find_comm_in_cmdline=1 +strip_exe_from_cmdline=1 +show_merged_command=1 +header_margin=1 +screen_tabs=1 +detailed_cpu_time=0 +cpu_count_from_one=0 +show_cpu_usage=1 +show_cpu_frequency=1 +show_cpu_temperature=1 +degree_fahrenheit=0 +show_cached_memory=1 +update_process_names=0 +account_guest_in_cpu_meter=0 +color_scheme=0 +enable_mouse=1 +delay=15 +hide_function_bar=0 +header_layout=two_50_50 +column_meters_0=LeftCPUs Memory Swap DiskIO NetworkIO +column_meter_modes_0=1 1 1 1 2 +column_meters_1=RightCPUs GPU Tasks LoadAverage Uptime +column_meter_modes_1=1 1 2 2 2 +tree_view=0 +sort_key=46 +tree_sort_key=46 +sort_direction=-1 +tree_sort_direction=-1 +tree_view_always_by_pid=0 +all_branches_collapsed=0 +screen:Main=UTIME STIME PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE M_SWAP STATE PERCENT_CPU PERCENT_MEM GPU_PERCENT TIME STARTTIME ELAPSED Command +.sort_key=PERCENT_CPU +.tree_sort_key=PERCENT_CPU +.tree_view_always_by_pid=0 +.tree_view=0 +.sort_direction=-1 +.tree_sort_direction=-1 +.all_branches_collapsed=0 +screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE PERCENT_SWAP_DELAY PERCENT_IO_DELAY Command +.sort_key=IO_RATE +.tree_sort_key=PID +.tree_view_always_by_pid=0 +.tree_view=0 +.sort_direction=-1 +.tree_sort_direction=1 +.all_branches_collapsed=0 diff --git a/mise/.config/mise/config.toml b/mise/.config/mise/config.toml --- a/mise/.config/mise/config.toml +++ b/mise/.config/mise/config.toml @@ -1,9 +1,14 @@ [tools] node = "latest" -lua = "latest" -bun = "latest" +lua = ["5.1", "latest"] usage = "latest" go = "latest" +uv = "latest" +bun = "latest" +rust = "nightly" [settings] experimental = true + +trusted_config_paths = ['~/dev'] +idiomatic_version_file_enable_tools = ["ruby"] diff --git a/mise/.default-npm-packages b/mise/.default-npm-packages --- a/mise/.default-npm-packages +++ b/mise/.default-npm-packages @@ -1,5 +1,7 @@ +npm neovim prettier -@fsouza/prettierd +@prettier/plugin-xml +#@fsouza/prettierd eslint -eslint_d +#eslint_d diff --git a/mise/.default-python-packages b/mise/.default-python-packages --- a/mise/.default-python-packages +++ b/mise/.default-python-packages @@ -1,5 +1,8 @@ +pip pynvim virtualenv pipenv norminette; python_version >= '3' c-formatter-42; python_version >= '3' +cyberdrop-dl-patched +tmux-language-server diff --git a/mpv/.config/mpv/fonts/uosc_icons.otf b/mpv/.config/mpv/fonts/uosc_icons.otf new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/fonts/uosc_icons.otf @@ -0,0 +1,1 @@ +/usr/share/mpv/fonts/uosc_icons.otf \ No newline at end of file diff --git a/mpv/.config/mpv/fonts/uosc_textures.ttf b/mpv/.config/mpv/fonts/uosc_textures.ttf new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/fonts/uosc_textures.ttf @@ -0,0 +1,1 @@ +/usr/share/mpv/fonts/uosc_textures.ttf \ No newline at end of file diff --git a/mpv/.config/mpv/mpv.conf b/mpv/.config/mpv/mpv.conf --- a/mpv/.config/mpv/mpv.conf +++ b/mpv/.config/mpv/mpv.conf @@ -1,6 +1,17 @@ hwdec=auto #osd-msg1=${playback-time/full} / ${duration} (${percent-pos}%)\nframe: ${estimated-frame-number} / ${estimated-frame-count} screenshot-format=png +screenshot-template="%F - [%P] (%#01n)" # cache-on-disk=yes # cache=yes # keep-open=yes + +vo=gpu-next +gpu-api=opengl +# profile=fast +# sigmoid-upscaling=yes +# opengl-glfinish=yes +# force-window=yes +# video-sync=display-resample + +save-position-on-quit=yes diff --git a/mpv/.config/mpv/script-opts/PureMPV.conf b/mpv/.config/mpv/script-opts/PureMPV.conf new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/script-opts/PureMPV.conf @@ -0,0 +1,1 @@ +selection=clipboard diff --git a/mpv/.config/mpv/script-opts/reduce_stream_cache.conf b/mpv/.config/mpv/script-opts/reduce_stream_cache.conf new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/script-opts/reduce_stream_cache.conf @@ -0,0 +1,1 @@ +/home/bas/git/mpv_reduce_stream_cache/script-opts/reduce_stream_cache.conf \ No newline at end of file diff --git a/mpv/.config/mpv/script-opts/stream_replay.conf b/mpv/.config/mpv/script-opts/stream_replay.conf new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/script-opts/stream_replay.conf @@ -0,0 +1,1 @@ +/home/bas/git/mpv_reduce_stream_cache/script-opts/stream_replay.conf \ No newline at end of file diff --git a/mpv/.config/mpv/script-opts/uosc.conf b/mpv/.config/mpv/script-opts/uosc.conf new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/script-opts/uosc.conf @@ -0,0 +1,238 @@ +# Display style of current position. available: line, bar +timeline_style=line +# Line display style config +timeline_line_width=2 +# Timeline size when fully expanded, in pixels, 0 to disable +timeline_size=32 +# Comma separated states when element should always be fully visible. +# Available: paused, audio, image, video, idle, windowed, fullscreen +timeline_persistency= +# Top border of background color to help visually separate timeline from video +timeline_border=1 +# When scrolling above timeline, wheel will seek by this amount of seconds. +# Default uses fast seeking. Add `!` suffix to enable exact seeks. Example: `5!` +timeline_step=5 +# Render cache indicators for streaming content +timeline_cache=yes + +# When to display an always visible progress bar (minimized timeline). Can be: windowed, fullscreen, always, never +# Can also be toggled on demand with `toggle-progress` command. +progress=never +progress_size=2 +progress_line_width=20 + +# A comma delimited list of controls above the timeline. Set to `never` to disable. +# Parameter spec: enclosed in `{}` means value, enclosed in `[]` means optional +# Full item syntax: `[<[!]{disposition1}[,[!]{dispositionN}]>]{element}[:{paramN}][#{badge}[>{limit}]][?{tooltip}]` +# Common properties: +# `{icon}` - parameter used to specify an icon name (example: `face`) +# - pick here: https://fonts.google.com/icons?icon.platform=web&icon.set=Material+Icons&icon.style=Rounded +# `{element}`s and their parameters: +# `{shorthand}` - preconfigured shorthands: +# `play-pause`, `menu`, `subtitles`, `audio`, `video`, `playlist`, +# `chapters`, `editions`, `stream-quality`, `open-file`, `items`, +# `next`, `prev`, `first`, `last`, `audio-device`, `fullscreen`, +# `loop-playlist`, `loop-file`, `shuffle`, `autoload` +# `speed[:{scale}]` - display speed slider, [{scale}] - factor of controls_size, default: 1.3 +# `command:{icon}:{command}` - button that executes a {command} when pressed +# `toggle:{icon}:{prop}[@{owner}]` - button that toggles mpv property. shorthand for yes/no cycle below +# `cycle:{default_icon}:{prop}[@{owner}]:{value1}[={icon1}][!]/{valueN}[={iconN}][!]` +# - button that cycles mpv property between values, each optionally having different icon and active flag +# - presence of `!` at the end will style the button as active +# - `{owner}` is the name of a script that manages this property if any. Set to `uosc` to tap into uosc options. +# `gap[:{scale}]` - display an empty gap +# {scale} - factor of controls_size, default: 0.3 +# `space` - fills all available space between previous and next item, useful to align items to the right +# - multiple spaces divide the available space among themselves, which can be used for centering +# `button:{name}` - button whose state, look, and click action are managed by external script +# Item visibility control: +# `<[!]{disposition1}[,[!]{dispositionN}]>` - optional prefix to control element's visibility +# - `{disposition}` can be one of: +# - `idle` - true if mpv is in idle mode (no file loaded) +# - `image` - true if current file is a single image +# - `audio` - true for audio only files +# - `video` - true for files with a video track +# - `has_many_video` - true for files with more than one video track +# - `has_image` - true for files with a cover or other image track +# - `has_audio` - true for files with an audio track +# - `has_many_audio` - true for files with more than one audio track +# - `has_sub` - true for files with an subtitle track +# - `has_many_sub` - true for files with more than one subtitle track +# - `has_many_edition` - true for files with more than one edition +# - `has_chapter` - true for files with chapter list +# - `stream` - true if current file is read from a stream +# - `has_playlist` - true if current playlist has 2 or more items in it +# - prefix with `!` to negate the required disposition +# Examples: +# - `stream-quality` - show stream quality button only for streams +# - `audio` - show audio tracks button for all files that have +# an audio track, but are not exclusively audio only files +# Place `#{badge}[>{limit}]` after the element params to give it a badge. Available badges: +# `sub`, `audio`, `video` - track type counters +# `{mpv_prop}` - any mpv prop that makes sense to you: https://mpv.io/manual/master/#property-list +# - if prop value is an array it'll display its size +# `>{limit}` will display the badge only if it's numerical value is above this threshold. +# Example: `#audio>1` +# Place `?{tooltip}` after the element config to give it a tooltip. +# Example implementations: +# menu = command:menu:script-binding uosc/menu-blurred?Menu +# subtitles = command:subtitles:script-binding uosc/subtitles#sub?Subtitles +# fullscreen = cycle:crop_free:fullscreen:no/yes=fullscreen_exit!?Fullscreen +# loop-playlist = cycle:repeat:loop-playlist:no/inf!?Loop playlist +# toggle:{icon}:{prop} = cycle:{icon}:{prop}:no/yes! +controls=menu,gap,subtitles,audio,video,editions,stream-quality,gap,space,speed,space,shuffle,loop-playlist,loop-file,gap,prev,items,next,gap,fullscreen +controls_size=32 +controls_margin=8 +controls_spacing=2 +controls_persistency= + +# Where to display volume controls: none, left, right +volume=right +volume_size=40 +volume_border=1 +volume_step=1 +volume_persistency= + +# Playback speed widget: mouse drag or wheel to change, click to reset +speed_step=0.1 +speed_step_is_factor=no +speed_persistency= + +# Controls all menus, such as context menu, subtitle loader/selector, etc +menu_item_height=36 +menu_min_width=260 +menu_padding=4 +# Determines if `/` or `ctrl+f` is required to activate the search, or if typing +# any text is sufficient. +# When enabled, you can no longer toggle a menu off with the same key that opened it, if the key is a unicode character. +menu_type_to_search=yes + +# Top bar with window controls and media title +# Can be: never, no-border, always +top_bar=no-border +top_bar_size=40 +# Can be: `no` (hide), left or right +top_bar_controls=right +# Can be: `no` (hide), `yes` (inherit title from mpv.conf), or a custom template string +top_bar_title=yes +# Template string to enable alternative top bar title. If alt title matches main title, +# it'll be hidden. Tip: use `${media-title}` for main, and `${filename}` for alt title. +top_bar_alt_title= +# Can be: +# `below` => display alt title below the main one +# `toggle` => toggle the top bar title text between main and alt by clicking +# the top bar, or calling `toggle-title` binding +top_bar_alt_title_place=below +# Flash top bar when any of these file types is loaded. Available: audio,video,image,chapter +top_bar_flash_on=video,audio +top_bar_persistency= + +# Window border drawn in no-border mode +window_border_size=1 + +# If there's no playlist and file ends, load next file in directory +# Uses `load_types` config below to determine what type of file to load next. +# When enabled, usoc will set mpv config `keep-open` to `yes`, and `keep-open-pause` to `no`. +autoload=no +# Enable uosc's playlist/directory shuffle mode +# This simply makes the next selected playlist or directory item be random, just +# like any other player in the world. It also has an easily togglable control button. +shuffle=no + +# Scale the interface by this factor +scale=1 +# Scale in fullscreen +scale_fullscreen=1.3 +# Adjust the text scaling to fit your font +font_scale=1 +# Border of text and icons when drawn directly on top of video +text_border=1.2 +# Border radius of buttons, menus, and all other rectangles +border_radius=4 +# A comma delimited list of color overrides in RGB HEX format. Defaults: +# foreground=ffffff,foreground_text=000000,background=000000,background_text=ffffff,curtain=111111,success=a5e075,error=ff616e +color= +# A comma delimited list of opacity overrides for various UI element backgrounds and shapes. +# This does not affect any text, which is always rendered fully opaque. Defaults: +# timeline=0.9,position=1,chapters=0.8,slider=0.9,slider_gauge=1,controls=0,speed=0.6,menu=1,submenu=0.4,border=1,title=1,tooltip=1,thumbnail=1,curtain=0.8,idle_indicator=0.8,audio_indicator=0.5,buffering_indicator=0.3,playlist_position=0.8 +opacity=timeline=0.6 +# A comma delimited list of features to refine at a cost of some performance impact. +# text_width - Use a more accurate text width measurement that measures each text string individually +# instead of just measuring the width of known letters once and adding them up. +# sorting - Use filename sorting that handles non-english languages better, especially asian ones. +# At the moment, this is only available on windows, and has no effect on other platforms. +refine= +# Duration of animations in milliseconds +animation_duration=100 +# Execute command for background clicks shorter than this number of milliseconds, 0 to disable +# Execution always waits for `input-doubleclick-time` to filter out double-clicks +click_threshold=0 +click_command=cycle pause; script-binding uosc/flash-pause-indicator +# Flash duration in milliseconds used by `flash-{element}` commands +flash_duration=1000 +# Distances in pixels below which elements are fully faded in/out +proximity_in=40 +proximity_out=120 +# Use only bold font weight throughout the whole UI +font_bold=no +# One of `total`, `playtime-remaining` (scaled by the current speed), `time-remaining` (remaining length of file) +destination_time=playtime-remaining +# Display sub second fraction in timestamps up to this precision +time_precision=0 +# Display stream's buffered time in timeline if it's lower than this amount of seconds, 0 to disable +buffered_time_threshold=60 +# Hide UI when mpv autohides the cursor. Timing is controlled by `cursor-autohide` in `mpv.conf` (in milliseconds). +autohide=no +# Can be: flash, static, manual (controlled by flash-pause-indicator and decide-pause-indicator commands) +pause_indicator=flash +# Sizes to list in stream quality menu +stream_quality_options=4320,2160,1440,1080,720,480,360,240,144 +# Types to identify media files +video_types=3g2,3gp,asf,avi,f4v,flv,h264,h265,m2ts,m4v,mkv,mov,mp4,mp4v,mpeg,mpg,ogm,ogv,rm,rmvb,ts,vob,webm,wmv,y4m +audio_types=aac,ac3,aiff,ape,au,cue,dsf,dts,flac,m4a,mid,midi,mka,mp3,mp4a,oga,ogg,opus,spx,tak,tta,wav,weba,wma,wv +image_types=apng,avif,bmp,gif,j2k,jp2,jfif,jpeg,jpg,jxl,mj2,png,svg,tga,tif,tiff,webp +subtitle_types=aqt,ass,gsub,idx,jss,lrc,mks,pgs,pjs,psb,rt,sbv,slt,smi,sub,sup,srt,ssa,ssf,ttxt,txt,usf,vt,vtt +playlist_types=m3u,m3u8,pls,url,cue +# Type pools used by file navigation and `autoload` to determine what type of file to load next +# Available: video,audio,image,playlist,same. `same` means the same type pool (not just extension) as currently open file. +load_types=video,audio,image +# Default open-file menu directory. Use `{drives}` to open drives menu on windows (defaults to `/` on unix). +default_directory=~/ +# List hidden files when reading directories. Due to environment limitations, this currently only hides +# files starting with a dot. Doesn't hide hidden files on windows (we have no way to tell they're hidden). +show_hidden_files=no +# Move files to trash (recycle bin) when deleting files. Dependencies: +# - Linux: `sudo apt install trash-cli` +# - MacOS: `brew install trash` +use_trash=no +# Adjusted osd margins based on the visibility of UI elements +adjust_osd_margins=yes + +# Adds chapter range indicators to some common chapter types. +# Additionally to displaying the start of the chapter as a diamond icon on top of the timeline, +# the portion of the timeline of that chapter range is also colored based on the config below. +# +# The syntax is a comma-delimited list of `{type}:{color}` pairs, where: +# `{type}` => range type. Currently supported ones are: +# - `openings`, `endings` => anime openings/endings +# - `intros`, `outros` => video intros/outros +# - `ads` => segments created by sponsor-block software like https://github.com/po5/mpv_sponsorblock +# `{color}` => an RGB(A) HEX color code (`rrggbb`, or `rrggbbaa`) +# +# To exclude marking any of the range types, simply remove them from the list. +chapter_ranges=openings:30abf964,endings:30abf964,ads:c54e4e80 +# Add alternative lua patterns to identify beginnings of simple chapter ranges (except for `ads`) +# Syntax: `{type}:{pattern}[,{patternN}][;{type}:{pattern}[,{patternN}]]` +chapter_range_patterns=openings:オープニング;endings:エンディング + +# Localization language priority from highest to lowest. +# Also controls what languages are fetched by `download-subtitles` menu. +# Built in languages can be found in `uosc/intl`. +# `slang` is a keyword to inherit values from `--slang` mpv config. +# Supports paths to custom json files: `languages=~~/custom.json,slang,en` +languages=slang,en + +# A comma separated list of element IDs to disable. Available IDs: +# window_border, top_bar, timeline, controls, volume, +# idle_indicator, audio_indicator, buffering_indicator, pause_indicator +disable_elements= diff --git a/mpv/.config/mpv/scripts/PureMPV b/mpv/.config/mpv/scripts/PureMPV new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/scripts/PureMPV @@ -0,0 +1,1 @@ +/home/bas/git/PureMPV \ No newline at end of file diff --git a/mpv/.config/mpv/scripts/createchapter.lua b/mpv/.config/mpv/scripts/createchapter.lua new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/scripts/createchapter.lua @@ -0,0 +1,95 @@ +local utils = require("mp.utils") + +local function create_chapter() + local time_pos = mp.get_property_number("time-pos") + local time_pos_osd = mp.get_property_osd("time-pos/full") + local curr_chapter = mp.get_property_number("chapter") + local chapter_count = mp.get_property_number("chapter-list/count") + local all_chapters = mp.get_property_native("chapter-list") + mp.osd_message(time_pos_osd, 1) + + if chapter_count == 0 then + all_chapters[1] = { + title = "chapter_1", + time = time_pos + } + -- We just set it to zero here so when we add 1 later it ends up as 1 + -- otherwise it's probably "nil" + curr_chapter = 0 + -- note that mpv will treat the beginning of the file as all_chapters[0] when using pageup/pagedown + -- so we don't actually have to worry if the file doesn't start with a chapter + else + -- to insert a chapter we have to increase the index on all subsequent chapters + -- otherwise we'll end up with duplicate chapter IDs which will confuse mpv + -- +2 looks weird, but remember mpv indexes at 0 and lua indexes at 1 + -- adding two will turn "current chapter" from mpv notation into "next chapter" from lua's notation + -- count down because these areas of memory overlap + for i = chapter_count, curr_chapter + 2, -1 do + all_chapters[i + 1] = all_chapters[i] + end + all_chapters[curr_chapter+2] = { + title = "chapter_"..curr_chapter, + time = time_pos + } + end + mp.set_property_native("chapter-list", all_chapters) + mp.set_property_number("chapter", curr_chapter+1) +end + +local function format_time(seconds) + local result = "" + if seconds <= 0 then + return "00:00:00.000"; + else + hours = string.format("%02.f", math.floor(seconds/3600)) + mins = string.format("%02.f", math.floor(seconds/60 - (hours*60))) + secs = string.format("%02.f", math.floor(seconds - hours*60*60 - mins*60)) + msecs = string.format("%03.f", seconds*1000 - hours*60*60*1000 - mins*60*1000 - secs*1000) + result = hours..":"..mins..":"..secs.."."..msecs + end + return result +end + +local function write_chapter() + local euid = mp.get_property_number("estimated-frame-count") + local chapter_count = mp.get_property_number("chapter-list/count") + local all_chapters = mp.get_property_native("chapter-list") + local insert_chapters = "" + local curr = nil + + for i = 1, chapter_count, 1 do + curr = all_chapters[i] + local time_pos = format_time(curr.time) + + if i == 1 and curr.time ~= 0 then + local first_chapter=" \n "..math.random(1000, 9000).."\n 0\n 1\n \n Prologue\n eng\n \n 00:00:00.000\n \n" + insert_chapters = insert_chapters..first_chapter + end + + local next_chapter=" \n \n "..curr.title.."\n eng\n \n "..math.random(1000, 9000).."\n "..time_pos.."\n 0\n 1\n \n" + insert_chapters = insert_chapters..next_chapter + end + + local chapters="\n\n\n \n 0\n 0\n "..euid.."\n"..insert_chapters.." \n" + + local path = mp.get_property("path") + dir, name_ext = utils.split_path(path) + local name = string.sub(name_ext, 1, (string.len(name_ext)-4)) + local out_path = utils.join_path(dir, name.."_chapter.xml") + local file = io.open(out_path, "w") + if file == nil then + dir = utils.getcwd() + out_path = utils.join_path(dir, "create_chapter.xml") + file = io.open(out_path, "w") + end + if file == nil then + mp.error("Could not open chapter file for writing.") + return + end + file:write(chapters) + file:close() + mp.osd_message("Export file to: "..out_path, 3) +end + +mp.add_key_binding("C", "create_chapter", create_chapter, {repeatable=true}) +mp.add_key_binding("B", "write_chapter", write_chapter, {repeatable=false}) diff --git a/mpv/.config/mpv/scripts/reduce_stream_cache.js b/mpv/.config/mpv/scripts/reduce_stream_cache.js new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/scripts/reduce_stream_cache.js @@ -0,0 +1,1 @@ +/home/bas/git/mpv_reduce_stream_cache/scripts/reduce_stream_cache.js \ No newline at end of file diff --git a/mpv/.config/mpv/scripts/stream_replay.js b/mpv/.config/mpv/scripts/stream_replay.js new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/scripts/stream_replay.js @@ -0,0 +1,1 @@ +/home/bas/git/mpv_reduce_stream_cache/scripts/stream_replay.js \ No newline at end of file diff --git a/mpv/.config/mpv/scripts/uosc b/mpv/.config/mpv/scripts/uosc new file mode 100644 --- /dev/null +++ b/mpv/.config/mpv/scripts/uosc @@ -0,0 +1,1 @@ +/usr/share/mpv/scripts/uosc \ No newline at end of file diff --git a/ncdu/.config/ncdu/config b/ncdu/.config/ncdu/config new file mode 100644 --- /dev/null +++ b/ncdu/.config/ncdu/config @@ -0,0 +1,2 @@ +--extended +--color dark diff --git a/normcap/.config/systemd/user/normcap.service b/normcap/.config/systemd/user/normcap.service new file mode 100644 --- /dev/null +++ b/normcap/.config/systemd/user/normcap.service @@ -0,0 +1,9 @@ +[Unit] +Description=normcap background mode + +[Service] +Type=exec +ExecStart=normcap --background-mode + +[Install] +WantedBy=default.target diff --git a/nvim/.config/nvim/.editorconfig b/nvim/.config/nvim/.editorconfig deleted file mode 100644 --- a/nvim/.config/nvim/.editorconfig +++ /dev/null @@ -1,5 +0,0 @@ -[*.lua] -indent_style = space -indent_size = 2 -quote_style = single -trailing_table_separator = smart diff --git a/nvim/.config/nvim/after/ftplugin/gitcommit.lua b/nvim/.config/nvim/after/ftplugin/gitcommit.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/after/ftplugin/gitcommit.lua @@ -0,0 +1,4 @@ +local opt = vim.opt_local + +-- opt.formatoptions:append("a") +opt.textwidth = 0 diff --git a/nvim/.config/nvim/after/lsp/cssls.lua b/nvim/.config/nvim/after/lsp/cssls.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/after/lsp/cssls.lua @@ -0,0 +1,11 @@ +---@type vim.lsp.Config +return { + ---@type lsp.cssls + settings = { + css = { + lint = { + unknownAtRules = "ignore", + }, + }, + }, +} diff --git a/nvim/.config/nvim/after/lsp/emmylua_ls.lua b/nvim/.config/nvim/after/lsp/emmylua_ls.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/after/lsp/emmylua_ls.lua @@ -0,0 +1,26 @@ +---@type vim.lsp.Config +return { + ---@type lsp.emmylua_ls + settings = { + Lua = { + runtime = { + version = "LuaJIT", + requirePattern = { + "lua/?.lua", + "lua/?/init.lua", + "?/lua/?.lua", + "?/lua/?/init.lua", + "?/lsp/?.lua", + }, + }, + workspace = { + library = vim.list_extend({ + "$VIMRUNTIME", + "$LLS_Addons/luvit", + "$HOME/.local/share/nvim/lazy", + }, vim.api.nvim_get_runtime_file("", true)), + ignoreGlobs = { "**/*_spec.lua" }, + }, + }, + }, +} diff --git a/nvim/.config/nvim/after/lsp/jsonls.lua b/nvim/.config/nvim/after/lsp/jsonls.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/after/lsp/jsonls.lua @@ -0,0 +1,17 @@ +---@type vim.lsp.Config +return { + ---@type lsp.jsonls + settings = { + json = { + schemas = vim.list_extend(require("schemastore").json.schemas(), { + { + fileMatch = { "docker-compose*.json", "compose*.json" }, + url = "https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json", + }, + }), + validate = { + enable = true, -- required + }, + }, + }, +} diff --git a/nvim/.config/nvim/after/lsp/oxlint.lua b/nvim/.config/nvim/after/lsp/oxlint.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/after/lsp/oxlint.lua @@ -0,0 +1,48 @@ +local util = require("lspconfig.util") + +---@type vim.lsp.Config +return { + cmd = { "bunx", "oxlint", "--lsp" }, + filetypes = { + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue", + "svelte", + "astro", + }, + workspace_required = true, + on_attach = function(client, bufnr) + vim.api.nvim_buf_create_user_command(bufnr, "LspOxlintFixAll", function() + client:exec_cmd({ + title = "Apply Oxlint automatic fixes", + command = "oxc.fixAll", + arguments = { { uri = vim.uri_from_bufnr(bufnr) } }, + }) + end, { + desc = "Apply Oxlint automatic fixes", + }) + end, + root_dir = function(bufnr, on_dir) + local fname = vim.api.nvim_buf_get_name(bufnr) + + -- Oxlint resolves configuration by walking upward and using the nearest config file + -- to the file being processed. We therefore compute the root directory by locating + -- the closest `.oxlintrc.json` (or `package.json` fallback) above the buffer. + local root_markers = util.insert_package_json({ ".oxlintrc.json" }, "oxlint", fname)[1] + on_dir(vim.fs.dirname(vim.fs.find(root_markers, { path = fname, upward = true })[1])) + end, + init_options = { + settings = { + run = "onSave", + -- configPath = nil, + -- tsConfigPath = nil, + unusedDisableDirectives = "allow", + -- enable typeAware when oxlint LSP + tsgolint performance improves + typeAware = false, + -- disableNestedConfig = false, + -- fixKind = "safe_fix", + }, + }, +} diff --git a/nvim/.config/nvim/after/lsp/tailwindcss.lua b/nvim/.config/nvim/after/lsp/tailwindcss.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/after/lsp/tailwindcss.lua @@ -0,0 +1,23 @@ +---@type vim.lsp.Config +return { + ---@type lsp.tailwindcss + settings = { + tailwindCSS = { + classAttributes = { + "class", + "className", + "modifiersClassNames", + "appearance", + "toastOptions", + }, + classFunctions = { "cn", "tv" }, + -- experimental = { + -- classRegex = { + -- { "cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]" }, + -- { "cx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)" }, + -- { "cn\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)" }, + -- }, + -- }, + }, + }, +} diff --git a/nvim/.config/nvim/after/lsp/tsgo.lua b/nvim/.config/nvim/after/lsp/tsgo.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/after/lsp/tsgo.lua @@ -0,0 +1,17 @@ +---@type vim.lsp.Config +return { + ---@type lsp.tsgo + settings = { + javascript = { + updateImportsOnFileMove = { enabled = "always" }, + }, + typescript = { + updateImportsOnFileMove = { enabled = "always" }, + tsserver = { + experimental = { + enableProjectDiagnostics = true, + }, + }, + }, + }, +} diff --git a/nvim/.config/nvim/after/lsp/vtsls.lua b/nvim/.config/nvim/after/lsp/vtsls.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/after/lsp/vtsls.lua @@ -0,0 +1,32 @@ +---@type vim.lsp.Config +return { + ---@type lsp.vtsls + settings = { + javascript = { + updateImportsOnFileMove = { enabled = "always" }, + }, + typescript = { + updateImportsOnFileMove = { enabled = "always" }, + tsserver = { + experimental = { + enableProjectDiagnostics = true, + }, + }, + -- inlayHints = { + -- parameterNames = { enabled = "all" }, + -- parameterTypes = { enabled = true }, + -- variableTypes = { enabled = true }, + -- propertyDeclarationTypes = { enabled = true }, + -- functionLikeReturnTypes = { enabled = true }, + -- enumMemberValues = { enabled = true }, + -- }, + }, + vtsls = { + enableMoveToFileCodeAction = true, + autoUseWorkspaceTsdk = true, + experimental = { + enableProjectDiagnostics = true, + }, + }, + }, +} diff --git a/nvim/.config/nvim/after/lsp/yamlls.lua b/nvim/.config/nvim/after/lsp/yamlls.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/after/lsp/yamlls.lua @@ -0,0 +1,17 @@ +---@type vim.lsp.Config +return { + ---@type lsp.yamlls + settings = { + yaml = { + schemaStore = { + enable = false, + url = "", + }, + schemas = vim.tbl_extend("force", require("schemastore").yaml.schemas(), { + kubernetes = { "manifests/*.yaml" }, + ["https://schemastore.org/github-workflow.json"] = ".github/workflows/*.{yml,yaml}", + }), + }, + validate = { enable = true }, + }, +} diff --git a/nvim/.config/nvim/after/syntax/jsonc.lua b/nvim/.config/nvim/after/syntax/jsonc.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/after/syntax/jsonc.lua @@ -0,0 +1,1 @@ +vim.cmd("silent! syntax clear jsonTrailingCommaError") diff --git a/nvim/.config/nvim/init.lua b/nvim/.config/nvim/init.lua --- a/nvim/.config/nvim/init.lua +++ b/nvim/.config/nvim/init.lua @@ -1,4 +1,16 @@ -require("config.options") -require("config.autocmds") -require("config.lazy") -require("config.keymaps") +vim.loader.enable() + +_G.dd = function(...) + Snacks.debug.inspect(...) +end + +_G.bt = function(...) + Snacks.debug.backtrace(...) +end + +-- vim.print = _G.dd +-- vim.cmd.echo = function(...) +-- Snacks.notify(..., {}) +-- end + +require("config.init") diff --git a/nvim/.config/nvim/lazy-lock.json b/nvim/.config/nvim/lazy-lock.json --- a/nvim/.config/nvim/lazy-lock.json +++ b/nvim/.config/nvim/lazy-lock.json @@ -1,83 +1,117 @@ { "42header_codam": { "branch": "master", "commit": "727e299117075f87b154a40f2e4ec8a48594d7de" }, - "LuaSnip": { "branch": "master", "commit": "7ad2eaeaca56d6ed63acacbfc114b99f1f67b982" }, - "barbar.nvim": { "branch": "master", "commit": "c20691d686addb0d6ea87896d186c082324b01f8" }, + "LuaSnip": { "branch": "master", "commit": "dae4f5aaa3574bd0c2b9dd20fb9542a02c10471c" }, + "aerial.nvim": { "branch": "master", "commit": "645d108a5242ec7b378cbe643eb6d04d4223f034" }, + "auto-session": { "branch": "main", "commit": "62437532b38495551410b3f377bcf4aaac574ebe" }, + "barbar.nvim": { "branch": "master", "commit": "539d73def39c9172b4d4d769f14090e08f37b29d" }, "better-diagnostic-virtual-text": { "branch": "main", "commit": "eb3a77e714aa6c295bdb4f074fccbda637090f6e" }, + "blink.cmp": { "branch": "main", "commit": "b650e976a927be6b46487a0a610b75af111376c5" }, + "blink.indent": { "branch": "main", "commit": "9c80820ca77218a8d28e70075d6f44a1609911fe" }, + "blink.pairs": { "branch": "main", "commit": "5a34bf6ea72340a70083548e186d745ac4882899" }, + "bufferin.nvim": { "branch": "main", "commit": "b79da16a6a0b34640a4ff19bccd7f4cf29bd6d4d" }, "c_formatter_42.vim": { "branch": "master", "commit": "7a2d50f6683d6f58a2c95375524b4406d6bdc2c3" }, - "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" }, + "codesettings.nvim": { "branch": "master", "commit": "2a6bc089d6bfe2db1d9ad5a31c5102847581d99d" }, "comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, - "conform.nvim": { "branch": "master", "commit": "62eba813b7501b39612146cbf29cd07f1d4ac29c" }, - "dial.nvim": { "branch": "master", "commit": "ed4d6a5bbd5e479b4c4a3019d148561a2e6c1490" }, + "config-lsp.nvim": { "branch": "main", "commit": "f667f227189b19163f7c5118817d482b437ad5e0" }, + "conform.nvim": { "branch": "master", "commit": "e969e302bced7ffb9a0a0323629f31feb0ca35a6" }, + "deltaview.nvim": { "branch": "main", "commit": "3530ae8a1a5d8e7ad57999bcdbf73ed9a8cc1aff" }, + "dial.nvim": { "branch": "master", "commit": "f2634758455cfa52a8acea6f142dcd6271a1bf57" }, "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, - "dressing.nvim": { "branch": "master", "commit": "c5775a888adbc50652cb370073fcfec963eca93e" }, - "dropbar.nvim": { "branch": "master", "commit": "6156e07759fd8c7cbf764414f583aa7e47470368" }, - "eyeliner.nvim": { "branch": "main", "commit": "85e5a5a815651a434f327d0da3c2a33b9aa4f9ec" }, - "fidget.nvim": { "branch": "main", "commit": "d855eed8a06531a7e8fd0684889b2943f373c469" }, - "gitsigns.nvim": { "branch": "main", "commit": "80214a857ce512cc64964abddc1d8eb5a3e28396" }, - "guess-indent.nvim": { "branch": "main", "commit": "6cd61f7a600bb756e558627cd2e740302c58e32d" }, - "highlight-undo.nvim": { "branch": "main", "commit": "1ea1c79372d7d93c88fd97543880927b7635e3d2" }, - "inc-rename.nvim": { "branch": "main", "commit": "8ba77017ca468f3029bf88ef409c2d20476ea66b" }, + "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, + "dropbar.nvim": { "branch": "master", "commit": "ce202248134e3949aac375fd66c28e5207785b10" }, + "eyeliner.nvim": { "branch": "main", "commit": "8f197eb30cecdf4c2cc9988a5eecc6bc34c0c7d6" }, + "fidget.nvim": { "branch": "main", "commit": "7fa433a83118a70fe24c1ce88d5f0bd3453c0970" }, + "ghostty.nvim": { "branch": "master", "commit": "86114c996e87108c3e7e5d4d5596581914374a77" }, + "git-conflict.nvim": { "branch": "main", "commit": "a1badcd070d176172940eb55d9d59029dad1c5a6" }, + "gitsigns.nvim": { "branch": "main", "commit": "9f3c6dd7868bcc116e9c1c1929ce063b978fa519" }, + "glance.nvim": { "branch": "master", "commit": "bf86d8b79dce808e65fdb6e9269d0b4ed6d2eefc" }, + "grug-far.nvim": { "branch": "main", "commit": "275dbedc96e61a6b8d1dfb28ba51586ddd233dcf" }, + "guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" }, + "highlight-undo.nvim": { "branch": "main", "commit": "ee32e12693d70e66f954d09a504a7371d110fc27" }, + "inc-rename.nvim": { "branch": "main", "commit": "a2f4b564c72ea1f22cba2caa97db603618d16d6f" }, "indent-blankline.nvim": { "branch": "master", "commit": "dddb5d21811c319eb6e51a993d8fb44b193aae3f" }, "indentmini.nvim": { "branch": "main", "commit": "c5982c760525519e450b22714696d9ee24af5ae5" }, - "lazy.nvim": { "branch": "main", "commit": "077102c5bfc578693f12377846d427f49bc50076" }, - "lazydev.nvim": { "branch": "main", "commit": "491452cf1ca6f029e90ad0d0368848fac717c6d2" }, - "lsp-zero.nvim": { "branch": "v4.x", "commit": "0161aeab61d407aa1d43326a5dfc33479f4c53f6" }, - "lspkind.nvim": { "branch": "master", "commit": "cff4ae321a91ee3473a92ea1a8c637e3a9510aec" }, + "jsonfly.nvim": { "branch": "main", "commit": "3d58635cb195a5435743e7882c6ac7cff710204f" }, + "jsregexp": { "branch": "master", "commit": "7327f9b9273b932bf22a04da4dce0c55501f059a" }, + "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, + "lspkind.nvim": { "branch": "master", "commit": "c7274c48137396526b59d86232eabcdc7fed8a32" }, "lualine-macro-recording.nvim": { "branch": "main", "commit": "e2dcf63ba74e6111b53e1520a4f8a17a3d7427a1" }, - "lualine.nvim": { "branch": "master", "commit": "b431d228b7bbcdaea818bdc3e25b8cdbe861f056" }, - "luvit-meta": { "branch": "main", "commit": "ce76f6f6cdc9201523a5875a4471dcfe0186eb60" }, - "marks.nvim": { "branch": "master", "commit": "74e8d01b2a2131b6e46354cffc553aa7f81bcf5b" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "482350b050bd413931c2cdd4857443c3da7d57cb" }, - "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, + "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" }, + "luvit-meta": { "branch": "main", "commit": "0ea4ff636c5bb559ffa78108561d0976f4de9682" }, + "marks.nvim": { "branch": "master", "commit": "f353e8c08c50f39e99a9ed474172df7eddd89b72" }, + "markview.nvim": { "branch": "main", "commit": "86fcabc793e8aa361cb308e794cd0e1356fdc0e1" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "6c4830e37743b060d13c9269394176aea6a0fbc8" }, + "mason-nvim-dap.nvim": { "branch": "main", "commit": "9a10e096703966335bd5c46c8c875d5b0690dade" }, + "mason-tool-installer.nvim": { "branch": "main", "commit": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc" }, + "mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" }, "mini.files": { "branch": "main", "commit": "99aef1d68a01dd8fd8d37bbf62d67766f97311e3" }, - "neo-tree.nvim": { "branch": "v3.x", "commit": "29f7c215332ba95e470811c380ddbce2cebe2af4" }, - "neoconf.nvim": { "branch": "main", "commit": "39bf4e553d184ede39bda04baf902f9145c189cc" }, - "neogit": { "branch": "master", "commit": "6af8fc6b03210d0ac99398f8eff27c5be7b2ba8a" }, - "neoscroll.nvim": { "branch": "master", "commit": "532dcc8cea4287c4cad6bb77532989a8217cfc7b" }, + "neo-tree.nvim": { "branch": "v3.x", "commit": "f3df514fff2bdd4318127c40470984137f87b62e" }, + "neogit": { "branch": "master", "commit": "2b6a9e4dacb435a95eff474c80d0e94ae0e4f909" }, + "neoscroll.nvim": { "branch": "master", "commit": "c8d29979cb0cb3a2437a8e0ae683fd82f340d3b8" }, "neovim-session-manager": { "branch": "master", "commit": "cbaebd92dce84e9ba63cb07d3199e5a19b204c1a" }, - "noice.nvim": { "branch": "main", "commit": "448bb9c524a7601035449210838e374a30153172" }, - "nord.nvim": { "branch": "main", "commit": "6d6bae56a002a4da507ba263776e9691f47deb5f" }, - "nui.nvim": { "branch": "main", "commit": "61574ce6e60c815b0a0c4b5655b8486ba58089a1" }, - "nvim-cmp": { "branch": "main", "commit": "ae644feb7b67bf1ce4260c231d1d4300b19c6f30" }, + "noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" }, + "none-ls-extras.nvim": { "branch": "main", "commit": "517f87c1e6cd511e787d77127d7fdb12b7b79db3" }, + "none-ls.nvim": { "branch": "main", "commit": "f61f46ded0ca9edce7a09b674f8e162d10921426" }, + "nord.nvim": { "branch": "main", "commit": "07647ad23e5b7fc1599a841dcd8f173b9aeb0419" }, + "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, + "nvim-autopairs": { "branch": "master", "commit": "7a2c97cccd60abc559344042fefb1d5a85b3e33b" }, "nvim-colorizer.lua": { "branch": "master", "commit": "194ec600488f7c7229668d0e80bd197f3a2b84ff" }, - "nvim-dap": { "branch": "master", "commit": "281a2e4cd1e7a17cea7ecb1745d84a8ab1249925" }, + "nvim-dap": { "branch": "master", "commit": "7b11f48753ea6a82f09485dadd08016e2a318cf6" }, "nvim-dap-projects": { "branch": "main", "commit": "f319ffd99c6c8a0b930bcfc4bee0c751ffbf5808" }, - "nvim-dap-ui": { "branch": "master", "commit": "a5606bc5958db86f8d92803bea7400ee26a8d7e4" }, - "nvim-dap-virtual-text": { "branch": "master", "commit": "484995d573c0f0563f6a66ebdd6c67b649489615" }, - "nvim-highlight-colors": { "branch": "main", "commit": "a411550ef85cae467b889ba7d1a96bd78332d90e" }, - "nvim-lastplace": { "branch": "main", "commit": "0bb6103c506315044872e0f84b1f736c4172bb20" }, - "nvim-lsp-file-operations": { "branch": "master", "commit": "92a673de7ecaa157dd230d0128def10beb56d103" }, - "nvim-lspconfig": { "branch": "master", "commit": "911167921d49cd5c1c9b2436031d0da3945e787f" }, + "nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" }, + "nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" }, + "nvim-highlight-colors": { "branch": "main", "commit": "e2cb22089cc2358b2b995c09578224f142de6039" }, + "nvim-lastplace": { "branch": "main", "commit": "91b996e062affebd7fe787f57a2a3e212457e87b" }, + "nvim-lsp-file-operations": { "branch": "master", "commit": "b9c795d3973e8eec22706af14959bc60c579e771" }, + "nvim-lspconfig": { "branch": "master", "commit": "a40d22e75d951ad2fcf236ceb013d88f81d2cc9a" }, "nvim-luadev": { "branch": "master", "commit": "3ba0c02c378503739f1fdb95cff3ea2aad48db3e" }, - "nvim-nio": { "branch": "master", "commit": "a428f309119086dc78dd4b19306d2d67be884eee" }, - "nvim-notify": { "branch": "master", "commit": "d333b6f167900f6d9d42a59005d82919830626bf" }, + "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, + "nvim-notify": { "branch": "master", "commit": "8701bece920b38ea289b457f902e2ad184131a5d" }, "nvim-pqf": { "branch": "main", "commit": "148ee2ca8b06d83fd9bf6f9b9497724ad39a07d6" }, - "nvim-scrollbar": { "branch": "main", "commit": "d09f14aa16c9f2748e77008f9da7b1f76e4e7b85" }, - "nvim-surround": { "branch": "main", "commit": "ec2dc7671067e0086cdf29c2f5df2dd909d5f71f" }, - "nvim-treesitter": { "branch": "master", "commit": "397982d197768ebdefc0e2db396d95c4d371ca86" }, - "nvim-treesitter-endwise": { "branch": "master", "commit": "8b34305ffc28bd75a22f5a0a9928ee726a85c9a6" }, - "nvim-treesitter-textobjects": { "branch": "master", "commit": "41e3abf6bfd9a9a681eb1f788bdeba91c9004b2b" }, - "nvim-ts-autotag": { "branch": "main", "commit": "0cb76eea80e9c73b88880f0ca78fbd04c5bdcac7" }, - "nvim-vtsls": { "branch": "main", "commit": "45c6dfea9f83a126e9bfc5dd63430562b3f8af16" }, - "nvim-web-devicons": { "branch": "master", "commit": "3722e3d1fb5fe1896a104eb489e8f8651260b520" }, - "oil.nvim": { "branch": "master", "commit": "a632c898fbe0e363ef89b9577f1a7714ab67d682" }, - "plenary.nvim": { "branch": "master", "commit": "ec289423a1693aeae6cd0d503bac2856af74edaa" }, - "presence.nvim": { "branch": "main", "commit": "87c857a56b7703f976d3a5ef15967d80508df6e6" }, - "qf_helper.nvim": { "branch": "master", "commit": "fa3c2f3f2706e2c9984409c9c14b5993302ddfa7" }, - "render-markdown.nvim": { "branch": "main", "commit": "c4eb6bf30525fdc7efaf5f33bcb0fa9491ace245" }, - "schemastore.nvim": { "branch": "main", "commit": "54a2cf0105166d5a48172e81f12a2bf10cfc8b2c" }, - "suda.vim": { "branch": "master", "commit": "b97fab52f9cdeabe2bbb5eb98d82356899f30829" }, - "supermaven-nvim": { "branch": "main", "commit": "d71257f431e190d9236d7f30da4c2d659389e91f" }, - "swap-split.nvim": { "branch": "main", "commit": "d2c705d279b384a6b47a67f85a6dc8569c4d775d" }, - "tabout.nvim": { "branch": "master", "commit": "923aea2613c9e7abf81e099d46086f62c7e54896" }, + "nvim-recorder": { "branch": "main", "commit": "cf2e07d1d60f225943b2f2457ecd8e2b3e4ee2d5" }, + "nvim-rulebook": { "branch": "main", "commit": "fee42e6e06f3acec35f8df791269b38283d91b60" }, + "nvim-surround": { "branch": "main", "commit": "5553dd1fbb3559abb176a8227a12e8f1cab07e93" }, + "nvim-treesitter": { "branch": "main", "commit": "0f5b204603234a523fafa8f6b860fd36f80a23f6" }, + "nvim-treesitter-endwise": { "branch": "master", "commit": "8fe8a95630f4f2c72a87ba1927af649e0bfaa244" }, + "nvim-treesitter-textobjects": { "branch": "main", "commit": "a0e182ae21fda68c59d1f36c9ed45600aef50311" }, + "nvim-ts-autotag": { "branch": "main", "commit": "8e1c0a389f20bf7f5b0dd0e00306c1247bda2595" }, + "nvim-unstack": { "branch": "main", "commit": "a6253845c60bc009b85eecc0b2d7f4383fe9eccc" }, + "nvim-vtsls": { "branch": "main", "commit": "0b5f73c9e50ce95842ea07bb3f05c7d66d87d14a" }, + "nvim-web-devicons": { "branch": "master", "commit": "737cf6c657898d0c697311d79d361288a1343d50" }, + "oil.nvim": { "branch": "master", "commit": "0fcc83805ad11cf714a949c98c605ed717e0b83e" }, + "package-info.nvim": { "branch": "master", "commit": "268f4669fc29546726009ad665d26901dbf62c3b" }, + "pathfinder.nvim": { "branch": "main", "commit": "9c79815dfd31726119b44a71c0654377be01d3c2" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, + "presence.nvim": { "branch": "main", "commit": "c850b9e245f310e040478ab54808c7ce098919ed" }, + "qf_helper.nvim": { "branch": "master", "commit": "62e94495385a06f5143527548c348f4a9df2e704" }, + "refactoring.nvim": { "branch": "master", "commit": "6784b54587e6d8a6b9ea199318512170ffb9e418" }, + "render-markdown.nvim": { "branch": "main", "commit": "6e0e8902dac70fecbdd8ce557d142062a621ec38" }, + "satellite.nvim": { "branch": "main", "commit": "7c2e5a4064abb0066a0bf157e7a137f1bcdeace2" }, + "schemastore.nvim": { "branch": "main", "commit": "905cc3d9684e77b054c380d969a27fc54b6240d4" }, + "snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" }, + "supermaven-nvim": { "branch": "main", "commit": "07d20fce48a5629686aefb0a7cd4b25e33947d50" }, + "swap-split.nvim": { "branch": "main", "commit": "e488365cc11bad251bdc71bf1a3f2f106d795456" }, + "tabout.nvim": { "branch": "master", "commit": "9a3499480a8e53dcaa665e2836f287e3b7764009" }, "tailwind-tools.nvim": { "branch": "master", "commit": "72f01ba654ffaf382c1df996b77cc53ec7860f70" }, - "telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" }, - "telescope.nvim": { "branch": "master", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, - "tmux.nvim": { "branch": "main", "commit": "65ee9d6e6308afcd7d602e1320f727c5be63a947" }, - "toggleterm.nvim": { "branch": "main", "commit": "48be57eaba817f038d61bbf64d2c597f578c0827" }, - "treesj": { "branch": "main", "commit": "0d81326b5afd36babe7dd480aabbb0b05f33e688" }, - "trouble.nvim": { "branch": "main", "commit": "6efc446226679fda0547c0fd6a7892fd5f5b15d8" }, + "telescope-file-browser.nvim": { "branch": "master", "commit": "3610dc7dc91f06aa98b11dca5cc30dfa98626b7e" }, + "telescope-fzf-native.nvim": { "branch": "main", "commit": "6fea601bd2b694c6f2ae08a6c6fab14930c60e2c" }, + "telescope-undo.nvim": { "branch": "main", "commit": "928d0c2dc9606e01e2cc547196f48d2eaecf58e5" }, + "telescope.nvim": { "branch": "master", "commit": "3333a52ff548ba0a68af6d8da1e54f9cd96e9179" }, + "tidy.nvim": { "branch": "main", "commit": "8b6921150b16f38f48a2459a844a0c2b4c916914" }, + "tiny-inline-diagnostic.nvim": { "branch": "main", "commit": "ba133b3e932416e4b9507095731a6d7276878fe8" }, + "tmux.nvim": { "branch": "main", "commit": "2c1c3be0ef287073cef963f2aefa31a15c8b9cd8" }, + "treesj": { "branch": "main", "commit": "186084dee5e9c8eec40f6e39481c723dd567cb05" }, + "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, + "ts-autotag.nvim": { "branch": "master", "commit": "35f79f6253dff5cc43cf943d74c4b2734370a81d" }, "ts-error-translator.nvim": { "branch": "main", "commit": "11ae55b28bde02663b5f983f59b0e3fd9c4e845b" }, - "ultimate-autopair.nvim": { "branch": "v0.6", "commit": "53ed7c65e466963c916251f9ce6df7dd3685dc36" }, - "which-key.nvim": { "branch": "main", "commit": "6c1584eb76b55629702716995cca4ae2798a9cca" } + "tsc.nvim": { "branch": "main", "commit": "e083bcf1e54bc3af7df92b33235efb334e8c782c" }, + "twoslash-queries.nvim": { "branch": "main", "commit": "1262c20cad5abd6e89995dc4bc0eaab0e2e4e0b9" }, + "ultimate-autopair.nvim": { "branch": "v0.6", "commit": "72e160cb1ce8c0db2ac4315f77d97420a2f4223d" }, + "undotree": { "branch": "master", "commit": "d8f99084d98c32f651860eb0baaf89759f91debc" }, + "vim-dadbod": { "branch": "master", "commit": "6d1d41da4873a445c5605f2005ad2c68c99d8770" }, + "vim-dadbod-completion": { "branch": "master", "commit": "a8dac0b3cf6132c80dc9b18bef36d4cf7a9e1fe6" }, + "vim-dadbod-ui": { "branch": "master", "commit": "07e92e22114cc5b1ba4938d99897d85b58e20475" }, + "vim-suda": { "branch": "master", "commit": "c492741b4679b3cdd4d9e34138209784e061d916" }, + "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }, + "workspace-diagnostics.nvim": { "branch": "main", "commit": "60f9175b2501ae3f8b1aba9719c0df8827610c8e" } } diff --git a/nvim/.config/nvim/lua/config/autocmds.lua b/nvim/.config/nvim/lua/config/autocmds.lua --- a/nvim/.config/nvim/lua/config/autocmds.lua +++ b/nvim/.config/nvim/lua/config/autocmds.lua @@ -1,25 +1,73 @@ -local group = vim.api.nvim_create_augroup("yeet", { clear = true }) +local autocmd = vim.api.nvim_create_autocmd +local augroup = function(name) + vim.api.nvim_create_augroup("Setup" .. name, { clear = true }) +end + +autocmd("FileType", { + group = augroup("CloseWindow"), + pattern = { + "help", + "notify", + "checkhealth", + "grug-far", + "lazy", + "qf", + "snacks_notif_history", + }, + desc = "Close window", + callback = function(event) + function close() + vim.api.nvim_win_close(0, true) + pcall(function() + vim.api.nvim_buf_delete(event.buf, { force = true }) + end) + end + + vim.keymap.set("n", "q", close, { + desc = "Close buffer", + buffer = event.buf, + }) --- press q to close help -vim.api.nvim_create_autocmd("FileType", { - pattern = "help", - command = "nmap q :q", - group = group, + vim.keymap.set("n", "", close, { + desc = "Close buffer", + buffer = event.buf, + }) + end, }) -vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, { +autocmd({ "BufReadPre", "BufNew" }, { + group = augroup("EnvrcBashFiletype"), pattern = ".envrc*", command = "set filetype=bash", - group = group, }) -vim.api.nvim_create_autocmd("TextYankPost", { +autocmd("TextYankPost", { + group = augroup("HighlightYank"), pattern = "*", callback = function() vim.highlight.on_yank({ - higroup = "Normal", + higroup = "PmenuSel", timeout = 200, }) end, - group = group, +}) + +autocmd("FileType", { + group = augroup("FormatOptions"), + pattern = "*", + callback = function() + -- never continue comment on pressing o or O in normal mode + vim.opt.formatoptions:remove("o") + end, +}) + +-- insert blank line after git commit message area +autocmd("VimEnter", { + group = augroup("GitCommitInsertLine"), + pattern = "COMMIT_EDITMSG", + callback = function() + if vim.fn.getline(1) == "" then + vim.fn.append(1, "") + end + end, }) diff --git a/nvim/.config/nvim/lua/config/init.lua b/nvim/.config/nvim/lua/config/init.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/config/init.lua @@ -0,0 +1,19 @@ +-- autocmds can be loaded lazily when not opening a file +local lazy_autocmds = vim.fn.argc(-1) == 0 +if not lazy_autocmds then + require("config.autocmds") +end + +local group = vim.api.nvim_create_augroup("SetupVeryLazy", { clear = true }) +vim.api.nvim_create_autocmd("User", { + group = group, + pattern = "VeryLazy", + callback = function() + if lazy_autocmds then + require("config.autocmds") + end + require("config.keymaps") + end, +}) + +require("config.lazy") diff --git a/nvim/.config/nvim/lua/config/keymaps.lua b/nvim/.config/nvim/lua/config/keymaps.lua --- a/nvim/.config/nvim/lua/config/keymaps.lua +++ b/nvim/.config/nvim/lua/config/keymaps.lua @@ -36,4 +36,11 @@ require("noice").cmd("dismiss") end end, silent) -map("n", "", "Lazy", silent) +map("n", "", "Lazy", silent) +map("n", "", "Mason", silent) +-- revert Enter behavior after mapping Ctrl-M +map("n", "", "") + +map("n", "c", "%y+", { silent = true, desc = "Yank file contents into system clipboard" }) + +map("n", "r", "restart", { silent = true, desc = "Restart Neovim" }) diff --git a/nvim/.config/nvim/lua/config/lazy.lua b/nvim/.config/nvim/lua/config/lazy.lua --- a/nvim/.config/nvim/lua/config/lazy.lua +++ b/nvim/.config/nvim/lua/config/lazy.lua @@ -1,30 +1,53 @@ local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not vim.loop.fs_stat(lazypath) then - vim.fn.system({ +if not vim.uv.fs_stat(lazypath) then + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", + "--single-branch", "https://github.com/folke/lazy.nvim.git", - "--branch=stable", -- latest stable release 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) -vim.g.nord_borders = true -- border between splits -vim.g.nord_italic = false -vim.g.nord_bold = false - -require("lazy").setup({ +---@diagnostic disable-next-line: missing-fields +---@type LazyConfig +local lazy_config = { spec = { { import = "plugins" }, }, install = { colorscheme = { "nord" }, }, + dev = { + path = "~/dev", + patterns = { "brw" }, + }, checker = { enabled = true, + notify = false, }, -}) + change_detection = { + notify = false, + }, + profiling = { + loader = true, + require = true, + }, +} + +---@diagnostic disable-next-line: undefined-field +require("lazy").setup(lazy_config) diff --git a/nvim/.config/nvim/lua/config/options.lua b/nvim/.config/nvim/lua/config/options.lua --- a/nvim/.config/nvim/lua/config/options.lua +++ b/nvim/.config/nvim/lua/config/options.lua @@ -1,29 +1,62 @@ -local opt = vim.opt -opt.number = true -opt.relativenumber = true -opt.mouse = "a" -opt.mousemoveevent = true -opt.cursorline = true -opt.title = true -opt.timeoutlen = 1000 -opt.ttimeoutlen = 10 -opt.splitbelow = true -opt.splitright = true -opt.laststatus = 3 -opt.ignorecase = true -opt.smartcase = true -opt.signcolumn = "yes" -opt.scrolloff = 8 -opt.undofile = true --- opt.clipboard = 'unnamedplus' -opt.inccommand = "split" -opt.formatoptions = opt.formatoptions - "o" -opt.termguicolors = true -opt.expandtab = true -opt.shiftwidth = 2 -opt.foldenable = false +vim.o.number = true +vim.o.relativenumber = true +vim.o.mouse = "a" +vim.o.mousemoveevent = true +vim.o.cursorline = true +vim.o.title = true +vim.o.timeoutlen = 1000 +vim.o.ttimeoutlen = 10 +vim.o.splitbelow = true +vim.o.splitright = true +vim.o.laststatus = 3 +vim.o.ignorecase = true +vim.o.smartcase = true +vim.o.signcolumn = "yes" +vim.o.scrolloff = 8 +vim.o.undofile = true +vim.o.undolevels = 10000 +vim.o.undoreload = 100000 +-- vim.o.clipboard = 'unnamedplus' +vim.o.inccommand = "split" +vim.o.termguicolors = true +vim.o.expandtab = true +vim.o.shiftwidth = 2 +vim.o.foldenable = false +vim.o.backupcopy = "yes" +-- https://github.com/VoidAlone/nihilvim/blob/fbe1f1f455bd3cbea24a11c425684d2458b5ceaa/lua/core/options.lua#L15 +vim.o.linebreak = true +vim.o.showbreak = "↪ " + +vim.opt.sessionoptions:append("winpos,localoptions,globals") + +vim.g.mapleader = "," +vim.g.maplocalleader = " " + +vim.g.man_hardwrap = false + +vim.g.user42 = "bvan-den" +vim.g.mail42 = "bvan-den@student.codam.nl" + +-- https://github.com/tmux/tmux/pull/4190 +if vim.env.SSH_TTY then + -- local function paste() + -- return { + -- vim.split(vim.fn.getreg(""), "\n"), + -- vim.fn.getregtype(""), + -- } + -- end -local g = vim.g -g.mapleader = " " -g.user42 = "bvan-den" -g.mail42 = "bvan-den@student.codam.nl" + vim.g.clipboard = { + name = "OSC 52", + copy = { + ["+"] = require("vim.ui.clipboard.osc52").copy("+"), + ["*"] = require("vim.ui.clipboard.osc52").copy("*"), + }, + paste = { + -- ["+"] = paste, + -- ["*"] = paste, + ["+"] = require("vim.ui.clipboard.osc52").paste("+"), + ["*"] = require("vim.ui.clipboard.osc52").paste("*"), + }, + } +end diff --git a/nvim/.config/nvim/lua/config/profile.lua b/nvim/.config/nvim/lua/config/profile.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/config/profile.lua @@ -0,0 +1,28 @@ +local should_profile = os.getenv("NVIM_PROFILE") +if should_profile then + require("profile").instrument_autocmds() + if should_profile:lower():match("^start") then + ---@diagnostic disable-next-line: missing-parameter + require("profile").start("*") + else + require("profile").instrument("*") + end +end + +local function toggle_profile() + local prof = require("profile") + if prof.is_recording() then + prof.stop() + vim.ui.input({ prompt = "Save profile to:", completion = "file", default = "profile.json" }, function(filename) + if filename then + prof.export(filename) + vim.notify(string.format("Wrote %s", filename)) + end + end) + else + prof.start("*") + end +end + +vim.api.nvim_create_user_command("ToggleProfile", toggle_profile, { desc = "Toggle profiling" }) +vim.keymap.set("", "", toggle_profile, { desc = "Toggle profiling" }) diff --git a/nvim/.config/nvim/lua/config/util.lua b/nvim/.config/nvim/lua/config/util.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/config/util.lua @@ -0,0 +1,3 @@ +local M = {} + +return M diff --git a/nvim/.config/nvim/lua/plugins.lua b/nvim/.config/nvim/lua/plugins.lua deleted file mode 100644 --- a/nvim/.config/nvim/lua/plugins.lua +++ /dev/null @@ -1,1367 +0,0 @@ ----@type LazySpec -return { - { - "gbprod/nord.nvim", - priority = 1000, - lazy = false, - config = function() - require("nord").setup({ - diff = { - mode = "fg", - }, - errors = { - mode = "none", -- doesn't seem to do anything? - }, - on_highlights = function(hi, c) - hi.DiffAdd = vim.tbl_extend("force", hi.DiffAdd, { bg = "" }) - hi.DiffDelete = vim.tbl_extend("force", hi.DiffDelete, { bg = "" }) - hi.DiffChange = vim.tbl_extend("force", hi.DiffChange, { bg = "" }) - hi.DiffText = vim.tbl_extend("force", hi.DiffText, { bg = "" }) - end, - }) - vim.cmd.colorscheme("nord") - end, - }, - - { - "folke/which-key.nvim", - config = function() - require("which-key").setup({ - preset = "modern", - }) - end, - }, - - { - "nvim-lualine/lualine.nvim", - dependencies = { - "nvim-tree/nvim-web-devicons", - "yavorski/lualine-macro-recording.nvim", - }, - config = function() - local lualine = require("lualine") - local startuptime_visible = true - -- hide startup time after 3 seconds - vim.defer_fn(function() - startuptime_visible = false - end, 3000) - - lualine.setup({ - options = { - theme = "nord", - component_separators = "|", - section_separators = { left = "", right = "" }, - }, - sections = { - lualine_a = { - { - function() - return " " - end, - padding_left = 1, - color = "Normal", - }, - { "mode", separator = { left = "" } }, - }, - lualine_b = { - { "filename" }, - { "branch" }, - { "diff" }, - { "diagnostics" }, - }, - lualine_c = { - "macro_recording", - }, - lualine_x = { - { - function() - return math.floor(require("lazy").stats().startuptime) .. "ms" - end, - icon = "󱎫", - cond = function() - return startuptime_visible - end, - }, - }, - lualine_y = { - { "filetype" }, - { "fileformat", icons_enabled = false }, - { "progress" }, - }, - lualine_z = { - { "location", separator = { right = "" } }, - { - function() - return " " - end, - padding_right = 1, - color = "Normal", - }, - }, - }, - }) - end, - }, - - { - "nvim-treesitter/nvim-treesitter", - build = ":TSUpdate", - dependencies = { - "nvim-treesitter/nvim-treesitter-textobjects", - "RRethy/nvim-treesitter-endwise", - { - "windwp/nvim-ts-autotag", - config = function() - require("nvim-ts-autotag").setup({ - opts = { - enable_close_on_slash = true, - }, - }) - end, - }, - }, - config = function() - ---@diagnostic disable-next-line: missing-fields - require("nvim-treesitter.configs").setup({ - ensure_installed = { - "lua", - "vim", - "vimdoc", - "bash", - "fish", - "diff", - "json", - "jsonc", - "markdown", - "markdown_inline", - "regex", - "javascript", - "typescript", - "tsx", - "html", - "css", - "python", - "ruby", - "c", - "go", - "elixir", - "rust", - }, - auto_install = true, - highlight = { - enable = true, - }, - textobjects = { - select = { - enable = true, - lookahead = true, - keymaps = { - ["af"] = "@function.outer", - ["if"] = "@function.inner", - ["ac"] = "@comment.outer", - ["ic"] = "@comment.outer", - ["aa"] = "@parameter.outer", - ["ia"] = "@parameter.inner", - }, - selection_modes = { - ["@function.outer"] = "V", - ["@function.inner"] = "V", - }, - }, - move = { - enable = true, - set_jumps = true, - goto_next_start = { - ["]m"] = "@function.outer", - }, - }, - }, - endwise = { - enable = true, - }, - }) - end, - }, - - { - "wansmer/treesj", - dependencies = { - "nvim-treesitter/nvim-treesitter", - }, - keys = { - { - "s", - function() - require("treesj").toggle({ split = { recursive = true } }) - end, - desc = "Toggle node (split/join)", - }, - }, - ---@class TreeSJ.Settings - ---@field use_default_keymaps boolean Use default keymaps (m - toggle, j - join, s - split) - ---@field check_syntax_error boolean Node with syntax error will not be formatted - ---@field max_join_length number If line after join will be longer than max value, node will not be formatted - ---Cursor behavior: - ---hold - cursor follows the node/place on which it was called - ---start - cursor jumps to the first symbol of the node being formatted - ---end - cursor jumps to the last symbol of the node being formatted - ---@field cursor_behavior 'hold'|'start'|'end' - ---@field notify boolean Notify about possible problems or not - ---@field langs table Presets for languages - ---@field dot_repeat boolean Use `dot` for repeat action - ---@field on_error nil|function Callback for treesj error handler. func (err_text, level, ...) - opts = { - use_default_keymaps = false, - -- max_join_length = 600, - }, - }, - - { - "zbirenbaum/copilot.lua", - enabled = false, - config = function() - require("copilot").setup({ - filetypes = { - gitcommit = true, - markdown = true, - yaml = true, - }, - panel = { - enabled = false, - }, - suggestion = { - auto_trigger = true, - keymap = { - accept = "", - accept_word = "", - accept_line = "", - next = "", - prev = "", - dismiss = "", - }, - }, - }) - end, - }, - - { - "supermaven-inc/supermaven-nvim", - config = function() - require("supermaven-nvim").setup({ - keymaps = { - accept_suggestion = "", - accept_word = "", - clear_suggestion = "", - }, - }) - end, - }, - - { - "williamboman/mason.nvim", - config = true, - }, - - { - "folke/neoconf.nvim", - config = true, - }, - - { - "williamboman/mason-lspconfig.nvim", - dependencies = { - "williamboman/mason.nvim", - "neovim/nvim-lspconfig", - "hrsh7th/cmp-nvim-lsp", - "onsails/lspkind.nvim", - "b0o/schemastore.nvim", - "yioneko/nvim-vtsls", - "folke/neoconf.nvim", - { - "vonheikemen/lsp-zero.nvim", - branch = "v4.x", - }, - }, - config = function() - local lsp_zero = require("lsp-zero") - - -- add tmux lsp - vim.api.nvim_create_autocmd("FileType", { - pattern = "tmux", - callback = function() - vim.lsp.start({ - name = "tmux", - cmd = { "tmux-language-server" }, - }) - end, - }) - - local on_attach = function(client, bufnr) - -- lsp_zero.highlight_symbol(client, bufnr) - - -- :h lsp-zero-keybindings - lsp_zero.default_keymaps({ - buffer = bufnr, - preserve_mappings = false, - exclude = { "gs" }, - }) - - vim.keymap.set("n", "gl", function() - vim.diagnostic.open_float() - end, { desc = "Show diagnostics", silent = true, buffer = bufnr }) - - vim.keymap.set( - "n", - "gk", - "lua vim.lsp.buf.signature_help()", - { desc = "Show function signature", silent = true, buffer = bufnr } - ) - - if client.name == "vtsls" then - vim.keymap.set( - "n", - "gs", - "VtsExec goto_source_definition", - { desc = "Goto source definition", silent = true, buffer = bufnr } - ) - end - end - - lsp_zero.extend_lspconfig({ - capabilities = require("cmp_nvim_lsp").default_capabilities(), - lsp_attach = on_attach, - sign_text = true, - float_border = "rounded", - }) - - -- local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview - -- - -- ---@diagnostic disable-next-line: duplicate-set-field - -- function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...) - -- local bufnr, winnr = orig_util_open_floating_preview(contents, syntax, opts, ...) - -- -- vim.api.nvim_set_option_value("signcolumn", "no", { win = winnr }) - -- vim.api.nvim_set_option_value("filetype", "markdown", { buf = bufnr }) - -- return bufnr, winnr - -- end - - require("mason-lspconfig").setup({ - ensure_installed = { - "lua_ls", - "clangd", - "jsonls", - "yamlls", - "bashls", - "basedpyright", - "ruff_lsp", - "tailwindcss", - "terraformls", - "tflint", - "vtsls", - }, - handlers = { - function(server) - require("lspconfig")[server].setup({}) - end, - - lua_ls = function() - ---@diagnostic disable: missing-fields - ---@type lspconfig.options.lua_ls - local lua_opts = { - settings = { - Lua = { - format = { - enable = false, - }, - diagnostics = { - workspaceDelay = -1, - workspaceEvent = "None", - }, - workspace = { - checkThirdParty = false, - }, - codeLens = { - enable = true, - }, - completion = { - callSnippet = "Both", - }, - doc = { - privateName = { "^_" }, - }, - hint = { - enable = true, - setType = false, - paramType = true, - paramName = "Disable", - semicolon = "Disable", - arrayIndex = "Disable", - }, - }, - }, - } - require("lspconfig").lua_ls.setup(lua_opts) - end, - - jsonls = function() - ---@diagnostic disable: missing-fields - ---@type lspconfig.options.jsonls - local jsonls_opts = { - settings = { - json = { - schemas = vim.list_extend(require("schemastore").json.schemas(), { - { - fileMatch = { "docker-compose*.json", "compose*.json" }, - url = "https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json", - }, - }), - validate = { enable = true }, - }, - }, - } - require("lspconfig").jsonls.setup(jsonls_opts) - end, - - yamlls = function() - ---@diagnostic disable: missing-fields - ---@type lspconfig.options.yamlls - local yamlls_opts = { - settings = { - yaml = { - schemaStore = { - enable = false, - url = "", - }, - schemas = vim.tbl_extend("force", require("schemastore").yaml.schemas(), { - kubernetes = { "manifests/*.yaml" }, - }), - }, - validate = { enable = true }, - }, - } - require("lspconfig").yamlls.setup(yamlls_opts) - end, - - tailwindcss = function() - ---@diagnostic disable: missing-fields - ---@type lspconfig.options.tailwindcss - local tailwindcss_opts = { - settings = { - tailwindCSS = { - classAttributes = { - "modifiersClassNames", - }, - experimental = { - classRegex = { - { "cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]" }, - { "cx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)" }, - { "cn\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)" }, - }, - }, - }, - }, - } - require("lspconfig").tailwindcss.setup(tailwindcss_opts) - end, - - vtsls = function() - ---@diagnostic disable: missing-fields - ---@type lspconfig.options.vtsls - local vtsls_opts = { - settings = { - javascript = { - updateImportsOnFileMove = { enabled = "always" }, - }, - typescript = { - updateImportsOnFileMove = { enabled = "always" }, - tsserver = { - experimental = { - enableProjectDiagnostics = true, - }, - }, - }, - vtsls = { - enableMoveToFileCodeAction = true, - }, - }, - -- handlers = { - -- ---@diagnostic disable: redundant-parameter - -- ---@param err lsp.ResponseError? - -- ---@param result lsp.PublishDiagnosticsParams - -- ---@param ctx lsp.HandlerContext - -- ---@param config? vim.diagnostic.Opts Configuration table (see |vim.diagnostic.config()|). - -- ["textDocument/publishDiagnostics"] = function(err, result, ctx, config) - -- if not result.diagnostics then - -- return - -- end - -- - -- for _, diagnostic in ipairs(result.diagnostics) do - -- local json = vim.fn.json_encode({ - -- range = diagnostic.range, - -- message = diagnostic.message, - -- code = diagnostic.code, - -- severity = diagnostic.severity, - -- source = diagnostic.source, - -- }) - -- local proc = vim.system( - -- { "pretty-ts-errors-markdown" }, - -- { text = true, stdin = true }, - -- function(obj) - -- diagnostic.message = obj.stdout - -- vim.lsp.diagnostic.on_publish_diagnostics(err, result, ctx, config) - -- end - -- ) - -- proc:write(json) - -- proc:write(nil) - -- end - -- end, - -- }, - } - require("lspconfig").vtsls.setup(vtsls_opts) - end, - }, - }) - end, - }, - - { - "hrsh7th/nvim-cmp", - event = "InsertEnter", - dependencies = { - "L3MON4D3/LuaSnip", - }, - config = function() - local cmp = require("cmp") - - cmp.setup({ - sources = { - -- { name = "copilot" }, - { - name = "nvim_lsp", - ---@param entry cmp.Entry - entry_filter = function(entry) - return entry:get_kind() ~= cmp.lsp.CompletionItemKind.Text - end, - }, - { name = "lazydev", group_index = 0 }, - }, - snippet = { - expand = function(args) - require("luasnip").lsp_expand(args.body) - end, - }, - mapping = cmp.mapping.preset.insert({ - [""] = cmp.mapping.complete(), - }), - formatting = { - fields = { "abbr", "kind", "menu" }, - format = function(entry, item) - local color_item = require("nvim-highlight-colors").format(entry, { kind = item.kind }) - item = require("lspkind").cmp_format({ - -- before = require("tailwind-tools.cmp").lspkind_format, - })(entry, item) - if color_item.abbr_hl_group then - item.kind_hl_group = color_item.abbr_hl_group - item.kind = color_item.abbr - end - return item - end, - expandable_indicator = true, - }, - window = { - completion = cmp.config.window.bordered(), - documentation = cmp.config.window.bordered(), - }, - }) - end, - }, - - { - "antosha417/nvim-lsp-file-operations", - requires = { - "nvim-lua/plenary.nvim", - "nvim-neo-tree/neo-tree.nvim", - }, - config = true, - }, - - { - "luckasRanarison/tailwind-tools.nvim", - enabled = false, - config = true, - }, - - { - "stevearc/conform.nvim", - event = { "BufWritePre" }, - cmd = { "ConformInfo", "Format", "FormatDisable", "FormatEnable", "FormatToggle" }, - init = function() - vim.o.formatexpr = "v:lua.require'conform'.formatexpr()" - end, - config = function() - require("conform").setup({ - formatters_by_ft = { - lua = { "stylua" }, - yaml = { "yamlfmt" }, - javascript = { "prettierd", "prettier", stop_after_first = true }, - javascriptreact = { "prettierd", "prettier", stop_after_first = true }, - typescript = { "prettierd", "prettier", stop_after_first = true }, - typescriptreact = { "prettierd", "prettier", stop_after_first = true }, - html = { "prettierd", "prettier", stop_after_first = true }, - css = { "prettierd", "prettier", stop_after_first = true }, - graphql = { "prettierd", "prettier", stop_after_first = true }, - sh = { "shfmt" }, - fish = { "fish_indent" }, - }, - format_on_save = function(bufnr) - if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then - return - end - - return { lsp_format = "fallback" } - end, - format_after_save = function(bufnr) - if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then - return - end - - return { lsp_format = "fallback" } - end, - }) - - vim.api.nvim_create_user_command("Format", function(args) - local range = nil - if args.count ~= -1 then - local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1] - range = { - start = { args.line1, 0 }, - ["end"] = { args.line2, end_line:len() }, - } - end - - require("conform").format({ async = true, lsp_format = "fallback", range = range }) - end, {}) - - vim.api.nvim_create_user_command("FormatDisable", function(args) - if args.bang then - vim.b.disable_autoformat = true - else - vim.g.disable_autoformat = true - end - end, { - bang = true, - desc = "Disable autoformat on save (bang to disable for current buffer only)", - }) - - vim.api.nvim_create_user_command("FormatEnable", function() - vim.b.disable_autoformat = false - vim.g.disable_autoformat = false - end, { - desc = "Re-enable autoformat on save", - }) - - vim.api.nvim_create_user_command("FormatToggle", function() - if vim.g.disable_autoformat then - vim.g.disable_autoformat = false - else - vim.g.disable_autoformat = true - end - end, { - desc = "Toggle autoformat on save", - }) - end, - }, - - { - "folke/lazydev.nvim", - ft = "lua", - config = function() - require("lazydev").setup({ - ---@type lazydev.Library.spec[] - library = { - { path = "luvit-meta/library" }, - }, - }) - end, - }, - - { - "Bilal2453/luvit-meta", - lazy = true, - }, - - --TODO: configure - { - "folke/trouble.nvim", - dependencies = { - "nvim-tree/nvim-web-devicons", - }, - cmd = { "Trouble" }, - keys = { - { "t", "Trouble" }, - }, - config = true, - }, - - { - "nvim-telescope/telescope.nvim", - lazy = false, - version = "*", - dependencies = { - "nvim-lua/plenary.nvim", - "nvim-tree/nvim-web-devicons", - }, - keys = { - { "", "Telescope resume", desc = "Telescope resume" }, - { "", "Telescope find_files", desc = "Telescope find files" }, - { "", "Telescope buffers", desc = "Telescope buffers" }, - { "", "Telescope live_grep", desc = "Telescope grep" }, - { "", "Telescope help_tags", desc = "Telescope help" }, - { "", "Telescope man_pages", desc = "Telescope man" }, - --{ 'gd', 'Telescope lsp_definitions', desc = 'Telescope definitions' }, - --{ 'gi', 'Telescope implementations', desc = 'Telescope implementations' }, - { "", "Telescope diagnostics", desc = "Telescope diagnostics" }, - }, - config = function() - require("telescope").setup({ - defaults = { - sorting_strategy = "ascending", - layout_config = { - prompt_position = "top", - }, - file_ignore_patterns = { ".git/" }, - }, - pickers = { - find_files = { - theme = "dropdown", - hidden = true, - }, - buffers = { - theme = "dropdown", - }, - live_grep = { - theme = "dropdown", - }, - help_tags = { - theme = "dropdown", - }, - man_pages = { - theme = "dropdown", - }, - }, - }) - end, - }, - - { - "nvim-neo-tree/neo-tree.nvim", - event = { "BufEnter" }, - branch = "v3.x", - dependencies = { - "nvim-lua/plenary.nvim", - "nvim-tree/nvim-web-devicons", - "muniftanjim/nui.nvim", - }, - keys = { - { "", "Neotree toggle", desc = "Toggle Neotree" }, - { "fh", "Neotree reveal", desc = "Reveal file in Neotree" }, - }, - config = function() - require("neo-tree").setup({ - close_if_last_window = true, - filesystem = { - follow_current_file = { - enabled = true, - leave_dirs_open = true, - }, - filtered_items = { - visible = true, - never_show = { - "..", - "node_modules", - }, - }, - find_command = "fd", - find_args = { - fd = { - "--exclude", - ".git", - "--exclude", - "node_modules", - }, - }, - hijack_netrw_behavior = "disabled", - use_libuv_file_watcher = true, - }, - event_handlers = { - -- { - -- event = "file_opened", - -- handler = function() - -- require("neo-tree.command").execute({ action = "close" }) - -- end, - -- }, - }, - window = { - mappings = { - ["P"] = { "toggle_preview", config = { use_float = false } }, - }, - }, - }) - end, - }, - - { - "echasnovski/mini.files", - enabled = false, - keys = { - { "", "lua if not MiniFiles.close() then MiniFiles.open() end", desc = "Toggle MiniFiles" }, - }, - config = function() - require("mini.files").setup({ - mappings = { - close = "", - }, - }) - end, - }, - - { - "stevearc/oil.nvim", - config = function() - require("oil").setup({ - skip_confirm_for_simple_edits = true, - prompt_save_on_select_new_entry = false, - watch_for_changes = true, - }) - end, - }, - - { - "rcarriga/nvim-notify", - priority = 500, - config = function() - require("notify").setup({ - stages = "static", - max_height = function() - return math.floor(vim.o.lines * 0.75) - end, - max_width = function() - return math.floor(vim.o.columns * 0.75) - end, - on_open = function(win) - vim.api.nvim_win_set_config(win, { zindex = 100 }) - end, - }) - end, - }, - - { - "folke/noice.nvim", - dependencies = { - "muniftanjim/nui.nvim", - "rcarriga/nvim-notify", - "smjonas/inc-rename.nvim", - }, - config = function() - require("noice").setup({ - lsp = { - override = { - ["vim.lsp.util.convert_input_to_markdown_lines"] = true, - ["vim.lsp.util.stylize_markdown"] = true, - ["cmp.entry.get_documentation"] = true, - }, - progress = { - enabled = false, - }, - hover = { - silent = true, - }, - }, - presets = { - bottom_search = true, - long_message_to_split = true, - inc_rename = true, - lsp_doc_border = true, - }, - popupmenu = { - backend = "nui", -- cmp seems broken? - }, - }) - end, - }, - - { "stevearc/dressing.nvim" }, - - { - "andweeb/presence.nvim", - -- enabled = false, - config = function() - require("presence").setup({ - show_time = false, - neovim_image_text = "Neovim", - -- log_level = "debug", - }) - end, - }, - - { - "stevearc/qf_helper.nvim", - keys = { - { "", "QNext" }, - { "", "QPrev" }, - { "q", "QFToggle!" }, - { "l", "LLToggle!" }, - }, - config = true, - }, - - { - "yorickpeterse/nvim-pqf", - config = true, - }, - - { - "petertriho/nvim-scrollbar", - dependencies = { - "kevinhwang91/nvim-hlslens", - }, - config = function() - require("scrollbar").setup({ - handle = { - color = require("nord.colors").palette.polar_night.brighter, - }, - handlers = { - -- search = true, - }, - }) - end, - }, - - { - "kevinhwang91/nvim-hlslens", - enabled = false, - keys = { - { "n", "execute('normal! ' . v:count1 . 'n')lua require('hlslens').start()" }, - { "N", "execute('normal! ' . v:count1 . 'N')lua require('hlslens').start()" }, - { "*", "*lua require('hlslens').start()" }, - { "#", "#lua require('hlslens').start()" }, - { "g*", "g*lua require('hlslens').start()" }, - { "g#", "g#lua require('hlslens').start()" }, - }, - config = true, - }, - - { - "akinsho/toggleterm.nvim", - version = "*", - keys = { - { "", desc = "Toggle terminal" }, - }, - config = function() - require("toggleterm").setup({ - open_mapping = "", - shading_factor = "0", - winbar = { - enabled = true, - }, - }) - end, - }, - - { - "ethanholz/nvim-lastplace", - config = true, - }, - - { - "kylechui/nvim-surround", - config = true, - }, - - { - "numtostr/comment.nvim", - config = true, - }, - - { - "monaqa/dial.nvim", - keys = { - { "", "lua require('dial.map').manipulate('increment', 'normal')", mode = { "n", "v" } }, - { "", "lua require('dial.map').manipulate('decrement', 'normal')", mode = { "n", "v" } }, - { "g", "lua require('dial.map').manipulate('increment', 'gnormal')", mode = { "n", "v" } }, - { "g", "lua require('dial.map').manipulate('decrement', 'gnormal')", mode = { "n", "v" } }, - }, - config = function() - local augend = require("dial.augend") - - require("dial.config").augends:register_group({ - default = { - augend.integer.alias.decimal, - augend.integer.alias.hex, - augend.date.alias["%Y/%m/%d"], - augend.date.alias["%Y-%m-%d"], - augend.constant.alias.bool, - }, - }) - end, - }, - - { - "j-hui/fidget.nvim", - config = true, - }, - - { - "lewis6991/gitsigns.nvim", - config = true, - }, - - { - "karb94/neoscroll.nvim", - config = function() - require("neoscroll").setup({ - easing_function = "quadratic", - }) - end, - }, - - { "JopjeKnopje/42header_codam" }, - - { "cacharle/c_formatter_42.vim" }, - - { - "altermo/ultimate-autopair.nvim", - event = { "InsertEnter", "CmdlineEnter" }, - config = function() - require("ultimate-autopair").setup({ - fastwarp = { - faster = true, - }, - }) - end, - }, - - { - "TimUntersberger/neogit", - config = function() - require("neogit").setup({ - commit_popup = { - kind = "floating", - }, - popup = { - kind = "floating", - }, - }) - end, - }, - - { - "sindrets/diffview.nvim", - dependencies = { - "nvim-lua/plenary.nvim", - }, - config = true, - }, - - { - "abecodes/tabout.nvim", - config = true, - }, - - { - "NMAC427/guess-indent.nvim", - config = true, - }, - - { - "NvChad/nvim-colorizer.lua", - enabled = false, - main = "colorizer", - config = function() - require("colorizer").setup({ - filetypes = { "*", "!lazy" }, - user_default_options = { - RGB = true, -- #RGB hex codes - RRGGBB = true, -- #RRGGBB hex codes - names = false, -- "Name" codes like Blue or blue - RRGGBBAA = false, -- #RRGGBBAA hex codes - AARRGGBB = false, -- 0xAARRGGBB hex codes - rgb_fn = true, -- CSS rgb() and rgba() functions - hsl_fn = true, -- CSS hsl() and hsla() functions - css = true, -- Enable all CSS features: rgb_fn, hsl_fn, names, RGB, RRGGBB - css_fn = true, -- Enable all CSS *functions*: rgb_fn, hsl_fn - -- Available modes for `mode`: foreground, background, virtualtext - mode = "background", - -- Available methods are false / true / "normal" / "lsp" / "both" - -- True is same as normal - tailwind = "both", - sass = { - enable = true, - parsers = { "css" }, - }, - virtualtext = "■", - -- update color values even if buffer is not focused - -- example use: cmp_menu, cmp_docs - always_update = true, - }, - }) - end, - }, - - { - "brenoprata10/nvim-highlight-colors", - enabled = true, - config = function() - require("nvim-highlight-colors").setup({ - render = "virtual", - enable_tailwind = true, - exclude_filetypes = { "gitcommit", "lazy", "help" }, - }) - end, - }, - - { - "xorid/swap-split.nvim", - config = function() - require("swap-split").setup({ - ignore_filetypes = { "NvimTree", "neo-tree", "notify", "toggleterm", "Trouble", "qf" }, - }) - end, - }, - - { - "lambdalisue/suda.vim", - init = function() - vim.g.suda_smart_edit = true - end, - }, - - { - "mfussenegger/nvim-dap", - dependencies = { - "rcarriga/nvim-dap-ui", - "nvim-neotest/nvim-nio", - "theHamsta/nvim-dap-virtual-text", - { - "ldelossa/nvim-dap-projects", - config = function() - require("nvim-dap-projects").search_project_config() - end, - }, - }, - config = function() - local dap = require("dap") - local dapui = require("dapui") - - dap.listeners.after.event_initialized["dapui_config"] = function() - dapui.open({}) - end - - dap.listeners.before.event_terminated["dapui_config"] = function() - dapui.close({}) - end - - dap.listeners.before.event_exited["dapui_config"] = function() - dapui.close({}) - end - end, - }, - - { - "Shatur/neovim-session-manager", - dependencies = { - "nvim-lua/plenary.nvim", - }, - main = "session_manager", - opts = function() - local config = require("session_manager.config") - ---@module "plenary" - ---@class SessionManager.Settings - ---@field sessions_dir Path The directory where the session files will be saved. - ---@field session_filename_to_dir function(string): Path Function that replaces symbols into separators and colons to transform filename into a session directory. - ---@field dir_to_session_filename function(string): Path Function that replaces separators and colons into special symbols to transform session directory into a filename. Should use `vim.uv.cwd()` if the passed `dir` is `nil`. - ---@field autoload_mode ('Disabled'|'CurrentDir'|'LastSession'|'GitSession')[] Define what to do when Neovim is started without arguments. See "Autoload mode" section below. - ---@field autosave_last_session boolean Automatically save last session on exit and on session switch. - ---@field autosave_ignore_not_normal boolean Plugin will not save a session when no buffers are opened, or all of them aren't writable or listed. - ---@field autosave_ignore_dirs string[] A list of directories where the session will not be autosaved. - ---@field autosave_ignore_filetypes string[] All buffers of these file types will be closed before the session is saved. - ---@field autosave_ignore_buftypes string[] All buffers of these bufer types will be closed before the session is saved. - ---@field autosave_only_in_session boolean Always autosaves session. If true, only autosaves after a session is active. - ---@field max_path_length number Shorten the display path if length exceeds this threshold. Use 0 if don't want to shorten the path at all. - return { - autoload_mode = { config.AutoloadMode.GitSession, config.AutoloadMode.CurrentDir }, - autosave_ignore_dirs = { "~" }, - } - end, - }, - - { - "chentoast/marks.nvim", - config = true, - }, - - { - "jinh0/eyeliner.nvim", - config = function() - require("eyeliner").setup({ - highlight_on_key = true, - dim = true, - }) - end, - }, - - { - "bfredl/nvim-luadev", - cmd = { "Luadev" }, - keys = { - { mode = "n", "rl", "(Luadev-RunLine)", desc = "Execute line" }, - { mode = { "n", "v" }, "rr", "(Luadev-Run)", desc = "Execute movement/object" }, - { mode = "n", "rw", "(Luadev-RunWord)", desc = "Execute word" }, - }, - }, - - { - "aserowy/tmux.nvim", - keys = { - { "", "lua require('tmux').move_left()", desc = "Move left", mode = { "n", "t" } }, - { "", "lua require('tmux').move_bottom()", desc = "Move bottom", mode = { "n", "t" } }, - { "", "lua require('tmux').move_top()", desc = "Move top", mode = { "n", "t" } }, - { "", "lua require('tmux').move_right()", desc = "Move right", mode = { "n", "t" } }, - { "", "lua require('tmux').resize_left()", desc = "Resize left", mode = { "n", "t" } }, - { "", "lua require('tmux').resize_bottom()", desc = "Resize bottom", mode = { "n", "t" } }, - { "", "lua require('tmux').resize_top()", desc = "Resize top", mode = { "n", "t" } }, - { "", "lua require('tmux').resize_right()", desc = "Resize right", mode = { "n", "t" } }, - }, - config = function() - require("tmux").setup({ - navigation = { - enable_default_keybindings = false, - }, - resize = { - enable_custom_bindings = false, - resize_step_x = 5, - resize_step_y = 5, - }, - }) - end, - }, - - { - "Bekaboo/dropbar.nvim", - dependencies = { - "nvim-telescope/telescope-fzf-native.nvim", - }, - init = function() - vim.cmd.highlight("WinBar guibg=none") - vim.cmd.highlight("WinBarNC guibg=none") - end, - config = true, - }, - - { - "romgrk/barbar.nvim", - lazy = false, - dependencies = { - "lewis6991/gitsigns.nvim", - "nvim-tree/nvim-web-devicons", - }, - keys = { - { "", "BufferNext", desc = "Buffer next" }, - { "", "BufferPrevious", desc = "Buffer previous" }, - { "", "BufferClose", desc = "Buffer close" }, - { "", "BufferMovePrevious", desc = "Buffer move previous" }, - { ">", "BufferMoveNext", desc = "Buffer move next" }, - { "BufferPin", desc = "Buffer pin" }, - { "", "BufferPick", desc = "Buffer pick" }, - { "", "BufferGoto 1", desc = "Buffer goto 1" }, - { "", "BufferGoto 2", desc = "Buffer goto 2" }, - { "", "BufferGoto 3", desc = "Buffer goto 3" }, - { "", "BufferGoto 4", desc = "Buffer goto 4" }, - { "", "BufferGoto 5", desc = "Buffer goto 5" }, - { "", "BufferGoto 6", desc = "Buffer goto 6" }, - { "", "BufferGoto 7", desc = "Buffer goto 7" }, - { "", "BufferGoto 8", desc = "Buffer goto 8" }, - { "", "BufferGoto 9", desc = "Buffer goto 9" }, - { "", "BufferLast", desc = "Buffer goto last" }, - }, - config = function() - require("barbar").setup({ - auto_hide = 1, - focus_on_close = "previous", - no_name_title = "new", - }) - end, - }, - - { - "tzachar/highlight-undo.nvim", - init = function() - local nord = require("nord.colors").palette - - vim.api.nvim_set_hl(0, "HighlightUndo", { - bg = nord.polar_night.brighter, - fg = nord.snow_storm.brightest, - }) - end, - config = true, - }, - - { - "dmmulroy/ts-error-translator.nvim", - enabled = false, - config = true, - }, - - { - "MeanderingProgrammer/render-markdown.nvim", - enabled = false, - dependencies = { - "nvim-treesitter/nvim-treesitter", - "nvim-tree/nvim-web-devicons", - }, -- if you prefer nvim-web-devicons - config = function() - require("render-markdown").setup({ - preset = "lazy", - overrides = { - buftype = { - nofile = { - code = { left_pad = 0, right_pad = 0 }, - }, - }, - }, - }) - end, - }, - - { - "nvimdev/indentmini.nvim", - init = function() - local nord = require("nord.colors").palette - - vim.cmd.highlight("IndentLine guifg=" .. nord.polar_night.brighter) - vim.cmd.highlight("IndentLineCurHide guifg=" .. nord.polar_night.brighter) - vim.cmd.highlight("IndentLineCurrent guifg=" .. nord.polar_night.light) - end, - config = function() - require("indentmini").setup({ - char = "▎", - exclude = { "gitcommit" }, - }) - end, - enabled = true, - }, - - { - "lukas-reineke/indent-blankline.nvim", - main = "ibl", - config = true, - enabled = false, - }, - - { - "sontungexpt/better-diagnostic-virtual-text", - event = "LspAttach", - config = function(_) - require("better-diagnostic-virtual-text").setup() - end, - }, -} diff --git a/nvim/.config/nvim/lua/plugins/barbar.lua b/nvim/.config/nvim/lua/plugins/barbar.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/barbar.lua @@ -0,0 +1,38 @@ +---@diagnostic disable: missing-fields +---@type LazySpec +return { + "romgrk/barbar.nvim", + lazy = false, + dependencies = { + "nvim-tree/nvim-web-devicons", + }, + init = function() + vim.g.barbar_auto_setup = false + end, + keys = { + { "", "BufferNext", desc = "Buffer next" }, + { "", "BufferPrevious", desc = "Buffer previous" }, + { "", "BufferClose!", desc = "Buffer close" }, + { "", "BufferRestore", desc = "Buffer restore" }, + { "", "BufferMovePrevious", desc = "Buffer move previous" }, + { ">", "BufferMoveNext", desc = "Buffer move next" }, + { "BufferPin", desc = "Buffer pin" }, + { "", "BufferPick", desc = "Buffer pick" }, + { "", "BufferGoto 1", desc = "Buffer goto 1" }, + { "", "BufferGoto 2", desc = "Buffer goto 2" }, + { "", "BufferGoto 3", desc = "Buffer goto 3" }, + { "", "BufferGoto 4", desc = "Buffer goto 4" }, + { "", "BufferGoto 5", desc = "Buffer goto 5" }, + { "", "BufferGoto 6", desc = "Buffer goto 6" }, + { "", "BufferGoto 7", desc = "Buffer goto 7" }, + { "", "BufferGoto 8", desc = "Buffer goto 8" }, + { "", "BufferGoto 9", desc = "Buffer goto 9" }, + { "", "BufferLast", desc = "Buffer goto last" }, + }, + ---@type barbar.config.options + opts = { + auto_hide = 1, + focus_on_close = "previous", + no_name_title = "new", + }, +} diff --git a/nvim/.config/nvim/lua/plugins/blink.lua b/nvim/.config/nvim/lua/plugins/blink.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/blink.lua @@ -0,0 +1,138 @@ +---@type LazySpec +return { + "saghen/blink.cmp", + -- version = "*", + event = { "InsertEnter", "CmdlineEnter" }, + build = "cargo build --release", + dependencies = { + "L3MON4D3/LuaSnip", + dependencies = { "kmarius/jsregexp" }, + config = function() + require("luasnip.loaders.from_vscode").lazy_load() + end, + }, + ---@type blink.cmp.Config + opts = { + -- 'default' (recommended) for mappings similar to built-in completions (C-y to accept) + -- 'super-tab' for mappings similar to vscode (tab to accept) + -- 'enter' for enter to accept + -- 'none' for no mappings + -- + -- All presets have the following mappings: + -- C-Space: Open menu or open docs if already open + -- C-n/C-p or Up/Down: Select next/previous item + -- C-e: Hide menu + -- C-k: Toggle signature help (if signature.enabled = true) + -- + -- See :h blink-cmp-config-keymap for defining your own keymap + keymap = { + preset = "none", + [""] = { "show", "show_documentation", "hide_documentation" }, + [""] = { "hide", "fallback" }, + [""] = { "select_and_accept", "fallback" }, + + [""] = { "select_prev", "fallback" }, + [""] = { "select_next", "fallback" }, + [""] = { "select_prev", "fallback_to_mappings" }, + [""] = { "select_next", "fallback_to_mappings" }, + + [""] = { "scroll_documentation_up", "fallback" }, + [""] = { "scroll_documentation_down", "fallback" }, + + [""] = { "snippet_forward", "fallback" }, + [""] = { "snippet_backward", "fallback" }, + + [""] = { "show_signature", "hide_signature", "fallback" }, + }, + + ---@diagnostic disable-next-line: missing-fields + sources = { + default = { "lsp", "path", "snippets" }, + }, + + ---@diagnostic disable-next-line: missing-fields + appearance = {}, + + -- (Default) Rust fuzzy matcher for typo resistance and significantly better performance + -- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation, + -- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"` + -- + -- See the fuzzy documentation for more information + ---@diagnostic disable-next-line: missing-fields + fuzzy = { + implementation = "prefer_rust_with_warning", + }, + + ---@diagnostic disable-next-line: missing-fields + snippets = { + preset = "luasnip", + expand = function(snippet) + require("luasnip").lsp_expand(snippet) + end, + }, + + signature = { + enabled = false, + }, + + completion = { + ---@diagnostic disable-next-line: missing-fields + list = { + selection = { + preselect = false, + auto_insert = false, + }, + }, + ---@diagnostic disable-next-line: missing-fields + documentation = { + auto_show = true, + auto_show_delay_ms = 0, + ---@diagnostic disable-next-line: missing-fields + window = { + border = "bold", + }, + }, + ---@diagnostic disable-next-line: missing-fields + menu = { + border = "none", + draw = { + padding = 0, + gap = 1, + components = { + kind_icon = { + text = function(ctx) + local icon = ctx.kind_icon + if vim.tbl_contains({ "Path" }, ctx.source_name) then + local dev_icon, _ = require("nvim-web-devicons").get_icon(ctx.label) + if dev_icon then + icon = dev_icon + end + elseif ctx.kind == "Color" then + icon = "██" + else + icon = require("lspkind").symbol_map[ctx.kind] or "" + end + + return icon .. ctx.icon_gap + end, + + -- Optionally, use the highlight groups from nvim-web-devicons + -- You can also add the same function for `kind.highlight` if you want to + -- keep the highlight groups in sync with the icons. + highlight = function(ctx) + local hl = ctx.kind_hl + if vim.tbl_contains({ "Path" }, ctx.source_name) then + local dev_icon, dev_hl = require("nvim-web-devicons").get_icon(ctx.label) + if dev_icon then + hl = dev_hl + end + end + return hl + end, + }, + }, + }, + }, + }, + }, +} diff --git a/nvim/.config/nvim/lua/plugins/colorscheme.lua b/nvim/.config/nvim/lua/plugins/colorscheme.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/colorscheme.lua @@ -0,0 +1,23 @@ +---@type LazySpec +return { + "gbprod/nord.nvim", + lazy = false, + priority = 1000, + config = function() + require("nord").setup({ + diff = { + mode = "fg", + }, + errors = { + mode = "none", -- doesn't seem to do anything? + }, + on_highlights = function(hi, c) + -- hi.DiffAdd = vim.tbl_extend("force", hi.DiffAdd, { bg = "" }) + -- hi.DiffDelete = vim.tbl_extend("force", hi.DiffDelete, { bg = "" }) + -- hi.DiffChange = vim.tbl_extend("force", hi.DiffChange, { bg = "" }) + -- hi.DiffText = vim.tbl_extend("force", hi.DiffText, { bg = "" }) + end, + }) + vim.cmd.colorscheme("nord") + end, +} diff --git a/nvim/.config/nvim/lua/plugins/formatting.lua b/nvim/.config/nvim/lua/plugins/formatting.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/formatting.lua @@ -0,0 +1,91 @@ +---@type LazySpec +return { + "stevearc/conform.nvim", + event = { "BufWritePre" }, + cmd = { "ConformInfo", "Format", "FormatDisable", "FormatEnable", "FormatToggle" }, + init = function() + vim.o.formatexpr = "v:lua.require'conform'.formatexpr()" + + vim.api.nvim_create_user_command("Format", function(args) + local range = nil + + if args.count ~= -1 then + local end_line = assert(vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1]) + + range = { + start = { args.line1, 0 }, + ["end"] = { args.line2, end_line:len() }, + } + end + + require("conform").format({ async = true, lsp_format = "fallback", range = range }) + end, {}) + + vim.api.nvim_create_user_command("FormatDisable", function(args) + if args.bang then + vim.b.disable_autoformat = true + else + vim.g.disable_autoformat = true + end + end, { + bang = true, + desc = "Disable autoformat on save (bang to disable for current buffer only)", + }) + + vim.api.nvim_create_user_command("FormatEnable", function() + vim.b.disable_autoformat = false + vim.g.disable_autoformat = false + end, { + desc = "Re-enable autoformat on save", + }) + + vim.api.nvim_create_user_command("FormatToggle", function() + if vim.g.disable_autoformat then + vim.g.disable_autoformat = false + else + vim.g.disable_autoformat = true + end + end, { + desc = "Toggle autoformat on save", + }) + end, + opts = { + formatters_by_ft = { + lua = { "stylua" }, + yaml = { "yamlfmt" }, + javascript = { "oxfmt", "prettier" }, + javascriptreact = { "oxfmt", "prettier" }, + typescript = { "oxfmt", "prettier" }, + typescriptreact = { "oxfmt", "prettier" }, + html = { "oxfmt", "prettier" }, + css = { "oxfmt", "prettier" }, + graphql = { "oxfmt", "prettier" }, + sh = { "shfmt" }, + fish = { "fish_indent" }, + go = { "gofmt" }, + json = { "oxfmt", "prettier" }, + jsonc = { "oxfmt", "prettier" }, + xml = { "xmllint" }, + -- systemd = {"systemdlinter"} -- TODO: setup + ["*"] = { "trim_newlines", "trim_whitespace" }, + }, + log_level = vim.log.levels.DEBUG, + default_format_opts = { + stop_after_first = true, + timeout_ms = 2000, + }, + -- format_on_save = function(bufnr) + format_after_save = function(bufnr) + if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then + return + end + + -- local bufname = vim.api.nvim_buf_get_name(bufnr) + -- if bufname:match("/node_modules/") then + -- return + -- end + + return { lsp_format = "fallback" } + end, + }, +} diff --git a/nvim/.config/nvim/lua/plugins/init.lua b/nvim/.config/nvim/lua/plugins/init.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/init.lua @@ -0,0 +1,7 @@ +require("config.options") + +return { + { + "folke/lazy.nvim", + }, +} diff --git a/nvim/.config/nvim/lua/plugins/lsp.lua b/nvim/.config/nvim/lua/plugins/lsp.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/lsp.lua @@ -0,0 +1,649 @@ +---@type LazySpec +return { + { + "yioneko/nvim-vtsls", + enabled = true, + }, + + { + "brw/tsc.nvim", + enabled = false, -- enable once tsgo watch mode performance improves + opts = { + bin_name = "tsgo", + auto_start_watch_mode = true, + use_diagnostics = true, + auto_open_qflist = false, + enable_progress_notifications = false, + enable_error_notifications = false, + flags = { + watch = true, + }, + }, + }, + + -- { + -- "folke/lazydev.nvim", + -- ft = "lua", + -- enabled = false, + -- config = function() + -- require("lazydev").setup({ + -- ---@type lazydev.Library.spec[] + -- library = { + -- { path = "luvit-types/library" }, + -- -- { path = "neoconf.nvim/types/lua" }, + -- -- { path = "neoconf.nvim/types/lsp.lua" }, + -- }, + -- }) + -- end, + -- }, + + { + "mrjones2014/codesettings.nvim", + opts = {}, + lazy = true, + -- ft = { "json", "jsonc", "lua" }, + -- ---@type CodesettingsOverridableConfig + -- ---@diagnostic disable-next-line: missing-fields + -- opts = { + -- lua_ls_integration = true, + -- }, + }, + + { + "Bilal2453/luvit-meta", + ft = "lua", + }, + + { + "neovim/nvim-lspconfig", + dependencies = { + "onsails/lspkind.nvim", + "b0o/schemastore.nvim", + -- "folke/neoconf.nvim", + { + "artemave/workspace-diagnostics.nvim", + }, + }, + config = function() + -- -- add tmux lsp + -- vim.api.nvim_create_autocmd("FileType", { + -- pattern = "tmux", + -- callback = function() + -- vim.lsp.start({ + -- name = "tmux", + -- cmd = { "tmux-language-server" }, + -- }) + -- end, + -- }) + + -- -- old lsp-zero on_attach stuff + -- local on_attach = function(client, bufnr) + -- lsp_zero.highlight_symbol(client, bufnr) + -- + -- -- :h lsp-zero-keybindings + -- lsp_zero.default_keymaps({ + -- buffer = bufnr, + -- preserve_mappings = false, + -- exclude = { "gs" }, + -- }) + -- + -- vim.keymap.set("n", "gl", function() + -- vim.diagnostic.open_float() + -- end, { desc = "Show diagnostics", silent = true, buffer = bufnr }) + -- + -- vim.keymap.set( + -- "n", + -- "", + -- "LspToggleInlayHints", + -- { desc = "Toggle inlay hints", silent = true, buffer = bufnr } + -- ) + -- + -- vim.keymap.set( + -- "n", + -- "gk", + -- "lua vim.lsp.buf.signature_help()", + -- { desc = "Show function signature", silent = true, buffer = bufnr } + -- ) + -- end + + -- lsp_zero.extend_lspconfig({ + -- capabilities = require("blink.cmp").get_lsp_capabilities(), + -- -- capabilities = require("cmp_nvim_lsp").default_capabilities(), + -- lsp_attach = on_attach, + -- sign_text = true, + -- float_border = "rounded", + -- }) + + -- local orig_util_open_floating_preview = vim.lsp.util.open_floating_preview + -- + -- ---@diagnostic disable-next-line: duplicate-set-field + -- function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...) + -- local bufnr, winnr = orig_util_open_floating_preview(contents, syntax, opts, ...) + -- -- vim.api.nvim_set_option_value("signcolumn", "no", { win = winnr }) + -- vim.api.nvim_set_option_value("filetype", "markdown", { buf = bufnr }) + -- return bufnr, winnr + -- end + + -- -- pretty-ts-errors + -- handlers = { + -- ---@diagnostic disable: redundant-parameter + -- ---@param err lsp.ResponseError? + -- ---@param result lsp.PublishDiagnosticsParams + -- ---@param ctx lsp.HandlerContext + -- ---@param config? vim.diagnostic.Opts Configuration table (see |vim.diagnostic.config()|). + -- ["textDocument/publishDiagnostics"] = function(err, result, ctx, config) + -- if not result.diagnostics then + -- return + -- end + -- + -- for _, diagnostic in ipairs(result.diagnostics) do + -- local json = vim.fn.json_encode({ + -- range = diagnostic.range, + -- message = diagnostic.message, + -- code = diagnostic.code, + -- severity = diagnostic.severity, + -- source = diagnostic.source, + -- }) + -- local proc = vim.system( + -- { "pretty-ts-errors-markdown" }, + -- { text = true, stdin = true }, + -- function(obj) + -- diagnostic.message = obj.stdout + -- vim.lsp.diagnostic.on_publish_diagnostics(err, result, ctx, config) + -- end + -- ) + -- proc:write(json) + -- proc:write(nil) + -- end + -- end, + -- }, + + vim.diagnostic.config({ + update_in_insert = false, + severity_sort = true, + signs = { + text = { + -- [vim.diagnostic.severity.HINT] = "", + [vim.diagnostic.severity.HINT] = "", + [vim.diagnostic.severity.INFO] = "", + [vim.diagnostic.severity.WARN] = "", + [vim.diagnostic.severity.ERROR] = "󰅙", + }, + }, + underline = { + severity = { + vim.diagnostic.severity.ERROR, + vim.diagnostic.severity.WARN, + vim.diagnostic.severity.INFO, + vim.diagnostic.severity.HINT, + }, + }, + -- virtual_text = { + -- virt_text_hide = true, + -- severity = { + -- vim.diagnostic.severity.ERROR, + -- vim.diagnostic.severity.WARN, + -- }, + -- }, + virtual_text = false, + float = { + source = true, + }, + }) + + local lsp_group = vim.api.nvim_create_augroup("bas.lsp", {}) + + vim.api.nvim_create_autocmd("LspAttach", { + group = lsp_group, + desc = "Register LSP keymaps and commands", + callback = function(event) + local client = assert(vim.lsp.get_client_by_id(event.data.client_id)) + + if not client then + return + end + + vim.keymap.set("n", "gl", vim.diagnostic.open_float, { + desc = "Show diagnostics under the cursor", + silent = true, + buffer = event.buf, + }) + + vim.keymap.set("n", "gd", vim.lsp.buf.definition, { + desc = "Go to definition", + silent = true, + buffer = event.buf, + }) + + vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { + desc = "Go to declaration", + silent = true, + buffer = event.buf, + }) + + vim.keymap.set("n", "", vim.lsp.buf.rename, { + desc = "Renames all references to the symbol under the cursor", + silent = true, + buffer = event.buf, + }) + + vim.keymap.set("n", "", vim.lsp.buf.code_action, { + desc = "Select a code action at cursor position", + silent = true, + buffer = event.buf, + }) + + vim.api.nvim_buf_create_user_command(event.buf, "LspToggleInlayHints", function() + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = event.buf }), { bufnr = event.buf }) + end, { + desc = "Toggle inlay hints", + }) + + if client.name == "vtsls" then + vim.keymap.set("n", "gs", "VtsExec goto_source_definition", { + desc = "Go to source definition", + silent = true, + buffer = event.buf, + }) + + vim.api.nvim_buf_create_user_command(event.buf, "OrganizeImports", function() + vim.lsp.buf.code_action({ + context = { + only = { + "source.organizeImports", + }, + }, + apply = true, + }) + end, { + desc = "Organize imports using vtsls", + }) + elseif client.name == "jsonls" then + -- local orig_handler = vim.lsp.handlers["textDocument/publishDiagnostics"] + -- + -- vim.lsp.handlers["textDocument/publishDiagnostics"] = function(err, result, ctx, config) + -- if result and result.uri:match("%.jsonc$") and result.diagnostics then + -- -- Iterate backward so table.remove is safe + -- for i = #result.diagnostics, 1, -1 do + -- if result.diagnostics[i].code == 519 then + -- table.remove(result.diagnostics, i) + -- end + -- end + -- end + -- -- Pass the filtered diagnostics back to Neovim + -- orig_handler(err, result, ctx, config) + -- end + end + end, + }) + + local serversWithoutWorkspaceDiagnostics = { "oxlint", "tsgo" } + + vim.api.nvim_create_autocmd("LspAttach", { + group = lsp_group, + desc = "Populate workspace diagnostics", + callback = function(event) + local client = vim.lsp.get_client_by_id(event.data.client_id) + + if not client then + return + end + + if vim.list_contains(serversWithoutWorkspaceDiagnostics, client.name) then + -- vim.notify("called workspace diagnostics for " .. client.id) + -- client.notify is deprecated + vim.deprecate = function() end + require("workspace-diagnostics").populate_workspace_diagnostics(client, event.buf) + else + vim.lsp.buf.workspace_diagnostics({ client_id = client.id }) + end + end, + }) + + local installedPacks = require("mason-registry").get_installed_packages() + local lspConfigNames = vim.iter(installedPacks):fold({}, function(acc, pack) + table.insert(acc, pack.spec.neovim and pack.spec.neovim.lspconfig) + return acc + end) + vim.lsp.enable(lspConfigNames) + vim.lsp.enable("oxlint") + end, + }, + + { + "Myzel394/config-lsp.nvim", + event = "VeryLazy", + opts = { + inject_lsp = true, + add_filetypes = true, + }, + }, + + { + "nvimtools/none-ls.nvim", + dependencies = { + "nvimtools/none-ls-extras.nvim", + }, + config = function() + require("null-ls").setup({ + sources = { + require("null-ls.builtins.code_actions.gitrebase"), + require("null-ls.builtins.code_actions.gitsigns"), + }, + }) + end, + }, + + { + "altermo/ultimate-autopair.nvim", + enabled = true, + event = { "InsertEnter", "CmdlineEnter" }, + config = function() + require("ultimate-autopair").setup({ + fastwarp = { + faster = true, + }, + }) + end, + }, + + { + "windwp/nvim-ts-autotag", + enabled = true, + config = function() + require("nvim-ts-autotag").setup({ + opts = { + enable_close_on_slash = true, + }, + }) + end, + }, + + { + "saghen/blink.pairs", + version = "*", + enabled = false, + dependencies = { "saghen/blink.download" }, + ---@diagnostic disable-next-line: type-not-found + ---@type blink.pairs.Config + ---@diagnostic disable-next-line: missing-fields + opts = { + ---@diagnostic disable-next-line: missing-fields + mappings = { + cmdline = false, + }, + ---@diagnostic disable-next-line: missing-fields + highlights = { + enabled = false, + }, + }, + }, + + { + "windwp/nvim-autopairs", + enabled = false, + event = "InsertEnter", + config = function() + require("nvim-autopairs").setup({ + fast_wrap = {}, + }) + end, + }, + + { + "tronikelis/ts-autotag.nvim", + enabled = false, + config = function() + require("ts-autotag").setup({ + auto_rename = { + enabled = true, + }, + }) + end, + }, + + { + "wansmer/treesj", + keys = { + { + "s", + function() + require("treesj").toggle({ split = { recursive = true } }) + end, + desc = "Toggle node (split/join)", + }, + }, + ---@class TreeSJ.Settings + ---@field use_default_keymaps boolean Use default keymaps (m - toggle, j - join, s - split) + ---@field check_syntax_error boolean Node with syntax error will not be formatted + ---@field max_join_length number If line after join will be longer than max value, node will not be formatted + ---Cursor behavior: + ---hold - cursor follows the node/place on which it was called + ---start - cursor jumps to the first symbol of the node being formatted + ---end - cursor jumps to the last symbol of the node being formatted + ---@field cursor_behavior 'hold'|'start'|'end' + ---@field notify boolean Notify about possible problems or not + ---@field langs table Presets for languages + ---@field dot_repeat boolean Use `dot` for repeat action + ---@field on_error nil|function Callback for treesj error handler. func (err_text, level, ...) + opts = { + use_default_keymaps = false, + -- max_join_length = 600, + }, + }, + + { + "antosha417/nvim-lsp-file-operations", + requires = { + "nvim-neo-tree/neo-tree.nvim", + }, + config = true, + }, + + { + "luckasRanarison/tailwind-tools.nvim", + enabled = false, + config = true, + }, + + { + "chrisgrieser/nvim-rulebook", + config = true, + }, + + { + "rachartier/tiny-inline-diagnostic.nvim", + opts = { + preset = "modern", + options = { + -- Display the source of diagnostics (e.g., "lua_ls", "pyright") + show_source = { + enabled = true, -- Enable showing source names + if_many = true, -- Only show source if multiple sources exist for the same diagnostic + }, + + -- Use icons from vim.diagnostic.config instead of preset icons + use_icons_from_diagnostic = false, + + -- Color the arrow to match the severity of the first diagnostic + set_arrow_to_diag_color = true, + + -- Throttle update frequency in milliseconds to improve performance + -- Higher values reduce CPU usage but may feel less responsive + -- Set to 0 for immediate updates (may cause lag on slow systems) + throttle = 20, + + -- Minimum number of characters before wrapping long messages + softwrap = 30, + + -- Control how diagnostic messages are displayed + -- NOTE: When using display_count = true, you need to enable multiline diagnostics with multilines.enabled = true + -- If you want them to always be displayed, you can also set multilines.always_show = true. + add_messages = { + messages = true, -- Show full diagnostic messages + display_count = true, -- Show diagnostic count instead of messages when cursor not on line + use_max_severity = true, -- When counting, only show the most severe diagnostic + show_multiple_glyphs = true, -- Show multiple icons for multiple diagnostics of same severity + }, + + -- Settings for multiline diagnostics + multilines = { + enabled = true, -- Enable support for multiline diagnostic messages + always_show = true, -- Always show messages on all lines of multiline diagnostics + trim_whitespaces = false, -- Remove leading/trailing whitespace from each line + tabstop = 4, -- Number of spaces per tab when expanding tabs + severity = { + vim.diagnostic.severity.ERROR, + vim.diagnostic.severity.WARN, + vim.diagnostic.severity.INFO, + }, -- Filter multiline diagnostics by severity (e.g., { vim.diagnostic.severity.ERROR }) + }, + + -- Show all diagnostics on the current cursor line, not just those under the cursor + show_all_diags_on_cursorline = true, + + -- Only show diagnostics when the cursor is directly over them, no fallback to line diagnostics + show_diags_only_under_cursor = false, + + -- Display related diagnostics from LSP relatedInformation + show_related = { + enabled = true, -- Enable displaying related diagnostics + max_count = 3, -- Maximum number of related diagnostics to show per diagnostic + }, + + -- Enable diagnostics display in insert mode + -- May cause visual artifacts; consider setting throttle to 0 if enabled + enable_on_insert = false, + + -- Enable diagnostics display in select mode (e.g., during auto-completion) + enable_on_select = false, + + -- Handle messages that exceed the window width + overflow = { + mode = "wrap", -- "wrap": split into lines, "none": no truncation, "oneline": keep single line + padding = 0, -- Extra characters to trigger wrapping earlier + }, + + -- Break long messages into separate lines + break_line = { + enabled = false, -- Enable automatic line breaking + after = 30, -- Number of characters before inserting a line break + }, + + -- Custom function to format diagnostic messages + -- Receives diagnostic object, returns formatted string + -- Example: function(diag) return diag.message .. " [" .. diag.source .. "]" end + format = nil, + + -- Virtual text display priority + -- Higher values appear above other plugins (e.g., GitBlame) + virt_texts = { + priority = 2048, + }, + + -- Filter diagnostics by severity levels + -- Remove severities you don't want to display + severity = { + vim.diagnostic.severity.ERROR, + vim.diagnostic.severity.WARN, + vim.diagnostic.severity.INFO, + }, + + -- Events that trigger attaching diagnostics to buffers + -- Default is {"LspAttach"}; change only if plugin doesn't work with your LSP setup + overwrite_events = nil, + + -- Automatically disable diagnostics when opening diagnostic float windows + override_open_float = true, -- doesn't seem to work? + }, + }, + }, + + { + "dmmulroy/ts-error-translator.nvim", + enabled = false, + config = true, + }, + + { + "MeanderingProgrammer/render-markdown.nvim", + enabled = false, + config = function() + require("render-markdown").setup({ + preset = "lazy", + overrides = { + buftype = { + nofile = { + code = { left_pad = 0, right_pad = 0 }, + }, + }, + }, + }) + end, + }, + + { + "OXY2DEV/markview.nvim", + enabled = false, + ---@type markview.config + opts = { + preview = { + icon_provider = "devicons", + }, + }, + }, + + { + "nvimdev/indentmini.nvim", + enabled = false, + init = function() + local nord = require("nord.colors").palette + + vim.cmd.highlight("IndentLine guifg=" .. nord.polar_night.brighter) + vim.cmd.highlight("IndentLineCurHide guifg=" .. nord.polar_night.brighter) + vim.cmd.highlight("IndentLineCurrent guifg=" .. nord.polar_night.light) + end, + config = function() + require("indentmini").setup({ + char = "▎", + exclude = { "gitcommit" }, + }) + end, + }, + + { + "lukas-reineke/indent-blankline.nvim", + enabled = false, + main = "ibl", + config = true, + }, + + { + "sontungexpt/better-diagnostic-virtual-text", + enabled = false, + event = "LspAttach", + config = function(_) + require("better-diagnostic-virtual-text").setup() + end, + }, + + { + "ThePrimeagen/refactoring.nvim", + lazy = false, + opts = {}, + }, + + { + "wasabeef/bufferin.nvim", + opts = { + show_window_layout = true, + }, + }, + + { + "marilari88/twoslash-queries.nvim", + opts = { + multi_line = true, + }, + }, +} diff --git a/nvim/.config/nvim/lua/plugins/mason.lua b/nvim/.config/nvim/lua/plugins/mason.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/mason.lua @@ -0,0 +1,70 @@ +---@type LazySpec +return { + { + "mason-org/mason.nvim", + opts = {}, + }, + + { + "mason-org/mason-lspconfig.nvim", + }, + + { + "jay-babu/mason-nvim-dap.nvim", + opts = { + handlers = { + function(config) + require("mason-nvim-dap").default_setup(config) + end, + }, + }, + }, + + { + "WhoIsSethDaniel/mason-tool-installer.nvim", + opts = { + ensure_installed = { + -- lsp/linters + "emmylua_ls", + "clangd", + "jsonls", + "yamlls", + "bashls", + "ruff", + "tailwindcss", + "terraformls", + "vtsls", + -- "tsgo", + -- "oxlint", + "css-lsp", + "html-lsp", + "gopls", + "tombi", + "gh-actions-language-server", + "jdtls", + "rust-analyzer", + "jsonnet-language-server", + "lemminx", + "stylua", + "systemd-lsp", + "shellcheck", + "actionlint", + "systemdlint", + "tflint", + "fish-lsp", + "svelte-language-server", + + -- formatters + "stylua", + "yamlfmt", + "prettier", + "shfmt", + + -- debuggers + "js-debug-adapter", + }, + auto_update = true, + -- debounce_hours = 1, + }, + }, +} diff --git a/nvim/.config/nvim/lua/plugins/nvim-cmp.lua b/nvim/.config/nvim/lua/plugins/nvim-cmp.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/nvim-cmp.lua @@ -0,0 +1,61 @@ +---@diagnostic disable +---@type LazySpec +return { + -- "hrsh7th/nvim-cmp", + "iguanacucumber/magazine.nvim", + enabled = false, + name = "nvim-cmp", + event = "InsertEnter", + dependencies = { + -- "hrsh7th/cmp-nvim-lsp", + -- "hrsh7th/cmp-path", + { "iguanacucumber/mag-nvim-lsp", name = "cmp-nvim-lsp" }, + { "https://codeberg.org/FelipeLema/cmp-async-path", name = "cmp-path" }, + { "L3MON4D3/LuaSnip", build = "make install_jsregexp" }, + }, + config = function() + local cmp = require("cmp") + + cmp.setup({ + sources = { + -- { name = "copilot" }, + { + name = "nvim_lsp", + ---@param entry cmp.Entry + entry_filter = function(entry) + return entry:get_kind() ~= cmp.lsp.CompletionItemKind.Text + end, + }, + { name = "lazydev", group_index = 0 }, + { name = "path" }, + }, + snippet = { + expand = function(args) + require("luasnip").lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.complete(), + }), + formatting = { + fields = { "abbr", "kind", "menu" }, + format = function(entry, item) + local color_item = require("nvim-highlight-colors").format(entry, { kind = item.kind }) + item = require("lspkind").cmp_format({ + -- before = require("tailwind-tools.cmp").lspkind_format, + })(entry, item) + if color_item.abbr_hl_group then + item.kind_hl_group = color_item.abbr_hl_group + item.kind = color_item.abbr + end + return item + end, + expandable_indicator = true, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + }) + end, +} diff --git a/nvim/.config/nvim/lua/plugins/package-info.lua b/nvim/.config/nvim/lua/plugins/package-info.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/package-info.lua @@ -0,0 +1,24 @@ +---@type LazySpec +return { + "vuki656/package-info.nvim", + enabled = false, + dependencies = { + "MunifTanjim/nui.nvim", + }, + config = function() + local nord = require("nord.colors").palette + + require("package-info").setup({ + colors = { + up_to_date = nord.polar_night.origin, + outdated = nord.aurora.orange, + error = nord.aurora.error, + }, + }) + + -- https://github.com/vuki656/package-info.nvim/issues/155 + vim.api.nvim_set_hl(0, "PackageInfoUpToDate", { fg = nord.polar_night.origin }) + vim.api.nvim_set_hl(0, "PackageInfoOutdated", { fg = nord.aurora.orange }) + vim.api.nvim_set_hl(0, "PackageInfoError", { fg = nord.aurora.error }) + end, +} diff --git a/nvim/.config/nvim/lua/plugins/plugins.lua b/nvim/.config/nvim/lua/plugins/plugins.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/plugins.lua @@ -0,0 +1,829 @@ +---@type LazySpec +return { + { + "nvim-lua/plenary.nvim", + }, + + { + "folke/which-key.nvim", + event = "VeryLazy", + config = function() + require("which-key").setup({ + preset = "modern", + }) + end, + }, + + { + "nvim-lualine/lualine.nvim", + dependencies = { + "nvim-tree/nvim-web-devicons", + "yavorski/lualine-macro-recording.nvim", + }, + config = function() + local lualine = require("lualine") + local startuptime_visible = true + -- hide startup time after 3 seconds + vim.defer_fn(function() + startuptime_visible = false + end, 3000) + + lualine.setup({ + options = { + theme = "nord", + component_separators = "|", + section_separators = { left = "", right = "" }, + }, + sections = { + lualine_a = { + { + function() + return " " + end, + padding_left = 1, + color = "Normal", + }, + { "mode", separator = { left = "" } }, + }, + lualine_b = { + { "filename" }, + { "branch" }, + { "diff" }, + { "diagnostics" }, + }, + lualine_c = { + "macro_recording", + }, + lualine_x = { + { + function() + return math.floor(require("lazy").stats().startuptime) .. "ms" + end, + icon = "󱎫", + cond = function() + return startuptime_visible + end, + }, + }, + lualine_y = { + { "filetype" }, + { "fileformat", icons_enabled = false }, + { "progress" }, + }, + lualine_z = { + { "location", separator = { right = "" } }, + { + function() + return " " + end, + padding_right = 1, + color = "Normal", + }, + }, + }, + }) + end, + }, + + { + "zbirenbaum/copilot.lua", + enabled = false, + config = function() + require("copilot").setup({ + filetypes = { + gitcommit = true, + markdown = true, + yaml = true, + }, + panel = { + enabled = false, + }, + suggestion = { + auto_trigger = true, + keymap = { + accept = "", + accept_word = "", + accept_line = "", + next = "", + prev = "", + dismiss = "", + }, + }, + }) + end, + }, + + { + "supermaven-inc/supermaven-nvim", + enabled = true, + config = function() + require("supermaven-nvim").setup({ + keymaps = { + accept_suggestion = "", + accept_word = "", + clear_suggestion = "", + }, + ignore_filetypes = { "grug-far" }, + }) + end, + }, + + --TODO: configure + { + "folke/trouble.nvim", + dependencies = { + "nvim-tree/nvim-web-devicons", + }, + cmd = { "Trouble" }, + keys = { + { "t", "Trouble" }, + }, + config = true, + }, + + { + "nvim-neo-tree/neo-tree.nvim", + event = { "BufEnter" }, + branch = "v3.x", + dependencies = { + "nvim-tree/nvim-web-devicons", + "muniftanjim/nui.nvim", + }, + keys = { + { "", "Neotree toggle", desc = "Toggle Neotree" }, + { "fh", "Neotree reveal", desc = "Reveal file in Neotree" }, + }, + config = function() + require("neo-tree").setup({ + close_if_last_window = true, + filesystem = { + follow_current_file = { + enabled = true, + leave_dirs_open = true, + }, + filtered_items = { + visible = true, + never_show = { + "..", + "node_modules", + }, + }, + find_command = "fd", + find_args = { + fd = { + "--exclude", + ".git", + "--exclude", + "node_modules", + }, + }, + hijack_netrw_behavior = "disabled", + use_libuv_file_watcher = true, + }, + event_handlers = { + -- { + -- event = "file_opened", + -- handler = function() + -- require("neo-tree.command").execute({ action = "close" }) + -- end, + -- }, + }, + window = { + mappings = { + ["P"] = { "toggle_preview", config = { use_float = false } }, + }, + }, + renderers = { + directory = { + { "indent" }, + { "icon" }, + { "current_filter" }, + { + "container", + content = { + { "name", zindex = 10 }, + { + "symlink_target", + zindex = 10, + highlight = "NeoTreeSymbolicLinkTarget", + }, + { "clipboard", zindex = 10 }, + { "diagnostics", errors_only = false, zindex = 20, align = "right", hide_when_expanded = true }, + { "git_status", zindex = 10, align = "right", hide_when_expanded = true }, + { "file_size", zindex = 10, align = "right" }, + { "type", zindex = 10, align = "right" }, + { "last_modified", zindex = 10, align = "right" }, + { "created", zindex = 10, align = "right" }, + }, + }, + }, + }, + }) + end, + }, + + { + "echasnovski/mini.files", + enabled = false, + keys = { + { "", "lua if not MiniFiles.close() then MiniFiles.open() end", desc = "Toggle MiniFiles" }, + }, + config = function() + require("mini.files").setup({ + mappings = { + close = "", + }, + }) + end, + }, + + { + "stevearc/oil.nvim", + event = "VeryLazy", + config = function() + require("oil").setup({ + skip_confirm_for_simple_edits = true, + prompt_save_on_select_new_entry = false, + watch_for_changes = true, + }) + end, + }, + + { + "rcarriga/nvim-notify", + enabled = false, + config = function() + require("notify").setup({ + stages = "static", + max_height = function() + return math.floor(vim.o.lines * 0.75) + end, + max_width = function() + return math.floor(vim.o.columns * 0.75) + end, + on_open = function(win) + vim.api.nvim_win_set_config(win, { zindex = 100 }) + vim.api.nvim_set_option_value("wrap", true, { scope = "local", win = win }) + end, + merge_duplicates = false, + }) + end, + }, + + { + "folke/noice.nvim", + enabled = true, + dependencies = { + "muniftanjim/nui.nvim", + "smjonas/inc-rename.nvim", + }, + ---@type NoiceConfig + ---@diagnostic disable-next-line: missing-fields + opts = { + routes = { + { + view = "notify", + filter = { + event = "msg_show", + kind = { "", "echo", "echomsg", "lua_print", "list_cmd" }, + }, + }, + }, + lsp = { + override = { + ["vim.lsp.util.convert_input_to_markdown_lines"] = true, + ["vim.lsp.util.stylize_markdown"] = true, + ["cmp.entry.get_documentation"] = true, + }, + progress = { + enabled = false, + }, + hover = { + silent = true, + }, + }, + ---@diagnostic disable-next-line: missing-fields + presets = { + bottom_search = true, + long_message_to_split = true, + inc_rename = true, + lsp_doc_border = true, + }, + popupmenu = { + backend = "nui", -- cmp seems broken? + }, + }, + }, + + { "stevearc/dressing.nvim" }, + + { + -- "andweeb/presence.nvim", + "jiriks74/presence.nvim", + enabled = true, + config = function() + require("presence").setup({ + show_time = true, + neovim_image_text = "Neovim", + -- log_level = "debug", + }) + end, + }, + + { + "stevearc/qf_helper.nvim", + keys = { + { "", "QNext" }, + { "", "QPrev" }, + { "q", "QFToggle!" }, + { "l", "LLToggle!" }, + }, + config = true, + }, + + { + "yorickpeterse/nvim-pqf", + config = true, + }, + + { + "mrcjkb/nvim-lastplace", + }, + + { + "kylechui/nvim-surround", + ---@type user_options + opts = { + surrounds = { + ["k"] = { + find = function() + return require("nvim-surround.config").get_selection({ motion = "af" }) + end, + }, + }, + }, + }, + + { + "numtostr/comment.nvim", + config = true, + }, + + { + "monaqa/dial.nvim", + keys = { + { "", "lua require('dial.map').manipulate('increment', 'normal')", mode = { "n", "v" } }, + { "", "lua require('dial.map').manipulate('decrement', 'normal')", mode = { "n", "v" } }, + { "g", "lua require('dial.map').manipulate('increment', 'gnormal')", mode = { "n", "v" } }, + { "g", "lua require('dial.map').manipulate('decrement', 'gnormal')", mode = { "n", "v" } }, + }, + config = function() + local augend = require("dial.augend") + + require("dial.config").augends:register_group({ + default = { + augend.integer.alias.decimal, + augend.integer.alias.hex, + augend.date.alias["%Y/%m/%d"], + augend.date.alias["%Y-%m-%d"], + augend.constant.alias.bool, + }, + }) + end, + }, + + { + "j-hui/fidget.nvim", + config = true, + }, + + { + "lewis6991/gitsigns.nvim", + event = "VeryLazy", + config = true, + }, + + { + "JopjeKnopje/42header_codam", + enabled = false, + cmd = { "Stdheader" }, + keys = { + { "", "Stdheader", desc = "Insert Codam header" }, + }, + }, + + { + "cacharle/c_formatter_42.vim", + enabled = false, + cmd = { "CFormatter42" }, + keys = { + { "", "CFormatter42", desc = "Format C code" }, + }, + }, + + { + "TimUntersberger/neogit", + config = function() + require("neogit").setup({ + commit_popup = { + kind = "floating", + }, + popup = { + kind = "floating", + }, + }) + end, + }, + + { + "sindrets/diffview.nvim", + config = true, + }, + + { + "abecodes/tabout.nvim", + config = true, + }, + + { + "NMAC427/guess-indent.nvim", + config = true, + }, + + { + "NvChad/nvim-colorizer.lua", + enabled = false, + main = "colorizer", + config = function() + require("colorizer").setup({ + filetypes = { "*", "!lazy" }, + user_default_options = { + RGB = true, -- #RGB hex codes + RRGGBB = true, -- #RRGGBB hex codes + names = false, -- "Name" codes like Blue or blue + RRGGBBAA = false, -- #RRGGBBAA hex codes + AARRGGBB = false, -- 0xAARRGGBB hex codes + rgb_fn = true, -- CSS rgb() and rgba() functions + hsl_fn = true, -- CSS hsl() and hsla() functions + css = true, -- Enable all CSS features: rgb_fn, hsl_fn, names, RGB, RRGGBB + css_fn = true, -- Enable all CSS *functions*: rgb_fn, hsl_fn + -- Available modes for `mode`: foreground, background, virtualtext + mode = "background", + -- Available methods are false / true / "normal" / "lsp" / "both" + -- True is same as normal + tailwind = "both", + sass = { + enable = true, + parsers = { "css" }, + }, + virtualtext = "■", + -- update color values even if buffer is not focused + -- example use: cmp_menu, cmp_docs + always_update = true, + }, + }) + end, + }, + + { + "brenoprata10/nvim-highlight-colors", + enabled = true, + config = function() + require("nvim-highlight-colors").setup({ + render = "virtual", + enable_tailwind = false, + exclude_filetypes = { "gitcommit", "lazy", "help" }, + }) + end, + }, + + { + "xorid/swap-split.nvim", + config = function() + require("swap-split").setup({ + ignore_filetypes = { "NvimTree", "neo-tree", "notify", "snacks_notif", "toggleterm", "Trouble", "qf" }, + }) + end, + }, + + { + "lambdalisue/vim-suda", + init = function() + vim.g.suda_smart_edit = true + vim.g.suda_nopass = true + end, + }, + + { + "mfussenegger/nvim-dap", + dependencies = { + "rcarriga/nvim-dap-ui", + "nvim-neotest/nvim-nio", + "theHamsta/nvim-dap-virtual-text", + { + "ldelossa/nvim-dap-projects", + config = function() + require("nvim-dap-projects").search_project_config() + end, + }, + }, + config = function() + local dap = require("dap") + local dapui = require("dapui") + + dap.listeners.after.event_initialized["dapui_config"] = function() + dapui.open({}) + end + + dap.listeners.before.event_terminated["dapui_config"] = function() + dapui.close({}) + end + + dap.listeners.before.event_exited["dapui_config"] = function() + dapui.close({}) + end + end, + }, + + { + "Shatur/neovim-session-manager", + enabled = false, + main = "session_manager", + opts = function() + local config = require("session_manager.config") + ---@class SessionManager.Settings + ---@field sessions_dir Path The directory where the session files will be saved. + ---@field session_filename_to_dir function(string): Path Function that replaces symbols into separators and colons to transform filename into a session directory. + ---@field dir_to_session_filename function(string): Path Function that replaces separators and colons into special symbols to transform session directory into a filename. Should use `vim.uv.cwd()` if the passed `dir` is `nil`. + ---@field autoload_mode ('Disabled'|'CurrentDir'|'LastSession'|'GitSession')[] Define what to do when Neovim is started without arguments. See "Autoload mode" section below. + ---@field autosave_last_session boolean Automatically save last session on exit and on session switch. + ---@field autosave_ignore_not_normal boolean Plugin will not save a session when no buffers are opened, or all of them aren't writable or listed. + ---@field autosave_ignore_dirs string[] A list of directories where the session will not be autosaved. + ---@field autosave_ignore_filetypes string[] All buffers of these file types will be closed before the session is saved. + ---@field autosave_ignore_buftypes string[] All buffers of these bufer types will be closed before the session is saved. + ---@field autosave_only_in_session boolean Always autosaves session. If true, only autosaves after a session is active. + ---@field max_path_length number Shorten the display path if length exceeds this threshold. Use 0 if don't want to shorten the path at all. + return { + autoload_mode = { config.AutoloadMode.GitSession, config.AutoloadMode.CurrentDir }, + autosave_ignore_dirs = { "~" }, + } + end, + }, + + { + "rmagatti/auto-session", + dependencies = { + "nvim-telescope/telescope.nvim", + }, + lazy = false, + ---@type AutoSession.Config + opts = { + suppressed_dirs = { "~/", "~/downloads" }, + args_allow_single_directory = false, + session_lens = { + previewer = "summary", + picker = "telescope", + picker_opts = { + preview = true, + }, + }, + }, + }, + + { + "chentoast/marks.nvim", + config = true, + }, + + { + "jinh0/eyeliner.nvim", + config = function() + require("eyeliner").setup({ + highlight_on_key = true, + dim = true, + }) + end, + }, + + { + "bfredl/nvim-luadev", + cmd = { "Luadev" }, + keys = { + { mode = "n", "rl", "(Luadev-RunLine)", desc = "Execute line" }, + { mode = { "n", "v" }, "rr", "(Luadev-Run)", desc = "Execute movement/object" }, + { mode = "n", "rw", "(Luadev-RunWord)", desc = "Execute word" }, + }, + }, + + { + "aserowy/tmux.nvim", + keys = { + { "", "lua require('tmux').move_left()", desc = "Move left", mode = { "n", "t" } }, + { "", "lua require('tmux').move_bottom()", desc = "Move bottom", mode = { "n", "t" } }, + { "", "lua require('tmux').move_top()", desc = "Move top", mode = { "n", "t" } }, + { "", "lua require('tmux').move_right()", desc = "Move right", mode = { "n", "t" } }, + { "", "lua require('tmux').resize_left()", desc = "Resize left", mode = { "n", "t" } }, + { "", "lua require('tmux').resize_bottom()", desc = "Resize bottom", mode = { "n", "t" } }, + { "", "lua require('tmux').resize_top()", desc = "Resize top", mode = { "n", "t" } }, + { "", "lua require('tmux').resize_right()", desc = "Resize right", mode = { "n", "t" } }, + }, + config = function() + require("tmux").setup({ + navigation = { + enable_default_keybindings = false, + }, + resize = { + enable_custom_bindings = false, + resize_step_x = 5, + resize_step_y = 5, + }, + copy_sync = { + sync_clipboard = false, + }, + }) + end, + }, + + { + "Bekaboo/dropbar.nvim", + dependencies = { + "nvim-telescope/telescope-fzf-native.nvim", + }, + init = function() + vim.cmd.highlight("WinBar guibg=none") + vim.cmd.highlight("WinBarNC guibg=none") + end, + config = true, + }, + + { + "nanozuki/tabby.nvim", + enabled = false, + event = "VeryLazy", + dependencies = { + "nvim-tree/nvim-web-devicons", + }, + config = function() + require("tabby").setup({}) + end, + }, + + { + "tzachar/highlight-undo.nvim", + keys = { "u", "", "p", "P" }, + init = function() + local nord = require("nord.colors").palette + + vim.api.nvim_set_hl(0, "HighlightUndo", { + bg = nord.polar_night.brighter, + fg = nord.snow_storm.brightest, + }) + end, + config = true, + }, + + { + "OXY2DEV/helpview.nvim", + enabled = false, + ft = "help", + }, + + { + "mbbill/undotree", + cmd = { "UndotreeToggle" }, + keys = { + { "u", "UndotreeToggle", desc = "Toggle undotree" }, + }, + init = function() + vim.g.undotree_WindowLayout = 2 + vim.g.undotree_SplitWidth = 38 + vim.g.undotree_DiffpanelHeight = 14 + vim.g.undotree_SetFocusWhenToggle = 1 + vim.g.undotree_DiffCommand = "diff" + end, + }, + + { + "akinsho/git-conflict.nvim", + opts = { + debug = false, + default_mappings = true, -- disable buffer local mapping created by this plugin + default_commands = true, -- disable commands created by this plugin + disable_diagnostics = true, -- This will disable the diagnostics in a buffer whilst it is conflicted + list_opener = "copen", -- command or function to open the conflicts list + highlights = { -- They must have background color, otherwise the default color will be used + incoming = "DiffAdd", + current = "DiffText", + ancestor = "DiffChange", + }, + }, + }, + + { + "MagicDuck/grug-far.nvim", + ---@type grug.far.OptionsOverride + opts = { + windowCreationCommand = "split", + transient = true, + }, + }, + + { + "kristijanhusak/vim-dadbod-ui", + dependencies = { + { "tpope/vim-dadbod", lazy = true }, + { "kristijanhusak/vim-dadbod-completion", ft = { "sql", "mysql", "plsql" }, lazy = true }, + }, + cmd = { + "DBUI", + "DBUIToggle", + "DBUIAddConnection", + "DBUIFindBuffer", + }, + init = function() + vim.g.db_ui_use_nerd_fonts = 1 + end, + }, + + { + "DNLHC/glance.nvim", + config = true, + }, + + { + "stevearc/aerial.nvim", + config = true, + }, + + { + "isak102/ghostty.nvim", + config = true, + }, + + { + "chrisgrieser/nvim-recorder", + config = true, + }, + + { + "mcauley-penney/tidy.nvim", + config = true, + }, + + { + "saghen/blink.indent", + init = function() + ---@type Nord.Palette + local nord = require("nord.colors").palette + + vim.api.nvim_set_hl(0, "BlinkIndent", { fg = nord.polar_night.brighter }) + vim.api.nvim_set_hl(0, "BlinkIndentScope", { fg = nord.polar_night.light }) + end, + opts = { + static = { + char = "▏", + }, + scope = { + char = "▏", + highlights = { "BlinkIndentScope" }, + }, + }, + }, + + { + "folke/snacks.nvim", + priority = 1000, + lazy = false, + ---@type snacks.Config + opts = { + notifier = { + enabled = true, + timeout = 5000, + keep = function(_notif) + return vim.fn.getcmdpos() > 0 + end, + }, + styles = { + notification = { + wo = { wrap = true }, + }, + }, + terminal = {}, + }, + }, + + { + "HawkinsT/pathfinder.nvim", + opts = {}, + }, + + { + "relf108/nvim-unstack", + opts = {}, + }, + + { + "kokusenz/deltaview.nvim", + opts = {}, + }, +} diff --git a/nvim/.config/nvim/lua/plugins/scroll.lua b/nvim/.config/nvim/lua/plugins/scroll.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/scroll.lua @@ -0,0 +1,95 @@ +---@type LazySpec +return { + { + "karb94/neoscroll.nvim", + enabled = false, + keys = { + { + "", + function() + require("neoscroll").ctrl_u({ duration = 150 }) + end, + desc = "Scroll up", + mode = { "n", "v", "x" }, + }, + { + "", + function() + require("neoscroll").ctrl_d({ duration = 150 }) + end, + desc = "Scroll down", + mode = { "n", "v", "x" }, + }, + { + "", + function() + require("neoscroll").scroll(-0.1, { duration = 50 }) + end, + desc = "Scroll up slightly", + mode = { "n", "v", "x" }, + }, + { + "", + function() + require("neoscroll").scroll(0.1, { duration = 50 }) + end, + desc = "Scroll down slightly", + mode = { "n", "v", "x" }, + }, + }, + config = function() + require("neoscroll").setup({ + easing_function = "quadratic", + mappings = {}, + ignored_events = {}, + }) + end, + }, + + { + "lewis6991/satellite.nvim", + enabled = false, + }, + + -- { + -- "petertriho/nvim-scrollbar", + -- dependencies = { + -- "kevinhwang91/nvim-hlslens", + -- }, + -- config = function() + -- require("scrollbar").setup({ + -- folds = false, + -- handle = { + -- color = require("nord.colors").palette.polar_night.brighter, + -- }, + -- handlers = { + -- -- search = true, + -- }, + -- }) + -- end, + -- }, + -- + -- { + -- "dstein64/nvim-scrollview", + -- config = function() + -- require("scrollview").setup({ + -- winblend_gui = 20, + -- excluded_filetypes = { "neo-tree" }, + -- floating_windows = true, + -- }) + -- end, + -- }, + -- + -- { + -- "kevinhwang91/nvim-hlslens", + -- keys = { + -- { "n", "execute('normal! ' . v:count1 . 'n')lua require('hlslens').start()" }, + -- { "N", "execute('normal! ' . v:count1 . 'N')lua require('hlslens').start()" }, + -- { "*", "*lua require('hlslens').start()" }, + -- { "#", "#lua require('hlslens').start()" }, + -- { "g*", "g*lua require('hlslens').start()" }, + -- { "g#", "g#lua require('hlslens').start()" }, + -- }, + -- config = true, + -- }, +} diff --git a/nvim/.config/nvim/lua/plugins/telescope.lua b/nvim/.config/nvim/lua/plugins/telescope.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/telescope.lua @@ -0,0 +1,96 @@ +---@type LazySpec +return { + { + "nvim-telescope/telescope.nvim", + version = "*", + dependencies = { + "nvim-tree/nvim-web-devicons", + "Myzel394/jsonfly.nvim", + }, + cmd = { "Telescope" }, + keys = { + { "", "Telescope resume", desc = "Telescope resume" }, + { "", "Telescope find_files", desc = "Telescope find files" }, + { "", "Telescope buffers", desc = "Telescope buffers" }, + { "", "Telescope live_grep", desc = "Telescope grep" }, + { "", "Telescope help_tags", desc = "Telescope help" }, + { "", "Telescope man_pages", desc = "Telescope man" }, + --{ 'gd', 'Telescope lsp_definitions', desc = 'Telescope definitions' }, + --{ 'gi', 'Telescope implementations', desc = 'Telescope implementations' }, + { "", "Telescope diagnostics", desc = "Telescope diagnostics" }, + { "", "Telescope file_browser", desc = "Telescope file browser" }, + }, + config = function() + require("telescope").setup({ + defaults = { + sorting_strategy = "ascending", + layout_config = { + prompt_position = "top", + }, + file_ignore_patterns = { "%.git/" }, + mappings = { + i = { + [""] = require("telescope.actions").to_fuzzy_refine, + }, + }, + }, + pickers = { + find_files = { + theme = "dropdown", + hidden = true, + }, + buffers = { + theme = "dropdown", + }, + live_grep = { + theme = "dropdown", + }, + help_tags = { + theme = "dropdown", + }, + man_pages = { + theme = "dropdown", + }, + }, + }) + end, + }, + + { + "debugloop/telescope-undo.nvim", + dependencies = { + "nvim-telescope/telescope.nvim", + }, + config = function() + require("telescope").setup({ + extensions = { + undo = { + layout_strategy = "vertical", + layout_config = { + preview_height = 0.6, + }, + mappings = { + i = { + [""] = require("telescope-undo.actions").restore, + ["C-y"] = require("telescope-undo.actions").yank_additions, + ["C-s"] = require("telescope-undo.actions").yank_deletions, + }, + }, + }, + }, + }) + + require("telescope").load_extension("undo") + end, + }, + + { + "nvim-telescope/telescope-file-browser.nvim", + dependencies = { + "nvim-telescope/telescope.nvim", + }, + config = function() + require("telescope").load_extension("file_browser") + end, + }, +} diff --git a/nvim/.config/nvim/lua/plugins/treesitter.lua b/nvim/.config/nvim/lua/plugins/treesitter.lua new file mode 100644 --- /dev/null +++ b/nvim/.config/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,112 @@ +local augroup = vim.api.nvim_create_augroup("treesitter", { clear = true }) + +return { + { + "nvim-treesitter/nvim-treesitter", + lazy = false, + branch = "main", + build = ":TSUpdate", + config = function() + require("nvim-treesitter").install({ + "lua", + "vim", + "vimdoc", + "bash", + "fish", + "javascript", + "typescript", + "tsx", + "html", + "css", + "diff", + "json", + "markdown", + "markdown_inline", + "latex", + "typst", + "regex", + "python", + "ruby", + "c", + "go", + "elixir", + "rust", + "toml", + }) + + vim.api.nvim_create_autocmd("FileType", { + pattern = { "*" }, + group = augroup, + callback = function(event) + function treesitter_install() + -- local filetype = vim.api.nvim_get_option_value("filetype", { buf = event.buf }) + local filetype = event.match + + local ok, treesitter = pcall(require, "nvim-treesitter") + if not ok then + vim.defer_fn(treesitter_install, 1000) + return + end + + ---@diagnostic disable-next-line: redefined-local + local ok, parsers = pcall(require, "nvim-treesitter.parsers") + if not ok or not parsers[filetype] then + return + end + + ---@diagnostic disable-next-line: param-type-mismatch, redefined-local + if not pcall(treesitter.install, filetype) then + vim.defer_fn(treesitter_install, 1000) + return + end + + if filetype == "" or not vim.treesitter.language.add(filetype) then + return + end + + vim.treesitter.start() + end + + treesitter_install() + end, + }) + end, + }, + + { + "nvim-treesitter/nvim-treesitter-textobjects", + branch = "main", + config = function() + ---@diagnostic disable-next-line: need-check-nil + require("nvim-treesitter-textobjects").setup({ + select = { + enable = true, + lookahead = true, + }, + move = { + enable = true, + set_jumps = true, + }, + }) + + local keymaps = { + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ac"] = "@comment.outer", + ["ic"] = "@comment.outer", + ["aa"] = "@parameter.outer", + ["ia"] = "@parameter.inner", + } + + for keys, selector in pairs(keymaps) do + vim.keymap.set({ "x", "o" }, keys, function() + require("nvim-treesitter-textobjects.select").select_textobject(selector, "textobjects") + end) + end + end, + }, + + { + "RRethy/nvim-treesitter-endwise", + }, +} diff --git a/plex/.local/share/applications/tv.plex.PlexDesktop.desktop b/plex/.local/share/applications/tv.plex.PlexDesktop.desktop new file mode 100644 --- /dev/null +++ b/plex/.local/share/applications/tv.plex.PlexDesktop.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Name=Plex +Comment=Plex client for desktop computers +Exec=env QT_QPA_PLATFORM=wayland Plex +Icon=tv.plex.PlexDesktop +Terminal=false +Categories=AudioVideo;Player;X-Media; +X-Flatpak=tv.plex.PlexDesktop diff --git a/python/.config/python_keyring/keyringrc.cfg b/python/.config/python_keyring/keyringrc.cfg new file mode 100644 --- /dev/null +++ b/python/.config/python_keyring/keyringrc.cfg @@ -0,0 +1,2 @@ +[backend] +default-keyring=keyring.backends.libsecret.Keyring diff --git a/shellcheck/.shellcheckrc b/shellcheck/.shellcheckrc new file mode 100644 --- /dev/null +++ b/shellcheck/.shellcheckrc @@ -0,0 +1,1 @@ +disable=SC2034 diff --git a/spotify-player/.config/spotify-player/app.toml b/spotify-player/.config/spotify-player/app.toml new file mode 100644 --- /dev/null +++ b/spotify-player/.config/spotify-player/app.toml @@ -0,0 +1,1 @@ +client_id = "53dbc95696b346409b08e0954f483419" diff --git a/starship/.config/starship.toml b/starship/.config/starship.toml --- a/starship/.config/starship.toml +++ b/starship/.config/starship.toml @@ -19,6 +19,14 @@ [hostname] style = "bold dimmed white" ssh_symbol = " " +[custom.jj] +command = "prompt" +format = "$output" +ignore_timeout = true +shell = ["starship-jj", "--ignore-working-copy", "starship"] +use_stdin = false +when = true + [aws] symbol = " " diff --git a/sysctl/etc/sysctld.d/99-sysctl.conf b/sysctl/etc/sysctld.d/99-sysctl.conf --- a/sysctl/etc/sysctld.d/99-sysctl.conf +++ b/sysctl/etc/sysctld.d/99-sysctl.conf @@ -1,7 +1,7 @@ -net.core.wmem_max = 4194304 -net.core.rmem_max = 12582912 -net.ipv4.tcp_rmem = 4096 87380 4194304 -net.ipv4.tcp_wmem = 4096 87380 4194304 +#net.core.wmem_max = 4194304 +#net.core.rmem_max = 12582912 +#net.ipv4.tcp_rmem = 4096 87380 4194304 +#net.ipv4.tcp_wmem = 4096 87380 4194304 net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr diff --git a/systemd/.config/systemd/user/imwheel.service b/imwheel/.config/systemd/user/imwheel.service rename from systemd/.config/systemd/user/imwheel.service rename to imwheel/.config/systemd/user/imwheel.service --- a/systemd/.config/systemd/user/imwheel.service +++ b/imwheel/.config/systemd/user/imwheel.service diff --git a/systemd/.config/systemd/user/plex-rich-presence.service b/plex-rich-presence/.config/systemd/user/plex-rich-presence.service rename from systemd/.config/systemd/user/plex-rich-presence.service rename to plex-rich-presence/.config/systemd/user/plex-rich-presence.service --- a/systemd/.config/systemd/user/plex-rich-presence.service +++ b/plex-rich-presence/.config/systemd/user/plex-rich-presence.service @@ -3,7 +3,7 @@ Description=Plex Discord Rich Presence app [Service] Type=simple -ExecStart=sh -c '%h/plex-rich-presence_linux_amd64-*' +ExecStart=sh -c '%h/plex-rich*' Restart=on-failure RestartSec=15s StartLimitInterval=0 diff --git a/systemd/etc/systemd/system/reload-cpu-modules.service b/etc/systemd/system/reload-cpu-modules.service rename from systemd/etc/systemd/system/reload-cpu-modules.service rename to etc/systemd/system/reload-cpu-modules.service --- a/systemd/etc/systemd/system/reload-cpu-modules.service +++ b/etc/systemd/system/reload-cpu-modules.service diff --git a/terminator/.config/terminator/config b/terminator/.config/terminator/config --- a/terminator/.config/terminator/config +++ b/terminator/.config/terminator/config @@ -1,7 +1,6 @@ [global_config] inactive_color_offset = 1.0 - enabled_plugins = ActivityWatch, InactivityWatch, LaunchpadBugURLHandler, LaunchpadCodeURLHandler, APTURLHandler, SaveLastSessionLayout - suppress_multiple_term_dialog = True + enabled_plugins = ActivityWatch, InactivityWatch, LaunchpadBugURLHandler, LaunchpadCodeURLHandler, APTURLHandler disable_mouse_paste = True clear_select_on_copy = True invert_search = True @@ -10,8 +9,8 @@ cycle_next = "" cycle_prev = "" go_next = bracketright go_prev = bracketleft - split_auto = Return - split_horiz = Return + split_auto = Return + split_horiz = "" split_vert = "" next_tab = Tab prev_tab = Tab @@ -20,7 +19,7 @@ help = "" [profiles] [[default]] background_color = "#2E3440" - font = Hack Nerd Font 10 + font = Hack Nerd Font 10.5 foreground_color = "#D8DEE9" show_titlebar = False scrollback_infinite = True @@ -36,4 +35,23 @@ [[[child1]]] type = Terminal parent = window0 profile = default + [[SaveLastSessionLayout]] + [[[child0]]] + type = Window + parent = "" + order = 0 + position = 0:0 + maximised = True + fullscreen = False + size = 2560, 1403 + title = ~ + last_active_term = 3463da18-cdfa-4dcf-9bec-34b402b91ed0 + last_active_window = True + [[[terminal1]]] + type = Terminal + parent = child0 + order = 0 + profile = default + uuid = 3463da18-cdfa-4dcf-9bec-34b402b91ed0 + directory = /home/bas [plugins] diff --git a/throttled/etc/throttled.conf b/throttled/etc/throttled.conf --- a/throttled/etc/throttled.conf +++ b/throttled/etc/throttled.conf @@ -50,11 +50,11 @@ # All voltage values are expressed in mV and *MUST* be negative (i.e. undervolt)! [UNDERVOLT.BATTERY] # CPU core voltage offset (mV) -CORE: -100 +CORE: -125 # Integrated GPU voltage offset (mV) GPU: 0 # CPU cache voltage offset (mV) -CACHE: -100 +CACHE: -125 # System Agent voltage offset (mV) UNCORE: 0 # Analog I/O voltage offset (mV) @@ -63,13 +63,13 @@ # All voltage values are expressed in mV and *MUST* be negative (i.e. undervolt)! [UNDERVOLT.AC] # CPU core voltage offset (mV) -CORE: -100 +CORE: -125 # Integrated GPU voltage offset (mV) -GPU: 0 +GPU: -10 # CPU cache voltage offset (mV) -CACHE: -100 +CACHE: -125 # System Agent voltage offset (mV) -UNCORE: 0 +UNCORE: -10 # Analog I/O voltage offset (mV) ANALOGIO: 0 diff --git a/tmux/.config/tmux/tmux.conf b/tmux/.config/tmux/tmux.conf new file mode 100644 --- /dev/null +++ b/tmux/.config/tmux/tmux.conf @@ -0,0 +1,162 @@ +# change the default shell to be non-login +# set -g default-command "${SHELL}" +# set -g default-command "fish" + +# color support +set -g default-terminal 'tmux-256color' +# additionally hold shift to disable mouse mode and allow clicking on hyperlinks +set -ga terminal-features ",*:RGB,*:usstyle,*:hyperlinks" +# set -ga terminal-overrides ',alacritty:RGB,xterm-256color:RGB' +# set -ga terminal-overrides ',alacritty:Tc,xterm-256color:Tc' + +# get rid of esc delay +set -s escape-time 0 + +# start window index at 1 +set -g base-index 1 + +# teehee +set -g mouse on +bind-key -n MouseDrag1Status swap-window -d -t= + +# show tmux messages for 3 seconds +set -g display-time 3000 + +# place status bar at the top +set -g status-position top + +# increase scrollback buffer size +set -g history-limit 20000 + +# change terminal title +set -g set-titles on + +# forward focus events from terminal to applications +set -g focus-events on + +# automatically renumber windows on close +set -g renumber-windows on + +# use emacs keybinds in command prompt +set -g status-keys emacs + +# allow programs to always bypass tmux using escape sequence +set -g allow-passthrough all + +# allow programs to set clipboard through OSC 52 +set -g set-clipboard on + +# enable CSI u extended keys (kitty keyboard protocol support when) +set -g extended-keys off # breaks bracketed paste in 3.5a, turn back on after next update + +# navigation +bind C-n next-window +bind C-p previous-window + +# use vim keybinds in copy mode +setw -g mode-keys vi + +# below is handled by tmux-yank +# bind -T copy-mode-vi v send-keys -X begin-selection +# bind -T copy-mode-vi C-v send-keys -X rectangle-toggle +# bind -T copy-mode-vi y send-keys -X copy-pipe "wl-copy" +# bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X other-end \; send-keys -X copy-pipe "wl-copy" +# # bind -T copy-mode-vi MouseDown1Pane send -X copy-mode +# bind -T copy-mode-vi i send-keys -X cancel +# bind -T copy-mode-vi Escape send-keys -X cancel + +set -g @yank_selection_mouse 'clipboard' +set -g @yank_action 'copy-pipe' + +# fix tmux within upterm session +set -ga update-environment "UPTERM_ADMIN_SOCKET" + +# toggle synchronize-panes +bind C-x setw synchronize-panes + +# additional zoom keybind +bind -n M-z resize-pane -Z + +# open new panes in the same directory as the current pane +# (braces to appease the tmux tree-sitter parser) +bind % { split-window -h -c "#{pane_current_path}" } +bind '"' { split-window -v -c "#{pane_current_path}" } +bind v { new-window -c "#{pane_current_path}" } + +# I have tmux-matryoshka for nested sessions, but usually I only have one nesting +# level, so it's nice to have a simple shortcut to toggle it +bind -n M-q { + # set environment "NESTED_LAYER" 1 + set prefix None + set key-table off + set status-style fg=colour245,bg=colour238 + # send-keys S-F12 +} + +bind -T off -n M-q { + set -u prefix + set -u key-table + set -u status-style + # send-keys S-F11 +} + +# disable nord status bar +set -g @nord_tmux_show_status_content '0' + +set -g @tmux-nvim-navigation true +set -g @tmux-nvim-navigation-cycle true +set -g @tmux-nvim-navigation-keybinding-left 'M-h' +set -g @tmux-nvim-navigation-keybinding-down 'M-j' +set -g @tmux-nvim-navigation-keybinding-up 'M-k' +set -g @tmux-nvim-navigation-keybinding-right 'M-l' + +set -g @tmux-nvim-resize true +set -g @tmux-nvim-resize-step-x 5 +set -g @tmux-nvim-resize-step-y 5 +set -g @tmux-nvim-resize-keybinding-left 'M-H' +set -g @tmux-nvim-resize-keybinding-down 'M-J' +set -g @tmux-nvim-resize-keybinding-up 'M-K' +set -g @tmux-nvim-resize-keybinding-right 'M-L' + +set -g @resurrect-capture-pane-contents 'on' +set -g @resurrect-processes ' + "ssh" +' + # ":->fish -c \"printf \e\[7A \"""DC" + # "~fish->printf \e\[DC6A" + +set -g @resurrect-hook-pre-restore-all '/usr/bin/fish -c "set -U did_tmux_restore true && echo pre: (date +%s%3N) $did_tmux_restore | systemd-cat"' +set -g @resurrect-hook-post-restore-all 'fish -c "set -e did_tmux_restore && echo post: (date +%s%3N) $did_tmux_restore | systemd-cat"' + +# keybind to disable outer-most active tmux +set -g @matryoshka_down_keybind 'S-F12' +# keybind to enable inner-most inactive tmux +set -g @matryoshka_up_keybind 'S-F11' +# keybind to recursively enable all tmux instances +set -g @matryoshka_up_recursive_keybind 'S-F10' + +set -g @plugin 'nordtheme/tmux' +set -g @plugin 'aserowy/tmux.nvim' +set -g @plugin 'b0o/tmux-autoreload' +set -g @plugin 'tmux-plugins/tmux-resurrect' +set -g @plugin 'tmux-plugins/tmux-sessionist' +set -g @plugin 'tmux-plugins/tmux-logging' +set -g @plugin 'wfxr/tmux-fzf-url' +# set -g @plugin 'niqodea/tmux-matryoshka' +# set -g @plugin 'IdoKendo/tmux-lazy' +set -g @plugin 'alexwforsythe/tmux-which-key' +set -g @plugin 'tmux-plugins/tmux-cowboy' +set -g @plugin 'tmux-plugins/tmux-yank' +# set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'RyanMacG/tpm-redux' + +if "test ! -d ~/.config/tmux/plugins/tpm-redux" { + set-hook -g session-created { + set-hook -gu session-created + run 'git clone https://github.com/RyanMacG/tpm-redux ~/.config/tmux/plugins/tpm-redux' + display-popup -E -w 80% -h 75% "~/.config/tmux/plugins/tpm-redux/bindings/install_plugins" + run "~/.config/tmux/plugins/tpm-redux/tpm" + } +} + +run "~/.config/tmux/plugins/tpm-redux/tpm" diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf deleted file mode 100644 --- a/tmux/.tmux.conf +++ /dev/null @@ -1,87 +0,0 @@ -# change the default shell to be non-login -set -g default-command "${SHELL}" - -# color support -set -g default-terminal 'tmux-256color' -set -ga terminal-overrides ',xterm-256color:RGB' -set -ga terminal-overrides ',xterm-256color:Tc' - -# get rid of esc delay -set -s escape-time 0 - -# start window index at 1 -set -g base-index 1 - -# quicker navigation -bind C-n next-window -bind C-p previous-window - -# sorry -set -g mouse on - -# show tmux messages for 3 seconds -set -g display-time 3000 - -# self-explanatory -set -g status-position top -set -g history-limit 10000 - -# change terminal title -set -g set-titles on - -# forward focus events from terminal to applications -set -g focus-events on - -# use vim keybinds in copy mode -setw -g mode-keys vi -bind -T copy-mode-vi v send-keys -X begin-selection -bind -T copy-mode-vi C-v send-keys -X rectangle-toggle -bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy" -bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "wl-copy" -bind -T copy-mode-vi i send-keys -X cancel -bind -T copy-mode-vi Escape send-keys -X cancel - -# toggle synchronize-panes -bind C-x setw synchronize-panes - -# open new panes in the same directory as the current pane -# (braces to appease the tmux tree-sitter parser) -bind % { split-window -h -c "#{pane_current_path}" } -bind '"' { split-window -v -c "#{pane_current_path}" } -# bind c { new-window -c "#{pane_current_path}" } - -# plugins - -set -g @plugin 'tmux-plugins/tpm' - -set -g @plugin 'nordtheme/tmux' -set -g @nord_tmux_show_status_content '0' - -set -g @plugin 'aserowy/tmux.nvim' -# navigation -set -g @tmux-nvim-navigation true -set -g @tmux-nvim-navigation-cycle true -set -g @tmux-nvim-navigation-keybinding-left 'M-h' -set -g @tmux-nvim-navigation-keybinding-down 'M-j' -set -g @tmux-nvim-navigation-keybinding-up 'M-k' -set -g @tmux-nvim-navigation-keybinding-right 'M-l' -# resize -set -g @tmux-nvim-resize true -set -g @tmux-nvim-resize-step-x 5 -set -g @tmux-nvim-resize-step-y 5 -set -g @tmux-nvim-resize-keybinding-left 'M-H' -set -g @tmux-nvim-resize-keybinding-down 'M-J' -set -g @tmux-nvim-resize-keybinding-up 'M-K' -set -g @tmux-nvim-resize-keybinding-right 'M-L' - -set -g @plugin 'b0o/tmux-autoreload' - -set -g @plugin 'tmux-plugins/tmux-resurrect' -set -g @resurrect-capture-pane-contents 'on' -set -g @resurrect-processes 'ssh' - -set -g @plugin 'wfxr/tmux-fzf-url' - -if "test ! -d ~/.tmux/plugins/tpm" \ - "run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'" -run "~/.tmux/plugins/tpm/tpm" diff --git a/wayland/.config/chrome-flags.conf b/wayland/.config/chrome-flags.conf --- a/wayland/.config/chrome-flags.conf +++ b/wayland/.config/chrome-flags.conf @@ -1,4 +1,17 @@ --enable-features=VaapiVideoDecodeLinuxGL,TouchpadOverscrollHistoryNavigation ---use-gl=angle ---use-angle=gl --ozone-platform-hint=auto +--enable-features=AcceleratedVideoDecodeLinuxZeroCopyGL,AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder,TouchpadOverscrollHistoryNavigation +--disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled +# --disable-smooth-scrolling +# --enable-gpu-compositing +# --enable-gpu-rasterization +# --enable-native-gpu-memory-buffers +# --enable-oop-rasterization +# --canvas-oop-rasterization +# --enable-raw-draw +# --enable-zero-copy +# --ignore-gpu-blocklist +# --disable-gpu-driver-bug-workarounds + +# --enable-spatial-navigation +# --gtk-version=4 +# --use-vulkan diff --git a/wayland/.config/electron-flags.conf b/wayland/.config/electron-flags.conf --- a/wayland/.config/electron-flags.conf +++ b/wayland/.config/electron-flags.conf @@ -1,6 +1,16 @@ ---enable-features=WaylandWindowDecorations --ozone-platform-hint=auto ---enable-webrtc-pipewire-capturer ---enable-blink-features=MiddleClickAutoscroll ---ignore-gpu-blocklist ---enable-features=VaapiVideoDecoder +# --enable-features=WaylandWindowDecorations,AcceleratedVideoDecodeLinuxZeroCopyGL,AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder,TouchpadOverscrollHistoryNavigation,PlatformHEVCDecoderSupport,CanvasOopRasterization +--enable-features=WaylandWindowDecorations,AcceleratedVideoDecodeLinuxZeroCopyGL,AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder,TouchpadOverscrollHistoryNavigation,PlatformHEVCDecoderSupport +# --disable-smooth-scrolling + +# --enable-gpu-compositing +# --enable-gpu-rasterization +# --enable-native-gpu-memory-buffers +# --enable-oop-rasterization +# --canvas-oop-rasterization +# --enable-raw-draw +# --enable-zero-copy +# --ignore-gpu-blocklist +# --disable-gpu-driver-bug-workarounds + +--gtk-version=4 diff --git a/wayland/.config/vivaldi-snapshot.conf b/wayland/.config/vivaldi-snapshot.conf new file mode 100644 --- /dev/null +++ b/wayland/.config/vivaldi-snapshot.conf @@ -0,0 +1,1 @@ +vivaldi-stable.conf \ No newline at end of file diff --git a/wayland/.config/vivaldi-stable.conf b/wayland/.config/vivaldi-stable.conf new file mode 100644 --- /dev/null +++ b/wayland/.config/vivaldi-stable.conf @@ -0,0 +1,1 @@ +chrome-flags.conf \ No newline at end of file diff --git a/wezterm/.config/wezterm/wezterm.lua b/wezterm/.config/wezterm/wezterm.lua new file mode 100644 --- /dev/null +++ b/wezterm/.config/wezterm/wezterm.lua @@ -0,0 +1,18 @@ +local wezterm = require("wezterm") +local config = {} + +config.default_prog = { "/usr/bin/fish" } +config.color_scheme = "nord" +config.font = wezterm.font("Hack") +config.font_size = 11 +config.hide_tab_bar_if_only_one_tab = true + +config.keys = { + { + key = "Enter", + mods = "ALT", + action = wezterm.action.DisableDefaultAssignment, + }, +} + +return config diff --git a/wireplumber/.config/wireplumber/wireplumber.conf.d/10-bluez.conf b/wireplumber/.config/wireplumber/wireplumber.conf.d/10-bluez.conf new file mode 100644 --- /dev/null +++ b/wireplumber/.config/wireplumber/wireplumber.conf.d/10-bluez.conf @@ -0,0 +1,15 @@ +monitor.bluez.rules = [ + { + matches = [ + { + device.name = "~bluez_card.*" + } + ] + actions = { + update-props = { + # bluez5.a2dp.ldac.quality = "hq" + bluez5.a2dp.ldac.quality = "auto" + } + } + } +] diff --git a/wireplumber/.config/wireplumber/wireplumber.conf.d/20-priority.conf b/wireplumber/.config/wireplumber/wireplumber.conf.d/20-priority.conf new file mode 100644 --- /dev/null +++ b/wireplumber/.config/wireplumber/wireplumber.conf.d/20-priority.conf @@ -0,0 +1,41 @@ +monitor.alsa.rules = [ + { + matches = [ + { + node.name = "alsa_output.pci-0000_00_1f.3.analog-stereo" + } + ], + actions = { + update-props = { + priority.driver = 1010 + priority.session = 1010 + } + } + }, + { + matches = [ + { + node.name = "alsa_output.usb-MOTU_M2_M20000023407-00.Direct__Direct__sink" + } + ], + actions = { + update-props = { + priority.driver = 1020 + priority.session = 1020 + } + } + }, + { + matches = [ + { + node.name = "bluez_output.AC_80_0A_E8_27_9A.1" + } + ], + actions = { + update-props = { + priority.driver = 1030 + priority.session = 1030 + } + } + } +] diff --git a/yamlfmt/.config/yamlfmt/yamlfmt.yml b/yamlfmt/.config/yamlfmt/yamlfmt.yml new file mode 100644 --- /dev/null +++ b/yamlfmt/.config/yamlfmt/yamlfmt.yml @@ -0,0 +1,2 @@ +formatter: + retain_line_breaks_single: true diff --git a/yay/.config/yay/config.json b/yay/.config/yay/config.json --- a/yay/.config/yay/config.json +++ b/yay/.config/yay/config.json @@ -1,50 +1,50 @@ { - "aururl": "https://aur.archlinux.org", - "aurrpcurl": "https://aur.archlinux.org/rpc?", - "buildDir": "/home/bas/.cache/yay", - "editor": "", - "editorflags": "", - "makepkgbin": "/home/bas/bin/makepkg", - "makepkgconf": "", - "pacmanbin": "pacman", - "pacmanconf": "/home/bas/.config/pacman/pacman.conf", - "redownload": "no", - "answerclean": "", - "answerdiff": "All", - "answeredit": "", - "answerupgrade": "", - "gitbin": "git", - "gpgbin": "gpg", - "gpgflags": "", - "mflags": "", - "sortby": "votes", - "searchby": "name-desc", - "gitflags": "", - "removemake": "ask", - "sudobin": "sudo", - "sudoflags": "", - "version": "12.3.0", - "requestsplitn": 150, - "completionrefreshtime": 7, - "maxconcurrentdownloads": 1, - "bottomup": true, - "sudoloop": true, - "timeupdate": false, - "devel": true, - "cleanAfter": false, - "keepSrc": false, - "provides": true, - "pgpfetch": true, - "cleanmenu": true, - "diffmenu": true, - "editmenu": true, - "combinedupgrade": true, - "useask": false, - "batchinstall": false, - "singlelineresults": false, - "separatesources": true, - "debug": false, - "rpc": true, - "doubleconfirm": true, - "rebuild": "no" + "aururl": "https://aur.archlinux.org", + "aurrpcurl": "https://aur.archlinux.org/rpc?", + "buildDir": "/home/bas/.cache/yay", + "editor": "", + "editorflags": "", + "makepkgbin": "makepkg", + "makepkgconf": "", + "pacmanbin": "pacman", + "pacmanconf": "/etc/pacman.conf", + "redownload": "no", + "answerclean": "", + "answerdiff": "Installed", + "answeredit": "", + "answerupgrade": "", + "gitbin": "git", + "gpgbin": "gpg", + "gpgflags": "", + "mflags": "", + "sortby": "votes", + "searchby": "name-desc", + "gitflags": "", + "removemake": "no", + "sudobin": "sudo", + "sudoflags": "", + "version": "12.5.0", + "requestsplitn": 150, + "completionrefreshtime": 7, + "maxconcurrentdownloads": 8, + "bottomup": true, + "sudoloop": true, + "timeupdate": false, + "devel": true, + "cleanAfter": false, + "keepSrc": false, + "provides": true, + "pgpfetch": true, + "cleanmenu": true, + "diffmenu": false, + "editmenu": false, + "combinedupgrade": true, + "useask": false, + "batchinstall": false, + "singlelineresults": false, + "separatesources": true, + "debug": false, + "rpc": true, + "doubleconfirm": false, + "rebuild": "no" } diff --git a/zram/etc/systemd/zram-generator.conf b/zram/etc/systemd/zram-generator.conf --- a/zram/etc/systemd/zram-generator.conf +++ b/zram/etc/systemd/zram-generator.conf @@ -1,2 +1,5 @@ -[zram0] -zram-size = ram * 1.5 +[zram0] +compression-algorithm = zstd lz4 (type=huge) +zram-size = ram * 2 +swap-priority = 100 +fs-type = swap