Xdg Ninja Save

A shell script which checks your $HOME for unwanted files and directories.

Project README

xdg-ninja

Because you wouldn't let just anyone into your $HOME

A shell script which checks your $HOME for unwanted files and directories.

When it encounters a file it knows about, it will tell you whether it's possible to move this file to an appropriate location, and how to do it.

The configurations are from the arch wiki page on XDG_BASE_DIR, antidot (thanks to Scr0nch for writing a conversion tool), and contributed by other users.

Running

Clone the repository somewhere, then run the ./xdg-ninja.sh script.

This will run every test in the default configuration.

Dependencies

  • your favorite POSIX-compliant shell (bash, zsh, dash, ...)
  • jq for parsing the json files

Optional

  • glow for rendering markdown in the terminal (bat can be used as a fallback, but glows output is clearer and therefore recommended)
  • cabal for compiling the helper program for creating configurations

Configuration

The configuration is done in the programs/ directory.

You define a program, and then a list of files and directories which this program ruthlessly puts into your $HOME directory.

For each file/directory, you specify if it can be (re)moved.

If this is the case, you also specify instructions on how to accomplish this in markdown.

Files in this directory can have any name, but using the name of the program is encouraged.

Automatically Generating Configuration

You need haskell and cabal installed. (To be clear, this is just for a tool that will help you automatically generate the config files, you still only need your shell to run the tests)

Run the following command:

cabal run xdgnj add

Manually

We're going to use git as an example.

It puts the file .gitconfig into _$HOME.

Luckily, the XDG spec is supported by git, so we can simply move the file to XDG_CONFIG_HOME/git/config.

We can use that last sentence as our instructions. In this case, there are no newlines, so escaping this string for use in json is trivial, however, this is how you should generally approach it:

echo "Luckily, the XDG spec is supported by git, so we can simply move the file to _XDG_CONFIG_HOME/git/config_." | jq -aRs .

Let's see what the output of this command looks like for something a little more sophisticated. Here's an example file:

cat example.md
Currently not fixable.

_(But you can probably just delete the dir)_

Here's what catting this file to the jq command produces:

cat example.md | jq -aRs .
"Currently not fixable.\n\n_(But you can probably just delete the dir)_\n"

Now, we can assemble our final json file:

{
    "name": "git",
    "files": [
        {
            "path": "$HOME/.gitconfig",
            "movable": true,
            "help": "Luckily, the XDG spec is supported by git, so we can simply move the file to _XDG_CONFIG_HOME/git/config_.\n"
        }
    ]
}

Saving this as git.json in the programs/ directory will result in the script picking it up and checking the file.

If you've created a configuration for a file that isn't in the offical repository yet, make sure to create a pull request so that other people can benefit from it as well.

Open Source Agenda is not affiliated with "Xdg Ninja" Project. README Source: b3nj5m1n/xdg-ninja