{ description = "A Wayland status bar for Sway, built with Quickshell"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; # Upstream Quickshell, tracked directly so we get layer-surface fixes # (e.g. clean buffers on output transform / rotation) ahead of nixpkgs. quickshell = { url = "git+https://git.outfoxxed.me/quickshell/quickshell"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, quickshell }: let systems = [ "x86_64-linux" "aarch64-linux" ]; forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f nixpkgs.legacyPackages.${system}); in { packages = forAllSystems (pkgs: let # Quickshell from the upstream flake rather than nixpkgs. qsPkg = quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default; # Runtime tools the bar relies on: discover.sh (one-shot hardware # probe), the periodic `df` for disk usage, and `ss` (iproute2) for # the per-process network drawer (topnet.sh). Everything else is read # from /proc and /sys directly in QML. runtimeInputs = [ qsPkg pkgs.bash pkgs.coreutils # df, cat pkgs.iproute2 # ss, for topnet.sh per-process network usage ]; # Self-contained font set so Nerd Font glyphs always render, # regardless of the host's installed fonts. fontsConf = pkgs.makeFontsConf { fontDirectories = [ pkgs.nerd-fonts.jetbrains-mono pkgs.nerd-fonts.symbols-only pkgs.inter ]; }; bar = pkgs.writeShellApplication { name = "quickshell-bar"; inherit runtimeInputs; text = '' export FONTCONFIG_FILE=${fontsConf} # Force the Wayland QPA plugin: Qt defaults to xcb (X11) on Linux, # so without this the bar comes up under XWayland. Honour an # explicit override if the caller already set one. export QT_QPA_PLATFORM="''${QT_QPA_PLATFORM:-wayland}" exec quickshell --path ${self} "$@" ''; }; in { default = bar; quickshell-bar = bar; }); apps = forAllSystems (pkgs: { default = { type = "app"; program = "${self.packages.${pkgs.stdenv.hostPlatform.system}.default}/bin/quickshell-bar"; }; }); devShells = forAllSystems (pkgs: { default = pkgs.mkShell { packages = [ quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default pkgs.bash pkgs.coreutils pkgs.iproute2 # ss, for topnet.sh pkgs.nerd-fonts.jetbrains-mono pkgs.inter pkgs.qt6.qtdeclarative # qmlls / qmlformat for editing ]; shellHook = '' echo "quickshell $(quickshell --version 2>/dev/null | head -1)" echo "Run the bar with: quickshell --path ." ''; }; }); formatter = forAllSystems (pkgs: pkgs.nixpkgs-fmt); }; }