Repository files navigation

Project Banner

Duster

Automatically apply Tighten's default code style for Laravel apps.

Duster is built on top of the following tools:

  • TLint: lints Laravel and PHP code for issues not covered by other tools
    • using the default Tighten preset
  • PHP_CodeSniffer: sniffs issues that can't be fixed automatically
    • using the Tighten preset which is mostly PSR1 with some Tighten-specific rules
  • PHP CS Fixer: adds custom rules not supported by Laravel Pint
    • CustomOrderedClassElementsFixer Tighten-specific order of class elements
  • Pint: Laravel's code style rules (with a few Tighten specific customizations)
    • using the default Laravel preset with some Tighten-specific rules

You can view a list of the compiled rules and examples of what they do in the style guide.

Installation

You can install the package via composer:

composer require tightenco/duster --dev

Optionally you can publish a GitHub Actions config:

./vendor/bin/duster github-actions

Or you can publish Husky Hooks:

./vendor/bin/duster husky-hooks

If you are using a containerized environment and do not have PHP installed locally, you can use the --env option to specify it:

./vendor/bin/duster husky-hooks --env=ddev

Supported environments are ddev, wardenlando, and sail.

Usage

To lint everything at once:

./vendor/bin/duster lint

To fix everything at once:

./vendor/bin/duster fix

To dust only files that have uncommitted changes according to Git, you may use the --dirty option:

./vendor/bin/duster lint --dirty
#or
./vendor/bin/duster fix --dirty

To view all available commands:

./vendor/bin/duster
#or
./vendor/bin/duster commands

Usage with Sail

./vendor/bin/sail php ./vendor/bin/duster

Alternatively, Sail has a bin script that eases the execution of package binaries, so you do the same thing like this:

./vendor/bin/sail bin duster

Customizing

If you need to include or exclude files or directories for each tool you can create a duster.json config file in your project root:

{
"include": [
"bin",
"scripts",
"src",
"tests"
],
"exclude": [
"tests/fixtures""**/folderToExclude/**"
]
}

To run additional scripts as part of Duster first add them to duster.json as part of scripts separated into lint and fix.

The key is the name of the command (used with the --using flag), and the value is an array of arguments passed to Symfony\Component\Process\Process.

{
"scripts": {
"lint": {
"phpstan": ["./vendor/bin/phpstan", "analyse"]
}
},
"processTimeout": 120
}

Duster will pick these up automatically when running either lint or fix. By default, additional scripts timeout after 60 seconds. You can overwrite this setting using the processTimeout key.

To customize which tools Duster runs, or the order in which they are executed you can use the --using flag and supply a comma-separated list of commands:

./vendor/bin/duster lint --using="phpstan,tlint,pint"

TLint

Create a tlint.json file in your project root. Learn more in the TLint documentation.

PHP_CodeSniffer

Create a .phpcs.xml.dist file in your project root with the following:

<?xml version="1.0"?>
<ruleset>
<file>app</file>
<file>config</file>
<file>database</file>
<file>public</file>
<file>resources</file>
<file>routes</file>
<file>tests</file>
<ruleref="Tighten"/>
</ruleset>

Now you can add customizations below the <rule ref="Tighten"/> line or even disable the Tighten rule to use your own ruleset. Learn more in this introductory article.

PHP CS Fixer

Create a .php-cs-fixer.dist.php file in your project root with the contents from Duster's .php-cs-fixer.dist.php file. Learn more in the PHP CS Fixer documentation.

Pint

Create a pint.json file in your project root, you can use Duster's pint.json file as a starting point. Learn more in the Pint documentation.

GitHub Action

There's a GitHub Action you use to clean-up your workflows.

Warning Heads Up! Workflows that commit to your repo will stop any currently running workflows and not trigger another workflow run.

One solution is to run your other workflows after Duster has completed by updating the trigger on those workflows:

on:
# Commits made in Duster Fix will not trigger any workflows# This workflow is configured to run after Duster finishesworkflow_run:
workflows: ["Duster Fix"]types:
- completed

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security-related issues, please email hello@tighten.co instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

Automatic configuration for Laravel apps to apply Tighten's standard linting & code standards.

Resources

Contributing

