diff --git a/bin/apas b/bin/apas new file mode 100755 index 0000000..6e2ebdb --- /dev/null +++ b/bin/apas @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +function lhash { + echo -n "${1}" | openssl dgst -sha512 | cut -d' ' -f2 | openssl dgst -md5 | cut -d' ' -f2 +} + +# Prompt user for input +read -p "Website: " url +read -p "Login: " login +read -s -p "Password: " password +echo + +domain=$(echo "$url" | sed -E 's~https?://([^/]+).*~\1~') +hash=$(lhash "$login") +pass_path="web/${domain}/${hash}" + +# Entry content +entry="${password} +url: ${url} +login: ${login} +" + +echo "$entry" | pass insert -m "$pass_path" + +# url +# login +# tags +# note \ No newline at end of file diff --git a/bin/cht b/bin/cht new file mode 100755 index 0000000..67ebfd0 --- /dev/null +++ b/bin/cht @@ -0,0 +1,98 @@ +#!/usr/bin/env node + +import path from "path" +import fs from "fs" + +// DAT_ROOT should exists in ~/.zshrc-local +const indexPath = path.join(process.env["NOTES_DIR"], "") +const processFile = path.join(process.cwd(), process.argv[2]) + + +const data = fs.readFileSync(processFile, 'utf8') +const jsonData = JSON.parse(data) + +function wantSave(str) { + return typeof str == "string" && str.split("\n").length > 10 +} + +function saveToFileSync(content, file) { + const dir = path.dirname(file); + try { + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }) + } + + fs.writeFileSync(file, content, 'utf8') + } catch (err) { + console.error('Error saving file:', err) + } +} + +const toSave = jsonData.flatMap(o => { + const date = new Date(o.create_time * 1000) + + // const formattedDate = date.toLocaleDateString('en-GB', { + // day: '2-digit', + // month: '2-digit', + // year: '2-digit', + // }) + // return formattedDate + + const day = String(date.getDate()).padStart(2, '0') + const month = String(date.getMonth() + 1).padStart(2, '0') + const year = String(date.getFullYear()).slice(-2) + + let baseNotePath = path.join(indexPath, "gpt", `${day}-${month}-${year}`, `${o.title}`) + + let conversations = [] + for (const [key, value] of Object.entries(o.mapping)) { + //console.log(key, value) + + conversations.push({ + path: path.join(baseNotePath, `${key}.json`), + content: JSON.stringify(value, null, 2) + }) + + let parts = value?.message?.content.parts + if (Array.isArray(parts)) { + + if (parts.length == 0) { + // skip + } else if (parts.length == 1) { + let fileName = path.join(baseNotePath, `${key}.md`) + let md = parts[0] + + if (wantSave(md)) { + conversations.push({ + path: fileName, + content: md + }) + } + } else { + + for (const [key, value] of parts.entries()) { + let fileName = path.join(baseNotePath, `${key}-${key+1}.md`) + let md = parts[key] + + if (wantSave(md)) { + conversations.push({ + path: fileName, + content: md + }) + } + } + } + } + + //process.exit(-1) + + } + + return conversations +}) + + +for(const f of toSave) { +//for(const f of toSave.slice(0,5)) { + saveToFileSync(f.content,f.path) +} diff --git a/bin/get b/bin/get new file mode 100755 index 0000000..299ffb7 --- /dev/null +++ b/bin/get @@ -0,0 +1,57 @@ +ARCHIVE=false +DESTINATION_LOCAL_DIR="./" + +if [[ "$1" == "--archive" ]]; then + ARCHIVE=true + shift +fi + +if [[ $# -lt 2 ]]; then + echo "Usage: $0 [--archive] user@host remote_source_dir [local_destination_dir]" + exit 1 +fi + +USER_HOST="$1" +REMOTE_USER="${USER_HOST%@*}" +HOST="${USER_HOST#*@}" + +REMOTE_SOURCE_DIR="$2" +if [[ -n "$3" ]]; then + DESTINATION_LOCAL_DIR="$3" +fi + +if [[ "$REMOTE_SOURCE_DIR" = /* ]]; then + IS_ABSOLUTE=true +else + IS_ABSOLUTE=false +fi + + +echo "ARCHIVE=$ARCHIVE" +echo "REMOTE_USER=$REMOTE_USER" +echo "HOST=$HOST" +echo "REMOTE_SOURCE_DIR=$REMOTE_SOURCE_DIR" +echo "DESTINATION_LOCAL_DIR=$DESTINATION_LOCAL_DIR" + +REMOTE_BASE_DIR="" + +if $IS_ABSOLUTE; then + REMOTE_BASE_DIR="/" +else + REMOTE_BASE_DIR=/home/$REMOTE_USER +fi + + +# Example that works +# ssh debian@gurgul.org "tar --zstd -cf - -C /home/debian .dat" | tar --zstd -xf - -C . +# get debian@gurgul.org .dat + +# get --archive debian@gurgul.org /etc + +TAR_COMMAND="tar --zstd -cf - -C $REMOTE_BASE_DIR $REMOTE_SOURCE_DIR" + +if $ARCHIVE; then + ssh $REMOTE_USER@$HOST $TAR_COMMAND > "$DESTINATION_LOCAL_DIR/$(basename "$REMOTE_SOURCE_DIR")-$(date +"%d-%m-%Y").tar.zst" +else + ssh $REMOTE_USER@$HOST $TAR_COMMAND | tar --zstd -xf - -C $DESTINATION_LOCAL_DIR +fi \ No newline at end of file diff --git a/bin/index b/bin/index new file mode 100755 index 0000000..fd6a40d --- /dev/null +++ b/bin/index @@ -0,0 +1,16 @@ +#!/bin/bash + +# find $NOTES_DIR/gpt -type d -path "$NOTES_DIR/gpt/[0-9][0-9]-[0-9][0-9]-[0-9][0-9]/*" | while read -r path; do +# echo $(basename "$path") +# done | sort -u | fzf + +SEARCH_DIR="$NOTES_DIR/gpt" +DELIMITER="|" + +selected=$(find "$SEARCH_DIR" -type d -path "$SEARCH_DIR/[0-9][0-9]-[0-9][0-9]-[0-9][0-9]/*" | while read -r path; do + topic=$(basename "$path") + echo -e "$topic\t$path" +done | fzf --delimiter='\t' --with-nth=1) + +selected_path=$(echo "$selected" | cut -f2) +echo "Path: $selected_path" diff --git a/bin/zshrc/brew b/bin/zshrc/brew index 4e13a77..6e3f24d 100644 --- a/bin/zshrc/brew +++ b/bin/zshrc/brew @@ -6,4 +6,6 @@ if [[ "$OSTYPE" == "darwin"* ]]; then elif [[ "$ARCH" == "x86_64" ]]; then eval "$(/usr/local/bin/brew shellenv)" fi + + export PATH="$(brew --prefix ruby)/bin:$PATH" fi \ No newline at end of file diff --git a/bin/zshrc/init b/bin/zshrc/init index 8bcae92..e6acd5c 100644 --- a/bin/zshrc/init +++ b/bin/zshrc/init @@ -3,6 +3,9 @@ export PATH="$DAT_ROOT/bin:$HOME/.local/bin:$PATH" +export GEM_HOME="$HOME/.gems" +export GEM_PATH=$HOME/.gems + export RUBYLIB="$DAT_ROOT/lib" export PASSWORD_STORE_DIR=$HOME/.local/lib/secure-vault/passwords diff --git a/home/.local/bin/index b/home/.local/bin/index-list similarity index 100% rename from home/.local/bin/index rename to home/.local/bin/index-list