···11+<div align="center">
22+ <img src="./face.png" alt="Avatar" width="112" />
33+ <img src="./modules/home/cli/fastfetch/logo.png" alt="Nix logo" width="112" />
44+55+ # adam0's NixOS configuration
66+77+ Modular multi-host NixOS and Home Manager flake for desktop, laptop, and virtual machine systems.
88+99+ [](https://github.com/adam01110/nixos/actions/workflows/ci.yml)
1010+ [](https://github.com/adam01110/nixos)
1111+ <br />
1212+ [](https://nixos.org)
1313+ [](https://nixos.wiki/wiki/Flakes)
1414+ [](https://github.com/nix-community/home-manager)
1515+ [](https://github.com/danth/stylix)
1616+ [](https://github.com/Mic92/sops-nix)
1717+ [](https://github.com/nix-community/disko)
1818+ [](https://github.com/nix-community/lanzaboote)
1919+2020+ [Overview](#overview) - [Hosts](#hosts) - [Usage](#usage) - [Secrets](#secrets) - [Customization](#Customization) - [Tooling](#Tooling)
2121+</div>
2222+2323+This repository contains a personal NixOS setup built around `flake-parts`, `Home Manager`, and a heavily modular directory layout. It shares a common base across multiple machines, then layers host-specific hardware, service, and desktop overrides on top.
2424+2525+## Overview
2626+2727+- Shared NixOS modules under `modules/system`, Home Manager modules under `modules/home`, and per-host overrides under `modules/hosts`.
2828+- Three flake outputs: `desktop`, `laptop`, and `vm`, all created from the same module stack in `flake/nixos.nix`.
2929+- Declarative storage with `Disko`, encrypted secrets with `Sops-nix`, Secure Boot with `Lanzaboote`, and theming through `Stylix`.
3030+- Desktop built on `Hyprland`, `UWSM`, `greetd` + `tuigreet`, and `Noctalia Shell`.
3131+3232+## Hosts
3333+3434+| Host | Purpose | Notable differences |
3535+| --- | --- | --- |
3636+| `desktop` | Main workstation | ROCm enabled, dual-monitor Hyprland layout, Wooting and Roccat support, AMD + Intel GPU monitoring |
3737+| `laptop` | Mobile system | Wi-Fi, Bluetooth, TLP, SCX, lid switch handling, battery-oriented tuning, touch support |
3838+| `vm` | QEMU/KVM guest | `/dev/vda` Disko target, SSH enabled, guest agents, simplified display setup |
3939+4040+## Usage
4141+4242+From the repository root:
4343+4444+```bash
4545+# Inspect flake outputs
4646+nix flake show
4747+4848+# Apply a host configuration
4949+sudo nixos-rebuild switch --flake .#desktop
5050+5151+# Format the repository
5252+nix fmt
5353+5454+# Enter the dev shell
5555+nix develop
5656+```
5757+5858+> [!IMPORTANT]
5959+> The host modules point at real installation devices such as `/dev/nvme0n1` and `/dev/vda`, and the configuration expects an Age key at `/var/lib/sops-nix/key.txt`. Review `modules/hosts/*/default.nix`, `modules/system/disk.nix`, and `modules/system/sops.nix` before using this on a new machine.
6060+6161+## Secrets
6262+6363+- Secrets live in `secrets/secrets.yaml` and are managed with Sops-nix.
6464+- Recipient rules are defined in `.sops.yaml` for one user key and three host Age keys.
6565+6666+Edit flow:
6767+6868+```bash
6969+sops secrets/secrets.yaml
7070+```
7171+7272+## Customization
7373+7474+- Edit shared identity, locale, and Git metadata in `vars.nix`.
7575+- Adjust host-specific hardware and service choices in `modules/hosts/<host>/`.
7676+- Add or override shared behavior in `modules/system/` and `modules/home/`.
7777+- Extend package selection through `pkgs/` and `overlays/`.
7878+7979+## Tooling
8080+8181+- Formatting and linting are wired through `treefmt` in `flake/treefmt.nix`.
8282+- The repository uses `import-tree` extensively to auto-discover modules, overlays, and local packages.
8383+8484+## Licensing
8585+8686+- This repository is mixed-license. The root `LICENSE` file contains the `AGPL-3.0-or-later` text intended for original work authored for this repository, unless a file says otherwise.
8787+- Files derived from Nixpkgs are kept under MIT-compatible treatment with upstream attribution preserved. See `pkgs/lutris.nix`, `pkgs/zaread.nix`, and `THIRD_PARTY_NOTICES.md`.
8888+- Adapter scripts adapted from `ripgrep-all` discussion posts are marked as adapted third-party material with provenance notices. They are not being confidently relabeled as `AGPL-3.0-or-later` without a clearer relicensing basis.
8989+- Other copied or vendored third-party material keeps its own attribution and should be reviewed under `THIRD_PARTY_NOTICES.md` rather than assumed to follow the repo default.
+37
THIRD_PARTY_NOTICES.md
···11+<!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
22+33+# Third-Party Notices
44+55+This repository is mixed-license.
66+77+Unless a file says otherwise, original repository code and configuration authored for this repository are intended to be licensed under `AGPL-3.0-or-later`.
88+99+Third-party and mixed-provenance files must keep their own attribution and license treatment.
1010+1111+## Derived From Nixpkgs
1212+1313+These files are derived from Nixpkgs package expressions and should continue to carry Nixpkgs attribution and MIT treatment.
1414+1515+| Path | Upstream | Treatment |
1616+| --- | --- | --- |
1717+| `pkgs/lutris.nix` | Nixpkgs `pkgs/applications/misc/lutris/fhsenv.nix` | Keep `Copyright (c) Nixpkgs contributors` and `SPDX-License-Identifier: MIT`. Do not relabel as solely AGPL. |
1818+| `pkgs/zaread.nix` | Nixpkgs package expression for `zaread` | Keep `Copyright (c) Nixpkgs contributors` and `SPDX-License-Identifier: MIT`. Do not relabel as solely AGPL. |
1919+2020+Nixpkgs is distributed under the MIT license. The required MIT notice must remain with substantial copied or adapted material from Nixpkgs.
2121+2222+## Adapted From ripgrep-all Discussions
2323+2424+These files were adapted from code posted in GitHub Discussions associated with `phiresky/ripgrep-all`.
2525+2626+| Path | Provenance | Treatment |
2727+| --- | --- | --- |
2828+| `pkgs/scripts/ripgrep-all-adapters/djvutorga-adapter.nix` | `https://github.com/phiresky/ripgrep-all/discussions/166` | Keep provenance and adaptation notice. Do not assert a new SPDX identifier until the licensing basis for the discussion-posted code is confirmed. |
2929+| `pkgs/scripts/ripgrep-all-adapters/pptx2md-adapter.nix` | `https://github.com/phiresky/ripgrep-all/discussions/199` | Keep provenance and adaptation notice. Do not assert a new SPDX identifier until the licensing basis for the discussion-posted code is confirmed. |
3030+3131+The `ripgrep-all` repository itself is `AGPL-3.0-or-later`, but these snippets were copied from discussion posts rather than from the main source tree. That is not a strong enough basis, by itself, to confidently relabel the adapted copies here as `AGPL-3.0-or-later`.
3232+3333+## Other Third-Party Material
3434+3535+| Path | Provenance | Treatment |
3636+| --- | --- | --- |
3737+| `modules/home/gui/discord/themes/system24.css` | `https://github.com/refact0r/system24` | Upstream repository is MIT-licensed. Preserve existing attribution block and keep MIT notice in mind when redistributing substantial copied copies. |
assets/face.png
This is a binary file and will not be displayed.
assets/nix.png
This is a binary file and will not be displayed.
+16
flake.nix
···11+# DO-NOT-EDIT. This file was auto-generated using github:vic/flake-file.
22+# Use `nix run .#write-flake` to regenerate it.
33+{
44+ outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules);
55+66+ inputs = {
77+ flake-file.url = "github:vic/flake-file";
88+ flake-parts = {
99+ url = "github:hercules-ci/flake-parts";
1010+ inputs.nixpkgs-lib.follows = "nixpkgs-lib";
1111+ };
1212+ import-tree.url = "github:vic/import-tree";
1313+ nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
1414+ nixpkgs-lib.follows = "nixpkgs";
1515+ };
1616+}
+13
keys/adam0.asc
···11+-----BEGIN PGP PUBLIC KEY BLOCK-----
22+33+mDMEaO41uRYJKwYBBAHaRw8BAQdANOK/JVHP1J9K1b3Wmn4WQZmoe/7+3Y93Om47
44+qMWkdly0KUFkYW0wIChTb3BzIGtleSkgPGFsdW1haWxAcHJvdG9ubWFpbC5jb20+
55+iJAEExYKADgWIQQ2ZrRAsOhykxuOeFls/+P7pd2EuQUCaO41uQIbAwULCQgHAgYV
66+CgkICwIEFgIDAQIeAQIXgAAKCRBs/+P7pd2EuZOtAP9KHStZZI+T8rDAOd2GiLhn
77+C5SeF6vyILmvC/pbXTmwSAD/WZTNknUZf13oUr+Wqnv3TsfBs5qKMc3+U26HpwD0
88+ng+4OARo7jW5EgorBgEEAZdVAQUBAQdAe3UctXs7DZSE+aLQtiYjAXoPa6Vbc4do
99+WqG2kB9x2koDAQgHiHgEGBYKACAWIQQ2ZrRAsOhykxuOeFls/+P7pd2EuQUCaO41
1010+uQIbDAAKCRBs/+P7pd2EudI7AP428Sj0KOAh6/LcCCfMwDprNKFU4ro4rY74NkuD
1111+GG6guQD9GzLC15UMcz8ozvPcqA64Mj3eTnZReMVTfPYx+8ZehwI=
1212+=Xfgr
1313+-----END PGP PUBLIC KEY BLOCK-----