Stars

0 stars

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

Project Banner

Duster

Automatically apply Tighten's default code style for Laravel apps.

Duster is built on top of the following tools:

  • TLint: lints Laravel and PHP code for issues not covered by other tools
    • using the default Tighten preset
  • PHP_CodeSniffer: sniffs issues that can't be fixed automatically
    • using the Tighten preset which is mostly PSR1 with some Tighten-specific rules
  • PHP CS Fixer: adds custom rules not supported by Laravel Pint
    • CustomOrderedClassElementsFixer Tighten-specific order of class elements
  • Pint: Laravel's code style rules (with a few Tighten specific customizations)
    • using the default Laravel preset with some Tighten-specific rules

You can view a list of the compiled rules and examples of what they do in the style guide.

Installation

You can install the package via composer:

composer require tightenco/duster --dev

Optionally you can publish a GitHub Actions config:

./vendor/bin/duster github-actions

Or you can publish Husky Hooks:

./vendor/bin/duster husky-hooks

If you are using a containerized environment and do not have PHP installed locally, you can use the --env option to specify it:

./vendor/bin/duster husky-hooks --env=ddev

Supported environments are ddev, wardenlando, and sail.

Usage

To lint everything at once:

./vendor/bin/duster lint

To fix everything at once:

./vendor/bin/duster fix

To dust only files that have uncommitted changes according to Git, you may use the --dirty option:

./vendor/bin/duster lint --dirty
#or
./vendor/bin/duster fix --dirty

To view all available commands:

./vendor/bin/duster
#or
./vendor/bin/duster commands

Usage with Sail

./vendor/bin/sail php ./vendor/bin/duster

Alternatively, Sail has a bin script that eases the execution of package binaries, so you do the same thing like this:

./vendor/bin/sail bin duster

Customizing

If you need to include or exclude files or directories for each tool you can create a duster.json config file in your project root:

{
"include": [
"bin",
"scripts",
"src",
"tests"
],
"exclude": [
"tests/fixtures""**/folderToExclude/**"
]
}

To run additional scripts as part of Duster first add them to duster.json as part of scripts separated into lint and fix.

The key is the name of the command (used with the --using flag), and the value is an array of arguments passed to Symfony\Component\Process\Process.

{
"scripts": {
"lint": {
"phpstan": ["./vendor/bin/phpstan", "analyse"]
}
},
"processTimeout": 120
}

Duster will pick these up automatically when running either lint or fix. By default, additional scripts timeout after 60 seconds. You can overwrite this setting using the processTimeout key.

To customize which tools Duster runs, or the order in which they are executed you can use the --using flag and supply a comma-separated list of commands:

./vendor/bin/duster lint --using="phpstan,tlint,pint"

TLint

Create a tlint.json file in your project root. Learn more in the TLint documentation.

PHP_CodeSniffer

Create a .phpcs.xml.dist file in your project root with the following:

<?xml version="1.0"?>
<ruleset>
<file>app</file>
<file>config</file>
<file>database</file>
<file>public</file>
<file>resources</file>
<file>routes</file>
<file>tests</file>
<ruleref="Tighten"/>
</ruleset>

Now you can add customizations below the <rule ref="Tighten"/> line or even disable the Tighten rule to use your own ruleset. Learn more in this introductory article.

PHP CS Fixer

Create a .php-cs-fixer.dist.php file in your project root with the contents from Duster's .php-cs-fixer.dist.php file. Learn more in the PHP CS Fixer documentation.

Pint

Create a pint.json file in your project root, you can use Duster's pint.json file as a starting point. Learn more in the Pint documentation.

GitHub Action

There's a GitHub Action you use to clean-up your workflows.

Warning Heads Up! Workflows that commit to your repo will stop any currently running workflows and not trigger another workflow run.

One solution is to run your other workflows after Duster has completed by updating the trigger on those workflows:

on:
# Commits made in Duster Fix will not trigger any workflows# This workflow is configured to run after Duster finishesworkflow_run:
workflows: ["Duster Fix"]types:
- completed

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security-related issues, please email hello@tighten.co instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

Automatic configuration for Laravel apps to apply Tighten's standard linting & code standards.

Resources

Contributing

