mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-04-24 12:19:12 +00:00
users/foo-dogsquared: modularize config
This commit is contained in:
parent
6bd59ccfd4
commit
2ed3c2b790
@ -1,26 +1,20 @@
|
|||||||
{ config, options, lib, pkgs, ... }:
|
{ config, options, lib, pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
ytdlpAudio = pkgs.writeScriptBin "yt-dlp-audio" ''
|
|
||||||
${pkgs.yt-dlp}/bin/yt-dlp --config-location "${./config/yt-dlp-audio.conf}" $@
|
|
||||||
'';
|
|
||||||
|
|
||||||
dotfilesAsStorePath = config.lib.file.mkOutOfStoreSymlink config.home.mutableFile."library/dotfiles".path;
|
dotfilesAsStorePath = config.lib.file.mkOutOfStoreSymlink config.home.mutableFile."library/dotfiles".path;
|
||||||
getDotfiles = path: "${dotfilesAsStorePath}/${path}";
|
getDotfiles = path: "${dotfilesAsStorePath}/${path}";
|
||||||
|
|
||||||
musicDir = config.xdg.userDirs.music;
|
|
||||||
playlistsDir = "${musicDir}/playlists";
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
imports = [
|
||||||
|
./modules/keys.nix
|
||||||
|
./modules/git.nix
|
||||||
|
./modules/music.nix
|
||||||
|
];
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
vscodium-fhs # Visual Studio-lite and for those who suffer from Visual Studio withdrawal.
|
vscodium-fhs # Visual Studio-lite and for those who suffer from Visual Studio withdrawal.
|
||||||
hledger # Trying to be a good accountant.
|
hledger # Trying to be a good accountant.
|
||||||
hledger-utils # For extra trying to be a better accountant.
|
hledger-utils # For extra trying to be a better accountant.
|
||||||
|
|
||||||
# My music-related tools.
|
|
||||||
songrec # SHAZAM!
|
|
||||||
ytdlpAudio # My custom script for downloading music with yt-dlp.
|
|
||||||
picard # Graphical beets.
|
|
||||||
];
|
];
|
||||||
|
|
||||||
fonts.fontconfig.enable = true;
|
fonts.fontconfig.enable = true;
|
||||||
@ -35,211 +29,12 @@ in
|
|||||||
|
|
||||||
programs.bash.sessionVariables.PATH = "${config.home.mutableFile."library/dotfiles".path}/bin\${PATH:+:$PATH}";
|
programs.bash.sessionVariables.PATH = "${config.home.mutableFile."library/dotfiles".path}/bin\${PATH:+:$PATH}";
|
||||||
|
|
||||||
# My SSH client configuration. It is encouraged to keep matches and extra
|
|
||||||
# configurations included in a separate `config.d/` directory. This enables
|
|
||||||
# it to easily backup the certain files which is most likely what we're
|
|
||||||
# mostly configuring anyways.
|
|
||||||
programs.ssh = {
|
|
||||||
enable = true;
|
|
||||||
includes = [ "config.d/*" ];
|
|
||||||
extraConfig = ''
|
|
||||||
AddKeysToAgent confirm 15m
|
|
||||||
ForwardAgent no
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# My GPG client. It has to make sure the keys are not generated and has to be
|
|
||||||
# backed up somewhere.
|
|
||||||
#
|
|
||||||
# If you want to know how to manage GPG PROPERLY for the nth time, read the
|
|
||||||
# following document:
|
|
||||||
# https://alexcabal.com/creating-the-perfect-gpg-keypair
|
|
||||||
programs.gpg = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# This is just made to be a starting point, per se.
|
|
||||||
mutableKeys = true;
|
|
||||||
mutableTrust = true;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
default-key = "0xADE0C41DAB221FCC";
|
|
||||||
keyid-format = "0xlong";
|
|
||||||
with-fingerprint = true;
|
|
||||||
no-comments = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# My Git credentials.
|
|
||||||
programs.git = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.gitFull;
|
|
||||||
lfs.enable = true;
|
|
||||||
userName = "Gabriel Arazas";
|
|
||||||
userEmail = "foodogsquared@foodogsquared.one";
|
|
||||||
signing.key = "ADE0C41DAB221FCC";
|
|
||||||
extraConfig = {
|
|
||||||
# This is taken from the official Git book, for future references.
|
|
||||||
sendemail = {
|
|
||||||
smtpserver = "smtp.mailbox.org";
|
|
||||||
smtpencryption = "tls";
|
|
||||||
smtpserverport = 587;
|
|
||||||
smtpuser = "foodogsquared@mailbox.org";
|
|
||||||
};
|
|
||||||
|
|
||||||
alias = {
|
|
||||||
unstage = "reset HEAD --";
|
|
||||||
quick-rebase = "rebase --interactive --autostash --committer-date-is-author-date";
|
|
||||||
};
|
|
||||||
|
|
||||||
init.defaultBranch = "main";
|
|
||||||
|
|
||||||
# Shorthand for popular forges ala-Nix flake URL inputs. It's just a fun
|
|
||||||
# little part of the config.
|
|
||||||
url = {
|
|
||||||
"https://github.com/".insteadOf = [ "gh:" "github:" ];
|
|
||||||
"https://gitlab.com/".insteadOf = [ "gl:" "gitlab:" ];
|
|
||||||
"https://gitlab.gnome.org/".insteadOf = [ "gnome:" ];
|
|
||||||
"https://invent.kde.org/".insteadOf = [ "kde:" ];
|
|
||||||
"https://git.sr.ht/".insteadOf = [ "sh:" "sourcehut:" ];
|
|
||||||
"https://git.savannah.nongnu.org/git/".insteadOf = [ "sv:" "savannah:" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# My GitHub CLI setup.
|
|
||||||
programs.gh = {
|
|
||||||
enable = true;
|
|
||||||
extensions = with pkgs; [
|
|
||||||
gh-eco
|
|
||||||
gh-dash
|
|
||||||
];
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
git_protocol = "ssh";
|
|
||||||
prompt = "enabled";
|
|
||||||
|
|
||||||
aliases = {
|
|
||||||
pc = "pr checkout";
|
|
||||||
pv = "pr view";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Making my favorite terminal multiplexer right now.
|
# Making my favorite terminal multiplexer right now.
|
||||||
programs.zellij.settings = {
|
programs.zellij.settings = {
|
||||||
default_layout = "editor";
|
default_layout = "editor";
|
||||||
layout_dir = builtins.toString ./config/zellij/layouts;
|
layout_dir = builtins.toString ./config/zellij/layouts;
|
||||||
};
|
};
|
||||||
|
|
||||||
# My music player setup, completely configured with Nix!
|
|
||||||
programs.beets = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
library = "${musicDir}/library.db";
|
|
||||||
plugins = [
|
|
||||||
"acousticbrainz"
|
|
||||||
"chroma"
|
|
||||||
"edit"
|
|
||||||
"export"
|
|
||||||
"fetchart"
|
|
||||||
"fromfilename"
|
|
||||||
"fuzzy"
|
|
||||||
"mbsync"
|
|
||||||
"playlist"
|
|
||||||
"scrub"
|
|
||||||
"smartplaylist"
|
|
||||||
];
|
|
||||||
ignore_hidden = true;
|
|
||||||
directory = musicDir;
|
|
||||||
ui.color = true;
|
|
||||||
|
|
||||||
import = {
|
|
||||||
move = true;
|
|
||||||
link = false;
|
|
||||||
resume = true;
|
|
||||||
incremental = true;
|
|
||||||
group_albums = true;
|
|
||||||
log = "beets.log";
|
|
||||||
};
|
|
||||||
|
|
||||||
match.ignore_video_tracks = true;
|
|
||||||
|
|
||||||
# Plugins configuration.
|
|
||||||
fuzzy.prefix = "-";
|
|
||||||
scrub.auto = true;
|
|
||||||
smartplaylist = {
|
|
||||||
relative_to = musicDir;
|
|
||||||
playlist_dir = playlistsDir;
|
|
||||||
playlists = [
|
|
||||||
{
|
|
||||||
name = "all.m3u8";
|
|
||||||
query = "";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "released-in-$year.m3u8";
|
|
||||||
query = "year:2000..2023";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.mopidy = {
|
|
||||||
enable = true;
|
|
||||||
extensionPackages = with pkgs; [
|
|
||||||
mopidy-beets
|
|
||||||
mopidy-funkwhale
|
|
||||||
mopidy-internetarchive
|
|
||||||
mopidy-iris
|
|
||||||
mopidy-local
|
|
||||||
mopidy-mpd
|
|
||||||
mopidy-mpris
|
|
||||||
mopidy-youtube
|
|
||||||
];
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
http = {
|
|
||||||
hostname = "127.0.0.1";
|
|
||||||
port = 6680;
|
|
||||||
default_app = "iris";
|
|
||||||
};
|
|
||||||
|
|
||||||
file = {
|
|
||||||
enabled = true;
|
|
||||||
media_dirs = [
|
|
||||||
"$XDG_MUSIC_DIR|Music"
|
|
||||||
"~/library/music|Library"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
internetarchive = {
|
|
||||||
enabled = true;
|
|
||||||
browse_limit = 150;
|
|
||||||
search_limit = 150;
|
|
||||||
collections = [
|
|
||||||
"fav-foo-dogsquared"
|
|
||||||
"audio"
|
|
||||||
"etree"
|
|
||||||
"audio_music"
|
|
||||||
"audio_foreign"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
m3u = {
|
|
||||||
enabled = true;
|
|
||||||
base_dir = musicDir;
|
|
||||||
playlists_dir = playlistsDir;
|
|
||||||
default_encoding = "utf-8";
|
|
||||||
default_extension = ".m3u8";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.ncmpcpp = {
|
|
||||||
enable = true;
|
|
||||||
mpdMusicDir = musicDir;
|
|
||||||
};
|
|
||||||
|
|
||||||
# My preferred file indexing service.
|
# My preferred file indexing service.
|
||||||
services.recoll = {
|
services.recoll = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@ -269,7 +64,6 @@ in
|
|||||||
desktop = {
|
desktop = {
|
||||||
enable = true;
|
enable = true;
|
||||||
graphics.enable = true;
|
graphics.enable = true;
|
||||||
audio.enable = true;
|
|
||||||
video.enable = true;
|
video.enable = true;
|
||||||
documents.enable = true;
|
documents.enable = true;
|
||||||
};
|
};
|
||||||
|
59
users/home-manager/foo-dogsquared/modules/git.nix
Normal file
59
users/home-manager/foo-dogsquared/modules/git.nix
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# My Git credentials.
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.gitFull;
|
||||||
|
lfs.enable = true;
|
||||||
|
userName = config.accounts.email.accounts.personal.realName;
|
||||||
|
userEmail = config.accounts.email.accounts.personal.address;
|
||||||
|
signing.key = "ADE0C41DAB221FCC";
|
||||||
|
extraConfig = {
|
||||||
|
# This is taken from the official Git book, for future references.
|
||||||
|
sendemail = {
|
||||||
|
smtpserver = "smtp.mailbox.org";
|
||||||
|
smtpencryption = "tls";
|
||||||
|
smtpserverport = 587;
|
||||||
|
smtpuser = "foodogsquared@mailbox.org";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias = {
|
||||||
|
unstage = "reset HEAD --";
|
||||||
|
quick-rebase = "rebase --interactive --autostash --committer-date-is-author-date";
|
||||||
|
};
|
||||||
|
|
||||||
|
init.defaultBranch = "main";
|
||||||
|
|
||||||
|
# Shorthand for popular forges ala-Nix flake URL inputs. It's just a fun
|
||||||
|
# little part of the config.
|
||||||
|
url = {
|
||||||
|
"https://github.com/".insteadOf = [ "gh:" "github:" ];
|
||||||
|
"https://gitlab.com/".insteadOf = [ "gl:" "gitlab:" ];
|
||||||
|
"https://gitlab.gnome.org/".insteadOf = [ "gnome:" ];
|
||||||
|
"https://invent.kde.org/".insteadOf = [ "kde:" ];
|
||||||
|
"https://git.sr.ht/".insteadOf = [ "sh:" "sourcehut:" ];
|
||||||
|
"https://git.savannah.nongnu.org/git/".insteadOf = [ "sv:" "savannah:" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# My GitHub CLI setup.
|
||||||
|
programs.gh = {
|
||||||
|
enable = true;
|
||||||
|
extensions = with pkgs; [
|
||||||
|
gh-eco
|
||||||
|
gh-dash
|
||||||
|
];
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
git_protocol = "ssh";
|
||||||
|
prompt = "enabled";
|
||||||
|
|
||||||
|
aliases = {
|
||||||
|
pc = "pr checkout";
|
||||||
|
pv = "pr view";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
37
users/home-manager/foo-dogsquared/modules/keys.nix
Normal file
37
users/home-manager/foo-dogsquared/modules/keys.nix
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# My SSH client configuration. It is encouraged to keep matches and extra
|
||||||
|
# configurations included in a separate `config.d/` directory. This enables
|
||||||
|
# it to easily backup the certain files which is most likely what we're
|
||||||
|
# mostly configuring anyways.
|
||||||
|
programs.ssh = {
|
||||||
|
enable = true;
|
||||||
|
includes = [ "config.d/*" ];
|
||||||
|
extraConfig = ''
|
||||||
|
AddKeysToAgent confirm 15m
|
||||||
|
ForwardAgent no
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# My GPG client. It has to make sure the keys are not generated and has to be
|
||||||
|
# backed up somewhere.
|
||||||
|
#
|
||||||
|
# If you want to know how to manage GPG PROPERLY for the nth time, read the
|
||||||
|
# following document:
|
||||||
|
# https://alexcabal.com/creating-the-perfect-gpg-keypair
|
||||||
|
programs.gpg = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# This is just made to be a starting point, per se.
|
||||||
|
mutableKeys = true;
|
||||||
|
mutableTrust = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
default-key = "0xADE0C41DAB221FCC";
|
||||||
|
keyid-format = "0xlong";
|
||||||
|
with-fingerprint = true;
|
||||||
|
no-comments = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
131
users/home-manager/foo-dogsquared/modules/music.nix
Normal file
131
users/home-manager/foo-dogsquared/modules/music.nix
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
ytdlpAudio = pkgs.writeScriptBin "yt-dlp-audio" ''
|
||||||
|
${pkgs.yt-dlp}/bin/yt-dlp --config-location "${./config/yt-dlp-audio.conf}" $@
|
||||||
|
'';
|
||||||
|
|
||||||
|
musicDir = config.xdg.userDirs.music;
|
||||||
|
playlistsDir = "${musicDir}/playlists";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
songrec # SHAZAM!
|
||||||
|
ytdlpAudio # My custom script for downloading music with yt-dlp.
|
||||||
|
picard # Graphical beets.
|
||||||
|
];
|
||||||
|
|
||||||
|
# Enable the desktop audio profile for extra auditorial goodies.
|
||||||
|
profiles.desktop.audio.enable = true;
|
||||||
|
|
||||||
|
# My music player setup, completely configured with Nix!
|
||||||
|
programs.beets = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
library = "${musicDir}/library.db";
|
||||||
|
plugins = [
|
||||||
|
"acousticbrainz"
|
||||||
|
"chroma"
|
||||||
|
"edit"
|
||||||
|
"export"
|
||||||
|
"fetchart"
|
||||||
|
"fromfilename"
|
||||||
|
"fuzzy"
|
||||||
|
"mbsync"
|
||||||
|
"playlist"
|
||||||
|
"scrub"
|
||||||
|
"smartplaylist"
|
||||||
|
];
|
||||||
|
ignore_hidden = true;
|
||||||
|
directory = musicDir;
|
||||||
|
ui.color = true;
|
||||||
|
|
||||||
|
import = {
|
||||||
|
move = true;
|
||||||
|
link = false;
|
||||||
|
resume = true;
|
||||||
|
incremental = true;
|
||||||
|
group_albums = true;
|
||||||
|
log = "beets.log";
|
||||||
|
};
|
||||||
|
|
||||||
|
match.ignore_video_tracks = true;
|
||||||
|
|
||||||
|
# Plugins configuration.
|
||||||
|
fuzzy.prefix = "-";
|
||||||
|
scrub.auto = true;
|
||||||
|
smartplaylist = {
|
||||||
|
relative_to = musicDir;
|
||||||
|
playlist_dir = playlistsDir;
|
||||||
|
playlists = [
|
||||||
|
{
|
||||||
|
name = "all.m3u8";
|
||||||
|
query = "";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "released-in-$year.m3u8";
|
||||||
|
query = "year:2000..2023";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.mopidy = {
|
||||||
|
enable = true;
|
||||||
|
extensionPackages = with pkgs; [
|
||||||
|
mopidy-beets
|
||||||
|
mopidy-funkwhale
|
||||||
|
mopidy-internetarchive
|
||||||
|
mopidy-iris
|
||||||
|
mopidy-local
|
||||||
|
mopidy-mpd
|
||||||
|
mopidy-mpris
|
||||||
|
mopidy-youtube
|
||||||
|
];
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
http = {
|
||||||
|
hostname = "127.0.0.1";
|
||||||
|
port = 6680;
|
||||||
|
default_app = "iris";
|
||||||
|
};
|
||||||
|
|
||||||
|
file = {
|
||||||
|
enabled = true;
|
||||||
|
media_dirs = [
|
||||||
|
"$XDG_MUSIC_DIR|Music"
|
||||||
|
"~/library/music|Library"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
internetarchive = {
|
||||||
|
enabled = true;
|
||||||
|
browse_limit = 150;
|
||||||
|
search_limit = 150;
|
||||||
|
collections = [
|
||||||
|
"fav-foo-dogsquared"
|
||||||
|
"audio"
|
||||||
|
"etree"
|
||||||
|
"audio_music"
|
||||||
|
"audio_foreign"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
m3u = {
|
||||||
|
enabled = true;
|
||||||
|
base_dir = musicDir;
|
||||||
|
playlists_dir = playlistsDir;
|
||||||
|
default_encoding = "utf-8";
|
||||||
|
default_extension = ".m3u8";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Configure a MPD client.
|
||||||
|
programs.ncmpcpp = {
|
||||||
|
enable = true;
|
||||||
|
mpdMusicDir = musicDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user