From ee78eef527e3dbb5867de91fcadd6fbae411a81d Mon Sep 17 00:00:00 2001 From: Squibid Date: Wed, 17 Sep 2025 23:05:25 -0400 Subject: [PATCH] initial commit --- .gitignore | 1 + Makefile | 25 +++++++ background.js | 96 ++++++++++++++++++++++++++ genfs.sh | 15 ++++ icons/background.png | Bin 0 -> 263388 bytes icons/misc.png | Bin 0 -> 263388 bytes manifest.json | 59 ++++++++++++++++ nativemsg/bg.py | 18 +++++ nativemsg/bg_app.json | 7 ++ startpage/index.html | 28 ++++++++ startpage/index.js | 134 ++++++++++++++++++++++++++++++++++++ startpage/root/.bin | 4 ++ startpage/root/bin/clear.js | 12 ++++ startpage/root/bin/fetch.js | 29 ++++++++ startpage/root/bin/gpt.js | 26 +++++++ startpage/root/bin/man.js | 53 ++++++++++++++ startpage/style.css | 103 +++++++++++++++++++++++++++ 17 files changed, 610 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 background.js create mode 100755 genfs.sh create mode 100644 icons/background.png create mode 100644 icons/misc.png create mode 100644 manifest.json create mode 100644 nativemsg/bg.py create mode 100644 nativemsg/bg_app.json create mode 100644 startpage/index.html create mode 100644 startpage/index.js create mode 100644 startpage/root/.bin create mode 100644 startpage/root/bin/clear.js create mode 100644 startpage/root/bin/fetch.js create mode 100644 startpage/root/bin/gpt.js create mode 100644 startpage/root/bin/man.js create mode 100644 startpage/style.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c73b058 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +misctils.xpi diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bef4f6f --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +MOZ_NATIVE=$(HOME)/.mozilla/native-messaging-hosts + +release: xpi + +xpi: + zip -r misctils.xpi *.js manifest.json icons/ startpage/ + +startpage: + ./genfs.sh + +install: + mkdir -p $(MOZ_NATIVE) + cp nativemsg/bg.py $(MOZ_NATIVE) + + # make the home directory work for all users + sed "s@HOME@$(HOME)@" nativemsg/bg_app.json > $(MOZ_NATIVE)/bg_app.json + chmod +x $(MOZ_NATIVE)/bg.py + +uninstall: + rm $(MOZ_NATIVE)/bg_app.json $(MOZ_NATIVE)/bg.py + +clean: + rm misctils.xpi + +.PHONY: startpage diff --git a/background.js b/background.js new file mode 100644 index 0000000..bc352fe --- /dev/null +++ b/background.js @@ -0,0 +1,96 @@ +/* add a context menu for setting the background */ +browser.menus.create({ + id: "set-background", + title: "Set Background Image", + contexts: [ "image" ], + icons: { + "16": "icons/background.png", + "32": "icons/background.png", + "64": "icons/background.png", + "128": "icons/background.png", + "256": "icons/background.png" + } +}) + +/* add a context menu for accessing repo on github */ +browser.menus.create({ + id: "search-github", + title: "Open in Github", + contexts: [ "selection" ] +}) + +browser.menus.onClicked.addListener(info => { + if (info.menuItemId == "set-background") { + browser.runtime.sendNativeMessage("bg_app", info.srcUrl); + } else if (info.menuItemId == "search-github" && info.selectionText) { + const trimmedText = info.selectionText.trim(); + const githubUrl = `https://github.com/${trimmedText}`; + chrome.tabs.create({ url: githubUrl }) + } +}); + +/* add functionality to commands defined in manifest.json */ +chrome.commands.onCommand.addListener(function(action) { + action.preventDefault(); + switch (action) { + case "toggle-pin-tab": /* toggle current tab pinning */ + chrome.tabs.query({ currentWindow: true, active: true }, function(found_tab) { + const currentTab = found_tab[0] + const toggledValue = !currentTab.pinned; + + chrome.tabs.update(currentTab.id, { pinned: toggledValue }); + }); + break; + + /* switch between tabs */ + case "tab-up": + chrome.tabs.query({ currentWindow: true, active: true }, function(found_tab) { + switch_tab(found_tab[0].index - 1); + }); + break; + case "tab-down": + chrome.tabs.query({ currentWindow: true, active: true }, function(found_tab) { + switch_tab(found_tab[0].index + 1); + }); + break; + + /* close tab */ + case "tab-close": + chrome.tabs.query({ currentWindow: true, active: true }, function(found_tab) { + browser.tabs.remove(found_tab[0].id); + }); + break; + case "scroll-half-down": + window.scrollBy(0, window.innerHeight / 2, "smooth"); + console.log(window) + console.log("hello world") + break; + case "scroll-half-up": + window.scrollBy(0, -(window.innerHeight / 2), "smooth"); + console.log(window) + console.log("hello world") + break; + } +}); + +function switch_tab(tab_number) { + /* I don't want it to cycle around */ + if (tab_number < 0) { + return; + } + + chrome.tabs.query({ currentWindow: true, active: true }, function(found_tabs) { + const currentTab = found_tabs[0]; + if (currentTab.index == tab_number) { + /* we're already on the current tab */ + return; + } + + /* change the selected tab to active */ + browser.tabs.query({ currentWindow: true }, function(window_tabs) { + if (typeof window_tabs.at(tab_number) != "undefined") { + chrome.tabs.update(window_tabs.at(tab_number).id, { active: true }); + } + }); + }); +} diff --git a/genfs.sh b/genfs.sh new file mode 100755 index 0000000..eba1faa --- /dev/null +++ b/genfs.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# generate fs files because we can't do directory traversal from js within a +# browser. + +for d in ./startpage/root/*; do + if [ ! -d "$d" ]; then + continue + fi + + s="" + for f in "$d"/*; do + s=${s:+$s\\n}$(echo "$f" | cut -d '/' -f 5-) + done + echo "$s" > ./startpage/root/."$(echo "$d" | cut -d '/' -f 4-)" +done diff --git a/icons/background.png b/icons/background.png new file mode 100644 index 0000000000000000000000000000000000000000..2bdfeae73a27333ed3d01e36b65c4cedb510fcb6 GIT binary patch literal 263388 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,$ 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 My7(&>e)zZle~p^&0RR91 literal 0 HcmV?d00001 diff --git a/icons/misc.png b/icons/misc.png new file mode 100644 index 0000000000000000000000000000000000000000..335529d82285dcbc39f2de1c146b0a7eafe9cfe4 GIT binary patch literal 263388 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 K_`!et&;K6{SfZc+ literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..0a21fd0 --- /dev/null +++ b/manifest.json @@ -0,0 +1,59 @@ +{ + "name": "misctils", + "version": "1.0", + "description": "Miscelanious Utils for Firefox", + "icons": { + "16": "icons/misc.png", + "32": "icons/misc.png", + "64": "icons/misc.png", + "128": "icons/misc.png", + "256": "icons/misc.png" + }, + "manifest_version": 2, + "permissions": [ "menus", "activeTab", "tabs", "nativeMessaging", "storage" ], + + "browser_specific_settings": { + "gecko": { + "id": "misc@tils", + "strict_min_version": "58.0" + } + }, + + "background": { + "scripts": [ "background.js" ], + "persistent": false + }, + "chrome_settings_overrides" : { + "homepage": "startpage/index.html" + }, + "chrome_url_overrides" : { + "newtab": "startpage/index.html" + }, + + "commands": { + "toggle-pin-tab": { + "suggested_key": { "default": "Alt+P" }, + "description": "Pin the currently active tab." + }, + "tab-up": { + "suggested_key": { "default": "Alt+K" }, + "description": "Switch tab focus to one up." + }, + "tab-down": { + "suggested_key": { "default": "Alt+J" }, + "description": "Switch tab focus to one down." + }, + "tab-close": { + "suggested_key": { "default": "Alt+C" }, + "description": "Close the current tab." + }, + "scroll-half-down": { + "suggested_key": { "default": "Alt+D" }, + "description": "Scroll down half a page." + }, + "scroll-half-up": { + "suggested_key": { "default": "Alt+U" }, + "description": "Scroll up half a page." + } + } +} diff --git a/nativemsg/bg.py b/nativemsg/bg.py new file mode 100644 index 0000000..48242ec --- /dev/null +++ b/nativemsg/bg.py @@ -0,0 +1,18 @@ +#!/usr/bin/env -S python3 +import sys +import struct +import subprocess + +# Read a message from stdin and decode it. +rawLength = sys.stdin.buffer.read(4) +if len(rawLength) == 0: + sys.exit(0) + +# Read the length of the message +messageLength: int = struct.unpack("@I", rawLength)[0] + +# Decode the message +message = sys.stdin.buffer.read(messageLength).decode("utf-8") + +# Run the background setting with a link to the image +_ = subprocess.run(["setbg", "-tw", message.replace('"', "")]) diff --git a/nativemsg/bg_app.json b/nativemsg/bg_app.json new file mode 100644 index 0000000..7fe4e79 --- /dev/null +++ b/nativemsg/bg_app.json @@ -0,0 +1,7 @@ +{ + "name": "bg_app", + "description": "set background via native script", + "path": "HOME/.mozilla/native-messaging-hosts/bg.py", + "type": "stdio", + "allowed_extensions": [ "misc@tils" ] +} diff --git a/startpage/index.html b/startpage/index.html new file mode 100644 index 0000000..e3a7635 --- /dev/null +++ b/startpage/index.html @@ -0,0 +1,28 @@ + + + + + + + + Startpage + + +
+

