Config file and package tracking utility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Riyyi 57d50a6dbb Test: Add argument to not delete test files in the home directory 3 years ago
cmake CMake: version 3.16 doesn't support the rm command 3 years ago
doc Doc: Add config file to exclude paths list 3 years ago
src Manager: Change exclude path logic to /.gitignore*/ style 3 years ago
test Test: Add argument to not delete test files in the home directory 3 years ago
.clang-format Initial commit 3 years ago
.gitignore Initial commit 3 years ago
CMakeLists.txt Meta+CMake: Convert JSON library from git submodule to system package 3 years ago
LICENSE Project: Release under MIT license 3 years ago
README.org Meta: Update exclude paths list in the example 3 years ago
compile_commands.json Initial commit 3 years ago

README.org

Manafiles

Config file and package tracking utility.

  • Manage dotfiles and system config files.
  • Selectively comment and uncomment depending on machine configuration.
  • Store a list of all installed packages.
  • Install packages from a stored list.

Getting started

Installation

If you are using Arch Linux, you can install the AUR package manafiles-git.

Alternatively, you will have to build from source.

Configuration

Install the example configuration

During installation, manafiles will install the example config to:
/usr/share/doc/manafiles/examples/manafiles.json

From there you can copy it to anywhere in the working directory, the config file is searched recursively.
$HOME/<dotfiles>/<anywhere>

Exclude paths

Everything in this list will get excluded when pushing config files from the working directory to the system.
Currently three types of file matching are supported:

  • file full name of the file matches
  • directory full name of the directory matches
  • endsWith end of the path matches

The excluded paths from the example config:

"excludePaths" : {
	".git": "directory",
	".md": "endsWith",
	"manafiles.json": "endsWith",
	"packages": "file",
	"README.org": "endsWith",
	"screenshot.png": "file"
}
System config files

Directories in this list will be pushed to the root / of the system, instead of $HOME.

The system directories from the example config:

"systemDirectories": [
	"/boot",
	"/etc",
	"/usr/share"
]

Usage

Selectively comment and uncomment

Config files can be pushed from the working directory to the system like so:

$ manafiles -Fs

When pushing files to the system, manafiles recognizes special blocks and comments or uncomments them depending on the machine's configuration. Such a block looks like this:

# >>> distro=arch hostname=arch-desktop user=anon
export PATH="$PATH:$HOME/.local/bin"
# <<<

This block uses all of the supported configurations, distro, hostname and user. These can be used in any combination and order.

If all of the given configurations match, manafiles will make sure that the contents of the block are uncommented. If any of them do not match, then manafiles will make sure that the contents of the block are commented.

Building

Build dependencies

  • gcc-libs
  • (make) cmake
  • (make) git
  • (make) gzip
  • (make) nlohmann-json arch, debian, ubuntu
  • (optional) grep
  • (optional) pacman + pacman-contrib
  • (optional) apt + dpkg

The optional requirements are for the package tracking functionality.

Build compilation

$ mkdir build
$ cd build
$ cmake ..
$ make

Build installation

$ sudo make install