Repository files navigation

Beak 🐦

SPMLinuxGit VersionBuild Statuslicense

Peck into your Swift files from the command line

Beak can take a standard Swift file and then list and run any public global functions in it via a command line interface.

This is useful for scripting and for make-like files written in Swift. You can replace make or rake files with code written in Swift!

An example Swift script:

// This links https://github.com/kylef/PathKit as a dependency
// beak: kylef/PathKit @ 1.0.0
import PathKit // from the dependency listed above
import Foundation
/// Releases the product
/// - Parameters:
/// - version: the version to release
publicfunc release(version:String)throws{
// implementation here
print("version \(version) released!")}
/// Installs the product
publicfunc install()throws{
// implementation here
print("installed")}
$ beak list
release: Releases the product
install: Installs the product
$ beak run release --version 1.2.0
version 1.2.0 released!

How does it work?

Beak analyzes your Swift file via SourceKit and finds all public and global functions. It uses information about the function and parameter names, types and default values to build up a command line interface. It also uses standard comment docs to build up descriptive help.

Beak can parse special comments at the top of your script so it can pull in dependencies via the Swift Package Manager.

By default Beak looks for a file called beak.swift in your current directory, otherwise you can pass a path to a different swift file with --path. This repo itself has a Beak file for running build scripts.

Installing

Make sure Xcode 10.2+ is installed first.

Mint 🌱

$ mint install yonaskolb/beak

Homebrew

$ brew tap yonaskolb/Beak https://github.com/yonaskolb/Beak.git
$ brew install Beak

Swift PM and Beak 🐦

This uses Swift PM to build and run beak from this repo, which then runs the install function inside the Beak.swift file also incuded in this repo. So meta!

$ git clone https://github.com/yonaskolb/Beak.git
$ cd Beak
$ swift run beak run install

Usage

List functions:

This shows all the functions that can be run

$ beak list
release: Releases the product
install: Installs the product

Run a function:

This runs a specific function with parameters. Note that any top level expressions in the swift file will also be run before this function.

$ beak run release --version 1.2.0
version 1.2.0 released

Run the swift file

It's also possible to just run the whole script instead of a specific function

$ beak run

Edit the swift file

This generates and opens an Xcode project with all dependencies linked, which is useful for code completion if you have defined any dependencies. The command line will prompt you to type c to commit any changes you made in Xcode back to the original file

$ beak edit
generating project

You can always use --help to get more information about a command or a function. This will use information from the doc comments.

Functions

For function to be accessible they must be global and declared public. Any non-public functions can be as helper functions, but won't be seen by Beak.

Functions can be throwing, with any errors thrown printed using CustomStringConvertible. This makes it easy to fail your tasks. For now you must include an import Foundation in your script to have throwing functions

Parameters

Any parameters without default values will be required.

Param types of Int, Bool, and String are natively supported. All other types will be passed exactly as they are as raw values, so if it compiles you can pass in anything, for example an enum value--buildType .debug.

Function parameters without labels will can be used with positional arguments:

publicfunc release(_ version:String){}
beak run release 1.2.0

Dependencies

Sometimes it's useful to be able to pull in other Swift packages as dependencies to use in your script. This can be done by adding some special comments at the top of your file. It must take the form:

// beak: {repo} {library} {library} ... @ {version}`

where items in {} are:

  • repo: is the git repo where a Swift package resides. This can take a short form of user/repo or an extended form https://github.com/user/repo.git
  • library: a space delimited list of libraries to include from this package. This defaults to the repo name, which is usually what you want.
  • version: the version of this package to include. This can either be a simple version string, or any of the types allowed by the Swift Package Manager Requirement static members eg
    • branch:develop or .branch("develop")
    • revision:ab794ebb or .revision("ab794ebb")
    • exact:1.2.0 or .exact("1.2.0")
    • .upToNextMajor(from: "1.2.0")
    • .upToNextMinor(from: "1.2.3")

Some examples:

// beak: JohnSundell/ShellOut @ 2.0.0
// beak: kylef/PathKit @ upToNextMajor:0.9.0
// beak: apple/swift-package-manager Utility @ branch:master
import Foundation
import Pathkit
import Shellout
import Utility

You can use beak edit to get code completion for these imported dependencies.

Shebang

If you put a beak shebang at the top of your swift file and then run chmod a+x beak.swift on it to make it executable, you will be able to execute it directly without calling beak.

tasks.swift

#!/usr/bin/env beak --path
publicfunc foo(){print("hello foo")}publicfunc bar(){print("hello bar")}
$ chmod a+x tasks.swift
$ ./tasks.swift run foo
hello foo

If you then place this file into usr/local/bin you could run this file from anywhere:

$ cp tasks.swift /usr/local/bin/tasks
$ tasks run bar
hello bar

To automatically insert the run option, you can change your shebang to #!/usr/bin/env beak run --path.

Alternatives

License

Beak is licensed under the MIT license. See LICENSE for more info.

About

A command line interface for your Swift scripts

