feat(desktop): move media-player config to nixos modules
This commit is contained in:
parent
e6a60c257c
commit
f1c2986c5c
5 changed files with 27 additions and 198 deletions
|
@ -1,30 +0,0 @@
|
||||||
{
|
|
||||||
osConfig,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
{
|
|
||||||
config = lib.mkMerge [
|
|
||||||
(lib.mkIf (osConfig.desktop.media-player == "vlc") {
|
|
||||||
home.packages = lib.singleton pkgs.vlc;
|
|
||||||
home.file.".local/share/vlc/lua/extensions/vlc-play-next.lua".source = ./vlc-play-next.lua;
|
|
||||||
})
|
|
||||||
(lib.mkIf (osConfig.desktop.media-player == "mpv") {
|
|
||||||
programs.mpv = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.mpv-unwrapped.wrapper {
|
|
||||||
scripts = with pkgs.mpvScripts; [
|
|
||||||
sponsorblock
|
|
||||||
];
|
|
||||||
mpv = pkgs.mpv-unwrapped.override {
|
|
||||||
waylandSupport = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
config = {
|
|
||||||
profile = "high-quality";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,166 +0,0 @@
|
||||||
function descriptor()
|
|
||||||
return {
|
|
||||||
title = "Play Next in Folder",
|
|
||||||
version = "1.0",
|
|
||||||
author = "Mindconstructor",
|
|
||||||
url = "http://www.videolan.org",
|
|
||||||
shortdesc = "Play Next in Folder",
|
|
||||||
description = "This extension plays the next media file in the directory of the last ended video file.",
|
|
||||||
capabilities = { "input-listener" },
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
function activate()
|
|
||||||
vlc.msg.dbg("[Play Next in Folder] Activated")
|
|
||||||
end
|
|
||||||
|
|
||||||
function deactivate()
|
|
||||||
vlc.msg.dbg("[Play Next in Folder] Deactivated")
|
|
||||||
end
|
|
||||||
|
|
||||||
local lastplayeditem = ""
|
|
||||||
|
|
||||||
function meta_changed()
|
|
||||||
if vlc.playlist.status() == "stopped" then
|
|
||||||
local item = vlc.input.item()
|
|
||||||
if item then
|
|
||||||
lastplayeditem = item:uri()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function playing_changed()
|
|
||||||
local item = vlc.input.item()
|
|
||||||
if item then
|
|
||||||
vlc.msg.dbg(item:uri())
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function input_changed()
|
|
||||||
-- Trigger only when playback stops
|
|
||||||
if vlc.playlist.status() == "stopped" then
|
|
||||||
local uri = lastplayeditem
|
|
||||||
local path = vlc.strings.decode_uri(uri)
|
|
||||||
play_next_video_in_directory(path)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function play_next_video_in_directory(current_path)
|
|
||||||
local folder_path = string.sub(string.match(current_path, "^(.*/)"), 9)
|
|
||||||
if not folder_path then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local files = vlc.io.readdir(folder_path)
|
|
||||||
if not files then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Filter for media files
|
|
||||||
files = filter_media_files(files)
|
|
||||||
|
|
||||||
local current_file = string.match(current_path, ".*/([^/]+)$")
|
|
||||||
local next_file = nil
|
|
||||||
local found_current = false
|
|
||||||
|
|
||||||
for _, file in ipairs(files) do
|
|
||||||
if found_current then
|
|
||||||
next_file = file
|
|
||||||
break
|
|
||||||
end
|
|
||||||
if file == current_file then
|
|
||||||
found_current = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if next_file then
|
|
||||||
local next_uri = "file:///" .. folder_path .. next_file
|
|
||||||
vlc.playlist.clear()
|
|
||||||
vlc.playlist.add({ { path = next_uri } })
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function filter_media_files(files)
|
|
||||||
local media_files = {}
|
|
||||||
local media_extensions = {
|
|
||||||
-- Videoformate
|
|
||||||
"%.avi$",
|
|
||||||
"%.mkv$",
|
|
||||||
"%.mp4$",
|
|
||||||
"%.wmv$",
|
|
||||||
"%.flv%",
|
|
||||||
"%.mpeg$",
|
|
||||||
"%.mpg$",
|
|
||||||
"%.mov$",
|
|
||||||
"%.rm$",
|
|
||||||
"%.vob$",
|
|
||||||
"%.asf$",
|
|
||||||
"%.divx$",
|
|
||||||
"%.m4v$",
|
|
||||||
"%.ogg$",
|
|
||||||
"%.ogm$",
|
|
||||||
"%.ogv$",
|
|
||||||
"%.qt$",
|
|
||||||
"%.rmvb$",
|
|
||||||
"%.webm$",
|
|
||||||
"%.3gp$",
|
|
||||||
"%.3g2$",
|
|
||||||
"%.drc$",
|
|
||||||
"%.f4v$",
|
|
||||||
"%.f4p$",
|
|
||||||
"%.f4a$",
|
|
||||||
"%.f4b$",
|
|
||||||
"%.gifv$",
|
|
||||||
"%.mng$",
|
|
||||||
"%.mts$",
|
|
||||||
"%.m2ts$",
|
|
||||||
"%.ts$",
|
|
||||||
"%.mov$",
|
|
||||||
"%.qt$",
|
|
||||||
"%.mxf$",
|
|
||||||
"%.nsv$",
|
|
||||||
"%.roq$",
|
|
||||||
"%.svi$",
|
|
||||||
"%.viv$",
|
|
||||||
-- Audioformate
|
|
||||||
"%.mp3$",
|
|
||||||
"%.wav$",
|
|
||||||
"%.flac$",
|
|
||||||
"%.aac$",
|
|
||||||
"%.ogg$",
|
|
||||||
"%.wma$",
|
|
||||||
"%.alac$",
|
|
||||||
"%.ape$",
|
|
||||||
"%.ac3$",
|
|
||||||
"%.opus$",
|
|
||||||
"%.aiff$",
|
|
||||||
"%.aif$",
|
|
||||||
"%.amr$",
|
|
||||||
"%.au$",
|
|
||||||
"%.mka$",
|
|
||||||
"%.dts$",
|
|
||||||
"%.m4a$",
|
|
||||||
"%.m4b$",
|
|
||||||
"%.m4p$",
|
|
||||||
"%.mpc$",
|
|
||||||
"%.mpp$",
|
|
||||||
"%.mp+",
|
|
||||||
"%.oga$",
|
|
||||||
"%.spx$",
|
|
||||||
"%.tta$",
|
|
||||||
"%.voc$",
|
|
||||||
"%.ra$",
|
|
||||||
"%.mid$",
|
|
||||||
"%.midi$",
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, f in ipairs(files) do
|
|
||||||
for _, ext in ipairs(media_extensions) do
|
|
||||||
if string.match(f, ext) then
|
|
||||||
table.insert(media_files, f)
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return media_files
|
|
||||||
end
|
|
|
@ -25,7 +25,6 @@ in
|
||||||
terminal = lib.pantheon.mkStrOption;
|
terminal = lib.pantheon.mkStrOption;
|
||||||
notification-daemon = lib.pantheon.mkStrOption;
|
notification-daemon = lib.pantheon.mkStrOption;
|
||||||
status-bar = lib.pantheon.mkStrOption;
|
status-bar = lib.pantheon.mkStrOption;
|
||||||
media-player = lib.pantheon.mkStrOption;
|
|
||||||
enableSpotifyd = lib.mkEnableOption "";
|
enableSpotifyd = lib.mkEnableOption "";
|
||||||
enableSteam = lib.mkEnableOption "";
|
enableSteam = lib.mkEnableOption "";
|
||||||
enableVR = lib.mkEnableOption "";
|
enableVR = lib.mkEnableOption "";
|
||||||
|
|
26
modules/nixos/desktop/media-player/default.nix
Normal file
26
modules/nixos/desktop/media-player/default.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (lib)
|
||||||
|
mkEnableOption
|
||||||
|
mkIf
|
||||||
|
mkMerge
|
||||||
|
singleton
|
||||||
|
;
|
||||||
|
inherit (pkgs) vlc;
|
||||||
|
cfg = config.desktop.media-player;
|
||||||
|
addToHome = condition: attrs: mkIf condition { home-manager.sharedModules = singleton attrs; };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.desktop.media-player = {
|
||||||
|
vlc.enable = mkEnableOption "";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkMerge [
|
||||||
|
(addToHome cfg.vlc.enable { home.packages = singleton vlc; })
|
||||||
|
];
|
||||||
|
}
|
|
@ -4,11 +4,11 @@
|
||||||
browser.firefox.enable = true;
|
browser.firefox.enable = true;
|
||||||
lockscreen.hyprlock.enable = true;
|
lockscreen.hyprlock.enable = true;
|
||||||
launcher.fuzzel.enable = true;
|
launcher.fuzzel.enable = true;
|
||||||
|
media-player.vlc.enable = true;
|
||||||
windowManager = "hyprland";
|
windowManager = "hyprland";
|
||||||
terminal = "ghostty";
|
terminal = "ghostty";
|
||||||
notification-daemon = "mako";
|
notification-daemon = "mako";
|
||||||
status-bar = "waybar";
|
status-bar = "waybar";
|
||||||
media-player = "vlc";
|
|
||||||
mainMonitor = {
|
mainMonitor = {
|
||||||
id = "desc:OOO AN-270W04K";
|
id = "desc:OOO AN-270W04K";
|
||||||
scale = "2";
|
scale = "2";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue