Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xxiaoa/xdm
XXiaoA's dotfiles manager
https://github.com/xxiaoa/xdm
configuration dotfile dotfiles dotfiles-manager rust yaml
Last synced: 7 days ago
JSON representation
XXiaoA's dotfiles manager
- Host: GitHub
- URL: https://github.com/xxiaoa/xdm
- Owner: XXiaoA
- License: gpl-3.0
- Created: 2022-08-23T15:59:36.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2023-01-08T10:03:54.000Z (almost 2 years ago)
- Last Synced: 2024-03-15T12:52:36.912Z (8 months ago)
- Topics: configuration, dotfile, dotfiles, dotfiles-manager, rust, yaml
- Language: Rust
- Homepage:
- Size: 307 KB
- Stars: 11
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# xdm
XXiaoA's dotfiles manager
![Screenshot](./Screenshot.jpg)**[π¨π³δΈζ](./README_zh.md)**
## Install
### Releases
Download the file from [releases](https://github.com/XXiaoA/xdm/releases)### Crates.io
Download from [crates.io](https://crates.io/crates/xdm): `cargo install xdm`. And remember to add `~/.cargo/bin/` into your $PATH### From source
Clone the source code with git. Then run `cargo install --path .`. And remember to add `~/.cargo/bin/` into your $PATH### AUR
https://aur.archlinux.org/packages/xdm
```sh
paru -S xdm
```## Usage
> Run `xdm -h` for more detailsFirst you should create a **yaml** file named `xdm.yaml` (not prerequisite, but **recommend**).
Then you can run `xdm s` in a directory which has the yaml file. Xdm will find the `xdm.yaml` automatically in the current directory. Or you're able to use `xdm s file.yaml` to specify a yaml file.
Also, you can link a specific a directory or file.
### Manual
You can set `manual` true in your link parameter (see [configuration](#configuration)).If a link is manual, it won't be crated after run `xdm s`. But you can create it manually:
```shell
xdm link {path}
```Also, `link` command can work in all links, whether it'is manual or not.
And you can crate all links with `xdm s -a`
### Add
You can use `add` command to add a link item into your configuration automatically. For example:
```shell
xdm a a
```Then the following will add into your configuration:
```yaml
link:
# add by xdm
a:
path: b
```BTW, the link is added is absolutize. And it don't use a simple way: `a: b` in order to let you add other parameter more easily.
**Notice**: This feature will change your configuration. Your configuration probably be messy, but it still legal. Maybe fix it in the futrue.
## Configuration
For example:
```yaml
link:
./path-to-original-file:
path: ./path-to-linked-file./nvim: ~/repos/nvim
./tmux:
path: ~/.tmux.conf
if: test -e /usr/bin/tmux # for fish shellcreate:
- ~/repos
```
Notice: you must have `link` option.### Link
Link a file/directory.What's more, the two following form is same, it can reduce your work:
```yaml
link:
./a:
path: b./a: b
```| Parameter | Explanation | type | default |
| --- | --- | --- | :---: |
| path | The file path to linked file | string | \\ |
| exist | Only create the link if the original file exists | bool | true |
| force | Create the link whether the linked file exists or not | bool | false |
| if | Create the link if shell command is true (WIP) | string | \\ |
| create | Create the parent directory of link if need | bool | true |
| manual | Check [here](#manual) | bool | false |
| relink | Auto relink if the linked path is a link | bool | true |### Create
Create a directory## Others
inspried by [dotbot](https://github.com/anishathalye/dotbot)### Notice
Whether `path-to-linked-file` is a directory or file, it shouldn't end with `/`.But `path-to-original-file` should end with `/` or not is base on yourself.
### Full example
[XXiaoA/dotfiles](https://github.com/XXiaoA/dotfiles)### TODO
- [x] add support for AUR## License
[GNU General Public License v3.0](./LICENSE)