Resources

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

Beak 🐦

SPMLinuxGit VersionBuild Statuslicense

Peck into your Swift files from the command line

Beak can take a standard Swift file and then list and run any public global functions in it via a command line interface.

This is useful for scripting and for make-like files written in Swift. You can replace make or rake files with code written in Swift!

An example Swift script:

// This links https://github.com/kylef/PathKit as a dependency
// beak: kylef/PathKit @ 1.0.0
import PathKit // from the dependency listed above
import Foundation
/// Releases the product
/// - Parameters:
/// - version: the version to release
publicfunc release(version:String)throws{
// implementation here
print("version \(version) released!")}
/// Installs the product
publicfunc install()throws{
// implementation here
print("installed")}
$ beak list
release: Releases the product
install: Installs the product
$ beak run release --version 1.2.0
version 1.2.0 released!

How does it work?

Beak analyzes your Swift file via SourceKit and finds all public and global functions. It uses information about the function and parameter names, types and default values to build up a command line interface. It also uses standard comment docs to build up descriptive help.

Beak can parse special comments at the top of your script so it can pull in dependencies via the Swift Package Manager.

By default Beak looks for a file called beak.swift in your current directory, otherwise you can pass a path to a different swift file with --path. This repo itself has a Beak file for running build scripts.

Installing

Make sure Xcode 10.2+ is installed first.

Mint 🌱

$ mint install yonaskolb/beak

Homebrew

$ brew tap yonaskolb/Beak https://github.com/yonaskolb/Beak.git
$ brew install Beak

Swift PM and Beak 🐦

This uses Swift PM to build and run beak from this repo, which then runs the install function inside the Beak.swift file also incuded in this repo. So meta!

$ git clone https://github.com/yonaskolb/Beak.git
$ cd Beak
$ swift run beak run install

Usage

List functions:

This shows all the functions that can be run

$ beak list
release: Releases the product
install: Installs the product

Run a function:

This runs a specific function with parameters. Note that any top level expressions in the swift file will also be run before this function.

$ beak run release --version 1.2.0
version 1.2.0 released

Run the swift file

It's also possible to just run the whole script instead of a specific function

$ beak run

Edit the swift file

This generates and opens an Xcode project with all dependencies linked, which is useful for code completion if you have defined any dependencies. The command line will prompt you to type c to commit any changes you made in Xcode back to the original file

$ beak edit
generating project

You can always use --help to get more information about a command or a function. This will use information from the doc comments.

Functions

For function to be accessible they must be global and declared public. Any non-public functions can be as helper functions, but won't be seen by Beak.

Functions can be throwing, with any errors thrown printed using CustomStringConvertible. This makes it easy to fail your tasks. For now you must include an import Foundation in your script to have throwing functions

Parameters

Any parameters without default values will be required.

Param types of Int, Bool, and String are natively supported. All other types will be passed exactly as they are as raw values, so if it compiles you can pass in anything, for example an enum value--buildType .debug.

Function parameters without labels will can be used with positional arguments:

publicfunc release(_ version:String){}
beak run release 1.2.0

Dependencies

Sometimes it's useful to be able to pull in other Swift packages as dependencies to use in your script. This can be done by adding some special comments at the top of your file. It must take the form:

// beak: {repo} {library} {library} ... @ {version}`

where items in {} are:

  • repo: is the git repo where a Swift package resides. This can take a short form of user/repo or an extended form https://github.com/user/repo.git
  • library: a space delimited list of libraries to include from this package. This defaults to the repo name, which is usually what you want.
  • version: the version of this package to include. This can either be a simple version string, or any of the types allowed by the Swift Package Manager Requirement static members eg
    • branch:develop or .branch("develop")
    • revision:ab794ebb or .revision("ab794ebb")
    • exact:1.2.0 or .exact("1.2.0")
    • .upToNextMajor(from: "1.2.0")
    • .upToNextMinor(from: "1.2.3")

Some examples:

// beak: JohnSundell/ShellOut @ 2.0.0
// beak: kylef/PathKit @ upToNextMajor:0.9.0
// beak: apple/swift-package-manager Utility @ branch:master
import Foundation
import Pathkit
import Shellout
import Utility

You can use beak edit to get code completion for these imported dependencies.

Shebang

If you put a beak shebang at the top of your swift file and then run chmod a+x beak.swift on it to make it executable, you will be able to execute it directly without calling beak.

tasks.swift

#!/usr/bin/env beak --path
publicfunc foo(){print("hello foo")}publicfunc bar(){print("hello bar")}
$ chmod a+x tasks.swift
$ ./tasks.swift run foo
hello foo

If you then place this file into usr/local/bin you could run this file from anywhere:

$ cp tasks.swift /usr/local/bin/tasks
$ tasks run bar
hello bar

To automatically insert the run option, you can change your shebang to #!/usr/bin/env beak run --path.

Alternatives

License

Beak is licensed under the MIT license. See LICENSE for more info.

About

A command line interface for your Swift scripts

