A dotfiles manager, with real time fle watching and 100% less sym-links!

Related tags

Database kubo
Overview

Kubo

A dotfile manager that watches files in real time.

Usage

Create a directory called .kubo in $HOME, then create a file called kubo.toml in .kubo. kubo.toml lists your dotfiles, and can look something like this:

hypr =  { source = "/home/USER/.config/hypr"  }
eww  =  { source = "/home/USER/.config/eww"   }
kitty = { source = "/home/USER/.config/kitty" }

(Note at the moment, ~ does not work for paths defined in kubo.toml yet, but I plan to fix that)

source defines where the dotfiles would be stored normally in the home directory, which is mirrored in .kubo.

To add dotfiles easily, you can run kubo add -n <name> -s <dotfiles>. Using Hyprland as an example:

kubo add -n hyprland -s ~/.config/hypr -t hypr

Finally, run kubo daemon to start the daemon.

Completions

Kubo can automatically generate completions using kubo --generate <shell>, and these completions can be used in your shell configuration.

# .bashrc
eval "$(kubo --generate bash)"

# .zshrc
eval "$(kubo --generate zsh)"

# Same for other shells...

Why another dotfile manager? Why a daemon of all things?

I wanted a dotfile manager that didn't do sym-links yet also updated by backed up dotfiles in real time. I used Chezmoi before, and while it's nice, it has the following issues:

  • Does not update in real time.
  • Deleting old configs is a pain.

In addition, I also wanted to declare my dotfiles with a config file. I tried toml-bombadil (sym-linked based, but I figured I would try it anyway) but it ended up deleting my dotfiles due to me thinking it would copy my config files first. I was able to restore those files, but it was a pain and I didn't want to do that again.

So I wrote Kubo, a dotfiles manager without sym links that updates in real time. Kubo's philosophy is the following:

  • Directories outside .kubo should only be modified after A. telling the user what will be modified and B. with user permission.
  • No sym-links; a backup is to be a second copy, not the only copy.
  • Declarative configs are amazing, let's do more of those.
  • Do only job only: properly manage and back up dotfiles.
  • Kubo should only copy to .kubo, the user decides what they want to do with .kubo.

Why the name Kubo?

When I tried toml-bombadil (i.e. the manager that deleted my dotfiles), I was also watching the anime "Kubo Won't Let Me Be Invisible". I figured Kubo made a good name (and naming things is hard).

What are some features planned?

Kubo is "mostly complete", I just got to iron out bugs, make the code cleaner, etc. I do want to add a packages option eventually, and have Kubo either list or install packages associated with one's dotfiles. After all, I also want to declare what packages use what set of dotfiles.

In addition, I want to add some subcommands to make adding dotfiles easier, like kubo add and kubo rm.

Are there other dotfile managers?

The Arch Wiki has a pretty large list of them, I suggest looking there.

Ew, Rust (Actual comment I've gotten)

You're not forced to use this, I created this for personal use and wanted to share it.

Contributing

Check out CONTRIBUTING.md in the GitHub repo for more information!

You might also like...
High-level async Cassandra client written in 100% Rust.
High-level async Cassandra client written in 100% Rust.

CDRS tokio CDRS is production-ready Apache Cassandra driver written in pure Rust. Focuses on providing high level of configurability to suit most use

Seed your development database with real data ⚡️
Seed your development database with real data ⚡️

Seed Your Development Database With Real Data ⚡️ Replibyte is a blazingly fast tool to seed your databases with your production data while keeping sen

🧰 The Rust SQL Toolkit. An async, pure Rust SQL crate featuring compile-time checked queries without a DSL. Supports PostgreSQL, MySQL, SQLite, and MSSQL.

SQLx 🧰 The Rust SQL Toolkit Install | Usage | Docs Built with ❤️ by The LaunchBadge team SQLx is an async, pure Rust† SQL crate featuring compile-tim

A query builder that builds and typechecks queries at compile time

typed-qb: a compile-time typed "query builder" typed-qb is a compile-time, typed, query builder. The goal of this crate is to explore the gap between

An implementation of the tz database for the time-rs Rust crate.

time-tz An implementation of the tz database for the time-rs Rust crate. This implementation is based off of chrono-tz

tzdb — Time Zone Database

tzdb — Time Zone Database Static time zone information for tz-rs. This crate provides all time zones found in the Time Zone Database, currently in the

Rust High Performance compile-time ORM(RBSON based)
Rust High Performance compile-time ORM(RBSON based)

WebSite | 简体中文 | Showcase | 案例 A highly Performant,Safe,Dynamic SQL(Compile time) ORM framework written in Rust, inspired by Mybatis and MybatisPlus.

Yet another CRUD. This time in Rust.

crust ____ ____ _ ____ _____ / _\/ __\/ \ /\/ ___\/__ __\ | / | \/|| | ||| \ / \ | \__| /| \_/|\___ | | | \____/\_/\_\\___

Simple and handy btrfs snapshoting tool. Supports unattended snapshots, tracking, restoring, automatic cleanup and more. Backed with SQLite.
Simple and handy btrfs snapshoting tool. Supports unattended snapshots, tracking, restoring, automatic cleanup and more. Backed with SQLite.

Description Simple and handy btrfs snapshoting tool. Supports unattended snapshots, tracking, restoring, automatic cleanup and more. Backed with SQLit

Owner
StandingPad
StandingPad
Scalable and fast data store optimised for time series data such as financial data, events, metrics for real time analysis

OnTimeDB Scalable and fast data store optimised for time series data such as financial data, events, metrics for real time analysis OnTimeDB is a time

Stuart 2 Apr 5, 2022
A high-performance, distributed, schema-less, cloud native time-series database

CeresDB is a high-performance, distributed, schema-less, cloud native time-series database that can handle both time-series and analytics workloads.

null 1.8k Dec 30, 2022
Skybase is an extremely fast, secure and reliable real-time NoSQL database with automated snapshots and SSL

Skybase The next-generation NoSQL database What is Skybase? Skybase (or SkybaseDB/SDB) is an effort to provide the best of key/value stores, document

Skybase 1.4k Dec 29, 2022
Skytable is an extremely fast, secure and reliable real-time NoSQL database with automated snapshots and TLS

Skytable is an effort to provide the best of key/value stores, document stores and columnar databases, that is, simplicity, flexibility and queryability at scale. The name 'Skytable' exemplifies our vision to create a database that has limitless possibilities. Skytable was previously known as TerrabaseDB (and then Skybase) and is also nicknamed "STable", "Sky" and "SDB" by the community.

Skytable 1.4k Dec 29, 2022
Materialize simplifies application development with streaming data. Incrementally-updated materialized views - in PostgreSQL and in real time. Materialize is powered by Timely Dataflow.

Materialize is a streaming database for real-time applications. Get started Check out our getting started guide. About Materialize lets you ask questi

Materialize, Inc. 4.7k Jan 8, 2023
The spatial message broker and database for real-time multiplayer experiences. Official Rust implementation.

WorldQL Server Rust implementation of WorldQL, the spatial message broker and database for real-time multiplayer experiences Setup Instructions ⚠️ Thi

null 214 Jan 2, 2023
A Modern Real-Time Data Processing & Analytics DBMS with Cloud-Native Architecture, built to make the Data Cloud easy

A Modern Real-Time Data Processing & Analytics DBMS with Cloud-Native Architecture, built to make the Data Cloud easy

Datafuse Labs 5k Jan 9, 2023
A simple library for Firebase real-time database

Firerust A very simple library to implement the Firebase real-time database in your code with the best performance Instalation Add this to your Cargo.

Daniel Dimbarre 1 Apr 15, 2022
LIMITS is yet another fully open source, interoperable, decentralised real-time communication protocol!

LIMITS: Limit-IM does not have ITS LIMITS We are undergoing a major refactoring and technology stack adjustment to better accommodate clustered deploy

Limit LAB 14 Feb 4, 2023
Lightweight async Redis client with connection pooling written in pure Rust and 100% memory safe

redi-rs (or redirs) redi-rs is a Lightweight Redis client with connection pooling written in Rust and 100% memory safe redi-rs is a Redis client writt

Oğuz Türkay 4 May 20, 2023