{ description = "Alex's super mega awesome nixos config"; # A flake's inputs specify the dependencies that get pulled in. Each input is pinned to a specific version (the git commit) of that dependency. inputs = { nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; # This flake also takes in nixpkgs as its own input, so we can override it here to ensure the same pkgs are used! }; firefox-addons = { url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; inputs.nixpkgs.follows = "nixpkgs"; }; atau-nixpkgs = { url = "git+https://git.atauno.com/atau/atau-nixpkgs?ref=main&rev=751d0b3fd668981d3e69cf8f907a859659122074"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, home-manager, firefox-addons, atau-nixpkgs, ... }@flake-inputs: let pcUser = "alex"; pcSystem = "x86_64-linux"; overlays = [ atau-nixpkgs.overlays.default (final: prev: { firefox-addons = firefox-addons.packages.${pcSystem}; }) ]; # This helper function generates a nixos system for a linux PC setup. It defaults the username, architecture, and flake inputs if not provided. mkPcSystem = { user ? pcUser, hostname, system ? pcSystem, inputs ? flake-inputs }: nixpkgs.lib.nixosSystem { inherit system; modules = [ ({ config, pkgs, ... }: { nixpkgs.overlays = overlays; }) ./config/hosts/${hostname} ] ++ (import ./config/modules/home-manager.nix { inherit system home-manager user; }).modules; }; in { nixosConfigurations = { ## ---- personal computers (linux) ---- nixos76 = mkPcSystem { hostname = "nixos76"; }; thelio76 = mkPcSystem { hostname = "thelio76"; }; ## ---- servers ---- ursa-minor = nixpkgs.lib.nixosSystem { system = "aarch64-linux"; modules = [ ./config/hosts/ursa-minor ]; }; ursa-major = nixpkgs.lib.nixosSystem { system = "aarch64-linux"; modules = [ ./config/hosts/ursa-major ]; }; atauno = nixpkgs.lib.nixosSystem { system = "aarch64-linux"; modules = [ ./config/hosts/atauno ]; }; }; }; }