Compare commits

..

1 commit

Author SHA1 Message Date
29580c89e5 wip 2021-01-18 17:29:01 -07:00
118 changed files with 1698 additions and 5607 deletions

View file

@ -1 +0,0 @@
home

2
.gitignore vendored
View file

@ -107,5 +107,3 @@ dmypy.json
.pyre/ .pyre/
# End of https://www.gitignore.io/api/python # End of https://www.gitignore.io/api/python
step.log

4
.gitmodules vendored Normal file
View file

@ -0,0 +1,4 @@
[submodule "dotbot"]
path = dotbot
url = https://github.com/anishathalye/dotbot
ignore = dirty

View file

@ -1,29 +1,92 @@
# dotfiles # dotfiles
## 1. set the fqdn:
```bash ```bash
# macos-specific commands $ git clone https://github.com/thermokarst/dotfiles.git ~/.dotfiles
sudo scutil --set HostName $MY_HOSTNAME.local $ cd ~/.dotfiles
sudo scutil --set LocalHostName $MY_HOSTNAME $ git remote rename origin thermokarst
sudo scutil --set ComputerName $MY_HOSTNAME $ git clone https://github.com/chriskempson/base16-shell.git ~/.config/base16-shell
dscacheutil -flushcache $ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
$ ./install
$ sh <(curl -L https://nixos.org/nix/install) --darwin-use-unencrypted-nix-store-volume
$ source ~/.zshrc
$ nix-env -i \
coreutils \
elixir \
ffmpeg \
git \
heroku \
htop \
kakoune \
nodejs \
packer \
reattach-to-user-namespace \
silver-searcher \
sslmate \
tmux \
tree \
vim \
watch \
wget \
xz
$ base16_ashes
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
$ vim +PlugInstall
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
$ sudo sh Miniconda3-latest-MacOSX-x86_64.sh -p /opt/miniconda3 -b
$ sudo conda update conda
$ wget https://raw.githubusercontent.com/qiime2/environment-files/master/latest/staging/qiime2-latest-py36-osx-conda.yml
$ conda env create -n q2dev --file qiime2-latest-py36-osx-conda.yml
$ git clone <some private repo> # this will bootstrap the macos keychain
$ python3 bin/bootstrap_git_repos.py
$ sudo rm ~/Desktop ~/Downloads
$ ln -s ~/desk ~/Desktop
$ ln -s ~/Desktop ~/Downloads
$ chflags hidden ~/Documents ~/Library ~/Movies ~/Music ~/Pictures ~/Public
$ chflags -h hidden ~/Desktop ~/Downloads
$ chflags nohidden desk
``` ```
## 2. reboot ## todos
## 3. install https://typeof.net/Iosevka/ - rework git bootstrap script
- add in neuron install
- cmus won't install
## 4. install `age` private key from password manager into `~/.key.txt` ## manual install/setup
## 5. bootstrap chezmoi: - anonymous pro
- docker
- firefox
- freedom
- iterm2
- postgres.app
- printer drivers
- rust
- slack
- ssh keys
- steermouse
- syncthing
- thunderbird
- virtualbox
- vscode
- wakatime key
- zoom
## optional vscode extensions
```bash ```bash
sh -c "$(curl -fsLS get.chezmoi.io)" -- \ $ code --install-extension AndrsDC.base16-themes
init \ $ code --install-extension ecmel.vscode-html-css
git://pingo.thermokar.st/dotfiles \ $ code --install-extension formulahendry.auto-close-tag
--apply \ $ code --install-extension hollowtree.vue-snippets
--guess-repo-url=false $ code --install-extension JakeBecker.elixir-ls
$ code --install-extension karigari.chat
$ code --install-extension lextudio.restructuredtext
$ code --install-extension ms-python.python
$ code --install-extension ms-vscode.Go
$ code --install-extension ms-vsliveshare.vsliveshare
$ code --install-extension redhat.vscode-yaml
$ code --install-extension vscodevim.vim
$ code --install-extension wakatime.vscode-wakatime
``` ```
## 6. restart shell

View file

@ -0,0 +1,54 @@
import json
import os
import subprocess
from qiime2_projects import PROJECTS as Q2_PROJECTS
from mds_projects import PROJECTS as MDS_PROJECTS
from personal_projects import PROJECTS as PERSONAL_PROJECTS
def fetch_projects(projects, base_fp, remotes):
for org, repos in projects.items():
base_fp = os.path.join('~', 'projects', base_fp)
base_fp = os.path.expanduser(base_fp)
for repo in repos:
print('repo: %s/%s' % (org, repo))
repo_fp = os.path.join(base_fp, repo)
repo_fp = os.path.expanduser(repo_fp)
if not os.path.isdir(repo_fp):
url = 'https://github.com/%s/%s' % (org, repo)
subprocess.run(['git', 'clone', url, repo_fp])
subprocess.run(['git', 'remote', 'rename', 'origin', org],
cwd=repo_fp)
for remote in remotes:
url = 'https://github.com/%s/%s' % (remote, repo)
try:
subprocess.run(['git', 'remote', 'add', remote, url],
cwd=repo_fp, check=True,
capture_output=True)
except subprocess.CalledProcessError as e:
msg = 'remote %s already exists' % (remote, )
if msg not in str(e.stderr):
raise
try:
subprocess.run(['git', 'fetch', remote],
cwd=repo_fp, check=True,
capture_output=True)
except subprocess.CalledProcessError as e:
if url not in str(e.stderr):
raise
else:
subprocess.run(['git', 'remote', 'remove', remote],
cwd=repo_fp)
if __name__ == '__main__':
remotes = ['thermokarst', 'ebolyen', 'gregcaporaso', 'ChrisKeefe',
'Oddant1', 'nbokulich', 'andrewsanchez', 'David-Rod']
fetch_projects(Q2_PROJECTS, 'qiime2', remotes)
fetch_projects(MDS_PROJECTS, 'mds', [])
fetch_projects(PERSONAL_PROJECTS, 'personal', [])

View file

@ -0,0 +1,57 @@
import json
import os
from qiime2_projects import PROJECTS as Q2_PROJECTS
from mds_projects import PROJECTS as MDS_PROJECTS
from personal_projects import PROJECTS as PERSONAL_PROJECTS
def render_vscode_workspace(projects, project_name, output_fp,
include_dotfiles=True, extra_dirs=None):
folders = []
for org, repos in projects.items():
for repo in repos:
fp = os.path.join('~', 'projects', project_name, repo)
fp = os.path.expanduser(fp)
folders.append({'name': repo.lower(),
'path': fp})
if include_dotfiles:
dotfile_fp = os.path.join(os.sep, 'Users', 'matthew', '.dotfiles')
folders.append({'name': 'dotfiles',
'path': dotfile_fp})
if extra_dirs is not None:
for name, path in extra_dirs.items():
fp = os.path.join('~', 'projects', project_name, path)
fp = os.path.expanduser(fp)
folders.append({'name': name,
'path': fp})
with open(output_fp, 'w') as fh:
json.dump({'folders': sorted(folders, key=lambda x: x['name'])},
fh, sort_keys=True, indent=4)
if __name__ == '__main__':
def qws(ws_number: int):
return render_vscode_workspace(
Q2_PROJECTS,
'qiime2',
os.path.join('vscode', 'qiime2-%d.code-workspace' % (ws_number, )),
extra_dirs={'data': 'data'},
)
[qws(i) for i in range(1, 4)]
render_vscode_workspace(
MDS_PROJECTS,
'mds',
os.path.join('vscode', 'mds.code-workspace'),
)
render_vscode_workspace(
PERSONAL_PROJECTS,
'personal',
os.path.join('vscode', 'personal.code-workspace'),
)

10
bin/mds_projects.py Normal file
View file

@ -0,0 +1,10 @@
PROJECTS = {
'thermokarst': [
'ccdb-api',
'ccdb-web',
'tucotuco',
'fathm',
'hibernators',
'hibernators-web',
],
}

5
bin/personal_projects.py Normal file
View file

@ -0,0 +1,5 @@
PROJECTS = {
'thermokarst': [
'elixir-class',
],
}

79
bin/qiime2_projects.py Normal file
View file

@ -0,0 +1,79 @@
PROJECTS = {
'qiime2': [
'Keemei',
'action-library-packaging',
'busywork',
'data302',
'dev-docs',
'discourse-unhandled-tagger',
'docs',
'environment-files',
'library',
'logos',
'paper2',
'q2-alignment',
'q2-composition',
'q2-cutadapt',
'q2-dada2',
'q2-deblur',
'q2-demux',
'q2-diversity',
'q2-diversity-lib',
'q2-emperor',
'q2-feature-classifier',
'q2-feature-table',
'q2-fragment-insertion',
'q2-gneiss',
'q2-longitudinal',
'q2-metadata',
'q2-mystery-stew',
'q2-phylogeny',
'q2-quality-control',
'q2-quality-filter',
'q2-sample-classifier',
'q2-shogun',
'q2-taxa',
'q2-types',
'q2-vsearch',
'q2cli',
'q2cwl',
'q2galaxy',
'q2studio',
'q2templates',
'q2view',
'qiime2',
'qiime2.github.io',
'static-site-infrastructure',
'template-repo',
'view.qiime2.org',
'vm-playbooks',
'workshop-playbooks',
'workshops.qiime2.org',
],
'caporaso-lab': [
'caporaso-lab.github.io',
'pretrained-feature-classifiers',
'q2-phylogenomics',
'genome-sampler',
],
'gregcaporaso': [
'caporaso-lab-secrets',
'qiime2-meta-figures',
],
'biocore': [
'scikit-bio',
'deblur',
],
'thermokarst': [
'q2-no-op',
'busywork2_action_playground',
],
'bioconda': [
'bioconda-recipes',
]
}

View file

@ -1,66 +0,0 @@
# personal
[[workspace]]
path = "$HOME/projects/personal"
ssh_key_path = "$HOME/.ssh/id_ecdsa"
origin.base_addr = "ssh://git@git.thermokar.st/thermokarst"
origin.name = "pingo"
repos = [
"copilot-proxy",
"devlog",
"dsort",
"gitolite-admin",
"gpx-web-utils",
"gwar",
"leaving-hope",
"llm-copilot",
"markdone",
"mini-lsm",
"pingo",
"talent-plan",
"trmnl-report",
]
remotes = []
# personal-dokku
[[workspace]]
path = "$HOME/projects/personal"
ssh_key_path = "$HOME/.ssh/id_ecdsa"
origin.base_addr = "ssh://git@git.thermokar.st/thermokarst"
origin.name = "pingo"
repos = [
"akdillon",
"planner",
# dokku app name is thermokarst, not thermokar.st
"thermokar.st",
"zettel",
]
remotes = [{ name = "dokku", base_addr = "ssh://dokku@pingo.thermokar.st" }]
# mds
[[workspace]]
path = "$HOME/projects/mds"
ssh_key_path = "$HOME/.ssh/id_ecdsa"
origin.base_addr = "ssh://git@git.thermokar.st/thermokarst"
origin.name = "pingo"
repos = [
"arctic_hibernators_schema",
"bactdb",
"bactdb_data",
"ccdb-api",
"ccdb-old",
"ccdb-web",
"drf_ember_pagination",
"hibernators",
"hibernators-web",
"hymenobacterdotinfo",
]
remotes = []
# github-thermokarst-personal
[[workspace]]
path = "$HOME/projects/personal"
ssh_key_path = "$HOME/.ssh/id_ecdsa"
origin.base_addr = "ssh://git@github.com/thermokarst"
origin.name = "thermokarst"
repos = ["thermokarst"]
remotes = []

1
dotbot Submodule

@ -0,0 +1 @@
Subproject commit 5d83f9e797b1950199e127a8196803f5e33e0916

View file

@ -1,23 +1,9 @@
[include]
path = /opt/local/share/git-delta/themes.gitconfig
[user] [user]
name = {{ .name }} name = Matthew Dillon
email = {{ .email_personal }} email = matthewrdillon@gmail.com
[core] [core]
editor = hx editor = vim
pager = delta excludesfile = /Users/matthew/.gitignore_global
[interactive]
diffFilter = delta --color-only
[delta]
features = chameleon
navigate = true
light = false
side-by-side = true
true-color = always
colorMoved = default
syntax-theme = base16
[diff]
colorMoved = default
[color] [color]
diff = auto diff = auto
status = auto status = auto
@ -28,9 +14,12 @@
auto = 1 auto = 1
[merge] [merge]
summary = true summary = true
tool = vimdiff
conflictstyle = diff3 conflictstyle = diff3
prompt = false prompt = false
[alias] [alias]
unstage = reset HEAD
uncommit = reset --soft HEAD^
# http://stackoverflow.com/a/9074343 # http://stackoverflow.com/a/9074343
lg1 = log \ lg1 = log \
--graph \ --graph \
@ -49,21 +38,19 @@
a = add a = add
c = commit --verbose c = commit --verbose
ca = commit -a --verbose ca = commit -a --verbose
m = commit --amend --verbose
d = diff d = diff
dc = diff --cached
s = status -s s = status -s
sw = switch co = checkout
swc = switch -c cob = checkout -b
# list branches sorted by last modified # list branches sorted by last modified
b = "!git for-each-ref --sort='-authordate' --format='%(authordate)%09%(objectname:short)%09%(refname)' refs/heads | sed -e 's-refs/heads/--'" b = "!git for-each-ref --sort='-authordate' --format='%(authordate)%09%(objectname:short)%09%(refname)' refs/heads | sed -e 's-refs/heads/--'"
# list aliases # list aliases
la = "!git config -l | grep alias | cut -c 7-" la = "!git config -l | grep alias | cut -c 7-"
[push]
default = upstream
[credential]
helper = osxkeychain
[pull] [pull]
rebase = true rebase = true
[init]
defaultBranch = main
[includeIf "gitdir:~/Klaviyo/"]
path = ~/.gitconfig-work
[includeIf "gitdir:~/.klaviyocli/"]
path = ~/.gitconfig-work

4
git/gitignore_global Normal file
View file

@ -0,0 +1,4 @@
*~
.DS_Store
.idea
.vscode

View file

@ -1,32 +0,0 @@
{{- $hostname := .chezmoi.hostname -}}
{{- if eq .chezmoi.os "darwin" -}}
{{- $hostname := output "scutil" "--get" "ComputerName" | trim -}}
{{- end -}}
{{- $choices := list "personal" "work" -}}
{{- $hosttype := promptChoiceOnce . "hosttype" "What type of host are you on" $choices -}}
{{ $name := promptString "name" -}}
{{ $email_personal := promptString "email_personal" -}}
{{ $email_work := promptString "email_work" -}}
{{ $github_personal := promptString "github_personal" -}}
{{ $github_work := promptString "github_work" -}}
{{ $task_url := promptString "task_url" -}}
{{ $task_client_id := promptString "task_client_id" -}}
{{ $task_encryption_secret := promptString "task_encryption_secret" -}}
encryption = "age"
[age]
identity = "~/.key.txt"
recipient = "age1yd87u4ae86erpem2tynyl959ppc8a3jt4ztssykytzaklut6uvus5prt2t"
[data]
hostname = {{ $hostname | quote }}
hosttype = {{ $hosttype | quote }}
name = {{ $name | quote }}
email_personal = {{ $email_personal | quote }}
email_work = {{ $email_work | quote }}
github_personal = {{ $github_personal | quote }}
github_work = {{ $github_work | quote }}
task_url = {{ $task_url | quote }}
task_client_id = {{ $task_client_id | quote }}
task_encryption_secret = {{ $task_encryption_secret | quote }}

View file

@ -1,4 +0,0 @@
[".config/zellij/plugins/room.wasm"]
type = "file"
url = "https://github.com/rvcas/room/releases/latest/download/room.wasm"
refreshPeriod = "168h"

View file

@ -1,10 +0,0 @@
{{- if eq .hosttype "work" }}
.zshprivate
{{- end }}
{{- if eq .hosttype "personal" }}
.apprc
.s2a_login
.work_packages
.work_paths
.zshklaviyo
{{- end }}

View file

@ -1,71 +0,0 @@
#!/usr/bin/env bash
if [[ "$1" == "--help" || "$1" == "-h" ]]; then
echo "usage: $0 <repo_name> <branch_name>"
echo "example: $0 k-repo foo-branch1"
exit 0
fi
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
echo "error: invalid number of arguments"
echo "usage: $0 <repo_name> <branch_name>"
echo "run with --help for more information"
exit 1
fi
REPO_NAME="$1"
BRANCH_NAME="$2"
REPO_PATH="$HOME/Klaviyo/Repos/$REPO_NAME"
if [ ! -d "$REPO_PATH" ]; then
echo "error: repository directory does not exist: $REPO_PATH"
exit 1
fi
cd "$REPO_PATH" || exit 1
if [ $# -eq 1 ]; then
echo "no branch name provided. listing github prs..."
PR_LIST=$(gh pr list --limit 300 --json number,title,headRefName \
--template '{{range .}}{{.number}} | {{.title}} |{{.headRefName}}{{"\n"}}{{end}}')
if [ -z "$PR_LIST" ]; then
echo "error: failed to fetch pr list from github"
exit 1
fi
SELECTED_PR=$(echo "$PR_LIST" | fzf --delimiter='|' --with-nth=1,2 --prompt='pick a github pr > ' | awk -F'|' '{print $3}')
if [ -z "$SELECTED_PR" ]; then
echo "no pr selected"
exit 1
fi
BRANCH_NAME="$SELECTED_PR"
fi
# Escape branch name for filesystem use
SAFE_BRANCH_NAME=$(echo "$BRANCH_NAME" | sed 's/\//_/g' | sed 's/+/-/g')
PR_NUMBER=""
if [ -n "$BRANCH_NAME" ]; then
PR_NUMBER=$(echo "$PR_LIST" | grep "|.*$BRANCH_NAME$" | awk -F'|' '{print $1}' | head -1 | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
fi
jj git fetch || exit 1
PARENT_DIR="$HOME/projects/work/reviews/$REPO_NAME"
mkdir -p "$PARENT_DIR" || exit 1
if [ -n "$PR_NUMBER" ]; then
WORKSPACE_DIR="$PARENT_DIR/${PR_NUMBER}_${SAFE_BRANCH_NAME}"
else
WORKSPACE_DIR="$PARENT_DIR/$SAFE_BRANCH_NAME"
fi
jj workspace add "$WORKSPACE_DIR" -r "$BRANCH_NAME@origin" || exit 1
echo "successfully created workspace for $REPO_NAME/$BRANCH_NAME"
prr get "klaviyo/$REPO_NAME/$PR_NUMBER"
echo "cd $WORKSPACE_DIR && prr edit klaviyo/$REPO_NAME/$PR_NUMBER"

View file

@ -1,45 +0,0 @@
#!/usr/bin/env -S uv run --script
import argparse
import ast
import pathlib
def find_definition(fp, line):
symbols = {}
with fp.open() as fh:
tree = ast.parse(fh.read())
for node in ast.walk(tree):
if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef, ast.ClassDef)):
start, end = compute_size(node)
symbols[node.name] = (start, end)
matches = []
for key, (start, end) in symbols.items():
if start <= line <= end:
matches.append(key)
return matches
def compute_size(node):
min_lineno = node.lineno
max_lineno = node.lineno
for node in ast.walk(node):
if hasattr(node, "lineno"):
min_lineno = min(min_lineno, node.lineno)
max_lineno = max(max_lineno, node.lineno)
return (min_lineno, max_lineno + 1)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('filepath', type=pathlib.Path)
parser.add_argument('line', type=int)
args = parser.parse_args()
symbols = find_definition(args.filepath, args.line)
for symbol in symbols:
print(symbol)

View file

@ -1,27 +0,0 @@
#!/usr/bin/env sh
set -e
tmpfile=$(mktemp)
zellij action dump-screen $tmpfile
status_line=$(cat $tmpfile | rg -e "(?:NOR|INS|SEL)\s+[\x{2800}-\x{28FF}]*\s+(\S*)\s[^│]* (\d+):*.*" -o --replace '$1 $2')
filename=$(echo $status_line | awk '{ print $1 }')
escaped_filename=$(echo "$filename" | sed 's/[\/&]/\\&/g')
line_number=$(echo $status_line | awk '{ print $2 }')
extension="${filename##*.}"
case "$extension" in
"py")
# this is pretty pytest-specific, but will probably be fine for the time being
test_runner=${PYTEST:-pytest}
cmd="get_python_function_at_position.py $filename $line_number | pytester.py - | sed 's/^/$test_runner /;s/$/ $escaped_filename/' | sh"
;;
*)
echo "uh oh!"
exit 1
;;
esac
full_cmd="echo \"running $cmd\" && $cmd"
zellij action new-pane --direction down -- zsh -c "$full_cmd"

