diff --git a/.gitignore b/.gitignore index 118fd54..620904b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ # build output dist/ +/result + # generated types .astro/ @@ -13,17 +15,13 @@ yarn-debug.log* yarn-error.log* pnpm-debug.log* - -# environment variables -.env -.env.production - -# macOS-specific files -.DS_Store - -# jetbrains setting folder +# IDE folders .idea/ .vscode/ +# direnv +/.envrc +/.direnv/ + modules/ modules_old/ diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..37c785a --- /dev/null +++ b/default.nix @@ -0,0 +1,82 @@ +{ + lib, + stdenv, + nix-gitignore, + + yarn-berry, + nodejs, + cacert, +}: stdenv.mkDerivation (final: let + nodeModules = stdenv.mkDerivation { + pname = "${final.pname}-node_modules"; + version = final.version; + + src = final.src; + + nativeBuildInputs = [ nodejs yarn-berry cacert ]; + + configurePhase = '' + mkdir garbage-tooling + + cat < .yarnrc.yml + enableTelemetry: false + enableInlineBuilds: true + enableProgressBars: false + enableGlobalCache: false + nodeLinker: node-modules + EOF + ''; + + buildPhase = '' + # build will fail once due to missing nodejs executable + # linking before running this won't work, it will just delete it + HOME=$(pwd)/garbage-tooling yarn install || true + + mkdir -p node_modules/node/bin + ln -s ${nodejs}/bin/node node_modules/node/bin/node + + HOME=$(pwd)/garbage-tooling yarn install + ''; + + installPhase = '' + # none of the cache path configs in yarnrc actually do anything + # so we just copy node_modules manually + + rm node_modules/node/bin/node # remove dep on nix package for output hash + mv node_modules $out + ''; + + fixupPhase = "true"; + + outputHashMode = "recursive"; + outputHashAlgo = "sha256"; + outputHash = "rKoDjvG5t+aQRrzAz0eTifPtL3zmWAu/emxXWd1ocxM="; + }; +in { + pname = "quickshell-web"; + version = "0.1.0"; + + src = nix-gitignore.gitignoreSource [] ./.; + + nativeBuildInputs = [ yarn-berry ]; + + configurePhase = '' + mkdir garbage-tooling + + cat < .yarnrc.yml + enableInlineBuilds: true + enableProgressBars: false + enableGlobalCache: false + enableNetwork: false + nodeLinker: node-modules + EOF + + cp -r ${nodeModules} node_modules + ''; + + buildPhase = '' + HOME=$(pwd)/garbage-tooling yarn build + ''; + + installPhase = "mv dist $out"; +}) diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..9a1efd0 --- /dev/null +++ b/flake.lock @@ -0,0 +1,26 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1727348695, + "narHash": "sha256-J+PeFKSDV+pHL7ukkfpVzCOO7mBSrrpJ3svwBFABbhI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1925c603f17fc89f4c8f6bf6f631a802ad85d784", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..2bb8982 --- /dev/null +++ b/flake.nix @@ -0,0 +1,16 @@ +{ + inputs = { + nixpkgs.url = "nixpkgs/nixos-unstable"; + }; + + outputs = { self, nixpkgs }: let + forEachSystem = fn: nixpkgs.lib.genAttrs + [ "x86_64-linux" "aarch64-linux" ] + (system: fn system nixpkgs.legacyPackages.${system}); + in { + packages = forEachSystem (system: pkgs: rec { + quickshell-web = pkgs.callPackage ./default.nix {}; + default = quickshell-web; + }); + }; +} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..20d126e --- /dev/null +++ b/shell.nix @@ -0,0 +1,16 @@ +{ + pkgs ? import {}, + quickshell-web ? pkgs.callPackage ./default.nix {}, +}: pkgs.mkShell { + inputsFrom = [ quickshell-web ]; + + nativeBuildInputs = [ (pkgs.writeShellScriptBin "yarn-install-hack" '' + set -x + yarn install || true + mkdir -p node_modules/node/bin + ln -sf ${pkgs.nodejs}/bin/node node_modules/node/bin/node + yarn install + '') ]; + + YARN_NODE_LINKER = "node-modules"; +}