{ description = "swaytreesave flake"; inputs = { flake-schemas.url = "https://flakehub.com/f/DeterminateSystems/flake-schemas/*"; nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/*"; }; outputs = { self, flake-schemas, nixpkgs }: let supportedSystems = [ "x86_64-linux" ]; forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f { pkgs = import nixpkgs { inherit system; }; }); in { schemas = flake-schemas.schemas; devShells = forEachSupportedSystem ({ pkgs }: { default = pkgs.mkShell { packages = with pkgs; [ curl git jq wget nixpkgs-fmt ]; }; }); packages = forEachSupportedSystem ({ pkgs }: { default = let pname = "swaytreesave"; version = "0.4.0"; src = pkgs.fetchFromGitHub { owner = "fabienjuif"; repo = "swaytreesave"; rev = "v${version}"; sha256 = "sha256-aAJBbauOiFERABF13hMhxyvRBzcx5c1F+vbm/U+JS8o="; }; in pkgs.rustPlatform.buildRustPackage { inherit pname version src; cargoLock = { lockFile = "${src}/Cargo.lock"; }; meta = { description = "CLI to save and load your compositors tree/layout"; mainProgram = "swaytreesave"; homepage = "https://github.com/fabienjuif/swaytreesave"; maintainers = [ "wymillerlinux" ]; platforms = [ "x86_64-linux" ]; changelog = "https://github.com/fabienjuif/swaytreesave/releases/tag/v${version}"; }; }; }); homeManagerModules.default = { config, lib, pkgs, ... }: with lib; let cfg = config.programs.swaytreesave; in { options.programs.swaytreesave = { enable = mkEnableOption "swaytreesave"; package = mkOption { type = types.package; default = self.packages.${pkgs.system}.default; description = "The swaytreesave package to use."; }; }; config = mkIf cfg.enable { home.packages = [ cfg.package ]; }; }; }; }