View file

@ -1,35 +0,0 @@
#!/usr/bin/env -S uv run --script
import argparse
import os
import pathlib
import sys
def main():
parser = argparse.ArgumentParser()
parser.add_argument('symbols', type=argparse.FileType('r'))
args = parser.parse_args()
symbols = args.symbols.read()
try:
symbols = symbols.strip()
symbols = symbols.split("\n")
expressions = " and ".join(symbols)
if expressions:
print(f"-k \"{expressions}\"")
else:
print("")
finally:
args.symbols.close()
if __name__ == "__main__":
try:
main()
sys.stdout.flush()
except BrokenPipeError:
devnull = os.open(os.devnull, os.O_WRONLY)
os.dup2(devnull, sys.stdout.fileno())
sys.exit(1)

View file

@ -1,18 +0,0 @@
cache-prompts: true
gitignore: false
auto-commits: false
watch-files: true
subtree-only: true
stream: false
show-model-warnings: false
code-theme: "lightbulb"
user-input-color: "#a6e3a1"
tool-output-color: "#89b4fa"
tool-error-color: "#f38ba8"
tool-warning-color: "#fab387"
assistant-output-color: "#cba6f7"
completion-menu-color: "#cdd6f4"
completion-menu-bg-color: "#313244"
completion-menu-current-color: "#f9e2af"
completion-menu-current-bg-color: "#45475a"

View file

@ -1,5 +0,0 @@
[user]
email = {{ .email_work }}
[core]
sshCommand = "ssh -i ~/.ssh/id_rsa_work"

View file

@ -1,66 +0,0 @@
#!/usr/bin/env bash
REPO_PATH="$1"
REMOTE_NAME="$2"
COMMIT_MESSAGE_TEMPLATE="$3"
cd "$REPO_PATH" || {
echo "Error: Cannot access repository at $REPO_PATH"
exit 1
}
if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo "Error: Not a git repository"
exit 1
fi
sync_repo() {
echo "Starting git sync for $(pwd)"
# Check if there are any changes to commit
if [[ -n $(git status --porcelain) ]]; then
echo "Changes detected, committing..."
COMMIT_MESSAGE=$(eval echo "\"$COMMIT_MESSAGE_TEMPLATE\"")
git add .
git commit -m "$COMMIT_MESSAGE"
if [[ $? -eq 0 ]]; then
echo "Changes committed successfully"
else
echo "Error committing changes"
return 1
fi
else
echo "No changes to commit"
fi
# Fetch and pull from remote
echo "Fetching from remote..."
git fetch "$REMOTE_NAME"
if [[ $? -eq 0 ]]; then
echo "Pulling changes..."
git pull "$REMOTE_NAME" $(git branch --show-current) --rebase
if [[ $? -eq 0 ]]; then
echo "Pull completed successfully"
else
echo "Error during pull"
return 1
fi
else
echo "Error fetching from remote"
return 1
fi
# Push to remote
echo "Pushing to remote..."
git push "$REMOTE_NAME" $(git branch --show-current)
if [[ $? -eq 0 ]]; then
echo "Push completed successfully"
else
echo "Error during push"
return 1
fi
echo "Git sync completed successfully"
}
sync_repo

View file

@ -1,156 +0,0 @@
local preloadView = hs.webview.new({x=0, y=0, w=10, h=10}):html("<html></html>")
preloadView:hide()
hs.timer.doAfter(2, function() preloadView:delete() end) -- delete after 2 seconds
local GitSync = {}
GitSync.config = {
repoPath = "{{ .chezmoi.homeDir }}/notebook",
remoteName = "pingo",
syncInterval = 60,
commitMessage = "Auto-sync: $(date +\"%Y-%m-%d %H:%M:%S\") from $(hostname)"
}
GitSync.scriptPath = os.getenv("HOME") .. "/.hammerspoon/git-sync.sh"
GitSync.timer = nil
GitSync.caffeineWatcher = nil
function GitSync.runSync(reason)
reason = reason or "periodic"
print("Git sync triggered: " .. reason)
local task = hs.task.new(GitSync.scriptPath, function(exitCode, stdOut, stdErr)
if exitCode == 0 then
print("Git sync completed successfully (" .. reason .. ")")
if stdOut and stdOut ~= "" then
print("Output: " .. stdOut)
end
else
print("Git sync failed (" .. reason .. ") with exit code: " .. exitCode)
if stdErr and stdErr ~= "" then
print("Error: " .. stdErr)
end
end
end, {
GitSync.config.repoPath,
GitSync.config.remoteName,
GitSync.config.commitMessage
})
task:start()
end
function GitSync.startPeriodicSync()
if GitSync.timer then
GitSync.timer:stop()
end
GitSync.timer = hs.timer.doEvery(GitSync.config.syncInterval, function()
GitSync.runSync("periodic")
end)
print("Git periodic sync started (interval: " .. GitSync.config.syncInterval .. " seconds)")
end
function GitSync.stopPeriodicSync()
if GitSync.timer then
GitSync.timer:stop()
GitSync.timer = nil
print("Git periodic sync stopped")
end
end
function GitSync.handlePowerEvent(eventType)
if eventType == hs.caffeinate.watcher.systemWillSleep then
print("System going to sleep, running git sync...")
GitSync.runSync("pre-sleep")
elseif eventType == hs.caffeinate.watcher.systemDidWake then
print("System woke up, running git sync...")
-- Add a small delay to ensure network is available
hs.timer.doAfter(5, function()
GitSync.runSync("post-wake")
end)
end
end
function GitSync.startPowerEventMonitoring()
GitSync.caffeineWatcher = hs.caffeinate.watcher.new(GitSync.handlePowerEvent)
GitSync.caffeineWatcher:start()
print("Git power event monitoring started")
end
function GitSync.stopPowerEventMonitoring()
if GitSync.caffeineWatcher then
GitSync.caffeineWatcher:stop()
GitSync.caffeineWatcher = nil
print("Git power event monitoring stopped")
end
end
function GitSync.start()
GitSync.startPeriodicSync()
GitSync.startPowerEventMonitoring()
GitSync.runSync("initial")
print("Git auto-sync initialized")
print("Repository: " .. GitSync.config.repoPath)
print("Remote: " .. GitSync.config.remoteName)
print("Sync interval: " .. GitSync.config.syncInterval .. " seconds")
end
function GitSync.stop()
GitSync.stopPeriodicSync()
GitSync.stopPowerEventMonitoring()
print("Git auto-sync stopped")
end
GitSync.start()
if hs.menubar then
GitSync.menubar = hs.menubar.new()
GitSync.menubar:setTitle("🦖")
GitSync.menubar:setTooltip("Git Auto-Sync")
GitSync.menubar:setMenu({
{ title = "Sync Now", fn = function() GitSync.runSync("manual") end },
{ title = "Start Auto-Sync", fn = GitSync.start },
{ title = "Stop Auto-Sync", fn = GitSync.stop },
{ title = "-" },
{ title = "Repository: " .. GitSync.config.repoPath, disabled = true }
})
end
-- Make GitSync available globally for console access
_G.GitSync = GitSync
local filePath = "/Users/matthew.dillon/notebook/inbox.md"
hs.hotkey.bind({"cmd", "shift"}, "J", function()
local button, text = hs.dialog.textPrompt(
"Add To-Do",
"Enter your tasks (one per line):",
"",
"OK",
"Cancel"
)
if button == "OK" and text ~= "" then
-- Split input into lines
local lines = {}
for line in text:gmatch("[^\r\n]+") do
table.insert(lines, "- [ ] " .. line)
end
-- Concatenate lines with newlines
local formatted = table.concat(lines, "\n") .. "\n"
-- Append to file
local file = io.open(filePath, "a")
if file then
file:write(formatted)
file:close()
hs.alert.show("Tasks added!")
else
hs.alert.show("Failed to open file.")
end
end
end)

View file

@ -1,14 +0,0 @@
#!/usr/bin/env bash
###############################################################################
# .nbrc
#
# Configuration file for `nb`, a command line note-taking, bookmarking,
# and knowledge base application with encryption, search, Git-backed syncing,
# and more in a single portable script.
#
# Edit this file manually or manage settings using the `nb settings`
# subcommand. Configuration options are set as environment variables, eg:
# export NB_ENCRYPTION_TOOL=gpg
#
# https://github.com/xwmx/nb
###############################################################################

View file

View file

