{ description = "WebTray Flake"; inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; }; outputs = { self, nixpkgs }: let pkgs = import nixpkgs { system = "x86_64-linux"; }; in { packages.x86_64-linux.default = self.packages.x86_64-linux.webtray; packages.x86_64-linux.webtray = pkgs.stdenv.mkDerivation { name = "webtray"; src = self; buildPhase = "qmake . && make"; installPhase = "mkdir -p $out/bin; install -t $out/bin webtray"; nativeBuildInputs = [ pkgs.qt6.wrapQtAppsHook pkgs.makeWrapper ]; buildInputs = with pkgs; [ pkgs.qt6.qmake pkgs.qt6.qtwebengine pkgs.qt6.qtbase pkgs.qt6.qtwayland pkgs.qt6.qtmultimedia ]; }; packages.x86_64-linux.webtrayctl = let script = pkgs.writeScriptBin "webtrayctl" (builtins.readFile ./webtrayctl); in pkgs.stdenv.mkDerivation rec { name = "webtrayctl"; src = script; paths = [ script ]; buildInputs = [ pkgs.makeWrapper ]; buildPhase = ""; installPhase = "mkdir -p $out/bin/; install -t $out/bin bin/webtrayctl"; }; overlays.default = final: prev: { inherit (self.packages.${prev.stdenv.hostPlatform.system}) webtray; inherit (self.packages.${prev.stdenv.hostPlatform.system}) webtrayctl; }; nixosModules.default = { pkgs, lib, config, ... }: { options.webtray.instances = lib.mkOption { type = lib.types.attrsOf ( lib.types.submodule { options = { url = lib.mkOption { description = "URL of the WebTray instance"; type = lib.types.strMatching "http[s]?://[a-z0-9.]*:?[0-9]*"; }; autoStart = lib.mkOption { description = "WebTray Instances to start on login"; type = lib.types.bool; default = true; }; openInWindow = lib.mkOption { description = "Open Instance as Window"; type = lib.types.bool; default = false; }; }; } ); }; config = { environment.systemPackages = [ self.packages.${pkgs.stdenv.hostPlatform.system}.webtray ]; systemd.user.services = builtins.mapAttrs (name: value: { enable = true; requires = if value.autoStart then [ "tray.target" ] else [ ]; wantedBy = [ "graphical-session.target" ]; description = "WebTray Instance for ${name}"; serviceConfig = { Type = "simple"; Restart = "on-failure"; ExecStart = "${self.packages.${pkgs.stdenv.hostPlatform.system}.default}/bin/webtray ${value.url}${ if value.openInWindow then " --open-at-startup" else "" }"; }; }) config.webtray.instances; }; }; }; }