Compare commits

..

11 Commits

Author SHA1 Message Date
graham 229ff7dea0 2026-05-13 2026-05-13 20:09:01 -04:00
graham 967565c80b 2026-02-11 2026-02-11 09:38:52 -05:00
graham 4361c5f17b 2026-02-04 2026-02-04 13:56:02 -05:00
graham d56aba7823 2026-02-04 2026-02-04 12:12:29 -05:00
graham 4956885496 2026-01-30 2026-01-30 10:28:02 -05:00
graham 223616e1ec 2025-12-26 2025-12-26 17:45:28 -05:00
graham eef10fc372 2025-12-26 2025-12-26 13:02:15 -05:00
graham c6364da38f 2025-12-26 2025-12-26 12:56:45 -05:00
graham d0275c334b 2025-12-15 2025-12-15 18:04:28 -05:00
graham ed1504aff0 2025-12-05 2025-12-05 16:23:16 -05:00
graham d171c94478 2025-10-14 2025-10-14 18:56:06 -04:00
20 changed files with 1422 additions and 139 deletions
+98 -39
View File
@@ -2,40 +2,56 @@ tap "charmbracelet/tap"
tap "dotenvx/brew" tap "dotenvx/brew"
tap "ghall89/tap" tap "ghall89/tap"
tap "marsanne/cask" tap "marsanne/cask"
tap "oven-sh/bun" tap "simonbs/wut", "https://github.com/simonbs/wut.git"
brew "jq" tap "tw93/tap"
brew "ansiweather" brew "age"
brew "xz" brew "xz"
brew "apfel"
brew "atuin" brew "atuin"
brew "autoconf" brew "autoconf"
brew "automake" brew "automake"
brew "bazel" brew "bazel"
brew "bchunk" brew "bchunk"
brew "openssl@3"
brew "bento4"
brew "btop" brew "btop"
brew "coreutils"
brew "cask"
brew "cloc" brew "cloc"
brew "libyaml" brew "libyaml"
brew "openssl@3"
brew "cocoapods" brew "cocoapods"
brew "coreutils" brew "create-dmg"
brew "csvkit" brew "csvkit"
brew "deno"
brew "eslint"
brew "exiv2" brew "exiv2"
brew "eza" brew "eza"
brew "fastfetch"
brew "fd"
brew "ffmpeg" brew "ffmpeg"
brew "fish"
brew "flyctl" brew "flyctl"
brew "fresh-editor"
brew "fzf" brew "fzf"
brew "gamdl"
brew "ggc" brew "ggc"
brew "gh" brew "gh"
brew "git" brew "git"
brew "git-extras"
brew "git-split-diffs" brew "git-split-diffs"
brew "gitmoji" brew "gitmoji"
brew "gitui"
brew "glow" brew "glow"
brew "gnupg" brew "gnupg"
brew "go" brew "go"
brew "go-task"
brew "gum" brew "gum"
brew "helix" brew "helix"
brew "icu4c@76" brew "icu4c@76"
brew "libheif" brew "libheif"
brew "imagemagick" brew "imagemagick"
brew "jq"
brew "kew"
brew "lazygit" brew "lazygit"
brew "libffi" brew "libffi"
brew "loc" brew "loc"
@@ -44,81 +60,104 @@ brew "man2html"
brew "mas" brew "mas"
brew "micro" brew "micro"
brew "mint" brew "mint"
brew "mistral-vibe"
brew "nvm" brew "nvm"
brew "oh-my-posh" brew "oh-my-posh"
brew "ollama"
brew "openssl@1.1" brew "openssl@1.1"
brew "pandoc" brew "pandoc"
brew "parallel" brew "parallel"
brew "pkgconf" brew "pkgconf"
brew "pnpm" brew "python@3.10"
brew "ripgrep" brew "ripgrep"
brew "rubyfmt"
brew "rust" brew "rust"
brew "rust-analyzer"
brew "sf-pwgen" brew "sf-pwgen"
brew "sops"
brew "speedtest-cli" brew "speedtest-cli"
brew "superfile"
brew "swift-format" brew "swift-format"
brew "swiftdraw"
brew "swiftlint"
brew "tea"
brew "telnet" brew "telnet"
brew "thefuck" brew "thefuck"
brew "toot" brew "toot"
brew "trash"
brew "typst"
brew "vapor" brew "vapor"
brew "vlang"
brew "watchman" brew "watchman"
brew "wget" brew "wget"
brew "yarn"
brew "yazi"
brew "yt-dlp" brew "yt-dlp"
brew "zig" brew "zig"
brew "zlib" brew "zlib"
brew "zls"
brew "zoxide" brew "zoxide"
brew "charmbracelet/tap/crush"
brew "dotenvx/brew/dotenvx" brew "dotenvx/brew/dotenvx"
brew "oven-sh/bun/bun" brew "simonbs/wut/wut"
brew "tw93/tap/mole"
cask "affinity"
cask "airbuddy" cask "airbuddy"
cask "alfred" cask "alfred"
cask "appflowy" cask "appflowy"
cask "applite"
cask "arq" cask "arq"
cask "autodock"
cask "bbedit" cask "bbedit"
cask "bettershot"
cask "butterkit"
cask "claude-code"
cask "coderabbit" cask "coderabbit"
cask "cog-app" cask "codex"
cask "contexts" cask "contexts"
cask "cork" cask "cork"
cask "daisydisk" cask "daisydisk"
cask "devcleaner"
cask "discord"
cask "ea"
cask "equinox"
cask "find-any-file"
cask "fork" cask "fork"
cask "forklift"
cask "gb-studio"
cask "ghostty" cask "ghostty"
cask "gog-galaxy" cask "gog-galaxy"
cask "gram"
cask "hazel" cask "hazel"
cask "helium-browser"
cask "iina" cask "iina"
cask "imageoptim" cask "imageoptim"
cask "istat-menus"
cask "jordanbaird-ice" cask "jordanbaird-ice"
cask "keka" cask "keka"
cask "key-codes"
cask "keyboardcleantool" cask "keyboardcleantool"
cask "keystash" cask "ghall89/tap/keystash"
cask "knockknock"
cask "lulu"
cask "mac-mouse-fix" cask "mac-mouse-fix"
cask "mactracker"
cask "markedit"
cask "mullvad-vpn"
cask "musicbrainz-picard"
cask "nova" cask "nova"
cask "onyx@beta" cask "orbstack"
cask "openemu" cask "orion"
cask "paletro" cask "paletro"
cask "pearcleaner" cask "postgres-app"
cask "postgres-unofficial"
cask "qlmarkdown" cask "qlmarkdown"
cask "quicklook-json" cask "rapidapi"
cask "raycast"
cask "rectangle-pro" cask "rectangle-pro"
cask "rocket" cask "rocket"
cask "siphon" cask "slack"
cask "soulseek"
cask "spamsieve" cask "spamsieve"
cask "steam" cask "steam"
cask "swift-shift" cask "swift-shift"
cask "swiftformat-for-xcode" cask "sync"
cask "tableplus" cask "tableplus"
cask "tic80" cask "thaw"
cask "tunnelblick" cask "unclack"
cask "vanilla" cask "vscodium"
cask "visual-studio-code" cask "whatsapp"
cask "vivaldi" cask "windowkeys"
cask "xscope" cask "xscope"
cask "zed" cask "zed"
cask "zen" cask "zen"
@@ -129,49 +168,56 @@ mas "Affinity Photo 2", id: 1616822987
mas "Anybox", id: 1593408455 mas "Anybox", id: 1593408455
mas "Bakery", id: 1575220747 mas "Bakery", id: 1575220747
mas "Baking Soda", id: 1601151613 mas "Baking Soda", id: 1601151613
mas "Balatro", id: 6502451661
mas "Battery Indicator", id: 1206020918 mas "Battery Indicator", id: 1206020918
mas "Bear", id: 1091189122 mas "Bear", id: 1091189122
mas "brrr", id: 6755617665
mas "Codye", id: 1516894961 mas "Codye", id: 1516894961
mas "Collections", id: 1568395334 mas "Collections", id: 1568395334
mas "Color Picker", id: 1545870783 mas "Color Picker", id: 1545870783
mas "Coppice", id: 6741889046
mas "Dato", id: 1470584107 mas "Dato", id: 1470584107
mas "DevCleaner", id: 1388020431 mas "DevCleaner", id: 1388020431
mas "Developer", id: 640199958 mas "Developer", id: 640199958
mas "Dice by PCalc", id: 1479250666 mas "Dice by PCalc", id: 1479250666
mas "Dropover", id: 1355679052 mas "Dropover", id: 1355679052
mas "Equinox", id: 1591510203
mas "Expenses", id: 1492055171 mas "Expenses", id: 1492055171
mas "Find Any File", id: 0 mas "Find Any File", id: 402569179
mas "Folder Quick Look", id: 6753110395 mas "Folder Quick Look", id: 6753110395
mas "Front and Center", id: 1493996622 mas "Front and Center", id: 1493996622
mas "Gifski", id: 1351639930 mas "Gifski", id: 1351639930
mas "HEIC Converter", id: 1294126402 mas "HEIC Converter", id: 1294126402
mas "HTTPBot", id: 1232603544
mas "Ice Cubes", id: 6444915884 mas "Ice Cubes", id: 6444915884
mas "Interactful", id: 1528095640 mas "Interactful", id: 1528095640
mas "Ivory", id: 6444602274 mas "Ivory", id: 6444602274
mas "JSON Peep", id: 1458969831 mas "JSON Peep", id: 1458969831
mas "Key Codes", id: 414568915 mas "Key Codes", id: 414568915
mas "Keynote", id: 409183694 mas "Keynote", id: 361285480
mas "LiquidFetch", id: 6757637185
mas "Little Snitch Mini", id: 1629008763
mas "Lungo", id: 1263070803 mas "Lungo", id: 1263070803
mas "Mactracker", id: 430255202 mas "Mactracker", id: 430255202
mas "Numbers", id: 409203825 mas "Mockup", id: 1527554407
mas "Numbers", id: 361304891
mas "Online Check", id: 6504709660 mas "Online Check", id: 6504709660
mas "Page Screenshot for Safari", id: 1472715727 mas "Page Screenshot for Safari", id: 1472715727
mas "Pages", id: 409201541 mas "Pages", id: 361309726
mas "Parcel", id: 375589283 mas "Parcel", id: 375589283
mas "Pastel", id: 413897608 mas "Pastel", id: 413897608
mas "Pixelmator Pro", id: 6746662575
mas "Pixelmator Pro", id: 1289583905
mas "Pixen", id: 525180431 mas "Pixen", id: 525180431
mas "Pocket City 2", id: 6742559886 mas "Pocket City 2", id: 6742559886
mas "Pure Paste", id: 1611378436 mas "Pure Paste", id: 1611378436
mas "Raycast Companion", id: 6738274497
mas "Reeder", id: 6475002485 mas "Reeder", id: 6475002485
mas "Shareful", id: 1522267256 mas "Shareful", id: 1522267256
mas "Sleeve", id: 1606145041 mas "Sleeve", id: 1606145041
mas "Snippety", id: 1530751461 mas "Snippety", id: 1530751461
mas "Soulver 3", id: 1508732804 mas "Soulver 3", id: 1508732804
mas "Tapestry", id: 6448078074
mas "TestFlight", id: 899247664 mas "TestFlight", id: 899247664
mas "Text Workflow", id: 1600520682 mas "Text Workflow", id: 1600520682
mas "Textastic", id: 572491815
mas "Tot", id: 1491071483 mas "Tot", id: 1491071483
mas "Transporter", id: 1450874784 mas "Transporter", id: 1450874784
mas "uBlock Origin Lite", id: 6745342698 mas "uBlock Origin Lite", id: 6745342698
@@ -179,26 +225,39 @@ mas "Velja", id: 1607635845
mas "Vinegar", id: 1591303229 mas "Vinegar", id: 1591303229
mas "WhatsApp", id: 310633997 mas "WhatsApp", id: 310633997
mas "WorldWideWeb", id: 1621370168 mas "WorldWideWeb", id: 1621370168
vscode "akamud.vscode-theme-onelight"
vscode "astro-build.astro-vscode" vscode "astro-build.astro-vscode"
vscode "biomejs.biome"
vscode "bradlc.vscode-tailwindcss" vscode "bradlc.vscode-tailwindcss"
vscode "christian-kohler.npm-intellisense" vscode "christian-kohler.npm-intellisense"
vscode "codeliger.pirate-map"
vscode "csstools.postcss" vscode "csstools.postcss"
vscode "dbaeumer.vscode-eslint" vscode "dbaeumer.vscode-eslint"
vscode "dnicolson.binary-plist"
vscode "esbenp.prettier-vscode" vscode "esbenp.prettier-vscode"
vscode "golang.go" vscode "golang.go"
vscode "icrawl.discord-vscode"
vscode "littensy.charmed-icons" vscode "littensy.charmed-icons"
vscode "lkytal.flatui" vscode "lkytal.flatui"
vscode "llvm-vs-code-extensions.lldb-dap" vscode "llvm-vs-code-extensions.lldb-dap"
vscode "mechatroner.rainbow-csv" vscode "mechatroner.rainbow-csv"
vscode "ms-vscode.makefile-tools"
vscode "orta.vscode-jest" vscode "orta.vscode-jest"
vscode "oven.bun-vscode" vscode "oven.bun-vscode"
vscode "pollywoggames.pico8-ls"
vscode "prisma.prisma" vscode "prisma.prisma"
vscode "redhat.vscode-xml" vscode "redhat.vscode-xml"
vscode "ripplejs.ripple-vscode-plugin" vscode "ripplejs.ripple-vscode-plugin"
vscode "rust-lang.rust-analyzer" vscode "rust-lang.rust-analyzer"
vscode "shopify.ruby-lsp" vscode "shopify.ruby-lsp"
vscode "svelte.svelte-vscode"
vscode "swiftlang.swift-vscode" vscode "swiftlang.swift-vscode"
vscode "tamasfe.even-better-toml" vscode "tamasfe.even-better-toml"
vscode "vue.volar" vscode "task.vscode-task"
vscode "teabyii.ayu"
vscode "vknabel.vscode-swiftlint"
vscode "ziglang.vscode-zig" vscode "ziglang.vscode-zig"
go "github.com/go-delve/delve/cmd/dlv"
go "github.com/golangci/golangci-lint/cmd/golangci-lint"
go "golang.org/x/tools/gopls"
go "github.com/mgechev/revive"
go "honnef.co/go/tools/cmd/staticcheck"
+58
View File
@@ -0,0 +1,58 @@
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'EOF'
Usage:
codex_guarded.sh [--cwd DIR] [--sandbox MODE] [--approval POLICY] [--] [codex args...]
Defaults:
--approval never
--sandbox read-only
--cwd current working directory
Description:
Launch Codex with deterministic non-interactive safety defaults.
EOF
}
CWD="$(pwd)"
SANDBOX="read-only"
APPROVAL="never"
FORWARD_ARGS=()
while [[ $# -gt 0 ]]; do
case "$1" in
--cwd)
CWD="$2"
shift 2
;;
--sandbox)
SANDBOX="$2"
shift 2
;;
--approval)
APPROVAL="$2"
shift 2
;;
-h|--help)
usage
exit 0
;;
--)
shift
FORWARD_ARGS+=("$@")
break
;;
*)
FORWARD_ARGS+=("$1")
shift
;;
esac
done
if [[ ${#FORWARD_ARGS[@]} -gt 0 ]]; then
exec codex -a "$APPROVAL" -s "$SANDBOX" -C "$CWD" "${FORWARD_ARGS[@]}"
else
exec codex -a "$APPROVAL" -s "$SANDBOX" -C "$CWD"
fi
+62
View File
@@ -0,0 +1,62 @@
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<'EOF'
Usage:
guard_apply_patch.sh PATCH_FILE [--cwd DIR] [--allow-deletes] [--max-files N] [--max-changed-lines N] [--allow-path-prefix PREFIX ...]
Description:
Validates a patch and applies it only if policy checks pass.
EOF
}
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || "${#}" -lt 1 ]]; then
usage
exit 0
fi
PATCH_FILE="$1"
shift
CWD="$(pwd)"
VALIDATOR_ARGS=()
while [[ $# -gt 0 ]]; do
case "$1" in
--cwd)
CWD="$2"
shift 2
;;
--allow-deletes)
VALIDATOR_ARGS+=("$1")
shift
;;
--max-files|--max-changed-lines|--allow-path-prefix)
VALIDATOR_ARGS+=("$1" "$2")
shift 2
;;
*)
VALIDATOR_ARGS+=("$1")
shift
;;
esac
done
if [[ ! -f "$PATCH_FILE" ]]; then
echo "Patch file not found: $PATCH_FILE" >&2
exit 1
fi
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VALIDATOR="$SCRIPT_DIR/guard_validate_patch.py"
python3 "$VALIDATOR" "$PATCH_FILE" --cwd "$CWD" "${VALIDATOR_ARGS[@]}"
echo "Validation passed. Running dry-run apply..."
patch -p1 --dry-run -d "$CWD" < "$PATCH_FILE"
echo "Applying patch..."
patch -p1 -d "$CWD" < "$PATCH_FILE"
echo "Done."
+166
View File
@@ -0,0 +1,166 @@
#!/usr/bin/env python3
"""
Generic patch validator scoped to a target working directory.
"""
from __future__ import annotations
import argparse
import pathlib
import re
import sys
DEFAULT_FORBIDDEN_BASENAMES = {
"Package.resolved",
"Podfile.lock",
"package-lock.json",
"yarn.lock",
"pnpm-lock.yaml",
"Cargo.lock",
"Gemfile.lock",
}
DEFAULT_FORBIDDEN_SUFFIXES = {
".xcconfig",
}
DEFAULT_FORBIDDEN_PATH_PATTERNS = (
re.compile(r"(^|/)\.git(/|$)"),
re.compile(r"(^|/)Info\.plist$"),
re.compile(r"(^|/)project\.pbxproj$"),
)
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Validate unified diff patch by policy.")
parser.add_argument("patch_file", type=pathlib.Path)
parser.add_argument("--cwd", type=pathlib.Path, default=pathlib.Path.cwd())
parser.add_argument("--max-files", type=int, default=12)
parser.add_argument("--max-changed-lines", type=int, default=2000)
parser.add_argument("--allow-deletes", action="store_true")
parser.add_argument(
"--allow-path-prefix",
action="append",
default=[],
help="Allowed path prefix relative to --cwd. Repeatable. Defaults to all paths under --cwd.",
)
return parser.parse_args()
def fail(message: str) -> None:
print(f"FAIL: {message}", file=sys.stderr)
raise SystemExit(1)
def normalize_patch_path(raw: str) -> str | None:
raw = raw.strip()
if raw == "/dev/null":
return None
if raw.startswith("a/") or raw.startswith("b/"):
raw = raw[2:]
return raw
def is_safe_relative_path(path: str) -> bool:
p = pathlib.PurePosixPath(path)
if p.is_absolute():
return False
if ".." in p.parts:
return False
if path.startswith("./"):
return False
return True
def main() -> None:
args = parse_args()
if not args.patch_file.exists():
fail(f"patch file not found: {args.patch_file}")
cwd = args.cwd.resolve()
if not cwd.exists() or not cwd.is_dir():
fail(f"--cwd is not a directory: {cwd}")
text = args.patch_file.read_text(encoding="utf-8")
lines = text.splitlines()
added_lines = 0
removed_lines = 0
touched_files: list[str] = []
deleted_files: list[str] = []
for line in lines:
if line.startswith("+++ "):
path = normalize_patch_path(line[4:])
if path:
touched_files.append(path)
continue
if line.startswith("+") and not line.startswith("+++"):
added_lines += 1
continue
if line.startswith("-") and not line.startswith("---"):
removed_lines += 1
for match in re.finditer(r"^--- (.+)\n\+\+\+ (.+)$", text, flags=re.MULTILINE):
before = normalize_patch_path(match.group(1))
after = normalize_patch_path(match.group(2))
if before and after is None:
deleted_files.append(before)
unique_files = sorted(set(touched_files + deleted_files))
if not unique_files:
fail("no file changes detected")
if len(unique_files) > args.max_files:
fail(f"too many files changed: {len(unique_files)} > {args.max_files}")
changed_line_count = added_lines + removed_lines
if changed_line_count > args.max_changed_lines:
fail(
f"too many changed lines: {changed_line_count} > {args.max_changed_lines}"
)
allowed_prefixes = [p.strip("/") for p in args.allow_path_prefix if p.strip("/")]
for rel_path in unique_files:
if not is_safe_relative_path(rel_path):
fail(f"unsafe path in patch: {rel_path}")
if allowed_prefixes and not any(
rel_path == prefix or rel_path.startswith(prefix + "/")
for prefix in allowed_prefixes
):
fail(f"path not in allowed prefixes: {rel_path}")
basename = pathlib.PurePosixPath(rel_path).name
if basename in DEFAULT_FORBIDDEN_BASENAMES:
fail(f"forbidden file basename: {rel_path}")
if any(rel_path.endswith(s) for s in DEFAULT_FORBIDDEN_SUFFIXES):
fail(f"forbidden file suffix: {rel_path}")
if any(pattern.search(rel_path) for pattern in DEFAULT_FORBIDDEN_PATH_PATTERNS):
fail(f"forbidden file path: {rel_path}")
target_path = cwd / rel_path
try:
target_path.resolve().relative_to(cwd)
except ValueError:
fail(f"path escapes cwd scope: {rel_path}")
if deleted_files and not args.allow_deletes:
fail(
"deletions are blocked (use --allow-deletes): "
+ ", ".join(sorted(set(deleted_files)))
)
print("OK: patch passed validation")
print(f"cwd={cwd}")
print(f"files={len(unique_files)} changed_lines={changed_line_count}")
if __name__ == "__main__":
main()
View File
BIN
View File
Binary file not shown.
+2
View File
@@ -28,3 +28,5 @@
auto = true auto = true
[coderabbit] [coderabbit]
machineId = cli/e407c8d66b9f497cb110e079e700f9e1 machineId = cli/e407c8d66b9f497cb110e079e700f9e1
[pull]
rebase = true
+1
View File
@@ -3,3 +3,4 @@
.mappsrc .mappsrc
.claude/
+210
View File
@@ -0,0 +1,210 @@
## where to store your database, default is your system data directory
## linux/mac: ~/.local/share/atuin/history.db
## windows: %USERPROFILE%/.local/share/atuin/history.db
db_path = "~/Sync/Atuin/history.db"
## where to store your encryption key, default is your system data directory
## linux/mac: ~/.local/share/atuin/key
## windows: %USERPROFILE%/.local/share/atuin/key
key_path = "~/Sync/Atuin/key"
## where to store your auth session token, default is your system data directory
## linux/mac: ~/.local/share/atuin/session
## windows: %USERPROFILE%/.local/share/atuin/session
# session_path = "~/.session"
## date format used, either "us" or "uk"
# dialect = "us"
## default timezone to use when displaying time
## either "l", "local" to use the system's current local timezone, or an offset
## from UTC in the format of "<+|->H[H][:M[M][:S[S]]]"
## for example: "+9", "-05", "+03:30", "-01:23:45", etc.
# timezone = "local"
## enable or disable automatic sync
# auto_sync = true
## enable or disable automatic update checks
# update_check = true
## address of the sync server
# sync_address = "https://api.atuin.sh"
## how often to sync history. note that this is only triggered when a command
## is ran, so sync intervals may well be longer
## set it to 0 to sync after every command
# sync_frequency = "10m"
## which search mode to use
## possible values: prefix, fulltext, fuzzy, skim
# search_mode = "fuzzy"
## which filter mode to use
## possible values: global, host, session, directory
# filter_mode = "global"
## With workspace filtering enabled, Atuin will filter for commands executed
## in any directory within a git repository tree (default: false)
# workspaces = false
## which filter mode to use when atuin is invoked from a shell up-key binding
## the accepted values are identical to those of "filter_mode"
## leave unspecified to use same mode set in "filter_mode"
# filter_mode_shell_up_key_binding = "global"
## which search mode to use when atuin is invoked from a shell up-key binding
## the accepted values are identical to those of "search_mode"
## leave unspecified to use same mode set in "search_mode"
# search_mode_shell_up_key_binding = "fuzzy"
## which style to use
## possible values: auto, full, compact
style = "auto"
## the maximum number of lines the interface should take up
## set it to 0 to always go full screen
inline_height = 0
## Invert the UI - put the search bar at the top , Default to `false`
# invert = false
## enable or disable showing a preview of the selected command
## useful when the command is longer than the terminal width and is cut off
# show_preview = false
## what to do when the escape key is pressed when searching
## possible values: return-original, return-query
# exit_mode = "return-original"
## possible values: emacs, subl
# word_jump_mode = "emacs"
## characters that count as a part of a word
# word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
## number of context lines to show when scrolling by pages
# scroll_context_lines = 1
## use ctrl instead of alt as the shortcut modifier key for numerical UI shortcuts
## alt-0 .. alt-9
# ctrl_n_shortcuts = false
## default history list format - can also be specified with the --format arg
# history_format = "{time}\t{command}\t{duration}"
## prevent commands matching any of these regexes from being written to history.
## Note that these regular expressions are unanchored, i.e. if they don't start
## with ^ or end with $, they'll match anywhere in the command.
## For details on the supported regular expression syntax, see
## https://docs.rs/regex/latest/regex/#syntax
# history_filter = [
# "^secret-cmd",
# "^innocuous-cmd .*--secret=.+",
# ]
## prevent commands run with cwd matching any of these regexes from being written
## to history. Note that these regular expressions are unanchored, i.e. if they don't
## start with ^ or end with $, they'll match anywhere in CWD.
## For details on the supported regular expression syntax, see
## https://docs.rs/regex/latest/regex/#syntax
# cwd_filter = [
# "^/very/secret/area",
# ]
## Configure the maximum height of the preview to show.
## Useful when you have long scripts in your history that you want to distinguish
## by more than the first few lines.
# max_preview_height = 4
## Configure whether or not to show the help row, which includes the current Atuin
## version (and whether an update is available), a keymap hint, and the total
## amount of commands in your history.
# show_help = true
## Configure whether or not to show tabs for search and inspect
# show_tabs = true
## Defaults to true. This matches history against a set of default regex, and will not save it if we get a match. Defaults include
## 1. AWS key id
## 2. Github pat (old and new)
## 3. Slack oauth tokens (bot, user)
## 4. Slack webhooks
## 5. Stripe live/test keys
# secrets_filter = true
## Defaults to true. If enabled, upon hitting enter Atuin will immediately execute the command. Press tab to return to the shell and edit.
# This applies for new installs. Old installs will keep the old behaviour unless configured otherwise.
enter_accept = true
search_mode = "daemon-fuzzy"
## Defaults to "emacs". This specifies the keymap on the startup of `atuin
## search`. If this is set to "auto", the startup keymap mode in the Atuin
## search is automatically selected based on the shell's keymap where the
## keybinding is defined. If this is set to "emacs", "vim-insert", or
## "vim-normal", the startup keymap mode in the Atuin search is forced to be
## the specified one.
# keymap_mode = "auto"
## Cursor style in each keymap mode. If specified, the cursor style is changed
## in entering the cursor shape. Available values are "default" and
## "{blink,steady}-{block,underline,bar}".
# keymap_cursor = { emacs = "blink-block", vim_insert = "blink-block", vim_normal = "steady-block" }
# network_connect_timeout = 5
# network_timeout = 5
## Timeout (in seconds) for acquiring a local database connection (sqlite)
# local_timeout = 5
## Set this to true and Atuin will minimize motion in the UI - timers will not update live, etc.
## Alternatively, set env NO_MOTION=true
# prefers_reduced_motion = false
[stats]
## Set commands where we should consider the subcommand for statistics. Eg, kubectl get vs just kubectl
# common_subcommands = [
# "apt",
# "cargo",
# "composer",
# "dnf",
# "docker",
# "git",
# "go",
# "ip",
# "kubectl",
# "nix",
# "nmcli",
# "npm",
# "pecl",
# "pnpm",
# "podman",
# "port",
# "systemctl",
# "tmux",
# "yarn",
# ]
## Set commands that should be totally stripped and ignored from stats
# common_prefix = ["sudo"]
## Set commands that will be completely ignored from stats
# ignored_commands = [
# "cd",
# "ls",
# "vi"
# ]
[keys]
# Defaults to true. If disabled, using the up/down key won't exit the TUI when scrolled past the first/last entry.
# scroll_exits = false
[sync]
# Enable sync v2 by default
# This ensures that sync v2 is enabled for new installs only
# In a later release it will become the default across the board
records = true
[daemon]
enabled = true
autostart = true
+5 -3
View File
@@ -1,4 +1,4 @@
theme = dark: Afterglow,light: Adwaita theme = dark: Andromeda,light: 3024 Day
macos-secure-input-indication = true macos-secure-input-indication = true
cursor-style = underline cursor-style = underline
@@ -11,10 +11,12 @@ font-thicken = true
selection-invert-fg-bg = true selection-invert-fg-bg = true
window-height = 34 window-height = 34
window-width = 120 window-width = 110
window-padding-x = 5 window-padding-x = 5
window-padding-y = 5 window-padding-y = 5
window-padding-balance = true window-padding-balance = true
background-opacity=0.95 background-opacity=0.98
background-blur=true background-blur=true
+594
View File
@@ -0,0 +1,594 @@
[
{
"emoji": "🎨",
"entity": "&#x1f3a8;",
"code": ":art:",
"description": "Improve structure / format of the code.",
"name": "art",
"semver": null
},
{
"emoji": "⚡️",
"entity": "&#x26a1;",
"code": ":zap:",
"description": "Improve performance.",
"name": "zap",
"semver": "patch"
},
{
"emoji": "🔥",
"entity": "&#x1f525;",
"code": ":fire:",
"description": "Remove code or files.",
"name": "fire",
"semver": null
},
{
"emoji": "🐛",
"entity": "&#x1f41b;",
"code": ":bug:",
"description": "Fix a bug.",
"name": "bug",
"semver": "patch"
},
{
"emoji": "🚑️",
"entity": "&#128657;",
"code": ":ambulance:",
"description": "Critical hotfix.",
"name": "ambulance",
"semver": "patch"
},
{
"emoji": "✨",
"entity": "&#x2728;",
"code": ":sparkles:",
"description": "Introduce new features.",
"name": "sparkles",
"semver": "minor"
},
{
"emoji": "📝",
"entity": "&#x1f4dd;",
"code": ":memo:",
"description": "Add or update documentation.",
"name": "memo",
"semver": null
},
{
"emoji": "🚀",
"entity": "&#x1f680;",
"code": ":rocket:",
"description": "Deploy stuff.",
"name": "rocket",
"semver": null
},
{
"emoji": "💄",
"entity": "&#ff99cc;",
"code": ":lipstick:",
"description": "Add or update the UI and style files.",
"name": "lipstick",
"semver": "patch"
},
{
"emoji": "🎉",
"entity": "&#127881;",
"code": ":tada:",
"description": "Begin a project.",
"name": "tada",
"semver": null
},
{
"emoji": "✅",
"entity": "&#x2705;",
"code": ":white_check_mark:",
"description": "Add, update, or pass tests.",
"name": "white-check-mark",
"semver": null
},
{
"emoji": "🔒️",
"entity": "&#x1f512;",
"code": ":lock:",
"description": "Fix security or privacy issues.",
"name": "lock",
"semver": "patch"
},
{
"emoji": "🔐",
"entity": "&#x1f510;",
"code": ":closed_lock_with_key:",
"description": "Add or update secrets.",
"name": "closed-lock-with-key",
"semver": null
},
{
"emoji": "🔖",
"entity": "&#x1f516;",
"code": ":bookmark:",
"description": "Release / Version tags.",
"name": "bookmark",
"semver": null
},
{
"emoji": "🚨",
"entity": "&#x1f6a8;",
"code": ":rotating_light:",
"description": "Fix compiler / linter warnings.",
"name": "rotating-light",
"semver": null
},
{
"emoji": "🚧",
"entity": "&#x1f6a7;",
"code": ":construction:",
"description": "Work in progress.",
"name": "construction",
"semver": null
},
{
"emoji": "💚",
"entity": "&#x1f49a;",
"code": ":green_heart:",
"description": "Fix CI Build.",
"name": "green-heart",
"semver": null
},
{
"emoji": "⬇️",
"entity": "⬇️",
"code": ":arrow_down:",
"description": "Downgrade dependencies.",
"name": "arrow-down",
"semver": "patch"
},
{
"emoji": "⬆️",
"entity": "⬆️",
"code": ":arrow_up:",
"description": "Upgrade dependencies.",
"name": "arrow-up",
"semver": "patch"
},
{
"emoji": "📌",
"entity": "&#x1F4CC;",
"code": ":pushpin:",
"description": "Pin dependencies to specific versions.",
"name": "pushpin",
"semver": "patch"
},
{
"emoji": "👷",
"entity": "&#x1f477;",
"code": ":construction_worker:",
"description": "Add or update CI build system.",
"name": "construction-worker",
"semver": null
},
{
"emoji": "📈",
"entity": "&#x1F4C8;",
"code": ":chart_with_upwards_trend:",
"description": "Add or update analytics or track code.",
"name": "chart-with-upwards-trend",
"semver": "patch"
},
{
"emoji": "♻️",
"entity": "&#x267b;",
"code": ":recycle:",
"description": "Refactor code.",
"name": "recycle",
"semver": null
},
{
"emoji": "",
"entity": "&#10133;",
"code": ":heavy_plus_sign:",
"description": "Add a dependency.",
"name": "heavy-plus-sign",
"semver": "patch"
},
{
"emoji": "",
"entity": "&#10134;",
"code": ":heavy_minus_sign:",
"description": "Remove a dependency.",
"name": "heavy-minus-sign",
"semver": "patch"
},
{
"emoji": "🔧",
"entity": "&#x1f527;",
"code": ":wrench:",
"description": "Add or update configuration files.",
"name": "wrench",
"semver": "patch"
},
{
"emoji": "🔨",
"entity": "&#128296;",
"code": ":hammer:",
"description": "Add or update development scripts.",
"name": "hammer",
"semver": null
},
{
"emoji": "🌐",
"entity": "&#127760;",
"code": ":globe_with_meridians:",
"description": "Internationalization and localization.",
"name": "globe-with-meridians",
"semver": "patch"
},
{
"emoji": "✏️",
"entity": "&#59161;",
"code": ":pencil2:",
"description": "Fix typos.",
"name": "pencil2",
"semver": "patch"
},
{
"emoji": "💩",
"entity": "&#58613;",
"code": ":poop:",
"description": "Write bad code that needs to be improved.",
"name": "poop",
"semver": null
},
{
"emoji": "⏪️",
"entity": "&#9194;",
"code": ":rewind:",
"description": "Revert changes.",
"name": "rewind",
"semver": "patch"
},
{
"emoji": "🔀",
"entity": "&#128256;",
"code": ":twisted_rightwards_arrows:",
"description": "Merge branches.",
"name": "twisted-rightwards-arrows",
"semver": null
},
{
"emoji": "📦️",
"entity": "&#1F4E6;",
"code": ":package:",
"description": "Add or update compiled files or packages.",
"name": "package",
"semver": "patch"
},
{
"emoji": "👽️",
"entity": "&#1F47D;",
"code": ":alien:",
"description": "Update code due to external API changes.",
"name": "alien",
"semver": "patch"
},
{
"emoji": "🚚",
"entity": "&#1F69A;",
"code": ":truck:",
"description": "Move or rename resources (e.g.: files, paths, routes).",
"name": "truck",
"semver": null
},
{
"emoji": "📄",
"entity": "&#1F4C4;",
"code": ":page_facing_up:",
"description": "Add or update license.",
"name": "page-facing-up",
"semver": null
},
{
"emoji": "💥",
"entity": "&#x1f4a5;",
"code": ":boom:",
"description": "Introduce breaking changes.",
"name": "boom",
"semver": "major"
},
{
"emoji": "🍱",
"entity": "&#1F371",
"code": ":bento:",
"description": "Add or update assets.",
"name": "bento",
"semver": "patch"
},
{
"emoji": "♿️",
"entity": "&#9855;",
"code": ":wheelchair:",
"description": "Improve accessibility.",
"name": "wheelchair",
"semver": "patch"
},
{
"emoji": "💡",
"entity": "&#128161;",
"code": ":bulb:",
"description": "Add or update comments in source code.",
"name": "bulb",
"semver": null
},
{
"emoji": "🍻",
"entity": "&#x1f37b;",
"code": ":beers:",
"description": "Write code drunkenly.",
"name": "beers",
"semver": null
},
{
"emoji": "💬",
"entity": "&#128172;",
"code": ":speech_balloon:",
"description": "Add or update text and literals.",
"name": "speech-balloon",
"semver": "patch"
},
{
"emoji": "🗃️",
"entity": "&#128451;",
"code": ":card_file_box:",
"description": "Perform database related changes.",
"name": "card-file-box",
"semver": "patch"
},
{
"emoji": "🔊",
"entity": "&#128266;",
"code": ":loud_sound:",
"description": "Add or update logs.",
"name": "loud-sound",
"semver": null
},
{
"emoji": "🔇",
"entity": "&#128263;",
"code": ":mute:",
"description": "Remove logs.",
"name": "mute",
"semver": null
},
{
"emoji": "👥",
"entity": "&#128101;",
"code": ":busts_in_silhouette:",
"description": "Add or update contributor(s).",
"name": "busts-in-silhouette",
"semver": null
},
{
"emoji": "🚸",
"entity": "&#128696;",
"code": ":children_crossing:",
"description": "Improve user experience / usability.",
"name": "children-crossing",
"semver": "patch"
},
{
"emoji": "🏗️",
"entity": "&#1f3d7;",
"code": ":building_construction:",
"description": "Make architectural changes.",
"name": "building-construction",
"semver": null
},
{
"emoji": "📱",
"entity": "&#128241;",
"code": ":iphone:",
"description": "Work on responsive design.",
"name": "iphone",
"semver": "patch"
},
{
"emoji": "🤡",
"entity": "&#129313;",
"code": ":clown_face:",
"description": "Mock things.",
"name": "clown-face",
"semver": null
},
{
"emoji": "🥚",
"entity": "&#129370;",
"code": ":egg:",
"description": "Add or update an easter egg.",
"name": "egg",
"semver": "patch"
},
{
"emoji": "🙈",
"entity": "&#8bdfe7;",
"code": ":see_no_evil:",
"description": "Add or update a .gitignore file.",
"name": "see-no-evil",
"semver": null
},
{
"emoji": "📸",
"entity": "&#128248;",
"code": ":camera_flash:",
"description": "Add or update snapshots.",
"name": "camera-flash",
"semver": null
},
{
"emoji": "⚗️",
"entity": "&#x2697;",
"code": ":alembic:",
"description": "Perform experiments.",
"name": "alembic",
"semver": "patch"
},
{
"emoji": "🔍️",
"entity": "&#128269;",
"code": ":mag:",
"description": "Improve SEO.",
"name": "mag",
"semver": "patch"
},
{
"emoji": "🏷️",
"entity": "&#127991;",
"code": ":label:",
"description": "Add or update types.",
"name": "label",
"semver": "patch"
},
{
"emoji": "🌱",
"entity": "&#127793;",
"code": ":seedling:",
"description": "Add or update seed files.",
"name": "seedling",
"semver": null
},
{
"emoji": "🚩",
"entity": "&#x1F6A9;",
"code": ":triangular_flag_on_post:",
"description": "Add, update, or remove feature flags.",
"name": "triangular-flag-on-post",
"semver": "patch"
},
{
"emoji": "🥅",
"entity": "&#x1F945;",
"code": ":goal_net:",
"description": "Catch errors.",
"name": "goal-net",
"semver": "patch"
},
{
"emoji": "💫",
"entity": "&#x1f4ab;",
"code": ":dizzy:",
"description": "Add or update animations and transitions.",
"name": "dizzy",
"semver": "patch"
},
{
"emoji": "🗑️",
"entity": "&#x1F5D1;",
"code": ":wastebasket:",
"description": "Deprecate code that needs to be cleaned up.",
"name": "wastebasket",
"semver": "patch"
},
{
"emoji": "🛂",
"entity": "&#x1F6C2;",
"code": ":passport_control:",
"description": "Work on code related to authorization, roles and permissions.",
"name": "passport-control",
"semver": "patch"
},
{
"emoji": "🩹",
"entity": "&#x1FA79;",
"code": ":adhesive_bandage:",
"description": "Simple fix for a non-critical issue.",
"name": "adhesive-bandage",
"semver": "patch"
},
{
"emoji": "🧐",
"entity": "&#x1F9D0;",
"code": ":monocle_face:",
"description": "Data exploration/inspection.",
"name": "monocle-face",
"semver": null
},
{
"emoji": "⚰️",
"entity": "&#x26B0;",
"code": ":coffin:",
"description": "Remove dead code.",
"name": "coffin",
"semver": null
},
{
"emoji": "🧪",
"entity": "&#x1F9EA;",
"code": ":test_tube:",
"description": "Add a failing test.",
"name": "test-tube",
"semver": null
},
{
"emoji": "👔",
"entity": "&#128084;",
"code": ":necktie:",
"description": "Add or update business logic.",
"name": "necktie",
"semver": "patch"
},
{
"emoji": "🩺",
"entity": "&#x1FA7A;",
"code": ":stethoscope:",
"description": "Add or update healthcheck.",
"name": "stethoscope",
"semver": null
},
{
"emoji": "🧱",
"entity": "&#x1f9f1;",
"code": ":bricks:",
"description": "Infrastructure related changes.",
"name": "bricks",
"semver": null
},
{
"emoji": "🧑‍💻",
"entity": "&#129489;&#8205;&#128187;",
"code": ":technologist:",
"description": "Improve developer experience.",
"name": "technologist",
"semver": null
},
{
"emoji": "💸",
"entity": "&#x1F4B8;",
"code": ":money_with_wings:",
"description": "Add sponsorships or money related infrastructure.",
"name": "money-with-wings",
"semver": null
},
{
"emoji": "🧵",
"entity": "&#x1F9F5;",
"code": ":thread:",
"description": "Add or update code related to multithreading or concurrency.",
"name": "thread",
"semver": null
},
{
"emoji": "🦺",
"entity": "&#x1F9BA;",
"code": ":safety_vest:",
"description": "Add or update code related to validation.",
"name": "safety-vest",
"semver": null
},
{
"emoji": "✈️",
"entity": "&#x2708;",
"code": ":airplane:",
"description": "Improve offline support.",
"name": "airplane",
"semver": null
}
]
+13 -15
View File
@@ -11,8 +11,7 @@
"alignment": "left", "alignment": "left",
"segments": [ "segments": [
{ {
"properties": { "options": {
"cache_duration": "none",
"time_format": "15:04" "time_format": "15:04"
}, },
"template": "\uf017 {{ .CurrentDate | date .Format }}", "template": "\uf017 {{ .CurrentDate | date .Format }}",
@@ -21,10 +20,7 @@
"style": "plain" "style": "plain"
}, },
{ {
"properties": { "options": {
"branch_max_length": 25,
"cache_duration": "none",
"fetch_stash_count": true,
"fetch_status": true, "fetch_status": true,
"fetch_upstream_icon": true "fetch_upstream_icon": true
}, },
@@ -47,9 +43,7 @@
"alignment": "right", "alignment": "right",
"segments": [ "segments": [
{ {
"properties": { "options": {},
"cache_duration": "none"
},
"template": " x{{ reason .Code }}", "template": " x{{ reason .Code }}",
"foreground": "#b8ff75", "foreground": "#b8ff75",
"type": "status", "type": "status",
@@ -57,9 +51,9 @@
"foreground_templates": ["{{ if gt .Code 0 }}#E06C75{{ end }}"] "foreground_templates": ["{{ if gt .Code 0 }}#E06C75{{ end }}"]
}, },
{ {
"properties": { "options": {
"always_enabled": true, "always_enabled": true,
"cache_duration": "none",
"style": "roundrock" "style": "roundrock"
}, },
"template": " {{ .FormattedMs }} ", "template": " {{ .FormattedMs }} ",
@@ -75,8 +69,7 @@
"alignment": "left", "alignment": "left",
"segments": [ "segments": [
{ {
"properties": { "options": {
"cache_duration": "none",
"style": "full" "style": "full"
}, },
"template": "\ue5ff {{ .Path }}", "template": "\ue5ff {{ .Path }}",
@@ -92,7 +85,7 @@
"alignment": "left", "alignment": "left",
"segments": [ "segments": [
{ {
"properties": { "options": {
"cache_duration": "none" "cache_duration": "none"
}, },
"template": "!", "template": "!",
@@ -101,7 +94,7 @@
"style": "plain" "style": "plain"
}, },
{ {
"properties": { "options": {
"cache_duration": "none" "cache_duration": "none"
}, },
"template": "", "template": "",
@@ -116,3 +109,8 @@
"version": 3, "version": 3,
"final_space": true "final_space": true
} }
+64 -3
View File
@@ -1,7 +1,68 @@
#!/bin/bash #!/bin/bash
set -euo pipefail
git add -A # Show modified + untracked files and let user pick (multi-select)
gitmoji commit # Use NUL-safe listing then convert to newlines for gum
selected=$(git ls-files -m -o --exclude-standard -z | tr '\0' '\n' | gum choose --no-limit) || true
if [ -z "$selected" ]; then
echo "No files selected; aborting."
exit 0
fi
# Stage each selected file (handle spaces/newlines safely)
while IFS= read -r file; do
# skip empty lines (defensive)
[ -n "$file" ] || continue
git add -- "$file"
done <<< "$selected"
# Helper to unstage only the files we added
unstage_added() {
if [ "${#added[@]}" -gt 0 ]; then
git reset -- "${added[@]}"
fi
}
# If nothing is staged, abort (don't commit or push)
if ! git diff --cached --name-only | grep -q .; then
echo "No files staged after selection; aborting."
exit 0
fi
# Commit using gum for message/summary
# Prompt for a short summary (single-line)
SUMMARY="$(gum input --placeholder "Summary of this change" --value "")" || true
# If the user cancelled or left it empty, unstage and abort
if [ -z "$SUMMARY" ]; then
echo "No summary provided; aborting and unstaging changes."
unstage_added
exit 0
fi
# Prompt for a longer description (multi-line)
DESCRIPTION="$(gum write --placeholder "Details of this change (optional)")" || true
# Confirm before committing
if ! gum confirm "Commit with summary: \"$SUMMARY\"?"; then
echo "Commit cancelled; unstaging changes."
unstage_added
exit 0
fi
# Perform the commit (description as second -m if present)
if [ -n "$DESCRIPTION" ]; then
git commit -m "$SUMMARY" -m "$DESCRIPTION"
else
git commit -m "$SUMMARY"
fi
BRANCH=$(git name-rev --name-only HEAD) BRANCH=$(git name-rev --name-only HEAD)
gum confirm "Push?" && git push origin $BRANCH
# Only push if a remote named "origin" exists
if git config --get remote.origin.url >/dev/null 2>&1; then
git push origin "$BRANCH"
else
echo "No remote 'origin' found; skipping git push."
fi
+6
View File
@@ -29,3 +29,9 @@ ln -s -f ~/dotfiles/misc_config/ghostty ~/Library/Application\ Support/com.mitch
# fastfetch # fastfetch
ln -s -f ~/dotfiles/misc_config/fastfetch.jsonc ~/.config/fastfetch/config.jsonc ln -s -f ~/dotfiles/misc_config/fastfetch.jsonc ~/.config/fastfetch/config.jsonc
# gitmoji
ln -s -f ~/dotfiles/misc_config/gitmojis.json ~/.gitmoji/gitmojis.json
# atuin
ln -s -f ~/dotfiles/misc_config/atuin.toml ~/.config/atuin/config.toml
+40 -16
View File
@@ -2,18 +2,16 @@
"workbench.iconTheme": "charmed-icons", "workbench.iconTheme": "charmed-icons",
"workbench.tips.enabled": false, "workbench.tips.enabled": false,
"workbench.tree.enableStickyScroll": false, "workbench.tree.enableStickyScroll": false,
"workbench.tree.renderIndentGuides": "none",
"workbench.tree.indent": 10, "workbench.tree.indent": 10,
"window.systemColorTheme": "auto", "window.systemColorTheme": "auto",
"window.autoDetectColorScheme": true, "window.autoDetectColorScheme": true,
"workbench.editor.tabActionLocation": "left", "workbench.editor.tabActionLocation": "left",
"workbench.preferredDarkColorTheme": "FlatUI Dark", "workbench.preferredDarkColorTheme": "Ayu Mirage Bordered",
"explorer.decorations.colors": false, "explorer.decorations.colors": false,
"editor.fontFamily": "'Maple Mono', monospace", "editor.fontFamily": "'Maple Mono', monospace",
"editor.fontSize": 14, "editor.fontSize": 14,
"editor.fontLigatures": "'calt', 'ss01', 'ss02', 'ss03', 'ss06', 'ss07', 'ss08', 'ss09', 'liga'", "editor.fontLigatures": "'calt', 'ss01', 'ss02', 'ss03', 'ss06', 'ss07', 'ss08', 'ss09', 'liga'",
"editor.inlineSuggest.fontFamily": "'Maple Mono', monospace", "editor.inlineSuggest.fontFamily": "'Maple Mono', monospace",
"workbench.navigationControl.enabled": false,
"editor.fontVariations": false, "editor.fontVariations": false,
"editor.wordWrap": "on", "editor.wordWrap": "on",
"editor.cursorStyle": "underline", "editor.cursorStyle": "underline",
@@ -22,27 +20,26 @@
"workbench.startupEditor": "none", "workbench.startupEditor": "none",
"editor.screenReaderAnnounceInlineSuggestion": false, "editor.screenReaderAnnounceInlineSuggestion": false,
"[typescript]": { "[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode",
}, },
"accessibility.signalOptions.volume": 0, "accessibility.signalOptions.volume": 0,
"breadcrumbs.icons": false, "breadcrumbs.icons": false,
"explorer.autoReveal": true, "explorer.autoReveal": true,
"explorer.compactFolders": false, "explorer.compactFolders": false,
"explorer.sortOrder": "type", "explorer.sortOrder": "type",
"window.commandCenter": false,
"window.title": "${rootName}", "window.title": "${rootName}",
"breadcrumbs.enabled": false, "breadcrumbs.enabled": false,
"terminal.integrated.fontLigatures.enabled": true, "terminal.integrated.fontLigatures.enabled": true,
"[javascript]": { "[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode",
}, },
"editor.formatOnSave": true, "editor.formatOnSave": true,
"terminal.external.osxExec": "Ghostty.app", "terminal.external.osxExec": "Ghostty.app",
"[jsonc]": { "[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode",
}, },
"[typescriptreact]": { "[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode",
}, },
"terminal.integrated.fontSize": 14, "terminal.integrated.fontSize": 14,
"terminal.integrated.fontFamily": "'MesloLGS NF', monospace", "terminal.integrated.fontFamily": "'MesloLGS NF', monospace",
@@ -52,7 +49,7 @@
"chat.commandCenter.enabled": false, "chat.commandCenter.enabled": false,
"codeium.enableInComments": false, "codeium.enableInComments": false,
"[javascriptreact]": { "[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode",
}, },
"editor.minimap.enabled": false, "editor.minimap.enabled": false,
"editor.scrollbar.verticalScrollbarSize": 6, "editor.scrollbar.verticalScrollbarSize": 6,
@@ -60,22 +57,21 @@
"javascript.format.enable": false, "javascript.format.enable": false,
"typescript.format.enable": false, "typescript.format.enable": false,
"[astro]": { "[astro]": {
"editor.defaultFormatter": "astro-build.astro-vscode" "editor.defaultFormatter": "astro-build.astro-vscode",
}, },
"workbench.preferredLightColorTheme": "FlatUI", "workbench.preferredLightColorTheme": "Atom One Light",
"discord.suppressNotifications": true, "discord.suppressNotifications": true,
"[json]": { "[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode",
}, },
"[html]": { "[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode",
}, },
"redhat.telemetry.enabled": false, "redhat.telemetry.enabled": false,
"jest.runMode": "on-demand", "jest.runMode": "on-demand",
"testing.automaticallyOpenPeekView": "failureAnywhere", "testing.automaticallyOpenPeekView": "failureAnywhere",
"workbench.statusBar.visible": false, "workbench.statusBar.visible": false,
"ollama-autocoder.model": "qwen2.5-coder:7b", "ollama-autocoder.model": "qwen2.5-coder:7b",
"workbench.layoutControl.enabled": false,
"rust-analyzer.lens.run.enable": false, "rust-analyzer.lens.run.enable": false,
"rust-analyzer.lens.debug.enable": false, "rust-analyzer.lens.debug.enable": false,
"rust-analyzer.lens.enable": false, "rust-analyzer.lens.enable": false,
@@ -103,6 +99,34 @@
"editor.inlayHints.enabled": "offUnlessPressed", "editor.inlayHints.enabled": "offUnlessPressed",
"prettier.documentSelectors": ["**/*.ripple"], "prettier.documentSelectors": ["**/*.ripple"],
"[ripple]": { "[ripple]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode",
} },
"makefile.configureOnOpen": false,
"svelte.enable-ts-plugin": true,
"[svelte]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
},
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
},
"workbench.navigationControl.enabled": false,
"workbench.layoutControl.enabled": false,
"indentRainbow.lightIndicatorStyleLineWidth": 0,
"workbench.tree.renderIndentGuides": "none",
"swift.disableSwiftPackageManagerIntegration": true,
"[swift]": {
"editor.defaultFormatter": "vknabel.vscode-swiftformat",
},
"json.schemaDownload.trustedDomains": {
"https://schemastore.azurewebsites.net/": true,
"https://raw.githubusercontent.com/": true,
"https://www.schemastore.org/": true,
"https://json.schemastore.org/": true,
"https://json-schema.org/": true,
"https://biomejs.dev": true,
},
"swiftlint.toolchainPath": "/opt/homebrew/bin/swiftlint",
"swift.disableSwiftlyInstallPrompt": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"terminal.integrated.initialHint": false,
} }
+13 -13
View File
@@ -3,8 +3,8 @@
"context": "Workspace", "context": "Workspace",
"bindings": { "bindings": {
"shift-cmd-b": "workspace::ToggleRightDock", "shift-cmd-b": "workspace::ToggleRightDock",
"cmd-w": null "cmd-w": null,
} },
}, },
{ {
"context": "Pane", "context": "Pane",
@@ -18,21 +18,21 @@
"cmd-7": ["pane::ActivateItem", 6], "cmd-7": ["pane::ActivateItem", 6],
"cmd-8": ["pane::ActivateItem", 7], "cmd-8": ["pane::ActivateItem", 7],
"cmd-9": ["pane::ActivateItem", 8], "cmd-9": ["pane::ActivateItem", 8],
"cmd-0": "pane::ActivateLastItem" "cmd-0": "pane::ActivateLastItem",
} },
}, },
{ {
"context": "Editor", "context": "Editor",
"bindings": { "bindings": {
"cmd-alt-right": "workspace::ActivateNextPane", "cmd-alt-right": "workspace::ActivateNextPane",
"cmd-alt-left": "workspace::ActivatePreviousPane" "cmd-alt-left": "workspace::ActivatePreviousPane",
} },
}, },
{ {
"context": "Terminal", "context": "Terminal",
"bindings": { "bindings": {
"ctrl-`": "pane::CloseActiveItem" "ctrl-`": "pane::CloseActiveItem",
} },
}, },
{ {
"context": "Editor", "context": "Editor",
@@ -40,9 +40,9 @@
"cmd-w": [ "cmd-w": [
"pane::CloseActiveItem", "pane::CloseActiveItem",
{ {
"close_pinned": false "close_pinned": false,
} },
] ],
} },
} },
] ]
+72 -44
View File
@@ -1,63 +1,75 @@
{ {
"git_panel": { "cli_default_open_behavior": "new_window",
"dock": "left" "sticky_scroll": {
"enabled": true,
}, },
"preview_tabs": {
"enable_preview_from_file_finder": true,
},
"disable_ai": true,
"icon_theme": "Soft Charmed Icons", "icon_theme": "Soft Charmed Icons",
"show_edit_predictions": false, "show_edit_predictions": false,
"base_keymap": "VSCode", "base_keymap": "VSCode",
"close_on_file_delete": true, "close_on_file_delete": true,
"outline_panel": { "outline_panel": {
"dock": "right" "dock": "right",
},
"title_bar": {
"show_branch_status_icon": true,
"show_user_picture": false,
"show_sign_in": false,
}, },
"bottom_dock_layout": "full",
"telemetry": { "telemetry": {
"diagnostics": true, "diagnostics": false,
"metrics": false "metrics": false,
}, },
"agent": { "agent": {
"button": false,
"enabled": false, "enabled": false,
"dock": "right" "dock": "right",
}, },
"edit_predictions": { "edit_predictions": {
"provider": "none",
"disabled_globs": [".md"], "disabled_globs": [".md"],
"mode": "subtle" "mode": "subtle",
}, },
"active_pane_modifiers": { "active_pane_modifiers": {
"inactive_opacity": 0.7 "border_size": 0.0,
}, "inactive_opacity": 0.7,
"features": {
"edit_prediction_provider": "zed"
}, },
"collaboration_panel": { "collaboration_panel": {
"button": false "button": false,
}, },
"toolbar": { "toolbar": {
"breadcrumbs": false,
"quick_actions": false, "quick_actions": false,
"selections_menu": false "selections_menu": false,
}, },
"file_finder": { "file_finder": {
"file_icons": true "file_icons": true,
}, },
"seed_search_query_from_cursor": "selection", "seed_search_query_from_cursor": "selection",
"gutter": { "gutter": {
"runnables": false "runnables": false,
}, },
"theme": { "theme": {
"mode": "system", "mode": "system",
"light": "Catppuccin Latte (Blur)", "light": "Fleet Light",
"dark": "Catppuccin Macchiato (Blur) [Heavy]" "dark": "Nightfox - opaque",
}, },
"scrollbar": { "scrollbar": {
"show": "system", "show": "system",
"axes": { "axes": {
"horizontal": false, "horizontal": false,
"vertical": true "vertical": true,
} },
},
"status_bar": {
"active_language_button": false,
"cursor_position_button": false,
}, },
"cursor_shape": "underline", "cursor_shape": "underline",
"vertical_scroll_margin": 18, "vertical_scroll_margin": 18,
"ui_font_family": "Input Mono", "ui_font_family": ".SystemUIFont",
"ui_font_size": 15, "ui_font_size": 15,
"buffer_font_family": "Maple Mono", "buffer_font_family": "Maple Mono",
// "buffer_font_features": { // "buffer_font_features": {
@@ -78,69 +90,85 @@
"dock": "bottom", "dock": "bottom",
"font_family": "Maple Mono", "font_family": "Maple Mono",
"font_fallbacks": ["FiraCode Nerd Font Mono"], "font_fallbacks": ["FiraCode Nerd Font Mono"],
"toolbar": { "breadcrumbs": false } "toolbar": { "breadcrumbs": false },
}, },
"soft_wrap": "editor_width", "soft_wrap": "editor_width",
"tabs": { "tabs": {
"show_close_button": "hover",
"close_position": "left", "close_position": "left",
"git_status": true, "git_status": true,
"file_icons": true, "file_icons": true,
"show_diagnostics": "all" "show_diagnostics": "all",
}, },
"notification_panel": { "notification_panel": {
"button": false "button": false,
}, },
"tab_bar": { "tab_bar": {
"show_nav_history_buttons": false "show": true,
"show_nav_history_buttons": false,
}, },
"git": { "git": {
"git_gutter": "tracked_files", "git_gutter": "tracked_files",
"hunk_style": "unstaged_hollow" "hunk_style": "unstaged_hollow",
"inline_blame": {
"show_commit_summary": true,
},
}, },
"indent_guides": { "indent_guides": {
"enabled": true, "enabled": true,
"coloring": "indent_aware" "coloring": "indent_aware",
}, },
"languages": { "languages": {
"JSONC": { "JSONC": {
"show_edit_predictions": false "show_edit_predictions": false,
}, },
"Markdown": { "Markdown": {
"show_edit_predictions": false "show_edit_predictions": false,
}, },
"Go": { "Go": {
"tab_size": 2 "tab_size": 2,
}, },
"Astro": { "Astro": {
"tab_size": 2 "tab_size": 2,
} },
"Swift": {
"tab_size": 2,
"format_on_save": "off",
},
}, },
"lsp": { "lsp": {
"biome": { "biome": {
"settings": { "settings": {
"require_config_file": true "require_config_file": true,
} },
} },
}, },
"project_panel": { "project_panel": {
"file_icons": true,
"folder_icons": true,
"dock": "left", "dock": "left",
"indent_size": 10, "indent_size": 14.0,
"auto_fold_dirs": false, "auto_fold_dirs": false,
"show_diagnostics": "off", "show_diagnostics": "off",
"git_status": true, "git_status": true,
"entry_spacing": "standard" "entry_spacing": "standard",
"sticky_scroll": false,
"hide_root": true,
"indent_guides": {
"show": "never",
},
}, },
"file_types": { "file_types": {
"HTML": ["hbs", "njk", "webc", "leaf"] "HTML": ["hbs", "njk", "webc", "leaf"],
}, },
"experimental.theme_overrides": { "experimental.theme_overrides": {
"syntax": { "syntax": {
"comment": { "comment": {
"font_style": "italic" "font_style": "italic",
}, },
"keyword": { "keyword": {
"font_style": "italic" "font_style": "italic",
} },
} },
} },
} }
+4 -2
View File
@@ -6,11 +6,12 @@ alias cd="z"
alias nv="open -a Nova" alias nv="open -a Nova"
# git # git
alias ptob="gh pr create -B beta" alias pr="gh pr create -B"
alias prune-git="git remote prune origin" alias prune-git="git remote prune origin"
# ssh # ssh
alias macmini="ssh admin@Memory-Alpha.local" alias macmini="ssh admin@Memory-Alpha.local"
alias daweb="ssh ghall@95.111.207.194"
# shell scripts # shell scripts
alias dev="sh ~/dotfiles/scripts/run-dev.sh" alias dev="sh ~/dotfiles/scripts/run-dev.sh"
@@ -22,6 +23,7 @@ alias brewfile="brew bundle dump --file=~/dotfiles/Brewfile --force --"
alias installbrewfile="brew bundle install --file=~/dotfiles/Brewfile" alias installbrewfile="brew bundle install --file=~/dotfiles/Brewfile"
# dotfiles # dotfiles
alias config="zed ~/dotfiles" alias config="bb ~/dotfiles"
alias linkdfs="sh ~/dotfiles/symlink_dotfiles.zsh" alias linkdfs="sh ~/dotfiles/symlink_dotfiles.zsh"
alias cdot="sh ~/dotfiles/scripts/commit-dotfiles.sh" alias cdot="sh ~/dotfiles/scripts/commit-dotfiles.sh"
+3 -2
View File
@@ -40,7 +40,7 @@ ZSH_THEME="robbyrussell"
# DISABLE_AUTO_TITLE="true" # DISABLE_AUTO_TITLE="true"
# Uncomment the following line to enable command auto-correction. # Uncomment the following line to enable command auto-correction.
ENABLE_CORRECTION="true" # ENABLE_CORRECTION="true"
# Uncomment the following line to display red dots whilst waiting for completion. # Uncomment the following line to display red dots whilst waiting for completion.
# You can also set it to another string to have that shown instead of the default red dots. # You can also set it to another string to have that shown instead of the default red dots.
@@ -79,9 +79,10 @@ ENABLE_CORRECTION="true"
gh gh
nvm nvm
npm npm
gitignore
brew brew
thefuck thefuck
macos
pnpm-shell-completion
) )
FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}" FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"
+11 -2
View File
@@ -1,4 +1,11 @@
autoload -U +X bashcompinit && bashcompinit
autoload -U +X compinit && compinit
# Run brew-autoupdate
brew-autoupdate
eval "$(oh-my-posh init zsh --config ~/dotfiles/misc_config/ohmyposh.json)" eval "$(oh-my-posh init zsh --config ~/dotfiles/misc_config/ohmyposh.json)"
eval "$(wut init)"
source $(brew --prefix nvm)/nvm.sh source $(brew --prefix nvm)/nvm.sh
source <(fzf --zsh) source <(fzf --zsh)
@@ -9,9 +16,9 @@ for conf in "$HOME/dotfiles/zsh_config/"*.zsh; do
done done
unset conf unset conf
eval $(thefuck --alias) # eval "$(wut init)"
eval "$(thefuck --alias)"
eval "$(zoxide init zsh)" eval "$(zoxide init zsh)"
# eval "$(starship init zsh)"
eval "$(atuin init zsh)" eval "$(atuin init zsh)"
# bun completions # bun completions
@@ -24,3 +31,5 @@ fi
# Add RVM to PATH for scripting. Make sure this is the last PATH variable change. # Add RVM to PATH for scripting. Make sure this is the last PATH variable change.
export PATH="$PATH:$HOME/.rvm/bin" export PATH="$PATH:$HOME/.rvm/bin"
. "$HOME/.atuin/bin/env"