Stars

0 stars

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

Project Banner

Duster

Automatically apply Tighten's default code style for Laravel apps.

Duster is built on top of the following tools:

  • TLint: lints Laravel and PHP code for issues not covered by other tools
    • using the default Tighten preset
  • PHP_CodeSniffer: sniffs issues that can't be fixed automatically
    • using the Tighten preset which is mostly PSR1 with some Tighten-specific rules
  • PHP CS Fixer: adds custom rules not supported by Laravel Pint
    • CustomOrderedClassElementsFixer Tighten-specific order of class elements
  • Pint: Laravel's code style rules (with a few Tighten specific customizations)
    • using the default Laravel preset with some Tighten-specific rules

You can view a list of the compiled rules and examples of what they do in the style guide.

Installation

You can install the package via composer:

composer require tightenco/duster --dev

Optionally you can publish a GitHub Actions config:

./vendor/bin/duster github-actions

Or you can publish Husky Hooks:

./vendor/bin/duster husky-hooks

If you are using a containerized environment and do not have PHP installed locally, you can use the --env option to specify it:

./vendor/bin/duster husky-hooks --env=ddev

Supported environments are ddev, wardenlando, and sail.

Usage

To lint everything at once:

./vendor/bin/duster lint

To fix everything at once:

./vendor/bin/duster fix

To dust only files that have uncommitted changes according to Git, you may use the --dirty option:

./vendor/bin/duster lint --dirty
#or
./vendor/bin/duster fix --dirty

To view all available commands:

./vendor/bin/duster
#or
./vendor/bin/duster commands

Usage with Sail

./vendor/bin/sail php ./vendor/bin/duster

Alternatively, Sail has a bin script that eases the execution of package binaries, so you do the same thing like this:

./vendor/bin/sail bin duster

Customizing

If you need to include or exclude files or directories for each tool you can create a duster.json config file in your project root:

{
"include": [
"bin",
"scripts",
"src",
"tests"
],
"exclude": [
"tests/fixtures""**/folderToExclude/**"
]
}

To run additional scripts as part of Duster first add them to duster.json as part of scripts separated into lint and fix.

The key is the name of the command (used with the --using flag), and the value is an array of arguments passed to Symfony\Component\Process\Process.

{
"scripts": {
"lint": {
"phpstan": ["./vendor/bin/phpstan", "analyse"]
}
},
"processTimeout": 120
}

Duster will pick these up automatically when running either lint or fix. By default, additional scripts timeout after 60 seconds. You can overwrite this setting using the processTimeout key.

To customize which tools Duster runs, or the order in which they are executed you can use the --using flag and supply a comma-separated list of commands:

./vendor/bin/duster lint --using="phpstan,tlint,pint"

TLint

Create a tlint.json file in your project root. Learn more in the TLint documentation.

PHP_CodeSniffer

Create a .phpcs.xml.dist file in your project root with the following:

<?xml version="1.0"?>
<ruleset>
<file>app</file>
<file>config</file>
<file>database</file>
<file>public</file>
<file>resources</file>
<file>routes</file>
<file>tests</file>
<ruleref="Tighten"/>
</ruleset>

Now you can add customizations below the <rule ref="Tighten"/> line or even disable the Tighten rule to use your own ruleset. Learn more in this introductory article.

PHP CS Fixer

Create a .php-cs-fixer.dist.php file in your project root with the contents from Duster's .php-cs-fixer.dist.php file. Learn more in the PHP CS Fixer documentation.

Pint

Create a pint.json file in your project root, you can use Duster's pint.json file as a starting point. Learn more in the Pint documentation.

GitHub Action

There's a GitHub Action you use to clean-up your workflows.

Warning Heads Up! Workflows that commit to your repo will stop any currently running workflows and not trigger another workflow run.

One solution is to run your other workflows after Duster has completed by updating the trigger on those workflows:

on:
# Commits made in Duster Fix will not trigger any workflows# This workflow is configured to run after Duster finishesworkflow_run:
workflows: ["Duster Fix"]types:
- completed

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security-related issues, please email hello@tighten.co instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

Automatic configuration for Laravel apps to apply Tighten's standard linting & code standards.

Resources

Contributing

Stars

0 stars

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

Project Banner

Duster

Automatically apply Tighten's default code style for Laravel apps.

Duster is built on top of the following tools:

  • TLint: lints Laravel and PHP code for issues not covered by other tools
    • using the default Tighten preset
  • PHP_CodeSniffer: sniffs issues that can't be fixed automatically
    • using the Tighten preset which is mostly PSR1 with some Tighten-specific rules
  • PHP CS Fixer: adds custom rules not supported by Laravel Pint
    • CustomOrderedClassElementsFixer Tighten-specific order of class elements
  • Pint: Laravel's code style rules (with a few Tighten specific customizations)
    • using the default Laravel preset with some Tighten-specific rules

You can view a list of the compiled rules and examples of what they do in the style guide.

Installation

You can install the package via composer:

composer require tightenco/duster --dev

Optionally you can publish a GitHub Actions config:

./vendor/bin/duster github-actions

Or you can publish Husky Hooks:

./vendor/bin/duster husky-hooks

If you are using a containerized environment and do not have PHP installed locally, you can use the --env option to specify it:

./vendor/bin/duster husky-hooks --env=ddev

Supported environments are ddev, wardenlando, and sail.

Usage

To lint everything at once:

./vendor/bin/duster lint

To fix everything at once:

./vendor/bin/duster fix

To dust only files that have uncommitted changes according to Git, you may use the --dirty option:

./vendor/bin/duster lint --dirty
#or
./vendor/bin/duster fix --dirty

To view all available commands:

./vendor/bin/duster
#or
./vendor/bin/duster commands

Usage with Sail

./vendor/bin/sail php ./vendor/bin/duster

Alternatively, Sail has a bin script that eases the execution of package binaries, so you do the same thing like this:

./vendor/bin/sail bin duster

Customizing

If you need to include or exclude files or directories for each tool you can create a duster.json config file in your project root:

{
"include": [
"bin",
"scripts",
"src",
"tests"
],
"exclude": [
"tests/fixtures""**/folderToExclude/**"
]
}

To run additional scripts as part of Duster first add them to duster.json as part of scripts separated into lint and fix.

The key is the name of the command (used with the --using flag), and the value is an array of arguments passed to Symfony\Component\Process\Process.

{
"scripts": {
"lint": {
"phpstan": ["./vendor/bin/phpstan", "analyse"]
}
},
"processTimeout": 120
}

Duster will pick these up automatically when running either lint or fix. By default, additional scripts timeout after 60 seconds. You can overwrite this setting using the processTimeout key.

To customize which tools Duster runs, or the order in which they are executed you can use the --using flag and supply a comma-separated list of commands:

./vendor/bin/duster lint --using="phpstan,tlint,pint"

TLint

Create a tlint.json file in your project root. Learn more in the TLint documentation.

PHP_CodeSniffer

Create a .phpcs.xml.dist file in your project root with the following:

<?xml version="1.0"?>
<ruleset>
<file>app</file>
<file>config</file>
<file>database</file>
<file>public</file>
<file>resources</file>
<file>routes</file>
<file>tests</file>
<ruleref="Tighten"/>
</ruleset>

Now you can add customizations below the <rule ref="Tighten"/> line or even disable the Tighten rule to use your own ruleset. Learn more in this introductory article.

PHP CS Fixer

Create a .php-cs-fixer.dist.php file in your project root with the contents from Duster's .php-cs-fixer.dist.php file. Learn more in the PHP CS Fixer documentation.

Pint

Create a pint.json file in your project root, you can use Duster's pint.json file as a starting point. Learn more in the Pint documentation.

GitHub Action

There's a GitHub Action you use to clean-up your workflows.

Warning Heads Up! Workflows that commit to your repo will stop any currently running workflows and not trigger another workflow run.

One solution is to run your other workflows after Duster has completed by updating the trigger on those workflows:

on:
# Commits made in Duster Fix will not trigger any workflows# This workflow is configured to run after Duster finishesworkflow_run:
workflows: ["Duster Fix"]types:
- completed

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security-related issues, please email hello@tighten.co instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

Automatic configuration for Laravel apps to apply Tighten's standard linting & code standards.

Resources

Contributing

Stars

0 stars

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

Project Banner

Duster

Automatically apply Tighten's default code style for Laravel apps.

Duster is built on top of the following tools:

  • TLint: lints Laravel and PHP code for issues not covered by other tools
    • using the default Tighten preset
  • PHP_CodeSniffer: sniffs issues that can't be fixed automatically
    • using the Tighten preset which is mostly PSR1 with some Tighten-specific rules
  • PHP CS Fixer: adds custom rules not supported by Laravel Pint
    • CustomOrderedClassElementsFixer Tighten-specific order of class elements
  • Pint: Laravel's code style rules (with a few Tighten specific customizations)
    • using the default Laravel preset with some Tighten-specific rules

You can view a list of the compiled rules and examples of what they do in the style guide.

Installation

You can install the package via composer:

composer require tightenco/duster --dev

Optionally you can publish a GitHub Actions config:

./vendor/bin/duster github-actions

Or you can publish Husky Hooks:

./vendor/bin/duster husky-hooks

If you are using a containerized environment and do not have PHP installed locally, you can use the --env option to specify it:

./vendor/bin/duster husky-hooks --env=ddev

Supported environments are ddev, wardenlando, and sail.

Usage

To lint everything at once:

./vendor/bin/duster lint

To fix everything at once:

./vendor/bin/duster fix

To dust only files that have uncommitted changes according to Git, you may use the --dirty option:

./vendor/bin/duster lint --dirty
#or
./vendor/bin/duster fix --dirty

To view all available commands:

./vendor/bin/duster
#or
./vendor/bin/duster commands

Usage with Sail

./vendor/bin/sail php ./vendor/bin/duster

Alternatively, Sail has a bin script that eases the execution of package binaries, so you do the same thing like this:

./vendor/bin/sail bin duster

Customizing

If you need to include or exclude files or directories for each tool you can create a duster.json config file in your project root:

{
"include": [
"bin",
"scripts",
"src",
"tests"
],
"exclude": [
"tests/fixtures""**/folderToExclude/**"
]
}

To run additional scripts as part of Duster first add them to duster.json as part of scripts separated into lint and fix.

The key is the name of the command (used with the --using flag), and the value is an array of arguments passed to Symfony\Component\Process\Process.

{
"scripts": {
"lint": {
"phpstan": ["./vendor/bin/phpstan", "analyse"]
}
},
"processTimeout": 120
}

Duster will pick these up automatically when running either lint or fix. By default, additional scripts timeout after 60 seconds. You can overwrite this setting using the processTimeout key.

To customize which tools Duster runs, or the order in which they are executed you can use the --using flag and supply a comma-separated list of commands:

./vendor/bin/duster lint --using="phpstan,tlint,pint"

TLint

Create a tlint.json file in your project root. Learn more in the TLint documentation.

PHP_CodeSniffer

Create a .phpcs.xml.dist file in your project root with the following:

<?xml version="1.0"?>
<ruleset>
<file>app</file>
<file>config</file>
<file>database</file>
<file>public</file>
<file>resources</file>
<file>routes</file>
<file>tests</file>
<ruleref="Tighten"/>
</ruleset>

Now you can add customizations below the <rule ref="Tighten"/> line or even disable the Tighten rule to use your own ruleset. Learn more in this introductory article.

PHP CS Fixer

Create a .php-cs-fixer.dist.php file in your project root with the contents from Duster's .php-cs-fixer.dist.php file. Learn more in the PHP CS Fixer documentation.

Pint

Create a pint.json file in your project root, you can use Duster's pint.json file as a starting point. Learn more in the Pint documentation.

GitHub Action

There's a GitHub Action you use to clean-up your workflows.

Warning Heads Up! Workflows that commit to your repo will stop any currently running workflows and not trigger another workflow run.

One solution is to run your other workflows after Duster has completed by updating the trigger on those workflows:

on:
# Commits made in Duster Fix will not trigger any workflows# This workflow is configured to run after Duster finishesworkflow_run:
workflows: ["Duster Fix"]types:
- completed

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security-related issues, please email hello@tighten.co instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

Automatic configuration for Laravel apps to apply Tighten's standard linting & code standards.

Resources

