Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wckdouglas/dotfiles-rs
This is a simple dot files manager for syncing dot files across machines.
https://github.com/wckdouglas/dotfiles-rs
dotfiles dotfiles-linux dotfiles-macos dotfiles-manager rust-lang
Last synced: about 2 months ago
JSON representation
This is a simple dot files manager for syncing dot files across machines.
- Host: GitHub
- URL: https://github.com/wckdouglas/dotfiles-rs
- Owner: wckdouglas
- License: apache-2.0
- Created: 2022-09-27T15:47:39.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-11-13T02:42:23.000Z (about 1 year ago)
- Last Synced: 2024-10-31T12:13:57.032Z (3 months ago)
- Topics: dotfiles, dotfiles-linux, dotfiles-macos, dotfiles-manager, rust-lang
- Language: Rust
- Homepage:
- Size: 77.1 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# dotfiles-rs
[![CI](https://github.com/wckdouglas/dotfiles-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/wckdouglas/dotfiles-rs/actions/workflows/ci.yml)
[![crate](https://img.shields.io/crates/v/dotfiles-rs.svg)](https://crates.io/crates/dotfiles-rs)This is a simple dot files manager for syncing dot files across machines.
## Installation
```
$ git clone https://github.com/wckdouglas/dotfiles-rs.git
$ cd dotfiles-rs
$ cargo install --path .
```## Usage
The dot files (i.e. config files) to be managed are defined in a yaml file (e.g. `data/dotfiles.yaml`).
### Saving the current settings
We can use the `save` subcommand:
```
$ cd dotfiles-rs
$ dotfiles-rs --dotfile-yaml data/dotfiles.yaml save --dest-dir ../dotfiles --dry-run
[2023-03-26T14:46:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/.zshrc to ../dotfiles/.zshrc
[2023-03-26T14:46:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/.wezterm.lua to ../dotfiles/.wezterm.lua
[2023-03-26T14:46:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/.config/nvim/init.lua to ../dotfiles/.config/nvim/init.lua
[2023-03-26T14:46:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/.gitconfig to ../dotfiles/.gitconfig
[2023-03-26T14:46:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/.vimrc to ../dotfiles/.vimrc
[2023-03-26T14:46:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/.ssh/config to ../dotfiles/.ssh/config
[2023-03-26T14:46:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/.gitignore_global to ../dotfiles/.gitignore_global
[2023-03-26T14:46:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/.config/alacritty/alacritty.yml to ../dotfiles/.config/alacritty/alacritty.yml
[2023-03-26T14:46:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/.config/zellij/config.kdl to ../dotfiles/.config/zellij/config.kdl
[2023-03-26T14:46:43Z INFO dotfiles_rs] You can now go to ../dotfiles and create a github repo!
```This creates a new folder `../dotfiles`, and it can be versione-controlled by `git`:
```
$ tree -a -L 2 ../dotfiles
../dotfiles
├── .config
├── .config
│ ├── alacritty
│ │ └── alacritty.yml
│ ├── nvim
│ │ └── init.lua
│ └── zellij
│ └── config.kdl
├── .gitconfig
├── .gitignore_global
├── .ssh
│ └── config
├── .vimrc
├── .zshrc
└── README.md
```Create a github repo:
```
$ cd ../dotfiles
$ git init -b main
$ git add *
$ git commit -am "Adding dot files"
$ git remote add origin
$ git push -u origin main
```### Applying the settings on a new machine
You will have to provide an url to the `dotfiles` repo (``) that you created from the `save` step (e.g. `https://github.com/wckdouglas/dotfiles`)
```
$ cd dotfiles-rs
$ dotfiles-rs --dotfile-yaml data/dotfiles.yaml apply --url [email protected]:wckdouglas/dotfiles --ssh-key ~/.ssh/id_ecdsa --dry-run
[2023-03-26T14:51:43Z INFO dotfiles_rs] Cloning [email protected]:wckdouglas/dotfiles into /Users/wckdouglas/dotfiles
[2023-03-26T14:51:43Z INFO dotfiles_rs] Clone complete
[2023-03-26T14:51:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/dotfiles/.wezterm.lua to /Users/wckdouglas/.wezterm.lua
[2023-03-26T14:51:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/dotfiles/.vimrc to /Users/wckdouglas/.vimrc
[2023-03-26T14:51:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/dotfiles/.config/alacritty/alacritty.yml to /Users/wckdouglas/.config/alacritty/alacritty.yml
[2023-03-26T14:51:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/dotfiles/.config/nvim/init.lua to /Users/wckdouglas/.config/nvim/init.lua
[2023-03-26T14:51:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/dotfiles/.ssh/config to /Users/wckdouglas/.ssh/config
[2023-03-26T14:51:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/dotfiles/.gitignore_global to /Users/wckdouglas/.gitignore_global
[2023-03-26T14:51:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/dotfiles/.zshrc to /Users/wckdouglas/.zshrc
[2023-03-26T14:51:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/dotfiles/.config/zellij/config.kdl to /Users/wckdouglas/.config/zellij/config.kdl
[2023-03-26T14:51:43Z INFO dotfiles_rs] [Dry run] Copied /Users/wckdouglas/dotfiles/.gitconfig to /Users/wckdouglas/.gitconfig
```:warning: You may need to create a [ecdsa ssh key](https://exerror.com/youre-using-an-rsa-key-with-sha-1-which-is-no-longer-allowed-please-use-a-newer-client-or-a-different-key-type/) first `ssh-keygen -t ecdsa -b 521 -C "[email protected]"` if you see an error like this:
```
ERROR: You're using an RSA key with SHA-1, which is no longer allowed. Please use a newer client or a different key type.
```# Docker
```
$ docker pull ghcr.io/wckdouglas/dotfiles-rs:main
$ docker run ghcr.io/wckdouglas/dotfiles-rs:main
```# Debug #
On m1 mac, if you see an error like this:
```
$ cargo run --
... skipping some compilation messages ...
= note: Undefined symbols for architecture arm64:
"_iconv", referenced from:
_git_fs_path_iconv in liblibgit2_sys-2da99193d83f7067.rlib(fs_path.o)
(maybe you meant: _git_fs_path_iconv_clear, _git_fs_path_iconv_init_precompose , _git_fs_path_iconv )
"_iconv_close", referenced from:
_git_fs_path_iconv_clear in liblibgit2_sys-2da99193d83f7067.rlib(fs_path.o)
"_iconv_open", referenced from:
_git_fs_path_iconv_init_precompose in liblibgit2_sys-2da99193d83f7067.rlib(fs_path.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)```
then, doing this may work:
```
$ LIBRARY_PATH=/Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/usr/include cargo install --path .
```