commit b4625b571989c71e4ce325586cd7f49f91f5356d Author: transcaffeine Date: Sat Apr 5 11:33:18 2025 +0200 feat: flake interface definition diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..86c15d2 --- /dev/null +++ b/flake.nix @@ -0,0 +1,12 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; + }; + + outputs = inputs: { + nixosModules = { + users = (import ./users) inputs; + hosts = (import ./hosts) inputs; + }; + }; +} diff --git a/hosts/default.nix b/hosts/default.nix new file mode 100644 index 0000000..8060e96 --- /dev/null +++ b/hosts/default.nix @@ -0,0 +1,9 @@ +inputs @ {nixpkgs, ...}: +let + inherit (nixpkgs) lib; + isDir = _name: type: type == "directory"; + directoriesAsModules = dir: (builtins.mapAttrs + (name: _value: dir + "/${name}") + (lib.filterAttrs isDir (builtins.readDir dir)) + ); +in directoriesAsModules ./. diff --git a/hosts/git.example.tld/default.nix b/hosts/git.example.tld/default.nix new file mode 100644 index 0000000..a01e912 --- /dev/null +++ b/hosts/git.example.tld/default.nix @@ -0,0 +1,8 @@ +inputs @ {config, ...}: +let + allusers = (import ../../users) inputs; +{ + users.users = { + inherit (allUsers) alice bob; + } +} diff --git a/hosts/web.example.org/default.nix b/hosts/web.example.org/default.nix new file mode 100644 index 0000000..61222bd --- /dev/null +++ b/hosts/web.example.org/default.nix @@ -0,0 +1,8 @@ +inputs @ {config, ...}: +let + allusers = (import ../../users) inputs; +{ + users.users = { + inherit (allUsers) alice bob mallory root; + } +} diff --git a/users/alice/default.nix b/users/alice/default.nix new file mode 100644 index 0000000..c0315c4 --- /dev/null +++ b/users/alice/default.nix @@ -0,0 +1,13 @@ +{config, lib, pkgs, ...}: +{ + isNormalUser = true; + description = "Alice Lastname"; + packages = with pkgs; [ + "firefox" + "element-desktop" + ]; + extraGroups = [ + "audio" + "video" + ]; +} diff --git a/users/bob/default.nix b/users/bob/default.nix new file mode 100644 index 0000000..b944c2f --- /dev/null +++ b/users/bob/default.nix @@ -0,0 +1,14 @@ +{config, lib, pkgs, ...}: +{ + isNormalUser = true; + description = "Bob TheBuilder"; + packages = with pkgs; [ + "firefox-beta" + "element-desktop" + ]; + extraGroups = [ + "audio" + "video" + "docker" + ]; +} diff --git a/users/default.nix b/users/default.nix new file mode 100644 index 0000000..0104ff7 --- /dev/null +++ b/users/default.nix @@ -0,0 +1,18 @@ +{config, lib, ...}: +let + alice = import ./alice; + bob = import ./bob; + mallory = import ./mallory; + isSystemUser = _name: userConfig: userConfig.isSystemUser == true; +in +{ + users.users = { + inherit alice; + inherit bob; + root = { + openssh.authorizedKeys.keys = lib.lists.flatten (attrValues (lib.mapAttrs + (_name: userConfig: userConfig.openssh.authorizedKeys.keys) + (lib.filterAttrs isSystemUser config.users.users))) + }; + }; +} diff --git a/users/mallory/default.nix b/users/mallory/default.nix new file mode 100644 index 0000000..fdf4bb3 --- /dev/null +++ b/users/mallory/default.nix @@ -0,0 +1,11 @@ +{config, lib, pkgs, ...}: +{ + isSystemUser = true; + description = "muahahaaa"; + packages = with pkgs; [ + "mtr" + "nmap" + "pwntools" + "hexedit" + ]; +}