@ -1 +0,0 @@
--glob=!.git/*

View file

@ -1,5 +0,0 @@
# {{ .name }}
# {{ .email_personal }}
# Added by OrbStack: command-line tools and integration
source ~/.orbstack/shell/init.zsh 2>/dev/null || :

View file

@ -1,102 +0,0 @@
# Remove older command from the history if a duplicate is to be added.
setopt HIST_IGNORE_ALL_DUPS
# Set editor default keymap to emacs (`-e`) or vi (`-v`)
bindkey -v
# Remove path separator from WORDCHARS.
WORDCHARS=${WORDCHARS//[\/]}
# Disable automatic widget re-binding on each precmd. This can be set when
# zsh-users/zsh-autosuggestions is the last module in your ~/.zimrc.
ZSH_AUTOSUGGEST_MANUAL_REBIND=1
# Set what highlighters will be used.
# See https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets)
ZIM_HOME=${ZDOTDIR:-${HOME}}/.zim
# Download zimfw plugin manager if missing.
if [[ ! -e ${ZIM_HOME}/zimfw.zsh ]]; then
if (( ${+commands[curl]} )); then
curl -fsSL --create-dirs -o ${ZIM_HOME}/zimfw.zsh \
https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
else
mkdir -p ${ZIM_HOME} && wget -nv -O ${ZIM_HOME}/zimfw.zsh \
https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
fi
fi
# Install missing modules, and update ${ZIM_HOME}/init.zsh if missing or outdated.
if [[ ! ${ZIM_HOME}/init.zsh -nt ${ZDOTDIR:-${HOME}}/.zimrc ]]; then
source ${ZIM_HOME}/zimfw.zsh init -q
fi
# Initialize modules.
source ${ZIM_HOME}/init.zsh
# zsh-history-substring-search
zmodload -F zsh/terminfo +p:terminfo
# Bind ^[[A/^[[B manually so up/down works both before and after zle-line-init
for key ('^[[A' '^P' ${terminfo[kcuu1]}) bindkey ${key} history-substring-search-up
for key ('^[[B' '^N' ${terminfo[kcud1]}) bindkey ${key} history-substring-search-down
for key ('k') bindkey -M vicmd ${key} history-substring-search-up
for key ('j') bindkey -M vicmd ${key} history-substring-search-down
unset key
srcs=(
"/opt/miniforge3/etc/profile.d/conda.sh"
"/opt/miniforge3/etc/profile.d/mamba.sh"
"$HOME/.cargo/env"
"$HOME/.zshklaviyo"
"$HOME/.zshprivate"
)
for fp in $srcs; do
if [[ -s "$fp" ]]; then
source "$fp"
fi
done
alias devlog="cd ~/projects/personal/devlog && hx logs/$(date '+%Y-%m-%d').gmi && cd -"
eval "$(/opt/homebrew/bin/brew shellenv)"
eval "$(direnv hook zsh)"
eval "$(jj util completion zsh)"
export NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"
function reldate() {
date -v "${1}" "+%Y-%m-%d"
}
[ "$TERM" = "xterm-kitty" ] && alias ssh="TERM=xterm ssh"
alias strip_jira="sed 's/\[\{0,1\}[a-zA-Z]*-[0-9]*\]\{0,1\}//g'"
export FZF_DEFAULT_OPTS=" \
--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 \
--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \
--color=marker:#b4befe,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8 \
--color=selected-bg:#45475a \
--color=border:#313244,label:#cdd6f4"
find_note() {
if [ -z "$1" ]; then
echo "error: no substring provided. usage: note_search <substring>"
return 1
fi
cd ~/notebook || {
echo "error: directory '~/notebook' does not exist."
return 1
}
git log --oneline -G"$1"
}
alias aider-gh="aider --openai-api-base $GH_OPENAI_BASE_URL --openai-api-key $GH_OPENAI_API_KEY --model $GH_OPENAI_MODEL --no-git"
alias aider-lms="aider --openai-api-base $LMS_OPENAI_BASE_URL --openai-api-key $LMS_OPENAI_API_KEY --model openai/$LMS_OPENAI_MODEL --no-git"

View file

@ -1,11 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYcS9JQTB5TkZGVTlFVEkx
T0pkZWtQeVA0OGJGcTJCTi9zK2o5VkNVQ3dnClFQdWVuWUpwOStuZTNqQ0N1dm9z
aUJsMktNd1N6MDhaN1RlYmZ1YVAwSE0KLS0tIElubG8wNVlOUXYzdTBieGpYRGFQ
RFhHSTM2Yit0WWVRVXpWcUhDVlU3a2sKwiBHRNxbfp6imiMrKPiBmSmq7W8qZOTY
dY6gANHwmwYahtVAFjLMySiTiheRCNqMRbkII8sbOZRvE0Nx7BneE2enHc+gX5kJ
PnOjbqmAYtR58FBhX3aL578cxkdMmEJC+lT4189ywPhWsuZb2j9ysbyNT4WwYcdk
NjY58Tpt/v5kDb5Roj6eMfoQiR3lBJEbPeP7QI9VlJNa1vP242bK7gYWLKMsTB4Q
pbdF+3dJ58khvCpdw3gNz11tBCE+qKeiPwQSj1ghPzeNOOM4fpPftdU8HPDWNMWh
qNJtqwwZl6FLCw==
-----END AGE ENCRYPTED FILE-----

View file

@ -1,10 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLVVd1WlkyUitSUWdFSzBG
ZnJWc3pYZmVGSzBxKzhRcmpnSGVjSnZVdUdZCmFDOHcySkhtVXd4L2tuaERDRjRq
UzBvY1h5cmhQM09JTzZpTEVJQVcyWDgKLS0tIE9pYm9CUzRFdjh4NkN3eWEvUE9V
KzZyUm1qMVA5Tm54c1UzZTdROW5qakUKBuIeMGy+Jff9ZUueA8j7zSu1M0LVYTHH
udpQLQIJXMS/UGRSWimfIn9jdRv1wrovPYE/hQJCLcuL3cf5iejZAmmKj/+3ODF0
cS4RAO/t8W2GFCXvoc2fiiqN6lu5Cq79aLMu7W5CtgOLB2nbov+WgapZ4T/5gogX
n7Ks/+M13urAphxvdBegNkDOLz7bkF0JJ8v3HcHS9JPZ9WkpOF4nBGycwdnYFplU
ws0nrpLwFg6QEmScqxtyh8G2ZXQgd+P3m3M68jtQkD6nK2Q=
-----END AGE ENCRYPTED FILE-----

View file

@ -1,9 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0R1ZRL1VJVW5URzZoZXJC
Wm1XcjVzeE5rdXBVVFJ4RmpVS3FqVE5LRmtjCjVia29aeklXUkRWWWpKY2hGRlJh
cWlRTlIyNlZqbUNoTmhaNzFoOWc2czQKLS0tIDUwTFJZVlcxVjRzOVV0QUJBdEZV
Mm5SamhSYlgvZUgxd1NlcFhRd2R3MDgKHuVfpKp1BQBx1xXur5x8N8Ohli0rYY6+
MmmKTDdYvuZKDqGrI+EpQw0yywLyUgeWfDUx5OSx1Z9PKMAU1+KYGAWB0WLYXafT
51UZSNj835YVZUChLKwLhthKg8KTl6h4FxE4K/88iHVOlRyVhuUAkZfGlGpL21uC
XgKaOnt/i5IFeGj459sR0io2m0sjCcZJA/3F1SBkVch3Lw1Xx4GrPmKq
-----END AGE ENCRYPTED FILE-----

View file

@ -1,7 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByV0J4aGFoR3hDSTJvNVp2
a1F1NzJmaERoYWwycStJeC9OS0tLaUp0aXpvCjhndzJrQmhRaWo4STRzdWtYTE94
Y0V4UHJ5UHlwaXZJOVJXSjdhMktvUWcKLS0tIDRtUHptRjYzT0RHQVJxT2RBbXNa
OUwxak52ZVhQL2psSUlpRVhHdzUxZjgKtcrEfrCDzTmLFhPNcnJ/PBMoiIxF0KAE
B2lhLyJ6+0OVTHMM6byVr+JnjnIXoA35537EUkQZ+A==
-----END AGE ENCRYPTED FILE-----

View file

@ -1,67 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlSFJxTjdaZStDRGxoeXEy
amlOaHFRTmI1bjBjOUx6Vk1VMWo5ODNkZUdZCk1oM2xPMlBUSVdBZXEzeVBnMzFj
Mk42NWt3cUZPUXlGWmNiOGtvbk1BZDgKLS0tIDhqZ0EweFRsVFhWSFBVdmZrWE5k
RVR0WGN1OTZ0am9oVG1Td3hxcHFiMjgKFzZjypPZvbFLr/Qlg/CwGa9KjexiSIlM
Gc//hlkuXXaOh8QLMSauH9EPsNyWBqewBeXYgD3TwK4jf5yOA1DOKtfeHCmn+8D6
MBfoBeftnW2r0MWiROWv15dHUKE5FHLp5y7+YNaC5YfhTLR7POiME1TINj+un4kX
452dDvpqBS2jkxbPqRkqHYWquFMoiaPckXLyuH9Ya4RiM+JPxKdGAPXVxs7fwP9e
CzUGPr4YvwpNyVDQQgexGkwjJNoPEn0WLR5jOt4H8KLzhTlfrNT8YrUVg6igwCRb
INx2y339cCPJWb8FHcNYeWidQI7y7aP06q3/C5jU5Jz7YMG0cI+ISTXiTO60aFPv
Q3DXWTpCcSnHZ5p/Pwh7Oed10Y8YUHUyhi5b3Zk2VipAJ0IABjZgoEWqh03/47hD
/vK8tH5SMmNuHTN6610ho1kF4kDymOVGW6bPdSs4BnI8hqdKcx114M6BlW2gmlTf
ekXgGdE53iTecIE3iZe6M82KTVelLOdamwRDkQfr3xHMp3Pi7lB5toTzqtSQG241
9weWKYRGVlXsxmlXFNQY69JLLhNYzdRtn0KBVy3dMzu7BfMx8hreE3ImgrRS6AB0
qkoVuRvyAn8yYKhUPXDWVxhj0qjdo1fE4bXfG46YpwdFGh3t88BEZnpEqYHBFSi4
O+RrY7Icsj9FfVTEZ+n0uE+yg3SjYtYqjfCUKTw+AZ81JFJYpzIxciNo9yFRlooR
psbRJHu6KzSCATEoeMSnv7rOF75aihp0VbDszn+TPDeB1oMNByQaZ/7PNUcKP93a
Z38tk24Baw0G51/MF/px1R9wiw6oiUYGmqDCJOJm8jzISnAqgUvhj8/37FELQgl0
2hU0Kjl294rME314bJabwLwwXwf2YElwu2WPXHaUrzQIl9UhLGi45SuUxaAH+QKr
euJ+8nE8DUWo3jhvhLH4o5oHGNkQeG+5r/r8EEClF/4DU/xky1bibLeW2Jl/1qVD
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
3b6Y9MYJ6Rra+HuQpAOdba/ABA==
-----END AGE ENCRYPTED FILE-----

View file

@ -1,9 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaTUNxWEJoK1FsdzZma3Bv
N0ExZjl0L0wyME5SNFFLeWlwTmQxKzBhYzNnClJpcVljQ2tVQVE5V0dWM3pVM0l6
L25aNyszbUpJdkQ4U3BiMzJqZG1VMUkKLS0tIG1hU2F3T3JwWVlocDBaTytVSEhS
eGFRdS83K3Z5Q1k5SjZKaklGeFNzTVEKSfDagViJt1sc8+MBK7wuAFUzuOhTEeR/
n1npKF9k7EJ7zGlstQrIANUk6/k1ArIhJHCJizrMX1QqRAEsUKKZ+J/ckdD1uBEE
/GIPBwb43l01Yj162XLzT9+zjHL2E8BDRwQDHYd/xjgQTUHGrgpc2zHzWOzkIOf+
ASAe+lix9By7mfkiRA==
-----END AGE ENCRYPTED FILE-----

View file

@ -1,17 +0,0 @@
- model_id: copilot-gpt-4.1
model_name: gpt-4.1
api_base: "https://api.githubcopilot.com"
api_key_name: copilot
supports_tools: true
- model_id: copilot-gpt-4o
model_name: gpt-4o
api_base: "https://api.githubcopilot.com"
api_key_name: copilot
supports_tools: true
- model_id: lms-qwen3-coder-30b
model_name: qwen/qwen3-coder-30b
api_base: "http://localhost:1234/v1"
api_key_name: copilot
supports_tools: true

View file

@ -1 +0,0 @@
--theme="Catppuccin Mocha"

File diff suppressed because it is too large Load diff

View file

@ -1,7 +0,0 @@
*~
.DS_Store
.idea
.vscode
.envrc
.aider*
**/.claude/settings.local.json

View file

@ -1,14 +0,0 @@
theme = "catppuccin_mocha"
[editor]
true-color = true
insert-final-newline = false
[editor.file-picker]
hidden = false
[keys.normal.space.m]
r = ":reload-all"
s = ":toggle-option soft-wrap.enable"
t = ":sh run_test_under_cursor"
y = ":sh zellij run -c -f -x 5% -y 5% --width 90% --height 90% -- bash ~/.config/helix/yazi-picker.sh open"

View file

@ -1,132 +0,0 @@
[language-server.lsp-ai]
command = "lsp-ai"
[language-server.lsp-ai.config.memory]
file_store = { }
[language-server.lsp-ai.config.models.model1]
type = "open_ai"
chat_endpoint = "http://localhost:1234/v1/chat/completions"
completions_endpoint = "http://localhost:1234/v1/completions"
model = "mistralai/devstral-small-2507"
auth_token = "foo"
[language-server.lsp-ai.config.completion]
model = "model1"
[language-server.lsp-ai.config.completion.parameters]
max_tokens = 64
max_context = 1024
[[language-server.lsp-ai.config.chat]]
trigger = "!C"
action_display_name = "Chat"
model = "model1"
[language-server.lsp-ai.config.chat.parameters]
max_context = 4096
max_tokens = 1024
system = "You are a code assistant chatbot. The user will ask you for assistance coding and you will do you best to answer succinctly and accurately"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "system"
content = "Instructions:\n- You are an AI programming assistant.\n- Given a piece of code with the cursor location marked by \"<CURSOR>\", replace \"<CURSOR>\" with the correct code or comment.\n- First, think step-by-step.\n- Describe your plan for what to build in pseudocode, written out in great detail.\n- Then output the code replacing the \"<CURSOR>\"\n- Ensure that your completion fits within the language context of the provided code snippet (e.g., Python, JavaScript, Rust).\n\nRules:\n- Only respond with code or comments.\n- Only replace \"<CURSOR>\"; do not include any previously written code.\n- Never include \"<CURSOR>\" in your response\n- If the cursor is within a comment, complete the comment meaningfully.\n- Handle ambiguous cases by providing the most contextually appropriate completion.\n- Be consistent with your responses."
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "user"
content = "def greet(name):\n print(f\"Hello, {<CURSOR>}\")"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "assistant"
content = "name"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "user"
content = "function sum(a, b) {\n return a + <CURSOR>;\n}"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "assistant"
content = "b"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "user"
content = "fn multiply(a: i32, b: i32) -> i32 {\n a * <CURSOR>\n}"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "assistant"
content = "b"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "user"
content = "# <CURSOR>\ndef add(a, b):\n return a + b"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "assistant"
content = "Adds two numbers"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "user"
content = "# This function checks if a number is even\n<CURSOR>"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "assistant"
content = "def is_even(n):\n return n % 2 == 0"
[[language-server.lsp-ai.config.completion.parameters.messages]]
role = "user"
content = "{CODE}"
[[language]]
name = "rust"
language-servers = ["rust-analyzer", "lsp-ai"]
[language-server.rust-analyzer.config.check]
command = "clippy"
[language-server.pyright]
command = "pyright-langserver"
args = ["--stdio"]
config = {}
[[language]]
name = "python"
language-servers = ["pyright", "lsp-ai"]
[language-server.roc-ls]
command = "roc_language_server"
[[language]]
name = "roc"
scope = "source.roc"
injection-regex = "roc"
file-types = ["roc"]
shebangs = ["roc"]
roots = []
comment-token = "#"
language-servers = ["roc-ls", "lsp-ai"]
indent = { tab-width = 2, unit = " " }
auto-format = true
formatter = { command = "roc", args =[ "format", "--stdin", "--stdout"]}
[language.auto-pairs]
'(' = ')'
'{' = '}'
'[' = ']'
'"' = '"'
[[grammar]]
name = "roc"
source = { git = "https://github.com/faldor20/tree-sitter-roc.git", rev = "ef46edd0c03ea30a22f7e92bc68628fb7231dc8a" }
[[language]]
name = "go"
roots = ["go.work", "go.mod"]
auto-format = true
formatter = ["gofmt"]
comment-token = "//"
language-servers = ["gopls", "lsp-ai"]
[[language]]
name = "markdown"
language-servers = ["marksman", "lsp-ai"]

View file

@ -1,12 +0,0 @@
#!/usr/bin/env bash
paths=$(yazi --chooser-file=/dev/stdout | while read -r; do printf "%q " "$REPLY"; done)
if [[ -n "$paths" ]]; then
zellij action toggle-floating-panes
zellij action write 27 # send <Escape> key
zellij action write-chars ":$1 $paths"
zellij action write 13 # send <Enter> key
else
zellij action toggle-floating-panes
fi

View file

@ -1,33 +0,0 @@
[user]
name = {{ .name | quote }}
email = {{ .email_personal | quote }}
[git]
private-commits = "description(glob:'private:*') | bookmarks('merge')"
[templates]
git_push_bookmark = '"{{ .github_personal }}_jj_" ++ change_id.short()'
[colors]
"diff removed token" = { fg = "red", underline = false }
"diff added token" = { fg = "green", underline = false }
[revset-aliases]
"immutable_heads()" = "builtin_immutable_heads() | (trunk().. & ~mine())"
[aliases]
l = ["log", "-r", "(trunk()..@):: | (trunk()..@)-"]
refresh = ["rebase", "-s", "roots(trunk()..@)", "-d", "trunk()"]
insert = ["rebase", "-r", "@", "--before", "merge", "--after", "trunk()"]
bdiff = ["diff", "-r", "(trunk()..@)::"]
[ui]
default-command = ["log"]
diff-formatter = ":git"
[[--scope]]
--when.repositories = ["~/Klaviyo", "~/.klaviyocli"]
[--scope.user]
email = {{ .email_work | quote }}
[--scope.templates]
git_push_bookmark = '"2025_{{ .github_work }}_jj_" ++ change_id.short()'

View file

@ -1,80 +0,0 @@
font_family Iosevka Term Extralight
font_size 14.0
shell .
clipboard_control write-clipboard write-primary no-append
macos_option_as_alt yes
# Bell
enable_audio_bell no
visual_bell_duration 0.5
# The basic colors
foreground #cdd6f4
background #1e1e2e
selection_foreground #1e1e2e
selection_background #f5e0dc
# Cursor colors
cursor #f5e0dc
cursor_text_color #1e1e2e
# URL underline color when hovering with mouse
url_color #f5e0dc
# Kitty window border colors
active_border_color #b4befe
inactive_border_color #6c7086
bell_border_color #f9e2af
# OS Window titlebar colors
wayland_titlebar_color system
macos_titlebar_color system
# Tab bar colors
active_tab_foreground #11111b
active_tab_background #cba6f7
inactive_tab_foreground #cdd6f4
inactive_tab_background #181825
tab_bar_background #11111b
# Colors for marks (marked text in the terminal)
mark1_foreground #1e1e2e
mark1_background #b4befe
mark2_foreground #1e1e2e
mark2_background #cba6f7
mark3_foreground #1e1e2e
mark3_background #74c7ec
# The 16 terminal colors
# black
color0 #45475a
color8 #585b70
# red
color1 #f38ba8
color9 #f38ba8
# green
color2 #a6e3a1
color10 #a6e3a1
# yellow
color3 #f9e2af
color11 #f9e2af
# blue
color4 #89b4fa
color12 #89b4fa
# magenta
color5 #f5c2e7
color13 #f5c2e7
# cyan
color6 #94e2d5
color14 #94e2d5
# white
color7 #bac2de
color15 #a6adc8