Contributing

Stars

0 stars

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

Project Banner

Duster

Automatically apply Tighten's default code style for Laravel apps.

Duster is built on top of the following tools:

  • TLint: lints Laravel and PHP code for issues not covered by other tools
    • using the default Tighten preset
  • PHP_CodeSniffer: sniffs issues that can't be fixed automatically
    • using the Tighten preset which is mostly PSR1 with some Tighten-specific rules
  • PHP CS Fixer: adds custom rules not supported by Laravel Pint
    • CustomOrderedClassElementsFixer Tighten-specific order of class elements
  • Pint: Laravel's code style rules (with a few Tighten specific customizations)
    • using the default Laravel preset with some Tighten-specific rules

You can view a list of the compiled rules and examples of what they do in the style guide.

Installation

You can install the package via composer:

composer require tightenco/duster --dev

Optionally you can publish a GitHub Actions config:

./vendor/bin/duster github-actions

Or you can publish Husky Hooks:

./vendor/bin/duster husky-hooks

If you are using a containerized environment and do not have PHP installed locally, you can use the --env option to specify it:

./vendor/bin/duster husky-hooks --env=ddev

Supported environments are ddev, wardenlando, and sail.

Usage

To lint everything at once:

./vendor/bin/duster lint

To fix everything at once:

./vendor/bin/duster fix

To dust only files that have uncommitted changes according to Git, you may use the --dirty option:

./vendor/bin/duster lint --dirty
#or
./vendor/bin/duster fix --dirty

To view all available commands:

./vendor/bin/duster
#or
./vendor/bin/duster commands

Usage with Sail

./vendor/bin/sail php ./vendor/bin/duster

Alternatively, Sail has a bin script that eases the execution of package binaries, so you do the same thing like this:

./vendor/bin/sail bin duster

Customizing

If you need to include or exclude files or directories for each tool you can create a duster.json config file in your project root:

{
"include": [
"bin",
"scripts",
"src",
"tests"
],
"exclude": [
"tests/fixtures""**/folderToExclude/**"
]
}

To run additional scripts as part of Duster first add them to duster.json as part of scripts separated into lint and fix.

The key is the name of the command (used with the --using flag), and the value is an array of arguments passed to Symfony\Component\Process\Process.

{
"scripts": {
"lint": {
"phpstan": ["./vendor/bin/phpstan", "analyse"]
}
},
"processTimeout": 120
}

Duster will pick these up automatically when running either lint or fix. By default, additional scripts timeout after 60 seconds. You can overwrite this setting using the processTimeout key.

To customize which tools Duster runs, or the order in which they are executed you can use the --using flag and supply a comma-separated list of commands:

./vendor/bin/duster lint --using="phpstan,tlint,pint"

TLint

Create a tlint.json file in your project root. Learn more in the TLint documentation.

PHP_CodeSniffer

Create a .phpcs.xml.dist file in your project root with the following:

<?xml version="1.0"?>
<ruleset>
<file>app</file>
<file>config</file>
<file>database</file>
<file>public</file>
<file>resources</file>
<file>routes</file>
<file>tests</file>
<ruleref="Tighten"/>
</ruleset>

Now you can add customizations below the <rule ref="Tighten"/> line or even disable the Tighten rule to use your own ruleset. Learn more in this introductory article.

PHP CS Fixer

Create a .php-cs-fixer.dist.php file in your project root with the contents from Duster's .php-cs-fixer.dist.php file. Learn more in the PHP CS Fixer documentation.

Pint

Create a pint.json file in your project root, you can use Duster's pint.json file as a starting point. Learn more in the Pint documentation.

GitHub Action

There's a GitHub Action you use to clean-up your workflows.

Warning Heads Up! Workflows that commit to your repo will stop any currently running workflows and not trigger another workflow run.

One solution is to run your other workflows after Duster has completed by updating the trigger on those workflows:

on:
# Commits made in Duster Fix will not trigger any workflows# This workflow is configured to run after Duster finishesworkflow_run:
workflows: ["Duster Fix"]types:
- completed

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security-related issues, please email hello@tighten.co instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

Automatic configuration for Laravel apps to apply Tighten's standard linting & code standards.

Resources

Contributing

Stars

0 stars

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

Project Banner

Duster

Automatically apply Tighten's default code style for Laravel apps.

Duster is built on top of the following tools:

  • TLint: lints Laravel and PHP code for issues not covered by other tools
    • using the default Tighten preset
  • PHP_CodeSniffer: sniffs issues that can't be fixed automatically
    • using the Tighten preset which is mostly PSR1 with some Tighten-specific rules
  • PHP CS Fixer: adds custom rules not supported by Laravel Pint
    • CustomOrderedClassElementsFixer Tighten-specific order of class elements
  • Pint: Laravel's code style rules (with a few Tighten specific customizations)
    • using the default Laravel preset with some Tighten-specific rules

You can view a list of the compiled rules and examples of what they do in the style guide.

Installation

You can install the package via composer:

composer require tightenco/duster --dev

Optionally you can publish a GitHub Actions config:

./vendor/bin/duster github-actions

Or you can publish Husky Hooks:

./vendor/bin/duster husky-hooks

If you are using a containerized environment and do not have PHP installed locally, you can use the --env option to specify it:

./vendor/bin/duster husky-hooks --env=ddev

Supported environments are ddev, wardenlando, and sail.

Usage

To lint everything at once:

./vendor/bin/duster lint

To fix everything at once:

./vendor/bin/duster fix

To dust only files that have uncommitted changes according to Git, you may use the --dirty option:

./vendor/bin/duster lint --dirty
#or
./vendor/bin/duster fix --dirty

To view all available commands:

./vendor/bin/duster
#or
./vendor/bin/duster commands

Usage with Sail

./vendor/bin/sail php ./vendor/bin/duster

Alternatively, Sail has a bin script that eases the execution of package binaries, so you do the same thing like this:

./vendor/bin/sail bin duster

Customizing

If you need to include or exclude files or directories for each tool you can create a duster.json config file in your project root:

{
"include": [
"bin",
"scripts",
"src",
"tests"
],
"exclude": [
"tests/fixtures""**/folderToExclude/**"
]
}

To run additional scripts as part of Duster first add them to duster.json as part of scripts separated into lint and fix.

The key is the name of the command (used with the --using flag), and the value is an array of arguments passed to Symfony\Component\Process\Process.

{
"scripts": {
"lint": {
"phpstan": ["./vendor/bin/phpstan", "analyse"]
}
},
"processTimeout": 120
}

Duster will pick these up automatically when running either lint or fix. By default, additional scripts timeout after 60 seconds. You can overwrite this setting using the processTimeout key.

To customize which tools Duster runs, or the order in which they are executed you can use the --using flag and supply a comma-separated list of commands:

./vendor/bin/duster lint --using="phpstan,tlint,pint"

TLint

Create a tlint.json file in your project root. Learn more in the TLint documentation.

PHP_CodeSniffer

Create a .phpcs.xml.dist file in your project root with the following:

<?xml version="1.0"?>
<ruleset>
<file>app</file>
<file>config</file>
<file>database</file>
<file>public</file>
<file>resources</file>
<file>routes</file>
<file>tests</file>
<ruleref="Tighten"/>
</ruleset>

Now you can add customizations below the <rule ref="Tighten"/> line or even disable the Tighten rule to use your own ruleset. Learn more in this introductory article.

PHP CS Fixer

Create a .php-cs-fixer.dist.php file in your project root with the contents from Duster's .php-cs-fixer.dist.php file. Learn more in the PHP CS Fixer documentation.

Pint

Create a pint.json file in your project root, you can use Duster's pint.json file as a starting point. Learn more in the Pint documentation.

GitHub Action

There's a GitHub Action you use to clean-up your workflows.

Warning Heads Up! Workflows that commit to your repo will stop any currently running workflows and not trigger another workflow run.

One solution is to run your other workflows after Duster has completed by updating the trigger on those workflows:

on:
# Commits made in Duster Fix will not trigger any workflows# This workflow is configured to run after Duster finishesworkflow_run:
workflows: ["Duster Fix"]types:
- completed

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security-related issues, please email hello@tighten.co instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

Automatic configuration for Laravel apps to apply Tighten's standard linting & code standards.

Resources

