diff --git a/default.nix b/default.nix index 1b7090a45..a2afcdd93 100644 --- a/default.nix +++ b/default.nix @@ -2,5 +2,5 @@ pkgs ? import { }, }: { - vicinae = pkgs.callPackage ./vicinae.nix { }; + vicinae = pkgs.callPackage ./nix/vicinae.nix { }; } diff --git a/flake.nix b/flake.nix index fa500b268..501882d49 100644 --- a/flake.nix +++ b/flake.nix @@ -21,7 +21,7 @@ system: let pkgs = nixpkgs.legacyPackages.${system}; - vicinaePkg = pkgs.callPackage ./vicinae.nix { }; + vicinaePkg = pkgs.callPackage ./nix/vicinae.nix { }; nix-update-script = pkgs.writeShellScriptBin "nix-update-script" '' OLD_API_DEPS_HASH=$(${pkgs.lib.getExe pkgs.nix} eval --raw .#packages.x86_64-linux.default.passthru.apiDeps.hash) OLD_EXT_MAN_DEPS_HASH=$(${pkgs.lib.getExe pkgs.nix} eval --raw .#packages.x86_64-linux.default.passthru.extensionManagerDeps.hash) @@ -40,6 +40,7 @@ { packages.default = vicinaePkg; packages.nix-update-script = nix-update-script; + mkVicinaeExtension = import ./nix/mkVicinaeExtension.nix; devShells.default = pkgs.mkShell { inputsFrom = [ vicinaePkg ]; # automatically pulls nativeBuildInputs + buildInputs buildInputs = [ @@ -56,6 +57,7 @@ // { overlays.default = final: prev: { vicinae = self.packages.${final.system}.default; + mkVicinaeExtension = import ./nix/mkVicinaeExtension.nix; }; homeManagerModules.default = { @@ -64,7 +66,7 @@ lib, ... }: - import ./module.nix { + import ./nix/module.nix { inherit config pkgs diff --git a/nix/mkVicinaeExtension.nix b/nix/mkVicinaeExtension.nix new file mode 100644 index 000000000..0c8cf4ce0 --- /dev/null +++ b/nix/mkVicinaeExtension.nix @@ -0,0 +1,18 @@ +{ + pkgs, + name, + src, +}: +pkgs.buildNpmPackage { + inherit name src; + installPhase = '' + runHook preInstall + + mkdir -p $out + cp -r /build/.local/share/vicinae/extensions/${name}/* $out/ + + runHook postInstall + ''; + npmDeps = pkgs.importNpmLock { npmRoot = src; }; + npmConfigHook = pkgs.importNpmLock.npmConfigHook; +} diff --git a/module.nix b/nix/module.nix similarity index 88% rename from module.nix rename to nix/module.nix index faee336d0..4dcf4e6e1 100644 --- a/module.nix +++ b/nix/module.nix @@ -35,6 +35,15 @@ in description = "If vicinae should use the layer shell"; }; + extensions = lib.mkOption { + type = lib.types.listOf lib.types.package; + default = [ ]; + description = '' + List of Vicinae extensions to install. + You can use the `mkVicinaeExtension` function from the overlay to create extensions. + ''; + }; + themes = lib.mkOption { default = { }; description = '' @@ -111,6 +120,13 @@ in } ) cfg.themes; + xdg.dataFile = builtins.listToAttrs ( + builtins.map (item: { + name = "vicinae/extensions/${item.name}"; + value.source = item; + }) config.services.vicinae.extensions + ); + systemd.user.services.vicinae = { Unit = { Description = "Vicinae server daemon"; diff --git a/vicinae.nix b/nix/vicinae.nix similarity index 99% rename from vicinae.nix rename to nix/vicinae.nix index e009523a8..fb3fec2b7 100644 --- a/vicinae.nix +++ b/nix/vicinae.nix @@ -25,7 +25,7 @@ wayland, }: let - src = ./.; + src = ../.; manifestRaw = builtins.readFile (src + /manifest.yaml);