Compare commits

...

11 Commits

Author SHA1 Message Date
KeksNino 438ce4c58e massive restructure 2026-07-30 01:02:17 +02:00
KeksNino 0b0634530f merge music-server and desktop repo 2026-07-30 00:30:09 +02:00
KeksNino 03a85fc670 restructure 2026-07-29 23:48:23 +02:00
KeksNino 2c218aef72 add bcdl-free flake 2026-07-29 21:05:23 +02:00
KeksNino 01af2f43ea add scripts 2026-07-29 16:50:43 +02:00
KeksNino 5a61ac8367 remove nixpkgs-patcher 2026-07-28 20:56:32 +02:00
KeksNino 421b9a7cd6 remove slskd patch since patches are now in upstream
format all files with nixfmt
2026-07-28 20:27:55 +02:00
KeksNino 0a770e4094 add systemd timers, add beets config, add smb share 2026-07-25 00:09:38 +02:00
KeksNino 8cfe8b7c6f add navidrome, nfs and slskd 2026-07-23 01:24:08 +02:00
KeksNino 497ca74787 add files 2026-07-22 19:57:08 +02:00
KeksNino 83137ba3f3 Initial commit 2026-07-22 19:37:33 +02:00
21 changed files with 648 additions and 48 deletions
+22 -44
View File
@@ -32,21 +32,25 @@
gsr-ui, gsr-ui,
bcdl-free, bcdl-free,
... ...
}: }@inputs:
let let
system = "x86_64-linux"; system = "x86_64-linux";
in in
{ {
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { nixosConfigurations.desktop = nixpkgs.lib.nixosSystem {
inherit system;
specialArgs = { specialArgs = {
inherit sls-steam; inherit
sls-steam
bcdl-free
xremap-flake
system
;
}; };
modules = [ modules = [
./configuration.nix ./hosts/desktop/configuration.nix
./hardware-configuration.nix ./hosts/desktop/hardware-configuration.nix
./modules/common.nix
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
xremap-flake.nixosModules.default
gsr-ui.nixosModules.default gsr-ui.nixosModules.default
{ {
nixpkgs.overlays = [ nixpkgs.overlays = [
@@ -54,55 +58,29 @@
millennium.overlays.default millennium.overlays.default
]; ];
environment.systemPackages = [ bcdl-free.packages.${system}.default ]; home-manager.users.user = import ./hosts/desktop/home-manager/home.nix;
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.user = import ./home-manager/home.nix;
home-manager.extraSpecialArgs = { home-manager.extraSpecialArgs = {
inherit zen-browser; inherit zen-browser;
}; };
home-manager.backupFileExtension = "backup";
programs.gpu-screen-recorder = { programs.gpu-screen-recorder = {
package = gsr-ui.packages.${system}.gpu-screen-recorder; package = gsr-ui.packages.${system}.gpu-screen-recorder;
enable = true; enable = true;
ui.enable = true; ui.enable = true;
}; };
}
# xremap ];
services.xremap.enable = true;
services.xremap.withHypr = true;
services.xremap.config.modmap = [
{
name = "Global";
remap = {
"CapsLock" = "Esc";
}; };
} nixosConfigurations.music-server = nixpkgs.lib.nixosSystem {
]; specialArgs = { inherit inputs bcdl-free system; };
modules = [
services.xremap.config.keymap = [ ./hosts/music-server/configuration.nix
./hosts/music-server/hardware-configuration.nix
./modules/common.nix
home-manager.nixosModules.home-manager
{ {
name = "curly braces"; home-manager.users.user = import ./hosts/music-server/home-manager/home.nix;
remap = {
"KEY_SEMICOLON" = "RIGHTALT-KEY_7";
}; # ä -> }
remap = {
"KEY_APOSTROPHE" = "RIGHTALT-KEY_0";
}; # ö -> {
remap = {
"RIGHTALT-KEY_A" = "KEY_APOSTROPHE";
}; # altgr + a -> ä
remap = {
"RIGHTALT-KEY_W" = "KEY_SEMICOLON";
}; # altgr + w -> ö
}
];
} }
]; ];
}; };
@@ -6,7 +6,7 @@
... ...
}: }:
let let
cpuid-fault-emulation = pkgs.callPackage ./pkgs/cpuid-fault-emulation { cpuid-fault-emulation = pkgs.callPackage ../../pkgs/cpuid-fault-emulation {
kernel = config.boot.kernelPackages.kernel; kernel = config.boot.kernelPackages.kernel;
}; };
in in
@@ -15,6 +15,8 @@ in
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
./packages.nix ./packages.nix
../../modules/scripts.nix
../../modules/desktop/xremap.nix
]; ];
# DISKS # DISKS
@@ -103,7 +105,7 @@ in
'') '')
]; ];
networking.hostName = "nixos"; # Define your hostname. networking.hostName = "nixos-desktop";
networking.firewall.enable = false; networking.firewall.enable = false;
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
+87
View File
@@ -0,0 +1,87 @@
{
pkgs,
...
}:
{
imports = [
./hardware-configuration.nix
./packages.nix
../../modules/server
];
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
fileSystems."/media/music" = {
device = "/dev/disk/by-uuid/8e6ae06e-a4b5-4ac8-ad15-cb288b14715f";
fsType = "ext4";
};
fileSystems."/home/user/backup" = {
device = "/dev/disk/by-uuid/db7d96f1-5c72-42dc-abc1-00de9b73f017";
fsType = "ext4";
};
networking.hostId = "6054e036";
networking.hostName = "nixos-music";
networking.networkmanager.enable = true;
networking.firewall.enable = false;
time.timeZone = "Europe/Berlin";
i18n.defaultLocale = "en_US.UTF-8";
console = {
font = "Lat2-Terminus16";
keyMap = "de";
};
programs.fish.enable = true;
users.users.user = {
isNormalUser = true;
description = "user";
uid = 1000;
extraGroups = [
"networkmanager"
"wheel"
"docker"
];
shell = pkgs.fish;
};
services.tailscale.enable = true;
services.rsync.enable = true;
programs.nix-ld.enable = true;
programs.nh.enable = true;
programs.neovim.enable = true;
programs.tmux.enable = true;
programs.bat.enable = true;
programs.git = {
enable = true;
config = {
user = {
name = "KeksNino";
email = "KeksNino@proton.me";
};
init = {
defaultBranch = "main";
};
push = {
autoSetupRemote = true;
};
};
};
services.openssh = {
enable = true;
openFirewall = true;
settings = {
PasswordAuthentication = false;
PermitRootLogin = "no";
};
};
system.stateVersion = "26.05";
}
@@ -0,0 +1,61 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"xhci_pci"
"ahci"
"usb_storage"
"uas"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "zpool/root";
fsType = "zfs";
};
fileSystems."/var" = {
device = "zpool/var";
fsType = "zfs";
};
fileSystems."/nix" = {
device = "zpool/nix";
fsType = "zfs";
};
fileSystems."/home" = {
device = "zpool/home";
fsType = "zfs";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/FCFD-4472";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
};
swapDevices = [ ];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+52
View File
@@ -0,0 +1,52 @@
{
programs.beets.enable = true;
# programs.beets.package = pkgs.beets.override {
# pluginOverrides = {
# filetote = {
# enable = true;
# };
# };
# };
programs.beets.settings = {
directory = "/home/user/Music/Tracks";
plugins = [
"fetchart"
"badfiles"
"edit"
"fish"
"hook"
];
import = {
copy = false;
move = true;
autotag = false;
write = true;
};
paths = {
default = "$albumartist/$album/$track. $artist - $title";
};
fetchart = {
auto = true;
sources = [ "filesystem" ];
};
badfiles = {
check_on_import = true;
};
hook = {
hooks = [
{
event = "item_imported";
command = "echo test";
}
];
};
};
}
+61
View File
@@ -0,0 +1,61 @@
{ pkgs, config, ... }:
{
imports = [
./beets.nix
];
home.username = "user";
home.homeDirectory = "/home/user";
programs.yazi.enable = true;
programs.yazi.enableFishIntegration = true;
programs.fzf.enable = true;
programs.fzf.enableFishIntegration = true;
programs.zoxide.enable = true;
programs.zoxide.enableFishIntegration = true;
programs.gcc.enable = true;
programs.eza = {
enable = true;
enableFishIntegration = true;
git = true;
icons = "always";
extraOptions = [
"-1"
];
};
programs.btop.enable = true;
programs.fastfetch.enable = true;
programs.fd.enable = true;
home.sessionVariables = {
EDITOR = "nvim";
};
programs.fish = {
enable = true;
interactiveShellInit = ''
set -g fish_key_bindings fish_hybrid_key_bindings
set fish_greeting
'';
shellAliases = {
ls = "eza -al --no-time --no-user --no-permissions --no-filesize";
ll = "eza -la";
cat = "bat";
cd = "z";
cp = "cp -v";
ff = "fastfetch";
grep = "grep -i";
mv = "mv -v";
n = "nvim";
r = "rsync -avh --info=progress2";
rm = "gomi";
};
};
home.stateVersion = "26.05";
}
+30
View File
@@ -0,0 +1,30 @@
{ pkgs, ... }: {
environment.systemPackages = (
with pkgs;
[
wget
nixfmt
tree-sitter
lsof
exiftool
trash-cli
ffmpeg
unzip
scdl
aria2
nodejs
gomi
bun
croc
mp3val
flac
(python314.withPackages (
ps: with ps; [
requests
python-dotenv
]
))
]
);
}
+9
View File
@@ -0,0 +1,9 @@
{ system, bcdl-free, ... }:
{
environment.systemPackages = [ bcdl-free.packages.${system}.default ];
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.backupFileExtension = "backup";
}
+37
View File
@@ -0,0 +1,37 @@
{ xremap-flake, ... }:
{
imports = [
xremap-flake.nixosModules.default
];
services.xremap.enable = true;
services.xremap.withHypr = true;
services.xremap.config.modmap = [
{
name = "Global";
remap = {
"CapsLock" = "Esc";
};
}
];
services.xremap.config.keymap = [
{
name = "curly braces";
remap = {
"KEY_SEMICOLON" = "RIGHTALT-KEY_7";
}; # ä -> }
remap = {
"KEY_APOSTROPHE" = "RIGHTALT-KEY_0";
}; # ö -> {
remap = {
"RIGHTALT-KEY_A" = "KEY_APOSTROPHE";
}; # altgr + a -> ä
remap = {
"RIGHTALT-KEY_W" = "KEY_SEMICOLON";
}; # altgr + w -> ö
}
];
}
+25
View File
@@ -0,0 +1,25 @@
{ pkgs, ... }:
{
environment.systemPackages = [
(pkgs.writeShellScriptBin "scan" ''
find . -type f \( -iname "*.mp3" -o -iname "*.flac" -o -iname "*.m4a" -o -iname "*.ogg" -o -iname "*.wav" -o -iname "*.aiff" \) -print0 |
xargs -0 -P"$(nproc)" -I{} bash -c '
if ffprobe -v quiet -show_entries format_tags \
-of default=nw=1:nk=1 "$1" 2>/dev/null |
grep -q -E "Visit https?://[^ ]+"; then
echo "Match found in: $1"
fi
' _ {} | sort
'')
(pkgs.writeShellScriptBin "2scan" ''
find . -type f \( -iname "*.mp3" -o -iname "*.flac" -o -iname "*.m4a" -o -iname "*.ogg" -o -iname "*.wav" -o -iname "*.aiff" \) -print0 |
xargs -0 -P"$(nproc)" -I{} sh -c '
if ! ffprobe -v quiet -show_entries format_tags \
-of default=nw=1:nk=1 "$1" 2>/dev/null |
grep -q -E "Visit https?://[^ ]+"; then
echo "Match found in: $1"
fi
' _ {}
'')
];
}
+11
View File
@@ -0,0 +1,11 @@
{
imports = [
./slskd.nix
./navidrome.nix
./nfs.nix
./services.nix
./smb.nix
./zfs.nix
../scripts.nix
];
}
+20
View File
@@ -0,0 +1,20 @@
{ lib, ... }:
{
services.navidrome = {
enable = true;
user = "user";
settings = {
MusicFolder = "/home/user/Music";
PlaylistsPath = "Playlists";
Address = "0.0.0.0";
ScanSchedule = "@every 24h";
EnableInsightsCollector = false;
Scanner.PurgeMissing = "always";
};
};
systemd.services.navidrome.serviceConfig = {
ProtectHome = lib.mkForce false;
};
}
+15
View File
@@ -0,0 +1,15 @@
{
services.nfs.server = {
enable = true;
exports = {
"/media/music" = {
"192.168.132.0/24" = [
"rw"
"async"
"no_subtree_check"
"fsid=1"
];
};
};
};
}
+31
View File
@@ -0,0 +1,31 @@
{ pkgs, ... }:
{
systemd.timers."bc-wishlist-scraper" = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "daily";
Unit = "bc-wishlist-scraper.service";
};
};
systemd.services."bc-wishlist-scraper" = {
script = ''
${pkgs.bash}/bin/bash /home/user/bc-wishlist-scraper/run.sh
'';
};
systemd.user.timers."scdl" = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "daily";
Unit = "scdl.service";
};
};
systemd.user.services."scdl" = {
script = ''
cd ~/Music/scdl && ${pkgs.scdl}/bin/scdl me -f -c --download-archive archive.txt
'';
};
}
+118
View File
@@ -0,0 +1,118 @@
{ pkgs, ... }:
{
services.slskd = {
enable = true;
environmentFile = /home/user/slskd_secrets;
user = "user";
settings = {
remote_configuration = true;
remote_file_management = true;
directories = {
downloads = "/media/music/Soulseek";
};
shares = {
directories = [
"/media/music/Tracks"
"/media/music/Tracks2"
"/media/music/samples"
];
};
rooms = [
"Rare Music"
"nicotine"
"! ! LGBTQ+ ! !"
"lossless"
"Linux"
"Breakcore"
"Jungle"
];
transfers = {
upload = {
speed_limit = 3700;
};
groups = {
blacklisted = {
members = [
"relay"
"smbd"
];
};
user_defined = {
my_buddies = {
upload = {
priority = 1;
strategy = "firstinfirstout";
slots = 1000;
};
members = [
"noamifur"
"mesityl"
"diphenhydramine"
"monfi"
];
};
};
};
};
soulseek = {
description = ''
Fuck DRM. Fuck Spotify
Discord: keksnino
https://www.last.fm/user/KeksNino
'';
listen_port = 32895;
};
feature = {
swagger = true;
};
integrations = {
webhooks = {
discord_relay = {
call = {
url = "http://localhost:5001/slskd_webhook";
};
on = [ "UploadFileComplete" ];
timeout = 5000;
retry = {
attempts = 3;
};
};
};
};
retention = {
files = {
incomplete = 20160;
};
};
};
};
systemd.user.services.slskd-speed = {
enable = true;
description = "Soulseek True Speed Shower";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
Environment = "PYTHONUNBUFFERED=1";
Restart = "on-failure";
RestartSec = 30;
StandardOutput = "journal";
StandardError = "journal";
EnvironmentFile = "/home/user/slskd_secrets";
ExecStart = ''
${pkgs.python3}/bin/python3 /home/user/slskd-speed.py \
-u "$SLSKD_SLSK_USERNAME" \
-p "$SLSKD_SLSK_PASSWORD" \
-s 30mbit/s \
--slskd-url http://localhost:5030 \
--slskd-key "$SLSKD_API_KEY" \
--loop \
--poll-interval 30 \
--interval 900
'';
};
};
}
+24
View File
@@ -0,0 +1,24 @@
{
services.samba = {
enable = true;
openFirewall = true;
settings = {
global = {
"workgroup" = "WORKGROUP";
"server string" = "smbnix";
"security" = "user";
"interfaces" = "lo eno1 tailscale0";
"hosts allow" = "192.168.132.0/24 100.64.0.0/10 127.0.0.1 localhost";
"hosts deny" = "0.0.0.0/0";
"guest account" = "nobody";
};
"Music" = {
"path" = "/media/music";
"browseable" = "yes";
"read only" = "no";
"guest ok" = "no";
"valid users" = "user";
};
};
};
}
+39
View File
@@ -0,0 +1,39 @@
{
boot.loader.grub = {
enable = true;
zfsSupport = true;
efiSupport = true;
efiInstallAsRemovable = true;
mirroredBoots = [
{
devices = [ "nodev" ];
path = "/boot";
}
];
};
fileSystems."/" = {
device = "zpool/root";
fsType = "zfs";
};
fileSystems."/nix" = {
device = "zpool/nix";
fsType = "zfs";
};
fileSystems."/var" = {
device = "zpool/var";
fsType = "zfs";
};
fileSystems."/home" = {
device = "zpool/home";
fsType = "zfs";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/FCFD-4472";
fsType = "vfat";
};
boot.zfs.forceImportRoot = false;
services.zfs.autoScrub.enable = true;
swapDevices = [ ];
}