❄️ My personal NixOS configurations
  • Nix 88.3%
  • Shell 9.4%
  • Rust 1.7%
  • SCSS 0.5%
  • CSS 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Samuel Oechsler 998e9b2875
All checks were successful
CI / Code quality (push) Successful in 3m19s
CI / Evaluate configurations (push) Successful in 13m45s
Restore tmux status layout
2026-11-01 15:27:45 +01:00
.assets fix(yazi): restore native paste and update previews 2026-08-25 23:20:53 +02:00
.forgejo/workflows ci: evaluate Forgejo hosts individually 2026-10-31 17:23:25 +01:00
.github/workflows ci: evaluate hosts without building 2026-09-08 11:35:12 +02:00
backgrounds fix: resolve runtime commands explicitly 2026-09-04 00:27:36 +02:00
docs fix: migrate OpenCode config to V2 2026-10-31 16:42:49 +01:00
hosts fix: restore OpenCode provider compatibility 2026-09-21 02:08:27 +02:00
installer chore: commit local configuration changes 2026-09-06 20:28:02 +02:00
modules Restore tmux status layout 2026-11-01 15:27:45 +01:00
scripts ci: align update workflows 2026-09-27 19:49:13 +02:00
sops chore: remove OpenCode Go provider 2026-10-14 00:02:41 +02:00
.gitignore ci: enforce project-wide quality checks 2026-08-25 00:38:54 +02:00
.markdownlint-cli2.yaml ci: enforce project-wide quality checks 2026-08-25 00:38:54 +02:00
.sops.yaml Initial commit 2026-01-28 18:12:13 +01:00
AGENTS.md docs: add repository agent guide 2026-09-06 12:33:51 +02:00
build-iso.sh style: format project shell scripts 2026-09-06 03:49:45 +02:00
CODEOWNERS Finish initial version of configuration 2026-02-05 00:08:08 +01:00
flake.lock chore: update flake inputs and userstyles 2026-10-29 12:01:19 +00:00
flake.nix chore: bump CachyOS kernel to 2a991e73 2026-10-29 12:33:50 +01:00
install.sh refactor: centralize checks and installer modules 2026-09-04 00:05:04 +02:00
LICENSE Finish initial version of configuration 2026-02-05 00:08:08 +01:00
lint.nix chore: commit local configuration changes 2026-09-06 20:28:02 +02:00
NIX_CODE_STYLE.md ci: enforce project-wide quality checks 2026-08-25 00:38:54 +02:00
NIX_DOCS_STYLE.md ci: enforce project-wide quality checks 2026-08-25 00:38:54 +02:00
quickstart.sh style: format project shell scripts 2026-09-06 03:49:45 +02:00
README.md docs: define personal documentation tone 2026-08-25 00:10:00 +02:00
renovate.json ci: enforce project-wide quality checks 2026-08-25 00:38:54 +02:00

Nix

Hello 👋,

This repository is my approach to NixOS.

After many years of using Linux, I grew tired of configuring one distribution after another. I started collecting dotfiles and scripts to automate setup, even building an installer, but there was always configuration happening around them. The systems worked, yet they slowly drifted away from what was written down. I wanted "the last Linux configuration of my life": a reproducible system that consistently delivers the state it declares.

NixOS offered a way to work towards that idea. I began learning the language and the ecosystem, then turned that knowledge into this configuration for my machines. What started as traditional dotfiles has grown into a complete operating system configuration: opinionated where it should be, flexible where it can be, and still evolving as I learn more and my needs change. It is not a distribution or a universal answer to NixOS, just an honest record of that ongoing process.

Thanks for taking the time to look at my repository. — Sam

Here is a preview of what the configuration looks like today:

Hyprland Preview

Show KDE Plasma Preview

KDE Preview

The wallpaper shown in the preview can be purchased from kram.store.

What is here

The configuration is split into reusable modules and host-specific choices:

flake.nix                 # Entry point, host discovery, outputs, and checks
hosts/                    # Machine-specific configuration
modules/system/           # Hardware, boot, networking, storage, and security
modules/home-manager/     # Desktop, programs, theming, and user configuration
modules/lib/              # Reusable module helpers
modules/packages/         # Packages maintained by this configuration
backgrounds/              # Encrypted personal background archive
sops/                     # Encrypted secrets
docs/                     # Installation, configuration, and operational guides

The flake discovers local hosts automatically from hosts/. Shared behavior lives in modules; a host mostly describes its hardware and the choices that make it different.

Getting started

Making it yours

Host configuration is organized by feature groups. Keep only the values that are different for the machine:

features = {
  hardware = {
    formFactor = "laptop";
    cpu = "intel";
    gpu = "intel";
  };

  desktop = {
    wm = "kde";
    fileManager = "default";
    browser = {
      type = "librewolf";
      newTabPage = "https://dash.example.com";
    };
  };

  encryption = {
    unlockMethod = "tpm2";
  };

  gaming.enable = false;
  virtualisation.vm.enable = false;
};

Most defaults are useful for a normal desktop or laptop. The full set of overrides, defaults, and examples is in docs/CONFIG.md.

Using as a flake input

The flake exports lib.mkHost and lib.mkDisko for use from another repository. The current interface and a complete example are documented in docs/QUICKSTART.md.