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 2f89d5cfdc Doc: Update building instructions to include submodules 2 years ago
cmake CMake: version 3.16 doesn't support the rm command 3 years ago
doc Manager+Doc: Update config file 2 years ago
src Util+Test: Remove Util library 2 years ago
test/unit Util+Test: Remove Util library 2 years ago
vendor Meta: Add submodule for ruc library 2 years ago
.clang-format Meta: Bump C++ version from 17 to 20 2 years ago
.gitignore Initial commit 3 years ago
.gitmodules Meta: Add submodule for ruc library 2 years ago
CMakeLists.txt CMake: Build ruc library 2 years ago
LICENSE Project: Release under MIT license 3 years ago
README.org Doc: Update building instructions to include submodules 2 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>

Ignore patterns

Everything in this list will get ignored when pulling/pushing config files from the working directory.
Currently two types of file matching are supported:

  • literal matches a file or directory literally
  • wildcard the asterisk matches zero or more characters

These behave similarly to a .gitignore pattern.

  • If the pattern starts with a slash, it matches files and directories in the working directory root only.
  • If the pattern doesn’t start with a slash, it matches files and directories in any directory or subdirectory.
  • If the pattern ends with a slash, it matches only directories. When a directory is ignored,
    all of its files and subdirectories are also ignored.

The ignore patterns from the example config:

"ignorePatterns" : [
	".git/",
	"*.md",
	"manafiles.json",
	"packages",
	"README.org",
	"screenshot.png"
]
System config files

Everything in this list will be pushed to the root / of the system, instead of $HOME.
These support the same file matching as explained in the Ignore patterns section.

The system patterns from the example config:

"systemPatterns": [
	"/boot/",
	"/etc/",
	"/usr/lib/",
	"/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.

Compiling

Dependencies

  • gcc-libs
  • (make) cmake
  • (make) git
  • (make) gzip
  • (optional) grep
  • (optional) pacman + pacman-contrib
  • (optional) apt + dpkg

The optional requirements are for the package tracking functionality.

Building

To get the sources from the repository, run the following commands:

$ git clone https://github.com/riyyi/manafiles
$ cd manafiles
$ git submodule init
$ git submodule update

or

$ git clone --recursive https://github.com/riyyi/manafiles
$ cd manafiles
Compiling

To compile, run the following commands:

$ mkdir build
$ cd build
$ cmake ..
$ make
# Optional. This will install the manafiles executable in /usr/bin
$ sudo make install

Uninstalling

To uninstall, run the following commands:

Warning: make uninstall will try to delete all files listed in the install_manifest.txt file inside your build folder. Make sure you first check that it won't delete any important files.

$ cd build
$ sudo make uninstall