{ description = "att_menu — a bottom desktop panel for wlroots compositors, built on Quickshell"; inputs = { # Pinned to the current NixOS stable release. nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05"; }; outputs = { self, nixpkgs }: let systems = [ "x86_64-linux" "aarch64-linux" ]; forAllSystems = fn: nixpkgs.lib.genAttrs systems (system: fn nixpkgs.legacyPackages.${system}); in { packages = forAllSystems (pkgs: rec { default = att_menu; att_menu = pkgs.stdenvNoCC.mkDerivation { pname = "att_menu"; version = "0.1.0"; src = ./.; nativeBuildInputs = [ pkgs.makeWrapper ]; dontConfigure = true; dontBuild = true; installPhase = '' runHook preInstall mkdir -p $out/share/att_menu cp -r shell.qml config components modules services $out/share/att_menu/ makeWrapper ${pkgs.lib.getExe' pkgs.quickshell "qs"} $out/bin/att_menu \ --add-flags "--path $out/share/att_menu" \ --suffix PATH : ${ pkgs.lib.makeBinPath [ # loginctl and systemctl back the default power actions. The # session's own PATH is searched first, so a compositor's # swaymsg/hyprctl/niri is still picked up for logging out. pkgs.systemd ] } \ --suffix XDG_DATA_DIRS : "${pkgs.adwaita-icon-theme}/share:${pkgs.hicolor-icon-theme}/share" runHook postInstall ''; meta = { description = "Bottom desktop panel for wlroots compositors, built on Quickshell"; mainProgram = "att_menu"; platforms = pkgs.lib.platforms.linux; }; }; }); apps = forAllSystems (pkgs: { default = { type = "app"; program = pkgs.lib.getExe self.packages.${pkgs.stdenv.hostPlatform.system}.att_menu; }; }); devShells = forAllSystems (pkgs: { default = pkgs.mkShell { packages = [ pkgs.quickshell # qmlls / qmlformat for editing the QML in place. pkgs.qt6.qtdeclarative ]; shellHook = '' echo "att_menu dev shell — run the panel from the working tree with:" echo " qs --path ." ''; }; }); formatter = forAllSystems (pkgs: pkgs.nixfmt-tree); }; }