Resources

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

Beak 🐦

SPMLinuxGit VersionBuild Statuslicense

Peck into your Swift files from the command line

Beak can take a standard Swift file and then list and run any public global functions in it via a command line interface.

This is useful for scripting and for make-like files written in Swift. You can replace make or rake files with code written in Swift!

An example Swift script:

// This links https://github.com/kylef/PathKit as a dependency
// beak: kylef/PathKit @ 1.0.0
import PathKit // from the dependency listed above
import Foundation
/// Releases the product
/// - Parameters:
/// - version: the version to release
publicfunc release(version:String)throws{
// implementation here
print("version \(version) released!")}
/// Installs the product
publicfunc install()throws{
// implementation here
print("installed")}
$ beak list
release: Releases the product
install: Installs the product
$ beak run release --version 1.2.0
version 1.2.0 released!

How does it work?

Beak analyzes your Swift file via SourceKit and finds all public and global functions. It uses information about the function and parameter names, types and default values to build up a command line interface. It also uses standard comment docs to build up descriptive help.

Beak can parse special comments at the top of your script so it can pull in dependencies via the Swift Package Manager.

By default Beak looks for a file called beak.swift in your current directory, otherwise you can pass a path to a different swift file with --path. This repo itself has a Beak file for running build scripts.

Installing

Make sure Xcode 10.2+ is installed first.

Mint 🌱

$ mint install yonaskolb/beak

Homebrew

$ brew tap yonaskolb/Beak https://github.com/yonaskolb/Beak.git
$ brew install Beak

Swift PM and Beak 🐦

This uses Swift PM to build and run beak from this repo, which then runs the install function inside the Beak.swift file also incuded in this repo. So meta!

$ git clone https://github.com/yonaskolb/Beak.git
$ cd Beak
$ swift run beak run install

Usage

List functions:

This shows all the functions that can be run

$ beak list
release: Releases the product
install: Installs the product

Run a function:

This runs a specific function with parameters. Note that any top level expressions in the swift file will also be run before this function.

$ beak run release --version 1.2.0
version 1.2.0 released

Run the swift file

It's also possible to just run the whole script instead of a specific function

$ beak run

Edit the swift file

This generates and opens an Xcode project with all dependencies linked, which is useful for code completion if you have defined any dependencies. The command line will prompt you to type c to commit any changes you made in Xcode back to the original file

$ beak edit
generating project

You can always use --help to get more information about a command or a function. This will use information from the doc comments.

Functions

For function to be accessible they must be global and declared public. Any non-public functions can be as helper functions, but won't be seen by Beak.

Functions can be throwing, with any errors thrown printed using CustomStringConvertible. This makes it easy to fail your tasks. For now you must include an import Foundation in your script to have throwing functions

Parameters

Any parameters without default values will be required.

Param types of Int, Bool, and String are natively supported. All other types will be passed exactly as they are as raw values, so if it compiles you can pass in anything, for example an enum value--buildType .debug.

Function parameters without labels will can be used with positional arguments:

publicfunc release(_ version:String){}
beak run release 1.2.0

Dependencies

Sometimes it's useful to be able to pull in other Swift packages as dependencies to use in your script. This can be done by adding some special comments at the top of your file. It must take the form:

// beak: {repo} {library} {library} ... @ {version}`

where items in {} are:

  • repo: is the git repo where a Swift package resides. This can take a short form of user/repo or an extended form https://github.com/user/repo.git
  • library: a space delimited list of libraries to include from this package. This defaults to the repo name, which is usually what you want.
  • version: the version of this package to include. This can either be a simple version string, or any of the types allowed by the Swift Package Manager Requirement static members eg
    • branch:develop or .branch("develop")
    • revision:ab794ebb or .revision("ab794ebb")
    • exact:1.2.0 or .exact("1.2.0")
    • .upToNextMajor(from: "1.2.0")
    • .upToNextMinor(from: "1.2.3")

Some examples:

// beak: JohnSundell/ShellOut @ 2.0.0
// beak: kylef/PathKit @ upToNextMajor:0.9.0
// beak: apple/swift-package-manager Utility @ branch:master
import Foundation
import Pathkit
import Shellout
import Utility

You can use beak edit to get code completion for these imported dependencies.

Shebang

If you put a beak shebang at the top of your swift file and then run chmod a+x beak.swift on it to make it executable, you will be able to execute it directly without calling beak.

tasks.swift

#!/usr/bin/env beak --path
publicfunc foo(){print("hello foo")}publicfunc bar(){print("hello bar")}
$ chmod a+x tasks.swift
$ ./tasks.swift run foo
hello foo

If you then place this file into usr/local/bin you could run this file from anywhere:

$ cp tasks.swift /usr/local/bin/tasks
$ tasks run bar
hello bar

To automatically insert the run option, you can change your shebang to #!/usr/bin/env beak run --path.

Alternatives

License

Beak is licensed under the MIT license. See LICENSE for more info.

About

A command line interface for your Swift scripts

Resources

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

Beak 🐦

SPMLinuxGit VersionBuild Statuslicense

Peck into your Swift files from the command line

Beak can take a standard Swift file and then list and run any public global functions in it via a command line interface.

This is useful for scripting and for make-like files written in Swift. You can replace make or rake files with code written in Swift!

An example Swift script:

// This links https://github.com/kylef/PathKit as a dependency
// beak: kylef/PathKit @ 1.0.0
import PathKit // from the dependency listed above
import Foundation
/// Releases the product
/// - Parameters:
/// - version: the version to release
publicfunc release(version:String)throws{
// implementation here
print("version \(version) released!")}
/// Installs the product
publicfunc install()throws{
// implementation here
print("installed")}
$ beak list
release: Releases the product
install: Installs the product
$ beak run release --version 1.2.0
version 1.2.0 released!

How does it work?

Beak analyzes your Swift file via SourceKit and finds all public and global functions. It uses information about the function and parameter names, types and default values to build up a command line interface. It also uses standard comment docs to build up descriptive help.

Beak can parse special comments at the top of your script so it can pull in dependencies via the Swift Package Manager.

By default Beak looks for a file called beak.swift in your current directory, otherwise you can pass a path to a different swift file with --path. This repo itself has a Beak file for running build scripts.

Installing

Make sure Xcode 10.2+ is installed first.

Mint 🌱

$ mint install yonaskolb/beak

Homebrew

$ brew tap yonaskolb/Beak https://github.com/yonaskolb/Beak.git
$ brew install Beak

Swift PM and Beak 🐦

This uses Swift PM to build and run beak from this repo, which then runs the install function inside the Beak.swift file also incuded in this repo. So meta!

$ git clone https://github.com/yonaskolb/Beak.git
$ cd Beak
$ swift run beak run install

Usage

List functions:

This shows all the functions that can be run

$ beak list
release: Releases the product
install: Installs the product

Run a function:

This runs a specific function with parameters. Note that any top level expressions in the swift file will also be run before this function.

$ beak run release --version 1.2.0
version 1.2.0 released

Run the swift file

It's also possible to just run the whole script instead of a specific function

$ beak run

Edit the swift file

This generates and opens an Xcode project with all dependencies linked, which is useful for code completion if you have defined any dependencies. The command line will prompt you to type c to commit any changes you made in Xcode back to the original file

$ beak edit
generating project

You can always use --help to get more information about a command or a function. This will use information from the doc comments.

Functions

For function to be accessible they must be global and declared public. Any non-public functions can be as helper functions, but won't be seen by Beak.

Functions can be throwing, with any errors thrown printed using CustomStringConvertible. This makes it easy to fail your tasks. For now you must include an import Foundation in your script to have throwing functions

Parameters

Any parameters without default values will be required.

Param types of Int, Bool, and String are natively supported. All other types will be passed exactly as they are as raw values, so if it compiles you can pass in anything, for example an enum value--buildType .debug.

Function parameters without labels will can be used with positional arguments:

publicfunc release(_ version:String){}
beak run release 1.2.0

Dependencies

Sometimes it's useful to be able to pull in other Swift packages as dependencies to use in your script. This can be done by adding some special comments at the top of your file. It must take the form:

// beak: {repo} {library} {library} ... @ {version}`

where items in {} are:

  • repo: is the git repo where a Swift package resides. This can take a short form of user/repo or an extended form https://github.com/user/repo.git
  • library: a space delimited list of libraries to include from this package. This defaults to the repo name, which is usually what you want.
  • version: the version of this package to include. This can either be a simple version string, or any of the types allowed by the Swift Package Manager Requirement static members eg
    • branch:develop or .branch("develop")
    • revision:ab794ebb or .revision("ab794ebb")
    • exact:1.2.0 or .exact("1.2.0")
    • .upToNextMajor(from: "1.2.0")
    • .upToNextMinor(from: "1.2.3")

Some examples:

// beak: JohnSundell/ShellOut @ 2.0.0
// beak: kylef/PathKit @ upToNextMajor:0.9.0
// beak: apple/swift-package-manager Utility @ branch:master
import Foundation
import Pathkit
import Shellout
import Utility

You can use beak edit to get code completion for these imported dependencies.

Shebang

If you put a beak shebang at the top of your swift file and then run chmod a+x beak.swift on it to make it executable, you will be able to execute it directly without calling beak.

tasks.swift

#!/usr/bin/env beak --path
publicfunc foo(){print("hello foo")}publicfunc bar(){print("hello bar")}
$ chmod a+x tasks.swift
$ ./tasks.swift run foo
hello foo

If you then place this file into usr/local/bin you could run this file from anywhere:

$ cp tasks.swift /usr/local/bin/tasks
$ tasks run bar
hello bar

To automatically insert the run option, you can change your shebang to #!/usr/bin/env beak run --path.

Alternatives

License

Beak is licensed under the MIT license. See LICENSE for more info.

About

A command line interface for your Swift scripts

Resources

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

Beak 🐦

SPMLinuxGit VersionBuild Statuslicense

Peck into your Swift files from the command line

Beak can take a standard Swift file and then list and run any public global functions in it via a command line interface.

This is useful for scripting and for make-like files written in Swift. You can replace make or rake files with code written in Swift!

An example Swift script:

// This links https://github.com/kylef/PathKit as a dependency
// beak: kylef/PathKit @ 1.0.0
import PathKit // from the dependency listed above
import Foundation
/// Releases the product
/// - Parameters:
/// - version: the version to release
publicfunc release(version:String)throws{
// implementation here
print("version \(version) released!")}
/// Installs the product
publicfunc install()throws{
// implementation here
print("installed")}
$ beak list
release: Releases the product
install: Installs the product
$ beak run release --version 1.2.0
version 1.2.0 released!

How does it work?

Beak analyzes your Swift file via SourceKit and finds all public and global functions. It uses information about the function and parameter names, types and default values to build up a command line interface. It also uses standard comment docs to build up descriptive help.

Beak can parse special comments at the top of your script so it can pull in dependencies via the Swift Package Manager.

By default Beak looks for a file called beak.swift in your current directory, otherwise you can pass a path to a different swift file with --path. This repo itself has a Beak file for running build scripts.

Installing

Make sure Xcode 10.2+ is installed first.

Mint 🌱

$ mint install yonaskolb/beak

Homebrew

$ brew tap yonaskolb/Beak https://github.com/yonaskolb/Beak.git
$ brew install Beak

Swift PM and Beak 🐦

This uses Swift PM to build and run beak from this repo, which then runs the install function inside the Beak.swift file also incuded in this repo. So meta!

$ git clone https://github.com/yonaskolb/Beak.git
$ cd Beak
$ swift run beak run install

Usage

List functions:

This shows all the functions that can be run

$ beak list
release: Releases the product
install: Installs the product

Run a function:

This runs a specific function with parameters. Note that any top level expressions in the swift file will also be run before this function.

$ beak run release --version 1.2.0
version 1.2.0 released

Run the swift file

It's also possible to just run the whole script instead of a specific function

$ beak run

Edit the swift file

This generates and opens an Xcode project with all dependencies linked, which is useful for code completion if you have defined any dependencies. The command line will prompt you to type c to commit any changes you made in Xcode back to the original file

$ beak edit
generating project

You can always use --help to get more information about a command or a function. This will use information from the doc comments.

Functions

For function to be accessible they must be global and declared public. Any non-public functions can be as helper functions, but won't be seen by Beak.

Functions can be throwing, with any errors thrown printed using CustomStringConvertible. This makes it easy to fail your tasks. For now you must include an import Foundation in your script to have throwing functions

Parameters

Any parameters without default values will be required.

Param types of Int, Bool, and String are natively supported. All other types will be passed exactly as they are as raw values, so if it compiles you can pass in anything, for example an enum value--buildType .debug.

Function parameters without labels will can be used with positional arguments:

publicfunc release(_ version:String){}
beak run release 1.2.0

Dependencies

Sometimes it's useful to be able to pull in other Swift packages as dependencies to use in your script. This can be done by adding some special comments at the top of your file. It must take the form:

// beak: {repo} {library} {library} ... @ {version}`

where items in {} are:

  • repo: is the git repo where a Swift package resides. This can take a short form of user/repo or an extended form https://github.com/user/repo.git
  • library: a space delimited list of libraries to include from this package. This defaults to the repo name, which is usually what you want.
  • version: the version of this package to include. This can either be a simple version string, or any of the types allowed by the Swift Package Manager Requirement static members eg
    • branch:develop or .branch("develop")
    • revision:ab794ebb or .revision("ab794ebb")
    • exact:1.2.0 or .exact("1.2.0")
    • .upToNextMajor(from: "1.2.0")
    • .upToNextMinor(from: "1.2.3")

Some examples:

// beak: JohnSundell/ShellOut @ 2.0.0
// beak: kylef/PathKit @ upToNextMajor:0.9.0
// beak: apple/swift-package-manager Utility @ branch:master
import Foundation
import Pathkit
import Shellout
import Utility

You can use beak edit to get code completion for these imported dependencies.

Shebang

If you put a beak shebang at the top of your swift file and then run chmod a+x beak.swift on it to make it executable, you will be able to execute it directly without calling beak.

tasks.swift

#!/usr/bin/env beak --path
publicfunc foo(){print("hello foo")}publicfunc bar(){print("hello bar")}
$ chmod a+x tasks.swift
$ ./tasks.swift run foo
hello foo

If you then place this file into usr/local/bin you could run this file from anywhere:

$ cp tasks.swift /usr/local/bin/tasks
$ tasks run bar
hello bar

To automatically insert the run option, you can change your shebang to #!/usr/bin/env beak run --path.

Alternatives

License

Beak is licensed under the MIT license. See LICENSE for more info.

About

A command line interface for your Swift scripts

