Compare commits
3 Commits
5ea9ec478e
...
e6e6d716e9
| Author | SHA1 | Date | |
|---|---|---|---|
|
e6e6d716e9
|
|||
|
d522f52cb4
|
|||
|
28b6003123
|
@ -136,6 +136,10 @@ yt-dlp -f 'bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b' --recode-video mp4 "<
|
|||||||
# Download mp3 video in best quality
|
# Download mp3 video in best quality
|
||||||
yt-dlp -f 'ba' --extract-audio --audio-format mp3 "<url>"
|
yt-dlp -f 'ba' --extract-audio --audio-format mp3 "<url>"
|
||||||
|
|
||||||
|
% spotdl
|
||||||
|
# Download spotify playlist
|
||||||
|
spotdl --config /home/christoph/.spotdl/config.json --user-auth --format m4a --bitrate disable --threads 24 --generate-lrc --m3u "<name>" download "<url>"
|
||||||
|
|
||||||
; ===========================
|
; ===========================
|
||||||
; FFMPEG
|
; FFMPEG
|
||||||
; ===========================
|
; ===========================
|
||||||
|
|||||||
@ -366,6 +366,7 @@ rec {
|
|||||||
imagemagick # Convert image (magic)
|
imagemagick # Convert image (magic)
|
||||||
mp3val # Validate mp3 files
|
mp3val # Validate mp3 files
|
||||||
flac # Validate flac files
|
flac # Validate flac files
|
||||||
|
spotdl
|
||||||
|
|
||||||
# Document utils
|
# Document utils
|
||||||
poppler_utils # pdfunite
|
poppler_utils # pdfunite
|
||||||
@ -478,28 +479,29 @@ rec {
|
|||||||
# https://beets.readthedocs.io/en/stable/reference/config.html
|
# https://beets.readthedocs.io/en/stable/reference/config.html
|
||||||
settings = {
|
settings = {
|
||||||
directory = "${home.homeDirectory}/Music";
|
directory = "${home.homeDirectory}/Music";
|
||||||
threaded = "yes";
|
threaded = true;
|
||||||
art_filename = "cover";
|
art_filename = "cover";
|
||||||
|
|
||||||
ui = {
|
ui = {
|
||||||
color = "yes";
|
color = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
import = {
|
import = {
|
||||||
write = "yes"; # Write metadata to files
|
write = true; # Write metadata to files
|
||||||
copy = "yes"; # Move files to the music directory when importing
|
copy = true; # Move files to the music directory when importing
|
||||||
log = "${home.homeDirectory}/Music/.beetslog.txt";
|
log = "${home.homeDirectory}/Music/.beetslog.txt";
|
||||||
};
|
};
|
||||||
|
|
||||||
paths = {
|
paths = {
|
||||||
default = "$albumartist/$albumartist - $album/$track $title";
|
default = "$albumartist/$albumartist - $album/$track $title";
|
||||||
singleton = "$artist/0 Singles/$artist - $title"; # Single songs
|
singleton = "0 Singles/$artist - $title"; # Single songs
|
||||||
comp = "1 Various Arists/$album/$track $title";
|
comp = "1 Various/$album/$track $title";
|
||||||
};
|
};
|
||||||
|
|
||||||
plugins = [
|
plugins = [
|
||||||
"badfiles" # check audio file integrity
|
"badfiles" # check audio file integrity
|
||||||
"duplicates"
|
"duplicates"
|
||||||
|
"edit" # edit metadata in text editor
|
||||||
"fetchart" # pickup local cover art or search online
|
"fetchart" # pickup local cover art or search online
|
||||||
"fish" # beet fish generates ~/.config/fish/completions file
|
"fish" # beet fish generates ~/.config/fish/completions file
|
||||||
# "lyrics" # fetch song lyrics
|
# "lyrics" # fetch song lyrics
|
||||||
@ -507,7 +509,7 @@ rec {
|
|||||||
];
|
];
|
||||||
|
|
||||||
fetchart = {
|
fetchart = {
|
||||||
auto = "yes";
|
auto = true;
|
||||||
sources = "filesystem coverart itunes amazon albumart"; # sources are queried in this order
|
sources = "filesystem coverart itunes amazon albumart"; # sources are queried in this order
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -517,7 +519,7 @@ rec {
|
|||||||
# };
|
# };
|
||||||
|
|
||||||
replaygain = {
|
replaygain = {
|
||||||
auto = "no"; # analyze on import automatically
|
auto = false; # analyze on import automatically
|
||||||
backend = "ffmpeg";
|
backend = "ffmpeg";
|
||||||
overwrite = true; # re-analyze files with existing replaygain tags on import
|
overwrite = true; # re-analyze files with existing replaygain tags on import
|
||||||
};
|
};
|
||||||
@ -721,28 +723,28 @@ rec {
|
|||||||
|
|
||||||
nushell.enable = false;
|
nushell.enable = false;
|
||||||
|
|
||||||
spicetify = let
|
# spicetify = let
|
||||||
spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
|
# spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system};
|
||||||
in {
|
# in {
|
||||||
enable = true;
|
# enable = true;
|
||||||
|
#
|
||||||
# https://github.com/catppuccin/spicetify
|
# # https://github.com/catppuccin/spicetify
|
||||||
theme = spicePkgs.themes.catppuccin;
|
# theme = spicePkgs.themes.catppuccin;
|
||||||
colorScheme = "mocha";
|
# colorScheme = "mocha";
|
||||||
|
#
|
||||||
wayland = true;
|
# wayland = true;
|
||||||
|
#
|
||||||
enabledExtensions = with spicePkgs.extensions; [
|
# enabledExtensions = with spicePkgs.extensions; [
|
||||||
adblock
|
# adblock
|
||||||
hidePodcasts
|
# hidePodcasts
|
||||||
oneko # cat
|
# oneko # cat
|
||||||
];
|
# ];
|
||||||
# enabledCustomApps = with spicePkgs.apps; [];
|
# # enabledCustomApps = with spicePkgs.apps; [];
|
||||||
enabledSnippets = with spicePkgs.snippets; [
|
# enabledSnippets = with spicePkgs.snippets; [
|
||||||
rotatingCoverart
|
# rotatingCoverart
|
||||||
pointer
|
# pointer
|
||||||
];
|
# ];
|
||||||
};
|
# };
|
||||||
|
|
||||||
ssh = {
|
ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@ -794,7 +796,7 @@ rec {
|
|||||||
shellWrapperName = "y";
|
shellWrapperName = "y";
|
||||||
|
|
||||||
plugins = {
|
plugins = {
|
||||||
inherit (pkgs.yaziPlugins) chmod diff full-border git lazygit mount ouch rsync smart-paste starship sudo;
|
inherit (pkgs.yaziPlugins) chmod diff full-border git lazygit mount ouch rsync starship sudo; # smar-paste
|
||||||
};
|
};
|
||||||
|
|
||||||
initLua = ''
|
initLua = ''
|
||||||
@ -978,11 +980,11 @@ rec {
|
|||||||
run = [''shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'' "yank"];
|
run = [''shell -- for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'' "yank"];
|
||||||
desc = "Copy files to system clipboard on yank";
|
desc = "Copy files to system clipboard on yank";
|
||||||
}
|
}
|
||||||
{
|
# {
|
||||||
on = "p";
|
# on = "p";
|
||||||
run = "plugin smart-paste";
|
# run = "plugin smart-paste";
|
||||||
desc = "Paste into hovered directory or CWD";
|
# desc = "Paste into hovered directory or CWD";
|
||||||
}
|
# }
|
||||||
{
|
{
|
||||||
on = "d";
|
on = "d";
|
||||||
run = "remove --permanently";
|
run = "remove --permanently";
|
||||||
@ -1076,7 +1078,7 @@ rec {
|
|||||||
packages = [
|
packages = [
|
||||||
"com.github.tchx84.Flatseal"
|
"com.github.tchx84.Flatseal"
|
||||||
|
|
||||||
# "com.spotify.Client" # Don't need this when spicetify is enabled
|
"com.spotify.Client" # Don't need this when spicetify is enabled
|
||||||
|
|
||||||
# NOTE: Also change discord-ipc-0 below
|
# NOTE: Also change discord-ipc-0 below
|
||||||
"com.discordapp.Discord"
|
"com.discordapp.Discord"
|
||||||
|
|||||||
@ -83,7 +83,7 @@ in {
|
|||||||
|
|
||||||
tabs: [
|
tabs: [
|
||||||
(
|
(
|
||||||
name: "Queue",
|
name: "Queue (1)",
|
||||||
pane: Split(
|
pane: Split(
|
||||||
borders: "NONE",
|
borders: "NONE",
|
||||||
direction: Horizontal,
|
direction: Horizontal,
|
||||||
@ -133,31 +133,31 @@ in {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
name: "Albums",
|
name: "Albums (2)",
|
||||||
pane: Pane(Albums),
|
pane: Pane(Albums),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
name: "Artists",
|
name: "Album Artists (3)",
|
||||||
|
pane: Pane(AlbumArtists),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
name: "Artists (4)",
|
||||||
pane: Pane(Artists),
|
pane: Pane(Artists),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
name: "Playlists",
|
name: "Playlists (5)",
|
||||||
pane: Pane(Playlists),
|
pane: Pane(Playlists),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
name: "Search",
|
name: "Directories (6)",
|
||||||
|
pane: Pane(Directories),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
name: "Search (7)",
|
||||||
pane: Pane(Search),
|
pane: Pane(Search),
|
||||||
),
|
),
|
||||||
// (
|
// (
|
||||||
// name: "Album Artists",
|
// name: "Visualizer (8)",
|
||||||
// pane: Pane(AlbumArtists),
|
|
||||||
// ),
|
|
||||||
// (
|
|
||||||
// name: "Directories",
|
|
||||||
// pane: Pane(Directories),
|
|
||||||
// ),
|
|
||||||
// (
|
|
||||||
// name: "Visualizer",
|
|
||||||
// pane: Pane(Cava),
|
// pane: Pane(Cava),
|
||||||
// ),
|
// ),
|
||||||
],
|
],
|
||||||
@ -201,20 +201,20 @@ in {
|
|||||||
|
|
||||||
"<Tab>": NextTab,
|
"<Tab>": NextTab,
|
||||||
"<S-Tab>": PreviousTab,
|
"<S-Tab>": PreviousTab,
|
||||||
"1": SwitchToTab("Queue"),
|
"1": SwitchToTab("Queue (1)"),
|
||||||
"2": SwitchToTab("Albums"),
|
"2": SwitchToTab("Albums (2)"),
|
||||||
"3": SwitchToTab("Artists"),
|
"3": SwitchToTab("Album Artists (3)"),
|
||||||
"4": SwitchToTab("Playlists"),
|
"4": SwitchToTab("Artists (4)"),
|
||||||
"5": SwitchToTab("Search"),
|
"5": SwitchToTab("Playlists (5)"),
|
||||||
// " ": SwitchToTab("Visualizer"),
|
"6": SwitchToTab("Directories (6)"),
|
||||||
// " ": SwitchToTab("Directories"),
|
"7": SwitchToTab("Search (7)"),
|
||||||
// " ": SwitchToTab("Album Artists"),
|
// "8": SwitchToTab("Visualizer (8)"),
|
||||||
|
|
||||||
"f": SeekForward,
|
"f": SeekForward,
|
||||||
"z": ToggleRepeat,
|
"z": ToggleRepeat,
|
||||||
"x": ToggleRandom,
|
"x": ToggleRandom,
|
||||||
"c": ToggleConsume,
|
"c": ToggleConsumeOnOff, // Skip OneShot mode
|
||||||
"v": ToggleSingle,
|
"v": ToggleSingleOnOff, // Skip OneShot mode
|
||||||
"b": SeekBack,
|
"b": SeekBack,
|
||||||
"~": ShowHelp,
|
"~": ShowHelp,
|
||||||
"u": Update,
|
"u": Update,
|
||||||
@ -505,13 +505,64 @@ in {
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
right: [
|
right: [
|
||||||
|
// (
|
||||||
|
// kind: Property(Widget(States(
|
||||||
|
// active_style: (fg: "#${accentHL}", modifiers: "Bold|Underlined"),
|
||||||
|
// inactive_style: (fg: "#${text}"),
|
||||||
|
// separator_style: (fg: "#${text}"))),
|
||||||
|
// )
|
||||||
|
// // style: (fg: "dark_gray")
|
||||||
|
// ),
|
||||||
(
|
(
|
||||||
kind: Property(Widget(States(
|
kind: Property(Status(RepeatV2(
|
||||||
active_style: (fg: "#${accentHL}", modifiers: "Bold|Underlined"),
|
on_label: "Repeat (z)",
|
||||||
inactive_style: (fg: "#${text}"),
|
off_label: "Repeat (z)",
|
||||||
separator_style: (fg: "#${text}")))
|
on_style: (fg: "#${accentHL}", modifiers: "Bold|Underlined"),
|
||||||
)
|
off_style: (fg: "#${text}"),
|
||||||
// style: (fg: "dark_gray")
|
))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
kind: Text(" / "),
|
||||||
|
style: (fg: "#${text}"),
|
||||||
|
),
|
||||||
|
|
||||||
|
(
|
||||||
|
kind: Property(Status(RandomV2(
|
||||||
|
on_label: "Random (x)",
|
||||||
|
off_label: "Random (x)",
|
||||||
|
on_style: (fg: "#${accentHL}", modifiers: "Bold|Underlined"),
|
||||||
|
off_style: (fg: "#${text}"),
|
||||||
|
))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
kind: Text(" / "),
|
||||||
|
style: (fg: "#${text}"),
|
||||||
|
),
|
||||||
|
|
||||||
|
(
|
||||||
|
kind: Property(Status(ConsumeV2(
|
||||||
|
on_label: "Consume (c)",
|
||||||
|
oneshot_label: "Consume OS (c)",
|
||||||
|
off_label: "Consume (c)",
|
||||||
|
on_style: (fg: "#${accentHL}", modifiers: "Bold|Underlined"),
|
||||||
|
oneshot_style: (fg: "#${accentHL}", modifiers: "Bold|Underlined"),
|
||||||
|
off_style: (fg: "#${text}"),
|
||||||
|
))),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
kind: Text(" / "),
|
||||||
|
style: (fg: "#${text}"),
|
||||||
|
),
|
||||||
|
|
||||||
|
(
|
||||||
|
kind: Property(Status(SingleV2(
|
||||||
|
on_label: "Single (v)",
|
||||||
|
oneshot_label: "Single OS (v)",
|
||||||
|
off_label: "Single (v)",
|
||||||
|
on_style: (fg: "#${accentHL}", modifiers: "Bold|Underlined"),
|
||||||
|
oneshot_style: (fg: "#${accentHL}", modifiers: "Bold|Underlined"),
|
||||||
|
off_style: (fg: "#${text}")
|
||||||
|
))),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user