Repository files navigation


qs (quick-scripts): A tiny utility for keeping a catalogue of one-liners.
Usage:
qs [options] <action name> [--help] [<action arguments>, ...]
qs [options] --template <template string> [<action arguments>, ...]
Options:
--actions: List all available actions and exit.
--dry-run: Print the command that would have run, don't actually run it.
--verbose: Print more information while executing.
--template: Ignore the preconfigured templates and use an explicit template instead.
Cannot be used together with <action name>
--version: Print the current version and exit.
--help: Show this help and exit.
Providing --help after an action name will print the help for that action and exit.
--config: Include additional configuration file when looking for the action (can be used more than once).
Actions:
Actions are named oneliner scripts (templated, see below) that are executed using bash in the directory
where they where defined. This allows for consistent relative paths to other executables or files.
The environment variable $QS_RUN_DIR is set to the current working directory where the qs program
was run.
They are configured in one of the following config files (in order).
- `.qs.cfg` file in the current directory
- `.qs.cfg` file in a parent git source-root of the current directory
- `$XDG_CONFIG_HOMEqs/default.cfg`
- `$HOME.configs/qs/default.cfg` (unless XDG_CONFIG_HOME is set)
Additional configuration files can be provided using --config, and will have a higher priority
than the default ones in case the same action name ocurrs multiple times.
Action arguments:
Depending on the action template, actions can support both positional arguments and named arguments.
Named arguments are provided using --<argument name> <argument value>.
Any --argument after the action name, except for --help, will be interpreted as a named
argument and provided to the template for expansion using ${name}.
All other arguments will provided to the template in the order they appear (e.g. the first
argument is ${0}, the second ${1}, etc.)
If --help is provided anywhere after the action name, the help string for the action will
be printed, and the program will exit.
Configration files:
The format for configuration files is:
<action name> = <template string>
<default argument> := <default argument value>
Comments are allowed using '#' at the start of the line.
Whitespace and emtpy lines are ignored.
Template strings or argument values is anything (except the leading whitespace) following
the = or := to the end of the line.
Valid action-, or argument names follow the format [a-z][a-zA-Z0-9_-]+
(e.g. 'fooBar', 'thing1', 'my_arg', 'my-arg-1').
Templates:
Templates can expand positional arguments using ${0}, ${1}, (etc) placeholders.
Named arguments can be expanded using ${foobar}
For example, calling 'qs foo --baz qux' will use the following substituions in the template:
${0} => 'foo'
${baz} => 'qux'
Templates allow for conditional sections using `${arg?}`, `${else}` (optional), and `${end}`.
For example:
qs --name 'Christoffer' --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Hi Christoffer!'
qs --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Anyone there?'
Nested conditional blocks are allowed.
To use a literal `$` in the template, escape it using another `$` (e.g. `$$PATH`)
Anything that's not an argument substition is passed as-is to bash (there's no escaping).
Examples:
.qs.cfg:
# -----------------------------------
# Opens Google in a browser
engine := google
search = xdg-open https://www.${engine}.com/${0?}?q=${0}${end}
# -----------------------------------
$> qs search # opens https://www.google.com
$> qs search cats # opens https://www.google.com?q=cats
$> qs search cats --engine duck # opens https://www.duck.com?q=cats

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

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


qs (quick-scripts): A tiny utility for keeping a catalogue of one-liners.
Usage:
qs [options] <action name> [--help] [<action arguments>, ...]
qs [options] --template <template string> [<action arguments>, ...]
Options:
--actions: List all available actions and exit.
--dry-run: Print the command that would have run, don't actually run it.
--verbose: Print more information while executing.
--template: Ignore the preconfigured templates and use an explicit template instead.
Cannot be used together with <action name>
--version: Print the current version and exit.
--help: Show this help and exit.
Providing --help after an action name will print the help for that action and exit.
--config: Include additional configuration file when looking for the action (can be used more than once).
Actions:
Actions are named oneliner scripts (templated, see below) that are executed using bash in the directory
where they where defined. This allows for consistent relative paths to other executables or files.
The environment variable $QS_RUN_DIR is set to the current working directory where the qs program
was run.
They are configured in one of the following config files (in order).
- `.qs.cfg` file in the current directory
- `.qs.cfg` file in a parent git source-root of the current directory
- `$XDG_CONFIG_HOMEqs/default.cfg`
- `$HOME.configs/qs/default.cfg` (unless XDG_CONFIG_HOME is set)
Additional configuration files can be provided using --config, and will have a higher priority
than the default ones in case the same action name ocurrs multiple times.
Action arguments:
Depending on the action template, actions can support both positional arguments and named arguments.
Named arguments are provided using --<argument name> <argument value>.
Any --argument after the action name, except for --help, will be interpreted as a named
argument and provided to the template for expansion using ${name}.
All other arguments will provided to the template in the order they appear (e.g. the first
argument is ${0}, the second ${1}, etc.)
If --help is provided anywhere after the action name, the help string for the action will
be printed, and the program will exit.
Configration files:
The format for configuration files is:
<action name> = <template string>
<default argument> := <default argument value>
Comments are allowed using '#' at the start of the line.
Whitespace and emtpy lines are ignored.
Template strings or argument values is anything (except the leading whitespace) following
the = or := to the end of the line.
Valid action-, or argument names follow the format [a-z][a-zA-Z0-9_-]+
(e.g. 'fooBar', 'thing1', 'my_arg', 'my-arg-1').
Templates:
Templates can expand positional arguments using ${0}, ${1}, (etc) placeholders.
Named arguments can be expanded using ${foobar}
For example, calling 'qs foo --baz qux' will use the following substituions in the template:
${0} => 'foo'
${baz} => 'qux'
Templates allow for conditional sections using `${arg?}`, `${else}` (optional), and `${end}`.
For example:
qs --name 'Christoffer' --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Hi Christoffer!'
qs --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Anyone there?'
Nested conditional blocks are allowed.
To use a literal `$` in the template, escape it using another `$` (e.g. `$$PATH`)
Anything that's not an argument substition is passed as-is to bash (there's no escaping).
Examples:
.qs.cfg:
# -----------------------------------
# Opens Google in a browser
engine := google
search = xdg-open https://www.${engine}.com/${0?}?q=${0}${end}
# -----------------------------------
$> qs search # opens https://www.google.com
$> qs search cats # opens https://www.google.com?q=cats
$> qs search cats --engine duck # opens https://www.duck.com?q=cats

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

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


qs (quick-scripts): A tiny utility for keeping a catalogue of one-liners.
Usage:
qs [options] <action name> [--help] [<action arguments>, ...]
qs [options] --template <template string> [<action arguments>, ...]
Options:
--actions: List all available actions and exit.
--dry-run: Print the command that would have run, don't actually run it.
--verbose: Print more information while executing.
--template: Ignore the preconfigured templates and use an explicit template instead.
Cannot be used together with <action name>
--version: Print the current version and exit.
--help: Show this help and exit.
Providing --help after an action name will print the help for that action and exit.
--config: Include additional configuration file when looking for the action (can be used more than once).
Actions:
Actions are named oneliner scripts (templated, see below) that are executed using bash in the directory
where they where defined. This allows for consistent relative paths to other executables or files.
The environment variable $QS_RUN_DIR is set to the current working directory where the qs program
was run.
They are configured in one of the following config files (in order).
- `.qs.cfg` file in the current directory
- `.qs.cfg` file in a parent git source-root of the current directory
- `$XDG_CONFIG_HOMEqs/default.cfg`
- `$HOME.configs/qs/default.cfg` (unless XDG_CONFIG_HOME is set)
Additional configuration files can be provided using --config, and will have a higher priority
than the default ones in case the same action name ocurrs multiple times.
Action arguments:
Depending on the action template, actions can support both positional arguments and named arguments.
Named arguments are provided using --<argument name> <argument value>.
Any --argument after the action name, except for --help, will be interpreted as a named
argument and provided to the template for expansion using ${name}.
All other arguments will provided to the template in the order they appear (e.g. the first
argument is ${0}, the second ${1}, etc.)
If --help is provided anywhere after the action name, the help string for the action will
be printed, and the program will exit.
Configration files:
The format for configuration files is:
<action name> = <template string>
<default argument> := <default argument value>
Comments are allowed using '#' at the start of the line.
Whitespace and emtpy lines are ignored.
Template strings or argument values is anything (except the leading whitespace) following
the = or := to the end of the line.
Valid action-, or argument names follow the format [a-z][a-zA-Z0-9_-]+
(e.g. 'fooBar', 'thing1', 'my_arg', 'my-arg-1').
Templates:
Templates can expand positional arguments using ${0}, ${1}, (etc) placeholders.
Named arguments can be expanded using ${foobar}
For example, calling 'qs foo --baz qux' will use the following substituions in the template:
${0} => 'foo'
${baz} => 'qux'
Templates allow for conditional sections using `${arg?}`, `${else}` (optional), and `${end}`.
For example:
qs --name 'Christoffer' --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Hi Christoffer!'
qs --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Anyone there?'
Nested conditional blocks are allowed.
To use a literal `$` in the template, escape it using another `$` (e.g. `$$PATH`)
Anything that's not an argument substition is passed as-is to bash (there's no escaping).
Examples:
.qs.cfg:
# -----------------------------------
# Opens Google in a browser
engine := google
search = xdg-open https://www.${engine}.com/${0?}?q=${0}${end}
# -----------------------------------
$> qs search # opens https://www.google.com
$> qs search cats # opens https://www.google.com?q=cats
$> qs search cats --engine duck # opens https://www.duck.com?q=cats

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

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


