DeclMySys (Declare My System), the simple, declarative, system config manager.
The intuitive way for us geeks.
The config manager, that is more than stow, less than nix.
When it comes to managing system configs, you are basically left with a few options:
- Writing Scripts By Hand Well if you really enjoy this and are good at this, then I admire you.
- Stow Simple, intuitive, the old-school manager, but lacks features we need. (If stow can run scripts, I'll be sticking to it. The simplicity is really a beauty, made with Unix Philosophy and all)
- YADM & Other Modern Dotfile Managers While they implemented encryption and stuff, I don't really enjoy them. Not denying their work, but in my opinion, some are overly simplified while others are overly complicated. What's more, they're not really declarative.
- Nix Really powerful, yet complicated. Don't get me wrong, Nix did a great job, but it complicated things for sure. It's like using a high-precision laser just for baking bread, too much for us who just tinkers around our configs. After all, Nix is made for strict reproducibility. It's mostly a production environment thing.
I wish to build a manager, not only limited to dotfiles, but can also describe any detail of your system (via scripts).
I'm afraid it won't be as intuitive as Stow, but I promise using it will be easy.
- OS: Linux
- Architecture: amd64
Cross-platform support is not guaranteed, but works on any Linux distro and any architecture theoretically.
Note
All manual integration tests are done in an Alpine Virtual Machine (Alpine 3.23.3 Virtual Linux 6.18.9-0-virt x86_64 on VirtualBox)
Dependencies:
git(2.52.0in the testing machine)
Run:
go install github.com/suxyio/declmysysAnd the executable will be put to GOPATH/bin.
If you do not know where GOPATH is (usually ~/go), try go env GOPATH.
Needs goreleaser installed.
Run:
git clone https://github.com/suxyio/declmysys.git
cd declmysys
goreleaser buildThe results are in ./dest directory.
Alternatively, build without goreleaser:
git clone https://github.com/suxyio/declmysys.git
cd declmysys
go buildThe result is ./declmysys binary.
Add custom build options for your own need.
If you installed it via go-install, remove the binary under GOPATH/bin (usually ~/go/bin).
The program also asks to create config file under default config dir (usually ~/.config/declmysys), you can also remove that directory.
See docs under ./docs.
I'll improve the documentation later, sorry for the inconvenience.
Basic:
- Design config formats
- Basic implementation
- Cmdline args
- Parsing stuff
- Executing stuff
Design:
- Update docs (i mean, at least make it readable)
- Write quickstart and stuff
- Add docs site via github pages (try docsify?)
- Use better cli framework (try
github.com/urfave/cli?) - Better UI (Use
github.com/charmbracelet/bubbletea?)- Progress bar
- Colorscheme
- Logic
- Ablility to specify which decl to run
- Add logging
- QoL
- Toml autocompletion integration (via taplo)
- Shell completion integration
- Dry run for
runsubcmd, verbose forlistsubcmd - Pre-install command for
packagesdecl (e.g.sudo apt update) - Locales
Implementation:
- Concurrency support
- Cross-platform support
I'm just getting started to programming, Go is pretty new to me, so it's also a learning project.
btw, Rust will NOT be used as far as I'm concerned. Yes, I tried to learn it, and I failed 😅.
