commit 1f546f822eb824ad23cbf3d8001af0daec63fbf8
Author: creations <creations@creations.works>
Date:   Sun Mar 23 19:02:00 2025 -0400

    first commit

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a571d01
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+out
+dist
+node_modules
+.vscode-test/
+*.vsix
+bun.lock
+vsc-extension-quickstart.md
diff --git a/.vscode-test.mjs b/.vscode-test.mjs
new file mode 100644
index 0000000..8bf881e
--- /dev/null
+++ b/.vscode-test.mjs
@@ -0,0 +1,5 @@
+import { defineConfig } from "@vscode/test-cli";
+
+export default defineConfig({
+	files: "out/test/**/*.test.js",
+});
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..186459d
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,8 @@
+{
+	// See http://go.microsoft.com/fwlink/?LinkId=827846
+	// for the documentation about the extensions.json format
+	"recommendations": [
+		"dbaeumer.vscode-eslint",
+		"ms-vscode.extension-test-runner"
+	]
+}
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..8880465
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,21 @@
+// A launch configuration that compiles the extension and then opens it inside a new window
+// Use IntelliSense to learn about possible attributes.
+// Hover to view descriptions of existing attributes.
+// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+{
+	"version": "0.2.0",
+	"configurations": [
+		{
+			"name": "Run Extension",
+			"type": "extensionHost",
+			"request": "launch",
+			"args": [
+				"--extensionDevelopmentPath=${workspaceFolder}"
+			],
+			"outFiles": [
+				"${workspaceFolder}/out/**/*.js"
+			],
+			"preLaunchTask": "${defaultBuildTask}"
+		}
+	]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..afdab66
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,11 @@
+// Place your settings in this file to overwrite default and user settings.
+{
+	"files.exclude": {
+		"out": false // set this to true to hide the "out" folder with the compiled JS files
+	},
+	"search.exclude": {
+		"out": true // set this to false to include "out" folder in search results
+	},
+	// Turn off tsc task auto detection since we have the necessary tasks as npm scripts
+	"typescript.tsc.autoDetect": "off"
+}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000..e6ae510
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,22 @@
+// See https://go.microsoft.com/fwlink/?LinkId=733558
+// for the documentation about the tasks.json format
+{
+	"version": "2.0.0",
+	"tasks": [
+		{
+			"label": "Watch TypeScript",
+			"type": "shell",
+			"command": "bun run watch",
+			"problemMatcher": "$tsc-watch",
+			"isBackground": true,
+			"presentation": {
+				"reveal": "never"
+			},
+			"group": {
+				"kind": "build",
+				"isDefault": true
+			}
+		}
+	]
+}
+
diff --git a/.vscodeignore b/.vscodeignore
new file mode 100644
index 0000000..7d3e5c7
--- /dev/null
+++ b/.vscodeignore
@@ -0,0 +1,11 @@
+.vscode/**
+.vscode-test/**
+src/**
+.gitignore
+.yarnrc
+vsc-extension-quickstart.md
+**/tsconfig.json
+**/eslint.config.mjs
+**/*.map
+**/*.ts
+**/.vscode-test.*
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..1f0dd26
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,3 @@
+## [Unreleased]
+
+- Initial release
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d674e33
--- /dev/null
+++ b/README.md
@@ -0,0 +1,71 @@
+# forgejo-sync README
+
+This is the README for your extension "forgejo-sync". After writing up a brief description, we recommend including the following sections.
+
+## Features
+
+Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file.
+
+For example if there is an image subfolder under your extension project workspace:
+
+\!\[feature X\]\(images/feature-x.png\)
+
+> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow.
+
+## Requirements
+
+If you have any requirements or dependencies, add a section describing those and how to install and configure them.
+
+## Extension Settings
+
+Include if your extension adds any VS Code settings through the `contributes.configuration` extension point.
+
+For example:
+
+This extension contributes the following settings:
+
+* `myExtension.enable`: Enable/disable this extension.
+* `myExtension.thing`: Set to `blah` to do something.
+
+## Known Issues
+
+Calling out known issues can help limit users opening duplicate issues against your extension.
+
+## Release Notes
+
+Users appreciate release notes as you update your extension.
+
+### 1.0.0
+
+Initial release of ...
+
+### 1.0.1
+
+Fixed issue #.
+
+### 1.1.0
+
+Added features X, Y, and Z.
+
+---
+
+## Following extension guidelines
+
+Ensure that you've read through the extensions guidelines and follow the best practices for creating your extension.
+
+* [Extension Guidelines](https://code.visualstudio.com/api/references/extension-guidelines)
+
+## Working with Markdown
+
+You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
+
+* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux).
+* Toggle preview (`Shift+Cmd+V` on macOS or `Shift+Ctrl+V` on Windows and Linux).
+* Press `Ctrl+Space` (Windows, Linux, macOS) to see a list of Markdown snippets.
+
+## For more information
+
+* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
+* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
+
+**Enjoy!**
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 0000000..62651a9
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,39 @@
+import typescriptEslint from "@typescript-eslint/eslint-plugin";
+import tsParser from "@typescript-eslint/parser";
+
+export default [{
+    files: ["**/*.ts"],
+}, {
+    plugins: {
+        "@typescript-eslint": typescriptEslint,
+    },
+
+    languageOptions: {
+        parser: tsParser,
+        ecmaVersion: 2022,
+        sourceType: "module",
+    },
+
+    rules: {
+        "@typescript-eslint/naming-convention": [
+            "warn",
+            {
+                selector: "variable",
+                format: ["camelCase"],
+            },
+            {
+                selector: "import",
+                format: ["camelCase", "PascalCase"],
+            }
+        ],
+        "@typescript-eslint/no-inferrable-types": "warn",
+        curly: "warn",
+        eqeqeq: "warn",
+        "no-throw-literal": "warn",
+        semi: "warn",
+        quotes: ["warn", "double"],
+        "no-unused-vars": "warn",
+        "no-constant-condition": "warn",
+        "no-irregular-whitespace": "warn",
+    },
+}];
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..8967776
--- /dev/null
+++ b/package.json
@@ -0,0 +1,41 @@
+{
+  "name": "forgejo-sync",
+  "displayName": "forgejo-sync",
+  "description": "",
+  "version": "0.0.1",
+  "engines": {
+    "vscode": "^1.98.0"
+  },
+  "categories": [
+    "Other"
+  ],
+  "activationEvents": [],
+  "main": "./out/extension.js",
+  "contributes": {
+    "commands": [
+      {
+        "command": "forgejo-sync.getPaths",
+        "title": "Get Paths"
+      }
+    ]
+  },
+  "scripts": {
+    "vscode:prepublish": "bun run compile",
+    "compile": "bunx tsc -p ./",
+    "watch": "bunx tsc -w -p ./",
+    "pretest": "bun run compile && bun run lint",
+    "lint": "bunx eslint src",
+    "test": "bunx vscode-test"
+  },
+  "devDependencies": {
+    "@types/vscode": "^1.98.0",
+    "@types/mocha": "^10.0.10",
+    "@types/node": "20.x",
+    "@typescript-eslint/eslint-plugin": "^8.25.0",
+    "@typescript-eslint/parser": "^8.25.0",
+    "eslint": "^9.21.0",
+    "typescript": "^5.7.3",
+    "@vscode/test-cli": "^0.0.10",
+    "@vscode/test-electron": "^2.4.1"
+  }
+}
diff --git a/src/extension.ts b/src/extension.ts
new file mode 100644
index 0000000..5a9ae40
--- /dev/null
+++ b/src/extension.ts
@@ -0,0 +1,70 @@
+
+
+import * as vscode from "vscode";
+import { homedir } from "os";
+import { join } from "path";
+import { existsSync } from "fs";
+
+function getPaths(): { [key: string]: string | null } {
+    const appName: string = vscode.env.appName.toLowerCase();
+    let paths: { [key: string]: string | null } = {};
+
+    let basePath: string;
+    
+    if (process.platform === "win32") {
+        if (appName.includes("codium")) {
+            basePath = join(process.env.APPDATA || "", "VSCodium", "User");
+        } else if (appName.includes("oss")) {
+            basePath = join(process.env.APPDATA || "", "Code - OSS", "User");
+        } else {
+            basePath = join(process.env.APPDATA || "", "Code", "User");
+        }
+    } else if (process.platform === "darwin") {
+        if (appName.includes("codium")) {
+            basePath = join(homedir(), "Library", "Application Support", "VSCodium", "User");
+        } else if (appName.includes("oss")) {
+            basePath = join(homedir(), "Library", "Application Support", "Code - OSS", "User");
+        } else {
+            basePath = join(homedir(), "Library", "Application Support", "Code", "User");
+        }
+    } else {
+        if (appName.includes("codium")) {
+            basePath = join(homedir(), ".config", "VSCodium", "User");
+        } else if (appName.includes("oss")) {
+            basePath = join(homedir(), ".config", "Code - OSS", "User");
+        } else {
+            basePath = join(homedir(), ".config", "Code", "User");
+        }
+    }
+
+    paths["settings"] = join(basePath, "settings.json"); // file
+    paths["kb_shortcuts"] = join(basePath, "keybindings.json"); // file
+    paths["snippets"] = join(basePath, "snippets"); // folder
+    paths["tasks"] = join(basePath, "tasks.json"); // file
+    paths["ui_state"] = join(basePath, "globalStorage"); // folder
+    paths["ext"] = join(basePath, "extensions"); // folder
+    paths["profiles"] = join(basePath, "profiles"); // folder
+
+    for (const key in paths) {
+        if (!existsSync(paths[key] as string)) {
+            paths[key] = null;
+        }
+    }
+
+    return paths;
+}
+
+export function activate(context: vscode.ExtensionContext) {    
+    let disposable = vscode.commands.registerCommand("forgejo-sync.getPaths", () => {
+        vscode.window.showInformationMessage("Command executed");
+        const settingsPath = getPaths();
+		if (settingsPath) {
+			console.log(settingsPath);
+		}
+    });
+
+    context.subscriptions.push(disposable);
+}
+
+
+export function deactivate() {}
diff --git a/src/test/extension.test.ts b/src/test/extension.test.ts
new file mode 100644
index 0000000..8857ba1
--- /dev/null
+++ b/src/test/extension.test.ts
@@ -0,0 +1,15 @@
+import * as assert from "assert";
+
+// You can import and use all API from the 'vscode' module
+// as well as import your extension to test it
+import * as vscode from "vscode";
+// import * as myExtension from '../../extension';
+
+suite("Extension Test Suite", () => {
+	vscode.window.showInformationMessage("Start all tests.");
+
+	test("Sample test", () => {
+		assert.strictEqual(-1, [1, 2, 3].indexOf(5));
+		assert.strictEqual(-1, [1, 2, 3].indexOf(0));
+	});
+});
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..356580f
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,17 @@
+{
+	"compilerOptions": {
+		"module": "Node16",
+		"target": "ES2022",
+		"outDir": "out",
+		"lib": [
+			"ES2022"
+		],
+		"sourceMap": true,
+		"rootDir": "src",
+		"strict": true,   /* enable all strict type-checking options */
+		/* Additional Checks */
+		// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
+		// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
+		// "noUnusedParameters": true,  /* Report errors on unused parameters. */
+	}
+}