My NixOS Configs ❄️
Find a file
2026-03-09 14:45:41 -04:00
src nvim as a submodule 2026-03-09 02:01:54 -04:00
.envrc added development environment 2024-05-13 10:44:55 -04:00
.gitignore Updated README to explicitly list out dir structure, directory hierarchy is how we keep the configs organized 2026-03-09 14:45:41 -04:00
.gitmodules nvim as a submodule 2026-03-09 02:01:54 -04:00
flake.lock Updated nix to 25.11 2026-03-08 14:11:02 -04:00
flake.nix nvim as a submodule 2026-03-09 02:01:54 -04:00
justfile virt changes including new NixVirt input 2025-01-27 16:23:01 -05:00
LICENSE unlicense 2023-03-22 10:30:50 -04:00
README.md Updated README to explicitly list out dir structure, directory hierarchy is how we keep the configs organized 2026-03-09 14:45:41 -04:00
system.configs added system configs symlink 2024-11-05 21:05:31 -05:00
user.configs changed imports to mkModules 2024-11-08 01:37:20 -05:00

My Nix Configurations 💻

My modular Nix configs🔥

Requirements ⚙️

NixOS Configurations

Home-Manager Configuration

Flake End-Points Exposed ❄️

NixOS Configurations:

  • desktop
  • wsl
  • server (wip)
  • vm

Home-Manager Configurations:

  • workstation

Fork this repo, take inspiration, borrow ideas and create your own NixOS configs & modules

Developing & Customizing 🔧

If you need a list of available packages and options:

Invoke nix develop to enter a development shell powered by just
Invoke just in order to view an available list of project scripts

user.configs.nix is a symlink to conveniently access centrally defined common user variables from the repo root

⚠️ Be sure to tailor any hardware settings to your own ⚠️ Replace the hardware.nix found in the src/system/machines/<machine> directory ⚠️ Run nixos-generate-config to generate a hardware-configuration.nix for your current system

Submodules

This repo uses git submodules for portable cross-platform configurations.

Neovim Config

The Neovim configuration is a separate repo for portability across non-NixOS systems.

Location: src/user/modules/utils/modules/neovim/config/nvim Repo: github.com/itme-brain/nvim

Cloning with submodules

git clone --recurse-submodules git@github.com:itme-brain/nixos.git
# Or after cloning:
git submodule update --init

Updating nvim config

# Edit files in the submodule, then:
cd src/user/modules/utils/modules/neovim/config/nvim
git add . && git commit -m "your changes" && git push

# Update reference in nixos repo:
git add src/user/modules/utils/modules/neovim/config/nvim
git commit -m "Update nvim submodule" && git push

Pulling nvim updates from remote

git submodule update --remote
git add src/user/modules/utils/modules/neovim/config/nvim
git commit -m "Update nvim submodule" && git push

Standalone nvim install (non-NixOS)

git clone git@github.com:itme-brain/nvim.git ~/.config/nvim

Directory Structure

.
├── flake.nix                          # Flake entrypoint - defines all NixOS configurations
├── flake.lock
├── justfile                           # Project scripts (via `just`)
├── system.configs -> src/system/machines/   # Symlink for quick access
├── user.configs -> src/user/config/         # Symlink for quick access
└── src/
    ├── system/                        # System-level (NixOS) configuration
    │   ├── machines/                  # Per-machine NixOS configurations
    │   │   ├── desktop/               # Desktop config (flake: nixosConfigurations.desktop)
    │   │   │   ├── default.nix        #   Machine entry point
    │   │   │   ├── hardware.nix       #   Machine-specific hardware config
    │   │   │   ├── system.nix         #   System-level settings
    │   │   │   └── modules/
    │   │   │       ├── disko/         #   Disk partitioning (disko)
    │   │   │       └── home-manager/  #   Home-manager integration + home.nix
    │   │   ├── workstation/           # Workstation config (same structure as desktop)
    │   │   ├── server/                # Server config (no disko)
    │   │   ├── vm/                    # VM config
    │   │   ├── wsl/                   # WSL config (includes wsl module)
    │   │   └── laptop/                # Laptop config (stub)
    │   └── modules/                   # Shared system modules (imported by machines)
    │       ├── default.nix
    │       ├── bitcoin/               # Bitcoin node + electrum server
    │       ├── forgejo/               # Self-hosted Forgejo
    │       └── nginx/                 # Nginx reverse proxy
    │
    └── user/                          # User-level (home-manager) configuration
        ├── default.nix                # User module entry point
        ├── config/                    # User identity & settings
        │   ├── default.nix            #   Common user variables (username, email, etc.)
        │   ├── bookmarks/             #   Browser bookmarks
        │   ├── keys/                  #   Public keys
        │   │   ├── pgp/               #     PGP public keys
        │   │   └── ssh/               #     SSH public keys
        │   └── nvim                   #   Symlink to neovim submodule config
        └── modules/                   # Home-manager modules
            ├── bash/                  # Shell config (aliases, prompt, bashrc)
            ├── git/                   # Git config + helper scripts
            ├── tmux/                  # Tmux config
            ├── security/              # Security tools (GPG)
            ├── utils/                 # CLI utilities
            │   └── modules/
            │       ├── dev/           #   Dev tools (penpot, PCB design)
            │       ├── email/         #   Email client (aerc)
            │       ├── irc/           #   IRC client
            │       ├── neovim/        #   Neovim (config is a git submodule)
            │       └── vim/           #   Vim fallback
            └── gui/                   # GUI applications
                ├── modules/
                │   ├── alacritty/     #   Terminal emulator
                │   ├── browsers/      #   Firefox & Chromium
                │   ├── corn/          #   Corn app
                │   ├── fun/           #   Discord, etc.
                │   ├── utils/         #   GUI utilities
                │   └── writing/       #   Writing tools
                └── wm/                # Window managers
                    ├── hyprland/      #   Hyprland (Wayland) + waybar, rofi
                    ├── sway/          #   Sway (Wayland) + rofi
                    ├── i3/            #   i3 (X11) + rofi
                    └── shared/        #   Shared WM config (mimeapps)

How it works

The flake.nix is the entrypoint. It defines NixOS configurations (desktop, workstation, server, wsl) that each reference a machine under src/system/machines/. Each machine's default.nix pulls in its own hardware.nix, system.nix, and per-machine modules (disko, home-manager).

The system layer (src/system/) handles NixOS-level concerns: hardware, bootloader, networking, and system services. Shared system-level modules in src/system/modules/ can be imported by any machine.

The user layer (src/user/) handles home-manager configuration. src/user/config/ defines user identity (name, email, keys), while src/user/modules/ contains modular home-manager configs for individual tools. Each machine's home-manager/home.nix selects which user modules to enable.

Root symlinks system.configs and user.configs provide convenient access to machine definitions and user config from the repo root.