Skip to content

constkolesnyak/cstow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cstow

Demo

About

There's lots of dotfiles managers, but my favorite is GNU Stow.

It has only two problems: boring UI and no config. Cstow solves them.

Name

Constantine's GNU Stow wrapper.

A target directory is the root of a tree in which one or more packages wish to appear to be installed.

A stow directory is the root of a tree containing separate packages in private subtrees.

Installation

Use pipx

pipx install cstow

Or pip

pip install cstow

Configuration

Set CSTOW_CONFIG_PATH to path/to/your/cstow_config.toml. Use any file name you want.

Examples

Config Contents

Cstow expands ~ and $AN_ENVIRONMENT_VARIABLE.

Name Type Description Default
root_dir String The root of stow directories /
cmd_template String The template for GNU Stow commands See below
targets_dirs Table Targets (keys) and dirs (values)
targets_dirs (key) String A target directory
targets_dirs (value) Array of strings Stow directories for the target

root_dir

You might set it to ~/dotfiles or $DOTFILES.

If you don't set root_dir, use absolute paths in targets_dirs.

cmd_template

You can set it to any shell command that contains every placeholder.

Placeholder Description
action A GNU Stow action (no, stow, restow, delete)
target A target directory
dir A stow directory for the target

Default

stow --$action --no-folding --verbose --target=$target --dir=$dir . \
     2>&1 | grep --invert-match --regexp="^BUG" --regexp="^WARN"

Usage

# Get some help
cstow -h
cstow --help

# Run an action
cstow               # Default action is 'no'
cstow delete        # Action is a positional argument
cstow -a restow     # But flags also work
cstow --action no

# Print plain text
cstow stow --plain
cstow restow -p
cstow -p -a delete