From b5d9017dbfff651c0da748ac80de36bf65e549e1 Mon Sep 17 00:00:00 2001 From: Minijackson Date: Sun, 19 Jun 2022 23:25:38 +0200 Subject: usecases/music: add split-cue script, refmt --- res/scripts/split-cue.sh | 21 ++++ usecases/desktop/music.nix | 252 +++++++++++++++++++++++---------------------- 2 files changed, 150 insertions(+), 123 deletions(-) create mode 100644 res/scripts/split-cue.sh diff --git a/res/scripts/split-cue.sh b/res/scripts/split-cue.sh new file mode 100644 index 0000000..6be4a99 --- /dev/null +++ b/res/scripts/split-cue.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env nix-shell +#! nix-shell -i bash -p shntool cuetools flac +# shellcheck shell=bash + +set -xeuo pipefail + +cuesheet="$1" + +audio="$2" +format="${audio##*.}" +albumdir=$(mktemp -d) + +shnsplit -f "$cuesheet" "$audio" -d "$albumdir" -o "$format" +find "$albumdir" -type f -print0 | sort -zn | xargs -t0 cuetag.sh "$cuesheet" + +shopt -s nocaseglob +for file in cover.*; do + cp "$file" "$albumdir" +done + +echo "Split exported to: '${albumdir}'" diff --git a/usecases/desktop/music.nix b/usecases/desktop/music.nix index d6c3fde..c982795 100644 --- a/usecases/desktop/music.nix +++ b/usecases/desktop/music.nix @@ -1,14 +1,16 @@ -inputs: - -{ config, lib, pkgs, ... }: - -{ +_inputs: { + config, + lib, + pkgs, + ... +}: { assertions = [ { assertion = - config.home-manager.users.minijackson.programs.beets.settings ? acoustid && - config.home-manager.users.minijackson.programs.beets.settings.acoustid ? apikey && - config.home-manager.users.minijackson.programs.beets.settings.acoustid.apikey != null; + config.home-manager.users.minijackson.programs.beets.settings + ? acoustid + && config.home-manager.users.minijackson.programs.beets.settings.acoustid ? apikey + && config.home-manager.users.minijackson.programs.beets.settings.acoustid.apikey != null; message = "Please provide the API key for the Acoustid database"; } ]; @@ -37,125 +39,129 @@ inputs: #startWhenNeeded = true; }; - home-manager.users.minijackson = { config, ... }: - { - programs.beets = { - enable = true; - - settings = { - plugins = [ - "absubmit" - "acousticbrainz" - "badfiles" - "chroma" - "convert" - "edit" - "export" - "fetchart" - "fromfilename" - "lastgenre" - "mbsubmit" - "mbsync" - "missing" - "mpdupdate" - "parentwork" - "random" - "the" - "zero" - ]; - lastgenre = { - canonical = true; - # High count due to canonicalization which removes fetched genres - count = 6; - }; - paths = { - default = "%the{$albumartist}/%the{$album}%aunique{}/$track $title"; - singleton = "Non-Album/%the{$artist}/%the{$title}"; - comp = "Compilations/%the{$album}%aunique{}/$track $title"; - }; - zero.fields = "comments"; - }; - }; + users.extraUsers.minijackson.packages = [ + (pkgs.writeScriptBin + "split-cue" + (builtins.readFile ../../res/scripts/split-cue.sh)) + ]; - programs.ncmpcpp = { - enable = true; - package = pkgs.ncmpcpp.override { - outputsSupport = true; - visualizerSupport = true; + home-manager.users.minijackson = {config, ...}: { + programs.beets = { + enable = true; + + settings = { + plugins = [ + "absubmit" + "acousticbrainz" + "badfiles" + "chroma" + "convert" + "edit" + "export" + "fetchart" + "fromfilename" + "lastgenre" + "mbsubmit" + "mbsync" + "missing" + "mpdupdate" + "parentwork" + "random" + "the" + "zero" + ]; + lastgenre = { + canonical = true; + # High count due to canonicalization which removes fetched genres + count = 6; }; - mpdMusicDir = "/home/minijackson/Music"; - settings = { - visualizer_data_source = "/tmp/mpd.fifo"; - visualizer_output_name = "FIFO"; - visualizer_in_stereo = true; - visualizer_type = "ellipse"; - visualizer_look = "▒▒"; - visualizer_color = "cyan, blue, magenta, red, yellow, green"; - - user_interface = "alternative"; - - media_library_primary_tag = "album_artist"; - - display_bitrate = true; - - #---------------------------------------------------- - # file: ~/.ncmpcpp/config - # author: jason ryan - http://jasonwryan.com/ - #---------------------------------------------------- - - mpd_connection_timeout = "5"; - playlist_disable_highlight_delay = "3"; - message_delay_time = "4"; - header_visibility = true; - statusbar_visibility = true; - song_list_format = "{%a - }{%t}|{$5%f$9}$R{$7(%l)$9}"; - song_status_format = "$2%a $1• $3%t $1• $4%b {(Disc %d) }$1• $5%y$1"; - song_window_title_format = "Ncmpcpp: {%a - }{%t}|{%f}"; - song_columns_list_format = "(7f)[white]{n} (33)[cyan]{t} (20)[green]{a} (20)[magenta]{b} (10)[magenta]{y} (7f)[white]{l}"; - playlist_display_mode = "columns"; - browser_display_mode = "columns"; - titles_visibility = true; - progressbar_look = "─╼·"; - # media_library_left_column = "a" (possible values: a,y,g,c,p, legend above) - header_text_scrolling = true; - # fancy_scrolling = true; - display_remaining_time = true; - ignore_leading_the = true; - empty_tag_marker = ""; - enable_window_title = true; - colors_enabled = true; - header_window_color = "magenta"; - volume_color = "green"; - state_line_color = "yellow"; - state_flags_color = "blue"; - main_window_color = "cyan"; - color1 = "cyan"; - color2 = "blue"; - - current_item_prefix = "$(cyan)$r"; - current_item_suffix = "$/r$(end)"; - - progressbar_color = "yellow"; - statusbar_color = "cyan"; - - # active_column_color = "cyan"; + paths = { + default = "%the{$albumartist}/%the{$album}%aunique{}/$track $title"; + singleton = "Non-Album/%the{$artist}/%the{$title}"; + comp = "Compilations/%the{$album}%aunique{}/$track $title"; }; + zero.fields = "comments"; }; + }; - wayland.windowManager.sway.config.keybindings = - let - modifier = config.wayland.windowManager.sway.config.modifier; - mpc = "${pkgs.mpc_cli}/bin/mpc"; - in - lib.mkOptionDefault { - "XF86AudioPlay" = "exec ${mpc} toggle"; - "XF86AudioPrev" = "exec ${mpc} prev"; - "XF86AudioNext" = "exec ${mpc} next"; - - "${modifier}+KP_5" = "exec ${mpc} toggle"; - "${modifier}+KP_4" = "exec ${mpc} prev"; - "${modifier}+KP_6" = "exec ${mpc} next"; - "${modifier}+KP_8" = "exec ${mpc} stop"; - }; + programs.ncmpcpp = { + enable = true; + package = pkgs.ncmpcpp.override { + outputsSupport = true; + visualizerSupport = true; + }; + mpdMusicDir = "/home/minijackson/Music"; + settings = { + visualizer_data_source = "/tmp/mpd.fifo"; + visualizer_output_name = "FIFO"; + visualizer_in_stereo = true; + visualizer_type = "ellipse"; + visualizer_look = "▒▒"; + visualizer_color = "cyan, blue, magenta, red, yellow, green"; + + user_interface = "alternative"; + + media_library_primary_tag = "album_artist"; + + display_bitrate = true; + + #---------------------------------------------------- + # file: ~/.ncmpcpp/config + # author: jason ryan - http://jasonwryan.com/ + #---------------------------------------------------- + + mpd_connection_timeout = "5"; + playlist_disable_highlight_delay = "3"; + message_delay_time = "4"; + header_visibility = true; + statusbar_visibility = true; + song_list_format = "{%a - }{%t}|{$5%f$9}$R{$7(%l)$9}"; + song_status_format = "$2%a $1• $3%t $1• $4%b {(Disc %d) }$1• $5%y$1"; + song_window_title_format = "Ncmpcpp: {%a - }{%t}|{%f}"; + song_columns_list_format = "(7f)[white]{n} (33)[cyan]{t} (20)[green]{a} (20)[magenta]{b} (10)[magenta]{y} (7f)[white]{l}"; + playlist_display_mode = "columns"; + browser_display_mode = "columns"; + titles_visibility = true; + progressbar_look = "─╼·"; + # media_library_left_column = "a" (possible values: a,y,g,c,p, legend above) + header_text_scrolling = true; + # fancy_scrolling = true; + display_remaining_time = true; + ignore_leading_the = true; + empty_tag_marker = ""; + enable_window_title = true; + colors_enabled = true; + header_window_color = "magenta"; + volume_color = "green"; + state_line_color = "yellow"; + state_flags_color = "blue"; + main_window_color = "cyan"; + color1 = "cyan"; + color2 = "blue"; + + current_item_prefix = "$(cyan)$r"; + current_item_suffix = "$/r$(end)"; + + progressbar_color = "yellow"; + statusbar_color = "cyan"; + + # active_column_color = "cyan"; + }; }; + + wayland.windowManager.sway.config.keybindings = let + inherit (config.wayland.windowManager.sway.config) modifier; + mpc = "${pkgs.mpc_cli}/bin/mpc"; + in + lib.mkOptionDefault { + "XF86AudioPlay" = "exec ${mpc} toggle"; + "XF86AudioPrev" = "exec ${mpc} prev"; + "XF86AudioNext" = "exec ${mpc} next"; + + "${modifier}+KP_5" = "exec ${mpc} toggle"; + "${modifier}+KP_4" = "exec ${mpc} prev"; + "${modifier}+KP_6" = "exec ${mpc} next"; + "${modifier}+KP_8" = "exec ${mpc} stop"; + }; + }; } -- cgit v1.2.3