diff --git a/lib/modules/clan/interface.nix b/lib/modules/clan/interface.nix index 5a8a8b4de..22b33ecdf 100644 --- a/lib/modules/clan/interface.nix +++ b/lib/modules/clan/interface.nix @@ -275,6 +275,8 @@ in templates = lib.mkOption { type = lib.types.raw; }; machines = lib.mkOption { type = lib.types.raw; }; + + clan-cli = lib.mkOption { type = lib.types.raw; }; }; }; }; diff --git a/lib/modules/clan/module.nix b/lib/modules/clan/module.nix index 99762d7aa..60f2559f7 100644 --- a/lib/modules/clan/module.nix +++ b/lib/modules/clan/module.nix @@ -273,6 +273,9 @@ in # machine specifics machines = configsPerSystem; + + # export clan-cli in clanInternals to tie the CLI to the flake + clan-cli = builtins.mapAttrs (_sys: pkgs: pkgs.clan-cli) clan-core.packages; }; }; } diff --git a/pkgs/flake-module.nix b/pkgs/flake-module.nix index 046ca8882..53fc2d72b 100644 --- a/pkgs/flake-module.nix +++ b/pkgs/flake-module.nix @@ -13,7 +13,12 @@ ]; perSystem = - { config, pkgs, ... }: + { + config, + pkgs, + self', + ... + }: { packages = { agit = pkgs.callPackage ./agit { }; @@ -28,6 +33,25 @@ classgen = pkgs.callPackage ./classgen { }; zerotierone = pkgs.callPackage ./zerotierone { }; update-clan-core-for-checks = pkgs.callPackage ./update-clan-core-for-checks { }; + clan-autorefresh = pkgs.symlinkJoin { + name = "clan"; + paths = [ + (pkgs.writeScriptBin "clan" '' + #!/bin/sh + set -efu + + system=$(nix config show system) + + nix \ + --extra-experimental-features 'flakes nix-command' \ + run ".#clanInternals.clan-cli.$system" -- "$@" + '') + self'.packages.clan-cli + ]; + postBuild = '' + rm -r $out/lib + ''; + }; }; }; } diff --git a/templates/clan/default/flake.nix b/templates/clan/default/flake.nix index 0b339d04b..00260fb7b 100644 --- a/templates/clan/default/flake.nix +++ b/templates/clan/default/flake.nix @@ -25,7 +25,9 @@ ] (system: { default = clan-core.inputs.nixpkgs.legacyPackages.${system}.mkShell { - packages = [ clan-core.packages.${system}.clan-cli ]; + packages = [ + clan-core.packages.${system}.clan-autorefresh + ]; }; }); }; diff --git a/templates/clan/flake-parts/flake.nix b/templates/clan/flake-parts/flake.nix index 722e5dc3c..48f6828b2 100644 --- a/templates/clan/flake-parts/flake.nix +++ b/templates/clan/flake-parts/flake.nix @@ -28,7 +28,7 @@ perSystem = { pkgs, inputs', ... }: { - devShells.default = pkgs.mkShell { packages = [ inputs'.clan-core.packages.clan-cli ]; }; + devShells.default = pkgs.mkShell { packages = [ inputs'.clan-core.packages.clan-autorefresh ]; }; }; }; }