This repository contains a set of configurations for declaratively managing systems, user environments, infrastructure, and multiple nodes.
Warning
If you want to try this config, it is recommended to use it inside a Docker
container as described in the Get Started section.
These configurations heavily depend on personal information of the
author, such as user names, paths, and
credentials, and cannot be applied to your environment as-is.
However, configuration for tools and systems is factored out into modules. If
you have sufficient knowledge of Nix, you can fork this repository, delete
unnecessary files, update configuration values, and then apply it on your own
responsibility.
To apply these configurations, you need to have
Nix installed.
Please install Nix using one of the following methods:
- nix-installer (recommended)
- Nix Download
The following operating systems are supported:
First, clone this repository:
git clone https://github.com/momeemt/config
# If gh is available
gh repo clone momeemt/config
# If ghq is available
ghq get momeemt/configNext, run the following script to apply the configuration.
./assets/scripts/apply.shOnce you enter the devShell, you can use just,
a task runner tool.
From the second time onward, you can apply the configuration by running:
just applyA build system that always produces bit-for-bit identical artifacts on any
environment when given the same inputs (source code, build manifests, etc.) is
said to provide reproducible builds.
Nix is one of the build systems that enable reproducible
builds.
Therefore, a properly pinned Nix configuration can be rebuilt with high
reproducibility even as time passes.
It also makes it easy to share the configuration in this repository or other
users’ configurations written in Nix.
By using home-manager, you can manage user-space configuration with Nix, and by using NixOS or nix-darwin, you can manage system configuration with Nix as well.
The official package repository nixpkgs
provided by Nix offers
more than 120,000 packages as of November
2025.
You can also use it purely as a convenient package manager without using it for
system configuration.
If you are interested, refer to the following resources:
You can try part of this repository’s configuration in a virtualized environment.
The Docker image defined in .devcontainer/Dockerfile is
published on GitHub
Container Registry (GHCR).
Warning
When a stable configuration is released, it will be merged into the main
branch.
Since no release has been made yet, please use the unstable tag for the time
being.
# HEAD of the main branch
docker pull ghcr.io/momeemt/config:latest
# HEAD of the develop branch
docker pull ghcr.io/momeemt/config:unstableYou can also use Development Containers to access the environment inside the container:
devcontainer up --workspace-folder .Documentation for the configuration is available at the following link:
Warning
The documentation is currently under construction and incomplete.
In a typical workflow, you can enter the development environment using nix-direnv:
echo "use flake" > .envrc
direnv allowIf you want to enter an environment that imports a NixOS module downloaded
locally as a git submodule, modify .envrc as follows before applying it. For
example:
cat <<EOF > .envrc
use flake . --override-input tmux-nix path:./nix/flakes/tmux-nix
EOF
direnv allowYou can also generate environment definition files using just:
just envYou can use Nix flake templates from this repository.
For example, the following command generates a flake.nix for a Rust project:
nix flake init --template "github:momeemt/config#rust"😌 If you have suggestions or improvements, feel free to open an issue:
https://github.com/momeemt/config/issues
Unless otherwise noted, the source code and resources in this repository are
licensed under
Apache-2.0.
You are free to use, copy, modify, and redistribute the contents of this
repository, including for commercial purposes, as long as you retain the
copyright notice, include the license text, and clearly indicate any changes.
However, different licenses may apply in the following cases:
- If a file contains an explicit license notice, that notice takes precedence.
- If a subdirectory contains a LICENSE file, the license described there applies to the files under that directory.
This license applies only to the extent permitted in the jurisdiction where the user resides.
My configuration is based on the following users’ dotfiles and configuration files:
- Nix configurations
- dotfiles
- Kubernetes
