Update 1
Showing
22 changed files
with
2701 additions
and
28 deletions
| 1 | FROM debian:13.4 | 1 | # syntax=docker/dockerfile:1 |
| 2 | # ================================================================ | ||
| 3 | # Multi-stage build for minimal container image | ||
| 4 | # Uses COPY technique: builder stage downloads + extracts, | ||
| 5 | # final stage only copies runtime artifacts. | ||
| 6 | # ================================================================ | ||
| 2 | 7 | ||
| 8 | # ---- Stage 1: Builder (downloads + extracts) ---- | ||
| 9 | FROM debian:13.4-slim AS builder | ||
| 10 | |||
| 11 | RUN apt-get update && \ | ||
| 12 | apt-get install -y --no-install-recommends \ | ||
| 13 | ca-certificates curl unzip && \ | ||
| 14 | rm -rf /var/lib/apt/lists/* | ||
| 15 | |||
| 16 | # Python (Miniconda) | ||
| 17 | RUN curl -sSLk https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_23.11.0-2-Linux-x86_64.sh \ | ||
| 18 | -o /tmp/miniconda.sh && \ | ||
| 19 | bash /tmp/miniconda.sh -b -p /usr/local/miniconda3 && \ | ||
| 20 | rm /tmp/miniconda.sh | ||
| 21 | |||
| 22 | # Node.js (prebuilt binary, no build tools needed) | ||
| 23 | RUN curl -sSLk https://unofficial-builds.nodejs.org/download/release/v22.22.2/node-v22.22.2-linux-x64-glibc-217.tar.gz \ | ||
| 24 | -o /tmp/node.tar.gz && \ | ||
| 25 | tar -xzf /tmp/node.tar.gz -C /usr/local/ && \ | ||
| 26 | rm /tmp/node.tar.gz && \ | ||
| 27 | ln -sf /usr/local/node-v22.22.2-linux-x64-glibc-217/bin/node /usr/local/bin/node && \ | ||
| 28 | ln -sf /usr/local/node-v22.22.2-linux-x64-glibc-217/bin/npm /usr/local/bin/npm | ||
| 29 | |||
| 30 | # Bun | ||
| 31 | RUN curl -fsSL https://bun.sh/install | BUN_INSTALL=/usr/local/bun bash | ||
| 32 | |||
| 33 | # opencode-ai | ||
| 34 | RUN npm i -g opencode-ai --registry https://mirrors.cloud.tencent.com/npm/ | ||
| 35 | |||
| 36 | # ---- Stage 2: Minimal final image ---- | ||
| 37 | FROM debian:13.4-slim | ||
| 38 | |||
| 39 | # Mirror (China mainland) | ||
| 3 | RUN sed -i 's/deb.debian.org/mirrors.tencent.com/g' /etc/apt/sources.list.d/debian.sources | 40 | RUN sed -i 's/deb.debian.org/mirrors.tencent.com/g' /etc/apt/sources.list.d/debian.sources |
| 41 | |||
| 42 | # System packages + Claude Code (single RUN layer for minimal size) | ||
| 4 | RUN apt-get update && \ | 43 | RUN apt-get update && \ |
| 5 | apt-get install -y wget unzip lsof nload htop net-tools dnsutils openssh-server \ | 44 | apt-get install -y --no-install-recommends \ |
| 6 | build-essential curl git gcc libc6-dev \ | 45 | ca-certificates curl wget unzip \ |
| 7 | pkg-config libssl-dev ca-certificates vim ripgrep jq sudo && \ | 46 | git git-lfs \ |
| 47 | zsh tmux \ | ||
| 48 | ripgrep jq sudo \ | ||
| 49 | build-essential gcc libc6-dev \ | ||
| 50 | pkg-config libssl-dev vim \ | ||
| 51 | tzdata locales \ | ||
| 52 | lsof nload htop net-tools dnsutils \ | ||
| 53 | openssh-server && \ | ||
| 54 | # Claude Code official apt repo | ||
| 55 | install -d -m 0755 /etc/apt/keyrings && \ | ||
| 56 | curl -fsSL https://downloads.claude.ai/keys/claude-code.asc \ | ||
| 57 | -o /etc/apt/keyrings/claude-code.asc && \ | ||
| 58 | chmod a+r /etc/apt/keyrings/claude-code.asc && \ | ||
| 59 | echo "deb [signed-by=/etc/apt/keyrings/claude-code.asc] https://downloads.claude.ai/claude-code/apt/stable stable main" \ | ||
| 60 | > /etc/apt/sources.list.d/claude-code.list && \ | ||
| 61 | apt-get update && \ | ||
| 62 | apt-get install -y --no-install-recommends claude-code && \ | ||
| 8 | apt-get clean && \ | 63 | apt-get clean && \ |
| 9 | rm -rf /var/lib/apt/lists/* | 64 | rm -rf /var/lib/apt/lists/* |
| 10 | 65 | ||
| 66 | # Create non-root user | ||
| 11 | RUN useradd -m -s /bin/bash user && \ | 67 | RUN useradd -m -s /bin/bash user && \ |
| 12 | echo "user:user" | chpasswd && \ | 68 | echo "user:user" | chpasswd && \ |
| 13 | adduser user sudo | 69 | adduser user sudo && \ |
| 70 | echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers | ||
| 71 | |||
| 72 | # Copy Python/Node/Bun/opencode from builder (COPY technique) | ||
| 73 | COPY --from=builder /usr/local/miniconda3 /usr/local/miniconda3 | ||
| 74 | COPY --from=builder /usr/local/node-v22.22.2-linux-x64-glibc-217 /usr/local/node-v22.22.2-linux-x64-glibc-217 | ||
| 75 | COPY --from=builder /usr/local/bun /usr/local/bun | ||
| 76 | COPY --from=builder /usr/local/node-v22.22.2-linux-x64-glibc-217/lib/node_modules /usr/local/node-v22.22.2-linux-x64-glibc-217/lib/node_modules | ||
| 77 | COPY --from=builder /usr/local/node-v22.22.2-linux-x64-glibc-217/bin/opencode /usr/local/node-v22.22.2-linux-x64-glibc-217/bin/opencode | ||
| 78 | |||
| 79 | RUN ln -sf /usr/local/node-v22.22.2-linux-x64-glibc-217/bin/node /usr/local/bin/node && \ | ||
| 80 | ln -sf /usr/local/node-v22.22.2-linux-x64-glibc-217/bin/npm /usr/local/bin/npm && \ | ||
| 81 | ln -sf /usr/local/bun/bin/bun /usr/local/bin/bun | ||
| 14 | 82 | ||
| 15 | RUN echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers | 83 | ENV PATH="/usr/local/miniconda3/bin:/usr/local/node-v22.22.2-linux-x64-glibc-217/bin:/usr/local/bun/bin:${PATH}" |
| 16 | 84 | ||
| 85 | # Helix: pre-built binary + config from context (COPY technique) | ||
| 86 | COPY helix_config/ /opt/helix_config/ | ||
| 87 | RUN mkdir -p /home/user/.config && \ | ||
| 88 | ln -sf /opt/helix_config /home/user/.config/helix && \ | ||
| 89 | chown -R user:user /home/user/.config | ||
| 90 | ENV PATH="/opt/helix_config/bin:${PATH}" | ||
| 91 | ENV HELIX_RUNTIME=/opt/helix_config | ||
| 92 | |||
| 93 | # Scripts for runtime use | ||
| 94 | COPY scripts/ /home/user/scripts/ | ||
| 95 | RUN chown -R user:user /home/user/scripts && \ | ||
| 96 | chmod +x /home/user/scripts/*.sh | ||
| 97 | |||
| 98 | # code-server | ||
| 99 | RUN curl -fsSL https://code-server.dev/install.sh | sh | ||
| 100 | |||
| 101 | # code-server extensions (run as user so they install to ~/.local) | ||
| 17 | USER user | 102 | USER user |
| 18 | # Install code-server and extensions | 103 | RUN code-server --install-extension golang.go \ |
| 19 | RUN curl -fsSL https://code-server.dev/install.sh | sudo sh \ | ||
| 20 | && code-server --install-extension golang.go \ | ||
| 21 | && code-server --install-extension cnbcool.cnb-welcome \ | 104 | && code-server --install-extension cnbcool.cnb-welcome \ |
| 22 | && code-server --install-extension formulahendry.code-runner \ | 105 | && code-server --install-extension formulahendry.code-runner \ |
| 23 | && code-server --install-extension ms-kubernetes-tools.vscode-kubernetes-tools \ | 106 | && code-server --install-extension ms-kubernetes-tools.vscode-kubernetes-tools \ |
| ... | @@ -27,28 +110,36 @@ RUN curl -fsSL https://code-server.dev/install.sh | sudo sh \ | ... | @@ -27,28 +110,36 @@ RUN curl -fsSL https://code-server.dev/install.sh | sudo sh \ |
| 27 | && code-server --install-extension eddieposey.vscode-icons-mac \ | 110 | && code-server --install-extension eddieposey.vscode-icons-mac \ |
| 28 | && code-server --install-extension oderwat.indent-rainbow \ | 111 | && code-server --install-extension oderwat.indent-rainbow \ |
| 29 | && code-server --install-extension yzhang.markdown-all-in-one | 112 | && code-server --install-extension yzhang.markdown-all-in-one |
| 30 | # leetcode.vscode-leetcode | ||
| 31 | #RUN wget -c -N "https://marketplace.visualstudio.com/_apis/public/gallery/publishers/panxiaoan/vsextensions/themes-falcon-vscode/3.0.1/vspackage" -O panxiaoan.themes-falcon-vscode-3.0.1.vsix && \ | ||
| 32 | # code-server --install-extension ./panxiaoan.themes-falcon-vscode-3.0.1.vsix | ||
| 33 | 113 | ||
| 34 | ENV TZ=Asia/Shanghai | 114 | USER root |
| 35 | ENV GIT_TERMINAL_PROMPT=0 | 115 | |
| 116 | # oh-my-zsh | ||
| 117 | RUN RUNZSH=no CHSH=no sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" && \ | ||
| 118 | chsh -s $(which zsh) user | ||
| 36 | 119 | ||
| 37 | RUN sudo apt-get -y update && sudo apt-get -y install hx wget curl git git-lfs zsh tmux tzdata && \ | 120 | # Neovim |
| 38 | RUNZSH=no CHSH=no sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" && \ | 121 | RUN curl -fsSL https://github.com/neovim/neovim/releases/download/v0.12.2/nvim-linux-x86_64.tar.gz \ |
| 39 | sudo apt-get install -y locales \ | 122 | -o /tmp/nvim.tar.gz && \ |
| 40 | && sudo rm -rf /var/lib/apt/lists/* \ | 123 | tar xf /tmp/nvim.tar.gz -C /usr/local && \ |
| 41 | && sudo sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen \ | 124 | ln -sf /usr/local/nvim-linux-x86_64/bin/nvim /usr/bin/nvim && \ |
| 42 | && sudo localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8 \ | 125 | rm /tmp/nvim.tar.gz |
| 43 | && sudo dpkg-reconfigure --frontend=noninteractive locales | ||
| 44 | 126 | ||
| 45 | RUN sudo /usr/bin/chsh -s $(which zsh) | 127 | # tmux config (user's home) |
| 128 | RUN cd /home/user && \ | ||
| 129 | git clone --single-branch https://github.com/gpakosz/.tmux.git && \ | ||
| 130 | ln -s -f .tmux/.tmux.conf && \ | ||
| 131 | cp .tmux/.tmux.conf.local . && \ | ||
| 132 | chown -R user:user /home/user | ||
| 133 | |||
| 134 | # Locale (Chinese + English) | ||
| 135 | RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \ | ||
| 136 | localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8 && \ | ||
| 137 | dpkg-reconfigure --frontend=noninteractive locales | ||
| 138 | |||
| 139 | ENV TZ=Asia/Shanghai | ||
| 140 | ENV GIT_TERMINAL_PROMPT=0 | ||
| 46 | ENV LANG=zh_CN.UTF-8 | 141 | ENV LANG=zh_CN.UTF-8 |
| 47 | ENV LANGUAGE=zh_CN:zh | 142 | ENV LANGUAGE=zh_CN:zh |
| 48 | # ENV LC_ALL=zh_CN.UTF-8 | ||
| 49 | RUN wget -c -N https://github.com/neovim/neovim/releases/download/v0.12.2/nvim-linux-x86_64.tar.gz && \ | ||
| 50 | sudo tar xf nvim-linux-x86_64.tar.gz -C /usr/local && \ | ||
| 51 | sudo ln -sf /usr/local/nvim-linux-x86_64/bin/nvim /usr/bin/nvim | ||
| 52 | 143 | ||
| 53 | RUN cd /home/user && git clone --single-branch https://github.com/gpakosz/.tmux.git && \ | 144 | WORKDIR /home/user |
| 54 | ln -s -f .tmux/.tmux.conf && cp .tmux/.tmux.conf.local . | 145 | USER user | ... | ... |
container/helix_config/bin/hx
0 → 100755
This file is too large to display.
container/helix_config/config.toml
0 → 100644
| 1 | # theme = "base16-gruvbox-material-light-medium" | ||
| 2 | # theme = "gruvbox_light" | ||
| 3 | # theme = "ayu_light" | ||
| 4 | #theme = "catppuccin_mocha" | ||
| 5 | # theme = "catppuccin_latte" | ||
| 6 | |||
| 7 | [editor] | ||
| 8 | line-number = "relative" | ||
| 9 | cursorline = true | ||
| 10 | color-modes = true | ||
| 11 | true-color = true | ||
| 12 | |||
| 13 | [editor.cursor-shape] | ||
| 14 | insert = "bar" | ||
| 15 | normal = "block" | ||
| 16 | select = "underline" | ||
| 17 | |||
| 18 | [editor.indent-guides] | ||
| 19 | render = true | ||
| 20 | |||
| 21 | [editor.file-picker] | ||
| 22 | hidden = false | ||
| 23 | |||
| 24 | |||
| 25 | # vim keybindgs from https://github.com/LGUG2Z/helix-vim/blob/master/config.toml | ||
| 26 | [keys.normal] | ||
| 27 | #C-c = "normal_mode" # 在 Normal 模式按 C-c 等同于 Esc (用于取消选择等) | ||
| 28 | # Quick iteration on config changes | ||
| 29 | C-o = ":config-open" | ||
| 30 | # ref: https://github.com/clo4/dotfiles/blob/674dc6417c4d0ffa688d132fd46b027561afcea6/dot_config/helix/config.toml | ||
| 31 | # Select within the line bounds, useful for quick whole-line changes | ||
| 32 | X = ["goto_first_nonwhitespace", "select_mode", "goto_line_end", "normal_mode"] | ||
| 33 | # Change everything from the cursor to the end of the line | ||
| 34 | A-l = ["collapse_selection", "select_mode", "goto_line_end", "change_selection"] | ||
| 35 | # Delete from cursor to line end | ||
| 36 | C-l = ["collapse_selection", "select_mode", "goto_line_end", "delete_selection"] | ||
| 37 | # Reload the current document from disk | ||
| 38 | C-r = ":reload" | ||
| 39 | # Use L/R arrow keys to switch between buffers, visible in the bufferline | ||
| 40 | left = ":buffer-previous" | ||
| 41 | right = ":buffer-next" | ||
| 42 | # | ||
| 43 | A-f = ":format" | ||
| 44 | C-q = ":q!" | ||
| 45 | |||
| 46 | # Some nice Helix stuff | ||
| 47 | C-h = "select_prev_sibling" | ||
| 48 | C-j = "shrink_selection" | ||
| 49 | C-k = "expand_selection" | ||
| 50 | # C-l = "select_next_sibling" | ||
| 51 | |||
| 52 | # Personal preference | ||
| 53 | o = ["open_below", "normal_mode"] | ||
| 54 | O = ["open_above", "normal_mode"] | ||
| 55 | |||
| 56 | # Muscle memory | ||
| 57 | "{" = ["goto_prev_paragraph", "collapse_selection"] | ||
| 58 | "}" = ["goto_next_paragraph", "collapse_selection"] | ||
| 59 | 0 = "goto_line_start" | ||
| 60 | "$" = "goto_line_end" | ||
| 61 | "^" = "goto_first_nonwhitespace" | ||
| 62 | G = "goto_file_end" | ||
| 63 | "%" = "match_brackets" | ||
| 64 | V = ["select_mode", "extend_to_line_bounds"] | ||
| 65 | C = ["collapse_selection", "extend_to_line_end", "change_selection"] # Requires https://github.com/helix-editor/helix/issues/2051#issuecomment-1140358950 | ||
| 66 | D = ["extend_to_line_end", "delete_selection"] | ||
| 67 | S = "surround_add" # Would be nice to be able to do something after this but it isn't chainable | ||
| 68 | |||
| 69 | # Extend and select commands that expect a manual input can't be chained | ||
| 70 | # I've kept d[X] commands here because it's better to at least have the stuff you want to delete | ||
| 71 | # selected so that it's just a keystroke away to delete | ||
| 72 | d = { d = ["extend_to_line_bounds", "delete_selection"], t = ["extend_till_char"], s = ["surround_delete"], i = ["select_textobject_inner"], a = ["select_textobject_around"] } | ||
| 73 | |||
| 74 | # Clipboards over registers ye ye | ||
| 75 | x = "delete_selection" | ||
| 76 | p = "paste_clipboard_after" | ||
| 77 | P = "paste_clipboard_before" | ||
| 78 | # Would be nice to add ya and yi, but the surround commands can't be chained | ||
| 79 | y = ["yank_main_selection_to_clipboard", "normal_mode", "flip_selections", "collapse_selection"] | ||
| 80 | Y = ["extend_to_line_bounds", "yank_main_selection_to_clipboard", "goto_line_start", "collapse_selection"] | ||
| 81 | |||
| 82 | # Uncanny valley stuff, this makes w and b behave as they do Vim | ||
| 83 | w = ["move_next_word_start", "move_char_right", "collapse_selection"] | ||
| 84 | e = ["move_next_word_end", "collapse_selection"] | ||
| 85 | b = ["move_prev_word_start", "collapse_selection"] | ||
| 86 | |||
| 87 | # If you want to keep the selection-while-moving behaviour of Helix, this two lines will help a lot, | ||
| 88 | # especially if you find having text remain selected while you have switched to insert or append mode | ||
| 89 | # | ||
| 90 | # There is no real difference if you have overriden the commands bound to 'w', 'e' and 'b' like above | ||
| 91 | # But if you really want to get familiar with the Helix way of selecting-while-moving, comment the | ||
| 92 | # bindings for 'w', 'e', and 'b' out and leave the bindings for 'i' and 'a' active below. A world of difference! | ||
| 93 | i = ["insert_mode", "collapse_selection"] # Requires https://github.com/helix-editor/helix/issues/2052#issuecomment-1140358950 | ||
| 94 | a = ["append_mode", "collapse_selection"] # Requires https://github.com/helix-editor/helix/issues/2052#issuecomment-1140358950 | ||
| 95 | |||
| 96 | # Escape the madness! No more fighting with the cursor! Or with multiple cursors! | ||
| 97 | esc = ["collapse_selection", "keep_primary_selection"] | ||
| 98 | # quick close | ||
| 99 | Q = { c = ":buffer-close" } | ||
| 100 | "space" = { c = ":buffer-close", C = ":buffer-close!"} | ||
| 101 | C-s = ":w" | ||
| 102 | |||
| 103 | [keys.insert] | ||
| 104 | # Escape the madness! No more fighting with the cursor! Or with multiple cursors! | ||
| 105 | esc = ["collapse_selection", "normal_mode"] | ||
| 106 | C-c = "normal_mode" # [!] 你的要求: C-c 退出插入模式 | ||
| 107 | C-k = "normal_mode" # [!] 另一个流行的退出键 (特别是在终端) | ||
| 108 | "C-[" = "normal_mode" # [!] 修正:使用引号,因为 [ 是特殊字符 | ||
| 109 | C-o = "open_below" | ||
| 110 | |||
| 111 | [keys.select] | ||
| 112 | # Muscle memory | ||
| 113 | "{" = ["extend_to_line_bounds", "goto_prev_paragraph"] | ||
| 114 | "}" = ["extend_to_line_bounds", "goto_next_paragraph"] | ||
| 115 | 0 = "goto_line_start" | ||
| 116 | "$" = "goto_line_end" | ||
| 117 | "^" = "goto_first_nonwhitespace" | ||
| 118 | G = "goto_file_end" | ||
| 119 | D = ["extend_to_line_bounds", "delete_selection", "normal_mode"] | ||
| 120 | C = ["goto_line_start", "extend_to_line_bounds", "change_selection"] | ||
| 121 | "%" = "match_brackets" | ||
| 122 | S = "surround_add" # Basically 99% of what I use vim-surround for | ||
| 123 | |||
| 124 | # Visual-mode specific muscle memory | ||
| 125 | i = "select_textobject_inner" | ||
| 126 | a = "select_textobject_around" | ||
| 127 | x = "delete_selection" | ||
| 128 | |||
| 129 | # Some extra binds to allow us to insert/append in select mode because it's nice with multiple cursors | ||
| 130 | # tab = ["insert_mode", "collapse_selection"] # tab is read by most terminal editors as "C-i" | ||
| 131 | C-a = ["append_mode", "collapse_selection"] | ||
| 132 | |||
| 133 | # Make selecting lines in visual mode behave sensibly | ||
| 134 | k = ["extend_line_up", "extend_to_line_bounds"] | ||
| 135 | j = ["extend_line_down", "extend_to_line_bounds"] | ||
| 136 | |||
| 137 | # Clipboards over registers ye ye | ||
| 138 | d = ["yank_main_selection_to_clipboard", "delete_selection"] | ||
| 139 | #x = ["yank_main_selection_to_clipboard", "delete_selection"] | ||
| 140 | y = ["yank_main_selection_to_clipboard", "normal_mode", "flip_selections", "collapse_selection"] | ||
| 141 | Y = ["extend_to_line_bounds", "yank_main_selection_to_clipboard", "goto_line_start", "collapse_selection", "normal_mode"] | ||
| 142 | p = "replace_selections_with_clipboard" # No life without this | ||
| 143 | P = "paste_clipboard_before" | ||
| 144 | |||
| 145 | # Escape the madness! No more fighting with the cursor! Or with multiple cursors! | ||
| 146 | esc = ["collapse_selection", "keep_primary_selection", "normal_mode"] | ||
| 147 | # C-c = "normal_mode" # [!] 你的要求: C-c 退出插入模式 | ||
| 148 | C-k = "normal_mode" # [!] 另一个流行的退出键 (特别是在终端) | ||
| 149 | "C-[" = "normal_mode" # [!] 修正:使用引号,因为 [ 是特殊字符 |
container/helix_config/config.toml.vim
0 → 100644
| 1 | [keys.normal] | ||
| 2 | # Quick iteration on config changes | ||
| 3 | C-o = ":config-open" | ||
| 4 | C-r = ":config-reload" | ||
| 5 | |||
| 6 | # Some nice Helix stuff | ||
| 7 | C-h = "select_prev_sibling" | ||
| 8 | C-j = "shrink_selection" | ||
| 9 | C-k = "expand_selection" | ||
| 10 | C-l = "select_next_sibling" | ||
| 11 | |||
| 12 | # Personal preference | ||
| 13 | o = ["open_below", "normal_mode"] | ||
| 14 | O = ["open_above", "normal_mode"] | ||
| 15 | |||
| 16 | # Muscle memory | ||
| 17 | "{" = ["goto_prev_paragraph", "collapse_selection"] | ||
| 18 | "}" = ["goto_next_paragraph", "collapse_selection"] | ||
| 19 | 0 = "goto_line_start" | ||
| 20 | "$" = "goto_line_end" | ||
| 21 | "^" = "goto_first_nonwhitespace" | ||
| 22 | G = "goto_file_end" | ||
| 23 | "%" = "match_brackets" | ||
| 24 | V = ["select_mode", "extend_to_line_bounds"] | ||
| 25 | C = ["extend_to_line_end", "yank_main_selection_to_clipboard", "delete_selection", "insert_mode"] | ||
| 26 | D = ["extend_to_line_end", "yank_main_selection_to_clipboard", "delete_selection"] | ||
| 27 | S = "surround_add" # Would be nice to be able to do something after this but it isn't chainable | ||
| 28 | |||
| 29 | # Clipboards over registers ye ye | ||
| 30 | x = "delete_selection" | ||
| 31 | p = ["paste_clipboard_after", "collapse_selection"] | ||
| 32 | P = ["paste_clipboard_before", "collapse_selection"] | ||
| 33 | # Would be nice to add ya and yi, but the surround commands can't be chained | ||
| 34 | Y = ["extend_to_line_end", "yank_main_selection_to_clipboard", "collapse_selection"] | ||
| 35 | |||
| 36 | # Uncanny valley stuff, this makes w and b behave as they do Vim | ||
| 37 | w = ["move_next_word_start", "move_char_right", "collapse_selection"] | ||
| 38 | W = ["move_next_long_word_start", "move_char_right", "collapse_selection"] | ||
| 39 | e = ["move_next_word_end", "collapse_selection"] | ||
| 40 | E = ["move_next_long_word_end", "collapse_selection"] | ||
| 41 | b = ["move_prev_word_start", "collapse_selection"] | ||
| 42 | B = ["move_prev_long_word_start", "collapse_selection"] | ||
| 43 | |||
| 44 | # If you want to keep the selection-while-moving behaviour of Helix, this two lines will help a lot, | ||
| 45 | # especially if you find having text remain selected while you have switched to insert or append mode | ||
| 46 | # | ||
| 47 | # There is no real difference if you have overridden the commands bound to 'w', 'e' and 'b' like above | ||
| 48 | # But if you really want to get familiar with the Helix way of selecting-while-moving, comment the | ||
| 49 | # bindings for 'w', 'e', and 'b' out and leave the bindings for 'i' and 'a' active below. A world of difference! | ||
| 50 | i = ["insert_mode", "collapse_selection"] | ||
| 51 | a = ["append_mode", "collapse_selection"] | ||
| 52 | |||
| 53 | # Undoing the 'd' + motion commands restores the selection which is annoying | ||
| 54 | u = ["undo", "collapse_selection"] | ||
| 55 | |||
| 56 | # Escape the madness! No more fighting with the cursor! Or with multiple cursors! | ||
| 57 | esc = ["collapse_selection", "keep_primary_selection"] | ||
| 58 | |||
| 59 | # Search for word under cursor | ||
| 60 | "*" = ["move_char_right", "move_prev_word_start", "move_next_word_end", "search_selection", "search_next"] | ||
| 61 | "#" = ["move_char_right", "move_prev_word_start", "move_next_word_end", "search_selection", "search_prev"] | ||
| 62 | |||
| 63 | # Make j and k behave as they do Vim when soft-wrap is enabled | ||
| 64 | j = "move_line_down" | ||
| 65 | k = "move_line_up" | ||
| 66 | |||
| 67 | # Extend and select commands that expect a manual input can't be chained | ||
| 68 | # I've kept d[X] commands here because it's better to at least have the stuff you want to delete | ||
| 69 | # selected so that it's just a keystroke away to delete | ||
| 70 | [keys.normal.d] | ||
| 71 | d = ["extend_to_line_bounds", "yank_main_selection_to_clipboard", "delete_selection"] | ||
| 72 | t = ["extend_till_char"] | ||
| 73 | s = ["surround_delete"] | ||
| 74 | i = ["select_textobject_inner"] | ||
| 75 | a = ["select_textobject_around"] | ||
| 76 | j = ["select_mode", "extend_to_line_bounds", "extend_line_below", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"] | ||
| 77 | down = ["select_mode", "extend_to_line_bounds", "extend_line_below", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"] | ||
| 78 | k = ["select_mode", "extend_to_line_bounds", "extend_line_above", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"] | ||
| 79 | up = ["select_mode", "extend_to_line_bounds", "extend_line_above", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"] | ||
| 80 | G = ["select_mode", "extend_to_line_bounds", "goto_last_line", "extend_to_line_bounds", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"] | ||
| 81 | w = ["move_next_word_start", "yank_main_selection_to_clipboard", "delete_selection"] | ||
| 82 | W = ["move_next_long_word_start", "yank_main_selection_to_clipboard", "delete_selection"] | ||
| 83 | g = { g = ["select_mode", "extend_to_line_bounds", "goto_file_start", "extend_to_line_bounds", "yank_main_selection_to_clipboard", "delete_selection", "normal_mode"] } | ||
| 84 | |||
| 85 | [keys.normal.y] | ||
| 86 | y = ["extend_to_line_bounds", "yank_main_selection_to_clipboard", "normal_mode", "collapse_selection"] | ||
| 87 | j = ["select_mode", "extend_to_line_bounds", "extend_line_below", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"] | ||
| 88 | down = ["select_mode", "extend_to_line_bounds", "extend_line_below", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"] | ||
| 89 | k = ["select_mode", "extend_to_line_bounds", "extend_line_above", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"] | ||
| 90 | up = ["select_mode", "extend_to_line_bounds", "extend_line_above", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"] | ||
| 91 | G = ["select_mode", "extend_to_line_bounds", "goto_last_line", "extend_to_line_bounds", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"] | ||
| 92 | w = ["move_next_word_start", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"] | ||
| 93 | W = ["move_next_long_word_start", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"] | ||
| 94 | g = { g = ["select_mode", "extend_to_line_bounds", "goto_file_start", "extend_to_line_bounds", "yank_main_selection_to_clipboard", "collapse_selection", "normal_mode"] } | ||
| 95 | |||
| 96 | [keys.insert] | ||
| 97 | # Escape the madness! No more fighting with the cursor! Or with multiple cursors! | ||
| 98 | esc = ["collapse_selection", "normal_mode"] | ||
| 99 | C-c = "normal_mode" # 按 Ctrl + C 退出 | ||
| 100 | C-k = "normal_mode" # 按 Ctrl + K 退出 | ||
| 101 | "C-[" = "normal_mode" # 按 Ctrl + [ 退出 (这个键码和 ESC 一样) | ||
| 102 | |||
| 103 | [keys.select] | ||
| 104 | # Muscle memory | ||
| 105 | "{" = ["extend_to_line_bounds", "goto_prev_paragraph"] | ||
| 106 | "}" = ["extend_to_line_bounds", "goto_next_paragraph"] | ||
| 107 | 0 = "goto_line_start" | ||
| 108 | "$" = "goto_line_end" | ||
| 109 | "^" = "goto_first_nonwhitespace" | ||
| 110 | G = "goto_file_end" | ||
| 111 | D = ["extend_to_line_bounds", "delete_selection", "normal_mode"] | ||
| 112 | C = ["goto_line_start", "extend_to_line_bounds", "change_selection"] | ||
| 113 | "%" = "match_brackets" | ||
| 114 | S = "surround_add" # Basically 99% of what I use vim-surround for | ||
| 115 | u = ["switch_to_lowercase", "collapse_selection", "normal_mode"] | ||
| 116 | U = ["switch_to_uppercase", "collapse_selection", "normal_mode"] | ||
| 117 | |||
| 118 | # Visual-mode specific muscle memory | ||
| 119 | i = "select_textobject_inner" | ||
| 120 | a = "select_textobject_around" | ||
| 121 | |||
| 122 | # Some extra binds to allow us to insert/append in select mode because it's nice with multiple cursors | ||
| 123 | tab = ["insert_mode", "collapse_selection"] # tab is read by most terminal editors as "C-i" | ||
| 124 | C-a = ["append_mode", "collapse_selection"] | ||
| 125 | |||
| 126 | # Make selecting lines in visual mode behave sensibly | ||
| 127 | k = ["extend_line_up", "extend_to_line_bounds"] | ||
| 128 | j = ["extend_line_down", "extend_to_line_bounds"] | ||
| 129 | |||
| 130 | # Clipboards over registers ye ye | ||
| 131 | d = ["yank_main_selection_to_clipboard", "delete_selection"] | ||
| 132 | x = ["yank_main_selection_to_clipboard", "delete_selection"] | ||
| 133 | y = ["yank_main_selection_to_clipboard", "normal_mode", "flip_selections", "collapse_selection"] | ||
| 134 | Y = ["extend_to_line_bounds", "yank_main_selection_to_clipboard", "goto_line_start", "collapse_selection", "normal_mode"] | ||
| 135 | p = "replace_selections_with_clipboard" # No life without this | ||
| 136 | P = "paste_clipboard_before" | ||
| 137 | |||
| 138 | # Escape the madness! No more fighting with the cursor! Or with multiple cursors! | ||
| 139 | esc = ["collapse_selection", "keep_primary_selection", "normal_mode"] |
container/helix_config/languages.toml
0 → 100644
| 1 | |||
| 2 | # ~/.config/helix/languages.toml | ||
| 3 | |||
| 4 | # ----------------------------------------------------------------- | ||
| 5 | # PART 1: DEFINE ALL LANGUAGE SERVERS | ||
| 6 | # ----------------------------------------------------------------- | ||
| 7 | |||
| 8 | [language-server.clangd] | ||
| 9 | command = "clangd" | ||
| 10 | args = ["--compile-commands-dir=build"] | ||
| 11 | |||
| 12 | [language-server.pyright] | ||
| 13 | #command = "pyright-langserver" | ||
| 14 | command = "/usr/local/miniconda3/bin/pyright-langserver" | ||
| 15 | args = ["--stdio"] | ||
| 16 | |||
| 17 | [language-server.rust-analyzer] | ||
| 18 | command = "rust-analyzer" | ||
| 19 | |||
| 20 | [language-server.marksman] | ||
| 21 | command = "marksman" | ||
| 22 | |||
| 23 | [language-server.vscode-html] | ||
| 24 | command = "vscode-html-language-server" | ||
| 25 | args = ["--stdio"] | ||
| 26 | |||
| 27 | [language-server.djlint] | ||
| 28 | command = "djlint" | ||
| 29 | args = ["--lsp"] | ||
| 30 | |||
| 31 | [language-server.docker-langserver] | ||
| 32 | command = "docker-langserver" | ||
| 33 | args = ["--stdio"] | ||
| 34 | |||
| 35 | [language-server.lua-ls] | ||
| 36 | command = "lua-language-server" | ||
| 37 | |||
| 38 | |||
| 39 | # ----------------------------------------------------------------- | ||
| 40 | # PART 2: ASSIGN SERVERS TO LANGUAGES | ||
| 41 | # ----------------------------------------------------------------- | ||
| 42 | |||
| 43 | [[language]] | ||
| 44 | name = "cpp" | ||
| 45 | # Use the "clangd" server defined above | ||
| 46 | language-servers = ["clangd"] | ||
| 47 | |||
| 48 | [[language]] | ||
| 49 | name = "c" | ||
| 50 | language-servers = ["clangd"] | ||
| 51 | |||
| 52 | [[language]] | ||
| 53 | name = "python" | ||
| 54 | language-servers = ["pyright"] | ||
| 55 | |||
| 56 | [[language]] | ||
| 57 | name = "rust" | ||
| 58 | language-servers = ["rust-analyzer"] | ||
| 59 | |||
| 60 | [[language]] | ||
| 61 | name = "markdown" | ||
| 62 | language-servers = ["marksman"] | ||
| 63 | |||
| 64 | [[language]] | ||
| 65 | name = "html" | ||
| 66 | language-servers = ["vscode-html"] | ||
| 67 | |||
| 68 | [[language]] | ||
| 69 | name = "htmldjango" | ||
| 70 | language-servers = ["djlint"] | ||
| 71 | |||
| 72 | [[language]] | ||
| 73 | name = "dockerfile" | ||
| 74 | language-servers = ["docker-langserver"] | ||
| 75 | |||
| 76 | [[language]] | ||
| 77 | name = "lua" | ||
| 78 | # We named the server "lua-ls" above | ||
| 79 | language-servers = ["lua-ls"] |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2" } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon" } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve" } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow" } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#f2d5cf" | ||
| 134 | flamingo = "#eebebe" | ||
| 135 | pink = "#f4b8e4" | ||
| 136 | mauve = "#ca9ee6" | ||
| 137 | red = "#e78284" | ||
| 138 | maroon = "#ea999c" | ||
| 139 | peach = "#ef9f76" | ||
| 140 | yellow = "#e5c890" | ||
| 141 | green = "#a6d189" | ||
| 142 | teal = "#81c8be" | ||
| 143 | sky = "#99d1db" | ||
| 144 | sapphire = "#85c1dc" | ||
| 145 | blue = "#8caaee" | ||
| 146 | lavender = "#babbf1" | ||
| 147 | text = "#c6d0f5" | ||
| 148 | subtext1 = "#b5bfe2" | ||
| 149 | subtext0 = "#a5adce" | ||
| 150 | overlay2 = "#949cbb" | ||
| 151 | overlay1 = "#838ba7" | ||
| 152 | overlay0 = "#737994" | ||
| 153 | surface2 = "#626880" | ||
| 154 | surface1 = "#51576d" | ||
| 155 | surface0 = "#414559" | ||
| 156 | base = "#303446" | ||
| 157 | mantle = "#292c3c" | ||
| 158 | crust = "#232634" | ||
| 159 | |||
| 160 | cursorline = "#3b3f52" | ||
| 161 | secondary_cursor = "#b8a5a6" | ||
| 162 | secondary_cursor_select = "#9192be" | ||
| 163 | secondary_cursor_normal = "#b8a5a6" | ||
| 164 | secondary_cursor_insert = "#83a275" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2" } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon" } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve" } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow" } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#dc8a78" | ||
| 134 | flamingo = "#dd7878" | ||
| 135 | pink = "#ea76cb" | ||
| 136 | mauve = "#8839ef" | ||
| 137 | red = "#d20f39" | ||
| 138 | maroon = "#e64553" | ||
| 139 | peach = "#fe640b" | ||
| 140 | yellow = "#df8e1d" | ||
| 141 | green = "#40a02b" | ||
| 142 | teal = "#179299" | ||
| 143 | sky = "#04a5e5" | ||
| 144 | sapphire = "#209fb5" | ||
| 145 | blue = "#1e66f5" | ||
| 146 | lavender = "#7287fd" | ||
| 147 | text = "#4c4f69" | ||
| 148 | subtext1 = "#5c5f77" | ||
| 149 | subtext0 = "#6c6f85" | ||
| 150 | overlay2 = "#7c7f93" | ||
| 151 | overlay1 = "#8c8fa1" | ||
| 152 | overlay0 = "#9ca0b0" | ||
| 153 | surface2 = "#acb0be" | ||
| 154 | surface1 = "#bcc0cc" | ||
| 155 | surface0 = "#ccd0da" | ||
| 156 | base = "#eff1f5" | ||
| 157 | mantle = "#e6e9ef" | ||
| 158 | crust = "#dce0e8" | ||
| 159 | |||
| 160 | cursorline = "#e8ecf1" | ||
| 161 | secondary_cursor = "#e1a99d" | ||
| 162 | secondary_cursor_select = "#97a7fb" | ||
| 163 | secondary_cursor_normal = "#e1a99d" | ||
| 164 | secondary_cursor_insert = "#74b867" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2" } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon" } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve" } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow" } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#f4dbd6" | ||
| 134 | flamingo = "#f0c6c6" | ||
| 135 | pink = "#f5bde6" | ||
| 136 | mauve = "#c6a0f6" | ||
| 137 | red = "#ed8796" | ||
| 138 | maroon = "#ee99a0" | ||
| 139 | peach = "#f5a97f" | ||
| 140 | yellow = "#eed49f" | ||
| 141 | green = "#a6da95" | ||
| 142 | teal = "#8bd5ca" | ||
| 143 | sky = "#91d7e3" | ||
| 144 | sapphire = "#7dc4e4" | ||
| 145 | blue = "#8aadf4" | ||
| 146 | lavender = "#b7bdf8" | ||
| 147 | text = "#cad3f5" | ||
| 148 | subtext1 = "#b8c0e0" | ||
| 149 | subtext0 = "#a5adcb" | ||
| 150 | overlay2 = "#939ab7" | ||
| 151 | overlay1 = "#8087a2" | ||
| 152 | overlay0 = "#6e738d" | ||
| 153 | surface2 = "#5b6078" | ||
| 154 | surface1 = "#494d64" | ||
| 155 | surface0 = "#363a4f" | ||
| 156 | base = "#24273a" | ||
| 157 | mantle = "#1e2030" | ||
| 158 | crust = "#181926" | ||
| 159 | |||
| 160 | cursorline = "#303347" | ||
| 161 | secondary_cursor = "#b6a6a7" | ||
| 162 | secondary_cursor_select = "#8b91bf" | ||
| 163 | secondary_cursor_normal = "#b6a6a7" | ||
| 164 | secondary_cursor_insert = "#80a57a" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2" } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon" } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve" } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow" } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#f5e0dc" | ||
| 134 | flamingo = "#f2cdcd" | ||
| 135 | pink = "#f5c2e7" | ||
| 136 | mauve = "#cba6f7" | ||
| 137 | red = "#f38ba8" | ||
| 138 | maroon = "#eba0ac" | ||
| 139 | peach = "#fab387" | ||
| 140 | yellow = "#f9e2af" | ||
| 141 | green = "#a6e3a1" | ||
| 142 | teal = "#94e2d5" | ||
| 143 | sky = "#89dceb" | ||
| 144 | sapphire = "#74c7ec" | ||
| 145 | blue = "#89b4fa" | ||
| 146 | lavender = "#b4befe" | ||
| 147 | text = "#cdd6f4" | ||
| 148 | subtext1 = "#bac2de" | ||
| 149 | subtext0 = "#a6adc8" | ||
| 150 | overlay2 = "#9399b2" | ||
| 151 | overlay1 = "#7f849c" | ||
| 152 | overlay0 = "#6c7086" | ||
| 153 | surface2 = "#585b70" | ||
| 154 | surface1 = "#45475a" | ||
| 155 | surface0 = "#313244" | ||
| 156 | base = "#1e1e2e" | ||
| 157 | mantle = "#181825" | ||
| 158 | crust = "#11111b" | ||
| 159 | |||
| 160 | cursorline = "#2a2b3c" | ||
| 161 | secondary_cursor = "#b5a6a8" | ||
| 162 | secondary_cursor_select = "#878ec0" | ||
| 163 | secondary_cursor_normal = "#b5a6a8" | ||
| 164 | secondary_cursor_insert = "#7ea87f" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2", modifiers = ["italic"] } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon", modifiers = ["italic"] } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve", modifiers = ["italic"] } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow", modifiers = ["italic"] } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["italic", "underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#f2d5cf" | ||
| 134 | flamingo = "#eebebe" | ||
| 135 | pink = "#f4b8e4" | ||
| 136 | mauve = "#ca9ee6" | ||
| 137 | red = "#e78284" | ||
| 138 | maroon = "#ea999c" | ||
| 139 | peach = "#ef9f76" | ||
| 140 | yellow = "#e5c890" | ||
| 141 | green = "#a6d189" | ||
| 142 | teal = "#81c8be" | ||
| 143 | sky = "#99d1db" | ||
| 144 | sapphire = "#85c1dc" | ||
| 145 | blue = "#8caaee" | ||
| 146 | lavender = "#babbf1" | ||
| 147 | text = "#c6d0f5" | ||
| 148 | subtext1 = "#b5bfe2" | ||
| 149 | subtext0 = "#a5adce" | ||
| 150 | overlay2 = "#949cbb" | ||
| 151 | overlay1 = "#838ba7" | ||
| 152 | overlay0 = "#737994" | ||
| 153 | surface2 = "#626880" | ||
| 154 | surface1 = "#51576d" | ||
| 155 | surface0 = "#414559" | ||
| 156 | base = "#303446" | ||
| 157 | mantle = "#292c3c" | ||
| 158 | crust = "#232634" | ||
| 159 | |||
| 160 | cursorline = "#3b3f52" | ||
| 161 | secondary_cursor = "#b8a5a6" | ||
| 162 | secondary_cursor_select = "#9192be" | ||
| 163 | secondary_cursor_normal = "#b8a5a6" | ||
| 164 | secondary_cursor_insert = "#83a275" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2", modifiers = ["italic"] } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon", modifiers = ["italic"] } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve", modifiers = ["italic"] } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow", modifiers = ["italic"] } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["italic", "underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#dc8a78" | ||
| 134 | flamingo = "#dd7878" | ||
| 135 | pink = "#ea76cb" | ||
| 136 | mauve = "#8839ef" | ||
| 137 | red = "#d20f39" | ||
| 138 | maroon = "#e64553" | ||
| 139 | peach = "#fe640b" | ||
| 140 | yellow = "#df8e1d" | ||
| 141 | green = "#40a02b" | ||
| 142 | teal = "#179299" | ||
| 143 | sky = "#04a5e5" | ||
| 144 | sapphire = "#209fb5" | ||
| 145 | blue = "#1e66f5" | ||
| 146 | lavender = "#7287fd" | ||
| 147 | text = "#4c4f69" | ||
| 148 | subtext1 = "#5c5f77" | ||
| 149 | subtext0 = "#6c6f85" | ||
| 150 | overlay2 = "#7c7f93" | ||
| 151 | overlay1 = "#8c8fa1" | ||
| 152 | overlay0 = "#9ca0b0" | ||
| 153 | surface2 = "#acb0be" | ||
| 154 | surface1 = "#bcc0cc" | ||
| 155 | surface0 = "#ccd0da" | ||
| 156 | base = "#eff1f5" | ||
| 157 | mantle = "#e6e9ef" | ||
| 158 | crust = "#dce0e8" | ||
| 159 | |||
| 160 | cursorline = "#e8ecf1" | ||
| 161 | secondary_cursor = "#e1a99d" | ||
| 162 | secondary_cursor_select = "#97a7fb" | ||
| 163 | secondary_cursor_normal = "#e1a99d" | ||
| 164 | secondary_cursor_insert = "#74b867" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2", modifiers = ["italic"] } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon", modifiers = ["italic"] } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve", modifiers = ["italic"] } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow", modifiers = ["italic"] } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["italic", "underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#f4dbd6" | ||
| 134 | flamingo = "#f0c6c6" | ||
| 135 | pink = "#f5bde6" | ||
| 136 | mauve = "#c6a0f6" | ||
| 137 | red = "#ed8796" | ||
| 138 | maroon = "#ee99a0" | ||
| 139 | peach = "#f5a97f" | ||
| 140 | yellow = "#eed49f" | ||
| 141 | green = "#a6da95" | ||
| 142 | teal = "#8bd5ca" | ||
| 143 | sky = "#91d7e3" | ||
| 144 | sapphire = "#7dc4e4" | ||
| 145 | blue = "#8aadf4" | ||
| 146 | lavender = "#b7bdf8" | ||
| 147 | text = "#cad3f5" | ||
| 148 | subtext1 = "#b8c0e0" | ||
| 149 | subtext0 = "#a5adcb" | ||
| 150 | overlay2 = "#939ab7" | ||
| 151 | overlay1 = "#8087a2" | ||
| 152 | overlay0 = "#6e738d" | ||
| 153 | surface2 = "#5b6078" | ||
| 154 | surface1 = "#494d64" | ||
| 155 | surface0 = "#363a4f" | ||
| 156 | base = "#24273a" | ||
| 157 | mantle = "#1e2030" | ||
| 158 | crust = "#181926" | ||
| 159 | |||
| 160 | cursorline = "#303347" | ||
| 161 | secondary_cursor = "#b6a6a7" | ||
| 162 | secondary_cursor_select = "#8b91bf" | ||
| 163 | secondary_cursor_normal = "#b6a6a7" | ||
| 164 | secondary_cursor_insert = "#80a57a" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2", modifiers = ["italic"] } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon", modifiers = ["italic"] } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve", modifiers = ["italic"] } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow", modifiers = ["italic"] } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["italic", "underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#f5e0dc" | ||
| 134 | flamingo = "#f2cdcd" | ||
| 135 | pink = "#f5c2e7" | ||
| 136 | mauve = "#cba6f7" | ||
| 137 | red = "#f38ba8" | ||
| 138 | maroon = "#eba0ac" | ||
| 139 | peach = "#fab387" | ||
| 140 | yellow = "#f9e2af" | ||
| 141 | green = "#a6e3a1" | ||
| 142 | teal = "#94e2d5" | ||
| 143 | sky = "#89dceb" | ||
| 144 | sapphire = "#74c7ec" | ||
| 145 | blue = "#89b4fa" | ||
| 146 | lavender = "#b4befe" | ||
| 147 | text = "#cdd6f4" | ||
| 148 | subtext1 = "#bac2de" | ||
| 149 | subtext0 = "#a6adc8" | ||
| 150 | overlay2 = "#9399b2" | ||
| 151 | overlay1 = "#7f849c" | ||
| 152 | overlay0 = "#6c7086" | ||
| 153 | surface2 = "#585b70" | ||
| 154 | surface1 = "#45475a" | ||
| 155 | surface0 = "#313244" | ||
| 156 | base = "#1e1e2e" | ||
| 157 | mantle = "#181825" | ||
| 158 | crust = "#11111b" | ||
| 159 | |||
| 160 | cursorline = "#2a2b3c" | ||
| 161 | secondary_cursor = "#b5a6a8" | ||
| 162 | secondary_cursor_select = "#878ec0" | ||
| 163 | secondary_cursor_normal = "#b5a6a8" | ||
| 164 | secondary_cursor_insert = "#7ea87f" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2" } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon" } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve" } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow" } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#f2d5cf" | ||
| 134 | flamingo = "#eebebe" | ||
| 135 | pink = "#f4b8e4" | ||
| 136 | mauve = "#ca9ee6" | ||
| 137 | red = "#e78284" | ||
| 138 | maroon = "#ea999c" | ||
| 139 | peach = "#ef9f76" | ||
| 140 | yellow = "#e5c890" | ||
| 141 | green = "#a6d189" | ||
| 142 | teal = "#81c8be" | ||
| 143 | sky = "#99d1db" | ||
| 144 | sapphire = "#85c1dc" | ||
| 145 | blue = "#8caaee" | ||
| 146 | lavender = "#babbf1" | ||
| 147 | text = "#c6d0f5" | ||
| 148 | subtext1 = "#b5bfe2" | ||
| 149 | subtext0 = "#a5adce" | ||
| 150 | overlay2 = "#949cbb" | ||
| 151 | overlay1 = "#838ba7" | ||
| 152 | overlay0 = "#737994" | ||
| 153 | surface2 = "#626880" | ||
| 154 | surface1 = "#51576d" | ||
| 155 | surface0 = "#414559" | ||
| 156 | base = "#303446" | ||
| 157 | mantle = "#292c3c" | ||
| 158 | crust = "#232634" | ||
| 159 | |||
| 160 | cursorline = "#3b3f52" | ||
| 161 | secondary_cursor = "#b8a5a6" | ||
| 162 | secondary_cursor_select = "#9192be" | ||
| 163 | secondary_cursor_normal = "#b8a5a6" | ||
| 164 | secondary_cursor_insert = "#83a275" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2" } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon" } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve" } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow" } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#dc8a78" | ||
| 134 | flamingo = "#dd7878" | ||
| 135 | pink = "#ea76cb" | ||
| 136 | mauve = "#8839ef" | ||
| 137 | red = "#d20f39" | ||
| 138 | maroon = "#e64553" | ||
| 139 | peach = "#fe640b" | ||
| 140 | yellow = "#df8e1d" | ||
| 141 | green = "#40a02b" | ||
| 142 | teal = "#179299" | ||
| 143 | sky = "#04a5e5" | ||
| 144 | sapphire = "#209fb5" | ||
| 145 | blue = "#1e66f5" | ||
| 146 | lavender = "#7287fd" | ||
| 147 | text = "#4c4f69" | ||
| 148 | subtext1 = "#5c5f77" | ||
| 149 | subtext0 = "#6c6f85" | ||
| 150 | overlay2 = "#7c7f93" | ||
| 151 | overlay1 = "#8c8fa1" | ||
| 152 | overlay0 = "#9ca0b0" | ||
| 153 | surface2 = "#acb0be" | ||
| 154 | surface1 = "#bcc0cc" | ||
| 155 | surface0 = "#ccd0da" | ||
| 156 | base = "#eff1f5" | ||
| 157 | mantle = "#e6e9ef" | ||
| 158 | crust = "#dce0e8" | ||
| 159 | |||
| 160 | cursorline = "#e8ecf1" | ||
| 161 | secondary_cursor = "#e1a99d" | ||
| 162 | secondary_cursor_select = "#97a7fb" | ||
| 163 | secondary_cursor_normal = "#e1a99d" | ||
| 164 | secondary_cursor_insert = "#74b867" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2" } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon" } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve" } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow" } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#f4dbd6" | ||
| 134 | flamingo = "#f0c6c6" | ||
| 135 | pink = "#f5bde6" | ||
| 136 | mauve = "#c6a0f6" | ||
| 137 | red = "#ed8796" | ||
| 138 | maroon = "#ee99a0" | ||
| 139 | peach = "#f5a97f" | ||
| 140 | yellow = "#eed49f" | ||
| 141 | green = "#a6da95" | ||
| 142 | teal = "#8bd5ca" | ||
| 143 | sky = "#91d7e3" | ||
| 144 | sapphire = "#7dc4e4" | ||
| 145 | blue = "#8aadf4" | ||
| 146 | lavender = "#b7bdf8" | ||
| 147 | text = "#cad3f5" | ||
| 148 | subtext1 = "#b8c0e0" | ||
| 149 | subtext0 = "#a5adcb" | ||
| 150 | overlay2 = "#939ab7" | ||
| 151 | overlay1 = "#8087a2" | ||
| 152 | overlay0 = "#6e738d" | ||
| 153 | surface2 = "#5b6078" | ||
| 154 | surface1 = "#494d64" | ||
| 155 | surface0 = "#363a4f" | ||
| 156 | base = "#24273a" | ||
| 157 | mantle = "#1e2030" | ||
| 158 | crust = "#181926" | ||
| 159 | |||
| 160 | cursorline = "#303347" | ||
| 161 | secondary_cursor = "#b6a6a7" | ||
| 162 | secondary_cursor_select = "#8b91bf" | ||
| 163 | secondary_cursor_normal = "#b6a6a7" | ||
| 164 | secondary_cursor_insert = "#80a57a" |
| 1 | # Syntax highlighting | ||
| 2 | # ------------------- | ||
| 3 | "attribute" = "yellow" | ||
| 4 | |||
| 5 | "type" = "yellow" | ||
| 6 | "type.enum.variant" = "teal" | ||
| 7 | |||
| 8 | "constructor" = "sapphire" | ||
| 9 | |||
| 10 | "constant" = "peach" | ||
| 11 | "constant.character" = "teal" | ||
| 12 | "constant.character.escape" = "pink" | ||
| 13 | |||
| 14 | "string" = "green" | ||
| 15 | "string.regexp" = "pink" | ||
| 16 | "string.special" = "blue" | ||
| 17 | "string.special.symbol" = "red" | ||
| 18 | |||
| 19 | "comment" = { fg = "overlay2" } | ||
| 20 | |||
| 21 | "variable" = "text" | ||
| 22 | "variable.parameter" = { fg = "maroon" } | ||
| 23 | "variable.builtin" = "red" | ||
| 24 | "variable.other.member" = "blue" | ||
| 25 | |||
| 26 | "label" = "sapphire" # used for lifetimes | ||
| 27 | |||
| 28 | "punctuation" = "overlay2" | ||
| 29 | "punctuation.special" = "sky" | ||
| 30 | |||
| 31 | "keyword" = "mauve" | ||
| 32 | "keyword.control.conditional" = { fg = "mauve" } | ||
| 33 | |||
| 34 | "operator" = "sky" | ||
| 35 | |||
| 36 | "function" = "blue" | ||
| 37 | "function.macro" = "rosewater" | ||
| 38 | |||
| 39 | "tag" = "blue" | ||
| 40 | |||
| 41 | "namespace" = { fg = "yellow" } | ||
| 42 | |||
| 43 | "special" = "blue" # fuzzy highlight | ||
| 44 | |||
| 45 | "markup.heading.1" = "red" | ||
| 46 | "markup.heading.2" = "peach" | ||
| 47 | "markup.heading.3" = "yellow" | ||
| 48 | "markup.heading.4" = "green" | ||
| 49 | "markup.heading.5" = "sapphire" | ||
| 50 | "markup.heading.6" = "lavender" | ||
| 51 | "markup.list" = "teal" | ||
| 52 | "markup.list.unchecked" = "overlay2" | ||
| 53 | "markup.list.checked" = "green" | ||
| 54 | "markup.bold" = { fg = "red", modifiers = ["bold"] } | ||
| 55 | "markup.italic" = { fg = "red", modifiers = ["italic"] } | ||
| 56 | "markup.link.url" = { fg = "blue", modifiers = ["underlined"] } | ||
| 57 | "markup.link.text" = "lavender" | ||
| 58 | "markup.link.label" = "sapphire" | ||
| 59 | "markup.raw" = "green" | ||
| 60 | "markup.quote" = "pink" | ||
| 61 | |||
| 62 | "diff.plus" = "green" | ||
| 63 | "diff.minus" = "red" | ||
| 64 | "diff.delta" = "blue" | ||
| 65 | |||
| 66 | # User Interface | ||
| 67 | # -------------- | ||
| 68 | "ui.background" = { fg = "text", bg = "base" } | ||
| 69 | |||
| 70 | "ui.linenr" = { fg = "surface1" } | ||
| 71 | "ui.linenr.selected" = { fg = "lavender" } | ||
| 72 | |||
| 73 | "ui.statusline" = { fg = "subtext1", bg = "mantle" } | ||
| 74 | "ui.statusline.inactive" = { fg = "surface2", bg = "mantle" } | ||
| 75 | "ui.statusline.normal" = { fg = "base", bg = "rosewater", modifiers = ["bold"] } | ||
| 76 | "ui.statusline.insert" = { fg = "base", bg = "green", modifiers = ["bold"] } | ||
| 77 | "ui.statusline.select" = { fg = "base", bg = "lavender", modifiers = ["bold"] } | ||
| 78 | |||
| 79 | "ui.popup" = { fg = "text", bg = "surface0" } | ||
| 80 | "ui.window" = { fg = "crust" } | ||
| 81 | "ui.help" = { fg = "overlay2", bg = "surface0" } | ||
| 82 | |||
| 83 | "ui.bufferline" = { fg = "subtext0", bg = "mantle" } | ||
| 84 | "ui.bufferline.active" = { fg = "mauve", bg = "base", underline = { color = "mauve", style = "line" } } | ||
| 85 | "ui.bufferline.background" = { bg = "crust" } | ||
| 86 | |||
| 87 | "ui.text" = "text" | ||
| 88 | "ui.text.focus" = { fg = "text", bg = "surface0", modifiers = ["bold"] } | ||
| 89 | "ui.text.inactive" = { fg = "overlay1" } | ||
| 90 | "ui.text.directory" = { fg = "blue" } | ||
| 91 | |||
| 92 | "ui.virtual" = "overlay0" | ||
| 93 | "ui.virtual.ruler" = { bg = "surface0" } | ||
| 94 | "ui.virtual.indent-guide" = "surface0" | ||
| 95 | "ui.virtual.inlay-hint" = { fg = "surface1", bg = "mantle" } | ||
| 96 | "ui.virtual.jump-label" = { fg = "rosewater", modifiers = ["bold"] } | ||
| 97 | |||
| 98 | "ui.selection" = { bg = "surface1" } | ||
| 99 | |||
| 100 | "ui.cursor" = { fg = "base", bg = "secondary_cursor" } | ||
| 101 | "ui.cursor.primary" = { fg = "base", bg = "rosewater" } | ||
| 102 | "ui.cursor.match" = { fg = "peach", modifiers = ["bold"] } | ||
| 103 | |||
| 104 | "ui.cursor.primary.normal" = { fg = "base", bg = "rosewater" } | ||
| 105 | "ui.cursor.primary.insert" = { fg = "base", bg = "green" } | ||
| 106 | "ui.cursor.primary.select" = { fg = "base", bg = "lavender" } | ||
| 107 | |||
| 108 | "ui.cursor.normal" = { fg = "base", bg = "secondary_cursor_normal" } | ||
| 109 | "ui.cursor.insert" = { fg = "base", bg = "secondary_cursor_insert" } | ||
| 110 | "ui.cursor.select" = { fg = "base", bg = "secondary_cursor_select" } | ||
| 111 | |||
| 112 | "ui.cursorline.primary" = { bg = "cursorline" } | ||
| 113 | |||
| 114 | "ui.highlight" = { bg = "surface1", modifiers = ["bold"] } | ||
| 115 | |||
| 116 | "ui.menu" = { fg = "overlay2", bg = "surface0" } | ||
| 117 | "ui.menu.selected" = { fg = "text", bg = "surface1", modifiers = ["bold"] } | ||
| 118 | |||
| 119 | "diagnostic.error" = { underline = { color = "red", style = "curl" } } | ||
| 120 | "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } } | ||
| 121 | "diagnostic.info" = { underline = { color = "sky", style = "curl" } } | ||
| 122 | "diagnostic.hint" = { underline = { color = "teal", style = "curl" } } | ||
| 123 | "diagnostic.unnecessary" = { modifiers = ["dim"] } | ||
| 124 | |||
| 125 | error = "red" | ||
| 126 | warning = "yellow" | ||
| 127 | info = "sky" | ||
| 128 | hint = "teal" | ||
| 129 | |||
| 130 | rainbow = ["red", "peach", "yellow", "green", "sapphire", "lavender"] | ||
| 131 | |||
| 132 | [palette] | ||
| 133 | rosewater = "#f5e0dc" | ||
| 134 | flamingo = "#f2cdcd" | ||
| 135 | pink = "#f5c2e7" | ||
| 136 | mauve = "#cba6f7" | ||
| 137 | red = "#f38ba8" | ||
| 138 | maroon = "#eba0ac" | ||
| 139 | peach = "#fab387" | ||
| 140 | yellow = "#f9e2af" | ||
| 141 | green = "#a6e3a1" | ||
| 142 | teal = "#94e2d5" | ||
| 143 | sky = "#89dceb" | ||
| 144 | sapphire = "#74c7ec" | ||
| 145 | blue = "#89b4fa" | ||
| 146 | lavender = "#b4befe" | ||
| 147 | text = "#cdd6f4" | ||
| 148 | subtext1 = "#bac2de" | ||
| 149 | subtext0 = "#a6adc8" | ||
| 150 | overlay2 = "#9399b2" | ||
| 151 | overlay1 = "#7f849c" | ||
| 152 | overlay0 = "#6c7086" | ||
| 153 | surface2 = "#585b70" | ||
| 154 | surface1 = "#45475a" | ||
| 155 | surface0 = "#313244" | ||
| 156 | base = "#1e1e2e" | ||
| 157 | mantle = "#181825" | ||
| 158 | crust = "#11111b" | ||
| 159 | |||
| 160 | cursorline = "#2a2b3c" | ||
| 161 | secondary_cursor = "#b5a6a8" | ||
| 162 | secondary_cursor_select = "#878ec0" | ||
| 163 | secondary_cursor_normal = "#b5a6a8" | ||
| 164 | secondary_cursor_insert = "#7ea87f" |
helix_config_bak @ 3ec4fc50
| 1 | Subproject commit 3ec4fc503986099e115d98abe865aaabac76d49c |
| 1 | # !/usr/bin/env bash | ||
| 2 | set -euo pipefail | ||
| 3 | |||
| 4 | CLAUDE_CONFIG_DIR=${CLAUDE_CONFIG_DIR:-"${HOME}/.claude"} | ||
| 5 | BOOTSTRAP_MARKER=${BOOTSTRAP_MARKER:-"${CLAUDE_CONFIG_DIR}/.bootstrap-plugins-done"} | ||
| 6 | CLAUDE_FORCE_PLUGIN_BOOTSTRAP=${CLAUDE_FORCE_PLUGIN_BOOTSTRAP:-0} | ||
| 7 | CLAUDE_SKIP_SETTINGS_INIT=${CLAUDE_SKIP_SETTINGS_INIT:-0} | ||
| 8 | CLAUDE_ENABLE_THIRD_PARTY=${CLAUDE_ENABLE_THIRD_PARTY:-0} | ||
| 9 | DEFAULT_PLUGIN_LIST="superpowers pr-review-toolkit claude-code-setup ralph-loop typescript-lsp rust-analyzer-lsp" | ||
| 10 | CLAUDE_PLUGIN_LIST=${CLAUDE_PLUGIN_LIST:-"$DEFAULT_PLUGIN_LIST"} | ||
| 11 | |||
| 12 | require_claude() { | ||
| 13 | if ! command -v claude >/dev/null 2>&1; then | ||
| 14 | echo "[error] 未找到 claude 命令,请先安装 Claude Code。" >&2 | ||
| 15 | exit 1 | ||
| 16 | fi | ||
| 17 | } | ||
| 18 | |||
| 19 | check_auth() { | ||
| 20 | if [ -n "${ANTHROPIC_API_KEY:-}" ] || [ -n "${CLAUDE_CODE_OAUTH_TOKEN:-}" ] || [ -f "${CLAUDE_CONFIG_DIR}/.credentials.json" ]; then | ||
| 21 | return | ||
| 22 | fi | ||
| 23 | |||
| 24 | cat <<'EOF' | ||
| 25 | [warn] 未检测到认证信息。 | ||
| 26 | [warn] 可稍后配置以下任一方式后重跑脚本: | ||
| 27 | export ANTHROPIC_API_KEY=... | ||
| 28 | export CLAUDE_CODE_OAUTH_TOKEN=... | ||
| 29 | EOF | ||
| 30 | } | ||
| 31 | |||
| 32 | prepare_config_dir() { | ||
| 33 | mkdir -p "$CLAUDE_CONFIG_DIR" | ||
| 34 | chmod 700 "$CLAUDE_CONFIG_DIR" | ||
| 35 | } | ||
| 36 | |||
| 37 | already_bootstrapped() { | ||
| 38 | [ "$CLAUDE_FORCE_PLUGIN_BOOTSTRAP" != "1" ] && [ -f "$BOOTSTRAP_MARKER" ] | ||
| 39 | } | ||
| 40 | |||
| 41 | install_plugin() { | ||
| 42 | local plugin=$1 | ||
| 43 | echo "[plugin] 安装 $plugin..." | ||
| 44 | if printf '/plugin install %s@claude-plugins-official\n/reload-plugins\n/exit\n' "$plugin" | claude >/tmp/claude-plugin-${plugin}.log 2>&1; then | ||
| 45 | echo "[plugin] $plugin 安装完成" | ||
| 46 | return 0 | ||
| 47 | fi | ||
| 48 | |||
| 49 | echo "[plugin] $plugin 安装失败,详见 /tmp/claude-plugin-${plugin}.log" >&2 | ||
| 50 | return 1 | ||
| 51 | } | ||
| 52 | |||
| 53 | init_settings() { | ||
| 54 | local settings_file="${CLAUDE_CONFIG_DIR}/settings.json" | ||
| 55 | if [ "$CLAUDE_SKIP_SETTINGS_INIT" = "1" ] || [ -f "$settings_file" ]; then | ||
| 56 | return | ||
| 57 | fi | ||
| 58 | |||
| 59 | cat >"$settings_file" <<'EOF' | ||
| 60 | { | ||
| 61 | "modelType": "anthropic", | ||
| 62 | "alwaysThinkingEnabled": false, | ||
| 63 | "skipDangerousModePermissionPrompt": true, | ||
| 64 | "permissions": { | ||
| 65 | "allow": [ | ||
| 66 | "git status", | ||
| 67 | "git diff", | ||
| 68 | "git log", | ||
| 69 | "ls", | ||
| 70 | "pwd" | ||
| 71 | ], | ||
| 72 | "deny": [] | ||
| 73 | } | ||
| 74 | } | ||
| 75 | EOF | ||
| 76 | } | ||
| 77 | |||
| 78 | install_default_plugins() { | ||
| 79 | local failed=0 | ||
| 80 | local plugin | ||
| 81 | |||
| 82 | echo "[info] 默认插件列表: $CLAUDE_PLUGIN_LIST" | ||
| 83 | for plugin in $CLAUDE_PLUGIN_LIST; do | ||
| 84 | if ! install_plugin "$plugin"; then | ||
| 85 | failed=1 | ||
| 86 | fi | ||
| 87 | done | ||
| 88 | |||
| 89 | if [ "$CLAUDE_ENABLE_THIRD_PARTY" = "1" ]; then | ||
| 90 | echo "[info] 已启用第三方扩展位,但当前未配置第三方插件。" | ||
| 91 | fi | ||
| 92 | |||
| 93 | return "$failed" | ||
| 94 | } | ||
| 95 | |||
| 96 | write_marker() { | ||
| 97 | date -u +"%Y-%m-%dT%H:%M:%SZ" >"$BOOTSTRAP_MARKER" | ||
| 98 | } | ||
| 99 | |||
| 100 | main() { | ||
| 101 | require_claude | ||
| 102 | prepare_config_dir | ||
| 103 | check_auth | ||
| 104 | |||
| 105 | if already_bootstrapped; then | ||
| 106 | echo "[info] 检测到已完成 bootstrap,跳过。" | ||
| 107 | return | ||
| 108 | fi | ||
| 109 | |||
| 110 | install_default_plugins | ||
| 111 | init_settings | ||
| 112 | write_marker | ||
| 113 | echo "[done] Claude Code 插件 bootstrap 完成。" | ||
| 114 | } | ||
| 115 | |||
| 116 | main "$@" |
container/scripts/bootstrap.sh
0 → 100644
container/scripts/claude_install.sh
0 → 100644
| 1 | |||
| 2 | #!/usr/bin/env bash | ||
| 3 | set -euo pipefail | ||
| 4 | |||
| 5 | export DEBIAN_FRONTEND=${DEBIAN_FRONTEND:-noninteractive} | ||
| 6 | |||
| 7 | SCRIPT_DIR=$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd) | ||
| 8 | BOOTSTRAP_SCRIPT=${CLAUDE_BOOTSTRAP_SCRIPT:-"$SCRIPT_DIR/bootstrap-claude-plugins.sh"} | ||
| 9 | CLAUDE_SKIP_BOOTSTRAP=${CLAUDE_SKIP_BOOTSTRAP:-0} | ||
| 10 | |||
| 11 | require_root() { | ||
| 12 | if [ "${EUID:-$(id -u)}" -ne 0 ]; then | ||
| 13 | echo "[error] 请使用 root 运行此脚本。" >&2 | ||
| 14 | exit 1 | ||
| 15 | fi | ||
| 16 | } | ||
| 17 | |||
| 18 | install_base_packages() { | ||
| 19 | echo "[1/5] 安装基础依赖..." | ||
| 20 | apt-get update | ||
| 21 | apt-get install -y --no-install-recommends \ | ||
| 22 | bash \ | ||
| 23 | ca-certificates \ | ||
| 24 | curl \ | ||
| 25 | git \ | ||
| 26 | jq \ | ||
| 27 | less \ | ||
| 28 | procps \ | ||
| 29 | ripgrep \ | ||
| 30 | fd-find \ | ||
| 31 | python3 \ | ||
| 32 | python3-venv \ | ||
| 33 | python3-pip \ | ||
| 34 | nodejs \ | ||
| 35 | npm | ||
| 36 | } | ||
| 37 | |||
| 38 | install_claude_code() { | ||
| 39 | echo "[2/5] 配置 Claude Code 官方 apt 源..." | ||
| 40 | install -d -m 0755 /etc/apt/keyrings | ||
| 41 | curl -fsSL https://downloads.claude.ai/keys/claude-code.asc \ | ||
| 42 | -o /etc/apt/keyrings/claude-code.asc | ||
| 43 | chmod a+r /etc/apt/keyrings/claude-code.asc | ||
| 44 | |||
| 45 | cat >/etc/apt/sources.list.d/claude-code.list <<'EOF' | ||
| 46 | deb [signed-by=/etc/apt/keyrings/claude-code.asc] https://downloads.claude.ai/claude-code/apt/stable stable main | ||
| 47 | EOF | ||
| 48 | |||
| 49 | echo "[3/5] 安装 Claude Code..." | ||
| 50 | apt-get update | ||
| 51 | apt-get install -y claude-code | ||
| 52 | } | ||
| 53 | |||
| 54 | verify_install() { | ||
| 55 | echo "[4/5] 校验 Claude Code 安装..." | ||
| 56 | claude --version | ||
| 57 | } | ||
| 58 | |||
| 59 | run_bootstrap() { | ||
| 60 | if [ "$CLAUDE_SKIP_BOOTSTRAP" = "1" ]; then | ||
| 61 | echo "[5/5] 跳过插件 bootstrap。" | ||
| 62 | return | ||
| 63 | fi | ||
| 64 | |||
| 65 | if [ ! -x "$BOOTSTRAP_SCRIPT" ]; then | ||
| 66 | echo "[error] 未找到可执行 bootstrap 脚本: $BOOTSTRAP_SCRIPT" >&2 | ||
| 67 | exit 1 | ||
| 68 | fi | ||
| 69 | |||
| 70 | echo "[5/5] 执行默认插件 bootstrap..." | ||
| 71 | "$BOOTSTRAP_SCRIPT" | ||
| 72 | } | ||
| 73 | |||
| 74 | print_next_steps() { | ||
| 75 | cat <<'EOF' | ||
| 76 | |||
| 77 | 安装完成。 | ||
| 78 | |||
| 79 | 认证方式二选一: | ||
| 80 | export ANTHROPIC_API_KEY=your_api_key | ||
| 81 | export CLAUDE_CODE_OAUTH_TOKEN=your_oauth_token | ||
| 82 | |||
| 83 | 默认插件: | ||
| 84 | superpowers | ||
| 85 | pr-review-toolkit | ||
| 86 | claude-code-setup | ||
| 87 | ralph-loop | ||
| 88 | typescript-lsp | ||
| 89 | rust-analyzer-lsp | ||
| 90 | |||
| 91 | 如需仅安装 Claude Code 而跳过插件初始化: | ||
| 92 | CLAUDE_SKIP_BOOTSTRAP=1 ./install-claude-code-debian13.sh | ||
| 93 | EOF | ||
| 94 | } | ||
| 95 | |||
| 96 | require_root | ||
| 97 | install_base_packages | ||
| 98 | install_claude_code | ||
| 99 | verify_install | ||
| 100 | run_bootstrap | ||
| 101 | print_next_steps | ||
| 102 |
container/scripts/node_python_install.sh
0 → 100644
| 1 | #!/bin.bash | ||
| 2 | cd ~ | ||
| 3 | |||
| 4 | curl -sSLk https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_23.11.0-2-Linux-x86_64.sh -o Miniconda3-py310_23.11.0-2-Linux-x86_64.sh && \ | ||
| 5 | bash ./Miniconda3-py310_23.11.0-2-Linux-x86_64.sh -b -p /usr/local/miniconda3 | ||
| 6 | |||
| 7 | curl -sSLk https://unofficial-builds.nodejs.org/download/release/v22.22.2/node-v22.22.2-linux-x64-glibc-217.tar.gz -o node-v22.22.2-linux-x64-glibc-217.tar.gz && \ | ||
| 8 | tar -xzf node-v22.22.2-linux-x64-glibc-217.tar.gz -C /usr/local/ && \ | ||
| 9 | ln -sf /usr/local/node-v22.22.2-linux-x64-glibc-217/bin/node /usr/local/bin/node && \ | ||
| 10 | ln -sf /usr/local/node-v22.22.2-linux-x64-glibc-217/bin/npm /usr/local/bin/npm && \ | ||
| 11 | rm -rf /node-v22.22.2-linux-x64-glibc-217.tar.gz | ||
| 12 | |||
| 13 | |||
| 14 | # 安装 Bun | ||
| 15 | curl -fsSL https://bun.sh/install | bash | ||
| 16 | |||
| 17 | # 重新加载 shell 配置 | ||
| 18 | source ~/.zshrc # 或 exec /usr/bin/zsh | ||
| 19 | |||
| 20 | # 验证安装 | ||
| 21 | # ~/.local/bin/bun --version | ||
| 22 | |||
| 23 | npm i -g opencode-ai --registry https://mirrors.cloud.tencent.com/npm/ | ||
| 24 | |||
| 25 | # cp -r ./container/helix-config /root/.config/helix | ||
| 26 |
-
Please register or sign in to post a comment