Resources

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

Beak 🐦

SPMLinuxGit VersionBuild Statuslicense

Peck into your Swift files from the command line

Beak can take a standard Swift file and then list and run any public global functions in it via a command line interface.

This is useful for scripting and for make-like files written in Swift. You can replace make or rake files with code written in Swift!

An example Swift script:

// This links https://github.com/kylef/PathKit as a dependency
// beak: kylef/PathKit @ 1.0.0
import PathKit // from the dependency listed above
import Foundation
/// Releases the product
/// - Parameters:
/// - version: the version to release
publicfunc release(version:String)throws{
// implementation here
print("version \(version) released!")}
/// Installs the product
publicfunc install()throws{
// implementation here
print("installed")}
$ beak list
release: Releases the product
install: Installs the product
$ beak run release --version 1.2.0
version 1.2.0 released!

How does it work?

Beak analyzes your Swift file via SourceKit and finds all public and global functions. It uses information about the function and parameter names, types and default values to build up a command line interface. It also uses standard comment docs to build up descriptive help.

Beak can parse special comments at the top of your script so it can pull in dependencies via the Swift Package Manager.

By default Beak looks for a file called beak.swift in your current directory, otherwise you can pass a path to a different swift file with --path. This repo itself has a Beak file for running build scripts.

Installing

Make sure Xcode 10.2+ is installed first.

Mint 🌱

$ mint install yonaskolb/beak

Homebrew

$ brew tap yonaskolb/Beak https://github.com/yonaskolb/Beak.git
$ brew install Beak

Swift PM and Beak 🐦

This uses Swift PM to build and run beak from this repo, which then runs the install function inside the Beak.swift file also incuded in this repo. So meta!

$ git clone https://github.com/yonaskolb/Beak.git
$ cd Beak
$ swift run beak run install

Usage

List functions:

This shows all the functions that can be run

$ beak list
release: Releases the product
install: Installs the product

Run a function:

This runs a specific function with parameters. Note that any top level expressions in the swift file will also be run before this function.

$ beak run release --version 1.2.0
version 1.2.0 released

Run the swift file

It's also possible to just run the whole script instead of a specific function

$ beak run

Edit the swift file

This generates and opens an Xcode project with all dependencies linked, which is useful for code completion if you have defined any dependencies. The command line will prompt you to type c to commit any changes you made in Xcode back to the original file

$ beak edit
generating project

You can always use --help to get more information about a command or a function. This will use information from the doc comments.

Functions

For function to be accessible they must be global and declared public. Any non-public functions can be as helper functions, but won't be seen by Beak.

Functions can be throwing, with any errors thrown printed using CustomStringConvertible. This makes it easy to fail your tasks. For now you must include an import Foundation in your script to have throwing functions

Parameters

Any parameters without default values will be required.

Param types of Int, Bool, and String are natively supported. All other types will be passed exactly as they are as raw values, so if it compiles you can pass in anything, for example an enum value--buildType .debug.

Function parameters without labels will can be used with positional arguments:

publicfunc release(_ version:String){}
beak run release 1.2.0

Dependencies

Sometimes it's useful to be able to pull in other Swift packages as dependencies to use in your script. This can be done by adding some special comments at the top of your file. It must take the form:

// beak: {repo} {library} {library} ... @ {version}`

where items in {} are:

  • repo: is the git repo where a Swift package resides. This can take a short form of user/repo or an extended form https://github.com/user/repo.git
  • library: a space delimited list of libraries to include from this package. This defaults to the repo name, which is usually what you want.
  • version: the version of this package to include. This can either be a simple version string, or any of the types allowed by the Swift Package Manager Requirement static members eg
    • branch:develop or .branch("develop")
    • revision:ab794ebb or .revision("ab794ebb")
    • exact:1.2.0 or .exact("1.2.0")
    • .upToNextMajor(from: "1.2.0")
    • .upToNextMinor(from: "1.2.3")

Some examples:

// beak: JohnSundell/ShellOut @ 2.0.0
// beak: kylef/PathKit @ upToNextMajor:0.9.0
// beak: apple/swift-package-manager Utility @ branch:master
import Foundation
import Pathkit
import Shellout
import Utility

You can use beak edit to get code completion for these imported dependencies.

Shebang

If you put a beak shebang at the top of your swift file and then run chmod a+x beak.swift on it to make it executable, you will be able to execute it directly without calling beak.

tasks.swift

#!/usr/bin/env beak --path
publicfunc foo(){print("hello foo")}publicfunc bar(){print("hello bar")}
$ chmod a+x tasks.swift
$ ./tasks.swift run foo
hello foo

If you then place this file into usr/local/bin you could run this file from anywhere:

$ cp tasks.swift /usr/local/bin/tasks
$ tasks run bar
hello bar

To automatically insert the run option, you can change your shebang to #!/usr/bin/env beak run --path.

Alternatives

License

Beak is licensed under the MIT license. See LICENSE for more info.

About

A command line interface for your Swift scripts

Resources

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

Beak 🐦

SPMLinuxGit VersionBuild Statuslicense

Peck into your Swift files from the command line

Beak can take a standard Swift file and then list and run any public global functions in it via a command line interface.

This is useful for scripting and for make-like files written in Swift. You can replace make or rake files with code written in Swift!

An example Swift script:

// This links https://github.com/kylef/PathKit as a dependency
// beak: kylef/PathKit @ 1.0.0
import PathKit // from the dependency listed above
import Foundation
/// Releases the product
/// - Parameters:
/// - version: the version to release
publicfunc release(version:String)throws{
// implementation here
print("version \(version) released!")}
/// Installs the product
publicfunc install()throws{
// implementation here
print("installed")}
$ beak list
release: Releases the product
install: Installs the product
$ beak run release --version 1.2.0
version 1.2.0 released!

How does it work?

Beak analyzes your Swift file via SourceKit and finds all public and global functions. It uses information about the function and parameter names, types and default values to build up a command line interface. It also uses standard comment docs to build up descriptive help.

Beak can parse special comments at the top of your script so it can pull in dependencies via the Swift Package Manager.

By default Beak looks for a file called beak.swift in your current directory, otherwise you can pass a path to a different swift file with --path. This repo itself has a Beak file for running build scripts.

Installing

Make sure Xcode 10.2+ is installed first.

Mint 🌱

$ mint install yonaskolb/beak

Homebrew

$ brew tap yonaskolb/Beak https://github.com/yonaskolb/Beak.git
$ brew install Beak

Swift PM and Beak 🐦

This uses Swift PM to build and run beak from this repo, which then runs the install function inside the Beak.swift file also incuded in this repo. So meta!

$ git clone https://github.com/yonaskolb/Beak.git
$ cd Beak
$ swift run beak run install

Usage

List functions:

This shows all the functions that can be run

$ beak list
release: Releases the product
install: Installs the product

Run a function:

This runs a specific function with parameters. Note that any top level expressions in the swift file will also be run before this function.

$ beak run release --version 1.2.0
version 1.2.0 released

Run the swift file

It's also possible to just run the whole script instead of a specific function

$ beak run

Edit the swift file

This generates and opens an Xcode project with all dependencies linked, which is useful for code completion if you have defined any dependencies. The command line will prompt you to type c to commit any changes you made in Xcode back to the original file

$ beak edit
generating project

You can always use --help to get more information about a command or a function. This will use information from the doc comments.

Functions

For function to be accessible they must be global and declared public. Any non-public functions can be as helper functions, but won't be seen by Beak.

Functions can be throwing, with any errors thrown printed using CustomStringConvertible. This makes it easy to fail your tasks. For now you must include an import Foundation in your script to have throwing functions

Parameters

Any parameters without default values will be required.

Param types of Int, Bool, and String are natively supported. All other types will be passed exactly as they are as raw values, so if it compiles you can pass in anything, for example an enum value--buildType .debug.

Function parameters without labels will can be used with positional arguments:

publicfunc release(_ version:String){}
beak run release 1.2.0

Dependencies

Sometimes it's useful to be able to pull in other Swift packages as dependencies to use in your script. This can be done by adding some special comments at the top of your file. It must take the form:

// beak: {repo} {library} {library} ... @ {version}`

where items in {} are:

  • repo: is the git repo where a Swift package resides. This can take a short form of user/repo or an extended form https://github.com/user/repo.git
  • library: a space delimited list of libraries to include from this package. This defaults to the repo name, which is usually what you want.
  • version: the version of this package to include. This can either be a simple version string, or any of the types allowed by the Swift Package Manager Requirement static members eg
    • branch:develop or .branch("develop")
    • revision:ab794ebb or .revision("ab794ebb")
    • exact:1.2.0 or .exact("1.2.0")
    • .upToNextMajor(from: "1.2.0")
    • .upToNextMinor(from: "1.2.3")

Some examples:

// beak: JohnSundell/ShellOut @ 2.0.0
// beak: kylef/PathKit @ upToNextMajor:0.9.0
// beak: apple/swift-package-manager Utility @ branch:master
import Foundation
import Pathkit
import Shellout
import Utility

You can use beak edit to get code completion for these imported dependencies.

Shebang

If you put a beak shebang at the top of your swift file and then run chmod a+x beak.swift on it to make it executable, you will be able to execute it directly without calling beak.

tasks.swift

#!/usr/bin/env beak --path
publicfunc foo(){print("hello foo")}publicfunc bar(){print("hello bar")}
$ chmod a+x tasks.swift
$ ./tasks.swift run foo
hello foo

If you then place this file into usr/local/bin you could run this file from anywhere:

$ cp tasks.swift /usr/local/bin/tasks
$ tasks run bar
hello bar

To automatically insert the run option, you can change your shebang to #!/usr/bin/env beak run --path.

Alternatives

License

Beak is licensed under the MIT license. See LICENSE for more info.

About

A command line interface for your Swift scripts