Contributing

Stars

0 stars

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

Project Banner

Duster

Automatically apply Tighten's default code style for Laravel apps.

Duster is built on top of the following tools:

  • TLint: lints Laravel and PHP code for issues not covered by other tools
    • using the default Tighten preset
  • PHP_CodeSniffer: sniffs issues that can't be fixed automatically
    • using the Tighten preset which is mostly PSR1 with some Tighten-specific rules
  • PHP CS Fixer: adds custom rules not supported by Laravel Pint
    • CustomOrderedClassElementsFixer Tighten-specific order of class elements
  • Pint: Laravel's code style rules (with a few Tighten specific customizations)
    • using the default Laravel preset with some Tighten-specific rules

You can view a list of the compiled rules and examples of what they do in the style guide.

Installation

You can install the package via composer:

composer require tightenco/duster --dev

Optionally you can publish a GitHub Actions config:

./vendor/bin/duster github-actions

Or you can publish Husky Hooks:

./vendor/bin/duster husky-hooks

If you are using a containerized environment and do not have PHP installed locally, you can use the --env option to specify it:

./vendor/bin/duster husky-hooks --env=ddev

Supported environments are ddev, wardenlando, and sail.

Usage

To lint everything at once:

./vendor/bin/duster lint

To fix everything at once:

./vendor/bin/duster fix

To dust only files that have uncommitted changes according to Git, you may use the --dirty option:

./vendor/bin/duster lint --dirty
#or
./vendor/bin/duster fix --dirty

To view all available commands:

./vendor/bin/duster
#or
./vendor/bin/duster commands

Usage with Sail

./vendor/bin/sail php ./vendor/bin/duster

Alternatively, Sail has a bin script that eases the execution of package binaries, so you do the same thing like this:

./vendor/bin/sail bin duster

Customizing

If you need to include or exclude files or directories for each tool you can create a duster.json config file in your project root:

{
"include": [
"bin",
"scripts",
"src",
"tests"
],
"exclude": [
"tests/fixtures""**/folderToExclude/**"
]
}

To run additional scripts as part of Duster first add them to duster.json as part of scripts separated into lint and fix.

The key is the name of the command (used with the --using flag), and the value is an array of arguments passed to Symfony\Component\Process\Process.

{
"scripts": {
"lint": {
"phpstan": ["./vendor/bin/phpstan", "analyse"]
}
},
"processTimeout": 120
}

Duster will pick these up automatically when running either lint or fix. By default, additional scripts timeout after 60 seconds. You can overwrite this setting using the processTimeout key.

To customize which tools Duster runs, or the order in which they are executed you can use the --using flag and supply a comma-separated list of commands:

./vendor/bin/duster lint --using="phpstan,tlint,pint"

TLint

Create a tlint.json file in your project root. Learn more in the TLint documentation.

PHP_CodeSniffer

Create a .phpcs.xml.dist file in your project root with the following:

<?xml version="1.0"?>
<ruleset>
<file>app</file>
<file>config</file>
<file>database</file>
<file>public</file>
<file>resources</file>
<file>routes</file>
<file>tests</file>
<ruleref="Tighten"/>
</ruleset>

Now you can add customizations below the <rule ref="Tighten"/> line or even disable the Tighten rule to use your own ruleset. Learn more in this introductory article.

PHP CS Fixer

Create a .php-cs-fixer.dist.php file in your project root with the contents from Duster's .php-cs-fixer.dist.php file. Learn more in the PHP CS Fixer documentation.

Pint

Create a pint.json file in your project root, you can use Duster's pint.json file as a starting point. Learn more in the Pint documentation.

GitHub Action

There's a GitHub Action you use to clean-up your workflows.

Warning Heads Up! Workflows that commit to your repo will stop any currently running workflows and not trigger another workflow run.

One solution is to run your other workflows after Duster has completed by updating the trigger on those workflows:

on:
# Commits made in Duster Fix will not trigger any workflows# This workflow is configured to run after Duster finishesworkflow_run:
workflows: ["Duster Fix"]types:
- completed

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security-related issues, please email hello@tighten.co instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

Automatic configuration for Laravel apps to apply Tighten's standard linting & code standards.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages