| Crates.io | phoebus |
| lib.rs | phoebus |
| version | 1.0.0 |
| created_at | 2025-07-08 16:27:38.633887+00 |
| updated_at | 2025-07-08 16:27:38.633887+00 |
| description | A declarative configuration file manager (not only for dotfiles!) |
| homepage | |
| repository | https://codeberg.org/frollo/phoebus/ |
| max_upload_size | |
| id | 1743146 |
| size | 41,151 |
phoebus is a declarative configuration file manager (not only for dotfiles!) easily integrated with version control systems. phoebus aims to save and apply config files, both system and user files, across machines seemlessly.
You might want to use phoebus if you want a tool to help you manage your config files that
If you have cargo installed
cargo install phoebus
When phoebus is first setup, using phoebus init, it creates the phoebus config file, or simply the config file, if not already existing, and a backend directory; if specified in the config file also a frontend directory is created (you can always create it later).
When the user runs phoebus pull, all and only the files/directories in the backend directory that are mentioned in the phoebus config file are overwritten, the rest is left untouched (we will add some optional "garbage collection technique" in the future), .
When the user runs phoebus refresh, if also a frontend directory is specified in the phoebus config file, then its contents are erased and populated again with symlinks to the files referenced in the phoebus config file.
The directory trees of both the backend directory and the frontend directory is defined in the phoebus config file.
On the contrary, when the user runs phoebus push, the contents of the backend directory overwrite the contents of the files specified in the phoebus config file.
In the config file it's possible to specify some files to ignore in the backend directory (both during phoebus pull and phoebus push operations), while the frontend directory remains uneffected.
So generally speaking, the backend directory stores a copy (more or less updated) of the files specified in the phoebus config file, the frontend directory is a directory that contains symlinks to all the config files and it's used by the user for convenience to read, add and edit config files more easily.
To know more about the commands available run phoebus --help.
A typical use case is using the backend directory as a version controlled repo, for example using git.
To setup phoebus for the first time, run phoebus init, then run phoebus info to see where are the backend directory and phoebus config file.
Edit the phoebus config file by uncommenting the line of the frontend directory (almost all users would find this feature useful) and choose a path that you know it doesn't contain, and won't contain in the future, any useful file/directory. For example, some good paths are ~/phoebus, ~/my-config-files and /etc/our-config-files, some bad paths are ~/Documents, /tmp/phoebus (using temporary directories it's not recommended because then you have to regenerate the frontend directory after every boot and that's unconvenient).
In the repos list, add a repo entry (the name "repo" is generic here, we're not talking about git repos), for a config file/directory you want phoebus to track, for example to track some bash files you can use these entries (see the default phoebus config file for more)
repos = [
{ source = "~/.bashrc", repo = "shell/bash/bashrc" },
{ source = "~/.bash_profile", repo = "shell/bash/bash_profile" }
]
Now run phoebus pull and the backend directory will have a shell/bash directory containing copies of ~/.bashrc and ~/.bash_profile, named, respectively, bashrc and bash_profile. You can now commit the changes in the backend directory.
Let's say now you edited your config files in your git repo remotely, you do a git pull in the backend directory and you want to update your config files, you can do it with a simple phoebus push.
Here are some ideas to improve phoebus, not all of them have to be done or make sense to be done, this is more a brainstorming place.
git automations like git pull when running phoebus push, for example)