qs (quick-scripts): A tiny utility for keeping a catalogue of one-liners.
Usage:
qs [options] <action name> [--help] [<action arguments>, ...]
qs [options] --template <template string> [<action arguments>, ...]
Options:
--actions: List all available actions and exit.
--dry-run: Print the command that would have run, don't actually run it.
--verbose: Print more information while executing.
--template: Ignore the preconfigured templates and use an explicit template instead.
Cannot be used together with <action name>
--version: Print the current version and exit.
--help: Show this help and exit.
Providing --help after an action name will print the help for that action and exit.
--config: Include additional configuration file when looking for the action (can be used more than once).
Actions:
Actions are named oneliner scripts (templated, see below) that are executed using bash in the directory
where they where defined. This allows for consistent relative paths to other executables or files.
The environment variable $QS_RUN_DIR is set to the current working directory where the qs program
was run.
They are configured in one of the following config files (in order).
- `.qs.cfg` file in the current directory
- `.qs.cfg` file in a parent git source-root of the current directory
- `$XDG_CONFIG_HOMEqs/default.cfg`
- `$HOME.configs/qs/default.cfg` (unless XDG_CONFIG_HOME is set)
Additional configuration files can be provided using --config, and will have a higher priority
than the default ones in case the same action name ocurrs multiple times.
Action arguments:
Depending on the action template, actions can support both positional arguments and named arguments.
Named arguments are provided using --<argument name> <argument value>.
Any --argument after the action name, except for --help, will be interpreted as a named
argument and provided to the template for expansion using ${name}.
All other arguments will provided to the template in the order they appear (e.g. the first
argument is ${0}, the second ${1}, etc.)
If --help is provided anywhere after the action name, the help string for the action will
be printed, and the program will exit.
Configration files:
The format for configuration files is:
<action name> = <template string>
<default argument> := <default argument value>
Comments are allowed using '#' at the start of the line.
Whitespace and emtpy lines are ignored.
Template strings or argument values is anything (except the leading whitespace) following
the = or := to the end of the line.
Valid action-, or argument names follow the format [a-z][a-zA-Z0-9_-]+
(e.g. 'fooBar', 'thing1', 'my_arg', 'my-arg-1').
Templates:
Templates can expand positional arguments using ${0}, ${1}, (etc) placeholders.
Named arguments can be expanded using ${foobar}
For example, calling 'qs foo --baz qux' will use the following substituions in the template:
${0} => 'foo'
${baz} => 'qux'
Templates allow for conditional sections using `${arg?}`, `${else}` (optional), and `${end}`.
For example:
qs --name 'Christoffer' --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Hi Christoffer!'
qs --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Anyone there?'
Nested conditional blocks are allowed.
To use a literal `$` in the template, escape it using another `$` (e.g. `$$PATH`)
Anything that's not an argument substition is passed as-is to bash (there's no escaping).
Examples:
.qs.cfg:
# -----------------------------------
# Opens Google in a browser
engine := google
search = xdg-open https://www.${engine}.com/${0?}?q=${0}${end}
# -----------------------------------
$> qs search # opens https://www.google.com
$> qs search cats # opens https://www.google.com?q=cats
$> qs search cats --engine duck # opens https://www.duck.com?q=cats

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

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


