Repository files navigation

MagicMirror

MagicMirror

Usage of the tool is relatively simple, given you know RegEx.

Usage:
magicmirror [OPTIONS]
Application Options:
-v, --verbose Show verbose information (twice for debug)
-q, --quiet Suppress output
-c, --strip-color Strip colorized output
-t, --trim-leading= Trim leading directory components
-p, --process-workers= Number of process workers to start (default: 25)
-m, --match-workers= Number of match workers to start (default: 2)
-d, --download-workers= Number of download workers to start (default: 2)
-r, --regex= Regex pattern to match (can be specified multiple times)
-u, --url= URLs to fetch (can be specified multiple times)
-V, --version Show version information
Help Options:
-h, --help Show this help message

Some examples might be:

  • Downloading the xz compressed linux-X.Y.0 and patch-X.Y.Z files only, not every release, and every patch and anything else that may be in the directory. You also want to download 5 files at a time, because you have a big pipe and you wanna show it off. You also don't need that hostname and pub directory component. Well, your command might look like this:
$ magicmirror -r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ -t 2

Now that in and of it'self isn't as useful as one might hope. It is useful, but can be more so. Let's say, for sake of argument that you are a site admin, and one of your tasks is keeping the mirrors hosted at your site up to date. Traditionally this has been scripted and uses something like, rsync, httrack, wget, or some such thing. I aim to simplify that process if possible. Now that being said, wrapping the tool up in a script is still the best way to go, as it allows you to maintain a single file of mirrors and patterns and let the automation handle the rest.

Well, to that end, let's add some more mirror jobs to our previous command.

$ magicmirror -t 2 \
-r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ \
-r '^.*/([0-9]*\.[0-9]*|snapshots)/.*/.*\.(iso|img)$' -u http://cdn.openbsd.org/pub/OpenBSD/ \
-r '^.*/NetBSD-[0-9]*\.[0-9]/iso/.*\.(iso|img.gz)$' -u http://cdn.netbsd.org/pub/NetBSD/

This works out because our paths all look like: */pub/*/... and there is the current limitation of the tool. That is being worked around and should be resolved soon.

About

MagicMirror is a site mirroring utility that aims to make the life of mirror admins easier.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

MagicMirror

MagicMirror

Usage of the tool is relatively simple, given you know RegEx.

Usage:
magicmirror [OPTIONS]
Application Options:
-v, --verbose Show verbose information (twice for debug)
-q, --quiet Suppress output
-c, --strip-color Strip colorized output
-t, --trim-leading= Trim leading directory components
-p, --process-workers= Number of process workers to start (default: 25)
-m, --match-workers= Number of match workers to start (default: 2)
-d, --download-workers= Number of download workers to start (default: 2)
-r, --regex= Regex pattern to match (can be specified multiple times)
-u, --url= URLs to fetch (can be specified multiple times)
-V, --version Show version information
Help Options:
-h, --help Show this help message

Some examples might be:

  • Downloading the xz compressed linux-X.Y.0 and patch-X.Y.Z files only, not every release, and every patch and anything else that may be in the directory. You also want to download 5 files at a time, because you have a big pipe and you wanna show it off. You also don't need that hostname and pub directory component. Well, your command might look like this:
$ magicmirror -r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ -t 2

Now that in and of it'self isn't as useful as one might hope. It is useful, but can be more so. Let's say, for sake of argument that you are a site admin, and one of your tasks is keeping the mirrors hosted at your site up to date. Traditionally this has been scripted and uses something like, rsync, httrack, wget, or some such thing. I aim to simplify that process if possible. Now that being said, wrapping the tool up in a script is still the best way to go, as it allows you to maintain a single file of mirrors and patterns and let the automation handle the rest.

Well, to that end, let's add some more mirror jobs to our previous command.

$ magicmirror -t 2 \
-r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ \
-r '^.*/([0-9]*\.[0-9]*|snapshots)/.*/.*\.(iso|img)$' -u http://cdn.openbsd.org/pub/OpenBSD/ \
-r '^.*/NetBSD-[0-9]*\.[0-9]/iso/.*\.(iso|img.gz)$' -u http://cdn.netbsd.org/pub/NetBSD/

This works out because our paths all look like: */pub/*/... and there is the current limitation of the tool. That is being worked around and should be resolved soon.

About

MagicMirror is a site mirroring utility that aims to make the life of mirror admins easier.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MagicMirror

MagicMirror

Usage of the tool is relatively simple, given you know RegEx.

Usage:
magicmirror [OPTIONS]
Application Options:
-v, --verbose Show verbose information (twice for debug)
-q, --quiet Suppress output
-c, --strip-color Strip colorized output
-t, --trim-leading= Trim leading directory components
-p, --process-workers= Number of process workers to start (default: 25)
-m, --match-workers= Number of match workers to start (default: 2)
-d, --download-workers= Number of download workers to start (default: 2)
-r, --regex= Regex pattern to match (can be specified multiple times)
-u, --url= URLs to fetch (can be specified multiple times)
-V, --version Show version information
Help Options:
-h, --help Show this help message

Some examples might be:

  • Downloading the xz compressed linux-X.Y.0 and patch-X.Y.Z files only, not every release, and every patch and anything else that may be in the directory. You also want to download 5 files at a time, because you have a big pipe and you wanna show it off. You also don't need that hostname and pub directory component. Well, your command might look like this:
$ magicmirror -r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ -t 2

Now that in and of it'self isn't as useful as one might hope. It is useful, but can be more so. Let's say, for sake of argument that you are a site admin, and one of your tasks is keeping the mirrors hosted at your site up to date. Traditionally this has been scripted and uses something like, rsync, httrack, wget, or some such thing. I aim to simplify that process if possible. Now that being said, wrapping the tool up in a script is still the best way to go, as it allows you to maintain a single file of mirrors and patterns and let the automation handle the rest.

Well, to that end, let's add some more mirror jobs to our previous command.

$ magicmirror -t 2 \
-r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ \
-r '^.*/([0-9]*\.[0-9]*|snapshots)/.*/.*\.(iso|img)$' -u http://cdn.openbsd.org/pub/OpenBSD/ \
-r '^.*/NetBSD-[0-9]*\.[0-9]/iso/.*\.(iso|img.gz)$' -u http://cdn.netbsd.org/pub/NetBSD/

This works out because our paths all look like: */pub/*/... and there is the current limitation of the tool. That is being worked around and should be resolved soon.

About

MagicMirror is a site mirroring utility that aims to make the life of mirror admins easier.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MagicMirror

MagicMirror

Usage of the tool is relatively simple, given you know RegEx.

Usage:
magicmirror [OPTIONS]
Application Options:
-v, --verbose Show verbose information (twice for debug)
-q, --quiet Suppress output
-c, --strip-color Strip colorized output
-t, --trim-leading= Trim leading directory components
-p, --process-workers= Number of process workers to start (default: 25)
-m, --match-workers= Number of match workers to start (default: 2)
-d, --download-workers= Number of download workers to start (default: 2)
-r, --regex= Regex pattern to match (can be specified multiple times)
-u, --url= URLs to fetch (can be specified multiple times)
-V, --version Show version information
Help Options:
-h, --help Show this help message

Some examples might be:

  • Downloading the xz compressed linux-X.Y.0 and patch-X.Y.Z files only, not every release, and every patch and anything else that may be in the directory. You also want to download 5 files at a time, because you have a big pipe and you wanna show it off. You also don't need that hostname and pub directory component. Well, your command might look like this:
$ magicmirror -r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ -t 2

Now that in and of it'self isn't as useful as one might hope. It is useful, but can be more so. Let's say, for sake of argument that you are a site admin, and one of your tasks is keeping the mirrors hosted at your site up to date. Traditionally this has been scripted and uses something like, rsync, httrack, wget, or some such thing. I aim to simplify that process if possible. Now that being said, wrapping the tool up in a script is still the best way to go, as it allows you to maintain a single file of mirrors and patterns and let the automation handle the rest.

Well, to that end, let's add some more mirror jobs to our previous command.

$ magicmirror -t 2 \
-r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ \
-r '^.*/([0-9]*\.[0-9]*|snapshots)/.*/.*\.(iso|img)$' -u http://cdn.openbsd.org/pub/OpenBSD/ \
-r '^.*/NetBSD-[0-9]*\.[0-9]/iso/.*\.(iso|img.gz)$' -u http://cdn.netbsd.org/pub/NetBSD/

