├── helix ├── .gitignore ├── languages.toml └── config.toml ├── .gdbinit ├── .npmrc ├── .hgrc ├── .ripgreprc ├── .gitignore ├── .gitattributes ├── .github └── workflows │ └── container.yaml ├── README.md ├── .tmux.conf ├── kitty.conf ├── Dockerfile ├── install.zsh ├── .gitconfig ├── Brewfile ├── .zshrc ├── init.lua └── Monokai Soda.itermcolors /helix/.gitignore: -------------------------------------------------------------------------------- 1 | runtime/* 2 | -------------------------------------------------------------------------------- /.gdbinit: -------------------------------------------------------------------------------- 1 | set disassembly-flavor intel 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | prefix=${XDG_DATA_HOME}/node 2 | -------------------------------------------------------------------------------- /.hgrc: -------------------------------------------------------------------------------- 1 | [ui] 2 | username = Jimmy Zelinskie 3 | 4 | [extensions] 5 | -------------------------------------------------------------------------------- /.ripgreprc: -------------------------------------------------------------------------------- 1 | --glob 2 | !{.git,.next,node_modules} 3 | --no-binary 4 | --hidden 5 | --no-ignore-vcs 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules/** 2 | *.class 3 | *.dll 4 | *.exe 5 | *.log 6 | *.o 7 | *.pyc 8 | *.so 9 | .*.sw? 10 | .DS_Store 11 | .DS_Store? 12 | .Spotlight-V100 13 | .Trashes 14 | .helix 15 | ._* 16 | .env 17 | .git/** 18 | .python-version 19 | Brewfile.lock.json 20 | Thumbs.db 21 | ehthumbs.db 22 | id_ed25519 23 | id_rsa 24 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.c diff=cpp 2 | *.cc diff=cpp 3 | *.cpp diff=cpp 4 | *.css diff=css 5 | *.ex diff=elixir 6 | *.exs diff=elixir 7 | *.go diff=golang 8 | *.h diff=cpp 9 | *.hh diff=cpp 10 | *.hpp diff=cpp 11 | *.html diff=html 12 | *.js diff=javascript 13 | *.md diff=markdown 14 | *.php diff=php 15 | *.pl diff=perl 16 | *.py diff=python 17 | *.rb diff=ruby 18 | *.rs diff=rust 19 | *.ts diff=javascript 20 | -------------------------------------------------------------------------------- /helix/languages.toml: -------------------------------------------------------------------------------- 1 | [language-server.vscode-json-language-server.config.format] 2 | insertFinalNewline = true 3 | 4 | [language-server.gopls.config] 5 | gofumpt = true 6 | codelenses.gc_details = true 7 | 8 | [language-server.rust-analyzer.config] 9 | cargo.buildScripts.enable = true 10 | checkOnSave.command = "clippy" 11 | 12 | [language-server.spicedb] 13 | command = "spicedb" 14 | args = ["lsp", "--log-level=warn"] 15 | 16 | [[language]] 17 | name = "spicedb" 18 | language-servers = ["spicedb"] 19 | 20 | [[language]] 21 | name = "sshclientconfig" 22 | shebangs = ["sshclientconfig"] 23 | -------------------------------------------------------------------------------- /.github/workflows/container.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Container" 3 | on: 4 | push: 5 | branches: ["*"] 6 | pull_request: 7 | branches: ["*"] 8 | jobs: 9 | build: 10 | name: "Build" 11 | runs-on: "ubuntu-latest" 12 | steps: 13 | - uses: "actions/checkout@v2" 14 | - uses: "docker/setup-qemu-action@v1" 15 | - uses: "docker/setup-buildx-action@v1" 16 | - uses: "docker/login-action@v1" 17 | with: 18 | registry: "ghcr.io" 19 | username: "${{ github.repository_owner }}" 20 | password: "${{ secrets.GITHUB_TOKEN }}" 21 | - uses: "docker/build-push-action@v2" 22 | with: 23 | context: "." 24 | platforms: "linux/amd64,linux/arm64" 25 | push: false 26 | - uses: "docker/build-push-action@v2" 27 | if: "${{ github.ref == 'refs/heads/main' }}" 28 | with: 29 | context: "." 30 | platforms: "linux/amd64,linux/arm64" 31 | push: true 32 | tags: "ghcr.io/${{ github.repository }}:latest" 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Jimmy Zelinskie's Dotfiles 2 | 3 | I primarily use macOS, but I also use Linux and Cygwin/WSL on Windows. 4 | I strive to make everything work *within reason* across all three platforms. 5 | Configuration requiring non-standard software should also gracefully degrade to something available on all platforms. 6 | I kinda take a [suckless]-style approach to configuration: nothing should be thousands of lines. 7 | 8 | [suckless]: https://suckless.org 9 | 10 | ## Installation 11 | 12 | ## Toolbox 13 | 14 | [I wrote a post] about BYOU (Bring Your Own Userspace). 15 | 16 | Basically, you can run my dotfiles in a container and mount your host inside, if you don't want to install anything. 17 | 18 | [I wrote a post]: https://jzelinskie.com/posts/toolbox-for-your-dotfiles 19 | 20 | ## Directly 21 | 22 | A simple installation zsh script is provided that inspects the filesystem and prompts the user before making any changes. 23 | 24 | Because vim and zsh install all of their plugins on first run, this script just creates symlinks and optionally installs [Homebrew] packages. 25 | 26 | [Homebrew]: https://brew.sh 27 | 28 | ```sh 29 | $ git clone git@github.com:jzelinskie/dotfiles.git ~/.dotfiles 30 | $ zsh ~/.dotfiles/install.zsh 31 | ``` 32 | -------------------------------------------------------------------------------- /helix/config.toml: -------------------------------------------------------------------------------- 1 | theme = "monokai_soda" 2 | 3 | [editor] 4 | auto-format = true 5 | auto-pairs = false 6 | bufferline = "always" 7 | cursor-shape.insert = "bar" 8 | file-picker.hidden = false 9 | indent-guides.character = "╎" 10 | indent-guides.render = true 11 | inline-diagnostics.cursor-line = "warning" 12 | insert-final-newline = true 13 | lsp.display-inlay-hints = true 14 | lsp.display-messages = true 15 | rulers = [80, 100] 16 | soft-wrap.enable = true 17 | statusline.left = ["mode", "spinner", "file-name"] 18 | statusline.right = ["diagnostics", "selections", "position", "file-encoding", "file-line-ending", "file-type"] 19 | true-color = true 20 | whitespace.characters.newline = "¬" 21 | whitespace.characters.tab = "·" 22 | whitespace.characters.tabpad = "·" 23 | whitespace.render.newline = "all" 24 | whitespace.render.tab = "all" 25 | 26 | [keys.normal] 27 | "up" = ["keep_primary_selection","delete_selection","move_line_up","paste_before"] 28 | "down" = ["keep_primary_selection","delete_selection","paste_after"] 29 | "left" = "unindent" 30 | "right" = "indent" 31 | "C-x" = ":reset-diff-change" 32 | 33 | [keys.normal.space] 34 | i = ":toggle lsp.display-inlay-hints" 35 | 36 | [keys.insert."C-v"] 37 | "tab" = [":insert-output printf \\\\t", "move_char_right"] 38 | -------------------------------------------------------------------------------- /.tmux.conf: -------------------------------------------------------------------------------- 1 | # prefix key like gnu screen 2 | set-option -g prefix C-a 3 | unbind-key C-a 4 | bind-key C-a send-prefix 5 | 6 | set -g base-index 1 7 | 8 | # vim-like pane navigation 9 | bind-key v split-window -h 10 | bind-key s split-window -v 11 | bind-key h select-pane -L 12 | bind-key j select-pane -D 13 | bind-key k select-pane -U 14 | bind-key l select-pane -R 15 | 16 | # don't delay the esc key, this makes vim a nightmare 17 | set -sg escape-time 0 18 | 19 | # resize panes 20 | bind-key -r H resize-pane -L 5 21 | bind-key -r L resize-pane -R 5 22 | bind-key -r J resize-pane -D 5 23 | bind-key -r K resize-pane -U 5 24 | 25 | # window navigation 26 | bind-key a last-window 27 | bind-key q display-panes 28 | bind-key c new-window 29 | bind-key t next-window 30 | bind-key T previous-window 31 | bind-key space next-window 32 | bind-key bspace previous-window 33 | bind-key enter next-layout 34 | bind-key C-o rotate-window 35 | 36 | # misc keys 37 | bind-key r refresh-client 38 | bind-key . command-prompt 39 | 40 | # options 41 | set -g renumber-windows on 42 | set -g bell-action any 43 | set -g visual-bell off 44 | set -g default-terminal "screen-256color" 45 | set -g history-limit 2000 46 | setw -g monitor-activity on 47 | setw -g automatic-rename on 48 | 49 | # status line 50 | set -g status-style fg=white 51 | set -g status-style bg=black 52 | set -g message-style fg=white 53 | set -g message-style bg=black 54 | set -g status-right '#h ' 55 | set -g window-status-format " #I.#W " 56 | set -g window-status-current-format "#[fg=green,bg=default][#I.#W]#[default]" 57 | -------------------------------------------------------------------------------- /kitty.conf: -------------------------------------------------------------------------------- 1 | #: Font 2 | font_family FiraCode-Retina 3 | bold_font auto 4 | italic_font auto 5 | bold_italic_font auto 6 | font_size 20.0 7 | font_features FiraCode-Retina +zero +onum 8 | 9 | #: Cursor 10 | shell_integration no-cursor 11 | 12 | #: Scrollback 13 | scrollback_lines 10000 14 | scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER 15 | scrollback_pager_history_size 100 16 | 17 | #: Mouse 18 | url_excluded_characters ¬ 19 | mouse_map left click ungrabbed no-op 20 | mouse_map kitty_mod+left release grabbed,ungrabbed mouse_click_url 21 | 22 | #: Monokai Soda Theme 23 | background #191919 24 | foreground #c4c4b5 25 | cursor #f6f6ec 26 | color0 #75715e 27 | color8 #615e4b 28 | color1 #f3005f 29 | color9 #f3005f 30 | color2 #97e023 31 | color10 #97e023 32 | color3 #fa8419 33 | color11 #dfd561 34 | color4 #9c64fe 35 | color12 #9c64fe 36 | color5 #f3005f 37 | color13 #f3005f 38 | color6 #57d1ea 39 | color14 #57d1ea 40 | color7 #c4c4b5 41 | color15 #f6f6ee 42 | selection_foreground #191919 43 | selection_background #343434 44 | 45 | #: macOS 46 | macos_titlebar_color #191919 47 | macos_show_window_title_in none 48 | kitty_mod cmd 49 | 50 | #: Window shortcuts 51 | map kitty_mod+1 goto_tab 1 52 | map kitty_mod+2 goto_tab 2 53 | map kitty_mod+3 goto_tab 3 54 | map kitty_mod+4 goto_tab 4 55 | map kitty_mod+5 goto_tab 5 56 | map kitty_mod+6 goto_tab 6 57 | map kitty_mod+7 goto_tab 7 58 | map kitty_mod+8 goto_tab 8 59 | map kitty_mod+9 goto_tab 9 60 | map kitty_mod+0 goto_tab 10 61 | 62 | #: Tab Bar 63 | tab_bar_style separator 64 | tab_bar_align center 65 | tab_separator "" 66 | tab_title_template " {sup.index} {title} " 67 | active_tab_foreground #c4c4b5 68 | active_tab_background #343434 69 | active_tab_font_style normal 70 | inactive_tab_foreground #c4c4b5 71 | inactive_tab_background #191919 72 | inactive_tab_font_style normal 73 | 74 | #: Layouts 75 | enabeled_layouts stack 76 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:edge 2 | LABEL maintainer "Jimmy Zelinskie " 3 | 4 | RUN \ 5 | echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \ 6 | apk upgrade --no-cache && \ 7 | apk add --no-cache \ 8 | # System \ 9 | ca-certificates \ 10 | man-pages \ 11 | sudo sudo-doc \ 12 | openssh openssh-doc \ 13 | zig \ 14 | zsh zsh-doc \ 15 | # Tools \ 16 | bat \ 17 | binwalk \ 18 | cloc cloc-doc \ 19 | curl curl-doc \ 20 | exa \ 21 | gdb gdb-doc \ 22 | graphviz graphviz-doc \ 23 | imagemagick imagemagick-doc \ 24 | jq jq-doc \ 25 | mysql-client \ 26 | nmap nmap-doc \ 27 | p7zip p7zip-doc \ 28 | percona-toolkit percona-toolkit-doc \ 29 | postgresql \ 30 | python2 python3 \ 31 | ripgrep \ 32 | rsync \ 33 | skim skim-doc skim-zsh-completion \ 34 | skopeo \ 35 | speedtest-cli \ 36 | sqlite sqlite-doc \ 37 | sshuttle \ 38 | terraform \ 39 | tmux tmux-doc \ 40 | xz xz-doc \ 41 | youtube-dl youtube-dl-doc youtube-dl-zsh-completion \ 42 | zstd zstd-doc \ 43 | # Version Control \ 44 | git git-doc \ 45 | hub hub-doc \ 46 | mercurial mercurial-doc \ 47 | # Editors \ 48 | neovim neovim-doc neovim-lang 49 | 50 | SHELL ["/bin/zsh", "-c"] 51 | RUN \ 52 | echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ 53 | adduser -D -G wheel jzelinskie 54 | USER jzelinskie 55 | WORKDIR /home/jzelinskie 56 | ENV XDG_CONFIG_HOME=/home/jzelinskie/.config XDG_DATA_HOME=/home/jzelinskie/.local/share 57 | 58 | COPY --chown=jzelinskie:wheel . $XDG_CONFIG_HOME/dotfiles/ 59 | 60 | RUN \ 61 | # Install dotfiles \ 62 | DOTFILES_NONINTERACTIVE=1 $XDG_CONFIG_HOME/dotfiles/install.zsh && \ 63 | # Rewrite clones to use https, instead of ssh \ 64 | sed -i '/github.com/d' $HOME/.gitconfig && \ 65 | git config --global url."https://github.com/".insteadOf git@github.com: && \ 66 | git config --global url."https://".insteadOf git:// && \ 67 | # Generate zsh config \ 68 | git clone "git@github.com:tarjoilija/zgen.git" "$XDG_DATA_HOME/zgen" && \ 69 | source $HOME/.zshrc && \ 70 | # Install nvim plugins \ 71 | nvim --headless -c 'autocmd User PackerComplete quitall' -c 'PackerSync' 72 | 73 | ENTRYPOINT [ "zsh" ] 74 | -------------------------------------------------------------------------------- /install.zsh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env zsh 2 | set -e 3 | setopt EXTENDED_GLOB 4 | 5 | # Find the current directory 6 | local DOTFILES_DIR="$(cd $(dirname ${BASH_SOURCE[0]-$0}) && pwd)" 7 | 8 | # Default values for configurable variables 9 | local XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-$HOME/.config} 10 | local INSTALL_DIR=${INSTALL_DIR:-$HOME} 11 | 12 | # Prompt the user 13 | if [ -z ${DOTFILES_NONINTERACTIVE+x} ]; then 14 | echo "Installing dotfiles in $DOTFILES_DIR into $XDG_CONFIG_HOME and $INSTALL_DIR" 15 | echo "You can override these with \$XDG_CONFIG_HOME and \$INSTALL_DIR, respectively" 16 | echo -n "Continue? " 17 | read REPLY 18 | if [[ ! $REPLY =~ ^[Yy]$ ]]; then 19 | echo "Cowardly refusing to link dotfiles" 20 | exit 1 21 | fi 22 | fi 23 | 24 | # Install everything that belongs in $XDG_CONFIG_HOME 25 | echo 26 | echo "Linking XDG_CONFIG_HOME configurations..." 27 | local XDG_LINKS=( 28 | "$DOTFILES_DIR/init.lua:$XDG_CONFIG_HOME/nvim/init.lua" 29 | "$DOTFILES_DIR/kitty.conf:$XDG_CONFIG_HOME/kitty/kitty.conf" 30 | "$DOTFILES_DIR/helix:$XDG_CONFIG_HOME" 31 | ) 32 | for LINK in $XDG_LINKS; do 33 | local FILE=`echo $LINK | awk -F":" '{print $1}'` 34 | local TARGET=`echo $LINK | awk -F":" '{print $2}'` 35 | if [[ ! -a $TARGET ]]; then 36 | mkdir -p $(dirname $TARGET) 37 | print -P -- " %F{002}Linking file:%f $FILE => $TARGET" 38 | ln -s $FILE $TARGET 39 | else 40 | print -P -- " %F{011}Link already exists:%f $FILE => $TARGET" 41 | fi 42 | done 43 | 44 | # Install everything that belongs in $HOME 45 | echo 46 | echo "Linking the dotfiles..." 47 | for FILE in $DOTFILES_DIR/(.??*)(.N); do 48 | local TARGET=$INSTALL_DIR/${FILE:t} 49 | if [[ ! -a $INSTALL_DIR/${FILE:t} ]]; then 50 | print -P -- " %F{002}Linking file:%f $FILE => $TARGET" 51 | ln -s $FILE $INSTALL_DIR/${FILE:t} 52 | else 53 | print -P -- " %F{011}Link already exists:%f $FILE => $TARGET" 54 | fi 55 | done 56 | 57 | # Homebrew installation 58 | if [ -z ${DOTFILES_NONINTERACTIVE+x} ] && which brew > /dev/null; then 59 | echo 60 | echo "Homebrew installation detected." 61 | echo "Do you want to install Brewfile contents?" 62 | echo -n "Continue? " 63 | read REPLY 64 | if [[ ! $REPLY =~ ^[Yy]$ ]]; then 65 | echo "Cowardly refusing to install brew packages" 66 | exit 1 67 | else 68 | brew bundle install $DOTFILES_DIR/Brewfile 69 | fi 70 | fi 71 | -------------------------------------------------------------------------------- /.gitconfig: -------------------------------------------------------------------------------- 1 | [user] 2 | email = jimmy@zelinskie.com 3 | name = Jimmy Zelinskie 4 | signingKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFFLZXAb2TmLXbo9stYA5Lr2xbgyyHl5QXlTJ5VsoJNB\n" 5 | [color] 6 | ui = auto 7 | [column] 8 | ui = auto 9 | [branch] 10 | sort = -committerdate 11 | [alias] 12 | amend = commit --amend --no-edit 13 | ammend = amend 14 | cherrypick = cherry-pick 15 | co = checkout 16 | cob = "!f() { git checkout master; git pull; git checkout -b $1; }; f" 17 | comit = commit 18 | copr = "!f() { git fetch $1 pull/$2/head:pr-$2 && git checkout pr-$2; }; f" 19 | dc = diff --cached 20 | dif = diff 21 | find = log --pretty=\"format:%Cgreen%H\n%s\n\n%b\" --name-status --grep 22 | fixup = "!f() { TARGET=$(git rev-parse "$1"); git commit --fixup=$TARGET ${@:2} && EDITOR=true git rebase -i --autostash --autosquash $TARGET^; }; f" 23 | grep-open = "!f() { git grep $1 | cut -d: -f1 | xargs $EDITOR; }; f" 24 | l = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue) -%an%Creset' --abbrev-commit 25 | pullr = pull --rebase 26 | rebase-i = rebase -i --autostash 27 | remotes = remote 28 | s = status --short --branch --ignore-submodules=untracked 29 | sha = rev-parse --short 30 | stage-head = git reset --soft HEAD~ 31 | unadd = reset HEAD 32 | unstage = restore --staged 33 | sw = switch 34 | prune-branches = "!f() { git branch --merged | egrep -v \"(^\\*|main|master|dev)\" | xargs git branch -d; }; f" 35 | [core] 36 | excludesfile = ~/.gitignore 37 | safecrlf = true 38 | trustctime = false 39 | [merge] 40 | conflictstyle = zdiff3 41 | [diff] 42 | algorithm = histogram 43 | colorMoved = plain 44 | submodule = log 45 | compactionHeuristic = true 46 | mnemonicprefix = true 47 | [push] 48 | default = simple 49 | autoSetupRemote = true 50 | followTags = true 51 | [fetch] 52 | prune = true 53 | pruneTags = true 54 | all = true 55 | [github] 56 | user = jzelinskie 57 | [rerere] 58 | enabled = true 59 | autoupdate = true 60 | [pull] 61 | ff = only 62 | rebase = true 63 | [rebase] 64 | autoStash = true 65 | autoSquash = true 66 | updateRefs = true 67 | [init] 68 | defaultBranch = main 69 | [url "ssh://git@github.com/"] 70 | pushinsteadOf = https://github.com/ 71 | [url "git@gist.github.com:"] 72 | pushinsteadOf = https://gist.github.com/jzelinskie/ 73 | [status] 74 | submodulesummary = true 75 | [submodule] 76 | recurse = true 77 | [filter "lfs"] 78 | clean = git-lfs clean -- %f 79 | smudge = git-lfs smudge -- %f 80 | process = git-lfs filter-process 81 | required = true 82 | [gpg] 83 | format = ssh 84 | [gpg "ssh"] 85 | program = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign" 86 | [commit] 87 | verbose = true 88 | gpgsign = true 89 | [tag] 90 | gpgsign = true 91 | sort = version:refname 92 | [help] 93 | autocorrect = prompt 94 | -------------------------------------------------------------------------------- /Brewfile: -------------------------------------------------------------------------------- 1 | # vim: syntax=ruby 2 | brew "age" 3 | brew "authzed/tap/spicedb" 4 | brew "authzed/tap/zed" 5 | brew "autoconf" 6 | brew "automake" 7 | brew "awscli" 8 | brew "azure-cli" 9 | brew "bat" 10 | brew "binwalk" 11 | brew "bison" 12 | brew "bufbuild/buf/buf" 13 | brew "checkbashisms" 14 | brew "cloc" 15 | brew "clojure/tools/clojure" 16 | brew "cmake" 17 | brew "cockroachdb/tap/cockroach" 18 | brew "coreutils" 19 | brew "cosign" 20 | brew "cowsay" 21 | brew "ctags" 22 | brew "cue-lang/tap/cue" 23 | brew "curl" 24 | brew "delve" 25 | brew "deno" 26 | brew "difftastic" 27 | brew "diffutils" 28 | brew "docker" 29 | brew "docker-completion" 30 | brew "docker-compose" 31 | brew "dog" 32 | brew "entr" 33 | brew "exa" 34 | brew "ffmpeg" 35 | brew "flac" 36 | brew "flatbuffers" 37 | brew "gawk" 38 | brew "gcc" 39 | brew "gh" 40 | brew "git" 41 | brew "git-crypt" 42 | brew "git-extras" 43 | brew "git-filter-repo" 44 | brew "gitleaks" 45 | brew "gnu-getopt" 46 | brew "gnu-sed" 47 | brew "gnu-tar" 48 | brew "gnupg" 49 | brew "gnutls" 50 | brew "go" 51 | brew "golangci-lint" 52 | brew "goreleaser/tap/goreleaser-pro" 53 | brew "gpgme" 54 | brew "gradle" 55 | brew "graphviz" 56 | brew "grpc" 57 | brew "grpcurl" 58 | brew "helix" 59 | brew "helm" 60 | brew "htop" 61 | brew "hugo" 62 | brew "imagemagick" 63 | brew "jdtls" 64 | brew "jpegoptim" 65 | brew "jq" 66 | brew "jzelinskie/faq/faq" 67 | brew "kind" 68 | brew "ko" 69 | brew "krew" 70 | brew "kubeconform" 71 | brew "kubectx" 72 | brew "kubefwd" 73 | brew "kubernetes-cli" 74 | brew "kustomize" 75 | brew "leiningen" 76 | brew "llvm" 77 | brew "lolcat" 78 | brew "lsd" 79 | brew "lua" 80 | brew "lua-language-server" 81 | brew "luajit" 82 | brew "m4" 83 | brew "mage" 84 | brew "markdownlint-cli" 85 | brew "mas" 86 | brew "media-info" 87 | brew "mercurial" 88 | brew "messense/macos-cross-toolchains/aarch64-unknown-linux-gnu" 89 | brew "messense/macos-cross-toolchains/aarch64-unknown-linux-musl" 90 | brew "messense/macos-cross-toolchains/x86_64-unknown-linux-gnu" 91 | brew "messense/macos-cross-toolchains/x86_64-unknown-linux-musl" 92 | brew "mingw-w64" 93 | brew "mitmproxy" 94 | brew "mkcert" 95 | brew "moreutils" 96 | brew "mtr" 97 | brew "neofetch" 98 | brew "neovim" 99 | brew "netcat" 100 | brew "nmap" 101 | brew "node" 102 | brew "numpy" 103 | brew "openjdk" 104 | brew "optipng" 105 | brew "p7zip" 106 | brew "pandoc" 107 | brew "par" 108 | brew "pkg-config" 109 | brew "pngcrush" 110 | brew "postgresql" 111 | brew "protobuf" 112 | brew "protoc-gen-grpc-web" 113 | brew "pstree" 114 | brew "psutils" 115 | brew "pulumi" 116 | brew "pyenv" 117 | brew "pyenv-virtualenv" 118 | brew "python" 119 | brew "rbenv" 120 | brew "rbenv-gemset" 121 | brew "redis" 122 | brew "ripgrep" 123 | brew "rsync" 124 | brew "rust" 125 | brew "shellcheck" 126 | brew "sk" 127 | brew "skopeo" 128 | brew "socat" 129 | brew "sqlite" 130 | brew "stefanprodan/tap/kustomizer" 131 | brew "stern" 132 | brew "taplo" 133 | brew "tcpdump" 134 | brew "telnet" 135 | brew "tldr" 136 | brew "tmate" 137 | brew "tmux" 138 | brew "trash" 139 | brew "tree-sitter" 140 | brew "turbot/tap/steampipe" 141 | brew "txn2/tap/kubefwd" 142 | brew "upx" 143 | brew "watch" 144 | brew "wget" 145 | brew "xxhash" 146 | brew "xz" 147 | brew "yamllint" 148 | brew "yarn" 149 | brew "youtube-dl" 150 | brew "yq" 151 | brew "zig" 152 | brew "zsh" 153 | brew "zstd" 154 | -------------------------------------------------------------------------------- /.zshrc: -------------------------------------------------------------------------------- 1 | # profile startup 2 | # zmodload zsh/zprof 3 | 4 | # XDG 5 | export XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share} 6 | export XDG_STATE_HOME=${XDG_STATE_HOME:-$HOME/.local/state} 7 | export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-$HOME/.config} 8 | export XDG_CACHE_HOME=${XDG_CACHE_HOME:-$HOME/.cache} 9 | 10 | # add brew to $PATH (prezto brew module needs it on the path) 11 | [[ -d /opt/homebrew ]] && eval "$(/opt/homebrew/bin/brew shellenv)" 12 | [[ -d ~/.linuxbrew ]] && eval "$(~/.linuxbrew/bin/brew shellenv)" 13 | if command -v brew > /dev/null; then 14 | export DYLD_FALLBACK_LIBRARY_PATH="$(brew --prefix)/lib" 15 | [[ -d "$(brew --prefix)/opt/llvm" ]] && path=("$(brew --prefix)/opt/llvm/bin" $path) 16 | fi; 17 | 18 | # add ~/.local/bin to $PATH if it exists 19 | [[ -d ~/.local/bin ]] && path=(~/.local/bin $path) 20 | 21 | # zgenom - an optimized zsh package manager 22 | export ZGEN_DIR=$XDG_DATA_HOME/zgenom 23 | export NVM_LAZY_LOAD=true 24 | [[ ! -d $ZGEN_DIR ]] && HOME="" git clone https://github.com/jzelinskie/zgenom.git "$ZGEN_DIR" 25 | # shellcheck disable=SC1091 26 | source "$ZGEN_DIR/zgenom.zsh" 27 | zgenom autoupdate 28 | if ! zgenom saved; then 29 | zgenom compdef 30 | 31 | # prezto 32 | zgenom prezto 'module:editor' dot-expansion 'yes' 33 | [[ $OSTYPE == darwin* ]] && zgenom prezto prompt theme 'sorin' 34 | [[ ! $OSTYPE == darwin* ]] && zgenom prezto prompt theme 'skwp' 35 | zgenom prezto 36 | zgenom prezto git 37 | 38 | # everything else 39 | zgenom load docker/cli contrib/completion/zsh 40 | zgenom load lukechilds/zsh-nvm 41 | zgenom load peterhurford/git-it-on.zsh 42 | zgenom load rupa/z 43 | zgenom load zsh-users/zsh-completions src 44 | zgenom load zsh-users/zsh-history-substring-search 45 | zgenom load zsh-users/zsh-syntax-highlighting 46 | 47 | zgenom save 48 | zgenom compile ~/.zshrc 49 | fi 50 | 51 | # Editor preferences: Helix > Neovim > Vim 52 | if command -v hx > /dev/null; then 53 | export EDITOR=hx 54 | elif command -v nvim > /dev/null; then 55 | export EDITOR=nvim 56 | else 57 | export EDITOR=vim 58 | fi 59 | export GIT_EDITOR=$EDITOR 60 | export VISUAL=$EDITOR 61 | 62 | # less 63 | export PAGER='less' 64 | export LESS='-F -g -i -M -R -S -w -X -z-4' 65 | if (( ${+commands[lesspipe.sh]} )); then 66 | export LESSOPEN='| /usr/bin/env lesspipe.sh %s 2>&-' 67 | fi 68 | 69 | # mac-style text navigation for minimal terminal emulators 70 | bindkey "\e[1;3D" backward-word # ⌥← 71 | bindkey "\e[1;3C" forward-word # ⌥→ 72 | 73 | # global ripgrep config 74 | if command -v rg > /dev/null; then export RIPGREP_CONFIG_PATH=~/.ripgreprc; fi 75 | 76 | # add sandboxed tailscale to path 77 | [[ -s /Applications/Tailscale.app/Contents/MacOS ]] && path=("/Applications/Tailscale.app/Contents/MacOS" $path) 78 | 79 | # 1password 8 ssh-agent 80 | [[ $OSTYPE == darwin* ]] && export SSH_AUTH_SOCK="$HOME/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock" 81 | 82 | # wsl-open as a browser for Windows 83 | [[ $(uname -r) == *Microsoft ]] && export BROWSER=wsl-open 84 | 85 | # create an alias to the first arg, if the command in the second arg exists 86 | # shellcheck disable=2139 87 | function alias_if_exists() { command -v "${2%% *}" > /dev/null && alias "$1"="$2"; } 88 | alias_if_exists cat bat 89 | alias_if_exists compose docker-compose 90 | alias_if_exists g git 91 | alias_if_exists icat 'kitty +kitten icat' 92 | alias_if_exists jq faq 93 | alias_if_exists k kubectl 94 | alias_if_exists kd 'kubectl authzed dedicated' 95 | alias_if_exists kam 'kubectl -n authzed-monitoring' 96 | alias_if_exists kar 'kubectl -n authzed-region' 97 | alias_if_exists kas 'kubectl -n authzed-system' 98 | alias_if_exists kctx kubectx 99 | alias_if_exists kks 'kubectl -n kube-system' 100 | alias_if_exists kns kubens 101 | alias_if_exists kt 'kubectl -n tenant' 102 | alias_if_exists ktr 'kubectl -n torrent' 103 | alias_if_exists ls lsd 104 | alias_if_exists mk minikube 105 | alias_if_exists open wsl-open 106 | alias_if_exists open xdg-open 107 | alias_if_exists p pnpm 108 | alias_if_exists pbcopy 'xclip -selection clipboard' 109 | alias_if_exists pbpaste 'xclip -selection clipboard -o' 110 | alias_if_exists sed gsed 111 | alias_if_exists tree 'lsd --tree' 112 | alias_if_exists vi nvim 113 | alias_if_exists vim nvim 114 | alias_if_exists zgen zgenom 115 | 116 | # source a script, if it exists 117 | function source_if_exists() { [[ -s $1 ]] && source "$1"; } 118 | source_if_exists "$CARGO_HOME/env" 119 | source_if_exists "$GHOSTTY_RESOURCES_DIR/shell-integration/zsh/ghostty-integration" 120 | source_if_exists "$HOME/.gvm/scripts/gvm" 121 | source_if_exists "$HOME/.iterm2_shell_integration.zsh" 122 | source_if_exists "$HOME/.nix-profile/etc/profile.d/nix.sh" 123 | 124 | # Put Go pkgs in $XDG_DATA_HOME, add GOBIN to the path, add brew libs to CGO 125 | if command -v go > /dev/null; then 126 | export GOPATH=$XDG_DATA_HOME/go 127 | [[ -d $GOPATH/bin ]] && path=("$GOPATH/bin" $path) 128 | if command -v brew > /dev/null; then export CGO_LDFLAGS="-L$(brew --prefix)/lib"; fi 129 | fi 130 | 131 | # Add cargo to $PATH and turn on backtraces for Rust 132 | export RUSTUP_HOME=$XDG_DATA_HOME/rustup 133 | export CARGO_HOME=$XDG_DATA_HOME/cargo 134 | [[ -d $CARGO_HOME/bin ]] && path=("$CARGO_HOME/bin" $path) 135 | if command -v rustc > /dev/null; then export RUST_BACKTRACE=1; fi 136 | 137 | # never generate .pyc files: it's slower, but maintains your sanity 138 | if command -v python > /dev/null; then export PYTHONDONTWRITEBYTECODE=1; fi 139 | 140 | # lazy load pyenv 141 | export PYENV_ROOT=${PYENV_ROOT:-$XDG_DATA_HOME/pyenv} 142 | [[ -a "$PYENV_ROOT/bin/pyenv" ]] && path=("$PYENV_ROOT/bin" $path) 143 | if type pyenv &> /dev/null || [[ -a $PYENV_ROOT/bin/pyenv ]]; then 144 | function pyenv() { 145 | unset pyenv 146 | path=("$PYENV_ROOT/shims" $path) 147 | eval "$(command pyenv init -)" 148 | if command -v pyenv-virtualenv-init > /dev/null; then 149 | eval "$(pyenv virtualenv-init -)" 150 | export PYENV_VIRTUALENV_DISABLE_PROMPT=1 151 | fi 152 | pyenv "$@" 153 | } 154 | fi 155 | 156 | # lazy load rbenv 157 | export RBENV_ROOT=${RBENV_ROOT:-$XDG_DATA_HOME/rbenv} 158 | [[ -a $RBENV_ROOT/bin/rbenv ]] && path=("$RBENV_ROOT/bin" $path) 159 | if type rbenv &> /dev/null || [[ -a $RBENV_ROOT/bin/rbenv ]]; then 160 | function rbenv() { 161 | unset rbenv 162 | path=("$RBENV_ROOT/shims" $path) 163 | eval "$(command rbenv init -)" 164 | } 165 | fi 166 | 167 | # add airport to path 168 | AIRPORT_PATH=/System/Library/PrivateFrameworks/Apple80211.framework/Resources 169 | [[ -d "$AIRPORT_PATH" ]] && path=("$AIRPORT_PATH" $path) 170 | 171 | # global node installs (gross) 172 | [[ -d "$XDG_DATA_HOME/node/bin" ]] && path=("$XDG_DATA_HOME/node/bin" $path) 173 | 174 | # pnpm global installs (slightly less gross) 175 | if command -v pnpm > /dev/null; then 176 | export PNPM_HOME="$XDG_DATA_HOME/pnpm" 177 | path=("$PNPM_HOME" $path) 178 | fi 179 | 180 | # bun 181 | if [[ -d ~/.bun ]]; then 182 | source_if_exists ~/.bun/_bun 183 | export BUN_INSTALL="$HOME/.bun" 184 | export PATH="$BUN_INSTALL/bin:$PATH" 185 | fi 186 | 187 | # alias for accessing the docker host as a container 188 | which docker > /dev/null && alias docker-host='docker run -it --rm --privileged --pid=host justincormack/nsenter1' 189 | 190 | # krew 191 | if command -v kubectl-krew > /dev/null; then 192 | export KREW_ROOT=$XDG_DATA_HOME/krew 193 | path=("$KREW_ROOT/bin" $path) 194 | fi 195 | 196 | # gcloud 197 | [[ -d $XDG_DATA_HOME/google-cloud-sdk ]] && export GCLOUD_SDK_PATH="$XDG_DATA_HOME/google-cloud-sdk" 198 | if [[ -d $GCLOUD_SDK_PATH ]]; then 199 | source_if_exists "$GCLOUD_SDK_PATH/path.zsh.inc" 200 | source_if_exists "$GCLOUD_SDK_PATH/completion.zsh.inc" 201 | export USE_GKE_GCLOUD_AUTH_PLUGIN=True 202 | fi 203 | 204 | # time aliases 205 | alias ber='TZ=Europe/Berlin date' 206 | alias nyc='TZ=America/New_York date' 207 | alias sfo='TZ=America/Los_Angeles date' 208 | alias utc='TZ=Etc/UTC date' 209 | 210 | # theme for faq syntax highlighting 211 | export FAQ_STYLE='github' 212 | -------------------------------------------------------------------------------- /init.lua: -------------------------------------------------------------------------------- 1 | -- leader 2 | vim.g.mapleader = ',' 3 | 4 | -- mapping functions 5 | function nmap(lhs, rhs) vim.api.nvim_set_keymap('n', lhs, rhs, {}) end 6 | function vmap(lhs, rhs) vim.api.nvim_set_keymap('v', lhs, rhs, {}) end 7 | function xmap(lhs, rhs) vim.api.nvim_set_keymap('v', lhs, rhs, {}) end 8 | function snmap(lhs, rhs) vim.api.nvim_set_keymap('n', lhs, rhs, { silent = true}) end 9 | function nnoremap(lhs, rhs) vim.api.nvim_set_keymap('n', lhs, rhs, { noremap = true }) end 10 | 11 | -- misc global opts 12 | local settings = { 13 | 'set colorcolumn=80,100', 14 | 'set cursorline', 15 | 'set completeopt-=preview', 16 | 'set cpoptions=ces$', 17 | 'set ffs=unix,dos', 18 | 'set fillchars=vert:·', 19 | 'set foldopen=block,insert,jump,mark,percent,quickfix,search,tag,undo', 20 | 'set guioptions-=T', 21 | 'set guioptions-=m', 22 | 'set hidden', 23 | 'set hlsearch', 24 | 'set ignorecase', 25 | 'set lazyredraw', 26 | 'set list listchars=tab:·\\ ,eol:¬', 27 | 'set nobackup', 28 | 'set noerrorbells', 29 | 'set noshowmode', 30 | 'set noswapfile', 31 | 'set number', 32 | 'set shellslash', 33 | 'set showfulltag', 34 | 'set showmatch', 35 | 'set showmode', 36 | 'set smartcase', 37 | 'set synmaxcol=2048', 38 | 'set t_Co=256', 39 | 'set title', 40 | 'set ts=2 sts=2 sw=2 et ci', 41 | 'set ttyfast', 42 | 'set vb', 43 | 'set virtualedit=all', 44 | 'set visualbell', 45 | 'set wrapscan', 46 | 'set termguicolors', 47 | 'set cpoptions+=_', 48 | } 49 | for _, setting in ipairs(settings) do vim.cmd(setting) end 50 | 51 | -- clear hlsearch on redraw 52 | nnoremap('', ':nohlsearch') 53 | 54 | -- clipboard 55 | if vim.fn.has('unnamedplus') then vim.o.clipboard = 'unnamedplus' else vim.o.clipboard = 'unnamed' end 56 | 57 | -- toggle paste and wrap 58 | snmap('p', ':set invpaste:set paste?') 59 | snmap('w', ':set invwrap:set wrap?') 60 | 61 | -- strip trailing whitespace 62 | nnoremap('sws', ':%s/\\s\\+$//e') 63 | 64 | -- packer 65 | local function load_packer_config(bootstrap) 66 | local function exclude_on_bootstrap(fn) if not bootstrap then return fn end end 67 | return require('packer').startup(function(use) 68 | use { 69 | 'bogado/file-line', 70 | 'folke/which-key.nvim', 71 | 'jjo/vim-cue', 72 | 'milkypostman/vim-togglelist', 73 | 'ray-x/lsp_signature.nvim', 74 | 'tpope/vim-commentary', 75 | 'tpope/vim-repeat', 76 | 'tpope/vim-sleuth', 77 | 'tpope/vim-surround', 78 | 'vim-scripts/a.vim', 79 | 'wbthomason/packer.nvim', 80 | 81 | 82 | { 83 | 'tpope/vim-unimpaired', 84 | config = exclude_on_bootstrap(function() 85 | nmap('', '[e') 86 | vmap('', '[egv') 87 | nmap('', ']e') 88 | vmap('', ']egv') 89 | nmap('', '<<') 90 | nmap('', '>>') 91 | vmap('', '', '>gv') 93 | end), 94 | }, 95 | { 96 | 'jzelinskie/monokai-soda.vim', 97 | requires = 'tjdevries/colorbuddy.vim', 98 | config = exclude_on_bootstrap(function() 99 | vim.cmd('colorscheme monokai-soda') 100 | end), 101 | }, 102 | { 103 | 'norcalli/nvim-colorizer.lua', 104 | config = exclude_on_bootstrap(function() 105 | require('colorizer').setup() 106 | end), 107 | }, 108 | { 109 | 'fatih/vim-go', 110 | config = exclude_on_bootstrap(function() 111 | vim.g.go_echo_go_info = 0 -- https://github.com/fatih/vim-go/issues/2904#issuecomment-637102187 112 | vim.g.go_fmt_command = 'gopls' 113 | vim.g.go_gopls_gofumpt = 1 114 | vim.g.go_doc_keywordprg_enabled = 0 115 | end), 116 | }, 117 | { 118 | 'junegunn/vim-easy-align', 119 | config = exclude_on_bootstrap(function() 120 | xmap('ga', '(EasyAlign)') 121 | nmap('ga', '(EasyAlign)') 122 | end), 123 | }, 124 | { 125 | 'nvim-treesitter/nvim-treesitter', 126 | config = exclude_on_bootstrap(function() 127 | require('nvim-treesitter.configs').setup({ 128 | -- ensure_installed = "all", 129 | ignore_install = { "phpdoc" }, 130 | disable = { "phpdoc" }, 131 | highlight = { enable = true }, 132 | }) 133 | end), 134 | }, 135 | { 136 | 'vim-airline/vim-airline-themes', 137 | requires = 'vim-airline/vim-airline', 138 | config = exclude_on_bootstrap(function() 139 | vim.g.airline_theme = 'monochrome' 140 | vim.g.airline_powerline_fonts = '0' 141 | vim.cmd('let g:airline#extensions#tabline#enabled = 1') 142 | vim.cmd('let g:airline#extensions#tabline#buffer_nr_show = 1') 143 | end), 144 | }, 145 | { 146 | 'ervandew/supertab', 147 | config = exclude_on_bootstrap(function() 148 | vim.keymap.set('i', '', '', { noremap=true }) 149 | vim.g.SuperTabDefaultCompletionType = "" 150 | end), 151 | }, 152 | { 153 | 'majutsushi/tagbar', 154 | config = exclude_on_bootstrap(function() 155 | snmap('o', ':TagbarToggle') 156 | end), 157 | }, 158 | { 159 | 'nvim-telescope/telescope.nvim', 160 | requires = {{'nvim-lua/plenary.nvim'}}, 161 | config = exclude_on_bootstrap(function() 162 | local builtin = require('telescope.builtin') 163 | vim.keymap.set('n', '', builtin.find_files, {}) 164 | vim.keymap.set('n', '', builtin.buffers, {}) 165 | vim.keymap.set('n', 'ff', builtin.find_files, {}) 166 | vim.keymap.set('n', 'fg', builtin.live_grep, {}) 167 | vim.keymap.set('n', 'fb', builtin.buffers, {}) 168 | vim.keymap.set('n', 'fh', builtin.help_tags, {}) 169 | end), 170 | }, 171 | { 172 | 'neovim/nvim-lspconfig', 173 | config = exclude_on_bootstrap(function() 174 | local lspcfg = { 175 | gopls = { bin='gopls', fmt={'*.go'}, settings={ gopls={ gofumpt=true } } }, 176 | clojure_lsp = { bin='clojure-lsp', fmt={'*.clj'} }, 177 | dockerls = { bin='docker-langserver', fmt={'Dockerfile'} }, 178 | pylsp = { bin='pylsp', fmt={'*.py'} }, 179 | rust_analyzer = { bin='rust-analyzer', fmt={'*.rs'} }, 180 | bashls = { bin='bash-language-server', fmt={} }, 181 | golangci_lint_ls = { bin='golangci-lint-langserver', fmt={} }, 182 | pyright = { bin='pyright', fmt={} }, 183 | yamlls = { bin='yamlls', fmt={} }, 184 | } 185 | local lsp_keymaps = { 186 | { cap='declaration', map='gd', cmd=vim.lsp.buf.declaration }, 187 | { cap='implementation', map='gD', cmd=vim.lsp.buf.implementation }, 188 | { cap='goto_definition', map='', cmd=vim.lsp.buf.definition }, 189 | { cap='type_definition', map='1gD', cmd=vim.lsp.buf.type_definition }, 190 | { cap='hover', map='K', cmd=vim.lsp.buf.hover }, 191 | { cap='signature_help', map='', cmd=vim.lsp.buf.signature_help }, 192 | { cap='find_references', map='gr', cmd=vim.lsp.buf.references }, 193 | { cap='document_symbol', map='g0', cmd=vim.lsp.buf.document_symbol }, 194 | { cap='workspace_symbol', map='gW', cmd=vim.lsp.buf.workspace_symbol }, 195 | } 196 | local custom_lsp_attach = function(client, bufnr) 197 | require('lsp_signature').on_attach { hint_enable = false } 198 | local opts = lspcfg[client.name] 199 | 200 | -- autocomplete 201 | vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') 202 | 203 | -- format on save 204 | vim.api.nvim_create_autocmd({'BufWritePre'}, { 205 | pattern = opts['fmt'], 206 | callback = function(args) vim.lsp.buf.formatting_sync(nil, 1000) end 207 | }) 208 | 209 | -- conditional keymaps 210 | local keymap_opts = { noremap=true, silent=true, buffer=bufnr } 211 | for _, keymap in ipairs(lsp_keymaps) do 212 | if client.server_capabilities[keymap.cap] then 213 | vim.keymap.set('n', keymap.map, keymap.cmd, keymap_opts) 214 | end 215 | end 216 | -- vim.keymap.set('n', 'K', vim.lsp.buf.hover, keymap_opts) 217 | 218 | -- unconditional keymaps 219 | vim.keymap.set('n', 'gl', vim.diagnostic.open_float, keymap_opts) 220 | vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, keymap_opts) 221 | vim.keymap.set('n', ']d', vim.diagnostic.goto_next, keymap_opts) 222 | end 223 | 224 | -- only setup lsp clients for binaries that exist 225 | local lsp = require('lspconfig') 226 | for srv, opts in pairs(lspcfg) do 227 | if vim.fn.executable(opts['bin']) then lsp[srv].setup({ on_attach = custom_lsp_attach, settings=opts['settings'] }) end 228 | end 229 | end), 230 | }, 231 | } 232 | end) 233 | end 234 | 235 | -- bootstrap packer 236 | local packer_install_path = vim.fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim' 237 | if vim.fn.empty(vim.fn.glob(packer_install_path)) > 0 then 238 | vim.fn.system('git clone --depth 1 https://github.com/wbthomason/packer.nvim ' .. packer_install_path) 239 | vim.cmd [[packadd packer.nvim]] 240 | load_packer_config(true) 241 | require('packer').sync() 242 | -- vim.cmd [[autocmd User PackerComplete ++once lua load_packer_config(false)]] 243 | else 244 | load_packer_config(false) 245 | end 246 | -------------------------------------------------------------------------------- /Monokai Soda.itermcolors: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Ansi 0 Color 6 | 7 | Alpha Component 8 | 1 9 | Blue Component 10 | 0.10051459074020386 11 | Color Space 12 | Calibrated 13 | Green Component 14 | 0.10051288455724716 15 | Red Component 16 | 0.10051589459180832 17 | 18 | Ansi 1 Color 19 | 20 | Alpha Component 21 | 1 22 | Blue Component 23 | 0.3728577196598053 24 | Color Space 25 | Calibrated 26 | Green Component 27 | 0.0 28 | Red Component 29 | 0.95683503150939941 30 | 31 | Ansi 10 Color 32 | 33 | Alpha Component 34 | 1 35 | Blue Component 36 | 0.14004382491111755 37 | Color Space 38 | Calibrated 39 | Green Component 40 | 0.87921047210693359 41 | Red Component 42 | 0.59473341703414917 43 | 44 | Ansi 11 Color 45 | 46 | Alpha Component 47 | 1 48 | Blue Component 49 | 0.38154411315917969 50 | Color Space 51 | Calibrated 52 | Green Component 53 | 0.83635991811752319 54 | Red Component 55 | 0.87748134136199951 56 | 57 | Ansi 12 Color 58 | 59 | Alpha Component 60 | 1 61 | Blue Component 62 | 0.99877572059631348 63 | Color Space 64 | Calibrated 65 | Green Component 66 | 0.39599207043647766 67 | Red Component 68 | 0.61468899250030518 69 | 70 | Ansi 13 Color 71 | 72 | Alpha Component 73 | 1 74 | Blue Component 75 | 0.3728577196598053 76 | Color Space 77 | Calibrated 78 | Green Component 79 | 0.0 80 | Red Component 81 | 0.95683503150939941 82 | 83 | Ansi 14 Color 84 | 85 | Alpha Component 86 | 1 87 | Blue Component 88 | 0.92060363292694092 89 | Color Space 90 | Calibrated 91 | Green Component 92 | 0.81977206468582153 93 | Red Component 94 | 0.34416967630386353 95 | 96 | Ansi 15 Color 97 | 98 | Alpha Component 99 | 1 100 | Blue Component 101 | 0.9359474778175354 102 | Color Space 103 | Calibrated 104 | Green Component 105 | 0.96549534797668457 106 | Red Component 107 | 0.96537256240844727 108 | 109 | Ansi 2 Color 110 | 111 | Alpha Component 112 | 1 113 | Blue Component 114 | 0.14004382491111755 115 | Color Space 116 | Calibrated 117 | Green Component 118 | 0.87921047210693359 119 | Red Component 120 | 0.59473341703414917 121 | 122 | Ansi 3 Color 123 | 124 | Alpha Component 125 | 1 126 | Blue Component 127 | 0.099807053804397583 128 | Color Space 129 | Calibrated 130 | Green Component 131 | 0.51805692911148071 132 | Red Component 133 | 0.98094809055328369 134 | 135 | Ansi 4 Color 136 | 137 | Alpha Component 138 | 1 139 | Blue Component 140 | 0.99877572059631348 141 | Color Space 142 | Calibrated 143 | Green Component 144 | 0.39599207043647766 145 | Red Component 146 | 0.61468899250030518 147 | 148 | Ansi 5 Color 149 | 150 | Alpha Component 151 | 1 152 | Blue Component 153 | 0.3728577196598053 154 | Color Space 155 | Calibrated 156 | Green Component 157 | 0.0 158 | Red Component 159 | 0.95683503150939941 160 | 161 | Ansi 6 Color 162 | 163 | Alpha Component 164 | 1 165 | Blue Component 166 | 0.92060363292694092 167 | Color Space 168 | Calibrated 169 | Green Component 170 | 0.81977206468582153 171 | Red Component 172 | 0.34416967630386353 173 | 174 | Ansi 7 Color 175 | 176 | Alpha Component 177 | 1 178 | Blue Component 179 | 0.70993047952651978 180 | Color Space 181 | Calibrated 182 | Green Component 183 | 0.77144092321395874 184 | Red Component 185 | 0.76960963010787964 186 | 187 | Ansi 8 Color 188 | 189 | Alpha Component 190 | 1 191 | Blue Component 192 | 0.29652142524719238 193 | Color Space 194 | Calibrated 195 | Green Component 196 | 0.36959609389305115 197 | Red Component 198 | 0.3829454779624939 199 | 200 | Ansi 9 Color 201 | 202 | Alpha Component 203 | 1 204 | Blue Component 205 | 0.3728577196598053 206 | Color Space 207 | Calibrated 208 | Green Component 209 | 0.0 210 | Red Component 211 | 0.95683503150939941 212 | 213 | Background Color 214 | 215 | Alpha Component 216 | 1 217 | Blue Component 218 | 0.084129750728607178 219 | Color Space 220 | Calibrated 221 | Green Component 222 | 0.084128305315971375 223 | Red Component 224 | 0.084130816161632538 225 | 226 | Badge Color 227 | 228 | Alpha Component 229 | 0.5 230 | Blue Component 231 | 0.0 232 | Color Space 233 | Calibrated 234 | Green Component 235 | 0.0 236 | Red Component 237 | 1 238 | 239 | Bold Color 240 | 241 | Alpha Component 242 | 1 243 | Blue Component 244 | 0.70993047952651978 245 | Color Space 246 | Calibrated 247 | Green Component 248 | 0.77144092321395874 249 | Red Component 250 | 0.76960963010787964 251 | 252 | Cursor Color 253 | 254 | Alpha Component 255 | 1 256 | Blue Component 257 | 0.92647796869277954 258 | Color Space 259 | Calibrated 260 | Green Component 261 | 0.96674919128417969 262 | Red Component 263 | 0.96554505825042725 264 | 265 | Cursor Guide Color 266 | 267 | Alpha Component 268 | 0.25 269 | Blue Component 270 | 1 271 | Color Space 272 | Calibrated 273 | Green Component 274 | 0.9100000262260437 275 | Red Component 276 | 0.64999997615814209 277 | 278 | Cursor Text Color 279 | 280 | Alpha Component 281 | 1 282 | Blue Component 283 | 0.70993047952651978 284 | Color Space 285 | Calibrated 286 | Green Component 287 | 0.77144092321395874 288 | Red Component 289 | 0.76960963010787964 290 | 291 | Foreground Color 292 | 293 | Alpha Component 294 | 1 295 | Blue Component 296 | 0.70993047952651978 297 | Color Space 298 | Calibrated 299 | Green Component 300 | 0.77144092321395874 301 | Red Component 302 | 0.76960963010787964 303 | 304 | Link Color 305 | 306 | Alpha Component 307 | 1 308 | Blue Component 309 | 0.67799997329711914 310 | Color Space 311 | Calibrated 312 | Green Component 313 | 0.27000001072883606 314 | Red Component 315 | 0.023000000044703484 316 | 317 | Selected Text Color 318 | 319 | Alpha Component 320 | 1 321 | Blue Component 322 | 0.70993047952651978 323 | Color Space 324 | Calibrated 325 | Green Component 326 | 0.77144092321395874 327 | Red Component 328 | 0.76960963010787964 329 | 330 | Selection Color 331 | 332 | Alpha Component 333 | 1 334 | Blue Component 335 | 0.20521116256713867 336 | Color Space 337 | Calibrated 338 | Green Component 339 | 0.20520767569541931 340 | Red Component 341 | 0.20521381497383118 342 | 343 | 344 | 345 | --------------------------------------------------------------------------------