qs (quick-scripts): A tiny utility for keeping a catalogue of one-liners.
Usage:
qs [options] <action name> [--help] [<action arguments>, ...]
qs [options] --template <template string> [<action arguments>, ...]
Options:
--actions: List all available actions and exit.
--dry-run: Print the command that would have run, don't actually run it.
--verbose: Print more information while executing.
--template: Ignore the preconfigured templates and use an explicit template instead.
Cannot be used together with <action name>
--version: Print the current version and exit.
--help: Show this help and exit.
Providing --help after an action name will print the help for that action and exit.
--config: Include additional configuration file when looking for the action (can be used more than once).
Actions:
Actions are named oneliner scripts (templated, see below) that are executed using bash in the directory
where they where defined. This allows for consistent relative paths to other executables or files.
The environment variable $QS_RUN_DIR is set to the current working directory where the qs program
was run.
They are configured in one of the following config files (in order).
- `.qs.cfg` file in the current directory
- `.qs.cfg` file in a parent git source-root of the current directory
- `$XDG_CONFIG_HOMEqs/default.cfg`
- `$HOME.configs/qs/default.cfg` (unless XDG_CONFIG_HOME is set)
Additional configuration files can be provided using --config, and will have a higher priority
than the default ones in case the same action name ocurrs multiple times.
Action arguments:
Depending on the action template, actions can support both positional arguments and named arguments.
Named arguments are provided using --<argument name> <argument value>.
Any --argument after the action name, except for --help, will be interpreted as a named
argument and provided to the template for expansion using ${name}.
All other arguments will provided to the template in the order they appear (e.g. the first
argument is ${0}, the second ${1}, etc.)
If --help is provided anywhere after the action name, the help string for the action will
be printed, and the program will exit.
Configration files:
The format for configuration files is:
<action name> = <template string>
<default argument> := <default argument value>
Comments are allowed using '#' at the start of the line.
Whitespace and emtpy lines are ignored.
Template strings or argument values is anything (except the leading whitespace) following
the = or := to the end of the line.
Valid action-, or argument names follow the format [a-z][a-zA-Z0-9_-]+
(e.g. 'fooBar', 'thing1', 'my_arg', 'my-arg-1').
Templates:
Templates can expand positional arguments using ${0}, ${1}, (etc) placeholders.
Named arguments can be expanded using ${foobar}
For example, calling 'qs foo --baz qux' will use the following substituions in the template:
${0} => 'foo'
${baz} => 'qux'
Templates allow for conditional sections using `${arg?}`, `${else}` (optional), and `${end}`.
For example:
qs --name 'Christoffer' --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Hi Christoffer!'
qs --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Anyone there?'
Nested conditional blocks are allowed.
To use a literal `$` in the template, escape it using another `$` (e.g. `$$PATH`)
Anything that's not an argument substition is passed as-is to bash (there's no escaping).
Examples:
.qs.cfg:
# -----------------------------------
# Opens Google in a browser
engine := google
search = xdg-open https://www.${engine}.com/${0?}?q=${0}${end}
# -----------------------------------
$> qs search # opens https://www.google.com
$> qs search cats # opens https://www.google.com?q=cats
$> qs search cats --engine duck # opens https://www.duck.com?q=cats

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

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


