wrut
A utility to manage project templates.
Table of Contents
Feature Overview
- Project template creation and management.
- Project creation and management.
- Macro expansion when creating new projects from existing templates (WIP).
- Tags to better organize and filter templates and projects (WIP).
Command-Line Usage
You can run wrut --help
to get the full help message.
You can also run wrut <TYPE> <COMMAND> --help
to get more detailed information
about a given command.
Documentation
⚠️ | Documentation for the wrut utility is still very much a work-in-progress. |
---|
Documentation for the wrut
utility can be viewed at
https://y-mx-b.github.io/wrut/.
TODO
- Template creation and management
- Project creation and management
- Split backend logic into a separate library
- Documentation
- Improve backend organization
- Tags (improve)
- Improve list output
- Snapshots (using git?)
- Develop internal template format
- Macros
Installing wrut
wrut
can be installed through cargo
:
cargo install wrut
You can also decide to build wrut
from source. If so, simply clone the
directory and run cargo build --release
to build wrut
.
git clone https://github.com/y-mx-b/wrut.git
cd wrut
cargo build --release
./target/release/wrut --help
Installation scripts are planned for the future, perhaps when wrut
hits 1.0.
Setting up wrut
Before using wrut
, you must first set up wrut
's storage and configuration
directories.
wrut --setup a
This command will set up wrut
's storage directories at ~/.wrut
and the
configuration directory at ~/.config/wrut
. For more information about wrut
's
internals, check the
relevant documentation.
You can also use the --setup
option to overwrite data/configuration
directories:
wrut --setup t,p,c
This command would overwrite the template, project, and configuration
directories to their defaults. Check wrut --help
for more options.
Creating New Templates
Let's say your creative urges have struck and you have a sudden desire to write
a novel. Being the scatterbrained yet technically savvy individual you are, you
know very well that you're going to create, delete, and create ever so many
writing projects, but you can't be bothered to set up your projects manually.
Fear not, for wrut
is here to help!
Let's create a new template to serve as the backbone for our writing projects. First, we'll create a new directory and add a couple files to it.
mkdir "Novel Template"
cd "Novel Template"
echo "# Title\nThis is my new novel!" >novel.md
Now, let's initialize this directory as a wrut
project template.
wrut template init Novel
Alternatively, you could use the shorter aliases well.
wrut t i Novel
Now, if we run the list
command, we can see that we've added a new template!
$ wrut t ls
Novel
Perfect!
Creating New Projects
Now, let's get to writing! First, let's create a new project directory.
cd ..
mkdir "My Novel"
cd "My Novel"
wrut project init Novel
We could provide wrut project init
a project name as well, but if we don't,
it'll simply use the name of the directory.
$ wrut p ls
My Novel
Now, we should have novel.md
in this directory. Let's edit its contents!
<!-- novel.md -->
# My Novel
This is my new novel!
Beautiful.
We can also use project new
as an alternative to project init
.
cd ..
wrut project new Novel "My Second Novel"
The new
subcommand will create a new directory "My Second Novel"
and then
initialize it. It's no different from creating the directory and running
project init
, it's just quicker.
Managing Templates
You can view your templates with the template list
command.
wrut template list
You can also use t ls
for short.
wrut t ls
If you wish to delete a template, you can use the template remove command
.
wrut template remove Novel
Now, if we run template list
, we won't have any available templates.
$ wrut template list
However, the Novel Template
subdirectory still exists. If we want to delete
the directory as well, we can use the --delete
flag.
wrut template remove Novel --delete
This will delete the template directory itself alongside the reference to it.
Managing Projects
We can also view our current projects with the list
subcommand.
$ wrut project list
My Novel
My Second Novel
Naturally, the shortened version of the command will work as well.
$ wrut p ls
My Novel
My Second Novel
We can also use the remove
subcommand to delete projects, and the --delete
flag will also work, allowing us to delete references to projects as well as the
project directory itself.
$ wrut project remove "My Novel"
$ wrut p rm "My Second Novel" --delete
$ wrut p ls
Macros
⚠️ | Macros have not yet been implemented. |
---|
Creating New Tags
The new
command allows you to create new tags.
wrut tag new <NAME> --templates <TEMPLATES> --projects <PROJECTS>
--templates
and --projects
are optional. Provided arguments for these flags,
however, will add entries to their respective directories. Check
Data Storage for more details.
Managing Tags
You can view all tags with the list
command:
wrut tag list
Alternatively, you can inspect a single tag with the same command:
wrut tag list [NAME]
You can remove tags with the remove
command:
wrut tag remove <NAME>
Global Configuration
wrut
takes a --config
argument, allowing you to specify the configuration
file to use. By default, the configuration file is located at
~/.config/wrut/config.toml
.
Default Configuration
[template]
ignore_dirs = []
ignore_files = []
[project]
Template Configuration
When you initialize or create a new template, a .wrut.toml
is automatically
created. It will have the same format as a global configuration, but is specific
to the template. As such, it will automatically be loaded when you generate a
project from said template.
Default Configuration
[template]
ignore_dirs = [
'.git',
'target',
'.build',
]
ignore_files = ['.wrut.toml']
[project]
Data Storage
⚠️ | wrut is not in a complete state, so this is mostly a project goal and may change. |
---|
The data directory contains the templates
, projects
, tags
, and .obj
subdirectories. The .obj
directory is used by wrut
to store internal
representations of templates for faster project generation. The other three are
used to store data regarding templates, projects, and tags respectively.
The templates
and projects
directories contain symbolic links to actual
template or project directories. The tags
directory is a little more complex,
in that it stores directories named after each tag, and each of these
directories contains a templates
and projects
directory, which each contain
an empty file named after the appropriate template/project.
Example ~/.wrut
directory structure:
.wrut
├── projects
│ ├── Essay # symlink; could point to ~/foo/bar, doesn't matter
│ └── wrut # file name and real path are considered separately
├── tags
│ ├── Programming
│ │ ├── projects
│ │ │ └── wrut
│ │ └── templates
│ │ └── Rust
│ └── Writing
│ ├── projects
│ │ └── Essay
│ └── templates
│ └── LaTeX
└── templates
├── Rust # symlink; same as with projects
└── LaTeX