nixos-config/users/home-manager/foo-dogsquared/default.nix

342 lines
8.4 KiB
Nix
Raw Normal View History

{ dotfiles, config, options, lib, pkgs, ... }:
2022-02-02 04:25:03 +00:00
let
yt-dlp-for-audio-config = pkgs.writeText "yt-dlp-for-audio-config" ''
# Don't overwrite for cautious individuals.
--no-overwrite
# To make sure all audio-related.
--extract-audio
--format bestaudio
--audio-format opus
--output '%(track_number,playlist_autonumber)d-%(track,title)s.%(ext)s'
--download-archive archive
# Add all sorts of metadata.
--embed-thumbnail
--add-metadata
'';
yt-dlp-for-audio = pkgs.writeScriptBin "yt-dlp-audio" ''
${pkgs.yt-dlp}/bin/yt-dlp --config-location "${yt-dlp-for-audio-config}" $@
'';
getDotfiles = path: "${dotfiles}/${path}";
musicDir = config.xdg.userDirs.music;
playlistsDir = "${musicDir}/playlists";
2022-11-19 03:05:31 +00:00
in
{
2021-12-08 04:18:37 +00:00
home.packages = with pkgs; [
songrec
vscodium-fhs
neovim
2022-02-02 04:25:03 +00:00
yt-dlp-for-audio
];
2021-12-08 04:18:37 +00:00
fonts.fontconfig.enable = true;
# We're disabling it since the default Atuin integration is
# blocking the Wezterm's shell integration by fetching another
# instance of bash-preexec.
programs.atuin.enableBashIntegration = false;
2022-07-18 23:07:53 +00:00
programs.bash.bashrcExtra = ''
source ${pkgs.wezterm}/etc/profile.d/wezterm.sh
if [[ :$SHELLOPTS: =~ :(vi|emacs): ]]; then
eval "$(${config.programs.atuin.package}/bin/atuin init bash)"
fi
2022-07-18 23:07:53 +00:00
'';
# 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;
2021-12-08 04:18:37 +00:00
package = pkgs.gitFull;
lfs.enable = true;
userName = "Gabriel Arazas";
userEmail = "foodogsquared@foodogsquared.one";
signing.key = "ADE0C41DAB221FCC";
2022-05-20 06:47:09 +00:00
extraConfig = {
# This is taken from the official Git book, for future references.
sendemail = {
smtpserver = "smtp.mailbox.org";
2022-05-20 06:47:09 +00:00
smtpencryption = "tls";
smtpserverport = 587;
smtpuser = "foodogsquared@mailbox.org";
2022-05-20 06:47:09 +00:00
};
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:" ];
};
2022-05-20 06:47:09 +00:00
};
2021-11-27 08:04:01 +00:00
};
# My GitHub CLI setup.
programs.gh = {
enable = true;
extensions = with pkgs; [
gh-eco
gh-dash
];
settings = {
git_protocol = "ssh";
2023-02-05 08:40:23 +00:00
prompt = "enabled";
aliases = {
pc = "pr checkout";
pv = "pr view";
};
};
};
2021-12-08 04:18:37 +00:00
# My music player setup, completely configured with Nix!
programs.beets = {
enable = true;
settings = {
library = "${musicDir}/library.db";
plugins = [
"acousticbrainz"
"fetchart"
"fromfilename"
"chroma"
"deezer"
"edit"
"export"
"fuzzy"
"mbsync"
"playlist"
"scrub"
"smartplaylist"
];
2022-08-07 02:40:37 +00:00
ignore_hidden = true;
directory = musicDir;
2022-08-07 02:40:37 +00:00
ui.color = true;
import = {
2022-08-07 02:40:37 +00:00
move = true;
link = false;
resume = true;
incremental = true;
group_albums = true;
log = "beets.log";
};
match = {
required = "year label";
2022-08-07 02:40:37 +00:00
ignore_video_tracks = true;
};
# Plugins configuration.
fuzzy.prefix = "-";
2022-08-07 02:40:37 +00:00
scrub.auto = true;
smartplaylist = {
relative_to = musicDir;
playlist_dir = playlistsDir;
playlists = [
{
name = "all.m3u8";
query = "";
}
{
name = "released-in-$year.m3u8";
query = "year:2000..2021";
}
];
};
};
};
services.mopidy = {
2021-12-08 04:18:37 +00:00
enable = true;
extensionPackages = with pkgs; [
2022-02-02 04:25:03 +00:00
mopidy-beets
mopidy-funkwhale
mopidy-internetarchive
mopidy-iris
mopidy-local
mopidy-mpd
mopidy-mpris
2022-02-02 04:25:03 +00:00
mopidy-youtube
];
2022-05-20 06:47:09 +00:00
settings = {
2022-02-02 04:25:03 +00:00
http = {
hostname = "0.0.0.0";
};
file = {
enabled = true;
media_dirs = [
"$XDG_MUSIC_DIR|Music"
"~/library/music|Library"
2022-02-02 04:25:03 +00:00
];
};
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";
};
2022-02-02 04:25:03 +00:00
};
};
programs.ncmpcpp = {
enable = true;
mpdMusicDir = musicDir;
};
# My preferred file indexing service.
services.recoll = {
enable = true;
startAt = "daily";
settings = {
topdirs = "~/Downloads ~/Documents ~/library";
"skippedNames+" = "node_modules";
"~/library/projects" = {
"skippedNames+" = ".editorconfig .gitignore result flake.lock go.sum";
};
"~/library/projects/software" = {
"skippedNames+" = "target result";
};
};
2021-12-08 04:18:37 +00:00
};
# My custom modules.
profiles = {
2021-12-02 14:02:29 +00:00
dev = {
enable = true;
shell.enable = true;
2022-04-30 12:30:22 +00:00
extras.enable = true;
2021-12-02 14:02:29 +00:00
};
editors.emacs.enable = true;
2021-11-30 01:03:05 +00:00
desktop = {
enable = true;
graphics.enable = true;
audio.enable = true;
2021-12-19 09:39:18 +00:00
multimedia.enable = true;
2021-11-30 01:03:05 +00:00
};
research.enable = true;
};
services.bleachbit = {
enable = true;
cleaners = [
"bash.history"
"winetricks.temporary_files"
"wine.tmp"
"discord.history"
"google_earth.temporary_files"
"google_toolbar.search_history"
"thumbnails.cache"
"zoom.logs"
];
withChatCleanup = true;
};
systemd.user.sessionVariables = {
2022-02-05 10:58:42 +00:00
MANPAGER = "nvim +Man!";
EDITOR = "nvim";
};
2022-02-02 04:25:03 +00:00
# WHOA! Even browsers with extensions can be declarative!
programs.brave = {
enable = true;
extensions = [
{ id = "dbepggeogbaibhgnhhndojpepiihcmeb"; } # Vimium
{ id = "ekhagklcjbdpajgpjgmbionohlpdbjgc"; } # Zotero connector
{ id = "jfnifeihccihocjbfcfhicmmgpjicaec"; } # GSConnect
{ id = "aapbdbdomjkkjkaonfhkkikfgjllcleb"; } # Google Translate
2022-02-02 04:25:03 +00:00
{ id = "egpjdkipkomnmjhjmdamaniclmdlobbo"; } # Firenvim
{ id = "gknkbkaapnhpmkcgkmdekdffgcddoiel"; } # Open Access Button
{ id = "fpnmgdkabkmnadcjpehmlllkndpkmiak"; } # Wayback Machine
2022-02-05 10:58:42 +00:00
{ id = "gphhapmejobijbbhgpjhcjognlahblep"; } # GNOME Shell integration
{ id = "haebnnbpedcbhciplfhjjkbafijpncjl"; } # TinEye Reverse Image Search
{ id = "dhdgffkkebhmkfjojejmpbldmpobfkfo"; } # Tampermonkey
{ id = "kkmlkkjojmombglmlpbpapmhcaljjkde"; } # Zhongwen
{ id = "nngceckbapebfimnlniiiahkandclblb"; } # Bitwarden
{ id = "oldceeleldhonbafppcapldpdifcinji"; } # LanguageTool checker
2022-02-02 04:25:03 +00:00
];
};
home.stateVersion = "22.11";
2022-05-20 06:47:09 +00:00
xdg.userDirs = {
enable = true;
createDirectories = true;
};
# All of the personal configurations.
xdg.configFile = {
"doom".source = getDotfiles "emacs";
"kitty".source = getDotfiles "kitty";
"lf".source = getDotfiles "lf";
"nvim".source = getDotfiles "nvim";
"wezterm".source = getDotfiles "wezterm";
};
2021-11-27 08:04:01 +00:00
}