diff --git a/.claude/settings.json b/.claude/settings.json index 5bcf1e1..698aa41 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -1,6 +1,9 @@ { "env": { - "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "100000" + "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "100000", + "OBSIDIAN_API_KEY": "7079ccd0a88f83f4a96fd9564bf25b3cb21fce1bff6d9e5b213c02b8b3af6d57", + "OBSIDIAN_PORT": "27124", + "OBSIDIAN_VAULT": "https://127.0.0.1:27124/vault" }, "hooks": { "Notification": [ @@ -29,6 +32,16 @@ "timeout": 2 } ] + }, + { + "matcher": "Write", + "hooks": [ + { + "type": "command", + "command": "jq -r '.tool_input.file_path // .tool_response.filePath // \"\"' | { read -r f; if [[ \"$f\" =~ docs/superpowers/specs/.*\\.md$ ]]; then project=$(basename \"$(git -C \"$(dirname \"$f\")\" rev-parse --show-toplevel 2>/dev/null)\" 2>/dev/null || echo \"unknown\"); filename=$(basename \"$f\"); curl -s -k -X PUT \"$OBSIDIAN_VAULT/Claude/$project/$filename\" -H \"Authorization: Bearer $OBSIDIAN_API_KEY\" -H \"Content-Type: text/markdown\" --data-binary \"@$f\" 2>/dev/null || true; fi; } 2>/dev/null || true", + "async": true + } + ] } ], "PostToolUseFailure": [ diff --git a/docker_files/awscli/Dockerfile b/docker_files/awscli/Dockerfile new file mode 100644 index 0000000..f058aee --- /dev/null +++ b/docker_files/awscli/Dockerfile @@ -0,0 +1,19 @@ +FROM alpine:latest + +RUN apk --no-cache add \ + ca-certificates \ + groff \ + less \ + python3 \ + py3-pip \ + && pip3 install awscli \ + && mkdir -p /root/.aws \ + && { \ + echo '[default]'; \ + echo 'output = json'; \ + echo 'region = us-east-1'; \ + echo 'aws_access_key_id = $AMAZON_ACCESS_KEY_ID'; \ + echo 'aws_secret_access_key = $AMAZON_SECRET_ACCESS_KEY'; \ + } > /root/.aws/config + + ENTRYPOINT [ "aws" ] diff --git a/docker_files/awscli/install.sh b/docker_files/awscli/install.sh new file mode 100644 index 0000000..5fd5d1e --- /dev/null +++ b/docker_files/awscli/install.sh @@ -0,0 +1,24 @@ + +cat > ../bin/yq <" + +# Install Chrome +RUN apt-get update && apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg \ + hicolor-icon-theme \ + libcanberra-gtk* \ + libgl1-mesa-dri \ + libgl1-mesa-glx \ + libpangox-1.0-0 \ + libpulse0 \ + libv4l-0 \ + fonts-symbola \ + --no-install-recommends \ + && curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \ + && echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list \ + && apt-get update && apt-get install -y \ + google-chrome-stable \ + --no-install-recommends \ + && apt-get purge --auto-remove -y curl \ + && rm -rf /var/lib/apt/lists/* + +# Add chrome user +RUN groupadd -r chrome && useradd -r -g chrome -G audio,video chrome \ + && mkdir -p /home/chrome/Downloads && chown -R chrome:chrome /home/chrome + +COPY local.conf /etc/fonts/local.conf + +# Run Chrome as non privileged user +USER chrome + +# Autorun chrome +ENTRYPOINT [ "google-chrome" ] +CMD [ "--user-data-dir=/data" ] diff --git a/docker_files/chrome/local.conf b/docker_files/chrome/local.conf new file mode 100644 index 0000000..f6a5f5c --- /dev/null +++ b/docker_files/chrome/local.conf @@ -0,0 +1,34 @@ + + + + + +rgb + + + + +true + + + + +hintslight + + + + +true + + + + +lcddefault + + + + +false + + + diff --git a/docker_files/github-dind/.idea/.gitignore b/docker_files/github-dind/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/docker_files/github-dind/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/docker_files/github-dind/.idea/github-dind.iml b/docker_files/github-dind/.idea/github-dind.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/docker_files/github-dind/.idea/github-dind.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/docker_files/github-dind/.idea/modules.xml b/docker_files/github-dind/.idea/modules.xml new file mode 100644 index 0000000..291d8ff --- /dev/null +++ b/docker_files/github-dind/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/docker_files/github-dind/Dockerfile b/docker_files/github-dind/Dockerfile new file mode 100644 index 0000000..242b797 --- /dev/null +++ b/docker_files/github-dind/Dockerfile @@ -0,0 +1,30 @@ +FROM registry.ic-ops.net/base/docker:23-dind + +ARG GOOS=linux +ARG GOARCH=amd64 +ARG VAULT_VERS=1.12.1 +ARG GO_VERS=latest +ARG GO_TARGET_DIR=/usr/local/share +ARG JQ_VERS=latest +ARG YQ_VERS=latest + +ENV ENV="/root/.profile" + +RUN curl -L "https://github.com/mikefarah/yq/releases/${YQ_VERS}/download/yq_linux_amd64" -o "/usr/local/bin/yq" \ + && chmod +x /usr/local/bin/yq +RUN curl -L "https://github.com/jqlang/jq/releases/${JQ_VERS}/download/jq-linux-amd64" -o "/usr/local/bin/jq" \ + && chmod +x /usr/local/bin/jq +RUN curl -L "https://releases.hashicorp.com/vault/${VAULT_VERS}/vault_${VAULT_VERS}_linux_amd64.zip" -o /tmp/vault_${VAULT_VERS}_linux_amd64.zip \ + && unzip /tmp/vault_${VAULT_VERS}_linux_amd64.zip \ + && mv vault /usr/local/bin/vault \ + && rm /tmp/vault_${VAULT_VERS}_linux_amd64.zip + +COPY install-go /tmp/install-go +RUN chmod +x /tmp/install-go \ + && sh /tmp/install-go \ + && rm /tmp/install-go + +ENV PATH="/usr/local/bin/:$GO_TARGET_DIR/go/bin:$PATH" +ENV GOPATH="$GO_TARGET_DIR/go" +ENV GOBIN="$GO_TARGET_DIR/go/bin" + diff --git a/docker_files/github-dind/install-go b/docker_files/github-dind/install-go new file mode 100644 index 0000000..358f9f8 --- /dev/null +++ b/docker_files/github-dind/install-go @@ -0,0 +1,37 @@ +#!/usr/bin/env sh + +TARGETDIR=${GO_TARGET_DIR:="/usr/local/"} + +lookup_file() { + curl -sSL "https://go.dev/dl/?mode=json" | + jq -r '.[0].files[] + | select(.os == "'"$GOOS"'") + | select(.arch == "'"$GOARCH"'") + | .filename' +} + +fetch() { + local filename + if [ $GO_VERS == "latest" ]; then + filename="$(lookup_file)" + else + filename="$GO_VERS.$GOOS-$GOARCH.tar.gz" + fi + [[ -z "$filename" ]] && echo "unable to fetch filename" 1>&2 && return 1 + local path="/tmp/$filename" + [[ -n "$DOWNLOADS" ]] && [[ -d "$DOWNLOADS" ]] && path="$DOWNLOADS/$filename" + curl -L "https://go.dev/dl/$filename" -o "$path" + echo "$path" +} + +install_latest_go() { + local dir="$1" path + [[ -z "$dir" ]] && dir="$TARGETDIR" + [[ -z "$dir" ]] && dir="$HOME/.local" + mkdir -p "$dir" 2>/dev/null + path="$(fetch)" + [[ -z "$path" ]] && echo "unable to fetch go tarball" 1>&2 && return 1 + rm -rf "$dir/go" && tar -C "$dir" -xzf "$path" +} + +install_latest_go "$@" diff --git a/docker_files/htop/Dockerfile b/docker_files/htop/Dockerfile new file mode 100644 index 0000000..838252a --- /dev/null +++ b/docker_files/htop/Dockerfile @@ -0,0 +1,5 @@ +FROM debian:latest + +RUN apt update && apt install -y htop + +CMD ["htop"] diff --git a/docker_files/yqjq/Dockerfile b/docker_files/yqjq/Dockerfile new file mode 100644 index 0000000..b9fcc0b --- /dev/null +++ b/docker_files/yqjq/Dockerfile @@ -0,0 +1,9 @@ +FROM alpine:latest + +RUN apk update && \ + apk add \ + yq \ + jq + +#CMD ["yq"] +ENTRYPOINT ["yq"] diff --git a/docker_files/yqjq/install.sh b/docker_files/yqjq/install.sh new file mode 100644 index 0000000..5fd5d1e --- /dev/null +++ b/docker_files/yqjq/install.sh @@ -0,0 +1,24 @@ + +cat > ../bin/yq <