{ description = "mat's nix configs"; inputs = { # Package sets nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-21.11-darwin"; nixpkgs-unstable.url = github:NixOS/nixpkgs/nixpkgs-unstable; # Environment/system management darwin.url = "github:lnl7/nix-darwin/master"; darwin.inputs.nixpkgs.follows = "nixpkgs-unstable"; home-manager.url = "github:nix-community/home-manager"; home-manager.inputs.nixpkgs.follows = "nixpkgs-unstable"; # Other sources flake-compat = { url = github:edolstra/flake-compat; flake = false; }; flake-utils.url = github:numtide/flake-utils; }; outputs = { self, darwin, nixpkgs, home-manager, flake-utils, ... }@inputs: let inherit (darwin.lib) darwinSystem; inherit (inputs.nixpkgs-unstable.lib) attrValues makeOverridable optionalAttrs singleton; # Configuration for `nixpkgs` nixpkgsConfig = { config = { allowUnfree = true; }; # overlays = attrValues self.overlays; overlays = attrValues self.overlays ++ singleton ( # Sub in x86 version of packages that don't build on Apple Silicon yet final: prev: (optionalAttrs (prev.stdenv.system == "aarch64-darwin") { inherit (final.pkgs-x86) # idris2 # nix-index # purescript; niv; }) ); }; # Shared home-manager configs homeManagerStateVersion = "22.05"; homeManagerCommonConfig = { imports = attrValues self.homeManagerModules ++ [ ./home { home.stateVersion = homeManagerStateVersion; } ]; }; # Modules shared by most `nix-darwin` personal configurations. nixDarwinCommonModules = attrValues self.darwinModules ++ [ # Main `nix-darwin` config ./darwin # `home-manager` module home-manager.darwinModules.home-manager ( { config, lib, pkgs, ... }: let inherit (config.users) primaryUser; in { nixpkgs = nixpkgsConfig; # Hack to support legacy worklows that use `` etc. nix.nixPath = { nixpkgs = "$HOME/dotfiles.nix/nixpkgs.nix"; }; # `home-manager` config users.users.${primaryUser}.home = "/Users/${primaryUser}"; home-manager.useGlobalPkgs = true; home-manager.users.${primaryUser} = homeManagerCommonConfig; # Add a registry entry for this flake nix.registry.my.flake = self; } ) ]; in { # `nix-darwin` configs darwinConfigurations = rec { # Mininal configurations to bootstrap systems bootstrap-x86 = makeOverridable darwinSystem { system = "x86_64-darwin"; modules = [ ./darwin/bootstrap.nix { nixpkgs = nixpkgsConfig; } ]; }; bootstrap-arm = bootstrap-x86.override { system = "aarch64-darwin"; }; # M1 MBP matbook = darwinSystem { system = "aarch64-darwin"; modules = nixDarwinCommonModules ++ [ { users.primaryUser = "mat"; networking.computerName = "matbook pro m1"; networking.hostName = "matbook"; networking.knownNetworkServices = [ "Wi-Fi" ]; } ]; }; # Config with small modifications needed/desired for CI with GitHub workflow githubCI = darwinSystem { system = "x86_64-darwin"; modules = nixDarwinCommonModules ++ [ ({ lib, ... }: { users.primaryUser = "runner"; homebrew.enable = lib.mkForce false; }) ]; }; # Build and activate with `nix build .#cloudVM.activationPackage; ./result/activate` cloudVM = home-manager.lib.homeManagerConfiguration { system = "x86_64-linux"; stateVersion = homeManagerStateVersion; homeDirectory = "/home/mat"; username = "mat"; configuration = { imports = [ homeManagerCommonConfig ]; nixpkgs = nixpkgsConfig; }; }; # attrValues self.darwinModules ++ [ # # Main `nix-darwin` config # ./configuration.nix # # `home-manager` module # home-manager.darwinModules.home-manager # { # nixpkgs = nixpkgsConfig; # # `home-manager` config # home-manager.useGlobalPkgs = true; # home-manager.useUserPackages = true; # home-manager.users.mat = import ./home.nix; # } # ]; # }; }; # Overlays --------------------------------------------------------------- {{{ overlays = { # nixpkgs overlays pkgs-stable = final: prev: { pkgs-stable = import inputs.nixpkgs { inherit (prev.stdenv) system; inherit (nixpkgsConfig) config; }; }; pkgs-unstable = final: prev: { pkgs-unstable = import inputs.nixpkgs-unstable { inherit (prev.stdenv) system; inherit (nixpkgsConfig) config; }; }; colors = import ./overlays/colors.nix; # Overlay useful on Macs with Apple Silicon apple-silicon = final: prev: optionalAttrs (prev.stdenv.system == "aarch64-darwin") { # Add access to x86 packages system is running Apple Silicon pkgs-x86 = import inputs.nixpkgs-unstable { system = "x86_64-darwin"; inherit (nixpkgsConfig) config; }; }; }; # `nix-darwin` modules (some are pending upstream acceptance) darwinModules = { programs-nix-index = import ./modules/darwin/programs/nix-index.nix; security-pam = import ./modules/darwin/security/pam.nix; users = import ./modules/darwin/users.nix; }; # home manager configurations homeManagerModules = { # configs-git-aliases = import ./home/configs/git-aliases.nix; # configs-gh-aliases = import ./home/configs/gh-aliases.nix; configs-starship-symbols = import ./home/configs/starship-symbols.nix; programs-neovim-extras = import ./modules/home/programs/neovim/extras.nix; programs-kitty-extras = import ./modules/home/programs/kitty/extras.nix; }; } // flake-utils.lib.eachDefaultSystem (system: { legacyPackages = import inputs.nixpkgs-unstable { inherit system; inherit (nixpkgsConfig) config; overlays = with self.overlays; [ pkgs-unstable pkgs-stable colors apple-silicon ]; }; }); }