View file

@ -1,14 +0,0 @@
[
{
"name": "default",
"path": "/Users/matthew.dillon/notebook/tracker.klg"
},
{
"name": "tracker",
"path": "/Users/matthew.dillon/notebook/tracker.klg"
},
{
"name": "agenda",
"path": "/Users/matthew.dillon/notebook/agenda.klg"
}
]

View file

@ -1,5 +0,0 @@
{
"diagnostics.globals": [
"vim"
]
}

View file

@ -1,20 +0,0 @@
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
-- order matters here!
require("vim-options")
require("lazy").setup("plugins")

View file

@ -1,25 +0,0 @@
return {
"yetone/avante.nvim",
opts = {
provider = "copilot",
},
dependencies = {
{
"zbirenbaum/copilot.lua",
config = function()
require("copilot").setup({
copilot_node_command = vim.fn.expand("$HOME") .. "/.nvm/versions/node/v22.14.0/bin/node",
suggestion = { enabled = false },
panel = { enabled = false },
})
end,
},
{
"MeanderingProgrammer/render-markdown.nvim",
opts = {
file_types = { "markdown", "Avante" },
},
ft = { "markdown", "Avante" },
},
},
}

View file

@ -1,9 +0,0 @@
return {
"catppuccin/nvim",
lazy = false,
name = "catppuccin",
priority = 1000,
config = function()
vim.cmd.colorscheme("catppuccin")
end,
}

View file

@ -1,38 +0,0 @@
return {
{
"hrsh7th/cmp-nvim-lsp",
},
{
"zbirenbaum/copilot-cmp",
config = function()
require("copilot_cmp").setup()
end,
},
{
"hrsh7th/nvim-cmp",
config = function()
local cmp = require("cmp")
cmp.setup({
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" },
}, {
{ name = "buffer" },
}, {
{ name = "copilot" },
}),
})
end,
},
}

View file

@ -1,49 +0,0 @@
return {
{
"williamboman/mason.nvim",
config = function()
require("mason").setup()
end,
},
{
"williamboman/mason-lspconfig.nvim",
config = function()
require("mason-lspconfig").setup({
ensure_installed = { "lua_ls", "marksman", "rust_analyzer", "pyright" },
})
end,
},
{
"neovim/nvim-lspconfig",
config = function()
local capabilities = require("cmp_nvim_lsp").default_capabilities()
local lspconfig = require("lspconfig")
-- lua
lspconfig.lua_ls.setup({
capabilities = capabilities,
})
-- markdown
lspconfig.marksman.setup({
capabilities = capabilities,
})
-- rust
lspconfig.rust_analyzer.setup({
capabilities = capabilities,
})
-- python
lspconfig.pyright.setup({
capabilities = capabilities,
})
vim.keymap.set("n", "K", vim.lsp.buf.hover, {})
vim.keymap.set("n", "gd", vim.lsp.buf.definition, {})
vim.keymap.set({ "n", "v" }, "<leader>c", "", { desc = "+code" })
vim.keymap.set({ "n", "v" }, "<leader>ca", vim.lsp.buf.code_action, { desc = "action" })
vim.keymap.set({ "n", "v" }, "<leader>cr", vim.lsp.buf.rename, { desc = "rename" })
end,
},
}

View file

@ -1,6 +0,0 @@
return {
"nvim-lualine/lualine.nvim",
config = function()
require("lualine").setup()
end,
}

View file

@ -1,12 +0,0 @@
return {
"nvim-neo-tree/neo-tree.nvim",
branch = "v3.x",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons",
"MunifTanjim/nui.nvim",
},
config = function()
vim.keymap.set("n", "<leader>e", ":Neotree toggle<CR>", { desc = "toggle file tree" })
end,
}

View file

@ -1,14 +0,0 @@
return {
"nvimtools/none-ls.nvim",
config = function()
local null_ls = require("null-ls")
null_ls.setup({
sources = {
null_ls.builtins.formatting.stylua,
},
})
vim.keymap.set("n", "<leader>cf", vim.lsp.buf.format, { desc = "format" })
end,
}

View file

@ -1,39 +0,0 @@
return {
{
"nvim-telescope/telescope.nvim",
tag = "0.1.8",
dependencies = { "nvim-lua/plenary.nvim" },
config = function()
local builtin = require("telescope.builtin")
vim.keymap.set("n", "<leader>f", builtin.find_files, { desc = "find files" })
vim.keymap.set("n", "<leader>b", builtin.buffers, { desc = "find buffers" })
vim.keymap.set("n", "<leader>/", builtin.live_grep, { desc = "live grep" })
vim.keymap.set("n", "<leader>j", builtin.jumplist, { desc = "jumplist" })
local actions = require("telescope.actions")
require("telescope").setup({
defaults = {
mappings = {
i = {
["<esc>"] = actions.close,
},
},
},
})
end,
},
{
"nvim-telescope/telescope-ui-select.nvim",
config = function()
require("telescope").setup({
extensions = {
["ui-select"] = {
require("telescope.themes").get_dropdown({}),
},
},
})
require("telescope").load_extension("ui-select")
end,
},
}

View file

@ -1,56 +0,0 @@
return {
{
"nvim-neotest/neotest",
dependencies = {
"nvim-neotest/nvim-nio",
"nvim-lua/plenary.nvim",
"antoinemadec/FixCursorHold.nvim",
"nvim-treesitter/nvim-treesitter",
},
config = function()
require("neotest").setup({
adapters = {
require("neotest-python"),
require("rustaceanvim.neotest"),
},
})
vim.keymap.set({ "n", "v" }, "<leader>t", "", { desc = "+testing" })
vim.keymap.set({ "n", "v" }, "<leader>tt", function()
require("neotest").run.run(vim.fn.expand("%"))
end, { desc = "run file" })
vim.keymap.set({ "n", "v" }, "<leader>tT", function()
require("neotest").run.run(vim.uv.cwd())
end, { desc = "run all test files" })
vim.keymap.set({ "n", "v" }, "<leader>tr", function()
require("neotest").run.run()
end, { desc = "run nearest" })
vim.keymap.set({ "n", "v" }, "<leader>tl", function()
require("neotest").run.run_last()
end, { desc = "run last" })
vim.keymap.set({ "n", "v" }, "<leader>ts", function()
require("neotest").summary.toggle()
end, { desc = "toggle summary" })
vim.keymap.set({ "n", "v" }, "<leader>to", function()
require("neotest").output.open({ enter = true, auto_close = true })
end, { desc = "show output" })
vim.keymap.set({ "n", "v" }, "<leader>to", function()
require("neotest").output_panel.toggle()
end, { desc = "toggle output panel" })
vim.keymap.set({ "n", "v" }, "<leader>ts", function()
require("neotest").run.stop()
end, { desc = "stop" })
vim.keymap.set({ "n", "v" }, "<leader>tw", function()
require("neotest").watch.toggle(vim.fn.expand("%"))
end, { desc = "toggle watch" })
end,
},
{
"nvim-neotest/neotest-python",
},
{
"mrcjkb/rustaceanvim",
version = "^5",
lazy = false,
},
}

View file

@ -1,15 +0,0 @@
return {
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
config = function()
local configs = require("nvim-treesitter.configs")
configs.setup({
ensure_installed = { "lua", "vim", "query", "javascript", "html", "python", "rust", "markdown" },
sync_install = false,
auto_install = true,
highlight = { enable = true },
indent = { enable = true },
})
end,
}

View file

@ -1,14 +0,0 @@
return {
"folke/which-key.nvim",
event = "VeryLazy",
opts = {},
keys = {
{
"<leader>?",
function()
require("which-key").show({ global = false })
end,
desc = "buffer local keymaps (which-key)",
},
},
}

View file

@ -1,11 +0,0 @@
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
vim.o.cursorline = true
vim.o.expandtab = true
vim.o.number = true
vim.o.shiftwidth = 2
vim.o.softtabstop = 2
vim.o.tabstop = 2
vim.keymap.set({ "n", "v" }, "<leader>y", "\"*y", { desc = "yank to clipboard" })

View file

@ -1,3 +0,0 @@
defaults:
max_columns: 150
theme: "catppuccin-mocha"

View file

@ -1,24 +0,0 @@
### catppuccin
set color_cmdline_bg=default
set color_cmdline_fg=254
set color_error=211
set color_info=223
set color_separator=117
set color_statusline_bg=default
set color_statusline_fg=254
set color_titleline_bg=151
set color_titleline_fg=16
set color_win_bg=default
set color_win_cur=117
set color_win_cur_sel_bg=151
set color_win_cur_sel_fg=16
set color_win_dir=254
set color_win_fg=254
set color_win_inactive_cur_sel_bg=181
set color_win_inactive_cur_sel_fg=235
set color_win_inactive_sel_bg=152
set color_win_inactive_sel_fg=235
set color_win_sel_bg=117
set color_win_sel_fg=235
set color_win_title_bg=default
set color_win_title_fg=117

View file

@ -1,5 +0,0 @@
style: {{ .chezmoi.homeDir }}/.config/glow/themes/catppuccin-mocha.json
mouse: false
pager: false
width: 80
all: false

View file

@ -1,199 +0,0 @@
{
"document": {
"block_prefix": "\n",
"block_suffix": "\n",
"color": "#cdd6f4",
"margin": 2
},
"block_quote": {
"indent": 1,
"indent_token": "│ "
},
"paragraph": {},
"list": {
"level_indent": 2
},
"heading": {
"block_suffix": "\n",
"color": "#cdd6f4",
"bold": true
},
"h1": {
"prefix": "▓▓▓ ",
"suffix": " ",
"color": "#f38ba8",
"bold": true
},
"h2": {
"prefix": "▓▓▓▓ ",
"color": "#fab387"
},
"h3": {
"prefix": "▓▓▓▓▓ ",
"color": "#f9e2af"
},
"h4": {
"prefix": "▓▓▓▓▓▓ ",
"color": "#a6e3a1"
},
"h5": {
"prefix": "▓▓▓▓▓▓▓ ",
"color": "#74c7ec"
},
"h6": {
"prefix": "▓▓▓▓▓▓▓▓ ",
"color": "#b4befe"
},
"text": {},
"strikethrough": {
"crossed_out": true
},
"emph": {
"italic": true
},
"strong": {
"bold": true
},
"hr": {
"color": "#6c7086",
"format": "\n--------\n"
},
"item": {
"block_prefix": "• "
},
"enumeration": {
"block_prefix": ". "
},
"task": {
"ticked": "[✓] ",
"unticked": "[ ] "
},
"link": {
"color": "#89b4fa",
"underline": true
},
"link_text": {
"color": "#b4befe",
"bold": true
},
"image": {
"color": "#89b4fa",
"underline": true
},
"image_text": {
"color": "#b4befe",
"format": "Image: {{.text}} →"
},
"code": {
"prefix": " ",
"suffix": " ",
"color": "#eba0ac",
"background_color": "#181825"
},
"code_block": {
"color": "#181825",
"margin": 2,
"chroma": {
"text": {
"color": "#cdd6f4"
},
"error": {
"color": "#cdd6f4",
"background_color": "#f38ba8"
},
"comment": {
"color": "#6c7086"
},
"comment_preproc": {
"color": "#89b4fa"
},
"keyword": {
"color": "#cba6f7"
},
"keyword_reserved": {
"color": "#cba6f7"
},
"keyword_namespace": {
"color": "#f9e2af"
},
"keyword_type": {
"color": "#f9e2af"
},
"operator": {
"color": "#89dceb"
},
"punctuation": {
"color": "#9399b2"
},
"name": {
"color": "#b4befe"
},
"name_builtin": {
"color": "#fab387"
},
"name_tag": {
"color": "#cba6f7"
},
"name_attribute": {
"color": "#f9e2af"
},
"name_class": {
"color": "#f9e2af"
},
"name_constant": {
"color": "#f9e2af"
},
"name_decorator": {
"color": "#f5c2e7"
},
"name_exception": {},
"name_function": {
"color": "#89b4fa"
},
"name_other": {},
"literal": {},
"literal_number": {
"color": "#fab387"
},
"literal_date": {},
"literal_string": {
"color": "#a6e3a1"
},
"literal_string_escape": {
"color": "#f5c2e7"
},
"generic_deleted": {
"color": "#f38ba8"
},
"generic_emph": {
"color": "#cdd6f4",
"italic": true
},
"generic_inserted": {
"color": "#a6e3a1"
},
"generic_strong": {
"color": "#cdd6f4",
"bold": true
},
"generic_subheading": {
"color": "#89dceb"
},
"background": {
"background_color": "#181825"
}
}
},
"table": {
"center_separator": "┼",
"column_separator": "│",
"row_separator": "─"
},
"definition_list": {},
"definition_term": {},
"definition_description": {
"block_prefix": "\n🠶 "
},
"html_block": {},
"html_span": {}
}

View file

@ -1,9 +0,0 @@
aliases:
dp: deployments
sec: v1/secrets
jo: jobs
cr: clusterroles
crb: clusterrolebindings
ro: roles
rb: rolebindings
np: networkpolicies

View file

@ -1,44 +0,0 @@
k9s:
liveViewAutoRefresh: false
screenDumpDir: {{ .chezmoi.homeDir }}/Library/Application Support/k9s/screen-dumps
refreshRate: 2
maxConnRetry: 5
readOnly: false
noExitOnCtrlC: false
portForwardAddress: localhost
ui:
skin: catppuccin-mocha
enableMouse: false
headless: false
logoless: false
crumbsless: false
reactive: false
noIcons: false
defaultsToFullScreen: false
skipLatestRevCheck: false
disablePodCounting: false
shellPod:
image: busybox:1.35.0
namespace: default
limits:
cpu: 100m
memory: 100Mi
imageScans:
enable: false
exclusions:
namespaces: []
labels: {}
logger:
tail: 100
buffer: 5000
sinceSeconds: -1
textWrap: false
disableAutoscroll: false
showTime: false
thresholds:
cpu:
critical: 90
warn: 70
memory:
critical: 90
warn: 70

View file

@ -1,100 +0,0 @@
k9s:
body:
fgColor: '#c6d0f5'
bgColor: default
logoColor: '#ca9ee6'
prompt:
fgColor: '#c6d0f5'
bgColor: default
suggestColor: '#8caaee'
help:
fgColor: '#c6d0f5'
bgColor: default
sectionColor: '#a6d189'
keyColor: '#8caaee'
numKeyColor: '#ea999c'
frame:
title:
fgColor: '#81c8be'
bgColor: default
highlightColor: '#f4b8e4'
counterColor: '#e5c890'
filterColor: '#a6d189'
border:
fgColor: '#ca9ee6'
focusColor: '#babbf1'
menu:
fgColor: '#c6d0f5'
keyColor: '#8caaee'
numKeyColor: '#ea999c'
crumbs:
fgColor: '#303446'
bgColor: default
activeColor: '#eebebe'
status:
newColor: '#8caaee'
modifyColor: '#babbf1'
addColor: '#a6d189'
pendingColor: '#ef9f76'
errorColor: '#e78284'
highlightColor: '#99d1db'
killColor: '#ca9ee6'
completedColor: '#737994'
info:
fgColor: '#ef9f76'
sectionColor: '#c6d0f5'
views:
table:
fgColor: '#c6d0f5'
bgColor: default
cursorFgColor: '#414559'
cursorBgColor: '#51576d'
markColor: '#f2d5cf'
header:
fgColor: '#e5c890'
bgColor: default
sorterColor: '#99d1db'
xray:
fgColor: '#c6d0f5'
bgColor: default
cursorColor: '#51576d'
cursorTextColor: '#303446'
graphicColor: '#f4b8e4'
charts:
bgColor: default
chartBgColor: default
dialBgColor: default
defaultDialColors:
- '#a6d189'
- '#e78284'
defaultChartColors:
- '#a6d189'
- '#e78284'
resourceColors:
cpu:
- '#ca9ee6'
- '#8caaee'
mem:
- '#e5c890'
- '#ef9f76'
yaml:
keyColor: '#8caaee'
valueColor: '#c6d0f5'
colonColor: '#a5adce'
logs:
fgColor: '#c6d0f5'
bgColor: default
indicator:
fgColor: '#babbf1'
bgColor: default
toggleOnColor: '#a6d189'
toggleOffColor: '#a5adce'
dialog:
fgColor: '#e5c890'
bgColor: default
buttonFgColor: '#303446'
buttonBgColor: default
buttonFocusFgColor: '#303446'
buttonFocusBgColor: '#f4b8e4'
labelFgColor: '#f2d5cf'
fieldFgColor: '#c6d0f5'

View file

@ -1,100 +0,0 @@
k9s:
body:
fgColor: '#c6d0f5'
bgColor: '#303446'
logoColor: '#ca9ee6'
prompt:
fgColor: '#c6d0f5'
bgColor: '#292c3c'
suggestColor: '#8caaee'
help:
fgColor: '#c6d0f5'
bgColor: '#303446'
sectionColor: '#a6d189'
keyColor: '#8caaee'
numKeyColor: '#ea999c'
frame:
title:
fgColor: '#81c8be'
bgColor: '#303446'
highlightColor: '#f4b8e4'
counterColor: '#e5c890'
filterColor: '#a6d189'
border:
fgColor: '#ca9ee6'
focusColor: '#babbf1'
menu:
fgColor: '#c6d0f5'
keyColor: '#8caaee'
numKeyColor: '#ea999c'
crumbs:
fgColor: '#303446'
bgColor: '#ea999c'
activeColor: '#eebebe'
status:
newColor: '#8caaee'
modifyColor: '#babbf1'
addColor: '#a6d189'
pendingColor: '#ef9f76'
errorColor: '#e78284'
highlightColor: '#99d1db'
killColor: '#ca9ee6'
completedColor: '#737994'
info:
fgColor: '#ef9f76'
sectionColor: '#c6d0f5'
views:
table:
fgColor: '#c6d0f5'
bgColor: '#303446'
cursorFgColor: '#414559'
cursorBgColor: '#51576d'
markColor: '#f2d5cf'
header:
fgColor: '#e5c890'
bgColor: '#303446'
sorterColor: '#99d1db'
xray:
fgColor: '#c6d0f5'
bgColor: '#303446'
cursorColor: '#51576d'
cursorTextColor: '#303446'
graphicColor: '#f4b8e4'
charts:
bgColor: '#303446'
chartBgColor: '#303446'
dialBgColor: '#303446'
defaultDialColors:
- '#a6d189'
- '#e78284'
defaultChartColors:
- '#a6d189'
- '#e78284'
resourceColors:
cpu:
- '#ca9ee6'
- '#8caaee'
mem:
- '#e5c890'
- '#ef9f76'
yaml:
keyColor: '#8caaee'
valueColor: '#c6d0f5'
colonColor: '#a5adce'
logs:
fgColor: '#c6d0f5'
bgColor: '#303446'
indicator:
fgColor: '#babbf1'
bgColor: '#303446'
toggleOnColor: '#a6d189'
toggleOffColor: '#a5adce'
dialog:
fgColor: '#e5c890'
bgColor: '#949cbb'
buttonFgColor: '#303446'
buttonBgColor: '#838ba7'
buttonFocusFgColor: '#303446'
buttonFocusBgColor: '#f4b8e4'
labelFgColor: '#f2d5cf'
fieldFgColor: '#c6d0f5'

View file

@ -1,100 +0,0 @@
k9s:
body:
fgColor: '#4c4f69'
bgColor: default
logoColor: '#8839ef'
prompt:
fgColor: '#4c4f69'
bgColor: default
suggestColor: '#1e66f5'
help:
fgColor: '#4c4f69'
bgColor: default
sectionColor: '#40a02b'
keyColor: '#1e66f5'
numKeyColor: '#e64553'
frame:
title:
fgColor: '#179299'
bgColor: default
highlightColor: '#ea76cb'
counterColor: '#df8e1d'
filterColor: '#40a02b'
border:
fgColor: '#8839ef'
focusColor: '#7287fd'
menu:
fgColor: '#4c4f69'
keyColor: '#1e66f5'
numKeyColor: '#e64553'
crumbs:
fgColor: '#eff1f5'
bgColor: default
activeColor: '#dd7878'
status:
newColor: '#1e66f5'
modifyColor: '#7287fd'
addColor: '#40a02b'
pendingColor: '#fe640b'
errorColor: '#d20f39'
highlightColor: '#04a5e5'
killColor: '#8839ef'
completedColor: '#9ca0b0'
info:
fgColor: '#fe640b'
sectionColor: '#4c4f69'
views:
table:
fgColor: '#4c4f69'
bgColor: default
cursorFgColor: '#ccd0da'
cursorBgColor: '#bcc0cc'
markColor: '#dc8a78'
header:
fgColor: '#df8e1d'
bgColor: default
sorterColor: '#04a5e5'
xray:
fgColor: '#4c4f69'
bgColor: default
cursorColor: '#bcc0cc'
cursorTextColor: '#eff1f5'
graphicColor: '#ea76cb'
charts:
bgColor: default
chartBgColor: default
dialBgColor: default
defaultDialColors:
- '#40a02b'
- '#d20f39'
defaultChartColors:
- '#40a02b'
- '#d20f39'
resourceColors:
cpu:
- '#8839ef'
- '#1e66f5'
mem:
- '#df8e1d'
- '#fe640b'
yaml:
keyColor: '#1e66f5'
valueColor: '#4c4f69'
colonColor: '#6c6f85'
logs:
fgColor: '#4c4f69'
bgColor: default
indicator:
fgColor: '#7287fd'
bgColor: default
toggleOnColor: '#40a02b'
toggleOffColor: '#6c6f85'
dialog:
fgColor: '#df8e1d'
bgColor: default
buttonFgColor: '#eff1f5'
buttonBgColor: default
buttonFocusFgColor: '#eff1f5'
buttonFocusBgColor: '#ea76cb'
labelFgColor: '#dc8a78'
fieldFgColor: '#4c4f69'

View file

@ -1,100 +0,0 @@
k9s:
body:
fgColor: '#4c4f69'
bgColor: '#eff1f5'
logoColor: '#8839ef'
prompt:
fgColor: '#4c4f69'
bgColor: '#e6e9ef'
suggestColor: '#1e66f5'
help:
fgColor: '#4c4f69'
bgColor: '#eff1f5'
sectionColor: '#40a02b'
keyColor: '#1e66f5'
numKeyColor: '#e64553'
frame:
title:
fgColor: '#179299'
bgColor: '#eff1f5'
highlightColor: '#ea76cb'
counterColor: '#df8e1d'
filterColor: '#40a02b'
border:
fgColor: '#8839ef'
focusColor: '#7287fd'
menu:
fgColor: '#4c4f69'
keyColor: '#1e66f5'
numKeyColor: '#e64553'
crumbs:
fgColor: '#eff1f5'
bgColor: '#e64553'
activeColor: '#dd7878'
status:
newColor: '#1e66f5'
modifyColor: '#7287fd'
addColor: '#40a02b'
pendingColor: '#fe640b'
errorColor: '#d20f39'
highlightColor: '#04a5e5'
killColor: '#8839ef'
completedColor: '#9ca0b0'
info:
fgColor: '#fe640b'
sectionColor: '#4c4f69'
views:
table:
fgColor: '#4c4f69'
bgColor: '#eff1f5'
cursorFgColor: '#ccd0da'
cursorBgColor: '#bcc0cc'
markColor: '#dc8a78'
header:
fgColor: '#df8e1d'
bgColor: '#eff1f5'
sorterColor: '#04a5e5'
xray:
fgColor: '#4c4f69'
bgColor: '#eff1f5'
cursorColor: '#bcc0cc'
cursorTextColor: '#eff1f5'
graphicColor: '#ea76cb'
charts:
bgColor: '#eff1f5'
chartBgColor: '#eff1f5'
dialBgColor: '#eff1f5'
defaultDialColors:
- '#40a02b'
- '#d20f39'
defaultChartColors:
- '#40a02b'
- '#d20f39'
resourceColors:
cpu:
- '#8839ef'
- '#1e66f5'
mem:
- '#df8e1d'
- '#fe640b'
yaml:
keyColor: '#1e66f5'
valueColor: '#4c4f69'
colonColor: '#6c6f85'
logs:
fgColor: '#4c4f69'
bgColor: '#eff1f5'
indicator:
fgColor: '#7287fd'
bgColor: '#eff1f5'
toggleOnColor: '#40a02b'
toggleOffColor: '#6c6f85'
dialog:
fgColor: '#df8e1d'
bgColor: '#7c7f93'
buttonFgColor: '#eff1f5'
buttonBgColor: '#8c8fa1'
buttonFocusFgColor: '#eff1f5'
buttonFocusBgColor: '#ea76cb'
labelFgColor: '#dc8a78'
fieldFgColor: '#4c4f69'

View file

@ -1,100 +0,0 @@
k9s:
body:
fgColor: '#cad3f5'
bgColor: default
logoColor: '#c6a0f6'
prompt:
fgColor: '#cad3f5'
bgColor: default
suggestColor: '#8aadf4'
help:
fgColor: '#cad3f5'
bgColor: default
sectionColor: '#a6da95'
keyColor: '#8aadf4'
numKeyColor: '#ee99a0'
frame:
title:
fgColor: '#8bd5ca'
bgColor: default
highlightColor: '#f5bde6'
counterColor: '#eed49f'
filterColor: '#a6da95'
border:
fgColor: '#c6a0f6'
focusColor: '#b7bdf8'
menu:
fgColor: '#cad3f5'
keyColor: '#8aadf4'
numKeyColor: '#ee99a0'
crumbs:
fgColor: '#24273a'
bgColor: default
activeColor: '#f0c6c6'
status:
newColor: '#8aadf4'
modifyColor: '#b7bdf8'
addColor: '#a6da95'
pendingColor: '#f5a97f'
errorColor: '#ed8796'
highlightColor: '#91d7e3'
killColor: '#c6a0f6'
completedColor: '#6e738d'
info:
fgColor: '#f5a97f'
sectionColor: '#cad3f5'
views:
table:
fgColor: '#cad3f5'
bgColor: default
cursorFgColor: '#363a4f'
cursorBgColor: '#494d64'
markColor: '#f4dbd6'
header:
fgColor: '#eed49f'
bgColor: default
sorterColor: '#91d7e3'
xray:
fgColor: '#cad3f5'
bgColor: default
cursorColor: '#494d64'
cursorTextColor: '#24273a'
graphicColor: '#f5bde6'
charts:
bgColor: default
chartBgColor: default
dialBgColor: default
defaultDialColors:
- '#a6da95'
- '#ed8796'
defaultChartColors:
- '#a6da95'
- '#ed8796'
resourceColors:
cpu:
- '#c6a0f6'
- '#8aadf4'
mem:
- '#eed49f'
- '#f5a97f'
yaml:
keyColor: '#8aadf4'
valueColor: '#cad3f5'
colonColor: '#a5adcb'
logs:
fgColor: '#cad3f5'
bgColor: default
indicator:
fgColor: '#b7bdf8'
bgColor: default
toggleOnColor: '#a6da95'
toggleOffColor: '#a5adcb'
dialog:
fgColor: '#eed49f'
bgColor: default
buttonFgColor: '#24273a'
buttonBgColor: default
buttonFocusFgColor: '#24273a'
buttonFocusBgColor: '#f5bde6'
labelFgColor: '#f4dbd6'
fieldFgColor: '#cad3f5'

View file

@ -1,100 +0,0 @@
k9s:
body:
fgColor: '#cad3f5'
bgColor: '#24273a'
logoColor: '#c6a0f6'
prompt:
fgColor: '#cad3f5'
bgColor: '#1e2030'
suggestColor: '#8aadf4'
help:
fgColor: '#cad3f5'
bgColor: '#24273a'
sectionColor: '#a6da95'
keyColor: '#8aadf4'
numKeyColor: '#ee99a0'
frame:
title:
fgColor: '#8bd5ca'
bgColor: '#24273a'
highlightColor: '#f5bde6'
counterColor: '#eed49f'
filterColor: '#a6da95'
border:
fgColor: '#c6a0f6'
focusColor: '#b7bdf8'
menu:
fgColor: '#cad3f5'
keyColor: '#8aadf4'
numKeyColor: '#ee99a0'
crumbs:
fgColor: '#24273a'
bgColor: '#ee99a0'
activeColor: '#f0c6c6'
status:
newColor: '#8aadf4'
modifyColor: '#b7bdf8'
addColor: '#a6da95'
pendingColor: '#f5a97f'
errorColor: '#ed8796'
highlightColor: '#91d7e3'
killColor: '#c6a0f6'
completedColor: '#6e738d'
info:
fgColor: '#f5a97f'
sectionColor: '#cad3f5'
views:
table:
fgColor: '#cad3f5'
bgColor: '#24273a'
cursorFgColor: '#363a4f'
cursorBgColor: '#494d64'
markColor: '#f4dbd6'
header:
fgColor: '#eed49f'
bgColor: '#24273a'
sorterColor: '#91d7e3'
xray:
fgColor: '#cad3f5'
bgColor: '#24273a'
cursorColor: '#494d64'
cursorTextColor: '#24273a'
graphicColor: '#f5bde6'
charts:
bgColor: '#24273a'
chartBgColor: '#24273a'
dialBgColor: '#24273a'
defaultDialColors:
- '#a6da95'
- '#ed8796'
defaultChartColors:
- '#a6da95'
- '#ed8796'
resourceColors:
cpu:
- '#c6a0f6'
- '#8aadf4'
mem:
- '#eed49f'
- '#f5a97f'
yaml:
keyColor: '#8aadf4'
valueColor: '#cad3f5'
colonColor: '#a5adcb'
logs:
fgColor: '#cad3f5'
bgColor: '#24273a'
indicator:
fgColor: '#b7bdf8'
bgColor: '#24273a'
toggleOnColor: '#a6da95'
toggleOffColor: '#a5adcb'
dialog:
fgColor: '#eed49f'
bgColor: '#939ab7'
buttonFgColor: '#24273a'
buttonBgColor: '#8087a2'
buttonFocusFgColor: '#24273a'
buttonFocusBgColor: '#f5bde6'
labelFgColor: '#f4dbd6'
fieldFgColor: '#cad3f5'

View file

@ -1,100 +0,0 @@
k9s:
body:
fgColor: '#cdd6f4'
bgColor: default
logoColor: '#cba6f7'
prompt:
fgColor: '#cdd6f4'
bgColor: default
suggestColor: '#89b4fa'
help:
fgColor: '#cdd6f4'
bgColor: default
sectionColor: '#a6e3a1'
keyColor: '#89b4fa'
numKeyColor: '#eba0ac'
frame:
title:
fgColor: '#94e2d5'
bgColor: default
highlightColor: '#f5c2e7'
counterColor: '#f9e2af'
filterColor: '#a6e3a1'
border:
fgColor: '#cba6f7'
focusColor: '#b4befe'
menu:
fgColor: '#cdd6f4'
keyColor: '#89b4fa'
numKeyColor: '#eba0ac'
crumbs:
fgColor: '#1e1e2e'
bgColor: default
activeColor: '#f2cdcd'
status:
newColor: '#89b4fa'
modifyColor: '#b4befe'
addColor: '#a6e3a1'
pendingColor: '#fab387'
errorColor: '#f38ba8'
highlightColor: '#89dceb'
killColor: '#cba6f7'
completedColor: '#6c7086'
info:
fgColor: '#fab387'
sectionColor: '#cdd6f4'
views:
table:
fgColor: '#cdd6f4'
bgColor: default
cursorFgColor: '#313244'
cursorBgColor: '#45475a'
markColor: '#f5e0dc'
header:
fgColor: '#f9e2af'
bgColor: default
sorterColor: '#89dceb'
xray:
fgColor: '#cdd6f4'
bgColor: default
cursorColor: '#45475a'
cursorTextColor: '#1e1e2e'
graphicColor: '#f5c2e7'
charts:
bgColor: default
chartBgColor: default
dialBgColor: default
defaultDialColors:
- '#a6e3a1'
- '#f38ba8'
defaultChartColors:
- '#a6e3a1'
- '#f38ba8'
resourceColors:
cpu:
- '#cba6f7'
- '#89b4fa'
mem:
- '#f9e2af'
- '#fab387'
yaml:
keyColor: '#89b4fa'
valueColor: '#cdd6f4'
colonColor: '#a6adc8'
logs:
fgColor: '#cdd6f4'
bgColor: default
indicator:
fgColor: '#b4befe'
bgColor: default
toggleOnColor: '#a6e3a1'
toggleOffColor: '#a6adc8'
dialog:
fgColor: '#f9e2af'
bgColor: default
buttonFgColor: '#1e1e2e'
buttonBgColor: default
buttonFocusFgColor: '#1e1e2e'
buttonFocusBgColor: '#f5c2e7'
labelFgColor: '#f5e0dc'
fieldFgColor: '#cdd6f4'

View file

@ -1,100 +0,0 @@
k9s:
body:
fgColor: '#cdd6f4'
bgColor: '#1e1e2e'
logoColor: '#cba6f7'
prompt:
fgColor: '#cdd6f4'
bgColor: '#181825'
suggestColor: '#89b4fa'
help:
fgColor: '#cdd6f4'
bgColor: '#1e1e2e'
sectionColor: '#a6e3a1'
keyColor: '#89b4fa'
numKeyColor: '#eba0ac'
frame:
title:
fgColor: '#94e2d5'
bgColor: '#1e1e2e'
highlightColor: '#f5c2e7'
counterColor: '#f9e2af'
filterColor: '#a6e3a1'
border:
fgColor: '#cba6f7'
focusColor: '#b4befe'
menu:
fgColor: '#cdd6f4'
keyColor: '#89b4fa'
numKeyColor: '#eba0ac'
crumbs:
fgColor: '#1e1e2e'
bgColor: '#eba0ac'
activeColor: '#f2cdcd'
status:
newColor: '#89b4fa'
modifyColor: '#b4befe'
addColor: '#a6e3a1'
pendingColor: '#fab387'
errorColor: '#f38ba8'
highlightColor: '#89dceb'
killColor: '#cba6f7'
completedColor: '#6c7086'
info:
fgColor: '#fab387'
sectionColor: '#cdd6f4'
views:
table:
fgColor: '#cdd6f4'
bgColor: '#1e1e2e'
cursorFgColor: '#313244'
cursorBgColor: '#45475a'
markColor: '#f5e0dc'
header:
fgColor: '#f9e2af'
bgColor: '#1e1e2e'
sorterColor: '#89dceb'
xray:
fgColor: '#cdd6f4'
bgColor: '#1e1e2e'
cursorColor: '#45475a'
cursorTextColor: '#1e1e2e'
graphicColor: '#f5c2e7'
charts:
bgColor: '#1e1e2e'
chartBgColor: '#1e1e2e'
dialBgColor: '#1e1e2e'
defaultDialColors:
- '#a6e3a1'
- '#f38ba8'
defaultChartColors:
- '#a6e3a1'
- '#f38ba8'
resourceColors:
cpu:
- '#cba6f7'
- '#89b4fa'
mem:
- '#f9e2af'
- '#fab387'
yaml:
keyColor: '#89b4fa'
valueColor: '#cdd6f4'
colonColor: '#a6adc8'
logs:
fgColor: '#cdd6f4'
bgColor: '#1e1e2e'
indicator:
fgColor: '#b4befe'
bgColor: '#1e1e2e'
toggleOnColor: '#a6e3a1'
toggleOffColor: '#a6adc8'
dialog:
fgColor: '#f9e2af'
bgColor: '#9399b2'
buttonFgColor: '#1e1e2e'
buttonBgColor: '#7f849c'
buttonFocusFgColor: '#1e1e2e'
buttonFocusBgColor: '#f5c2e7'
labelFgColor: '#f5e0dc'
fieldFgColor: '#cdd6f4'

View file

@ -1,4 +0,0 @@
[[input.prepend_keymap]]
on = "<Esc>"
run = "close"
desc = "Cancel input"

View file

@ -1,57 +0,0 @@
[
{
"context": "Terminal || ProjectPanel || CollabPanel || OutlinePanel || ChatPanel || VimControl || EmptyPane || SharedScreen || MarkdownPreview || KeyContextView",
"bindings": {
"ctrl-w": null,
"ctrl-w left": ["workspace::ActivatePaneInDirection", "Left"],
"ctrl-w right": ["workspace::ActivatePaneInDirection", "Right"],
"ctrl-w up": ["workspace::ActivatePaneInDirection", "Up"],
"ctrl-w down": ["workspace::ActivatePaneInDirection", "Down"],
"ctrl-w ctrl-h": ["workspace::ActivatePaneInDirection", "Left"],
"ctrl-w ctrl-l": ["workspace::ActivatePaneInDirection", "Right"],
"ctrl-w ctrl-k": ["workspace::ActivatePaneInDirection", "Up"],
"ctrl-w ctrl-j": ["workspace::ActivatePaneInDirection", "Down"],
"ctrl-w h": ["workspace::ActivatePaneInDirection", "Left"],
"ctrl-w l": ["workspace::ActivatePaneInDirection", "Right"],
"ctrl-w k": ["workspace::ActivatePaneInDirection", "Up"],
"ctrl-w j": ["workspace::ActivatePaneInDirection", "Down"],
"ctrl-w shift-left": ["workspace::SwapPaneInDirection", "Left"],
"ctrl-w shift-right": ["workspace::SwapPaneInDirection", "Right"],
"ctrl-w shift-up": ["workspace::SwapPaneInDirection", "Up"],
"ctrl-w shift-down": ["workspace::SwapPaneInDirection", "Down"],
"ctrl-w shift-h": ["workspace::SwapPaneInDirection", "Left"],
"ctrl-w shift-l": ["workspace::SwapPaneInDirection", "Right"],
"ctrl-w shift-k": ["workspace::SwapPaneInDirection", "Up"],
"ctrl-w shift-j": ["workspace::SwapPaneInDirection", "Down"],
"ctrl-w >": ["vim::ResizePane", "Widen"],
"ctrl-w <": ["vim::ResizePane", "Narrow"],
"ctrl-w -": ["vim::ResizePane", "Shorten"],
"ctrl-w +": ["vim::ResizePane", "Lengthen"],
"ctrl-w _": "vim::MaximizePane",
"ctrl-w =": "vim::ResetPaneSizes",
"ctrl-w g t": "pane::ActivateNextItem",
"ctrl-w ctrl-g t": "pane::ActivateNextItem",
"ctrl-w g shift-t": "pane::ActivatePrevItem",
"ctrl-w ctrl-g shift-t": "pane::ActivatePrevItem",
"ctrl-w w": "workspace::ActivateNextPane",
"ctrl-w ctrl-w": "workspace::ActivateNextPane",
"ctrl-w p": "workspace::ActivatePreviousPane",
"ctrl-w ctrl-p": "workspace::ActivatePreviousPane",
"ctrl-w shift-w": "workspace::ActivatePreviousPane",
"ctrl-w ctrl-shift-w": "workspace::ActivatePreviousPane",
"ctrl-w ctrl-v": "pane::SplitVertical",
"ctrl-w v": "pane::SplitVertical",
"ctrl-w shift-s": "pane::SplitHorizontal",
"ctrl-w ctrl-s": "pane::SplitHorizontal",
"ctrl-w s": "pane::SplitHorizontal",
"ctrl-w ctrl-c": "pane::CloseAllItems",
"ctrl-w c": "pane::CloseAllItems",
"ctrl-w ctrl-q": "pane::CloseAllItems",
"ctrl-w q": "pane::CloseAllItems",
"ctrl-w ctrl-o": "workspace::CloseInactiveTabsAndPanes",
"ctrl-w o": "workspace::CloseInactiveTabsAndPanes",
"ctrl-w ctrl-n": "workspace::NewFileSplitHorizontal",
"ctrl-w n": "workspace::NewFileSplitHorizontal"
}
}
]

View file

@ -1,96 +0,0 @@
// Zed settings
//
// For information on how to configure Zed, see the Zed
// documentation: https://zed.dev/docs/configuring-zed
//
// To see all of Zed's default settings without changing your
// custom settings, run `zed: open default settings` from the
// command palette (cmd-shift-p / ctrl-shift-p)
{
"outline_panel": {
"dock": "left"
},
"features": { "edit_prediction_provider": "zed" },
"assistant": {
"enable_experimental_live_diffs": true,
"default_model": {
"provider": "copilot_chat",
"model": "gpt-4o"
},
"version": "2"
},
"vim_mode": true,
"ui_font_size": 14,
"buffer_font_family": "Iosevka Term",
"buffer_font_size": 14,
"font_size": 14,
"font_family": "Iosevka Term",
"theme": {
"mode": "dark",
"light": "One Light",
"dark": "Catppuccin Mocha"
},
"terminal": {
"line_height": "standard"
},
"auto_install_extensions": {
"html": true,
"toml": true,
"catppuccin": true,
"make": true,
"dockerfile": true,
"sql": true,
"terraform": true,
"lua": true,
"log": true,
"docker-compose": true,
"csv": true,
"basher": true,
"proto": true,
"gdscript": true,
"jinja2": true,
"roc": true,
"gemini": true,
"graphviz": true,
"ssh-config": true
},
"languages": {
"Python": {
"language_servers": ["pyright", "ruff"]
}
},
"lsp": {
"ruff": {
"initialization_options": {
"settings": {
"lint": {
"extendSelect": ["I"]
}
}
}
},
"rust-analyzer": {
"initialization_options": {
"inlayHints": {
"maxLength": null,
"lifetimeElisionHints": {
"enable": "skip_trivial",
"useParameterNames": true
},
"closureReturnTypeHints": {
"enable": "always"
}
}
}
}
}
}

View file

@ -1,275 +0,0 @@
keybinds clear-defaults=true {
tmux {
bind "[" { SwitchToMode "Scroll"; }
bind "Ctrl a" { ToggleTab; SwitchToMode "Normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "Normal"; }
bind "%" { NewPane "Right"; SwitchToMode "Normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
bind "c" { NewTab; SwitchToMode "Normal"; }
bind "," { SwitchToMode "RenameTab"; }
bind "p" { GoToPreviousTab; SwitchToMode "Normal"; }
bind "n" { GoToNextTab; SwitchToMode "Normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "Normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "Normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "Normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "Normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "Normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "Normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "Normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "Normal"; }
bind "o" { FocusNextPane; }
bind "d" { Detach; }
bind "Space" { NextSwapLayout; }
bind "x" { CloseFocus; SwitchToMode "Normal"; }
}
shared_except "locked" {
bind "Ctrl u" {
LaunchOrFocusPlugin "file:~/.config/zellij/plugins/room.wasm" {
floating true
ignore_case true
quick_jump true
}
}
}
shared_except "normal" "locked" {
bind "Enter" "Esc" { SwitchToMode "Normal"; }
}
shared_except "tmux" "locked" {
bind "Ctrl a" { SwitchToMode "Tmux"; }
}
}
plugins {
tab-bar location="zellij:tab-bar"
status-bar location="zellij:status-bar"
strider location="zellij:strider"
compact-bar location="zellij:compact-bar"
session-manager location="zellij:session-manager"
welcome-screen location="zellij:session-manager" {
welcome_screen true
}
filepicker location="zellij:strider" {
cwd "/"
}
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
//
// default_shell "fish"
// Choose the path to override cwd that zellij will use for opening new panes
//
// default_cwd ""
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
pane_frames false
// Toggle between having Zellij lay out panes according to a predefined set of layouts whenever possible
// Options:
// - true (default)
// - false
//
// auto_layout true
// Whether sessions should be serialized to the cache folder (including their tabs/panes, cwds and running commands) so that they can later be resurrected
// Options:
// - true (default)
// - false
//
// session_serialization false
// Whether pane viewports are serialized along with the session, default is false
// Options:
// - true
// - false (default)
// serialize_pane_viewport true
// Scrollback lines to serialize along with the pane viewport when serializing sessions, 0
// defaults to the scrollback size. If this number is higher than the scrollback size, it will
// also default to the scrollback size. This does nothing if `serialize_pane_viewport` is not true.
//
// scrollback_lines_to_serialize 10000
// Define color themes for Zellij
// For more examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
// Once these themes are defined, one of them should to be selected in the "theme" section of this file
themes {
dracula {
fg 248 248 242
bg 40 42 54
red 255 85 85
green 80 250 123
yellow 241 250 140
blue 98 114 164
magenta 255 121 198
orange 255 184 108
cyan 139 233 253
black 0 0 0
white 255 255 255
}
catppuccin-latte {
bg "#acb0be" // Surface2
fg "#4c4f69" // Text
red "#d20f39"
green "#40a02b"
blue "#1e66f5"
yellow "#df8e1d"
magenta "#ea76cb" // Pink
orange "#fe640b" // Peach
cyan "#04a5e5" // Sky
black "#e6e9ef" // Mantle
white "#4c4f69" // Text
}
catppuccin-frappe {
bg "#626880" // Surface2
fg "#c6d0f5" // Text
red "#e78284"
green "#a6d189"
blue "#8caaee"
yellow "#e5c890"
magenta "#f4b8e4" // Pink
orange "#ef9f76" // Peach
cyan "#99d1db" // Sky
black "#292c3c" // Mantle
white "#c6d0f5" // Text
}
catppuccin-macchiato {
bg "#5b6078" // Surface2
fg "#cad3f5" // Text
red "#ed8796"
green "#a6da95"
blue "#8aadf4"
yellow "#eed49f"
magenta "#f5bde6" // Pink
orange "#f5a97f" // Peach
cyan "#91d7e3" // Sky
black "#1e2030" // Mantle
white "#cad3f5" // Text
}
catppuccin-mocha {
bg "#585b70" // Surface2
fg "#cdd6f4" // Text
red "#f38ba8"
green "#a6e3a1"
blue "#89b4fa"
yellow "#f9e2af"
magenta "#f5c2e7" // Pink
orange "#fab387" // Peach
cyan "#89dceb" // Sky
black "#181825" // Mantle
white "#cdd6f4" // Text
}
}
// Choose the theme that is specified in the themes section.
// Default: default
//
theme "catppuccin-mocha"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion.
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir "/path/to/my/layout_dir"
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"
// Enable or disable the rendering of styled and colored underlines (undercurl).
// May need to be disabled for certain unsupported terminals
// Default: true
//
// styled_underlines false
// Enable or disable writing of session metadata to disk (if disabled, other sessions might not know
// metadata info on this session)
// Default: false
//
// disable_session_metadata true

View file

@ -1,36 +0,0 @@
[notebook]
dir = "~/notebook"
[note]
language = "en"
default-title = "untitled"
filename = "{{format-date now 'timestamp'}}-{{id}}"
extension = "md"
template = "default.md"
id-charset = "alphanum"
id-length = 4
id-case = "lower"
[group.journal]
paths = ["journal/daily"]
[group.journal.note]
filename = "{{format-date now}}"
template = "daily.md"
[lsp]
[lsp.diagnostics]
wiki-title = "hint"
dead-link = "error"
[alias]
save = 'jj desc -m "$*" && jj bookmark set main -r @ && jj new'
sync = 'jj git fetch && jj git push'
log = 'jj log -r ".."'
diff = 'jj diff'
daily = 'zk new --no-input "$ZK_NOTEBOOK_DIR/journal/daily"'
[tool]
editor = "hx"
fzf-preview = "bat -p --color always {-1}"

View file

@ -1 +0,0 @@
# {{ format-date now }}

View file

@ -1,7 +0,0 @@
---
created: {{ format-date now "%Y-%m-%dT%H:%M" }}
---
# {{ title }}
{{ content }}

View file

@ -1,3 +0,0 @@
{{ if eq .chezmoi.os "darwin" -}}
Include ~/.orbstack/ssh/config
{{ end }}

View file

@ -1,12 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1Y1Z4ZEpoK2RidUgrZFFV
VElqZDlNdXZ3czRwSVZiSWx3WnZGUFIrbkZzCnhTMG1MUWMraFVwSjFNQUFvMjhU
RUFHZE1nTDBwRGt4MXNHTUxVZFhUTUEKLS0tIDNsSjlsMWlSbnlRbTM5TmFVVmQy
am9LSzI0SjBBZ3pXSVhxQnlzTWR5ZFEKrx4z3Usu6NUqMyuM0UJeGa3X7SJed50o
lNYgdEatTd52LmkBDBeId4uilJU4Hw7g+NK80uxLgsXyjjfI+FznigNl8Ofd6n57
uPMuLj2shrslWRYoLq3Dtw03X/q/2eUuJPG9T7H98RQvsEl/N7zekymgoXUFT44v
eRZBr5mg5i57sX539Z1jZmmaWEcPyR9OYFSRCrtRATOEF520hU2LTxIRSxF194/e
NzGh6lrvK/m8VGClGHk/UqdItH5S6+dAg+P4v2FSFQwls/uzq9j0n/bK0A06F6Vs
lL+mSumS9d+zvXzsu0iHLSoECP31kAfNuWPj9j0WCekISdwJmoXR+gp3iCf6IUOh
w0vP1Vsz4cIWUC6SgoK2rrWqmfSkD2TFPom3MzFhr3yw+60LwtYZQ3LzIJQQ
-----END AGE ENCRYPTED FILE-----

View file

@ -1,9 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzZlFZSzBiYXVpdzl5VGR6
OWZYTk8zaVBxZE4yK1dNN2ZqMWtyMmlzY2lZCkhSM3ZGbkgwTXlVR0RNbFZPM3ps
R21IM2N5d2RXQmt4RUY3RUV1YjZmTVEKLS0tIEJSK2ZocWFPUE40OGlBN3I1TCtR
QWhjVGVPMk1LdVNzeCtSYTA5NzQ2d1UKKff/PWU7776PpbUztvJE3X8AnG+CKfW/
l/Ha2puxfpa30d0gD9TeeqiEYFgGAujHinV4NvrsbLrWbia8tM3Ycl+wiCF2fdAh
oerskCiUow212eOXwIUEYKobe/pWjVka6ZOPOrviwVLlwAjMBtF9y+G6M2v/g6nK
lt03ojnwkFLWd8UTJyFKqZeFMlA=
-----END AGE ENCRYPTED FILE-----

View file

@ -1,22 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwekJ1R1Z6M0hLN2pESFBY
NW1BYjFPTjNKMEFaeFJsdWtzK2lnQkl3emdzCitrREJ3RGd4TWh0R25yaDRRd0pi
bDlrbG1ucDV2SXd5NklMeUx3K2F0Z0UKLS0tIDZTUjBYV1Q1TDh4RVJQUzlTUENS
YllMcXlQalVoUkY5VzN6bWJTakt4L2cKlYHzGnnjKZQpZzc7NdjrRsXum2tfcjwk
T45iSastj8gFQLbB3fIElsprJAgCPhu0jcWtbvgiFpESRlmThzP1wWf9DmgDNnHI
68IBPaM4Ru6PWBY6HTMQ4EsyzFrnuKj8ZM/RYF7fjOmKG/K1hYB7+iqwR3tlt1D2
6Cryn5qLU0Ou68nwnsXdFIcPEolVvMX4XsGrSaSnprNVF3hCW9vtYEdjJvIgKNUz
3xX+J3MfGIR+oSfYb6o81aA9F5xS2obbPaBIW04x9ZQ4ik20GiYt+gI2H3QTOp7z
+/Je1HIF2/biWwP7qgdbusAd+XFbwPs4wh/M3XEqiEVcY+MvshmWUbjShjYq0c0e
ySqF+ZPSw0NKg50O+avZeH1LxPXqshr2RHpGDNFGHaJRIKse0W1hNPZ5rj8daJj1
f8eIcfZ4fcIAgci3Je5PZHdErEnhU2LsvTEeGuINdNjiEpV+YqMEhZlKE2h0sdeF
oYRQt8enCCqFEizMTm1CQRcix7WYLx2CCJEbH8jnDlnlJnNRQ4utHA+q8c0ERndz
iDtgbjhktDgNRtXx/gvf9Fu1Jh4fHz2brFTIeuI27hy9OmtcNF5Z2U+86K3QkGyr
Dp3NFQUXlkv5NLDeCACbsqE99BBfczhliVFCeR1WaUtriNbXkzO17KDy7vI7XUwb
+V4OW7y5+2v4UQX4GbhViUSioxIfjil5NHXYIXIhlk2QB50odvbkfhfEboir0+vC
fx1+9SzZB+Krp+/29u+mN357OSRTWMkZephjUCPP42rOqe+WYFBVLQJ60JAHsyye
Vb9ge7FPCHHO7TmzD2a5rWU3u0Mzh5l8x0KoVoaP7PZnmQmFJ8TdRAGaMowH/Ej+
IiHbStLtMqLpRtHMou5+wC+oIJW6mgJCS8m+dJPG522xHpDnTmg3rHRax771i9SP
fpL9OPDcqCQABCU8iTL1K/iisj/1+0sjV3ojBZb6FTk14rrJyCes6BgVU46Yr19T
i52qXa5Pq0i1V4Md72ucws8Y7qaOjkNd/5Zrzy/7qOh7Iuv1fLo=
-----END AGE ENCRYPTED FILE-----

View file

@ -1,22 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzMEJ4N2R4bFlLR1JIdEVO
Vm93M0h3QmE2c05jRG1CaVJXamVrQWVtQVUwCml0b0xWdExQQ2oxd1p0ODBPcnJa
U1RQR080cHI2VGVmUWt2SWxHVGZrREkKLS0tIDdwMTZJWVQrZFFqSlpJT3Q5VDZz
MXJPWGs1enAvUjNmMC9MbitqREVhZzAK5TvmoMNf7PPPYRjTY/ysv6s6ryX8b/eK
6wuJRiWLEYUlB5cZrMRZuJMJF2v/zXdooyglEsd+cLMac0PEYb+RL6Ao9HZR1lS5
ZW482zkYS2WTOey2wp8kcqPeMIybWcbBXc1P9fE5+skLnVmmHicV2kH8ZJ2jksk+
95Mitr+RjUrVhYVP0pY6uNQex3As1OYaipBr/H9/VVM56t1lee8tREnpjWw4V22A
QbwQn0CHZAug1ZUkrERDAdV+1WLpNrtcADyoOGX1j1FG5UzQzEE4K++Al2QOawQL
YoTvEXvHMyz30zmToZmI6hLQWxp6mkYcSMbJVf472v2Nbt8NiGlU6fU6+cnnCQfw
FjykqTF1Lem+yWN+OigBVbSkZFGRMRhgHzdV53Px7qU6uivKbGHXyyp/nL4C1plM
pZnl5JSWt2ukgCKFWQGo+1ccHrUB5dBOJ/G01kmqvIk/eHMd/Qn2WYeMwKz3H7U0
DB7YDGRTo4j2lKjNUuLRf6zPng0jZ/HDXbgyjYU51R7CKS7alqPsa5d24xZ/iWpF
GYCAdMJXTWdqHj60K25F41Ym9B+dB/TUJ4uz+/ylgcoeVsBjESk22OZp1nRbJ+Ak
qC6gGuoZV9aOyrm3M00SlHOlkZzJT8ZElOTXYX4hpydCBZ5UTU9r8sjIsMTWV4FM
3e+tfG0pyF6zgy2q/X21mFBpZCwy8hgRoUHBtqS5n1+DgiFeasZbFB1tTW66Drz4
ojtOCgztU54V0LRZuTJJ7WfNDZ+LBWzbnZZfzACCe9llIkY1BbFMfN5BnCWi0zNW
7v4k+nZ+XfWXsQ3+pvAjsInDwvEcjLke/efiXfHEjQ7avsu4iRfApbEWfOazilax
uRPcvXGK30lZKPuaCPjhNmxZm7oh2+jsXSkrirx+rmTx+sLBqU+NXcDp2iZO8Eq8
ek1MGbyXi9EypJvYMs2eGbHona+YfnvP5ryZBDA8ZAP7qzKLBVrrVUej7NzD3byg
MXxBe8OOjxwhhAB+YK10jegte6SFS2sFIFLEe59kccM0qm40ZJSAOg==
-----END AGE ENCRYPTED FILE-----

View file

@ -1,22 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2SEFzdmNyTWdiSXpIZGhs
T2kxOXpXczc4VE9nWkNFbi9yelJvdmtVOEhVClVaWlZ0dUJLaXhMRCs1dW9MY1Nl
NUpNcGR3WW5vcG1tTCtTOXcwZEt0M1UKLS0tIHhvWDJDTFkzcWd2bjRoRDdzS2hs
RzBLdFZvWlc2VW1OczZOak9YMzlzZmcKARnp+EZvwPa2LvmGeI1EDaaVtroC6SKe
qEhhN3Oq8zX9jEIYJxGU49HHr+V9qS2e3v992alPdstejkuJA1sMBoEzI5UuJFDI
zZ4YUj6tJjzNQiW2L018jYfvywZRbCv55M3y63LTzHMsVIvWRcJYwf5KBDvJXK6g
Bivbxobm41KL6ftMqsPIShQwUmbitdIO2hw7ZxEQc+VXrGZeU2pU5oRSbAXxxY/p
F2OBm/mWfxrcmN7OvhjfQkp52mquK5bYCSBf41hipA+bHhRGajzzhRWuKHqaPB60
d8KEgPIDP673BAhUNH+PLkoar1b7SDX63OsMmHECkS+cdpuuXAIlm1OaTTEb5tUD
+DxXCD5W5jYQAEjNoihXgxRfXFS7ADUtn7m/xoTwAaTScZmJKXfCMFwP2aOdQFa2
eWOFFIo93+rpwFuSHNw2r2mEAd7UD3ctEWkpYfagaVT4kWJFa7aprBmi7hb3IPZa
L7KnnokXWZiVmMEuRz69eqJ5/PWM/097mg03E62bS0KHM5yz4QhD2t3ExwqdfR2g
5EYqDnvY0TtT+mJqW1SRNNOTD69Xrrud/j01GobTrDgkAZf8afUm1NXozgZJh+dl
RFqdyvbYtgmQ9VGuJyPgHlHmiCGgNuMJ6h6Q8xI+fOemvjDVZ0sOa/Upggl2Wi8+
RxbSXSw/SXBH0eOkP2Wi52U8cM6K5Q++YgG8lljYiGSwGqJ87hBSOYJme5qN5UVF
s1e2/OZEixtvtD7wFqZji699ZZwonqXWbP1g8/Wg9oOS0rFKKFpGnprMcbaZp3ac
4ioIpe5xbKyoB5phzWK1L2U6pVD7BdVSbx3S0KNvsvkQ2g9CjrsbkY/7YsKYnZMJ
CLw/paagNm/1RNJTtGi1lz6rPwsYNVE8ilq7QwbTrDUJRQaicywJpyx+uxv0FcA/
5lR1KBvURANX/8g4AOh1tD4nlHCnQXQ1w1miObJaayxuoEzvawhH6gxP3jMcfpXZ
BSZNelSQuTnErxhjtaIiWgM8ITVw7j+WigVZR080Ipl72xLA
-----END AGE ENCRYPTED FILE-----

View file

@ -1,15 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyQVYvNlBnd1VrTXdaOXov
RVV2dTBJWTRwSnIzNkdVUm5mTStNcnFRVW40CmhJNmpaa1NQV2FEd0xBa2RSMGdF
WnhWLzAzMFl5SFJzQ3FwS3dQZWU4NkEKLS0tIDBvWUJiN3BVVy9hc3M1VE9udEpR
OG1Bc1JmRjhYNm1PU2tHL1Vrcmp4WmMKUlnXIK32N1ckGjILWLehf1rBDwzlozWV
WZ6s1JAIFsqswNTDMbrSzK9rho8B5r0blIOz0ik4imtz3NE1kNj3D8F4VnGm0m7M
TljtehOxSXLJbF5S2Gf6G1j9td0t6H6XVLHlUC0qhZkF1H+dHJoBfiGpLLYxp569
V3B8XItIpmA1oJHNTcV7HZBbdZchR/jQTUBhogmwIWU5RVPwofoIiq/ID3ack9ZZ
4YhDgjqi9fjkdxQUChjS4Sl4bekWrafuGjKZixWGofV7nlYHMNWsI5x3Y0Y60lWD
WEZbSzwq4NgtRS4l/8G1F3In40OM5/TbbVIJYzmiwkisNw0kCApeb7EOtsDsTTxx
lu9lxUbORXUelVrmcyjmllqQJ8QsNnUnAdXlQ6WeLa4UaA4xRXEHZ1es2pAMMTm9
S0RXa3ZGXHwCmaU2Qz5JgDhmnRXfTsfMnv+jjtV1xohgT1Pkwv3uOLmgCnT4K4IH
lMGfIlwcTVtS+6tDJcOW4CbRET1hhXDXR+o6FzTGNSzQE5YuO8wCEoAZ3P/9aKQC
vT7ni7KA7WwJEWXTbw+cTy/qZa2b8vPTPKOFhdKXHyD5ArRj2yUKcOwdIQ==
-----END AGE ENCRYPTED FILE-----

View file

@ -1,77 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2dTJtOXhNTXRJSW5XaVk2
cVFrZlg1bkEvWk0zMEpVTnVIQXZtYWhlRmdVCkFOTDljY3l3dVF6eitzTTZEYk9T
L2V6cWJPQnRnaGRMMkI4Q0I4K1M2bFkKLS0tIEpDQ2hKYWVPS3hvbkt3NDJuTmpa
ZXgwa24wODVLZE1IRENYTXd4SGdXdVEK/4D4Bobna1iIX2ot9uMiyO4hE4mhs9mU
QK691AjAnY0DnOC7P+ZCjMFnA3PphfwXI5AEPMYW/hq0wpNjRZfhZm2vDT/IkSjR
H2knv/AW5WwERu2HxIHETGoQQlrAm+NANeca+OWF3+OFkO1+Mpsu5Dfyr3Txmz9Z
yG8INKwmunU5SqtdpRCg/YQmwylA6Nmmw8fjFREWD+eLxvuDmUYIGBUOfetrP78l
h1Vanx9zhj85J89qAkLFaQ8uZy7NezgIUe81L7+QY98H2wwnc279tvnv/vc3QLc1
hwH9D5Pdrq6KUNBv1pG5hItLbh1yY3ho5/vMWIMXHw5LxQsE2nLHkvXGhZXN8YyM
bR0BWMH6n1w5KQHR8nnHCuJsCuFC7KUoXAwaljbbbv/xO/+uAihJu3/2RrgMgA+y
dOUtNkl9VrvXll5frAAijZzgd/JgQk3OrJGlpCxamcbPjvKok8aYfqeJa+MVr3lU
akc7lJpBE54rsHw+wR844rgdve4x5z3sSQ1sMmThVu2VvDw+SqKGbcgSu0sdARgz
c/ktCxSbC3x6j2sVv4Eie+1mtkfky9pX6GKzfvrGb6sLXtHL+nwli1F3ahP3TNK3
7y8+57Ob6/XSGfxGdRe0ylMSXPCQ7NiU8fQAKyY92larkKpBZJfaoyrYwbPmTnPP
W2Y1WtXecKKvE6S0GToMOqKkESJQhQNj57zBSGF+CjPTtuKN/WafwQy2sL9H+XxJ
JLLh4DVfdcnbmz6Kh/+hcGQbpwHcW0Lm1ZOAi+VKgCe45oaUWM5h/D7xb6C4SbAh
IXlPewrk+6TqSUSoK4GLYEaFEC4i5x+1HlouNDHSoFacMrbEgZ3KooK+/+Rcsr1J
L4j1AG6EAaxd39XtffA3a4GsgcoeXmekg5V9b/MwwmXOTjdrq5cJCU5izrQFuFEw
faTi3OgQJJDLiKbaFNzLhfD6bf9gprKFDtjr/wLE7fxHGywPG6QDFo2ARQKfYiSd
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
-----END AGE ENCRYPTED FILE-----

View file

@ -1,22 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwekJ1R1Z6M0hLN2pESFBY
NW1BYjFPTjNKMEFaeFJsdWtzK2lnQkl3emdzCitrREJ3RGd4TWh0R25yaDRRd0pi
bDlrbG1ucDV2SXd5NklMeUx3K2F0Z0UKLS0tIDZTUjBYV1Q1TDh4RVJQUzlTUENS
YllMcXlQalVoUkY5VzN6bWJTakt4L2cKlYHzGnnjKZQpZzc7NdjrRsXum2tfcjwk
T45iSastj8gFQLbB3fIElsprJAgCPhu0jcWtbvgiFpESRlmThzP1wWf9DmgDNnHI
68IBPaM4Ru6PWBY6HTMQ4EsyzFrnuKj8ZM/RYF7fjOmKG/K1hYB7+iqwR3tlt1D2
6Cryn5qLU0Ou68nwnsXdFIcPEolVvMX4XsGrSaSnprNVF3hCW9vtYEdjJvIgKNUz
3xX+J3MfGIR+oSfYb6o81aA9F5xS2obbPaBIW04x9ZQ4ik20GiYt+gI2H3QTOp7z
+/Je1HIF2/biWwP7qgdbusAd+XFbwPs4wh/M3XEqiEVcY+MvshmWUbjShjYq0c0e
ySqF+ZPSw0NKg50O+avZeH1LxPXqshr2RHpGDNFGHaJRIKse0W1hNPZ5rj8daJj1
f8eIcfZ4fcIAgci3Je5PZHdErEnhU2LsvTEeGuINdNjiEpV+YqMEhZlKE2h0sdeF
oYRQt8enCCqFEizMTm1CQRcix7WYLx2CCJEbH8jnDlnlJnNRQ4utHA+q8c0ERndz
iDtgbjhktDgNRtXx/gvf9Fu1Jh4fHz2brFTIeuI27hy9OmtcNF5Z2U+86K3QkGyr
Dp3NFQUXlkv5NLDeCACbsqE99BBfczhliVFCeR1WaUtriNbXkzO17KDy7vI7XUwb
+V4OW7y5+2v4UQX4GbhViUSioxIfjil5NHXYIXIhlk2QB50odvbkfhfEboir0+vC
fx1+9SzZB+Krp+/29u+mN357OSRTWMkZephjUCPP42rOqe+WYFBVLQJ60JAHsyye
Vb9ge7FPCHHO7TmzD2a5rWU3u0Mzh5l8x0KoVoaP7PZnmQmFJ8TdRAGaMowH/Ej+
IiHbStLtMqLpRtHMou5+wC+oIJW6mgJCS8m+dJPG522xHpDnTmg3rHRax771i9SP
fpL9OPDcqCQABCU8iTL1K/iisj/1+0sjV3ojBZb6FTk14rrJyCes6BgVU46Yr19T
i52qXa5Pq0i1V4Md72ucws8Y7qaOjkNd/5Zrzy/7qOh7Iuv1fLo=
-----END AGE ENCRYPTED FILE-----

View file

@ -1,77 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2dTJtOXhNTXRJSW5XaVk2
cVFrZlg1bkEvWk0zMEpVTnVIQXZtYWhlRmdVCkFOTDljY3l3dVF6eitzTTZEYk9T
L2V6cWJPQnRnaGRMMkI4Q0I4K1M2bFkKLS0tIEpDQ2hKYWVPS3hvbkt3NDJuTmpa
ZXgwa24wODVLZE1IRENYTXd4SGdXdVEK/4D4Bobna1iIX2ot9uMiyO4hE4mhs9mU
QK691AjAnY0DnOC7P+ZCjMFnA3PphfwXI5AEPMYW/hq0wpNjRZfhZm2vDT/IkSjR
H2knv/AW5WwERu2HxIHETGoQQlrAm+NANeca+OWF3+OFkO1+Mpsu5Dfyr3Txmz9Z
yG8INKwmunU5SqtdpRCg/YQmwylA6Nmmw8fjFREWD+eLxvuDmUYIGBUOfetrP78l
h1Vanx9zhj85J89qAkLFaQ8uZy7NezgIUe81L7+QY98H2wwnc279tvnv/vc3QLc1
hwH9D5Pdrq6KUNBv1pG5hItLbh1yY3ho5/vMWIMXHw5LxQsE2nLHkvXGhZXN8YyM
bR0BWMH6n1w5KQHR8nnHCuJsCuFC7KUoXAwaljbbbv/xO/+uAihJu3/2RrgMgA+y
dOUtNkl9VrvXll5frAAijZzgd/JgQk3OrJGlpCxamcbPjvKok8aYfqeJa+MVr3lU
akc7lJpBE54rsHw+wR844rgdve4x5z3sSQ1sMmThVu2VvDw+SqKGbcgSu0sdARgz
c/ktCxSbC3x6j2sVv4Eie+1mtkfky9pX6GKzfvrGb6sLXtHL+nwli1F3ahP3TNK3
7y8+57Ob6/XSGfxGdRe0ylMSXPCQ7NiU8fQAKyY92larkKpBZJfaoyrYwbPmTnPP
W2Y1WtXecKKvE6S0GToMOqKkESJQhQNj57zBSGF+CjPTtuKN/WafwQy2sL9H+XxJ
JLLh4DVfdcnbmz6Kh/+hcGQbpwHcW0Lm1ZOAi+VKgCe45oaUWM5h/D7xb6C4SbAh
IXlPewrk+6TqSUSoK4GLYEaFEC4i5x+1HlouNDHSoFacMrbEgZ3KooK+/+Rcsr1J
L4j1AG6EAaxd39XtffA3a4GsgcoeXmekg5V9b/MwwmXOTjdrq5cJCU5izrQFuFEw
faTi3OgQJJDLiKbaFNzLhfD6bf9gprKFDtjr/wLE7fxHGywPG6QDFo2ARQKfYiSd
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
-----END AGE ENCRYPTED FILE-----

View file

@ -1,74 +0,0 @@
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4aVhyNDdpNERyeS9nYkRG
STB2YUV4Rm8yL1VJRGVYZW11MW1iWXlmdWk0CmJWeUNlcEdlNVhMKzduZFNCSFpo
U1lJVzlKZ09OU0lmdytLZ0FtVzZCd2sKLS0tIG5IM0tzclJuTDVWYWVYak9JL3kx
emYwZEhpNTdlbkRyc2VadEtQbGpvZ2MKIfg4lE/XfD3NVUr+q7KfPUL0mxMxf6Jr
vMSe3nySaXOeHep5HCCFNzIW3UUk+sZml0Y3nZNlIm5ZTCbzG0nCT+R4aYzwFUmq
W22IlXNlTd+4KuGS0UODztBivY4dU2LkKsAZFboYD7RYxhKShSygab9TkJJ18tEU
O8Oqewnh4t7cnos0NegazQ0bWcv9k1SFT3AfovBRIqMfBKbn6Lufgy3k5qLPWOs3
GuWEtr8lHVeHiFo+g3WrKUc1AEXsYAIyO+0ry05VG0svVAD9krTxCyB0x55cymuy
hSWPNpu0+7cXIsMAwO6EM7TQgM/CDhYDcXu84Kz7iZp1N0QY7X0q7nvc6w/mNRnd
XxezMgJSGFhZ9tktWwbEG5hbzk+BtccLnjLvzr939U5HjoALh+SEu3HJmslpifmr
AHiRxV3/XKTbJDhHqCEXkWiR3m38czIkJrtvOp3VxCUEBXl+xu4kDBu57/0tZqmq
DHo87J3Jj+TmvJqRly4xM+Q2aHfzCxGFMNriSEvAvlMTXBnklFEoSQM+1VR33sVQ
eeisQzwgi9koAwilM+zUbYjcQaZ4AUneUdYUcz6V1gEkSDG8RWBelywmDsSX5srj
r1tvEG95poNOYD/mXRyG9DEUG4RBdzrrAr2/NTEYOrsPATabp/HCdqnmld0nHvkl
LTizBKa1JeQ7Ldw5zoyS5qqzVV/xG0Gs5f6pyLc/oMLV21De5Ypt7i4+Oipxm1mE
gf9eJKjFd1TcfwqiWr549q7sot1ZMCyInutEmNk+c8KlfBDGal1OcvoQaBlMWbus
ozd3hEGOLdwn/PmgGKg3nLOl3HrXYOd+v72zSb0ke1pnpdL0F1QdmL5l+qaJ3VHS
ynFX1Lv/Se9lswktB2z0zjXXpw7qxvv2aP9kEy8vmJbYeYUuYgSczB1CO5VYHTcD
OVoGYj/ACICqDzRaAnAtLjiK+O+3PVAAe2Gwf/qe5KWDTryh/bjNzw4RQdpaipms
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
-----END AGE ENCRYPTED FILE-----

View file

@ -1,49 +0,0 @@
### Modules ###
# Sets sane Zsh built-in environment options.
zmodule environment
# Provides handy git aliases and functions.
zmodule git
# Applies correct bindkeys for input events.
zmodule input
# Sets a custom terminal title.
zmodule termtitle
# Utility aliases and functions. Adds colour to ls, grep and less.
zmodule utility
### Prompt ###
# Exposes to prompts how long the last command took to execute, used by asciiship.
zmodule duration-info
# Exposes git repository status information to prompts, used by asciiship.
zmodule git-info
# A heavily reduced, ASCII-only version of the Spaceship and Starship prompts.
zmodule asciiship
### Completion ###
# Additional completion definitions for Zsh.
zmodule zsh-users/zsh-completions --fpath src
# Enables and configures smart and extensive tab completion.
# completion must be sourced after all modules that add completion definitions.
zmodule completion
### Modules that must be initialized last ###
# Fish-like syntax highlighting for Zsh.
# zsh-users/zsh-syntax-highlighting must be sourced after completion
zmodule zsh-users/zsh-syntax-highlighting
# Fish-like history search (up arrow) for Zsh.
# zsh-users/zsh-history-substring-search must be sourced after zsh-users/zsh-syntax-highlighting
zmodule zsh-users/zsh-history-substring-search
# Fish-like autosuggestions for Zsh.
zmodule zsh-users/zsh-autosuggestions

View file

@ -1,60 +0,0 @@
#!/bin/sh
set -e
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv)"
brew install \
age \
bat \
bzip2 \
cmus \
curl \
direnv \
exercism \
fzf \
gh \
git \
glow \
go \
golangci-lint \
hammerspoon \
helix \
inlyne \
jj \
kitty \
lua-language-server \
luarocks \
marksman \
nvm \
presenterm \
ripgrep \
sqlite \
tree \
watch \
wget \
xz \
yazi \
zellij \
zk \
zlib
brew install --cask \
kap
export NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
nvm install 22
nvm use 22
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install --force --python python3.12 aider-chat@latest
{{ if eq .hosttype "personal" -}}
brew install \
love \
mingw-w64 \
pandoc
{{ else if eq .hosttype "work" -}}
{{ join .chezmoi.sourceDir "encrypted_dot_work_packages.age" | include | decrypt -}}
{{ end }}

View file

@ -1,9 +0,0 @@
#!/bin/sh
set -e
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o /tmp/rustup.sh
chmod u+x /tmp/rustup.sh
/tmp/rustup.sh -y --no-modify-path
. $HOME/.cargo/env
rustup update stable

View file

@ -1,13 +0,0 @@
#!/bin/sh
set -e
if [ ! -d $HOME/.src/gwar ] ; then
git clone ssh://git@pingo.thermokar.st/gwar $HOME/.src/gwar
fi
cd $HOME/.src/gwar
# belt-and-suspenders
. $HOME/.cargo/env
cargo build --release
cp target/release/gwar ~/bin

15
install Executable file
View file

@ -0,0 +1,15 @@
#!/usr/bin/env bash
set -e
CONFIG="install.conf.yaml"
DOTBOT_DIR="dotbot"
DOTBOT_BIN="bin/dotbot"
BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "${BASEDIR}"
git -C "${DOTBOT_DIR}" submodule sync --quiet --recursive
git submodule update --init --recursive "${DOTBOT_DIR}"
"${BASEDIR}/${DOTBOT_DIR}/${DOTBOT_BIN}" -d "${BASEDIR}" -c "${CONFIG}" "${@}"

41
install.conf.yaml Normal file
View file

@ -0,0 +1,41 @@
- clean:
- '~'
- create:
- ~/projects/qiime2
- ~/projects/qiime2/data/moving-pictures
- ~/projects/mds
- ~/projects/personal
- ~/desk
- ~/files
- link:
~/.tmux.conf: tmux.conf
~/.gitconfig: git/gitconfig
~/.gitignore_global: git/gitignore_global
~/.npmrc: npmrc
~/.psqlrc: psqlrc
~/.vimrc: vimrc
~/.zpreztorc: zsh/zpreztorc
~/.zlogin: zsh/zlogin
~/.zlogout: zsh/zlogout
~/.zprofile: zsh/zprofile
~/.zshenv: zsh/zshenv
~/.zshrc: zsh/zshrc
~/Library/Application Support/Code/User/settings.json:
create: true
path: vscode/settings.json
~/Library/Application Support/Code/User/keybindings.json:
create: true
path: vscode/keybindings.json
~/Library/Application Support/Code/User/tasks.json:
create: true
path: vscode/tasks.json
~/qiime2-1.code-workspace: vscode/qiime2-1.code-workspace
~/qiime2-2.code-workspace: vscode/qiime2-2.code-workspace
~/qiime2-3.code-workspace: vscode/qiime2-3.code-workspace
~/mds.code-workspace: vscode/mds.code-workspace
~/personal.code-workspace: vscode/personal.code-workspace
~/.config/kak/kakrc:
create: true
path: kakrc

36
kakrc Normal file
View file

@ -0,0 +1,36 @@
# inspired by https://gist.github.com/daboross/ce6a5a9f8d14bd4974c5f43b90dfdfaa
# line numbers
add-highlighter global/ number-lines
# TODO: do I _have_ to use rgb here?
set-face global LineNumbers rgb:707070,default
# helper popups
set -add global autoinfo normal
set global ui_options ncurses_assistant=off
set global autowrap_fmtcmd 'fmt -w %c'
# global: wrap to 100 characters (unless FT override, below)
add-highlighter global/ wrap -width 101 -indent -word
set global autowrap_column 101
# global: 4 space indents (unless FT override, below)
set global tabstop 4
hook global InsertChar \t %{ exec -draft -itersel h@ } -group kakrc-replace-tabs-with-spaces
#### FT overrides ####
hook global WinSetOption filetype=rust %{
set buffer formatcmd 'rustfmt'
set buffer tabstop 4
set buffer indentwidth 4
add-highlighter buffer/ wrap -word -width 120
set buffer autowrap_column 120
}
hook global WinSetOption filetype=python %{
set buffer tabstop 4
set buffer indentwidth 4
add-highlighter buffer/ wrap -word -width 79
set buffer autowrap_column 79
}

44
mouse.xml Normal file
View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<vid>1390</vid>
<pid>254</pid>
<select_profile>0</select_profile>
<profile>
<profname>default</profname>
<lbutton>1</lbutton>
<rbutton>2</rbutton>
<tbutton>5</tbutton>
<button4>41</button4>
<button5>41</button5>
<tiltleft>39</tiltleft>
<tiltright>40</tiltright>
<scrolls>5</scrolls>
<hlotate>5</hlotate>
<hspeed>5</hspeed>
<hcount>1</hcount>
<button6>33</button6>
<button7>34</button7>
<button8>36</button8>
<lbutton_etcKey_key1>0</lbutton_etcKey_key1>
<lbutton_etcKey_key2>0</lbutton_etcKey_key2>
<rbutton_etcKey_key1>0</rbutton_etcKey_key1>
<rbutton_etcKey_key2>0</rbutton_etcKey_key2>
<tbutton_etcKey_key1>0</tbutton_etcKey_key1>
<tbutton_etcKey_key2>0</tbutton_etcKey_key2>
<button4_etcKey_key1>1</button4_etcKey_key1>
<button4_etcKey_key2>73</button4_etcKey_key2>
<button5_etcKey_key1>1</button5_etcKey_key1>
<button5_etcKey_key2>72</button5_etcKey_key2>
<tiltleft_etcKey_key1>0</tiltleft_etcKey_key1>
<tiltleft_etcKey_key2>0</tiltleft_etcKey_key2>
<tiltright_etcKey_key1>0</tiltright_etcKey_key1>
<tiltright_etcKey_key2>0</tiltright_etcKey_key2>
<button6_etcKey_key1>0</button6_etcKey_key1>
<button6_etcKey_key2>0</button6_etcKey_key2>
<button7_etcKey_key1>0</button7_etcKey_key1>
<button7_etcKey_key2>0</button7_etcKey_key2>
<button8_etcKey_key1>0</button8_etcKey_key1>
<button8_etcKey_key2>0</button8_etcKey_key2>
<dispGesture>1</dispGesture>
</profile>
</data>

1
npmrc Normal file
View file

@ -0,0 +1 @@
prefix=~/.npm-packages

Some files were not shown because too many files have changed in this diff Show more