+

+
+

+

+

+ + + diff --git a/startpage/index.js b/startpage/index.js new file mode 100644 index 0000000..c414ef1 --- /dev/null +++ b/startpage/index.js @@ -0,0 +1,134 @@ +let clock = document.getElementById("clock"); +let date = document.getElementById("date"); +let input = document.getElementById("search-bar"); +let result = document.getElementById("search-results"); + +/* Allow toggling between military and 12 hr time */ +let military_time = false +clock.onclick = function() { + military_time = !military_time; + time(); +} + +function time(timeout) { + let d = new Date(); + let m = d.getMinutes(); + let h = d.getHours(); + + /* if it hasn't been set then set it here */ + if (military_time) { + clock.textContent = `${("0" + h).substr(-2)}:${("0" + m).substr(-2)}`; + } else { + let hours = h % 12; + let minutes = ("0" + m).substr(-2); + hours = hours ? hours : 12; + + clock.textContent = `${hours}:${minutes} ${(h >= 12 ? "PM" : "AM")}`; + } + + /* set the time every second */ + timeout && setTimeout(() => time(true), (60 - d.getSeconds()) * 1000); +} + +let last_date; +/* Sun 31st, May */ +function cal(force) { + const days = [ "Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat" ]; + const months = [ "January", "Febuary", "March", "April", "May", "June", + "July", "August", "September", "November", "December", ]; + + let d = new Date(); + let day = days[d.getDay()]; + let day_of_month = d.getDate(); + let month = months[d.getMonth()]; + let day_suffix + + /* get a suffix for the day of the month */ + if (day_of_month > 3 && day_of_month < 21) { + day_suffix = "th"; + } else if ((day_of_month / 1) % 10 == 1) { + day_suffix = "st"; + } else if ((day_of_month / 1) % 10 == 2) { + day_suffix = "nd"; + } else if ((day_of_month / 1) % 10 == 3) { + day_suffix = "rd"; + } else { + day_suffix = "th"; + } + + /* check if this date has already been set before */ + if (!force && last_date == `${d.getDay()}${d.getMonth()}`) { + return; + } + + date.textContent = `${day} ${day_of_month}${day_suffix}, ${month}`; + + /* store the last date that was set */ + last_date = `${d.getDay()}${d.getMonth()}`; +} + +/* show the time on the page */ +time(true); + +/* just incase something dumb happens the time should update when the user + * focus's the page */ +window.addEventListener('focus', time); + +cal(); +setInterval(cal, 1000); + +function shell(event) { + var env = { + path: "/startpage/root/bin/", + }; + + /* convert a directory such as /startpage/root/bin/ to /startpage/root/.bin + * to read static fs data. + */ + function convertPath(path) { + if (path.endsWith('/')) { + path = path.slice(0, -1); + } + const parts = path.split('/'); + const hidden = '.' + parts.pop(); + return parts.concat(hidden).join('/'); + } + + async function run(path) { + try { + const response = await fetch(convertPath(env.path)); + if (!response.ok) { + throw new Error(`Failed to load file: ${response.status}`); + } + + const text = await response.text(); + const lines = text.split(/\r?\n/); + const matchedLine = lines.find(line => line.split(".")[0] == path); + if (!matchedLine) { + throw new Error(`${path} cannot be found in path.`); + } + + const file = env.path + matchedLine; + const { cmd } = await import(file); + return await cmd(input.value, event.key); + } catch (err) { + throw err; + } + } + + if (input.value == "") { + input.style.color = "white"; + } else { + run(input.value.substring(0, input.value.indexOf(" ")) || input.value) + .then(res => { + result.innerHTML = res; + input.style.color = "var(--blue)"; + }) + .catch(err => { + input.style.color = "white"; + }); + } +} + +input.addEventListener('keyup', shell); +shell({ key: "" }); diff --git a/startpage/root/.bin b/startpage/root/.bin new file mode 100644 index 0000000..6524928 --- /dev/null +++ b/startpage/root/.bin @@ -0,0 +1,4 @@ +clear.js +fetch.js +gpt.js +man.js diff --git a/startpage/root/bin/clear.js b/startpage/root/bin/clear.js new file mode 100644 index 0000000..ba1a2d6 --- /dev/null +++ b/startpage/root/bin/clear.js @@ -0,0 +1,12 @@ +export async function cmd() { + return ``; +} + +export let man = ` +
+CLEAR(1)
+
+NAME
+\tclear - clear the screen
+
+` diff --git a/startpage/root/bin/fetch.js b/startpage/root/bin/fetch.js new file mode 100644 index 0000000..723adbb --- /dev/null +++ b/startpage/root/bin/fetch.js @@ -0,0 +1,29 @@ +export async function cmd(_) { +return ` +
+         _____\t\t\tOS: ${navigator.platform}
+     .-""     ""-.\t\tLang: ${navigator.language}
+  /(/   _      }\`;\`.\t\tTimezone: ${Intl.DateTimeFormat().resolvedOptions().timeZone}
+  |\`---'/       \` \`;\\\t\tAgent: ${navigator.userAgent}
+ .'    (\`._      ;  \`:
+:       \--'     '|\`;,;
+|    .---'        ; | |
+:    ' \`.__.-.   /  ; ;
+ :      .----' .'  / :
+  \`.    \`----'  .' /
+   \`.\`--.  __ .-  .'
+     \`-._     _.-' fsc
+         \`""""
+
+`; +} + +export let man = ` +
+FETCH(1)
+
+NAME
+\tfetch – Get information about the browser. This is specific to firefox because
+\tthis addon is specific to firefox.
+
+` diff --git a/startpage/root/bin/gpt.js b/startpage/root/bin/gpt.js new file mode 100644 index 0000000..d1882cf --- /dev/null +++ b/startpage/root/bin/gpt.js @@ -0,0 +1,26 @@ +export async function cmd(inp, k) { + var search = "" + if (inp.indexOf(" ") > 0) { + search = inp.substring(inp.indexOf(" ") + 1) + } + + if (k == 'Enter') { + window.open(`https://chatgpt.com/?q=${search}`, '_self'); + } + + return ` +
+press Enter to search chat.openai.com for: '${search}'
+
+`; +} + +export let man = ` +
+GPT(1)
+
+NAME
+\tgpt - search chat.openai.com for something. You'll probably only get slop
+\tbut it may have a chance of helping.
+
+` diff --git a/startpage/root/bin/man.js b/startpage/root/bin/man.js new file mode 100644 index 0000000..f3f8f44 --- /dev/null +++ b/startpage/root/bin/man.js @@ -0,0 +1,53 @@ +var getmanval; +async function getman(path) { + try { + const module = await import("/startpage/" + path); + return module.man; + } catch (error) { + return null; + } +} + +/* TODO: update to use the path in the env this can be done once we first + * make the env available to the programs running in the shell + */ +export async function cmd(inp) { + var search = "" + if (inp.indexOf(" ") > 0) { + search = inp.substring(inp.indexOf(" ") + 1) + } + switch (search) { + case "fetch": return getman('/root/bin/fetch.js'); + case "gpt": return getman('/root/bin/gpt.js'); + case "clear": return getman('/root/bin/clear.js'); + case "shell": return manshell; + case "man": default: return man; + } +} + +export let man = ` +
+MAN(1)
+
+NAME
+\tman – display manual pages
+
+SEE ALSO
+\tfetch(1), gpt(1), shell(1), clear(1)
+
+`; + +export let manshell = ` +
+SHELL(1)
+
+NAME
+\tshell – command interpreter
+
+DESCRIPTION
+\tshell is a shell for my startpage. It's not POSIX nor will it ever be. It's
+\tsole job it to interpret text and run a command if a valid one is found.
+\tWhile this is quite unintuitive in a standard UNIX shell in my opinion this
+\tmakes sense here because of such a limited number of commands.
+
+`; diff --git a/startpage/style.css b/startpage/style.css new file mode 100644 index 0000000..d803252 --- /dev/null +++ b/startpage/style.css @@ -0,0 +1,103 @@ +:root { + --bg: #161617; + --fg: #c9c7cd; + --bg-dark: #131314; + + /* Normal */ + --black: #27272a; + --red: #f5a191; + --green: #90b99f; + --yellow: #e6b99d; + --blue: #aca1cf; + --magenta: #e29eca; + --cyan: #ea83a5; + --white: #c1c0d4; + /* Bright */ + --bright-black: #353539; + --bright-red: #ffae9f; + --bright-green: #9dc6ac; + --bright-yellow: #f0c5a9; + --bright-blue: #b9aeda; + --bright-magenta: #ecaad6; + --bright-cyan: #f591b2; + --bright-white: #cac9dd; + /* Grays */ + --gray01: #1b1b1d; + --gray02: #2a2a2d; + --gray03: #3e3e43; + --gray04: #57575f; + --gray05: #757581; + --gray06: #9998a8; + --gray07: var(--white); +} + +html, body { + background-color: var(--bg-dark); + max-width: 80ch; + max-height: 100%; + margin: auto; +} + +@media (orientation: portrait) { + html, body { + max-width: 100% !important; + padding: 5px !important; + } +} + +#font, p, ul, ol, h1, h2, h3, h4, h5, table { + font-family: sans-serif; + color: white; +} +pre { + color: white; +} +h1 { + font-size: 3em; +} +a { + font-family: sans-serif; + text-decoration: none; + color: var(--cyan); +} +a:hover, a:active { + text-decoration: underline; +} + +#search { + display: flex; + align-items: center; + + #search-bar, #search-btn { + height: 2.25em; + background-color: var(--bg); + color: white; + padding: 0 15px; + border: none; + } + #search-bar { + width: 100%; + } + #search-bar:focus { + outline: none; + background-color: var(--gray01); + } + #search-btn { + background-color: var(--yellow); + color: var(--bg); + font-weight: bold; + cursor: pointer; + } + #search-btn:focus { + outline: none; + background-color: var(--bright-yellow); + } +} +#search-results { + height: 15lh; + margin-top: 0px; + margin-bottom: 0px; + padding: 15px; + overflow: scroll; + background-color: #111112; +}