qs (quick-scripts): A tiny utility for keeping a catalogue of one-liners.
Usage:
qs [options] <action name> [--help] [<action arguments>, ...]
qs [options] --template <template string> [<action arguments>, ...]
Options:
--actions: List all available actions and exit.
--dry-run: Print the command that would have run, don't actually run it.
--verbose: Print more information while executing.
--template: Ignore the preconfigured templates and use an explicit template instead.
Cannot be used together with <action name>
--version: Print the current version and exit.
--help: Show this help and exit.
Providing --help after an action name will print the help for that action and exit.
--config: Include additional configuration file when looking for the action (can be used more than once).
Actions:
Actions are named oneliner scripts (templated, see below) that are executed using bash in the directory
where they where defined. This allows for consistent relative paths to other executables or files.
The environment variable $QS_RUN_DIR is set to the current working directory where the qs program
was run.
They are configured in one of the following config files (in order).
- `.qs.cfg` file in the current directory
- `.qs.cfg` file in a parent git source-root of the current directory
- `$XDG_CONFIG_HOMEqs/default.cfg`
- `$HOME.configs/qs/default.cfg` (unless XDG_CONFIG_HOME is set)
Additional configuration files can be provided using --config, and will have a higher priority
than the default ones in case the same action name ocurrs multiple times.
Action arguments:
Depending on the action template, actions can support both positional arguments and named arguments.
Named arguments are provided using --<argument name> <argument value>.
Any --argument after the action name, except for --help, will be interpreted as a named
argument and provided to the template for expansion using ${name}.
All other arguments will provided to the template in the order they appear (e.g. the first
argument is ${0}, the second ${1}, etc.)
If --help is provided anywhere after the action name, the help string for the action will
be printed, and the program will exit.
Configration files:
The format for configuration files is:
<action name> = <template string>
<default argument> := <default argument value>
Comments are allowed using '#' at the start of the line.
Whitespace and emtpy lines are ignored.
Template strings or argument values is anything (except the leading whitespace) following
the = or := to the end of the line.
Valid action-, or argument names follow the format [a-z][a-zA-Z0-9_-]+
(e.g. 'fooBar', 'thing1', 'my_arg', 'my-arg-1').
Templates:
Templates can expand positional arguments using ${0}, ${1}, (etc) placeholders.
Named arguments can be expanded using ${foobar}
For example, calling 'qs foo --baz qux' will use the following substituions in the template:
${0} => 'foo'
${baz} => 'qux'
Templates allow for conditional sections using `${arg?}`, `${else}` (optional), and `${end}`.
For example:
qs --name 'Christoffer' --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Hi Christoffer!'
qs --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Anyone there?'
Nested conditional blocks are allowed.
To use a literal `$` in the template, escape it using another `$` (e.g. `$$PATH`)
Anything that's not an argument substition is passed as-is to bash (there's no escaping).
Examples:
.qs.cfg:
# -----------------------------------
# Opens Google in a browser
engine := google
search = xdg-open https://www.${engine}.com/${0?}?q=${0}${end}
# -----------------------------------
$> qs search # opens https://www.google.com
$> qs search cats # opens https://www.google.com?q=cats
$> qs search cats --engine duck # opens https://www.duck.com?q=cats

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

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


qs (quick-scripts): A tiny utility for keeping a catalogue of one-liners.
Usage:
qs [options] <action name> [--help] [<action arguments>, ...]
qs [options] --template <template string> [<action arguments>, ...]
Options:
--actions: List all available actions and exit.
--dry-run: Print the command that would have run, don't actually run it.
--verbose: Print more information while executing.
--template: Ignore the preconfigured templates and use an explicit template instead.
Cannot be used together with <action name>
--version: Print the current version and exit.
--help: Show this help and exit.
Providing --help after an action name will print the help for that action and exit.
--config: Include additional configuration file when looking for the action (can be used more than once).
Actions:
Actions are named oneliner scripts (templated, see below) that are executed using bash in the directory
where they where defined. This allows for consistent relative paths to other executables or files.
The environment variable $QS_RUN_DIR is set to the current working directory where the qs program
was run.
They are configured in one of the following config files (in order).
- `.qs.cfg` file in the current directory
- `.qs.cfg` file in a parent git source-root of the current directory
- `$XDG_CONFIG_HOMEqs/default.cfg`
- `$HOME.configs/qs/default.cfg` (unless XDG_CONFIG_HOME is set)
Additional configuration files can be provided using --config, and will have a higher priority
than the default ones in case the same action name ocurrs multiple times.
Action arguments:
Depending on the action template, actions can support both positional arguments and named arguments.
Named arguments are provided using --<argument name> <argument value>.
Any --argument after the action name, except for --help, will be interpreted as a named
argument and provided to the template for expansion using ${name}.
All other arguments will provided to the template in the order they appear (e.g. the first
argument is ${0}, the second ${1}, etc.)
If --help is provided anywhere after the action name, the help string for the action will
be printed, and the program will exit.
Configration files:
The format for configuration files is:
<action name> = <template string>
<default argument> := <default argument value>
Comments are allowed using '#' at the start of the line.
Whitespace and emtpy lines are ignored.
Template strings or argument values is anything (except the leading whitespace) following
the = or := to the end of the line.
Valid action-, or argument names follow the format [a-z][a-zA-Z0-9_-]+
(e.g. 'fooBar', 'thing1', 'my_arg', 'my-arg-1').
Templates:
Templates can expand positional arguments using ${0}, ${1}, (etc) placeholders.
Named arguments can be expanded using ${foobar}
For example, calling 'qs foo --baz qux' will use the following substituions in the template:
${0} => 'foo'
${baz} => 'qux'
Templates allow for conditional sections using `${arg?}`, `${else}` (optional), and `${end}`.
For example:
qs --name 'Christoffer' --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Hi Christoffer!'
qs --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Anyone there?'
Nested conditional blocks are allowed.
To use a literal `$` in the template, escape it using another `$` (e.g. `$$PATH`)
Anything that's not an argument substition is passed as-is to bash (there's no escaping).
Examples:
.qs.cfg:
# -----------------------------------
# Opens Google in a browser
engine := google
search = xdg-open https://www.${engine}.com/${0?}?q=${0}${end}
# -----------------------------------
$> qs search # opens https://www.google.com
$> qs search cats # opens https://www.google.com?q=cats
$> qs search cats --engine duck # opens https://www.duck.com?q=cats

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

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


