diff --git a/hosts/workstation/configuration.nix b/hosts/workstation/configuration.nix index 6fae2be..074e446 100644 --- a/hosts/workstation/configuration.nix +++ b/hosts/workstation/configuration.nix @@ -46,6 +46,11 @@ in { scripts = { tasks.enable = true; run.enable = true; + split-dir.enable = true; + pika-list.enable = true; + download.enable = true; + ffmpreg.enable = true; + ffmpeg4discord.enable = true; }; }; @@ -93,6 +98,11 @@ in { users = { groups.nixremote.gid = 555; users = { + jawz.packages = (with pkgs; [ + gocryptfs # encrypted filesystem! shhh!!! + torrenttools # create torrent files from the terminal! + vcsi # video thumbnails for torrents, can I replace it with ^? + ]); nixremote = { isNormalUser = true; createHome = true; @@ -103,34 +113,6 @@ in { "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGrC7sVvDT0is2oq/H1Do99LPaQKvyGMAsrF6/fuf1aP root@miniserver" ]; }; - jawz = { - packages = (with pkgs; [ - gocryptfs # encrypted filesystem! shhh!!! - - torrenttools # create torrent files from the terminal! - vcsi # video thumbnails for torrents, can I replace it with ^? - - (writeScriptBin "ffmpeg4discord" - (builtins.readFile ../../scripts/ffmpeg4discord.py)) - (writeScriptBin "ffmpreg" - (builtins.readFile ../../scripts/ffmpreg.sh)) - (writeScriptBin "split-dir" - (builtins.readFile ../../scripts/split-dir.sh)) - (writeScriptBin "pika-list" - (builtins.readFile ../../scripts/pika-list.sh)) - - ]) ++ (with pkgs.python3Packages; - [ - (buildPythonApplication rec { - pname = "download"; - version = "1.5"; - src = ../../scripts/download/.; - doCheck = false; - buildInputs = [ setuptools ]; - propagatedBuildInputs = [ pyyaml types-pyyaml ]; - }) - ]); - }; }; }; diff --git a/modules/scripts.nix b/modules/scripts.nix index 788792e..c462200 100644 --- a/modules/scripts.nix +++ b/modules/scripts.nix @@ -1,7 +1,20 @@ { config, lib, pkgs, ... }: { - imports = [ ./scripts/tasks.nix ./scripts/run.nix ]; + imports = [ + ./scripts/run.nix + ./scripts/tasks.nix + ./scripts/split-dir.nix + ./scripts/pika-list.nix + ./scripts/download.nix + ./scripts/ffmpreg.nix + ./scripts/ffmpeg4discord.nix + ]; my.scripts = { - tasks.enable = lib.mkDefault false; run.enable = lib.mkDefault false; + tasks.enable = lib.mkDefault false; + split-dir.enable = lib.mkDefault false; + pika-list.enable = lib.mkDefault false; + download.enable = lib.mkDefault false; + ffmpreg.enable = lib.mkDefault false; + ffmpeg4discord.enable = lib.mkDefault false; }; } diff --git a/modules/scripts/base.nix b/modules/scripts/base.nix index d2d98a4..1ddaa58 100644 --- a/modules/scripts/base.nix +++ b/modules/scripts/base.nix @@ -1,51 +1,59 @@ { config, lib, pkgs, ... }: { - options.my.script = { - install = lib.mkEnableOption "Whether to install the script package"; - service = lib.mkEnableOption "Whether to enable the script service"; - name = lib.mkOption { - type = lib.types.str; - default = "my-script"; - description = "Name of the script."; - }; - timer = lib.mkOption { - type = lib.types.str; - default = "*:0/10"; - description = "Systemd timer schedule."; - }; - description = lib.mkOption { - type = lib.types.str; - default = "A service that runs a script."; - description = "Description of the service."; - }; - package = lib.mkOption { - type = lib.types.package; - default = pkgs.writeScriptBin "my-script" "echo Hello World"; - description = "Package containing the executable script."; - }; - }; - config = { - users.users.jawz = lib.mkIf config.my.script.install { - packages = [ config.my.script.package ]; - }; - systemd.user = with config.my.script; - lib.mkIf config.my.script.service { - services."${name}" = { - restartIfChanged = true; - description = description; - wantedBy = [ "default.target" ]; - path = [ pkgs.nix package ]; - serviceConfig = { - Restart = "on-failure"; - RestartSec = 30; - ExecStart = "${package}/bin/${name}"; - }; + options.my.scripts = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule ({ + options = { + enable = lib.mkEnableOption "Whether to enable this script"; + install = lib.mkEnableOption "Whether to install the script package"; + service = lib.mkEnableOption "Whether to enable the script service"; + name = lib.mkOption { + type = lib.types.str; + description = "Name of the script."; }; - timers."${name}" = { - enable = true; - description = description; - wantedBy = [ "timers.target" ]; - timerConfig = { OnCalendar = timer; }; + timer = lib.mkOption { + type = lib.types.str; + default = "*:0"; + description = "Systemd timer schedule."; + }; + description = lib.mkOption { + type = lib.types.str; + description = "Description of the service."; + }; + package = lib.mkOption { + type = lib.types.package; + description = "Package containing the executable script."; }; }; + })); + default = { }; + description = "Configuration for multiple scripts."; + }; + + config = lib.mkIf (lib.any (s: s.enable) (lib.attrValues config.my.scripts)) { + users.users.jawz.packages = lib.flatten (lib.mapAttrsToList (name: script: + lib.optional (script.enable && script.install) script.package) + config.my.scripts); + + systemd.user.services = lib.mapAttrs' (name: script: + lib.nameValuePair "${script.name}" + (lib.mkIf (script.enable && script.service) { + restartIfChanged = true; + description = script.description; + wantedBy = [ "default.target" ]; + path = [ pkgs.nix script.package ]; + serviceConfig = { + Restart = "on-failure"; + RestartSec = 30; + ExecStart = "${script.package}/bin/${script.name}"; + }; + })) config.my.scripts; + + systemd.user.timers = lib.mapAttrs' (name: script: + lib.nameValuePair "${script.name}" + (lib.mkIf (script.enable && script.service) { + enable = true; + description = script.description; + wantedBy = [ "timers.target" ]; + timerConfig = { OnCalendar = script.timer; }; + })) config.my.scripts; }; } diff --git a/modules/scripts/download.nix b/modules/scripts/download.nix new file mode 100644 index 0000000..7771b74 --- /dev/null +++ b/modules/scripts/download.nix @@ -0,0 +1,21 @@ +{ config, lib, pkgs, ... }: { + imports = [ ./base.nix ]; + config = { + users.users.jawz.packages = (with pkgs; [ gallery-dl yt-dlp ]); + my.scripts.download = { + enable = true; + install = true; + service = false; + name = "download"; + package = with pkgs.python3Packages; + (buildPythonApplication rec { + pname = "download"; + version = "2.0"; + src = ../../scripts/download/.; + doCheck = false; + buildInputs = [ setuptools ]; + propagatedBuildInputs = [ pyyaml types-pyyaml ]; + }); + }; + }; +} diff --git a/modules/scripts/ffmpeg4discord.nix b/modules/scripts/ffmpeg4discord.nix new file mode 100644 index 0000000..4fb3f98 --- /dev/null +++ b/modules/scripts/ffmpeg4discord.nix @@ -0,0 +1,11 @@ +{ config, lib, pkgs, ... }: { + imports = [ ./base.nix ]; + config.my.scripts.ffmpeg4discord = { + enable = true; + install = true; + service = false; + name = "ffmpeg4discord"; + package = pkgs.writeScriptBin "ffmpeg4discord" + (builtins.readFile ../../scripts/ffmpeg4discord.py); + }; +} diff --git a/modules/scripts/ffmpreg.nix b/modules/scripts/ffmpreg.nix new file mode 100644 index 0000000..b5b232e --- /dev/null +++ b/modules/scripts/ffmpreg.nix @@ -0,0 +1,11 @@ +{ config, lib, pkgs, ... }: { + imports = [ ./base.nix ]; + config.my.scripts.ffmpreg = { + enable = true; + install = true; + service = false; + name = "ffmpreg"; + package = pkgs.writeScriptBin "ffmpreg" + (builtins.readFile ../../scripts/ffmpreg.sh); + }; +} diff --git a/modules/scripts/pika-list.nix b/modules/scripts/pika-list.nix new file mode 100644 index 0000000..e87218e --- /dev/null +++ b/modules/scripts/pika-list.nix @@ -0,0 +1,11 @@ +{ config, lib, pkgs, ... }: { + imports = [ ./base.nix ]; + config.my.scripts.pika-list = { + enable = true; + install = true; + service = false; + name = "pika-list"; + package = pkgs.writeScriptBin "pika-list" + (builtins.readFile ../../scripts/pika-list.sh); + }; +} diff --git a/modules/scripts/run.nix b/modules/scripts/run.nix index 99fb702..6c716ff 100644 --- a/modules/scripts/run.nix +++ b/modules/scripts/run.nix @@ -1,11 +1,11 @@ { config, lib, pkgs, ... }: { imports = [ ./base.nix ]; - options.my.scripts.run.enable = lib.mkEnableOption "enable"; - config = lib.mkIf config.my.scripts.run.enable { - my.script = { - install = true; - package = - pkgs.writeScriptBin "run" (builtins.readFile ../../scripts/run.sh); - }; + config.my.scripts.run = { + enable = true; + install = true; + service = false; + name = "run"; + package = + pkgs.writeScriptBin "run" (builtins.readFile ../../scripts/run.sh); }; } diff --git a/modules/scripts/split-dir.nix b/modules/scripts/split-dir.nix new file mode 100644 index 0000000..4bff2ed --- /dev/null +++ b/modules/scripts/split-dir.nix @@ -0,0 +1,11 @@ +{ config, lib, pkgs, ... }: { + imports = [ ./base.nix ]; + config.my.scripts.split-dir = { + enable = true; + install = true; + service = false; + name = "split-dir"; + package = pkgs.writeScriptBin "split-dir" + (builtins.readFile ../../scripts/split-dir.sh); + }; +} diff --git a/modules/scripts/tasks.nix b/modules/scripts/tasks.nix index cc2b2a7..38678b9 100644 --- a/modules/scripts/tasks.nix +++ b/modules/scripts/tasks.nix @@ -1,15 +1,13 @@ { config, lib, pkgs, ... }: { imports = [ ./base.nix ]; - options.my.scripts.tasks.enable = lib.mkEnableOption "enable"; - config = lib.mkIf config.my.scripts.tasks.enable { - my.script = { - install = true; - service = true; - name = "tasks"; - timer = "*:0/10"; - description = "runs a bunch of organizing tasks on selected directories"; - package = - pkgs.writeScriptBin "tasks" (builtins.readFile ../../scripts/tasks.sh); - }; + config.my.scripts.tasks = { + enable = true; + install = true; + service = true; + name = "tasks"; + timer = "*:0/10"; + description = "Runs a bunch of organizing tasks on selected directories"; + package = + pkgs.writeScriptBin "tasks" (builtins.readFile ../../scripts/tasks.sh); }; }