replace mpd with mopidy

This commit is contained in:
notgne2 2022-01-19 22:58:17 -07:00
parent 6b5dbaa92e
commit ef57d36110
No known key found for this signature in database
GPG Key ID: BB661E172B42A7F8
5 changed files with 131 additions and 19 deletions

View File

@ -57,6 +57,7 @@
fonts = import ./home-manager/modules/fonts.nix; fonts = import ./home-manager/modules/fonts.nix;
gaming = import ./home-manager/modules/gaming.nix inputs; gaming = import ./home-manager/modules/gaming.nix inputs;
gamerenv = import ./home-manager/modules/gamerenv.nix; gamerenv = import ./home-manager/modules/gamerenv.nix;
mopidy = import ./home-manager/modules/mopidy.nix;
all = import ./home-manager/modules/default.nix inputs; all = import ./home-manager/modules/default.nix inputs;
}; };

View File

@ -11,5 +11,6 @@ inputs:
(import ./gaming.nix inputs) (import ./gaming.nix inputs)
./gamerenv.nix ./gamerenv.nix
./fonts.nix ./fonts.nix
./mopidy.nix
]; ];
} }

View File

@ -65,11 +65,6 @@ let
${pkgs.procps}/bin/pkill -2 wf-recorder ${pkgs.procps}/bin/pkill -2 wf-recorder
''; '';
um = pkgs.writeScript "update-music.sh" ''
#!${pkgs.bash}/bin/bash
${pkgs.mpc_cli}/bin/mpc update --wait && ${pkgs.mpc_cli}/bin/mpc clear && ${pkgs.mpc_cli}/bin/mpc ls | ${pkgs.mpc_cli}/bin/mpc add
'';
ezDrv = pkgs.runCommand "ez-commands" { } ('' ezDrv = pkgs.runCommand "ez-commands" { } (''
mkdir -p $out/bin mkdir -p $out/bin
ln -s ${selshot} $out/bin/selshot ln -s ${selshot} $out/bin/selshot
@ -78,8 +73,6 @@ let
ln -s ${scrsaveclip} $out/bin/scrsaveclip ln -s ${scrsaveclip} $out/bin/scrsaveclip
ln -s ${scrvidsaveclip} $out/bin/scrvidsaveclip ln -s ${scrvidsaveclip} $out/bin/scrvidsaveclip
ln -s ${scrvidstop} $out/bin/scrvidstop ln -s ${scrvidstop} $out/bin/scrvidstop
ln -s ${um} $out/bin/um
'' + ( '' + (
if cfg.uploadScript != null then '' if cfg.uploadScript != null then ''
ln -s ${cfg.uploadScript} $out/bin/upload_file ln -s ${cfg.uploadScript} $out/bin/upload_file
@ -203,11 +196,6 @@ in
keybindings = keybindings =
let let
musicRofi = pkgs.writeScript "music-rofi" ''
#!${pkgs.fish}/bin/fish
${pkgs.mpc_cli}/bin/mpc -f "%position% - %artist% - %album% - %title%" playlist | ${pkgs.rofi}/bin/rofi -dmenu -i | ${pkgs.coreutils}/bin/cut -d " " -f 1 | ${pkgs.findutils}/bin/xargs ${pkgs.mpc_cli}/bin/mpc play
'';
# ugly stupid way of doing things but im lazy # ugly stupid way of doing things but im lazy
bwRofi = pkgs.writeScript "bw-rofi" '' bwRofi = pkgs.writeScript "bw-rofi" ''
#!${pkgs.bash}/bin/bash #!${pkgs.bash}/bin/bash
@ -302,7 +290,39 @@ in
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause"; "XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"${modifier}+backslash" = "exec ${pkgs.playerctl}/bin/playerctl play-pause"; "${modifier}+backslash" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"${modifier}+m" = "exec ${musicRofi}"; "${modifier}+m" =
let
musicRofi = pkgs.writeShellScript "music-rofi" ''
SONGN=$(${pkgs.mpc_cli}/bin/mpc -f "%position% - %artist% - %album% - %title%" playlist | ${pkgs.rofi}/bin/rofi -dmenu -i | ${pkgs.coreutils}/bin/cut -d " " -f 1)
[ ! -z "$SONGN" ] && ${pkgs.mpc_cli}/bin/mpc play "$SONGN"
'';
in
"exec ${musicRofi}";
"${modifier}+k" = "exec ${pkgs.mpc_cli}/bin/mpc clear";
"${config.wayland.windowManager.sway.config.modifier}+Shift+k" = lib.mkForce "exec ${pkgs.mpc_cli}/bin/mpc ls \"Local media/Tracks\" | ${pkgs.mpc_cli}/bin/mpc add";
"${config.wayland.windowManager.sway.config.modifier}+Shift+m" =
let
mopidySearch = pkgs.writeShellScript "mopidy-search.sh" ''
QUERY=$(${pkgs.rofi}/bin/rofi -dmenu)
[ -z "$QUERY" ] && exit
RESULTS=$(${pkgs.mpc_cli}/bin/mpc search -f '%file% / %artist% - %title%' any "$QUERY")
USERLIST=$(echo "$RESULTS" | ${pkgs.gawk}/bin/awk -F' / ' '{print $2}')
CHOSEN=$(echo "$USERLIST" | ${pkgs.rofi}/bin/rofi -dmenu -i)
[ -z "$CHOSEN" ] && exit
NTH=$(echo "$USERLIST" | ${pkgs.gnugrep}/bin/grep -n "^$CHOSEN$" | cut -d':' -f1)
LINE=$(echo "$RESULTS" | ${pkgs.coreutils}/bin/tail "-n+$NTH" | ${pkgs.coreutils}/bin/head -1)
NAME=$(echo "$LINE" | ${pkgs.gawk}/bin/awk -F' / ' '{print $1}')
${pkgs.mpc_cli}/bin/mpc add "$NAME"
PLAYLIST=$(${pkgs.mpc_cli}/bin/mpc -f "%position% / %file%" playlist)
PLAYLIST_ENTRY=$(echo "$PLAYLIST" | ${pkgs.gnugrep}/bin/grep -E "^.* / $NAME$" | head -1)
PLAYLIST_ENTRY_POSITION=$(echo "$PLAYLIST_ENTRY" | ${pkgs.gawk}/bin/awk -F' / ' '{print $1}')
${pkgs.mpc_cli}/bin/mpc play "$PLAYLIST_ENTRY_POSITION"
'';
in
"exec ${mopidySearch}";
"${modifier}+p" = "exec ${bwRofi}"; "${modifier}+p" = "exec ${bwRofi}";
"${modifier}+t" = "exec ${bwRofiOtp}"; "${modifier}+t" = "exec ${bwRofiOtp}";
@ -585,14 +605,44 @@ in
services.blueman-applet.enable = lib.mkDefault cfg.bluetooth; services.blueman-applet.enable = lib.mkDefault cfg.bluetooth;
services.mpris-proxy.enable = true; services.mpris-proxy.enable = lib.mkDefault true;
services.mpdris2.enable = true; services.mopidy = {
services.playerctld.enable = true;
services.mpd = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
musicDirectory = lib.mkDefault "${config.home.homeDirectory}/Music"; extensionPackages = with pkgs; [
mopidy-mpris
mopidy-youtube
mopidy-local
(mopidy-mpd.overrideAttrs (old: {
src = builtins.fetchGit {
url = "git+ssh://git@github.com/mopidy/mopidy-mpd.git";
rev = "a8c4debc139020fbb17066b66a746644a915296c";
}; };
}))
];
settings = {
youtube = {
enabled = lib.mkDefault true;
};
file = {
media_dirs = lib.mkDefault "${config.home.homeDirectory}/Music";
};
local = {
enabled = lib.mkDefault true;
media_dir = lib.mkDefault "${config.home.homeDirectory}/Music";
};
mpd = {
enabled = lib.mkDefault true;
hostname = lib.mkDefault "::";
command_blacklist = lib.mkDefault "";
};
};
};
services.playerctld.enable = lib.mkDefault true;
gtk = { gtk = {
enable = lib.mkDefault true; enable = lib.mkDefault true;

View File

@ -0,0 +1,60 @@
{ config, lib, pkgs, ... }:
with pkgs;
with lib;
let
cfg = config.services.mopidy;
mopidyEnv = buildEnv {
name = "mopidy-with-extensions-${mopidy.version}";
paths = closePropagation cfg.extensionPackages;
pathsToLink = [ "/${mopidyPackages.python.sitePackages}" ];
buildInputs = [ makeWrapper ];
postBuild = ''
makeWrapper ${mopidy}/bin/mopidy $out/bin/mopidy \
--prefix PYTHONPATH : $out/${mopidyPackages.python.sitePackages}
'';
};
in
{
options = {
services.mopidy = {
enable = mkEnableOption "Mopidy, a music player daemon";
extensionPackages = mkOption {
default = [ ];
type = types.listOf types.package;
example = literalExpression "[ pkgs.mopidy-spotify ]";
description = ''
Mopidy extensions that should be loaded by the service.
'';
};
settings = mkOption {
default = { };
type = with types; attrsOf (attrsOf (oneOf [ str int bool ]));
description = ''
The settings that Mopidy should use.
'';
};
};
};
config = mkIf cfg.enable {
xdg.configFile."mopidy/mopidy.conf".text = lib.generators.toINI { } cfg.settings;
home.packages = [ mopidyEnv ];
systemd.user.services.mopidy = {
Unit = {
Description = "mopidy music player daemon";
After = [ "network.target" "sound.target" ];
};
Install = { WantedBy = [ "graphical-session.target" ]; };
Service = {
ExecStart = "${mopidyEnv}/bin/mopidy";
};
};
};
}

View File

@ -196,7 +196,7 @@ in
# Shit breaks without this lol # Shit breaks without this lol
programs.dconf.enable = lib.mkDefault true; programs.dconf.enable = lib.mkDefault true;
services.dbus.packages = with pkgs; [ gnome3.dconf ]; services.dbus.packages = with pkgs; [ dconf ];
# better default swap # better default swap
boot.kernel.sysctl = { "vm.swappiness" = lib.mkDefault 45; }; boot.kernel.sysctl = { "vm.swappiness" = lib.mkDefault 45; };