diff --git a/pkgs/clan-cli/clan_cli/tests/test_clan_nix_attrset.py b/pkgs/clan-cli/clan_cli/tests/test_clan_nix_attrset.py index 8cda0d002..7c80cc5fd 100644 --- a/pkgs/clan-cli/clan_cli/tests/test_clan_nix_attrset.py +++ b/pkgs/clan-cli/clan_cli/tests/test_clan_nix_attrset.py @@ -93,7 +93,7 @@ def test_clan_core_templates( ] clan_core_template_keys = list(clan_core_templates.keys()) - expected_templates = ["default", "flake-parts", "minimal", "minimal-flake-parts"] + expected_templates = ["classic", "default", "minimal"] assert clan_core_template_keys == expected_templates vlist_temps = list_templates("clan", clan_dir) @@ -114,14 +114,13 @@ def test_clan_core_templates( ) assert (new_clan / "flake.nix").exists() assert (new_clan / "machines").is_dir() - assert (new_clan / "machines" / "jon").is_dir() - config_nix_p = new_clan / "machines" / "jon" / "configuration.nix" - assert (config_nix_p).is_file() + # config_nix_p = new_clan / "machines" / "jon" / "configuration.nix" + # assert (config_nix_p).is_file() # Test if we can write to the configuration.nix file - with config_nix_p.open("r+") as f: - data = f.read() - f.write(data) + # with config_nix_p.open("r+") as f: + # data = f.read() + # f.write(data) # Test Case 1: Minimal input with empty templates diff --git a/templates/clan/flake-parts/.envrc b/templates/clan/classic/.envrc similarity index 100% rename from templates/clan/flake-parts/.envrc rename to templates/clan/classic/.envrc diff --git a/templates/clan/new-clan/flake.nix b/templates/clan/classic/flake.nix similarity index 100% rename from templates/clan/new-clan/flake.nix rename to templates/clan/classic/flake.nix diff --git a/templates/clan/new-clan/machines/.gitkeep b/templates/clan/classic/machines/.gitkeep similarity index 100% rename from templates/clan/new-clan/machines/.gitkeep rename to templates/clan/classic/machines/.gitkeep diff --git a/templates/clan/new-clan/.envrc b/templates/clan/default/.envrc similarity index 100% rename from templates/clan/new-clan/.envrc rename to templates/clan/default/.envrc diff --git a/templates/clan/default/flake.nix b/templates/clan/default/flake.nix new file mode 100644 index 000000000..8e61a8b02 --- /dev/null +++ b/templates/clan/default/flake.nix @@ -0,0 +1,65 @@ +{ + inputs.clan-core.url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz"; + inputs.nixpkgs.follows = "clan-core/nixpkgs"; + inputs.flake-parts.url = "github:hercules-ci/flake-parts"; + inputs.flake-parts.inputs.nixpkgs-lib.follows = "clan-core/nixpkgs"; + + outputs = + inputs@{ flake-parts, ... }: + flake-parts.lib.mkFlake { inherit inputs; } { + systems = [ + "x86_64-linux" + "aarch64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + imports = [ inputs.clan-core.flakeModules.default ]; + # https://docs.clan.lol/guides/getting-started/flake-parts/ + clan = { + + # Ensure this is unique among all clans you want to use. + meta.name = "__CHANGE_ME__"; + + # Information about your machines. Machines under ./machines will be auto-imported. + inventory.machines = { + somemachine.tags = [ "desktop" ]; + somemachine.deploy.targetHost = "root@somemachine"; + }; + + # Clan services to use. See https://docs.clan.lol/reference/clanServices + inventory.instances = { + + admin = { + module = { + name = "admin"; + input = "clan"; + }; + roles.default.tags.all = { }; + }; + + zerotier = { + module = { + name = "zerotier"; + input = "clan"; + }; + roles.peer.tags.all = { }; + }; + }; + + # A mapping of machine names to their nixos configuration. Allows specifying + # additional configuration. + machines = { + somemachine = + { pkgs, ... }: + { + environment.systemPackages = with pkgs; [ asciinema ]; + }; + }; + }; + perSystem = + { pkgs, inputs', ... }: + { + devShells.default = pkgs.mkShell { packages = [ inputs'.clan-core.packages.clan-cli ]; }; + }; + }; +} diff --git a/templates/clan/default/machines/.gitkeep b/templates/clan/default/machines/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/templates/clan/flake-parts/flake.nix b/templates/clan/flake-parts/flake.nix deleted file mode 100644 index 2d61576bc..000000000 --- a/templates/clan/flake-parts/flake.nix +++ /dev/null @@ -1,108 +0,0 @@ -{ - inputs.clan-core.url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz"; - inputs.nixpkgs.follows = "clan-core/nixpkgs"; - inputs.flake-parts.url = "github:hercules-ci/flake-parts"; - inputs.flake-parts.inputs.nixpkgs-lib.follows = "clan-core/nixpkgs"; - - outputs = - inputs@{ - self, - flake-parts, - ... - }: - flake-parts.lib.mkFlake { inherit inputs; } { - systems = [ - "x86_64-linux" - "aarch64-linux" - "x86_64-darwin" - "aarch64-darwin" - ]; - imports = [ inputs.clan-core.flakeModules.default ]; - # https://docs.clan.lol/guides/getting-started/flake-parts/ - clan = { - meta.name = "__CHANGE_ME__"; # Ensure this is unique among all clans you want to use. - - inherit self; - machines = { - # "jon" will be the hostname of the machine - jon = - { pkgs, ... }: - { - imports = [ - ./modules/shared.nix - ./modules/disko.nix - ./machines/jon/configuration.nix - ]; - - nixpkgs.hostPlatform = "x86_64-linux"; - - # Set this for clan commands use ssh i.e. `clan machines update` - # If you change the hostname, you need to update this line to root@ - # This only works however if you have avahi running on your admin machine else use IP - clan.core.networking.targetHost = pkgs.lib.mkDefault "root@jon"; - - # You can get your disk id by running the following command on the installer: - # Replace with the IP of the installer printed on the screen or by running the `ip addr` command. - # ssh root@ lsblk --output NAME,ID-LINK,FSTYPE,SIZE,MOUNTPOINT - disko.devices.disk.main = { - device = "/dev/disk/by-id/__CHANGE_ME__"; - }; - - # IMPORTANT! Add your SSH key here - # e.g. > cat ~/.ssh/id_ed25519.pub - users.users.root.openssh.authorizedKeys.keys = throw '' - Don't forget to add your SSH key here! - users.users.root.openssh.authorizedKeys.keys = [ "" ] - ''; - - # Zerotier needs one controller to accept new nodes. Once accepted - # the controller can be offline and routing still works. - clan.core.networking.zerotier.controller.enable = true; - }; - # "sara" will be the hostname of the machine - sara = - { pkgs, ... }: - { - imports = [ - ./modules/shared.nix - ./modules/disko.nix - ./machines/sara/configuration.nix - ]; - - nixpkgs.hostPlatform = "x86_64-linux"; - - # Set this for clan commands use ssh i.e. `clan machines update` - # If you change the hostname, you need to update this line to root@ - # This only works however if you have avahi running on your admin machine else use IP - clan.core.networking.targetHost = pkgs.lib.mkDefault "root@sara"; - - # You can get your disk id by running the following command on the installer: - # Replace with the IP of the installer printed on the screen or by running the `ip addr` command. - # ssh root@ lsblk --output NAME,ID-LINK,FSTYPE,SIZE,MOUNTPOINT - disko.devices.disk.main = { - device = "/dev/disk/by-id/__CHANGE_ME__"; - }; - - # IMPORTANT! Add your SSH key here - # e.g. > cat ~/.ssh/id_ed25519.pub - users.users.root.openssh.authorizedKeys.keys = throw '' - Don't forget to add your SSH key here! - users.users.root.openssh.authorizedKeys.keys = [ "" ] - ''; - - /* - After jon is deployed, uncomment the following line - This will allow sara to share the VPN overlay network with jon - The networkId is generated by the first deployment of jon - */ - # clan.core.networking.zerotier.networkId = builtins.readFile ../../vars/per-machine/jon/zerotier/zerotier-network-id/value; - }; - }; - }; - perSystem = - { pkgs, inputs', ... }: - { - devShells.default = pkgs.mkShell { packages = [ inputs'.clan-core.packages.clan-cli ]; }; - }; - }; -} diff --git a/templates/clan/flake-parts/machines/jon/configuration.nix b/templates/clan/flake-parts/machines/jon/configuration.nix deleted file mode 100644 index 9fa9a41cd..000000000 --- a/templates/clan/flake-parts/machines/jon/configuration.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ config, ... }: -let - username = config.networking.hostName; -in -{ - imports = [ ./hardware-configuration.nix ]; - - # Locale service discovery and mDNS - services.avahi.enable = true; - - services.xserver.enable = true; - services.xserver.desktopManager.gnome.enable = true; - services.xserver.displayManager.gdm.enable = true; - # Disable the default gnome apps to speed up deployment - services.gnome.core-utilities.enable = false; - - # Enable automatic login for the user. - services.displayManager.autoLogin = { - enable = true; - user = username; - }; - - users.users.${username} = { - initialPassword = username; - isNormalUser = true; - extraGroups = [ - "wheel" - "networkmanager" - "video" - "audio" - "input" - "dialout" - "disk" - ]; - uid = 1000; - openssh.authorizedKeys.keys = config.users.users.root.openssh.authorizedKeys.keys; - }; -} diff --git a/templates/clan/flake-parts/machines/sara/configuration.nix b/templates/clan/flake-parts/machines/sara/configuration.nix deleted file mode 100644 index df02f6cad..000000000 --- a/templates/clan/flake-parts/machines/sara/configuration.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ config, ... }: - -let - username = config.networking.hostName; -in -{ - imports = [ ./hardware-configuration.nix ]; - - # Locale service discovery and mDNS - services.avahi.enable = true; - - services.xserver.enable = true; - services.xserver.desktopManager.gnome.enable = true; - services.xserver.displayManager.gdm.enable = true; - # Disable the default gnome apps to speed up deployment - services.gnome.core-utilities.enable = false; - - # Enable automatic login for the user. - services.displayManager.autoLogin = { - enable = true; - user = username; - }; - - users.users.${username} = { - initialPassword = username; - isNormalUser = true; - extraGroups = [ - "wheel" - "networkmanager" - "video" - "audio" - "input" - "dialout" - "disk" - ]; - uid = 1000; - openssh.authorizedKeys.keys = config.users.users.root.openssh.authorizedKeys.keys; - }; -} diff --git a/templates/clan/flake-parts/modules/disko.nix b/templates/clan/flake-parts/modules/disko.nix deleted file mode 100644 index 5bc1e84bd..000000000 --- a/templates/clan/flake-parts/modules/disko.nix +++ /dev/null @@ -1,51 +0,0 @@ -{ lib, clan-core, ... }: - -let - suffix = config.clan.core.vars.generators.disk-id.files.diskId.value; -in -{ - imports = [ - clan-core.clanModules.disk-id - ]; - - boot.loader.grub.efiSupport = lib.mkDefault true; - boot.loader.grub.efiInstallAsRemovable = lib.mkDefault true; - disko.devices = { - disk = { - "main" = { - # suffix is to prevent disk name collisions - name = "main-" + suffix; - type = "disk"; - # Set the following in flake.nix for each maschine: - # device = ; - content = { - type = "gpt"; - partitions = { - "boot" = { - size = "1M"; - type = "EF02"; # for grub MBR - priority = 1; - }; - "ESP" = { - size = "512M"; - type = "EF00"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - }; - }; - "root" = { - size = "100%"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/"; - }; - }; - }; - }; - }; - }; - }; -} diff --git a/templates/clan/flake-parts/modules/shared.nix b/templates/clan/flake-parts/modules/shared.nix deleted file mode 100644 index 5b30638a9..000000000 --- a/templates/clan/flake-parts/modules/shared.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - clan-core, - # Optional, if you want to access other flakes: - # self, - ... -}: -{ - imports = [ - clan-core.clanModules.sshd - clan-core.clanModules.root-password - # You can access other flakes imported in your flake via `self` like this: - # self.inputs.nix-index-database.nixosModules.nix-index - ]; -} diff --git a/templates/clan/minimal-flake-parts/checks.nix b/templates/clan/minimal-flake-parts/checks.nix deleted file mode 100644 index 8de32fa02..000000000 --- a/templates/clan/minimal-flake-parts/checks.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ self, ... }: -{ - perSystem = - { - self', - lib, - system, - ... - }: - { - checks = - let - nixosMachines = lib.mapAttrs' ( - name: config: lib.nameValuePair "nixos-${name}" config.config.system.build.toplevel - ) ((lib.filterAttrs (_: config: config.pkgs.system == system)) self.nixosConfigurations); - - packages = lib.mapAttrs' (n: lib.nameValuePair "package-${n}") self'.packages; - devShells = lib.mapAttrs' (n: lib.nameValuePair "devShell-${n}") self'.devShells; - in - nixosMachines // packages // devShells; - }; -} diff --git a/templates/clan/minimal-flake-parts/clan.nix b/templates/clan/minimal-flake-parts/clan.nix deleted file mode 100644 index 507900c94..000000000 --- a/templates/clan/minimal-flake-parts/clan.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ self, inputs, ... }: -{ - imports = [ - inputs.clan.flakeModules.default - ]; - clan = { - meta.name = "__CHANGE_ME__"; - inherit self; - specialArgs = { - inherit inputs; - }; - }; -} diff --git a/templates/clan/minimal-flake-parts/devshells.nix b/templates/clan/minimal-flake-parts/devshells.nix deleted file mode 100644 index 43a2d86db..000000000 --- a/templates/clan/minimal-flake-parts/devshells.nix +++ /dev/null @@ -1,17 +0,0 @@ -_: { - perSystem = - { - pkgs, - inputs', - ... - }: - { - devShells = { - default = pkgs.mkShellNoCC { - packages = [ - inputs'.clan.packages.default - ]; - }; - }; - }; -} diff --git a/templates/clan/minimal-flake-parts/flake.nix b/templates/clan/minimal-flake-parts/flake.nix deleted file mode 100644 index 63afbb405..000000000 --- a/templates/clan/minimal-flake-parts/flake.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ - - inputs = { - clan.url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz"; - nixpkgs.follows = "clan/nixpkgs"; - - flake-parts.url = "github:hercules-ci/flake-parts"; - flake-parts.inputs.nixpkgs-lib.follows = "clan/nixpkgs"; - }; - - outputs = - inputs@{ flake-parts, ... }: - flake-parts.lib.mkFlake { inherit inputs; } ( - { ... }: - { - systems = [ - "x86_64-linux" - "aarch64-linux" - "x86_64-darwin" - "aarch64-darwin" - ]; - - imports = [ - ./checks.nix - ./clan.nix - ./devshells.nix - ./formatter.nix - ]; - } - ); -} diff --git a/templates/clan/minimal-flake-parts/formatter.nix b/templates/clan/minimal-flake-parts/formatter.nix deleted file mode 100644 index ec092fae4..000000000 --- a/templates/clan/minimal-flake-parts/formatter.nix +++ /dev/null @@ -1,10 +0,0 @@ -_: { - perSystem = - { - pkgs, - ... - }: - { - formatter = pkgs.nixfmt; - }; -} diff --git a/templates/clan/minimal-flake-parts/.gitignore b/templates/clan/minimal/.gitignore similarity index 100% rename from templates/clan/minimal-flake-parts/.gitignore rename to templates/clan/minimal/.gitignore diff --git a/templates/clan/minimal/flake.nix b/templates/clan/minimal/flake.nix index bc7e4b895..a299343fd 100644 --- a/templates/clan/minimal/flake.nix +++ b/templates/clan/minimal/flake.nix @@ -1,15 +1,36 @@ { - inputs.clan-core.url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz"; - inputs.nixpkgs.follows = "clan-core/nixpkgs"; + + inputs = { + clan.url = "https://git.clan.lol/clan/clan-core/archive/main.tar.gz"; + nixpkgs.follows = "clan/nixpkgs"; + + flake-parts.url = "github:hercules-ci/flake-parts"; + flake-parts.inputs.nixpkgs-lib.follows = "clan/nixpkgs"; + }; outputs = - { self, clan-core, ... }: - let - # Usage see: https://docs.clan.lol - clan = clan-core.clanLib.buildClan { inherit self; }; - in - { - # all machines managed by Clan - inherit (clan) nixosConfigurations nixosModules clanInternals; - }; + inputs@{ flake-parts, ... }: + flake-parts.lib.mkFlake { inherit inputs; } ( + { self, lib, ... }: + { + + imports = [ + inputs.clan.flakeModules.default + ]; + + clan = { + inherit self; + specialArgs = { inherit inputs; }; + # Ensure this is unique among all clans you want to use. + meta.name = lib.mkDefault "__CHANGE_ME__"; + }; + + systems = [ + "x86_64-linux" + "aarch64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + } + ); } diff --git a/templates/clan/minimal/inventory.json b/templates/clan/minimal/inventory.json deleted file mode 100644 index 40109ebd5..000000000 --- a/templates/clan/minimal/inventory.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "meta": { "name": "__CHANGE_ME__" }, - "machines": {}, - "services": {} -} diff --git a/templates/clan/new-clan/.clan-flake b/templates/clan/new-clan/.clan-flake deleted file mode 100644 index 406fcfebe..000000000 --- a/templates/clan/new-clan/.clan-flake +++ /dev/null @@ -1,2 +0,0 @@ -# DO NOT DELETE -# This file is used by the clan cli to discover a clan flake diff --git a/templates/flake.nix b/templates/flake.nix index e349af18b..df9045be6 100644 --- a/templates/flake.nix +++ b/templates/flake.nix @@ -25,20 +25,18 @@ clan = { default = { description = "Initialize a new clan flake"; - path = ./clan/new-clan; + path = ./clan/default; }; + + classic = { + description = "Initialize a new clan flake (no flake-parts)"; + path = ./clan/classic; + }; + minimal = { description = "for clans managed via (G)UI"; path = ./clan/minimal; }; - flake-parts = { - description = "Flake-parts"; - path = ./clan/flake-parts; - }; - minimal-flake-parts = { - description = "Minimal flake-parts clan template"; - path = ./clan/minimal-flake-parts; - }; }; }; };