qs (quick-scripts): A tiny utility for keeping a catalogue of one-liners.
Usage:
qs [options] <action name> [--help] [<action arguments>, ...]
qs [options] --template <template string> [<action arguments>, ...]
Options:
--actions: List all available actions and exit.
--dry-run: Print the command that would have run, don't actually run it.
--verbose: Print more information while executing.
--template: Ignore the preconfigured templates and use an explicit template instead.
Cannot be used together with <action name>
--version: Print the current version and exit.
--help: Show this help and exit.
Providing --help after an action name will print the help for that action and exit.
--config: Include additional configuration file when looking for the action (can be used more than once).
Actions:
Actions are named oneliner scripts (templated, see below) that are executed using bash in the directory
where they where defined. This allows for consistent relative paths to other executables or files.
The environment variable $QS_RUN_DIR is set to the current working directory where the qs program
was run.
They are configured in one of the following config files (in order).
- `.qs.cfg` file in the current directory
- `.qs.cfg` file in a parent git source-root of the current directory
- `$XDG_CONFIG_HOMEqs/default.cfg`
- `$HOME.configs/qs/default.cfg` (unless XDG_CONFIG_HOME is set)
Additional configuration files can be provided using --config, and will have a higher priority
than the default ones in case the same action name ocurrs multiple times.
Action arguments:
Depending on the action template, actions can support both positional arguments and named arguments.
Named arguments are provided using --<argument name> <argument value>.
Any --argument after the action name, except for --help, will be interpreted as a named
argument and provided to the template for expansion using ${name}.
All other arguments will provided to the template in the order they appear (e.g. the first
argument is ${0}, the second ${1}, etc.)
If --help is provided anywhere after the action name, the help string for the action will
be printed, and the program will exit.
Configration files:
The format for configuration files is:
<action name> = <template string>
<default argument> := <default argument value>
Comments are allowed using '#' at the start of the line.
Whitespace and emtpy lines are ignored.
Template strings or argument values is anything (except the leading whitespace) following
the = or := to the end of the line.
Valid action-, or argument names follow the format [a-z][a-zA-Z0-9_-]+
(e.g. 'fooBar', 'thing1', 'my_arg', 'my-arg-1').
Templates:
Templates can expand positional arguments using ${0}, ${1}, (etc) placeholders.
Named arguments can be expanded using ${foobar}
For example, calling 'qs foo --baz qux' will use the following substituions in the template:
${0} => 'foo'
${baz} => 'qux'
Templates allow for conditional sections using `${arg?}`, `${else}` (optional), and `${end}`.
For example:
qs --name 'Christoffer' --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Hi Christoffer!'
qs --template '${name?}echo "Hi ${name}!"${else}echo "Anyone there?"${end}'
#=> 'Anyone there?'
Nested conditional blocks are allowed.
To use a literal `$` in the template, escape it using another `$` (e.g. `$$PATH`)
Anything that's not an argument substition is passed as-is to bash (there's no escaping).
Examples:
.qs.cfg:
# -----------------------------------
# Opens Google in a browser
engine := google
search = xdg-open https://www.${engine}.com/${0?}?q=${0}${end}
# -----------------------------------
$> qs search # opens https://www.google.com
$> qs search cats # opens https://www.google.com?q=cats
$> qs search cats --engine duck # opens https://www.duck.com?q=cats

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages