') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Add Linus Keyboard by Schlafhase · Pull Request #648 · hackclub/hackpad · GitHub
Skip to content

Add Linus Keyboard - #648

Closed
Schlafhase wants to merge 2 commits into
hackclub:mainfrom
Schlafhase:main
Closed

Add Linus Keyboard#648
Schlafhase wants to merge 2 commits into
hackclub:mainfrom
Schlafhase:main

Conversation

@Schlafhase

Copy link
Copy Markdown
Contributor

Ready to submit your project? Nice job! Hopefully you've read the submission guidelines. If not, make sure to read them first.

Check off the following to let the reviewers know you've done everything:

  • I HAVE RAN DRC ON MY DESIGN WITH ZERO ERRORS (Silkscreen errors are okay)
  • I HAVE BRANDED ALL MY PARTS (PCB, CASE) WITH MY HACKPAD'S NAME
  • I HAVE MADE SURE MY 3D PRINTED PARTS DO NOT REQUIRE SUPPORTS (Text branding overhang is okay)
  • I HAVE MADE SURE TO INCLUDE TOLERANCES (0.25mm)
  • MY HACKPAD'S PCB IS UNDER 100mm x 100mm, I DO NOT HAVE MORE THAN 16X SWITCHES, 2X ROTARY ENCODERS, 1X OLED, 16X LEDS. It's a hackboard
  • IN MY FOLDER, THERE IS A README.MD FILE THAT CONTAINS THE FOLLOWING INFORMATION:
  • Full render including all the parts
  • A few sentences about the inspiration and challenges
  • BOM
  • Photos of the Schematic, PCB, and case

If you're unsure about the format, make sure to check out this example and follow the format there.

If this PR isn't a submission, that's okay too! Please remove the above boxes and explain what the pull request is for! If there's anything about this PR template that seems confusing, send a message in #hackpad in slack!

@vercel

vercelBot commented Mar 2, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for Git ↗︎

NameStatusPreviewCommentsUpdated (UTC)
hackpad✅ Ready (Inspect)Visit Preview💬 Add feedbackMar 2, 2025 7:23pm

@taciturnaxolotltaciturnaxolotl left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need a schematic image, pcb image, and assembled cad image

@Schlafhase

Schlafhase commented Mar 7, 2025

Copy link
Copy Markdown
ContributorAuthor

You need a schematic image, pcb image, and assembled cad image

I have them in my readme

@taciturnaxolotltaciturnaxolotl left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops i looked at the firmware readme 💀 Approved!

My approved hackpad: #417

@philomusic1philomusic1 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I approve this submission, this is my PR github

@M0HID

Copy link
Copy Markdown
Collaborator

Hey there! Moving on with the new submission flow, please could you make a new repo for this and add it to the canvas in #hackpad? Thanks!

@M0HIDM0HID closed this Jun 14, 2025
@Schlafhase

Copy link
Copy Markdown
ContributorAuthor

Hey there! Moving on with the new submission flow, please could you make a new repo for this and add it to the canvas in #hackpad? Thanks!

Hi, thanks for telling me. I don't think I need my hackboard anymore but thanks for reaching out anyways.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Schlafhase@M0HID@taciturnaxolotl@philomusic1@qcoral