diff --git a/flake.nix b/flake.nix index 3c75b02b..33c73aab 100644 --- a/flake.nix +++ b/flake.nix @@ -41,10 +41,11 @@ nixpkgs.lib.genAttrs [ "aarch64-darwin" "aarch64-linux" "x86_64-darwin" "x86_64-linux" ] ( system: fn system nixpkgs.legacyPackages.${system} ); - buildDmsPkgs = pkgs: { - dms-shell = self.packages.${pkgs.stdenv.hostPlatform.system}.default; - quickshell = quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default; - }; + forEachLinuxSystem = + fn: + nixpkgs.lib.genAttrs [ "aarch64-linux" "x86_64-linux" ] ( + system: fn system nixpkgs.legacyPackages.${system} + ); mkModuleWithDmsPkgs = modulePath: args@{ pkgs, ... }: @@ -53,6 +54,7 @@ (import modulePath (args // { dmsPkgs = buildDmsPkgs pkgs; })) ]; }; + mkQmlImportPath = pkgs: qmlPkgs: pkgs.lib.concatStringsSep ":" (map (o: "${o}/${pkgs.qt6.qtbase.qtQmlPrefix}") qmlPkgs); @@ -69,10 +71,11 @@ qtimageformats kimageformats ]; - in - { - packages = forEachSystem ( - system: pkgs: + + # Allows downstream modules to provide their own 'pkgs' (with overlays) + # instead of being forced to use the flake's locked nixpkgs. + mkDmsShell = + pkgs: let mkDate = longDate: @@ -90,86 +93,96 @@ in "${cleanVersion}${dateSuffix}${revSuffix}"; in - { - dms-shell = pkgs.lib.makeOverridable ( + pkgs.lib.makeOverridable ( + { + extraQtPackages ? [ ], + }: + (pkgs.buildGoModule.override { go = goForPkgs pkgs; }) ( + let + rootSrc = ./.; + qtPackages = (qmlPkgs pkgs) ++ extraQtPackages; + in { - extraQtPackages ? [ ], - }: - (pkgs.buildGoModule.override { go = goForPkgs pkgs; }) ( - let - rootSrc = ./.; - qtPackages = (qmlPkgs pkgs) ++ extraQtPackages; - in - { - inherit version; - pname = "dms-shell"; - src = ./core; - vendorHash = "sha256-cVUJXgzYMRSM0od1xzDVkMTdxHu3OIQX2bQ8AJbGQ1Q="; + inherit version; + pname = "dms-shell"; + src = ./core; + vendorHash = "sha256-cVUJXgzYMRSM0od1xzDVkMTdxHu3OIQX2bQ8AJbGQ1Q="; - subPackages = [ "cmd/dms" ]; + subPackages = [ "cmd/dms" ]; - ldflags = [ - "-s" - "-w" - "-X 'main.Version=${version}'" - ]; + ldflags = [ + "-s" + "-w" + "-X 'main.Version=${version}'" + ]; - nativeBuildInputs = with pkgs; [ - installShellFiles - makeWrapper - ]; + nativeBuildInputs = with pkgs; [ + installShellFiles + makeWrapper + ]; - postInstall = '' - mkdir -p $out/share/quickshell/dms - cp -r ${rootSrc}/quickshell/. $out/share/quickshell/dms/ + postInstall = '' + mkdir -p $out/share/quickshell/dms + cp -r ${rootSrc}/quickshell/. $out/share/quickshell/dms/ - chmod u+w $out/share/quickshell/dms/VERSION - echo "${version}" > $out/share/quickshell/dms/VERSION + chmod u+w $out/share/quickshell/dms/VERSION + echo "${version}" > $out/share/quickshell/dms/VERSION - # Install desktop file and icon - install -D ${rootSrc}/assets/dms-open.desktop \ - $out/share/applications/dms-open.desktop - install -D ${rootSrc}/core/assets/danklogo.svg \ - $out/share/hicolor/scalable/apps/danklogo.svg + # Install desktop file and icon + install -D ${rootSrc}/assets/dms-open.desktop \ + $out/share/applications/dms-open.desktop + install -D ${rootSrc}/core/assets/danklogo.svg \ + $out/share/hicolor/scalable/apps/danklogo.svg - wrapProgram $out/bin/dms \ - --add-flags "-c $out/share/quickshell/dms" \ - --prefix "NIXPKGS_QT6_QML_IMPORT_PATH" ":" "${mkQmlImportPath pkgs qtPackages}" \ - --prefix "QT_PLUGIN_PATH" ":" "${mkQtPluginPath pkgs qtPackages}" + wrapProgram $out/bin/dms \ + --add-flags "-c $out/share/quickshell/dms" \ + --prefix "NIXPKGS_QT6_QML_IMPORT_PATH" ":" "${mkQmlImportPath pkgs qtPackages}" \ + --prefix "QT_PLUGIN_PATH" ":" "${mkQtPluginPath pkgs qtPackages}" - install -Dm644 ${rootSrc}/assets/systemd/dms.service \ - $out/lib/systemd/user/dms.service + install -Dm644 ${rootSrc}/assets/systemd/dms.service \ + $out/lib/systemd/user/dms.service - substituteInPlace $out/lib/systemd/user/dms.service \ - --replace-fail /usr/bin/dms $out/bin/dms \ - --replace-fail /usr/bin/pkill ${pkgs.procps}/bin/pkill + substituteInPlace $out/lib/systemd/user/dms.service \ + --replace-fail /usr/bin/dms $out/bin/dms \ + --replace-fail /usr/bin/pkill ${pkgs.procps}/bin/pkill - substituteInPlace $out/share/quickshell/dms/Modules/Greetd/assets/dms-greeter \ - --replace-fail /bin/bash ${pkgs.bashInteractive}/bin/bash + substituteInPlace $out/share/quickshell/dms/Modules/Greetd/assets/dms-greeter \ + --replace-fail /bin/bash ${pkgs.bashInteractive}/bin/bash - substituteInPlace $out/share/quickshell/dms/assets/pam/fprint \ - --replace-fail pam_fprintd.so ${pkgs.fprintd}/lib/security/pam_fprintd.so + substituteInPlace $out/share/quickshell/dms/assets/pam/fprint \ + --replace-fail pam_fprintd.so ${pkgs.fprintd}/lib/security/pam_fprintd.so - installShellCompletion --cmd dms \ - --bash <($out/bin/dms completion bash) \ - --fish <($out/bin/dms completion fish) \ - --zsh <($out/bin/dms completion zsh) - ''; + substituteInPlace $out/share/quickshell/dms/assets/pam/u2f \ + --replace-fail pam_u2f.so ${pkgs.pam_u2f}/lib/security/pam_u2f.so - meta = { - description = "Desktop shell for wayland compositors built with Quickshell & GO"; - homepage = "https://danklinux.com"; - changelog = "https://github.com/AvengeMedia/DankMaterialShell/releases/tag/v${version}"; - license = pkgs.lib.licenses.mit; - mainProgram = "dms"; - platforms = pkgs.lib.platforms.linux; - }; - } - ) - ) { }; + installShellCompletion --cmd dms \ + --bash <($out/bin/dms completion bash) \ + --fish <($out/bin/dms completion fish) \ + --zsh <($out/bin/dms completion zsh) + ''; + meta = { + description = "Desktop shell for wayland compositors built with Quickshell & GO"; + homepage = "https://danklinux.com"; + changelog = "https://github.com/AvengeMedia/DankMaterialShell/releases/tag/v${version}"; + license = pkgs.lib.licenses.mit; + mainProgram = "dms"; + platforms = pkgs.lib.platforms.linux; + }; + } + ) + ) { }; + + buildDmsPkgs = pkgs: { + dms-shell = mkDmsShell pkgs; + quickshell = quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default; + }; + in + { + packages = forEachSystem ( + system: pkgs: { + dms-shell = mkDmsShell pkgs; quickshell = quickshell.packages.${system}.default; - default = self.packages.${system}.dms-shell; } );