Commit b220751b b220751be26a8b0f4e39def7da1bd2b583a9d568 by cnb.bofCdSsphPA

Update 1

1 parent d8fd2d15
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
14 78
15 RUN echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers 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
16 82
17 USER user 83 ENV PATH="/usr/local/miniconda3/bin:/usr/local/node-v22.22.2-linux-x64-glibc-217/bin:/usr/local/bun/bin:${PATH}"
18 # Install code-server and extensions 84
19 RUN curl -fsSL https://code-server.dev/install.sh | sudo sh \ 85 # Helix: pre-built binary + config from context (COPY technique)
20 && code-server --install-extension golang.go \ 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)
102 USER user
103 RUN 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 \
...@@ -25,30 +108,38 @@ RUN curl -fsSL https://code-server.dev/install.sh | sudo sh \ ...@@ -25,30 +108,38 @@ RUN curl -fsSL https://code-server.dev/install.sh | sudo sh \
25 && code-server --install-extension github.github-vscode-theme \ 108 && code-server --install-extension github.github-vscode-theme \
26 && code-server --install-extension ms-ceintl.vscode-language-pack-zh-hans \ 109 && code-server --install-extension ms-ceintl.vscode-language-pack-zh-hans \
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
36 115
37 RUN sudo apt-get -y update && sudo apt-get -y install hx wget curl git git-lfs zsh tmux tzdata && \ 116 # oh-my-zsh
38 RUNZSH=no CHSH=no sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" && \ 117 RUN RUNZSH=no CHSH=no sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" && \
39 sudo apt-get install -y locales \ 118 chsh -s $(which zsh) user
40 && sudo rm -rf /var/lib/apt/lists/* \
41 && sudo sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen \
42 && sudo localedef -i zh_CN -c -f UTF-8 -A /usr/share/locale/locale.alias zh_CN.UTF-8 \
43 && sudo dpkg-reconfigure --frontend=noninteractive locales
44 119
45 RUN sudo /usr/bin/chsh -s $(which zsh) 120 # Neovim
121 RUN curl -fsSL https://github.com/neovim/neovim/releases/download/v0.12.2/nvim-linux-x86_64.tar.gz \
122 -o /tmp/nvim.tar.gz && \
123 tar xf /tmp/nvim.tar.gz -C /usr/local && \
124 ln -sf /usr/local/nvim-linux-x86_64/bin/nvim /usr/bin/nvim && \
125 rm /tmp/nvim.tar.gz
126
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
......
This file is too large to display.
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" # [!] 修正:使用引号,因为 [ 是特殊字符
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"]
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 "$@"
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
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