198 lines
6.7 KiB
Nix
198 lines
6.7 KiB
Nix
{
|
|
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;
|
|
# })
|
|
# );
|
|
};
|
|
|
|
# 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 `<nixpkgs>` 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
|
|
];
|
|
};
|
|
});
|
|
}
|