nixos-config/flake.nix
2022-04-29 21:13:04 -04:00

175 lines
6 KiB
Nix

{
description = "Srid's NixOS configuration";
inputs = {
# To update nixpkgs (and thus NixOS), pick the nixos-unstable rev from
# https://status.nixos.org/
#
# This ensures that we always use the official nix cache.
nixpkgs.url = "github:nixos/nixpkgs/e10da1c7f542515b609f8dfbcf788f3d85b14936";
darwin.url = "github:lnl7/nix-darwin/master";
darwin.inputs.nixpkgs.follows = "nixpkgs";
nixos-hardware.url = github:NixOS/nixos-hardware/master;
home-manager.url = "github:nix-community/home-manager";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
nixos-vscode-server.url = "github:iosmanthus/nixos-vscode-server/add-flake";
emacs-overlay.url = "github:nix-community/emacs-overlay";
nix-doom-emacs.url = "github:nix-community/nix-doom-emacs";
hercules-ci-agent.url = "github:hercules-ci/hercules-ci-agent/master";
nixos-shell.url = "github:Mic92/nixos-shell";
# Vim & its plugins (not in nixpkgs)
neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay";
neovim-nightly-overlay.inputs.neovim-flake.url = "github:neovim/neovim/v0.7.0?dir=contrib";
vim-eldar.url = "github:agude/vim-eldar";
vim-eldar.flake = false;
himalaya.url = "github:soywod/himalaya";
himalaya.flake = false;
zk-nvim.url = "github:mickael-menu/zk-nvim";
zk-nvim.flake = false;
};
outputs = inputs@{ self, home-manager, nixpkgs, darwin, ... }:
let
overlayModule =
{
nixpkgs.overlays = [
(inputs.emacs-overlay.overlay)
(inputs.neovim-nightly-overlay.overlay)
];
};
in
{
# Configurations for Linux (NixOS) systems
nixosConfigurations =
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
# Configuration common to all Linux systems
commonFeatures = [
overlayModule
./features/self-ide.nix
./features/takemessh
./features/caches
./features/current-location.nix
];
homeFeatures = [
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = { inherit system inputs; };
home-manager.users.srid = {
imports = [
./home/tmux.nix
./home/git.nix
./home/neovim.nix
./home/starship.nix
./home/terminal.nix
./home/direnv.nix
];
programs.bash = {
enable = true;
} // (import ./home/shellcommon.nix { inherit pkgs; });
};
}
];
mkLinuxSystem = extraModules: nixpkgs.lib.nixosSystem {
inherit system pkgs;
# Arguments to pass to all modules.
specialArgs = { inherit system inputs; };
modules =
commonFeatures ++ homeFeatures ++ extraModules;
};
in
{
# My beefy development computer
now = mkLinuxSystem
[
./hosts/hetzner/ax101.nix
./features/server/harden.nix
./features/server/devserver.nix
./features/hercules.nix
];
# This is run in qemu only.
# > nixos-shell --flake github:srid/nixos-config#corsair
corsair = pkgs.lib.makeOverridable nixpkgs.lib.nixosSystem {
inherit system pkgs;
specialArgs = { inherit system inputs; };
modules = [
inputs.nixos-shell.nixosModules.nixos-shell
{
virtualisation = {
memorySize = 8 * 1024;
cores = 2;
diskSize = 20 * 1024;
};
environment.systemPackages = with pkgs; [
protonvpn-cli
aria2
];
nixos-shell.mounts = {
mountHome = false;
mountNixProfile = false;
extraMounts."/Downloads" = {
target = "/home/srid/Downloads";
cache = "none";
};
};
}
];
};
};
# Configurations for macOS systems (using nix-darwin)
darwinConfigurations =
let
system = "aarch64-darwin";
mkMacosSystem = darwin.lib.darwinSystem;
defaultMacosSystem = mkMacosSystem {
inherit system;
specialArgs = {
inherit inputs system;
rosettaPkgs = import nixpkgs { system = "x86_64-darwin"; };
};
modules = [
overlayModule
./hosts/darwin.nix
./features/caches/oss.nix
home-manager.darwinModules.home-manager
{
home-manager.extraSpecialArgs = { inherit system inputs; };
home-manager.users.srid = { pkgs, ... }: {
imports = [
./home/git.nix
./home/tmux.nix
./home/neovim.nix
./home/email.nix
./home/terminal.nix
./home/direnv.nix
./home/starship.nix
];
programs.zsh = {
enable = true;
initExtra = ''
export PATH=$HOME/.nix-profile/bin:/run/current-system/sw/bin/:$PATH
'';
} // (import ./home/shellcommon.nix { inherit pkgs; });
home.stateVersion = "21.11";
};
}
];
};
in
{
# These are indexed, by convention, using hostnames.
# For example, if `sky.local` is the hostname of your Mac, then use
# `sky` here.
air = defaultMacosSystem;
sky = defaultMacosSystem;
};
};
}