fixed nix-darwin building

This commit is contained in:
Leyla Becker 2024-11-25 18:28:55 -06:00
parent 0d0443a02a
commit 5f21fd43ff
14 changed files with 201 additions and 105 deletions

View file

@ -0,0 +1,20 @@
{...}: {
host = {
users = {
leyla = {
isDesktopUser = true;
isTerminalUser = true;
isPrincipleUser = true;
};
ester = {
isPrincipleUser = true;
isNormalUser = true;
};
eve.isNormalUser = false;
};
};
system.stateVersion = 5;
nixpkgs.hostPlatform = "aarch64-darwin";
}

View file

@ -1 +1,5 @@
{...}: {}
{...}: {
imports = [
./configuration.nix
];
}

View file

@ -2,5 +2,7 @@
{...}: {
imports = [
./home-manager
./users.nix
./system.nix
];
}

View file

@ -0,0 +1,27 @@
{self, ...}: {
system.configurationRevision = self.rev or self.dirtyRev or null;
nix = {
gc = {
automatic = true;
interval = [
{
Hour = 4;
Minute = 15;
Weekday = 7;
}
];
options = "--delete-older-than 7d";
};
optimise = {
automatic = true;
interval = [
{
Hour = 4;
Minute = 15;
Weekday = 7;
}
];
};
};
}

View file

@ -0,0 +1,20 @@
{
lib,
config,
...
}: let
host = config.host;
in {
users = {
users = {
leyla = {
name = lib.mkForce host.users.leyla.name;
home = lib.mkForce "/home/${host.users.leyla.name}";
};
ester = {
name = lib.mkForce host.users.ester.name;
home = lib.mkForce "/home/${host.users.ester.name}";
};
};
};
}

View file

@ -6,7 +6,7 @@
./hardware.nix
./users.nix
./desktop.nix
./nix-development.nix
./ssh.nix
./i18n.nix
];
}

View file

@ -0,0 +1,13 @@
{...}: {
services = {
openssh = {
enable = true;
ports = [22];
settings = {
PasswordAuthentication = false;
UseDns = true;
X11Forwarding = false;
};
};
};
}

View file

@ -1,8 +1,5 @@
{...}: {
nix = {
settings = {
experimental-features = ["nix-command" "flakes"];
};
gc = {
automatic = true;
dates = "weekly";
@ -13,16 +10,4 @@
dates = ["weekly"];
};
};
services = {
openssh = {
enable = true;
ports = [22];
settings = {
PasswordAuthentication = false;
UseDns = true;
X11Forwarding = false;
};
};
};
}

View file

@ -8,7 +8,6 @@
host = config.host;
hostUsers = host.hostUsers;
principleUsers = host.principleUsers;
terminalUsers = host.terminalUsers;
# normalUsers = host.normalUsers;
@ -44,91 +43,7 @@
ester = users.ester.name;
eve = users.eve.name;
in {
options.host = {
users = lib.mkOption {
type = lib.types.attrsOf (lib.types.submodule ({
config,
name,
...
}: {
options = {
name = lib.mkOption {
type = lib.types.str;
default = name;
description = ''
What should this users name on the system be
'';
defaultText = lib.literalExpression "config.host.users.\${name}.name";
};
isPrincipleUser = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
User should be configured as root and have ssh access
'';
defaultText = lib.literalExpression "config.host.users.\${name}.isPrincipleUser";
};
isDesktopUser = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
User should install their desktop applications
'';
defaultText = lib.literalExpression "config.host.users.\${name}.isDesktopUser";
};
isTerminalUser = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
User should install their terminal applications
'';
defaultText = lib.literalExpression "config.host.users.\${name}.isTerminalUser";
};
isNormalUser = lib.mkOption {
type = lib.types.bool;
default = config.isDesktopUser || config.isTerminalUser;
description = ''
User should install their applications and can log in
'';
defaultText = lib.literalExpression "config.host.users.\${name}.isNormalUser";
};
};
}));
};
hostUsers = lib.mkOption {
default = lib.attrsets.mapAttrsToList (_: user: user) host.users;
};
principleUsers = lib.mkOption {
default = lib.lists.filter (user: user.isPrincipleUser) hostUsers;
};
normalUsers = lib.mkOption {
default = lib.lists.filter (user: user.isTerminalUser) hostUsers;
};
terminalUsers = lib.mkOption {
default = lib.lists.filter (user: user.isNormalUser) hostUsers;
};
};
config = {
assertions =
(
builtins.map (user: {
assertion = !(user.isPrincipleUser && !user.isNormalUser);
message = ''
Non normal user ${user.name} can not be a principle user.
'';
})
hostUsers
)
++ [
{
assertion = (builtins.length principleUsers) > 0;
message = ''
At least one user must be a principle user.
'';
}
];
# principle users are by definition trusted
nix.settings.trusted-users = builtins.map (user: user.name) principleUsers;

View file

@ -2,5 +2,8 @@
{...}: {
imports = [
./home-manager
./system.nix
./nix-development.nix
./users.nix
];
}

View file

@ -0,0 +1,7 @@
{...}: {
nix = {
settings = {
experimental-features = ["nix-command" "flakes"];
};
};
}

View file

@ -0,0 +1,97 @@
{
lib,
config,
...
}: let
host = config.host;
hostUsers = host.hostUsers;
principleUsers = host.principleUsers;
in {
options.host = {
users = lib.mkOption {
default = {};
type = lib.types.attrsOf (lib.types.submodule ({
config,
name,
...
}: {
options = {
name = lib.mkOption {
type = lib.types.str;
default = name;
description = ''
What should this users name on the system be
'';
defaultText = lib.literalExpression "config.host.users.\${name}.name";
};
isPrincipleUser = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
User should be configured as root and have ssh access
'';
defaultText = lib.literalExpression "config.host.users.\${name}.isPrincipleUser";
};
isDesktopUser = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
User should install their desktop applications
'';
defaultText = lib.literalExpression "config.host.users.\${name}.isDesktopUser";
};
isTerminalUser = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
User should install their terminal applications
'';
defaultText = lib.literalExpression "config.host.users.\${name}.isTerminalUser";
};
isNormalUser = lib.mkOption {
type = lib.types.bool;
default = config.isDesktopUser || config.isTerminalUser;
description = ''
User should install their applications and can log in
'';
defaultText = lib.literalExpression "config.host.users.\${name}.isNormalUser";
};
};
}));
};
hostUsers = lib.mkOption {
default = lib.attrsets.mapAttrsToList (_: user: user) host.users;
};
principleUsers = lib.mkOption {
default = lib.lists.filter (user: user.isPrincipleUser) hostUsers;
};
normalUsers = lib.mkOption {
default = lib.lists.filter (user: user.isTerminalUser) hostUsers;
};
terminalUsers = lib.mkOption {
default = lib.lists.filter (user: user.isNormalUser) hostUsers;
};
};
config = {
assertions =
(
builtins.map (user: {
assertion = !(user.isPrincipleUser && !user.isNormalUser);
message = ''
Non normal user ${user.name} can not be a principle user.
'';
})
hostUsers
)
++ [
{
assertion = (builtins.length principleUsers) > 0;
message = ''
At least one user must be a principle user.
'';
}
];
};
}

View file

@ -26,6 +26,7 @@
home-manager-modules =
common-modules
++ [
sops-nix.homeManagerModules.sops
../modules/home-manager-modules
];
@ -41,10 +42,8 @@
system-modules =
common-modules
++ [
../modules/system-modules
sops-nix.nixosModules.sops
home-manager.nixosModules.home-manager
home-manager-config
../modules/system-modules
];
in {
forEachPkgs = lambda: forEachSystem (system: lambda (pkgsFor system));
@ -62,6 +61,8 @@ in {
modules =
system-modules
++ [
sops-nix.nixosModules.sops
home-manager.nixosModules.home-manager
../modules/nixos-modules
../configurations/nixos/${host}
];
@ -73,6 +74,8 @@ in {
modules =
system-modules
++ [
sops-nix.darwinModules.sops
home-manager.darwinModules.home-manager
../modules/darwin-modules
../configurations/darwin/${host}
];