add some video component
This commit is contained in:
parent
8f4f86aa37
commit
4a3334895d
8 changed files with 166 additions and 4 deletions
|
@ -8,6 +8,7 @@ with lib;
|
||||||
imports = [
|
imports = [
|
||||||
./icecast.nix
|
./icecast.nix
|
||||||
./tts.nix
|
./tts.nix
|
||||||
|
./video.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
config = mkIf config.components.media.enable { };
|
config = mkIf config.components.media.enable { };
|
||||||
|
|
20
nixos/components/media/sanitize_folder.sh
Normal file
20
nixos/components/media/sanitize_folder.sh
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
# todo : add a dry-run
|
||||||
|
|
||||||
|
sanitize() {
|
||||||
|
shopt -s extglob;
|
||||||
|
|
||||||
|
filename=$(basename "$1")
|
||||||
|
directory=$(dirname "$1")
|
||||||
|
|
||||||
|
filename_clean="${filename//+([^[:alnum:]_-\\.])/_}"
|
||||||
|
|
||||||
|
if (test "$filename" != "$filename_clean")
|
||||||
|
then
|
||||||
|
mv -v --backup=numbered "$1" "$directory/$filename_clean"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
export -f sanitize
|
||||||
|
find $1 -depth -exec bash -c 'sanitize "$0"' {} \;
|
119
nixos/components/media/video.nix
Normal file
119
nixos/components/media/video.nix
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
# Lassulus streaming setup
|
||||||
|
# -------------------------
|
||||||
|
# ffmpeg \
|
||||||
|
# -f pulse \
|
||||||
|
# -i default \
|
||||||
|
# -vaapi_device /dev/dri/renderD128 \
|
||||||
|
# -f x11grab \
|
||||||
|
# -video_size 1366x768 \
|
||||||
|
# -i :0 \
|
||||||
|
# -vf 'hwupload,scale_vaapi=format=nv12' \
|
||||||
|
# -c:v h264_vaapi \
|
||||||
|
# -c:a aac \
|
||||||
|
# -b:a 96k \
|
||||||
|
# -af "highpass=f=200, lowpass=f=3000" \
|
||||||
|
# -qp 30 \
|
||||||
|
# -f flv \
|
||||||
|
# rtmp://lassul.us:1935/stream/nixos \
|
||||||
|
# ./rc3-output-$(date +%d%H%M%S).mp4
|
||||||
|
#
|
||||||
|
# Dann abspielen mit :
|
||||||
|
# mpv rtmp://lassul.us:1935/stream/nixos
|
||||||
|
|
||||||
|
# show keyboard input on desktop for screencasts
|
||||||
|
screenKey = pkgs.symlinkJoin {
|
||||||
|
name = "screen-keys";
|
||||||
|
paths =
|
||||||
|
let
|
||||||
|
screenKeyScript = { position ? "bottom", size ? "small", ... }:
|
||||||
|
pkgs.writeShellScriptBin "screenkeys-${position}-${size}" # sh
|
||||||
|
''
|
||||||
|
${pkgs.screenkey}/bin/screenkey \
|
||||||
|
--no-detach \
|
||||||
|
--bg-color '#fdf6e3' \
|
||||||
|
--font-color '#073642' \
|
||||||
|
-p ${position} \
|
||||||
|
-s ${size} \
|
||||||
|
"$@"
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
lib.flatten (lib.flip map [ "large" "small" "medium" ] (size:
|
||||||
|
lib.flip map [ "top" "center" "bottom" ]
|
||||||
|
(position: screenKeyScript { inherit size position; })));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
mpvReview =
|
||||||
|
let
|
||||||
|
moveToDir = key: dir: pkgs.writeText "move-with-${key}.lua" ''
|
||||||
|
tmp_dir = "${dir}"
|
||||||
|
|
||||||
|
function move_current_track_${key}()
|
||||||
|
track = mp.get_property("path")
|
||||||
|
os.execute("mkdir -p '" .. tmp_dir .. "'")
|
||||||
|
os.execute("mv '" .. track .. "' '" .. tmp_dir .. "'")
|
||||||
|
print("moved '" .. track .. "' to " .. tmp_dir)
|
||||||
|
mp.command("playlist-next")
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.add_key_binding("${key}", "move_current_track_${key}", move_current_track_${key})
|
||||||
|
'';
|
||||||
|
delete = moveToDir "D" "./.graveyard";
|
||||||
|
good = moveToDir "G" "./.good";
|
||||||
|
in
|
||||||
|
pkgs.writers.writeDashBin "mpv-review" ''
|
||||||
|
exec ${pkgs.mpv}/bin/mpv --no-config --script=${delete} --script=${good} "$@"
|
||||||
|
'';
|
||||||
|
|
||||||
|
alphaSafe = pkgs.writers.writeBashBin "alpha-safe" ''
|
||||||
|
export PATH=${pkgs.gnused}/bin:$PATH
|
||||||
|
echo "$1" | sed 's/[^a-zA-Z0-9]/-/g' | sed 's/--/-/g' | sed 's/-$//g'
|
||||||
|
'';
|
||||||
|
|
||||||
|
sanitizeFolder = pkgs.writers.writeBashBin "sanitize-folder" (fileContents ./sanitize_folder.sh);
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
options.components.media.video.enable = mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = config.components.media.enable;
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf (config.components.media.video.enable) {
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
unstable.youtube-dl
|
||||||
|
unstable.yt-dlp
|
||||||
|
mplayer
|
||||||
|
mpv
|
||||||
|
mpvReview
|
||||||
|
|
||||||
|
# sanitazion
|
||||||
|
alphaSafe
|
||||||
|
sanitizeFolder
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# to record your screen
|
||||||
|
# ---------------------
|
||||||
|
simplescreenrecorder
|
||||||
|
screenKey
|
||||||
|
obs-studio
|
||||||
|
|
||||||
|
# to transcode video material
|
||||||
|
# ---------------------------
|
||||||
|
handbrake
|
||||||
|
ffmpeg-full
|
||||||
|
|
||||||
|
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -73,7 +73,6 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.custom.video.enable = false;
|
|
||||||
programs.custom.steam.enable = true;
|
programs.custom.steam.enable = true;
|
||||||
services.printing.enable = true;
|
services.printing.enable = true;
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.custom.steam.enable = false;
|
programs.custom.steam.enable = false;
|
||||||
programs.custom.video.enable = false;
|
|
||||||
|
|
||||||
# keyboard fiddling
|
# keyboard fiddling
|
||||||
i18n.defaultLocale = "de_DE.UTF-8";
|
i18n.defaultLocale = "de_DE.UTF-8";
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
users.users.mainUser.extraGroups = [ "adbusers" "video" ];
|
users.users.mainUser.extraGroups = [ "adbusers" "video" ];
|
||||||
|
|
||||||
programs.custom.steam.enable = false;
|
programs.custom.steam.enable = false;
|
||||||
programs.custom.video.enable = false;
|
|
||||||
services.printing.enable = false;
|
services.printing.enable = false;
|
||||||
|
|
||||||
services.nginx.enable = true;
|
services.nginx.enable = true;
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
./programs/steam.nix
|
./programs/steam.nix
|
||||||
#./programs/taskwarrior.nix
|
#./programs/taskwarrior.nix
|
||||||
./programs/urxvt.nix
|
./programs/urxvt.nix
|
||||||
./programs/video.nix
|
#./programs/video.nix
|
||||||
./programs/vim.nix
|
./programs/vim.nix
|
||||||
./programs/xterm.nix
|
./programs/xterm.nix
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,29 @@ let
|
||||||
(position: screenKeyScript { inherit size position; })));
|
(position: screenKeyScript { inherit size position; })));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
mpvReview =
|
||||||
|
let
|
||||||
|
moveToDir = key: dir: pkgs.writeText "move-with-${key}.lua" ''
|
||||||
|
tmp_dir = "${dir}"
|
||||||
|
|
||||||
|
function move_current_track_${key}()
|
||||||
|
track = mp.get_property("path")
|
||||||
|
os.execute("mkdir -p '" .. tmp_dir .. "'")
|
||||||
|
os.execute("mv '" .. track .. "' '" .. tmp_dir .. "'")
|
||||||
|
print("moved '" .. track .. "' to " .. tmp_dir)
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.add_key_binding("${key}", "move_current_track_${key}", move_current_track_${key})
|
||||||
|
'';
|
||||||
|
delete = moveToDir "D" "./.graveyard";
|
||||||
|
good = moveToDir "G" "./.good";
|
||||||
|
in
|
||||||
|
pkgs.writers.writeDashBin "mpv-review" ''
|
||||||
|
exec ${pkgs.mpv}/bin/mpv --no-config --script=${delete} --script=${good} "$@"
|
||||||
|
'';
|
||||||
|
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -61,6 +84,8 @@ in
|
||||||
unstable.yt-dlp
|
unstable.yt-dlp
|
||||||
mplayer
|
mplayer
|
||||||
mpv
|
mpv
|
||||||
|
mpvReview
|
||||||
|
|
||||||
|
|
||||||
# to record your screen
|
# to record your screen
|
||||||
# ---------------------
|
# ---------------------
|
||||||
|
|
Loading…
Reference in a new issue