139 lines
4.4 KiB
Nix
139 lines
4.4 KiB
Nix
{
|
|
description = "Madeleine's dots for the illiterate (sydnix)";
|
|
|
|
inputs = {
|
|
disko.url = "github:nix-community/disko";
|
|
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
|
|
|
impermanence.url = "github:nix-community/impermanence";
|
|
|
|
home-manager.url = "github:nix-community/home-manager";
|
|
|
|
niri.url = "github:sodiboo/niri-flake";
|
|
|
|
sops-nix.url = "github:Mic92/sops-nix";
|
|
};
|
|
|
|
outputs = { nixpkgs, ... }@inputs:
|
|
# TODO: Move to utils.nix.
|
|
let list-nix-directory = dir:
|
|
builtins.attrNames
|
|
(nixpkgs.lib.filterAttrs
|
|
(k: _v: nixpkgs.lib.hasSuffix ".nix" k)
|
|
(builtins.readDir dir));
|
|
in {
|
|
# REVIEW: Why don't we put each module under nixosModules.<name>?
|
|
nixosModules.default =
|
|
let modules = list-nix-directory ./modules/nixos;
|
|
in { ... }: {
|
|
imports =
|
|
builtins.map (m: ./modules/nixos/${m}) modules;
|
|
};
|
|
|
|
homeManagerModules.default =
|
|
let modules = list-nix-directory ./modules/home;
|
|
in { ... }: {
|
|
imports =
|
|
builtins.map (m: ./modules/home/${m}) modules;
|
|
};
|
|
|
|
nixosConfigurations = (
|
|
let mkHost = k: v: nixpkgs.lib.nixosSystem {
|
|
specialArgs = inputs;
|
|
system = import ./hosts/${k}/system.nix;
|
|
# TODO: This is very ad-hoc, and I don't like it. Organise this better.
|
|
modules = [
|
|
./hosts/${k}/configuration.nix
|
|
|
|
inputs.self.nixosModules.default
|
|
|
|
inputs.disko.nixosModules.disko
|
|
inputs.sops-nix.nixosModules.sops
|
|
inputs.impermanence.nixosModules.impermanence
|
|
|
|
# Directory name should always match host name.
|
|
({ ... }: { networking.hostName = k; })
|
|
|
|
# Get system users
|
|
({ config, lib, ... }: {
|
|
users.users =
|
|
(lib.mapAttrs
|
|
(k: v: (import ./users/${k}).systemConfiguration)
|
|
(lib.filterAttrs
|
|
(k: _v: builtins.elem k config.sydnix.users.users)
|
|
(builtins.readDir ./users)));
|
|
})
|
|
|
|
# Nixpkgs configuration
|
|
({ pkgs, ... }: {
|
|
nixpkgs.config.allowUnfree = true;
|
|
|
|
documentation = {
|
|
man.enable = true;
|
|
info.enable = true;
|
|
};
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
man-pages
|
|
stdman
|
|
man-pages-posix
|
|
stdmanpages
|
|
];
|
|
})
|
|
|
|
# home-manager configuration.
|
|
inputs.home-manager.nixosModules.home-manager
|
|
({ config, lib, self, ... }: {
|
|
home-manager.useGlobalPkgs = true;
|
|
# home-manager.useUserPackages = true;
|
|
|
|
home-manager.users =
|
|
lib.filterAttrs
|
|
(k: _v: builtins.elem k config.sydnix.users.users)
|
|
self.homeConfigurations;
|
|
|
|
home-manager.extraSpecialArgs = {
|
|
utils = import ./lib/utils.nix {
|
|
inherit config lib;
|
|
pkgs = nixpkgs;
|
|
};
|
|
};
|
|
})
|
|
];
|
|
};
|
|
in
|
|
builtins.mapAttrs mkHost (builtins.readDir ./hosts)
|
|
);
|
|
|
|
homeConfigurations =
|
|
let users = builtins.readDir ./users;
|
|
mkUser = username: _v: {
|
|
# TODO: This is very ad-hoc, and I don't like it. Organise this
|
|
# better.
|
|
imports = [
|
|
(import ./users/${username}/default.nix).homeConfiguration
|
|
|
|
inputs.self.homeManagerModules.default
|
|
|
|
({ lib, ... }: {
|
|
home.username = username;
|
|
})
|
|
|
|
({ pkgs, lib, ... }: {
|
|
nix = {
|
|
settings.experimental-features =
|
|
lib.mkDefault
|
|
[ "nix-command" "flakes" ];
|
|
};
|
|
})
|
|
|
|
inputs.sops-nix.homeManagerModules.sops
|
|
inputs.impermanence.homeManagerModules.impermanence
|
|
];
|
|
};
|
|
in
|
|
builtins.mapAttrs mkUser users;
|
|
};
|
|
}
|