1
0
Fork 0
This commit is contained in:
Lukas Wurzinger 2025-05-28 02:10:21 +02:00
parent 0c6b26ce38
commit 2d255153fc
No known key found for this signature in database
5 changed files with 48 additions and 51 deletions

6
flake.lock generated
View file

@ -20,11 +20,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1743964447, "lastModified": 1748190013,
"narHash": "sha256-nEo1t3Q0F+0jQ36HJfbJtiRU4OI+/0jX/iITURKe3EE=", "narHash": "sha256-R5HJFflOfsP5FBtk+zE8FpL8uqE7n62jqOsADvVshhE=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "063dece00c5a77e4a0ea24e5e5a5bd75232806f8", "rev": "62b852f6c6742134ade1abdd2a21685fd617a291",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -15,12 +15,7 @@
flake-parts.lib.mkFlake {inherit inputs;} { flake-parts.lib.mkFlake {inherit inputs;} {
systems = ["x86_64-linux" "aarch64-linux"]; systems = ["x86_64-linux" "aarch64-linux"];
flake.nixosModules = let flake.nixosModules.default = import ./module.nix self;
musicomp = import ./nixos/musicomp self;
in {
inherit musicomp;
default = musicomp;
};
perSystem = { perSystem = {
pkgs, pkgs,
@ -35,14 +30,7 @@
]; ];
}; };
packages = let packages.default = pkgs.callPackage ./package.nix {};
packages = lib.packagesFromDirectoryRecursive {
inherit (pkgs) callPackage;
directory = ./packages;
};
in packages // {
default = packages.musicomp;
};
}; };
}; };
} }

View file

@ -5,6 +5,7 @@ self: {
config, config,
... ...
}: let }: let
cfg = config.services.musicomp;
inherit (lib) types; inherit (lib) types;
inherit (utils.systemdUtils.unitOptions) unitOption; inherit (utils.systemdUtils.unitOptions) unitOption;
in { in {
@ -73,43 +74,48 @@ in {
}; };
config = { config = {
systemd.services = systemd = lib.mkMerge (
lib.mapAttrs' lib.mapAttrsToList (
( jobName: job:
name: job: let
lib.nameValuePair "musicomp-jobs-${name}" { systemdName = "musicomp-job-${jobName}";
wantedBy = ["multi-user.target"]; description = "musicomp job ${jobName}";
restartIfChanged = false; in
{
timers.${systemdName} = {
wantedBy = [ "timers.target" ];
inherit description;
inherit (job) timerConfig;
};
services.${systemdName} = {
inherit description;
serviceConfig = {
Type = "oneshot";
User = "root";
Group = "root";
};
script = '' script = ''
${lib.optionalString job.inhibitsSleep '' ${lib.optionalString job.inhibitsSleep ''
${lib.getExe' pkgs.systemd "systemd-inhibit"} \ ${lib.getExe' config.systemd.package "systemd-inhibit"} \
--mode block \ --mode block \
--who musicomp \ --who ${lib.escapeShellArg systemdName} \
--what sleep \ --what sleep \
--why ${lib.escapeShellArg "Scheduled musicomp ${name}"} --why ${lib.escapeShellArg "Scheduled musicomp job ${jobName}"}
''} ''}
${lib.getExe job.package} \ ${lib.getExe job.package} \
${lib.optionalString (job.workers > 0) "--workers ${job.workers}"} \ ${lib.optionalString (job.workers > 0) "--workers ${lib.escapeShellArg job.workers}"} \
--verbose \ --verbose \
-- ${job.music} ${job.comp} -- ${lib.escapeShellArg job.music} ${lib.escapeShellArg job.comp}
''; '';
postStart = job.post; postStart = job.post;
};
serviceConfig.Type = "oneshot"; }
} ) cfg.jobs
) );
config.services.musicomp.jobs;
systemd.timers =
lib.mapAttrs'
(name: job:
lib.nameValuePair "musicomp-jobs-${name}" {
wantedBy = ["timers.target"];
inherit (job) timerConfig;
})
(lib.filterAttrs (_: job: job.timerConfig != null) config.services.musicomp.jobs);
}; };
} }

View file

@ -7,7 +7,7 @@ python3Packages.buildPythonApplication {
pname = "musicomp"; pname = "musicomp";
version = "0.1.0"; version = "0.1.0";
src = ../../.; src = ./.;
pyproject = true; pyproject = true;

View file

@ -90,6 +90,9 @@ def main():
src_dir = args.music[0] # pyright: ignore[reportUnknownMemberType] src_dir = args.music[0] # pyright: ignore[reportUnknownMemberType]
dst_dir = args.comp[0] # pyright: ignore[reportUnknownMemberType] dst_dir = args.comp[0] # pyright: ignore[reportUnknownMemberType]
if args.verbose >= 1 or args.interactive:
print("Planning...", file=sys.stderr)
plan = list( plan = list(
Todo.plan( Todo.plan(
src_dir, src_dir,