Skip to content

Tobi-De/taku

Repository files navigation

Taku

Simple script manager for creating, running, and syncing scripts.

Publish to PyPIPyPI - Version PyPI - Python Version MIT License Status Ruff uv

Installation

uv tool install taku-cli

or

uv tool install "taku-cli[bling]" # just adds some colors

Quick Start

asciicast

Commands

  • taku new <name> [--template/-t <name>] - Create a new script from template
  • taku list - List all scripts, add -t to also list templates
  • taku get <name> - Show script details
  • taku edit <name> - Edit a script (auto-pushes to git if repository)
  • taku run <name> [args...] - Run a script with optional arguments
  • taku rm <name> - Remove a script (auto-pushes to git if repository)
  • taku install <name|all> - Install script to ~/.local/bin
  • taku uninstall <name|all> - Remove script from ~/.local/bin

Configuration

Set the scripts directory:

export TAKU_SCRIPTS=~/my-scripts

Default: ~/scripts

Templates

Create templates in <scripts-dir>/.templates/ and use with:

taku new myapp --template python

Template resolution order:

  1. <scripts-dir>/.templates/<template-name>
  2. ./<template-name> (current directory)

Templates can use ${script_name} variable for substitution.

Example Python template (~/.scripts/.templates/python):

#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.12"
# dependencies = []
# ///


def main() -> None:
    print("Hello from $script_name!")


if __name__ == "__main__":
    main()

Git Integration

If your scripts directory is a Git repository, taku will automatically commit and push changes whenever you edit or remove scripts. This keeps your changes synced, but to complete the auto-sync feature you also need to set up each machine to regularly pull the latest scripts.

Using cron

  1. Open your crontab:

    crontab -e
  2. Add a line to pull updates every 15 minutes (adjust the path to your scripts directory):

    */15 * * * * cd /home/tobi/scripts && git pull >/dev/null 2>&1

Using systemd-timers

  1. Create a service file /etc/systemd/system/scripts-sync.service (adjust the path to your scripts directory):

    [Unit]
    Description=Synchronize scripts from remote
    
    [Service]
    Type=oneshot
    User=tobi
    WorkingDirectory=/home/tobi/scripts
    ExecStart=/usr/bin/git pull
  2. Create a timer file /etc/systemd/system/scripts-sync.timer:

    [Unit]
    Description=Periodic synchronization of scripts
    
    [Timer]
    OnBootSec=1min
    OnUnitActiveSec=15min
    Persistent=true
    
    [Install]
    WantedBy=timers.target
  3. Enable the timer:

    sudo systemctl daemon-reload
    sudo systemctl enable --now scripts-sync.timer

This will run a git pull in your scripts directory every 15 minutes.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors