{ config, lib, pkgs, ... }: let bc-to-beet = pkgs.writeShellApplication { name = "bc-to-beet"; runtimeInputs = [ pkgs.beets ]; text = '' rm -rf ~/import/music/tmp-bc unzip -d ~/import/music/tmp-bc ~/import/music/album.zip beet import ~/import/music/tmp-bc rm -rf ~/import/music/tmp-bc rm -rf ~/import/music/album.zip ''; }; in { imports = [ ./ytdlp.nix ]; home.packages = with pkgs; [ bc-to-beet flac abcde (pkgs.writers.writeDashBin "rip-flac" '' ${pkgs.abcde}/bin/abcde -c ~/.config/abcde/config '') ]; # configuration file for abcde (see man 1 abcde) xdg.configFile."abcde/config".source = pkgs.writeText "config" '' ACTIONS=default,getalbumart ALBUMARTFILE="cover.jpg" ALBUMARTTYPE="JPG" CDDBMETHOD=musicbrainz # cd ripping program CDROMREADERSYNTAX=cdparanoia CDPARANOIA=cdparanoia CDPARANOIAOPTS="--never-skip=10" # move here OUTPUTDIR="$HOME/import/music" # output type FLACENCODERSYNTAX=flac OUTPUTTYPE=flac FLAC=flac # --best is the same as -8 (highest compression) (also see -e) FLACOPTS='--verify --best' EXTRAVERBOSE=2 EJECTCD=y MAXPROCS=4 post_encode () { # beets fixes some things (e.g. moving multi-disc albums together) and # adds some extra info (e.g. genres with lastgenre) echo "-------------- beets:" beet import "$HOME/import/music" } ''; programs.beets = { enable = true; settings = { directory = "/data/fast/music"; plugins = "fromfilename discogs duplicates fetchart embedart badfiles lastgenre scrub"; paths = { default = "$albumartist/$album%aunique{}/$track $title"; singleton = "Singles/$artist/$title"; comp = "Compilations/$album%aunique{}/$track - $title"; "albumtype:soundtrack" = "Soundtracks/$album ($year)/$track $title"; }; import = { copy = false; move = true; }; va_name = "Various Artists"; embedart = { ifempty = true; }; lastgenre = { auto = false; canonical = true; fallback = "unknown"; force = true; prefer_specific = true; }; fetchart = { cautious = true; sources = "filesystem coverart itunes amazon lastfm wikipedia"; }; }; }; }