summary refs log tree commit diff
path: root/flake.nix
blob: c493fcd940b7aee1c664d07f678877cfbb8c8319 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #0000ff }
.highlight .c { color: #0F0 } /* Comment */
.highlight .err { color: #DDD } /* Error */
.highlight .esc { color: #DDD } /* Escape */
.highlight .g { color: #DDD } /* Generic */
.highlight .k { color: #F00 } /* Keyword */
.highlight .l { color: #DDD } /* Literal */
.highlight .n { color: #DDD } /* Name */
.highlight .o { color: #DDD } /* Operator */
.highlight .x { color: #DDD } /* Other */
.highlight .p { color: #DDD } /* Punctuation */
.highlight .ch { color: #0F0 } /* Comment.Hashbang */
.highlight .cm { color: #0F0 } /* Comment.Multiline */
.highlight .cp { color: #E5E5E5 } /* Comment.Preproc */
.highlight .cpf { color: #0F0 } /* Comment.PreprocFile */
.highlight .c1 { color: #0F0 } /* Comment.Single */
.highlight .cs { color: #0F0 } /* Comment.Special */
.highlight .gd { color: #DDD } /* Generic.Deleted */
.highlight .ge { color: #DDD } /* Generic.Emph */
.highlight .ges { color: #DDD } /* Generic.EmphStrong */
.highlight .gr { color: #DDD } /* Generic.Error */
.highlight .gh { color: #DDD } /* Generic.Heading */
.highlight .gi { color: #DDD } /* Generic.Inserted */
.highlight .go { color: #DDD } /* Generic.Output */
.highlight .gp { color: #DDD } /* Generic.Prompt */
.highlight .gs { color: #DDD } /* Generic.Strong */
.highlight .gu { color: #DDD } /* Generic.Subheading */
.highlight .gt { color: #DDD } /* Generic.Traceback */
.highlight .kc { color: #F00 } /* Keyword.Constant */
.highlight .kd { color: #F00 } /* Keyword.Declaration */
.highlight .kn { color: #F00 } /* Keyword.Namespace */
.highlight .kp { color: #F00 } /* Keyword.Pseudo */
.highlight .kr { color: #F00 } /* Keyword.Reserved */
.highlight .kt { color: #EE82EE } /* Keyword.Type */
.highlight .ld { color: #DDD } /* Literal.Date */
.highlight .m { color: #F0F } /* Literal.Number */
.highlight .s { color: #87CEEB } /* Literal.String */
.highlight .na { color: #DDD } /* Name.Attribute */
.highlight .nb { color: #DDD } /* Name.Builtin */
.highlight .nc { color: #DDD } /* Name.Class */
.highlight .no { color: #7FFFD4 } /* Name.Constant */
.highlight .nd { color: #DDD } /* Name.Decorator */
.highlight .ni { color: #DDD } /* Name.Entity */
.highlight .ne { color: #DDD } /* Name.Exception */
.highlight .nf { color: #FF0 } /* Name.Function */
.highlight .nl { color: #DDD } /* Name.Label */
.highlight .nn { color: #DDD } /* Name.Namespace */
.highlight .nx
{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
    nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";

    lix-module = {
      url = "https://git.lix.systems/lix-project/nixos-module/archive/2.92.0-3.tar.gz";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    home-manager = {
      url = "github:nix-community/home-manager/release-25.05";
      inputs.nixpkgs.follows = "nixpkgs";
    };

    nixos-apple-silicon = {
      url = "github:nix-community/nixos-apple-silicon";
      inputs.nixpkgs.follows = "nixpkgs-unstable";
    };

    agenix = {
      url = "github:ryantm/agenix";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.home-manager.follows = "home-manager";
    };

    nix-vscode-extensions = {
      url = "github:nix-community/nix-vscode-extensions";
      inputs.nixpkgs.follows = "nixpkgs-unstable";
    };

    nixpkgs-esp-dev = {
      url = "github:mirrexagon/nixpkgs-esp-dev";
      inputs.nixpkgs.follows = "nixpkgs-unstable";
    };

    flake-compat.url = "github:edolstra/flake-compat";
  };

  outputs =
    inputs@{
      self,
      nixpkgs,
      nixpkgs-unstable,
      lix-module,
      nixos-apple-silicon,
      agenix,
      home-manager,
      nix-vscode-extensions,
      nixpkgs-esp-dev,
      ...
    }:
    let
      systems = {
        x86 = "x86_64-linux";
        arm = "aarch64-linux";
      };

      machines = with systems; [
        {
          name = "graphite";
          system = x86;
        }
        {
          name = "moissanite";
          system = arm;
        }
        {
          name = "bismuth";
          system = x86;
        }
      ];

      overlays = [
        lix-module.overlays.default
        nixos-apple-silicon.overlays.default # unused on non-asahi machines
        agenix.overlays.default
        nix-vscode-extensions.overlays.default
        nixpkgs-esp-dev.overlays.default
        (import ./overlay.nix)
      ];

      packageSetsForSystem =
        system:
        let
          commonPkgsInputs = {
            inherit system;
            config = import ./config.nix;
          };
        in
        rec {
          pkgs = import nixpkgs (commonPkgsInputs // { inherit overlays; });

          unstablePkgs = import nixpkgs-unstable commonPkgsInputs;

          auxiliaryPkgs = import ./pkgs {
            inherit
              pkgs
              unstablePkgs
              nixpkgs
              nixpkgs-unstable
              ;
          };
        };

      inherit (nixpkgs) lib;
    in
    {
      nixosConfigurations = lib.mergeAttrsList (
        map (
          machine:
          let
            packageSets = packageSetsForSystem machine.system;

            specialArgs = inputs // packageSets // { me = machine; };
          in
          {
            ${machine.name} = lib.nixosSystem {
              inherit (machine) system;
              inherit specialArgs;

              modules = [
                ./machines/${machine.name}

                home-manager.nixosModules.home-manager
                {
                  home-manager.useGlobalPkgs = true;
                  home-manager.useUserPackages = true;
                  home-manager.backupFileExtension = "hm-backup";
                  home-manager.extraSpecialArgs = specialArgs;
                  home-manager.users.mel = import ./machines/${machine.name}/home.nix;
                }

                lix-module.nixosModules.default
                agenix.nixosModules.default
              ];
            };
          }
        ) machines
      );

      # compatibility wrapper for nixos-option
      legacyPackages = lib.genAttrs (lib.attrValues systems) (
        system:
        let
          packageSets = packageSetsForSystem system;
        in
        with packageSets;
        pkgs.recurseIntoAttrs pkgs
      );
    };
}