Resources

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

Beak 🐦

SPMLinuxGit VersionBuild Statuslicense

Peck into your Swift files from the command line

Beak can take a standard Swift file and then list and run any public global functions in it via a command line interface.

This is useful for scripting and for make-like files written in Swift. You can replace make or rake files with code written in Swift!

An example Swift script:

// This links https://github.com/kylef/PathKit as a dependency
// beak: kylef/PathKit @ 1.0.0
import PathKit // from the dependency listed above
import Foundation
/// Releases the product
/// - Parameters:
/// - version: the version to release
publicfunc release(version:String)throws{
// implementation here
print("version \(version) released!")}
/// Installs the product
publicfunc install()throws{
// implementation here
print("installed")}
$ beak list
release: Releases the product
install: Installs the product
$ beak run release --version 1.2.0
version 1.2.0 released!

How does it work?

Beak analyzes your Swift file via SourceKit and finds all public and global functions. It uses information about the function and parameter names, types and default values to build up a command line interface. It also uses standard comment docs to build up descriptive help.

Beak can parse special comments at the top of your script so it can pull in dependencies via the Swift Package Manager.

By default Beak looks for a file called beak.swift in your current directory, otherwise you can pass a path to a different swift file with --path. This repo itself has a Beak file for running build scripts.

Installing

Make sure Xcode 10.2+ is installed first.

Mint 🌱

$ mint install yonaskolb/beak

Homebrew

$ brew tap yonaskolb/Beak https://github.com/yonaskolb/Beak.git
$ brew install Beak

Swift PM and Beak 🐦

This uses Swift PM to build and run beak from this repo, which then runs the install function inside the Beak.swift file also incuded in this repo. So meta!

$ git clone https://github.com/yonaskolb/Beak.git
$ cd Beak
$ swift run beak run install

Usage

List functions:

This shows all the functions that can be run

$ beak list
release: Releases the product
install: Installs the product

Run a function:

This runs a specific function with parameters. Note that any top level expressions in the swift file will also be run before this function.

$ beak run release --version 1.2.0
version 1.2.0 released

Run the swift file

It's also possible to just run the whole script instead of a specific function

$ beak run

Edit the swift file

This generates and opens an Xcode project with all dependencies linked, which is useful for code completion if you have defined any dependencies. The command line will prompt you to type c to commit any changes you made in Xcode back to the original file

$ beak edit
generating project

You can always use --help to get more information about a command or a function. This will use information from the doc comments.

Functions

For function to be accessible they must be global and declared public. Any non-public functions can be as helper functions, but won't be seen by Beak.

Functions can be throwing, with any errors thrown printed using CustomStringConvertible. This makes it easy to fail your tasks. For now you must include an import Foundation in your script to have throwing functions

Parameters

Any parameters without default values will be required.

Param types of Int, Bool, and String are natively supported. All other types will be passed exactly as they are as raw values, so if it compiles you can pass in anything, for example an enum value--buildType .debug.

Function parameters without labels will can be used with positional arguments:

publicfunc release(_ version:String){}
beak run release 1.2.0

Dependencies

Sometimes it's useful to be able to pull in other Swift packages as dependencies to use in your script. This can be done by adding some special comments at the top of your file. It must take the form:

// beak: {repo} {library} {library} ... @ {version}`

where items in {} are:

  • repo: is the git repo where a Swift package resides. This can take a short form of user/repo or an extended form https://github.com/user/repo.git
  • library: a space delimited list of libraries to include from this package. This defaults to the repo name, which is usually what you want.
  • version: the version of this package to include. This can either be a simple version string, or any of the types allowed by the Swift Package Manager Requirement static members eg
    • branch:develop or .branch("develop")
    • revision:ab794ebb or .revision("ab794ebb")
    • exact:1.2.0 or .exact("1.2.0")
    • .upToNextMajor(from: "1.2.0")
    • .upToNextMinor(from: "1.2.3")

Some examples:

// beak: JohnSundell/ShellOut @ 2.0.0
// beak: kylef/PathKit @ upToNextMajor:0.9.0
// beak: apple/swift-package-manager Utility @ branch:master
import Foundation
import Pathkit
import Shellout
import Utility

You can use beak edit to get code completion for these imported dependencies.

Shebang

If you put a beak shebang at the top of your swift file and then run chmod a+x beak.swift on it to make it executable, you will be able to execute it directly without calling beak.

tasks.swift

#!/usr/bin/env beak --path
publicfunc foo(){print("hello foo")}publicfunc bar(){print("hello bar")}
$ chmod a+x tasks.swift
$ ./tasks.swift run foo
hello foo

If you then place this file into usr/local/bin you could run this file from anywhere:

$ cp tasks.swift /usr/local/bin/tasks
$ tasks run bar
hello bar

To automatically insert the run option, you can change your shebang to #!/usr/bin/env beak run --path.

Alternatives

License

Beak is licensed under the MIT license. See LICENSE for more info.

About

A command line interface for your Swift scripts

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages