{ outputs = { nixpkgs, ... }: let spond = { rustPlatform, rustfmt, clippy, pkg-config, openssl, ... }: rustPlatform.buildRustPackage { pname = "tb-spond-rs"; version = "0.1.0"; src = ./.; cargoLock.lockFile = ./Cargo.lock; nativeBuildInputs = [ pkg-config ]; propagatedBuildInputs = [ openssl.dev ]; }; allpkgs = pkgs: pkgs.extend (_: _: nixpkgs.lib.attrsets.filterAttrs (name: _: name != "default") (packages' pkgs)); packages = system: packages'; packages' = pkgs': let pkgs = allpkgs pkgs'; in { default = pkgs.spond; spond = pkgs.callPackage spond {}; }; devShells = system: pkgs': let pkgs = allpkgs pkgs'; in builtins.mapAttrs (devShell pkgs) (packages pkgs'); devShell = pkgs: name: pkg: pkgs.mkShell { buildInputs = with pkgs; [ cargo cargo-bloat cargo-machete cargo-workspaces cargo-unused-features cargo-udeps cargo-audit cargo-diet cargo-duplicates cargo-expand cargo-flamegraph clippy lldb gdb (python3.withPackages (py: [ py.pyyaml ])) rustc rustfmt openssl.dev ] ++ pkg.buildInputs; nativeBuildInputs = pkg.nativeBuildInputs; shellHook = '' printf 'Dev shell for %s ready!\n' '${pkg.name}' ''; }; nixosModule = { pkgs, lib, config, ... }: let cli = lib.getExe (packages' pkgs).spond; in { config.systemd.timers."tb-spond-rs" = { description = "[TB] choose who is allowed to participate this week."; timerConfig.OnCalendar = "Sat 18:00:00"; wantedBy = [ "timers.target" ]; }; config.systemd.services."tb-spond-rs" = { description = "[TB] choose who is allowed to participate this week."; after = [ "network.target" ]; wants = [ "network.target" ]; serviceConfig = { Type = "simple"; ExecStart = lib.escapeShellArgs [ cli "--email" "jonas.rabenstein@web.de" "--heading" "Schwimmtraining Donnerstag" ]; EnvironmentFile=[ "%d/environment" ]; User = "tb-spond-rs"; Group = "tb-spond-rs"; DynamicUser = true; RuntimeDirectory = "tb-spond-rs"; StateDirectory = "tb-spond-rs"; ProtectSystem = "full"; ProtectHome = true; NoNewPrivileges = true; PrivateTmp = true; PrivateDevices = true; }; }; }; in { packages = builtins.mapAttrs packages nixpkgs.legacyPackages; devShells = builtins.mapAttrs devShells nixpkgs.legacyPackages; nixosModules = { default = nixosModule; spond = nixosModule; } }; }