This works out because our paths all look like: */pub/*/... and there is the current limitation of the tool. That is being worked around and should be resolved soon.

About

MagicMirror is a site mirroring utility that aims to make the life of mirror admins easier.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

MagicMirror

MagicMirror

Usage of the tool is relatively simple, given you know RegEx.

Usage:
magicmirror [OPTIONS]
Application Options:
-v, --verbose Show verbose information (twice for debug)
-q, --quiet Suppress output
-c, --strip-color Strip colorized output
-t, --trim-leading= Trim leading directory components
-p, --process-workers= Number of process workers to start (default: 25)
-m, --match-workers= Number of match workers to start (default: 2)
-d, --download-workers= Number of download workers to start (default: 2)
-r, --regex= Regex pattern to match (can be specified multiple times)
-u, --url= URLs to fetch (can be specified multiple times)
-V, --version Show version information
Help Options:
-h, --help Show this help message

Some examples might be:

  • Downloading the xz compressed linux-X.Y.0 and patch-X.Y.Z files only, not every release, and every patch and anything else that may be in the directory. You also want to download 5 files at a time, because you have a big pipe and you wanna show it off. You also don't need that hostname and pub directory component. Well, your command might look like this:
$ magicmirror -r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ -t 2

Now that in and of it'self isn't as useful as one might hope. It is useful, but can be more so. Let's say, for sake of argument that you are a site admin, and one of your tasks is keeping the mirrors hosted at your site up to date. Traditionally this has been scripted and uses something like, rsync, httrack, wget, or some such thing. I aim to simplify that process if possible. Now that being said, wrapping the tool up in a script is still the best way to go, as it allows you to maintain a single file of mirrors and patterns and let the automation handle the rest.

Well, to that end, let's add some more mirror jobs to our previous command.

$ magicmirror -t 2 \
-r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ \
-r '^.*/([0-9]*\.[0-9]*|snapshots)/.*/.*\.(iso|img)$' -u http://cdn.openbsd.org/pub/OpenBSD/ \
-r '^.*/NetBSD-[0-9]*\.[0-9]/iso/.*\.(iso|img.gz)$' -u http://cdn.netbsd.org/pub/NetBSD/

This works out because our paths all look like: */pub/*/... and there is the current limitation of the tool. That is being worked around and should be resolved soon.

About

MagicMirror is a site mirroring utility that aims to make the life of mirror admins easier.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MagicMirror

MagicMirror

Usage of the tool is relatively simple, given you know RegEx.

Usage:
magicmirror [OPTIONS]
Application Options:
-v, --verbose Show verbose information (twice for debug)
-q, --quiet Suppress output
-c, --strip-color Strip colorized output
-t, --trim-leading= Trim leading directory components
-p, --process-workers= Number of process workers to start (default: 25)
-m, --match-workers= Number of match workers to start (default: 2)
-d, --download-workers= Number of download workers to start (default: 2)
-r, --regex= Regex pattern to match (can be specified multiple times)
-u, --url= URLs to fetch (can be specified multiple times)
-V, --version Show version information
Help Options:
-h, --help Show this help message

Some examples might be:

  • Downloading the xz compressed linux-X.Y.0 and patch-X.Y.Z files only, not every release, and every patch and anything else that may be in the directory. You also want to download 5 files at a time, because you have a big pipe and you wanna show it off. You also don't need that hostname and pub directory component. Well, your command might look like this:
$ magicmirror -r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ -t 2

Now that in and of it'self isn't as useful as one might hope. It is useful, but can be more so. Let's say, for sake of argument that you are a site admin, and one of your tasks is keeping the mirrors hosted at your site up to date. Traditionally this has been scripted and uses something like, rsync, httrack, wget, or some such thing. I aim to simplify that process if possible. Now that being said, wrapping the tool up in a script is still the best way to go, as it allows you to maintain a single file of mirrors and patterns and let the automation handle the rest.

Well, to that end, let's add some more mirror jobs to our previous command.

$ magicmirror -t 2 \
-r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ \
-r '^.*/([0-9]*\.[0-9]*|snapshots)/.*/.*\.(iso|img)$' -u http://cdn.openbsd.org/pub/OpenBSD/ \
-r '^.*/NetBSD-[0-9]*\.[0-9]/iso/.*\.(iso|img.gz)$' -u http://cdn.netbsd.org/pub/NetBSD/

This works out because our paths all look like: */pub/*/... and there is the current limitation of the tool. That is being worked around and should be resolved soon.

About

MagicMirror is a site mirroring utility that aims to make the life of mirror admins easier.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MagicMirror

MagicMirror

Usage of the tool is relatively simple, given you know RegEx.

Usage:
magicmirror [OPTIONS]
Application Options:
-v, --verbose Show verbose information (twice for debug)
-q, --quiet Suppress output
-c, --strip-color Strip colorized output
-t, --trim-leading= Trim leading directory components
-p, --process-workers= Number of process workers to start (default: 25)
-m, --match-workers= Number of match workers to start (default: 2)
-d, --download-workers= Number of download workers to start (default: 2)
-r, --regex= Regex pattern to match (can be specified multiple times)
-u, --url= URLs to fetch (can be specified multiple times)
-V, --version Show version information
Help Options:
-h, --help Show this help message

Some examples might be:

  • Downloading the xz compressed linux-X.Y.0 and patch-X.Y.Z files only, not every release, and every patch and anything else that may be in the directory. You also want to download 5 files at a time, because you have a big pipe and you wanna show it off. You also don't need that hostname and pub directory component. Well, your command might look like this:
$ magicmirror -r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ -t 2

Now that in and of it'self isn't as useful as one might hope. It is useful, but can be more so. Let's say, for sake of argument that you are a site admin, and one of your tasks is keeping the mirrors hosted at your site up to date. Traditionally this has been scripted and uses something like, rsync, httrack, wget, or some such thing. I aim to simplify that process if possible. Now that being said, wrapping the tool up in a script is still the best way to go, as it allows you to maintain a single file of mirrors and patterns and let the automation handle the rest.

Well, to that end, let's add some more mirror jobs to our previous command.

$ magicmirror -t 2 \
-r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ \
-r '^.*/([0-9]*\.[0-9]*|snapshots)/.*/.*\.(iso|img)$' -u http://cdn.openbsd.org/pub/OpenBSD/ \
-r '^.*/NetBSD-[0-9]*\.[0-9]/iso/.*\.(iso|img.gz)$' -u http://cdn.netbsd.org/pub/NetBSD/

This works out because our paths all look like: */pub/*/... and there is the current limitation of the tool. That is being worked around and should be resolved soon.

About

MagicMirror is a site mirroring utility that aims to make the life of mirror admins easier.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

MagicMirror

MagicMirror

Usage of the tool is relatively simple, given you know RegEx.

Usage:
magicmirror [OPTIONS]
Application Options:
-v, --verbose Show verbose information (twice for debug)
-q, --quiet Suppress output
-c, --strip-color Strip colorized output
-t, --trim-leading= Trim leading directory components
-p, --process-workers= Number of process workers to start (default: 25)
-m, --match-workers= Number of match workers to start (default: 2)
-d, --download-workers= Number of download workers to start (default: 2)
-r, --regex= Regex pattern to match (can be specified multiple times)
-u, --url= URLs to fetch (can be specified multiple times)
-V, --version Show version information
Help Options:
-h, --help Show this help message

Some examples might be:

  • Downloading the xz compressed linux-X.Y.0 and patch-X.Y.Z files only, not every release, and every patch and anything else that may be in the directory. You also want to download 5 files at a time, because you have a big pipe and you wanna show it off. You also don't need that hostname and pub directory component. Well, your command might look like this:
$ magicmirror -r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ -t 2

Now that in and of it'self isn't as useful as one might hope. It is useful, but can be more so. Let's say, for sake of argument that you are a site admin, and one of your tasks is keeping the mirrors hosted at your site up to date. Traditionally this has been scripted and uses something like, rsync, httrack, wget, or some such thing. I aim to simplify that process if possible. Now that being said, wrapping the tool up in a script is still the best way to go, as it allows you to maintain a single file of mirrors and patterns and let the automation handle the rest.

Well, to that end, let's add some more mirror jobs to our previous command.

$ magicmirror -t 2 \
-r '^.*/(linux-[0-9]*\.[0-9]*\.0|patch-.*)\.tar\.xz' -u http://cdn.kernel.org/pub/linux/kernel/ \
-r '^.*/([0-9]*\.[0-9]*|snapshots)/.*/.*\.(iso|img)$' -u http://cdn.openbsd.org/pub/OpenBSD/ \
-r '^.*/NetBSD-[0-9]*\.[0-9]/iso/.*\.(iso|img.gz)$' -u http://cdn.netbsd.org/pub/NetBSD/

This works out because our paths all look like: */pub/*/... and there is the current limitation of the tool. That is being worked around and should be resolved soon.

About

MagicMirror is a site mirroring utility that aims to make the life of mirror admins easier.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages