Yakumo is the sanctuary—Rooted in the ancient song of building a dwelling for one’s beloved, it stands as the home I weave from dotfiles, a shelter for my digital life.
Important
Disclaimer: This repository is a lifelong alpha project—a perpetual proving ground for experimental features and architectural whims. While you are highly encouraged to draw inspiration from this codebase, please be aware that our test coverage is nowhere near production standards; things may behave in unexpected ways. Furthermore, these configurations are intimately tailored to our specific hardware and environments. Blindly copy-pasting this into your machine is a one-way ticket to a broken system. Proceed with curiosity, but apply with extreme caution.
Welcome to Yakumo! It’s our home in the digital world weaved from dotfiles.
These philosopies are not isolated tenets, but are deeply interwoven.
Keep dependencies to a minimum to reduce attack surface and gain more control over stuff. We believe that also leads to better maintainability.
Easy to maintain. You know where to tweak at a glance (Maybe). We stick to the Dependency Inversion Principle as much as possible to make updates a breeze.
TODO: Add a diagram to help readers grasp the whole architecture.
Easy to read. You know what comes next when you’re drilling down the directories (Maybe). To achieve this, the directory structure has a few things in common (e.g., the common directories).
Plus, we introduce the deliberate distinction between module and configuration Nix files (i.e., modules vs. hosts & users); the former has the NixOS module’s full structure such as options and config, whereas those latters are a simpler attribute set or a function.
{
config,
lib,
...
}:
let
inherit (lib) mkEnableOption mkIf mkOption types;
cfg = config.yakumo.foo;
in
{
options.yakumo.foo = {
enable = mkEnableOption "foo";
username = mkOption {
type = types.str;
default = "yakumo";
description = "Yakumo username.";
};
};
config = mkIf cfg.enable {
# ...
};
}{
config,
lib,
...
}:
let
inherit (lib) mkForce;
in
{
yakumo.foo = {
enable = true;
username = mkForce config.yakumo.user.name;
};
# ...
}Preferring the deliberate labor of creation over the opacity of magic, we build it from scratch to fully understand it—turning potential debugging nightmares into simple tweaks.
After all, what drives us to tend our dotfiles is pure self-satisfaction, isn’t it?
A lightweight, in-house implementation of Impermanence. Embracing the ”Erase Your Darlings” ethos, Yosuga provides the essential “clue” (縁) to persist only what truly matters across the void of every reboot.
An attempt to minimize reliance on external abstraction layers. By pushing the limits of native NixOS module wrapping with pkgs.symlinkJoin and its fellows, Yakumo maintains a high-fidelity relationship with the core system. Successfully ran away from “Home”—mission accomplished! (家出)
Within my filter bubble, very few precedents implement this for their dotfiles.
| Type | Name | Hardware | OS | Description | User |
|---|---|---|---|---|---|
| Desktop | tsutsuyami | Self-built Mini-ITX PC (AMD Ryzen 5 7600X and more) | NixOS | Main development workstation. | Ohma Togaki |
| Desktop | momokagari | Mac Studio M2 Max | macOS (Nix Darwin) | Main workstation for creative work. | Reiji Kawata |
| Desktop | utsusemi | N/A | Windows (NixOS-on-WSL) | Temporary workstation(s). | Ohma Togaki |
| Laptop | shinonome | MacBook Pro M1 2021 | macOS & NixOS (Asahi Linux, nixos-apple-silicon) | Main laptop, not limited to on-the-go use | Ohma Togaki |
| Server | niwatazumi | Self-built Mini-ITX server (AMD Ryzen 5 7600 and more) | NixOS | Main home server cum NAS. | Ohma Togaki |
| Server | sazanami | GMKtec NucBox G5 N97 | NixOS | Smart home & geospatial data server | Ohma Togaki |
| Server | tamazusa | Hetzner Cloud VPS | NixOS | Mail server cum Headscale control plane | Ohma Togaki |
| Category | Name | Description |
|---|---|---|
| Compositor | Hyprland | Dynamic tiling Wayland compositor. |
| Niri | A scrollable-tiling Wayland compositor. | |
| Greeter | Regreet | Clean and customizable greeter for greetd. |
| Tuigreet | Graphical console greeter for greetd. | |
| Screen Locker | Hyprlock | A simple, yet fast, multi-threaded and GPU-accelerated screen lock for Hyprland. |
| Swaylock | Screen locker for Wayland. | |
| Idle Daemon | Hypridle | Hyprland’s idle management daemon. |
| Swayidle | Idle management daemon for Wayland. | |
| Terminal | WezTerm | A powerful cross-platform terminal emulator and multiplexer. |
| Shell | Zsh & Starship | The Z shell with the minimal and customizable shell prompt. |
| Editor | Emacs | An extensible, customizable, free/libre text editor. |
| Status Bar | Waybar | Highly customizable Wayland bar for Sway and Wlroots based compositors. |
| App Launcher | Wofi | A launcher/menu program for wlroots based wayland compositors. |
| Notification | Mako | A lightweight Wayland notification daemon. |
| Browser | Brave | The browser that puts you first. |
| Nyxt | The hacker’s browser. |
WIP.
Yakumo stands on the shoulders of great pioneers from all walks of life. Heartfelt thanks to all the developers involved in the Nix community, Nixpkgs development, and beyond.
Especially, these projects brought Yakumo a large portion of inspiration in the following aspects:
- Module options: Home Manager
- Custom modules system: Hlissner’s Dotfiles
- Wrapper approach: Wrapper Manager, ViperML’s Dotfiles
- Per-user theming approach and some philosopies: Sioodmy’s Dotfiles
- Overall service management: Oddlama’s Nix-Config
- Impermanence: Impermanence, Blog Article by NotAShelf
The MIT License. See LICENSE for details.