1
Fork 0
dotfiles/.bauke/Deno.md

57 lines
2.2 KiB
Markdown

# Deno Scripts
## Scripts
- [`bulk`]: bulk doer of things.
- [`codium-extensions`]: save and install VS Codium extensions using their identifier.
- [`copy-nixos-config`]: copies NixOS configuration from `$BAUKE_DIR/nix/<hostname>/` to `/etc/nixos/`.
- [`desktop-wallpaper`]: desktop wallpaper changer.
- [`drg-data-entry`]: Deep Rock Galactic data tracker.
- [`edit-youtube-video`]: edit a YouTube video via the Data API.
- [`project-avatar`]: image generator for projects.
- [`simple-git-push`]: `git push` with extra semantics.
- [`tauon-controls`]: remote control CLI for Tauon Music Box.
[`bulk`]: ./scripts/bulk/bulk.ts
[`codium-extensions`]: ./scripts/codium-extensions.ts
[`copy-nixos-config`]: ./scripts/copy-nixos-config.ts
[`desktop-wallpaper`]: ./scripts/desktop-wallpaper.ts
[`drg-data-entry`]: ./scripts/drg-data-entry.ts
[`edit-youtube-video`]: ./scripts/edit-youtube-video.ts
[`project-avatar`]: ./scripts/project-avatar.ts
[`simple-git-push`]: ./scripts/simple-git-push.ts
[`tauon-controls`]: ./scripts/tauon-controls.ts
## Cliffy
For CLI creation [Cliffy] is used, a Deno-specific framework for handling input and parsing arguments.
* A simple command with a `--file <file>` argument:
```ts
// Assuming the script location is `$BAUKE_DIR/scripts`.
import { Command } from "./dependencies.ts";
const { options } = await new Command()
// CLI information, shown in --help.
.name("example-cli")
.description("Description of the program.")
// Add the --file option with a default value.
.option("-f, --file <file:file>", "Example file", {
default: "example.txt"
})
.parse(Deno.args);
console.log(options.file);
```
* An example of subcommands can be seen in [`bulk`], each command is created like above but added to the main CLI via `.command("name", Command)`.
[Cliffy]: https://cliffy.io
## Why `bin/` + `scripts/`
Deno has [some issues](https://github.com/denoland/deno/issues/17195) with running files without a file extension (like what you'd want in `bin/`). So instead all the scripts are located in `scripts/` with proper file extensions and the `bin/` files call those scripts using `deno run`.
Though even if Deno didn't have these issues, having massive shebangs would also not be nice, so this setup is fine.